Skip to content

Commit 1284f66

Browse files
committed
fix(modem): Fix CMUX enter to ignore URC before transition
Closes #669
1 parent c5b49de commit 1284f66

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

components/esp_modem/src/esp_modem_cmux.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,12 @@ bool CMux::data_available(uint8_t *data, size_t len)
123123
{
124124
if (data && (type & FT_UIH) == FT_UIH && len > 0 && dlci > 0) { // valid payload on a virtual term
125125
int virtual_term = dlci - 1;
126-
if (virtual_term < MAX_TERMINALS_NUM && read_cb[virtual_term]) {
126+
if (virtual_term < MAX_TERMINALS_NUM) {
127+
if (read_cb[virtual_term] == nullptr) {
128+
// ignore all virtual terminal's data before we completely establish CMUX
129+
ESP_LOG_BUFFER_HEXDUMP("CMUX Rx before init", data, len, ESP_LOG_DEBUG);
130+
return true;
131+
}
127132
// Post partial data (or defragment to post on CMUX footer)
128133
#ifdef DEFRAGMENT_CMUX_PAYLOAD
129134
if (payload_start == nullptr) {
@@ -142,7 +147,11 @@ bool CMux::data_available(uint8_t *data, size_t len)
142147
sabm_ack = dlci;
143148
} else if (data == nullptr && dlci > 0) {
144149
int virtual_term = dlci - 1;
145-
if (virtual_term < MAX_TERMINALS_NUM && read_cb[virtual_term]) {
150+
if (virtual_term < MAX_TERMINALS_NUM) {
151+
if (read_cb[virtual_term] == nullptr) {
152+
// silently ignore this CMUX frame (not finished entering CMUX, yet)
153+
return true;
154+
}
146155
#ifdef DEFRAGMENT_CMUX_PAYLOAD
147156
read_cb[virtual_term](payload_start, total_payload_size);
148157
#endif

0 commit comments

Comments
 (0)