@@ -525,7 +525,8 @@ MODEM_CHAT_MATCHES_DEFINE(dial_abort_matches,
525525 MODEM_CHAT_MATCH ("NO CARRIER" , "" , NULL ),
526526 MODEM_CHAT_MATCH ("NO DIALTONE" , "" , NULL ));
527527
528- #if DT_HAS_COMPAT_STATUS_OKAY (swir_hl7800 ) || DT_HAS_COMPAT_STATUS_OKAY (sqn_gm02s )
528+ #if DT_HAS_COMPAT_STATUS_OKAY (swir_hl7800 ) || DT_HAS_COMPAT_STATUS_OKAY (sqn_gm02s ) || \
529+ DT_HAS_COMPAT_STATUS_OKAY (quectel_eg800q )
529530MODEM_CHAT_MATCH_DEFINE (connect_match , "CONNECT" , "" , NULL );
530531#endif
531532
@@ -2022,6 +2023,54 @@ MODEM_CHAT_SCRIPT_DEFINE(quectel_eg25_g_periodic_chat_script,
20222023 modem_cellular_chat_callback_handler , 4 );
20232024#endif
20242025
2026+ #if DT_HAS_COMPAT_STATUS_OKAY (quectel_eg800q )
2027+ MODEM_CHAT_SCRIPT_CMDS_DEFINE (quectel_eg800q_init_chat_script_cmds ,
2028+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT" , ok_match ),
2029+ MODEM_CHAT_SCRIPT_CMD_RESP ("ATE0" , ok_match ),
2030+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CFUN?" , ok_match ),
2031+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CFUN=4" , ok_match ),
2032+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CMEE=1" , ok_match ),
2033+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CEREG=1" , ok_match ),
2034+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CEREG?" , ok_match ),
2035+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CGSN" , imei_match ),
2036+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
2037+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CGMM" , cgmm_match ),
2038+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
2039+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CGMI" , cgmi_match ),
2040+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
2041+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CGMR" , cgmr_match ),
2042+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
2043+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CIMI" , cimi_match ),
2044+ MODEM_CHAT_SCRIPT_CMD_RESP ("" , ok_match ),
2045+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CMUX=0,0,5,127" , ok_match ));
2046+
2047+ MODEM_CHAT_SCRIPT_DEFINE (quectel_eg800q_init_chat_script , quectel_eg800q_init_chat_script_cmds ,
2048+ abort_matches , modem_cellular_chat_callback_handler , 30 );
2049+
2050+ MODEM_CHAT_SCRIPT_CMDS_DEFINE (quectel_eg800q_dial_chat_script_cmds ,
2051+ MODEM_CHAT_SCRIPT_CMD_RESP_MULT ("AT+CGACT=0,1" , allow_match ),
2052+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CGDCONT=1,\"IP\","
2053+ "\"" CONFIG_MODEM_CELLULAR_APN "\"" ,
2054+ ok_match ),
2055+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CFUN=1" , ok_match ),
2056+ /* this at command is required as a small delay before performing
2057+ * dialing, otherwise we get 'NO CARRIER' and abort
2058+ */
2059+ MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("AT" , 500 ),
2060+ MODEM_CHAT_SCRIPT_CMD_RESP ("ATD*99***1#" , connect_match ), );
2061+
2062+ MODEM_CHAT_SCRIPT_DEFINE (quectel_eg800q_dial_chat_script , quectel_eg800q_dial_chat_script_cmds ,
2063+ dial_abort_matches , modem_cellular_chat_callback_handler , 10 );
2064+
2065+ MODEM_CHAT_SCRIPT_CMDS_DEFINE (quectel_eg800q_periodic_chat_script_cmds ,
2066+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CEREG?" , ok_match ),
2067+ MODEM_CHAT_SCRIPT_CMD_RESP ("AT+CSQ" , csq_match ));
2068+
2069+ MODEM_CHAT_SCRIPT_DEFINE (quectel_eg800q_periodic_chat_script ,
2070+ quectel_eg800q_periodic_chat_script_cmds , abort_matches ,
2071+ modem_cellular_chat_callback_handler , 4 );
2072+ #endif
2073+
20252074#if DT_HAS_COMPAT_STATUS_OKAY (simcom_sim7080 )
20262075MODEM_CHAT_SCRIPT_CMDS_DEFINE (simcom_sim7080_init_chat_script_cmds ,
20272076 MODEM_CHAT_SCRIPT_CMD_RESP_NONE ("AT" , 100 ),
@@ -2551,6 +2600,25 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script,
25512600 &quectel_eg25_g_dial_chat_script, \
25522601 &quectel_eg25_g_periodic_chat_script, NULL)
25532602
2603+ #define MODEM_CELLULAR_DEVICE_QUECTEL_EG800Q (inst ) \
2604+ MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \
2605+ \
2606+ static struct modem_cellular_data MODEM_CELLULAR_INST_NAME(data, inst) = { \
2607+ .chat_delimiter = "\r", \
2608+ .chat_filter = "\n", \
2609+ .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \
2610+ }; \
2611+ \
2612+ MODEM_CELLULAR_DEFINE_AND_INIT_USER_PIPES(inst, \
2613+ (user_pipe_0, 3), \
2614+ (user_pipe_1, 4)) \
2615+ \
2616+ MODEM_CELLULAR_DEFINE_INSTANCE(inst, 1500, 500, 15000, 5000, false, \
2617+ NULL, \
2618+ &quectel_eg800q_init_chat_script, \
2619+ &quectel_eg800q_dial_chat_script, \
2620+ &quectel_eg800q_periodic_chat_script, NULL)
2621+
25542622#define MODEM_CELLULAR_DEVICE_SIMCOM_SIM7080 (inst ) \
25552623 MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \
25562624 \
@@ -2729,6 +2797,10 @@ DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_QUECTEL_BG95)
27292797DT_INST_FOREACH_STATUS_OKAY (MODEM_CELLULAR_DEVICE_QUECTEL_EG25_G )
27302798#undef DT_DRV_COMPAT
27312799
2800+ #define DT_DRV_COMPAT quectel_eg800q
2801+ DT_INST_FOREACH_STATUS_OKAY (MODEM_CELLULAR_DEVICE_QUECTEL_EG800Q )
2802+ #undef DT_DRV_COMPAT
2803+
27322804#define DT_DRV_COMPAT simcom_sim7080
27332805DT_INST_FOREACH_STATUS_OKAY (MODEM_CELLULAR_DEVICE_SIMCOM_SIM7080 )
27342806#undef DT_DRV_COMPAT
0 commit comments