Lines Matching refs:data

37 static void skipcrlf(struct modem_cmd_handler_data *data)  in skipcrlf()  argument
39 while (data->rx_buf && data->rx_buf->len && in skipcrlf()
40 is_crlf(*data->rx_buf->data)) { in skipcrlf()
41 net_buf_pull_u8(data->rx_buf); in skipcrlf()
42 if (!data->rx_buf->len) { in skipcrlf()
43 data->rx_buf = net_buf_frag_del(NULL, data->rx_buf); in skipcrlf()
48 static uint16_t findcrlf(struct modem_cmd_handler_data *data, in findcrlf() argument
51 struct net_buf *buf = data->rx_buf; in findcrlf()
54 while (buf && buf->len && !is_crlf(*(buf->data + pos))) { in findcrlf()
64 if (buf && buf->len && is_crlf(*(buf->data + pos))) { in findcrlf()
79 if (*(buf->data + pos) == *str) { in starts_with()
103 static int parse_params(struct modem_cmd_handler_data *data, size_t match_len, in parse_params() argument
111 if (!data || !data->match_buf || !match_len || !cmd || !argv || !argc) { in parse_params()
120 if (data->match_buf[end] == '"') { in parse_params()
129 if (data->match_buf[end] == cmd->delim[i]) { in parse_params()
131 argv[*argc] = &data->match_buf[begin]; in parse_params()
133 data->match_buf[end] = '\0'; in parse_params()
156 argv[*argc] = &data->match_buf[begin]; in parse_params()
161 data->match_buf[end] = '\0'; in parse_params()
188 struct modem_cmd_handler_data *data) in process_cmd() argument
200 parsed_len = parse_params(data, match_len, cmd, in process_cmd()
208 data->rx_buf = net_buf_skip(data->rx_buf, cmd->cmd_len + parsed_len); in process_cmd()
212 ret = cmd->func(data, match_len - cmd->cmd_len - parsed_len, in process_cmd()
216 net_buf_push(data->rx_buf, cmd->cmd_len + parsed_len); in process_cmd()
230 struct modem_cmd_handler_data *data) in find_cmd_match() argument
235 for (j = 0; j < ARRAY_SIZE(data->cmds); j++) { in find_cmd_match()
236 if (!data->cmds[j] || data->cmds_len[j] == 0U) { in find_cmd_match()
240 for (i = 0; i < data->cmds_len[j]; i++) { in find_cmd_match()
242 if (strlen(data->cmds[j][i].cmd) == 0 || in find_cmd_match()
243 strncmp(data->match_buf, data->cmds[j][i].cmd, in find_cmd_match()
244 data->cmds[j][i].cmd_len) == 0) { in find_cmd_match()
245 return &data->cmds[j][i]; in find_cmd_match()
254 struct modem_cmd_handler_data *data) in find_cmd_direct_match() argument
258 for (j = 0; j < ARRAY_SIZE(data->cmds); j++) { in find_cmd_direct_match()
259 if (!data->cmds[j] || data->cmds_len[j] == 0U) { in find_cmd_direct_match()
263 for (i = 0; i < data->cmds_len[j]; i++) { in find_cmd_direct_match()
265 if (data->cmds[j][i].direct && in find_cmd_direct_match()
266 (data->cmds[j][i].cmd[0] == '\0' || in find_cmd_direct_match()
267 starts_with(data->rx_buf, data->cmds[j][i].cmd))) { in find_cmd_direct_match()
268 return &data->cmds[j][i]; in find_cmd_direct_match()
276 static int cmd_handler_process_iface_data(struct modem_cmd_handler_data *data, in cmd_handler_process_iface_data() argument
283 if (!data->rx_buf) { in cmd_handler_process_iface_data()
284 data->rx_buf = net_buf_alloc(data->buf_pool, in cmd_handler_process_iface_data()
285 data->alloc_timeout); in cmd_handler_process_iface_data()
286 if (!data->rx_buf) { in cmd_handler_process_iface_data()
292 last = net_buf_frag_last(data->rx_buf); in cmd_handler_process_iface_data()
300 frag = net_buf_alloc(data->buf_pool, in cmd_handler_process_iface_data()
301 data->alloc_timeout); in cmd_handler_process_iface_data()
324 static void cmd_handler_process_rx_buf(struct modem_cmd_handler_data *data) in cmd_handler_process_rx_buf() argument
333 while (data->rx_buf && data->rx_buf->len) { in cmd_handler_process_rx_buf()
334 skipcrlf(data); in cmd_handler_process_rx_buf()
335 if (!data->rx_buf || !data->rx_buf->len) { in cmd_handler_process_rx_buf()
339 cmd = find_cmd_direct_match(data); in cmd_handler_process_rx_buf()
341 ret = cmd->func(data, cmd->cmd_len, NULL, 0); in cmd_handler_process_rx_buf()
348 data->rx_buf = net_buf_skip(data->rx_buf, ret); in cmd_handler_process_rx_buf()
356 len = findcrlf(data, &frag, &offset); in cmd_handler_process_rx_buf()
367 match_len = net_buf_linearize(data->match_buf, in cmd_handler_process_rx_buf()
368 data->match_buf_len - 1, in cmd_handler_process_rx_buf()
369 data->rx_buf, 0, len); in cmd_handler_process_rx_buf()
370 if ((data->match_buf_len - 1) < match_len) { in cmd_handler_process_rx_buf()
373 data->match_buf_len - 1, match_len); in cmd_handler_process_rx_buf()
377 LOG_HEXDUMP_DBG(data->match_buf, match_len, "RECV"); in cmd_handler_process_rx_buf()
380 k_sem_take(&data->sem_parse_lock, K_FOREVER); in cmd_handler_process_rx_buf()
382 cmd = find_cmd_match(data); in cmd_handler_process_rx_buf()
387 ret = process_cmd(cmd, match_len, data); in cmd_handler_process_rx_buf()
389 k_sem_give(&data->sem_parse_lock); in cmd_handler_process_rx_buf()
400 if (!data->rx_buf) { in cmd_handler_process_rx_buf()
402 k_sem_give(&data->sem_parse_lock); in cmd_handler_process_rx_buf()
415 (void)findcrlf(data, &frag, &offset); in cmd_handler_process_rx_buf()
418 k_sem_give(&data->sem_parse_lock); in cmd_handler_process_rx_buf()
420 if (frag && data->rx_buf) { in cmd_handler_process_rx_buf()
422 while (frag && data->rx_buf != frag) { in cmd_handler_process_rx_buf()
423 data->rx_buf = net_buf_frag_del(NULL, in cmd_handler_process_rx_buf()
424 data->rx_buf); in cmd_handler_process_rx_buf()
427 net_buf_pull(data->rx_buf, offset); in cmd_handler_process_rx_buf()
435 struct modem_cmd_handler_data *data; in cmd_handler_process() local
443 data = (struct modem_cmd_handler_data *)(cmd_handler->cmd_handler_data); in cmd_handler_process()
446 err = cmd_handler_process_iface_data(data, iface); in cmd_handler_process()
447 cmd_handler_process_rx_buf(data); in cmd_handler_process()
451 int modem_cmd_handler_get_error(struct modem_cmd_handler_data *data) in modem_cmd_handler_get_error() argument
453 if (!data) { in modem_cmd_handler_get_error()
457 return data->last_error; in modem_cmd_handler_get_error()
460 int modem_cmd_handler_set_error(struct modem_cmd_handler_data *data, in modem_cmd_handler_set_error() argument
463 if (!data) { in modem_cmd_handler_set_error()
467 data->last_error = error_code; in modem_cmd_handler_set_error()
471 int modem_cmd_handler_update_cmds(struct modem_cmd_handler_data *data, in modem_cmd_handler_update_cmds() argument
476 if (!data) { in modem_cmd_handler_update_cmds()
480 data->cmds[CMD_HANDLER] = handler_cmds; in modem_cmd_handler_update_cmds()
481 data->cmds_len[CMD_HANDLER] = handler_cmds_len; in modem_cmd_handler_update_cmds()
483 data->last_error = 0; in modem_cmd_handler_update_cmds()
495 struct modem_cmd_handler_data *data; in modem_cmd_send_ext() local
510 data = (struct modem_cmd_handler_data *)(handler->cmd_handler_data); in modem_cmd_send_ext()
512 k_sem_take(&data->sem_tx_lock, K_FOREVER); in modem_cmd_send_ext()
516 ret = modem_cmd_handler_update_cmds(data, handler_cmds, in modem_cmd_send_ext()
526 if (data->eol_len > 0) { in modem_cmd_send_ext()
527 if (data->eol[0] != '\r') { in modem_cmd_send_ext()
531 LOG_HEXDUMP_DBG(data->eol, data->eol_len, "SENT EOL"); in modem_cmd_send_ext()
542 iface->write(iface, data->eol, data->eol_len); in modem_cmd_send_ext()
548 ret = data->last_error; in modem_cmd_send_ext()
556 (void)modem_cmd_handler_update_cmds(data, NULL, 0U, false); in modem_cmd_send_ext()
561 k_sem_give(&data->sem_tx_lock); in modem_cmd_send_ext()
639 struct modem_cmd_handler_data *data; in modem_cmd_handler_tx_lock() local
640 data = (struct modem_cmd_handler_data *)(handler->cmd_handler_data); in modem_cmd_handler_tx_lock()
642 return k_sem_take(&data->sem_tx_lock, timeout); in modem_cmd_handler_tx_lock()
647 struct modem_cmd_handler_data *data; in modem_cmd_handler_tx_unlock() local
648 data = (struct modem_cmd_handler_data *)(handler->cmd_handler_data); in modem_cmd_handler_tx_unlock()
650 k_sem_give(&data->sem_tx_lock); in modem_cmd_handler_tx_unlock()
654 struct modem_cmd_handler_data *data, in modem_cmd_handler_init() argument
658 if (handler == NULL || data == NULL || config == NULL) { in modem_cmd_handler_init()
672 handler->cmd_handler_data = data; in modem_cmd_handler_init()
678 data->match_buf = config->match_buf; in modem_cmd_handler_init()
679 data->match_buf_len = config->match_buf_len; in modem_cmd_handler_init()
680 data->buf_pool = config->buf_pool; in modem_cmd_handler_init()
681 data->alloc_timeout = config->alloc_timeout; in modem_cmd_handler_init()
682 data->eol = config->eol; in modem_cmd_handler_init()
683 data->cmds[CMD_RESP] = config->response_cmds; in modem_cmd_handler_init()
684 data->cmds_len[CMD_RESP] = config->response_cmds_len; in modem_cmd_handler_init()
685 data->cmds[CMD_UNSOL] = config->unsol_cmds; in modem_cmd_handler_init()
686 data->cmds_len[CMD_UNSOL] = config->unsol_cmds_len; in modem_cmd_handler_init()
689 data->eol_len = data->eol == NULL ? 0 : strlen(data->eol); in modem_cmd_handler_init()
692 data->user_data = config->user_data; in modem_cmd_handler_init()
695 k_sem_init(&data->sem_tx_lock, 1, 1); in modem_cmd_handler_init()
696 k_sem_init(&data->sem_parse_lock, 1, 1); in modem_cmd_handler_init()