permanent 1 byte über den COM Port senden (ergänzt)
-
also geöffnet hab ich ihn mit
hSerial = CreateFile( "COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); if( INVALID_HANDLE_VALUE == hSerial ) { MessageDlg("CreateFile fehlgeschlagen!", mtError, TMsgDlgButtons() << mbOK, 0); return; } DCB dcb; if( !GetCommState( hSerial, &dcb ) ) { CloseHandle( hSerial ); MessageDlg("GetCommState fehlgeschlagen!", mtError, TMsgDlgButtons() << mbOK, 0); return; } if( !BuildCommDCB( "2400,n,8,1", &dcb ) ) { CloseHandle( hSerial ); MessageDlg("BuildCommDCB fehlgeschlagen!", mtError, TMsgDlgButtons() << mbOK, 0); return; } if( !SetCommState( hSerial, &dcb ) ) { CloseHandle( hSerial ); MessageDlg("SetCommState fehlgeschlagen!", mtError, TMsgDlgButtons() << mbOK, 0); return; } COMMTIMEOUTS C; C.ReadIntervalTimeout = 0; C.ReadTotalTimeoutMultiplier = 1; C.ReadTotalTimeoutConstant = 0; C.WriteTotalTimeoutMultiplier = 1; C.WriteTotalTimeoutConstant = 0; if ( !SetCommTimeouts (hSerial, &C)) { CloseHandle( hSerial ); MessageDlg("SetCommTimeouts fehlgeschlagen!", mtError, TMsgDlgButtons() << mbOK, 0); return; }schreiben tu ich mit einem thread über folgenden aufruf
while(!Terminated) { unsigned long Len; if (Send != 0) { if (!WriteFile(hSerial, &Send, 1, &Len, NULL)) { AnsiString AS; int E; E = GetLastError(); AS.printf("SENDERROR %d", E); OutputDebugString(AS.c_str()); Terminate(); } } char Buff[100]; Len = 0; if (!ReadFile(hSerial, Buff, 99, &Len, NULL)) { AnsiString AS; int E; E = GetLastError(); AS.printf("RECVERROR %d", E); // Hier brichts weg mit OutputDebugString(AS.c_str()); // ERROR_OPERATION_ABORTED Terminate(); } if (Len > 0) { Text = Buff; Synchronize(&UpdateTarget); } }und abschmieren tut er mir nach einigen sekunden dauerfeuer mit fehlercode 995 (aka ERROR_OPERATION_ABORTED) im recv block
ich bitte um hilfe, oder eventuell eine bessere lösung Q_Q
EDIT: das problem ist das ich an einen IR sender/empfänger sende, ich versuche grad verzweifelt eine kommunikation zwischen einem asuro roboter und meinem rechner herzustellen ala hyperterminal und zwecks signaltest muss ich unbedingt so schnell wie möglich ein permanentes signal senden btw. empfangen
-
kenne mich zwar damit nicht so aus aber(weiss auch net genau was Terminate() für ne funktion hat), wenn du den Stream geöffnet hast kann:
1. nichts von der anderen seite reingeschrieben werden(vlt nen PONG oda was auch immer)
und
2. kannst du die datei net lesen..
-
verzeihung, aber ich hab nicht wirklich verstanden was du mir damit sagen willst
P.S. Terminate beendet den Thread uns setzt die variable "Terminated" auf true. (TThread klasse aus borland )
1. nichts von der anderen seite reingeschrieben werden(vlt nen PONG oda was auch immer)
das versteh ich leider nicht, kann sein das mein textverständnis noch schläft aber ich hab ja nen comport geöffnet und das senden klappt einige sekunden ganz gut
und
2. kannst du die datei net lesen..auch das funktioniert ....ich sollte hier nochmal erwähnen das ich über den com einen IR sender ansteuere und der mir praktisch immer eine kopie meiner abgesendeten daten empfängt, weil sender und empfängerdiode nicht ausreichen abgeschirmt werden können
nur mit der fehlermeldung
fehlercode 995 (aka ERROR_OPERATION_ABORTED)
kann ich nix anfangen, da ich den com port nicht shared betreibe und laut hilfe er nur auftritt wenn ich cancelIO aufrufe und das geht auch laut hilfe nur wenn ich den port shared öffne und dann auch nur für den thread der cancelIO aufgerufen hat