2248 lines
72 KiB
C
2248 lines
72 KiB
C
|
|
|
|||
|
|
#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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------
|