Added Packet3 for Lap completion
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <cstdint>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
@@ -21,6 +22,14 @@ struct TelemetryPacket2 {
|
|||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
struct TelemetryPacket3 {
|
||||||
|
uint32_t start_time_;
|
||||||
|
uint32_t duration_;
|
||||||
|
uint16_t count_;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct TelemetryLoRaHeader {
|
struct TelemetryLoRaHeader {
|
||||||
uint8_t source_;
|
uint8_t source_;
|
||||||
|
|||||||
@@ -4,17 +4,19 @@
|
|||||||
import struct
|
import struct
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
UART_MAGIC = b"\xAA\x55\xAA\x55"
|
UART_MAGIC = b"\xaa\x55\xaa\x55"
|
||||||
|
|
||||||
LORA_HEADER_FORMAT = "<BBBBH"
|
LORA_HEADER_FORMAT = "<BBBBH"
|
||||||
UART_HEADER_FORMAT = "<4sB"
|
UART_HEADER_FORMAT = "<4sB"
|
||||||
PACKET1_FORMAT = "<4s"
|
PACKET1_FORMAT = "<4s"
|
||||||
PACKET2_FORMAT = "<Ifffff"
|
PACKET2_FORMAT = "<Ifffff"
|
||||||
|
PACKET3_FORMAT = "<IIH"
|
||||||
|
|
||||||
LORA_HEADER_SIZE = struct.calcsize(LORA_HEADER_FORMAT)
|
LORA_HEADER_SIZE = struct.calcsize(LORA_HEADER_FORMAT)
|
||||||
UART_HEADER_SIZE = struct.calcsize(UART_HEADER_FORMAT)
|
UART_HEADER_SIZE = struct.calcsize(UART_HEADER_FORMAT)
|
||||||
PACKET1_SIZE = struct.calcsize(PACKET1_FORMAT)
|
PACKET1_SIZE = struct.calcsize(PACKET1_FORMAT)
|
||||||
PACKET2_SIZE = struct.calcsize(PACKET2_FORMAT)
|
PACKET2_SIZE = struct.calcsize(PACKET2_FORMAT)
|
||||||
|
PACKET3_SIZE = struct.calcsize(PACKET3_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -41,6 +43,13 @@ class TelemetryPacket2:
|
|||||||
speed: float
|
speed: float
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TelemetryPacket3:
|
||||||
|
start_time: int
|
||||||
|
duration: int
|
||||||
|
count: int
|
||||||
|
|
||||||
|
|
||||||
def crc16_ccitt(data: bytes) -> int:
|
def crc16_ccitt(data: bytes) -> int:
|
||||||
crc = 0xFFFF
|
crc = 0xFFFF
|
||||||
for byte in data:
|
for byte in data:
|
||||||
@@ -54,7 +63,9 @@ def crc16_ccitt(data: bytes) -> int:
|
|||||||
|
|
||||||
|
|
||||||
def unpack_lora_header(data: bytes) -> TelemetryLoRaHeader:
|
def unpack_lora_header(data: bytes) -> TelemetryLoRaHeader:
|
||||||
source, dest, version, size, crc16 = struct.unpack(LORA_HEADER_FORMAT, data[:LORA_HEADER_SIZE])
|
source, dest, version, size, crc16 = struct.unpack(
|
||||||
|
LORA_HEADER_FORMAT, data[:LORA_HEADER_SIZE]
|
||||||
|
)
|
||||||
return TelemetryLoRaHeader(source, dest, version, size, crc16)
|
return TelemetryLoRaHeader(source, dest, version, size, crc16)
|
||||||
|
|
||||||
|
|
||||||
@@ -64,5 +75,12 @@ def unpack_packet1(payload: bytes) -> TelemetryPacket1:
|
|||||||
|
|
||||||
|
|
||||||
def unpack_packet2(payload: bytes) -> TelemetryPacket2:
|
def unpack_packet2(payload: bytes) -> TelemetryPacket2:
|
||||||
time_stamp, vbat, teng, lat, lng, speed = struct.unpack(PACKET2_FORMAT, payload[:PACKET2_SIZE])
|
time_stamp, vbat, teng, lat, lng, speed = struct.unpack(
|
||||||
|
PACKET2_FORMAT, payload[:PACKET2_SIZE]
|
||||||
|
)
|
||||||
return TelemetryPacket2(time_stamp, vbat, teng, lat, lng, speed)
|
return TelemetryPacket2(time_stamp, vbat, teng, lat, lng, speed)
|
||||||
|
|
||||||
|
|
||||||
|
def unpack_packet3(payload: bytes) -> TelemetryPacket3:
|
||||||
|
start_time, duration = struct.unpack(PACKET3_FORMAT, payload[:PACKET3_SIZE])
|
||||||
|
return TelemetryPacket2(start_time, duration)
|
||||||
|
|||||||
Reference in New Issue
Block a user