Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
modem_cellular.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_CELLULAR_INTERNAL_H_
14#define ZEPHYR_INCLUDE_DRIVERS_CELLULAR_INTERNAL_H_
15
18#include <zephyr/drivers/uart.h>
19#include <zephyr/drivers/gpio.h>
20#include <zephyr/pm/device.h>
21#include <zephyr/modem/chat.h>
22#include <zephyr/modem/cmux.h>
23#include <zephyr/modem/pipe.h>
25#include <zephyr/modem/ppp.h>
27#include <zephyr/sys/atomic.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
40
42
43#define MODEM_CELLULAR_DATA_IMEI_LEN (16)
44#define MODEM_CELLULAR_DATA_MODEL_ID_LEN (65)
45#define MODEM_CELLULAR_DATA_IMSI_LEN (23)
46#define MODEM_CELLULAR_DATA_ICCID_LEN (22)
47#define MODEM_CELLULAR_DATA_MANUFACTURER_LEN (65)
48#define MODEM_CELLULAR_DATA_FW_VERSION_LEN (65)
49#define MODEM_CELLULAR_DATA_APN_LEN (32)
50#define MODEM_CELLULAR_MAX_APN_CMDS (2)
51#define MODEM_CELLULAR_APN_BUF_SIZE (64)
52
53/* Zephyr networking interface states:
54 * NET_IF_LOWER_UP: Carrier is on in AWAIT_REGISTERED and REGISTERED
55 * NET_IF_DORMANT: Interface is dormant in every state except REGISTERED
56 */
57enum modem_cellular_state {
58 MODEM_CELLULAR_STATE_IDLE = 0,
59 MODEM_CELLULAR_STATE_RECOVERY,
60 MODEM_CELLULAR_STATE_RESET_PULSE,
61 MODEM_CELLULAR_STATE_AWAIT_RESET,
62 MODEM_CELLULAR_STATE_POWER_ON_PULSE,
63 MODEM_CELLULAR_STATE_AWAIT_POWER_ON,
64 MODEM_CELLULAR_STATE_SET_BAUDRATE,
65 MODEM_CELLULAR_STATE_RUN_INIT_SCRIPT,
66 MODEM_CELLULAR_STATE_CONNECT_CMUX,
67 MODEM_CELLULAR_STATE_OPEN_DLCI1,
68 MODEM_CELLULAR_STATE_OPEN_DLCI2,
69 MODEM_CELLULAR_STATE_RUN_BOARD_INIT_SCRIPT,
70 MODEM_CELLULAR_STATE_WAIT_FOR_APN,
71 MODEM_CELLULAR_STATE_RUN_APN_SCRIPT,
72 MODEM_CELLULAR_STATE_RUN_NETWORK_SCRIPT,
73 MODEM_CELLULAR_STATE_RUN_DIAL_SCRIPT,
74 MODEM_CELLULAR_STATE_AWAIT_REGISTERED,
75 MODEM_CELLULAR_STATE_REGISTERED,
76 MODEM_CELLULAR_STATE_AWAIT_PPP_DEAD,
77 MODEM_CELLULAR_STATE_INIT_POWER_OFF,
78 MODEM_CELLULAR_STATE_RUN_SHUTDOWN_SCRIPT,
79 MODEM_CELLULAR_STATE_POWER_OFF_PULSE,
80 MODEM_CELLULAR_STATE_AWAIT_POWER_OFF,
81};
82
83enum modem_cellular_event {
84 MODEM_CELLULAR_EVENT_RESUME = 0,
85 MODEM_CELLULAR_EVENT_SUSPEND,
86 MODEM_CELLULAR_EVENT_SCRIPT_SUCCESS,
87 MODEM_CELLULAR_EVENT_SCRIPT_FAILED,
88 MODEM_CELLULAR_EVENT_CMUX_CONNECTED,
89 MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED,
90 MODEM_CELLULAR_EVENT_DLCI1_OPENED,
91 MODEM_CELLULAR_EVENT_DLCI2_OPENED,
92 MODEM_CELLULAR_EVENT_TIMEOUT,
93 MODEM_CELLULAR_EVENT_REGISTERED,
94 MODEM_CELLULAR_EVENT_DEREGISTERED,
95 MODEM_CELLULAR_EVENT_BUS_OPENED,
96 MODEM_CELLULAR_EVENT_BUS_CLOSED,
97 MODEM_CELLULAR_EVENT_PPP_DEAD,
98 MODEM_CELLULAR_EVENT_MODEM_READY,
99 MODEM_CELLULAR_EVENT_APN_SET,
100 MODEM_CELLULAR_EVENT_RING,
101 MODEM_CELLULAR_EVENT_PERIODIC_KICK,
102};
103
104struct modem_cellular_event_cb {
107 void *user_data;
108};
109
111
122 /* UART backend */
123 struct modem_pipe *uart_pipe;
124 struct modem_backend_uart uart_backend;
125 uint8_t uart_backend_receive_buf[CONFIG_MODEM_CELLULAR_UART_BUFFER_SIZES];
126 uint8_t uart_backend_transmit_buf[CONFIG_MODEM_CELLULAR_UART_BUFFER_SIZES];
127 uint32_t original_baudrate;
128
129 /* CMUX */
130 struct modem_cmux cmux;
131 uint8_t cmux_receive_buf[MODEM_CMUX_WORK_BUFFER_SIZE];
132 uint8_t cmux_transmit_buf[MODEM_CMUX_WORK_BUFFER_SIZE];
133
134 struct modem_cmux_dlci dlci1;
135 struct modem_cmux_dlci dlci2;
136 struct modem_pipe *dlci1_pipe;
137 struct modem_pipe *dlci2_pipe;
138 /* Points to dlci1_pipe or NULL. Used for shutdown script if not NULL */
139 struct modem_pipe *cmd_pipe;
140 uint8_t dlci1_receive_buf[MODEM_CMUX_WORK_BUFFER_SIZE];
141 /* DLCI 2 is only used for chat scripts. */
142 uint8_t dlci2_receive_buf[MODEM_CMUX_WORK_BUFFER_SIZE];
143
144 /* Modem chat */
145 struct modem_chat chat;
146 uint8_t chat_receive_buf[CONFIG_MODEM_CELLULAR_CHAT_BUFFER_SIZE];
147 uint8_t *chat_argv[32];
148 uint8_t script_failure_counter;
149 uint8_t recovery_count;
150
151 /* Status */
152 enum cellular_registration_status registration_status_gsm;
153 enum cellular_registration_status registration_status_gprs;
154 enum cellular_registration_status registration_status_lte;
155 enum cellular_access_technology access_tech;
156 uint8_t rssi;
157 uint8_t rsrp;
158 uint8_t rsrq;
159 struct cellular_evt_network_status network_status;
160 bool network_status_valid;
161 uint8_t imei[MODEM_CELLULAR_DATA_IMEI_LEN];
162 uint8_t model_id[MODEM_CELLULAR_DATA_MODEL_ID_LEN];
163 uint8_t imsi[MODEM_CELLULAR_DATA_IMSI_LEN];
164 uint8_t iccid[MODEM_CELLULAR_DATA_ICCID_LEN];
165 uint8_t manufacturer[MODEM_CELLULAR_DATA_MANUFACTURER_LEN];
166 uint8_t fw_version[MODEM_CELLULAR_DATA_FW_VERSION_LEN];
167 uint8_t apn[MODEM_CELLULAR_DATA_APN_LEN];
168
169 struct modem_chat_script_chat apn_chats[MODEM_CELLULAR_MAX_APN_CMDS];
170 struct modem_chat_script apn_script;
171 char apn_buf[MODEM_CELLULAR_MAX_APN_CMDS][MODEM_CELLULAR_APN_BUF_SIZE];
172
173 struct modem_chat_script board_init_script;
174
176
177 enum modem_cellular_state state;
178 const struct device *dev;
179 struct k_work_delayable timeout_work;
180
181 /* Power management */
182 struct k_sem suspended_sem;
183
184 /* Event dispatcher */
185 struct k_work event_dispatch_work;
186 uint8_t event_buf[8];
187 struct k_pipe event_pipe;
188
189 struct k_mutex api_lock;
190 struct modem_cellular_event_cb cb;
191
192 /* Ring interrupt */
193 struct gpio_callback ring_gpio_cb;
194
196 atomic_t periodic_paused;
198 bool periodic_timeout_skipped;
202 bool power_on_skipped;
203
204#if defined(CONFIG_MODEM_CELLULAR_STATS)
206 struct cellular_stats stats;
208 uint32_t stats_outage_start_ms;
209#endif
211};
212
214
215struct modem_cellular_user_pipe {
216 struct modem_cmux_dlci dlci;
217 uint8_t dlci_address;
218 uint8_t *dlci_receive_buf;
219 uint16_t dlci_receive_buf_size;
220 struct modem_pipe *pipe;
221 struct modem_pipelink *pipelink;
222};
223
225
255
301
303
304struct modem_cellular_config {
305 const struct device *uart;
306 const struct modem_cellular_vendor_config *vendor;
307 struct modem_ppp *ppp;
308 struct gpio_dt_spec power_gpio;
309 struct gpio_dt_spec reset_gpio;
310 struct gpio_dt_spec wake_gpio;
311 struct gpio_dt_spec ring_gpio;
312 struct gpio_dt_spec dtr_gpio;
313 struct gpio_dt_spec status_gpio;
314 bool autostarts;
315 bool hold_reset_on_suspend;
316 bool reset_on_resume;
317 bool reset_on_recovery;
318 bool cmux_enable_runtime_power_save;
319 bool cmux_close_pipe_on_power_save;
320 bool cmux_no_powersave_handshake;
321 bool use_default_pdp_context;
322 bool use_default_apn;
323 k_timeout_t cmux_idle_timeout;
324 struct modem_cellular_user_pipe *user_pipes;
325 uint8_t user_pipes_size;
326};
327
331int modem_cellular_init(const struct device *dev);
332
333int modem_cellular_pm_action(const struct device *dev, enum pm_device_action action);
334
335extern const struct cellular_driver_api modem_cellular_api;
336
337void modem_cellular_emit_event(struct modem_cellular_data *data, enum cellular_event evt,
338 const void *payload);
339
340/*
341 * Store the latest serving-cell status and emit CELLULAR_EVENT_NETWORK_STATUS_CHANGED
342 * only when it changed, ignoring signal quality (rsrp/rsrq) so periodic polls do not
343 * re-fire the event on signal fluctuation.
344 */
345void modem_cellular_emit_network_status(struct modem_cellular_data *data,
346 const struct cellular_evt_network_status *status);
347
348void modem_cellular_chat_on_imei(struct modem_chat *chat, char **argv, uint16_t argc,
349 void *user_data);
350void modem_cellular_chat_on_cgmm(struct modem_chat *chat, char **argv, uint16_t argc,
351 void *user_data);
352void modem_cellular_chat_on_csq(struct modem_chat *chat, char **argv, uint16_t argc,
353 void *user_data);
354void modem_cellular_chat_on_cesq(struct modem_chat *chat, char **argv, uint16_t argc,
355 void *user_data);
356void modem_cellular_chat_on_iccid(struct modem_chat *chat, char **argv, uint16_t argc,
357 void *user_data);
358void modem_cellular_chat_on_imsi(struct modem_chat *chat, char **argv, uint16_t argc,
359 void *user_data);
360void modem_cellular_chat_on_cgmi(struct modem_chat *chat, char **argv, uint16_t argc,
361 void *user_data);
362void modem_cellular_chat_on_cgmr(struct modem_chat *chat, char **argv, uint16_t argc,
363 void *user_data);
364void modem_cellular_chat_on_cxreg(struct modem_chat *chat, char **argv, uint16_t argc,
365 void *user_data);
366void modem_cellular_chat_on_cgev(struct modem_chat *chat, char **argv, uint16_t argc,
367 void *user_data);
368void modem_cellular_chat_on_modem_ready(struct modem_chat *chat, char **argv, uint16_t argc,
369 void *user_data);
370
372
384 enum modem_chat_script_result result, void *user_data);
385
395
404#define MODEM_CELLULAR_INST_NAME(name, inst) \
405 CONCAT(name, _, DT_DRV_COMPAT, inst)
406
408
409#define MODEM_CELLULAR_DEFINE_USER_PIPE_DATA(inst, name, size) \
410 MODEM_PIPELINK_DT_INST_DEFINE(inst, name); \
411 static uint8_t MODEM_CELLULAR_INST_NAME(name, inst)[size] \
412
413#define MODEM_CELLULAR_INIT_USER_PIPE(_inst, _name, _dlci_address) \
414 { \
415 .dlci_address = _dlci_address, \
416 .dlci_receive_buf = MODEM_CELLULAR_INST_NAME(_name, _inst), \
417 .dlci_receive_buf_size = sizeof(MODEM_CELLULAR_INST_NAME(_name, _inst)), \
418 .pipelink = MODEM_PIPELINK_DT_INST_GET(_inst, _name), \
419 }
420
421#define MODEM_CELLULAR_DEFINE_USER_PIPES(inst, ...) \
422 static struct modem_cellular_user_pipe MODEM_CELLULAR_INST_NAME(user_pipes, inst)[] = { \
423 __VA_ARGS__ \
424 }
425
426#define MODEM_CELLULAR_GET_USER_PIPES(inst) \
427 MODEM_CELLULAR_INST_NAME(user_pipes, inst)
428
429/* Extract the first argument (pipe name) from a pair */
430#define MODEM_CELLULAR_GET_PIPE_NAME_ARG(arg1, ...) arg1
431
432/* Extract the second argument (DLCI address) from a pair */
433#define MODEM_CELLULAR_GET_DLCI_ADDRESS_ARG(arg1, arg2, ...) arg2
434
435/* Define user pipe data using instance and extracted pipe name */
436#define MODEM_CELLULAR_DEFINE_USER_PIPE_DATA_HELPER(_args, inst) \
437 MODEM_CELLULAR_DEFINE_USER_PIPE_DATA(inst, \
438 MODEM_CELLULAR_GET_PIPE_NAME_ARG _args, \
439 CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES)
440
441/* Initialize user pipe using instance, extracted pipe name, and DLCI address */
442#define MODEM_CELLULAR_INIT_USER_PIPE_HELPER(_args, inst) \
443 MODEM_CELLULAR_INIT_USER_PIPE(inst, \
444 MODEM_CELLULAR_GET_PIPE_NAME_ARG _args, \
445 MODEM_CELLULAR_GET_DLCI_ADDRESS_ARG _args)
446
448
459#define MODEM_CELLULAR_DEFINE_AND_INIT_USER_PIPES(inst, ...) \
460 FOR_EACH_FIXED_ARG(MODEM_CELLULAR_DEFINE_USER_PIPE_DATA_HELPER, \
461 (;), inst, __VA_ARGS__); \
462 MODEM_CELLULAR_DEFINE_USER_PIPES( \
463 inst, \
464 FOR_EACH_FIXED_ARG(MODEM_CELLULAR_INIT_USER_PIPE_HELPER, \
465 (,), inst, __VA_ARGS__) \
466 );
467
475#define MODEM_CELLULAR_COMMON_CHAT_MATCHES() \
476 MODEM_CHAT_MATCH_DEFINE(ok_match, "OK", "", NULL); \
477 MODEM_CHAT_MATCHES_DEFINE(__maybe_unused allow_match, \
478 MODEM_CHAT_MATCH("OK", "", NULL), \
479 MODEM_CHAT_MATCH("ERROR", "", NULL)); \
480 MODEM_CHAT_MATCH_DEFINE(imei_match __maybe_unused, \
481 "", "", modem_cellular_chat_on_imei); \
482 MODEM_CHAT_MATCH_DEFINE(cgmm_match __maybe_unused, \
483 "", "", modem_cellular_chat_on_cgmm); \
484 MODEM_CHAT_MATCH_DEFINE(csq_match __maybe_unused, \
485 "+CSQ: ", ",", modem_cellular_chat_on_csq); \
486 MODEM_CHAT_MATCH_DEFINE(cesq_match __maybe_unused, \
487 "+CESQ: ", ",", modem_cellular_chat_on_cesq); \
488 MODEM_CHAT_MATCH_DEFINE(qccid_match __maybe_unused, \
489 "+QCCID: ", "", modem_cellular_chat_on_iccid); \
490 MODEM_CHAT_MATCH_DEFINE(iccid_match __maybe_unused, \
491 "+ICCID: ", "", modem_cellular_chat_on_iccid); \
492 MODEM_CHAT_MATCH_DEFINE(ccid_match __maybe_unused, \
493 "+CCID: ", "", modem_cellular_chat_on_iccid); \
494 MODEM_CHAT_MATCH_DEFINE(cimi_match __maybe_unused, \
495 "", "", modem_cellular_chat_on_imsi); \
496 MODEM_CHAT_MATCH_DEFINE(cgmi_match __maybe_unused, \
497 "", "", modem_cellular_chat_on_cgmi); \
498 MODEM_CHAT_MATCH_DEFINE(cgmr_match __maybe_unused, \
499 "", "", modem_cellular_chat_on_cgmr); \
500 MODEM_CHAT_MATCH_DEFINE(connect_match __maybe_unused, \
501 "CONNECT", "", NULL); \
502 MODEM_CHAT_MATCHES_DEFINE(__maybe_unused abort_matches, \
503 MODEM_CHAT_MATCH("ERROR", "", NULL)); \
504 MODEM_CHAT_MATCHES_DEFINE(__maybe_unused dial_abort_matches, \
505 MODEM_CHAT_MATCH("ERROR", "", NULL), \
506 MODEM_CHAT_MATCH("BUSY", "", NULL), \
507 MODEM_CHAT_MATCH("NO ANSWER", "", NULL), \
508 MODEM_CHAT_MATCH("NO CARRIER", "", NULL), \
509 MODEM_CHAT_MATCH("NO DIALTONE", "", NULL))
510
517#define MODEM_CELLULAR_COMMON_UNSOL_MATCHES \
518 MODEM_CHAT_MATCH("+CREG: ", ",", modem_cellular_chat_on_cxreg), \
519 MODEM_CHAT_MATCH("+CEREG: ", ",", modem_cellular_chat_on_cxreg), \
520 MODEM_CHAT_MATCH("+CGREG: ", ",", modem_cellular_chat_on_cxreg), \
521 MODEM_CHAT_MATCH("+CGEV: ", ",", modem_cellular_chat_on_cgev), \
522 MODEM_CHAT_MATCH("APP RDY", "", modem_cellular_chat_on_modem_ready), \
523 MODEM_CHAT_MATCH("Ready", "", modem_cellular_chat_on_modem_ready)
524
536#define MODEM_CELLULAR_DEFINE_INSTANCE(inst, vendor_config) \
537 BUILD_ASSERT(vendor_config != NULL, "vendor_config must be non-NULL"); \
538 static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \
539 .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \
540 .vendor = vendor_config, \
541 .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \
542 .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \
543 .reset_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_reset_gpios, {}), \
544 .wake_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_wake_gpios, {}), \
545 .ring_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_ring_gpios, {}), \
546 .dtr_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_dtr_gpios, {}), \
547 .status_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_status_gpios, {}), \
548 .autostarts = DT_INST_PROP(inst, autostarts), \
549 .hold_reset_on_suspend = \
550 DT_INST_ENUM_HAS_VALUE(inst, zephyr_mdm_reset_behavior, hold_on_suspend), \
551 .reset_on_resume = DT_INST_ENUM_HAS_VALUE(inst, zephyr_mdm_reset_behavior, \
552 toggle_on_resume), \
553 .reset_on_recovery = DT_INST_ENUM_HAS_VALUE(inst, zephyr_mdm_reset_behavior, \
554 toggle_on_recovery), \
555 .cmux_enable_runtime_power_save = \
556 DT_INST_PROP_OR(inst, cmux_enable_runtime_power_save, 0), \
557 .cmux_close_pipe_on_power_save = \
558 DT_INST_PROP_OR(inst, cmux_close_pipe_on_power_save, 0), \
559 .cmux_no_powersave_handshake = \
560 DT_INST_PROP_OR(inst, cmux_no_powersave_handshake, 0), \
561 .use_default_pdp_context = DT_INST_PROP_OR(inst, zephyr_use_default_pdp_ctx, 0), \
562 .use_default_apn = DT_INST_PROP_OR(inst, zephyr_use_default_apn, 0), \
563 .cmux_idle_timeout = K_MSEC(DT_INST_PROP_OR(inst, cmux_idle_timeout_ms, 0)), \
564 .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \
565 .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \
566 }; \
567 \
568 PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \
569 \
570 DEVICE_DT_INST_DEFINE(inst, modem_cellular_init, PM_DEVICE_DT_INST_GET(inst), \
571 &MODEM_CELLULAR_INST_NAME(data, inst), \
572 &MODEM_CELLULAR_INST_NAME(config, inst), POST_KERNEL, \
573 CONFIG_MODEM_CELLULAR_INIT_PRIORITY, &modem_cellular_api);
574
581 const struct device *dev;
583};
584
597#if defined(CONFIG_MODEM_CELLULAR)
598#define MODEM_CELLULAR_BOARD_INIT_DEFINE(node_id, _script) \
599 static const STRUCT_SECTION_ITERABLE( \
600 modem_cellular_board_init, \
601 CONCAT(modem_cellular_board_init_, DT_DEP_ORD(node_id))) = { \
602 .dev = DEVICE_DT_GET(node_id), \
603 .script = (_script), \
604 }
605#else
606#define MODEM_CELLULAR_BOARD_INIT_DEFINE(node_id, _script)
607#endif
608
610
612
617
635
652
654
655#ifdef __cplusplus
656}
657#endif
658
659#endif /* ZEPHYR_INCLUDE_DRIVERS_CELLULAR_INTERNAL_H_ */
Header file for the Atomic operations API.
Main header file for cellular modem driver API.
Main header file for GPIO driver API.
Main header file for UART driver API.
long atomic_t
Atomic integer variable.
Definition atomic_types.h:31
cellular_access_technology
Cellular access technologies (3GPP TS 27.007 AcT).
Definition cellular.h:39
cellular_event
Events emitted asynchronously by a cellular driver.
Definition cellular.h:143
int cellular_modem_pause_periodic_script(const struct device *dev)
Pause the cellular_modem driver's periodic chat script.
int cellular_modem_resume_periodic_script(const struct device *dev)
Resume the cellular_modem driver's periodic chat script.
cellular_registration_status
Cellular registration status (3GPP TS 27.007).
Definition cellular.h:115
uint32_t cellular_event_mask_t
Definition cellular.h:155
void(* cellular_event_cb_t)(const struct device *dev, enum cellular_event event, const void *payload, void *user_data)
Prototype for cellular event callbacks.
Definition cellular.h:230
void modem_cellular_chat_callback_handler(struct modem_chat *chat, enum modem_chat_script_result result, void *user_data)
Handle completion of a modem chat script.
modem_chat_script_result
Definition chat.h:249
pm_device_action
Device PM actions.
Definition device.h:152
state
Definition parser_state.h:29
Header file for the Device Power Management API.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
<span class="mlabel">Driver Operations</span> Cellular driver operations
Definition cellular.h:280
Payload for CELLULAR_EVENT_NETWORK_STATUS_CHANGED.
Definition cellular.h:178
Cellular link operational statistics.
Definition cellular.h:201
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
GPIO callback structure.
Definition gpio.h:747
Container for GPIO pin information specified in devicetree.
Definition gpio.h:296
Kernel mutex structure.
Definition kernel.h:3573
Kernel pipe structure.
Definition kernel.h:5901
Semaphore structure.
Definition kernel.h:3807
Kernel timeout type.
Definition clock.h:65
A structure used to submit work after a delay.
Definition kernel.h:4759
A structure used to submit work.
Definition kernel.h:4717
Definition uart.h:69
Descriptor binding a board-supplied init script to a modem instance.
Definition modem_cellular.h:580
const struct modem_chat_script * script
Definition modem_cellular.h:582
const struct device * dev
Definition modem_cellular.h:581
Chat scripts for cellular modem.
Definition modem_cellular.h:239
const struct modem_chat_script * periodic
Optional script that periodically polls modem state while registered.
Definition modem_cellular.h:249
const struct modem_chat_script * dial
Script that starts the PPP data connection.
Definition modem_cellular.h:247
const struct modem_chat_script * network
Optional script that waits for network registration before dialing.
Definition modem_cellular.h:245
const struct modem_chat_script * set_baudrate
Optional script that configures the modem's UART baud rate.
Definition modem_cellular.h:241
const struct modem_chat_script * shutdown
Optional script that prepares the modem for power-off.
Definition modem_cellular.h:251
const struct modem_chat_script * init
Script that initializes the modem and enables CMUX.
Definition modem_cellular.h:243
const struct modem_chat_script * dlci_setup
Optional script for configuring DLCI channels after opening.
Definition modem_cellular.h:253
Runtime data for a cellular modem driver instance.
Definition modem_cellular.h:120
Vendor-specific cellular modem configuration.
Definition modem_cellular.h:262
uint16_t shutdown_time_ms
Maximum modem shutdown delay, in milliseconds.
Definition modem_cellular.h:297
uint16_t reset_pulse_duration_ms
Duration of the modem reset pulse, in milliseconds.
Definition modem_cellular.h:288
bool force_autostart
Force autostart regardless of the devicetree autostarts property.
Definition modem_cellular.h:299
const char * chat_delimiter
Command delimiter used by the modem, as a NULL-terminated string.
Definition modem_cellular.h:277
struct modem_cellular_config_scripts scripts
Chat scripts implementing the modem lifecycle.
Definition modem_cellular.h:264
const struct modem_chat_match * matches
Array of unsolicited response matches, or NULL when size is zero.
Definition modem_cellular.h:268
uint16_t size
Number of elements in matches.
Definition modem_cellular.h:270
uint16_t power_pulse_duration_ms
Duration of the modem power-key pulse, in milliseconds.
Definition modem_cellular.h:286
const char * chat_filter
Characters filtered from modem responses, as a NULL-terminated string.
Definition modem_cellular.h:284
uint16_t cmux_disconnect_timeout_ms
Timeout for the modem to revert from CMUX to AT mode after a CMUX disconnect, in milliseconds.
Definition modem_cellular.h:293
uint16_t startup_time_ms
Maximum modem startup delay, in milliseconds.
Definition modem_cellular.h:295
struct modem_cellular_vendor_config::@176377142265263031027036153116374317160311334210 unsol_matches
Unsolicited modem response matches.
Modem chat match.
Definition chat.h:57
Modem chat script chat.
Definition chat.h:124
Modem chat script.
Definition chat.h:268
Chat instance internal context.
Definition chat.h:314
Network Management event callback structure Used to register a callback into the network management e...
Definition net_mgmt.h:164
Iterable sections helpers.