66 lines
1.8 KiB
C
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);
|