Add COM protocol entry
This commit is contained in:
59
KeyBorad/KeyBorad/COM/Com_ProtoCodec.cpp
Normal file
59
KeyBorad/KeyBorad/COM/Com_ProtoCodec.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#include "COM/Com_ProtoCodec.h"
|
||||
|
||||
#include "COM/Com_CdcDecode.h"
|
||||
#include "COM/Com_CdcEncode.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
quint16 Com_Func_ReadLe16(const QByteArray& ByteArray, int Offset)
|
||||
{
|
||||
return static_cast<quint16>(
|
||||
static_cast<quint8>(ByteArray.at(Offset)) |
|
||||
(static_cast<quint16>(static_cast<quint8>(ByteArray.at(Offset + 1))) << 8));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool Com_ProtoCodec_ParseFrame(const QByteArray& ByteArray, Packet* p_Packet)
|
||||
{
|
||||
return Com_Cdc_Func_ParseFrame(ByteArray, p_Packet);
|
||||
}
|
||||
|
||||
bool Com_ProtoCodec_TryTakeFrame(QByteArray* p_Buffer, Packet* p_Packet)
|
||||
{
|
||||
return Com_Cdc_Func_TryTakeFrame(p_Buffer, p_Packet);
|
||||
}
|
||||
|
||||
QByteArray Com_ProtoCodec_BuildHelloReq()
|
||||
{
|
||||
const Packet_HelloReq HelloReq;
|
||||
return Com_Cdc_Func_BuildHelloReq(HelloReq);
|
||||
}
|
||||
|
||||
bool Com_ProtoCodec_IsHelloRsp(const Packet& PacketData)
|
||||
{
|
||||
return (PacketData.type == Com_Type_HelloRsp) &&
|
||||
(PacketData.data.size() == Packet_len::Com_Len_HelloRsp);
|
||||
}
|
||||
|
||||
bool Com_ProtoCodec_ParseHelloRsp(
|
||||
const Packet& PacketData,
|
||||
Packet_HelloRsp* p_HelloRsp)
|
||||
{
|
||||
if ((p_HelloRsp == nullptr) || !Com_ProtoCodec_IsHelloRsp(PacketData))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Packet_HelloRsp HelloRsp;
|
||||
HelloRsp.ProtocolVersion = static_cast<quint8>(PacketData.data.at(0));
|
||||
HelloRsp.VendorId = Com_Func_ReadLe16(PacketData.data, 1);
|
||||
HelloRsp.ProductId = Com_Func_ReadLe16(PacketData.data, 3);
|
||||
HelloRsp.FirmwareMajor = static_cast<quint8>(PacketData.data.at(5));
|
||||
HelloRsp.FirmwareMinor = static_cast<quint8>(PacketData.data.at(6));
|
||||
HelloRsp.CapabilityFlags = Com_Func_ReadLe16(PacketData.data, 7);
|
||||
|
||||
*p_HelloRsp = HelloRsp;
|
||||
return true;
|
||||
}
|
||||
14
KeyBorad/KeyBorad/COM/Com_ProtoCodec.h
Normal file
14
KeyBorad/KeyBorad/COM/Com_ProtoCodec.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include <QtCore/QByteArray>
|
||||
|
||||
#include "COM/Com_Cdc.h"
|
||||
|
||||
bool Com_ProtoCodec_ParseFrame(const QByteArray& ByteArray, Packet* p_Packet);
|
||||
bool Com_ProtoCodec_TryTakeFrame(QByteArray* p_Buffer, Packet* p_Packet);
|
||||
|
||||
QByteArray Com_ProtoCodec_BuildHelloReq();
|
||||
bool Com_ProtoCodec_IsHelloRsp(const Packet& PacketData);
|
||||
bool Com_ProtoCodec_ParseHelloRsp(
|
||||
const Packet& PacketData,
|
||||
Packet_HelloRsp* p_HelloRsp);
|
||||
@@ -96,6 +96,8 @@
|
||||
<ItemGroup>
|
||||
<ClInclude Include="APP\AppTheme.h" />
|
||||
<ClInclude Include="COM\Com_Cdc.h" />
|
||||
<ClCompile Include="COM\Com_ProtoCodec.cpp" />
|
||||
<ClInclude Include="COM\Com_ProtoCodec.h" />
|
||||
<ClCompile Include="COM\Com_CdcEncode.cpp" />
|
||||
<ClInclude Include="COM\Com_CdcEncode.h" />
|
||||
<ClCompile Include="COM\Com_CdcDecode.cpp" />
|
||||
|
||||
@@ -29,6 +29,12 @@
|
||||
<ClInclude Include="COM\Com_Cdc.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClCompile Include="COM\Com_ProtoCodec.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClInclude Include="COM\Com_ProtoCodec.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClCompile Include="COM\Com_CdcEncode.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
|
||||
Reference in New Issue
Block a user