X
hallo,
mit folgenden Konstrukt lese ich in einem thread vom seriellen port, das klappt auch soweit ganz gut, jedoch das er ab bestimmten telegrammgrössen ein einzelnes zeichen aus der mitte des telegramms "verschluckt".
//Thread .h
#define BUFSIZE 251
unsigned char Buffer[BUFSIZE];
// Thread .cpp
int n2bytes;
int nbytes; /* nbytes read */
char *bufptr; /* Current char in buffer */
//While the thread is not terminated
fcntl( fd, F_SETFL, FNDELAY);
while (!Terminated)
{
Sleep(100);
//Initialize the buffer
Buffer[0] ='\0';
nbytes=0;
n2bytes=0;
//Start a pending read operation
bufptr = Buffer;
while ((nbytes = read(fd, bufptr, Buffer + sizeof(Buffer) - bufptr -1 ) ) > 0)
{
n2bytes=n2bytes + nbytes;
bufptr += nbytes;
GBytes=n2bytes;
/* Abbruch-Bedingung: telegramm 0x10-Beginnend und fuenf zeichen lang
oder 0x68-beginnend plus n-zeichen lang und endet mit 0x16 */
if ( ((Buffer[0]==0x10) && (n2bytes == 5)) )
{
break;
}
else
if((Buffer[0]==0x68) && (Buffer[StrToInt(Buffer[2])+5] == 0x16))
{
break;
}
//falls mehr als 80zeichen bisher gelesen wurden abbrechen
else if(n2bytes > 80) break;
}
*bufptr='\0';
// TEST
if(nbytes > 4){
frmMain->AddTelegrammData("!in: " +AnsiString( nbytes) + " Bytes empfangen" ,true );
//If there is some data in the buffer
...
Habt ihr eine idee, wo ich meinen fehler gemacht habe?
Gruss xFoRce