Files
0417_QT_code/COM/Com_Protocol.h

118 lines
3.4 KiB
C

#pragma once
#include <QtCore/QByteArray>
#include <QtCore/QVector>
#include <QtGlobal>
enum Com_Enum_ProtocolType : quint8
{
Com_Enum_ProtocolType_None = 0x00,
Com_Enum_ProtocolType_HelloReq = 0x01,
Com_Enum_ProtocolType_HelloRsp = 0x02,
Com_Enum_ProtocolType_Bitmap = 0x10,
Com_Enum_ProtocolType_FunctionKeyEvent = 0x20,
Com_Enum_ProtocolType_LedState = 0x21,
Com_Enum_ProtocolType_TimeSync = 0x30,
Com_Enum_ProtocolType_ThemeRgb = 0x31,
Com_Enum_ProtocolType_Ack = 0x7E,
Com_Enum_ProtocolType_Error = 0x7F
};
enum Com_Enum_ProtocolErrorCode : quint32
{
Com_Enum_ProtocolErrorCode_None = 0,
Com_Enum_ProtocolErrorCode_UnknownType = 1,
Com_Enum_ProtocolErrorCode_InvalidLength = 2,
Com_Enum_ProtocolErrorCode_InvalidParam = 3,
Com_Enum_ProtocolErrorCode_NotReady = 4
};
enum Com_Enum_ProtocolKeyAction : quint32
{
Com_Enum_ProtocolKeyAction_None = 0,
Com_Enum_ProtocolKeyAction_Press = 1,
Com_Enum_ProtocolKeyAction_Release = 2
};
struct Com_Struct_ProtocolHelloRsp
{
quint32 ProtocolVersion = 0;
quint32 VendorId = 0;
quint32 ProductId = 0;
quint32 FirmwareMajor = 0;
quint32 FirmwareMinor = 0;
quint32 CapabilityFlags = 0;
};
struct Com_Struct_ProtocolFunctionKeyEvent
{
QByteArray UsageBitmap;
bool HasUsageAction = false;
quint16 Usage = 0;
quint32 Action = Com_Enum_ProtocolKeyAction_None;
};
struct Com_Struct_ProtocolLedState
{
quint32 LedMask = 0;
};
struct Com_Struct_ProtocolAck
{
quint32 AckedType = 0;
};
struct Com_Struct_ProtocolError
{
quint32 ErrorType = 0;
quint32 ErrorCode = 0;
};
bool Com_Protocol_DecodeMessageType(
const QByteArray& PacketBody,
Com_Enum_ProtocolType* p_Type);
bool Com_Protocol_TryTakePacket(
QByteArray* p_StreamBuffer,
QByteArray* p_PacketBody,
Com_Enum_ProtocolType* p_Type);
QByteArray Com_Protocol_EncodeHelloReq();
QByteArray Com_Protocol_EncodeBitmap(const QByteArray& UsageBitmap);
QByteArray Com_Protocol_EncodeTimeSync(
quint32 Version,
quint32 Flags,
qint32 TimezoneMinutes,
quint64 UtcMilliseconds,
quint32 AccuracyMilliseconds);
QByteArray Com_Protocol_EncodeThemeRgb(quint8 Red, quint8 Green, quint8 Blue);
bool Com_Protocol_DecodeHelloRsp(
const QByteArray& PacketBody,
Com_Struct_ProtocolHelloRsp* p_Message);
bool Com_Protocol_DecodeFunctionKeyEvent(
const QByteArray& PacketBody,
Com_Struct_ProtocolFunctionKeyEvent* p_Message);
bool Com_Protocol_DecodeLedState(
const QByteArray& PacketBody,
Com_Struct_ProtocolLedState* p_Message);
bool Com_Protocol_DecodeAck(
const QByteArray& PacketBody,
Com_Struct_ProtocolAck* p_Message);
bool Com_Protocol_DecodeError(
const QByteArray& PacketBody,
Com_Struct_ProtocolError* p_Message);
bool Com_Protocol_DecodeAckForType(
const QByteArray& PacketBody,
Com_Enum_ProtocolType EnvelopeType,
Com_Struct_ProtocolAck* p_Message);
bool Com_Protocol_DecodeErrorForType(
const QByteArray& PacketBody,
Com_Enum_ProtocolType EnvelopeType,
Com_Struct_ProtocolError* p_Message);
bool Com_Protocol_IsUsageBitmapValid(const QByteArray& UsageBitmap);
QByteArray Com_Protocol_CreateUsageBitmap();
bool Com_Protocol_TestUsageBitmapBit(const QByteArray& UsageBitmap, quint16 Usage);
bool Com_Protocol_SetUsageBitmapBit(QByteArray* p_UsageBitmap, quint16 Usage, bool IsPressed);
QVector<quint16> Com_Protocol_BuildPressedUsageList(const QByteArray& UsageBitmap);