Ares LoRa Firmware
Loading...
Searching...
No Matches
serial.h
Go to the documentation of this file.
1
10
11#ifndef ARES_SERIAL_H
12#define ARES_SERIAL_H
13
14#include <serial/frame.h>
16#include <stdbool.h>
17#include <stddef.h>
18#include <zephyr/kernel.h>
19#include <zephyr/sys/util.h>
20
29
37 void *ctx);
38
40
41struct ares_serial;
43
60 int (*init)(const struct ares_serial_transport *transport,
61 const void *config, serial_transport_handler_t evt_handler,
62 void *context);
63
72 int (*uninit)(const struct ares_serial_transport *transport);
73
86 int (*enable)(const struct ares_serial_transport *transport,
87 bool blocking_tx);
88
100 int (*write)(const struct ares_serial_transport *transport,
101 const void *data, size_t length, size_t *cnt);
102
114 int (*read)(const struct ares_serial_transport *transport, void *data,
115 size_t length, size_t *cnt);
116
123 void (*wait_dtr)(const struct ares_serial_transport *transport);
124
133 bool (*rx_error)(const struct ares_serial_transport *transport);
134
143 void (*block_no_usb_host)(const struct ares_serial_transport *transport,
144 bool block);
145};
146
156
160 void *ctx;
161};
162
174
178#define ARES_SERIAL_TRX_BUF_SIZE \
179 MAX(SERIAL_BACKEND_TX_RINGBUF_SIZE, SERIAL_BACKEND_RX_RINGBUF_SIZE)
180
185struct ares_buf {
190
194 size_t len;
195};
196
206
213 void (*callback)(const struct ares_serial *serial,
214 struct ares_frame *frame);
215};
216
226
231
235 struct k_poll_signal signals[ARES_SIGNALS];
236
240 struct k_poll_event events[ARES_SIGNALS];
241
246
251
255 struct k_mutex wr_mtx;
256
260 k_tid_t tid;
261};
262
272
277
281 const char *name;
282
286 struct k_thread *thread;
287
291 k_thread_stack_t *stack;
292};
293
300#define ARES_SERIAL_DEFINE(_name, _transport) \
301 static struct ares_serial_ctx UTIL_CAT(_name, _ctx); \
302 static K_KERNEL_STACK_DEFINE(UTIL_CAT(_name, _stack), \
303 CONFIG_ARES_SERIAL_STACK_SIZE); \
304 static struct k_thread UTIL_CAT(_name, _thread); \
305 static const struct ares_serial _name = {.iface = (_transport), \
306 .ctx = &UTIL_CAT(_name, _ctx), \
307 .name = STRINGIFY(_name), \
308 .thread = \
309 &UTIL_CAT(_name, _thread), \
310 .stack = UTIL_CAT(_name, _stack)}
311
321int ares_serial_init(const struct ares_serial *serial,
322 const void *transport_config);
323
335 const struct ares_serial *serial,
336 const struct ares_serial_command *commands, size_t num_commands);
337
348int ares_serial_write_frame(const struct ares_serial *serial,
349 const struct ares_frame *frame);
350
358void ares_serial_flush_out(const struct ares_serial *serial,
359 k_timeout_t timeout);
360
371int wait_serial_ready(const struct ares_serial *serial);
372
384int set_wait_usb_host(const struct ares_serial *serial, bool block);
385
395bool ares_serial_check_rx_error(const struct ares_serial *serial);
396
397#endif // ARES_SERIAL_H
Ares frame library.
ares_frame_type
Frame types.
Definition frame.h:71
int set_wait_usb_host(const struct ares_serial *serial, bool block)
Function to configure the transport layer to block transmissions if no host is connected.
ares_serial_signal
Signals for the serial interface.
Definition serial.h:167
@ ARES_SIGNAL_RXRDY
Rx data ready.
Definition serial.h:168
@ ARES_SIGNAL_TXDONE
Definition serial.h:169
@ ARES_SIGNALS
Last enumerator.
Definition serial.h:172
int ares_serial_write_frame(const struct ares_serial *serial, const struct ares_frame *frame)
Function to write a frame to the serial transfer layer.
#define ARES_SERIAL_TRX_BUF_SIZE
Definition serial.h:178
void ares_serial_flush_out(const struct ares_serial *serial, k_timeout_t timeout)
Function to flush the serial transfer layer transmit buffer.
int ares_serial_init(const struct ares_serial *serial, const void *transport_config)
Function for initiating a transport layer and internal serial state.
bool ares_serial_check_rx_error(const struct ares_serial *serial)
Function to check if there was a reception error in the transfer layer.
int wait_serial_ready(const struct ares_serial *serial)
Block current thread execution until a connection is established with a host.
void(* serial_transport_handler_t)(enum serial_transport_evt evt, void *ctx)
Serial transport event handler prototype.
Definition serial.h:36
serial_transport_evt
Serial transport events.
Definition serial.h:25
@ SERIAL_TRANSPORT_EVT_TX_RDY
Tx ready.
Definition serial.h:27
@ SERIAL_TRANSPORT_EVT_RX_RDY
Rx ready.
Definition serial.h:26
int ares_serial_register_command_callbacks(const struct ares_serial *serial, const struct ares_serial_command *commands, size_t num_commands)
Function for registering frame handlers.
Serial transport layer header.
Common serial macros.
Unified buffer structure for serial.
Definition serial.h:185
uint8_t buf[ARES_SERIAL_TRX_BUF_SIZE]
Definition serial.h:189
size_t len
Definition serial.h:194
Structured representation of an ares frame.
Definition frame.h:94
Ares frame handler descriptor.
Definition serial.h:201
void(* callback)(const struct ares_serial *serial, struct ares_frame *frame)
Definition serial.h:213
enum ares_frame_type command
Definition serial.h:205
Ares serial instance context.
Definition serial.h:221
k_tid_t tid
Definition serial.h:260
struct k_poll_event events[ARES_SIGNALS]
Definition serial.h:240
struct k_poll_signal signals[ARES_SIGNALS]
Definition serial.h:235
struct k_mutex wr_mtx
Definition serial.h:255
struct ares_buf rx_buf
Definition serial.h:225
struct ares_buf tx_buf
Definition serial.h:230
const struct ares_serial_command * commands
Definition serial.h:245
size_t num_commands
Definition serial.h:250
Unified serial transport interface.
Definition serial.h:48
int(* write)(const struct ares_serial_transport *transport, const void *data, size_t length, size_t *cnt)
Function for writing data to the transfer interface.
Definition serial.h:100
void(* block_no_usb_host)(const struct ares_serial_transport *transport, bool block)
Function that configures the transport to operate in blocking/non-blocking mode while waiting for a h...
Definition serial.h:143
int(* read)(const struct ares_serial_transport *transport, void *data, size_t length, size_t *cnt)
Function for reading data from the transfer interface.
Definition serial.h:114
int(* init)(const struct ares_serial_transport *transport, const void *config, serial_transport_handler_t evt_handler, void *context)
Function for initializing the serial transport interface.
Definition serial.h:60
int(* uninit)(const struct ares_serial_transport *transport)
Function for uninitializing the serial transport interface.
Definition serial.h:72
int(* enable)(const struct ares_serial_transport *transport, bool blocking_tx)
Function for enabling transport in given TX mode.
Definition serial.h:86
void(* wait_dtr)(const struct ares_serial_transport *transport)
Function that blocks execution of the thread until the DTR control line is asserted.
Definition serial.h:123
bool(* rx_error)(const struct ares_serial_transport *transport)
Function that checks if there is a reception error.
Definition serial.h:133
Transfer interface.
Definition serial.h:151
const struct ares_serial_transport_api * api
Definition serial.h:155
void * ctx
Definition serial.h:160
Ares serial internals.
Definition serial.h:267
const struct ares_serial_transport * iface
Definition serial.h:271
const char * name
Definition serial.h:281
struct ares_serial_ctx * ctx
Definition serial.h:276
k_thread_stack_t * stack
Definition serial.h:291
struct k_thread * thread
Definition serial.h:286