You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
Version 1
Next »
How to write C++ programs using the new DLL starting from the old DLL.
Introduction
There are some major differences between the two DLLs.
feature | Dewesoft C++ DLL | Trenz Electronic C++ DLL |
programming language | C++ | C++ |
architecture | standard (TE0300DLL.dll) | stacked (TE_USB_FX2_CyAPI.dll requires Cypress CyAPI.dll); |
Handles | present | absent |
structures | embedded | defined in Cypress CyAPI.h |
parameters* | less | more |
freedom* | less | more |
- Example: in TE0300DLL.dll, the buffer size is fixed to 2 kbyte, while in TE_USB_FX2_CyAPI.dll you are free to choose 4 kbyte or more.
Function translation
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
HANDLE m_handle = 0; | CCyUSBDevice *USBdevList = new CCyUSBDevice((HANDLE)0,CYUSBDRV_GUID,true); |
cout << endl << TE0300_ScanCards() << endl; | cout << endl << TE_USB_FX2_ScanCards(USBdevList) << endl; |
TE0300_Open(&m_handle, 0) Unable to render embedded object: File (=0) not found. =0 |
TE0300_Open(&m_handle, 1) Unable to render embedded object: File (=0) not found. =0 |
TE0300_Close(&m_handle); | TE_USB_FX2_Close(USBdevList); |
TE0300_SendCommand(handle, cmd, cmd_length, reply, &reply_length, timeout) | TE_USB_FX2_SendCommand(USBdevList, cmd, cmd_length, reply, reply_length, timeout) |
Note 1:
TE_USB_FX2_Open(USBdevList, x) acts more as a SelectCard() function because the list of USB devices is already created in USBdevList.
Note 2:
In the code, it is possible to call TE_USB_FX2_Open() where TE0300_Open() is used.In the code, it is possible to call TE_USB_FX2_Close() where TE0300_Close() is used, but it is rare that you would ever need to call TE_USB_FX2_Close() explicitly (though doing so would not cause any problems). The TE_USB_FX2_Close() function closes the handle to the Trenz Electronic device driver, if one is open.
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.
Close is automatically carried out by the TE_USB_FX2_Open() function, if a handle to the device driver is already open (i.e. a TE_USB_FX2_Open() has been successfully used before).
Unmanaged C++ TE_USB_FX2_Open() of TE_USB_FX2_CyAPI.dll | You can use this function to select the desired module without the need to call TE_USB_FX2_Close() before. Though doing so would not cause any problems. Close is automatically realized by the TE_USB_FX2_Open() function, if a handle to the driver is already open (i.e. TE_USB_FX2_Open() has been successfully called before). |
Managed C# TE_USB_FX2_Open() of TE_USB_FX2_CyUSB.dll | You can use this function to select the desired module without the need to call TE_USB_FX2_Close() before. This function is not necessary. |
Unmanaged C++ TE_USB_FX2_Close() of TE_USB_FX2_CyAPI.dll | It can be freely called but it is rare that you would ever need to call TE_USB_FX2_Close() explicitly (though doing so would not cause any problems). |
Managed C# TE_USB_FX2_Close() of TE_USB_FX2_CyUSB.dll | It cannot be freely called and it is rare that you would ever need to call TE_USB_FX2_Close() explicitly. Furthermore, if it is used in the wrong way, the program can raise exceptions. |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
//test code, not production code int packetlen = 512; byte data[512]; for (int i = 0; i < 10; i++) { packetlen = 512; for (int j = 0; j < packetlen; j++) data[j] = j; if (TE0300_SetData(handle, data, packetlen, PI_EP8)) { cout << "ERROR" << endl; return; } } | //test code, not production code int packetlen = 512; byte data[512]; CCyBulkEndPoint *BulkOutEP = NULL; TE_USB_FX2_SetData_InstanceDriverBuffer ( USBdevList, &BulkOutEP, PI_EP8, timeout, DeviceDriverBufferSize); for (int i = 0; i < 10; i++) { packetlen = 512; for (int j = 0; j < packetlen; j++) data[j] = j; if (TE_USB_FX2_SetData(&BulkOutEP, data, packetlen)) { cout << "ERROR" << endl; return; } } |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
int packetlen = 512; byte data[512]; for (int i = 0; i < 10; i++) { packetlen = 512; if (TE0300_GetData(handle, data, &packetlen, PI_EP6, 1000)) { cout << "ERROR" << endl; return; } for (int j = 0; j < packetlen; j++) cout << data[j]; cout << endl; } | int packetlen = 512;byte data[512]; CCyBulkEndPoint *BulkInEP = NULL; TE_USB_FX2_GetData_InstanceDriverBuffer ( USBdevList, &BulkInEP, PI_EP6, timeout, DeviceDriverBufferSize); for (int i = 0; i < 10; i++) { packetlen = 512; if (TE_USB_FX2_GetData(&BulkInEP, data, packetlen)) { cout << "ERROR" << endl; return; } for (int j = 0; j < packetlen; j++) cout << data[j]; cout << endl; } |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
void ReadData(unsigned int handle) { int packetlen = RX_PACKET_LEN; unsigned int packets = 1200; byte * data; unsigned int total_cnt = 0; unsigned int errors = 0; data = new byte [RX_PACKET_LEN*packets]; //allocate memory ResetFX2FifoStatus(handle); SendFPGAcommand(handle,FX22MB_REG0_START_TX); //starts test ElapsedTime.Start(); //StopWatch start for (unsigned int i = 0; i < packets; i++) { packetlen = RX_PACKET_LEN; if (TE0300_GetData(handle, data+total_cnt, &packetlen, PI_EP6,TIMEOUT_MS)) { cout << "ERROR" << endl; errors++; break; } total_cnt += packetlen; } TheElapsedTime = ElapsedTime.Stop(false); //DEBUG StopWatch timer SendFPGAcommand(handle,FX22MB_REG0_STOP); //stops test delete data; } | void ReadData(CCyUSBDevice *USBdevList, unsigned int DeviceDriverBufferSize, int RX_PACKET_LEN, unsigned long TIMEOUT) { long packetlen = RX_PACKET_LEN; unsigned int packets = 1200; byte * data; byte * data_temp = NULL; unsigned int total_cnt = 0; unsigned int errors = 0; data = new byte [RX_PACKET_LEN*packets]; //allocate memory ResetFX2FifoStatus(USBdevList); SendFPGAcommand(USBdevList,FX22MB_REG0_START_TX); //starts test CCyBulkEndPoint *BulkInEP = NULL; TE_USB_FX2_GetData_InstanceDriverBuffer ( USBdevList, CardNo, &BulkInEP, PI_EP6, TIMEOUT, DeviceDriverBufferSize); ElapsedTime.Start(); //StopWatch start for (unsigned int i = 0; i < packets; i++) { packetlen = RX_PACKET_LEN; data_temp = &data[total_cnt]; if (TE_USB_FX2_GetData(&BulkInEP,data_temp,packetlen)) { cout << "ERROR read" << endl; errors++; break; } total_cnt += (packetlen); } TheElapsedTime = ElapsedTime.Stop(false); //DEBUG StopWatch timer SendFPGAcommand(USBDevice,FX22MB_REG0_STOP); //stops test delete data; } |
Dewesoft C++ DLL | Trenz Electronic C++ DLL |
void WriteData(unsigned int handle) { int packetlen = TX_PACKET_LEN; unsigned int packets = 1200; byte * data; unsigned int total_cnt = 0; unsigned int errors = 0; data = new byte [TX_PACKET_LEN*packets]; //allocate memory SetData (data); ResetFX2FifoStatus(handle); SendFPGAcommand(handle,FX22MB_REG0_START_RX); //starts test ElapsedTime.Start(); //StopWatch start for (unsigned int i = 0; i < packets; i++) { packetlen = TX_PACKET_LEN; if (TE0300_GetData(handle, data+total_cnt, &packetlen, PI_EP8,TIMEOUT_MS)) { cout << "ERROR" << endl; errors++; break; } total_cnt += packetlen; } TheElapsedTime = ElapsedTime.Stop(false); //DEBUG StopWatch timer SendFPGAcommand(handle,FX22MB_REG0_STOP); //stops test delete data; } | void WriteData(CCyUSBDevice *USBdevList, unsigned int DeviceDriverBufferSize, int TX_PACKET_LEN, unsigned long TIMEOUT) { long packetlen = TX_PACKET_LEN; unsigned int packets = 1200; byte * data; byte * data_temp = NULL; unsigned int total_cnt = 0; unsigned int errors = 0; data = new byte [TX_PACKET_LEN*packets]; //allocate memory SetData (data); ResetFX2FifoStatus(USBdevList); SendFPGAcommand(USBdevList,FX22MB_REG0_START_RX); //starts test CCyBulkEndPoint *BulkOutEP = NULL; TE_USB_FX2_SetData_InstanceDriverBuffer ( USBdevList, CardNo, &BulkOutEP, PI_EP8,TIMEOUT,DeviceDriverBufferSize); ElapsedTime.Start(); //StopWatch start for (unsigned int i = 0; i < packets; i++) { packetlen = TX_PACKET_LEN; data_temp = &data[total_cnt]; if (TE_USB_FX2_GetData(&BulkInEP,data_temp,packetlen)) { cout << "ERROR read" << endl; errors++; break; } total_cnt += (packetlen); } TheElapsedTime = ElapsedTime.Stop(false); //DEBUG StopWatch timer SendFPGAcommand(USBDevice,FX22MB_REG0_STOP); //stops test delete data; } |
Document Change History
version | date | author | description |
0.9 | 2012-06-01 | SP, FDR | Release Preview. |
1.0 | | | Initial release. |
1.1 | 2013-04-23 | SP | Improved description of TE_USB_FX2_Open() and TE_USB_FX2_Close() functions |