|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Over-the-air frame format for the LoRa command link. More...
Go to the source code of this file.
Classes | |
| struct | radio_link::Frame |
Namespaces | |
| namespace | radio_link |
Enumerations | |
| enum class | radio_link::FrameType : uint8_t { radio_link::Heartbeat = 0x01 , radio_link::SelfTest = 0x02 , radio_link::Arm = 0x10 , radio_link::UnArm = 0x11 } |
| enum class | radio_link::FrameStatus : uint8_t { radio_link::Ok = 0 , radio_link::ErrTooShort , radio_link::ErrVersion , radio_link::ErrLength , radio_link::ErrCrc , radio_link::ErrType , radio_link::ErrPayload , radio_link::ErrArgs } |
Functions | |
| uint16_t | radio_link::crc16 (const uint8_t *data, size_t len) |
| CRC-16/CCITT-FALSE: poly 0x1021, init 0xFFFF, no reflection, no xorout. | |
| FrameStatus | radio_link::decode_frame (const uint8_t *buf, size_t len, Frame &out) |
| Parse and validate a received packet. | |
| FrameStatus | radio_link::encode_frame (FrameType type, uint16_t seq, const uint8_t *payload, uint8_t payload_len, uint8_t *out, size_t out_cap, size_t &out_len) |
| Build a frame into out[0..out_cap). | |
| void | radio_link::put_u16 (uint8_t *p, uint16_t v) |
| void | radio_link::put_u32 (uint8_t *p, uint32_t v) |
| uint16_t | radio_link::get_u16 (const uint8_t *p) |
| uint32_t | radio_link::get_u32 (const uint8_t *p) |
Variables | |
| constexpr uint8_t | radio_link::kFrameVersion = 0x01 |
| constexpr size_t | radio_link::kFrameHeaderLen = 5 |
| constexpr size_t | radio_link::kFrameCrcLen = 2 |
| constexpr size_t | radio_link::kFrameOverhead = kFrameHeaderLen + kFrameCrcLen |
| constexpr size_t | radio_link::kLoraMaxPacket = 255 |
| constexpr size_t | radio_link::kFrameMaxPayload = kLoraMaxPacket - kFrameOverhead |
| constexpr size_t | radio_link::kFrameMaxLen = kFrameOverhead + kFrameMaxPayload |
| constexpr uint8_t | radio_link::kHeartbeatLen = 7 |
| Required payload length per type. | |
| constexpr uint8_t | radio_link::kSelfTestLen = 4 |
| constexpr uint8_t | radio_link::kArmLen = 9 |
| constexpr uint8_t | radio_link::kUnArmLen = 0 |
Over-the-air frame format for the LoRa command link.
Layout (all multi-byte fields little-endian):
byte 0 version (kFrameVersion) byte 1 type (FrameType) bytes 2-3 sequence (u16, +1 per frame sent, wraps) byte 4 length (payload bytes, 0..kFrameMaxPayload) bytes 5.. payload (layout depends on type) last 2 CRC-16/CCITT-FALSE over every byte before it
The LoRa sync word is handled by the radio hardware and is not in the frame.
Payloads: Heartbeat state u8, battery_mV u16, uptime_s u32 (7 bytes) SelfTest result_bits u16, battery_mV u16 (4 bytes) Arm key u32, ~key u32, target_id u8 (9 bytes) UnArm (empty) (0 bytes)
Every number here is a proposal pending review (see README.md).
Definition in file frame.h.