Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ATParser by
Revision 3:32915b9467d2, committed 2015-07-17
- Comitter:
- geky
- Date:
- Fri Jul 17 16:31:58 2015 +0000
- Parent:
- 2:4d68f546861c
- Child:
- 4:38acbd6f9d9e
- Commit message:
- Added configurable delimiters; ; This does now require explicit delimiters and no long matches the last character.
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 Thu Jul 16 22:50:43 2015 +0000
+++ b/ATParser.cpp Fri Jul 17 16:31:58 2015 +0000
@@ -66,8 +66,10 @@
}
// Finish with newline
- if (_putc('\r') < 0 || _putc('\n') < 0)
- return false;
+ for (int i = 0; _delimiter[i]; i++) {
+ if (_putc(_delimiter[i]) < 0)
+ return false;
+ }
#ifdef AT_ECHO
printf("AT> %s\r\n", line);
@@ -81,24 +83,19 @@
while (i < size) {
int c = _getc();
-
if (c < 0)
return false;
+
+ line[i++] = c;
// Finish when we hit a newline
- if (c == '\r' || c == '\n') {
- // Only handle newlines on \n
- if (c != '\n')
- continue;
-
- line[i++] = 0;
-#ifdef AT_ECHO
+ if (memcmp(&line[i-_delim_size], _delimiter, _delim_size) == 0) {
+ line[i-_delim_size] = 0;
+#ifdef AT_ECHO
printf("AT< %s\r\n", line);
#endif
return true;
}
-
- line[i++] = c;
}
// Ran out of space
@@ -113,10 +110,12 @@
_flush();
// Create and send command
- if (vsprintf(_buffer, command, args) < 0 ||
- !_putline(_buffer)) {
- va_end(args);
- return false;
+ if (command) {
+ if (vsprintf(_buffer, command, args) < 0 ||
+ !_putline(_buffer)) {
+ va_end(args);
+ return false;
+ }
}
// Iterate through each line in the expected response
@@ -129,19 +128,15 @@
int offset = 0;
while (response[i]) {
- // Only handle newlines on \n
- if (response[i] == '\n') {
- i++;
+ if (memcmp(&response[i-_delim_size], _delimiter, _delim_size) == 0) {
+ i += _delim_size;
break;
- } else if (response[i] == '\r') {
- i++;
} else if (response[i] == '%' &&
response[i+1] != '%' &&
response[i+1] != '*') {
- i++;
-
_buffer[offset++] = '%';
_buffer[offset++] = '*';
+ i++;
} else {
_buffer[offset++] = response[i++];
}
--- a/ATParser.h Thu Jul 16 22:50:43 2015 +0000
+++ b/ATParser.h Fri Jul 17 16:31:58 2015 +0000
@@ -37,6 +37,7 @@
// Parsing information
const char *_delimiter;
+ int _delim_size;
// Helper methods for putc/getc with timeout
int _putc(char c);
@@ -63,10 +64,10 @@
ATParser(BufferedSerial *serial, int buffer_size = 256, int timeout = 3000,
const char *delimiter = "\r\n") :
_serial(serial),
- _buffer_size(buffer_size),
- _timeout(timeout),
- _delimiter(delimiter) {
+ _buffer_size(buffer_size) {
_buffer = new char[buffer_size];
+ setTimeout(timeout);
+ setDelimiter(delimiter);
}
/**
@@ -92,6 +93,7 @@
*/
void setDelimiter(const char *delimiter) {
_delimiter = delimiter;
+ _delim_size = strlen(delimiter);
}
/**
