FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Inlägg av lizerdboy »

Hej

Håller på med C# och FTDI FTD2XX_NET, jag får allting att fungera,
men jag undrar om det är någon som har hittat en annan lösning på RX_Event, alltså en interupt rutin för rx delen.

som jag gör nu är att jag bara har en timer på 5ms som kollar om numBytesAvailable är större än 0
vilket gör att jag vet att de finns något att hämta från buffer.

Men jag tvivlar starkt på att de här är det bästa sättet att lösa detta problem.

så här ser det ut nu

Kod: Markera allt

       private void timerRX_Tick(object sender, EventArgs e)
        {
            // Check the amount of data available to read
            // In this case we know how much data we are expecting, 
            // so wait until we have all of the bytes we have sent.
            UInt32 numBytesAvailable = 0;
            UInt32 numBytesRead = 0;
            string readData;

                ftStatus = myFtdiDevice.GetRxBytesAvailable(ref numBytesAvailable);
                if (ftStatus != FTDI.FT_STATUS.FT_OK)
                {
                    // error
                    timerRX.Enabled = false;
                }
                else
                {
                    if (numBytesAvailable >= 1)
                    {
                        // Note that the Read method is overloaded, so can read string or byte array data
                        ftStatus = myFtdiDevice.Read(out readData, numBytesAvailable, ref numBytesRead);
                        if (ftStatus == FTDI.FT_STATUS.FT_OK)
                        {
                            textRX.Text += readData;
                        }
                    }




                }


jag har googlat i många timmar för att hitta en lösning utan resultat, så jag gör en koll här och ser om någon har någon idee eller lösning.

Mvh // Micke
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Inlägg av mri »

5ms timer är i vilket fall inge bra, men vad är det du vill uppnå?
Minsta möjliga fördröjning att läsa av RX datan? Om inte så är det ju bara att göra timern lånsammare...

Nu hittar jag inte C# dokumentationen. Har bara skummat igenom C dokumentationen men jag antar att motsvarande API finns i C#.

Du kunde t.ex. skapa en separat RX tråd, som anropar myFtdiDevice.Read() i en loop. Om det inte finns data, blockerar Read(). När Read() returnerar har du fått data, fel eller timeout. Datat skickar RX tråden vidare med passande synkroniserings mekanism till din huvudtråd. Se till att du inte updaterar några GUI kontroller direkt från RX tråden. Därefter anropar den myFtdiDevice.Read() igen, osv.

Ett annat sätt är FT_SetEventNotification() (finns i C dokumentationen) som kan användas för att trigga ett event när t.ex. RX data anländer....
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

Re: FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Inlägg av lizerdboy »

ska ta och kolla lite i C dokumenten, vet att jag har sett FT_SetEventNotification() någonstanns, men tror ej det var på FTDi hemsida.
i C# exemplena jag kunde hitta så vart det timer lösning, vilket inte kändes direkt rätt.

mitt mål är en bra grund till D2XX funktionerna, då jag försöker komma i från VCP och comport delen i C#,
vilket innefattar en bra RX läsnings rutin vilket är det enda som saknas nu känns det som.

ska fundera lite mer på hur du mena ang en separat tråd till RX.

Thanks //
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Inlägg av mri »

Googlade lite och det verkar som enda dokumentationen till C# API'n är Intellisense till själva DLL'en. Å andra sidan är C# API'n bara en wrapper ovanpå FTD2XX.dll, så du kan nog utgå från C dokumentationen och de exempel som finns i den.
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

Re: FTDI FTD2XX_Net /C#, någon som vet en bättre RX_Event ?

Inlägg av lizerdboy »

Hittade denna

fast jag vet inte riktigt hur jag ska implementer denna till min kod,

ska exprementera lite :)

Kod: Markera allt

Windows and Windows CE Example
This example shows how to wait for a character to be received or a change in modem status.

First, create the event and call FT_SetEventNotification.

FT_HANDLE ftHandle; // handle of an open device
FT_STATUS ftStatus;
HANDLE hEvent;
DWORD EventMask;

hEvent = CreateEvent(
                     NULL,
                     false, // auto-reset event
                     false, // non-signalled state
                     ""
                     );
EventMask = FT_EVENT_RXCHAR | FT_EVENT_MODEM_STATUS;
ftStatus = FT_SetEventNotification(ftHandle,EventMask,hEvent);



Sometime later, block the application thread by waiting on the event, then when the event has occurred, determine the condition that caused the event, and process it accordingly.

WaitForSingleObject(hEvent,INFINITE);

DWORD EventDWord;
DWORD RxBytes;
DWORD TxBytes;

FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
if (EventDWord & FT_EVENT_MODEM_STATUS) {
    // modem status event detected, so get current modem status
    FT_GetModemStatus(ftHandle,&Status);
    if (Status & 0x00000010) {
          // CTS is high
    }
    else {
          // CTS is low
    }
    if (Status & 0x00000020) {
          // DSR is high
    }
    else {
          // DSR is low
    }
}
if (RxBytes > 0) {
    // call FT_Read() to get received data from device
} 

Nu har jag suttit med denna ganska länge och får inte riktigt i hopp det.
ingen som har någon idee ?? :)
Skriv svar