[De-Nut-Discussion] _read()
de-nut-discussion at egnite.de
de-nut-discussion at egnite.de
Fri Aug 20 19:17:03 CEST 2004
Hi,
Ich habe leider seit geraumer Zeit ein Problem mit dem Ethernut Board.
Versucht wird über die zweite serielle Schnittstelle des ATMega128 ein Datenstream zu senden und die Antwort des Empfängers zu
empfangen. Verwendet werden die hierbei Funktionen _write() und _read().
Das Problem liegt nun darin das bei _read() nicht die aktuell empfangenen Daten zurückgegeben werden, sondern die des zurvor
empfangenen Streams.
Beispiel:
1. Senden -> Empfangen -> _read() liefert nicht nachvollziehbare Werte
2. erneutes Senden -> Empfangen -> _read() liefert die Werte die bei Punkt 1 emfpangen wurden
Anbei noch der Source Code der Funktion.
mit freundlichen Grüssen,
Manuel Mausz
Source Code:
EncodeStream() ... erzeugt den Datenstream der gesendet werden soll
DecodeStream() ... überprüft den Datenstream auf fehlerfreie Übertragung
Rs485enableTx() ... schaltet den RS485-Treiber auf senden um
Rs485enableRx() ... schaltet den RS485-Treiber auf empfangen um
static int nLQuery(FILE *stream, REQUEST *req)
{
struct NetLinkStream thisStream;
static char buf;
unsigned char inbuf[11];
int i;
thisStream.Address = ((((req->req_query)[0])-0x41) << 4 ) + (((req->req_query)[1])-0x41);
thisStream.ByteCount = 2;
thisStream.Data[0] = ((((req->req_query)[2])-0x41) << 4 ) + (((req->req_query)[3])-0x41);
thisStream.Data[1] = (((((req->req_query)[4])-0x41) << 4 ) + (((req->req_query)[5])-0x41))+0x30;
EncodeStream(&thisStream);
Rs485enableTx();
_write(_fileno(uart2), thisStream.Stream, thisStream.ByteCount+8);
_write(_fileno(uart2), 0, 0);
Rs485enableRx();
buf = _read(_fileno(uart2), &inbuf, sizeof(inbuf));
printf("buf: %d\n", buf);
for (i=0; i < 10; i++) {
printf("%x-", inbuf[i]);
thisStream.Stream[i]=inbuf[i];
if (inbuf[i] == '\x03')
inbuf[i+1] = '\0';
}
if (DecodeStream(&thisStream)==TRUE)
printf("success");
else
printf("error");
printf("\n");
NutHttpSendHeaderTop(stream, req, 200, "Ok");
NutHttpSendHeaderBot(stream, "text/html", -1);
fputs("<HTML>"
"<HEAD>"
"<TITLE>NetLink v2</TITLE>"
"</HEAD>"
"<BODY>", stream);
if (req->req_query) {
fputs(inbuf, stream);
}
else
fputs("None", stream);
fflush(stream);
return 0;
}
More information about the De-Nut-Discussion
mailing list