STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
radio_task.h
Go to the documentation of this file.
1#ifndef STAR_RADIO_TASK_H
2#define STAR_RADIO_TASK_H
3
4/*
5 * The LoRa radio (Wio-SX1262 on SPI1) as one RTOS task, from C.
6 *
7 * At start the task runs Sx1262Setup::configure() (src/chips/sx1262_setup.h),
8 * retrying every 5 s until the chip answers, then listens in continuous RX.
9 * DIO1 (PB2, EXTI2) wakes it; it runs Ryan's Link::poll() (frame decode +
10 * ARM gate, src/radio/link.h) once per wake, and once a second in case an edge
11 * was missed. A confirmed Arm or an Un-arm goes to the command callback.
12 *
13 * Sending: any task may call radio_task_send_frame(); it takes the radio
14 * mutex, so a send and a receive never interleave on the chip, and returns
15 * after TxDone (up to ~0.4 s at SF9) or a timeout.
16 */
17
18#include <stdbool.h>
19#include <stdint.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25typedef enum {
27 RADIO_SEND_TIMEOUT, /* no TxDone in time */
28 RADIO_SEND_NO_RADIO, /* chip not set up or not answering */
29 RADIO_SEND_BAD_FRAME /* payload does not fit the frame type */
31
33
34typedef struct {
35 uint8_t setup_step; /* SetupStep: 0 = configured */
36 uint16_t device_errors; /* SX1262 OpError after start-up */
39 uint32_t tx_ok, tx_timeouts;
40 uint32_t arms, disarms;
42
43/* The last frame received (any type), with its signal quality. RSSI in
44 * dBm x 2 and SNR in dB x 4: the SX1262's own units (GetPacketStatus). */
45typedef struct {
46 uint32_t count; /* frames received so far; 0 = the rest is not valid */
47 uint32_t at_ms; /* board_now_ms() when it was read */
48 uint8_t type; /* FrameType */
49 uint16_t seq;
50 uint8_t payload_len;
51 uint8_t payload[16]; /* first 16 bytes */
52 bool quality_ok; /* GetPacketStatus answered */
53 int16_t rssi_x2;
54 int8_t snr_x4;
57
59
60/* Called from the radio task when the ARM gate confirms a command. */
61void radio_task_on_command(void (*callback)(radio_command_t command));
62
63bool radio_task_start(void);
64
65/* Switch the radio to sniff mode (SetRxDutyCycle, DS 13.1.7).
66 * Safe to call from any task. The radio uses these parameters until
67 * radio_task_start_continuous_rx() or a new call to this function. */
68void radio_task_start_sniff(uint32_t rx_ms, uint32_t sleep_ms);
69
70/* Switch the radio back to continuous RX (SetRx 0xFFFFFF). */
72
73/* Frame type (src/radio/frame.h FrameType) + payload; blocks until TxDone. */
74radio_send_result_t radio_task_send_frame(uint8_t type, const uint8_t* payload,
75 uint8_t len);
76
78
79#ifdef __cplusplus
80}
81#endif
82#endif
void radio_task_start_sniff(uint32_t rx_ms, uint32_t sleep_ms)
void radio_task_status(radio_status_t *out)
void radio_task_start_continuous_rx(void)
bool radio_task_start(void)
void radio_task_last_rx(radio_rx_t *out)
void radio_task_on_command(void(*callback)(radio_command_t command))
radio_send_result_t radio_task_send_frame(uint8_t type, const uint8_t *payload, uint8_t len)
radio_send_result_t
Definition radio_task.h:25
@ RADIO_SEND_BAD_FRAME
Definition radio_task.h:29
@ RADIO_SEND_TIMEOUT
Definition radio_task.h:27
@ RADIO_SEND_NO_RADIO
Definition radio_task.h:28
@ RADIO_SEND_OK
Definition radio_task.h:26
radio_command_t
Definition radio_task.h:32
@ RADIO_CMD_DISARM
Definition radio_task.h:32
@ RADIO_CMD_ARM
Definition radio_task.h:32
uint32_t count
Definition radio_task.h:46
uint8_t payload_len
Definition radio_task.h:50
int16_t rssi_x2
Definition radio_task.h:53
bool quality_ok
Definition radio_task.h:52
int16_t signal_rssi_x2
Definition radio_task.h:55
uint32_t at_ms
Definition radio_task.h:47
int8_t snr_x4
Definition radio_task.h:54
uint16_t seq
Definition radio_task.h:49
uint8_t type
Definition radio_task.h:48
uint32_t tx_ok
Definition radio_task.h:39
uint8_t setup_step
Definition radio_task.h:35
uint32_t radio_errors
Definition radio_task.h:38
uint32_t tx_timeouts
Definition radio_task.h:39
uint32_t arms
Definition radio_task.h:40
uint16_t device_errors
Definition radio_task.h:36
uint32_t setup_attempts
Definition radio_task.h:37
uint32_t crc_errors
Definition radio_task.h:38
uint32_t frames_ok
Definition radio_task.h:38
uint32_t frames_dropped
Definition radio_task.h:38
uint32_t disarms
Definition radio_task.h:40