Commit 5e17b162 authored by 何锐's avatar 何锐

feat:移植一线通文件

parent 0ccb6d3d
......@@ -2,6 +2,12 @@
[Subproject]
:sourceDir=..\..\source\Appliciation
WMHCommData.h
WMHCommData.c
WMHComm.h
WMHComm.c
mwWMHComm.h
mwWMHComm.c
api_RS485.c
api_RS485.h
R485_Communication_Matrix.c
......
#include "wmhcomm.h"
#include "wmhcommdata.h"
#include "mwwmhcomm.h"
#include "TYW_stdint.h"
#include "string.h"
const WMH_COMM_INIT_FRAME_T WMHCommRecvInitList[EM_WMH_COMM_RECV_MSG_TOTAL] = {
{0x90u, 50u, COMM_DATA_UNION_WI_BOX_LENGTH_0X90, 10000u, 1u, WMHCommDataWiBox_0x90.Bytes, WMHCommFrameCallBack_WiBox_0x90, WMHCommFrameTimeoutFunc_WiBox, WMHCommFrameCheckSumFunc},
{0x91u, 1000u, COMM_DATA_UNION_WI_BOX_LENGTH_0X91, 10000u, 1u, WMHCommDataWiBox_0x91.Bytes, WMHCommFrameCallBack_WiBox_0x91, WMHCommFrameTimeoutFunc_WiBox, WMHCommFrameCheckSumFunc},
{0x92u, 1000u, COMM_DATA_UNION_WI_BOX_LENGTH_0X92, 10000u, 1u, WMHCommDataWiBox_0x92.Bytes, WMHCommFrameCallBack_WiBox_0x92, WMHCommFrameTimeoutFunc_WiBox, WMHCommFrameCheckSumFunc},
};
const WMH_COMM_INIT_FRAME_T WMHCommSendInitList[EM_WMH_COMM_SEND_MSG_TOTAL] = {
{0x80u, 1000u, COMM_DATA_UNION_ICM_LENGTH, 1000u, 1u, WMHCommDataIcm.Bytes, WMHCommFrameCallBack_Icm, WMHCommFrameTimeoutFunc_Icm, WMHCommFrameCheckSumFunc},
};
uint32_t WMHCommRecvMessageTimeout[EM_WMH_COMM_RECV_MSG_TOTAL] = {0};
uint32_t WMHCommSendMessageTimeout[EM_WMH_COMM_SEND_MSG_TOTAL] = {0};
uint32_t WMHCommAnalysisPos = 0;
void WMHCommInit(void)
{
uint8_t i = 0;
for (i = 0; i < EM_WMH_COMM_RECV_MSG_TOTAL; i++) {
(void)memset(WMHCommRecvInitList[i].SignalList, 0, WMHCommRecvInitList[i].DLC);
WMHCommRecvMessageTimeout[i] = WMHCommRecvInitList[i].TimeoutMax;
}
for (i = 0; i < EM_WMH_COMM_SEND_MSG_TOTAL; i++) {
(void)memset(WMHCommSendInitList[i].SignalList, 0, WMHCommSendInitList[i].DLC);
WMHCommSendMessageTimeout[i] = WMHCommSendInitList[i].TimeoutMax;
}
WMHCommAnalysisPos = 0;
}
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) {
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(data, length);
WMHCommSendMessageTimeout[MsgIdx] = WMHCommSendInitList[MsgIdx].TimeoutMax;
}
}
}
void WMHCommFrameUnpacked(uint8_t *data, uint32_t length)
{
uint32_t i = 0;
if (length > 0) {
for (i = 0; i < EM_WMH_COMM_RECV_MSG_TOTAL; i++) {
if (data[0] == WMHCommRecvInitList[i].ID) {
if ((data[2] == (WMHCommRecvInitList[i].DLC + 1)) && (length == (WMHCommRecvInitList[i].DLC + 4))) {
if (data[length - 1] == WMHCommRecvInitList[i].FrameGetCheckSum(data[0], WMHCommRecvInitList[i].DLC, data[1], &data[3])) {
(void)memcpy(WMHCommRecvInitList[i].SignalList, &data[3], WMHCommRecvInitList[i].DLC);
if (WMHCommRecvInitList[i].FrameCallBackFunc != NULL_P) {
WMHCommRecvInitList[i].FrameCallBackFunc();
}
WMHCommRecvMessageTimeout[i] = WMHCommRecvInitList[i].TimeoutMax;
}
}
break;
}
}
}
}
void WMHCommTimeoutService(uint32_t TimerDelta)
{
uint8_t i = 0;
for (i = 0; i < EM_WMH_COMM_RECV_MSG_TOTAL; i++) {
if (WMHCommRecvMessageTimeout[i] > TimerDelta) {
WMHCommRecvMessageTimeout[i] -= TimerDelta;
} else {
if (WMHCommRecvMessageTimeout[i] > 0) {
if (WMHCommRecvInitList[i].FrameTimeoutFunc != NULL_P) {
WMHCommRecvInitList[i].FrameTimeoutFunc();
}
}
WMHCommRecvMessageTimeout[i] = 0;
}
}
for (i = 0; i < EM_WMH_COMM_SEND_MSG_TOTAL; i++) {
if (WMHCommSendMessageTimeout[i] > TimerDelta) {
WMHCommSendMessageTimeout[i] -= TimerDelta;
} else {
if (WMHCommSendMessageTimeout[i] > 0) {
if (WMHCommSendInitList[i].FrameTimeoutFunc != NULL_P) {
WMHCommSendInitList[i].FrameTimeoutFunc();
}
}
WMHCommSendMessageTimeout[i] = 0;
}
}
}
uint32_t WMHCommServiceCnts = 0;
void WMHCommService(uint32_t TimerDelta)
{
uint8_t data[64] = {0};
uint32_t length = 0;
uint32_t tmpPos = 0;
uint8_t *tmpAddr = NULL_P;
uint8_t i = 0;
WMHCommTimeoutService(TimerDelta);
WMHCommServiceCnts += TimerDelta;
if (WMHCommServiceCnts >= 50) {
WMHCommServiceCnts = 0;
//mwWMHCommTransmitBytes(tmpBuffer, length);
tmpAddr = mwWMHCommGetRecvData(&length, &tmpPos);
if (tmpAddr != NULL_P) {
i = 0;
while (WMHCommAnalysisPos != tmpPos) {
data[i++] = (tmpAddr[WMHCommAnalysisPos++]);
WMHCommAnalysisPos = WMHCommAnalysisPos % length;
}
// if (SYS_OPR_STAT_IGN_ON)
// {
WMHCommFrameUnpacked(data, i);
// }
}
}
}
uint8_t WMHCommFrameGetRecvTimeoutSt(uint8_t n)
{
uint8_t ret = 0;
if (n < EM_WMH_COMM_RECV_MSG_TOTAL) {
ret = (uint8_t)(WMHCommRecvMessageTimeout[n] == 0);
}
return ret;
}
#ifndef __WMH_COMM_H_
#define __WMH_COMM_H_
#include "TYW_stdint.h"
#define NULL_P (void *)0
typedef struct {
uint8_t ID; //ID;
uint16_t Peroid; //报文周期,单位ms;
uint8_t DLC; //报文长度;
uint16_t TimeoutMax; //最大超时时间,单位ms;
uint8_t RecoverContinueCnts; //报文超时后连续收到RecoverContinueCnts条判定报文恢复,报文周期不超过Peroid*1.2,填0或1为收到1条报文即判定报文恢复;
uint8_t *SignalList; //信号列表数组
void (*FrameCallBackFunc)(void); //收到报文时会调用该回调函数;
void (*FrameTimeoutFunc)(void); //TimeoutMax超时时会调用FrameTimeoutFunc(0),TimeoutLv[0]超时时调用FrameTimeoutFunc(1),TimeoutLv[1]超时时调用FrameTimeoutFunc(2),TimeoutLv[2]超时时调用FrameTimeoutFunc(3);
uint8_t (*FrameGetCheckSum)(uint32_t ID, uint8_t DLC, uint8_t ProtocolVersion, uint8_t *data); //接收报文时调用该函数,返回1表示checksum正确,0表示错误,如果错误,则不会调用FrameAnalysisFunc函数
} WMH_COMM_INIT_FRAME_T;
typedef enum {
EM_WMH_COMM_RECV_MSG_WI_BOX_0x90 = 0,
EM_WMH_COMM_RECV_MSG_WI_BOX_0x91,
EM_WMH_COMM_RECV_MSG_WI_BOX_0x92,
EM_WMH_COMM_RECV_MSG_TOTAL,
} EM_WMH_COMM_RECV_MSG_T;
typedef enum {
EM_WMH_COMM_SEND_MSG_ICM_0x80 = 0,
EM_WMH_COMM_SEND_MSG_TOTAL,
} EM_WMH_COMM_SEND_MSG_T;
extern void WMHCommInit(void);
extern void WMHCommService(uint32_t TimerDelta);
extern void WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_T MsgIdx);
extern uint8_t WMHCommFrameGetRecvTimeoutSt(uint8_t n);
#endif
#include "wmhcomm.h"
#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)
{
uint32_t ret = 0;
uint8_t i = 0;
ret += ID;
ret += ProtocolVersion;
ret += DLC + 1;
for (i = 0; i < DLC; i++) {
ret += data[i];
}
return (uint8_t)(ret & 0xFF);
}
/*******************************************************************************************
* Recv Message
*******************************************************************************************/
extern const WMH_COMM_INIT_FRAME_T WMHCommRecvInitList[EM_WMH_COMM_RECV_MSG_TOTAL];
COMM_DATA_UNION_WI_BOX_0x90 WMHCommDataWiBox_0x90;
COMM_DATA_UNION_WI_BOX_0x91 WMHCommDataWiBox_0x91;
COMM_DATA_UNION_WI_BOX_0x92 WMHCommDataWiBox_0x92;
void WMHCommFrameCallBack_WiBox_0x90(void)
{
uint8_t tmpCond = 0;
}
void WMHCommFrameCallBack_WiBox_0x91(void)
{
uint8_t tmpCond = 0;
}
void WMHCommFrameCallBack_WiBox_0x92(void)
{
uint8_t tmpCond = 0;
if((WMHCommDataWiBox_0x92.bits.Inquire == 0)||(WMHCommDataWiBox_0x92.bits.NfcOperate == 0 ))
{
WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_ICM_0x80);
}
}
void WMHCommFrameTimeoutFunc_WiBox(void)
{
// 替代第一个 memset
for (int i = 0; i < COMM_DATA_UNION_WI_BOX_LENGTH_0X90; i++) {
WMHCommDataWiBox_0x90.Bytes[i] = 0;
}
// 替代第二个 memset
for (int i = 0; i < COMM_DATA_UNION_WI_BOX_LENGTH_0X91; i++) {
WMHCommDataWiBox_0x91.Bytes[i] = 0;
}
// 替代第三个 memset
for (int i = 0; i < COMM_DATA_UNION_WI_BOX_LENGTH_0X92; i++) {
WMHCommDataWiBox_0x92.Bytes[i] = 0;
}
}
/*******************************************************************************************
* Send Message
*******************************************************************************************/
COMM_DATA_UNION_ICM WMHCommDataIcm;
// uint8_t count = 0;
void WMHCommFrameCallBack_Icm(void)
{
// uint8_t CardKind = 0;
// //EM_FUEL_STATE_T tmpSt = GetFuelModuleState();
// uint32_t tmpVal = Data_ODO_Read() / 10u;
// // WMHCommDataIcm.bits.Mileage_H = 0x11;
// // WMHCommDataIcm.bits.Mileage_M = 0x33;
// // WMHCommDataIcm.bits.Mileage_L = 0x44;
// //if(WMHCommDataWiBox_0x92.bits.Inquire == 0x11)
// {
// if (tmpVal > 9999999) {
// tmpVal = 9999999;
// }
// // WMHCommDataIcm.bits.Mileage_H = (tmpVal >> 16) & 0xFF;
// // WMHCommDataIcm.bits.Mileage_M = (tmpVal >> 8) & 0xFF;
// // WMHCommDataIcm.bits.Mileage_L = (tmpVal) & 0xFF;
// WMHCommDataIcm.bits.Mileage_H = 0x11;
// WMHCommDataIcm.bits.Mileage_M = 0x33;
// WMHCommDataIcm.bits.Mileage_L = 0x44;
// }
// if(WMHCommDataWiBox_0x92.bits.Inquire == 0x22)
// {
// count = WMHCommDataWiBox_0x92.bits.Card_H / 16;
// if(NFC_CARD[count-1][1] == 0)
// {
// CardKind = 2;
// }
// else
// {
// CardKind = 1;
// }
// WMHCommDataIcm.bits.CardKind = CardKind;
// WMHCommDataIcm.bits.CardNum = count*16+count;
// WMHCommDataIcm.bits.CardID1 = NFC_CARD[count-1][2];
// WMHCommDataIcm.bits.CardID2 = NFC_CARD[count-1][3];
// WMHCommDataIcm.bits.CardID3 = NFC_CARD[count-1][4];
// WMHCommDataIcm.bits.CardID4 = NFC_CARD[count-1][5];
// WMHCommDataIcm.bits.CardTotal = Study_CardCount;
// }
// else
// {
// count = 0;
// WMHCommDataIcm.bits.CardKind = 0;
// WMHCommDataIcm.bits.CardNum = 0;
// WMHCommDataIcm.bits.CardID1 = 0;
// WMHCommDataIcm.bits.CardID2 = 0;
// WMHCommDataIcm.bits.CardID3 = 0;
// WMHCommDataIcm.bits.CardID4 = 0;
// WMHCommDataIcm.bits.CardTotal = 0;
// }
// if(WMHCommDataWiBox_0x92.bits.NfcOperate == 0x11)
// {
// WMHCommDataIcm.bits.AddCardStatus = Add_Card_Status;
// if(WMHCommDataIcm.bits.AddCardStatus == 2)
// {
// WMHCommDataIcm.bits.CardKind = NFC_CARD[NFC_Empty_card][1];
// WMHCommDataIcm.bits.CardNum = (NFC_Empty_card + 1)*17;
// WMHCommDataIcm.bits.CardID1 = NFC_CARD[NFC_Empty_card][2];
// WMHCommDataIcm.bits.CardID2 = NFC_CARD[NFC_Empty_card][3];
// WMHCommDataIcm.bits.CardID3 = NFC_CARD[NFC_Empty_card][4];
// WMHCommDataIcm.bits.CardID4 = NFC_CARD[NFC_Empty_card][5];
// WMHCommDataIcm.bits.CardTotal = Study_CardCount;
// }
// else if(WMHCommDataIcm.bits.AddCardStatus == 1)
// {
// WMHCommDataIcm.bits.CardKind = 0;
// WMHCommDataIcm.bits.CardNum = (NFC_Empty_card + 1)*17;
// WMHCommDataIcm.bits.CardID1 = 0;
// WMHCommDataIcm.bits.CardID2 = 0;
// WMHCommDataIcm.bits.CardID3 = 0;
// WMHCommDataIcm.bits.CardID4 = 0;
// WMHCommDataIcm.bits.CardTotal = Study_CardCount;
// }
// else
// {
// WMHCommDataIcm.bits.CardKind = 0;
// WMHCommDataIcm.bits.CardNum = 0;
// WMHCommDataIcm.bits.CardID1 = 0;
// WMHCommDataIcm.bits.CardID2 = 0;
// WMHCommDataIcm.bits.CardID3 = 0;
// WMHCommDataIcm.bits.CardID4 = 0;
// WMHCommDataIcm.bits.CardTotal = Study_CardCount;
// }
// WMHCommDataIcm.bits.RemoveCardStatus = 0;
// }
// else if(WMHCommDataWiBox_0x92.bits.NfcOperate == 0x22)
// {
// WMHCommDataIcm.bits.RemoveCardStatus = 2;
// WMHCommDataIcm.bits.AddCardStatus = 0;
// }
// else
// {
// WMHCommDataIcm.bits.AddCardStatus = 0xFF;
// WMHCommDataIcm.bits.RemoveCardStatus = 0xFF;
// }
// WMHCommDataIcm.bits.Reserved = 0xFF;
}
void WMHCommFrameTimeoutFunc_Icm(void)
{
//if((WMHCommDataWiBox_0x92.bits.Inquire != 0)||(WMHCommDataWiBox_0x92.bits.NfcOperate != 0 ))
{
//WMHCommFramePackedTransmit(EM_WMH_COMM_SEND_MSG_ICM_0x80);
}
}
#ifndef __WMH_COMM_DATA_H_
#define __WMH_COMM_DATA_H_
#include "TYW_stdint.h"
#define WMH_COMM_PROTOCOL_VERSION 0x2F;
#define COMM_DATA_UNION_WI_BOX_LENGTH_0X90 15
typedef union {
struct {
uint8_t ProductModel :6; //产品型号
uint8_t ManufacturerCodingRules :2; //厂家编码规则
uint8_t DeviceEncoding :8; //设备编码
uint8_t SerialNumberL :8; //流水号
uint8_t FaultStatus :1; //故障状态
uint8_t ConstantSpeedStatus :1; //定速巡航状态
uint8_t GearPStatus :1; //P档状态
uint8_t ReadyStatus :1; //READY状态
uint8_t SerialNumberH :4; //流水号高字节4
uint8_t EstimateMileage_H :8; //预估里程
uint8_t EstimateMileage_L :8; //预估里程
uint8_t EnergyConsumption :8; //能耗系数
uint8_t Fault8 :1;//电机缺相故障
uint8_t Fault7 :1;//堵转保护故障
uint8_t Fault6 :1;//欠压保护故障
uint8_t Fault5 :1;//转把故障故障
uint8_t Fault4 :1;//控制器MOS管故障故障
uint8_t Fault3 :1;//刹车故障故障
uint8_t Fault2 :1;//电机霍尔故障故障
uint8_t Fault1 :1;//过压保护故障
uint8_t Fault16 :1;//电池充电过流保护故障
uint8_t Fault15 :1;//电池SOC过低故障
uint8_t Fault14 :1;//电池总压欠压保护故障
uint8_t Fault13 :1;//电池总压过压保护故障
uint8_t Fault12 :1;//电池放电MOS故障故障
uint8_t Fault11 :1;//电池充电MOS故障故障
uint8_t Fault10 :1;//控制器过热故障
uint8_t Fault9 :1; //电机过热故障
uint8_t Reserved3 :3;
uint8_t Fault21 :1;//电池充电过温保护故障
uint8_t Fault20 :1;//电池充电低温保护故障
uint8_t Fault19 :1;//电池放电过温保护故障
uint8_t Fault18 :1;//电池放电低温保护故障
uint8_t Fault17 :1;//电池放电过流保护故障
uint8_t Espeed_H :8;//电机脉冲数
uint8_t Espeed_L :8;//电机脉冲数
uint8_t Electricity :8;//电量
uint8_t Reserved5 :5;
uint8_t Fault39 :1; //电池放电过流保护故障
uint8_t GEAR :1; //1:S档 0:D档
uint8_t FaultLED :1;//故障指示灯
uint8_t BurglarStatus :1; //防盗状态
uint8_t Reserved4 :4;
uint8_t CartStatus :1; //推车状态
uint8_t SideBraceStatus :1;//边撑状态
uint8_t EBSStatus :1; //EBS状态
// uint8_t MessageWaittingToAnswer :1;//信息
// uint8_t PhoneWaittingToAnswer :1;//电话
// uint8_t PositFault :1;//定位故障
// uint8_t MasterControlFault :1;//主控故障
// uint8_t BtFault :1;//蓝牙故障
// uint8_t PowerFault :1;//电源故障
// uint8_t ThreeAxisSensorFault :1;//三轴传感器故障
// uint8_t OneServiceFault :1;//一线通故障
// uint8_t NetWorkFault :1;//网络故障
// uint8_t ACCFault :1;//ACC故障
// uint8_t Reserved2 :6;
// uint8_t AntennaFault :1;//天线故障
// uint8_t RfFault :1;//射频故障
//uint8_t EstimateMileage_H :8;//预估里程
//uint8_t EstimateMileage_L :8;//预估里程
} bits;
uint8_t Bytes[COMM_DATA_UNION_WI_BOX_LENGTH_0X90];
} COMM_DATA_UNION_WI_BOX_0x90;
extern COMM_DATA_UNION_WI_BOX_0x90 WMHCommDataWiBox_0x90;
#define COMM_DATA_UNION_WI_BOX_LENGTH_0X91 12
typedef union {
struct {
uint8_t Year :8;
uint8_t Month :8;
uint8_t Day :8;
uint8_t Hour :8;
uint8_t Minute :8;
uint8_t Second :8;
uint8_t BtDistanceSt :1;
uint8_t BtConnection :1;
uint8_t SignalStrengthOf4G :3;
uint8_t SignalStrengthOfGps :3;
uint8_t Reserved1 :6;
uint8_t MessageWaittingToAnswer :1; //信息
uint8_t PhoneWaittingToAnswer :1; //电话
uint8_t PositFault :1; //定位故障
uint8_t MasterControlFault :1; //主控故障
uint8_t BtFault :1; //蓝牙故障
uint8_t PowerFault :1; //电源故障
uint8_t ThreeAxisSensorFault :1;//三轴传感器故障
uint8_t OneServiceFault :1; //一线通故障
uint8_t NetWorkFault :1; //网络故障
uint8_t ACCFault :1; //ACC故障
uint8_t Reserved2 :6;
uint8_t AntennaFault :1;//天线故障
uint8_t RfFault :1; //射频故障
uint8_t EstimateMileage_H :8;//预估里程
uint8_t EstimateMileage_L :8;//预估里程
} bits;
uint8_t Bytes[COMM_DATA_UNION_WI_BOX_LENGTH_0X91];
} COMM_DATA_UNION_WI_BOX_0x91;
extern COMM_DATA_UNION_WI_BOX_0x91 WMHCommDataWiBox_0x91;
#define COMM_DATA_UNION_WI_BOX_LENGTH_0X92 5
typedef union {
struct {
uint8_t Inquire :8; //0x00 未查询 0x11查询里程 0x22 查询NFC卡信息
uint8_t NfcOperate :8;//0x00 无操作 0x11添卡 0x22 删卡
uint8_t Card_H :8; //0x00 (暂不响应) 0x11~0xFF(卡1~卡15)
uint8_t Card_L :8;
uint8_t Reserved :8;
} bits;
uint8_t Bytes[COMM_DATA_UNION_WI_BOX_LENGTH_0X92];
} COMM_DATA_UNION_WI_BOX_0x92;
extern COMM_DATA_UNION_WI_BOX_0x92 WMHCommDataWiBox_0x92;
#define COMM_DATA_UNION_ICM_LENGTH 13
typedef union {
struct {
uint8_t Mileage_H :8;
uint8_t Mileage_M :8;
uint8_t Mileage_L :8;
uint8_t CardKind :8; //卡种类 0x01加密卡 0x02未加密卡
uint8_t CardNum :8; //卡序号 0x11 0x22 0x33
uint8_t CardID1 :8; //卡ID
uint8_t CardID2 :8; //卡ID
uint8_t CardID3 :8; //卡ID
uint8_t CardID4 :8; //卡ID
uint8_t CardTotal :8;//卡总数
uint8_t AddCardStatus:8; //添卡状态0x01进行中 0x02成功 0x03失败 0x04卡已存在
uint8_t RemoveCardStatus:8;//删卡状态0x01进行中 0x02成功 0x03失败
uint8_t Reserved :8;
} bits;
uint8_t Bytes[COMM_DATA_UNION_ICM_LENGTH];
} COMM_DATA_UNION_ICM;
extern COMM_DATA_UNION_ICM WMHCommDataIcm;
extern uint8_t WMHCommFrameCheckSumFunc(uint32_t ID, uint8_t DLC, uint8_t ProtocolVersion, uint8_t *data);
extern void WMHCommFrameCallBack_WiBox_0x90(void);
extern void WMHCommFrameCallBack_WiBox_0x91(void);
extern void WMHCommFrameCallBack_WiBox_0x92(void);
extern void WMHCommFrameTimeoutFunc_WiBox(void);
extern void WMHCommFrameCallBack_Icm(void);
extern void WMHCommFrameTimeoutFunc_Icm(void);
#endif
This diff is collapsed.
#ifndef __MW_WMH_COMM_H_
#define __MW_WMH_COMM_H_
#include "TYW_stdint.h"
#define NULL_P (void *)0
typedef enum {
EM_WMH_COMM_PIN_TX_IDX = 0,
EM_WMH_COMM_PIN_RX_ID_0x90,
EM_WMH_COMM_PIN_RX_ID_wibox,
EM_WMH_COMM_PIN_TOTAL,
} EM_WMH_COMM_PIN_T;
// static const IO_NUM_ENUM mwWMHCommPin[EM_WMH_COMM_PIN_TOTAL] = {
// IO_NUM_MCU_ONE_LINE_COMM_TX,
// IO_NUM_MCU_ONE_LINE_COMM_RX,
// };
typedef enum {
EM_WMH_COMM_FRAME_STANDBAY = 0,
EM_WMH_COMM_FRAME_START,
EM_WMH_COMM_FRAME_LOGIC_1,
EM_WMH_COMM_FRAME_LOGIC_0,
EM_WMH_COMM_FRAME_STOP,
EM_WMH_COMM_FRAME_TOTAL,
} EM_WMH_COMM_FRAME_T;
typedef struct {
uint32_t LowLevelTime; // us
uint32_t HighLevelTime; // us
} MW_WMH_COMM_TIMER_T;
typedef struct {
MW_WMH_COMM_TIMER_T Standard;
MW_WMH_COMM_TIMER_T UpperLimit;
MW_WMH_COMM_TIMER_T LowerLimit;
} MW_WMH_COMM_SEQUENTIAL_T;
extern void mwWMHCommInit(void);
extern void mwWMHCommRecvIsr_0x90(uint32_t tmpCnts);
extern void mwWMHCommRecvIsr_wibox(uint32_t tmpCnts);
extern void mwWMHCommSendIsr(uint32_t tmpCnts);
extern void mwWMHCommTransmitBytes(uint8_t *data, uint32_t length);
extern uint8_t *mwWMHCommGetRecvData(uint32_t *BufferLen, uint32_t *RecvPos);
extern void mwWMHCommRecvByte_0x90(uint8_t data);
extern void mwWMHCommRecvByte_wibox(uint8_t data);
#endif
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