1717#include <zephyr/net/ppp.h>
1818#include <zephyr/pm/device.h>
1919#include <zephyr/sys/atomic.h>
20+ #include <zephyr/drivers/uart.h>
2021
2122#include <zephyr/logging/log.h>
2223LOG_MODULE_REGISTER (modem_cellular , CONFIG_MODEM_LOG_LEVEL );
@@ -34,6 +35,7 @@ LOG_MODULE_REGISTER(modem_cellular, CONFIG_MODEM_LOG_LEVEL);
3435#define MODEM_CELLULAR_DATA_MANUFACTURER_LEN (65)
3536#define MODEM_CELLULAR_DATA_FW_VERSION_LEN (65)
3637
38+ #define MODEM_CELLULAR_DEFAULT_BAUDRATE (115200)
3739#define MODEM_CELLULAR_RESERVED_DLCIS (2)
3840
3941/* Magic constants */
@@ -239,6 +241,18 @@ static bool modem_cellular_gpio_is_enabled(const struct gpio_dt_spec *gpio)
239241 return gpio -> port != NULL ;
240242}
241243
244+ static int modem_cellular_set_baudrate (const struct device * uart , uint32_t baudrate ) {
245+ struct uart_config config ;
246+ int rc = uart_config_get (uart , & config );
247+ if (rc != 0 ) {
248+ return rc ;
249+ }
250+
251+ config .baudrate = baudrate ;
252+
253+ return uart_configure (uart , & config );
254+ }
255+
242256static void modem_cellular_notify_user_pipes_connected (struct modem_cellular_data * data )
243257{
244258 const struct modem_cellular_config * config =
@@ -477,7 +491,22 @@ static void modem_cellular_chat_on_cxreg(struct modem_chat *chat, char **argv, u
477491 }
478492}
479493
494+
495+ static void modem_cellular_chat_on_ipr (struct modem_chat * chat , char * * argv , uint16_t argc , void * user_data ){
496+ int rc ;
497+ struct modem_cellular_data * data = (struct modem_cellular_data * )user_data ;
498+
499+ const struct device * uart = data -> uart_backend .uart ;
500+
501+ rc = modem_cellular_set_baudrate (uart , CONFIG_MODEM_CELLULAR_UART_BAUDRATE );
502+
503+ if (rc != 0 ) {
504+ LOG_DBG ("Configure UART to %d" , CONFIG_MODEM_CELLULAR_UART_BAUDRATE );
505+ }
506+ }
507+
480508MODEM_CHAT_MATCH_DEFINE (ok_match , "OK" , "" , NULL );
509+ MODEM_CHAT_MATCH_DEFINE (ipr_match , "OK" , "" , modem_cellular_chat_on_ipr );
481510MODEM_CHAT_MATCHES_DEFINE (allow_match ,
482511 MODEM_CHAT_MATCH ("OK" , "" , NULL ),
483512 MODEM_CHAT_MATCH ("ERROR" , "" , NULL ));
@@ -651,6 +680,10 @@ static int modem_cellular_on_reset_pulse_state_enter(struct modem_cellular_data
651680 (const struct modem_cellular_config * )data -> dev -> config ;
652681
653682 gpio_pin_set_dt (& config -> reset_gpio , 1 );
683+
684+ const struct device * uart = data -> uart_backend .uart ;
685+ modem_cellular_set_baudrate (uart , MODEM_CELLULAR_DEFAULT_BAUDRATE );
686+
654687 modem_cellular_start_timer (data , K_MSEC (config -> reset_pulse_duration_ms ));
655688 return 0 ;
656689}
@@ -1772,7 +1805,16 @@ MODEM_CHAT_SCRIPT_DEFINE(quectel_bg95_get_signal_chat_script,
17721805
17731806#if DT_HAS_COMPAT_STATUS_OKAY (quectel_eg25_g )
17741807MODEM_CHAT_SCRIPT_CMDS_DEFINE (
1775- quectel_eg25_g_init_chat_script_cmds , MODEM_CHAT_SCRIPT_CMD_RESP ("ATE0" , ok_match ),
1808+ quectel_eg25_g_init_chat_script_cmds ,
1809+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+IPR=" STRINGIFY (CONFIG_MODEM_CELLULAR_UART_BAUDRATE ), ipr_match ),
1810+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1811+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1812+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1813+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1814+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1815+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1816+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("ATE0" , 100 ),
1817+ MODEM_CHAT_SCRIPT_CMD_RESP ("ATE0" , ok_match ),
17761818 MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CFUN=4" , ok_match ),
17771819 MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CMEE=1" , ok_match ),
17781820 MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CREG=1" , ok_match ),
@@ -1791,7 +1833,9 @@ MODEM_CHAT_SCRIPT_CMDS_DEFINE(
17911833 MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
17921834 MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CIMI" , cimi_match ),
17931835 MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
1794- MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("AT+CMUX=0,0,5,127,10,3,30,10,2" , 100 ));
1836+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+QCCID" , qccid_match ),
1837+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
1838+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("AT+CMUX=0,0," STRINGIFY (CONFIG_MODEM_CMUX_BAUDRATE ) ",127,10,3,30,10,2" , 100 ));
17951839
17961840MODEM_CHAT_SCRIPT_DEFINE (quectel_eg25_g_init_chat_script , quectel_eg25_g_init_chat_script_cmds ,
17971841 abort_matches , modem_cellular_chat_callback_handler , 10 );
0 commit comments