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

  • No labels