STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
frame.h File Reference

Over-the-air frame format for the LoRa command link. More...

#include <stddef.h>
#include <stdint.h>
#include "radio.h"
Include dependency graph for frame.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

Namespaces

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

Detailed Description

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.