Parser for AT commands and similar protocols
Fork of ATParser by
Revision 6:51f1171b5ebc, committed 2015-07-17
- Comitter:
- geky
- Date:
- Fri Jul 17 21:00:23 2015 +0000
- Parent:
- 5:26bc9255b751
- Child:
- 7:d1b193880af1
- Commit message:
- Exposed raw read/write methods
Changed in this revision
ATParser.cpp | Show annotated file Show diff for this revision Revisions of this file |
ATParser.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/ATParser.cpp Fri Jul 17 17:23:57 2015 +0000 +++ b/ATParser.cpp Fri Jul 17 21:00:23 2015 +0000 @@ -56,6 +56,33 @@ _serial->getc(); } +// read/write handling with timeouts +int ATParser::write(const char *data, int size) { + int i; + + for (i = 0; i < size; i++) { + if (putc(data[i]) < 0) + return i; + } + + return i; +} + +int ATParser::read(char *data, int size) { + int i; + + for (i = 0; i < size; i++) { + int c = getc(); + + if (c < 0) + return i; + + data[i] = c; + } + + return i; +} + // getline/putline handling with timeouts/bounds checking bool ATParser::_putline(const char *line) { @@ -165,11 +192,8 @@ // We only succeed if all characters in the response is matched if (count >= 0 && (_buffer+offset)[count] == 0) { // Reuse the front end of the buffer - int j; - for (j = 0; j < i; j++) { - _buffer[j] = response[j]; - } - _buffer[j] = 0; + memcpy(_buffer, response, i); + _buffer[i] = 0; // Store the found results vsscanf(_buffer+offset, _buffer, args);
--- a/ATParser.h Fri Jul 17 17:23:57 2015 +0000 +++ b/ATParser.h Fri Jul 17 21:00:23 2015 +0000 @@ -157,6 +157,24 @@ */ int getc(); + /** + * Write an array of bytes to the underlying stream + * + * @param data the array of bytes to write + * @param size number of bytes to write + * @return number of bytes written + */ + int write(const char *data, int size); + + /** + * Read an array of bytes from the underlying stream + * + * @param data the destination for the read bytes + * @param size number of bytes to read + * @return number of bytes read + */ + int read(char *data, int size); + /** * Flushes the underlying stream */