Skip to content

Commit 18f196f

Browse files
committed
feat(modem): Add mode detection to the example
1 parent 1db83cd commit 18f196f

File tree

5 files changed

+62
-3
lines changed

5 files changed

+62
-3
lines changed

components/esp_modem/examples/pppos_client/main/pppos_client_main.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void app_main(void)
177177
dte_config.uart_config.rx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE;
178178
dte_config.uart_config.tx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_TX_BUFFER_SIZE;
179179
dte_config.uart_config.event_queue_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_QUEUE_SIZE;
180-
dte_config.task_stack_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_STACK_SIZE;
180+
dte_config.task_stack_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_STACK_SIZE * 2;
181181
dte_config.task_priority = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_PRIORITY;
182182
dte_config.dte_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE / 2;
183183

@@ -248,6 +248,22 @@ void app_main(void)
248248

249249
xEventGroupClearBits(event_group, CONNECT_BIT | GOT_DATA_BIT | USB_DISCONNECTED_BIT);
250250

251+
esp_err_t err = esp_modem_set_mode(dce, ESP_MODEM_MODE_DETECT);
252+
if (err != ESP_OK) {
253+
ESP_LOGE(TAG, "esp_modem_set_mode(ESP_MODEM_MODE_DETECT) failed with %d", err);
254+
return;
255+
}
256+
ESP_LOGI(TAG, "Mode detected!");
257+
esp_modem_dce_mode_t mode = esp_modem_get_mode(dce);
258+
ESP_LOGI(TAG, "Current mode is : %d", mode);
259+
if (mode != ESP_MODEM_MODE_COMMAND) {
260+
err = esp_modem_set_mode(dce, ESP_MODEM_MODE_COMMAND);
261+
if (err != ESP_OK) {
262+
ESP_LOGE(TAG, "esp_modem_set_mode(ESP_MODEM_MODE_COMMAND) failed with %d", err);
263+
return;
264+
}
265+
}
266+
251267
/* Run the modem demo app */
252268
#if CONFIG_EXAMPLE_NEED_SIM_PIN == 1
253269
// check if PIN needed
@@ -262,7 +278,7 @@ void app_main(void)
262278
#endif
263279

264280
int rssi, ber;
265-
esp_err_t err = esp_modem_get_signal_quality(dce, &rssi, &ber);
281+
err = esp_modem_get_signal_quality(dce, &rssi, &ber);
266282
if (err != ESP_OK) {
267283
ESP_LOGE(TAG, "esp_modem_get_signal_quality failed with %d %s", err, esp_err_to_name(err));
268284
return;

components/esp_modem/examples/pppos_client/sdkconfig.ci.sim800_c3

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ CONFIG_EXAMPLE_MQTT_TEST_TOPIC="/ci/esp-modem/pppos-client"
1414
CONFIG_EXAMPLE_PAUSE_NETIF_TO_CHECK_SIGNAL=y
1515
CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y
1616
CONFIG_ESP32_PANIC_PRINT_HALT=y
17+
CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y

components/esp_modem/include/cxx_include/esp_modem_dce.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ class DCE_T {
9191
return mode.set(dte.get(), device.get(), netif, m);
9292
}
9393

94+
modem_mode get_mode()
95+
{
96+
return mode.get();
97+
}
98+
9499
bool recover()
95100
{
96101
return dte->recover();
@@ -109,11 +114,12 @@ class DCE_T {
109114
* @param force true to ignore command failures and continue
110115
* @return command_result of the underlying commands
111116
*/
112-
command_result pause_netif(bool do_pause, bool force = false)
117+
command_result pause_netif(bool do_pause, bool force = false, int delay = 1000)
113118
{
114119
command_result result;
115120
if (do_pause) {
116121
netif.pause();
122+
Task::Delay(delay); // Mandatory 1s pause before
117123
dte->set_command_callbacks();
118124
result = device->set_command_mode();
119125
} else {

components/esp_modem/include/esp_modem_c_api_types.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ typedef enum esp_modem_dce_mode {
4545
ESP_MODEM_MODE_CMUX_MANUAL_SWAP, /**< Swap terminals in CMUX manual mode */
4646
ESP_MODEM_MODE_CMUX_MANUAL_DATA, /**< Set DATA mode in CMUX manual mode */
4747
ESP_MODEM_MODE_CMUX_MANUAL_COMMAND, /**< Set COMMAND mode in CMUX manual mode */
48+
ESP_MODEM_MODE_DETECT, /**< Detect the mode and resume it (if sucessfully detected) */
49+
ESP_MODEM_MODE_UNDEF,
4850
} esp_modem_dce_mode_t;
4951

5052
/**
@@ -171,6 +173,7 @@ esp_err_t esp_modem_set_urc(esp_modem_dce_t *dce, esp_err_t(*got_line_cb)(uint8_
171173
*/
172174
esp_err_t esp_modem_pause_net(esp_modem_dce_t *dce, bool pause);
173175

176+
esp_modem_dce_mode_t esp_modem_get_mode(esp_modem_dce_t *dce);
174177
/**
175178
* @}
176179
*/

components/esp_modem/src/esp_modem_c_api.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,43 @@ extern "C" esp_err_t esp_modem_sync(esp_modem_dce_t *dce_wrap)
9595
return command_response_to_esp_err(dce_wrap->dce->sync());
9696
}
9797

98+
extern "C" esp_modem_dce_mode_t esp_modem_get_mode(esp_modem_dce_t *dce_wrap)
99+
{
100+
if (dce_wrap == nullptr || dce_wrap->dce == nullptr) {
101+
return ESP_MODEM_MODE_UNDEF;
102+
}
103+
auto mode = dce_wrap->dce->get_mode();
104+
switch (mode) {
105+
default:
106+
case modem_mode::UNDEF:
107+
return ESP_MODEM_MODE_UNDEF;
108+
case modem_mode::COMMAND_MODE:
109+
return ESP_MODEM_MODE_COMMAND;
110+
case modem_mode::DATA_MODE:
111+
return ESP_MODEM_MODE_DATA;
112+
case modem_mode::CMUX_MODE:
113+
return ESP_MODEM_MODE_CMUX;
114+
case modem_mode::CMUX_MANUAL_MODE:
115+
return ESP_MODEM_MODE_CMUX_MANUAL;
116+
case modem_mode::CMUX_MANUAL_EXIT:
117+
return ESP_MODEM_MODE_CMUX_MANUAL_EXIT;
118+
case modem_mode::CMUX_MANUAL_DATA:
119+
return ESP_MODEM_MODE_CMUX_MANUAL_DATA;
120+
case modem_mode::CMUX_MANUAL_COMMAND:
121+
return ESP_MODEM_MODE_CMUX_MANUAL_COMMAND;
122+
case modem_mode::CMUX_MANUAL_SWAP:
123+
return ESP_MODEM_MODE_CMUX_MANUAL_SWAP;
124+
}
125+
}
126+
98127
extern "C" esp_err_t esp_modem_set_mode(esp_modem_dce_t *dce_wrap, esp_modem_dce_mode_t mode)
99128
{
100129
if (dce_wrap == nullptr || dce_wrap->dce == nullptr) {
101130
return ESP_ERR_INVALID_ARG;
102131
}
103132
switch (mode) {
133+
case ESP_MODEM_MODE_UNDEF:
134+
return dce_wrap->dce->set_mode(modem_mode::UNDEF) ? ESP_OK : ESP_FAIL;
104135
case ESP_MODEM_MODE_DATA:
105136
return dce_wrap->dce->set_mode(modem_mode::DATA_MODE) ? ESP_OK : ESP_FAIL;
106137
case ESP_MODEM_MODE_COMMAND:
@@ -117,6 +148,8 @@ extern "C" esp_err_t esp_modem_set_mode(esp_modem_dce_t *dce_wrap, esp_modem_dce
117148
return dce_wrap->dce->set_mode(modem_mode::CMUX_MANUAL_DATA) ? ESP_OK : ESP_FAIL;
118149
case ESP_MODEM_MODE_CMUX_MANUAL_COMMAND:
119150
return dce_wrap->dce->set_mode(modem_mode::CMUX_MANUAL_COMMAND) ? ESP_OK : ESP_FAIL;
151+
case ESP_MODEM_MODE_DETECT:
152+
return dce_wrap->dce->set_mode(modem_mode::AUTODETECT) ? ESP_OK : ESP_FAIL;
120153
}
121154
return ESP_ERR_NOT_SUPPORTED;
122155
}

0 commit comments

Comments
 (0)