support library for C027 helper functions for Buffer Pipes, Buffered Serial Port (rtos capable) and GPS parsing. It includes modem APIs for USSD, SMS and Sockets.
Dependents: C027Interface C027Interface C027_SupportTest
Fork of C027_Support by
Diff: GPS.cpp
- Revision:
- 4:c959dd4c5fe8
- Parent:
- 3:c7cd4887560d
- Child:
- 6:775aef3f1d1f
--- a/GPS.cpp Fri Oct 25 09:45:55 2013 +0000 +++ b/GPS.cpp Fri Oct 25 17:50:17 2013 +0000 @@ -35,6 +35,7 @@ pipe->start(); if (++ix > len) return WAIT; if ('$' != pipe->next()) return NOT_FOUND; + // this needs to be extended by crc checking for (;;) { if (++ix > len) return WAIT; @@ -75,6 +76,11 @@ return o; } +int GPSParser::send(const char* buf, int len) +{ + return _send(buf, len); +} + int GPSParser::sendNmea(const char* buf, int len) { char head[1] = { '$' }; @@ -83,11 +89,11 @@ int crc = 0; for (i = 0; i < len; i ++) crc ^= *buf++; - i = send(head, sizeof(head)); - i += send(buf, len); + i = _send(head, sizeof(head)); + i += _send(buf, len); tail[1] = toHex[(crc > 4) & 0xF0]; tail[2] = toHex[(crc > 0) & 0x0F]; - i += send(tail, sizeof(tail)); + i += _send(tail, sizeof(tail)); return i; } @@ -108,11 +114,11 @@ ca += ((char*)buf)[i]; cb += ca; } - i = send(head, sizeof(head)); - i += send(buf, len); + i = _send(head, sizeof(head)); + i += _send(buf, len); crc[0] = ca & 0xFF; crc[1] = cb & 0xFF; - i += send(crc, sizeof(crc)); + i += _send(crc, sizeof(crc)); return i; } @@ -209,7 +215,7 @@ return _pipe.next(); } -int GPSSerial::send(const void* buf, int len) +int GPSSerial::_send(const void* buf, int len) { for (int i = 0; i < len; i ++) putc(((char*)buf)[i]); @@ -246,6 +252,19 @@ return _getMessage(&_pipe, buf, len); } +int GPSI2C::send(const char* buf, int len) +{ + int sent = 0; + if (len) + { + if (!I2C::write(GPSADR,®STREAM,sizeof(REGSTREAM),true)) + sent = _send(buf, len); + found = len == sent; + stop(); + } + return sent; +} + int GPSI2C::sendNmea(const char* buf, int len) { int sent = 0; @@ -298,7 +317,7 @@ return _pipe.next(); } -int GPSI2C::send(const void* buf, int len) +int GPSI2C::_send(const void* buf, int len) { return !I2C::write(GPSADR,(const char*)buf,len,true) ? len : 0; }