diff --git a/components/esp_modem/include/cxx_include/esp_modem_netif.hpp b/components/esp_modem/include/cxx_include/esp_modem_netif.hpp index 8dc8fb2fd..a81ba3b55 100644 --- a/components/esp_modem/include/cxx_include/esp_modem_netif.hpp +++ b/components/esp_modem/include/cxx_include/esp_modem_netif.hpp @@ -54,9 +54,10 @@ public: */ void stop(); -private: void receive(uint8_t *data, size_t len); +private: + static esp_err_t esp_modem_dte_transmit(void *h, void *buffer, size_t len); static esp_err_t esp_modem_post_attach(esp_netif_t *esp_netif, void *args); diff --git a/components/esp_modem/src/esp_modem_dce.cpp b/components/esp_modem/src/esp_modem_dce.cpp index 9e822e871..4397302c3 100644 --- a/components/esp_modem/src/esp_modem_dce.cpp +++ b/components/esp_modem/src/esp_modem_dce.cpp @@ -21,10 +21,17 @@ static bool exit_data(DTE &dte, ModuleIf &device, Netif &netif) netif.stop(); auto signal = std::make_shared(); std::weak_ptr weak_signal = signal; - dte.set_read_cb([weak_signal](uint8_t *data, size_t len) -> bool { + dte.set_read_cb([&netif, weak_signal](uint8_t *data, size_t len) -> bool { + // post the transitioning data to the network layers if it contains PPP SOF marker + if (memchr(data, 0x7E, len)) + { + ESP_LOG_BUFFER_HEXDUMP("esp-modem: debug_data (PPP)", data, len, ESP_LOG_DEBUG); + netif.receive(data, len); + } + // treat the transitioning data as a textual message if it contains a newline char if (memchr(data, '\n', len)) { - ESP_LOG_BUFFER_HEXDUMP("esp-modem: debug_data", data, len, ESP_LOG_DEBUG); + ESP_LOG_BUFFER_HEXDUMP("esp-modem: debug_data (CMD)", data, len, ESP_LOG_DEBUG); const auto pass = std::list({"NO CARRIER", "DISCONNECTED"}); std::string_view response((char *) data, len); for (auto &it : pass) diff --git a/components/esp_modem/src/esp_modem_netif.cpp b/components/esp_modem/src/esp_modem_netif.cpp index 75e271d5b..3027179fa 100644 --- a/components/esp_modem/src/esp_modem_netif.cpp +++ b/components/esp_modem/src/esp_modem_netif.cpp @@ -65,9 +65,7 @@ esp_err_t Netif::esp_modem_post_attach(esp_netif_t *esp_netif, void *args) void Netif::receive(uint8_t *data, size_t len) { - if (signal.is_any(PPP_STARTED)) { - esp_netif_receive(driver.base.netif, data, len, nullptr); - } + esp_netif_receive(driver.base.netif, data, len, nullptr); } Netif::Netif(std::shared_ptr e, esp_netif_t *ppp_netif) : @@ -89,8 +87,8 @@ void Netif::start() receive(data, len); return true; }); - esp_netif_action_start(driver.base.netif, nullptr, 0, nullptr); signal.set(PPP_STARTED); + esp_netif_action_start(driver.base.netif, nullptr, 0, nullptr); } void Netif::stop()