Files
trikkeSensors/main/trikke_protocol.h
T

66 lines
1.8 KiB
C

#pragma once
#include <stddef.h>
#include <stdint.h>
#define TRIKKE_WIRE_VERSION 1
#define TRIKKE_WIRE_HEADER_SIZE 36
#define TRIKKE_WIRE_SAMPLE_RECORD_SIZE 20
#define TRIKKE_WIRE_METADATA_SIZE 48
#define TRIKKE_WIRE_MAX_RECORDS 8
#define TRIKKE_WIRE_MAX_PACKET_SIZE \
(TRIKKE_WIRE_HEADER_SIZE + \
TRIKKE_WIRE_SAMPLE_RECORD_SIZE * TRIKKE_WIRE_MAX_RECORDS)
#define TRIKKE_PACKET_TYPE_METADATA 1
#define TRIKKE_PACKET_TYPE_SAMPLES 2
#define TRIKKE_PACKET_FLAG_TIMESTAMP_DELTA_SATURATED 0x01
#define TRIKKE_METADATA_FLAG_ACCEL_Y_NEGX_Z 0x0001
#define TRIKKE_METADATA_FLAG_GYRO_IDENTITY 0x0002
#define TRIKKE_METADATA_FLAG_GYRO_POLARITY 0x0004
#define TRIKKE_METADATA_FLAG_GYRO_SCALE_NOMINAL 0x0008
typedef struct {
uint32_t sequence;
int64_t timestamp_us;
int16_t accel_x;
int16_t accel_y;
int16_t accel_z;
int16_t gyro_x;
int16_t gyro_y;
int16_t gyro_z;
uint8_t accel_status;
uint8_t gyro_status;
} trikke_wire_sample_t;
typedef struct {
uint16_t sample_rate_hz;
uint16_t accel_range_g;
uint16_t gyro_range_dps;
uint16_t flags;
float accel_offset_counts[3];
float accel_counts_per_g[3];
float gyro_bias_counts[3];
float gyro_mdps_per_lsb;
} trikke_wire_metadata_t;
size_t trikke_encode_metadata_packet(
uint8_t *output,
size_t output_size,
uint32_t packet_sequence,
int64_t timestamp_us,
uint32_t dropped_sample_count,
uint32_t loop_overrun_count,
const trikke_wire_metadata_t *metadata);
size_t trikke_encode_sample_packet(
uint8_t *output,
size_t output_size,
uint32_t packet_sequence,
uint32_t dropped_sample_count,
uint32_t loop_overrun_count,
const trikke_wire_sample_t *samples,
size_t sample_count);