Skip to content

Commit 4cf1f36

Browse files
adding prompt verification
1 parent 02be79a commit 4cf1f36

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

libraries/WiFiS3/src/Modem.cpp

+30-7
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ bool ModemClass::passthrough(const uint8_t *data, size_t size) {
4949
/* -------------------------------------------------------------------------- */
5050
_serial->write(data,size);
5151

52-
std::string tmp, data_res; // FIXME I don't always have a command prompt provided
52+
std::string tmp = DO_NOT_CHECK_CMD, data_res; // FIXME I don't always have a command prompt provided
5353
auto res = buf_read(tmp, data_res);
5454

5555
if(_serial_debug && _debug_level >= 2) {
@@ -160,6 +160,7 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
160160
unsigned int sized_read_size = 0;
161161
unsigned int sized_read_count = 0;
162162
unsigned int result_parse = 0;
163+
bool restart = false;
163164

164165

165166
if(_serial_debug && _debug_level >= 1) {
@@ -208,6 +209,7 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
208209
*/
209210

210211
if(c == '+') {
212+
commandName += c; // prompt includes also '+'
211213
state = at_parse_state_t::Cmd;
212214
} else if(c == RESULT_OK[result_parse]) { // FIXME this should also account for following characters
213215
state = at_parse_state_t::Ok;
@@ -231,9 +233,16 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
231233
*/
232234

233235
if(c == ':' || c == '=') {
234-
// TODO verify command is matching prompt
235-
state = at_parse_state_t::Data;
236-
} else {
236+
commandName += c; // prompt includes also ':'
237+
238+
if (commandName != DO_NOT_CHECK_CMD && commandName != prompt) {
239+
// state = at_parse_state_t::Begin; // TODO decide whether to return ParseError or realign
240+
restart = true;
241+
} else {
242+
state = at_parse_state_t::Data;
243+
}
244+
// state = at_parse_state_t::Data;
245+
} else if(c != ' ') { // FIXME should we keep the space?
237246
commandName += c;
238247
}
239248

@@ -318,7 +327,12 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
318327

319328
if(result_parse == strlen(RESULT_OK)) {
320329
res = Ok;
321-
state = at_parse_state_t::Completed;
330+
331+
if(restart) {
332+
state = at_parse_state_t::Begin;
333+
} else {
334+
state = at_parse_state_t::Completed;
335+
}
322336
}
323337
break;
324338
case at_parse_state_t::Error:
@@ -332,12 +346,21 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
332346

333347
if(result_parse == strlen(RESULT_ERROR)) {
334348
res = Error;
335-
state = at_parse_state_t::Completed;
349+
350+
if(restart) {
351+
state = at_parse_state_t::Begin;
352+
} else {
353+
state = at_parse_state_t::Completed;
354+
}
336355
}
337356
break;
338357
case at_parse_state_t::ParseError:
339358
res = ParseError;
340-
state = at_parse_state_t::Completed;
359+
if(restart) {
360+
state = at_parse_state_t::Begin;
361+
} else {
362+
state = at_parse_state_t::Completed;
363+
}
341364
break;
342365
case at_parse_state_t::Completed:
343366
break;

0 commit comments

Comments
 (0)