34
34
static const char * TAG = "pppos_example" ;
35
35
static EventGroupHandle_t event_group = NULL ;
36
36
static const int CONNECT_BIT = BIT0 ;
37
+ static const int DISCONNECT_BIT = BIT1 ;
37
38
static const int GOT_DATA_BIT = BIT2 ;
38
39
static const int USB_DISCONNECTED_BIT = BIT3 ; // Used only with USB DTE but we define it unconditionally, to avoid too many #ifdefs in the code
39
40
@@ -55,6 +56,7 @@ static void usb_terminal_error_handler(esp_modem_terminal_error_t err)
55
56
}
56
57
#define CHECK_USB_DISCONNECTION (event_group ) \
57
58
if ((xEventGroupGetBits(event_group) & USB_DISCONNECTED_BIT) == USB_DISCONNECTED_BIT) { \
59
+ ESP_LOGE(TAG, "USB_DISCONNECTED_BIT destroying modem dce"); \
58
60
esp_modem_destroy(dce); \
59
61
continue; \
60
62
}
@@ -140,6 +142,7 @@ static void on_ip_event(void *arg, esp_event_base_t event_base,
140
142
ESP_LOGI (TAG , "GOT ip event!!!" );
141
143
} else if (event_id == IP_EVENT_PPP_LOST_IP ) {
142
144
ESP_LOGI (TAG , "Modem Disconnect from PPP Server" );
145
+ xEventGroupSetBits (event_group , DISCONNECT_BIT );
143
146
} else if (event_id == IP_EVENT_GOT_IP6 ) {
144
147
ESP_LOGI (TAG , "GOT IPv6 event!" );
145
148
@@ -158,6 +161,7 @@ void app_main(void)
158
161
ESP_ERROR_CHECK (esp_event_handler_register (NETIF_PPP_STATUS , ESP_EVENT_ANY_ID , & on_ppp_changed , NULL ));
159
162
160
163
/* Configure the PPP netif */
164
+ esp_err_t err ;
161
165
esp_modem_dce_config_t dce_config = ESP_MODEM_DCE_DEFAULT_CONFIG (CONFIG_EXAMPLE_MODEM_PPP_APN );
162
166
esp_netif_config_t netif_ppp_config = ESP_NETIF_DEFAULT_PPP ();
163
167
esp_netif_t * esp_netif = esp_netif_new (& netif_ppp_config );
@@ -177,7 +181,7 @@ void app_main(void)
177
181
dte_config .uart_config .rx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE ;
178
182
dte_config .uart_config .tx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_TX_BUFFER_SIZE ;
179
183
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 * 2 ;
184
+ dte_config .task_stack_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_STACK_SIZE ;
181
185
dte_config .task_priority = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_PRIORITY ;
182
186
dte_config .dte_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE / 2 ;
183
187
@@ -205,7 +209,7 @@ void app_main(void)
205
209
#endif
206
210
assert (dce );
207
211
if (dte_config .uart_config .flow_control == ESP_MODEM_FLOW_CONTROL_HW ) {
208
- esp_err_t err = esp_modem_set_flow_control (dce , 2 , 2 ); //2/2 means HW Flow Control.
212
+ err = esp_modem_set_flow_control (dce , 2 , 2 ); //2/2 means HW Flow Control.
209
213
if (err != ESP_OK ) {
210
214
ESP_LOGE (TAG , "Failed to set the set_flow_control mode" );
211
215
return ;
@@ -246,23 +250,27 @@ void app_main(void)
246
250
#error Invalid serial connection to modem.
247
251
#endif
248
252
249
- xEventGroupClearBits (event_group , CONNECT_BIT | GOT_DATA_BIT | USB_DISCONNECTED_BIT );
253
+ #if CONFIG_EXAMPLE_DETECT_MODE_BEFORE_CONNECT
254
+ xEventGroupClearBits (event_group , CONNECT_BIT | GOT_DATA_BIT | USB_DISCONNECTED_BIT | DISCONNECT_BIT );
250
255
251
- esp_err_t err = esp_modem_set_mode (dce , ESP_MODEM_MODE_DETECT );
256
+ err = esp_modem_set_mode (dce , ESP_MODEM_MODE_DETECT );
252
257
if (err != ESP_OK ) {
253
258
ESP_LOGE (TAG , "esp_modem_set_mode(ESP_MODEM_MODE_DETECT) failed with %d" , err );
254
259
return ;
255
260
}
256
- ESP_LOGI (TAG , "Mode detected!" );
257
261
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 ) {
262
+ ESP_LOGI (TAG , "Mode detection completed: current mode is: %d" , mode );
263
+ if (mode == ESP_MODEM_MODE_DATA ) { // set back to command mode
260
264
err = esp_modem_set_mode (dce , ESP_MODEM_MODE_COMMAND );
261
265
if (err != ESP_OK ) {
262
266
ESP_LOGE (TAG , "esp_modem_set_mode(ESP_MODEM_MODE_COMMAND) failed with %d" , err );
263
267
return ;
264
268
}
269
+ ESP_LOGI (TAG , "Command mode restored" );
265
270
}
271
+ #endif // CONFIG_EXAMPLE_DETECT_MODE_BEFORE_CONNECT
272
+
273
+ xEventGroupClearBits (event_group , CONNECT_BIT | GOT_DATA_BIT | USB_DISCONNECTED_BIT | DISCONNECT_BIT );
266
274
267
275
/* Run the modem demo app */
268
276
#if CONFIG_EXAMPLE_NEED_SIM_PIN == 1
@@ -317,19 +325,24 @@ void app_main(void)
317
325
}
318
326
/* Wait for IP address */
319
327
ESP_LOGI (TAG , "Waiting for IP address" );
320
- xEventGroupWaitBits (event_group , CONNECT_BIT | USB_DISCONNECTED_BIT , pdFALSE , pdFALSE , portMAX_DELAY );
328
+ xEventGroupWaitBits (event_group , CONNECT_BIT | USB_DISCONNECTED_BIT | DISCONNECT_BIT , pdFALSE , pdFALSE ,
329
+ pdMS_TO_TICKS (60000 ));
321
330
CHECK_USB_DISCONNECTION (event_group );
331
+ if ((xEventGroupGetBits (event_group ) & CONNECT_BIT ) != CONNECT_BIT ) {
332
+ ESP_LOGW (TAG , "Modem not connected, switching back to the command mode" );
333
+ err = esp_modem_set_mode (dce , ESP_MODEM_MODE_COMMAND );
334
+ if (err != ESP_OK ) {
335
+ ESP_LOGE (TAG , "esp_modem_set_mode(ESP_MODEM_MODE_COMMAND) failed with %d" , err );
336
+ return ;
337
+ }
338
+ ESP_LOGI (TAG , "Command mode restored" );
339
+ return ;
340
+ }
322
341
323
342
/* Config MQTT */
324
- #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 0 , 0 )
325
343
esp_mqtt_client_config_t mqtt_config = {
326
344
.broker .address .uri = CONFIG_EXAMPLE_MQTT_BROKER_URI ,
327
345
};
328
- #else
329
- esp_mqtt_client_config_t mqtt_config = {
330
- .uri = CONFIG_EXAMPLE_MQTT_BROKER_URI ,
331
- };
332
- #endif
333
346
esp_mqtt_client_handle_t mqtt_client = esp_mqtt_client_init (& mqtt_config );
334
347
esp_mqtt_client_register_event (mqtt_client , ESP_EVENT_ANY_ID , mqtt_event_handler , NULL );
335
348
esp_mqtt_client_start (mqtt_client );
@@ -345,7 +358,7 @@ void app_main(void)
345
358
ESP_LOGI (TAG , "Signal quality: rssi=%d, ber=%d" , rssi , ber );
346
359
esp_modem_pause_net (dce , false);
347
360
esp_mqtt_client_publish (mqtt_client , CONFIG_EXAMPLE_MQTT_TEST_TOPIC , CONFIG_EXAMPLE_MQTT_TEST_DATA , 0 , 0 , 0 );
348
- #endif
361
+ #endif // CONFIG_EXAMPLE_PAUSE_NETIF_TO_CHECK_SIGNAL
349
362
350
363
ESP_LOGI (TAG , "Waiting for MQTT data" );
351
364
xEventGroupWaitBits (event_group , GOT_DATA_BIT | USB_DISCONNECTED_BIT , pdFALSE , pdFALSE , portMAX_DELAY );
0 commit comments