#pragma once namespace DiosCtrlBox { enum PacketClass { PC_NAN = -1, PC_NOTIFY, }; enum PacketNotifyType { PNT_NAN = -1, PNT_HANDSWITCH_FIRST_PRESSED, PNT_HANDSWITCH_FIRST_RELEASE, PNT_HANDSWITCH_SECOND_PRESSED, PNT_HANDSWITCH_SECOND_RELEASE, PNT_PWM_OFFSET, PNT_XRAY_ON, PNT_XRAY_OFF, PNT_TUBE_HEIGHT_AD, PNT_TUBE_ANGLE_LOW_LIMIT, PNT_TUBE_ANGLE_LEAVE_LOW_LIMIT, PNT_TUBE_ANGLE_HIGH_LIMIT, PNT_TUBE_ANGLE_LEAVE_HIGH_LIMIT, PNT_TUBE_ANGLE_ENCODER, PNT_TUBE_ANGLE_ENCODER_Z_CLEAR, PNT_TUBE_HEIGHT_ENCODER, PNT_TUBE_HEIGHT_ENCODER_Z_CLEAR, PNT_TUBE_HEIGHT_LOW_LIMIT, PNT_TUBE_HEIGHT_HIGH_LIMIT, PNT_TUBE_HEIGHT_LEAVE_LOW_LIMIT, PNT_TUBE_HEIGHT_LEAVE_HIGH_LIMIT, PNT_SYSTEM_RESET_START, PNT_SYSTEM_RESET_STOP, PNT_CAN, }; struct PWMOffsetPacket; struct TubeHeightADPacket; struct EncoderPacket; struct CanDeviceData; class DIOSBoardProtocolParser { public: static PacketClass IdentifyPacketClass(SCFPacket *packet); static PacketNotifyType IdentifyPacketNotifyType(SCFPacket *packet); static bool ParsePWMOffsetPacket(SCFPacket *packet, PWMOffsetPacket *outpacket); static bool ParseTubeHeightADPacket(SCFPacket *packet, TubeHeightADPacket *outpacket); static bool ParseEncoderPacket(SCFPacket *packet, EncoderPacket *outpacket); static bool ParseCanPacket(SCFPacket *packet, CanDeviceData *outpacket); }; }