From ef0e48a678db0493c873501ee8ca2d01810ddd12 Mon Sep 17 00:00:00 2001 From: diplfranzhoepfinger <37779037+diplfranzhoepfinger@users.noreply.github.com> Date: Wed, 14 Sep 2022 14:05:25 +0200 Subject: [PATCH] extended the modem_console example. (#120) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Franz Höpfinger Co-authored-by: david-cermak <38914379+david-cermak@users.noreply.github.com> --- .../modem_console/main/Kconfig.projbuild | 159 ++++++++++++++++++ .../modem_console/main/modem_console_main.cpp | 43 +++++ 2 files changed, 202 insertions(+) diff --git a/components/esp_modem/examples/modem_console/main/Kconfig.projbuild b/components/esp_modem/examples/modem_console/main/Kconfig.projbuild index 14a070a86..ff88b8014 100644 --- a/components/esp_modem/examples/modem_console/main/Kconfig.projbuild +++ b/components/esp_modem/examples/modem_console/main/Kconfig.projbuild @@ -14,4 +14,163 @@ menu "Example Configuration" help Connect to modem via USB (CDC-ACM class). For IDF version >= 4.4. endchoice + + choice EXAMPLE_MODEM_DEVICE + prompt "Choose supported modem device (DCE)" + default EXAMPLE_MODEM_DEVICE_BG96 + help + Select modem device connected to the ESP DTE. + config EXAMPLE_MODEM_DEVICE_SHINY + bool "SHINY" + help + SHINY is a GSM/GPRS module. + It supports SHINY. + config EXAMPLE_MODEM_DEVICE_SIM800 + bool "SIM800" + help + SIMCom SIM800L is a GSM/GPRS module. + It supports Quad-band 850/900/1800/1900MHz. + config EXAMPLE_MODEM_DEVICE_BG96 + bool "BG96" + help + Quectel BG96 is a series of LTE Cat M1/Cat NB1/EGPRS module. + config EXAMPLE_MODEM_DEVICE_SIM7000 + bool "SIM7000" + help + SIM7000 is a Multi-Band LTE-FDD and GSM/GPRS/EDGE module. + config EXAMPLE_MODEM_DEVICE_SIM7070 + bool "SIM7070" + help + SIM7070 is Multi-Band CAT M and NB IoT module. + config EXAMPLE_MODEM_DEVICE_SIM7600 + bool "SIM7600" + help + SIM7600 is a Multi-Band LTE-TDD/LTE-FDD/HSPA+ and GSM/GPRS/EDGE module. + endchoice + + config EXAMPLE_MODEM_PPP_APN + string "Set MODEM APN" + default "internet" + help + Set APN (Access Point Name), a logical name to choose data network + + config EXAMPLE_MODEM_PPP_AUTH_USERNAME + string "Set username for authentication" + default "espressif" + depends on !EXAMPLE_MODEM_PPP_AUTH_NONE + help + Set username for PPP Authentication. + + config EXAMPLE_MODEM_PPP_AUTH_PASSWORD + string "Set password for authentication" + default "esp32" + depends on !EXAMPLE_MODEM_PPP_AUTH_NONE + help + Set password for PPP Authentication. + + config EXAMPLE_MODEM_PPP_AUTH_NONE + bool "Skip PPP authentication" + default n + help + Set to true for the PPP client to skip authentication + + config EXAMPLE_SEND_MSG + bool "Short message (SMS)" + default n + help + Select this, the modem will send a short message before power off. + + if EXAMPLE_SEND_MSG + config EXAMPLE_SEND_MSG_PEER_PHONE_NUMBER + string "Peer Phone Number (with area code)" + default "+8610086" + help + Enter the peer phone number that you want to send message to. + endif + + config EXAMPLE_NEED_SIM_PIN + bool "SIM PIN needed" + default n + help + Enable to set SIM PIN before starting the example + + config EXAMPLE_SIM_PIN + string "Set SIM PIN" + default "1234" + depends on EXAMPLE_NEED_SIM_PIN + help + Pin to unlock the SIM + + menu "UART Configuration" + config EXAMPLE_MODEM_UART_TX_PIN + int "TXD Pin Number" + default 25 + range 0 31 + help + Pin number of UART TX. + + config EXAMPLE_MODEM_UART_RX_PIN + int "RXD Pin Number" + default 26 + range 0 31 + help + Pin number of UART RX. + + config EXAMPLE_MODEM_UART_RTS_PIN + int "RTS Pin Number" + default 27 + range 0 31 + help + Pin number of UART RTS. + + config EXAMPLE_MODEM_UART_CTS_PIN + int "CTS Pin Number" + default 23 + range 0 31 + help + Pin number of UART CTS. + + config EXAMPLE_MODEM_UART_EVENT_TASK_STACK_SIZE + int "UART Event Task Stack Size" + range 2000 6000 + default 2048 + help + Stack size of UART event task. + + config EXAMPLE_MODEM_UART_EVENT_TASK_PRIORITY + int "UART Event Task Priority" + range 3 22 + default 5 + help + Priority of UART event task. + + config EXAMPLE_MODEM_UART_EVENT_QUEUE_SIZE + int "UART Event Queue Size" + range 10 40 + default 30 + help + Length of UART event queue. + + config EXAMPLE_MODEM_UART_PATTERN_QUEUE_SIZE + int "UART Pattern Queue Size" + range 10 40 + default 20 + help + Length of UART pattern queue. + + config EXAMPLE_MODEM_UART_TX_BUFFER_SIZE + int "UART TX Buffer Size" + range 256 2048 + default 512 + help + Buffer size of UART TX buffer. + + config EXAMPLE_MODEM_UART_RX_BUFFER_SIZE + int "UART RX Buffer Size" + range 256 2048 + default 1024 + help + Buffer size of UART RX buffer. + endmenu + endmenu diff --git a/components/esp_modem/examples/modem_console/main/modem_console_main.cpp b/components/esp_modem/examples/modem_console/main/modem_console_main.cpp index fd68dc5b7..5415f6125 100644 --- a/components/esp_modem/examples/modem_console/main/modem_console_main.cpp +++ b/components/esp_modem/examples/modem_console/main/modem_console_main.cpp @@ -64,8 +64,43 @@ extern "C" void app_main(void) #if defined(CONFIG_EXAMPLE_SERIAL_CONFIG_UART) esp_modem_dte_config_t dte_config = ESP_MODEM_DTE_DEFAULT_CONFIG(); + /* setup UART specific configuration based on kconfig options */ + dte_config.uart_config.tx_io_num = CONFIG_EXAMPLE_MODEM_UART_TX_PIN; + dte_config.uart_config.rx_io_num = CONFIG_EXAMPLE_MODEM_UART_RX_PIN; + dte_config.uart_config.rts_io_num = CONFIG_EXAMPLE_MODEM_UART_RTS_PIN; + dte_config.uart_config.cts_io_num = CONFIG_EXAMPLE_MODEM_UART_CTS_PIN; + dte_config.uart_config.flow_control = ESP_MODEM_FLOW_CONTROL_HW; + dte_config.uart_config.rx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE; + dte_config.uart_config.tx_buffer_size = CONFIG_EXAMPLE_MODEM_UART_TX_BUFFER_SIZE; + dte_config.uart_config.event_queue_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_QUEUE_SIZE; + dte_config.task_stack_size = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_STACK_SIZE; + dte_config.task_priority = CONFIG_EXAMPLE_MODEM_UART_EVENT_TASK_PRIORITY; + dte_config.dte_buffer_size = CONFIG_EXAMPLE_MODEM_UART_RX_BUFFER_SIZE / 2; auto uart_dte = create_uart_dte(&dte_config); + +#if CONFIG_EXAMPLE_MODEM_DEVICE_SHINY == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the SHINY module..."); auto dce = create_shiny_dce(&dce_config, uart_dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_BG96 == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the BG96 module..."); + auto dce = create_BG96_dce(&dce_config, uart_dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM800 == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the SIM800 module..."); + auto dce = create_SIM800_dce(&dce_config, uart_dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7000 == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the SIM7000 module..."); + auto dce = create_SIM7000_dce(&dce_config, uart_dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7070 == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the SIM7070 module..."); + auto dce = create_SIM7070_dce(&dce_config, uart_dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7600 == 1 + ESP_LOGI(TAG, "Initializing esp_modem for the SIM7600 module..."); + auto dce = create_SIM7600_dce(&dce_config, uart_dte, esp_netif); +#else + ESP_LOGI(TAG, "Initializing esp_modem for a generic module..."); + auto dce = create_generic_dce(&dce_config, uart_dte, esp_netif); +#endif + #elif defined(CONFIG_EXAMPLE_SERIAL_CONFIG_USB) struct esp_modem_usb_term_config usb_config = ESP_MODEM_DEFAULT_USB_CONFIG(0x2C7C, 0x0296); // VID and PID of BG96 modem @@ -82,6 +117,14 @@ extern "C" void app_main(void) assert(dce != nullptr); + if(dte_config.uart_config.flow_control == ESP_MODEM_FLOW_CONTROL_HW) { + if (command_result::OK != dce->set_flow_control(2, 2)) { + ESP_LOGE(TAG, "Failed to set the set_flow_control mode"); + return; + } + ESP_LOGI(TAG, "set_flow_control OK"); + } + // init console REPL environment esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT(); esp_console_dev_uart_config_t uart_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();