optical/EMBOS/Users/EmbFunc/extendboards/extendboards.c

2248 lines
72 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#include "extendboards.h"
#include "delay.h"
#include "crc16.h"
#include "filetrans.h"
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
#if (MAX_SUPPORT_CORE > 0)
CoreControl g_extendCtrlList[MAX_SUPPORT_CORE];
#define EXID_CORE_STA1 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_1, 0, BN_CMD_REGVAL) // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>״̬<D7B4>仯 ID
#define EXID_CORE_STA2 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_2, 0, BN_CMD_REGVAL) // <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>仯 ID
#define EXID_CORE_STA3 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_3, 0, BN_CMD_REGVAL) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>仯 ID
#define CUR_BOARD_INSTA_EXID MAKE_EXID(BN_PROTOCOL_MVCTRL, CUR_COREBOARD_ID, 0, BN_CMD_REGVAL)
#define EXID_CORE_CTRL1 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_1, 0, BN_CMD_WTREG) // <20><>һ<EFBFBD><D2BB><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
#define EXID_CORE_CTRL2 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_2, 0, BN_CMD_WTREG) // <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
#define EXID_CORE_CTRL3 MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_CORE_3, 0, BN_CMD_WTREG) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
#define CUR_BOARD_OUTCTRL_EXID MAKE_EXID(BN_PROTOCOL_MVCTRL, CUR_COREBOARD_ID, 0, BN_CMD_WTREG)
const u32 g_coreInExid[MAX_SUPPORT_CORE] =
{
EXID_CORE_STA1,
#if (MAX_SUPPORT_CORE > 1)
EXID_CORE_STA2,
#endif
#if (MAX_SUPPORT_CORE > 2)
EXID_CORE_STA3,
#endif
};
const u32 g_coreOutExid[MAX_SUPPORT_CORE] =
{
EXID_CORE_CTRL1,
#if (MAX_SUPPORT_CORE > 1)
EXID_CORE_CTRL2,
#endif
#if (MAX_SUPPORT_CORE > 2)
EXID_CORE_CTRL3,
#endif
};
#endif
//-------------------------------------------------------------------------
int g_curBoardIdx = -1; // <20><>ǰ<EFBFBD><EFBFBD><E5BFA8><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5>½DZ<C2BD>
int g_curBoardID = -1; // <20><>ǰ<EFBFBD><EFBFBD>Ľڵ<C4BD>ID
int g_curBoardInstaExid = -1;
int g_curBoardOutCtrlExid = -1;
int g_wrcmdtoogle = 0;
int g_rdcmdtoogle = 0;
u32 g_rdcmdbitmap = 0;
int g_wrstatoogle = 0;
int g_rdstatoogle = 0;
u32 g_rdstabitmap = 0;
#if (RD_HEAD_PARA_NUM > 0)
u8 g_exbNvPara[RD_HEAD_PARA_NUM][BOARD_PARA_SIZE]; // <20><>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
u8 g_receiveEn[RD_HEAD_PARA_NUM] = {0}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 g_receivenum[RD_HEAD_PARA_NUM] = {0}; // <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>
u8 g_framenum[RD_HEAD_PARA_NUM] = {0}; // <20><><EFBFBD>ݰ<EFBFBD>֡<EFBFBD><D6A1>
u16 g_datacrc[RD_HEAD_PARA_NUM] = {0}; // <20><><EFBFBD><EFBFBD>crcУ<63><D0A3>ֵ
#endif
s32 headparaval = 0;
#define TOOGLE_ADD 0x00010000
#define PORT_ADDR_MOD 0x0000FFFF
#define PORT_TOOG_MOD 0xFFFF0000
#define CMDSTA_BMP_FULL 0x000000FF
//-------------------------------------------------------------------------
static const u32 IDX_TO_BIT[32] =
{
0x00000001,
0x00000002,
0x00000004,
0x00000008,
0x00000010,
0x00000020,
0x00000040,
0x00000080,
0x00000100,
0x00000200,
0x00000400,
0x00000800,
0x00001000,
0x00002000,
0x00004000,
0x00008000,
0x00010000,
0x00020000,
0x00040000,
0x00080000,
0x00100000,
0x00200000,
0x00400000,
0x00800000,
0x01000000,
0x02000000,
0x04000000,
0x08000000,
0x10000000,
0x20000000,
0x40000000,
0x80000000,
};
#if (MAX_SUPPORT_HEAD > 0)
HeadControl g_headList[MAX_SUPPORT_HEAD+1];
#endif
#if (MAX_SUPPORT_COLOR > 0)
ColorControl g_colorList[MAX_SUPPORT_COLOR+1];
#endif
#if (MAX_SUPPORT_EXTIO > 0)
ExtIOControl g_extioList[MAX_SUPPORT_EXTIO+1];
#endif
#if (MAX_SUPPORT_SEWHD > 0)
SewHeadControl g_sewHeadList[MAX_SUPPORT_SEWHD+1];
#endif
//-------------------------------------------------------------------------
void InitBoardsList(void)
{
int i;
int id;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_curBoardIdx = CUR_CORE_IDX;
g_curBoardID = -1;
g_curBoardInstaExid = -1;
g_curBoardOutCtrlExid = -1;
#if (MAX_SUPPORT_CORE > 0)
for (i = 0; i < MAX_SUPPORT_CORE; i++)
{
InitCoreControl(&(g_extendCtrlList[i]));
id = i+1;
g_extendCtrlList[i].staexid = MAKE_EXID(BN_PROTOCOL_MVCTRL, id, 0, BN_CMD_REGVAL);
g_extendCtrlList[i].cmdexid = MAKE_EXID(BN_PROTOCOL_MVCTRL, id, 0, BN_CMD_WTREG);
if (g_curBoardIdx == i)
{
g_curBoardID = id;
g_curBoardInstaExid = g_extendCtrlList[i].staexid;
g_curBoardOutCtrlExid = g_extendCtrlList[i].cmdexid;
}
}
#endif
if (g_curBoardIdx >= 0)
{
printf("cur board idx = %d\r\n", g_curBoardIdx);
}
else
{
printf("init extendCtrlList error\r\n");
}
//-------------------------------------------------------------------------
// <20><>ͷ<EFBFBD><CDB7>
#if (MAX_SUPPORT_HEAD > 0)
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++) // 0Ϊ<30><EFBFBD><E3B2A5><EFBFBD><EFBFBD> <20><>MAX_SUPPORT_HEAD+1
{
InitHeadControl(&(g_headList[i]));
if (i == 0)
{
g_headList[i].nodeId = BN_ID_BROADCAST;
}
else
{
id = i + HEAD_NODEID_BASE - 1;
g_headList[i].nodeId = id;
}
}
#endif // (MAX_SUPPORT_HEAD > 0)
//-------------------------------------------------------------------------
// <20><>ɫ<EFBFBD><C9AB>
#if (MAX_SUPPORT_COLOR > 0)
for (i = 0; i < MAX_SUPPORT_COLOR+1; i++)
{
InitColorControl(&(g_colorList[i]));
if (i == 0)
{
g_colorList[i].nodeId = BN_ID_BROADCAST;
}
else
{
id = i + COLOR_NODEID_BASE - 1;
g_colorList[i].nodeId = id;
}
}
#endif
//-------------------------------------------------------------------------
// IO<49><4F>չ<EFBFBD><D5B9>
#if (MAX_SUPPORT_EXTIO > 0)
for (i = 0; i < MAX_SUPPORT_EXTIO+1; i++)
{
InitExtIOControl(&(g_extioList[i]));
if (i == 0)
{
g_extioList[i].nodeId = BN_ID_BROADCAST;
}
else
{
id = i + EXTIO_NODEID_BASE - 1;
g_extioList[i].nodeId = id;
}
}
#endif
//-------------------------------------------------------------------------
// <20><><EFBFBD>һ<EFBFBD>ͷ<EFBFBD><CDB7>
#if (MAX_SUPPORT_SEWHD > 0)
for (i = 0; i < MAX_SUPPORT_SEWHD+1; i++)
{
InitSewHeadControl(&(g_sewHeadList[i]));
if (i == 0)
{
g_sewHeadList[i].nodeId = BN_ID_BROADCAST;
}
else
{
id = i + SEWHD_NODEID_BASE - 1;
g_sewHeadList[i].nodeId = id;
}
}
#endif
}
//---------------------------------------------------
// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>
void CoreCanFilter(u8 fifo)
{
int filteridx = 0;
CAN_FilterTypeDef hFilterConfig;
if (1)
{// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
filteridx = filteridx;
hFilterConfig.FilterBank = 1;
hFilterConfig.FilterBank = hFilterConfig.FilterBank;
}
#if (MAX_SUPPORT_CORE > 1)
// <20><><EFBFBD>󱾽ڵ<F3B1BEBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF>Զ<EFBFBD><D4B6>֡<EFBFBD>Ϳ<EFBFBD><CDBF>Ʊ<EFBFBD><C6B1>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD>б<EFBFBD>ģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ32λ
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(g_curBoardInstaExid, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(g_curBoardInstaExid, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(g_curBoardOutCtrlExid, CAN_RTR_DATA)); // <20><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(g_curBoardOutCtrlExid, CAN_RTR_DATA)); // <20><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49>Ĺ㲥<C4B9><E3B2A5>Զ<EFBFBD><D4B6>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_BROADCAST, 0, 0), 0)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, BN_ID_BROADCAST, 0, 0), 0)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N1<4E>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, 0, 0, BN_CMD_WTREG), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, 0, 0, BN_CMD_WTREG), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig);
filteridx++;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N1<4E>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_MVCTRL, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_REMOTE)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
#endif
#if (MAX_SUPPORT_HEAD > 0)
// <20><><EFBFBD>Ի<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ի<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_BUSSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_BUSSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ի<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ķ<EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ի<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ķ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_HEAD, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
#endif
#if (MAX_SUPPORT_COLOR > 0)
// <20><><EFBFBD>Ի<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ի<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>Ķ<EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Ի<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>Ķ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_COLOR, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
#endif
#if (MAX_SUPPORT_EXTIO > 0)
// <20><><EFBFBD><EFBFBD>IO<49><4F>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_EXTIO, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_EXTIO, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD><EFBFBD>IO<49><4F>չ<EFBFBD><D5B9><EFBFBD>Ķ<EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_EXTIO, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_EXTIO, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
#endif
#if (MAX_SUPPORT_SEWHD > 0)
// <20><><EFBFBD>Է<EFBFBD><D4B7>һ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Է<EFBFBD><D4B7>һ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_BUSSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_BUSSTA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Է<EFBFBD><D4B7>һ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ķ<EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_REGVAL), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
// <20><><EFBFBD>Է<EFBFBD><D4B7>һ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ķ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
hFilterConfig.FilterBank = filteridx; // <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>ΧΪ0~13
hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λģʽ
hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ1<CEAA><31>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(BN_PROTOCOL_SEWHD, 0, 0, BN_CMD_NVPARA), CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>߶<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
hFilterConfig.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_CMD, CAN_RTR_DATA)); // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>32λλ<CEBB><CEBB>ʱΪ<CAB1><CEAA><EFBFBD>Ͷ<EFBFBD>λ<EFBFBD><CEBB>16λλ<CEBB><CEBB>ʱΪ<CAB1>ڶ<EFBFBD><DAB6><EFBFBD>)
hFilterConfig.FilterFIFOAssignment = fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
hFilterConfig.SlaveStartFilterBank = 14;
hFilterConfig.FilterActivation = ENABLE; // ʹ<>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
filteridx++;
#endif
}
void InitExtendBoards()
{
InitBoardsList();
RegistFilter(CoreCanFilter);
InitCanCtrl();
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
void InputsTask()
{
int rslt;
CanRxMsg rxMsg;
u32 tid, sid, cmd, dev, toogle;
int i, count, idx;
CtrlBusPacket pkt;
count = 0;
// CAN<41><4E><EFBFBD><EFBFBD>
do
{
rslt = GetACanDataPacket(&rxMsg);
if (rslt == 0)
{
dev = GET_PRT_FROM_EXID(rxMsg.canRxhead.ExtId);
tid = GET_TID_FROM_EXID(rxMsg.canRxhead.ExtId);
sid = GET_SID_FROM_EXID(rxMsg.canRxhead.ExtId);
cmd = GET_CMD_FROM_EXID(rxMsg.canRxhead.ExtId);
sid = sid;
if (rxMsg.canRxhead.RTR == CAN_RTR_REMOTE) // Զ<><D4B6>֡
{
if ((dev == BN_PROTOCOL_ALL || dev == BN_PROTOCOL_MVCTRL) && // ȫ<><C8AB><EFBFBD><EFBFBD><E8B1B8>N1
(tid == BN_ID_BROADCAST || tid == g_curBoardID) ) // ȫ<><C8AB>ID<49>򱾰<EFBFBD>
{
if (cmd == BN_CMD_REGVAL) // <20><><EFBFBD>󱾽ڵ㷢<DAB5>ͼĴ<CDBC><C4B4><EFBFBD>
{
// printf("receive sta request packet\r\n");
if (g_curBoardIdx >= 0)
{
g_extendCtrlList[g_curBoardIdx].refreshflag = 1; // <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>״̬ˢ<CCAC>±<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>
}
else
{
printf("error: g_curBoardIdx not init\r\n");
}
}
else
{
printf("other Remote cmd, cmd=0x%x\r\n", cmd);
}
}
else
{
printf("other Remote packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
else if (rxMsg.canRxhead.RTR == CAN_RTR_DATA && rxMsg.canRxhead.DLC == CAN_DATA_LEN) // <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ8
{
#if (MAX_SUPPORT_CORE > 0)
if (dev == BN_PROTOCOL_MVCTRL)
{
if (tid == BN_ID_BROADCAST || tid == g_curBoardID) // ȫ<><C8AB>ID<49>򱾰<EFBFBD>
{
if (cmd == BN_CMD_WTREG) // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB5BD><EFBFBD>ڵ<EFBFBD>
if (g_curBoardIdx >= 0)
{
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
toogle = pkt.cancomm.data.wrport.portaddr & PORT_TOOG_MOD;
idx = pkt.cancomm.data.wrport.portaddr & PORT_ADDR_MOD;
// printf("refresh this cmd, toogle=0x%x, idx=%d, cmd=0x%x\r\n", toogle, idx, pkt.cancomm.data.wrport.wrdata);
if (toogle != g_rdcmdtoogle) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// <20><><EFBFBD><EFBFBD>״̬buff
g_rdcmdtoogle = toogle;
g_rdcmdbitmap = 0;
g_extendCtrlList[g_curBoardIdx].newcmdflag = 0;
memset(g_extendCtrlList[g_curBoardIdx].cmdbuff, 0, sizeof(CORE_CHG_BUF_LEN));
// printf("get new cmd begin\r\n");
}
if (idx < CORE_CHG_BUF_LEN)
{
g_extendCtrlList[g_curBoardIdx].cmdbuff[idx] = pkt.cancomm.data.wrport.wrdata;
g_rdcmdbitmap |= IDX_TO_BIT[idx];
if (g_rdcmdbitmap == CMDSTA_BMP_FULL)
{
g_extendCtrlList[g_curBoardIdx].newcmdflag = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
// printf("get new cmd end\r\n");
}
}
// printf("refresh this cmd, toogle=0x%x, idx=%d, cmd=0x%x\r\n", toogle, idx, pkt.cancomm.data.wrport.wrdata);
}
else
{
printf("error: g_curBoardIdx not init\r\n");
}
}
else
{
//printf("get other core data for this, cmd=%d, sid=%d\r\n", cmd, sid);
}
}
else // <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID
{
if (cmd == BN_CMD_REGVAL) // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
{
for (i = 0; i < MAX_SUPPORT_CORE ; i++)
{
if (g_extendCtrlList[i].staexid == rxMsg.canRxhead.ExtId) // <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
{
// ˢ<><CBA2>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
toogle = pkt.cancomm.data.wrport.portaddr & PORT_TOOG_MOD;
idx = pkt.cancomm.data.wrport.portaddr & PORT_ADDR_MOD;
if (toogle != g_rdstatoogle) // <20><>״̬
{
// <20><><EFBFBD><EFBFBD>״̬buff
memset(g_extendCtrlList[i].stabuff, 0, sizeof(CORE_CHG_BUF_LEN));
g_rdstatoogle = toogle;
g_rdstabitmap = 0;
g_extendCtrlList[i].stachangeflag = 0;
// printf("get new status begin, toogle=0x%x, idx=%d\r\n", toogle, idx);
}
if (idx < CORE_CHG_BUF_LEN)
{
g_extendCtrlList[i].stabuff[idx] = pkt.cancomm.data.wrport.wrdata;
g_rdstabitmap |= IDX_TO_BIT[idx];
if (g_rdstabitmap == CMDSTA_BMP_FULL)
{
g_extendCtrlList[i].stachangeflag = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
// printf("get new status ok\r\n");
}
}
// printf("refresh core %d status, toogle=0x%x, idx=%d, val=0x%x\r\n", i+1, toogle, idx, pkt.cancomm.data.wrport.wrdata);
break;
}
}
}
else
{
//printf("get other core data, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
}
#endif
#if (MAX_SUPPORT_HEAD > 0)
else if (dev == BN_PROTOCOL_HEAD) // <20><>ͷ<EFBFBD><CDB7>
{
if (cmd == BN_CMD_EXSTA)
{
//printf("get head sta packet, sid=%d\r\n", sid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++)
{
if (sid == g_headList[i].nodeId)
{
g_headList[i].exbSta.cancomm.exId.id = rxMsg.canRxhead.ExtId;
memcpy(g_headList[i].exbSta.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
g_headList[i].staFlag = 1;
break;
}
}
}
}
else if (cmd == BN_CMD_BUSSTA) // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
{
printf("get head bus sta packet, sid=%d\r\n", sid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++)
{
if (sid == g_headList[i].nodeId)
{
g_headList[i].busSta.cancomm.exId.id = rxMsg.canRxhead.ExtId;
memcpy(g_headList[i].busSta.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
g_headList[i].busFlag = 1;
break;
}
}
}
}
else if (cmd == BN_CMD_REGVAL) // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//printf("get head reg val packet, sid=%d, tid=%d\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++)
{
if (sid == g_headList[i].nodeId)
{
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
u32 highaddr, lowaddr;
highaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_HIGH;
lowaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_LOW;
if (highaddr == BOARD_VERSION)
{
if (g_headList[i].regVal.rdnewbverflag == 1) // <20>³<EFBFBD><C2B3><EFBFBD><EFBFBD>
{
g_headList[i].regVal.rdbverbitmap = 0;
g_headList[i].regVal.rdnewbverflag = 0; // <20><><EFBFBD><EFBFBD>
g_headList[i].verFlag = 0;
memset(g_headList[i].regVal.exbVer, 0, BOARD_VER_LEN*sizeof(u32));
}
if (lowaddr < BOARD_VER_LEN)
{
g_headList[i].regVal.exbVer[lowaddr] = pkt.cancomm.data.rdport.status;
g_headList[i].regVal.rdbverbitmap |= IDX_TO_BIT[lowaddr];
if (g_headList[i].regVal.rdbverbitmap == CMDSTA_BMP_FULL)
{
g_headList[i].verFlag = 1;
}
}
}
else if (highaddr == GET_NV_PARA) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
{
g_headList[i].headParaFlag = 1;
headparaval = pkt.cancomm.data.rdport.status;
}
break;
}
}
}
}
#if (RD_HEAD_PARA_NUM > 0)
else if (cmd == BN_CMD_NVPARA) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
{
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++)
{
if (sid == g_headList[i].nodeId)
{
int id = 0;
if (g_headList[i].nodeTye == FLAT_EMB_HEAD)
{
id = 1;
}
else if (g_headList[i].nodeTye == CHENILLE_HEAD)
{
id = 2;
}
else if (g_headList[i].nodeTye == COIL_HEAD)
{
id = 3;
}
int rslt = ReceiveBoardNvParaProc(rxMsg, id, g_headList[i].nodeTye);
if (rslt == 0)
{
g_headList[i].nvParaFlag = 1;
}
break;
}
}
}
}
#endif
else
{
printf("get other head data packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
#endif
#if (MAX_SUPPORT_COLOR > 0)
else if (dev == BN_PROTOCOL_COLOR)
{
if (cmd == BN_CMD_EXSTA)
{
//printf("get color sta packet, sid=0x%x, tid=0x%x\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_COLOR+1; i++)
{
if (sid == g_colorList[i].nodeId)
{
g_colorList[i].exbSta.cancomm.exId.id = rxMsg.canRxhead.ExtId;
memcpy(g_colorList[i].exbSta.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
g_colorList[i].staFlag = 1;
break;
}
}
}
}
else if (cmd == BN_CMD_REGVAL) // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//printf("get color reg val packet, sid=%d, tid=%d\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_COLOR+1; i++)
{
if (sid == g_colorList[i].nodeId)
{
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
u32 highaddr, lowaddr;
highaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_HIGH;
lowaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_LOW;
if (highaddr == BOARD_VERSION)
{
if (g_colorList[i].regVal.rdnewbverflag == 1) // <20>³<EFBFBD><C2B3><EFBFBD><EFBFBD>
{
g_colorList[i].regVal.rdbverbitmap = 0;
g_colorList[i].regVal.rdnewbverflag = 0; // <20><><EFBFBD><EFBFBD>
g_colorList[i].verFlag = 0;
memset(g_colorList[i].regVal.exbVer, 0, BOARD_VER_LEN*sizeof(u32));
}
if (lowaddr < BOARD_VER_LEN)
{
g_colorList[i].regVal.exbVer[lowaddr] = pkt.cancomm.data.rdport.status;
g_colorList[i].regVal.rdbverbitmap |= IDX_TO_BIT[lowaddr];
if (g_colorList[i].regVal.rdbverbitmap == CMDSTA_BMP_FULL)
{
g_colorList[i].verFlag = 1;
}
}
}
break;
}
}
}
}
#if (RD_HEAD_PARA_NUM > 0)
else if (cmd == BN_CMD_NVPARA) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
{
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_COLOR+1; i++)
{
if (sid == g_colorList[i].nodeId)
{
int id = 0;
if (i == 2) // ë<><C3AB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
{
id = 4;
}
int rslt = ReceiveBoardNvParaProc(rxMsg, id, 0);
if (rslt == 0)
{
g_colorList[i].nvParaFlag = 1;
}
break;
}
}
}
}
#endif
else
{
printf("get other color data packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
#endif // (MAX_SUPPORT_COLOR > 0)
#if (MAX_SUPPORT_EXTIO > 0)
else if (dev == BN_PROTOCOL_EXTIO)
{
if (cmd == BN_CMD_EXSTA)
{
//printf("get extio sta packet, sid=0x%x, tid=0x%x\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_EXTIO+1; i++)
{
if (sid == g_extioList[i].nodeId)
{
g_extioList[i].exbSta.cancomm.exId.id = rxMsg.canRxhead.ExtId;
memcpy(g_extioList[i].exbSta.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
g_extioList[i].staFlag = 1;
break;
}
}
}
}
else if (cmd == BN_CMD_REGVAL) // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//printf("get extio reg val packet, sid=%d, tid=%d\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_EXTIO+1; i++)
{
if (sid == g_extioList[i].nodeId)
{
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
u32 highaddr, lowaddr;
highaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_HIGH;
lowaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_LOW;
if (highaddr == BOARD_VERSION)
{
if (g_extioList[i].regVal.rdnewbverflag == 1) // <20>³<EFBFBD><C2B3><EFBFBD><EFBFBD>
{
g_extioList[i].regVal.rdbverbitmap = 0;
g_extioList[i].regVal.rdnewbverflag = 0; // <20><><EFBFBD><EFBFBD>
g_extioList[i].verFlag = 0;
memset(g_extioList[i].regVal.exbVer, 0, BOARD_VER_LEN*sizeof(u32));
}
if (lowaddr < BOARD_VER_LEN)
{
g_extioList[i].regVal.exbVer[lowaddr] = pkt.cancomm.data.rdport.status;
g_extioList[i].regVal.rdbverbitmap |= IDX_TO_BIT[lowaddr];
if (g_extioList[i].regVal.rdbverbitmap == CMDSTA_BMP_FULL)
{
g_extioList[i].verFlag = 1;
}
}
}
break;
}
}
}
}
else
{
printf("get other extio data packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
#endif // (MAX_SUPPORT_EXTIO > 0)
#if (MAX_SUPPORT_SEWHD > 0)
else if (dev == BN_PROTOCOL_SEWHD)
{
if (cmd == BN_CMD_EXSTA)
{
//printf("get color sta packet, sid=0x%x, tid=0x%x\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_SEWHD+1; i++)
{
if (sid == g_sewHeadList[i].nodeId)
{
g_sewHeadList[i].exbSta.cancomm.exId.id = rxMsg.canRxhead.ExtId;
memcpy(g_sewHeadList[i].exbSta.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
g_sewHeadList[i].staFlag = 1;
break;
}
}
}
}
else if (cmd == BN_CMD_REGVAL) // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//printf("get color reg val packet, sid=%d, tid=%d\r\n", sid, tid);
if (tid == g_curBoardID)
{
for (i = 0; i < MAX_SUPPORT_SEWHD+1; i++)
{
if (sid == g_sewHeadList[i].nodeId)
{
memcpy(pkt.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN);
u32 highaddr, lowaddr;
highaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_HIGH;
lowaddr = pkt.cancomm.data.rdport.portaddr & PORT_ADDR_LOW;
if (highaddr == BOARD_VERSION)
{
if (g_sewHeadList[i].regVal.rdnewbverflag == 1) // <20>³<EFBFBD><C2B3><EFBFBD><EFBFBD>
{
g_sewHeadList[i].regVal.rdbverbitmap = 0;
g_sewHeadList[i].regVal.rdnewbverflag = 0; // <20><><EFBFBD><EFBFBD>
g_sewHeadList[i].verFlag = 0;
memset(g_sewHeadList[i].regVal.exbVer, 0, BOARD_VER_LEN*sizeof(u32));
}
if (lowaddr < BOARD_VER_LEN)
{
g_sewHeadList[i].regVal.exbVer[lowaddr] = pkt.cancomm.data.rdport.status;
g_sewHeadList[i].regVal.rdbverbitmap |= IDX_TO_BIT[lowaddr];
if (g_sewHeadList[i].regVal.rdbverbitmap == CMDSTA_BMP_FULL)
{
g_sewHeadList[i].verFlag = 1;
}
}
}
break;
}
}
}
}
else
{
printf("get other sew head data packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
#endif // (MAX_SUPPORT_SEWHD > 0)
else
{
printf("get other data packet, exid=0x%x\r\n", rxMsg.canRxhead.ExtId);
}
}
else
{
printf("other packet,RTR=%d,ID=%x,DLC=%d\r\n", rxMsg.canRxhead.RTR, rxMsg.canRxhead.ExtId, rxMsg.canRxhead.DLC);
}
}
else
{
// printf("no data");
break;
}
count++;
if (count > 10)
{
break;
}
}while(1);
}
void OutputsTask()
{
CanTxMsg txMsg;
int i, j;
CtrlBusPacket pkt;
//-------------------------------------------------------------------------
#if (MAX_SUPPORT_CORE > 0)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ڵ<EFBFBD><DAB5><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
for (i = 0; i < MAX_SUPPORT_CORE; i++)
{
if (g_curBoardIdx == i) // <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
{
if (g_extendCtrlList[i].refreshflag != 0)
{
if (g_extendCtrlList[i].ReSendStatus != NULL)
{
g_extendCtrlList[i].ReSendStatus(1);
}
g_extendCtrlList[i].refreshflag = 0;
g_extendCtrlList[i].stachangeflag = 1;
}
if (g_extendCtrlList[i].stachangeflag != 0)
{
txMsg.canTxhead.ExtId = g_extendCtrlList[i].staexid;
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
for (j = 0; j < CORE_CHG_BUF_LEN; j++)
{
pkt.cancomm.data.wrport.portaddr = j | g_wrstatoogle; // <20><>ַ
pkt.cancomm.data.wrport.wrdata = g_extendCtrlList[i].stabuff[j]; // <20><><EFBFBD><EFBFBD>
memcpy(txMsg.data, pkt.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
// printf("send sta change, toogle=0x%x, idx=%d, sta=0x%x\r\n", g_wrstatoogle, j, pkt.cancomm.data.wrport.wrdata);
}
g_extendCtrlList[i].stachangeflag = 0;
g_wrstatoogle += TOOGLE_ADD;
}
}
else // <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB7A2>
{
if (g_extendCtrlList[i].newcmdflag != 0)
{
txMsg.canTxhead.ExtId = g_extendCtrlList[i].cmdexid;
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
for (j = 0; j < CORE_CHG_BUF_LEN; j++)
{
pkt.cancomm.data.wrport.portaddr = j | g_wrcmdtoogle; // <20><>ַ
pkt.cancomm.data.wrport.wrdata = g_extendCtrlList[i].cmdbuff[j]; // <20><><EFBFBD><EFBFBD>
memcpy(txMsg.data, pkt.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
// printf("send cmd, toogle=0x%x, idx=%d, sta=0x%x\r\n", g_wrcmdtoogle, j, pkt.cancomm.data.wrport.wrdata);
}
g_extendCtrlList[i].newcmdflag = 0;
g_wrcmdtoogle += TOOGLE_ADD;
}
}
}
#endif
#if (MAX_SUPPORT_HEAD > 0)
for (i = 0; i < MAX_SUPPORT_HEAD+1; i++)
{
if (g_headList[i].cmdFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_EXCTRL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_headList[i].ctrlCmd.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
g_headList[i].cmdFlag = 0;
}
if (g_headList[i].refSta != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_EXSTA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_headList[i].refSta = 0;
}
if (g_headList[i].refVer != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(&g_headList[i].rdReg.cancomm.data.buff, 0, CAN_DATA_LEN);
g_headList[i].rdReg.cancomm.data.rdport.portaddr = BOARD_VERSION;
memcpy(txMsg.data, g_headList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>
g_headList[i].refVer = 0;
}
if (g_headList[i].traFlag != 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_TRAVERSE);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_headList[i].traCmd.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
g_headList[i].traFlag = 0;
}
if (g_headList[i].transFlag != 0) // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_TRANS_DATA);
ExboardDataTrans(txMsg.canTxhead.ExtId);
g_headList[i].transFlag = 0;
}
if (g_headList[i].exbupdateFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_headList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_headList[i].exbupdateFlag = 0;
}
if (g_headList[i].refNvPara != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_NVPARA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_headList[i].refNvPara = 0;
}
if (g_headList[i].refHeadPara != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_HEAD, g_headList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_headList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_headList[i].refHeadPara = 0;
}
}
#endif
#if (MAX_SUPPORT_COLOR > 0)
for (i = 0; i < MAX_SUPPORT_COLOR+1; i++)
{
if (g_colorList[i].cmdFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_EXCTRL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_colorList[i].ctrlCmd.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
g_colorList[i].cmdFlag = 0;
}
if (g_colorList[i].refSta != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_EXSTA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_colorList[i].refSta = 0;
}
if (g_colorList[i].refVer != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(&g_colorList[i].rdReg.cancomm.data.buff, 0, CAN_DATA_LEN);
g_colorList[i].rdReg.cancomm.data.rdport.portaddr = BOARD_VERSION;
memcpy(txMsg.data, g_colorList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>
g_colorList[i].refVer = 0;
}
if (g_colorList[i].transFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_TRANS_DATA);
ExboardDataTrans(txMsg.canTxhead.ExtId);
g_colorList[i].transFlag = 0;
}
if (g_colorList[i].exbupdateFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_colorList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_colorList[i].exbupdateFlag = 0;
}
if (g_colorList[i].refNvPara != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_COLOR, g_colorList[i].nodeId, g_curBoardID, BN_CMD_NVPARA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_colorList[i].refNvPara = 0;
}
}
#endif
#if (MAX_SUPPORT_EXTIO > 0)
for (i = 0; i < MAX_SUPPORT_EXTIO+1; i++)
{
if (g_extioList[i].cmdFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_EXTIO, g_extioList[i].nodeId, g_curBoardID, BN_CMD_EXCTRL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_extioList[i].ctrlCmd.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
g_extioList[i].cmdFlag = 0;
}
if (g_extioList[i].refSta != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_EXTIO, g_extioList[i].nodeId, g_curBoardID, BN_CMD_EXSTA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_extioList[i].refSta = 0;
}
if (g_extioList[i].refVer != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_EXTIO, g_extioList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(&g_extioList[i].rdReg.cancomm.data.buff, 0, CAN_DATA_LEN);
g_extioList[i].rdReg.cancomm.data.rdport.portaddr = BOARD_VERSION;
memcpy(txMsg.data, g_extioList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>
g_extioList[i].refVer = 0;
}
if (g_extioList[i].transFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_EXTIO, g_extioList[i].nodeId, g_curBoardID, BN_CMD_TRANS_DATA);
ExboardDataTrans(txMsg.canTxhead.ExtId);
g_extioList[i].transFlag = 0;
}
if (g_extioList[i].exbupdateFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_EXTIO, g_extioList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_extioList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_extioList[i].exbupdateFlag = 0;
}
}
#endif
#if (MAX_SUPPORT_SEWHD > 0)
for (i = 0; i < MAX_SUPPORT_SEWHD+1; i++)
{
if (g_sewHeadList[i].cmdFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_EXCTRL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_sewHeadList[i].ctrlCmd.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
g_sewHeadList[i].cmdFlag = 0;
}
if (g_sewHeadList[i].refSta != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_EXSTA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_sewHeadList[i].refSta = 0;
}
if (g_sewHeadList[i].refVer != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(&g_sewHeadList[i].rdReg.cancomm.data.buff, 0, CAN_DATA_LEN);
g_sewHeadList[i].rdReg.cancomm.data.rdport.portaddr = BOARD_VERSION;
memcpy(txMsg.data, g_sewHeadList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>
g_sewHeadList[i].refVer = 0;
}
if (g_sewHeadList[i].transFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_TRANS_DATA);
ExboardDataTrans(txMsg.canTxhead.ExtId);
g_sewHeadList[i].transFlag = 0;
}
if (g_sewHeadList[i].exbupdateFlag != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_REGVAL);
txMsg.canTxhead.RTR = CAN_RTR_DATA; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memcpy(txMsg.data, g_sewHeadList[i].rdReg.cancomm.data.buff, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_sewHeadList[i].exbupdateFlag = 0;
}
if (g_sewHeadList[i].refNvPara != 0)
{
txMsg.canTxhead.ExtId = MAKE_EXID(BN_PROTOCOL_SEWHD, g_sewHeadList[i].nodeId, g_curBoardID, BN_CMD_NVPARA);
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
g_sewHeadList[i].refNvPara = 0;
}
}
#endif
}
void ExtendBoardTask(void)
{
InputsTask();
OutputsTask();
}
//-------------------------------------------------------------------------
CoreControl * GetCoreFromList(u8 id)
{
#if (MAX_SUPPORT_CORE > 0)
if (id > 0 && id <= MAX_SUPPORT_CORE)
{
return &(g_extendCtrlList[id-1]);
}
else
#endif
{
return NULL;
}
}
HeadControl * GetHeadFromList(u8 id)
{
#if (MAX_SUPPORT_HEAD > 0)
if (id > 0 && id <= MAX_SUPPORT_HEAD+1)
{
return &(g_headList[id-1]);
}
else
#endif
{
return NULL;
}
}
ColorControl * GetColorFromList(u8 id)
{
#if (MAX_SUPPORT_COLOR > 0)
if (id > 0 && id <= MAX_SUPPORT_COLOR+1)
{
return &(g_colorList[id-1]);
}
else
#endif
{
return NULL;
}
}
ExtIOControl * GetExtIOFromList(u8 id)
{
#if (MAX_SUPPORT_EXTIO > 0)
if (id > 0 && id <= MAX_SUPPORT_EXTIO+1)
{
return &(g_extioList[id-1]);
}
else
#endif
{
return NULL;
}
}
int GetCurBoardID(void)
{
return g_curBoardID;
}
//------------------------------------------------------------------------
#if (MAX_SUPPORT_CORE > 0)
int IsNewControlCommand(void)
{
if (g_extendCtrlList[g_curBoardIdx].newcmdflag != 0)
{
printf("can data inter\r\n");
return TRUE;
}
return FALSE;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>״̬
void RequestExStatus(void)
{
CanTxMsg txMsg;
int i;
for (i = 0; i < MAX_SUPPORT_CORE; i++)
{
if (g_curBoardIdx != i) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
{
txMsg.canTxhead.ExtId = g_extendCtrlList[i].staexid;
txMsg.canTxhead.RTR = CAN_RTR_REMOTE; // Զ<><D4B6>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
memset(txMsg.data, 0, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg); // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>֡
}
}
}
#endif
//-------------------------------------------------------------------------
// <20><>ͷ<EFBFBD><CDB7>Э<EFBFBD><D0AD>,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ľڵ<C4BD>ID,ֻ<><D6BB><EFBFBD><EFBFBD>֪<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ͺͻ<CDBA>ͷ<EFBFBD>ż<EFBFBD><C5BC><EFBFBD>
// <20><>ɫ<EFBFBD><C9AB>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>֪<EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>
// IO<49><4F>չ<EFBFBD><D5B9>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>֪<EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>
void StartBoardUpdate(u8 protocol, u8 nodetype, u8 nodeid)
{
#if (MAX_SUPPORT_HEAD > 0)
if (protocol == BN_PROTOCOL_HEAD)
{
HeadControl * head = GetHeadFromList(1); // Ĭ<>Ϲ<CFB9><E3B2A5><EFBFBD><EFBFBD>
HeadControl * temp = NULL; // <20><>ʱ<EFBFBD>
if (nodeid != 0)
{
for(int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
temp = GetHeadFromList(i+1);
if (temp->nodeTye == nodetype)
{
if (nodeid <= 1)
{
head = temp;
break;
}
else
{
nodeid--;
}
}
}
}
head->rdReg.cancomm.data.rdport.portaddr = EXBOARD_UPDATE;
head->rdReg.cancomm.data.rdport.status = nodetype;
head->exbupdateFlag = 1;
}
else
#endif
#if (MAX_SUPPORT_COLOR > 0)
if (protocol == BN_PROTOCOL_COLOR)
{
ColorControl * color = GetColorFromList(nodeid+1);
color->exbupdateFlag = 1;
}
else
#endif
#if (MAX_SUPPORT_EXTIO > 0)
if (protocol == BN_PROTOCOL_EXTIO)
{
ExtIOControl * extio = GetExtIOFromList(nodeid+1);
extio->exbupdateFlag = 1;
}
else
#endif
{
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
void SetBoardNvPara(int protocolType, int nodetype, int nodeId, u8 parablockID, u8 paraID, s32 paraVal)
{
#if (MAX_SUPPORT_HEAD > 0)
if (protocolType == BN_PROTOCOL_HEAD)
{
SetHeadNvParaCmd(nodetype, nodeId, parablockID, paraID, paraVal);
}
else
#endif
#if (MAX_SUPPORT_COLOR > 0)
if (protocolType == BN_PROTOCOL_COLOR)
{
if (nodeId != 0) // 20220628 <20><>֧<EFBFBD>ֹ㲥<D6B9><E3B2A5><EFBFBD><EFBFBD>,<2C><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
SetColorNvParaCmd(nodeId, parablockID, paraID, paraVal);
}
}
else
#endif
{
}
}
//-------------------------------------------------------------------------
#if (MAX_SUPPORT_HEAD > 0)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void EnterTraverse(void)
{
memset(&g_headList[0].traCmd.cancomm.data, 0, CAN_DATA_LEN);
g_headList[0].traCmd.cancomm.data.traverse.tracmd = TRA_CMD_ENTER_TRA;
g_headList[0].traFlag = 1;
OutputsTask();
}
/* function:<3A><><EFBFBD>߱<EFBFBD><DFB1><EFBFBD>
* return: 0:
* -1: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int TraverseSingleNode(u8 traNodeType, u8 traNodeId)
{
printf("traverse nodeid=%d, nodetype=%d\r\n", traNodeId, traNodeType);
memset(&g_headList[0].traCmd.cancomm.data, 0, CAN_DATA_LEN);
g_headList[0].traCmd.cancomm.data.traverse.tracmd = TRA_CMD_NODE_TRA_BEG;
g_headList[0].traCmd.cancomm.data.traverse.nodetype = traNodeType;
g_headList[0].traCmd.cancomm.data.traverse.nodeid = traNodeId;
g_headList[0].traFlag = 1;
OutputsTask();
return 0;
}
/* function:<3A><>ǰ<EFBFBD>ڵ<EFBFBD><DAB5>ѱ<EFBFBD><D1B1><EFBFBD>,<2C><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
* return: 0:
*/
int CurNodeTraverseAlready(u32 nodeid)
{
printf("nodeid %d already set\r\n", nodeid);
for(int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
if(g_headList[i].nodeId == nodeid)
{
memset(&g_headList[i].traCmd.cancomm.data, 0, CAN_DATA_LEN);
g_headList[i].traCmd.cancomm.data.traverse.tracmd = TRA_CMD_NODE_TRA_END;
g_headList[i].traCmd.cancomm.data.traverse.nodeid = nodeid;
g_headList[i].traFlag = 1;
break;
}
}
OutputsTask();
return 0;
}
void ExitTravers() // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
{
memset(&g_headList[0].traCmd.cancomm.data, 0, CAN_DATA_LEN);
g_headList[0].traCmd.cancomm.data.traverse.tracmd = TRA_CMD_EXIT_TRA;
g_headList[0].traFlag = 1;
OutputsTask();
printf("exit traverse\r\n");
}
//---------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void InquireBusSta(int idx)
{
memset(&g_headList[idx].traCmd.cancomm.data, 0, CAN_DATA_LEN);
g_headList[idx].traCmd.cancomm.data.traverse.tracmd = TRA_CMD_ASK_TRA_STA;
g_headList[idx].traFlag = 1;
OutputsTask();
printf("inquire bus sta, idx=%d\r\n", idx);
}
u32 GetHeadStatus(int idx)
{
u32 sta;
HeadCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_HEAD)
{
pSta = (HeadCommand *)( &(g_headList[idx].exbSta.cancomm.data.buff));
sta = pSta->headSta.staBits;
}
else
{
sta = 0;
}
return sta;
}
void CleanHeadStatus(int idx)
{
HeadCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_HEAD)
{
pSta = (HeadCommand *)( &(g_headList[idx].exbSta.cancomm.data.buff));
pSta->headSta.staBits = 0;
}
}
void RequestHeadsStatus(void)
{
RequestHeadStatus(&(g_headList[0])); // <20><><EFBFBD>͹㲥<CDB9><E3B2A5><EFBFBD><EFBFBD>
OutputsTask();
}
void RequestHeadsVersion(void)
{
RequestHeadVersion(&(g_headList[0])); // <20>㲥ѯ<E3B2A5><D1AF>
for(int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
g_headList[i].regVal.rdnewbverflag = 1;
}
}
void RequestAHeadNvPara(int idx)
{
if (idx <= 0)
{
return;
}
RequestHeadNvPara(&(g_headList[idx]));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
void SendHeadAngCmd(int idx, u8 para1, u16 para2, u8 para3)
{
HeadCommand ncmd;
memset(&ncmd, 0, sizeof(HeadCommand));
ncmd.setmsang.cmd = CTRL_CMD_HEAD_MSANG;
ncmd.setmsang.validFlag = para1;
ncmd.setmsang.msang = para2;
ncmd.setmsang.nodetype = para3;
SendHeadCommand(&g_headList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>û<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
void SetHeadNvParaCmd(int nodetype, int idx, u8 parablockid, u8 paraid, s32 paraval)
{
if (idx < 0 || idx > MAX_SUPPORT_HEAD)
{
return;
}
HeadCommand ncmd;
memset(&ncmd, 0, sizeof(HeadCommand));
if (nodetype == FLAT_EMB_HEAD)
{
ncmd.headNvPara.cmd = CTRL_CMD_HEAD_NVPARA;
}
else if (nodetype == CHENILLE_HEAD)
{
ncmd.headNvPara.cmd = CTRL_CMD_CHENILLE_NVPARA;
}
else if (nodetype == COIL_HEAD)
{
ncmd.headNvPara.cmd = CTRL_CMD_COIL_NVPARA;
}
ncmd.headNvPara.parablockID = parablockid;
ncmd.headNvPara.paraID = paraid;
ncmd.headNvPara.paraval = paraval;
SendHeadCommand(&g_headList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
u16 GetHeadPotValue(int idx)
{
u32 sta;
HeadCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_HEAD)
{
pSta = (HeadCommand *)( &(g_headList[idx].exbSta.cancomm.data.buff));
sta = pSta->headSta.potValue;
}
else
{
sta = 0;
}
return sta;
}
int GetHeadCurrentNeele(int idx)
{
u32 sta;
HeadCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_HEAD)
{
pSta = (HeadCommand *)( &(g_headList[idx].exbSta.cancomm.data.buff));
sta = pSta->headSta.setedNP;
}
else
{
sta = 0;
}
return sta;
}
#endif
//-------------------------------------------------------------------------
#if (MAX_SUPPORT_COLOR > 0)
void RequestColorsVersion(void)
{
RequestColorVersion(&(g_colorList[0]));
for(int i = 1; i < MAX_SUPPORT_COLOR+1; i++)
{
g_colorList[i].regVal.rdnewbverflag = 1;
}
}
void RequestAColorNvPara(int idx)
{
if (idx <= 0)
{
return;
}
RequestColorNvPara(&(g_colorList[idx]));
}
void SendColorCtrlCmd(int idx, u8 subcmd, u8 para1, u8 para2)
{
ColorCommand ncmd;
memset(&ncmd, 0, sizeof(ColorCommand));
ncmd.colorCtrl.cmd = CTRL_CMD_COLOR_CTRL;
ncmd.colorCtrl.subcmd = subcmd;
ncmd.colorCtrl.para[0] = para1;
ncmd.colorCtrl.para[1] = para2;
SendColorCommand(&g_colorList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>û<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
void SetColorNvParaCmd(int idx, u8 parablockid, u8 paraid, s32 paraval)
{
if (idx < 0 || idx > MAX_SUPPORT_COLOR)
{
return;
}
ColorCommand ncmd;
memset(&ncmd, 0, sizeof(ColorCommand));
ncmd.colorNvPara.cmd = CTRL_CMD_COLOR_NVPARA;
ncmd.colorNvPara.parablockID = parablockid;
ncmd.colorNvPara.paraID = paraid;
ncmd.colorNvPara.paraval = paraval;
SendColorCommand(&g_colorList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void SendColorParaCmd(int idx, u8 para1)
{
ColorCommand ncmd;
memset(&ncmd, 0, sizeof(ColorCommand));
ncmd.colorPara.cmd = CTRL_CMD_COLOR_PARA;
ncmd.colorPara.needleNums = para1;
SendColorCommand(&g_colorList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void CleanColorSta(int idx)
{
memset(&(g_colorList[idx].exbSta.cancomm.data.buff), 0, CAN_DATA_LEN);
}
u16 GetColorStatus(int idx)
{
u16 sta;
ColorCommand * pSta;
pSta = (ColorCommand *)( &(g_colorList[idx].exbSta.cancomm.data.buff));
sta = pSta->colorSta.staBits;
return sta;
}
u16 GetColorPotValue(int idx)
{
u16 sta;
ColorCommand * pSta;
pSta = (ColorCommand *)( &(g_colorList[idx].exbSta.cancomm.data.buff));
sta = pSta->colorSta.potValue;
return sta;
}
int GetColorCurrentNeele(int idx)
{
int sta;
ColorCommand * pSta;
pSta = (ColorCommand *)( &(g_colorList[idx].exbSta.cancomm.data.buff));
sta = (int)pSta->colorSta.curNeedle;
return sta;
}
void RequestColorsStatus(void)
{
RequestColorStatus(&(g_colorList[0])); // <20><><EFBFBD>͹㲥<CDB9><E3B2A5><EFBFBD><EFBFBD>
OutputsTask();
}
#endif
#if (MAX_SUPPORT_EXTIO > 0)
u16 GetExtIOStatus(int idx)
{
u16 sta;
ExtIOCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_EXTIO)
{
pSta = (ExtIOCommand *)( &(g_extioList[idx].exbSta.cancomm.data.buff));
sta = pSta->extIOSta.inputSta;
}
else
{
sta = 0;
}
return sta;
}
void CleanExtIOStatus(int idx)
{
ExtIOCommand * pSta;
if (idx > 0 && idx <= MAX_SUPPORT_EXTIO)
{
pSta = (ExtIOCommand *)( &(g_extioList[idx].exbSta.cancomm.data.buff));
pSta->extIOSta.inputSta = 0;
}
}
void RequestExtIOsStatus(void)
{
RequestExtIOStatus(&(g_extioList[0])); // <20><><EFBFBD>͹㲥<CDB9><E3B2A5><EFBFBD><EFBFBD>
OutputsTask();
}
void RequestExtIOsVersion(void)
{
RequestExtIOVersion(&(g_extioList[0])); // <20>㲥ѯ<E3B2A5><D1AF>
for(int i = 1; i < MAX_SUPPORT_EXTIO+1; i++)
{
g_extioList[i].regVal.rdnewbverflag = 1;
}
}
void SetExtOutputOn(int idx, u16 bit)
{
ExtIOCommand ncmd;
memset(&ncmd, 0, sizeof(ExtIOCommand));
ncmd.extIOCtrl.cmd = CTRL_CMD_EXTIO_CTRL;
ncmd.extIOCtrl.subcmd = CTRL_SUBCMD_OUT_ON;
ncmd.extIOCtrl.outctrl = bit;
SendExtIOCommand(&g_extioList[idx], &ncmd);
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void SetExtOutputOff(int idx, u16 bit)
{
ExtIOCommand ncmd;
memset(&ncmd, 0, sizeof(ExtIOCommand));
ncmd.extIOCtrl.cmd = CTRL_CMD_EXTIO_CTRL;
ncmd.extIOCtrl.subcmd = CTRL_SUBCMD_OUT_OFF;
ncmd.extIOCtrl.outctrl = bit;
SendExtIOCommand(&g_extioList[idx], &ncmd);
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
#endif
#if (MAX_SUPPORT_SEWHD > 0)
void RequestSewHeadsStatus(void)
{
RequestSewHeadStatus(&(g_sewHeadList[0])); // <20><><EFBFBD>͹㲥<CDB9><E3B2A5><EFBFBD><EFBFBD>
OutputsTask();
}
void RequestSewHeadsVersion(void)
{
RequestSewHeadVersion(&(g_sewHeadList[0]));
for(int i = 1; i < MAX_SUPPORT_SEWHD+1; i++)
{
g_sewHeadList[i].regVal.rdnewbverflag = 1;
}
}
void CleanSewHeadSta(int idx)
{
memset(&(g_sewHeadList[idx].exbSta.cancomm.data.buff), 0, CAN_DATA_LEN);
}
u16 GetSewHeadStatus(int idx)
{
u16 sta;
SewHeadCommand * pSta;
pSta = (SewHeadCommand *)( &(g_sewHeadList[idx].exbSta.cancomm.data.buff));
sta = pSta->headSta.staBits;
return sta;
}
void SendSewHeadCtrlCmd(int idx, u8 subcmd, u8 para1, u8 para2)
{
SewHeadCommand ncmd;
memset(&ncmd, 0, sizeof(SewHeadCommand));
ncmd.headCtrl.cmd = CTRL_CMD_SEW_HEAD_CTRL;
ncmd.headCtrl.subcmd = subcmd;
ncmd.headCtrl.para[0] = para1;
ncmd.headCtrl.para[1] = para2;
SendSewHeadCommand(&g_sewHeadList[idx], &ncmd); // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
OutputsTask(); // ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
#endif
#if (RD_HEAD_PARA_NUM > 0)
/*
* 0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
* -1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* -2:CRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* -3:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int ReceiveBoardNvParaProc(CanRxMsg rxMsg, int id, u8 nodetype)
{
if (id < 1 || id > RD_HEAD_PARA_NUM)
{
return -3;
}
BoardFileCanCtrl * rxbuf = (BoardFileCanCtrl*)(&rxMsg.data);
int rslt = -1;
if ( rxbuf->head.sync[0] == CDP_SYNC[0] &&
rxbuf->head.sync[1] == CDP_SYNC[1] &&
rxbuf->head.sync[2] == CDP_SYNC[2] &&
1 ) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ݰ<EFBFBD>ͷ
{
if ((nodetype == FLAT_EMB_HEAD && rxbuf->head.pktId == 0) || // ƽ<><C6BD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(nodetype == CHENILLE_HEAD && rxbuf->head.pktId == 1) || // ë<><C3AB><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(nodetype == COIL_HEAD && rxbuf->head.pktId == 2) || // <20><><EFBFBD>ƻ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(nodetype == 0 && rxbuf->head.pktId == 3) || // ë<><C3AB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0)
{
g_receiveEn[id-1] = 0x5A;
g_receivenum[id-1] = 0;
g_framenum[id-1] = rxbuf->head.fnum;
g_datacrc[id-1] = rxbuf->head.crc;
memset(&g_exbNvPara[id-1][0], 0, BOARD_PARA_SIZE);
}
}
else
{
if (g_receiveEn[id-1] == 0x5A)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&g_exbNvPara[id-1][g_receivenum[id-1]*8], &rxbuf->data, CAN_DATA_LEN);
g_receivenum[id-1]++;
if (g_receivenum[id-1] == g_framenum[id-1]) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_receiveEn[id-1] = 0;
u16 crc = CalcCrc16((u8*)(&g_exbNvPara[id-1][0]), BOARD_PARA_SIZE);
if (crc != g_datacrc[id-1])
{
rslt = -2;
}
else
{
rslt = 0;
}
}
}
}
return rslt;
}
u8* GetBoardNvPara(int id)
{
if (id < 1)
{
return NULL;
}
return (u8*)(&g_exbNvPara[id-1][0]);
}
#endif
void ParaDataFromOperToCan(u8 protocol, OperPacket * pPkt, BoardFilePacketCtrl * pBoard)
{
u32 exid = 0;
#if (MAX_SUPPORT_HEAD > 0 || MAX_SUPPORT_COLOR > 0)
int i = 0;
u8 nodeId = 0; // 0Ϊ<30>
#endif
memset(pBoard, 0, sizeof(BoardFilePacketCtrl));
#if (MAX_SUPPORT_HEAD > 0)
if (protocol == BN_PROTOCOL_HEAD)
{ // <20><>ͷ<EFBFBD><CDB7>Э<EFBFBD><D0AD><><D6BB><EFBFBD><EFBFBD>֪<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD>ͷ<EFBFBD>ż<EFBFBD><C5BC><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ľڵ<C4BD>ID
if (pPkt->boardPara.nodeId != 0)
{
int hdnm = pPkt->boardPara.nodeId; // <20><>Ӧ<EFBFBD><D3A6>ͷ<EFBFBD><CDB7>
for (i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
if (g_headList[i].nodeTye == pPkt->boardPara.nodeType)
{
if (hdnm <= 1)
{
nodeId = g_headList[i].nodeId;
break;
}
else
{
hdnm--;
}
}
}
}
if (pPkt->boardPara.nodeType == FLAT_EMB_HEAD)
{
pBoard->pktHead.head.pktId = 0; // ƽ<><C6BD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if (pPkt->boardPara.nodeType == CHENILLE_HEAD)
{
pBoard->pktHead.head.pktId = 1; // ë<><C3AB><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if (pPkt->boardPara.nodeType == COIL_HEAD)
{
pBoard->pktHead.head.pktId = 2; // <20><><EFBFBD>ƻ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
printf("set head para, nodeType unknown\r\n"); // 20230807<30><37><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʹ<EFBFBD><CDB4><EFBFBD>
return;
}
}
else
#endif
#if (MAX_SUPPORT_COLOR > 0)
if (protocol == BN_PROTOCOL_COLOR)
{
u8 boardnum = pPkt->boardPara.nodeId;
if (boardnum == 0 || boardnum > MAX_SUPPORT_COLOR)
{
return; // 20220628 <20><><EFBFBD><EFBFBD>֧<EFBFBD>ֹ㲥<D6B9><E3B2A5><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>
}
nodeId = g_colorList[boardnum].nodeId;
if (boardnum == 2)
{
pBoard->pktHead.head.pktId = 3; // ë<><C3AB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else
#endif
{
printf("not support protocol\r\n");
return;
}
memcpy(pBoard->pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoard->pktHead.head.fnum = BOARD_PARA_SIZE/CAN_DATA_LEN;
for (int j = 0; j < pBoard->pktHead.head.fnum; j++)
{
memcpy(&pBoard->pktData[j].data, &pPkt->boardPara.exData[j*CAN_DATA_LEN], CAN_DATA_LEN);
}
pBoard->pktHead.head.crc = CalcCrc16((u8*)pBoard->pktData, BOARD_PARA_SIZE);
#if (MAX_SUPPORT_HEAD > 0)
if (protocol == BN_PROTOCOL_HEAD)
{
if (i <= MAX_SUPPORT_HEAD) // <20>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD>Ľڵ<C4BD><DAB5><EFBFBD><EFBFBD>
{
exid = MAKE_EXID(BN_PROTOCOL_HEAD, nodeId, g_curBoardID, BN_CMD_NVPARA);
}
}
else
#endif
#if (MAX_SUPPORT_COLOR > 0)
if (protocol == BN_PROTOCOL_COLOR)
{
exid = MAKE_EXID(BN_PROTOCOL_COLOR, nodeId, g_curBoardID, BN_CMD_NVPARA);
}
else
#endif
{
}
if (exid != 0)
{
SendPacketDataWithCanFrame(exid, pBoard);
}
}
// <20><>CAN<41><4E><EFBFBD><EFBFBD>֡<EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
void SendPacketDataWithCanFrame(u32 exid, BoardFilePacketCtrl * pBoard)
{
CanTxMsg txMsg;
txMsg.canTxhead.ExtId = exid;
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
for (int idx = 0; idx < pBoard->pktHead.head.fnum+1; idx++)
{
memcpy(&txMsg.data, ((u8*)&pBoard->pktHead)+idx*CAN_DATA_LEN, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
DelayMs(1);
}
}
s32 GetHeadPara(void)
{
return headparaval;
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------