Skip to content

drivers: modem_cellular: added APP RDY signal handling #93052

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions drivers/modem/modem_cellular.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ enum modem_cellular_event {
MODEM_CELLULAR_EVENT_BUS_OPENED,
MODEM_CELLULAR_EVENT_BUS_CLOSED,
MODEM_CELLULAR_EVENT_PPP_DEAD,
MODEM_CELLULAR_EVENT_APP_RDY,
};

struct modem_cellular_data {
Expand Down Expand Up @@ -243,6 +244,8 @@ static const char *modem_cellular_event_str(enum modem_cellular_event event)
return "bus closed";
case MODEM_CELLULAR_EVENT_PPP_DEAD:
return "ppp dead";
case MODEM_CELLULAR_EVENT_APP_RDY:
return "app ready";
}

return "";
Expand Down Expand Up @@ -355,6 +358,15 @@ static void modem_cellular_chat_callback_handler(struct modem_chat *chat,
}
}

static void modem_cellular_chat_on_app_rdy(struct modem_chat *chat, char **argv, uint16_t argc,
void *user_data)
{
struct modem_cellular_data *data = user_data;

modem_cellular_delegate_event(data, MODEM_CELLULAR_EVENT_APP_RDY);
}


static void modem_cellular_chat_on_imei(struct modem_chat *chat, char **argv, uint16_t argc,
void *user_data)
{
Expand Down Expand Up @@ -514,7 +526,8 @@ MODEM_CHAT_MATCH_DEFINE(cgmr_match __maybe_unused, "", "", modem_cellular_chat_o
MODEM_CHAT_MATCHES_DEFINE(unsol_matches,
MODEM_CHAT_MATCH("+CREG: ", ",", modem_cellular_chat_on_cxreg),
MODEM_CHAT_MATCH("+CEREG: ", ",", modem_cellular_chat_on_cxreg),
MODEM_CHAT_MATCH("+CGREG: ", ",", modem_cellular_chat_on_cxreg));
MODEM_CHAT_MATCH("+CGREG: ", ",", modem_cellular_chat_on_cxreg),
MODEM_CHAT_MATCH("APP RDY", "", modem_cellular_chat_on_app_rdy));

MODEM_CHAT_MATCHES_DEFINE(abort_matches, MODEM_CHAT_MATCH("ERROR", "", NULL));

Expand Down Expand Up @@ -772,7 +785,9 @@ static int modem_cellular_on_await_power_on_state_enter(struct modem_cellular_da
(const struct modem_cellular_config *)data->dev->config;

modem_cellular_start_timer(data, K_MSEC(config->startup_time_ms));
return 0;
modem_pipe_attach(data->uart_pipe, modem_cellular_bus_pipe_handler, data);
modem_chat_attach(&data->chat, data->uart_pipe);
return modem_pipe_open_async(data->uart_pipe);
}

static void modem_cellular_await_power_on_event_handler(struct modem_cellular_data *data,
Expand All @@ -782,6 +797,9 @@ static void modem_cellular_await_power_on_event_handler(struct modem_cellular_da
(const struct modem_cellular_config *)data->dev->config;

switch (evt) {
case MODEM_CELLULAR_EVENT_APP_RDY:
/* disable the timer and fall through, as we are ready to proceed */
modem_cellular_stop_timer(data);
case MODEM_CELLULAR_EVENT_TIMEOUT:
if (config->set_baudrate_chat_script != NULL) {
modem_cellular_enter_state(data, MODEM_CELLULAR_STATE_SET_BAUDRATE);
Expand Down