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

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

parent 6a8eeb1b
......@@ -8,11 +8,11 @@
extern COMM_DATA_UNION_WI_BOX_0x01 WMHCommDataWiBox_0x01;
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] = {
{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)
*/
void WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_T MsgIdx)
{
uint8_t data[64] = {0};
uint8_t length = 0;
if ((MsgIdx < EM_WMH_COMM_SEND_MSG_TOTAL) && (MsgIdx > 0)){
if ((WMHCommSendInitList[MsgIdx].dataLength + 4) <= 64) {
// if (WMHCommSendInitList[MsgIdx].FrameCallBackFunc != NULL_P) {
// WMHCommSendInitList[MsgIdx].FrameCallBackFunc();
// }
data[0] = WMHCommSendInitList[MsgIdx].protocolNumber;//协议号
data[1] = WMHCommSendInitList[MsgIdx].deviceNumber;//设备号
data[2] = WMHCommSendInitList[MsgIdx].dataLength + 1u;//数据长度
(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);
length = WMHCommSendInitList[MsgIdx].dataLength + 4u;
mwWMHCommTransmitBytes(data, length);
uint8_t data[64];
uint8_t headerLen = 3; // 协议号+设备号+长度字段
uint8_t tlvLen = WMHCommSendInitList[MsgIdx].dataLength;
uint8_t totalLen = headerLen + tlvLen + 1; // +1 校验和
if (MsgIdx < EM_WMH_COMM_SEND_MSG_TOTAL && MsgIdx > 0 && totalLen <= 64) {
data[0] = WMHCommSendInitList[MsgIdx].protocolNumber;
data[1] = WMHCommSendInitList[MsgIdx].deviceNumber;
data[2] = tlvLen; // 长度字段 = TLV数据长度(不加1)
memcpy(&data[3], WMHCommSendInitList[MsgIdx].tlvArray, tlvLen);
// 计算校验和(从data[0]到data[2+tlvLen-1])
uint8_t csLen = headerLen + tlvLen;
data[csLen] = WMHComm_CalcChecksum(data, csLen);
mwWMHCommTransmitBytes(data, totalLen);
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)
......
......@@ -2,17 +2,19 @@
#include "wmhcommdata.h"
#include "TYW_stdint.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;
uint8_t i = 0;
ret += ID;
ret += ProtocolVersion;
ret += DLC + 1;
for (i = 0; i < DLC; i++) {
ret += data[i];
uint32_t sum = 0;
for (uint8_t i = 0; i < len; i++) {
sum += pData[i];
}
return (uint8_t)(ret & 0xFF);
return (uint8_t)(sum & 0xFF);
}
/*******************************************************************************************
......
......@@ -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_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_0x90(void);
......
......@@ -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)
{
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