@@ -57,9 +57,9 @@ bool ModemClass::passthrough(const uint8_t *data, size_t size) {
5757 _serial_debug->println (data_res.c_str ());
5858 if (res == Ok) {
5959 _serial_debug->println (" Result: OK" );
60- } else if (res = Error) {
60+ } else if (res == Error) {
6161 _serial_debug->println (" Result: ERROR" );
62- } else if (res = Timeout) {
62+ } else if (res == Timeout) {
6363 _serial_debug->println (" Result: TIMEOUT" );
6464 } else {
6565 _serial_debug->println (" Result: ParseError" );
@@ -112,9 +112,9 @@ bool ModemClass::write(const string &prompt, string &data_res, const char * fmt,
112112 _serial_debug->println (data_res.c_str ());
113113 if (res == Ok) {
114114 _serial_debug->println (" Result: OK" );
115- } else if (res = Error) {
115+ } else if (res == Error) {
116116 _serial_debug->println (" Result: ERROR" );
117- } else if (res = Timeout) {
117+ } else if (res == Timeout) {
118118 _serial_debug->println (" Result: TIMEOUT" );
119119 } else {
120120 _serial_debug->println (" Result: ParseError" );
@@ -167,13 +167,16 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
167167 }
168168
169169 unsigned long start_time = millis ();
170- while (state != at_parse_state_t ::Completed) {
170+ while (state != at_parse_state_t ::Completed &&
171+ state != at_parse_state_t ::ParseError) {
171172 if (millis () - start_time > _timeout) {
172173 res = Timeout;
173174 break ;
174175 }
175176
176- while (_serial->available () && state != at_parse_state_t ::Completed) {
177+ while (_serial->available () &&
178+ state != at_parse_state_t ::Completed &&
179+ state != at_parse_state_t ::ParseError) {
177180 char c = _serial->read ();
178181 if (_serial_debug && _debug_level >= 1 ) {
179182 if (c == ' \n ' ) {
@@ -207,8 +210,10 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
207210 state = at_parse_state_t ::Cmd;
208211 } else if (c == RESULT_OK[result_parse]) { // FIXME this should also account for following characters
209212 state = at_parse_state_t ::Ok;
213+ result_parse++;
210214 } else if (c == RESULT_ERROR[result_parse]) { // FIXME this should also account for following characters
211215 state = at_parse_state_t ::Error;
216+ result_parse++;
212217 } else {
213218 data_res = " " ;
214219 }
@@ -290,11 +295,9 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
290295 res = Error;
291296 state = at_parse_state_t ::Completed;
292297 } if (c == RESULT_OK[0 ]) { // OK response
293- res = Ok;
294298 state = at_parse_state_t ::Ok;
295299 result_parse = 1 ;
296300 } else if (c == RESULT_ERROR[0 ]) { // Error response
297- res = Error;
298301 state = at_parse_state_t ::Error;
299302 result_parse = 1 ;
300303 }
@@ -313,6 +316,7 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
313316 }
314317
315318 if (result_parse == strlen (RESULT_OK)) {
319+ res = Ok;
316320 state = at_parse_state_t ::Completed;
317321 }
318322 break ;
@@ -326,6 +330,7 @@ ModemClass::ParseResult ModemClass::buf_read(const string &prompt, string &data_
326330 }
327331
328332 if (result_parse == strlen (RESULT_ERROR)) {
333+ res = Error;
329334 state = at_parse_state_t ::Completed;
330335 }
331336 break ;
0 commit comments