Infuse-IoT SDK API 0.0.1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
modem.h
Go to the documentation of this file.
1
8
9#ifndef INFUSE_SDK_DRIVERS_GNSS_UBX_MODEM_H_
10#define INFUSE_SDK_DRIVERS_GNSS_UBX_MODEM_H_
11
12#include <stdint.h>
13
14#include <zephyr/kernel.h>
15#include <zephyr/net_buf.h>
16#include <zephyr/modem/pipe.h>
17#include <zephyr/sys/ring_buffer.h>
18
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
29
39typedef int (*ubx_message_handler_t)(uint8_t message_class, uint8_t message_id, const void *payload,
40 size_t payload_len, void *user_data);
41
42#define UBX_MSG_CLASS_WILDCARD 0x00
43#define UBX_MSG_ID_WILDCARD 0x00
44
46 /* Message results in an ACK/NAK only */
48 /* Message results in a direct response only */
50 /* Message results in a response AND an ACK/NAK */
52 /* Response callback wants the raw frame */
54};
55
61 sys_snode_t _node;
63 struct k_poll_signal *signal;
67 void *user_data;
71 uint8_t message_id;
73 uint8_t flags;
74};
75
80 /* Pipe for communications with underlying modem */
81 struct modem_pipe *pipe;
82 /* Worker to read data */
83 struct k_work fifo_read_worker;
84 /* Notification that TX has completed */
85 struct k_poll_signal tx_done;
86 /* List of message handlers */
87 sys_slist_t handlers;
88 /* Thread protection for handlers list */
89 struct k_sem handlers_sem;
90 /* Data buffer to read bytes into */
91 uint8_t rx_buffer[CONFIG_GNSS_U_BLOX_MAX_MSG_SIZE];
92 /* Bytes pending in rx_buffer */
94};
95
103struct ubx_modem_data *ubx_modem_data_get(const struct device *dev);
104
112void ubx_modem_fifo_poll(const struct device *dev);
113
120void ubx_modem_extint_control(const struct device *dev, bool high);
121
128void ubx_modem_init(struct ubx_modem_data *modem, struct modem_pipe *pipe);
129
140int ubx_modem_comms_reset(const struct device *dev);
141
148
156 struct ubx_message_handler_ctx *handler_ctx);
157
165 struct ubx_message_handler_ctx *handler_ctx);
166
179int ubx_modem_ack_handler(uint8_t message_class, uint8_t message_id, const void *payload,
180 size_t payload_len, void *user_data);
181
196int ubx_modem_send_async(struct ubx_modem_data *modem, struct net_buf_simple *buf,
197 struct ubx_message_handler_ctx *handler_ctx, bool wait_tx);
198
216int ubx_modem_send_sync(struct ubx_modem_data *modem, struct net_buf_simple *buf, uint8_t flags,
217 ubx_message_handler_t handler, void *user_data, k_timeout_t timeout);
218
231int ubx_modem_send_sync_acked(struct ubx_modem_data *modem, struct net_buf_simple *buf,
232 k_timeout_t timeout);
233
248int ubx_modem_send_sync_poll(struct ubx_modem_data *modem, uint8_t message_class,
249 uint8_t message_id, ubx_message_handler_t handler, void *user_data,
250 k_timeout_t timeout);
251
269int ubx_modem_send_sync_raw_poll(struct ubx_modem_data *modem, uint8_t message_class,
270 uint8_t message_id, ubx_message_handler_t handler, void *user_data,
271 k_timeout_t timeout);
272
289int ubx_modem_send_async_poll(struct ubx_modem_data *modem, uint8_t message_class,
290 uint8_t message_id, uint8_t buf[8],
291 struct ubx_message_handler_ctx *handler_ctx);
292
293#ifdef CONFIG_GNSS_UBX_RAW_FRAME_HANDLER
294
304void ubx_modem_raw_frame_handler(struct ubx_frame *frame, uint16_t total_len);
305
306#endif
307
311
312#ifdef __cplusplus
313}
314#endif
315
316#endif /* INFUSE_SDK_DRIVERS_GNSS_UBX_MODEM_H_ */
void ubx_modem_fifo_poll(const struct device *dev)
Explicitly trigger a poll of the modem data FIFO.
int ubx_modem_send_sync_acked(struct ubx_modem_data *modem, struct net_buf_simple *buf, k_timeout_t timeout)
Send a message to the modem and wait for the UBX_MSG_CLASS_ACK response.
int ubx_modem_send_async(struct ubx_modem_data *modem, struct net_buf_simple *buf, struct ubx_message_handler_ctx *handler_ctx, bool wait_tx)
Send a message to the modem without waiting for a response.
int ubx_modem_comms_reset(const struct device *dev)
Reset communications with the UBX modem.
struct ubx_modem_data * ubx_modem_data_get(const struct device *dev)
Get modem data structure from device.
void ubx_modem_extint_control(const struct device *dev, bool high)
Control the EXTINT pin state.
void ubx_modem_msg_subscribe(struct ubx_modem_data *modem, struct ubx_message_handler_ctx *handler_ctx)
Subscribe to messages from the UBX modem.
int ubx_modem_send_async_poll(struct ubx_modem_data *modem, uint8_t message_class, uint8_t message_id, uint8_t buf[8], struct ubx_message_handler_ctx *handler_ctx)
Request a poll response from the modem.
void ubx_modem_msg_unsubscribe(struct ubx_modem_data *modem, struct ubx_message_handler_ctx *handler_ctx)
Unsubscribe from messages from the UBX modem.
int(* ubx_message_handler_t)(uint8_t message_class, uint8_t message_id, const void *payload, size_t payload_len, void *user_data)
UBX Message handler callback.
Definition modem.h:39
int ubx_modem_ack_handler(uint8_t message_class, uint8_t message_id, const void *payload, size_t payload_len, void *user_data)
Common ACK handler for messages.
int ubx_modem_send_sync(struct ubx_modem_data *modem, struct net_buf_simple *buf, uint8_t flags, ubx_message_handler_t handler, void *user_data, k_timeout_t timeout)
Send a message to the modem and wait for the response.
int ubx_modem_send_sync_raw_poll(struct ubx_modem_data *modem, uint8_t message_class, uint8_t message_id, ubx_message_handler_t handler, void *user_data, k_timeout_t timeout)
Request a (raw) poll response from the modem and wait for the response.
void ubx_modem_software_standby(struct ubx_modem_data *modem)
Notify UBX modem that hardware is in standby.
ubx_message_handler_flags
Definition modem.h:45
void ubx_modem_init(struct ubx_modem_data *modem, struct modem_pipe *pipe)
Initialise UBX modem handler.
int ubx_modem_send_sync_poll(struct ubx_modem_data *modem, uint8_t message_class, uint8_t message_id, ubx_message_handler_t handler, void *user_data, k_timeout_t timeout)
Request a poll response from the modem and wait for the response.
@ UBX_HANDLING_ACK
Definition modem.h:47
@ UBX_HANDLING_RSP_ACK
Definition modem.h:51
@ UBX_HANDLING_RAW_FRAME_CB
Definition modem.h:53
@ UBX_HANDLING_RSP
Definition modem.h:49
UBX Message Frame.
Definition protocol.h:32
Context around a ubx_message_handler_t.
Definition modem.h:59
struct k_poll_signal * signal
Signal raise after callback run.
Definition modem.h:63
ubx_message_handler_t message_cb
Callback to run.
Definition modem.h:65
uint8_t message_id
Message ID callback should be run on (or UBX_MSG_ID_WILDCARD)
Definition modem.h:71
void * user_data
Arbitrary user data, provided to message_cb.
Definition modem.h:67
uint8_t flags
Flags for callback (ubx_message_handler_flags)
Definition modem.h:73
uint8_t message_class
Message class callback should be run on (or UBX_MSG_CLASS_WILDCARD)
Definition modem.h:69
UBX modem state.
Definition modem.h:79
sys_slist_t handlers
Definition modem.h:87
struct modem_pipe * pipe
Definition modem.h:81
uint8_t rx_buffer[CONFIG_GNSS_U_BLOX_MAX_MSG_SIZE]
Definition modem.h:91
uint16_t rx_buffer_pending
Definition modem.h:93
struct k_work fifo_read_worker
Definition modem.h:83
struct k_poll_signal tx_done
Definition modem.h:85
struct k_sem handlers_sem
Definition modem.h:89