15#ifndef ZEPHYR_MODEM_CHAT_ 
   16#define ZEPHYR_MODEM_CHAT_ 
   64#define MODEM_CHAT_MATCH(_match, _separators, _callback)                                           \ 
   66                .match = (uint8_t *)(_match), .match_size = (uint8_t)(sizeof(_match) - 1),         \ 
   67                .separators = (uint8_t *)(_separators),                                            \ 
   68                .separators_size = (uint8_t)(sizeof(_separators) - 1), .wildcards = false,         \ 
   69                .callback = _callback,                                                             \ 
 
   72#define MODEM_CHAT_MATCH_WILDCARD(_match, _separators, _callback)                                  \ 
   74                .match = (uint8_t *)(_match), .match_size = (uint8_t)(sizeof(_match) - 1),         \ 
   75                .separators = (uint8_t *)(_separators),                                            \ 
   76                .separators_size = (uint8_t)(sizeof(_separators) - 1), .wildcards = true,          \ 
   77                .callback = _callback,                                                             \ 
 
   80#define MODEM_CHAT_MATCH_INITIALIZER(_match, _separators, _callback, _wildcards, _partial)         \ 
   82                .match = (uint8_t *)(_match),                                                      \ 
   83                .match_size = (uint8_t)(sizeof(_match) - 1),                                       \ 
   84                .separators = (uint8_t *)(_separators),                                            \ 
   85                .separators_size = (uint8_t)(sizeof(_separators) - 1),                             \ 
   86                .wildcards = _wildcards,                                                           \ 
   87                .partial = _partial,                                                               \ 
   88                .callback = _callback,                                                             \ 
 
   91#define MODEM_CHAT_MATCH_DEFINE(_sym, _match, _separators, _callback)                              \ 
   92        const static struct modem_chat_match _sym = MODEM_CHAT_MATCH(_match, _separators, _callback) 
 
   94#define MODEM_CHAT_MATCH_WILDCARD_DEFINE(_sym, _match, _separators, _callback)                     \ 
   95        const static struct modem_chat_match _sym =                                                \ 
   96                MODEM_CHAT_MATCH_WILDCARD(_match, _separators, _callback) 
 
  101#define MODEM_CHAT_MATCHES_DEFINE(_sym, ...)                                                       \ 
  102        const static struct modem_chat_match _sym[] = {__VA_ARGS__} 
 
  123#define MODEM_CHAT_SCRIPT_CMD_RESP(_request, _response_match)                                      \ 
  125                .request = (uint8_t *)(_request),                                                  \ 
  126                .request_size = (uint16_t)(sizeof(_request) - 1),                                  \ 
  127                .response_matches = &_response_match,                                              \ 
  128                .response_matches_size = 1,                                                        \ 
 
  132#define MODEM_CHAT_SCRIPT_CMD_RESP_MULT(_request, _response_matches)                               \ 
  134                .request = (uint8_t *)(_request),                                                  \ 
  135                .request_size = (uint16_t)(sizeof(_request) - 1),                                  \ 
  136                .response_matches = _response_matches,                                             \ 
  137                .response_matches_size = ARRAY_SIZE(_response_matches),                            \ 
 
  141#define MODEM_CHAT_SCRIPT_CMD_RESP_NONE(_request, _timeout_ms)                                     \ 
  143                .request = (uint8_t *)(_request),                                                  \ 
  144                .request_size = (uint16_t)(sizeof(_request) - 1),                                  \ 
  145                .response_matches = NULL,                                                          \ 
  146                .response_matches_size = 0,                                                        \ 
  147                .timeout = _timeout_ms,                                                            \ 
 
  150#define MODEM_CHAT_SCRIPT_CMDS_DEFINE(_sym, ...)                                                   \ 
  151        const static struct modem_chat_script_chat _sym[] = {__VA_ARGS__} 
 
  192#define MODEM_CHAT_SCRIPT_DEFINE(_sym, _script_chats, _abort_matches, _callback, _timeout_s)       \ 
  193        const static struct modem_chat_script _sym = {                                             \ 
  195                .script_chats = _script_chats,                                                     \ 
  196                .script_chats_size = ARRAY_SIZE(_script_chats),                                    \ 
  197                .abort_matches = _abort_matches,                                                   \ 
  198                .abort_matches_size = ARRAY_SIZE(_abort_matches),                                  \ 
  199                .callback = _callback,                                                             \ 
  200                .timeout = _timeout_s,                                                             \ 
 
  203#define MODEM_CHAT_SCRIPT_NO_ABORT_DEFINE(_sym, _script_chats, _callback, _timeout_s)              \ 
  204        MODEM_CHAT_SCRIPT_DEFINE(_sym, _script_chats, modem_chat_empty_matches,                    \ 
  205                                 _callback, _timeout_s) 
 
  207#define MODEM_CHAT_SCRIPT_EMPTY_DEFINE(_sym)                                                       \ 
  208        MODEM_CHAT_SCRIPT_NO_ABORT_DEFINE(_sym, modem_chat_empty_script_chats, NULL, 0) 
 
  288#if CONFIG_MODEM_STATS 
  289        struct modem_stats_buffer receive_buf_stats;
 
  290        struct modem_stats_buffer work_buf_stats;
 
 
  466                                       const char *request);
 
long atomic_t
Definition atomic_types.h:15
const struct modem_chat_script_chat modem_chat_empty_script_chats[0]
void modem_chat_match_init(struct modem_chat_match *chat_match)
Initialize modem chat match.
int modem_chat_script_chat_set_response_matches(struct modem_chat_script_chat *script_chat, const struct modem_chat_match *response_matches, uint16_t response_matches_size)
Set modem chat script chat matches.
void modem_chat_match_enable_wildcards(struct modem_chat_match *chat_match, bool enable)
Set modem chat match wildcards flag.
int modem_chat_match_set_separators(struct modem_chat_match *chat_match, const char *separators)
Set separators of modem chat match instance.
int modem_chat_run_script_async(struct modem_chat *chat, const struct modem_chat_script *script)
Run script asynchronously.
modem_chat_script_result
Definition chat.h:156
void modem_chat_script_set_callback(struct modem_chat_script *script, modem_chat_script_callback callback)
Set modem chat script callback.
void modem_chat_match_set_partial(struct modem_chat_match *chat_match, bool partial)
Set modem chat match partial flag.
void modem_chat_script_abort(struct modem_chat *chat)
Abort script.
void modem_chat_release(struct modem_chat *chat)
Release pipe from chat instance.
void(* modem_chat_script_callback)(struct modem_chat *chat, enum modem_chat_script_result result, void *user_data)
Callback called when script chat is received.
Definition chat.h:169
modem_chat_script_send_state
Definition chat.h:210
void modem_chat_script_set_timeout(struct modem_chat_script *script, uint32_t timeout_s)
Set modem chat script timeout.
bool modem_chat_is_running(struct modem_chat *chat)
Check if a script is running.
void modem_chat_script_set_name(struct modem_chat_script *script, const char *name)
Set modem chat script name.
int modem_chat_script_set_abort_matches(struct modem_chat_script *script, const struct modem_chat_match *abort_matches, uint16_t abort_matches_size)
Set modem chat script abort matches.
static int modem_chat_script_run(struct modem_chat *chat, const struct modem_chat_script *script)
Run script asynchronously.
Definition chat.h:382
const struct modem_chat_match modem_chat_empty_matches[0]
int modem_chat_match_set_match(struct modem_chat_match *chat_match, const char *match)
Set match of modem chat match instance.
int modem_chat_script_set_script_chats(struct modem_chat_script *script, const struct modem_chat_script_chat *script_chats, uint16_t script_chats_size)
Set modem chat script chats.
const struct modem_chat_match modem_chat_any_match
int modem_chat_script_chat_set_request(struct modem_chat_script_chat *script_chat, const char *request)
Set request of modem chat script chat instance.
void modem_chat_script_chat_set_timeout(struct modem_chat_script_chat *script_chat, uint16_t timeout_ms)
Set modem chat script chat timeout.
int modem_chat_run_script(struct modem_chat *chat, const struct modem_chat_script *script)
Run script.
void(* modem_chat_match_callback)(struct modem_chat *chat, char **argv, uint16_t argc, void *user_data)
Callback called when matching chat is received.
Definition chat.h:41
void modem_chat_script_chat_init(struct modem_chat_script_chat *script_chat)
Initialize modem chat script chat.
int modem_chat_init(struct modem_chat *chat, const struct modem_chat_config *config)
Initialize modem pipe chat instance.
int modem_chat_attach(struct modem_chat *chat, struct modem_pipe *pipe)
Attach modem chat instance to pipe.
void modem_chat_script_init(struct modem_chat_script *script)
Initialize modem chat script.
void modem_chat_match_set_callback(struct modem_chat_match *chat_match, modem_chat_match_callback callback)
Set modem chat match callback.
@ MODEM_CHAT_SCRIPT_RESULT_TIMEOUT
Definition chat.h:159
@ MODEM_CHAT_SCRIPT_RESULT_SUCCESS
Definition chat.h:157
@ MODEM_CHAT_SCRIPT_RESULT_ABORT
Definition chat.h:158
@ MODEM_CHAT_SCRIPT_SEND_STATE_REQUEST
Definition chat.h:214
@ MODEM_CHAT_SCRIPT_SEND_STATE_IDLE
Definition chat.h:212
@ MODEM_CHAT_SCRIPT_SEND_STATE_DELIMITER
Definition chat.h:216
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Semaphore structure.
Definition kernel.h:3418
A structure used to submit work after a delay.
Definition kernel.h:4342
A structure used to submit work.
Definition kernel.h:4314
Chat configuration.
Definition chat.h:297
uint8_t * receive_buf
Receive buffer used to store parsed arguments.
Definition chat.h:301
uint16_t argv_size
Elements in array of pointers.
Definition chat.h:315
const struct modem_chat_match * unsol_matches
Array of unsolicited matches.
Definition chat.h:317
uint16_t receive_buf_size
Size of receive buffer should be longest line + longest match.
Definition chat.h:303
uint8_t delimiter_size
Size of delimiter.
Definition chat.h:307
uint8_t * delimiter
Delimiter.
Definition chat.h:305
void * user_data
Free to use user data passed with modem match callbacks.
Definition chat.h:299
uint16_t unsol_matches_size
Elements in array of unsolicited matches.
Definition chat.h:319
uint8_t ** argv
Array of pointers used to point to parsed arguments.
Definition chat.h:313
uint8_t * filter
Bytes which are discarded by parser.
Definition chat.h:309
uint8_t filter_size
Size of filter.
Definition chat.h:311
Modem chat match.
Definition chat.h:47
modem_chat_match_callback callback
Type of modem chat instance.
Definition chat.h:61
uint8_t separators_size
Size of separators array.
Definition chat.h:55
const uint8_t * separators
Separators array.
Definition chat.h:53
bool partial
Set if script shall not continue to next step in case of match.
Definition chat.h:59
const uint8_t * match
Match array.
Definition chat.h:49
bool wildcards
Set if modem chat instance shall use wildcards when matching.
Definition chat.h:57
uint8_t match_size
Size of match.
Definition chat.h:51
Modem chat script chat.
Definition chat.h:110
uint16_t timeout
Timeout before chat script may continue to next step in milliseconds.
Definition chat.h:120
const struct modem_chat_match * response_matches
Expected responses to request.
Definition chat.h:116
const uint8_t * request
Request to send to modem.
Definition chat.h:112
uint16_t request_size
Size of request.
Definition chat.h:114
uint16_t response_matches_size
Number of elements in expected responses.
Definition chat.h:118
Modem chat script.
Definition chat.h:175
uint32_t timeout
Timeout in seconds within which the script execution must terminate.
Definition chat.h:189
const struct modem_chat_match * abort_matches
Array of abort matches.
Definition chat.h:183
uint16_t script_chats_size
Elements in array of script chats.
Definition chat.h:181
const struct modem_chat_script_chat * script_chats
Array of script chats.
Definition chat.h:179
modem_chat_script_callback callback
Callback called when script execution terminates.
Definition chat.h:187
uint16_t abort_matches_size
Number of elements in array of abort matches.
Definition chat.h:185
const char * name
Name of script.
Definition chat.h:177
Chat instance internal context.
Definition chat.h:223
uint16_t delimiter_size
Definition chat.h:241
uint16_t filter_size
Definition chat.h:246
uint16_t matches_size[3]
Definition chat.h:259
void * user_data
Definition chat.h:228
uint16_t parse_arg_len
Definition chat.h:281
uint16_t script_send_pos
Definition chat.h:274
struct k_work_delayable script_send_timeout_work
Definition chat.h:276
const struct modem_chat_match * parse_match
Definition chat.h:279
struct k_work script_run_work
Definition chat.h:264
struct k_work receive_work
Definition chat.h:285
struct k_work script_send_work
Definition chat.h:275
uint8_t work_buf[32]
Definition chat.h:236
const struct modem_chat_script * script
Definition chat.h:262
enum modem_chat_script_result script_result
Definition chat.h:269
uint16_t receive_buf_size
Definition chat.h:232
uint16_t work_buf_len
Definition chat.h:237
struct modem_pipe * pipe
Definition chat.h:225
enum modem_chat_script_send_state script_send_state
Definition chat.h:273
uint16_t script_chat_it
Definition chat.h:267
struct k_sem script_stopped_sem
Definition chat.h:270
uint8_t * delimiter
Definition chat.h:240
const struct modem_chat_script * pending_script
Definition chat.h:263
const struct modem_chat_match * matches[3]
Definition chat.h:258
uint16_t argv_size
Definition chat.h:250
uint16_t argc
Definition chat.h:251
struct k_work_delayable script_timeout_work
Definition chat.h:265
uint8_t * filter
Definition chat.h:245
uint16_t parse_match_len
Definition chat.h:280
uint16_t receive_buf_len
Definition chat.h:233
uint16_t parse_match_type
Definition chat.h:282
uint16_t delimiter_match_len
Definition chat.h:242
uint8_t ** argv
Definition chat.h:249
struct k_work script_abort_work
Definition chat.h:266
uint8_t * receive_buf
Definition chat.h:231
atomic_t script_state
Definition chat.h:268