How to write C++ programs using the new DLL starting from the old DLL.
There are some major differences between the two DLLs.
feature | Dewesoft C++ DLL | Trenz Electronic C++ DLL |
programming language | C++ | C++ |
architecture | standard | stacked |
Handles | present | absent |
structures | embedded | defined in Cypress CyAPI.h |
parameters* | less | more |
freedom* | less | more |
buffer size | 2 Kbyte (fixed) | 4 Kbyte or more (it can be changed) |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
---|---|
HANDLE m_handle = 0; | CCyUSBDevice *USBdevList = new CCyUSBDevice((HANDLE)0,CYUSBDRV_GUID,true); The handles are internally managed by CyAPI.lib and there is no need to expose them to the user. |
cout << endl << TE0300_ScanCards() << endl; | cout << endl << TE_USB_FX2_ScanCards(USBdevList) << endl; |
TE0300_Open(&m_handle, 0) !=0; | TE_USB_FX2_Open(USBdevList, 0)!=0; TE_USB_FX2_Open() In the code, it is possible to call TE_USB_FX2_Open() where TE0300_Open() is used. When a new handle to the device driver is open (TE_USB_FX2_Open() run successfully) other internal handles (inside USBDeviceList) are automatically closed by TE_USB_FX2_Open() function. No more than one handle can be active on the same time. It is a behavior inherithed by CyAPI.dll Open() function. For this reason, TE_USB_FX2_Close() function is almost useless. TE_USB_FX2_Open() TE_USB_FX2_Open(USBdevList, x) acts more as a SelectCard() function because the list of USB devices is already created in USBdevList. |
TE0300_Open(&m_handle, 1)!=0; | TE_USB_FX2_Open(USBdevList, 1)!=0 |
TE0300_Close(&m_handle); | TE_USB_FX2_Close(USBdevList); This function closes all internal handles of USBDeviceList. This function does not differ much from from its homonym of the previous TE0300DLL.dll; the only difference is that this function closes a handle (like TE0300DLL.dll) to the driver but the handle is not exposed to user because it is not exposed by USBDeviceList (unlike TE0300DLL.dll). In the code, it is possible to call TE_USB_FX2_Close() where TE0300_Close() is used, but
Warning about derived variables If TE_USB_FX2_Close() is called, then dynamically allocated members of the CCyUSBDevice class are de-allocated. And, all "shortcut" pointers to elements of the EndPoints array (ControlEndPt, IsocIn/OutEndPt, BulkIn/OutEndPt, InterruptIn/OutEndPt) are reset to NULL. |
TE0300_SendCommand(handle, cmd, cmd_length, reply, &reply_length, timeout) | TE_USB_FX2_SendCommand(USBdevList, cmd, cmd_length, reply, reply_length, timeout) |
Equivalent code doesn't exist | TE_USB_FX2_SetData_InstanceDriverBuffer ( USBdevList, &BulkOutEP, PI_EP8, timeout, DeviceDriverBufferSize); Example: in TE0300DLL.dll, the SET buffer size is fixed to 2 Kbyte, while in TE_USB_FX2_CyAPI.dll you are free to choose 4 Kbyte or more. BufferSize has a strong influence on DataThroughput. If BufferSize is too small, the data throughput can be 1/3 to 1/2 of the maximum value (33-36 Mbyte/s for read transactions). You should instance the driver buffer only one time and not for every transmission, otherwise you could half your data throughput. |
Equivalent code doesn't exist | TE_USB_FX2_GetData_InstanceDriverBuffer ( USBdevList, &BulkInEP, PI_EP6, timeout, DeviceDriverBufferSize); Example: in TE0300DLL.dll, the GET buffer size is fixed to 2 Kbyte, while in TE_USB_FX2_CyAPI.dll you are free to choose 4 Kbyte or more. BufferSize has a strong influence on DataThroughput. If BufferSize is too small, the DataThroughput can be 1/3 to 1/2 of the maximum value (25-28 Mbyte/s for write transactions). You should instance the driver buffer only one time and not for every transmission, otherwise you could half your data throughput. |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
//test code, not production code | //test code, not production code |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
int packetlen = 512; byte data[512]; | int packetlen = 512; byte data[512]; |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
void ReadData(unsigned int handle) | void ReadData(CCyUSBDevice *USBdevList, unsigned int DeviceDriverBufferSize, int RX_PACKET_LEN, unsigned long TIMEOUT) |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
void WriteData(unsigned int handle) | void WriteData(CCyUSBDevice *USBdevList, unsigned int DeviceDriverBufferSize, int TX_PACKET_LEN, unsigned long TIMEOUT) |