42#include "stm32h7xx_hal.h"
49#define LORA_INTERNAL_HEADER_SIZE 8U
50#define LORA_PAYLOAD_SIZE 40U
51#define TELEMETRY_MESSAGE_SIZE (LORA_INTERNAL_HEADER_SIZE + LORA_PAYLOAD_SIZE)
58#ifndef FLIGHT_COMPUTER
59typedef uint8_t FLIGHT_COMP_STATE_TYPE;
64 float imu_offset[ 6 ];
68 float baro_preset[ 2 ];
72 uint8_t servo_preset[ 4 ];
77typedef uint32_t VERSION_INFO_TYPE;
80typedef enum _TELEMETRY_MESSAGE_TYPES
82 TELEMETRY_MSG_VEHICLE_ID = 0x00000001,
83 TELEMETRY_MSG_DASHBOARD_DATA = 0x00000002,
84 TELEMETRY_MSG_CALIBRATION = 0x00000003,
85 __TELEMETRY_MSG_FORCE_32BIT = 0xFFFFFFFF
86 } TELEMETRY_MESSAGE_TYPES;
87 _Static_assert(
sizeof(TELEMETRY_MESSAGE_TYPES) == 4,
"TELEMETRY_MESSAGE_TYPES size invalid.");
90typedef struct __attribute__((packed)) _ST_UID_TYPE
92 uint32_t wafer_coords;
97_Static_assert(
sizeof(ST_UID_TYPE) == 12,
"ST_UID_TYPE packing incorrect." );
99typedef struct __attribute__((packed)) _LORA_INTERNAL_HEADER_TYPE
101 TELEMETRY_MESSAGE_TYPES mid;
103 } LORA_INTERNAL_HEADER_TYPE;
104 _Static_assert(
sizeof(LORA_INTERNAL_HEADER_TYPE) == LORA_INTERNAL_HEADER_SIZE,
"LORA_INTERNAL_HEADER size invalid.");
106typedef struct __attribute((packed)) _TELEMETRY_MSG_VEHICLE_ID_TYPE
111 VERSION_INFO_TYPE version;
113 uint8_t explicit_padding[6];
114 } TELEMETRY_MSG_VEHICLE_ID_TYPE;
115 _Static_assert(
sizeof(TELEMETRY_MSG_VEHICLE_ID_TYPE) == LORA_PAYLOAD_SIZE,
"TELEMETRY_MSG_VEHICLE_ID_TYPE size invalid.");
117typedef struct __attribute__((packed)) _TELEMETRY_MSG_DASHBOARD_DUMP_TYPE
119 FLIGHT_COMP_STATE_TYPE fsm_state;
120 DASHBOARD_DUMP_TYPE data;
121 uint8_t explicit_padding[3];
122 } TELEMETRY_MSG_DASHBOARD_DUMP_TYPE;
123 _Static_assert(
sizeof(TELEMETRY_MSG_DASHBOARD_DUMP_TYPE) == LORA_PAYLOAD_SIZE,
"TELEMETRY_MSG_DASHBOARD_DUMP_TYPE size invalid.");
125typedef struct __attribute__((packed)) _TELEMETRY_MSG_CALIBRATION_TYPE
127 IMU_OFFSET imu_offset;
128 BARO_PRESET baro_preset;
130 SERVO_PRESET servo_preset;
131 } TELEMETRY_MSG_CALIBRATION_TYPE;
132 _Static_assert(
sizeof(TELEMETRY_MSG_CALIBRATION_TYPE) == LORA_PAYLOAD_SIZE,
"TELEMETRY_MSG_CALIBRATION size invalid." );
135typedef struct __attribute__((packed)) _TELEMETRY_MESSAGE
137 LORA_INTERNAL_HEADER_TYPE header;
140 TELEMETRY_MSG_VEHICLE_ID_TYPE vehicle_id;
141 TELEMETRY_MSG_DASHBOARD_DUMP_TYPE dashboard_dump;
142 TELEMETRY_MSG_CALIBRATION_TYPE calibration;
145 _Static_assert(
sizeof(TELEMETRY_MESSAGE) == TELEMETRY_MESSAGE_SIZE,
"LORA_PAYLOAD size invalid.");
156static inline void get_uid
158 ST_UID_TYPE* uid_buffer
162uid[0] = HAL_GetUIDw0();
163uid[1] = HAL_GetUIDw1();
164uid[2] = HAL_GetUIDw2();
166memcpy( uid_buffer, uid,
sizeof( ST_UID_TYPE ) );
182 TELEMETRY_MESSAGE* payload
193 TELEMETRY_MESSAGE* msg_buf,
194 TELEMETRY_MESSAGE_TYPES message_type
: Contains general command functions common to all embedded controllers
: Contains error handling functions for SDR code.
: Contains functions to interface between SDEC terminal commands and SDR sensor APIs
void telemetry_build_payload(TELEMETRY_MESSAGE *msg_buf, TELEMETRY_MESSAGE_TYPES message_type)
Builds the requested telemetry payload and fills its message header.
Definition telemetry.c:110
void telemetry_get_next_message(TELEMETRY_MESSAGE *payload)
Selects and constructs the next scheduled telemetry message.
Definition telemetry.c:77