diff --git a/components/esp_modem/examples/simple_cmux_client/main/Kconfig.projbuild b/components/esp_modem/examples/simple_cmux_client/main/Kconfig.projbuild index ed9e96989..73ea224f6 100644 --- a/components/esp_modem/examples/simple_cmux_client/main/Kconfig.projbuild +++ b/components/esp_modem/examples/simple_cmux_client/main/Kconfig.projbuild @@ -14,6 +14,14 @@ menu "Example Configuration" 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 @@ -39,6 +47,50 @@ menu "Example Configuration" help Pin to unlock the SIM + choice EXAMPLE_FLOW_CONTROL + bool "Set preferred modem control flow" + default EXAMPLE_FLOW_CONTROL_NONE + help + Set the modem's preferred control flow + + config EXAMPLE_FLOW_CONTROL_NONE + bool "No control flow" + config EXAMPLE_FLOW_CONTROL_SW + bool "SW control flow" + config EXAMPLE_FLOW_CONTROL_HW + bool "HW control flow" + endchoice + + 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. + endmenu + config EXAMPLE_USE_VFS_TERM bool "Use VFS terminal" default n diff --git a/components/esp_modem/examples/simple_cmux_client/main/simple_cmux_client_main.cpp b/components/esp_modem/examples/simple_cmux_client/main/simple_cmux_client_main.cpp index 62da2fee9..9678c6313 100644 --- a/components/esp_modem/examples/simple_cmux_client/main/simple_cmux_client_main.cpp +++ b/components/esp_modem/examples/simple_cmux_client/main/simple_cmux_client_main.cpp @@ -21,6 +21,14 @@ #include "esp_https_ota.h" // For potential OTA configuration #include "vfs_resource/vfs_create.hpp" +#if defined(CONFIG_EXAMPLE_FLOW_CONTROL_NONE) +#define EXAMPLE_FLOW_CONTROL ESP_MODEM_FLOW_CONTROL_NONE +#elif defined(CONFIG_EXAMPLE_FLOW_CONTROL_SW) +#define EXAMPLE_FLOW_CONTROL ESP_MODEM_FLOW_CONTROL_SW +#elif defined(CONFIG_EXAMPLE_FLOW_CONTROL_HW) +#define EXAMPLE_FLOW_CONTROL ESP_MODEM_FLOW_CONTROL_HW +#endif + #define BROKER_URL "mqtt://mqtt.eclipseprojects.io" @@ -39,6 +47,12 @@ extern "C" void app_main(void) /* Configure and create the DTE */ 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 = EXAMPLE_FLOW_CONTROL; #if CONFIG_EXAMPLE_USE_VFS_TERM == 1 /* The VFS terminal is just a demonstration of using an abstract file descriptor * which implements non-block reads, writes and selects to communicate with esp-modem. @@ -71,6 +85,10 @@ extern "C" void app_main(void) std::unique_ptr dce = create_BG96_dce(&dce_config, dte, esp_netif); #elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM800 == 1 std::unique_ptr dce = create_SIM800_dce(&dce_config, dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7000 == 1 + std::unique_ptr dce = create_SIM7000_dce(&dce_config, dte, esp_netif); +#elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7070 == 1 + std::unique_ptr dce = create_SIM7070_dce(&dce_config, dte, esp_netif); #elif CONFIG_EXAMPLE_MODEM_DEVICE_SIM7600 == 1 std::unique_ptr dce = create_SIM7600_dce(&dce_config, dte, esp_netif); #else @@ -78,6 +96,17 @@ extern "C" void app_main(void) #endif assert(dce); + 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"); + } else { + ESP_LOGI(TAG, "not set_flow_control, because 2-wire mode active."); + } + /* Setup basic operation mode for the DCE (pin if used, CMUX mode) */ #if CONFIG_EXAMPLE_NEED_SIM_PIN == 1 bool pin_ok = true;