From 3969ebb1b6035c51573d5093477e80b09e7be4e3 Mon Sep 17 00:00:00 2001 From: Stanley Huang Date: Tue, 22 Apr 2014 13:39:36 +0800 Subject: Update data receiving routine --- libraries/OBD/OBD.cpp | 70 +++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/libraries/OBD/OBD.cpp b/libraries/OBD/OBD.cpp index 65c424c..9b503c9 100644 --- a/libraries/OBD/OBD.cpp +++ b/libraries/OBD/OBD.cpp @@ -22,9 +22,9 @@ unsigned int hex2uint16(const char *p) } else if (c>='a' && c<='f') { c -= 39; } else if (c == ' ') { - continue; + continue; } else if (c < '0' || c > '9') { - break; + break; } i = (i << 4) | (c & 0xF); n++; @@ -39,14 +39,14 @@ unsigned char hex2uint8(const char *p) if (c1 >= 'A' && c1 <= 'F') c1 -= 7; else if (c1 >='a' && c1 <= 'f') - c1 -= 39; + c1 -= 39; else if (c1 < '0' || c1 > '9') return 0; if (c2 >= 'A' && c2 <= 'F') c2 -= 7; else if (c2 >= 'a' && c2 <= 'f') - c2 -= 39; + c2 -= 39; else if (c2 < '0' || c2 > '9') return 0; @@ -85,7 +85,7 @@ char COBD::read() { char c = OBDUART.read(); #ifdef REDIRECT - REDIRECT.write(c); + REDIRECT.write(c); #endif return c; } @@ -218,41 +218,34 @@ void COBD::begin(unsigned long baudrate) { OBDUART.begin(OBD_SERIAL_BAUDRATE); if (baudrate) { - OBDUART.print("ATBR1 "); - OBDUART.print(baudrate); - OBDUART.print('\r'); - OBDUART.end(); - delay(100); - OBDUART.begin(baudrate); + OBDUART.print("ATBR1 "); + OBDUART.print(baudrate); + OBDUART.print('\r'); + OBDUART.end(); + delay(100); + OBDUART.begin(baudrate); } } byte COBD::receive(char* buffer, int timeout) { - unsigned long startTime = millis(); unsigned char n = 0; - bool prompted = false; - - for (;;) { + for (unsigned long startTime = millis();;) { if (available()) { char c = read(); if (n > 2 && c == '>') { // prompt char received - prompted = true; + break; + } else if (!buffer) { + n++; } else if (n < OBD_RECV_BUF_SIZE - 1) { - if (buffer) { - if (c == '.' && n > 2 && buffer[n - 1] == '.' && buffer[n - 2] == '.') { - n = 0; - timeout = OBD_TIMEOUT_LONG; - } else { - buffer[n++] = c; - } - } else { - n++; - } + if (c == '.' && n > 2 && buffer[n - 1] == '.' && buffer[n - 2] == '.') { + n = 0; + timeout = OBD_TIMEOUT_LONG; + } else { + buffer[n++] = c; + } } - } else if (prompted) { - break; } else { if (millis() - startTime > timeout) { // timeout @@ -261,8 +254,9 @@ byte COBD::receive(char* buffer, int timeout) dataIdleLoop(); } } - if (buffer) buffer[n] = 0; - return n; + + if (buffer) buffer[n] = 0; + return n; } void COBD::recover() @@ -282,20 +276,20 @@ bool COBD::init(byte protocol) for (unsigned char i = 0; i < sizeof(initcmd) / sizeof(initcmd[0]); i++) { #ifdef DEBUG - debugOutput(initcmd[i]); + debugOutput(initcmd[i]); #endif - write(initcmd[i]); + write(initcmd[i]); if (receive(buffer) == 0) { - return false; + return false; } delay(50); } if (protocol) { - write("ATSP"); - write('0' + protocol); - write('\r'); - receive(buffer); - delay(50); + write("ATSP"); + write('0' + protocol); + write('\r'); + receive(buffer); + delay(50); } while (available()) read(); -- cgit v1.2.3