Files
OptoTest/OpticalChannelTester/Protocol.h
2026-08-05 16:49:05 +03:00

40 lines
915 B
C++

#pragma once
#include "Core.h"
constexpr uint16_t PROTOCOL_MAGIC = 0x4F43;
constexpr uint8_t PROTOCOL_VERSION = 1;
enum class MessageType : uint8_t {
DISCOVER, DISCOVER_ACK, PREPARE, READY, START_STAGE, RESULT, ACK, ABORT
};
#pragma pack(push, 1)
struct ProtocolPacket {
uint16_t magic;
uint8_t version;
uint8_t type;
uint32_t session;
uint16_t stage;
uint16_t sequence;
uint32_t requestedHz;
uint32_t actualHz;
uint16_t actualDutyX100;
uint32_t testTimeMs;
uint8_t repeats;
uint16_t accuracyX100;
uint8_t settleCycles;
uint8_t passed;
uint8_t reason;
uint32_t periods;
uint32_t minPeriodTicks;
uint32_t maxPeriodTicks;
uint16_t crc;
};
#pragma pack(pop)
static_assert(sizeof(ProtocolPacket) == 46, "Protocol layout changed");
uint16_t packetCrc(const ProtocolPacket &packet);
void finalizePacket(ProtocolPacket &packet);
bool validPacket(const ProtocolPacket &packet);