diff --git a/TSCP/src/APP/APP_API.c b/TSCP/src/APP/APP_API.c index 6e0cd90..51961ee 100644 --- a/TSCP/src/APP/APP_API.c +++ b/TSCP/src/APP/APP_API.c @@ -239,7 +239,7 @@ void APP_API_Data_Init() .M_InnetSafe_Enable = 0x55, /**< 内网安全通信功能开关 */ .M_InnetRaw_Enable = 0xAA, /**< 内网透传通信功能开关 */ .M_OutnetSafe_Enable = 0x55,/**< 外网安全通信功能开关 */ - .M_OutnetRaw_Enable = 0xAA, /**< 外网透传通信功能开关 */ + .M_OutnetRaw_Enable = 0x55, /**< 外网透传通信功能开关 */ .M_CpuUsageGet_Enable = 0xAA,/**< 获取cpu使用率功能开关 */ .M_RemoteUpdate_Enable = 0x55,/**< 远程部署内网安全通信功能开关 */ .ID_Maintenance = DEVICE_TYPE_AIM, diff --git a/TSCP/src/DRV/imx8_drv_i2c.c b/TSCP/src/DRV/imx8_drv_i2c.c index 633374b..8896d93 100644 --- a/TSCP/src/DRV/imx8_drv_i2c.c +++ b/TSCP/src/DRV/imx8_drv_i2c.c @@ -84,7 +84,7 @@ int eeprom_read_data(int fd, uint32_t regaddr, uint8_t rx_buf[],uint32_t len,uin if(ret > 0) { - + perror("eeprom read i2c error "); } else { diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.c b/TSCP/src/MSCP/PFM/PFM_Cfg.c index 4e76e68..02c8204 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.c +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.c @@ -40,7 +40,7 @@ CM_CHAR FS_FILE_PATH[100]; /** 平台软件版本号 */ -const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 51u }; +const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 52u }; /** 驱动软件版本号 */ CM_UINT8 MSCP_DRV_VERION[4] = {0}; /** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */ diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.c b/TSCP/src/MSCP/PFM/PFM_InputOutput.c index a6140f7..dd59bb6 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.c +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.c @@ -570,8 +570,6 @@ void PFM_InputProc(void) s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_rmt_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].rmt_mine_len); PFM_CFC_Check(43); s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_rmt_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].rmt_peer_len); - (void)CM_Memcpy(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_rmt_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].rmt_mine_len); - (void)CM_Memcpy(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_rmt_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].rmt_peer_len); } else { @@ -605,8 +603,7 @@ void PFM_InputProc(void) s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_rmt_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].rmt_peer_len); PFM_CFC_Check(43); s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_rmt_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].rmt_mine_len); - (void)CM_Memcpy(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_rmt_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].rmt_mine_len); - (void)CM_Memcpy(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_rmt_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].rmt_peer_len); + } else { @@ -1021,44 +1018,67 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) CM_UINT32 msgLen = 0u; /* 消息长度 */ CM_UINT32 rt = 0u; /* 函数返回值 */ ENUM_CM_RETURN ret = ENUM_CM_FALSE; + ENUM_2x2_STATE_T state_2x2 = SFM_2x2_GetLastPartner2x2State(); /*获取上周期对系热备状态*/ g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_index_log++;/*记录应用调用次数,每周期清零*/ + CM_UINT8 *p_Mine_Buf = NULL; + CM_UINT32 Mine_len = 0u; + CM_UINT8 *p_Peer_Buf = NULL; + CM_UINT32 Peer_len = 0u; + CM_MUTEX_T *p_mutex = NULL; + /*根据主备状态分配缓冲区 */ + if(ENUM_2x2_MASTER != state_2x2) + { + p_Mine_Buf = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_mine_buf; + Mine_len = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len; + p_Peer_Buf = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_peer_buf; + Peer_len = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len; + p_mutex = &g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex; + } + else + { + p_Mine_Buf = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_rmt_mine_buf; + Mine_len = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].rmt_mine_len; + p_Peer_Buf = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_rmt_peer_buf; + Peer_len = g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].rmt_peer_len; + p_mutex = &g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex; + } /*- 入参检查 */ - CM_ASSERT(NULL != rxBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_21); + CM_ASSERT(((NULL != rxBuf) && (NULL != p_Mine_Buf) && (NULL != p_Peer_Buf) && (NULL != p_mutex)) , IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_21); /*- 自己是否是CPU1 */ if (1u == g_PFM_Cfg.CPU_ID) { /*- 本机通道是否有数据未取走 */ - if ((s_OutnetRaw_Mine_AppReadIndex + 4u) <= (CM_UINT32)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len)) + if ((s_OutnetRaw_Mine_AppReadIndex + 4u) <= (CM_UINT32)Mine_len) { - msgLen = CM_LongFromChar(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_mine_buf + s_OutnetRaw_Mine_AppReadIndex); + msgLen = CM_LongFromChar(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex); CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT((s_OutnetRaw_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT((s_OutnetRaw_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)Mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_2); CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_3); rt = msgLen; /*- 锁定接收通道 */ - ret = CM_Mutex_Lock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_4); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_mine_buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + ret = CM_Mutex_Lock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_4); + (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 解锁接收通道 */ - ret = CM_Mutex_Unlock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_5); + ret = CM_Mutex_Unlock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_5); s_OutnetRaw_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; } /*- 邻机通道是否有数据未取走 */ - else if ((s_OutnetRaw_Peer_AppReadIndex + 4u) < (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len) + else if ((s_OutnetRaw_Peer_AppReadIndex + 4u) < (CM_UINT32)Peer_len) { - msgLen = CM_LongFromChar(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_peer_buf + s_OutnetRaw_Peer_AppReadIndex); + msgLen = CM_LongFromChar(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex); CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_6); - CM_RE_ASSERT((s_OutnetRaw_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_7); + CM_RE_ASSERT((s_OutnetRaw_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)Peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_7); CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_8); rt = msgLen; /*- 锁定接收通道 */ - ret = CM_Mutex_Lock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_9); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_peer_buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + ret = CM_Mutex_Lock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_9); + (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 解锁接收通道 */ - ret = CM_Mutex_Unlock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_10); + ret = CM_Mutex_Unlock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_10); s_OutnetRaw_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; } else @@ -1071,38 +1091,38 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) { /*- 邻机通道是否有数据未取走 */ - if ((s_OutnetRaw_Peer_AppReadIndex + 4u) < (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len) + if ((s_OutnetRaw_Peer_AppReadIndex + 4u) < (CM_UINT32)Peer_len) { - msgLen = CM_LongFromChar(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_peer_buf + s_OutnetRaw_Peer_AppReadIndex); + msgLen = CM_LongFromChar(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex); CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_11); - CM_RE_ASSERT((s_OutnetRaw_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_12); + CM_RE_ASSERT((s_OutnetRaw_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)Peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_12); CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_13); rt = msgLen; /*- 锁定接收通道 */ - ret = CM_Mutex_Lock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_14); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_peer_buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + ret = CM_Mutex_Lock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_14); + (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 解锁接收通道 */ - ret = CM_Mutex_Unlock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_15); + ret = CM_Mutex_Unlock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_15); s_OutnetRaw_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; } /*- 本机通道是否有数据未取走 */ - else if ((s_OutnetRaw_Mine_AppReadIndex + 4u) <= (CM_UINT32)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len)) + else if ((s_OutnetRaw_Mine_AppReadIndex + 4u) <= (CM_UINT32)Mine_len) { - msgLen = CM_LongFromChar(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_mine_buf + s_OutnetRaw_Mine_AppReadIndex); + msgLen = CM_LongFromChar(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex); CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_16); - CM_RE_ASSERT((s_OutnetRaw_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_17); + CM_RE_ASSERT((s_OutnetRaw_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)Mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_17); CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_18); rt = msgLen; /*- 锁定接收通道 */ - ret = CM_Mutex_Lock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_19); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_mine_buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + ret = CM_Mutex_Lock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_19); + (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 解锁接收通道 */ - ret = CM_Mutex_Unlock(g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_20); + ret = CM_Mutex_Unlock(*p_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_20); s_OutnetRaw_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; } @@ -1110,8 +1130,7 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) { /*- 双网都取完了,返回true */ } - - } + } /*- 返回接收结果 */ /* MSCP_LOG_MSG("PFM_OutnetRaw_AppRecv msgLen =%d\n",msgLen); */ /* MSCP_LOG_MSG("PFM_OutnetRaw_AppRecv rt =%d\n",rt); */ diff --git a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c index 8c50285..dd9d423 100644 --- a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c +++ b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c @@ -1178,7 +1178,7 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc) txLen = offset - 2u; CM_ShortToChar(txLen, &txBuf[0]); ret = Prtcl_InnetSafe_RmSend(dstName, txBuf, offset); - MSCP_LOG_MSG("offset = %d\n",offset); + MSCP_LOG_MSG("offset = %d send ret =%d\n",offset, ret); } else { @@ -1192,7 +1192,7 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc) rxLen = offset - 2u; CM_ShortToChar(rxLen, &rxBuf[0]); ret = Prtcl_InnetSafe_RmSend(dstName, rxBuf, offset); - MSCP_LOG_MSG("offset = %d\n",offset); + MSCP_LOG_MSG("offset = %d send ret = %d\n",offset, ret); } } else diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index db6e776..5a1b74f 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.c +++ b/TSCP/src/MSCP/SFM/SFM_2x2.c @@ -119,6 +119,45 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl); /* 判断2x422以及以太网的通信状况并且填写暗文日志 */ static void SFM_2x2_Eth422StateDark(void); +/* 输入周期号同步函数 */ +static void SFM_2x2_InputSysCycSyn(STRU_2X2_CTRL_T *peerCtrl){ + if(s_2x2_Ctrl.RxInputSysCyc > peerCtrl->RxInputSysCyc) + { + /*- 更新临机输入同步周期号*/ + peerCtrl->RxInputSysCyc = s_2x2_Ctrl.RxInputSysCyc; + } + else if(s_2x2_Ctrl.RxInputSysCyc < peerCtrl->RxInputSysCyc) + { + /*- 更新本机输入同步周期号*/ + s_2x2_Ctrl.RxInputSysCyc = peerCtrl->RxInputSysCyc; + } + else + { + /*- 周期号相同 不做修改*/; + } +} + +/* 跟随数据同步*/ +static CM_INT32 SFM_2x2_BaseFollowSyn(STRU_2X2_CTRL_T *peerCtrl){ + CM_INT32 ret = 0; + if (s_2x2_Ctrl.RxBaseFollowSysCyc > peerCtrl->RxBaseFollowSysCyc) + { + /*需要向邻机发送跟随数据*/ + ret = SFM_2oo2_Exchange_Currency(g_RxBaseFollow, g_RxBaseFollow_len, g_RxBaseFollow, (CM_UINT32)0, ENUM_2oo2_INPUT_EX);/*通过输入"0"防止g_RxFollow被修改*/ + } + else if (s_2x2_Ctrl.RxBaseFollowSysCyc < peerCtrl->RxBaseFollowSysCyc) + { + /*需要从邻机接收跟随数据*/ + g_RxBaseFollow_len = SFM_2oo2_Exchange_Currency(g_RxBaseFollow, (CM_INT32)0, g_RxBaseFollow, (CM_UINT32)sizeof(g_RxBaseFollow), ENUM_2oo2_INPUT_EX);/*通过输入"0"实现只收不发*/ + s_2x2_Ctrl.RxBaseFollowSysCyc = peerCtrl->RxBaseFollowSysCyc; + } + else + { + /* 无需处理 */ + } + return ret; +} + /** * @brief 切系按钮监督 * @return 无 @@ -2237,41 +2276,16 @@ void SFM_2x2_InputProc(void) /*- @alias 系内同步Rx输入信息状态,用来过滤老的输入数据,并且将新的数据进行2oo2交换*/ SFM_2x2_Input2oo2Exchange(&peerCtrl); /*- 跟新输入同步周期号*/ - if(s_2x2_Ctrl.RxInputSysCyc > peerCtrl.RxInputSysCyc) - { - /*- 更新临机输入同步周期号*/ - peerCtrl.RxInputSysCyc = s_2x2_Ctrl.RxInputSysCyc; - } - else if(s_2x2_Ctrl.RxInputSysCyc < peerCtrl.RxInputSysCyc) - { - /*- 更新本机输入同步周期号*/ - s_2x2_Ctrl.RxInputSysCyc = peerCtrl.RxInputSysCyc; - } - else - { - /*- 周期号相同 不做修改*/; - } + SFM_2x2_InputSysCycSyn(&peerCtrl); + /*- 更新控制流状态 */ PFM_CFC_Check(37); /* (这个数据量很大,只在必要时同步) */ /*- @alias 系内同步Rx跟随数据*/ - if (s_2x2_Ctrl.RxBaseFollowSysCyc > peerCtrl.RxBaseFollowSysCyc) - { - /*需要向邻机发送跟随数据*/ - ret = SFM_2oo2_Exchange_Currency(g_RxBaseFollow, g_RxBaseFollow_len, g_RxBaseFollow, (CM_UINT32)0, ENUM_2oo2_INPUT_EX);/*通过输入"0"防止g_RxFollow被修改*/ - CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); - } - else if (s_2x2_Ctrl.RxBaseFollowSysCyc < peerCtrl.RxBaseFollowSysCyc) - { - /*需要从邻机接收跟随数据*/ - g_RxBaseFollow_len = SFM_2oo2_Exchange_Currency(g_RxBaseFollow, (CM_INT32)0, g_RxBaseFollow, (CM_UINT32)sizeof(g_RxBaseFollow), ENUM_2oo2_INPUT_EX);/*通过输入"0"实现只收不发*/ - s_2x2_Ctrl.RxBaseFollowSysCyc = peerCtrl.RxBaseFollowSysCyc; - } - else - { - /* 无需处理 */ - } + ret = SFM_2x2_BaseFollowSyn(&peerCtrl); + CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); + } else { @@ -2995,71 +3009,142 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) CM_UINT32 i = 0u; CM_INT32 len = 0; - /*- @alias 系内交换输入数据 */ - for (i = 1u; i <= g_2x2oo2_data_num; i++) + if (g_PFM_Cfg.CPU_ID == 1u) { - if(CM_TRUE == g_2x2oo2_rx[g_2x2oo2_base][i].b_2x2_Enable) + /*- @alias 系内交换输入数据 */ + for (i = 1u; i <= g_2x2oo2_data_num; i++) { - MSCP_LOG_MSG("SFM_2x2_Input2oo2Exchange-CPU1[%d]:[M0:%d,P1:%d][M1:%d,P0:%d]\r\n",i,s_2x2_Ctrl.InPutDoublePassLen[i][0],peerCtrl->InPutDoublePassLen[i][1],s_2x2_Ctrl.InPutDoublePassLen[i][1],peerCtrl->InPutDoublePassLen[i][0]); - /*本机数据交互*/ - if(s_2x2_Ctrl.InPutDoublePassLen[i][0] < peerCtrl->InPutDoublePassLen[i][1]) + if(CM_TRUE == g_2x2oo2_rx[g_2x2oo2_base][i].b_2x2_Enable) { - /*接收对方数据,自己发送长度为0*/ - g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len = SFM_2oo2_Exchange_Currency( - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, - 0, - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, - g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, - ENUM_2oo2_INPUT_EX); - } - else if(s_2x2_Ctrl.InPutDoublePassLen[i][0] > peerCtrl->InPutDoublePassLen[i][1]) - { - /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ - len = SFM_2oo2_Exchange_Currency( - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, - g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len, - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, - 0, - ENUM_2oo2_INPUT_EX); - CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + MSCP_LOG_MSG("SFM_2x2_Input2oo2Exchange-CPU1[%d]:[M0:%d,P1:%d][M1:%d,P0:%d]\r\n",i,s_2x2_Ctrl.InPutDoublePassLen[i][0],peerCtrl->InPutDoublePassLen[i][1],s_2x2_Ctrl.InPutDoublePassLen[i][1],peerCtrl->InPutDoublePassLen[i][0]); + /*本机数据交互*/ + if(s_2x2_Ctrl.InPutDoublePassLen[i][0] < peerCtrl->InPutDoublePassLen[i][1]) + { + /*接收对方数据,自己发送长度为0*/ + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + 0, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, + ENUM_2oo2_INPUT_EX); + } + else if(s_2x2_Ctrl.InPutDoublePassLen[i][0] > peerCtrl->InPutDoublePassLen[i][1]) + { + /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ + len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + 0, + ENUM_2oo2_INPUT_EX); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + } + else + { + /*等于不交互,包括0*/ + } + /*邻机数据交互*/ + if(s_2x2_Ctrl.InPutDoublePassLen[i][1] < peerCtrl->InPutDoublePassLen[i][0]) + { + /*接收对方数据,自己发送长度为0*/ + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + 0, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, + ENUM_2oo2_INPUT_EX); + } + else if(s_2x2_Ctrl.InPutDoublePassLen[i][1] > peerCtrl->InPutDoublePassLen[i][0]) + { + /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ + len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + 0, + ENUM_2oo2_INPUT_EX); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + } + else + { + /*等于不交互,包括0*/ + } } else { - /*等于不交互,包括0*/ - } - /*邻机数据交互*/ - if(s_2x2_Ctrl.InPutDoublePassLen[i][1] < peerCtrl->InPutDoublePassLen[i][0]) - { - /*接收对方数据,自己发送长度为0*/ - g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len = SFM_2oo2_Exchange_Currency( - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, - 0, - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, - g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, - ENUM_2oo2_INPUT_EX); - } - else if(s_2x2_Ctrl.InPutDoublePassLen[i][1] > peerCtrl->InPutDoublePassLen[i][0]) - { - /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ - len = SFM_2oo2_Exchange_Currency( - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, - g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len, - g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, - 0, - ENUM_2oo2_INPUT_EX); - CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); - } - else - { - /*等于不交互,包括0*/ - } - } - else - { + } } } + else + { + /*- @alias 系内交换输入数据 */ + for (i = 1u; i <= g_2x2oo2_data_num; i++) + { + if(CM_TRUE == g_2x2oo2_rx[g_2x2oo2_base][i].b_2x2_Enable) + { + MSCP_LOG_MSG("SFM_2x2_Input2oo2Exchange-CPU2[%d]:[M1:%d,P0:%d][M0:%d,P1:%d]\r\n",i,s_2x2_Ctrl.InPutDoublePassLen[i][1],peerCtrl->InPutDoublePassLen[i][0],s_2x2_Ctrl.InPutDoublePassLen[i][0],peerCtrl->InPutDoublePassLen[i][1]); + /*邻机数据交互*/ + if(peerCtrl->InPutDoublePassLen[i][0] < s_2x2_Ctrl.InPutDoublePassLen[i][1]) + { + /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ + len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + 0, + ENUM_2oo2_INPUT_EX); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + } + else if(peerCtrl->InPutDoublePassLen[i][0] > s_2x2_Ctrl.InPutDoublePassLen[i][1]) + { + /*接收对方数据,自己发送长度为0*/ + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_peer_len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + 0, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, + ENUM_2oo2_INPUT_EX); + } + else + { + /*等于不交互,包括0*/ + } + /*本机数据交互*/ + if(peerCtrl->InPutDoublePassLen[i][1] < s_2x2_Ctrl.InPutDoublePassLen[i][0]) + { + /*- 向邻机发送数据,本机不接收,传入接收长度为0*/ + len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + 0, + ENUM_2oo2_INPUT_EX); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + } + else if(peerCtrl->InPutDoublePassLen[i][1] > s_2x2_Ctrl.InPutDoublePassLen[i][0]) + { + /*接收对方数据,自己发送长度为0*/ + g_2x2oo2_rx[g_2x2oo2_base][i].rmt_mine_len = SFM_2oo2_Exchange_Currency( + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + 0, + g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, + g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, + ENUM_2oo2_INPUT_EX); + } + else + { + /*等于不交互,包括0*/ + } + + } + else + { + + } + } + } /*- 清空所有通道长度记录*/ (void)CM_Memset(s_2x2_Ctrl.InPutDoublePassLen,0,sizeof(s_2x2_Ctrl.InPutDoublePassLen),sizeof(s_2x2_Ctrl.InPutDoublePassLen)); /*记录暗文日志*/ diff --git a/TSCP/src/MSCP/SFM/SFM_Prtcl.c b/TSCP/src/MSCP/SFM/SFM_Prtcl.c index 153e256..bb32bbc 100644 --- a/TSCP/src/MSCP/SFM/SFM_Prtcl.c +++ b/TSCP/src/MSCP/SFM/SFM_Prtcl.c @@ -1506,6 +1506,7 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) CM_UINT16 msgLen = 0u; /* 外网输出帧长度 */ CM_UINT16 dstID = 0u; /* 目的设备ID */ STRU_PFM_INNET_CFG_T* pCom = NULL;/* 通信配置 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) { @@ -1549,13 +1550,14 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) if (1u == g_PFM_Cfg.CPU_ID) { /*- 从绿网通道发送 */ - (void)CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_G, pCom->Port_Safe_G); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + ret = CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_G, pCom->Port_Safe_G); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ } else { /*- 从紫网通道发送 */ - (void)CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_P, pCom->Port_Safe_P); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + ret = CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_P, pCom->Port_Safe_P); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ } + MSCP_LOG_MSG("plafm send innetsafeRm data ret = %#x\n",ret); } else { @@ -1564,6 +1566,7 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) } else { + MSCP_LOG_MSG("Get dest IP and port fial!\n"); /*- 无处理*/ } i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u);