diff --git a/components/esp_modem/include/esp_modem_c_api_types.h b/components/esp_modem/include/esp_modem_c_api_types.h index 577b4ce03..2c37b796b 100644 --- a/components/esp_modem/include/esp_modem_c_api_types.h +++ b/components/esp_modem/include/esp_modem_c_api_types.h @@ -39,6 +39,7 @@ typedef enum esp_modem_dce_mode { ESP_MODEM_MODE_COMMAND, /**< Default mode after modem startup, used for sending AT commands */ ESP_MODEM_MODE_DATA, /**< Used for switching to PPP mode for the modem to connect to a network */ + ESP_MODEM_MODE_CMUX, /**< Multiplexed terminal mode */ } esp_modem_dce_mode_t; /** diff --git a/components/esp_modem/src/esp_modem_c_api.cpp b/components/esp_modem/src/esp_modem_c_api.cpp index 6f5a6ad7f..e89fc1950 100644 --- a/components/esp_modem/src/esp_modem_c_api.cpp +++ b/components/esp_modem/src/esp_modem_c_api.cpp @@ -125,6 +125,13 @@ extern "C" esp_err_t esp_modem_set_mode(esp_modem_dce_t *dce_wrap, esp_modem_dce dce_wrap->dce->set_data(); } else if (mode == ESP_MODEM_MODE_COMMAND) { dce_wrap->dce->exit_data(); + } else if (mode == ESP_MODEM_MODE_CMUX) { + if (dce_wrap->dce->set_mode(modem_mode::CMUX_MODE) && + // automatically switch to data mode for the primary terminal + dce_wrap->dce->set_mode(modem_mode::DATA_MODE)) { + return ESP_OK; + } + return ESP_FAIL; } else { return ESP_ERR_NOT_SUPPORTED; }