Cypress CyAPI Programmer's Reference
CyAPI.lib provides a simple, powerful C++ programming interface to USB devices. More specifically,
it is a C++ class library that provides a high-level programming interface to the CyUsb.sys device
driver. The library is only able to communicate with USB devices that are served by (i.e. matched to)
Rather than communicate with the driver via Windows API calls such as SetupDiXxxx and
DeviceIoControl, applications call simpler CyAPI methods such as Open, Close, and XferData to
communicate with USB devices.
To use the library, you need to include the header file, CyAPI.h, in files that access the
CCyUSBDevice class. In addition, the statically linked CyAPI.lib file must be linked to your project.
Versions of the .lib file are available for use with Microsoft Visual C++ 6 and 7, and Borland C++
The library employs a Device and EndPoints use model. To use the library you must
create an instance of the CCyUSBDevice class using the new keyword. A CCyUSBDevice object
knows how many USB devices are attached to the CyUsb.sys driver and can be made to abstract
any one of those devices at a time by using the Open method. An instance of CCyUSBDevice
exposes several methods and data members that are device-specific, such as DeviceName,
DevClass, VendorID, ProductID, and SetAltIntfc.
When a CCyUSBDevice object is open to an attached USB device, its endpoint members provide
an interface for peforming data transfers to and from the device's endpoints. Endpoint-specific data
members and methods such as MaxPktSize, TimeOut, bIn, Reset and XferData are only accessible
through endpoint members of a CCyUSBDevice object.
In addition to its simplicity, the class library facilitates creation of sophisticated applications as well.
The CCyUSBDevice constructor automatically registers the application for Windows USB Plug and
Play event notification. This allows your application to support "hot plugging" of devices. Also, the
asynchronous BeginDataXfer/WaitForXfer/FinishDataXfer methods allow queueing of multiple data
transfer requests on a single endpoint, thus enabling data streaming from the application level.