fix(modem): Fixed inconsistent state on data after OK

If we received response in two chunks and the first one completes the
command (result=OK or FAIL), and the second chunk pre-empts command processing,
then we performed processing again rewritting the result back to
TIMEOUT. This would invalidate the command, but also causes an
exception: ESP_MODEM_THROW_IF_ERROR(ESP_ERR_INVALID_STATE)
Fixed by checking if the processing already finished in process_line().

Closes https://github.com/espressif/esp-protocols/issues/426
This commit is contained in:
David Cermak
2023-11-29 20:20:22 +01:00
parent 909e8d9494
commit bf99f287bc

View File

@ -347,6 +347,9 @@ void DTE::on_read(got_line_cb on_read_cb)
bool DTE::command_cb::process_line(uint8_t *data, size_t consumed, size_t len) bool DTE::command_cb::process_line(uint8_t *data, size_t consumed, size_t len)
{ {
if (result != command_result::TIMEOUT) {
return false; // this line has been processed already (got OK or FAIL previously)
}
if (memchr(data + consumed, separator, len)) { if (memchr(data + consumed, separator, len)) {
result = got_line(data, consumed + len); result = got_line(data, consumed + len);
if (result == command_result::OK || result == command_result::FAIL) { if (result == command_result::OK || result == command_result::FAIL) {