Commit 02da279a authored by 黄国庆's avatar 黄国庆

feat:根据协议更改发送函数及校验函数

parent 6a8eeb1b
...@@ -8,11 +8,11 @@ ...@@ -8,11 +8,11 @@
extern COMM_DATA_UNION_WI_BOX_0x01 WMHCommDataWiBox_0x01; extern COMM_DATA_UNION_WI_BOX_0x01 WMHCommDataWiBox_0x01;
const WMH_COMM_INIT_FRAME_T WMHCommRecvInitList[EM_WMH_COMM_RECV_MSG_TOTAL] = { const WMH_COMM_INIT_FRAME_T WMHCommRecvInitList[EM_WMH_COMM_RECV_MSG_TOTAL] = {
{0x80u, 1000u, COMM_DATA_UNION_WI_BOX_LENGTH_0X80, 5000u, 1u, WMHCommDataWiBox_0x80.Bytes, WMHCommFrameCallBack_WiBox_0x80, WMHCommFrameTimeoutFunc_WiBox80, WMHCommFrameCheckSumFunc}, {0x80u, 1000u, COMM_DATA_UNION_WI_BOX_LENGTH_0X80, 5000u, 1u, WMHCommDataWiBox_0x80.Bytes, WMHCommFrameCallBack_WiBox_0x80, WMHCommFrameTimeoutFunc_WiBox80, WMHComm_CalcChecksum},
}; };
const SifProtocolPacket_t WMHCommSendInitList[EM_WMH_COMM_SEND_MSG_TOTAL] = { const SifProtocolPacket_t WMHCommSendInitList[EM_WMH_COMM_SEND_MSG_TOTAL] = {
{0x0Du, 0X01u, 3000u, COMM_DATA_UNION_WI_TLV_LENGTH_0X01, WMHCommDataWiBox_0x01.Bytes, 1u, WMHCommFrameCallBack_WiBox_0x01, WMHCommFrameTimeoutFunc_WiBox_01, WMHCommFrameCheckSumFunc},/*车速*/ {0x0Du, 0X01u, 3000u, COMM_DATA_UNION_WI_TLV_LENGTH_0X01, WMHCommDataWiBox_0x01.Bytes, 1u, WMHCommFrameCallBack_WiBox_0x01, WMHCommFrameTimeoutFunc_WiBox_01, WMHComm_CalcChecksum},/*车速*/
}; };
...@@ -41,39 +41,24 @@ void WMHCommInit(void) ...@@ -41,39 +41,24 @@ void WMHCommInit(void)
*/ */
void WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_T MsgIdx) void WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_T MsgIdx)
{ {
uint8_t data[64] = {0}; uint8_t data[64];
uint8_t length = 0; uint8_t headerLen = 3; // 协议号+设备号+长度字段
if ((MsgIdx < EM_WMH_COMM_SEND_MSG_TOTAL) && (MsgIdx > 0)){ uint8_t tlvLen = WMHCommSendInitList[MsgIdx].dataLength;
if ((WMHCommSendInitList[MsgIdx].dataLength + 4) <= 64) { uint8_t totalLen = headerLen + tlvLen + 1; // +1 校验和
// if (WMHCommSendInitList[MsgIdx].FrameCallBackFunc != NULL_P) {
// WMHCommSendInitList[MsgIdx].FrameCallBackFunc(); if (MsgIdx < EM_WMH_COMM_SEND_MSG_TOTAL && MsgIdx > 0 && totalLen <= 64) {
// } data[0] = WMHCommSendInitList[MsgIdx].protocolNumber;
data[0] = WMHCommSendInitList[MsgIdx].protocolNumber;//协议号 data[1] = WMHCommSendInitList[MsgIdx].deviceNumber;
data[1] = WMHCommSendInitList[MsgIdx].deviceNumber;//设备号 data[2] = tlvLen; // 长度字段 = TLV数据长度(不加1)
data[2] = WMHCommSendInitList[MsgIdx].dataLength + 1u;//数据长度 memcpy(&data[3], WMHCommSendInitList[MsgIdx].tlvArray, tlvLen);
(void)memcpy(&data[3], WMHCommSendInitList[MsgIdx].tlvArray, WMHCommSendInitList[MsgIdx].dataLength);
data[3 + WMHCommSendInitList[MsgIdx].dataLength] = WMHCommSendInitList[MsgIdx].FrameGetCheckSum(WMHCommSendInitList[MsgIdx].dataLength, WMHCommSendInitList[MsgIdx].dataLength, data[1], WMHCommSendInitList[MsgIdx].tlvArray); // 计算校验和(从data[0]到data[2+tlvLen-1])
length = WMHCommSendInitList[MsgIdx].dataLength + 4u; uint8_t csLen = headerLen + tlvLen;
mwWMHCommTransmitBytes(data, length); data[csLen] = WMHComm_CalcChecksum(data, csLen);
mwWMHCommTransmitBytes(data, totalLen);
WMHCommSendMessageTimeout[MsgIdx] = WMHCommSendInitList[MsgIdx].TimeoutMax; WMHCommSendMessageTimeout[MsgIdx] = WMHCommSendInitList[MsgIdx].TimeoutMax;
} }
}
// else if(MsgIdx == 0)
// {
// if ((WMHCommSendInitList[MsgIdx].DLC + 4) <= 64) {
// // if (WMHCommSendInitList[MsgIdx].FrameCallBackFunc != NULL_P) {
// // WMHCommSendInitList[MsgIdx].FrameCallBackFunc();
// // }
// data[0] = WMHCommSendInitList[MsgIdx].ID;//id
// data[1] = WMH_COMM_PROTOCOL_VERSION;//主协议版本号
// data[2] = WMHCommSendInitList[MsgIdx].DLC + 1u;//数据长度
// (void)memcpy(&data[3], WMHCommSendInitList[MsgIdx].SignalList, WMHCommSendInitList[MsgIdx].DLC);
// data[3 + WMHCommSendInitList[MsgIdx].DLC] = WMHCommSendInitList[MsgIdx].FrameGetCheckSum(WMHCommSendInitList[MsgIdx].ID, WMHCommSendInitList[MsgIdx].DLC, data[1], WMHCommSendInitList[MsgIdx].SignalList);
// length = WMHCommSendInitList[MsgIdx].DLC + 4u;
// mwWMHCommTransmitBytes_90(data, length);
// WMHCommSendMessageTimeout[MsgIdx] = WMHCommSendInitList[MsgIdx].TimeoutMax;
// }
// }
} }
void WMHCommFrameUnpacked(uint8_t *data, uint32_t length) void WMHCommFrameUnpacked(uint8_t *data, uint32_t length)
......
...@@ -2,17 +2,19 @@ ...@@ -2,17 +2,19 @@
#include "wmhcommdata.h" #include "wmhcommdata.h"
#include "TYW_stdint.h" #include "TYW_stdint.h"
#include "string.h" #include "string.h"
uint8_t WMHCommFrameCheckSumFunc(uint32_t ID, uint8_t DLC, uint8_t ProtocolVersion, uint8_t *data) /**
* @brief 计算协议包校验和(与接收方SifProtocol_VerifyChecksum一致)
* @param pData 指向协议头(协议号)的指针
* @param len 需要计算校验和的字节数(协议头+TLV数据,不含校验和自身)
* @return 计算出的校验和(累加和低8位)
*/
uint8_t WMHComm_CalcChecksum(const uint8_t* pData, uint8_t len)
{ {
uint32_t ret = 0; uint32_t sum = 0;
uint8_t i = 0; for (uint8_t i = 0; i < len; i++) {
ret += ID; sum += pData[i];
ret += ProtocolVersion;
ret += DLC + 1;
for (i = 0; i < DLC; i++) {
ret += data[i];
} }
return (uint8_t)(ret & 0xFF); return (uint8_t)(sum & 0xFF);
} }
/******************************************************************************************* /*******************************************************************************************
......
...@@ -185,7 +185,7 @@ extern COMM_DATA_UNION_ICM WMHCommDataIcm; ...@@ -185,7 +185,7 @@ extern COMM_DATA_UNION_ICM WMHCommDataIcm;
extern COMM_DATA_UNION_WI_BOX_0x91 WMHCommDataWiBox_0x91; extern COMM_DATA_UNION_WI_BOX_0x91 WMHCommDataWiBox_0x91;
extern COMM_DATA_UNION_WI_BOX_0x92 WMHCommDataWiBox_0x92; extern COMM_DATA_UNION_WI_BOX_0x92 WMHCommDataWiBox_0x92;
extern uint8_t WMHCommFrameCheckSumFunc(uint32_t ID, uint8_t DLC, uint8_t ProtocolVersion, uint8_t *data); extern uint8_t WMHComm_CalcChecksum(const uint8_t* pData, uint8_t len);
extern void WMHCommFrameCallBack_WiBox_0x80(void); extern void WMHCommFrameCallBack_WiBox_0x80(void);
extern void WMHCommFrameCallBack_WiBox_0x90(void); extern void WMHCommFrameCallBack_WiBox_0x90(void);
......
...@@ -470,37 +470,7 @@ void mwWMHCommTransmitBytes(uint8_t *data, uint32_t length) ...@@ -470,37 +470,7 @@ void mwWMHCommTransmitBytes(uint8_t *data, uint32_t length)
} }
} }
void mwWMHCommTransmitBytes_90(uint8_t *data, uint32_t length)
{
uint32_t i = 0;
uint16_t n = (uint16_t)EM_WMH_COMM_PIN_TX_ID_0x90;
if ((length > 0) && (mwWMHCommSerialBuffer[n].Valid == 0))
{
for (i = 0; i < length; i++)
{
mwWMHCommSerialBuffer[n].Buffer[mwWMHCommSerialBuffer[n].FillCnts++] = data[i];
mwWMHCommSerialBuffer[n].FillCnts = mwWMHCommSerialBuffer[n].FillCnts % MAX_SERIAL_BUFF_SIZE;
}
mwWMHCommSerialBuffer[n].Valid = 1;
}
// if ((length > 0) && (mwWMHCommSerialBuffer[n2].Valid == 0))
// {
// for (i = 0; i < length; i++)
// {
// mwWMHCommSerialBuffer[n2].Buffer[mwWMHCommSerialBuffer[n2].FillCnts++] = data[i];
// mwWMHCommSerialBuffer[n2].FillCnts = mwWMHCommSerialBuffer[n2].FillCnts % MAX_SERIAL_BUFF_SIZE;
// }
// mwWMHCommSerialBuffer[n2].Valid = 1;
// }
}
void mwWMHCommRecvByte_0x90(uint8_t data)
{
// uint16_t n = (uint16_t)EM_WMH_COMM_PIN_RX_ID_0x90;
// mwWMHCommSerialBuffer[n].Buffer[mwWMHCommSerialBuffer[n].FillCnts++] = data;
// mwWMHCommSerialBuffer[n].FillCnts = mwWMHCommSerialBuffer[n].FillCnts % MAX_SERIAL_BUFF_SIZE;
}
void mwWMHCommRecvByte_wibox(uint8_t data) void mwWMHCommRecvByte_wibox(uint8_t data)
{ {
uint16_t n = (uint16_t)EM_WMH_COMM_PIN_RX_ID_wibox; uint16_t n = (uint16_t)EM_WMH_COMM_PIN_RX_ID_wibox;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment