The HOST API
for HERON Module Carriers
Giving you a simple to use and consistent interface to your HERON system from a host PC. It removes the need to understand the intricacies of the hardware or the device driver.
- The HUNT ENGINEERING Host API is a common interface between various host Operating systems and any HERON module carrier.
- Supports all HUNT ENGINEERING Host boards
- Provides hardware abstraction for the host through a simple, high-performance library
- optimized code
- full use of hardware features (such as Master Mode etc)
- easily switch to another carrier
- What does it do for me?
Host-API provides a host computer with a low-level software interface to HUNT ENGINEERING hardware. It controls access to all the resources the host can access typically high-speed FIFO interfaces, JTAG debug controllers, and other hardware features such as built-in test facilities.
Host-API has been ported to many common operating systems. By providing a common interface across all of these it facilitates migrating an application from a development environment to a production system, possibly with a different operating system.
It also provides abstraction from the hardware, allowing the users program to be ported from one hardware platform to another with near-zero effort.
- When would I use it?
Host-API is the only recommended method for accessing the facilities of HUNT ENGINEERING hardware. It is used in a number of ways
- All of the System utilities such as HeartConf, Hrn_fpga etc use Host-API
- During debug, Code Composer uses Host-API to access the JTAG controller to debug the system
- Server/Loader uses it to access the high-speed FIFOs for booting the system or providing stdio facilities
- Developers may include Host-API within their application, giving access to the hardware typically to the high-speed FIFOs.
- Which version do I need?
During system development, the Windows version of Host-API would be used. When your system is deployed, you may wish to switch to another version of the Host-API perhaps Linux. These are included in the standard distribution.
- Which Operating Systems are supported?
During system development, the Windows version of Host-API would be used, this supports Win2000, Win XP, Windows XP64, Vista and Vista 64. This is where the DSP compile environment, and the FPGA development tools run.
Linux (Redhat Linux 7.1 or V9.0 and Fedora Core 2 - 7) is supported for a Host PC, as an environment where a DSP application that has been developed under Windows, can be deployed using the HUNT ENGINEERING Server/Loader, or your own host based application program.
- How is it structured?
Host-API uses a simple set of functions to provide access to "devices" implemented in the hardware. Exclusive access is guaranteed through the use of the HeOpen function to lock a resource HeClose frees it when it is no longer required. This is key to Host-APIs ability to manage several devices for multiple requesting clients.
Once a device has been requested and granted it is accessed using the HeRead & HeWrite functions. These are asynchronous program execution will continue even if the I/O transfer has not completed. This allows the host to perform other useful work while the transfer is in progress; the application can use HeTestIo to check whether the transfer is complete, or HeWaitForIo to stall until it has.
Host-API is implemented in the best way for an operating system for some (eg Windows), it is composed of a device driver and access library, while for others (eg MS-DOS), it may be only a library. Whatever the platform, it provides the same functionality within the limits of the operating system itself.
- How does the DSP use the Host-API?
Host-API is an API for the host, and is optimised for use on multitasking disk-based operating systems. It does not implement any DSP-side interfaces; for this, we use the HERON-API. This is optimised to the differing needs of the real-time DSP system.
Example API Program:
HeOpen(devname, Board, ComportA, &hDevice);
// Open the Device
HeReset(hDevice); // reset the device
HeInitIoStatus(hDevice, &ReadIoStatus); // Initialise read IoStatus
HeInitIoStatus(hDevice, &WriteIoStatus); // Initialise write IoStatus
Status = HeRead(hDevice, test, 1000, &ReadIoStatus); // Initiate a read
if(Status == HE_IOINPROGRESS) // If read hasnt finished
Status = HeWaitForIo(hDevice, ReadIoStatus); // wait for it to finish
HeOpen, HeOpen1, HeOpenS, HeClose, HeRead, HeWrite, HeReset, HeReset1,
HeInitIoStatus, HeJtagWrite, HeJtagRead
HeWaitForIo, HeTestIo, HeDelay
HeGetBoardInfo, HeGetIoGranularity, HeConfig, HeErr2Text
HeAlloc(), HeFree(), HeLock(), HeUnlock()