From f129871b7224c4a651b27b960d676a7f25aaeab1 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 18 Oct 2021 12:58:24 +0200 Subject: [PATCH 1/2] Examples/PPPoS: Fixed missed NETIF_PPP_STATUS event unregister NETIF_PPP_STATUS is registerd while modem gets attached to the related netif. we don't have any network detach functionality in the modem component, so we unregister the event during esp_modem_netif_clear_default_handlers(). Related https://esp32.com/viewtopic.php?f=13&t=23632 Related https://github.com/espressif/esp-idf/issues/7469 --- .../components/modem/src/esp_modem_netif.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/examples/protocols/pppos_client/components/modem/src/esp_modem_netif.c b/examples/protocols/pppos_client/components/modem/src/esp_modem_netif.c index 1c6f4bcf19..0aab9c2d36 100644 --- a/examples/protocols/pppos_client/components/modem/src/esp_modem_netif.c +++ b/examples/protocols/pppos_client/components/modem/src/esp_modem_netif.c @@ -144,6 +144,19 @@ esp_err_t esp_modem_netif_clear_default_handlers(void *h) if (ret != ESP_OK) { goto clear_event_failed; } + ret = esp_event_handler_unregister(IP_EVENT, IP_EVENT_PPP_GOT_IP, esp_netif_action_connected); + if (ret != ESP_OK) { + goto clear_event_failed; + } + ret = esp_event_handler_unregister(IP_EVENT, IP_EVENT_PPP_LOST_IP, esp_netif_action_disconnected); + if (ret != ESP_OK) { + goto clear_event_failed; + } + + // this event is registered while modem gets attached to netif. + // we don't have any detach functionality, so we unregister here and ignore potential error + esp_event_handler_unregister(NETIF_PPP_STATUS, ESP_EVENT_ANY_ID, on_ppp_changed); + return ESP_OK; clear_event_failed: From 2e8b419b7aa927d771cb47e5c161355aeb681ff1 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 18 Oct 2021 12:56:39 +0200 Subject: [PATCH 2/2] Examples/PPPoS: Add mandatory delay after +++ command Switching back from data (PPP) mode to command mode must be done is the following sequence: * No characters entered for T1 time (1 second) * "+++" characters entered with no characters in between (1 second) * No characters entered for T1 timer (1 second) (per specification of SIM800 SIM800_Series_AT_Command_Manual_V1.09.pdf) Related https://github.com/espressif/esp-idf/issues/7608 --- examples/protocols/pppos_client/components/modem/src/sim800.c | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/protocols/pppos_client/components/modem/src/sim800.c b/examples/protocols/pppos_client/components/modem/src/sim800.c index 177a288e88..5fe459e16d 100644 --- a/examples/protocols/pppos_client/components/modem/src/sim800.c +++ b/examples/protocols/pppos_client/components/modem/src/sim800.c @@ -307,6 +307,7 @@ static esp_err_t sim800_set_working_mode(modem_dce_t *dce, modem_mode_t mode) DCE_CHECK(dce->state == MODEM_STATE_SUCCESS, "sync failed", err); } else { DCE_CHECK(dce->state == MODEM_STATE_SUCCESS, "enter command mode failed", err); + vTaskDelay(pdMS_TO_TICKS(1000)); // spec: 1s delay after `+++` command } ESP_LOGD(DCE_TAG, "enter command mode ok"); dce->mode = MODEM_COMMAND_MODE;