Files
OptoTest/OpticalChannelTester/Protocol.h
Razvalyaev 21f8fe8e13 Улучшения
- улушчено отображение на OLED
- убраны настройки шага частоты и количества повторов
- сделан перебор только реализуемых частот
- увеличена точность, на 1МГц 1.25%, в остальных до 1%
- точное измерение TOTAL TIME
2026-08-08 10:18:50 +03:00

46 lines
1.1 KiB
C++

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