mirror of https://github.com/ARMmbed/mbed-os.git
busy s... fix (ONME-4352)
oob handling added for OK in busy scenario Fixed spellcheck error trace added for okpull/11817/head
parent
8c673ba597
commit
d5fdcfdab8
|
@ -626,6 +626,7 @@ nsapi_error_t ESP8266::send(int id, const void *data, uint32_t amount)
|
|||
}
|
||||
|
||||
_smutex.lock();
|
||||
RETRY:
|
||||
set_timeout(ESP8266_SEND_TIMEOUT);
|
||||
_busy = false;
|
||||
_error = false;
|
||||
|
@ -634,11 +635,25 @@ nsapi_error_t ESP8266::send(int id, const void *data, uint32_t amount)
|
|||
goto END;
|
||||
}
|
||||
|
||||
//We might receive "busy s/p..." and "OK" from modem, so we need to check that also
|
||||
_ok_received = false;
|
||||
_parser.oob("OK", callback(this, &ESP8266::_oob_ok_received));
|
||||
|
||||
if (!_parser.recv(">")) {
|
||||
_parser.remove_oob("OK");
|
||||
if (_busy) {
|
||||
if (_ok_received) {
|
||||
goto RETRY;
|
||||
} else if (_parser.recv("OK")) {
|
||||
goto RETRY;
|
||||
}
|
||||
}
|
||||
tr_debug("send(): Didn't get \">\"");
|
||||
ret = NSAPI_ERROR_WOULD_BLOCK;
|
||||
goto END;
|
||||
}
|
||||
_ok_received = false;
|
||||
_parser.remove_oob("OK");
|
||||
|
||||
if (_parser.write((char *)data, (int)amount) >= 0 && _parser.recv("SEND OK")) {
|
||||
ret = NSAPI_ERROR_OK;
|
||||
|
@ -1071,7 +1086,6 @@ void ESP8266::_oob_busy()
|
|||
"ESP8266::_oob_busy() AT timeout\n");
|
||||
}
|
||||
_busy = true;
|
||||
_parser.abort();
|
||||
}
|
||||
|
||||
void ESP8266::_oob_tcp_data_hdlr()
|
||||
|
@ -1205,6 +1219,12 @@ void ESP8266::_oob_connection_status()
|
|||
_conn_stat_cb();
|
||||
}
|
||||
|
||||
void ESP8266::_oob_ok_received()
|
||||
{
|
||||
tr_debug("_oob_ok_received called");
|
||||
_ok_received = true;
|
||||
}
|
||||
|
||||
int8_t ESP8266::default_wifi_mode()
|
||||
{
|
||||
int8_t mode;
|
||||
|
|
|
@ -469,6 +469,7 @@ private:
|
|||
void _oob_tcp_data_hdlr();
|
||||
void _oob_ready();
|
||||
void _oob_scan_results();
|
||||
void _oob_ok_received();
|
||||
|
||||
// OOB state variables
|
||||
int _connect_error;
|
||||
|
@ -479,6 +480,7 @@ private:
|
|||
bool _error;
|
||||
bool _busy;
|
||||
bool _reset_done;
|
||||
bool _ok_received;
|
||||
|
||||
// Modem's address info
|
||||
char _ip_buffer[16];
|
||||
|
|
|
@ -311,6 +311,12 @@ public:
|
|||
*/
|
||||
void oob(const char *prefix, mbed::Callback<void()> func);
|
||||
|
||||
/**
|
||||
* @brief remove_oob Removes oob callback handler
|
||||
* @param prefix Prefix to identify oob to be removed.
|
||||
*/
|
||||
void remove_oob(const char *prefix);
|
||||
|
||||
/**
|
||||
* Flushes the underlying stream
|
||||
*/
|
||||
|
|
|
@ -362,6 +362,25 @@ void ATCmdParser::oob(const char *prefix, Callback<void()> cb)
|
|||
_oobs = oob;
|
||||
}
|
||||
|
||||
void ATCmdParser::remove_oob(const char *prefix)
|
||||
{
|
||||
struct oob *prev = NULL;
|
||||
struct oob *oob = _oobs;
|
||||
while (oob) {
|
||||
if (memcmp(oob->prefix, prefix, strlen(prefix)) == 0) {
|
||||
if (prev) {
|
||||
prev->next = oob->next;
|
||||
} else {
|
||||
_oobs = oob->next;
|
||||
}
|
||||
delete oob;
|
||||
return;
|
||||
}
|
||||
prev = oob;
|
||||
oob = oob->next;
|
||||
}
|
||||
}
|
||||
|
||||
void ATCmdParser::abort()
|
||||
{
|
||||
_aborted = true;
|
||||
|
|
Loading…
Reference in New Issue