Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Software (SW) APIs require a device driver of the same generation.
Beyond the SW APIs (used for the communication between the host computer and the USB FX2 microcontroller), another set of firmware (FW) API exists: they are called "API commandsCommands". The application SW program running on host computer sends API commands to the USB FX2 microcontroller and/or Xilinx MicroBlaze embedded processor by means of the following SW API functions:

  • generation 2: TE0300_SendCommand(…, command, …);
  • generation 3: TE_USB_FX2{_}SendCommand(..., command, …).

The USB FX2 microcontroller and/or Xilinx MicroBlaze soft embedded processor executes then is(/are) able to execute the command. Skilled users can extend the FW API command set themselvesCommand modifying USB FX2 microcontroller firmware (and MicroBlaze SW if necessary, but in many case is not necessary).

Note
Even in the case the API command is executed by Xilinx MicroBlaze, it is USB FX2 microcontroller to receive and dispatch the command to Xilinx MicroBlaze. For more information see here.

Generation 2

DLL files:

Documentation:

...

A binding from Python to DEWESoft TE USB API is possible through the ctypes function library.

Generation 3

Trenz Electronic USB FX2 APIs

...

distributed with the Cypress SuiteUSB 3.4 (or later).
Trenz Electronic USB FX2 APIs do not use handles.

TE_USB_FX2_CyAPI APIs (C++)

API files:

  • TE_USB_FX2_CyAPI
    TE_USB_FX2_CyAPI.dll is open source but CyAPI.lib is not. Nevertheless, its source code can be requested from Cypress under non disclosure agreement.

...

  • impossible to directly access CyAPI.lib classes and functions to extend Trenz Electronic TE_USB_FX2_CyAPI.dll libraries with other classes and functions;
  • no support of multi-thread programming (but still support of multi-process programming).

TE_USB_FX2_CyUSB API (.NET)

API files:

  • TE_USB_FX2_CyUSB
    TE_USB_FX2_CyUSB.dll is open source but CyUSB.dll is not. Nevertheless, its source code can be requested from Cypress under non disclosure agreement.

...

TE_USB_FX2_CyUSB.dll has no binding to Python because it is pure .NET CLR code that cannot be compiled as a COM object. It is a managed Microsoft .NET class library that can be used with all languages of the NET Framework (Visual Basic, Managed C++, C#, …) or other .NET infrastructures (such as IronPython).
If the user application is mainly made of C# code, it is convenient to use IronPython.If the user application is mainly made of Python, it is convenient to use Python for .NET package.

Differences Between TE_USB_FX2_CyAPI (C++) APIs and TE_USB_FX2_CyUSB (.NET) API

TE_USB_FX2_CyAPI (C++) APIs and TE_USB_FX2_CyUSB (.NET) API do not have the same signature although they are very similar. The signature of the pure extern C code library version of TE_USB_FX2_CyAPI APIs available for developers (codename: simplified TE_USB_FX2_CyAPI APIs) is slightly different from the two signatures above.
TE_USB_FX2_CyUSB (.NET) API is intrinsically cleaner than TE_USB_FX2_CyAPI (C++) APIs because CyUSB.dll is intrinsically cleaner than CyAPI.lib.
Please note that CCyUSBDevice Cypress class in the Cypress CyAPI C++ API is actually the list of all USB devices currently served by a Cypress USB driver derivative (e.g. Cypress generic USB device or Trenz Electronic USB FX2 device). For ease of understanding and convenience, Trenz Electronic named the corresponding variable as USBdevList.

...

Scroll pdf title
titleSetData/GetData naming exception,

TE_USB_FX2_CyAPI (C++) APIs

TE_USB_FX2_CyUSB (.NET) API

TE_USB_FX2_SetData_InstanceDriverBuffer()
TE_USB_FX2_SetData()

(not available)
TE_USB_FX2_SetData()

TE_USB_FX2_GetData_InstanceDriverBuffer()
TE_USB_FX2_GetData()

(not available)
TE_USB_FX2_GetData()

Possible Future Work

A pure extern C code library version of TE_USB_FX2_CyAPI (C++) APIs and TE_USB_FX2_CyUSB (.NET) API would

...