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.
Dependencies: BufferedSerial
Dependents: ESP8266 Final_Project_2 Final_Project CHEN_Final_Project
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);
}
/**