Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Reverted from v. 8

Introduction

How to write C# programs using the new DLL starting from the old DLL.

Introduction

There are some major differences between the two DLLs.

...

Dewesoft C++ DLL

Trenz Electronic C# DLL

HANDLE m_handle = 0;

CyUSBDevice TE_USB_FX2_USBDevice = null;
USBDeviceList USBdevList = new USBDeviceList(CyConst.DEVICES_CYUSB);

Tip
The handles are internally managed by CyUSBCyAPI.dll lib and there is no need to expose them to the user.
Tip
CyUSBDevice TE_USB_FX2_USBDevice take the place of handles for C# programmers.

cout << endl << TE0300_ScanCards() << endl;

int NumberOfCardAttached = TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_ScanCards(ref USBdevList);
Console.WriteLine(" {0} ", NumberOfCardAttached);

TE0300_Open(&m_handle, 0)!=0

TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_Open
(ref TE_USB_FX2_USBDevice, ref USBdevList, 0) == false

Tip
titleTE_USB_FX2_Open()
In the code, it is possible to call TE_USB_FX2_Open() where TE0300_Open() is used.
Note
titleTE_USB_FX2_Open() act as Close() for other TE USB handles already open

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.

Note
titleTE_USB_FX2_Open() as SelectCard()
TE_USB_FX2_Open(TE_USB_FX2_USBDevice, USBdevList, x) acts more as a SelectCard() function because the list of USB devices is already created in USBdevList. TE_USB_FX2_USBDevice is the selected device number x (0 in this case).

TE0300_Open(&m_handle, 1)!=0

TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_Open
(ref TE_USB_FX2_USBDevice, ref USBdevList, 1) == false

TE0300_Close(&m_handle);

TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_Close
(ref USBdevList USBdevListToDispose);

 

Warning

In the code, it is not recommended to call TE_USB_FX2_Close() where TE0300_Close() is used. This function differs from its homonym of the previous TE0300DLL.dll in that it does not close a Handle but disposes (erases) all USB devices in the list USBdevList.

The reason of this behavior is due to the CyUSB.dll as explained by Cypress document CyUSB.NET.pdf, pages 132-133 and pages 139-140: "You should never invoke the Dispose() method of a USBDevice directly. Rather, the appropriate technique is to call the Dispose() method of the USBDeviceList object that contains the USBDevice objects".

TE0300_SendCommand(handle, cmd, cmd_length, reply, &reply_length, timeout)

TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_SendCommand
(ref TE_USB_FX2_USBDevice, ref cmd, ref cmd_length,
ref reply, ref reply_length, TIMEOUT_MS)

 

code

Dewesoft C++ DLL

Trenz Electronic C# DLL

void

ResetFX2FifoStatus(HANDLE

handle)

{ cout << endl << "Resetting all FIFOs" << endl; byte


{






    cout << endl << "Resetting all FIFOs" << endl;
    byte cmd[64],

reply[64];

int


 

    int cmd_length

=

64;

int


    int reply_length

=

64;





    cmd[0]

=

0xA4;//command

RESET_FIFO_STATUS


    cmd[1]

=

0;//RESET

all

FIFOs if

FIFOs

    if (TE0300_SendCommand(handle,

cmd,

cmd_length,

reply,

&reply_length,

1000))

cout <<


        cout << "Error"

<<

endl;



    cmd[0]

=

0xA0;//command

INITIALIZE

INITIALIZE
    cmd[1]

=

1;//FIFO

mode if

mode

    if (TE0300_SendCommand(handle,

cmd,

cmd_length,

reply,

&reply_length,

1000))

cout <<


        cout << "Error"

<<

endl;


}

code

static

void

ResetFX2FifoStatus(CyUSBDevice

TE_USB_FX2_USBDevice)

{ if


{

    if (TE_USB_FX2_USBDevice

==

null)

{


    {
        Console.WriteLine("Error,no

device

is

selected");

return; }


        return;
    }
    Console.WriteLine("Resetting

all

FIFOs");


    byte[]

cmd

=

new

byte[64];


    byte[]

reply

=

new

byte[64];

int


    int cmd_length

=

64;

int


    int reply_length

=

64;

uint



    uint TIMEOUT_MS

=

100000;



    cmd[0]

=

(byte)FX2_Commands.RESET_FIFO_STATUS;


    cmd[1]

=

0;

//reset

all

fifos if

fifos

    if (TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_SendCommand(ref

TE_USB_FX2_USBDevice,

ref

cmd,

ref

cmd_length,

ref

reply,

ref

reply_length,

TIMEOUT_MS)

==

false)


        Console.WriteLine("Error

Send

Command

Reset

all

fifos");



    cmd[0]

=

(byte)FX2_Commands.INITALIZE;

//0xA0;//command

INITIALIZE

INITIALIZE
    cmd[1]

=

1;//FIFO

mode if

mode

    if (TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_SendCommand(ref

TE_USB_FX2_USBDevice,

ref

cmd,

ref

cmd_length,

ref

reply,

ref

reply_length,

TIMEOUT_MS)

==

false)


        Console.WriteLine("Error

Switch

Mode

Fifo

Mode");


}

cpp

c#


}

Dewesoft C++ DLL

Trenz Electronic C# DLL

Code Block
language

void

ReadData(unsigned

int

handle)

{ int packetlen =


{








int packetlen = RX_PACKET_LEN;


unsigned

int

packets

=

1200;


byte

*

data;

data = new byte



unsigned int total_cnt = 0;
unsigned int errors = 0;
data = new byte [RX_PACKET_LEN*packets];


//allocate

memory unsigned int total_cnt = 0; unsigned int errors = 0;

memory

ResetFX2FifoStatus(handle);


SendFPGAcommand(handle,FX22MB_REG0_START_TX);


//starts

test





ElapsedTime.Start();


//StopWatch

start



for

(unsigned

int

i

=

0;

i

<

packets;

i++)

{ packetlen =


{
packetlen = RX_PACKET_LEN;






if

(TE0300_GetData(handle,

data+total_cnt,

&packetlen,

PI_EP6,TIMEOUT_MS))

{ cout <<


{




cout << "ERROR"

<<

endl;


errors++;


break;

}


}
total_cnt

+=

packetlen;


}


TheElapsedTime

=

ElapsedTime.Stop(false);


//DEBUG

StopWatch

timer



SendFPGAcommand(handle,FX22MB_REG0_STOP);


//stops

test


delete

data;

}
Code Block
language

static

void

ReadDataFPGAIntegrity(CyUSBDevice

TE_USB_FX2_USBDevice,

int

BUFFER_SIZE,

uint

TIMEOUT_MS)


{



if

(TE_USB_FX2_USBDevice

==

null)

{


{
Console.WriteLine("Error,no

device

is

selected");


return;

} int packetlen =


}

int packetlen = RX_PACKET_LEN;


int

packets

=

1200;


byte[]

data

=

new

byte[packetlen*packets];


byte[]

buffer

=

new

byte[packetlen];


int

total_cnt

=

0;


int

errors

=

0;


int

PI_EP6

=

6;



bool

bResultXfer

=

false;


ResetFX2FifoStatus(TE_USB_FX2_USBDevice);


SendFPGAcommand(ref

TE_USB_FX2_USBDevice,

MB_Commands.FX22MB_REG0_START_TX,

TIMEOUT_MS);


//starts

test


test_cnt

=

0;


total_cnt

=

0;


Stopwatch

stopWatch

=

new

Stopwatch();


stopWatch.Start();



for

(int

i

=

0;

i

<

packets;

i++)

{ packetlen =


{
packetlen = RX_PACKET_LEN;


//fixed

(byte*

buf

=

&data[total_cnt]

) bResultXfer =

)
//bResultXfer = TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_GetDataP(ref inEndpointPipeNo, buf, ref packetlen, PI_EP6, TIMEOUT_MS);
bResultXfer = TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_GetData(ref

TE_USB_FX2_USBDevice,

ref

buffer,

ref

packetlen,

PI_EP6,

TIMEOUT_MS,BUFFER_SIZE);


Buffer.BlockCopy(buffer,0,

data,

total_cnt,

packetlen);


if

(bResultXfer

==

false)

{


{
Console.WriteLine("Error

Get

Data");


errors++;


break;

}


}
total_cnt

+=

packetlen;


}


stopWatch.Stop();


TimeSpan

ts

=

stopWatch.Elapsed;



SendFPGAcommand(ref

TE_USB_FX2_USBDevice,

MB_Commands.FX22MB_REG0_STOP,

TIMEOUT_MS);


//stops

test


}

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;
}

static void WriteData(CyUSBDevice TE_USB_FX2_USBDevice, int BUFFER_SIZE, uint TIMEOUT_MS)
{

if (TE_USB_FX2_USBDevice == null)
{
Console.WriteLine("Error,no device is selected");
return;
}

int packetlen = TX_PACKET_LEN;
int packets = 1200;
byte[] data = new byte[packetlen*packets];
byte[] buffer = new byte[packetlen];
int total_cnt = 0;
int errors = 0;
int PI_EP8 = 8;
//SetData (data);
bool bResultXfer = false;
ResetFX2FifoStatus(TE_USB_FX2_USBDevice);
SendFPGAcommand(ref TE_USB_FX2_USBDevice, MB_Commands.FX22MB_REG0_START_RX, TIMEOUT_MS);
//starts test
test_cnt = 0;
total_cnt = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

for (int i = 0; i < packets; i++)
{
packetlen = TX_PACKET_LEN;
Buffer.BlockCopy(data,total_cnt, buffer, 0, packetlen);
bResultXfer = TE_USB_FX2.TE_USB_FX2.TE_USB_FX2_GetData(ref TE_USB_FX2_USBDevice, ref buffer, ref packetlen, PI_EP6, TIMEOUT_MS,BUFFER_SIZE);




if (bResultXfer == false)
{
Console.WriteLine("Error Get Data");
errors++;
break;
}
total_cnt += packetlen;
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;

SendFPGAcommand(ref TE_USB_FX2_USBDevice, MB_Commands.FX22MB_REG0_STOP, TIMEOUT_MS);
//stops test
}

...