AudioScience HPI Version_4.18.

HPI Software Architecture

The HPI driver is implemented in layers.

All HPI code is written in C. A HPI level driver consists of several modules/source files that constitute a layered interface to the adapter hardware.

arch_ioctl.png

HPIMAN.C is the HPI Manager module. This provides the entry point for the HPI IOCTLs (from the driver) as well as any operating system specific functions that the HPI may need (for example hooking and interrupt or setting up a DMA channel. Each adapter type has its own HPI module, for example the A120 adapter has an HPI module called HPIA120.C

HPI Driver IOCTL Interface

The driver communicates with the HPI using (input/output controls) IOCTL function calls. The HPI IOCTL is similar to the Win32 IOCTL - in fact an HPI IOCTL can easily be embedded in a Win32 IOCTL.

arch_msg_resp.png

The IOCTL consists of a message sent from the driver to the HPI, with a response sent back. The responses are synchronous i.e. the driver gets the response back at the time the IOCTL call is made.

The following example shows the format of the SubSystem IOCTL message and response.

arch_example.png