From e878024a3d992d04423e83b48b6c00fce2b52b58 Mon Sep 17 00:00:00 2001 From: Bjarki Arge Andreasen Date: Thu, 23 May 2024 20:13:23 +0200 Subject: [PATCH] modem: drivers: add user pipes to cellular modem driver Add two DLCI channels to the cellular modem driver, and expose them using the modem pipelink module. Signed-off-by: Bjarki Arge Andreasen --- drivers/modem/Kconfig.cellular | 5 + drivers/modem/modem_cellular.c | 325 ++++++++++++++++++++++++++++++++- 2 files changed, 329 insertions(+), 1 deletion(-) diff --git a/drivers/modem/Kconfig.cellular b/drivers/modem/Kconfig.cellular index f778069b19e..224ffdfdb97 100644 --- a/drivers/modem/Kconfig.cellular +++ b/drivers/modem/Kconfig.cellular @@ -8,6 +8,7 @@ config MODEM_CELLULAR select MODEM_CMUX select MODEM_CHAT select MODEM_PIPE + select MODEM_PIPELINK select MODEM_BACKEND_UART select RING_BUFFER select NET_L2_PPP_OPTION_MRU @@ -50,4 +51,8 @@ config MODEM_CELLULAR_CHAT_BUFFER_SIZES int "The size of the buffers used for the chat scripts in bytes." default 128 +config MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES + int "The size of the buffers used for each user pipe in bytes." + default 128 + endif diff --git a/drivers/modem/modem_cellular.c b/drivers/modem/modem_cellular.c index 8bb96424102..a3622adf2f4 100644 --- a/drivers/modem/modem_cellular.c +++ b/drivers/modem/modem_cellular.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -33,6 +34,8 @@ LOG_MODULE_REGISTER(modem_cellular, CONFIG_MODEM_LOG_LEVEL); #define MODEM_CELLULAR_DATA_MANUFACTURER_LEN (65) #define MODEM_CELLULAR_DATA_FW_VERSION_LEN (65) +#define MODEM_CELLULAR_RESERVED_DLCIS (2) + /* Magic constants */ #define CSQ_RSSI_UNKNOWN (99) #define CESQ_RSRP_UNKNOWN (255) @@ -86,6 +89,7 @@ struct modem_cellular_data { struct modem_cmux cmux; uint8_t cmux_receive_buf[CONFIG_MODEM_CELLULAR_CMUX_MAX_FRAME_SIZE]; uint8_t cmux_transmit_buf[2 * CONFIG_MODEM_CELLULAR_CMUX_MAX_FRAME_SIZE]; + struct modem_cmux_dlci dlci1; struct modem_cmux_dlci dlci2; struct modem_pipe *dlci1_pipe; @@ -132,6 +136,15 @@ struct modem_cellular_data { struct k_mutex event_rb_lock; }; +struct modem_cellular_user_pipe { + struct modem_cmux_dlci dlci; + uint8_t dlci_address; + uint8_t *dlci_receive_buf; + uint16_t dlci_receive_buf_size; + struct modem_pipe *pipe; + struct modem_pipelink *pipelink; +}; + struct modem_cellular_config { const struct device *uart; struct gpio_dt_spec power_gpio; @@ -144,6 +157,8 @@ struct modem_cellular_config { const struct modem_chat_script *init_chat_script; const struct modem_chat_script *dial_chat_script; const struct modem_chat_script *periodic_chat_script; + struct modem_cellular_user_pipe *user_pipes; + uint8_t user_pipes_size; }; static const char *modem_cellular_state_str(enum modem_cellular_state state) @@ -219,6 +234,34 @@ static bool modem_cellular_gpio_is_enabled(const struct gpio_dt_spec *gpio) return gpio->port != NULL; } +static void modem_cellular_notify_user_pipes_connected(struct modem_cellular_data *data) +{ + const struct modem_cellular_config *config = + (const struct modem_cellular_config *)data->dev->config; + struct modem_cellular_user_pipe *user_pipe; + struct modem_pipelink *pipelink; + + for (uint8_t i = 0; i < config->user_pipes_size; i++) { + user_pipe = &config->user_pipes[i]; + pipelink = user_pipe->pipelink; + modem_pipelink_notify_connected(pipelink); + } +} + +static void modem_cellular_notify_user_pipes_disconnected(struct modem_cellular_data *data) +{ + const struct modem_cellular_config *config = + (const struct modem_cellular_config *)data->dev->config; + struct modem_cellular_user_pipe *user_pipe; + struct modem_pipelink *pipelink; + + for (uint8_t i = 0; i < config->user_pipes_size; i++) { + user_pipe = &config->user_pipes[i]; + pipelink = user_pipe->pipelink; + modem_pipelink_notify_disconnected(pipelink); + } +} + static void modem_cellular_enter_state(struct modem_cellular_data *data, enum modem_cellular_state state); @@ -530,6 +573,7 @@ static int modem_cellular_on_idle_state_enter(struct modem_cellular_data *data) gpio_pin_set_dt(&config->reset_gpio, 1); } + modem_cellular_notify_user_pipes_disconnected(data); modem_chat_release(&data->chat); modem_ppp_release(data->ppp); modem_cmux_release(&data->cmux); @@ -766,6 +810,7 @@ static void modem_cellular_connect_cmux_event_handler(struct modem_cellular_data break; case MODEM_CELLULAR_EVENT_CMUX_CONNECTED: + modem_cellular_notify_user_pipes_connected(data); modem_cellular_enter_state(data, MODEM_CELLULAR_STATE_OPEN_DLCI1); break; @@ -994,6 +1039,7 @@ static void modem_cellular_init_power_off_event_handler(struct modem_cellular_da static int modem_cellular_on_init_power_off_state_leave(struct modem_cellular_data *data) { + modem_cellular_notify_user_pipes_disconnected(data); modem_chat_release(&data->chat); modem_ppp_release(data->ppp); return 0; @@ -1560,6 +1606,20 @@ static int modem_cellular_init(const struct device *dev) &dlci2_config); } + for (uint8_t i = 0; i < config->user_pipes_size; i++) { + struct modem_cellular_user_pipe *user_pipe = &config->user_pipes[i]; + const struct modem_cmux_dlci_config user_dlci_config = { + .dlci_address = user_pipe->dlci_address, + .receive_buf = user_pipe->dlci_receive_buf, + .receive_buf_size = user_pipe->dlci_receive_buf_size, + }; + + user_pipe->pipe = modem_cmux_dlci_init(&data->cmux, &user_pipe->dlci, + &user_dlci_config); + + modem_pipelink_init(user_pipe->pipelink, user_pipe->pipe); + } + { const struct modem_chat_config chat_config = { .user_data = data, @@ -2027,7 +2087,27 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, #endif #define MODEM_CELLULAR_INST_NAME(name, inst) \ - _CONCAT(_CONCAT(_CONCAT(name, _), DT_DRV_COMPAT), inst) + _CONCAT_4(name, _, DT_DRV_COMPAT, inst) + +#define MODEM_CELLULAR_DEFINE_USER_PIPE_DATA(inst, name, size) \ + MODEM_PIPELINK_DT_INST_DEFINE(inst, name); \ + static uint8_t MODEM_CELLULAR_INST_NAME(name, inst)[size] \ + +#define MODEM_CELLULAR_INIT_USER_PIPE(_inst, _name, _dlci_address) \ + { \ + .dlci_address = _dlci_address, \ + .dlci_receive_buf = MODEM_CELLULAR_INST_NAME(_name, _inst), \ + .dlci_receive_buf_size = sizeof(MODEM_CELLULAR_INST_NAME(_name, _inst)), \ + .pipelink = MODEM_PIPELINK_DT_INST_GET(_inst, _name), \ + } + +#define MODEM_CELLULAR_DEFINE_USER_PIPES(inst, ...) \ + static struct modem_cellular_user_pipe MODEM_CELLULAR_INST_NAME(user_pipes, inst)[] = { \ + __VA_ARGS__ \ + } + +#define MODEM_CELLULAR_GET_USER_PIPES(inst) \ + MODEM_CELLULAR_INST_NAME(user_pipes, inst) #define MODEM_CELLULAR_DEVICE_QUECTEL_BG95(inst) \ MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \ @@ -2038,6 +2118,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2049,6 +2154,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &quectel_bg95_init_chat_script, \ .dial_chat_script = &quectel_bg95_dial_chat_script, \ .periodic_chat_script = &_CONCAT(DT_DRV_COMPAT, _periodic_chat_script), \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2067,6 +2174,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2078,6 +2210,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &quectel_eg25_g_init_chat_script, \ .dial_chat_script = &quectel_eg25_g_dial_chat_script, \ .periodic_chat_script = &_CONCAT(DT_DRV_COMPAT, _periodic_chat_script), \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2096,6 +2230,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2107,6 +2266,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &simcom_sim7080_init_chat_script, \ .dial_chat_script = &simcom_sim7080_dial_chat_script, \ .periodic_chat_script = &simcom_sim7080_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2125,6 +2286,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2136,6 +2322,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &u_blox_sara_r4_init_chat_script, \ .dial_chat_script = &u_blox_sara_r4_dial_chat_script, \ .periodic_chat_script = &u_blox_sara_r4_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2154,6 +2342,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2166,6 +2379,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &u_blox_sara_r5_init_chat_script, \ .dial_chat_script = &u_blox_sara_r5_dial_chat_script, \ .periodic_chat_script = &u_blox_sara_r5_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2184,6 +2399,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2195,6 +2435,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &swir_hl7800_init_chat_script, \ .dial_chat_script = &swir_hl7800_dial_chat_script, \ .periodic_chat_script = &swir_hl7800_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2213,6 +2455,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2224,6 +2491,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &telit_me910g1_init_chat_script, \ .dial_chat_script = &telit_me910g1_dial_chat_script, \ .periodic_chat_script = &telit_me910g1_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2241,6 +2510,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2252,6 +2546,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &nordic_nrf91_slm_init_chat_script, \ .dial_chat_script = &nordic_nrf91_slm_dial_chat_script, \ .periodic_chat_script = &nordic_nrf91_slm_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \ @@ -2270,6 +2566,31 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \ }; \ \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + gnss_pipe, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_0, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPE_DATA( \ + inst, \ + user_pipe_1, \ + CONFIG_MODEM_CELLULAR_USER_PIPE_BUFFER_SIZES \ + ); \ + \ + MODEM_CELLULAR_DEFINE_USER_PIPES( \ + inst, \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, gnss_pipe, 3), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_0, 4), \ + MODEM_CELLULAR_INIT_USER_PIPE(inst, user_pipe_1, 5), \ + ); \ + \ static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \ .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \ .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \ @@ -2282,6 +2603,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script, .init_chat_script = &sqn_gm02s_init_chat_script, \ .dial_chat_script = &sqn_gm02s_dial_chat_script, \ .periodic_chat_script = &sqn_gm02s_periodic_chat_script, \ + .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \ + .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \