通信bug修复

This commit is contained in:
lh
2026-08-21 17:22:07 +08:00
parent 18003863ae
commit e0b03e011f
5 changed files with 280 additions and 211 deletions
+254 -190
View File
@@ -12,32 +12,12 @@
STRU_AREA_WITH_ARB_CFG_ALL_T g_area_with_arb_cfg = {0}; STRU_AREA_WITH_ARB_CFG_ALL_T g_area_with_arb_cfg = {0};
/*===========↑↑↑↑↑全局变量声明&定义↑↑↑↑↑=============*/ /*===========↑↑↑↑↑全局变量声明&定义↑↑↑↑↑=============*/
/*===========↓↓↓↓↓宏定义↓↓↓↓↓=============*/
/**宏函数,支持不同帧结构体计算双CRC */
#define DOUBLE_CRC_GET(mypack, peerpack, tmp_buf, tmp_len) \
do { \
if (1 == AREA_BASIC_CFG_PTR->Cpuid) { \
(mypack).CRC1 = CM_Crc32_1(&(tmp_buf)[1], (tmp_len) - 9); \
} else { \
(mypack).CRC2 = CM_Crc32_2(&(tmp_buf)[1], (tmp_len) - 9); \
} \
\
tmp_len = Area_2oo2_Currency_NoSplit( \
&(mypack), sizeof(mypack), \
&(peerpack), sizeof(peerpack)); \
\
if (1 == AREA_BASIC_CFG_PTR->Cpuid) { \
(mypack).CRC2 = (peerpack).CRC2; \
} else { \
(mypack).CRC1 = (peerpack).CRC1; \
} \
} while (0)
/*===========↑↑↑↑↑宏定义↑↑↑↑↑=============*/
/*===========↓↓↓↓↓静态函数声明↓↓↓↓↓=============*/ /*===========↓↓↓↓↓静态函数声明↓↓↓↓↓=============*/
/**
* @brief 根据已打包的线路报文计算并同步双CRC
*/
static void s_Area_DoubleCRC_Get(IN const CM_UINT8* buf, IN CM_UINT32 len,
OUT CM_UINT32* crc1, OUT CM_UINT32* crc2);
/** /**
* @brief 区域工作线程(带仲裁) * @brief 区域工作线程(带仲裁)
*/ */
@@ -55,13 +35,15 @@ static void s_Area_State_Req_Send_Process(void);
*/ */
static void s_Area_State_Ack_Process(void); static void s_Area_State_Ack_Process(void);
/** /**
* @brief 区域状态请求接收,发送ACK * @brief 处理校验通过的状态请求
*/ */
static void s_Area_State_Ack_Send_Process(void); static void s_Area_State_Req_Recv_Process(IN const STRU_AREA_WITH_ARB_STATE_PACK_T* state_pack,
INOUT CM_BOOL ack_flags[5]);
/** /**
* @brief 区域状态的应答ACK接收处理 * @brief 处理校验通过的状态ACK帧
*/ */
static void s_Area_State_Ack_Recv_Process(void); static void s_Area_State_Ack_Recv_Process(IN const STRU_AREA_WITH_ARB_STATE_PACK_T* state_pack,
IN CM_UINT32 local_sn, IN CM_UINT8 time_sync_flag);
/** /**
* @brief 仲裁处理 * @brief 仲裁处理
*/ */
@@ -101,7 +83,7 @@ static void s_Area_GetCommStatus_byID(CM_UINT8 ID, CM_UINT32* SN, CM_UINT8* rcv_
/** /**
* @brief 对接收到的区域状态请求进行2取同步 * @brief 对接收到的区域状态请求进行2取同步
*/ */
static void s_Area_2oo2Sync_AfterStateRecv(); static void s_Area_2oo2Sync_AfterStateRecv(CM_BOOL ack_flags[5]);
/** /**
* @brief 2取同步后,判断本周期是否收到请求,并进行回复组包发送 * @brief 2取同步后,判断本周期是否收到请求,并进行回复组包发送
* @param ack_partner 是否需要向对系回复ACK * @param ack_partner 是否需要向对系回复ACK
@@ -117,11 +99,55 @@ static void s_Area_2oo2Sync_AfterArbRecv();
/*===========↓↓↓↓↓函数定义↓↓↓↓↓↓=============*/ /*===========↓↓↓↓↓函数定义↓↓↓↓↓↓=============*/
/**
* @brief 根据已打包的线路报文计算并同步双CRC
*/
static void s_Area_DoubleCRC_Get(IN const CM_UINT8* buf, IN CM_UINT32 len,
OUT CM_UINT32* crc1, OUT CM_UINT32* crc2)
{
CM_UINT32 local_crc[2] = {0u, 0u};
CM_UINT32 peer_crc[2] = {0u, 0u};
CM_INT32 rcv_len = 0;
if((NULL == buf) || (NULL == crc1) || (NULL == crc2) || (len < 9u))
{
CM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
return;
}
if(1u == AREA_BASIC_CFG_PTR->Cpuid)
{
local_crc[0] = CM_Crc32_1(&buf[1], len - 9u);
}
else
{
local_crc[1] = CM_Crc32_2(&buf[1], len - 9u);
}
rcv_len = Area_2oo2_Currency_NoSplit((const CM_UINT8*)local_crc,
sizeof(local_crc), (CM_UINT8*)peer_crc, sizeof(peer_crc));
CM_ASSERT(rcv_len == sizeof(local_crc), NET_MODE,
DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
if(1u == AREA_BASIC_CFG_PTR->Cpuid)
{
local_crc[1] = peer_crc[1];
}
else
{
local_crc[0] = peer_crc[0];
}
*crc1 = local_crc[0];
*crc2 = local_crc[1];
}
/** /**
* 区域初始化,包含第三方仲裁的初始化 * 区域初始化,包含第三方仲裁的初始化
*/ */
void Area_With_Arb_Init(void) void Area_With_Arb_Init(void)
{ {
/**日志队列初始化 */
Area_LogMQ_Init();
AREA_BASIC_CFG_PTR->BoardID = g_PFM_Cfg.BOARD_ID;/**< 板卡ID 插箱id */ AREA_BASIC_CFG_PTR->BoardID = g_PFM_Cfg.BOARD_ID;/**< 板卡ID 插箱id */
AREA_BASIC_CFG_PTR->Cpuid = g_PFM_Cfg.CPU_ID;/**< cpu id */ AREA_BASIC_CFG_PTR->Cpuid = g_PFM_Cfg.CPU_ID;/**< cpu id */
AREA_BASIC_CFG_PTR->OutnetID = g_PFM_Cfg.BOARD_ID;/**< 外网ID */ AREA_BASIC_CFG_PTR->OutnetID = g_PFM_Cfg.BOARD_ID;/**< 外网ID */
@@ -263,12 +289,12 @@ static void s_Area_State_Multi_Process(void)
*/ */
static void s_Area_State_Req_Send_Process(void) static void s_Area_State_Req_Send_Process(void)
{ {
STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0}, peer_pack = {0}; STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0};
CM_INT32 tmp_len = 0; CM_INT32 tmp_len = 0;
ENUM_CM_RETURN send_rt = ENUM_CM_FALSE; ENUM_CM_RETURN send_rt = ENUM_CM_FALSE;
CM_UINT8 tmp_buf[1400] = {0u}; CM_UINT8 tmp_buf[1400] = {0u};
/**发送帧初始化 */ /**发送帧初始化 */
state_pack.Len = AREA_ARB_STATE_PACK_REAL_LEN - 1; state_pack.Len = AREA_ARB_STATE_PACK_LEN - 1u;
state_pack.MsgType = ENUM_AREA_MSG_STATE_REQ; state_pack.MsgType = ENUM_AREA_MSG_STATE_REQ;
state_pack.SN = DFM_GetBirthCount(); state_pack.SN = DFM_GetBirthCount();
state_pack.TimeSyncFlag = 1u; /**请求中的该字段不使用 */ state_pack.TimeSyncFlag = 1u; /**请求中的该字段不使用 */
@@ -286,11 +312,12 @@ static void s_Area_State_Req_Send_Process(void)
/**发送至本地另一系 */ /**发送至本地另一系 */
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_BoardID;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
if(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_BoardID, &state_pack, sizeof(state_pack)); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -303,11 +330,12 @@ static void s_Area_State_Req_Send_Process(void)
/**发送至另一地的A系 */ /**发送至另一地的A系 */
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
if(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, &state_pack, sizeof(state_pack)); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -320,11 +348,12 @@ static void s_Area_State_Req_Send_Process(void)
/**发送至另一地的B系 */ /**发送至另一地的B系 */
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
if(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, &state_pack, sizeof(state_pack)); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -341,11 +370,12 @@ static void s_Area_State_Req_Send_Process(void)
/**发送至另一地的A系 */ /**发送至另一地的A系 */
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
if(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, &state_pack, sizeof(state_pack)); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -358,11 +388,12 @@ static void s_Area_State_Req_Send_Process(void)
/**发送至另一地的B系 */ /**发送至另一地的B系 */
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
if(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, &state_pack, sizeof(state_pack)); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State request send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -382,117 +413,117 @@ static void s_Area_State_Req_Send_Process(void)
*/ */
static void s_Area_State_Ack_Process(void) static void s_Area_State_Ack_Process(void)
{ {
STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0};
CM_UINT8 wire_buf[AREA_ARB_STATE_PACK_LEN] = {0};
CM_INT32 rcv_len = 0;
CM_UINT32 crc1 = 0u, crc2 = 0u;
CM_UINT32 timeStamp = 0u, timeNow = 0u;
CM_UINT32 start_tick = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION); CM_UINT32 start_tick = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION);
CM_UINT32 used_time = 0u; CM_UINT32 used_time = 0u;
CM_UINT32 localsn = AREA_COMM_STATUS_PTR->LocalSN;
CM_UINT8 srcID = 0u;
CM_UINT8 partner_id = AREA_BASIC_CFG_PTR->Partner_BoardID;
CM_UINT8 area_a_id = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID;
CM_UINT8 area_b_id = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
CM_UINT8 timeSyncFlag = AREA_FLAGS_CTRL_PTR->Time_Sync_Flag;
CM_BOOL ack_flags[5] = {CM_FALSE, CM_FALSE, CM_FALSE, CM_FALSE, CM_FALSE};
/**持续30ms */ /**持续30ms */
do do
{ {
/**接收请求进行回复发送 */ /**REQ与ACK共用一个FIFO,每条报文只读取一次并按类型分发。 */
s_Area_State_Ack_Send_Process(); do
/**接收回复 */ {
s_Area_State_Ack_Recv_Process(); rcv_len = Area_State_Recv(wire_buf, sizeof(wire_buf), &timeStamp);
timeNow = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION);
if((AREA_ARB_STATE_PACK_LEN == rcv_len) &&
((timeNow - timeStamp) < g_PFM_Cfg.CYC_TIME))
{
Area_Arb_State_UnPack(&state_pack, wire_buf, (CM_UINT32)rcv_len);
crc1 = CM_Crc32_1(&wire_buf[1], (CM_UINT32)rcv_len - 9u);
crc2 = CM_Crc32_2(&wire_buf[1], (CM_UINT32)rcv_len - 9u);
srcID = state_pack.SrcID;
if((crc1 == state_pack.CRC1) && (crc2 == state_pack.CRC2) &&
((AREA_ARB_STATE_PACK_LEN - 1u) == state_pack.Len) &&
(state_pack.DstID == AREA_BASIC_CFG_PTR->BoardID) &&
(srcID >= MSCP_AREA_A_BOARD_ID_A) &&
(srcID <= MSCP_AREA_B_BOARD_ID_B))
{
if(ENUM_AREA_MSG_STATE_REQ == state_pack.MsgType)
{
s_Area_State_Req_Recv_Process(&state_pack, ack_flags);
}
else if(ENUM_AREA_MSG_STATE_ACK == state_pack.MsgType)
{
s_Area_State_Ack_Recv_Process(&state_pack, localsn, timeSyncFlag);
}
else
{
/**消息类型或序列号不符合当前周期,不更新状态。 */
}
}
}
} while(0 < rcv_len);
/**同步接收状态和本周期ACK目标,再统一回复。 */
s_Area_2oo2Sync_AfterStateRecv(ack_flags);
if((partner_id <= MSCP_AREA_B_BOARD_ID_B) &&
(area_a_id <= MSCP_AREA_B_BOARD_ID_B) &&
(area_b_id <= MSCP_AREA_B_BOARD_ID_B))
{
s_Area_SendACK_After2oo2(ack_flags[partner_id], ack_flags[area_a_id], ack_flags[area_b_id]);
}
CM_Memset(ack_flags, 0, sizeof(ack_flags), sizeof(ack_flags));
CM_Sleep(2u); CM_Sleep(2u);
used_time = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION) - start_tick; used_time = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION) - start_tick;
} while(used_time < 30u); } while(used_time < 30u);
}
} static void s_Area_State_Req_Recv_Process(IN const STRU_AREA_WITH_ARB_STATE_PACK_T* state_pack,
/** INOUT CM_BOOL ack_flags[5])
* @brief 区域状态的请求接收,发送ACK
*/
static void s_Area_State_Ack_Send_Process(void)
{ {
STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0};
CM_UINT8 tmp_buf[1400] = {0};
CM_INT32 rcv_len = 0u;
CM_UINT32 crc1 = 0u, crc2 = 0u;
CM_UINT32 timeStamp = 0u, timeNow = 0u;
CM_UINT8 srcID = 0u, dstID = 0u;
CM_UINT32 last_sn = 0u; CM_UINT32 last_sn = 0u;
/**记录是否需要向某一系发送ACK */
CM_BOOL ack_flags[5] = {CM_FALSE,CM_FALSE,CM_FALSE,CM_FALSE,CM_FALSE}; if((NULL == state_pack) || (NULL == ack_flags))
CM_UINT8 partner_id = AREA_BASIC_CFG_PTR->Partner_BoardID;
CM_UINT8 area_a_id = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID;
CM_UINT8 area_b_id = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
/**接收请求 */
do
{ {
rcv_len = Area_State_Recv(&state_pack, sizeof(state_pack), &timeStamp); return;
timeNow = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION); }
if(AREA_ARB_STATE_PACK_REAL_LEN == rcv_len &&
((timeNow - timeStamp) < g_PFM_Cfg.CYC_TIME)) s_Area_GetCommStatus_byID(state_pack->SrcID, &last_sn, NULL);
{ if(state_pack->SN > last_sn)
/**接收到长度合法,并且接收时间合法 */ {
Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); ack_flags[state_pack->SrcID] = CM_TRUE;
crc1 = CM_Crc32_1(&tmp_buf[1], rcv_len - 9); s_Area_SetCommStatus_byID(state_pack->SrcID, state_pack->SN, CM_TRUE);
crc2 = CM_Crc32_2(&tmp_buf[1], rcv_len - 9); AreaArb_SetState_byID(state_pack->SrcID, state_pack->StateArea);
srcID = state_pack.SrcID; AreaArb_Set2xState_byID(state_pack->SrcID, state_pack->State2x);
dstID = state_pack.DstID; AREA_LOG_MSG("AREA_ARB:State request received, SrcID:%d SN:%u State:%d 2x2:%d\n",
s_Area_GetCommStatus_byID(srcID, &last_sn, NULL); state_pack->SrcID, state_pack->SN, state_pack->StateArea, state_pack->State2x);
if(crc1 == state_pack.CRC1 && crc2 == state_pack.CRC2 }
&& dstID == AREA_BASIC_CFG_PTR->BoardID &&
ENUM_AREA_MSG_STATE_REQ == state_pack.MsgType &&
state_pack.SN > last_sn)
{
/**CRC与目的ID校验通过,并且SN最新*/
ack_flags[srcID] = CM_TRUE;
s_Area_SetCommStatus_byID(srcID, state_pack.SN, CM_TRUE);
AreaArb_SetState_byID(srcID, state_pack.StateArea);
AreaArb_Set2xState_byID(srcID, state_pack.State2x);
AREA_LOG_MSG("AREA_ARB:State request received, SrcID:%d SN:%u State:%d 2x2:%d\n",
srcID, state_pack.SN, state_pack.StateArea, state_pack.State2x);
}
}
} while (0u < rcv_len);
/**进行2取同步 */
s_Area_2oo2Sync_AfterStateRecv();
/**进行ACK回复 */
s_Area_SendACK_After2oo2(ack_flags[partner_id],ack_flags[area_a_id], ack_flags[area_b_id]);
} }
/**
* @brief 区域状态的应答ACK接收处理 static void s_Area_State_Ack_Recv_Process(IN const STRU_AREA_WITH_ARB_STATE_PACK_T* state_pack,
*/ IN CM_UINT32 local_sn, IN CM_UINT8 time_sync_flag)
static void s_Area_State_Ack_Recv_Process(void)
{ {
STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0}; CM_UINT32 sn_diff = 0u;
CM_UINT8 tmp_buf[1400] = {0};
CM_INT32 rcv_len = 0u; if(NULL == state_pack)
CM_UINT32 crc1 = 0u, crc2 = 0u;
CM_UINT32 timeStamp = 0u, timeNow = 0u;
CM_UINT8 srcID = 0u, dstID = 0u;
CM_UINT8 timeSyncFlag = AREA_FLAGS_CTRL_PTR->Time_Sync_Flag; /**获取校时标志 */
CM_UINT32 localsn = AREA_COMM_STATUS_PTR->LocalSN;
do
{ {
rcv_len = Area_State_Recv(&state_pack, sizeof(state_pack), &timeStamp); return;
timeNow = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION); }
if(AREA_ARB_STATE_PACK_REAL_LEN == rcv_len &&
((timeNow - timeStamp) < g_PFM_Cfg.CYC_TIME)) sn_diff = (local_sn >= state_pack->SN) ?
{ (local_sn - state_pack->SN) : (state_pack->SN - local_sn);
/**接收到长度合法,并且接收时间合法 */ if(((1u == time_sync_flag) && (state_pack->SN == local_sn)) ||
Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); ((0u == time_sync_flag) && (sn_diff <= 1u)))
crc1 = CM_Crc32_1(&tmp_buf[1], rcv_len - 9); {
crc2 = CM_Crc32_2(&tmp_buf[1], rcv_len - 9); s_Area_SetCommStatus_byID(state_pack->SrcID, state_pack->SN, CM_TRUE);
srcID = state_pack.SrcID; AreaArb_SetState_byID(state_pack->SrcID, state_pack->StateArea);
dstID = state_pack.DstID; AreaArb_Set2xState_byID(state_pack->SrcID, state_pack->State2x);
if(crc1 == state_pack.CRC1 && crc2 == state_pack.CRC2 AREA_LOG_MSG("AREA_ARB:State ACK received, SrcID:%d SN:%u State:%d 2x2:%d\n",
&& dstID == AREA_BASIC_CFG_PTR->BoardID && state_pack->SrcID, state_pack->SN, state_pack->StateArea, state_pack->State2x);
ENUM_AREA_MSG_STATE_ACK == state_pack.MsgType && }
(((1u == timeSyncFlag) && (state_pack.SN == localsn)) ||
((0u == timeSyncFlag) && (CM_ABS(localsn - state_pack.SN) <= 1))))
{
/**CRC与目的ID校验通过,并且是本周期接收到的回复(校时未完成时容忍一周期) */
s_Area_SetCommStatus_byID(srcID, state_pack.SN, CM_TRUE);
AreaArb_SetState_byID(srcID, state_pack.StateArea);
AreaArb_Set2xState_byID(srcID, state_pack.State2x);
AREA_LOG_MSG("AREA_ARB:State ACK received, SrcID:%d SN:%u State:%d 2x2:%d\n",
srcID, state_pack.SN, state_pack.StateArea, state_pack.State2x);
}
}
} while (0u < rcv_len);
/**进行2取同步 */
s_Area_2oo2Sync_AfterStateRecv();
} }
/** /**
@@ -510,14 +541,14 @@ static void s_Area_Arb_Process(void)
*/ */
static void s_Area_Arb_Send_Process(void) static void s_Area_Arb_Send_Process(void)
{ {
STRU_AREA_WITH_ARB_PACK_T arb_pack = {0}, peer_pack = {0}; STRU_AREA_WITH_ARB_PACK_T arb_pack = {0};
CM_UINT32 tmp_len = 0u; CM_UINT32 tmp_len = 0u;
CM_UINT8 tmp_buf[1400] = {0u}; CM_UINT8 tmp_buf[1400] = {0u};
ENUM_AREA_STATE local_area_state = AREA_STATE_CTRL_PTR->StateArea.Local_state; ENUM_AREA_STATE local_area_state = AREA_STATE_CTRL_PTR->StateArea.Local_state;
static CM_UINT32 tolerate_arb = 0u; /**仲裁请求容忍 */ static CM_UINT32 tolerate_arb = 0u; /**仲裁请求容忍 */
ENUM_CM_RETURN send_rt = ENUM_CM_FALSE; ENUM_CM_RETURN send_rt = ENUM_CM_FALSE;
/**请求帧帧基础信息组包 */ /**请求帧帧基础信息组包 */
arb_pack.Len = AREA_ARB_FRAME_PACK_REAL_LEN - 1u; arb_pack.Len = AREA_ARB_FRAME_PACK_LEN - 1u;
arb_pack.MsgType = ENUM_AREA_MSG_ARB_REQ; arb_pack.MsgType = ENUM_AREA_MSG_ARB_REQ;
arb_pack.ArbSN = DFM_GetBirthCount(); arb_pack.ArbSN = DFM_GetBirthCount();
arb_pack.OutNet_ID = AREA_BASIC_CFG_PTR->OutnetID; arb_pack.OutNet_ID = AREA_BASIC_CFG_PTR->OutnetID;
@@ -526,8 +557,10 @@ static void s_Area_Arb_Send_Process(void)
CM_Memset(&arb_pack.Reserver[0], 0, AREA_ARB_RESERVER_LEN, AREA_ARB_RESERVER_LEN); CM_Memset(&arb_pack.Reserver[0], 0, AREA_ARB_RESERVER_LEN, AREA_ARB_RESERVER_LEN);
/**计算双CRC */ /**计算双CRC */
tmp_len = Area_Arb_Frame_Pack(tmp_buf, sizeof(tmp_buf), &arb_pack); tmp_len = Area_Arb_Frame_Pack(tmp_buf, sizeof(tmp_buf), &arb_pack);
DOUBLE_CRC_GET(arb_pack, peer_pack, tmp_buf, tmp_len); CM_ASSERT(AREA_ARB_FRAME_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
CM_ASSERT(AREA_ARB_FRAME_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); s_Area_DoubleCRC_Get(tmp_buf, tmp_len, &arb_pack.CRC1, &arb_pack.CRC2);
tmp_len = Area_Arb_Frame_Pack(tmp_buf, sizeof(tmp_buf), &arb_pack);
CM_ASSERT(AREA_ARB_FRAME_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
/**获取对应状态的板卡ID */ /**获取对应状态的板卡ID */
CM_UINT8 id_sm = AreaArb_GetID_byState(ENUM_AREA_SLAVE, ENUM_2x2_MASTER); /**备地主的板卡ID */ CM_UINT8 id_sm = AreaArb_GetID_byState(ENUM_AREA_SLAVE, ENUM_2x2_MASTER); /**备地主的板卡ID */
CM_UINT8 id_mm = AreaArb_GetID_byState(ENUM_AREA_MASTER, ENUM_2x2_MASTER); /**主地主的板卡ID */ CM_UINT8 id_mm = AreaArb_GetID_byState(ENUM_AREA_MASTER, ENUM_2x2_MASTER); /**主地主的板卡ID */
@@ -544,7 +577,7 @@ static void s_Area_Arb_Send_Process(void)
{ {
/**本地主地主,与备地主通信中断,发送仲裁请求 */ /**本地主地主,与备地主通信中断,发送仲裁请求 */
AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u; AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u;
send_rt = Area_Arb_Req_Send(&arb_pack, sizeof(arb_pack)); send_rt = Area_Arb_Req_Send(tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:Request arbitration, master lost slave, BoardID:%d SN:%u Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:Request arbitration, master lost slave, BoardID:%d SN:%u Result:0x%x\n",
AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt); AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt);
} }
@@ -554,7 +587,7 @@ static void s_Area_Arb_Send_Process(void)
if(tolerate_arb >= 1u) if(tolerate_arb >= 1u)
{ {
AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u; AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u;
send_rt = Area_Arb_Req_Send(&arb_pack, sizeof(arb_pack)); send_rt = Area_Arb_Req_Send(tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:Request arbitration, slave lost master, BoardID:%d SN:%u Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:Request arbitration, slave lost master, BoardID:%d SN:%u Result:0x%x\n",
AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt); AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt);
tolerate_arb = 0u; tolerate_arb = 0u;
@@ -570,7 +603,7 @@ static void s_Area_Arb_Send_Process(void)
if(tolerate_arb >= 10u) if(tolerate_arb >= 10u)
{ {
AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u; AREA_ARB_CTRL_PTR->Arb_Send_Flag = 1u;
send_rt = Area_Arb_Req_Send(&arb_pack, sizeof(arb_pack)); send_rt = Area_Arb_Req_Send(tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:Request arbitration, all area links down, BoardID:%d SN:%u Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:Request arbitration, all area links down, BoardID:%d SN:%u Result:0x%x\n",
AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt); AREA_BASIC_CFG_PTR->BoardID, arb_pack.ArbSN, send_rt);
tolerate_arb = 0u; tolerate_arb = 0u;
@@ -607,15 +640,15 @@ static void s_Area_Arb_Recv_Process(void)
/**清空仲裁状态 */ /**清空仲裁状态 */
AREA_ARB_CTRL_PTR->Arb_Ack = 0x00u; AREA_ARB_CTRL_PTR->Arb_Ack = 0x00u;
/**仲裁请求接收 */ /**仲裁请求接收 */
rcv_len = Area_Arb_Ack_Recv(&arb_pack, sizeof(arb_pack)); rcv_len = Area_Arb_Ack_Recv(tmp_buf, sizeof(tmp_buf));
/**解包处理 */ /**解包处理 */
if(AREA_ARB_FRAME_PACK_REAL_LEN == rcv_len && if(AREA_ARB_FRAME_PACK_LEN == rcv_len)
((AREA_ARB_FRAME_PACK_REAL_LEN - 1) == arb_pack.Len))
{ {
rcv_len = Area_Arb_Frame_Pack(tmp_buf, sizeof(tmp_buf), &arb_pack); Area_Arb_Frame_UnPack(&arb_pack, tmp_buf, (CM_UINT32)rcv_len);
crc1 = CM_Crc32_1(&tmp_buf[1], rcv_len - 9); crc1 = CM_Crc32_1(&tmp_buf[1], (CM_UINT32)rcv_len - 9u);
crc2 = CM_Crc32_2(&tmp_buf[1], rcv_len - 9); crc2 = CM_Crc32_2(&tmp_buf[1], (CM_UINT32)rcv_len - 9u);
if(crc1 == arb_pack.CRC1 && crc2 == arb_pack.CRC2 && if(crc1 == arb_pack.CRC1 && crc2 == arb_pack.CRC2 &&
((AREA_ARB_FRAME_PACK_LEN - 1u) == arb_pack.Len) &&
local_sn == arb_pack.ArbSN && ENUM_AREA_MSG_ARB_ACK == arb_pack.MsgType && local_sn == arb_pack.ArbSN && ENUM_AREA_MSG_ARB_ACK == arb_pack.MsgType &&
local_outnetid == arb_pack.OutNet_ID && local_id == arb_pack.Board_ID) local_outnetid == arb_pack.OutNet_ID && local_id == arb_pack.Board_ID)
{ {
@@ -674,10 +707,10 @@ static void s_Area_State_Multi_Send_Process(void)
CM_UINT8 tmp_buf[1400]; /**< 临时缓冲区 */ CM_UINT8 tmp_buf[1400]; /**< 临时缓冲区 */
CM_INT32 tmp_len = 0; /**< 临时数据长度 */ CM_INT32 tmp_len = 0; /**< 临时数据长度 */
ENUM_CM_RETURN send_rt = ENUM_CM_FALSE; ENUM_CM_RETURN send_rt = ENUM_CM_FALSE;
STRU_AREA_WITH_ARB_STATE_MULTI_PACK_T multi_pack = {0}, peer_pack = {0}; /**< 待发送数据结构体 */ STRU_AREA_WITH_ARB_STATE_MULTI_PACK_T multi_pack = {0}; /**< 待发送数据结构体 */
/** 填充结构体 */ /** 填充结构体 */
multi_pack.Len = AREA_ARB_STATE_MULTI_PACK_REAL_LEN - 1; multi_pack.Len = AREA_ARB_STATE_MULTI_PACK_LEN - 1u;
multi_pack.MsgType = ENUM_AREA_MSG_STATE_MULTI; multi_pack.MsgType = ENUM_AREA_MSG_STATE_MULTI;
multi_pack.SN = DFM_GetBirthCount(); multi_pack.SN = DFM_GetBirthCount();
multi_pack.SrcID = AREA_BASIC_CFG_PTR->BoardID; multi_pack.SrcID = AREA_BASIC_CFG_PTR->BoardID;
@@ -687,12 +720,13 @@ static void s_Area_State_Multi_Send_Process(void)
/**计算CRC */ /**计算CRC */
tmp_len = Area_Arb_State_Multi_Pack(tmp_buf, sizeof(tmp_buf), &multi_pack); tmp_len = Area_Arb_State_Multi_Pack(tmp_buf, sizeof(tmp_buf), &multi_pack);
if(AREA_ARB_STATE_MULTI_PACK_REAL_LEN == tmp_len) if(AREA_ARB_STATE_MULTI_PACK_LEN == tmp_len)
{ {
DOUBLE_CRC_GET(multi_pack, peer_pack, tmp_buf, tmp_len); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &multi_pack.CRC1, &multi_pack.CRC2);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); tmp_len = Area_Arb_State_Multi_Pack(tmp_buf, sizeof(tmp_buf), &multi_pack);
CM_ASSERT(AREA_ARB_STATE_MULTI_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
/**组播发送 */ /**组播发送 */
send_rt = Area_State_Multi_Send(&multi_pack, sizeof(multi_pack)); send_rt = Area_State_Multi_Send(tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:Multicast state send, SrcID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:Multicast state send, SrcID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
multi_pack.SrcID, multi_pack.SN, multi_pack.StateArea, multi_pack.State2x, send_rt); multi_pack.SrcID, multi_pack.SN, multi_pack.StateArea, multi_pack.State2x, send_rt);
} }
@@ -707,22 +741,23 @@ static void s_Area_State_Multi_Send_Process(void)
static void s_Area_State_Multi_Recv_Process(void) static void s_Area_State_Multi_Recv_Process(void)
{ {
CM_UINT32 crc1 = 0u, crc2 = 0u; CM_UINT32 crc1 = 0u, crc2 = 0u;
CM_UINT8 tmp_buf[1400] = {0u}; CM_UINT8 wire_buf[AREA_ARB_STATE_MULTI_PACK_LEN] = {0u};
CM_INT32 tmp_len = 0; CM_INT32 rcv_len = 0;
STRU_AREA_WITH_ARB_STATE_MULTI_PACK_T multi_pack = {0}; /**状态组播帧数据结构体 */ STRU_AREA_WITH_ARB_STATE_MULTI_PACK_T multi_pack = {0}; /**状态组播帧数据结构体 */
CM_UINT32 tickNow = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION); CM_UINT32 tickNow = (CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION);
CM_UINT32 tickRcv = 0u; CM_UINT32 tickRcv = 0u;
/*组播接收*/ /*组播接收*/
tmp_len = Area_State_Multi_Recv(&multi_pack, sizeof(multi_pack), &tickRcv); rcv_len = Area_State_Multi_Recv(wire_buf, sizeof(wire_buf), &tickRcv);
/*双CRC校验*/ /*双CRC校验*/
tmp_len = Area_Arb_State_Multi_Pack(tmp_buf, sizeof(tmp_buf), &multi_pack); if(AREA_ARB_STATE_MULTI_PACK_LEN == rcv_len &&
if(AREA_ARB_STATE_MULTI_PACK_REAL_LEN == tmp_len &&
((tickNow - tickRcv) < g_PFM_Cfg.CYC_TIME)) ((tickNow - tickRcv) < g_PFM_Cfg.CYC_TIME))
{ {
crc1 = CM_Crc32_1(&tmp_buf[1], tmp_len - 9); Area_Arb_State_Multi_UnPack(&multi_pack, wire_buf, (CM_UINT32)rcv_len);
crc2 = CM_Crc32_2(&tmp_buf[1], tmp_len - 9); crc1 = CM_Crc32_1(&wire_buf[1], (CM_UINT32)rcv_len - 9u);
crc2 = CM_Crc32_2(&wire_buf[1], (CM_UINT32)rcv_len - 9u);
if(crc1 == multi_pack.CRC1 && crc2 == multi_pack.CRC2 && if(crc1 == multi_pack.CRC1 && crc2 == multi_pack.CRC2 &&
((AREA_ARB_STATE_MULTI_PACK_LEN - 1u) == multi_pack.Len) &&
ENUM_AREA_MSG_STATE_MULTI == multi_pack.MsgType) ENUM_AREA_MSG_STATE_MULTI == multi_pack.MsgType)
{ {
s_Area_SetCommStatus_byID(multi_pack.SrcID, multi_pack.SN, CM_TRUE); s_Area_SetCommStatus_byID(multi_pack.SrcID, multi_pack.SN, CM_TRUE);
@@ -861,22 +896,28 @@ static void s_Area_GetCommStatus_byID(CM_UINT8 ID, CM_UINT32* sn, CM_UINT8* rcv_
/** /**
* @brief 对接收到的区域状态请求进行2取同步 * @brief 对接收到的区域状态请求进行2取同步
*/ */
static void s_Area_2oo2Sync_AfterStateRecv() static void s_Area_2oo2Sync_AfterStateRecv(CM_BOOL ack_flags[5])
{ {
STRU_AREA_WITH_ARB_COMM_STATUS_T peer_comm_status = {0}; STRU_AREA_WITH_ARB_COMM_STATUS_T peer_comm_status = {0};
STRU_AREA_WITH_ARB_STATE_CTRL_T peer_state_ctrl = {0}; STRU_AREA_WITH_ARB_STATE_CTRL_T peer_state_ctrl = {0};
CM_BOOL peer_ack_flags[5] = {CM_FALSE, CM_FALSE, CM_FALSE, CM_FALSE, CM_FALSE};
CM_UINT32 len_comm_status = sizeof(STRU_AREA_WITH_ARB_COMM_STATUS_T); CM_UINT32 len_comm_status = sizeof(STRU_AREA_WITH_ARB_COMM_STATUS_T);
CM_UINT32 len_state_ctrl = sizeof(STRU_AREA_WITH_ARB_STATE_CTRL_T); CM_UINT32 len_state_ctrl = sizeof(STRU_AREA_WITH_ARB_STATE_CTRL_T);
CM_UINT32 len_ack_flags = sizeof(peer_ack_flags);
CM_UINT8 id = 0u;
CM_UINT8 send_buf [1400] = {0}, rcv_buf[1400]; CM_UINT8 send_buf [1400] = {0}, rcv_buf[1400];
CM_INT32 send_len = 0u, rcv_len = 0u; CM_INT32 send_len = 0u, rcv_len = 0u;
/**将接收状态进行组包2取 */ /**将接收状态进行组包2取 */
if(sizeof(send_buf) >= (len_comm_status + len_state_ctrl)) if((NULL != ack_flags) &&
(sizeof(send_buf) >= (len_comm_status + len_state_ctrl + len_ack_flags)))
{ {
CM_Memcpy(send_buf, sizeof(send_buf), AREA_COMM_STATUS_PTR, len_comm_status); CM_Memcpy(send_buf, sizeof(send_buf), AREA_COMM_STATUS_PTR, len_comm_status);
send_len += len_comm_status; send_len += len_comm_status;
CM_Memcpy(&send_buf[send_len], sizeof(send_buf) - send_len, AREA_STATE_CTRL_PTR, len_state_ctrl); CM_Memcpy(&send_buf[send_len], sizeof(send_buf) - send_len, AREA_STATE_CTRL_PTR, len_state_ctrl);
send_len += len_state_ctrl; send_len += len_state_ctrl;
CM_Memcpy(&send_buf[send_len], sizeof(send_buf) - send_len, ack_flags, len_ack_flags);
send_len += len_ack_flags;
} }
rcv_len = Area_2oo2_Currency_NoSplit(send_buf, send_len, rcv_buf, sizeof(rcv_buf)); rcv_len = Area_2oo2_Currency_NoSplit(send_buf, send_len, rcv_buf, sizeof(rcv_buf));
if(rcv_len != send_len) if(rcv_len != send_len)
@@ -888,9 +929,21 @@ static void s_Area_2oo2Sync_AfterStateRecv()
/**对另一CPU数据解析 */ /**对另一CPU数据解析 */
CM_Memcpy(&peer_comm_status, len_comm_status,rcv_buf, len_comm_status); CM_Memcpy(&peer_comm_status, len_comm_status,rcv_buf, len_comm_status);
CM_Memcpy(&peer_state_ctrl, len_state_ctrl,rcv_buf + len_comm_status, len_state_ctrl); CM_Memcpy(&peer_state_ctrl, len_state_ctrl,rcv_buf + len_comm_status, len_state_ctrl);
CM_Memcpy(peer_ack_flags, len_ack_flags, rcv_buf + len_comm_status + len_state_ctrl, len_ack_flags);
/**任一CPU收到请求,两个CPU都使用相同的ACK目标。 */
for(id = MSCP_AREA_A_BOARD_ID_A; id <= MSCP_AREA_B_BOARD_ID_B; id++)
{
if(CM_TRUE == peer_ack_flags[id])
{
ack_flags[id] = CM_TRUE;
}
}
/**更新对系的接收序列号 */ /**更新对系的接收序列号 */
if(AREA_COMM_STATUS_PTR->PatnerSN < peer_comm_status.PatnerSN && CM_TRUE == peer_comm_status.Patner_RcvFlag) if(((AREA_COMM_STATUS_PTR->PatnerSN < peer_comm_status.PatnerSN) ||
(CM_TRUE != AREA_COMM_STATUS_PTR->Patner_RcvFlag)) &&
(CM_TRUE == peer_comm_status.Patner_RcvFlag))
{ {
/**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */ /**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */
AREA_COMM_STATUS_PTR->PatnerSN = peer_comm_status.PatnerSN; AREA_COMM_STATUS_PTR->PatnerSN = peer_comm_status.PatnerSN;
@@ -908,7 +961,9 @@ static void s_Area_2oo2Sync_AfterStateRecv()
} }
/**更新另一地A系的接收序列号 */ /**更新另一地A系的接收序列号 */
if(AREA_COMM_STATUS_PTR->Area_A_SN < peer_comm_status.Area_A_SN && CM_TRUE == peer_comm_status.Area_A_RcvFlag) if(((AREA_COMM_STATUS_PTR->Area_A_SN < peer_comm_status.Area_A_SN) ||
(CM_TRUE != AREA_COMM_STATUS_PTR->Area_A_RcvFlag)) &&
(CM_TRUE == peer_comm_status.Area_A_RcvFlag))
{ {
/**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */ /**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */
AREA_COMM_STATUS_PTR->Area_A_SN = peer_comm_status.Area_A_SN; AREA_COMM_STATUS_PTR->Area_A_SN = peer_comm_status.Area_A_SN;
@@ -926,7 +981,9 @@ static void s_Area_2oo2Sync_AfterStateRecv()
} }
/**更新另一地B系的接收序列号 */ /**更新另一地B系的接收序列号 */
if(AREA_COMM_STATUS_PTR->Area_B_SN < peer_comm_status.Area_B_SN && CM_TRUE == peer_comm_status.Area_B_RcvFlag) if(((AREA_COMM_STATUS_PTR->Area_B_SN < peer_comm_status.Area_B_SN) ||
(CM_TRUE != AREA_COMM_STATUS_PTR->Area_B_RcvFlag)) &&
(CM_TRUE == peer_comm_status.Area_B_RcvFlag))
{ {
/**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */ /**接收到的对系序列号不同,本CPU为旧数据,同步新数据 */
AREA_COMM_STATUS_PTR->Area_B_SN = peer_comm_status.Area_B_SN; AREA_COMM_STATUS_PTR->Area_B_SN = peer_comm_status.Area_B_SN;
@@ -948,12 +1005,12 @@ static void s_Area_2oo2Sync_AfterStateRecv()
*/ */
static void s_Area_SendACK_After2oo2(CM_BOOL ack_partner, CM_BOOL ack_area_a, CM_BOOL ack_area_b) static void s_Area_SendACK_After2oo2(CM_BOOL ack_partner, CM_BOOL ack_area_a, CM_BOOL ack_area_b)
{ {
STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0}, peer_pack = {0}; STRU_AREA_WITH_ARB_STATE_PACK_T state_pack = {0};
CM_UINT8 tmp_buf[1400] = {0}; CM_UINT8 tmp_buf[1400] = {0};
CM_INT32 tmp_len = 0; CM_INT32 tmp_len = 0;
ENUM_CM_RETURN send_rt = ENUM_CM_FALSE; ENUM_CM_RETURN send_rt = ENUM_CM_FALSE;
/**发送帧初始化 */ /**发送帧初始化 */
state_pack.Len = AREA_ARB_STATE_PACK_REAL_LEN - 1; state_pack.Len = AREA_ARB_STATE_PACK_LEN - 1u;
state_pack.MsgType = ENUM_AREA_MSG_STATE_ACK; state_pack.MsgType = ENUM_AREA_MSG_STATE_ACK;
state_pack.TimeSyncFlag = AREA_FLAGS_CTRL_PTR->Time_Sync_Flag; /**获取校时标志 */ state_pack.TimeSyncFlag = AREA_FLAGS_CTRL_PTR->Time_Sync_Flag; /**获取校时标志 */
state_pack.SrcID = AREA_BASIC_CFG_PTR->BoardID; state_pack.SrcID = AREA_BASIC_CFG_PTR->BoardID;
@@ -968,9 +1025,11 @@ static void s_Area_SendACK_After2oo2(CM_BOOL ack_partner, CM_BOOL ack_area_a, CM
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_BoardID;
state_pack.SN = AREA_COMM_STATUS_PTR->PatnerSN; state_pack.SN = AREA_COMM_STATUS_PTR->PatnerSN;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_BoardID, &state_pack, sizeof(state_pack)); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -980,9 +1039,11 @@ static void s_Area_SendACK_After2oo2(CM_BOOL ack_partner, CM_BOOL ack_area_a, CM
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID;
state_pack.SN = AREA_COMM_STATUS_PTR->Area_A_SN; state_pack.SN = AREA_COMM_STATUS_PTR->Area_A_SN;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, &state_pack, sizeof(state_pack)); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -992,9 +1053,11 @@ static void s_Area_SendACK_After2oo2(CM_BOOL ack_partner, CM_BOOL ack_area_a, CM
state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID; state_pack.DstID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
state_pack.SN = AREA_COMM_STATUS_PTR->Area_B_SN; state_pack.SN = AREA_COMM_STATUS_PTR->Area_B_SN;
tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
DOUBLE_CRC_GET(state_pack, peer_pack, tmp_buf, tmp_len); CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
CM_ASSERT(AREA_ARB_STATE_PACK_REAL_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); s_Area_DoubleCRC_Get(tmp_buf, (CM_UINT32)tmp_len, &state_pack.CRC1, &state_pack.CRC2);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, &state_pack, sizeof(state_pack)); tmp_len = Area_Arb_State_Pack(tmp_buf, sizeof(tmp_buf), &state_pack);
CM_ASSERT(AREA_ARB_STATE_PACK_LEN == tmp_len, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1);
send_rt = Area_State_Send(AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID, tmp_buf, tmp_len);
AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n", AREA_LOG_MSG("AREA_ARB:State ACK send, DstID:%d SN:%u State:%d 2x2:%d Result:0x%x\n",
state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt); state_pack.DstID, state_pack.SN, state_pack.StateArea, state_pack.State2x, send_rt);
} }
@@ -1007,7 +1070,8 @@ static void s_Area_2oo2Sync_AfterArbRecv()
CM_INT32 len = sizeof(STRU_AREA_WITH_ARB_REQ_T), rcv_len = 0; CM_INT32 len = sizeof(STRU_AREA_WITH_ARB_REQ_T), rcv_len = 0;
STRU_AREA_WITH_ARB_REQ_T peer_ctrl = {0}; STRU_AREA_WITH_ARB_REQ_T peer_ctrl = {0};
/**2取交互仲裁应答信息 */ /**2取交互仲裁应答信息 */
rcv_len = Area_2oo2_Currency_NoSplit(AREA_ARB_CTRL_PTR, len, &peer_ctrl, len); rcv_len = Area_2oo2_Currency_NoSplit((const CM_UINT8 *)AREA_ARB_CTRL_PTR,
len, (CM_UINT8 *)&peer_ctrl, len);
if(len != rcv_len) if(len != rcv_len)
{ {
AREA_LOG_MSG("AREA_ARB:Arbitration 2oo2 sync failed, SendLen:%d RecvLen:%d\n", AREA_LOG_MSG("AREA_ARB:Arbitration 2oo2 sync failed, SendLen:%d RecvLen:%d\n",
+19 -10
View File
@@ -16,6 +16,7 @@
#include "stdarg.h" #include "stdarg.h"
#include "Arb.h" #include "Arb.h"
#include "Arb_Net.h" #include "Arb_Net.h"
#include "Area_2oo2.h"
/*===========↓↓↓↓↓宏定义↓↓↓↓↓=============*/ /*===========↓↓↓↓↓宏定义↓↓↓↓↓=============*/
#define ARB_MSG_NUM_MAX 20 /*仲裁应答接收队列最大数量*/ #define ARB_MSG_NUM_MAX 20 /*仲裁应答接收队列最大数量*/
@@ -68,8 +69,6 @@ void Area_Arb_Net_Init(void)
CM_UINT32 val = 0u; CM_UINT32 val = 0u;
ENUM_CM_RETURN rt = ENUM_CM_FALSE; ENUM_CM_RETURN rt = ENUM_CM_FALSE;
CM_BOOL rtCheck = CM_FALSE; CM_BOOL rtCheck = CM_FALSE;
/**日志队列初始化 */
Area_LogMQ_Init();
/**2取初始化 */ /**2取初始化 */
Area_2oo2_Init(); Area_2oo2_Init();
/*获取IP配置*/ /*获取IP配置*/
@@ -228,14 +227,18 @@ ENUM_CM_RETURN Area_State_Send(IN CM_UINT8 dstID, IN const CM_UINT8* pBuf, IN CM
CM_INT32 Area_State_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* timeRcv) CM_INT32 Area_State_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* timeRcv)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
CM_UINT8 buf[65535] = {0}; CM_UINT8 buf[Area_RAW_MSG_SIZE] = {0};
CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); CM_UINT16 len = (CM_UINT16)sizeof(buf);
ENUM_CM_RETURN rt = ENUM_CM_FALSE; ENUM_CM_RETURN rt = ENUM_CM_FALSE;
/*- 指针防空*/ /*- 指针防空*/
if((NULL == pBuf) || (0u == BufSize))
{
return 0;
}
/*- 从接收线程获取输入报文 */ /*- 从接收线程获取输入报文 */
rt = CM_MQ_Read(&(AREA_UNI_COMM_CFG_PTR->MsgQ), buf, &len); rt = CM_MQ_Read(&(AREA_UNI_COMM_CFG_PTR->MsgQ), buf, &len);
/*- 是否获取成功 */ /*- 是否获取成功 */
if (ENUM_CM_TRUE == rt && len > 4u) if ((ENUM_CM_TRUE == rt) && (len > 4u) && ((CM_UINT32)(len - 4u) <= BufSize))
{ {
/*- 输出接收数据 */ /*- 输出接收数据 */
if(NULL != timeRcv) if(NULL != timeRcv)
@@ -243,6 +246,7 @@ CM_INT32 Area_State_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* ti
*timeRcv = CM_LongFromChar(buf); *timeRcv = CM_LongFromChar(buf);
} }
CM_Memcpy(pBuf, BufSize, &buf[4], len - 4); CM_Memcpy(pBuf, BufSize, &buf[4], len - 4);
len -= 4u;
} }
else else
{ {
@@ -291,14 +295,18 @@ ENUM_CM_RETURN Area_State_Multi_Send(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen
CM_INT32 Area_State_Multi_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* timeRcv) CM_INT32 Area_State_Multi_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* timeRcv)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
CM_UINT8 buf[65535] = {0}; CM_UINT8 buf[Area_RAW_MSG_SIZE] = {0};
CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); CM_UINT16 len = (CM_UINT16)sizeof(buf);
ENUM_CM_RETURN rt = ENUM_CM_FALSE; ENUM_CM_RETURN rt = ENUM_CM_FALSE;
/*- 指针防空*/ /*- 指针防空*/
if((NULL == pBuf) || (0u == BufSize))
{
return 0;
}
/*- 从接收线程获取输入报文 */ /*- 从接收线程获取输入报文 */
rt = CM_MQ_Read(&(AREA_MULTI_COMM_CFG_PTR->MsgQ), buf, &len); rt = CM_MQ_Read(&(AREA_MULTI_COMM_CFG_PTR->MsgQ), buf, &len);
/*- 是否获取成功 */ /*- 是否获取成功 */
if (ENUM_CM_TRUE == rt && len > 4u) if ((ENUM_CM_TRUE == rt) && (len > 4u) && ((CM_UINT32)(len - 4u) <= BufSize))
{ {
/*- 输出接收数据 */ /*- 输出接收数据 */
if(NULL != timeRcv) if(NULL != timeRcv)
@@ -306,6 +314,7 @@ CM_INT32 Area_State_Multi_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT
*timeRcv = CM_LongFromChar(buf); *timeRcv = CM_LongFromChar(buf);
} }
CM_Memcpy(pBuf, BufSize, &buf[4], len - 4); CM_Memcpy(pBuf, BufSize, &buf[4], len - 4);
len -= 4u;
} }
else else
{ {
@@ -461,7 +470,7 @@ static CM_THREAD_FUNC_T t_Area_Multi_UdpRecvThread(IN STRU_AREA_MULTICAST_COMM_T
else else
{ {
/*- 接收出错 */ /*- 接收出错 */
AREA_LOG_MSG("warning ASSERT1103: port %d rx err(len=%d)\n", pCtrl->port, len); AREA_LOG_MSG("warning ASSERT1103: port %d rx err(len=%d)\n", pCtrl->Port_Recv, len);
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1)); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1));
} }
} }
@@ -597,4 +606,4 @@ static CM_THREAD_FUNC_T t_Area_Uni_UdpRecvThread(IN STR_Area_IP_Cfg *arg)
} }
} }
return NULL; return NULL;
} }
-5
View File
@@ -1,11 +1,6 @@
#include "Arb_Pack.h" #include "Arb_Pack.h"
#include "CM_Convert.h" #include "CM_Convert.h"
/* 各类报文在线路上的固定长度。枚举类型按1字节消息类型进行传输。 */
#define AREA_ARB_FRAME_PACK_LEN (26u)
#define AREA_ARB_STATE_MULTI_PACK_LEN (25u)
#define AREA_ARB_STATE_PACK_LEN (27u)
/** /**
* @brief 打包仲裁请求/应答帧 * @brief 打包仲裁请求/应答帧
* @return 成功返回固定报文长度26,入参非法或缓冲区不足返回0。 * @return 成功返回固定报文长度26,入参非法或缓冲区不足返回0。
+6 -5
View File
@@ -5,10 +5,11 @@
#include "SFM_2x2.h" #include "SFM_2x2.h"
#include "Area.h" #include "Area.h"
/* 结构体的真实大小,如果有结构体对齐,可能和所有成员长度相加不同 */ /* 各类报文在线路上的固定长度,不包含结构体对齐字节。 */
#define AREA_ARB_FRAME_PACK_REAL_LEN (sizeof(STRU_AREA_WITH_ARB_PACK_T)) #define AREA_ARB_FRAME_PACK_LEN (26u)
#define AREA_ARB_STATE_MULTI_PACK_REAL_LEN (sizeof(STRU_AREA_WITH_ARB_STATE_MULTI_PACK_T)) #define AREA_ARB_STATE_MULTI_PACK_LEN (25u)
#define AREA_ARB_STATE_PACK_REAL_LEN (sizeof(STRU_AREA_WITH_ARB_STATE_PACK_T)) #define AREA_ARB_STATE_PACK_LEN (27u)
#define AREA_ARB_RESERVER_LEN (8u) #define AREA_ARB_RESERVER_LEN (8u)
/**< 仲裁模式下,区域通信的消息类型 */ /**< 仲裁模式下,区域通信的消息类型 */
@@ -127,4 +128,4 @@ CM_INT32 Area_Arb_State_Pack(OUT CM_UINT8* buf, IN CM_UINT32 buf_size, IN STRU_A
*/ */
void Area_Arb_State_UnPack(OUT STRU_AREA_WITH_ARB_STATE_PACK_T* pack, IN CM_UINT8* buf, IN CM_UINT32 buf_len); void Area_Arb_State_UnPack(OUT STRU_AREA_WITH_ARB_STATE_PACK_T* pack, IN CM_UINT8* buf, IN CM_UINT32 buf_len);
#endif #endif
+1 -1
View File
@@ -143,7 +143,7 @@ CM_UINT8 AreaArb_GetID_byState(ENUM_AREA_STATE state_area, ENUM_2x2_STATE_T stat
} }
else if(AREA_STATE_CTRL_PTR->StateArea.Partner_Area_B_state == state_area && AREA_STATE_CTRL_PTR->State2x.Area_B_State == state_2x) else if(AREA_STATE_CTRL_PTR->StateArea.Partner_Area_B_state == state_area && AREA_STATE_CTRL_PTR->State2x.Area_B_State == state_2x)
{ {
boardID = AREA_BASIC_CFG_PTR->Partner_Area_A_BoardID; boardID = AREA_BASIC_CFG_PTR->Partner_Area_B_BoardID;
} }
else else
{ {