add reliable BLE telemetry transport
This commit is contained in:
@@ -202,3 +202,37 @@ size_t trikke_encode_sample_packet(
|
||||
put_u32_le(output + 32, packet_crc32(output, payload_size));
|
||||
return packet_size;
|
||||
}
|
||||
|
||||
size_t trikke_encode_status_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_status_t *status)
|
||||
{
|
||||
const size_t packet_size =
|
||||
TRIKKE_WIRE_HEADER_SIZE + TRIKKE_WIRE_STATUS_SIZE;
|
||||
if (output == NULL || status == NULL || output_size < packet_size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
encode_header(output, TRIKKE_PACKET_TYPE_STATUS, 0, 0, 0,
|
||||
TRIKKE_WIRE_STATUS_SIZE, packet_sequence, timestamp_us,
|
||||
dropped_sample_count, loop_overrun_count);
|
||||
|
||||
uint8_t *payload = output + TRIKKE_WIRE_HEADER_SIZE;
|
||||
put_u16_le(payload, 1); // Status payload version.
|
||||
put_u16_le(payload + 2, TRIKKE_WIRE_STATUS_SIZE);
|
||||
put_u32_le(payload + 4, status->sensor_read_failure_count);
|
||||
put_u32_le(payload + 8, status->queue_overflow_count);
|
||||
put_u32_le(payload + 12, status->transport_begin_retry_count);
|
||||
put_u32_le(payload + 16, status->transport_disconnect_count);
|
||||
put_u32_le(payload + 20, status->transport_send_failure_count);
|
||||
put_u32_le(payload + 24, status->transport_replay_count);
|
||||
put_u32_le(payload + 28, status->transport_invalid_ack_count);
|
||||
|
||||
put_u32_le(output + 32, packet_crc32(output, TRIKKE_WIRE_STATUS_SIZE));
|
||||
return packet_size;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user