diff --git a/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h b/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h index a76b1d0..d8f2cfc 100644 --- a/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h +++ b/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h @@ -30,6 +30,6 @@ #define VER_INTE_PROJECT 220 /*项目编号*/ #define VER_INTE_PRODUCT 40 /*产品编号*/ #define VER_INTE_EXE 1 /*可执行编号*/ -#define VER_INTE_TIME 101 /*集成次数编号*/ +#define VER_INTE_TIME 118 /*集成次数编号*/ #endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/ \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c index 48fc137..da730ed 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c +++ b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c @@ -16,6 +16,7 @@ #include "NonAutoReturnDataManage.h" #include "DynamicRouteDataManage.h" #include "../Deployment/DeploymentExtern.h" +#include "SpeedLimitSecDataManage.h" /*交换变量*/ extern UINT16 TransmitStateDataCurSum; /*通信关系状态数据当前总数*/ extern UINT8 ComCycNumForCiToAts; /*联锁到ATS通信周期记录*/ @@ -812,14 +813,38 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, &g_cTsrSureFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*拷贝全线临时限速状态*/ + /*拷贝ZC全线临时限速状态*/ (void)memcpy(pCiAppDataPointer + curIndex, &g_AllLineTsrState, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*拷贝全线临时限速速度*/ + /*拷贝ZC全线临时限速速度*/ (void)memcpy(pCiAppDataPointer + curIndex, &g_AllLineTsrSpeed, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); + /*拷贝TMC全线限速状态*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&gCacheAllSpeedState), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝TMC全线限速速度*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&gCacheAllSpeedNum), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝台风限速信息*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(TyphoonSpeedDataStruct), (const void*)(&gTyphSpeedInfo), (UINT32)sizeof(TyphoonSpeedDataStruct)); + curIndex = curIndex + (UINT32)sizeof(TyphoonSpeedDataStruct); + + /*拷贝临时限速数量*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_TsrTMCSum), (const void*)(&g_TsrTMCSum), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝临时限速数据结构体*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(TsrTMCDataStruct)* TSR_MAX_SUM, (const void*)(&g_TsrTMCDataStru), (UINT32)sizeof(TsrTMCDataStruct)* TSR_MAX_SUM); + curIndex = curIndex + (UINT32)sizeof(TsrTMCDataStruct) * TSR_MAX_SUM; + + /*拷贝限速区段信息结构体*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(SpeedLimitSecInfo)* MAX_LINE_SEC_NUM, (const void*)(&gSpeedLimitSecData), (UINT32)sizeof(SpeedLimitSecInfo)* MAX_LINE_SEC_NUM); + curIndex = curIndex + (UINT32)sizeof(SpeedLimitSecInfo) * MAX_LINE_SEC_NUM; + /*拷贝进路数据结构体*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)RouteDataStru, ROUTE_SUM_MAX, (UINT16)sizeof(RouteDataStruct)); curIndex = curIndex + curResult; @@ -1159,7 +1184,6 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) debug_infor_printf((const)"2oo2 m_OcConvertedPtDataArr-CiSendBackDataTempStruSum CRC:%x, Length:%d\n", crcResult, crcLength); crcIndex = curIndex; -#if 1 /* 拷贝排序信息 */ curIndex = as_GetTransferData(pCiAppDataPointer, curIndex); @@ -1352,14 +1376,131 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiDrCmdDataStruct)* RECVCI_CMD_DATA_STRU_SUM_MAX), (void*)(&SendCiDrCmdDataStru), (UINT32)(sizeof(ToCiDrCmdDataStruct)* RECVCI_CMD_DATA_STRU_SUM_MAX)); curIndex = curIndex + (UINT32)(sizeof(ToCiDrCmdDataStruct) * RECVCI_CMD_DATA_STRU_SUM_MAX); - /*拷贝平台IO电源采集容忍数据*/ - (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(PlatGPIOToleranceDataStruct), (void*)(&gPlatDataGPIOTolercance), (UINT32)sizeof(PlatGPIOToleranceDataStruct)); - curIndex = curIndex + (UINT32)sizeof(PlatGPIOToleranceDataStruct); + /*拷贝SSKS闪灯稳灯继电器数据*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(SsksLightRelayDataStruct) * SSKS_LIGHT_RELAY_SUM_MAX), (void*)(&gSsksLightRelayData), (UINT32)(sizeof(SsksLightRelayDataStruct) * SSKS_LIGHT_RELAY_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(SsksLightRelayDataStruct) * SSKS_LIGHT_RELAY_SUM_MAX); + + /*拷贝联络线旁路继电器数据*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ConnectOverrideDataStru) * CONNECT_OVERRIDE_RELAY_SUM_MAX), (void*)(&gConnectOverrideData), (UINT32)(sizeof(ConnectOverrideDataStru) * CONNECT_OVERRIDE_RELAY_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(ConnectOverrideDataStru) * CONNECT_OVERRIDE_RELAY_SUM_MAX); + + /*拷贝接触网信息*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(OhlDataStruct)* OHL_MAX_NUM), (void*)(&OhlDataStru), (UINT32)(sizeof(OhlDataStruct)* OHL_MAX_NUM)); + curIndex = curIndex + (UINT32)(sizeof(OhlDataStruct) * OHL_MAX_NUM); + + /*拷贝全线区段封锁*/ + (void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT8),&g_AllSecFlockState, (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockMsgFst), (const void *)(&g_strAtsAllFlockMsgFst), (UINT32)sizeof(g_strAtsAllFlockMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockMsgFst); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockCfmFst), (const void *)(&g_strAtsAllFlockCfmFst), (UINT32)sizeof(g_strAtsAllFlockCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockCfmFst); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockMsgSnd), (const void *)(&g_strAtsAllFlockMsgSnd), (UINT32)sizeof(g_strAtsAllFlockMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockMsgSnd); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockCfmSnd), (const void *)(&g_strAtsAllFlockCfmSnd), (UINT32)sizeof(g_strAtsAllFlockCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockCfmSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsMsgCfmStru), (const void*)(&g_strSndAtsAllFlockCfmFst), (UINT32)sizeof(AtsMsgCfmStru)); + curIndex = curIndex + (UINT32)sizeof(AtsMsgCfmStru); + + /*拷贝ECS动态数据*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ECSDataStruct)* ECS_MAX_NUM), (const void*)(&ECSDataStru), (UINT32)(sizeof(ECSDataStruct)* ECS_MAX_NUM)); + curIndex = curIndex + (UINT32)(sizeof(ECSDataStruct) * ECS_MAX_NUM); /*计算一次CRC*/ + + /*二乘拷贝全线牵引加速度信息*/ + pCiAppDataPointer[curIndex] = gAllLineAccelerationState; + curIndex += 1U; + + pCiAppDataPointer[curIndex] = gAllLineAccelerationValue; + curIndex += 1U; + + /*二乘拷贝全线制动率信息*/ + pCiAppDataPointer[curIndex] = gAllLineBrakeRateState; + curIndex += 1U; + + pCiAppDataPointer[curIndex] = gAllLineBrakeRateValue; + curIndex += 1U; + + /*二乘拷贝区间牵引加速度信息*/ + pCiAppDataPointer[curIndex] = gLocalAreaAccelerationNum; + curIndex += 1U; + + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(AreaAccelerationInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX), (const void*)(gszLocalAreaAcceleration), (UINT32)(sizeof(AreaAccelerationInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(AreaAccelerationInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX); + + /*二乘拷贝区间制动率信息*/ + pCiAppDataPointer[curIndex] = gLocalAreaBrakeRateNum; + curIndex += 1U; + + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(AreaBrakeRateInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX), (const void*)(gszLocalAreaBrakeRate), (UINT32)(sizeof(AreaBrakeRateInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(AreaBrakeRateInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX); + + /*拷贝CESB封锁*/ + (void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT8), &g_CesbFlockState, (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + (void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT8), &g_ScxCesbData, (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + (void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT8), &g_ScxCesbCutData, (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + /*CESB网关信息*/ + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbMsgFst), (const void *)(&g_strAtsCesbMsgFst), (UINT32)sizeof(g_strAtsCesbMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbMsgFst); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbCfmFst), (const void *)(&g_strAtsCesbCfmFst), (UINT32)sizeof(g_strAtsCesbCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbCfmFst); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbMsgSnd), (const void *)(&g_strAtsCesbMsgSnd), (UINT32)sizeof(g_strAtsCesbMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbMsgSnd); + (void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbCfmSnd), (const void *)(&g_strAtsCesbCfmSnd), (UINT32)sizeof(g_strAtsCesbCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbCfmSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsMsgCfmStru), (const void*)(&g_strSndAtsCesbCfmFst), (UINT32)sizeof(AtsMsgCfmStru)); + curIndex = curIndex + (UINT32)sizeof(AtsMsgCfmStru); + + + + /*ATS网关下发的解封解锁信息*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_JieFengJieSuoMsgFst), (const void*)(&g_JieFengJieSuoMsgFst), (UINT32)sizeof(g_JieFengJieSuoMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_JieFengJieSuoMsgFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst), (const void*)(&g_strAtsJieFengJieSuoCfmFst), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_JieFengJieSuoMsgSnd), (const void*)(&g_JieFengJieSuoMsgSnd), (UINT32)sizeof(g_JieFengJieSuoMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_JieFengJieSuoMsgSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd), (const void*)(&g_strAtsJieFengJieSuoCfmSnd), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst), (const void*)(&g_SndAtsJieFengJieSuoCfmFst), (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst); + + /*ATS网关下发的道岔强转信息*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceMsgFst), (const void*)(&g_SwitchForceMsgFst), (UINT32)sizeof(g_SwitchForceMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceMsgFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceCfmFst), (const void*)(&g_SwitchForceCfmFst), (UINT32)sizeof(g_SwitchForceCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceCfmFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceMsgSnd), (const void*)(&g_SwitchForceMsgSnd), (UINT32)sizeof(g_SwitchForceMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceMsgSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceCfmSnd), (const void*)(&g_SwitchForceCfmSnd), (UINT32)sizeof(g_SwitchForceCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceCfmSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsSwitchForceCfmFst), (const void*)(&g_SndAtsSwitchForceCfmFst), (UINT32)sizeof(g_SndAtsSwitchForceCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsSwitchForceCfmFst); + + + /*ATS网关下发的计轴预复位信息*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetMsgFst), (const void*)(&g_PhyPreResetMsgFst), (UINT32)sizeof(g_PhyPreResetMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetMsgFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetCfmFst), (const void*)(&g_PhyPreResetCfmFst), (UINT32)sizeof(g_PhyPreResetCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetCfmFst); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetMsgSnd), (const void*)(&g_PhyPreResetMsgSnd), (UINT32)sizeof(g_PhyPreResetMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetMsgSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetCfmSnd), (const void*)(&g_PhyPreResetCfmSnd), (UINT32)sizeof(g_PhyPreResetCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetCfmSnd); + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst), (const void*)(&g_SndAtsPhyPreResetCfmFst), (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst); + + /*获取本控区RC和计轴通信中断设置ARB标志*/ + pCiAppDataPointer[curIndex] = aam_GetLocalAllAxisSecArbFlag(); + curIndex += 1U; + - /*计算一次CRC*/ crcLength = curIndex - crcIndex; crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); - debug_infor_printf((const)"2oo2 Deploy_GetTransferData-g_LocalSnowModel CRC:%x, Length:%d\n", crcResult, crcLength); + debug_infor_printf((const)"2oo2 Deploy_GetTransferData-g_SndAtsPhyPreResetCfmFst CRC:%x, Length:%d\n", crcResult, crcLength); } return curIndex; } @@ -1490,14 +1631,38 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len) (void)memcpy(&g_cTsrSureFlag, pCiAppDataPointer + curIndex, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*拷贝全线临时限速状态*/ + /*拷贝ZC全线临时限速状态*/ (void)memcpy(&g_AllLineTsrState, pCiAppDataPointer + curIndex, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*拷贝全线临时限速速度*/ + /*拷贝ZC全线临时限速速度*/ (void)memcpy(&g_AllLineTsrSpeed, pCiAppDataPointer + curIndex, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); + /*拷贝TMC全线限速状态*/ + (void)CommonMemCpy((void*)(&gCacheAllSpeedState), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝TMC全线限速速度*/ + (void)CommonMemCpy((void*)(&gCacheAllSpeedNum), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝台风限速信息*/ + (void)CommonMemCpy((void*)(&gTyphSpeedInfo), (UINT32)sizeof(TyphoonSpeedDataStruct), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(TyphoonSpeedDataStruct)); + curIndex = curIndex + (UINT32)sizeof(TyphoonSpeedDataStruct); + + /*拷贝临时限速数量*/ + (void)CommonMemCpy((void*)(&g_TsrTMCSum), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + + /*拷贝临时限速数据结构体*/ + (void)CommonMemCpy((void*)(g_TsrTMCDataStru), (UINT32)(sizeof(TsrTMCDataStruct)* TSR_MAX_SUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TsrTMCDataStruct)* TSR_MAX_SUM)); + curIndex = curIndex + (UINT32)(sizeof(TsrTMCDataStruct) * TSR_MAX_SUM); + + /*拷贝限速区段数据结构体*/ + (void)CommonMemCpy((void*)(gSpeedLimitSecData), (UINT32)(sizeof(SpeedLimitSecInfo)* MAX_LINE_SEC_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(SpeedLimitSecInfo)* MAX_LINE_SEC_NUM)); + curIndex = curIndex + (UINT32)(sizeof(SpeedLimitSecInfo) * MAX_LINE_SEC_NUM); + /*拷贝进路数据结构体*/ curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, (void *)&RouteDataStru[0], ROUTE_SUM_MAX, (UINT16)sizeof(RouteDataStruct)); curIndex = curIndex + curResult; @@ -1797,7 +1962,6 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len) (void)CommonMemCpy((const void*)(gSzLocalAreaIteCutId), (UINT32)(sizeof(UINT16) * ALL_AREA_SNOW_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(UINT16) * ALL_AREA_SNOW_SUM_MAX)); curIndex = curIndex + (UINT32)(sizeof(UINT16) * ALL_AREA_SNOW_SUM_MAX); -#if 1 /* 拷贝排序信息 */ curIndex = as_SetTransferData(pCiAppDataPointer, curIndex); @@ -1909,7 +2073,6 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len) (void)CommonMemCpy((void*)(LeuToCiDataStru), (UINT32)sizeof(LeuToCiDataStru), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(LeuToCiDataStru)); curIndex = curIndex + (UINT32)sizeof(LeuToCiDataStru); -#endif /*拷贝停止运营信息*/ curIndex = Deploy_SetTransferData(pCiAppDataPointer, curIndex); @@ -1980,10 +2143,127 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len) (void)CommonMemCpy((void*)(&SendCiDrCmdDataStru), (UINT32)(sizeof(ToCiDrCmdDataStruct)* RECVCI_CMD_DATA_STRU_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiDrCmdDataStruct)* RECVCI_CMD_DATA_STRU_SUM_MAX)); curIndex = curIndex + (UINT32)(sizeof(ToCiDrCmdDataStruct) * RECVCI_CMD_DATA_STRU_SUM_MAX); - /*拷贝平台IO电源采集容忍数据*/ - (void)CommonMemCpy((void*)(&gPlatDataGPIOTolercance), (UINT32)sizeof(PlatGPIOToleranceDataStruct), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(PlatGPIOToleranceDataStruct)); - curIndex = curIndex + (UINT32)sizeof(PlatGPIOToleranceDataStruct); -#endif + /*同步SSKS闪灯稳灯继电器数据*/ + (void)CommonMemCpy((void*)(&gSsksLightRelayData), (UINT32)(sizeof(SsksLightRelayDataStruct)* SSKS_LIGHT_RELAY_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(SsksLightRelayDataStruct)* SSKS_LIGHT_RELAY_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(SsksLightRelayDataStruct) * SSKS_LIGHT_RELAY_SUM_MAX); + + /*拷贝联络线旁路继电器数据*/ + (void)CommonMemCpy((void*)(&gConnectOverrideData), (UINT32)(sizeof(ConnectOverrideDataStru)* CONNECT_OVERRIDE_RELAY_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ConnectOverrideDataStru)* CONNECT_OVERRIDE_RELAY_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(ConnectOverrideDataStru) * CONNECT_OVERRIDE_RELAY_SUM_MAX); + + /*拷贝接触网信息*/ + (void)CommonMemCpy((void*)(&OhlDataStru), (UINT32)(sizeof(OhlDataStruct)* OHL_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(OhlDataStruct)* OHL_MAX_NUM)); + curIndex = curIndex + (UINT32)(sizeof(OhlDataStruct) * OHL_MAX_NUM); + /*设置全线区段封锁标志*/ + g_AllSecFlockState = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + /*设置全线区段封锁信息*/ + (void)CommonMemCpy((void *)(&g_strAtsAllFlockMsgFst), (UINT32)sizeof(g_strAtsAllFlockMsgFst), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockMsgFst); + (void)CommonMemCpy((void *)(&g_strAtsAllFlockCfmFst), (UINT32)sizeof(g_strAtsAllFlockCfmFst), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockCfmFst); + (void)CommonMemCpy((void *)(&g_strAtsAllFlockMsgSnd), (UINT32)sizeof(g_strAtsAllFlockMsgSnd), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockMsgSnd); + (void)CommonMemCpy((void *)(&g_strAtsAllFlockCfmSnd), (UINT32)sizeof(g_strAtsAllFlockCfmSnd), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsAllFlockCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsAllFlockCfmSnd); + (void)CommonMemCpy((void*)(&g_strSndAtsAllFlockCfmFst), (UINT32)sizeof(AtsMsgCfmStru), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsMsgCfmStru)); + curIndex = curIndex + (UINT32)sizeof(AtsMsgCfmStru); + + /*同步ECS动态数据*/ + (void)CommonMemCpy((void*)(&ECSDataStru), (UINT32)(sizeof(ECSDataStruct)* ECS_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ECSDataStruct)* ECS_MAX_NUM)); + curIndex = curIndex + (UINT32)(sizeof(ECSDataStruct) * ECS_MAX_NUM); + + /*二乘同步全线牵引加速度信息*/ + gAllLineAccelerationState = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + gAllLineAccelerationValue = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + /*二乘同步全线制动率信息*/ + gAllLineBrakeRateState = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + gAllLineBrakeRateValue = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + + /*二乘同步区间牵引加速度信息*/ + gLocalAreaAccelerationNum = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + (void)CommonMemCpy((void*)(gszLocalAreaAcceleration), (UINT32)(sizeof(AreaAccelerationInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(AreaAccelerationInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(AreaAccelerationInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX); + + /*二乘同步区间制动率信息*/ + gLocalAreaBrakeRateNum = pCiAppDataPointer[curIndex]; + curIndex += 1U; + + (void)CommonMemCpy((void*)(gszLocalAreaBrakeRate), (UINT32)(sizeof(AreaBrakeRateInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(AreaBrakeRateInfoStruct)* LOCAL_AREA_SNOW_SUM_MAX)); + curIndex = curIndex + (UINT32)(sizeof(AreaBrakeRateInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX); + + /*设置CESB状态标志*/ + g_CesbFlockState = pCiAppDataPointer[curIndex]; + curIndex += 1U; + g_ScxCesbData = pCiAppDataPointer[curIndex]; + curIndex += 1U; + g_ScxCesbCutData = pCiAppDataPointer[curIndex]; + curIndex += 1U; + /*同步CESB网关消息*/ + (void)CommonMemCpy((void *)(&g_strAtsCesbMsgFst), (UINT32)sizeof(g_strAtsCesbMsgFst), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbMsgFst); + (void)CommonMemCpy((void *)(&g_strAtsCesbCfmFst), (UINT32)sizeof(g_strAtsCesbCfmFst), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbCfmFst); + (void)CommonMemCpy((void *)(&g_strAtsCesbMsgSnd), (UINT32)sizeof(g_strAtsCesbMsgSnd), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbMsgSnd); + (void)CommonMemCpy((void *)(&g_strAtsCesbCfmSnd), (UINT32)sizeof(g_strAtsCesbCfmSnd), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsCesbCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsCesbCfmSnd); + (void)CommonMemCpy((void*)(&g_strSndAtsCesbCfmFst), (UINT32)sizeof(AtsMsgCfmStru), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsMsgCfmStru)); + curIndex = curIndex + (UINT32)sizeof(AtsMsgCfmStru); + + + /*同步ATS网关全站解封解锁消息*/ + (void)CommonMemCpy((void*)(&g_JieFengJieSuoMsgFst), (UINT32)sizeof(g_JieFengJieSuoMsgFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_JieFengJieSuoMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_JieFengJieSuoMsgFst); + (void)CommonMemCpy((void*)(&g_strAtsJieFengJieSuoCfmFst), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsJieFengJieSuoCfmFst); + (void)CommonMemCpy((void*)(&g_JieFengJieSuoMsgSnd), (UINT32)sizeof(g_JieFengJieSuoMsgSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_JieFengJieSuoMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_JieFengJieSuoMsgSnd); + (void)CommonMemCpy((void*)(&g_strAtsJieFengJieSuoCfmSnd), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_strAtsJieFengJieSuoCfmSnd); + (void)CommonMemCpy((void*)(&g_SndAtsJieFengJieSuoCfmFst), (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst); + + + /*同步ATS网关道岔强转消息*/ + (void)CommonMemCpy((void*)(&g_SwitchForceMsgFst), (UINT32)sizeof(g_SwitchForceMsgFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceMsgFst); + (void)CommonMemCpy((void*)(&g_SwitchForceCfmFst), (UINT32)sizeof(g_SwitchForceCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceCfmFst); + (void)CommonMemCpy((void*)(&g_SwitchForceMsgSnd), (UINT32)sizeof(g_SwitchForceMsgSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceMsgSnd); + (void)CommonMemCpy((void*)(&g_SwitchForceCfmSnd), (UINT32)sizeof(g_SwitchForceCfmSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SwitchForceCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_SwitchForceCfmSnd); + (void)CommonMemCpy((void*)(&g_SndAtsSwitchForceCfmFst), (UINT32)sizeof(g_SndAtsSwitchForceCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsSwitchForceCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsSwitchForceCfmFst); + + /*同步ATS网关计轴预复位消息*/ + (void)CommonMemCpy((void*)(&g_PhyPreResetMsgFst), (UINT32)sizeof(g_PhyPreResetMsgFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetMsgFst)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetMsgFst); + (void)CommonMemCpy((void*)(&g_PhyPreResetCfmFst), (UINT32)sizeof(g_PhyPreResetCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetCfmFst); + (void)CommonMemCpy((void*)(&g_PhyPreResetMsgSnd), (UINT32)sizeof(g_PhyPreResetMsgSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetMsgSnd)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetMsgSnd); + (void)CommonMemCpy((void*)(&g_PhyPreResetCfmSnd), (UINT32)sizeof(g_PhyPreResetCfmSnd), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_PhyPreResetCfmSnd)); + curIndex = curIndex + (UINT32)sizeof(g_PhyPreResetCfmSnd); + (void)CommonMemCpy((void*)(&g_SndAtsPhyPreResetCfmFst), (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst)); + curIndex = curIndex + (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst); + + /*设置本控区RC和计轴通信中断设置ARB标志*/ + aam_SetLocalAllAxisSecArbFlag(pCiAppDataPointer[curIndex]); + curIndex += 1U; + rtn = 1u; } diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h index 3460d73..eb1f9d2 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h +++ b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h @@ -56,6 +56,8 @@ #include "../Route/LogicalRouteDataManage.h" #include "../Route/LongRouteDataManage.h" #include "../ReverseCut/ReverseCutDataManage.h" +#include "../SsksLightRelay/SsksLightRelayDataManage.h" +#include "AxisAssertManageAPI.h" #ifdef __cplusplus extern "C" { diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c index 07c4af2..ce295bf 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c +++ b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c @@ -1074,11 +1074,10 @@ UINT8 InnetChannelIODataRecv(UINT8* ioData) /* * 功能描述: 将队列中的数据传输出去 -* 参数说明: UINT8* thisString, 本周期数据 -* 返回值 : 0: 打印失败 -* 1: 打印成功 +* 参数说明: 无 +* 返回值 : 无 */ -void SendOut_LogBuff() +void SendOut_LogBuff(void) { #if (kPLATFORM==kVXWORKS) diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h index 5d6702a..3e6d639 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h +++ b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h @@ -374,11 +374,10 @@ QueueStruct* Get2oo2CiToAxisDataQueue(void); /* * 功能描述: 将队列中的数据传输出去 -* 参数说明: UINT8* thisString, 本周期数据 -* 返回值 : 0: 打印失败 -* 1: 打印成功 +* 参数说明: 无 +* 返回值 : 无 */ -void SendOut_LogBuff(); +void SendOut_LogBuff(void); diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h index ff8d822..d07b02c 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h @@ -48,6 +48,10 @@ #define AAM_COMM_BAD_ARB_YES (0x55U) /*计轴系统通信中断ARB有效*/ #define AAM_COMM_BAD_ARB_NO (0xAAU) /*计轴系统通信中断ARB无效*/ +#define LOCAL_ALL_AXIS_SEC_ARB_DEFAULT ((UINT8)0xFFU) /*本控区RC和计轴通信中断设置ARB标志-默认*/ +#define LOCAL_ALL_AXIS_SEC_ARB_YES ((UINT8)0x55U) /*本控区RC和计轴通信中断设置ARB标志-有效*/ +#define LOCAL_ALL_AXIS_SEC_ARB_NO ((UINT8)0xAAU) /*本控区RC和计轴通信中断设置ARB标志-无效*/ + /** 定义计轴诊断信息结构体 */ typedef struct { @@ -60,7 +64,6 @@ typedef struct UINT8 tailEnterTrainCnt; /* 进入的列车尾数量 */ UINT16 tailEnterTrainId[SECTION_REL_ENVELOPE_SUM_MAX]; /* 列车尾进入的计轴 */ UINT8 redunOverCanArb; /*冗余结束后能否判为ARB标志 空闲时设置为0x55*/ - UINT8 AxisCommBadArbFlag; /*计轴通信中断可判ARB有效标志:0x55-有效,0xAA-无效*/ }AxisAsserStruct; diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c index 7537494..0413d8e 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c @@ -2,6 +2,7 @@ static AxisAsserStruct gs_AxisAssert[AXIS_SECTION_SUM_MAX] = {0u}; /** 计轴故障诊断数据缓存 */ static UINT8 gs_InitEndlineFlag = AAM_END_LINE_UNINIT; /* 尽头线ARB特殊处理标志 */ +UINT8 gLocalAllAxisSecArbFlag = LOCAL_ALL_AXIS_SEC_ARB_DEFAULT; /*本控区RC和计轴通信中断设置ARB标志-默认*/ /** @@ -540,54 +541,4 @@ void aam_SetAxisRedunCanArbFlag(const UINT16 acIndex, const UINT8 redunOverArbFl { ; /*不做处理*/ } -} - -/* -* 功能描述:设置指定ID计轴区段计轴通信中断可判ARB标志 -* 参数说明:const UINT16 acIndex 计轴索引 -* const UINT8 cCommBadArbFlag 计轴通信中断可判ARB标志 -* 返 回 值:无 -* Created By LQ 2025.02.24 -*/ -void aam_SetAxisCommBadArbFlag(const UINT16 acIndex, const UINT8 cCommBadArbFlag) -{ - - if ((0U != acIndex) && (AXIS_SECTION_SUM_MAX > acIndex)) - { - if ((AAM_COMM_BAD_ARB_YES == cCommBadArbFlag) || (AAM_COMM_BAD_ARB_NO == cCommBadArbFlag)) - { - gs_AxisAssert[acIndex].AxisCommBadArbFlag = cCommBadArbFlag; - } - else - { - ; /*不做处理*/ - } - } - else - { - ; /*不做处理*/ - } -} - -/* -* 功能描述:获取指定ID计轴区段计轴通信中断可判ARB标志 -* 参数说明:const UINT16 acIndex 计轴索引 -* 返 回 值:0x55 有效 -* 0xAA 无效 -* Created By LQ 2025.02.24 -*/ -UINT8 aam_GetAxisCommBadArbFlag(const UINT16 acIndex) -{ - UINT8 ret = AAM_COMM_BAD_ARB_NO; - - if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX)) - { - ret = gs_AxisAssert[acIndex].AxisCommBadArbFlag; - } - else - { - ; - } - - return ret; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.h b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.h index 653c2cb..f213e95 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.h +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.h @@ -7,6 +7,8 @@ #include "AxisAssertDefine.h" #include "ELMDataPrepare.h" +extern UINT8 gLocalAllAxisSecArbFlag; /*本控区RC和计轴通信中断设置ARB标志-默认*/ + /** * @brief 初始化计轴诊断信息 * @param[in] @@ -227,22 +229,4 @@ UINT8 aam_GetAxisRedunCanArbFlag(const UINT16 acIndex); */ void aam_SetAxisRedunCanArbFlag(const UINT16 acIndex, const UINT8 redunOverArbFlag); -/* -* 功能描述:设置指定ID计轴区段计轴通信中断可判ARB标志 -* 参数说明:const UINT16 acIndex 计轴索引 -* const UINT8 cCommBadArbFlag 计轴通信中断可判ARB标志 -* 返 回 值:无 -* Created By LQ 2025.02.24 -*/ -void aam_SetAxisCommBadArbFlag(const UINT16 acIndex, const UINT8 cCommBadArbFlag); - -/* -* 功能描述:获取指定ID计轴区段计轴通信中断可判ARB标志 -* 参数说明:const UINT16 acIndex 计轴索引 -* 返 回 值:0x55 有效 -* 0xAA 无效 -* Created By LQ 2025.02.24 -*/ -UINT8 aam_GetAxisCommBadArbFlag(const UINT16 acIndex); - #endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c index 0676797..de18cd4 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c @@ -4,6 +4,7 @@ #include "EnvelopeManageAPI.h" #include "dsuEmapDefine.h" #include "DeviceDataManage.h" +#include "ParsePackAxleData.h" /*================================静态函数声明区==============================*/ static UINT8 aam_CreatTempUKTEnvelope(UINT16 acID, UINT8 Dir ,EnvelopeStruct *pEnvelope); /* 创建一个临时的UKT包络 */ @@ -316,7 +317,6 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) UINT8 chSwitch = 0U; UINT32 dwArbCheckDistance = 0U; /*RC16.0: 系统配置ARB区段向外检查距离*/ UINT8 chRedunArbFlag = REDUN_OVER_ARB_NO; /*判断冗余计时结束后可否ARB标志*/ - UINT8 cAxisCommBadArbFlag = AAM_COMM_BAD_ARB_NO; UINT8 chPhyTrainCheck = CI_SUCCESS; UINT8 cAcCbtcAttr = 0U; /*计轴区段CBTC区域属性*/ @@ -428,10 +428,9 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) tmpRedunTime = aam_GetRedunTime(acIndex); tmppassTrainType = aam_GetPassTrainFlag(acIndex); tmpACStatus = aam_GetAxisStatus(acIndex); - cAxisCommBadArbFlag = aam_GetAxisCommBadArbFlag(acIndex); /*获取计轴区段计轴系统通信中断ARB标志*/ /** ARB判断 */ - if ((AAM_CT_PASS == tmppassTrainType) || (AAM_COMM_BAD_ARB_YES == cAxisCommBadArbFlag)) + if (AAM_CT_PASS == tmppassTrainType) { if (AAM_STATUS_ARB == tmpACStatus) { @@ -820,135 +819,45 @@ UINT8 aam_Init(void) * @param[in] * @param[out] * @return - * @note + * @note edit cgh 20260310 */ void aam_MainProcess(void) { - /*- 局部变量定义*/ - UINT8 funRtn = ELM_BELONG_OWNER; - UINT8 acStatus = ELM_AC_OCC; - UINT16 acCnt = 0u; - UINT16 cycle = 0u; - UINT8 OCId = 0u; - UINT16 acIndex = 0u; - const UINT16* pACIdBuff = NULL; - UINT32 errorCode = 0u; - UINT8 acRelEnvelopeCnt = 0u; - EnvelopeStruct envelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = {0u}; - UINT8 chPreAcStatus = ELM_AC_OCC; - UINT8 ii = 0U; - UINT8 chCTcheck = CI_ERROR; + UINT8 chPreLocalAllAxisSecArbFlag = 0U; + UINT8 chCurLocalAllAxisSecArbFlag = 0U; - /** 获取计轴区段信息 */ - acCnt = aam_PrepareACBuffIndexs(&pACIdBuff); + /** 尽头线ARB特殊处理*/ + aam_InitEndLinePassFlag(); - if (NULL == pACIdBuff) + chPreLocalAllAxisSecArbFlag = aam_GetLocalAllAxisSecArbFlag(); + + /*计轴子系统通信中断ARB特殊处理*/ + aam_AxisCommBadArbPro(); + + chCurLocalAllAxisSecArbFlag = aam_GetLocalAllAxisSecArbFlag(); + AAM_LOG(AAM_LOG_FATAL, "info:chPreLocalAllAxisSecArbFlag:%d.chCurLocalAllAxisSecArbFlag:%d.\n", chPreLocalAllAxisSecArbFlag,chCurLocalAllAxisSecArbFlag); + + /*当前本控区RC和计轴通信中断设置ARB标志有效*/ + if (LOCAL_ALL_AXIS_SEC_ARB_YES == chCurLocalAllAxisSecArbFlag) { - ASSER_ERROR(NULL == pACIdBuff,errorCode,0x80000000u); - } - else - { - /** 尽头线ARB特殊处理*/ - aam_InitEndLinePassFlag(); - - /*计轴子系统通信中断ARB特殊处理功能在RC20.0首版二回先注释掉(恢复时间待定)——By LQ 2025.05.07*/ -#if 0 - /*计轴子系统通信中断ARB特殊处理*/ - aam_AxisCommBadArbPro(); -#endif - for (cycle = 0u; cycle < acCnt; cycle++) + /*之前本控区RC和计轴通信中断设置ARB标志有效或默认*/ + if ((LOCAL_ALL_AXIS_SEC_ARB_YES == chPreLocalAllAxisSecArbFlag) + || (LOCAL_ALL_AXIS_SEC_ARB_DEFAULT == chPreLocalAllAxisSecArbFlag)) { - /** 判断计轴区段是否属于本OC */ - funRtn = aam_PrepareACIsSelf(pACIdBuff[cycle], &OCId); - - if (ELM_BELONG_OWNER == funRtn) - { - /** 获取计轴状态 */ - acStatus = aam_PrepareACStatus(pACIdBuff[cycle]); - - /** 获取计轴关联的包络数量 */ - acRelEnvelopeCnt = elm_GetEnvelopeInAC(pACIdBuff[cycle], envelopeInfo); - - /** 获取计轴数组索引 */ - acIndex = aam_PrepareACIndex(pACIdBuff[cycle]); - ASSERT_BREAK(UINT16_MAX == acIndex, errorCode, 0x40000000u); - - if ((ELM_AC_OCC == acStatus) && (0u != acRelEnvelopeCnt)) - { - chPreAcStatus = aam_GetAxisStatus(acIndex); - chCTcheck = CI_SUCCESS; - for (ii = 0U; ii < acRelEnvelopeCnt; ii++) - { - if (((TYPE_UCT_ENVELOPE == envelopeInfo[ii].envelopeType) || (TYPE_UKT_ENVELOPE == envelopeInfo[ii].envelopeType)) - ||(0U != envelopeInfo[ii].tailTrainID) || (0U != envelopeInfo[ii].headTrainID)) - { - /*包络存在隐藏车或UCT 或前后任意端存在可疑*/ - chCTcheck = CI_ERROR; - break; - } - } - if ((AAM_STATUS_ARB != chPreAcStatus) || (CI_ERROR == chCTcheck)) - { - /* 说明非ARB区段有车占用,或占用包络非CT 或CT包络可疑 清除之前的冗余计时位 */ - funRtn = aam_ClearRedunTime(acIndex); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u); - aam_SetAxisStatus(acIndex, AAM_STATUS_OCC); - } - else - { - /*ARB区段 在无前后端可疑的CT列车驶入该计轴区段,计轴区段维持ARB状态*/ - funRtn = aam_AxisErrorJudge(pACIdBuff[cycle], acIndex); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u); - } - } - else if ((ELM_AC_OCC == acStatus) && (0u == acRelEnvelopeCnt)) - { - /** 说明占用无车,进行ARB判断*/ - funRtn = aam_AxisErrorJudge(pACIdBuff[cycle], acIndex); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u); - } - else - { - /** 清除之前的冗余计时位,设置计轴空闲 */ - funRtn = aam_ClearRedunTime(acIndex); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x08000000u); - aam_SetAxisStatus(acIndex, AAM_STATUS_FREE_OR_REDUN); - aam_SetAxisCommBadArbFlag(acIndex, AAM_COMM_BAD_ARB_NO); /*计轴空闲,重置计轴通信中断ARB标志无效*/ - } - } - else - { - /** 不属于本OC,不处理 */ - } - - /** 判断是否满足跳出条件 */ - ASSERT_BREAK(0u != errorCode, errorCode, 0x00000000u); - } - } - - /** 处理错误 */ - if (0u != errorCode) - { - /** 处理错误,直接重新初始化*/ - funRtn = aam_Init(); - - if (CI_ERROR == funRtn) - { - /** 宕机处理 */ - SetPlatOverFlag(); - ASSER_ERROR(NULL == pACIdBuff,errorCode,0x80000000u); - AAM_LOG_LOC(AAM_LOG_ERROR,"errno:0x%08x info:Axis Assert Process error.",errorCode); + /*设置本控区计轴管辖的CBTC属性区段ARB,非CBTC属性区段UT*/ + SetLocalAllAxisSecState(AAM_STATUS_ARB); } else { - /** 处理正确,重新初始化后继续执行 */ + /*之前无效,现在有效,理论不可达,仅为异常防护,既有逻辑*/ + aam_NormalProcess(); } - - AAM_LOG_LOC(AAM_LOG_ERROR,"errno:0x%08x info:Axis Assert Process error.",errorCode); } + /*当前本控区RC和计轴通信中断设置ARB标志无效或者默认*/ else { - /** 处理无问题*/ + /*计轴故障诊断*/ + aam_NormalProcess(); } } @@ -1689,69 +1598,65 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID) * 函数功能:计轴子系统通信中断ARB处理 * 输入参数:无 * 返回值:无 -* Create By LQ 2025.02.23 +* by cgh 20260309 */ void aam_AxisCommBadArbPro(void) { - UINT8 cFuncRetVal = CI_ERROR; - UINT8 cLocalWorkMode = RC_WORK_MODE_CI; - UINT8 cFuncSwitch = FUNC_SWITCH_OFF; - UINT8 cLocalCiType = 0U; - UINT8 cLocalRcLinkLineAttr = 0U; /*联络线属性*/ - UINT8 cCommAxisNum = 0U; /*具有通信关系的计轴子系统数量*/ - UINT8* pAxisSysIdBuf = NULL; - UINT8 cCommState = TRANSMIT_2OO2_STATE_BAD; /*通信状态*/ - - cLocalWorkMode = GetLocalRcWorkMode(); - cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_AXIS_COMM_BAD_KEEP_CBTC); - if ((RC_WORK_MODE_TIOC == cLocalWorkMode) && (FUNC_SWITCH_ON == cFuncSwitch)) - { - cLocalCiType = GetLocalCiType(); - cLocalRcLinkLineAttr = GetLocalRcLinkLineAttr(); - if (((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType)) && (RC_LINK_LINE_NO == cLocalRcLinkLineAttr)) + UINT8 chFunctionSwitch = 0U; /*RC和计轴通信中断是否影响CBTC列车运行功能开关*/ + UINT8 chLocalCiType = 0U; + UINT8 chDeviceSum = 0U; /*获取通信Axis设备总数*/ + UINT8* szDeviceIdBuf = NULL; /*获取通信Axis设备ID数组*/ + UINT8 chCommState = 0U; /*与计轴通信状态*/ + UINT8 chFuncRetVal = 0U; /*检查结果*/ + UINT8 chLocalAllAxisSecArbFlag = 0U; /*本控区RC与计轴通信中断ARB标志*/ + + chFunctionSwitch = GetCiFunctionSwitchConfig(FUNC_AXIS_COMM_BAD_KEEP_CBTC); /*RC和计轴通信中断是否影响CBTC列车运行功能开关*/ + chLocalCiType = GetLocalCiType(); + chDeviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); /*获取通信Axis设备总数*/ + szDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*获取通信Axis设备ID数组*/ + chLocalAllAxisSecArbFlag = aam_GetLocalAllAxisSecArbFlag(); + + /*正线RC支持计轴通信中断不影响CBTC列车运行且当前联锁仅和一个计轴通信,当计轴和RC通信中断或当前本控区RC与计轴通信中断ARB标志有效,需要监督RC设置本控区RC和计轴通信中断设置ARB标志*/ + if ((FUNC_SWITCH_ON == chFunctionSwitch) && (1U == chDeviceSum) && (CI_TYPE_ZX == chLocalCiType)) + { + chFuncRetVal = aam_AxisSecIdleCheck(); + /*集合C对应的所有计轴区段采集状态均为空闲或采集状态为非空闲但区段为ARB且该区段上有CT包络且前后筛选通过且包络对应的列车级别均为CBTC且该列车不为休眠车*/ + if (CI_SUCCESS == chFuncRetVal) { - cCommAxisNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); - pAxisSysIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); - - if ((1U == cCommAxisNum) && (NULL != pAxisSysIdBuf)) + /*本控区RC与计轴通信中断ARB标志设置为默认*/ + aam_SetLocalAllAxisSecArbFlag(LOCAL_ALL_AXIS_SEC_ARB_DEFAULT); + debug_infor_printf((const)"\naam_AxisSecIdleCheck SUCCESS\n"); + } + else + { + debug_infor_printf((const)"\naam_AxisSecIdleCheck ERR\n"); + chCommState = GetCiTransmitState(CI_SYSTEM_TYPE_AXIS, szDeviceIdBuf[0U]); + debug_infor_printf((const)"RC-AXIS chCommState:%d\n", chCommState); + /*当计轴和RC通信中断或当前本控区RC与计轴通信中断ARB标志有效,需要监督RC设置本控区RC和计轴通信中断设置ARB标志*/ + if ((TRANSMIT_STATE_BAD == chCommState) || (LOCAL_ALL_AXIS_SEC_ARB_YES == chLocalAllAxisSecArbFlag)) { - cCommState = GetCiTransmitState(CI_SYSTEM_TYPE_AXIS, pAxisSysIdBuf[0U]); - if (TRANSMIT_STATE_BAD == cCommState) + /*1.列车条件检查:无UT/UCT/可疑CT,无休眠车*/ + chFuncRetVal = aam_AxisCommBadArbTrainCheck(); + + if ((CI_SUCCESS == chFuncRetVal) && (LOCAL_ALL_AXIS_SEC_ARB_NO != chLocalAllAxisSecArbFlag)) { - /*1.列车条件检查:无UT/UCT/可疑CT,无休眠车,列车NVRAM标志无效*/ - cFuncRetVal = aam_AxisCommBadArbTrainCheck(); - - /*2.区段条件检查:本控区边界计轴区段ARB防护范围内、ARB防护时间内没出现过故障车,相邻控区边界计轴区段未ARB*/ - cFuncRetVal &= aam_AxisCommBadArbSecCheck(); - - if (CI_SUCCESS == cFuncRetVal) - { - SetRcAxleArb(); /*设置集中区计轴区段ARB*/ - debug_infor_printf((const)"aam_AxisCommBadArbPro Success\n"); - } - else - { - ; - } + aam_SetLocalAllAxisSecArbFlag(LOCAL_ALL_AXIS_SEC_ARB_YES); } else { - /*通信正常,不处理*/ + aam_SetLocalAllAxisSecArbFlag(LOCAL_ALL_AXIS_SEC_ARB_NO); } } else { - /*存在多个通信的计轴子系统,不处理*/ + ; /*维持原标志*/ } - } - else - { - /*场段或入口RC,不处理*/ - } + } } else { - /*非RC模式或“计轴系统通信中断后是否能够维持CBTC运行”开关关闭,不处理*/ + /*本项目不具备该功能,不做额外处理*/ + ; } } @@ -1760,93 +1665,272 @@ void aam_AxisCommBadArbPro(void) * 输入参数:无 * 返回值:CI_SUCCESS 1 成功 * CI_ERROR 0 失败 -* Create By LQ 2025.02.23 +* by cgh 20260309 */ UINT8 aam_AxisCommBadArbTrainCheck(void) { - UINT8 cRetVal = CI_ERROR; - UINT16 wAcNum = 0u; /*OC范围内所有的计轴区段数量*/ - const UINT16* pACIdbuff = NULL; /** 计轴ID数值缓存 */ - UINT8 cLocalCiId = 0U; - UINT16 ii = 0U; - UINT8 cAcBelongCiId = 0U; - UINT8 cEnvelopeNum = SECTION_REL_ENVELOPE_SUM_MAX; /*包络数量*/ - UINT16 szEnvelopeID[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*包络ID*/ - UINT8 jj = 0U; - const EnvelopeStruct* pELMInfo = NULL; /*包络数据*/ - UINT8 cSleepState = TRAIN_SLEEP_YES; /*列车休眠状态*/ - UINT8 cNvramFlag = TRAIN_NVRAM_POS_FLAG_YES; /*列车NVRAM标志*/ + UINT8 chRetVal = CI_ERROR; + AxisSecClassDataStruct axisSecClassData = { 0U }; /*计轴分类数据*/ + UINT8 ii = 0U; /*区段索引*/ + UINT8 chLocalAllAxisSecArbFlag = 0U; /*本控区RC和计轴通信中断设置ARB标志*/ - wAcNum = elm_PrepareACBuffIndexs(&pACIdbuff); /*获取计轴区段数量及ID*/ - cLocalCiId = GetSystemParaLocalCiId(); - if ((0U < wAcNum) && (AXIS_SECTION_SUM_MAX > wAcNum ) && (NULL != pACIdbuff) && (0U != cLocalCiId)) + chLocalAllAxisSecArbFlag = aam_GetLocalAllAxisSecArbFlag(); + axisSecClassData = GetAxisSecClassData(); /*计轴分类数据*/ + /*本控区RC和计轴通信中断设置ARB标志为默认*/ + if (LOCAL_ALL_AXIS_SEC_ARB_DEFAULT == chLocalAllAxisSecArbFlag) { - cRetVal = CI_SUCCESS; - for (ii = 0U; ii < wAcNum; ii++) + /*STEP1:检查集合A的计轴区段*/ + for (ii = 0U; ii < axisSecClassData.chElementANum; ii++) { - cAcBelongCiId = (UINT8)GetAxisBelongTioc(pACIdbuff[ii]); - if (cLocalCiId == cAcBelongCiId) + chRetVal = aam_AxisSecEnvelopeCheck(axisSecClassData.szElementASecId[ii]); + + /*检查失败*/ + if (CI_SUCCESS != chRetVal) { - cEnvelopeNum = elm_GetEnvelopeIDsInAC(pACIdbuff[ii], szEnvelopeID); - if (0U == cEnvelopeNum) + ; /*失败*/ + } + else + { + /*STEP2:检查间接相邻的具备联络线属性的计轴区段*/ + chRetVal = aam_AdjacentAcTrainCheck(axisSecClassData.szElementASecId[ii]); + /*检查失败*/ + if (CI_SUCCESS != chRetVal) { - /*无包络,检查通过*/ + ; /*失败*/ } - else if(SECTION_REL_ENVELOPE_SUM_MAX > cEnvelopeNum) + else { - for (jj = 0U; jj < cEnvelopeNum; jj++) + ; /*继续检查*/ + } + + } + + if (CI_SUCCESS != chRetVal) + { + break; + } + else + { + ; /*继续检查*/ + } + } + } + else if(AXIS_SEC_CBTC_PROPERTY_YES == chLocalAllAxisSecArbFlag) + { + /*STEP1:检查集合B的计轴区段*/ + for (ii = 0U; ii < axisSecClassData.chElementBNum; ii++) + { + chRetVal = aam_AxisSecEnvelopeCheck(axisSecClassData.szElementBSecId[ii]); + + /*检查失败*/ + if (CI_SUCCESS != chRetVal) + { + ; /*失败*/ + } + else + { + /*STEP2:检查间接相邻的具备联络线属性的计轴区段*/ + chRetVal = aam_AdjacentAcTrainCheck(axisSecClassData.szElementBSecId[ii]); + /*检查失败*/ + if (CI_SUCCESS != chRetVal) + { + ; /*失败*/ + } + else + { + ; /*继续检查*/ + } + + } + + if (CI_SUCCESS != chRetVal) + { + break; + } + else + { + ; /*继续检查*/ + } + } + } + else + { + ; /*默认,维持不变*/ + } + + return chRetVal; +} + +/** +* 函数功能:相邻计轴区段列车条件检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 成功 +* CI_ERROR 0 失败 +* by cgh 20260309 +*/ +UINT8 aam_AdjacentAcTrainCheck(UINT16 wAxisSecId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chAcSameCnt = 0U; /*计轴前方计轴区段数目*/ + UINT16 szAcSameID[AC_MAXCNT_IN_SWITCH] = { 0U }; /*计轴前方计轴区段数组*/ + UINT8 chAcConvertCnt = 0U; /*计轴后方计轴区段数目*/ + UINT16 szAcConvertID[AC_MAXCNT_IN_SWITCH] = { 0U }; /*计轴后方计轴区段数组*/ + UINT8 chAcIndex = 0U; /*计轴区段索引*/ + UINT8 chLinkLine = 0U; /*计轴区段联络线属性*/ + + if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId)) + { + /* 查询前方计轴*/ + chAcSameCnt = aam_PrepareAdjacentAC(wAxisSecId, EMAP_SAME_DIR, szAcSameID); + + /** 查询后方计轴 */ + chAcConvertCnt = aam_PrepareAdjacentAC(wAxisSecId, EMAP_CONVER_DIR, szAcConvertID); + + if ((UINT8_MAX == chAcSameCnt) || (UINT8_MAX == chAcConvertCnt)) + { + chReval = CI_ERROR; /*数据错误*/ + } + else + { + for (chAcIndex = 0U; chAcIndex < chAcSameCnt; chAcIndex++) + { + chLinkLine = aam_PrepareACIsLinkingAxle(szAcSameID[chAcIndex]); + + if (CI_SUCCESS == chLinkLine) + { + chReval = aam_AxisSecEnvelopeCheck(szAcSameID[chAcIndex]); + + if (CI_SUCCESS != chReval) { - pELMInfo = elm_GetEnvelopeInfoByID(szEnvelopeID[jj]); - - if ((NULL != pELMInfo) && (TYPE_CT_ENVELOPE == pELMInfo->envelopeType) && - (0U == pELMInfo->headTrainID) && (0U == pELMInfo->tailTrainID)) - { - /*未有隐藏车进入*/ - if (1U == pELMInfo->trianCnt) - { - cSleepState = GetTrainSleepState(pELMInfo->trainID[0]); - cNvramFlag = GetTrainNvramPosFlag(pELMInfo->trainID[0]); - if ((TRAIN_SLEEP_NO == cSleepState) && (TRAIN_NVRAM_POS_FLAG_NO == cNvramFlag)) - { - /*无休眠车且列车不使用NVRAM,继续检查*/ - } - else - { - debug_infor_printf((const)"aam_AxisCommBadArbTrainCheck Error: Sleep Train Or Nvram Valid\n"); - cRetVal = CI_ERROR; /*存在休眠车或者使用NVRAM的通信车,检查失败,返回失败*/ - } - } - else - { - debug_infor_printf((const)"aam_AxisCommBadArbTrainCheck Error: Envelope Train Num Invalid\n"); - cRetVal = CI_ERROR; /*异常场景,检查失败,返回失败*/ - } - } - else - { - debug_infor_printf((const)"aam_AxisCommBadArbTrainCheck Error: Exist UT\n"); - cRetVal = CI_ERROR; /*存在隐藏车,停止检查,返回失败*/ - } - - if (CI_SUCCESS != cRetVal) - { - cRetVal = CI_ERROR; - break; /*检查失败,停止遍历,返回失败*/ - } - else - { - /*继续检查*/ - } + break; + } + else + { + ; /*继续检查*/ } } else { - cRetVal = CI_ERROR; + chReval = CI_SUCCESS; /*相邻计轴区段不是联络线,不检查*/ + } + } + + if (chAcIndex != chAcSameCnt) + { + ; /*失败*/ + } + else + { + for (chAcIndex = 0U; chAcIndex < chAcConvertCnt; chAcIndex++) + { + chLinkLine = aam_PrepareACIsLinkingAxle(szAcConvertID[chAcIndex]); + if (CI_SUCCESS == chLinkLine) + { + chReval = aam_AxisSecEnvelopeCheck(szAcConvertID[chAcIndex]); + + if (CI_SUCCESS != chReval) + { + break; + } + else + { + ; /*继续检查*/ + } + } + else + { + chReval = CI_SUCCESS; /*相邻计轴区段不是联络线,不检查*/ + } + + } + } + } + } + else + { + ; + } + return chReval; +} + +/** +* 函数功能:检查计轴区段上包络条件是否满足 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 成功 +* CI_ERROR 0 失败 +* by cgh 20260309 +*/ +UINT8 aam_AxisSecEnvelopeCheck(UINT16 wAxisSecId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chEnvelopeNum = SECTION_REL_ENVELOPE_SUM_MAX; /*包络数量*/ + UINT16 szEnvelopeID[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*包络ID*/ + UINT8 ii = 0U; /*包络下标*/ + const EnvelopeStruct* pELMInfo = NULL; /*包络数据*/ + UINT8 chSleepState = 0U; /*列车休眠状态*/ + UINT8 chTrainLevel = 0U; /*列车级别*/ + UINT32 dwErrorCode = 0U; /*错误码记录*/ + + if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId)) + { + chReval = CI_SUCCESS; + chEnvelopeNum = elm_GetEnvelopeIDsInAC(wAxisSecId, szEnvelopeID); + + /*无包络,检查通过*/ + if (0U == chEnvelopeNum) + { + ; + } + else if (SECTION_REL_ENVELOPE_SUM_MAX > chEnvelopeNum) + { + for (ii = 0U; ii < chEnvelopeNum; ii++) + { + pELMInfo = elm_GetEnvelopeInfoByID(szEnvelopeID[ii]); + + /*未有隐藏车进入*/ + if ((NULL != pELMInfo) && (TYPE_CT_ENVELOPE == pELMInfo->envelopeType) && + (0U == pELMInfo->headTrainID) && (0U == pELMInfo->tailTrainID)) + { + if (1U == pELMInfo->trianCnt) + { + chSleepState = GetTrainSleepState(pELMInfo->trainID[0]); + + if (TRAIN_SLEEP_NO == chSleepState) + { + /*无休眠车,继续检查*/ + chTrainLevel = GetTrainLevel(pELMInfo->trainID[0]); + if (TRAIN_LEVEL_VBTC == chTrainLevel) + { + ; + } + else + { + dwErrorCode += 0x04000000U; + chReval = CI_ERROR; /*列车级别不为CBTC,检查失败,返回失败*/ + } + + } + else + { + dwErrorCode += 0x08000000U; + chReval = CI_ERROR; /*存在休眠车,检查失败,返回失败*/ + } + } + else + { + dwErrorCode += 0x10000000U; + chReval = CI_ERROR; /*异常场景,检查失败,返回失败*/ + } + } + else + { + dwErrorCode += 0x20000000U; + chReval = CI_ERROR; /*存在隐藏车,停止检查,返回失败*/ } - if (CI_SUCCESS != cRetVal) + if (CI_SUCCESS != chReval) { - cRetVal = CI_ERROR; + chReval = CI_ERROR; break; /*检查失败,停止遍历,返回失败*/ } else @@ -1854,153 +1938,78 @@ UINT8 aam_AxisCommBadArbTrainCheck(void) /*继续检查*/ } } - else - { - /*非本控区计轴区段,不处理*/ - } } - } - else - { - /*入参检查失败,返回失败*/ - } - - return cRetVal; -} - -/** -* 函数功能:计轴子系统通信中断ARB处理——区段条件检查 -* 输入参数:无 -* 返回值:CI_SUCCESS 1 成功 -* CI_ERROR 0 失败 -* Create By LQ 2025.02.23 -*/ -UINT8 aam_AxisCommBadArbSecCheck(void) -{ - UINT8 cRetVal = CI_ERROR; - UINT16 wAcNum = 0u; /*OC范围内所有的计轴区段数量*/ - const UINT16* pACIdbuff = NULL; /** 计轴ID数值缓存 */ - UINT8 cLocalCiId = 0U; - UINT16 ii = 0U; - UINT8 cAxleBorderAttr = AXIS_BORDER_AXLE_YES; - UINT8 cAcBelongCiId = 0U; - UINT16 wRelPhySecId = 0U; /*计轴区段关联物理区段ID*/ - UINT8 cPhySecArbState = 0U; - - wAcNum = elm_PrepareACBuffIndexs(&pACIdbuff); /*获取计轴区段数量及ID*/ - cLocalCiId = GetSystemParaLocalCiId(); - if ((0U < wAcNum) && (AXIS_SECTION_SUM_MAX > wAcNum) && (NULL != pACIdbuff) && (0U != cLocalCiId)) - { - cRetVal = CI_SUCCESS; - for (ii = 0U; ii < wAcNum; ii++) + else { - cAxleBorderAttr = GetAxisSecBorderProperty(pACIdbuff[ii]); - if (AXIS_BORDER_AXLE_NO == cAxleBorderAttr) - { - /*非边界计轴区段,不处理*/ - } - else if (AXIS_BORDER_AXLE_YES == cAxleBorderAttr) - { - cAcBelongCiId = (UINT8)GetAxisBelongTioc(pACIdbuff[ii]); - if (cLocalCiId == cAcBelongCiId) - { - /*本控区边界计轴区段,需ARB防护范围内、ARB防护时间内没出现过故障车*/ - cRetVal = aam_CheckNearbyTrainType(pACIdbuff[ii]); - if (CI_SUCCESS != cRetVal) - { - debug_infor_printf((const)"aam_AxisCommBadArbSecCheck Error: Near Sec Exist UT\n"); - cRetVal = CI_ERROR; /*检查失败,停止遍历,返回失败*/ - } - else - { - /*继续检查*/ - } - } - else - { - /*非本控区边界计轴区段,需未ARB*/ - wRelPhySecId = GetAxisSecRelativePhySecId(pACIdbuff[ii]); - cPhySecArbState = GetPhySecArbState(wRelPhySecId); - if (AXIS_SECTION_ARB_NO == cPhySecArbState) - { - /*未ARB,继续遍历检查*/ - } - else - { - debug_infor_printf((const)"aam_AxisCommBadArbSecCheck Error: Other Rc Cfp ARB\n"); - cRetVal = CI_ERROR; /*相邻控区边界计轴区段ARB,返回失败*/ - } - } - } - else - { - cRetVal = CI_ERROR; - } - - if (CI_SUCCESS != cRetVal) - { - cRetVal = CI_ERROR; - break; - } - else - { - /*继续遍历检查*/ - } + dwErrorCode += 0x40000000U; + chReval = CI_ERROR; } } else { - /*入参检查失败,返回失败*/ + dwErrorCode += 0x80000000U; } - return cRetVal; + ASSER_DEBUG(0U != dwErrorCode, debug_infor_printf((const)"\n wAxisSecId:%d aam_AxisSecEnvelopeCheck:0x%08x\n", wAxisSecId, dwErrorCode)); + + return chReval; } /* -* 功能描述:设置集中区内计轴区段ARB -* 参数说明:无 +* 功能描述:设置集中区内计轴区段状态 +* 参数说明:UINT8 chAxisSecState 待设置的计轴区段状态 * 返 回 值:无 +* by cgh 20260310 */ -void SetRcAxleArb(void) -{ - UINT16 wAcNum = 0U; - UINT16* pACBuff = NULL; - UINT8 cLocalCiId = 0U; - UINT16 ii = 0U; - UINT8 cAcBelongCiId = 0U; - UINT16 wACindex = 0U; - UINT8 cAcOccStatus = ELM_AC_FREE; /*计轴区段占用状态*/ - - wAcNum = GetLocalCiAxisSectionIdBuf(&pACBuff); /*获取计轴信息*/ - cLocalCiId = GetSystemParaLocalCiId(); - if ((0U < wAcNum) && (NULL != pACBuff) && (0U != cLocalCiId)) +void SetLocalAllAxisSecState(UINT8 chAxisSecState) +{ + AxisSecClassDataStruct axisSecClassData = GetAxisSecClassData(); /*计轴分类数据*/ + UINT8 chAxisSecOccState = 0U; /*计轴区段采集占用状态*/ + UINT8 chAxisSecIndex = 0U; /*计轴区段索引*/ + UINT16 wACindex = 0U; /*计轴故障诊断中计轴区段索引*/ + UINT8 chAxisSecCbtcProperty = 0U; /*计轴区段CBTC属性*/ + + /*遍历集合A的计轴区段*/ + for (chAxisSecIndex = 0U; chAxisSecIndex < axisSecClassData.chElementANum; chAxisSecIndex++) { - for (ii = 0U; ii < wAcNum; ii++) + wACindex = aam_PrepareACIndex(axisSecClassData.szElementASecId[chAxisSecIndex]); + + /*计轴区段索引合法*/ + if (UINT16_MAX != wACindex) { - cAcBelongCiId = (UINT8)GetAxisBelongTioc(pACBuff[ii]); - wACindex = aam_PrepareACIndex(pACBuff[ii]); - if ((cLocalCiId == cAcBelongCiId) && (UINT16_MAX != wACindex)) + chAxisSecOccState = elm_PrepareACStatus(axisSecClassData.szElementASecId[chAxisSecIndex]); + /*空闲区段不额外处理*/ + if (ELM_AC_FREE == chAxisSecOccState) { - cAcOccStatus = aam_PrepareACStatus(pACBuff[ii]); - if (ELM_AC_OCC == cAcOccStatus) - { - aam_SetAxisStatus(wACindex, AAM_STATUS_ARB); - aam_SetAxisCommBadArbFlag(wACindex, AAM_COMM_BAD_ARB_YES); - } - else - { - /*计轴区段未占用,不处理*/ - } + aam_SetAxisStatus(wACindex, AAM_STATUS_FREE_OR_REDUN); } else { - /*非本控区计轴区段,不处理*/ + /*要设置的计轴区段状态为ARB*/ + if (AAM_STATUS_ARB == chAxisSecState) + { + chAxisSecCbtcProperty = GetAxisSecCbtcProperty(axisSecClassData.szElementASecId[chAxisSecIndex]); + + /*计轴区段具备CBTC属性*/ + if (AXIS_SEC_CBTC_PROPERTY_YES == chAxisSecCbtcProperty) + { + aam_SetAxisStatus(wACindex, AAM_STATUS_ARB); + } + else + { + aam_SetAxisStatus(wACindex, AAM_STATUS_OCC); + } + } + else + { + aam_SetAxisStatus(wACindex, AAM_STATUS_OCC); + } } } - } - else - { - ; + else + { + ; + } } } @@ -2111,7 +2120,7 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId UINT8 cRetVal = CI_ERROR; UINT16 wBufIndex = 0U; UINT16 wCurRelPhySecId = 0U; /*本计轴区段所属物理区段ID*/ - UINT8 dwCiAndAxleTransBadEnsureCnt = 0U; /*判断与计轴通信中断周期数*/ + UINT32 dwCiAndAxleTransBadEnsureCnt = 0U; /*判断与计轴通信中断周期数*/ UINT32 dwCurAxleOccStartCycNum = 0U; /*本计轴区段占用起始周期*/ UINT8 ii = 0U; UINT16 wNearRelPhySecId = 0U; /*相邻计轴区段所属物理区段ID*/ @@ -2182,4 +2191,262 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId } return cRetVal; +} + +/** + * @brief 获取本控区RC和计轴通信中断设置ARB标志 + * @param[in] void + * @param[out] 无 + * @return 0xFF-默认 0x55U-有效 0xAAU-无效 + * by cgh 20260307 + */ +UINT8 aam_GetLocalAllAxisSecArbFlag(void) +{ + return gLocalAllAxisSecArbFlag; +} + +/** + * @brief 设置本控区RC和计轴通信中断设置ARB标志 + * @param[in] chLocalAllAxisSecArbFlag 本控区RC和计轴通信中断设置ARB标志 + * @param[out] 无 + * @return 无 + * by cgh 20260307 + */ +void aam_SetLocalAllAxisSecArbFlag(UINT8 chLocalAllAxisSecArbFlag) +{ + if ((LOCAL_ALL_AXIS_SEC_ARB_DEFAULT == chLocalAllAxisSecArbFlag) + || (LOCAL_ALL_AXIS_SEC_ARB_YES == chLocalAllAxisSecArbFlag) + || (LOCAL_ALL_AXIS_SEC_ARB_NO == chLocalAllAxisSecArbFlag)) + { + gLocalAllAxisSecArbFlag = chLocalAllAxisSecArbFlag; + } + else + { + ; /*不设置*/ + } +} + +/** + * @brief 计轴故障诊断模块正常处理函数 + * @param[in] + * @param[out] + * @return + * @note by cgh 20260310 + */ +void aam_NormalProcess(void) +{ + /*- 局部变量定义*/ + UINT8 funRtn = ELM_BELONG_OWNER; + UINT8 acStatus = ELM_AC_OCC; + UINT16 acCnt = 0U; + UINT16 cycle = 0U; + UINT8 OCId = 0U; + UINT16 acIndex = 0U; + const UINT16* pACIdBuff = NULL; + UINT32 errorCode = 0U; + UINT8 acRelEnvelopeCnt = 0U; + EnvelopeStruct envelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; + UINT8 chPreAcStatus = ELM_AC_OCC; + UINT8 ii = 0U; + UINT8 chCTcheck = CI_ERROR; + + /** 获取计轴区段信息 */ + acCnt = aam_PrepareACBuffIndexs(&pACIdBuff); + + if (NULL == pACIdBuff) + { + ASSER_ERROR(NULL == pACIdBuff, errorCode, 0x80000000u); + } + else + { + for (cycle = 0U; cycle < acCnt; cycle++) + { + /** 判断计轴区段是否属于本OC */ + funRtn = aam_PrepareACIsSelf(pACIdBuff[cycle], &OCId); + + if (ELM_BELONG_OWNER == funRtn) + { + /** 获取计轴状态 */ + acStatus = aam_PrepareACStatus(pACIdBuff[cycle]); + + /** 获取计轴关联的包络数量 */ + acRelEnvelopeCnt = elm_GetEnvelopeInAC(pACIdBuff[cycle], envelopeInfo); + + /** 获取计轴数组索引 */ + acIndex = aam_PrepareACIndex(pACIdBuff[cycle]); + ASSERT_BREAK(UINT16_MAX == acIndex, errorCode, 0x40000000u); + + if ((ELM_AC_OCC == acStatus) && (0u != acRelEnvelopeCnt)) + { + chPreAcStatus = aam_GetAxisStatus(acIndex); + chCTcheck = CI_SUCCESS; + for (ii = 0U; ii < acRelEnvelopeCnt; ii++) + { + if (((TYPE_UCT_ENVELOPE == envelopeInfo[ii].envelopeType) || (TYPE_UKT_ENVELOPE == envelopeInfo[ii].envelopeType)) + || (0U != envelopeInfo[ii].tailTrainID) || (0U != envelopeInfo[ii].headTrainID)) + { + /*包络存在隐藏车或UCT 或前后任意端存在可疑*/ + chCTcheck = CI_ERROR; + break; + } + } + if ((AAM_STATUS_ARB != chPreAcStatus) || (CI_ERROR == chCTcheck)) + { + /* 说明非ARB区段有车占用,或占用包络非CT 或CT包络可疑 清除之前的冗余计时位 */ + funRtn = aam_ClearRedunTime(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u); + aam_SetAxisStatus(acIndex, AAM_STATUS_OCC); + } + else + { + /*ARB区段 在无前后端可疑的CT列车驶入该计轴区段,计轴区段维持ARB状态*/ + funRtn = aam_AxisErrorJudge(pACIdBuff[cycle], acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u); + } + } + else if ((ELM_AC_OCC == acStatus) && (0u == acRelEnvelopeCnt)) + { + /** 说明占用无车,进行ARB判断*/ + funRtn = aam_AxisErrorJudge(pACIdBuff[cycle], acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u); + } + else + { + /** 清除之前的冗余计时位,设置计轴空闲 */ + funRtn = aam_ClearRedunTime(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x08000000u); + aam_SetAxisStatus(acIndex, AAM_STATUS_FREE_OR_REDUN); + } + } + else + { + /** 不属于本OC,不处理 */ + } + + /** 判断是否满足跳出条件 */ + ASSERT_BREAK(0u != errorCode, errorCode, 0x00000000u); + } + } + + /** 处理错误 */ + if (0u != errorCode) + { + /** 处理错误,直接重新初始化*/ + funRtn = aam_Init(); + + if (CI_ERROR == funRtn) + { + /** 宕机处理 */ + SetPlatOverFlag(); + ASSER_ERROR(NULL == pACIdBuff, errorCode, 0x80000000u); + AAM_LOG_LOC(AAM_LOG_ERROR, "errno:0x%08x info:Axis Assert Process error.", errorCode); + } + else + { + /** 处理正确,重新初始化后继续执行 */ + } + + AAM_LOG_LOC(AAM_LOG_ERROR, "errno:0x%08x info:Axis Assert Process error.", errorCode); + } + else + { + /** 处理无问题*/ + } +} + +/** +* 函数功能:计轴区段空闲检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 集合C所有区段条件检查通过 +* CI_ERROR 0 集合C存在区段条件检查不通过 +* by cgh 20260309 +*/ +UINT8 aam_AxisSecIdleCheck(void) +{ + UINT8 chReval = CI_ERROR; + AxisSecClassDataStruct axisSecClassData = { 0U }; /*计轴分类数据*/ + UINT8 ii = 0U; /*区段索引*/ + UINT8 chAxisSecOccState = 0U; /*计轴区段采集占用状态*/ + UINT8 chEnvelopeNum = SECTION_REL_ENVELOPE_SUM_MAX; /*包络数量*/ + UINT16 szEnvelopeID[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*包络ID*/ + UINT8 chAxisStatus = 0U; /*计轴故障诊断状态*/ + UINT8 chLocalAllAxisSecArbFlag = 0U; /*本控区RC与计轴通信中断ARB标志*/ + UINT8* szDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*获取通信Axis设备ID数组*/ + UINT8 chCommState = 0U; /*与计轴通信状态*/ + + chLocalAllAxisSecArbFlag = aam_GetLocalAllAxisSecArbFlag(); + + /*本控区RC与计轴通信中断ARB标志当前为无效*/ + if (LOCAL_ALL_AXIS_SEC_ARB_NO == chLocalAllAxisSecArbFlag) + { + if (NULL != szDeviceIdBuf) + { + chCommState = GetCiTransmitState(CI_SYSTEM_TYPE_AXIS, szDeviceIdBuf[0U]); + + /*通信良好*/ + if (TRANSMIT_STATE_BAD != chCommState) + { + /*通信恢复了,就恢复成默认*/ + chReval = CI_SUCCESS; + } + else + { + chReval = CI_ERROR; + } + } + else + { + chReval = CI_ERROR; /*返回失败*/ + } + } + else + { + axisSecClassData = GetAxisSecClassData(); /*计轴分类数据*/ + /*检查集合C是否全空闲或空闲区段为ARB且为CBTC列车脚下区段*/ + for (ii = 0U; ii < axisSecClassData.chElementCNum; ii++) + { + chAxisSecOccState = elm_PrepareACStatus(axisSecClassData.szElementCSecId[ii]); + + /*计轴区段空闲,检查通过*/ + if (ELM_AC_FREE == chAxisSecOccState) + { + chReval = CI_SUCCESS; + } + else + { + chAxisStatus = aam_GetAxisStatus(axisSecClassData.szElementCSecId[ii]); + /*计轴ARB,检查包络*/ + if (AAM_STATUS_ARB == chAxisStatus) + { + chEnvelopeNum = elm_GetEnvelopeIDsInAC(axisSecClassData.szElementCSecId[ii], szEnvelopeID); + + /*无包络,检查通过*/ + if ((0U < chEnvelopeNum) && (SECTION_REL_ENVELOPE_SUM_MAX > chEnvelopeNum)) + { + chReval = aam_AxisSecEnvelopeCheck(axisSecClassData.szElementCSecId[ii]); + } + else + { + chReval = CI_ERROR; /*ARB区段上必须有包络才可以检查通过*/ + } + } + else + { + /*计轴区段占用,但不为ARB,此处检查失败*/ + chReval = CI_ERROR; + } + } + + if (CI_SUCCESS == chReval) + { + /*继续检查*/ + } + else + { + /*停止检查,返回失败*/ + break; + } + } + } + return chReval; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h index 47dbdd1..ca25d00 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h @@ -10,6 +10,7 @@ #include "EnvelopeDefine.h" + /** * @brief 计轴故障诊断模块初始化 * @return CI_ERROR 初始化成功 @@ -21,10 +22,10 @@ UINT8 aam_Init(void); /** * @brief 计轴故障诊断模块处理主函数 - * @param[in] + * @param[in] * @param[out] - * @return - * @note + * @return + * @note edit cgh 20260310 */ void aam_MainProcess(void); @@ -175,7 +176,7 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID); * 函数功能:计轴子系统通信中断ARB处理 * 输入参数:无 * 返回值:无 -* Create By LQ 2025.02.23 +* by cgh 20260309 */ void aam_AxisCommBadArbPro(void); @@ -184,25 +185,35 @@ void aam_AxisCommBadArbPro(void); * 输入参数:无 * 返回值:CI_SUCCESS 1 成功 * CI_ERROR 0 失败 -* Create By LQ 2025.02.23 +* by cgh 20260309 */ UINT8 aam_AxisCommBadArbTrainCheck(void); /** -* 函数功能:计轴子系统通信中断ARB处理——区段条件检查 -* 输入参数:无 +* 函数功能:相邻计轴区段列车条件检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID * 返回值:CI_SUCCESS 1 成功 * CI_ERROR 0 失败 -* Create By LQ 2025.02.23 +* by cgh 20260309 */ -UINT8 aam_AxisCommBadArbSecCheck(void); +UINT8 aam_AdjacentAcTrainCheck(UINT16 wAxisSecId); + +/** +* 函数功能:检查计轴区段上包络条件是否满足 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 成功 +* CI_ERROR 0 失败 +* by cgh 20260309 +*/ +UINT8 aam_AxisSecEnvelopeCheck(UINT16 wAxisSecId); /* -* 功能描述:设置集中区内计轴区段ARB -* 参数说明:无 +* 功能描述:设置集中区内计轴区段状态 +* 参数说明:UINT8 chAxisSecState 待设置的计轴区段状态 * 返 回 值:无 +* by cgh 20260310 */ -void SetRcAxleArb(void); +void SetLocalAllAxisSecState(UINT8 chAxisSecState); /** * @brief 对外接口:获取计轴诊断状态接口 @@ -233,4 +244,40 @@ UINT8 aam_CheckPhyTrain(UINT16 ACID); */ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH]); +/** + * @brief 获取本控区RC和计轴通信中断设置ARB标志 + * @param[in] void + * @param[out] 无 + * @return 0xFF-默认 0x55U-有效 0xAAU-无效 + * by cgh 20260307 + */ +UINT8 aam_GetLocalAllAxisSecArbFlag(void); + +/** + * @brief 设置本控区RC和计轴通信中断设置ARB标志 + * @param[in] chLocalAllAxisSecArbFlag 本控区RC和计轴通信中断设置ARB标志 + * @param[out] 无 + * @return 无 + * by cgh 20260307 + */ +void aam_SetLocalAllAxisSecArbFlag(UINT8 chLocalAllAxisSecArbFlag); + +/** + * @brief 计轴故障诊断模块正常处理函数 + * @param[in] + * @param[out] + * @return + * @note by cgh 20260310 + */ +void aam_NormalProcess(void); + +/** +* 函数功能:计轴区段空闲检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 集合C所有区段条件检查通过 +* CI_ERROR 0 集合C存在区段条件检查不通过 +* by cgh 20260309 +*/ +UINT8 aam_AxisSecIdleCheck(void); + #endif /*AXIS_ASSERT_MANAGE_API_H_*/ diff --git a/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.c b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.c new file mode 100644 index 0000000..618f620 --- /dev/null +++ b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.c @@ -0,0 +1,177 @@ +/******************************************************** +* +* 文 件 名: ConnectOverrideCfgDataMg.c +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026-3-11 +* 作 者: 联锁组 +* 功能描述: 联络线旁路继电器相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ +#include "ConnectOverrideCfgDataMg.h" + +ConnectOverrideCfgDataStru gConnectOverrideRelayCfgStr[CONNECT_OVERRIDE_RELAY_SUM_MAX] = { 0U }; /*联络线旁路继电器信息*/ +INT16 gConnectOverrideRelaySum = 0; /*联络线旁路继电器数量*/ + +/* +* 功能描述:获取指定ID的联络线旁路继电器的索引号 +* 参数说明:const UINT16 wConnectOverrideId 联络线旁路ID +* 返 回 值:CONNECT_OVERRIDE_RELAY_SUM_MAX 获取数据失败 +* < CONNECT_OVERRIDE_RELAY_SUM_MAX 查找成功 +* Created By wyd 2026.3.11 +*/ +UINT16 GetConnectOverrideCfgBufIndex(const UINT16 wConnectOverrideId) +{ + UINT16 index = CONNECT_OVERRIDE_RELAY_SUM_MAX; + UINT16 ii = 0U; + + for (ii = 0U; ii < gConnectOverrideRelaySum; ii++) + { + if (wConnectOverrideId == gConnectOverrideRelayCfgStr[ii].ConnectOverrideId) + { + index = ii; + break; + } + else + { + /*继续查找*/ + } + } + + return index; +} + +/* +* 功能描述:获取联络线旁路继电器数量 +* 参数说明:void +* 返 回 值:联络线旁路继电器数量 +* Created By wyd 2026.3.11 +*/ +UINT16 GetConnectOverrideRelaySum(void) +{ + UINT16 retVal = 0U; + + if (0 > gConnectOverrideRelaySum) + { + retVal = 0U; + } + else if (CONNECT_OVERRIDE_RELAY_SUM_MAX <= (UINT16)gConnectOverrideRelaySum) + { + retVal = CONNECT_OVERRIDE_RELAY_SUM_MAX; + } + else + { + retVal = (UINT16)gConnectOverrideRelaySum; + } + + return retVal; +} + +/* +* 功能描述:获取联络线旁路继电器静态数据 +* 参数说明:void +* 返 回 值:联络线旁路继电器静态数据 +* Created By wyd 2026.3.11 +*/ +ConnectOverrideCfgDataStru* GetConnectOverrideRelayCfgStr(void) +{ + return gConnectOverrideRelayCfgStr; +} + +/* +* 功能描述:获取联络线旁路开关采集继电器ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路开关采集继电器ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverrideRelayId(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; + UINT16 retVal = 0u; + + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + retVal = gConnectOverrideRelayCfgStr[wIndex].OverrideRelayId; + } + else + { + /*不处理*/ + } + + return retVal; +} + +/* +* 功能描述:获取联络线旁路关联物理区段ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路关联物理区段ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverridePhySecId(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; + UINT16 retVal = 0u; + + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + retVal = gConnectOverrideRelayCfgStr[wIndex].RelPhySecId; + } + else + { + /*不处理*/ + } + + return retVal; +} + +/* +* 功能描述:获取联络线旁路关联进路请求继电器ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线关联进路请求继电器ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetOverrideRouteRequestRelayId(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; + UINT16 retVal = 0u; + + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + retVal = gConnectOverrideRelayCfgStr[wIndex].RelRouteRequestRelayId; + } + else + { + /*不处理*/ + } + + return retVal; +} + +/* +* 功能描述:获取联络线旁路关联道岔ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路关联道岔ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverrideSwitchId(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; + UINT16 retVal = 0u; + + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + retVal = gConnectOverrideRelayCfgStr[wIndex].RelSwitchId; + } + else + { + /*不处理*/ + } + + return retVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.h b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.h new file mode 100644 index 0000000..5c9559b --- /dev/null +++ b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.h @@ -0,0 +1,101 @@ +/******************************************************** +* +* 文 件 名: ConnectOverrideCfgDataMg.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026-3-11 +* 作 者: 联锁组 +* 功能描述: 联络线旁路继电器相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef CONNECT_OVERRIDE_CFGDATA_MG_H +#define CONNECT_OVERRIDE_CFGDATA_MG_H + +#include "CommonTypes.h" +#include "ConnectOverrideRelayDefine.h" + +/*联络线旁路继电器配置数据结构体*/ +typedef struct S_ConnectOverrideCfgDataStru +{ + UINT16 ConnectOverrideId; /*联络线旁路继电器ID*/ + UINT16 BelongOcId; /*继电器所属OC ID*/ + UINT8 BelongCiId; /*继电器所属联锁ID*/ + UINT16 OverrideRelayId; /*联络线旁路开关采集继电器ID*/ + UINT16 RelPhySecId; /*关联物理区段ID*/ + UINT16 RelRouteRequestRelayId; /*关联进路请求继电器ID*/ + UINT16 RelSwitchId; /*关联道岔ID*/ +} ConnectOverrideCfgDataStru; + +/*******************************全局变量声明*******************************/ +extern ConnectOverrideCfgDataStru gConnectOverrideRelayCfgStr[CONNECT_OVERRIDE_RELAY_SUM_MAX]; /*联络线旁路继电器信息*/ +extern INT16 gConnectOverrideRelaySum; /*联络线旁路继电器数量*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +* 功能描述:获取指定ID的联络线旁路继电器的索引号 +* 参数说明:const UINT16 wConnectOverrideId 联络线旁路ID +* 返 回 值:CONNECT_OVERRIDE_RELAY_SUM_MAX 获取数据失败 +* < CONNECT_OVERRIDE_RELAY_SUM_MAX 查找成功 +* Created By wyd 2026.3.11 +*/ +UINT16 GetConnectOverrideCfgBufIndex(const UINT16 wConnectOverrideId); + +/* +* 功能描述:获取联络线旁路继电器数量 +* 参数说明:void +* 返 回 值:联络线旁路继电器数量 +* Created By wyd 2026.3.11 +*/ +UINT16 GetConnectOverrideRelaySum(void); + +/* +* 功能描述:获取联络线旁路继电器静态数据 +* 参数说明:void +* 返 回 值:联络线旁路继电器静态数据 +* Created By wyd 2026.3.11 +*/ +ConnectOverrideCfgDataStru* GetConnectOverrideRelayCfgStr(void); + +/* +* 功能描述:获取联络线旁路开关采集继电器ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路开关采集继电器ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverrideRelayId(UINT16 wOverrideId); + +/* +* 功能描述:获取联络线旁路关联物理区段ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路关联物理区段ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverridePhySecId(UINT16 wOverrideId); + +/* +* 功能描述:获取联络线旁路关联进路请求继电器ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线关联进路请求继电器ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetOverrideRouteRequestRelayId(UINT16 wOverrideId); + +/* +* 功能描述:获取联络线旁路关联道岔ID +* 参数说明:wOverrideId 联络线旁路索引编号 +* 返 回 值:0:查询失败 其他:联络线旁路关联道岔ID +* Created By wyd 2026.3.12 +*/ +UINT16 GetConnectOverrideSwitchId(UINT16 wOverrideId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.c b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.c new file mode 100644 index 0000000..5ef7b81 --- /dev/null +++ b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.c @@ -0,0 +1,1145 @@ +/******************************************************** +* +* 文 件 名: ConnectOverrideDataMg.c +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026-3-11 +* 作 者: 联锁组 +* 功能描述: 联络线旁路继电器相关数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ +#include "ConnectOverrideDataMg.h" +#include "ConnectOverrideCfgDataMg.h" +#include "../Relay/RelayDataManage.h" +#include "../Section/PhysicalSectionDataManage.h" + +/* 联络线旁路继电器动态数据 */ +ConnectOverrideDataStru gConnectOverrideData[CONNECT_OVERRIDE_RELAY_SUM_MAX] = { 0U }; + +/*函数声明*/ +static UINT8 GetOverrideState(UINT16 wOverrideId); +static void SetOverrideState(UINT16 wOverrideId, UINT8 chOverrideState); +static UINT8 GetOverrideErrDownState(UINT16 wOverrideId); +static void SetOverrideErrDownState(UINT16 wOverrideId, UINT8 chOverrideErrDownState); +static UINT8 GetOverrideReason(UINT16 wOverrideId); +static void SetOverrideReason(UINT16 wOverrideId, UINT8 chOverrideCond); +static UINT32 GetOverridePressStartCyc(UINT16 wOverrideId); +static void SetOverridePressStartCyc(UINT16 wOverrideId, UINT32 dwCyc); +static UINT32 GetOverrideErrTrigCyc(UINT16 wOverrideId); +static void SetOverrideErrTrigCyc(UINT16 wOverrideId, UINT32 dwCyc); +#if 0 /*孤岛函数暂时屏蔽*/ +static UINT8 GetOverrideErrTrigState(UINT16 wOverrideId); +#endif +static void SetOverrideErrTrigState(UINT16 wOverrideId, UINT8 chErrFlag); +static void OverrideRelayUpProc(UINT16 wOverrideId); +static void OverrideRelayDownProc(UINT16 wOverrideId); +static void ConnectOverrideSetProc(UINT16 wOverrideId); +static UINT8 ConnectOverrideCondCheck(UINT16 wOverrideId, OUT UINT8 *pIsLogSecCt, OUT UINT16 *pLogSecId); +static UINT8 LogSecFLockTypeToOverrideCond(UINT8 chLogSecFLockType); +static void ConnectOverrideKeepProc(UINT16 wOverrideId); +static UINT8 OverrideSecNewEaCheck(UINT16 wOverrideId); + +/* +* 功能描述:获取联络线旁路结构体地址 +* 参数说明:void +* 返 回 值:联络线旁路结构体地址 +* Created By wyd 20260311 +*/ +ConnectOverrideDataStru *GetConnectOverrideData(void) +{ + return gConnectOverrideData; +} + +/* +* 功能描述:获取联络线旁路状态 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:0x55 无效 +* 0xAA 有效 +* 0x00 非法 +* Created By wyd 20260311 +*/ +static UINT8 GetOverrideState(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT8 retVal = CI_ERROR; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的旁路状态*/ + retVal = gConnectOverrideData[wIndex].OverrideState; + /*旁路状态合法性校验*/ + if ((CONNECT_OVERRIDE_STATE_NO == retVal) || (CONNECT_OVERRIDE_STATE_YES == retVal)) + { + /*合法*/ + } + else + { + /*返回非法值*/ + retVal = CI_ERROR; + } + } + else + { + /*不处理,返回非法值*/ + } + + return retVal; +} + +/* +* 功能描述:设置联络线旁路状态 +* 参数说明:const UINT16 wOverrideId 联络线旁路ID +* const UINT8 chOverrideState 联络线旁路状态 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +static void SetOverrideState(UINT16 wOverrideId, UINT8 chOverrideState) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + + /*检查下标和设置值是否合法*/ + if ((CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + && ((CONNECT_OVERRIDE_STATE_NO == chOverrideState) || (CONNECT_OVERRIDE_STATE_YES == chOverrideState))) + { + /*赋值至动态数据,设置成功*/ + gConnectOverrideData[wIndex].OverrideState = chOverrideState; + } + else + { + /*导向安全设置成未旁路*/ + gConnectOverrideData[wIndex].OverrideState = CONNECT_OVERRIDE_STATE_YES; + } +} + +/* +* 功能描述:获取联络线旁路开关异常按下标志 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:0x55 未异常按下 +* 0xAA 异常按下 +* 0x00 非法 +* Created By wyd 20260311 +*/ +static UINT8 GetOverrideErrDownState(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT8 retVal = CI_ERROR; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的旁路状态*/ + retVal = gConnectOverrideData[wIndex].OverrideErrDownState; + /*旁路状态合法性校验*/ + if ((CONNECT_OVERRIDE_ERRDOWN_NO == retVal) || (CONNECT_OVERRIDE_ERRDOWN_YES == retVal)) + { + /*合法*/ + } + else + { + /*返回非法值*/ + retVal = CI_ERROR; + } + } + else + { + /*不处理,返回非法值*/ + } + + return retVal; +} + +/* +* 功能描述:设置联络线旁路开关异常按下标志 +* 参数说明:const UINT16 wOverrideId 联络线旁路ID +* const UINT8 chOverrideErrDownState 联络线旁路异常按下状态 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +static void SetOverrideErrDownState(UINT16 wOverrideId, UINT8 chOverrideErrDownState) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + + /*检查下标和设置值是否合法*/ + if ((CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + && ((CONNECT_OVERRIDE_ERRDOWN_NO == chOverrideErrDownState) || (CONNECT_OVERRIDE_ERRDOWN_YES == chOverrideErrDownState))) + { + /*赋值至动态数据,设置成功*/ + gConnectOverrideData[wIndex].OverrideErrDownState = chOverrideErrDownState; + } + else + { + /*导向安全设置成异常按下*/ + gConnectOverrideData[wIndex].OverrideErrDownState = CONNECT_OVERRIDE_ERRDOWN_YES; + } +} + +/* +* 功能描述:获取联络线旁路原因 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:联络线旁路原因 +* Created By wyd 20260311 +*/ +static UINT8 GetOverrideReason(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT8 retVal = OVERRIDE_REASON_NONE; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的旁路原因*/ + retVal = gConnectOverrideData[wIndex].OverrideReason; + } + else + { + /*不处理,返回无原因*/ + } + + return retVal; +} + +/* +* 功能描述:设置联络线旁路条件 +* 参数说明:const UINT16 wOverrideId 联络线旁路ID +* const UINT8 chOverrideState 联络线旁路条件 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +static void SetOverrideReason(UINT16 wOverrideId, UINT8 chOverrideCond) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + + /*检查下标是否合法*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*赋值至动态数据,设置成功*/ + gConnectOverrideData[wIndex].OverrideReason = chOverrideCond; + } + else + { + /*导向安全处理成无原因*/ + gConnectOverrideData[wIndex].OverrideReason = OVERRIDE_REASON_NONE; + } +} + +/* +* 功能描述:获取联络线旁路按钮按下起始周期号 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:联络线旁路按钮按下起始周期号 +* Created By wyd 20260311 +*/ +static UINT32 GetOverridePressStartCyc(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT32 retVal = 0u; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的联络线旁路按钮按下起始周期号*/ + retVal = gConnectOverrideData[wIndex].OverridePressStartCyc; + } + else + { + /*不处理,返回0*/ + } + + return retVal; +} + +/* +* 功能描述:设置联络线旁路按钮按下起始周期号 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* const UINT32 dwCyc 要设置的周期号 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +static void SetOverridePressStartCyc(UINT16 wOverrideId, UINT32 dwCyc) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标和周期号是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的联络线旁路按钮按下起始周期号*/ + gConnectOverrideData[wIndex].OverridePressStartCyc = dwCyc; + } + else + { + /*设置失败*/ + } +} + +/* +* 功能描述:获取联络线旁路按钮异常按下起始周期号 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:联络线旁路按钮异常按下起始周期号 +* Created By wyd 20260311 +*/ +static UINT32 GetOverrideErrTrigCyc(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT32 retVal = 0u; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的联络线旁路按钮按下起始周期号*/ + retVal = gConnectOverrideData[wIndex].OverrideErrTrigStartCyc; + } + else + { + /*不处理,返回0*/ + } + + return retVal; +} + +/* +* 功能描述:设置联络线旁路按钮异常按下起始周期号 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* const UINT32 dwCyc 要设置的周期号 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +static void SetOverrideErrTrigCyc(UINT16 wOverrideId, UINT32 dwCyc) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标和周期号是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的联络线旁路按钮按下起始周期号*/ + gConnectOverrideData[wIndex].OverrideErrTrigStartCyc = dwCyc; + } + else + { + /*设置失败*/ + } +} +#if 0 /*孤岛函数暂时屏蔽*/ +/* +* 功能描述:获取联络线旁路开关故障(异常吸起)标志 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:联络线旁路开关故障(异常吸起)标志 +* Created By wyd 20260311 +*/ +static UINT8 GetOverrideErrTrigState(UINT16 wOverrideId) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + UINT8 retVal = CONNECT_OVERRIDE_ERRTRIG_NO; /*返回值*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + /*判断下标是否在合法范围内*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*获取下标对应的旁路原因*/ + retVal = gConnectOverrideData[wIndex].OverrideErrTrigState; + } + else + { + /*不处理,返回无原因*/ + } + + return retVal; +} +#endif +/* +* 功能描述:设置联络线旁路开关故障触发(异常吸起)标志 +* 参数说明:const UINT16 wOverrideId 联络线旁路ID +* const UINT8 chErrFlag 联络线旁路开关故障触发(异常吸起)标志 +* 返 回 值:联络线旁路条件 +* Created By wyd 20260311 +*/ +static void SetOverrideErrTrigState(UINT16 wOverrideId, UINT8 chErrFlag) +{ + UINT16 wIndex = CONNECT_OVERRIDE_RELAY_SUM_MAX; /*下标*/ + + /*获取联络线旁路索引编号对应的数组下标*/ + wIndex = GetConnectOverrideCfgBufIndex(wOverrideId); + + /*检查下标是否合法*/ + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > wIndex) + { + /*赋值至动态数据,设置成功*/ + gConnectOverrideData[wIndex].OverrideErrTrigState = chErrFlag; + } + else + { + /*设置失败*/ + } +} + +/* +* 功能描述:联络线旁路主处理 +* 参数说明:无 +* 返 回 值:无 +* Created By wyd 20260311 +*/ +void ConnectOverrideMainProc(void) +{ + INT16 i = 0; /*循环变量*/ + ConnectOverrideCfgDataStru *pConnectOverrideCfgStru = NULL; /*联络线旁路继电器配置数据结构体*/ + INT16 ConnectOverrideSum = 0; /*联络线旁路继电器总数*/ + UINT16 wOverrideId = 0u; /*联络线旁路索引编号*/ + UINT16 cOverrideState = CI_ERROR; /*联络线旁路状态*/ + UINT16 wOverrideRelayId = 0u; /*旁路开关继电器ID*/ + UINT8 localCiId = 0U; /*本地联锁ID*/ + UINT8 wBelongCiId = 0U; /*旁路开关采集继电器所属CI*/ + UINT8 cOverrideCollState = 0U; /*旁路开关采集继电器状态*/ + + /*获取联络线旁路继电器数据*/ + pConnectOverrideCfgStru = GetConnectOverrideRelayCfgStr(); + ConnectOverrideSum = GetConnectOverrideRelaySum(); + + for (i = 0; i < ConnectOverrideSum; i++) + { + /*获取联络线旁路索引编号*/ + wOverrideId = pConnectOverrideCfgStru[i].ConnectOverrideId; + /*获取旁路开关采集继电器ID*/ + wOverrideRelayId = GetConnectOverrideRelayId(wOverrideId); + /*获取所属联锁ID*/ + wBelongCiId = GetRelayBelongCiId(wOverrideRelayId); + localCiId = GetSystemParaLocalCiId(); + + /*判断继电器是否属于本联锁*/ + if ((localCiId == wBelongCiId) && (0U != localCiId)) + { + /*获取联络线旁路状态*/ + cOverrideState = GetOverrideState(wOverrideId); + /*获取继电器采集状态*/ + cOverrideCollState = GetRelayCollState(wOverrideRelayId); + + /*Step1:旁路按钮管理,旁路状态设置*/ + /*判断继电器状态*/ + if (RELAY_STATE_UP == cOverrideCollState) + { + /*联络线旁路开关采集继电器吸起处理*/ + OverrideRelayUpProc(wOverrideId); + } + else + { + /*联络线旁路开关采集继电器落下处理(含旁路设置)*/ + OverrideRelayDownProc(wOverrideId); + } + + /*Step2:旁路状态取消*/ + /*对每个旁路状态为“已激活”的联络线旁路ID进行判断*/ + if (CONNECT_OVERRIDE_STATE_NO == cOverrideState) + { + /*周期开始时旁路状态未激活,不处理*/ + } + else + { + /*检查旁路状态是否应该取消*/ + ConnectOverrideKeepProc(wOverrideId); + } + } + else + { + /*继电器不属于本联锁,不处理*/ + } + } +} + +/* +* 功能描述:联络线旁路开关继电器吸起处理 +* 参数说明:UINT16 wOverrideId 联络线旁路ID +* 返回值 :无 +*/ +static void OverrideRelayUpProc(UINT16 wOverrideId) +{ + UINT8 cOverrideState = CONNECT_OVERRIDE_STATE_NO; /*联络线旁路状态*/ + UINT8 cRelayDownState = CONNECT_OVERRIDE_ERRDOWN_YES; /*继电器正常/异常落下状态*/ + UINT32 dwCurCycNum = 0U; /*当前周期*/ + UINT32 dwRelayFaultCycNumCfg = 0U; /*联络线旁路开关采集继电器判断故障周期数配置*/ + UINT32 dwRelayErrTrigCycNumCfg = 0U; /*联络线旁路开关采集继电器判断误触发周期数配置*/ + UINT32 dwOverridePressCycNum = 0U; /*联络线旁路开关按下周期*/ + UINT32 dwOverrideErrTrigCycNum = 0U; /*联络线旁路开关误触发按下周期*/ + UINT8 btnPressFaultTime = CI_TIME_NO; /*开关按下时间是否达到故障时间*/ + UINT8 btnPressErrTriggerTime = CI_TIME_NO; /*开关按下时间是否达到误触发时间*/ + + /*获取旁路开关正常按下周期*/ + dwOverridePressCycNum = GetOverridePressStartCyc(wOverrideId); + /*获取旁路开关误触发按下周期*/ + dwOverrideErrTrigCycNum = GetOverrideErrTrigCyc(wOverrideId); + /*获取旁路状态*/ + cOverrideState = GetOverrideState(wOverrideId); + /*获取旁路开关采集继电器正常/异常落下状态*/ + cRelayDownState = GetOverrideErrDownState(wOverrideId); + /*获取当前周期*/ + dwCurCycNum = Get2oo2CurCycleNum(); + + /*Step1:旁路开关采集继电器正常/异常吸起起始周期号记录*/ + if ((CONNECT_OVERRIDE_STATE_NO == cOverrideState) && (CONNECT_OVERRIDE_ERRDOWN_NO == cRelayDownState)) + { + /*旁路未激活,且之前旁路开关采集继电器处于正常落下状态(与OC通信正常且板卡状态正常),更新旁路开关正常按下周期*/ + if ((0U == dwOverridePressCycNum) && (0U == dwOverrideErrTrigCycNum)) + { + /*正常按下和误触发按下不同时存在*/ + SetOverridePressStartCyc(wOverrideId, dwCurCycNum); + } + else + { + /*不处理*/ + } + } + else + { + /*旁路已激活,或之前旁路开关采集继电器未处于正常落下状态(与OC通信中断或双系板卡状态异常),更新旁路开关触发按下周期*/ + if ((0U == dwOverridePressCycNum) && (0U == dwOverrideErrTrigCycNum)) + { + /*正常按下和误触发按下不同时存在*/ + SetOverrideErrTrigCyc(wOverrideId, dwCurCycNum); + } + else + { + /*不处理*/ + } + } + + /*Step2:处理联络线旁路开关异常吸起标志*/ + /*获取旁路开关正常按下周期号*/ + dwOverridePressCycNum = GetOverridePressStartCyc(wOverrideId); + /*获取旁路开关采集故障周期数配置*/ + dwRelayFaultCycNumCfg = GetOverrideBtnFaultCycNum(); + /*判断是否达到故障时间*/ + btnPressFaultTime = SystemOverTimeCheck(dwOverridePressCycNum, dwRelayFaultCycNumCfg); + /*获取旁路开关误触发按下周期*/ + dwOverrideErrTrigCycNum = GetOverrideErrTrigCyc(wOverrideId); + /*获取旁路开关误触发判断时间*/ + dwRelayErrTrigCycNumCfg = GetOverrideBtnErrTrigCycNum(); + /*判断是否达到误触发时间*/ + btnPressErrTriggerTime = SystemOverTimeCheck(dwOverrideErrTrigCycNum, dwRelayErrTrigCycNumCfg); + + if ((CI_TIME_OUT == btnPressFaultTime) || (CI_TIME_OUT == btnPressErrTriggerTime)) + { + /*旁路开关正常按下时间达到故障判断时间,或误触发按下时间达到误触发判断时间,设置旁路开关异常吸起标志*/ + SetOverrideErrTrigState(wOverrideId, CONNECT_OVERRIDE_ERRTRIG_YES); + } + else + { + SetOverrideErrTrigState(wOverrideId, CONNECT_OVERRIDE_ERRTRIG_NO); + } + + /*Step3:继电器落下相关状态清理*/ + /*清空旁路开关采集继电器异常落下标志*/ + SetOverrideErrDownState(wOverrideId, CONNECT_OVERRIDE_ERRDOWN_NO); +} + +/* +* 功能描述:联络线旁路开关继电器落下处理 +* 参数说明:UINT16 wOverrideId 联络线旁路ID +* 返回值 :无 +*/ +static void OverrideRelayDownProc(UINT16 wOverrideId) +{ + UINT16 wOverrideRelayId = 0u; /*旁路开关继电器ID*/ + UINT16 wRelayBelongOcId = 0U; /*继电器所属OC*/ + UINT8 cOcCommState = TRANSMIT_STATE_BAD; /*与OC通信状态*/ + UINT8 cABoardState = RELAY_BOARD_FAULT_YES; /*A系板卡状态*/ + UINT8 cBBoardState = RELAY_BOARD_FAULT_YES; /*B系板卡状态*/ + UINT32 dwRelayCollCycNumCfg = 0U; /*联络线旁路开关采集继电器判断采集有效周期数配置*/ + UINT32 dwRelayFaultCycNumCfg = 0U; /*联络线旁路开关采集继电器判断故障周期数配置*/ + UINT32 dwOverridePressCycNum = 0U; /*联络线旁路开关按下周期*/ + UINT8 btnPressValidTime = CI_TIME_NO; /*开关按下时间是否达到有效时间*/ + UINT8 btnPressFaultTime = CI_TIME_NO; /*开关按下时间是否达到故障时间*/ + + /*获取联络线旁路开关采集继电器*/ + wOverrideRelayId = GetConnectOverrideRelayId(wOverrideId); + /*联络线旁路开关采集继电器落下*/ + wRelayBelongOcId = GetRelayBelongOCId(wOverrideRelayId); + /*获取与OC通信状态*/ + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); + /*获取A系板卡状态*/ + cABoardState = GetRelayACollBoardState(wOverrideRelayId); + /*获取B系板卡状态*/ + cBBoardState = GetRelayBCollBoardState(wOverrideRelayId); + + /*Step1:继电器正常/异常落下判断*/ + if ((TRANSMIT_STATE_GOOD == cOcCommState) + && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*OC通信正常且有一系板卡状态正常,设置继电器正常落下*/ + SetOverrideErrDownState(wOverrideId, CONNECT_OVERRIDE_ERRDOWN_NO); + /*获取旁路开关正常按下周期号*/ + dwOverridePressCycNum = GetOverridePressStartCyc(wOverrideId); + + /*Step1.5:继电器正常落下当周期,判断开关按下时间,触发旁路设置流程*/ + if (0u != dwOverridePressCycNum) + { + /*上周期有效吸起,继续判断吸起时间*/ + /*获取旁路开关采集有效周期数配置*/ + dwRelayCollCycNumCfg = GetOverrideBtnCollCycNum(); + /*判断是否达到有效时间*/ + btnPressValidTime = SystemOverTimeCheck(dwOverridePressCycNum, dwRelayCollCycNumCfg); + /*获取旁路开关采集故障周期数配置*/ + dwRelayFaultCycNumCfg = GetOverrideBtnFaultCycNum(); + /*判断是否达到故障时间*/ + btnPressFaultTime = SystemOverTimeCheck(dwOverridePressCycNum, dwRelayFaultCycNumCfg); + + if ((CI_TIME_OUT == btnPressValidTime) && (CI_TIME_OUT != btnPressFaultTime)) + { + /*旁路开关按下有效,且按钮按下时间达到判断采集有效时间,且未达到故障判断时间*/ + /*触发联络线旁路流程*/ + ConnectOverrideSetProc(wOverrideId); + } + else + { + /*不处理*/ + } + } + else + { + /*连续正常落下,不处理*/ + } + /*Step1.5 End*/ + } + else + { + /*OC通信异常或两系板卡状态均故障,设置继电器通信异常落下*/ + SetOverrideErrDownState(wOverrideId, CONNECT_OVERRIDE_ERRDOWN_YES); + } + + /*Step2:继电器吸起相关状态清理*/ + /** 继电器落下,清除正常吸起周期和误触发吸起周期 **/ + SetOverridePressStartCyc(wOverrideId, 0U); + SetOverrideErrTrigCyc(wOverrideId, 0U); + /*清除异常吸起标志*/ + SetOverrideErrTrigState(wOverrideId, CONNECT_OVERRIDE_ERRTRIG_NO); +} + +/* +* 功能描述:设置联络线旁路 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值: +* 注意事项:进入此函数说明该旁路ID未设置旁路,旁路开关按下满足触发旁路设置流程 +* Created By wyd 20260311 +*/ +static void ConnectOverrideSetProc(UINT16 wOverrideId) +{ + UINT8 chConnectOverrideCond = OVERRIDE_REASON_NONE; /*联络线旁路条件(旁路原因)*/ + UINT16 wRelRouteReqRelayId = 0u; /*关联进路请求继电器ID*/ + UINT8 chStartFLockTag = CI_START_FLOCK_ERROR; /*上电封锁状态*/ + UINT8 chStartLockTag = CI_START_LOCK_ERROR; /*上电解锁状态*/ + UINT8 cRouteReqRelayState = RELAY_STATE_UP; /*关联进路请求继电器状态*/ + UINT8 chLogSecCtFlag = CI_SUCCESS; /*逻辑区段CT占用标志(含悬垂悬入)*/ + UINT16 wRelSwitchId = 0u; /*关联道岔ID*/ + UINT8 chSwitchState = SWITCH_POSITION_INVALID; /*关联道岔状态*/ + UINT8 chSetCheckRslt = CI_ERROR; /*旁路激活检查结果*/ + UINT16 wCtLogSecId = 0u; /*CT占用的逻辑区段ID*/ + + /*获取上电封锁解锁状态*/ + chStartFLockTag = GetStartFLockFlag(); + chStartLockTag = GetStartLockFlag(); + if ((CI_START_FLOCK_NO == chStartFLockTag) && (CI_START_LOCK_NO == chStartLockTag)) + { + /*联络线旁路条件检查*/ + chConnectOverrideCond = ConnectOverrideCondCheck(wOverrideId, &chLogSecCtFlag, &wCtLogSecId); + + /*获取关联进路请求继电器ID和状态*/ + wRelRouteReqRelayId = GetOverrideRouteRequestRelayId(wOverrideId); + cRouteReqRelayState = GetRelayCollState(wRelRouteReqRelayId); + + /*满足任一旁路条件,且未收到进路请求,且已完成上电解封解锁*/ + if ((OVERRIDE_REASON_NONE != chConnectOverrideCond) && (RELAY_STATE_DOWN == cRouteReqRelayState)) + { + /*获取关联道岔ID和状态*/ + wRelSwitchId = GetConnectOverrideSwitchId(wOverrideId); + chSwitchState = GetSwitchCurPosition(wRelSwitchId); + + /*检查关联道岔处于定位*/ + if (SWITCH_POSITION_DINGWEI == chSwitchState) + { + chSetCheckRslt = CI_SUCCESS; + } + else + { + /*关联道岔不处于定位,不允许旁路并报警*/ + chSetCheckRslt = CI_ERROR; + /*双参数报警 TODO*/ + } + + /*检查关联逻辑区段不为CT占用*/ + if (CI_ERROR == chLogSecCtFlag) + { + /*不处理*/ + } + else + { + /*逻辑区段CT占用(含通信的RM车),不允许旁路并报警*/ + chSetCheckRslt = CI_ERROR; + SetErrorData(EFUNC_ConnectOverrideSetProc, + CI_DEVICE_TYPE_LOGICSEC, + wCtLogSecId, + ETYPE_LOGSEC_CT_OVERRIDE_FAIL, + LOGICSECTION_OCCUPY_CT, + ESEND_LEVEL_ATS); + } + + if (CI_SUCCESS == chSetCheckRslt) + { + /*设置旁路激活,记录旁路条件(旁路原因)*/ + SetOverrideState(wOverrideId, CONNECT_OVERRIDE_STATE_YES); + SetOverrideReason(wOverrideId, chConnectOverrideCond); + } + else + { + /*不处理*/ + } + } + else + { + /*不满足设置条件,不处理*/ + } + } + else + { + /*不满足设置条件,不处理*/ + } +} + +/* +* 功能描述:联络线旁路条件检查 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* OUT UINT8 *pIsLogSecCt 是否有CT占用 +* OUT UINT16 *pLogSecId CT占用的逻辑区段ID +* 返 回 值:旁路条件 +* Created By wyd 20260311 +*/ +static UINT8 ConnectOverrideCondCheck(UINT16 wOverrideId, OUT UINT8 *pIsLogSecCt, OUT UINT16 *pLogSecId) +{ + UINT16 wPhySecId = 0u; /*联络线旁路关联物理区段ID*/ + UINT16 *pLogSecIdBuf = NULL; /*物理区段包含的逻辑区段ID数组*/ + UINT8 wLogSecSum = 0u; /*物理区段包含的逻辑区段数量*/ + UINT8 wEaSum = 0u; /*防护区数量*/ + UINT8 wEaLogSecSum = 0u; /*防护区包含的逻辑区段数量*/ + UINT16 *pEaLogSecIdBuf = NULL; /*防护区包含的逻辑区段ID数组*/ + UINT8 i = 0u; /*循环变量*/ + UINT8 j = 0u; /*循环变量*/ + UINT8 k = 0u; /*循环变量*/ + UINT8 chLogSecFLockType = SEC_FLOCK_TYPE_NONE; /*逻辑区段封锁类型*/ + UINT8 chOverrideCond = OVERRIDE_REASON_NONE; /*联络线旁路条件*/ + UINT8 chLogSecOccupyState = LOGICSECTION_OCCUPY_NO; /*逻辑区段占用状态(未与物理区段融合)*/ + UINT8 chLogSecTXOccupyState = LOGICSECTION_OCCUPY_NO_TX; /*逻辑区段是否通信车占用*/ + + /*获取联络线旁路关联物理区段ID*/ + wPhySecId = GetConnectOverridePhySecId(wOverrideId); + /*获取物理区段包含的逻辑区段数量和ID*/ + wLogSecSum = GetPhySecIncLogSecSum(wPhySecId); + pLogSecIdBuf = GetPhySecIncLogSecIdBuf(wPhySecId); + if ((NULL == pIsLogSecCt) || (NULL == pLogSecId) || (0u == wPhySecId) || (0u == wLogSecSum) || (NULL == pLogSecIdBuf)) + { + /*异常,返回无旁路条件*/ + } + else + { + /*先将逻辑区段CT占用标志置为未CT占用*/ + *pIsLogSecCt = CI_ERROR; + *pLogSecId = 0u; + /*获取防护区数量*/ + wEaSum = GetEaNum(); + + for (i = 0u; i < wLogSecSum; i++) + { + /*Step1:逻辑区段占用判断*/ + chLogSecOccupyState = GetLogSecOccupyState(pLogSecIdBuf[i]); + chLogSecTXOccupyState = GetLogSecTXOccupyState(pLogSecIdBuf[i]); + if (LOGICSECTION_OCCUPY_NO == chLogSecOccupyState) + { + /*逻辑区段空闲,不处理*/ + } + else + { + /*逻辑区段占用*/ + /*这里不单独判NCT占用直接赋值,是因为CT占用需要向ATS报警,后续步骤再判*/ + chOverrideCond |= OVERRIDE_REASON_NCT; + if ((LOGICSECTION_OCCUPY_UT == chLogSecOccupyState) && (LOGICSECTION_OCCUPY_NO_TX == chLogSecTXOccupyState)) + { + /*逻辑区段NCT占用(无通信车),不处理*/ + } + else + { + /*逻辑区段CT占用(有通信的RM车也认为CT占用),输出CT占用标志和逻辑区段ID*/ + *pIsLogSecCt = CI_SUCCESS; + *pLogSecId = pLogSecIdBuf[i]; + } + } + + /*Step2:逻辑区段封锁判断*/ + chLogSecFLockType = GetLogSecFLockType(pLogSecIdBuf[i]); + chOverrideCond |= LogSecFLockTypeToOverrideCond(chLogSecFLockType); + + /*Step3:逻辑区段防护区建立判断*/ + /*遍历所有防护区*/ + for (j = 0u; j < wEaSum; j++) + { + /*获取防护区包含逻辑区段数量和ID*/ + wEaLogSecSum = EaGetLogNum(j); + pEaLogSecIdBuf = EaGetLogId(j); + + if ((0u == wEaLogSecSum) || (NULL == pEaLogSecIdBuf)) + { + /*异常防护*/ + } + else + { + /*遍历防护区所有逻辑区段*/ + for (k = 0u; k < wEaLogSecSum; k++) + { + /*判断联络线旁路逻辑区段是否为防护区逻辑区段*/ + if (pEaLogSecIdBuf[k] == pLogSecIdBuf[i]) + { + /*当前逻辑区段存在防护区*/ + chOverrideCond |= OVERRIDE_REASON_EA; + break; + } + else + { + /*继续遍历*/ + } + } + } + } + } + } + + return chOverrideCond; +} + +/* +* 功能描述:逻辑区段封锁原因转换为联络线旁路条件 +* 参数说明:const UINT8 chLogSecFLockType 逻辑区段封锁原因 +* 返 回 值:联络线旁路条件 +* Created By wyd 20260311 +*/ +static UINT8 LogSecFLockTypeToOverrideCond(UINT8 chLogSecFLockType) +{ + UINT8 retVal = 0u; /*返回值*/ + + /*SPKS激活*/ + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS & chLogSecFLockType)) + { + retVal |= OVERRIDE_REASON_FLOCK_SPKS; + } + else + { + /*nothing*/ + } + + /*ATS设置区段封锁*/ + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD & chLogSecFLockType)) + { + retVal |= OVERRIDE_REASON_FLOCK_CMD; + } + else + { + /*nothing*/ + } + + /*全线封锁*/ + if (SEC_FLOCK_TYPE_ALLFLOCK == (SEC_FLOCK_TYPE_ALLFLOCK & chLogSecFLockType)) + { + retVal |= OVERRIDE_REASON_FLOCK_ALL; + } + else + { + /*nothing*/ + } + + /*CESB激活*/ + if (SEC_FLOCK_TYPE_CESB == (SEC_FLOCK_TYPE_CESB & chLogSecFLockType)) + { + retVal |= OVERRIDE_REASON_FLOCK_CESB; + } + else + { + /*nothing*/ + } + + return retVal; +} + +/* +* 功能描述:已激活的联络线旁路维持处理 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值: +* 注意事项:进入此函数说明该旁路ID已设置旁路 +* Created By wyd 20260311 +*/ +static void ConnectOverrideKeepProc(UINT16 wOverrideId) +{ + UINT8 chCurrOverrideCond = OVERRIDE_REASON_NONE; /*当前旁路条件*/ + UINT8 chPrevOverrideCond = OVERRIDE_REASON_NONE; /*上周期旁路条件*/ + UINT16 wRelRouteReqRelayId = 0u; /*关联进路请求继电器ID*/ + UINT8 cRouteReqRelayState = RELAY_STATE_DOWN; /*关联进路请求继电器状态*/ + UINT8 chLogSecCtFlag = CI_SUCCESS; /*逻辑区段CT占用标志,CI_SUCCESS有CT占用,CI_ERROR无CT占用*/ + UINT16 wCtLogSecId = 0u; /*CT占用的逻辑区段ID*/ + UINT16 wRelSwitchId = 0u; /*关联道岔ID*/ + UINT8 chSwitchState = SWITCH_POSITION_INVALID; /*关联道岔状态*/ + UINT8 chNewEaCheckTag = CI_ERROR; /*本周期是否新增防护区,CI_SUCCESS未新增,CI_ERROR新增*/ + UINT8 chKeepOverrideFlag = CI_ERROR; /*是否维持旁路,CI_SUCCESS维持旁路,CI_ERROR取消旁路*/ + + /*获取当前联络线旁路原因*/ + chCurrOverrideCond = ConnectOverrideCondCheck(wOverrideId, &chLogSecCtFlag, &wCtLogSecId); + /*获取关联进路请求继电器ID和状态*/ + wRelRouteReqRelayId = GetOverrideRouteRequestRelayId(wOverrideId); + cRouteReqRelayState = GetRelayCollState(wRelRouteReqRelayId); + /*获取关联道岔ID和状态*/ + wRelSwitchId = GetConnectOverrideSwitchId(wOverrideId); + chSwitchState = GetSwitchCurPosition(wRelSwitchId); + + /*检查是否满足联络线旁路取消条件*/ + if ((RELAY_STATE_DOWN == cRouteReqRelayState) + && (SWITCH_POSITION_DINGWEI == chSwitchState) + && (CI_ERROR == chLogSecCtFlag)) + { + /*满足条件:进路请求继电器未吸起,213道岔定位,逻辑区段无CT占用。继续检查旁路条件变化*/ + /*获取目前旁路条件*/ + chPrevOverrideCond = GetOverrideReason(wOverrideId); + + /*判断旁路条件与上周期相比是否增加*/ + if (chPrevOverrideCond == (chCurrOverrideCond | chPrevOverrideCond)) + { + /*条件未增加,继续检查旁路逻辑区段是否新增防护区*/ + chNewEaCheckTag = OverrideSecNewEaCheck(wOverrideId); + if (CI_SUCCESS == chNewEaCheckTag) + { + /*检查通过(未新增防护区),维持旁路*/ + chKeepOverrideFlag = CI_SUCCESS; + } + else + { + /*检查不通过(新增防护区),取消旁路*/ + } + } + else + { + /*本周期旁路原因增加,取消旁路*/ + } + } + else + { + /*关联进路请求继电器吸起,或关联道岔不在定位,或关联区段CT占用,取消旁路*/ + } + + /*判断是否维持旁路,做对应处理*/ + if (CI_SUCCESS == chKeepOverrideFlag) + { + /*维持旁路,判断旁路条件是否减少*/ + if (chPrevOverrideCond == (chCurrOverrideCond & chPrevOverrideCond)) + { + /*旁路条件未减少,不处理*/ + } + else + { + /*旁路条件减少,更新旁路条件至动态数据*/ + SetOverrideReason(wOverrideId, chCurrOverrideCond); + } + } + else + { + /*取消旁路,动态数据中旁路状态更新为未激活,旁路条件更新为无条件*/ + SetOverrideState(wOverrideId, CONNECT_OVERRIDE_STATE_NO); + SetOverrideReason(wOverrideId, OVERRIDE_REASON_NONE); + } +} + +/* +* 功能描述:联络线旁路区段新增防护区检查 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:本周期是否新增防护区 +* CI_SUCCESS:检查通过,无新增防护区 +* CI_ERROR:检查未通过,有新增防护区 +* Created By wyd 20260311 +*/ +static UINT8 OverrideSecNewEaCheck(UINT16 wOverrideId) +{ + UINT8 wEaSum = EA_MAX_NUM + 1U; /*防护区总数*/ + UINT32 dwEaBuildMyCycNum = 0u; /*防护区建立时本RC的周期号*/ + UINT32 dwCurrCycNum = 0u; /*当前周期号*/ + UINT16 wPhySecId = 0u; /*联络线旁路啊关联物理区段ID*/ + UINT16 *pLogSecIdBuf = NULL; /*物理区段对应逻辑区段ID数组*/ + UINT8 wLogSecSum = 0u; /*物理区段对应逻辑区段数量*/ + UINT8 wEaLogSecSum = 0u; /*防护区包含逻辑区段数量*/ + UINT16 *pEaLogSecIdBuf = NULL; /*防护区包含逻辑区段ID数组*/ + UINT8 i = 0u; /*循环变量*/ + UINT8 j = 0u; /*循环变量*/ + UINT8 k = 0u; /*循环变量*/ + UINT8 retVal = CI_ERROR; /*返回值(本周期是否新增防护区),CI_SUCCESS未新增,CI_ERROR新增*/ + + /*获取关联物理区段和逻辑区段ID*/ + wPhySecId = GetConnectOverridePhySecId(wOverrideId); + wLogSecSum = GetPhySecIncLogSecSum(wPhySecId); + pLogSecIdBuf = GetPhySecIncLogSecIdBuf(wPhySecId); + /*获取防护区总数*/ + wEaSum = GetEaNum(); + + /*参数检查*/ + if ((0u == wPhySecId) || (0u == wLogSecSum) || (NULL == pLogSecIdBuf)) + { + /*异常,检查不通过*/ + } + else + { + /*先将返回值置为通过*/ + retVal = CI_SUCCESS; + /*遍历所有逻辑区段*/ + for (i = 0u; i < wLogSecSum; i++) + { + /*遍历所有防护区*/ + for (j = 0u; j < wEaSum; j++) + { + /*获取当前防护区包含的逻辑区段*/ + wEaLogSecSum = EaGetLogNum(j); + pEaLogSecIdBuf = EaGetLogId(j); + + /*参数检查*/ + if ((0u == wEaLogSecSum) || (NULL == pEaLogSecIdBuf)) + { + /*异常,检查不通过*/ + retVal = CI_ERROR; + } + else + { + /*参数检查通过,遍历防护区包含的逻辑区段ID*/ + for (k = 0u; k < wEaLogSecSum; k++) + { + /*判断防护区逻辑区段ID是否和旁路逻辑区段ID相同*/ + if (pEaLogSecIdBuf[k] == pLogSecIdBuf[i]) + { + /*防护区逻辑区段ID是否和旁路逻辑区段ID相同,说明当前防护区覆盖当前逻辑区段*/ + /*获取防护区建立周期号和当前周期号*/ + dwEaBuildMyCycNum = EaGetBuildMyCycNum(j); + dwCurrCycNum = Get2oo2CurCycleNum(); + /*检查防护区建立周期号是否为当前周期号*/ + if (dwEaBuildMyCycNum == dwCurrCycNum) + { + /*防护区建立周期号为当前周期号,说明当前防护区是本周期新建立于当前逻辑区段的,检查不通过*/ + retVal = CI_ERROR; + } + else + { + /*该防护区检查通过*/ + } + break; + } + else + { + /*继续遍历*/ + } + } + } + + if (CI_ERROR == retVal) + { + /*已经检查不通过,不再继续遍历*/ + break; + } + else + { + /*继续检查*/ + } + } + + if (CI_ERROR == retVal) + { + /*已经检查不通过,不再继续遍历*/ + break; + } + else + { + /*继续检查*/ + } + } + } + + return retVal; +} + +/* +* 功能描述:根据物理区段ID查询联络线旁路状态 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:CONNECT_OVERRIDE_STATE_NO:未旁路 +* CONNECT_OVERRIDE_STATE_YES:已旁路 +* CI_ERROR:未查询到 +* Created By wyd 20260313 +*/ +UINT8 GetOverrideStateByPhySecId(UINT16 wPhySecId) +{ + INT16 i = 0; /*循环变量*/ + UINT8 retVal = CI_ERROR; /*返回值*/ + + /*遍历所有联络线旁路*/ + for (i = 0; i < gConnectOverrideRelaySum; i++) + { + /*判断关联物理区段ID和输入ID是否一致*/ + if (wPhySecId == gConnectOverrideRelayCfgStr[i].RelPhySecId) + { + /*关联物理区段ID和输入ID一致,返回旁路状态*/ + retVal = gConnectOverrideData[i].OverrideState; + break; + } + else + { + /*继续遍历*/ + } + } + + return retVal; +} + +/* +* 功能描述:根据逻辑区段ID查询联络线旁路状态 +* 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 +* 返 回 值:CONNECT_OVERRIDE_STATE_NO:未旁路 +* CONNECT_OVERRIDE_STATE_YES:已旁路 +* CI_ERROR:未查询到 +* Created By wyd 20260313 +*/ +UINT8 GetOverrideStateByLogSecId(UINT16 wLogSecId) +{ + UINT8 retVal = CI_ERROR; /*返回值(旁路状态)*/ + UINT16 wPhySecId = 0u; /*物理区段ID*/ + + /*获取逻辑区段ID对应的物理区段ID*/ + wPhySecId = GetLgcSecRelativePhySecId(wLogSecId); + if (0u == wPhySecId) + { + /*查询失败*/ + } + else + { + /*根据物理区段ID查询联络线旁路状态*/ + retVal = GetOverrideStateByPhySecId(wPhySecId); + } + + return retVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.h b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.h new file mode 100644 index 0000000..b3bd850 --- /dev/null +++ b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.h @@ -0,0 +1,91 @@ +/******************************************************** +* +* 文 件 名: ConnectOverrideDataMg.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2025-12-17 +* 作 者: 联锁组 +* 功能描述: 联络线旁路继电器相关数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef CONNECT_OVERRIDE_DATA_MG_H +#define CONNECT_OVERRIDE_DATA_MG_H + +#include "CommonTypes.h" +#include "../System/CiSystemDefine.h" +#include "ConnectOverrideCfgDataMg.h" + +/*联络线旁路继电器动态数据结构体*/ +typedef struct S_ConnectOverrideDataStru +{ + UINT16 ConnectOverrideId; /*联络线旁路继电器ID*/ + UINT8 OverrideState; /*旁路状态 0x55:未激活 0xAA:已激活*/ + UINT8 OverrideReason; /*每一个bit代表一种条件 + bit0=1:逻辑区段占用且未判ARB + bit1=1:区段封锁—ATS设置区段封锁 + bit2=1:区段封锁—全线区段封锁 + bit3=1:区段封锁—SPKS激活 + bit4=1:区段封锁—CESB激活 + bit5=1:防护区建立 + bit6-bit7:预留 + 当旁路状态为0xAA(已激活),但旁路条件为0x00(无条件)时, + 说明该旁路状态激活时存在某种条件,但目前该条件已不满足, + 且无取消条件触发,此时旁路状态仍保留激活状态。*/ + UINT32 OverridePressStartCyc; /*采集到旁路按钮正常按下起始周期号(上周期未按下且本周期按下,记录周期号;未按下时清空)*/ + UINT32 OverrideErrTrigStartCyc; /*采集到旁路按钮误触发按下起始周期号(上周期未按下且本周期按下,记录周期号;未按下时清空)*/ + UINT8 OverrideErrTrigState; /*旁路开关采集继电器异常吸起标志,0x55未异常吸起,0xaa异常吸起 + 旁路开关正常按下时间达到故障判断时间,或误触发按下时间达到误触发判断时间,设置旁路开关异常吸起标志*/ + UINT8 OverrideErrDownState; /*旁路开关采集继电器异常落下状态 0x55:未异常落下 0xAA:异常落下 + OC通信异常或两系板卡状态均故障,设置继电器通信异常落下*/ +} ConnectOverrideDataStru; + +extern ConnectOverrideDataStru gConnectOverrideData[CONNECT_OVERRIDE_RELAY_SUM_MAX]; /* 联络线旁路继电器动态数据 */ + +#ifdef __cplusplus +extern "C" { +#endif + + /* + * 功能描述:获取联络线旁路结构体地址 + * 参数说明:void + * 返 回 值:联络线旁路结构体地址 + * Created By wyd 20260311 + */ + ConnectOverrideDataStru *GetConnectOverrideData(void); + + /* + * 功能描述:联络线旁路主处理 + * 参数说明:无 + * 返 回 值:无 + * Created By wyd 20260311 + */ + void ConnectOverrideMainProc(void); + + /* + * 功能描述:根据物理区段ID查询联络线旁路状态 + * 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 + * 返 回 值:CONNECT_OVERRIDE_STATE_NO:未旁路 + * CONNECT_OVERRIDE_STATE_YES:已旁路 + * CI_ERROR:未查询到 + * Created By wyd 20260313 + */ + UINT8 GetOverrideStateByPhySecId(UINT16 wPhySecId); + + /* + * 功能描述:根据逻辑区段ID查询联络线旁路状态 + * 参数说明:const UINT16 wOverrideId 联络线旁路索引编号 + * 返 回 值:CONNECT_OVERRIDE_STATE_NO:未旁路 + * CONNECT_OVERRIDE_STATE_YES:已旁路 + * CI_ERROR:未查询到 + * Created By wyd 20260313 + */ + UINT8 GetOverrideStateByLogSecId(UINT16 wLogSecId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideRelayDefine.h b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideRelayDefine.h new file mode 100644 index 0000000..4e527be --- /dev/null +++ b/TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideRelayDefine.h @@ -0,0 +1,45 @@ +/******************************************************** +* +* 文 件 名: ConnectOverrideRelayDefine.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026-3-11 +* 作 者: 联锁组 +* 功能描述: 联络线旁路继电器相关常量定义 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef CONNECT_OVERRIDE_DATA_DEFINE_H +#define CONNECT_OVERRIDE_DATA_DEFINE_H + +/*联络线旁路继电器数量最大值*/ +#define CONNECT_OVERRIDE_RELAY_SUM_MAX (UINT16)1U + +/*联络线旁路激活状态*/ +#define CONNECT_OVERRIDE_STATE_NO (UINT8)0x55u /*联络线旁路未激活*/ +#define CONNECT_OVERRIDE_STATE_YES (UINT8)0xAAu /*联络线旁路已激活*/ + +/*联络线旁路开关采集继电器异常落下状态*/ +#define CONNECT_OVERRIDE_ERRDOWN_NO (UINT8)0x55u /*联络线旁路开关采集继电器未异常落下*/ +#define CONNECT_OVERRIDE_ERRDOWN_YES (UINT8)0xAAu /*联络线旁路开关采集继电器异常落下*/ + +/*联络线旁路开关采集状态*/ +#define CONNECT_OVERRIDE_PRESSED_NO (UINT8)0x55u /*联络线旁路开关未有效按下*/ +#define CONNECT_OVERRIDE_PRESSED_YES (UINT8)0xaau /*联络线旁路开关有效按下*/ + +/*联络线旁路原因*/ +#define OVERRIDE_REASON_NONE (UINT8)0x00u /*联络线旁路原因:无原因*/ +#define OVERRIDE_REASON_NCT (UINT8)0x01u /*联络线旁路原因:NCT占用且未判ARB*/ +#define OVERRIDE_REASON_FLOCK_CMD (UINT8)0x02u /*联络线旁路原因:ATS区段封锁*/ +#define OVERRIDE_REASON_FLOCK_ALL (UINT8)0x04u /*联络线旁路原因:ATS全线封锁*/ +#define OVERRIDE_REASON_FLOCK_SPKS (UINT8)0x08u /*联络线旁路原因:SPKS激活*/ +#define OVERRIDE_REASON_FLOCK_CESB (UINT8)0x10u /*联络线旁路原因:CESB激活*/ +#define OVERRIDE_REASON_EA (UINT8)0x20u /*联络线旁路原因:防护区建立*/ + +/*旁路开关采集继电器异常吸起标志*/ +#define CONNECT_OVERRIDE_ERRTRIG_NO ((UINT8)0x55) /*旁路开关异常吸起标志无效*/ +#define CONNECT_OVERRIDE_ERRTRIG_YES ((UINT8)0xaa) /*旁路开关异常吸起标志有效*/ + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c index df6f0db..c6c870e 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c +++ b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c @@ -95,6 +95,18 @@ UINT8 g_LocalSnowModel = CI_LOCAL_SNOW_UNVALID; /* UINT8 gLocalAreaIteCutNum = 0U; /*本地区间ITE切除数量*/ UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX] = { 0U }; /*本地区间ITE切除ID数组——需要存储ZC发送的所有区间ID*/ +UINT8 gAllLineAccelerationState = CI_ALL_LINE_ACC_UNVALID; /*全线牵引加速度设置状态:0x55-未设置;0xAA-已设置*/ +UINT8 gAllLineAccelerationValue = 0U; /*全线牵引加速度设置值*/ + +UINT8 gAllLineBrakeRateState = CI_ALL_LINE_BRAKE_UNVALID; /*全线制动率设置状态:0x55-未设置;0xAA-已设置*/ +UINT8 gAllLineBrakeRateValue = 0U; /*全线制动率设置值*/ + +UINT8 gLocalAreaAccelerationNum = 0U; /*本地区间牵引加速度数量*/ +AreaAccelerationInfoStruct gszLocalAreaAcceleration[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*本地区间牵引加速度数组*/ + +UINT8 gLocalAreaBrakeRateNum = 0U; /*本地区间制动率数量*/ +AreaBrakeRateInfoStruct gszLocalAreaBrakeRate[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*本地区间制动率数组*/ + /******************************联锁标志数据管理****************************/ @@ -1228,7 +1240,6 @@ void RouteDrvInnerSwitch(const UINT16 routeId, const UINT8 DrivFlag) RouteSwitchStruct* routeSwitchStru = NULL; /*道岔数据*/ UINT8 ii = 0u; /*循环变量*/ UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/ - UINT8 funRtn = CI_ERROR; RouteProtectSwitchStruct* pRouteProtectSwitchStru = NULL; /*防护道岔数据*/ UINT8 chLocalCiId = 0U;/*本地联锁ID*/ UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁*/ @@ -1318,17 +1329,13 @@ edit cgh 20241203 UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoSwit) { UINT8 ii = 0u; - UINT8 switchSum = 0u; UINT16 switchId = 0u; UINT8 switchExpPosition = SWITCH_POSITION_INVALID; /*道岔期望位置*/ UINT8 switchDancaoPosition = SWITCH_POSITION_INVALID; /*单操有效位置*/ - RouteSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/ UINT8 innerSwitchRetVal = CI_ERROR; /*检查进路内道岔是否可被驱动的结果*/ UINT8 assocSwitchRetVal = CI_ERROR; /*检查带动道岔是否可被驱动的结果*/ UINT8 assocSwitchSum = 0u; /*道岔数目*/ RouteAssocSwitchStruct routeAssocSwitchStru = {0,0}; /*道岔数据*/ - UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/ - RouteProtectSwitchStruct* pRouteProtectSwitchStru = NULL; /*防护道岔数据*/ UINT8 chAutoCheck = 0U; UINT8 chSendLevel = 0U; chAutoCheck = AutoSignalOrRouteValid(routeId); @@ -1701,6 +1708,7 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId) UINT8 signalIsfushiFlag = 0u; UINT8 signalCurDriveColor = 0u; + UINT8 chDsnLinSwitch = 0u; routeLevel = GetRouteLevel(routeId); /*获取进路级别*/ if(ROUTE_LEVEL_BLOC == routeLevel) { @@ -1800,6 +1808,15 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId) } lightExtinctState = GetSignalLightExtinctState(signalId);/*信号机亮灭状态*/ + chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + if (FUNC_SWITCH_ON == chDsnLinSwitch) + { + lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES;/*DSN开关打开,默认设置信号机亮灯状态为亮灯*/ + } + else + { + /* 不处理 */ + } sigalMaintainState = GetSignalMaintainState(signalId);/*信号机维修点灯状态*/ signalIsfushiFlag = GetSignalIsfushiFlag(signalId); @@ -2069,6 +2086,7 @@ UINT8 DriveSignalClose(const UINT16 signalId) UINT8 routeLeadProperty = 0U; UINT8 routeState = 0U; UINT16 wStartSignalId = 0u; + UINT8 chDsnLinSwitch = 0u; if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX)) { reVal = CI_ERROR; @@ -2103,6 +2121,15 @@ UINT8 DriveSignalClose(const UINT16 signalId) routeState = GetRouteState(routeId);/*获取进路状态*/ wStartSignalId = GetRouteStartSignalId(routeId); + chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + if (FUNC_SWITCH_ON == chDsnLinSwitch) + { + lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES;/*DSN开关打开,默认设置信号机亮灯状态为亮灯*/ + } + else + { + /* 不处理 */ + } if (((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty)) && ((ROUTE_STATE_LEAD_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCKERR == routeState) @@ -2552,7 +2579,7 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) { /*函数故障码*/ UINT8 const functionId = EFUNC_CHECK_SWITCH_MOVE; - + UINT8 reVal = CI_ERROR; /*局部变量*/ /*本联锁类型*/ UINT8 ciType = 0u; @@ -2562,42 +2589,21 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) UINT16 switch1stSecId = 0u; UINT8 switch1stLockStatus = 0u; UINT8 switch1stYLockState = 0u; - UINT8 switch1stSecOccuState = 0u; - UINT8 switch1stSecLockState = 0u; - UINT8 switch1stSecMerOccuState = 0u; - UINT8 arbState = 0u; - UINT8 switch1stSecJumpLockState = 0u; - UINT8 switch1stSecFLockState = 0u;/*道岔1道岔区段封锁状态*/ - /*道岔2*/ + UINT16 switch1stExSecId = 0u; /*道岔1额外物理区段ID*/ + /*道岔2*/ UINT16 switch2ndId = 0u; UINT16 switch2ndSecId = 0u; UINT8 switch2ndLockStatus = 0u; UINT8 switch2ndYLockState = 0u; - UINT8 switch2ndSecOccuState = 0u; - UINT8 switch2ndSecLockState = 0u; - UINT8 switch2ndSecMerOccuState = 0u; - UINT8 reVal = CI_ERROR; - UINT8 ARBMoveSwitchFlag = 0u; - UINT8 switch2ndSecJumpLockState = 0u; - UINT8 switch2ndSecFLockState = 0u;/*道岔2道岔区段封锁状态*/ - UINT8 vobcInterface = 0u;/*vobc接口标识*/ - UINT8 localCiType = 0u; /*ci类型*/ - UINT8 vobcInerface = 0u;/*vobc接口*/ - UINT8 gdDLline = 0u; /*轨道电路标识*/ - UINT8 cLogSecLockFlag = 0u; /*逻辑区段锁闭标志*/ - UINT16 logOccOrLockId = 0u; - UINT8 logState = 0U; + UINT16 switch2ndExSecId = 0u; /*道岔2额外物理区段ID*/ /* 道岔检查 */ switch1stSecId = GetSwitchPhySectionId(switchId); switch1stLockStatus = GetSwitchLockStatus(switchId); switch1stYLockState = GetSwitchYLockState(switchId); - switch1stSecMerOccuState = GetPhySecCurMergeState(switch1stSecId); - switch1stSecFLockState = GetPhySecFLockState(switch1stSecId);/*获取道岔1道岔区段封锁状态*/ - ciType = GetLocalCiType(); - /*判断是否采用轨道电路*/ - gdDLline = GetCiFunctionSwitchConfig(FUNC_CLD_GD_DIANLU_LINE); + switch1stExSecId = GetSwitchExtraPhySecId(switchId);/*获取道岔1额外物理区段ID*/ + ciType = GetLocalCiType(); if ((JKJ_REYLAY_VALID == JkjRelayValid) && (CI_TYPE_CLD == ciType)) {/*应急盘继电器有效状态*/ SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, 0u, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, ESEND_LEVEL_ATS);/*增加OC应急控功能,继电器ID填0*/ @@ -2607,21 +2613,7 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) { reVal = CI_SUCCESS; } - vobcInerface = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); - if (((LINE_FAO == vobcInerface) || (LINE_HLHT == vobcInerface) || (LINE_FAOHLHT == vobcInerface)) - && (CI_TYPE_CLD == ciType) && (FUNC_SWITCH_ON == gdDLline)) - {/*如果是FAO线路或FALHLHT线路 车辆段 使用轨道电路,直接使用与占用原则融合后状态来处理道岔*/ - switch1stSecOccuState = GetPhySecCurAndMergeState(switch1stSecId); - } - else - {/*其他场景:正线、或者是使用计轴设备均使用GJ处理*/ - switch1stSecOccuState = GetPhySecCurOccupyState(switch1stSecId); - } - /*获取ARB状态*/ - arbState = GetArbState(switch1stSecId); - switch1stSecLockState = GetPhySecLockState(switch1stSecId); - switch1stSecJumpLockState = GetPhySecJumpLockState(switch1stSecId); /*获取物理区段跳跃锁闭状态*/ if (CI_SUCCESS == reVal) { if (SWITCH_LOCK_STATUS_NO != switch1stLockStatus) @@ -2663,41 +2655,8 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) } if (CI_SUCCESS == reVal) - { - if (PHYSICAL_SECTION_LOCK_NO != switch1stSecLockState) - {/*道岔关联物理区段锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_LOCK_STATE, switch1stSecLockState, sendLevel); - reVal = CI_ERROR; - } - else - { - /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLockState(switch1stSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - else - { - /*物理区段未锁闭,逻辑区段未进路锁闭,检查物理区段包含的逻辑区段逻辑锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLogicLockState(switch1stSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - else - { - ; /*不处理*/ - } - } - } + {/*道岔1物理区段检查*/ + reVal = GetDanCaoPhySecValidState(switch1stSecId, oper_src, sendLevel); } else { @@ -2705,108 +2664,13 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) } if (CI_SUCCESS == reVal) - { - if (PHYSICAL_SECTION_JUMP_LOCK_NO != switch1stSecJumpLockState) - { /*区段跳跃锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_JUMP_LOCK, switch1stSecJumpLockState, sendLevel); - reVal = CI_ERROR; + {/*道岔1额外物理区段检查*/ + if ((0u < switch1stExSecId) && (UINT16_MAX > switch1stExSecId)) + { + reVal = GetDanCaoPhySecValidState(switch1stExSecId, oper_src, sendLevel); } else - { - ; /*无操作*/ - } - } - else - { - ; /*不执行*/ - } - - if (CI_SUCCESS == reVal) - { - - ARBMoveSwitchFlag = GetCiFunctionSwitchConfig(ARB_MOVE_SWITCH_CONF); - if (FUNC_SWITCH_ON == ARBMoveSwitchFlag) - {/*ARB可动作道岔功能开关打开*/ - /*当采集为占用且计轴区段ARB状态为ARB故障且融合后为空闲也可以动作道岔*/ - if (SECTION_OCCUPY_NO != switch1stSecOccuState) - { - if ((AXIS_SECTION_ARB_YES == arbState) && (SECTION_OCCUPY_NO == switch1stSecMerOccuState)) - { /*计轴ARB且融合后状态为空闲,则允许动作道岔*/ - - } - else - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_MERGY_OCU_STATE, switch1stSecOccuState, sendLevel); - reVal = CI_ERROR; - } - } - else - { - ; /*不处理*/ - } - } - else if (FUNC_SWITCH_OFF == ARBMoveSwitchFlag) - { - if (AXIS_SECTION_ARB_NO != arbState) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_MERGY_OCU_STATE, SECTION_OCCUPY_YES, sendLevel); - reVal = CI_ERROR; - } - else - { - if (SECTION_OCCUPY_NO != switch1stSecOccuState) - { /*道岔关联物理区段占用*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_MERGY_OCU_STATE, switch1stSecOccuState, sendLevel); - reVal = CI_ERROR; - } - else - { - ; /*不处理*/ - } - } - } - else - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_MERGY_OCU_STATE, switch1stSecOccuState, sendLevel); - reVal = CI_ERROR; - } - } - else - { - ; /*不执行*/ - } - - if (CI_SUCCESS == reVal) - {/*检查道岔区段封锁,如道岔区段封锁,当前道岔单操有效,可动;否则,不可动*/ - if (PHYSICAL_SECTION_FLOCK_NO != switch1stSecFLockState) - { - if (SWITCH_OPER_DANCAO == oper_src) - { - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, - ETYPE_PS_FLOCK_STATE, switch1stSecFLockState, sendLevel); - } - } - else - { - ; /*不处理*/ + {/*没有额外物理区段,不检查*/ } } else @@ -2824,23 +2688,7 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) switch2ndSecId = GetSwitchPhySectionId(switch2ndId); switch2ndLockStatus = GetSwitchLockStatus(switch2ndId); switch2ndYLockState = GetSwitchYLockState(switch2ndId); - switch2ndSecLockState = GetPhySecLockState(switch2ndSecId); - switch2ndSecMerOccuState = GetPhySecCurMergeState(switch2ndSecId); - switch2ndSecJumpLockState = GetPhySecJumpLockState(switch2ndSecId); /*获取物理区段跳跃锁闭状态*/ - switch2ndSecFLockState = GetPhySecFLockState(switch2ndSecId);/*获取双动道岔2道岔区段封锁状态*/ - /*获取ARB状态*/ - arbState = GetArbState(switch2ndSecId); - vobcInterface = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); - localCiType = GetLocalCiType(); - if (((LINE_FAO == vobcInterface) || (LINE_HLHT == vobcInerface) || (LINE_FAOHLHT == vobcInerface)) - && (CI_TYPE_CLD == localCiType) && (FUNC_SWITCH_ON == gdDLline)) - {/*如果是FAO线路或FAOHLHT线路 车辆段,直接使用与占用原则融合后状态来处理道岔*/ - switch2ndSecOccuState = GetPhySecCurAndMergeState(switch2ndSecId); - } - else - {/*其他场景:正线、或者是使用计轴设备均使用GJ处理*/ - switch2ndSecOccuState = GetPhySecCurOccupyState(switch2ndSecId); - } + switch2ndExSecId = GetSwitchExtraPhySecId(switch2ndId);/*获取道岔2额外物理区段ID*/ if (SWITCH_LOCK_STATUS_NO != switch2ndLockStatus) { /*道岔锁闭*/ @@ -2870,159 +2718,29 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) ; /*不处理*/ } } - if (CI_SUCCESS == reVal) - { - if (PHYSICAL_SECTION_LOCK_NO != switch2ndSecLockState) - {/*道岔关联物理区段锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_LOCK_STATE, switch2ndSecLockState, sendLevel); - reVal = CI_ERROR; - } - else - { - /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLockState(switch2ndSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - else - { - /*物理区段未锁闭,检查物理区段包含的逻辑区段未被进路锁闭,检查逻辑锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLogicLockState(switch2ndSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - else - { - ; /*不处理*/ - } - } - } - } - else - { - ; /*不处理*/ - } - - if (CI_SUCCESS == reVal) - { - if (switch2ndSecJumpLockState != PHYSICAL_SECTION_JUMP_LOCK_NO) - { /*区段跳跃锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_JUMP_LOCK, switch2ndSecJumpLockState, sendLevel); - reVal = CI_ERROR; - } - else - { - ; /*不处理*/ - } - } - else - { - ; /*不处理*/ - } - - if (CI_SUCCESS == reVal) - { - - ARBMoveSwitchFlag = GetCiFunctionSwitchConfig(ARB_MOVE_SWITCH_CONF); - if (FUNC_SWITCH_ON == ARBMoveSwitchFlag) - {/*ARB可动作道岔功能开关打开*/ - /*当采集为占用且计轴区段ARB状态为ARB故障且融合后为空闲也可以动作道岔*/ - if (SECTION_OCCUPY_NO != switch2ndSecOccuState) - { - if ((AXIS_SECTION_ARB_YES == arbState) && (SECTION_OCCUPY_NO == switch2ndSecMerOccuState)) - { - ; /*计轴ARB且融合后状态为空闲,则允许动作道岔*/ - - } - else - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_MERGY_OCU_STATE, switch2ndSecOccuState, sendLevel); - reVal = CI_ERROR; - } - } - else - { - ; /*不处理*/ - } - } - else if (FUNC_SWITCH_OFF == ARBMoveSwitchFlag) - { - if (AXIS_SECTION_ARB_NO != arbState) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_MERGY_OCU_STATE, SECTION_OCCUPY_YES, sendLevel); - reVal = CI_ERROR; - } - else - { - if (SECTION_OCCUPY_NO != switch2ndSecOccuState) - { /*道岔关联物理区段占用*/ - - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_MERGY_OCU_STATE, switch2ndSecOccuState, sendLevel); - reVal = CI_ERROR; - } - else - { - ; /*不处理*/ - } - } - } - else - { - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_MERGY_OCU_STATE, switch2ndSecOccuState, sendLevel); - reVal = CI_ERROR; - } - - } - else - { - ; /*不处理*/ - } if (CI_SUCCESS == reVal) - {/*检查道岔区段封锁,如道岔区段封锁,当前道岔单操有效,可动;否则,不可动*/ - - if (PHYSICAL_SECTION_FLOCK_NO != switch2ndSecFLockState) - { - if (SWITCH_OPER_DANCAO == oper_src) - { - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, - ETYPE_PS_FLOCK_STATE, switch2ndSecFLockState, sendLevel); - } - } - else - { - ; /*不处理*/ - } - + {/*道岔2物理区段检查*/ + reVal = GetDanCaoPhySecValidState(switch2ndSecId, oper_src, sendLevel); } else { - ; /*不处理*/ + ; /*不执行*/ + } + + if (CI_SUCCESS == reVal) + {/*道岔2额外物理区段检查*/ + if ((0u < switch2ndExSecId) && (UINT16_MAX > switch2ndExSecId)) + { + reVal = GetDanCaoPhySecValidState(switch2ndExSecId, oper_src, sendLevel); + } + else + {/*没有额外物理区段,不检查*/ + } + } + else + { + ; /*不执行*/ } } else @@ -3035,6 +2753,7 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) ; /*不执行*/ } + /*道岔可动*/ return reVal; } @@ -3051,8 +2770,9 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) { /*函数故障码*/ UINT8 const functionId = EFUNC_CHECK_FORCE_SWITCH_MOVE; + UINT8 reVal = CI_SUCCESS; -/*局部变量*/ + /*局部变量*/ /*道岔属性*/ UINT8 switchType = 0u; /*道岔1*/ @@ -3060,28 +2780,22 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) UINT8 switch1stLockStatus = 0u; UINT8 switch1stYLockState = 0u; UINT8 switch1stSecOccuState = 0u; - UINT8 switch1stSecLockState = 0u; - UINT8 switch1stSecJumpLockState = 0u; - + UINT16 switch1stExSecId = 0u; + UINT8 switch1stExSecOccuState = 0u; /*道岔2*/ UINT16 switch2ndId = 0u; UINT16 switch2ndSecId = 0u; UINT8 switch2ndLockStatus = 0u; UINT8 switch2ndYLockState = 0u; - UINT8 switch2ndSecLockState = 0u; - UINT8 switch2ndSecJumpLockState = 0u; - UINT8 reVal = CI_SUCCESS; - UINT8 cLogSecLockFlag = 0U; /*逻辑区段锁闭标志*/ - UINT16 logOccOrLockId = 0U; - UINT8 logState = 0U; + UINT16 switch2ndExSecId = 0u; /* 道岔检查 */ switch1stSecId = GetSwitchPhySectionId(switchId); switch1stLockStatus = GetSwitchLockStatus(switchId); switch1stYLockState = GetSwitchYLockState(switchId); switch1stSecOccuState = GetPhySecCurOccupyState(switch1stSecId); - switch1stSecLockState = GetPhySecLockState(switch1stSecId); - switch1stSecJumpLockState = GetPhySecJumpLockState(switch1stSecId); /*获取物理区段跳跃锁闭状态*/ + switch1stExSecId = GetSwitchExtraPhySecId(switchId);/*道岔1额外物理区段ID*/ + switch1stExSecOccuState = GetPhySecCurOccupyState(switch1stExSecId); if ((SWITCH_LOCK_STATUS_DANSUO == switch1stLockStatus) || (SWITCH_LOCK_STATUS_PROTECT == switch1stLockStatus) || (SWITCH_LOCK_STATUS_DAP == switch1stLockStatus)) @@ -3092,6 +2806,10 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) ETYPE_SWT_LOCK_STATUS,switch1stLockStatus,sendLevel); reVal = CI_ERROR; } + else + { + /*不执行*/ + } if (reVal == CI_SUCCESS) { @@ -3103,72 +2821,97 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) ETYPE_SWT_YLOCK_STATE,switch1stYLockState,sendLevel); reVal = CI_ERROR; } + else + { + /*不执行*/ + } } - if (reVal == CI_SUCCESS) + else { - if (PHYSICAL_SECTION_LOCK_NO != switch1stSecLockState) - { /*区段锁闭*/ + /*不执行*/ + } - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,switch1stSecId, - ETYPE_PS_LOCK_STATE,switch1stSecLockState,sendLevel); - reVal = CI_ERROR; + if (reVal == CI_SUCCESS) + {/*道岔1物理区段检查*/ + reVal = GetForcePhySecValidState(switch1stSecId, sendLevel); + } + else + { + /*不执行*/ + } + + if (reVal == CI_SUCCESS) + {/*道岔1额外物理区段检查*/ + if ((0u < switch1stExSecId) && (UINT16_MAX > switch1stExSecId)) + { + reVal = GetForcePhySecValidState(switch1stExSecId, sendLevel); } else - { - /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLockState(switch1stSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - - /*物理区段未锁闭,检查物理区段包含的逻辑区段逻辑锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLogicLockState(switch1stSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } + {/*没有额外物理区段,不检查*/ } } - if (reVal == CI_SUCCESS) + else { - if (PHYSICAL_SECTION_JUMP_LOCK_NO != switch1stSecJumpLockState ) - { /*区段跳跃锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,switch1stSecId, - ETYPE_PS_JUMP_LOCK,switch1stSecJumpLockState,sendLevel); - reVal = CI_ERROR; - } + /*不执行*/ } + if (reVal == CI_SUCCESS) { if (SECTION_OCCUPY_YES != switch1stSecOccuState) - { /*区段未占用*/ - - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,switch1stSecId, - ETYPE_PS_MERGY_OCU_STATE,switch1stSecOccuState,sendLevel); + { /*道岔区段未占用*/ + /*如果道岔区段和额外物理区段均未占用,也进这个分支,优先报道岔区段*/ + if (0U < switch1stExSecId) + {/*有额外物理区段*/ + if (SECTION_OCCUPY_YES != switch1stExSecOccuState) + {/*额外物理区段也未占用*/ + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, + ETYPE_PS_MERGY_OCU_STATE, switch1stSecOccuState, sendLevel); + reVal = CI_ERROR; + } + else if (SECTION_OCCUPY_YES == switch1stExSecOccuState) + { + /*无处理*/ + } + else + { + reVal = CI_ERROR; + } + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch1stSecId, + ETYPE_PS_MERGY_OCU_STATE, switch1stSecOccuState, sendLevel); + reVal = CI_ERROR; + } + + } + else if (SECTION_OCCUPY_YES == switch1stSecOccuState) + {/*道岔区段占用*/ + /*不处理*/ + } + else + { reVal = CI_ERROR; - } + } } + else + { + /*不执行*/ + } + if (CI_SUCCESS == reVal) { /*双动道岔检查*/ switchType = GetSwitchType(switchId); - if (SWITCH_TYPE_DOUBLE == switchType ) + if (SWITCH_TYPE_DOUBLE == switchType) { switch2ndId = GetDSwitchOtherId(switchId); switch2ndSecId = GetSwitchPhySectionId(switch2ndId); switch2ndLockStatus = GetSwitchLockStatus(switch2ndId); switch2ndYLockState = GetSwitchYLockState(switch2ndId); - switch2ndSecLockState = GetPhySecLockState(switch2ndSecId); - switch2ndSecJumpLockState = GetPhySecJumpLockState(switch2ndSecId); /*获取物理区段跳跃锁闭状态*/ + switch2ndExSecId = GetSwitchExtraPhySecId(switch2ndId);/*道岔2额外物理区段ID*/ if ((SWITCH_LOCK_STATUS_DANSUO == switch2ndLockStatus) || (SWITCH_LOCK_STATUS_PROTECT == switch2ndLockStatus) || (SWITCH_LOCK_STATUS_DAP == switch2ndLockStatus)) @@ -3179,6 +2922,10 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) ETYPE_SWT_LOCK_STATUS,switch2ndLockStatus,sendLevel); reVal = CI_ERROR; } + else + { + /*不执行*/ + } if (reVal == CI_SUCCESS) { @@ -3190,51 +2937,48 @@ UINT8 GetSwitchForceMoveValidState(UINT16 switchId,UINT8 sendLevel) ETYPE_SWT_YLOCK_STATE,switch2ndYLockState,sendLevel); reVal = CI_ERROR; } - } - if (reVal == CI_SUCCESS) - { - if (PHYSICAL_SECTION_LOCK_NO != switch2ndSecLockState ) - { /*区段锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,switch2ndSecId, - ETYPE_PS_LOCK_STATE,switch2ndSecLockState,sendLevel); - reVal = CI_ERROR; - } else { - /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLockState(switch2ndSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } - - /*物理区段未锁闭,检查物理区段包含的逻辑区段逻辑锁闭状态*/ - cLogSecLockFlag = CheckPSecIncLSecLogicLockState(switch2ndSecId, &logOccOrLockId, &logState); - if (CI_ERROR == cLogSecLockFlag) - { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); - reVal = CI_ERROR; - } + /*不执行*/ } } - if (reVal == CI_SUCCESS) + else { - if (PHYSICAL_SECTION_JUMP_LOCK_NO != switch2ndSecJumpLockState ) - { /*区段跳跃锁闭*/ - - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,switch2ndSecId, - ETYPE_PS_JUMP_LOCK,switch2ndSecJumpLockState,sendLevel); - reVal = CI_ERROR; - } + /*不执行*/ } + if (reVal == CI_SUCCESS) + {/*道岔2物理区段检查*/ + reVal = GetForcePhySecValidState(switch2ndSecId, sendLevel); + } + else + { + /*不执行*/ + } + + if (reVal == CI_SUCCESS) + {/*道岔2额外物理区段检查*/ + if ((0u < switch2ndExSecId) && (UINT16_MAX > switch2ndExSecId)) + { + reVal = GetForcePhySecValidState(switch2ndExSecId, sendLevel); + } + else + {/*没有额外物理区段,不检查*/ + } + } + else + { + /*不执行*/ + } } + else + { + /*无操作*/ + } + } + else + { + ; /*不执行*/ } /*道岔可动*/ @@ -4914,7 +4658,6 @@ void SetPhySecSpksFLockBySpksId(UINT16 spksId,UINT8 spksStatus) UINT16 tmpPhySecId = 0u; UINT16 spksIndex = 0u; UINT16 phySecIndex = 0u; - UINT8 phySecFlockState = PHYSICAL_SECTION_FLOCK_YES; UINT8 tmpRet = CI_ERROR; UINT8 typeFlockType = 0u; UINT8 CheckPhySecFlock = CI_ERROR; @@ -4932,13 +4675,11 @@ void SetPhySecSpksFLockBySpksId(UINT16 spksId,UINT8 spksStatus) if ((SPKS_STATUS_YES == spksStatus) && (SPKS_STATUS_YES != curSpksState)) { tmpRet = SetSpksState(spksId, spksStatus); - phySecFlockState = PHYSICAL_SECTION_FLOCK_YES; SetSpksflockStartNum(spksId, curCycNum); } else if ((SPKS_STATUS_NO == spksStatus) && (SPKS_STATUS_NO != curSpksState)) { tmpRet = SetSpksState(spksId, spksStatus); - phySecFlockState = PHYSICAL_SECTION_FLOCK_NO; SetSpksflockStartNum(spksId, 0U); } else @@ -4964,59 +4705,38 @@ void SetPhySecSpksFLockBySpksId(UINT16 spksId,UINT8 spksStatus) CheckPhySecFlock = CheckPhySecFlockBlongSpks(tmpPhySecId,spksId); if ((tmpPhySecId > 0u) && (tmpPhySecId < PHYSICAL_SECTION_SUM_MAX)) { - if(SPKS_STATUS_NO == spksStatus) - { - typeFlockType = GetPhySecFLockType(tmpPhySecId); - - if((PHY_SEC_FLOCK_TYPE_SPKS == typeFlockType)&&(CI_SUCCESS == CheckPhySecFlock)) - { - tmpRet = SetPhySecFLockState(tmpPhySecId,phySecFlockState); - } - } - else - { - tmpRet = SetPhySecFLockState(tmpPhySecId,phySecFlockState); - } - if(CI_ERROR == tmpRet) - { - break; - } - /*cgh-合并CID-2539-2\CID-2588-5:,根据SPKS操作命令设置物理区段封锁类型*/ - typeFlockType = GetPhySecFLockType(tmpPhySecId); + /*cgh-合并CID-2539-2\CID-2588-5:,根据SPKS操作命令设置物理区段封锁类型*/ if ( SPKS_STATUS_YES == spksStatus ) { - if(PHY_SEC_FLOCK_TYPE_CMD == typeFlockType) - { - SetPhySecFLockType(tmpPhySecId, PHY_SEC_FLOCK_TYPE_SPKSCMD);/*封锁类型设置SPKS按下 且区段封锁命令 封锁*/ - } - else if(PHY_SEC_FLOCK_TYPE_NONE == typeFlockType) - { - SetPhySecFLockType(tmpPhySecId, PHY_SEC_FLOCK_TYPE_SPKS);/*记录物理区段封锁是由于SPKS按下导致*/ - } - else - { - /*已经设置SPKS封锁类型*/ - } + SetPhySecFLockType(tmpPhySecId, SEC_FLOCK_TYPE_SPKS);/*记录物理区段封锁是由于SPKS按下导致*/ } else if (SPKS_STATUS_NO == spksStatus) { - if((PHY_SEC_FLOCK_TYPE_SPKS == typeFlockType)&&(CI_SUCCESS == CheckPhySecFlock)) + if(CI_SUCCESS == CheckPhySecFlock) { - SetPhySecFLockType(tmpPhySecId, PHY_SEC_FLOCK_TYPE_NONE);/*之前只有SPKS封锁,取消后设置无封锁*/ - } - else if((PHY_SEC_FLOCK_TYPE_SPKSCMD == typeFlockType)&&(CI_SUCCESS == CheckPhySecFlock)) - { - SetPhySecFLockType(tmpPhySecId, PHY_SEC_FLOCK_TYPE_CMD);/*之前命令封锁且SPKS封锁,取消SPKS封锁后,只剩命令封锁*/ + CancelPhySecFLockType(tmpPhySecId, SEC_FLOCK_TYPE_SPKS);/*取消spks封锁*/ } else { - /*已经取消了SPKS封锁,或者有多个SPKS封锁此区段*/ + /*有多个SPKS封锁此区段*/ } } else { /*不做处理*/ } + typeFlockType = GetPhySecFLockType(tmpPhySecId); + /*更新区段封锁状态*/ + if (SEC_FLOCK_TYPE_NONE == typeFlockType) + { + tmpRet = SetPhySecFLockState(tmpPhySecId, PHYSICAL_SECTION_FLOCK_NO); + } + else + { + /*存在任意封锁*/ + tmpRet = SetPhySecFLockState(tmpPhySecId, PHYSICAL_SECTION_FLOCK_YES); + } + } else { @@ -5236,7 +4956,7 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c break; case CI_DEVICE_TYPE_PHYSEC:/* 物理区段封锁状态检查 其他联锁条件增加物理区段封锁检查 20220530-lyj */ tmpDevState = GetPhySecFLockType(devId); - if (PHY_SEC_FLOCK_TYPE_NONE == tmpDevState) + if (SEC_FLOCK_TYPE_NONE == tmpDevState) { devState = OTHER_CI_PHYSICAL_FENGSUO_NO; } @@ -5257,6 +4977,22 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c devState = OTHER_CI_DOWNWASH_ALLOW_PASS_NO; } break; + case CI_DEVICE_TYPE_SECDIRLOCK: + /*区段锁闭其他联锁条件不在此处理,默认返回预期*/ + devState = RELAY_STATE_UP; + break; + case CI_DEVICE_TYPE_ROUTEREQUEST: + /*进路协议其他联锁条件不在此处理,默认返回预期*/ + devState = RELAY_STATE_UP; + break; + case CI_DEVICE_TYPE_ROUTERELEASE: + /*进路协议其他联锁条件不在此处理,默认返回预期*/ + devState = RELAY_STATE_DOWN; + break; + case CI_DEVICE_TYPE_ROUTEACK: + /*进路协议其他联锁条件不在此处理,默认返回预期*/ + devState = RELAY_STATE_UP; + break; default: /*不可达或错误分支 devState=0U */ break; @@ -6192,7 +5928,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) UINT16 routeRlockId = 0u; /*逻辑区段正常锁闭所属进路ID*/ UINT16 routePlockId = 0u; /*逻辑区段防护锁闭所属进路ID*/ UINT8 routeType = 0u;/*进路类型*/ - UINT8 phySecFLockState = 0u; /*物理区段封锁状态,对应SPKS按下*/ + UINT8 chSecFLockType = 0u; /*区段封锁类型*/ UINT8 reVal = CI_ERROR; LogsecSwitchStruct* pLgcSecSwitchStru = NULL; UINT8 chLgcSecSwitchSum = 0u; @@ -6222,6 +5958,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) UINT8 logSecLockState = 0U; UINT8 logSecLockRouteNum = 0U; UINT8 chFailStep = 0U; + UINT8 chShareSwitchNum = 0U;/*共用道岔区段个数*/ bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/ /**区段下标合法*/ @@ -6231,14 +5968,13 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) routeRlockId = GetLogSecLockBelongRoute(logSectionId);/*逻辑区段进路锁闭所属进路ID*/ routePlockId = GetLogSecPLockRouteId(logSectionId);/*逻辑区段防护锁闭所属进路ID*/ routeType = GetRouteType(routeRlockId);/*进路类型*/ - phySecFLockState = GetPhySecFLockState(physicalSecId);/*获取物理区段封锁状态,即SPKS是否实施*/ + chSecFLockType = GetLogSecFLockType(logSectionId);/*逻辑区段封锁类型*/ chLgcSecSwitchSum = GetLogicSecSwitchSum(logSectionId); pLgcSecSwitchStru = GetLogicSecSwitchIdStru(logSectionId); routeState = GetRouteState(routeRlockId); /*获取进路状态*/ logicCheck = LogicIntruSecVainCheck(logSectionId, &devId, &devState); /*逻辑区段侵限检查*/ logSecLockState = GetLogSecLogLockState(logSectionId); logSecLockRouteNum = GetLogSecLockBelLogRouteSum(logSectionId); - if (NULL == pLgcSecSwitchStru) { reVal = CI_ERROR; @@ -6330,12 +6066,38 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) } } - if ((CI_SUCCESS == reVal) && (PHYSICAL_SECTION_FLOCK_YES == phySecFLockState)) + if (CI_SUCCESS == reVal) { - /*物理区段处于封锁状态(SPKS实施)*/ - - reVal = CI_ERROR; - chFailStep = 5U; + if (SEC_FLOCK_TYPE_NONE != chSecFLockType) + { + /*区段处于封锁状态*/ + reVal = CI_ERROR; + chFailStep = 5U; + } + else + { + chShareSwitchNum = GetLogSecSameSwitchSecSum(logSectionId); + plogSecIdPBuf = GetLogSecSameSwitchSecId(logSectionId); + if ((PHYSICAL_INCLUDE_AXIS_SUM_MAX > chShareSwitchNum) && (NULL != plogSecIdPBuf)) + { /*检查与逻辑区段共用道岔的逻辑区段封锁状态*/ + for (ii = 0U; ii < chShareSwitchNum; ii++) + { + chSecFLockType = GetLogSecFLockType(plogSecIdPBuf[ii]);/*逻辑区段封锁*/ + if (SEC_FLOCK_TYPE_NONE != chSecFLockType) + { + /*区段处于封锁状态*/ + reVal = CI_ERROR; + chFailStep = 5U; + break; + } + } + } + else + { + reVal = CI_ERROR;/*获取失败*/ + chFailStep = 5U; + } + } } if ((CI_SUCCESS == reVal) && (CI_ERROR == logicCheck)) { @@ -10803,7 +10565,7 @@ AreaSnowInfoStruct* GetLocalAreaSnow(void) * 返回值 : 0 第一个锁闭的区段不是故障锁闭 * 1 第一个锁闭的区段是故障锁闭 */ -UINT8 RouteFirstLockErrCheck(UINT16 routeId) +UINT8 RouteFirstLockErrCheck(UINT16 routeId, UINT16 *pPhySecId) { UINT8 sectionSum = 0u; /*区段总数*/ RoutePhysicalSectionStruct* pRouteSecStru = NULL; /*区段数据*/ @@ -10812,8 +10574,9 @@ UINT8 RouteFirstLockErrCheck(UINT16 routeId) UINT16 phyRlockrouteId = 0U; /*锁闭所属进路*/ UINT8 retVal = CI_ERROR; - if ((0U != routeId) && (ROUTE_SUM_MAX > routeId)) + if ((0U != routeId) && (ROUTE_SUM_MAX > routeId) && (NULL != pPhySecId)) { + *pPhySecId = 0u; sectionSum = GetRoutePhysicalSectionSum(routeId); /*获得进路包含的区段数目*/ pRouteSecStru = GetRouteSectionData(routeId); /*进路区段数据*/ @@ -10830,6 +10593,7 @@ UINT8 RouteFirstLockErrCheck(UINT16 routeId) /*异常锁闭*/ if (PHYSICAL_SECTION_LOCK_EXCEPT == wPhySecState) { + *pPhySecId = pRouteSecStru[ii].PhysicalSectionId; retVal = CI_SUCCESS; } else @@ -11078,6 +10842,8 @@ UINT8 GetSwitchUsingValidState(const UINT16 wSwitchId,const UINT8 chFunctionId,c UINT8 chSwitchSecUsingState = 0U;/*道岔区段征用状态*/ UINT8 chSwitchType = 0U;/*道岔类型*/ UINT16 wDSwitchOtherId = 0U;/*双动道岔另一道岔ID*/ + UINT16 wSwitchExSecId = 0U;/*额外物理区段ID*/ + UINT8 chSwitchExSecUsingSta = 0U;/*额外物理区段征用状态*/ if ((0U < wSwitchId) && (SWITCH_SUM_MAX > wSwitchId)) { @@ -11111,6 +10877,32 @@ UINT8 GetSwitchUsingValidState(const UINT16 wSwitchId,const UINT8 chFunctionId,c ; } + if (CI_SUCCESS == chReval) + {/*额外物理区段征用检查*/ + wSwitchExSecId = GetSwitchExtraPhySecId(wSwitchId);/*获取道岔额外物理区段ID*/ + if ((0u < wSwitchExSecId) && (UINT16_MAX > wSwitchExSecId)) + {/*有额外物理区段*/ + chSwitchExSecUsingSta = GetPhySecUseState(wSwitchExSecId); + if (PHYSICAL_SECTION_USING_NO == chSwitchExSecUsingSta) + { + chReval = CI_SUCCESS; + } + else + { + chReval = CI_ERROR; + SetErrorData(chFunctionId, CI_DEVICE_TYPE_PHYSEC, wSwitchExSecId, ETYPE_PS_USE_STATE, chSwitchExSecUsingSta, chSendLevel); + } + } + else + {/*没有额外物理区段,通过*/ + chReval = CI_SUCCESS; + } + } + else + { + ; + } + if (CI_SUCCESS == chReval) { chSwitchType = GetSwitchType(wSwitchId); @@ -11146,6 +10938,32 @@ UINT8 GetSwitchUsingValidState(const UINT16 wSwitchId,const UINT8 chFunctionId,c { ; } + + if (CI_SUCCESS == chReval) + {/*额外物理区段征用检查*/ + wSwitchExSecId = GetSwitchExtraPhySecId(wDSwitchOtherId);/*获取道岔额外物理区段ID*/ + if ((0u < wSwitchExSecId) && (UINT16_MAX > wSwitchExSecId)) + {/*有额外物理区段*/ + chSwitchExSecUsingSta = GetPhySecUseState(wSwitchExSecId); + if (PHYSICAL_SECTION_USING_NO == chSwitchExSecUsingSta) + { + chReval = CI_SUCCESS; + } + else + { + chReval = CI_ERROR; + SetErrorData(chFunctionId, CI_DEVICE_TYPE_PHYSEC, wSwitchExSecId, ETYPE_PS_USE_STATE, chSwitchExSecUsingSta, chSendLevel); + } + } + else + {/*没有额外物理区段,通过*/ + chReval = CI_SUCCESS; + } + } + else + { + ; + } } else { @@ -11366,4 +11184,854 @@ UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId) } return wRetVal; +} + +/* +* 功能描述: 道岔单操可动作物理区段检查 +* 参数说明: UINT16 phySecId,物理区段Id +* UINT8 oper_src,操作来源 +* UINT8 sendLevel,发送级别 +* 返回值 : CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 GetDanCaoPhySecValidState(UINT16 phySecId, UINT8 oper_src, UINT8 sendLevel) +{ + /*局部变量*/ + UINT8 reVal = CI_SUCCESS; + UINT8 const functionId = EFUNC_CHECK_SWITCH_MOVE; /*函数故障码,由GetSwitchMoveValidState调用*/ + UINT8 secLockState = 0u; /*物理区段锁闭状态*/ + UINT8 cLogSecLockFlag = 0u; /*逻辑区段锁闭标志*/ + UINT16 logOccOrLockId = 0u; /*锁闭的逻辑区段ID*/ + UINT8 logState = 0U; /*逻辑区段锁闭状态*/ + UINT8 secJumpLockState = 0u; /*物理区段跳跃锁闭状态*/ + UINT8 ARBMoveSwitchFlag = 0u; /*ARB可动作道岔功能开关*/ + UINT8 arbState = 0u; /*ARB状态*/ + UINT8 secOccuState = 0u; /*物理区段占用状态*/ + UINT8 secMerOccuState = 0u; /*物理区段当前融合状态*/ + UINT8 secFLockState = 0u; /*道岔区段封锁状态*/ + + UINT8 vobcInerface = 0u; /*vobc接口*/ + UINT8 ciType = 0u; /*本联锁类型*/ + UINT8 gdDLline = 0u; /*轨道电路标识*/ + + /*检查处理*/ + secLockState = GetPhySecLockState(phySecId); /*获取物理区段锁闭状态*/ + secJumpLockState = GetPhySecJumpLockState(phySecId); /*获取物理区段跳跃锁闭状态*/ + arbState = GetArbState(phySecId); /*获取ARB状态*/ + secMerOccuState = GetPhySecCurMergeState(phySecId); /*获取物理区段当前融合状态*/ + secFLockState = GetPhySecFLockState(phySecId); /*获取道岔区段封锁状态*/ + + vobcInerface = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); + ciType = GetLocalCiType(); + gdDLline = GetCiFunctionSwitchConfig(FUNC_CLD_GD_DIANLU_LINE); + if (((LINE_FAO == vobcInerface) || (LINE_HLHT == vobcInerface) || (LINE_FAOHLHT == vobcInerface)) + && (CI_TYPE_CLD == ciType) && (FUNC_SWITCH_ON == gdDLline)) + {/*如果是FAO线路或FALHLHT线路 车辆段 使用轨道电路,直接使用与占用原则融合后状态来处理道岔*/ + secOccuState = GetPhySecCurAndMergeState(phySecId); + } + else + {/*其他场景:正线、或者是使用计轴设备均使用GJ处理*/ + secOccuState = GetPhySecCurOccupyState(phySecId); + } + + if (PHYSICAL_SECTION_LOCK_NO != secLockState) + {/*道岔关联物理区段锁闭*/ + + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_LOCK_STATE, secLockState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ + cLogSecLockFlag = CheckPSecIncLSecLockState(phySecId, &logOccOrLockId, &logState); + if (CI_ERROR == cLogSecLockFlag) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*物理区段未锁闭,逻辑区段未进路锁闭,检查物理区段包含的逻辑区段逻辑锁闭状态*/ + cLogSecLockFlag = CheckPSecIncLSecLogicLockState(phySecId, &logOccOrLockId, &logState); + if (CI_ERROR == cLogSecLockFlag) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); + reVal = CI_ERROR; + } + else + { + ; /*不处理*/ + } + } + } + + if (CI_SUCCESS == reVal) + { + if (PHYSICAL_SECTION_JUMP_LOCK_NO != secJumpLockState) + { /*区段跳跃锁闭*/ + + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_JUMP_LOCK, secJumpLockState, sendLevel); + reVal = CI_ERROR; + } + else + { + ; /*无操作*/ + } + } + else + { + ; /*不执行*/ + } + + if (CI_SUCCESS == reVal) + { + ARBMoveSwitchFlag = GetCiFunctionSwitchConfig(ARB_MOVE_SWITCH_CONF); + if (FUNC_SWITCH_ON == ARBMoveSwitchFlag) + {/*ARB可动作道岔功能开关打开*/ + /*当采集为占用且计轴区段ARB状态为ARB故障且融合后为空闲也可以动作道岔*/ + if (SECTION_OCCUPY_NO != secOccuState) + { + if ((AXIS_SECTION_ARB_YES == arbState) && (SECTION_OCCUPY_NO == secMerOccuState)) + { /*计轴ARB且融合后状态为空闲,则允许动作道岔*/ + + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_MERGY_OCU_STATE, secOccuState, sendLevel); + reVal = CI_ERROR; + } + } + else + { + ; /*不处理*/ + } + } + else if (FUNC_SWITCH_OFF == ARBMoveSwitchFlag) + { + if (AXIS_SECTION_ARB_NO != arbState) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_MERGY_OCU_STATE, SECTION_OCCUPY_YES, sendLevel); + reVal = CI_ERROR; + } + else + { + if (SECTION_OCCUPY_NO != secOccuState) + { /*道岔关联物理区段占用*/ + + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_MERGY_OCU_STATE, secOccuState, sendLevel); + reVal = CI_ERROR; + } + else + { + ; /*不处理*/ + } + } + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_MERGY_OCU_STATE, secOccuState, sendLevel); + reVal = CI_ERROR; + } + } + else + { + ; /*不执行*/ + } + + if (CI_SUCCESS == reVal) + {/*检查道岔区段封锁,如道岔区段封锁,当前道岔单操有效,可动;否则,不可动*/ + if (PHYSICAL_SECTION_FLOCK_NO != secFLockState) + { + if (SWITCH_OPER_DANCAO == oper_src) + { + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_FLOCK_STATE, secFLockState, sendLevel); + } + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不执行*/ + } + + return reVal; +} + +/* +* 功能描述: 道岔强扳可动作物理区段检查 +* 参数说明: UINT16 phySecId,物理区段Id +* UINT8 sendLevel,发送级别 +* 返回值 : CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 GetForcePhySecValidState(UINT16 phySecId, UINT8 sendLevel) +{ + /*局部变量*/ + UINT8 reVal = CI_SUCCESS; + UINT8 const functionId = EFUNC_CHECK_FORCE_SWITCH_MOVE; /*函数故障码,由GetSwitchForceMoveValidState调用*/ + + UINT8 secLockState = 0u; /*物理区段锁闭状态*/ + UINT8 cLogSecLockFlag = 0U; /*逻辑区段锁闭标志*/ + UINT16 logOccOrLockId = 0u; /*锁闭的逻辑区段ID*/ + UINT8 logState = 0U; /*逻辑区段锁闭状态*/ + UINT8 secJumpLockState = 0u; /*物理区段跳跃锁闭状态*/ + + secLockState = GetPhySecLockState(phySecId); /*获取物理区段锁闭状态*/ + secJumpLockState = GetPhySecJumpLockState(phySecId); /*获取物理区段跳跃锁闭状态*/ + + if (PHYSICAL_SECTION_LOCK_NO != secLockState) + { /*区段锁闭*/ + + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_LOCK_STATE, secLockState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*物理区段未锁闭,检查物理区段包含的逻辑区段进路锁闭状态*/ + cLogSecLockFlag = CheckPSecIncLSecLockState(phySecId, &logOccOrLockId, &logState); + if (CI_ERROR == cLogSecLockFlag) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*不处理*/ + } + + /*物理区段未锁闭,检查物理区段包含的逻辑区段逻辑锁闭状态*/ + cLogSecLockFlag = CheckPSecIncLSecLogicLockState(phySecId, &logOccOrLockId, &logState); + if (CI_ERROR == cLogSecLockFlag) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, logOccOrLockId, ETYPE_LOGSEC_LOCK_STATE, logState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*不处理*/ + } + } + + if (reVal == CI_SUCCESS) + { + if (PHYSICAL_SECTION_JUMP_LOCK_NO != secJumpLockState) + { /*区段跳跃锁闭*/ + + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, + ETYPE_PS_JUMP_LOCK, secJumpLockState, sendLevel); + reVal = CI_ERROR; + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } + + return reVal; +} + +/* +* 功能描述: 道岔常态位置检查 +* 参数说明: UINT16 wSwitchId,道岔Id +* 返回值 : 无 +*/ +void CheckSwitchNomalPosProc(const UINT16 wSwitchId) +{ + UINT8 normalPos = 0u; /*道岔常态位置*/ + UINT8 chTemp = CI_ERROR; + UINT8 curSwitchPos = SWITCH_POSITION_INVALID; /*道岔当前位置*/ + UINT8 chRet = CI_ERROR; + UINT32 curCycNum = 0u; + UINT32 normalPosCycNum = 0u; /*道岔常态位置起始周期*/ + UINT32 normalPosTime = 0u; /*道岔常态位置容忍周期数(数据配置)*/ + UINT8 timeState = 0u; + + curCycNum = Get2oo2CurCycleNum(); + normalPosTime = GetSwitchNormalPosTime(); + if ((0u < wSwitchId) && (wSwitchId < SWITCH_SUM_MAX)) + { + normalPos = GetSwitchNormalPosition(wSwitchId);/*获取常态位置*/ + curSwitchPos = GetSwitchCurPosition(wSwitchId);/*获取道岔当前位置*/ + if (SWITCH_NORMAL_DEFAULT == normalPos) + {/*无常态位置,不处理*/ + } + else if (SWITCH_NORMAL_DINGWEI == normalPos) + {/*常态位置定位*/ + if (SWITCH_POSITION_FANWEI == curSwitchPos) + {/*当前位置在反位*/ + chRet = GetSwitchAndSecFLockState(wSwitchId); + if (CI_SUCCESS == chRet) + {/*道岔、道岔区段、道岔额外物理区段未封锁*/ + chRet = SetSwitchPositionLogicProcess(wSwitchId, SWITCH_POSITION_DINGWEI, 0U, &chTemp, ESEND_LEVEL_ZERO); + if (CI_SUCCESS == chRet) + { /*成功,记录常态位置周期*/ + normalPosCycNum = GetSwitchNormalPosCycNum(wSwitchId); + if (0u == normalPosCycNum) + { + SetSwitchNormalPosCycNum(wSwitchId, curCycNum); + } + else + {/*不处理*/ + } + } + else + {/*检查失败,清除常态位置周期*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u); + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + } + else + {/*道岔、道岔区段、道岔额外物理区段封锁,清除周期*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u); + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + + normalPosCycNum = GetSwitchNormalPosCycNum(wSwitchId); + timeState = SystemOverOrEqualTimeCheck(normalPosCycNum, normalPosTime);/*达到配置值*/ + if (CI_TIME_OUT == timeState) + {/*超时*/ + (void)SetSwitchDanCaoPosition(wSwitchId, SWITCH_POSITION_DINGWEI); /*设置单操位置标志*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u);/*清除周期*/ + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + else + {/*不处理*/ + } + } + else + {/*在定位不处理*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u);/*清除周期*/ + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + } + else if (SWITCH_NORMAL_FANWEI == normalPos) + {/*常态位置反位*/ + if (SWITCH_POSITION_DINGWEI == curSwitchPos) + {/*当前位置在定位*/ + chRet = GetSwitchAndSecFLockState(wSwitchId); + if (CI_SUCCESS == chRet) + {/*道岔、道岔区段、道岔额外物理区段未封锁*/ + chRet = SetSwitchPositionLogicProcess(wSwitchId, SWITCH_POSITION_FANWEI, 0U, &chTemp, ESEND_LEVEL_ZERO); + if (CI_SUCCESS == chRet) + { /*成功,记录常态位置周期*/ + normalPosCycNum = GetSwitchNormalPosCycNum(wSwitchId); + if (0 == normalPosCycNum) + { + SetSwitchNormalPosCycNum(wSwitchId, curCycNum); + } + else + {/*不处理*/ + } + } + else + {/*检查失败,清除常态位置周期*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u); + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + } + else + {/*道岔、道岔区段、道岔额外物理区段封锁,清除周期*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u); + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + + normalPosCycNum = GetSwitchNormalPosCycNum(wSwitchId); + timeState = SystemOverOrEqualTimeCheck(normalPosCycNum, normalPosTime);/*达到配置值*/ + if (CI_TIME_OUT == timeState) + {/*超时*/ + (void)SetSwitchDanCaoPosition(wSwitchId, SWITCH_POSITION_FANWEI); /*设置单操位置标志*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u);/*清除周期*/ + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + else + {/*不处理*/ + } + } + else + {/*在反位不处理*/ + SetSwitchNormalPosCycNum(wSwitchId, 0u);/*清除周期*/ + SetSwitchUnusualLogSecFlag(wSwitchId, SWITCH_UNUSUAL_INVALID); + } + } + else + {/*无处理*/ + } + } + else + {/*不处理*/ + } +} + +/* +* 功能描述: 道岔定反操互斥条件检查 +* 参数说明: const UINT16 wSwitchId, 道岔ID +* 返回值 :CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 CheckSwitchDFMulValid(const UINT16 wSwitchId, const UINT8 chSwitchPos) +{ + /*局部变量*/ + UINT8 reVal = CI_ERROR; + UINT8 lastValidDrvSta = 0u; /*道岔最近一次的有效驱动状态*/ + UINT32 mulDrvCycNum = 0u; /*道岔驱动起始周期-定反操互斥*/ + UINT32 curCycNum = 0u; /*当前周期*/ + UINT32 switchDrvOverNum = 0u; /*道岔驱动周期数-配置值*/ + + lastValidDrvSta = GetSwitchLastValidDrvPos(wSwitchId); + mulDrvCycNum = GetSwitchMulDrvCycNum(wSwitchId); + curCycNum = Get2oo2CurCycleNum(); + switchDrvOverNum = GetSystemParaSwitchDriveCyc(); + + if (SWITCH_POSITION_DINGWEI == chSwitchPos) + {/*期望在定位*/ + if (SWITCH_DRIVE_POS_FANWEI == lastValidDrvSta) + {/*上一次有效驱动位置在反位*/ + /*判断是否超时*/ + if (0u < mulDrvCycNum) + { + if ((curCycNum - mulDrvCycNum) > switchDrvOverNum) + {/*超时*/ + reVal = CI_SUCCESS; + } + else + {/*未超时*/ + reVal = CI_ERROR; + } + } + else + {/*周期为0,无驱动或已经到位*/ + reVal = CI_SUCCESS; + } + } + else if ((SWITCH_DRIVE_POS_DINGWEI == lastValidDrvSta) || (SWITCH_DRIVE_POS_INVALID == lastValidDrvSta)) + {/*上一次有效驱动位置在定位或没有驱动,检查通过*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + else if (SWITCH_POSITION_FANWEI == chSwitchPos) + {/*期望在反位*/ + if (SWITCH_DRIVE_POS_DINGWEI == lastValidDrvSta) + {/*上一次有效驱动位置在定位*/ + /*判断是否超时*/ + if (0u < mulDrvCycNum) + { + if ((curCycNum - mulDrvCycNum) > switchDrvOverNum) + {/*超时*/ + reVal = CI_SUCCESS; + } + else + {/*未超时*/ + reVal = CI_ERROR; + } + } + else + {/*周期为0,无驱动或已经到位*/ + reVal = CI_SUCCESS; + } + } + else if ((SWITCH_DRIVE_POS_FANWEI == lastValidDrvSta) || (SWITCH_DRIVE_POS_INVALID == lastValidDrvSta)) + {/*上一次有效驱动位置在反位或没有驱动,检查通过*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + else + { + reVal = CI_ERROR; + } + + return reVal; +} + +/* +* 功能描述: 道岔常态位置检查道岔封锁和道岔区段(包含额外物理区段)封锁 +* 参数说明: UINT16 wSwitchId,道岔Id +* 返回值 : CI_ERROR +* CI_SUCCESS +*/ +UINT8 GetSwitchAndSecFLockState(const UINT16 wSwitchId) +{ + /*局部变量*/ + UINT8 reVal = CI_ERROR; + UINT8 switchType = 0u; /*道岔属性*/ + + UINT8 chSwitchFlock = 0u; /*道岔封锁状态*/ + UINT8 chSwitchSecFlock = 0u; /*道岔区段封锁状态*/ + UINT8 chSwitchExSecFlock = 0u; /*道岔额外物理区段封锁状态*/ + UINT16 wSwitchSecId = 0u; /*道岔相关物理区段ID*/ + UINT16 wSwitchExSecId = 0u; /*道岔额外物理区段ID*/ + + UINT16 wSwitchOtherId = 0u; /*双动道岔ID*/ + UINT8 chSwitchOtherFlock = 0u; /*双动道岔封锁状态*/ + UINT8 chSwitchSecOtherFlock = 0u; /*双动道岔区段封锁状态*/ + UINT8 chSwitchExSecOtherFlock = 0u; /*双动道岔额外物理区段封锁状态*/ + UINT16 wSwitchSecOtherId = 0u; /*双动道岔相关物理区段ID*/ + UINT16 wSwitchExSecOtherId = 0u; /*双动额外物理区段ID*/ + + /*检查道岔封锁状态*/ + chSwitchFlock = GetSwitchFLockState(wSwitchId); + if (SWITCH_LOCK_FENGSUO_NO == chSwitchFlock) + {/*道岔未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + + /*检查道岔区段封锁状态*/ + if (CI_SUCCESS == reVal) + { + wSwitchSecId = GetSwitchPhySectionId(wSwitchId); /*获取道岔区段ID*/ + chSwitchSecFlock = GetPhySecFLockState(wSwitchSecId); /*获取道岔区段封锁状态*/ + + if (PHYSICAL_SECTION_FLOCK_NO == chSwitchSecFlock) + {/*道岔区段未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + + /*检查道岔额外物理区段封锁状态*/ + if (CI_SUCCESS == reVal) + { + wSwitchExSecId = GetSwitchExtraPhySecId(wSwitchId); /*获取道岔额外物理区段ID*/ + if ((0u < wSwitchExSecId) && (UINT16_MAX > wSwitchExSecId)) + {/*有额外物理区段*/ + chSwitchExSecFlock = GetPhySecFLockState(wSwitchExSecId); /*获取道岔额外物理区段封锁状态*/ + if (PHYSICAL_SECTION_FLOCK_NO == chSwitchExSecFlock) + {/*道岔额外物理区段未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + else + {/*不处理*/ + } + } + + /*检查双动道岔*/ + if (CI_SUCCESS == reVal) + { + switchType = GetSwitchType(wSwitchId); + if (SWITCH_TYPE_DOUBLE == switchType) + { + wSwitchOtherId = GetDSwitchOtherId(wSwitchId); + + /*检查双动道岔封锁状态*/ + chSwitchOtherFlock = GetSwitchFLockState(wSwitchOtherId); + if (SWITCH_LOCK_FENGSUO_NO == chSwitchOtherFlock) + {/*双动道岔未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + + /*检查双动道岔区段封锁状态*/ + if (CI_SUCCESS == reVal) + { + wSwitchSecOtherId = GetSwitchPhySectionId(wSwitchOtherId); /*获取双动道岔区段ID*/ + chSwitchSecOtherFlock = GetPhySecFLockState(wSwitchSecOtherId); /*获取双动道岔区段封锁状态*/ + + if (PHYSICAL_SECTION_FLOCK_NO == chSwitchSecOtherFlock) + {/*道岔区段未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + + /*检查双动道岔额外物理区段封锁状态*/ + if (CI_SUCCESS == reVal) + { + wSwitchExSecOtherId = GetSwitchExtraPhySecId(wSwitchOtherId); /*获取双动道岔额外物理区段ID*/ + if ((0u < wSwitchExSecOtherId) && (UINT16_MAX > wSwitchExSecOtherId)) + {/*有额外物理区段*/ + chSwitchExSecOtherFlock = GetPhySecFLockState(wSwitchExSecOtherId); /*获取双动道岔额外物理区段封锁状态*/ + if (PHYSICAL_SECTION_FLOCK_NO == chSwitchExSecOtherFlock) + {/*道岔额外物理区段未封锁*/ + reVal = CI_SUCCESS; + } + else + { + reVal = CI_ERROR; + } + } + else + {/*不处理*/ + } + } + } + + } + + return reVal; +} + +/* +* 功能描述:获取全线牵引加速度设置状态 +* 参数说明:无 +* 返 回 值:0x55 未设置 +* 0xAA 已设置 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineAccelerationState(void) +{ + return gAllLineAccelerationState; +} + +/* +* 功能描述:设置全线牵引加速度设置状态 +* 参数说明:UINT8 setState 全线牵引加速度设置状态 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineAccelerationState(UINT8 setState) +{ + if ((CI_ALL_LINE_ACC_VALID == setState) || (CI_ALL_LINE_ACC_UNVALID == setState)) + { + gAllLineAccelerationState = setState; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取全线牵引加速度设置值 +* 参数说明:无 +* 返 回 值:全线牵引加速度设置值 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineAccelerationValue(void) +{ + return gAllLineAccelerationValue; +} + +/* +* 功能描述:设置全线牵引加速度设置值 +* 参数说明:UINT8 setValue 全线牵引加速度设置值 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineAccelerationValue(UINT8 setValue) +{ + if (UINT8_MAX > setValue) + { + gAllLineAccelerationValue = setValue; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取全线制动率设置状态 +* 参数说明:无 +* 返 回 值:0x55 未设置 +* 0xAA 已设置 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineBrakeRateState(void) +{ + return gAllLineBrakeRateState; +} + +/* +* 功能描述:设置全线制动率设置状态 +* 参数说明:UINT8 setState 全线制动率设置状态 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineBrakeRateState(UINT8 setState) +{ + if ((CI_ALL_LINE_BRAKE_VALID == setState) || (CI_ALL_LINE_BRAKE_UNVALID == setState)) + { + gAllLineBrakeRateState = setState; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取全线牵引加速度设置值 +* 参数说明:无 +* 返 回 值:全线牵引加速度设置值 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineBrakeRateValue(void) +{ + return gAllLineBrakeRateValue; +} + +/* +* 功能描述:设置全线牵引加速度设置值 +* 参数说明:UINT8 setValue 全线牵引加速度设置值 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineBrakeRateValue(UINT8 setValue) +{ + if (UINT8_MAX > setValue) + { + gAllLineBrakeRateValue = setValue; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:设置本地区间牵引加速度信息 +* 参数说明:const UINT8 cAreaNum 区间数量 +* const AreaAccelerationInfoStruct pAreaAccBuf[LOCAL_AREA_SNOW_SUM_MAX] 区间牵引加速度数组 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetLocalAreaAccelerationInfo(const UINT8 cAreaNum, const AreaAccelerationInfoStruct pAreaAccBuf[LOCAL_AREA_SNOW_SUM_MAX]) +{ + UINT8 ii = 0U; + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaAccBuf)) + { + /*清除本地区间牵引加速度信息*/ + (void)CommonMemSet(gszLocalAreaAcceleration, (UINT32)(sizeof(AreaAccelerationInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(AreaAccelerationInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX)); + + gLocalAreaAccelerationNum = cAreaNum; + for (ii = 0U; ii < cAreaNum; ii++) + { + gszLocalAreaAcceleration[ii] = pAreaAccBuf[ii]; /*存储本控区的区间牵引加速度信息*/ + } + } + else + { + /*入参非法,不处理*/ + } +} + +/* +* 功能描述:获取本地区间牵引加速度数量 +* 参数说明:无 +* 返 回 值:区间牵引加速度数量 +* Created By LQ 2026.02.04 +*/ +UINT8 GetLocalAreaAccelerationNum(void) +{ + return gLocalAreaAccelerationNum; +} + +/* +* 功能描述:获取本地区间牵引加速度信息 +* 参数说明:无 +* 返 回 值:区间牵引加速度信息 +* Created By LQ 2026.02.04 +*/ +AreaAccelerationInfoStruct* GetLocalAreaAcceleration(void) +{ + return gszLocalAreaAcceleration; +} + +/* +* 功能描述:设置本地区间制动率信息 +* 参数说明:const UINT8 cAreaNum 区间数量 +* const AreaBrakeRateInfoStruct pAreaBrakeBuf[LOCAL_AREA_SNOW_SUM_MAX] 区间制动率数组 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetLocalAreaBrakeRateInfo(const UINT8 cAreaNum, const AreaBrakeRateInfoStruct pAreaBrakeBuf[LOCAL_AREA_SNOW_SUM_MAX]) +{ + UINT8 ii = 0U; + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaBrakeBuf)) + { + /*清除本地区间制动率信息*/ + (void)CommonMemSet(gszLocalAreaBrakeRate, (UINT32)(sizeof(AreaBrakeRateInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(AreaBrakeRateInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX)); + + gLocalAreaBrakeRateNum = cAreaNum; + for (ii = 0U; ii < cAreaNum; ii++) + { + gszLocalAreaBrakeRate[ii] = pAreaBrakeBuf[ii]; /*存储本控区的区间制动率信息*/ + } + } + else + { + /*入参非法,不处理*/ + } +} + +/* +* 功能描述:获取本地区间制动率数量 +* 参数说明:无 +* 返 回 值:区间制动率数量 +* Created By LQ 2026.02.04 +*/ +UINT8 GetLocalAreaBrakeRateNum(void) +{ + return gLocalAreaBrakeRateNum; +} + +/* +* 功能描述:获取本地区间制动率信息 +* 参数说明:无 +* 返 回 值:区间制动率信息 +* Created By LQ 2026.02.04 +*/ +AreaBrakeRateInfoStruct* GetLocalAreaBrakeRate(void) +{ + return gszLocalAreaBrakeRate; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h index 1eafa3c..abdacdf 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h +++ b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h @@ -164,6 +164,19 @@ typedef struct S_LineCommTrainStruct UINT16 szCommTrainNumID[TRAIN_SUM_MAX]; /*全线通信车ID数组*/ }LineCommTrainStruct; +/*区间牵引加速度信息结构体*/ +typedef struct S_AreaAccelerationInfoStruct +{ + UINT16 wAreaId; /*区间ID*/ + UINT8 cAreaAccelerationValue; /*区间牵引加速度值*/ +} AreaAccelerationInfoStruct; + +/*区间制动率信息结构体*/ +typedef struct S_AreaBrakeRateInfoStruct +{ + UINT16 wAreaId; /*区间ID*/ + UINT8 cAreaBrakeRateValue; /*区间制动率值*/ +} AreaBrakeRateInfoStruct; /*******************************全局变量声明*******************************/ extern UINT8 AllSignalBrightFlag; /*全站亮灯标志*/ @@ -240,6 +253,18 @@ extern UINT8 g_LocalSnowModel; /* extern UINT8 gLocalAreaIteCutNum; /*本地区间ITE切除数量*/ extern UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*本地区间ITE切除ID数组*/ +extern UINT8 gAllLineAccelerationState; /*全线牵引加速度设置状态:0x55-未设置;0xAA-已设置*/ +extern UINT8 gAllLineAccelerationValue; /*全线牵引加速度设置值*/ + +extern UINT8 gAllLineBrakeRateState; /*全线制动率设置状态:0x55-未设置;0xAA-已设置*/ +extern UINT8 gAllLineBrakeRateValue; /*全线制动率设置值*/ + +extern UINT8 gLocalAreaAccelerationNum; /*本地区间牵引加速度数量*/ +extern AreaAccelerationInfoStruct gszLocalAreaAcceleration[LOCAL_AREA_SNOW_SUM_MAX]; /*本地区间牵引加速度数组*/ + +extern UINT8 gLocalAreaBrakeRateNum; /*本地区间制动率数量*/ +extern AreaBrakeRateInfoStruct gszLocalAreaBrakeRate[LOCAL_AREA_SNOW_SUM_MAX]; /*本地区间制动率数组*/ + /******************************联锁标志数据管理****************************/ /* @@ -1769,7 +1794,7 @@ AreaSnowInfoStruct* GetLocalAreaSnow(void); * 返回值 : 0 第一个锁闭的区段不是故障锁闭 * 1 第一个锁闭的区段是故障锁闭 */ -UINT8 RouteFirstLockErrCheck(UINT16 routeId); +UINT8 RouteFirstLockErrCheck(UINT16 routeId, UINT16 *pPhySecId); /* * 功能描述:获取全线通信车数据 @@ -1898,4 +1923,162 @@ void SetLocalAreaIteCutInfo(const UINT8 cAreaIteCutNum, const UINT16 pAreaIteCut */ UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId); +/* +* 功能描述: 道岔单操可动作物理区段检查 +* 参数说明: UINT16 phySecId,物理区段Id +* UINT8 oper_src,操作来源 +* UINT8 sendLevel,发送级别 +* 返回值 : CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 GetDanCaoPhySecValidState(UINT16 phySecId, UINT8 oper_src, UINT8 sendLevel); + +/* +* 功能描述: 道岔强扳可动作物理区段检查 +* 参数说明: UINT16 phySecId,物理区段Id +* UINT8 sendLevel,发送级别 +* 返回值 : CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 GetForcePhySecValidState(UINT16 phySecId, UINT8 sendLevel); + +/* +* 功能描述: 道岔常态位置检查 +* 参数说明: UINT16 wSwitchId,道岔Id +* 返回值 : 无 +*/ +void CheckSwitchNomalPosProc(const UINT16 wSwitchId); + +/* +* 功能描述: 道岔定反操互斥条件检查 +* 参数说明: const UINT16 wSwitchId, 道岔ID +* 返回值 :CI_SUCCESS: 检查成功 +* CI_ERROR: 检查失败 +*/ +UINT8 CheckSwitchDFMulValid(const UINT16 wSwitchId, const UINT8 chSwitchPos); + +/* +* 功能描述: 道岔常态位置检查道岔封锁和道岔区段(包含额外物理区段)封锁 +* 参数说明: UINT16 wSwitchId,道岔Id +* 返回值 : CI_ERROR +* CI_SUCCESS +*/ +UINT8 GetSwitchAndSecFLockState(const UINT16 wSwitchId); + +/* +* 功能描述:获取全线牵引加速度设置状态 +* 参数说明:无 +* 返 回 值:0x55 未设置 +* 0xAA 已设置 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineAccelerationState(void); + +/* +* 功能描述:获取全线牵引加速度设置状态 +* 参数说明:UINT8 setState 全线牵引加速度设置状态 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineAccelerationState(UINT8 setState); + +/* +* 功能描述:获取全线牵引加速度设置值 +* 参数说明:无 +* 返 回 值:全线牵引加速度设置值 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineAccelerationValue(void); + +/* +* 功能描述:设置全线牵引加速度设置值 +* 参数说明:UINT8 setValue 全线牵引加速度设置值 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineAccelerationValue(UINT8 setValue); + +/* +* 功能描述:获取全线制动率设置状态 +* 参数说明:无 +* 返 回 值:0x55 未设置 +* 0xAA 已设置 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineBrakeRateState(void); + +/* +* 功能描述:设置全线制动率设置状态 +* 参数说明:UINT8 setState 全线制动率设置状态 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineBrakeRateState(UINT8 setState); + +/* +* 功能描述:获取全线牵引加速度设置值 +* 参数说明:无 +* 返 回 值:全线牵引加速度设置值 +* Created By LQ 2026.02.04 +*/ +UINT8 GetAllLineBrakeRateValue(void); + +/* +* 功能描述:设置全线牵引加速度设置值 +* 参数说明:UINT8 setValue 全线牵引加速度设置值 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetAllLineBrakeRateValue(UINT8 setValue); + +/* +* 功能描述:设置本地区间牵引加速度信息 +* 参数说明:const UINT8 cAreaNum 区间数量 +* const AreaAccelerationInfoStruct pAreaAccBuf[LOCAL_AREA_SNOW_SUM_MAX] 区间牵引加速度数组 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetLocalAreaAccelerationInfo(const UINT8 cAreaNum, const AreaAccelerationInfoStruct pAreaAccBuf[LOCAL_AREA_SNOW_SUM_MAX]); + +/* +* 功能描述:获取本地区间牵引加速度数量 +* 参数说明:无 +* 返 回 值:区间牵引加速度数量 +* Created By LQ 2026.02.04 +*/ +UINT8 GetLocalAreaAccelerationNum(void); + +/* +* 功能描述:获取本地区间牵引加速度信息 +* 参数说明:无 +* 返 回 值:区间牵引加速度信息 +* Created By LQ 2026.02.04 +*/ +AreaAccelerationInfoStruct* GetLocalAreaAcceleration(void); + +/* +* 功能描述:设置本地区间制动率信息 +* 参数说明:const UINT8 cAreaNum 区间数量 +* const AreaBrakeRateInfoStruct pAreaBrakeBuf[LOCAL_AREA_SNOW_SUM_MAX] 区间制动率数组 +* 返 回 值:无 +* Created By LQ 2026.02.04 +*/ +void SetLocalAreaBrakeRateInfo(const UINT8 cAreaNum, const AreaBrakeRateInfoStruct pAreaBrakeBuf[LOCAL_AREA_SNOW_SUM_MAX]); + +/* +* 功能描述:获取本地区间制动率数量 +* 参数说明:无 +* 返 回 值:区间制动率数量 +* Created By LQ 2026.02.04 +*/ +UINT8 GetLocalAreaBrakeRateNum(void); + +/* +* 功能描述:获取本地区间制动率信息 +* 参数说明:无 +* 返 回 值:区间制动率信息 +* Created By LQ 2026.02.04 +*/ +AreaBrakeRateInfoStruct* GetLocalAreaBrakeRate(void); + #endif diff --git a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c index 815fd70..239b672 100644 --- a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c +++ b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c @@ -17,7 +17,7 @@ extern PlatHeartDataStruct RecvHeartDataStru ; /*平台心跳帧数据结构*/ extern PlatGPIODataStruct RecvPlatDataStruGPIO;/*平台0x2D帧数据结构 GPIO采集状态*/ -extern PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance;/*平台硬件采集故障容忍记录数据*/ + @@ -427,36 +427,18 @@ UINT8 CheckRCIAPowerFaultState(void) { UINT8 retVal = CI_ERROR; UINT8 cxABreakFlag = 0U; /*A系电源插箱空开断开检查*/ - UINT8 chCheckState = 0U; - UINT32 dwErrorStartCyc = 0U; - UINT32 dwCurCyc = 0U; + cxABreakFlag = GetPowerANodeStatue(); - dwErrorStartCyc = gPlatDataGPIOTolercance.powerANode_TolCyc; - dwCurCyc = Get2oo2CurCycleNum(); + /* 1、A系电源插箱空开断开 */ if (NODE_STATUS_BREAK == cxABreakFlag) { /*A系电源故障状态*/ - chCheckState = SystemOverTimeCheck(dwErrorStartCyc, IO_POWERSTATE_TOLERANCE); - if (CI_TIME_NO == chCheckState) - { - gPlatDataGPIOTolercance.powerANode_TolCyc = dwCurCyc; - retVal = CI_SUCCESS; - } - else if(CI_TIME_IN == chCheckState) - { - retVal = CI_SUCCESS;/*继续容忍*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"PLATIO_A_Node_Power_FaultState StartTime%d\n", dwErrorStartCyc); - } + retVal = CI_ERROR; } else { retVal = CI_SUCCESS; - gPlatDataGPIOTolercance.powerANode_TolCyc = 0U; } return retVal; } @@ -471,36 +453,18 @@ UINT8 CheckRCIBPowerFaultState(void) { UINT8 retVal = CI_ERROR; UINT8 cxBBreakFlag = 0U; /*B系电源插箱空开断开检查*/ - UINT8 chCheckState = 0U; - UINT32 dwErrorStartCyc = 0U; - UINT32 dwCurCyc = 0U; + cxBBreakFlag = GetPowerBNodeStatue(); - dwErrorStartCyc = gPlatDataGPIOTolercance.powerBNode_TolCyc; - dwCurCyc = Get2oo2CurCycleNum(); - /* 1、B系电源插箱空开断开*/ + + /* 1、B系电源插箱空开断开 */ if (NODE_STATUS_BREAK == cxBBreakFlag) { /*B系电源故障状态*/ - chCheckState = SystemOverTimeCheck(dwErrorStartCyc, IO_POWERSTATE_TOLERANCE); - if (CI_TIME_NO == chCheckState) - { - gPlatDataGPIOTolercance.powerBNode_TolCyc = dwCurCyc; - retVal = CI_SUCCESS; - } - else if (CI_TIME_IN == chCheckState) - { - retVal = CI_SUCCESS;/*继续容忍*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"PLATIO_B_Node_Power_FaultState StartTime%d\n", dwErrorStartCyc); - } + retVal = CI_ERROR; } else { retVal = CI_SUCCESS; - gPlatDataGPIOTolercance.powerBNode_TolCyc = 0U; } return retVal; } @@ -520,16 +484,11 @@ UINT8 CheckRCIAPowerModeFaultState(void) UINT8 powerBPUBAState = 0U; /*PUB A采集的24VB电源状态 3*/ UINT8 vol1Flag = 0U; /*CPI A采集24VA电源 1*/ UINT8 vol3Flag = 0U; /*CPI A采集24VB电源 3*/ - UINT8 chCheckState = 0U; - UINT32 dwErrorStartCyc = 0U; - UINT32 dwCurCyc = 0U; powerAPUBAState = GetGPIOCollectPointStatus(COLLECT_MODEA_CCUA); powerBPUBAState = GetGPIOCollectPointStatus(COLLECT_MODEB_CCUA); vol1Flag = CheckPointVoltageState(COLLECT_MODEA_CCUA); vol3Flag = CheckPointVoltageState(COLLECT_MODEB_CCUA); - dwErrorStartCyc = gPlatDataGPIOTolercance.powerAMode_TolCyc; - dwCurCyc = Get2oo2CurCycleNum(); /* 1、PUB A采集的24VA电源异常、或24VB电源异常 2、CPI A采集24VA电源、或24VB电源电压为0V */ @@ -537,27 +496,11 @@ UINT8 CheckRCIAPowerModeFaultState(void) if (((CHECK_VOLTAGE_ZERO == vol1Flag) || (CHECK_VOLTAGE_ZERO == vol3Flag)) && ((POWER_STATUS_ABNORMAL == powerAPUBAState) || (POWER_STATUS_ABNORMAL == powerBPUBAState))) { - /*检查容忍*/ - chCheckState = SystemOverTimeCheck(dwErrorStartCyc, IO_POWERSTATE_TOLERANCE); - if (CI_TIME_NO == chCheckState) - { - gPlatDataGPIOTolercance.powerAMode_TolCyc = dwCurCyc; - retVal = CI_SUCCESS; - } - else if (CI_TIME_IN == chCheckState) - { - retVal = CI_SUCCESS;/*继续容忍*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"PLATIO_A_Mode_Power_FaultState StartTime%d\n", dwErrorStartCyc); - } + retVal = CI_ERROR; } else { retVal = CI_SUCCESS; - gPlatDataGPIOTolercance.powerAMode_TolCyc = 0U; } return retVal; @@ -577,43 +520,25 @@ UINT8 CheckRCIBPowerModeFaultState(void) UINT8 powerBPUBBState = 0U; /*PUB A采集的24VB电源状态 4*/ UINT8 vol2Flag = 0U; /*CPI B采集24VA电源 2*/ UINT8 vol4Flag = 0U; /*CPI B采集24VB电源 4*/ - UINT8 chCheckState = 0U; - UINT32 dwErrorStartCyc = 0U; - UINT32 dwCurCyc = 0U; powerAPUBBState = GetGPIOCollectPointStatus(COLLECT_MODEA_CCUB); powerBPUBBState = GetGPIOCollectPointStatus(COLLECT_MODEB_CCUB); vol2Flag = CheckPointVoltageState(COLLECT_MODEA_CCUB); vol4Flag = CheckPointVoltageState(COLLECT_MODEB_CCUB); - dwErrorStartCyc = gPlatDataGPIOTolercance.powerBMode_TolCyc; - dwCurCyc = Get2oo2CurCycleNum(); /* 1、PUB B采集的24VA电源异常、或24VB电源异常 2、CPI B采集24VA电源、或24VB电源电压为0V */ + + + /*暂未实现PUB采集,只判断电源电压*/ if (((CHECK_VOLTAGE_ZERO == vol2Flag) || (CHECK_VOLTAGE_ZERO == vol4Flag)) && ((POWER_STATUS_ABNORMAL == powerAPUBBState) || (POWER_STATUS_ABNORMAL == powerBPUBBState))) { - /*检查容忍*/ - chCheckState = SystemOverTimeCheck(dwErrorStartCyc, IO_POWERSTATE_TOLERANCE); - if (CI_TIME_NO == chCheckState) - { - gPlatDataGPIOTolercance.powerBMode_TolCyc = dwCurCyc; - retVal = CI_SUCCESS; - } - else if (CI_TIME_IN == chCheckState) - { - retVal = CI_SUCCESS;/*继续容忍*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"PLATIO_B_Mode_Power_FaultState StartTime%d\n", dwErrorStartCyc); - } + retVal = CI_ERROR; } else { retVal = CI_SUCCESS; - gPlatDataGPIOTolercance.powerBMode_TolCyc = 0U; } return retVal; diff --git a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.h b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.h index 17b98fa..7395560 100644 --- a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.h +++ b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.h @@ -16,7 +16,7 @@ #include "CommonTypes.h" #include "../System/CiSystemDefine.h" -#include "../System/SystemParameterManage.h" + #define BOARD_TYPE_CCUA ((UINT8)0x09) /*通控板A*/ @@ -60,8 +60,6 @@ #define VOLTAGE_MAX_TO_0 ((UINT16)500U) /*电压判断为0的阈值*/ -#define IO_POWERSTATE_TOLERANCE ((UINT8)0x02) /*平台电源报警容忍周期数,容忍3周期,超过2周期报警*/ - /*平台心跳帧信息结构*/ typedef struct S_PlatHeartDataStruct { @@ -103,14 +101,7 @@ typedef struct S_PlatGPIODataStruct }PlatGPIODataStruct; -/*平台发送的电源采集状态容忍同步数据*/ -typedef struct S_PlatGPIOToleranceData -{ - UINT32 powerANode_TolCyc; /*A系电源插箱的故障容忍起始周期*/ - UINT32 powerBNode_TolCyc; /*B系电源插箱的故障容忍起始周期*/ - UINT32 powerAMode_TolCyc; /*A系电源模块的故障容忍起始周期*/ - UINT32 powerBMode_TolCyc; /*B系电源模块的故障容忍起始周期*/ -}PlatGPIOToleranceDataStruct; + diff --git a/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.c b/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.c new file mode 100644 index 0000000..45ca861 --- /dev/null +++ b/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.c @@ -0,0 +1,386 @@ +/******************************************************** +* +* 文 件 名: ECSConfigDataManage.c +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026.01.24 +* 作 者: 联锁组 +* 功能描述: 环境控制系统配置数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "ECSConfigDataManage.h" + +ECSConfigDataStruct ECSConfigDataStru[ECS_MAX_NUM] = { 0U }; /*ECS配置数据结构体*/ +INT16 ECSCurSum = 0; /*ECS当前总数*/ +UINT16 LocalCiECSIdBuf[ECS_MAX_NUM] = { 0U }; /*定义本地联ECS ID数组*/ + +/* +* 功能描述:获取指定ID ECS索引号 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:ECS_MAX_NUM 10 获取数据失败 +* 其它 ECS索引号 +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsConfigBufIndex(const UINT16 EcslId) +{ + UINT16 wRetVal = ECS_MAX_NUM; + + if ((1U <= EcslId) && (ECS_MAX_NUM > EcslId)) + { + wRetVal = EcslId; + } + else + { + /*入参非法,返回失败*/ + } + + return wRetVal; +} + +/* +* 功能描述:获取ECS当前总数 +* 参数说明:void +* 返 回 值:ECS当前总数 +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsCurSum(void) +{ + UINT16 wRetVal = 0U; + + if ((INT16)ECS_MAX_NUM <= ECSCurSum) + { + wRetVal = ECS_MAX_NUM; + } + else if (0 > ECSCurSum) + { + wRetVal = 0U; + } + else + { + wRetVal = (UINT16)ECSCurSum; + } + + return wRetVal; +} + +/* +* 功能描述:获取指定数组下标对应的ECS ID +* 参数说明:const UINT16 bufIndex 数组下标 +* 返 回 值:0 获取数据失败 +* 其它 ECS ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsId(const UINT16 bufIndex) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 wEcsCurNum = 0U; + + wEcsCurNum = GetEcsCurSum(); + + if (bufIndex < wEcsCurNum) + { + wRetVal = LocalCiECSIdBuf[bufIndex]; + } + else + { + /*入参非法,返回失败*/ + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* 功能描述:获取指定ID ECS所属控区ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 控区ID +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsBelongCiId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + cRetVal = ECSConfigDataStru[bufIndex].cBelongCiId; + } + else + { + /*入参非法,返回失败*/ + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:整理读入的ECS配置数据 +* 参数说明:无 +* 返 回 值:CI_SUCCESS 1 整理成功 +* CI_ERROR 0 整理失败 +* Created By LQ 2026.01.27 +*/ +UINT8 EcsConfigDataManage(void) +{ + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wEcsCurSum = 0U; /*ECS配置数据总数*/ + UINT8 cLocalCiId = 0U; + UINT8 retVal = CI_ERROR; + + wEcsCurSum = GetEcsCurSum(); + + if (ECS_MAX_NUM > wEcsCurSum) + { + retVal = CI_SUCCESS; + + for (ii = 0U; ii < ECS_MAX_NUM; ii++) + { + cLocalCiId = GetSystemParaLocalCiId(); + + if (ECSConfigDataStru[ii].cBelongCiId == cLocalCiId) + { + if (wEcsCurSum > jj) + { + LocalCiECSIdBuf[jj] = ECSConfigDataStru[ii].wEcsId; /*存储本控区的ECS ID*/ + jj++; + } + else + { + break; /*数量超限,停止遍历*/ + } + } + else + { + /*继续初始化*/ + } + } + } + else + { + retVal = CI_ERROR; /*数据超限,返回失败*/ + } + + return retVal; +} + +/* +* 功能描述:获取指定ID ECS起点linkID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 起点linkID +* Created By LQ 2026.01.26 +*/ +UINT16 GetEcsStartLinkId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + wRetVal = ECSConfigDataStru[bufIndex].wStartLinkId; + } + else + { + /*入参非法,返回失败*/ + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* 功能描述:获取指定ID ECS起点link偏移量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:起点link偏移量 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsStartLinkOff(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT32 dwRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + dwRetVal = ECSConfigDataStru[bufIndex].dwStartLinkOff; + } + else + { + /*入参非法,返回失败*/ + dwRetVal = CI_ERROR; + } + + return dwRetVal; +} + +/* +* 功能描述:获取指定ID ECS终点linkID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 终点linkID +* Created By LQ 2026.01.26 +*/ +UINT16 GetEcsEndLinkId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + wRetVal = ECSConfigDataStru[bufIndex].wEndLinkId; + } + else + { + /*入参非法,返回失败*/ + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* 功能描述:获取指定ID ECS终点link偏移量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:终点link偏移量 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsEndLinkOff(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT32 dwRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + dwRetVal = ECSConfigDataStru[bufIndex].dwEndLinkOff; + } + else + { + /*入参非法,返回失败*/ + dwRetVal = CI_ERROR; + } + + return dwRetVal; +} + +/* +* 功能描述:获取指定ID ECS关联的物理区段数量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 ECS关联的物理区段数量 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsRelPhySecNum(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + cRetVal = ECSConfigDataStru[bufIndex].cRelPhySecNum; + } + else + { + /*入参非法,返回失败*/ + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:获取指定ID ECS关联的物理区段ID数组 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:NULL 获取数据失败 +* 其它 ECS关联的物理区段ID数组 +* Created By LQ 2026.01.24 +*/ +UINT16* GetEcsRelPhySecId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16* pRetVal = NULL; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + pRetVal = ECSConfigDataStru[bufIndex].szRelPhySecId; + } + else + { + /*入参非法,返回失败*/ + pRetVal = NULL; + } + + return pRetVal; +} + +/* +* 功能描述:获取指定ID ECS关联的风向为逻辑正方向的继电器ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 继电器ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelFanUpRelayId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + wRetVal = ECSConfigDataStru[bufIndex].wFanUpRelayId; + } + else + { + /*入参非法,返回失败*/ + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* 功能描述:获取指定ID ECS关联的风向为逻辑反方向的继电器ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 继电器ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelFanDownRelayId(const UINT16 EcslId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(EcslId); + + if (ECS_MAX_NUM > bufIndex) + { + wRetVal = ECSConfigDataStru[bufIndex].wFanDownRelayId; + } + else + { + /*入参非法,返回失败*/ + wRetVal = CI_ERROR; + } + + return wRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.h b/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.h new file mode 100644 index 0000000..e67b83e --- /dev/null +++ b/TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.h @@ -0,0 +1,163 @@ +/******************************************************** +* +* 文 件 名: ECSConfigDataConfig.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026.01.24 +* 作 者: 联锁组 +* 功能描述: 环境控制系统配置数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _ECS_CONFIG_DATA_MANAGE_H_ +#define _ECS_CONFIG_DATA_MANAGE_H_ + +#include "CommonTypes.h" +#include "ECSDefine.h" +#include "CiSystemDefine.h" +#include "SystemParameterManage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct S_ECSConfigDataStruct +{ + UINT16 wEcsId; /*ECS ID*/ + UINT8 cBelongCiId; /*所属CI ID*/ + UINT16 wStartLinkId; /*隧道起点link ID*/ + UINT32 dwStartLinkOff; /*隧道起点link偏移量*/ + UINT16 wEndLinkId; /*隧道终点link ID*/ + UINT32 dwEndLinkOff; /*隧道终点link偏移量*/ + UINT8 cRelPhySecNum; /*隧道关联物理区段数量*/ + UINT16 szRelPhySecId[ECS_REL_PHYSEC_MAX_NUM]; /*隧道关联物理区段ID*/ + UINT16 wBelongOcId; /*所属OC ID*/ + UINT16 wFanUpRelayId; /*风向为逻辑正方向的继电器ID*/ + UINT16 wFanDownRelayId; /*风向为逻辑反方向的继电器ID*/ +}ECSConfigDataStruct; + +extern ECSConfigDataStruct ECSConfigDataStru[ECS_MAX_NUM]; /*/*ECS配置数据结构体*/ +extern INT16 ECSCurSum; /*ECS当前总数*/ +extern UINT16 LocalCiECSIdBuf[ECS_MAX_NUM]; /*定义本地联ECS ID数组*/ + +/* +* 功能描述:获取指定ID ECS索引号 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:ECS_MAX_NUM 10 获取数据失败 +* 其它 ECS索引号 +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsConfigBufIndex(const UINT16 EcslId); + +/* +* 功能描述:获取ECS当前总数 +* 参数说明:void +* 返 回 值:ECS当前总数 +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsCurSum(void); + +/* +* 功能描述:获取指定数组下标对应的ECS ID +* 参数说明:const UINT16 bufIndex 数组下标 +* 返 回 值:0 获取数据失败 +* 其它 ECS ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsId(const UINT16 bufIndex); + +/* +* 功能描述:获取指定ID ECS所属控区ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 控区ID +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsBelongCiId(const UINT16 EcslId); + +/* +* 功能描述:整理读入的ECS配置数据 +* 参数说明:无 +* 返 回 值:CI_SUCCESS 1 整理成功 +* CI_ERROR 0 整理失败 +* Created By LQ 2026.01.27 +*/ +UINT8 EcsConfigDataManage(void); + +/* +* 功能描述:获取指定ID ECS起点linkID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 起点linkID +* Created By LQ 2026.01.26 +*/ +UINT16 GetEcsStartLinkId(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS起点link偏移量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:起点link偏移量 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsStartLinkOff(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS终点linkID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 终点linkID +* Created By LQ 2026.01.26 +*/ +UINT16 GetEcsEndLinkId(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS终点link偏移量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:终点link偏移量 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsEndLinkOff(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS关联的物理区段数量 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 ECS关联的物理区段数量 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsRelPhySecNum(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS关联的物理区段ID数组 +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:NULL 获取数据失败 +* 其它 ECS关联的物理区段ID数组 +* Created By LQ 2026.01.24 +*/ +UINT16* GetEcsRelPhySecId(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS关联的风向为逻辑正方向的继电器ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 继电器ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelFanUpRelayId(const UINT16 EcslId); + +/* +* 功能描述:获取指定ID ECS关联的风向为逻辑反方向的继电器ID +* 参数说明:const UINT16 EcslId ECS ID +* 返 回 值:0 获取数据失败 +* 其它 继电器ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelFanDownRelayId(const UINT16 EcslId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ECS/ECSDataManage.c b/TSCP/src/APP/ciapp/ECS/ECSDataManage.c new file mode 100644 index 0000000..58c6bcb --- /dev/null +++ b/TSCP/src/APP/ciapp/ECS/ECSDataManage.c @@ -0,0 +1,1560 @@ +/******************************************************** +* +* 文 件 名: ECSDataManage.c +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026.01.24 +* 作 者: 联锁组 +* 功能描述: 环境控制系统动态数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "ECSDataManage.h" +#include "TrainDataManage.h" +#include "CommonMemory.h" +#include "PhysicalSectionDataManage.h" +#include "ELMDataPrepare.h" +#include "EnvelopeManage.h" + +ECSDataStruct ECSDataStru[ECS_MAX_NUM] = { 0U }; /*环境控制系统动态数据结构体*/ + +/* +* 功能描述:获取ECS动态数据结构体 +* 参数说明: +* 返 回 值:ECS动态数据结构体 +* Created By LQ 2026.01.24 +*/ +ECSDataStruct* GetEcsData(void) +{ + return ECSDataStru; +} + +/* +* 功能描述:设置指定ID ECS自动触发状态 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT8 cState 自动触发状态 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsAutoTrigState(const UINT16 wEcsId, const UINT8 cState) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + if ((ECS_AUTOTRIG_YES == cState) || (ECS_AUTOTRIG_NO == cState)) + { + ECSDataStru[bufIndex].cAutoTrigState = cState; /*ECS自动触发状态*/ + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取指定ID ECS自动触发状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 获取数据失败 +* 0x55 启用 +* 0xAA 停用 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsAutoTrigState(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + cRetVal = ECSDataStru[bufIndex].cAutoTrigState; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:设置指定ID ECS关联列车ID +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT16 wTrainId 列车ID +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsRelTrainId(const UINT16 wEcsId, const UINT16 wTrainId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wTrainIndex = 0U; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + wTrainIndex = GetTrainBufIndex(wTrainId); /*获取列车ID索引*/ + if ((TRAIN_SUM_MAX > wTrainIndex) || (0U == (wTrainId & 0x00FFU))) + { + ECSDataStru[bufIndex].wRelTrainId = wTrainId; /*ECS自动触发状态*/ + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取指定ID ECS关联列车ID +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelTrainId(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + wRetVal = ECSDataStru[bufIndex].wRelTrainId; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* 功能描述:设置ECS关联列车停车起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsTrainStopStartCycNum(const UINT16 wEcsId, const UINT32 dwCycNum) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + ECSDataStru[bufIndex].dwTrainStopStartCycNum = dwCycNum; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取ECS关联列车停车起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车停车起始周期 +* Created By LQ 2026.01.24 +*/ +UINT32 GetEcsTrainStopStartCycNum(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT32 dwRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + dwRetVal = ECSDataStru[bufIndex].dwTrainStopStartCycNum; + } + else + { + /*返回0*/ + } + + return dwRetVal; +} + +/* +* 功能描述:设置ECS关联列车移动起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsTrainMoveStartCycNum(const UINT16 wEcsId, const UINT32 dwCycNum) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + ECSDataStru[bufIndex].dwTrainMoveStartCycNum = dwCycNum; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取ECS关联列车移动起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车停车移动周期 +* Created By LQ 2026.01.24 +*/ +UINT32 GetEcsTrainMoveStartCycNum(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT32 dwRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + dwRetVal = ECSDataStru[bufIndex].dwTrainMoveStartCycNum; + } + else + { + /*返回0*/ + } + + return dwRetVal; +} + +/* +* 功能描述:设置指定ID ECS拥堵状态 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT8 cState 拥堵状态 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsJamState(const UINT16 wEcsId, const UINT8 cState) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + if ((ECS_JAM_YES == cState) || (ECS_JAM_NO == cState)) + { + ECSDataStru[bufIndex].cJamState = cState; /*ECS拥堵状态*/ + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取指定ID ECS拥堵状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 获取数据失败 +* 0x55 拥堵 +* 0xAA 不拥堵 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsJamState(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + cRetVal = ECSDataStru[bufIndex].cJamState; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:更新指定ID ECS当前占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* UINT16 pOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] 当前占用的物理区段ID(出参) +* 返 回 值:当前占用的物理区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetEcsCurOccPhySecInfo(const UINT16 wEcsId, UINT16 pOccPhySecId[ECS_REL_PHYSEC_MAX_NUM]) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cPhySecSum = 0U; /*ECS物理区段数量*/ + UINT16* pPhySecId = NULL; /*ECS物理区段ID*/ + UINT8 ii = 0U; + UINT8 cPhySecCurMerOccState = 0U; /*物理区段当前融合占用状态*/ + UINT8 cCurOccPhySecNum = 0U; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if ((ECS_MAX_NUM > bufIndex) && (NULL != pOccPhySecId)) + { + cPhySecSum = GetEcsRelPhySecNum(wEcsId); + pPhySecId = GetEcsRelPhySecId(wEcsId); + if ((0U != cPhySecSum) && (NULL != pPhySecId)) + { + for (ii = 0U; ii < cPhySecSum; ii++) + { + cPhySecCurMerOccState = GetPhySecCurMergeState(pPhySecId[ii]); /*获取物理区段融合占用状态*/ + if (SECTION_OCCUPY_NO != cPhySecCurMerOccState) + { + if (ECS_REL_PHYSEC_MAX_NUM > cCurOccPhySecNum) + { + pOccPhySecId[cCurOccPhySecNum] = pPhySecId[ii]; + cCurOccPhySecNum++; + } + else + { + break; /*异常分支,占用物理区段数量超限,不更新*/ + } + } + else + { + /*继续遍历查找占用的物理区段*/ + } + } + + cRetVal = cCurOccPhySecNum; + } + else + { + /*异常分支,不处理*/ + } + } + else + { + /*异常分支,不处理*/ + } + + return cRetVal; +} + +/* +* 功能描述:清除指定ID ECS占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.25 +*/ +void ClearEcsOccPhySecInfo(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + ECSDataStru[bufIndex].cOccPhySecNum = 0U; + (void)CommonMemSet(ECSDataStru[bufIndex].szOccPhySecId, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM), (UINT8)0U, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM)); + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:更新指定ID ECS占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.25 +*/ +void UpdateEcsOccPhySecInfo(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cPhySecSum = 0U; /*ECS物理区段数量*/ + UINT16 szOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] = { 0U }; /*ECS物理区段ID*/ + UINT8 ii = 0U; + UINT8 cPhySecCurMerOccState = 0U; /*物理区段当前融合占用状态*/ + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + /*获取当周期隧道内物理区段占用状态*/ + cPhySecSum = GetEcsCurOccPhySecInfo(wEcsId, szOccPhySecId); + + /*先清除之前记录的占用的物理区段信息*/ + ClearEcsOccPhySecInfo(wEcsId); + + /*再更新本周期隧道内占用的物理区段信息*/ + for (ii = 0U; ii < cPhySecSum; ii++) + { + if (ECS_REL_PHYSEC_MAX_NUM > ECSDataStru[bufIndex].cOccPhySecNum) + { + ECSDataStru[bufIndex].szOccPhySecId[ECSDataStru[bufIndex].cOccPhySecNum] = szOccPhySecId[ii]; + ECSDataStru[bufIndex].cOccPhySecNum++; + } + else + { + break; /*异常分支,占用物理区段数量超限,不更新*/ + } + } + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:获取指定ID ECS占用的物理区段数量 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:占用的物理区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetEcsOccPhySecNum(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + cRetVal = ECSDataStru[bufIndex].cOccPhySecNum; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:获取指定ID ECS占用的物理区段ID +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:NULL 获取数据失败 +* 非NULL 占用的物理区段ID +* Created By LQ 2026.01.25 +*/ +UINT16* GetEcsOccPhySecId(const UINT16 wEcsId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16* pRetVal = NULL; + + bufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > bufIndex) + { + pRetVal = ECSDataStru[bufIndex].szOccPhySecId; + } + else + { + pRetVal = NULL; + } + + return pRetVal; +} + +/* +* 功能描述:清除指定ID ECS的动态数据 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void ClearEcsDymData(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + /*清除ECS的动态数据为默认值,继电器状态需要周期设置落下,不在此处清除*/ + ECSDataStru[wBufIndex].wRelTrainId = 0U; + ECSDataStru[wBufIndex].dwTrainStopStartCycNum = 0U; + ECSDataStru[wBufIndex].dwTrainMoveStartCycNum = 0U; + ECSDataStru[wBufIndex].cJamState = ECS_JAM_NO; + ECSDataStru[wBufIndex].cOccPhySecNum = 0U; + (void)CommonMemSet(ECSDataStru[wBufIndex].szOccPhySecId, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM), (UINT8)0U, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM)); + } + else + { + /*不处理*/ + } + +} + +/* +* 功能描述:更新ECS关联列车 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void UpdateEcsRelTrain(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + str_Zone strEcsZone = { 0U }; /*ECS隧道覆盖的区域*/ + UINT8 cCommTrainSum = 0U; /*通信良好的列车数量*/ + UINT16 szCommTrainId[TRAIN_SUM_MAX] = { 0U }; /*通信良好的列车ID*/ + UINT8 ii = 0U; + UINT16 wRelTrainId = 0U; /*待设置的关联列车ID*/ + str_Zone strTrainZone = { 0U }; /*列车车身(大前小后)覆盖的区域*/ + UINT16 wEcsLinkNum = 0U; /*ECS覆盖的link数量*/ + UINT16 wTrainLinkNum = 0U; /*列车车身覆盖的link数量*/ + UINT8 cFuncRet = CI_ERROR; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + strEcsZone.pStart.wLinkId = GetEcsStartLinkId(wEcsId); /*获取隧道位置*/ + strEcsZone.pStart.dwOffset = GetEcsStartLinkOff(wEcsId); + strEcsZone.pEnd.wLinkId = GetEcsEndLinkId(wEcsId); + strEcsZone.pEnd.dwOffset = GetEcsEndLinkOff(wEcsId); + strEcsZone.Dir = 0x55U; /*默认方向,无影响*/ + + cFuncRet = DsuLinkSeqBtwPoints(&strEcsZone.pStart, &strEcsZone.pEnd, &strEcsZone.Dir, &wEcsLinkNum, strEcsZone.pLinkSeq.szLinkId); + strEcsZone.pLinkSeq.cLinkCnt = (UINT8)wEcsLinkNum; + + if (CI_SUCCESS == cFuncRet) + { + /*遍历所有通信车,检查是否有通信车(大前小后)在隧道内*/ + cCommTrainSum = GetCommGoodTrainInfo(szCommTrainId); /*获取与本控制通信的列车信息*/ + for (ii = 0U; ii < cCommTrainSum; ii++) + { + strTrainZone.pStart.wLinkId = GetTrainMaxHeadLink(szCommTrainId[ii]); /*获取列车车身位置*/ + strTrainZone.pStart.dwOffset = GetTrainMaxHeadOffset(szCommTrainId[ii]); + strTrainZone.pEnd.wLinkId = GetTrainMinTailLink(szCommTrainId[ii]); + strTrainZone.pEnd.dwOffset = GetTrainMinTailOffset(szCommTrainId[ii]); + strTrainZone.Dir = GetTrainDir(szCommTrainId[ii]); + + cFuncRet = DsuLinkSeqBtwPoints(&strTrainZone.pStart, &strTrainZone.pEnd, &strTrainZone.Dir, &wTrainLinkNum, strTrainZone.pLinkSeq.szLinkId); + strTrainZone.pLinkSeq.cLinkCnt = (UINT8)wTrainLinkNum; + if (CI_SUCCESS == cFuncRet) + { + cFuncRet = IsPointInPath(strTrainZone.pStart, strEcsZone); + cFuncRet &= IsPointInPath(strTrainZone.pEnd, strEcsZone); + cFuncRet &= IsPointInPath(strEcsZone.pStart, strTrainZone); + cFuncRet &= IsPointInPath(strEcsZone.pEnd, strTrainZone); + if (CI_SUCCESS != cFuncRet) + { + /*该通信车在隧道内,停止遍历,设置该列车为ECS关联列车*/ + wRelTrainId = szCommTrainId[ii]; + break; + } + else + { + /*继续查找是否有通信车在隧道内*/ + } + } + else + { + /*不处理*/ + } + } + } + else + { + /*不处理*/ + } + + SetEcsRelTrainId(wEcsId, wRelTrainId); /*设置ECS关联列车ID*/ + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:按照通信车监督ECS隧道内列车停车状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void MonitorEcsTrainByCommTrain(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + UINT8 cEcsOccPhySecNum = 0U; + UINT32 dwCurCycNum = 0U; + UINT32 dwTrainStopStartCycNum = 0U; /*列车停车起始周期*/ + UINT16 wRelTrainId = 0U; /*ECS关联列车ID*/ + UINT8 cZeroState = 0U; /*列车零速状态*/ + UINT32 dwTrainStopOverCycCount = 0U; /*列车停车超时周期数*/ + UINT32 dwTrainMoveStartCycNum = 0U; /*列车移动起始周期*/ + UINT32 dwTrainMoveOverCycCount = 0U; /*列车移动超时周期数*/ + UINT8 cTimeCheck = 0U; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + cEcsOccPhySecNum = GetEcsOccPhySecNum(wEcsId); + if (0U != cEcsOccPhySecNum) + { + /*隧道内为通信车时,需清除非通信车占用时存储的物理区段占用信息*/ + ClearEcsOccPhySecInfo(wEcsId); + } + else + { + /*不处理*/ + } + + dwCurCycNum = Get2oo2CurCycleNum(); + dwTrainStopStartCycNum = GetEcsTrainStopStartCycNum(wEcsId); /*获取列车停车起始周期*/ + + wRelTrainId = GetEcsRelTrainId(wEcsId); /*获取ECS关联列车ID*/ + cZeroState = GetTrainZeroState(wRelTrainId); /*获取列车零速状态*/ + if (TRAIN_SPEED_ZERO_YES == cZeroState) + { + /*列车零速,设置停车起始周期*/ + if (0U == dwTrainStopStartCycNum) + { + /*设置当周期为停车起始周期*/ + SetEcsTrainStopStartCycNum(wEcsId, dwCurCycNum); + } + else + { + /*已设置停车起始周期,不再重复设置*/ + } + + SetEcsTrainMoveStartCycNum(wEcsId, 0U); /*停车后,清除移动起始周期*/ + } + else + { + /*非零速列车处理*/ + dwTrainStopOverCycCount = GetEcsTrainStopTimeCount(); + cTimeCheck = SystemOverTimeCheck(dwTrainStopStartCycNum, dwTrainStopOverCycCount); /*判断是否停车超时*/ + if (CI_TIME_OUT == cTimeCheck) + { + /*停车超时,待列车重新移动超过10s(配置数据)后,再清除停车起始周期为0*/ + dwTrainMoveStartCycNum = GetEcsTrainMoveStartCycNum(wEcsId); + dwTrainMoveOverCycCount = GetEcsTrainMoveTimeCount(); + cTimeCheck = SystemOverTimeCheck(dwTrainMoveStartCycNum, dwTrainMoveOverCycCount); + + if (CI_TIME_NO == cTimeCheck) + { + /*设置当周期为列车移动起始周期*/ + SetEcsTrainMoveStartCycNum(wEcsId, dwCurCycNum); + } + else if (CI_TIME_IN == cTimeCheck) + { + /*未超时,继续等待*/ + } + else + { + /*超时,清除列车停车起始周期和移动起始周期为0*/ + SetEcsTrainStopStartCycNum(wEcsId, 0U); + SetEcsTrainMoveStartCycNum(wEcsId, 0U); + } + } + else + { + SetEcsTrainStopStartCycNum(wEcsId, 0U); /*未停车或停车未超时,重置周期为0*/ + SetEcsTrainMoveStartCycNum(wEcsId, 0U); + } + } + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:按照非通信车监督ECS隧道内列车停车状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void MonitorEcsTrainByBadTrain(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + UINT32 dwTrainMoveStartCycNum = 0U; /*列车移动起始周期*/ + UINT8 cFuncRet = CI_ERROR; + UINT32 dwCurCycNum = 0U; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + /*清除列车移动起始周期*/ + dwTrainMoveStartCycNum = GetEcsTrainMoveStartCycNum(wEcsId); + if (0U != dwTrainMoveStartCycNum) + { + SetEcsTrainMoveStartCycNum(wEcsId, 0U); /*隧道内为非通信车时,需要清除列车移动起始周期为0*/ + } + else + { + /*不处理*/ + } + + cFuncRet = EcsPhySecUTOccCheck(wEcsId); /*检查隧道内物理区段是否为非通信车占用*/ + if (CI_SUCCESS == cFuncRet) + { + /*不存在非通信车占用,清除列车停车起始周期为0*/ + SetEcsTrainStopStartCycNum(wEcsId, 0U); + + /*隧道内区段空闲时,需清除非通信车占用时存储的物理区段占用信息*/ + ClearEcsOccPhySecInfo(wEcsId); + } + else + { + /*存在非通信车占用,检查隧道内占用的区段是否发生变化*/ + cFuncRet = EcsPhySecUTOccChangeCheck(wEcsId); + if (CI_SUCCESS == cFuncRet) + { + /*隧道内非通信车占用的区段未发生变化,不处理*/ + } + else + { + /*隧道内非通信车占用的区段发生变化,更细停车起始周期为当周期(直接更新,不需要先置零再设置)*/ + dwCurCycNum = Get2oo2CurCycleNum(); + SetEcsTrainStopStartCycNum(wEcsId, dwCurCycNum); + + /*隧道内非通信车占用的物理区段变化,更新新的区段占用信息*/ + UpdateEcsOccPhySecInfo(wEcsId); + } + } + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:检查ECS物理区段是否全为非通信车占用 +* 参数说明:const UINT16 wEcsId +* 返 回 值:0 全为UT占用 +* 1 空闲或存在CT占用 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccCheck(const UINT16 wEcsId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 cOccPhySecNum = 0U; /*占用的物理区段数量*/ + UINT16 szOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] = { 0U }; /*占用的物理区段ID数组*/ + UINT8 ii = 0U; + UINT8 cPhySecIncAxleNum = 0U; /*物理区段包含的计轴区段数量*/ + UINT16* pPhySecIncAxleId = NULL; /*物理区段包含的计轴区段ID*/ + UINT8 jj = 0U; + UINT16 wAcIdIndex = 0U; + UINT8 tempEnvelopeCnt = 0u; /*计轴上的包络数量*/ + UINT16 tempEnvelopeID[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*计轴上的包络ID数组*/ + UINT8 kk = 0U; + const EnvelopeStruct* pEnvelopeTemp = NULL; /*包络指针*/ + UINT8 cKeepWorkFlag = CI_SUCCESS; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + cOccPhySecNum = GetEcsCurOccPhySecInfo(wEcsId, szOccPhySecId); /*获取隧道内占用的物理区段信息*/ + if (0U == cOccPhySecNum) + { + cRetVal = CI_SUCCESS; /*隧道内无区段占用,返回1*/ + } + else + { + for (ii = 0U; ii < cOccPhySecNum; ii++) + { + cPhySecIncAxleNum = GetPAxisSectionSum(szOccPhySecId[ii]); /*获取物理区段包含的计轴区段信息*/ + pPhySecIncAxleId = GetPAxisSectionIdBuf(szOccPhySecId[ii]); + + if ((0U < cPhySecIncAxleNum) && (NULL != pPhySecIncAxleId)) + { + for (jj = 0U; jj < cPhySecIncAxleNum; jj++) + { + wAcIdIndex = elm_PrepareACIndex(pPhySecIncAxleId[jj]); + tempEnvelopeCnt = elm_GetACRelEnvelopeCnt(wAcIdIndex, tempEnvelopeID); /*获取计轴上的包络信息*/ + + if (SECTION_REL_ENVELOPE_SUM_MAX > tempEnvelopeCnt) + { + for (kk = 0U; kk < tempEnvelopeCnt; kk++) + { + pEnvelopeTemp = elm_GetEnvelopeInfoPtr(tempEnvelopeID[kk]); + if (NULL != pEnvelopeTemp) + { + if (TYPE_CT_ENVELOPE == pEnvelopeTemp->envelopeType) + { + cRetVal = CI_SUCCESS; + cKeepWorkFlag = CI_ERROR; /*存在CT包络,停止遍历,返回1*/ + } + else + { + /*继续遍历检查*/ + } + } + else + { + cKeepWorkFlag = CI_ERROR; + cRetVal = CI_ERROR; /*异常分支,返回0*/ + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + cKeepWorkFlag = CI_ERROR; + cRetVal = CI_ERROR; /*异常分支,返回0*/ + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + cKeepWorkFlag = CI_ERROR; + cRetVal = CI_ERROR; /*异常分支,返回0*/ + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历*/ + } + } + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:检查ECS物理区段非通信车占用状态是否发生变化 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 变化 +* 1 未变化 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccChangeCheck(const UINT16 wEcsId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 cCurOccPhySecNum = 0U; /*当周期占用的物理区段数量*/ + UINT16 szCurOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] = { 0U }; /*当周期占用的物理区段ID数组*/ + UINT8 cPreOccPhySecNum = 0U; /*上周期占用的物理区段数量*/ + UINT16* pPreOccPhySecId = NULL; /*上周期占用的物理区段ID数组*/ + UINT8 ii = 0U; + UINT8 cFuncRet = CI_ERROR; + UINT32 dwTrainStopStartCycNum = 0U; /*列车停车起始周期*/ + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + cRetVal = CI_SUCCESS; + + cCurOccPhySecNum = GetEcsCurOccPhySecInfo(wEcsId, szCurOccPhySecId); /*获取当周期隧道内占用的物理区段信息*/ + if (cCurOccPhySecNum > 0U) + { + cFuncRet = EcsPhySecUTOccContinusCheck(wEcsId, cCurOccPhySecNum, szCurOccPhySecId); /*检查隧道内非通信车是否连续占用*/ + if (CI_SUCCESS == cFuncRet) + { + cPreOccPhySecNum = GetEcsOccPhySecNum(wEcsId); + pPreOccPhySecId = GetEcsOccPhySecId(wEcsId); + + /*检查隧道内占用的物理区段数量是否相同*/ + if (cCurOccPhySecNum == cPreOccPhySecNum) + { + /*若隧道内占用的物理区段数量相同,再检查占用的物理区段ID顺序是否相同*/ + for (ii = 0U; ii < cCurOccPhySecNum; ii++) + { + if (szCurOccPhySecId[ii] == pPreOccPhySecId[ii]) + { + /*继续检查*/ + } + else + { + break; /*物理区段ID不同,停止遍历*/ + } + } + + if (ii != cCurOccPhySecNum) + { + cRetVal = CI_ERROR; /*占用的物理区段ID不同,返回0*/ + } + else + { + /*占用物理区段ID相同,需要再检查隧道外方区段的占用状态是否发送变化*/ + cRetVal = EcsOutPhySecOccChangeCheck(wEcsId); + } + } + else + { + /*占用的区段数量发生变化,需要判断是否为通信车通信中断当周期的场景*/ + dwTrainStopStartCycNum = GetEcsTrainStopStartCycNum(wEcsId); /*获取列车停车起始周期*/ + if ((0U == cPreOccPhySecNum) && (0U != dwTrainStopStartCycNum)) + { + /*上周期占用的区段数量为0且存在停车起始周期,说明是通信车停下后通信中断的场景,此时需要维持已设置的停车周期,故返回1*/ + } + else + { + cRetVal = CI_ERROR; /*非通信车占用发生变化,返回0*/ + } + } + } + else + { + /*占用不连续,此时可能计轴系统故障,保持之前计时*/ + } + } + else + { + /*无区段占用,返回1*/ + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:检查ECS物理区段非通信车占用是否连续 +* 参数说明:const UINT16 wEcsId ECS ID +* UINT8 cPhySecNum 占用的物理区段数量 +* UINT16 pCurOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] 占用的物理区段ID数组 +* 返 回 值:0 占用不连续 +* 1 占用连续 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccContinusCheck(const UINT16 wEcsId, UINT8 cPhySecNum, UINT16 pCurOccPhySecId[ECS_REL_PHYSEC_MAX_NUM]) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cEcsIncPhySecNum = 0U; /*ECS包含的物理区段数量*/ + UINT16* pEcsIncPhySecId = NULL; /*ECS包含的物理区段ID数组*/ + UINT8 ii = 0U; + UINT8 jj = 0U; + UINT8 cTempIndex = 0U; + UINT8 cCompareStartFlag = CI_ERROR; /*比对开始标志*/ + UINT8 cKeepWorkFlag = CI_ERROR; /*循环标志*/ + + cEcsIncPhySecNum = GetEcsRelPhySecNum(wEcsId); /*获取ECS关联的物理区段信息*/ + pEcsIncPhySecId = GetEcsRelPhySecId(wEcsId); + if ((0U != cEcsIncPhySecNum) && (NULL != pEcsIncPhySecId) && (ECS_REL_PHYSEC_MAX_NUM >= cPhySecNum) && (0U < cPhySecNum) && (NULL != pCurOccPhySecId)) + { + cRetVal = CI_SUCCESS; + cKeepWorkFlag = CI_SUCCESS; + /*正向遍历,查看占用的物理区段是否连续*/ + for (ii = 0U; ii < cPhySecNum; ii++) + { + for (jj = cTempIndex; jj < cEcsIncPhySecNum; jj++) + { + if (pCurOccPhySecId[ii] == pEcsIncPhySecId[jj]) + { + cTempIndex = jj + 1U; /*缓存隧道下一个物理区段的索引位置,用于和下一个占用的物理区段进行比对*/ + cCompareStartFlag = CI_SUCCESS; /*该标志置1,表示已经开始比对,若后面比对不一致,则表示不连续*/ + cKeepWorkFlag = CI_ERROR; /*停止遍历*/ + } + else + { + if (CI_SUCCESS == cCompareStartFlag) + { + cRetVal = CI_ERROR; /*比对不一致,返回0*/ + cKeepWorkFlag = CI_ERROR; /*停止遍历*/ + } + else + { + /*继续遍历比较*/ + } + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历比较*/ + } + } + + if ((cEcsIncPhySecNum == jj)) + { + cRetVal = CI_ERROR; /*本次循环未进行比较,说明比较的方向错误,先置0,后边再进行反向比较*/ + break; + } + else + { + /*继续遍历比较*/ + } + } + + if (CI_SUCCESS != cRetVal) + { + /*正向遍历比对失败,再反向遍历,查看占用的物理区段是否连续*/ + cRetVal = CI_SUCCESS; + cKeepWorkFlag = CI_SUCCESS; + cCompareStartFlag = CI_ERROR; + cTempIndex = 0U; + for (ii = cPhySecNum; ii > 0U; ii--) + { + for (jj = cTempIndex; jj < cEcsIncPhySecNum; jj++) + { + if (pCurOccPhySecId[ii - 1U] == pEcsIncPhySecId[jj]) + { + cTempIndex = jj + 1U; /*缓存隧道下一个物理区段的索引位置,用于和下一个占用的物理区段进行比对*/ + cCompareStartFlag = CI_SUCCESS; /*该标志置1,表示已经开始比对,若后面比对不一致,则表示不连续*/ + cKeepWorkFlag = CI_ERROR; /*停止遍历*/ + } + else + { + if (CI_SUCCESS == cCompareStartFlag) + { + cRetVal = CI_ERROR; /*比对不一致,返回0*/ + cKeepWorkFlag = CI_ERROR; /*停止遍历*/ + } + else + { + /*继续遍历比较*/ + } + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历比较*/ + } + } + + if ((cEcsIncPhySecNum == jj)) + { + cRetVal = CI_ERROR; /*占用不连续,返回0*/ + break; + } + else + { + /*继续遍历比较*/ + } + } + } + else + { + /*区段顺序占用,返回1*/ + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:检查ECS外方物理区段占用状态是否变化 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 变化 +* 1 未变化 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsOutPhySecOccChangeCheck(const UINT16 wEcsId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cEcsIncPhySecNum = 0U; /*ECS包含的物理区段数量*/ + UINT16* pEcsIncPhySecId = NULL; /*ECS包含的物理区段ID数组*/ + UINT8 ii = 0U; + UINT8 cPhySecMerOccState = 0U; /*物理区段融合占用状态*/ + UINT16 wEcsCurPhySecId = 0U; /*ECS起点/终点所在物理区段ID*/ + UINT16 wEcsNextPhySecId = 0U; /*ECS起点/终点的下一个物理区段ID*/ + UINT16 wLockedRouteId = 0U; /*ECS起点/终点所在物理区段的锁闭进路ID*/ + UINT16 wEcsEnterPhySecId = 0U; /*驶入ECS前的隧道外方物理区段ID*/ + UINT16 wEcsGoOutPhySecId = 0U; /*驶出ECS后的隧道外方物理区段ID*/ + UINT8 cFuncRet = CI_ERROR; + UINT32 dwMerOccStartCycNum = 0U; /*物理区段融合占用起始周期*/ + UINT32 dwMerIdleStartCycNum = 0U; /*物理区段融合空闲起始周期*/ + UINT32 dwCurCycNum = 0U; + + dwCurCycNum = Get2oo2CurCycleNum(); + cEcsIncPhySecNum = GetEcsRelPhySecNum(wEcsId); /*获取ECS关联的物理区段信息*/ + pEcsIncPhySecId = GetEcsRelPhySecId(wEcsId); + if ((0U != cEcsIncPhySecNum) && (NULL != pEcsIncPhySecId)) + { + cRetVal = CI_SUCCESS; + if(cEcsIncPhySecNum > 1U) + { + /*处理隧道覆盖了多个物理区段的场景*/ + cPhySecMerOccState = GetPhySecCurMergeState(pEcsIncPhySecId[0]); /*获取隧道第一个入口所在物理区段的融合占用状态*/ + if (SECTION_OCCUPY_NO != cPhySecMerOccState) + { + /*隧道第一个入口所在物理区段占用,检查隧道第一个入口外方区段的占用状态*/ + wEcsCurPhySecId = pEcsIncPhySecId[0]; + wEcsNextPhySecId = pEcsIncPhySecId[1]; + + /*获取隧道第一个入口所在物理区段包含的逻辑区段的锁闭进路ID(需要使用逻辑区段的锁闭进路,因为部分进路时物理区段可能未锁闭)*/ + wLockedRouteId = GetPhySecOccLgcLockRoute(wEcsCurPhySecId); + + /*获取隧道第一个入口所在物理区段外方的物理区段ID(由于隧道无方向,故需要通过锁闭的进路来确定隧道外方的区段是驶入隧道的区段还是驶出隧道的区段(函数传出的非0区段即为对应属性的区段))*/ + cFuncRet = GetMultipleSecEcsOutPhySec(wLockedRouteId, wEcsCurPhySecId, wEcsNextPhySecId, &wEcsEnterPhySecId, &wEcsGoOutPhySecId); + + dwMerOccStartCycNum = GetSecMergeOccupyStartCycNum(wEcsGoOutPhySecId); /*获取驶出隧道后的第一个物理区段的融合占用起始周期*/ + dwMerIdleStartCycNum = GetPhySecMerIdleStartCycNum(wEcsEnterPhySecId); /*获取驶入隧道前的第一个物理区段的融合空闲起始周期*/ + + if ((CI_SUCCESS == cFuncRet) && ((dwCurCycNum == dwMerOccStartCycNum) || (dwCurCycNum == dwMerIdleStartCycNum))) + { + cRetVal = CI_ERROR; /*隧道第一个入口外方区段占用状态发生变化,返回0*/ + } + else + { + /*隧道第一个入外方区段占用状态未变化,检查隧道另外一个入口的外方区段占用状态*/ + } + } + else + { + /*区段空闲,不处理*/ + } + + if (CI_ERROR == cRetVal) + { + /*已检查出隧道第一个入口外方区段占用状态变化,返回0*/ + } + else + { + cPhySecMerOccState = GetPhySecCurMergeState(pEcsIncPhySecId[cEcsIncPhySecNum]); /*获取隧道第二个入口所在物理区段的融合占用状态*/ + if (SECTION_OCCUPY_NO != cPhySecMerOccState) + { + /*隧道第二个入口所在物理区段占用,检查隧道第二个入口外方区段的占用状态*/ + wEcsCurPhySecId = pEcsIncPhySecId[cEcsIncPhySecNum - 1U]; + wEcsNextPhySecId = pEcsIncPhySecId[cEcsIncPhySecNum - 2U]; + + /*获取隧道第二个入口所在物理区段包含的逻辑区段的锁闭进路ID(需要使用逻辑区段的锁闭进路,因为部分进路时物理区段可能未锁闭)*/ + wLockedRouteId = GetPhySecOccLgcLockRoute(wEcsCurPhySecId); + + /*获取隧道第二个入口所在物理区段外方的物理区段ID(由于隧道无方向,故需要通过锁闭的进路来确定隧道外方的区段是驶入隧道的区段还是驶出隧道的区段(函数传出的非0区段即为对应属性的区段))*/ + cFuncRet = GetMultipleSecEcsOutPhySec(wLockedRouteId, wEcsCurPhySecId, wEcsNextPhySecId, &wEcsEnterPhySecId, &wEcsGoOutPhySecId); + + dwMerOccStartCycNum = GetSecMergeOccupyStartCycNum(wEcsGoOutPhySecId); /*获取驶出隧道后的第一个物理区段融合占用起始周期*/ + dwMerIdleStartCycNum = GetPhySecMerIdleStartCycNum(wEcsEnterPhySecId); /*获取驶入隧道前的第一个物理区段融合空闲起始周期*/ + + if ((CI_SUCCESS == cFuncRet) && ((dwCurCycNum == dwMerOccStartCycNum) || (dwCurCycNum == dwMerIdleStartCycNum))) + { + cRetVal = CI_ERROR; /*隧道第二个入口外方区段占用状态发生变化,返回0*/ + } + else + { + /*隧道第二个入外方区段占用状态未变化,返回1*/ + } + } + else + { + /*区段空闲,不处理,返回1*/ + } + } + } + else + { + /*隧道仅覆盖一个物理区段的场景*/ + cPhySecMerOccState = GetPhySecCurMergeState(pEcsIncPhySecId[0]); + if (SECTION_OCCUPY_NO != cPhySecMerOccState) + { + /*隧道物理区段占用,检查隧道入口和出口外方区段的占用状态*/ + wEcsCurPhySecId = pEcsIncPhySecId[0]; + + /*获取隧道物理区段包含的逻辑区段的锁闭进路ID(需要使用逻辑区段的锁闭进路,因为部分进路时物理区段可能未锁闭)*/ + wLockedRouteId = GetPhySecOccLgcLockRoute(wEcsCurPhySecId); + + /*获取隧道入口/出口外方的物理区段ID(由于隧道无方向,故需要通过锁闭的进路来确定隧道外方的区段是驶入隧道的区段还是驶出隧道的区段(函数传出的非0区段即为对应属性的区段))*/ + cFuncRet = GetSingleSecEcsOutPhySec(wLockedRouteId, wEcsCurPhySecId, &wEcsEnterPhySecId, &wEcsGoOutPhySecId); + + dwMerOccStartCycNum = GetSecMergeOccupyStartCycNum(wEcsGoOutPhySecId); /*获取驶出隧道后的第一个物理区段融合占用起始周期*/ + dwMerIdleStartCycNum = GetPhySecMerIdleStartCycNum(wEcsEnterPhySecId); /*获取驶入隧道前的第一个物理区段融合空闲起始周期*/ + + if ((CI_SUCCESS == cFuncRet) && ((dwCurCycNum == dwMerOccStartCycNum) || (dwCurCycNum == dwMerIdleStartCycNum))) + { + cRetVal = CI_ERROR; /*隧道入口/出口外方区段占用状态发生变化,返回0*/ + } + else + { + /*隧道入口/出口外方区段占用状态未变化,返回1*/ + } + } + else + { + /*区段空闲,不处理*/ + } + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:获取覆盖多个物理区段的ECS外方物理区段ID +* 参数说明:const UINT16 wRouteId 进路ID +* const UINT16 wCurPhySecId ECS当前物理区段ID +* const UINT16 wNextPhySecId ECS下一物理区段ID +* UINT16* pEnterPhySecId 驶入ECS隧道的外方物理区段ID(出参) +* UINT16* pGoOutPhySecId 驶出ECS隧道的外方物理区段ID(出参) +* 返 回 值:0 获取失败 +* 1 获取成功 +* Created By LQ 2026.01.26 +*/ +UINT8 GetMultipleSecEcsOutPhySec(const UINT16 wRouteId, const UINT16 wCurPhySecId, const UINT16 wNextPhySecId, UINT16* pEnterPhySecId, UINT16* pGoOutPhySecId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 ii = 0U; + UINT16 wEcsEnterPhySecId = 0U; /*驶入ECS物理区段ID*/ + UINT16 wEcsGoOutPhySecId = 0U; /*驶出ECS物理区段ID*/ + UINT8 cRouteIncPhySecNum = 0U; /*进路包含的物理区段数量*/ + RoutePhysicalSectionStruct* pstrRouteSectionData = NULL; /*进路包含的物理区段信息*/ + UINT16 wStartSignalId = 0U; /*进路始端信号机ID*/ + UINT16 wSignalOutFstPhySecId = 0U; /*信号机外方第一物理区段ID*/ + UINT16 wEndSignalId = 0U; /*进路终端信号机ID*/ + UINT16 wSignalInFstPhySecId = 0U; /*信号机内方第一物理区段ID*/ + + cRouteIncPhySecNum = GetRoutePhysicalSectionSum(wRouteId); /*获取进路包含的物理区段信息*/ + pstrRouteSectionData = GetRouteSectionData(wRouteId); + if ((0U != cRouteIncPhySecNum) && (NULL != pstrRouteSectionData) && (0U != wCurPhySecId) && (0U != wNextPhySecId) && (NULL != pEnterPhySecId) && (NULL != pGoOutPhySecId)) + { + cRetVal = CI_SUCCESS; + + for (ii = 0U; ii < cRouteIncPhySecNum; ii++) + { + if (wCurPhySecId == pstrRouteSectionData[ii].PhysicalSectionId) + { + break; + } + else + { + /*继续遍历*/ + } + } + + wStartSignalId = GetRouteStartSignalId(wRouteId); /*获取进路始端信号机ID*/ + wSignalOutFstPhySecId = GetSignalOutFirstPhySecId(wStartSignalId); /*获取进路始端信号机外方第一物理区段ID*/ + wEndSignalId = GetRouteEndSignalId(wRouteId); /*获取进路终端信号机ID*/ + wSignalInFstPhySecId = GetSignalInFirstPhySecId(wEndSignalId, wRouteId); /*获取进路终端信号机内方第一物理区段ID*/ + if (1U < cRouteIncPhySecNum) + { + if (0U == ii) + { + if (wNextPhySecId == pstrRouteSectionData[ii + 1].PhysicalSectionId) + { + /*隧道的下一个区段是进路的下一个区段,则驶入隧道前的外方区段是进路始端信号机的外方第一区段*/ + wEcsEnterPhySecId = wSignalOutFstPhySecId; + } + else if (wNextPhySecId == wSignalOutFstPhySecId) + { + /*隧道的下一个区段是进路始端信号机的外方第一区段,则驶出隧道后的外方区段是进路下一个区段*/ + wEcsGoOutPhySecId = pstrRouteSectionData[ii + 1].PhysicalSectionId; + } + else + { + /*无区段*/ + } + } + else if ((cRouteIncPhySecNum - 1U) == ii) + { + if (wNextPhySecId == pstrRouteSectionData[ii - 1].PhysicalSectionId) + { + /*隧道的下一个区段是进路的上一个区段,则驶出隧道后的外方区段是进路终端信号机的内方第一区段*/ + wEcsGoOutPhySecId = wSignalInFstPhySecId; + } + else if (wNextPhySecId == wSignalInFstPhySecId) + { + /*隧道的下一个区段是进路终端信号机的内方第一区段,则驶入隧道前的外方区段是进路上一个区段*/ + wEcsEnterPhySecId = pstrRouteSectionData[ii - 1].PhysicalSectionId; + } + else + { + /*无区段*/ + } + } + else + { + if (wNextPhySecId == pstrRouteSectionData[ii + 1].PhysicalSectionId) + { + /*隧道的下一个区段是进路的下一个区段,则驶入隧道前的外方区段是进路的上一区段*/ + wEcsEnterPhySecId = pstrRouteSectionData[ii - 1].PhysicalSectionId; + } + else if (wNextPhySecId == pstrRouteSectionData[ii - 1].PhysicalSectionId) + { + /*隧道的下一个区段是进路的上一区段,则驶出隧道后的外方区段是进路下一个区段*/ + wEcsGoOutPhySecId = pstrRouteSectionData[ii + 1].PhysicalSectionId; + } + else + { + /*无区段*/ + } + } + } + else + { + if (wNextPhySecId == wSignalInFstPhySecId) + { + /*隧道的下一个区段是进路终端信号机的内方第一区段,则驶入隧道前的外方区段是进路始端信号机的外方第一区段*/ + wEcsEnterPhySecId = wSignalOutFstPhySecId; + } + else if (wNextPhySecId == wSignalOutFstPhySecId) + { + /*隧道的下一个区段是进路始端信号机的外方第一区段,则驶出隧道后的外方区段是进路终端信号机的内方第一区段*/ + wEcsGoOutPhySecId = wSignalInFstPhySecId; + } + else + { + /*无区段*/ + } + } + + /*传出隧道外方的物理区段*/ + *pEnterPhySecId = wEcsEnterPhySecId; + *pGoOutPhySecId = wEcsGoOutPhySecId; + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:获取仅覆盖一个物理区段的ECS外方物理区段ID +* 参数说明:const UINT16 wRouteId 进路ID +* const UINT16 wCurPhySecId ECS当前物理区段ID +* UINT16* pEnterPhySecId 驶入ECS隧道的外方物理区段ID(出参) +* UINT16* pGoOutPhySecId 驶出ECS隧道的外方物理区段ID(出参) +* 返 回 值:0 获取失败 +* 1 获取成功 +* Created By LQ 2026.01.27 +*/ +UINT8 GetSingleSecEcsOutPhySec(const UINT16 wRouteId, const UINT16 wCurPhySecId, UINT16* pEnterPhySecId, UINT16* pGoOutPhySecId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 ii = 0U; + UINT16 wEcsEnterPhySecId = 0U; /*驶入ECS物理区段ID*/ + UINT16 wEcsGoOutPhySecId = 0U; /*驶出ECS物理区段ID*/ + UINT8 cRouteIncPhySecNum = 0U; /*进路包含的物理区段数量*/ + RoutePhysicalSectionStruct* pstrRouteSectionData = NULL; /*进路包含的物理区段信息*/ + UINT16 wStartSignalId = 0U; /*进路始端信号机ID*/ + UINT16 wSignalOutFstPhySecId = 0U; /*信号机外方第一物理区段ID*/ + UINT16 wEndSignalId = 0U; /*进路终端信号机ID*/ + UINT16 wSignalInFstPhySecId = 0U; /*信号机内方第一物理区段ID*/ + + cRouteIncPhySecNum = GetRoutePhysicalSectionSum(wRouteId); /*获取进路包含的物理区段信息*/ + pstrRouteSectionData = GetRouteSectionData(wRouteId); + if ((0U != cRouteIncPhySecNum) && (NULL != pstrRouteSectionData) && (0U != wCurPhySecId) && (NULL != pEnterPhySecId) && (NULL != pGoOutPhySecId)) + { + cRetVal = CI_SUCCESS; + + for (ii = 0U; ii < cRouteIncPhySecNum; ii++) + { + if (wCurPhySecId == pstrRouteSectionData[ii].PhysicalSectionId) + { + break; + } + else + { + /*继续遍历*/ + } + } + + wStartSignalId = GetRouteStartSignalId(wRouteId); /*获取进路始端信号机ID*/ + wSignalOutFstPhySecId = GetSignalOutFirstPhySecId(wStartSignalId); /*获取进路始端信号机外方第一物理区段ID*/ + wEndSignalId = GetRouteEndSignalId(wRouteId); /*获取进路终端信号机ID*/ + wSignalInFstPhySecId = GetSignalInFirstPhySecId(wEndSignalId, wRouteId); /*获取进路终端信号机内方第一物理区段ID*/ + if (1U < cRouteIncPhySecNum) + { + if (0U == ii) + { + wEcsEnterPhySecId = wSignalOutFstPhySecId; /*隧道区段是进路内方第一个区段,则驶入隧道前的外方区段是进路始端信号机的外方第一区段*/ + wEcsGoOutPhySecId = pstrRouteSectionData[ii + 1].PhysicalSectionId; /*隧道区段是进路内方第一个区段,则驶出隧道后的外方区段是进路下一个区段*/ + } + else if ((cRouteIncPhySecNum - 1U) == ii) + { + wEcsGoOutPhySecId = wSignalInFstPhySecId; /*隧道区段是进路内方最后一个区段,则驶出隧道后的外方区段是进路终端信号机的内方第一区段*/ + wEcsEnterPhySecId = pstrRouteSectionData[ii - 1].PhysicalSectionId; /*隧道区段是进路内方最后一个区段,则驶入隧道前的外方区段是进路上一个区段*/ + } + else if (cRouteIncPhySecNum != ii) + { + wEcsEnterPhySecId = pstrRouteSectionData[ii - 1].PhysicalSectionId; /*隧道区段是进路内方中间区段,则驶入隧道前的外方区段是进路的上一区段*/ + wEcsGoOutPhySecId = pstrRouteSectionData[ii + 1].PhysicalSectionId; /*隧道区段是进路内方中间区段,则驶出隧道后的外方区段是进路下一个区段*/ + } + else + { + /*异常分支,区段ID返回0*/ + } + } + else + { + wEcsEnterPhySecId = wSignalOutFstPhySecId;/*驶入隧道的进路仅包含一个区段,则驶入隧道前的外方区段是进路始端信号机的外方第一区段*/ + wEcsGoOutPhySecId = wSignalInFstPhySecId;/*驶入隧道的进路仅包含一个区段,则驶出隧道后的外方区段是进路终端信号机的内方第一区段*/ + } + + /*传出隧道外方的物理区段*/ + *pEnterPhySecId = wEcsEnterPhySecId; + *pGoOutPhySecId = wEcsGoOutPhySecId; + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述:更新ECS隧道拥堵状态 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void UpdateEcsJamState(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + UINT32 dwTrainStopStartCycNum = 0U; /*列车停车起始周期*/ + UINT32 dwTrainStartOverCycCount = 0U; /*列车停车超时周期数*/ + UINT8 cTimeCheck = 0U; + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + dwTrainStopStartCycNum = GetEcsTrainStopStartCycNum(wEcsId); /*获取列车停车起始周期*/ + dwTrainStartOverCycCount = GetEcsTrainStopTimeCount(); /*获取停车超时周期号*/ + cTimeCheck = SystemOverTimeCheck(dwTrainStopStartCycNum, dwTrainStartOverCycCount); + + if (CI_TIME_OUT == cTimeCheck) + { + /*超时,设置拥堵*/ + SetEcsJamState(wEcsId, ECS_JAM_YES); + } + else + { + /*未超时,设置不拥堵*/ + SetEcsJamState(wEcsId, ECS_JAM_NO); + } + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:ECS风机继电器驱动处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsFanRelayDriveProc(const UINT16 wEcsId) +{ + UINT16 wBufIndex = 0U; + UINT8 cEcsJamState = 0U; + UINT16 wFanUpRelayId = 0U; /*风向为逻辑正方向的继电器ID*/ + UINT16 wFanDownRelayId = 0U; /*风向为逻辑反方向的继电器ID*/ + UINT8 cOccPhySecNum = 0U; /*占用的物理区段数量*/ + UINT16 szOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] = { 0U }; /*占用的物理区段ID数组*/ + UINT8 ii = 0U; + UINT16 wLockedRouteId = 0U; /*锁闭进路ID*/ + UINT8 cRouteDir = 0U; /*进路方向*/ + UINT8 cLogicDir = 0U; /*进路逻辑方向*/ + + wBufIndex = GetEcsConfigBufIndex(wEcsId); /*获取ECS数组下标*/ + + if (ECS_MAX_NUM > wBufIndex) + { + wFanUpRelayId = GetEcsRelFanUpRelayId(wEcsId); /*获取控制风机方向的继电器ID*/ + wFanDownRelayId = GetEcsRelFanDownRelayId(wEcsId); + + cEcsJamState = GetEcsJamState(wEcsId); /*获取隧道拥堵状态*/ + if (ECS_JAM_NO != cEcsJamState) + { + cOccPhySecNum = GetEcsCurOccPhySecInfo(wEcsId, szOccPhySecId); /*获取隧道内占用的物理区段信息*/ + for (ii = 0U; ii < cOccPhySecNum; ii++) + { + wLockedRouteId = GetPhySecOccLgcLockRoute(szOccPhySecId[ii]); /*获取占用区段的锁闭所属进路*/ + if (0U != wLockedRouteId) + { + cRouteDir = GetRouteDirection(wLockedRouteId); /*获取进路方向(逻辑方向)*/ + cLogicDir = ConvertDirectionToLogic(cRouteDir); + if (EMAP_SAME_DIR == cLogicDir) + { + (void)SetRelayDriveState(wFanUpRelayId, RELAY_DRIVE_STATE_UP); /*进路方向为逻辑正方向,驱动逻辑正方向的风机继电器吸起*/ + (void)SetRelayDriveState(wFanDownRelayId, RELAY_DRIVE_STATE_DOWN); + } + else if (EMAP_CONVER_DIR == cLogicDir) + { + (void)SetRelayDriveState(wFanUpRelayId, RELAY_DRIVE_STATE_DOWN); + (void)SetRelayDriveState(wFanDownRelayId, RELAY_DRIVE_STATE_UP); /*进路方向为逻辑反方向,驱动逻辑反方向的风机继电器吸起*/ + } + else + { + (void)SetRelayDriveState(wFanUpRelayId, RELAY_DRIVE_STATE_DOWN); /*异常场景,驱落下*/ + (void)SetRelayDriveState(wFanDownRelayId, RELAY_DRIVE_STATE_DOWN); + } + + break; /*找到占用且锁闭的区段,停止遍历*/ + } + else + { + /*当前区段未锁闭,继续找占用且锁闭的区段*/ + } + } + } + else + { + (void)SetRelayDriveState(wFanUpRelayId, RELAY_DRIVE_STATE_DOWN); /*不拥堵,驱落下*/ + (void)SetRelayDriveState(wFanDownRelayId, RELAY_DRIVE_STATE_DOWN); + } + } + else + { + /*异常分支,不处理*/ + } +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ECS/ECSDataManage.h b/TSCP/src/APP/ciapp/ECS/ECSDataManage.h new file mode 100644 index 0000000..3eb589a --- /dev/null +++ b/TSCP/src/APP/ciapp/ECS/ECSDataManage.h @@ -0,0 +1,293 @@ +/******************************************************** +* +* 文 件 名: ECSDataManage.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2026.01.24 +* 作 者: 联锁组 +* 功能描述: 环境控制系统动态数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _ECS_DATA_MANAGE_H_ +#define _ECS_DATA_MANAGE_H_ + +#include "ECSDefine.h" +#include "ECSConfigDataManage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*环境控制系统动态数据结构体*/ +typedef struct S_ECSDataStruct +{ + UINT16 wEcsId; /*ECS/隧道 ID*/ + UINT8 cAutoTrigState; /*ECS自动触发状态:0x55-启用,0xAA-停用*/ + UINT16 wRelTrainId; /*隧道关联列车ID*/ + UINT32 dwTrainStopStartCycNum; /*关联列车停车起始周期号*/ + UINT32 dwTrainMoveStartCycNum; /*关联列车移动起始周期号(通信车使用)*/ + UINT8 cJamState; /*隧道拥堵状态:0x55-拥堵,0xAA-不拥堵*/ + UINT8 cOccPhySecNum; /*隧道内占用的物理区段数量*/ + UINT16 szOccPhySecId[ECS_REL_PHYSEC_MAX_NUM]; /*隧道内占用的物理区段ID数组*/ +}ECSDataStruct; + +extern ECSDataStruct ECSDataStru[ECS_MAX_NUM]; /*环境控制系统动态数据结构体*/ + +/* +* 功能描述:获取ECS动态数据结构体 +* 参数说明: +* 返 回 值:ECS动态数据结构体 +* Created By LQ 2026.01.24 +*/ +ECSDataStruct* GetEcsData(void); + +/* +* 功能描述:设置指定ID ECS自动触发状态 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT8 cState 自动触发状态 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsAutoTrigState(const UINT16 wEcsId, const UINT8 cState); + +/* +* 功能描述:获取指定ID ECS自动触发状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 获取数据失败 +* 0x55 启用 +* 0xAA 停用 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsAutoTrigState(const UINT16 wEcsId); + +/* +* 功能描述:设置指定ID ECS关联列车ID +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT16 wTrainId 列车ID +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsRelTrainId(const UINT16 wEcsId, const UINT16 wTrainId); + +/* +* 功能描述:获取指定ID ECS关联列车ID +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车ID +* Created By LQ 2026.01.24 +*/ +UINT16 GetEcsRelTrainId(const UINT16 wEcsId); + +/* +* 功能描述:设置ECS关联列车停车起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsTrainStopStartCycNum(const UINT16 wEcsId, const UINT32 dwCycNum); + +/* +* 功能描述:获取ECS关联列车停车起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车停车起始周期 +* Created By LQ 2026.01.24 +*/ +UINT32 GetEcsTrainStopStartCycNum(const UINT16 wEcsId); + +/* +* 功能描述:设置ECS关联列车移动起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsTrainMoveStartCycNum(const UINT16 wEcsId, const UINT32 dwCycNum); + +/* +* 功能描述:获取ECS关联列车移动起始周期 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:ECS关联列车停车移动周期 +* Created By LQ 2026.01.24 +*/ +UINT32 GetEcsTrainMoveStartCycNum(const UINT16 wEcsId); + +/* +* 功能描述:设置指定ID ECS拥堵状态 +* 参数说明:const UINT16 wEcsId ECS ID +* const UINT8 cState 拥堵状态 +* 返 回 值:无 +* Created By LQ 2026.01.24 +*/ +void SetEcsJamState(const UINT16 wEcsId, const UINT8 cState); + +/* +* 功能描述:获取指定ID ECS拥堵状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 获取数据失败 +* 0x55 拥堵 +* 0xAA 不拥堵 +* Created By LQ 2026.01.24 +*/ +UINT8 GetEcsJamState(const UINT16 wEcsId); + +/* +* 功能描述:更新指定ID ECS当前占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* UINT16 pOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] 当前占用的物理区段ID(出参) +* 返 回 值:当前占用的物理区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetEcsCurOccPhySecInfo(const UINT16 wEcsId, UINT16 pOccPhySecId[ECS_REL_PHYSEC_MAX_NUM]); + +/* +* 功能描述:清除指定ID ECS占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.25 +*/ +void ClearEcsOccPhySecInfo(const UINT16 wEcsId); + +/* +* 功能描述:更新指定ID ECS占用的物理区段信息 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.25 +*/ +void UpdateEcsOccPhySecInfo(const UINT16 wEcsId); + +/* +* 功能描述:获取指定ID ECS占用的物理区段数量 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:占用的物理区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetEcsOccPhySecNum(const UINT16 wEcsId); + +/* +* 功能描述:获取指定ID ECS占用的物理区段ID +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:NULL 获取数据失败 +* 非NULL 占用的物理区段ID +* Created By LQ 2026.01.25 +*/ +UINT16* GetEcsOccPhySecId(const UINT16 wEcsId); + +/* +* 功能描述:清除指定ID ECS的动态数据 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void ClearEcsDymData(const UINT16 wEcsId); + +/* +* 功能描述:更新ECS关联列车 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void UpdateEcsRelTrain(const UINT16 wEcsId); + +/* +* 功能描述:按照通信车监督ECS隧道内列车停车状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void MonitorEcsTrainByCommTrain(const UINT16 wEcsId); + +/* +* 功能描述:按照非通信车监督ECS隧道内列车停车状态 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void MonitorEcsTrainByBadTrain(const UINT16 wEcsId); + +/* +* 功能描述:检查ECS物理区段是否全为非通信车占用 +* 参数说明:const UINT16 wEcsId +* 返 回 值:0 全为UT占用 +* 1 空闲或存在CT占用 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccCheck(const UINT16 wEcsId); + +/* +* 功能描述:检查ECS物理区段非通信车占用状态是否发生变化 +* 参数说明:const UINT16 wEcsId +* 返 回 值:0 变化 +* 1 未变化 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccChangeCheck(const UINT16 wEcsId); + +/* +* 功能描述:检查ECS物理区段非通信车占用是否连续 +* 参数说明:const UINT16 wEcsId ECS ID +* UINT8 cPhySecNum 占用的物理区段数量 +* UINT16 pCurOccPhySecId[ECS_REL_PHYSEC_MAX_NUM] 占用的物理区段ID数组 +* 返 回 值:0 占用不连续 +* 1 占用连续 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsPhySecUTOccContinusCheck(const UINT16 wEcsId, UINT8 cPhySecNum, UINT16 pCurOccPhySecId[ECS_REL_PHYSEC_MAX_NUM]); + +/* +* 功能描述:检查ECS外方物理区段占用状态是否变化 +* 参数说明:const UINT16 wEcsId ECS ID +* 返 回 值:0 变化 +* 1 未变化 +* Created By LQ 2026.01.26 +*/ +UINT8 EcsOutPhySecOccChangeCheck(const UINT16 wEcsId); + +/* +* 功能描述:获取覆盖多个物理区段的ECS外方物理区段ID +* 参数说明:const UINT16 wRouteId 进路ID +* const UINT16 wCurPhySecId ECS当前物理区段ID +* const UINT16 wNextPhySecId ECS下一物理区段ID +* UINT16* pEnterPhySecId 驶入ECS隧道的外方物理区段ID(出参) +* UINT16* pGoOutPhySecId 驶出ECS隧道的外方物理区段ID(出参) +* 返 回 值:0 获取失败 +* 1 获取成功 +* Created By LQ 2026.01.26 +*/ +UINT8 GetMultipleSecEcsOutPhySec(const UINT16 wRouteId, const UINT16 wCurPhySecId, const UINT16 wNextPhySecId, UINT16* pEnterPhySecId, UINT16* pGoOutPhySecId); + +/* +* 功能描述:获取仅覆盖一个物理区段的ECS外方物理区段ID +* 参数说明:const UINT16 wRouteId 进路ID +* const UINT16 wCurPhySecId ECS当前物理区段ID +* UINT16* pEnterPhySecId 驶入ECS隧道的外方物理区段ID(出参) +* UINT16* pGoOutPhySecId 驶出ECS隧道的外方物理区段ID(出参) +* 返 回 值:0 获取失败 +* 1 获取成功 +* Created By LQ 2026.01.27 +*/ +UINT8 GetSingleSecEcsOutPhySec(const UINT16 wRouteId, const UINT16 wCurPhySecId, UINT16* pEnterPhySecId, UINT16* pGoOutPhySecId); + +/* +* 功能描述:更新ECS隧道拥堵状态 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void UpdateEcsJamState(const UINT16 wEcsId); + +/* +* 功能描述:ECS风机继电器驱动处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsFanRelayDriveProc(const UINT16 wEcsId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ECS/ECSDefine.h b/TSCP/src/APP/ciapp/ECS/ECSDefine.h new file mode 100644 index 0000000..0131bc8 --- /dev/null +++ b/TSCP/src/APP/ciapp/ECS/ECSDefine.h @@ -0,0 +1,31 @@ +/******************************************************** +* +* 文 件 名: ECSDefine.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2024.01.24 +* 作 者: 联锁组 +* 功能描述: 环境控制系统相关常量定义 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _ECS_Define_H_ +#define _ECS_Define_H_ + +#define ECS_MAX_NUM (UINT16)3U /*ECS数量最大值*/ + +#define ECS_REL_PHYSEC_MAX_NUM (UINT8)20U /*隧道关联物理区段数量最大值*/ + +#define ECS_REL_LOGSEC_MAX_NUM (UINT8)80U /*隧道关联逻辑区段数量最大值*/ + +/*ECS自动触发状态*/ +#define ECS_AUTOTRIG_YES ((UINT8)0x55U) /*启用*/ +#define ECS_AUTOTRIG_NO ((UINT8)0xAAU) /*停用*/ + +/*ECS拥堵状态*/ +#define ECS_JAM_YES ((UINT8)0x55U) /*拥堵*/ +#define ECS_JAM_NO ((UINT8)0xAAU) /*不拥堵*/ + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.c b/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.c index 538b0d7..a853970 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.c +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.c @@ -94,23 +94,16 @@ void SetErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 D tempErrorDataIndex = ErrorDataCurSum; if (tempErrorDataIndex < ERROR_DATA_SUM_MAX) { - if (ETYPE_PS_FLOCK_SPKSCMD_STATE == DeviceStateType) - { - SetPhySecSpksCmdFlockErrorData(FunctionId, DeviceType, DeviceId, DeviceStateType, DeviceState, SendLevel); - } - else - { - /* 记录新数据 */ - ErrorDataStru[tempErrorDataIndex].FunctionId = FunctionId; - ErrorDataStru[tempErrorDataIndex].DeviceType = DeviceType; - ErrorDataStru[tempErrorDataIndex].DeviceId = DeviceId; - ErrorDataStru[tempErrorDataIndex].DeviceStateType = DeviceStateType; - ErrorDataStru[tempErrorDataIndex].DeviceState = DeviceState; - ErrorDataStru[tempErrorDataIndex].SendLevel = SendLevel; + /* 记录新数据 */ + ErrorDataStru[tempErrorDataIndex].FunctionId = FunctionId; + ErrorDataStru[tempErrorDataIndex].DeviceType = DeviceType; + ErrorDataStru[tempErrorDataIndex].DeviceId = DeviceId; + ErrorDataStru[tempErrorDataIndex].DeviceStateType = DeviceStateType; + ErrorDataStru[tempErrorDataIndex].DeviceState = DeviceState; + ErrorDataStru[tempErrorDataIndex].SendLevel = SendLevel; - /* 记录未满寻址指向新数据 */ - ErrorDataCurSum = (UINT16)(tempErrorDataIndex + 1u); - } + /* 记录未满寻址指向新数据 */ + ErrorDataCurSum = (UINT16)(tempErrorDataIndex + 1u); } else @@ -190,7 +183,7 @@ void SetErrorDataBelongVirCiId(const UINT16 preErrorNum, const UINT8 virCIid) } } - +#if 0 /* * 功能描述: 设置物理区段封锁类型为SPKS按下且命令封锁时的错误数据 * 参数说明: const UINT8 functionId, 函数ID @@ -246,6 +239,7 @@ void SetPhySecSpksCmdFlockErrorData(const UINT8 FunctionId, const UINT8 DeviceTy } } +#endif diff --git a/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.h b/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.h index aeb0954..5f275cb 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.h +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDataManage.h @@ -98,6 +98,7 @@ void DeleteErrorData(const UINT16 Index); * cgh-合并CID-2349-5: */ void SetErrorDataBelongVirCiId(const UINT16 preErrorNum, const UINT8 virCIid); +#if 0 /* * 功能描述: 设置物理区段封锁类型为SPKS按下且命令封锁时的错误数据 * 参数说明: const UINT8 functionId, 函数ID @@ -112,6 +113,7 @@ void SetErrorDataBelongVirCiId(const UINT16 preErrorNum, const UINT8 virCIid); void SetPhySecSpksCmdFlockErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 DeviceId, const UINT8 DeviceStateType, const UINT8 DeviceState, const UINT8 SendLevel); +#endif #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h index b687668..4a1b7f7 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h @@ -189,6 +189,13 @@ #define EFUNC_OpenLogRouteSignalProcess ((UINT8)0xC5) /*LogRouteSignalProcess开放逻辑进路信号条件检查*/ #define EFUNC_LOGROUTE_LOGIC_RES_APP_CHECK ((UINT8)0xC6) /*逻辑进路逻辑区段资源可用性检查*/ #define EFUNC_LogRoureUsingStateCheck ((UINT8)0xC7) /*LogRoutePhySecUseLogicProcess*/ +/*联络线相关报警函数*/ +#define EFUNC_ConnectOverrideSetProc ((UINT8)0xCA) /*ConnectOverrideSetProc*/ +#define EFUNC_ConnectSwitchAlarmProc ((UINT8)0xCB) /*LogSecConnectSwitchAlarmProc*/ +#define EFUNC_GetDisneyGJDriveState ((UINT8)0xCC) /*GetDisneyGJDriveState*/ +#define EFUNC_DsnConnectOtherCi ((UINT8)0xCD) /*DsnConnectOtherCiValidCheck*/ +#define EFUNC_LogSecDsnConnectCheck ((UINT8)0xCE) /*LogSecDsnConnectCheck*/ +#define EFUNC_RouteCbtcTiranEnterCheck ((UINT8)0xCF) /*RouteCbtcTiranEnterCheck*/ /*其他函数*/ #define EFUNC_LOGIC_MANAGE_SYETEM ((UINT8)0xF0) /* Logicmanage.c中导致宕机异常 */ #define EFUNC_CHECK_ROUTE_SEC_FLOCK ((UINT8)0xF1) /* RouteSecFlockVainCheck */ @@ -221,20 +228,23 @@ /* 故障类型*/ /* 进路故障类型编码 (UINT8)0x01-(UINT8)0x2f */ /* 设备类型 CI_DEVICE_TYPE_ROUTE */ -#define ETYPE_ROUTE_LEVEL ((UINT8)0x01) /*进路监督级别*/ -#define ETYPE_ROUTE_TYPE ((UINT8)0x02) /*进路类型*/ -#define ETYPE_ROUTE_STATE ((UINT8)0x03) /*进路状态*/ -#define ETYPE_ROUTE_LEAD_PROPERTY ((UINT8)0x04) /*进路引导*/ -#define ETYPE_ROUTE_CANCEL ((UINT8)0x05) /*进路取消*/ -#define ETYPE_ROUTE_OVERLAP_UNLOCK ((UINT8)0x06) /*Overlap未锁闭*/ -#define ETYPE_ROUTE_OVERLAP_OCCUPY ((UINT8)0x07) /*Overlap占用*/ -#define ETYPE_ROUTE_FLYING_TRAIN ((UINT8)0x08) /*进路飞车*/ -#define ETYPE_RETURN_ROUTE_STATE ((UINT8)0x09) /*折返进路状态*/ -#define ETYPE_ROUTE_FIRST_XUANPAI_OVERTIME ((UINT8)0x0a) /*进路初选排超时*/ -#define ETYPE_ROUTE_APPLY_SWITCH_CHECK ((UINT8)0x0b) /*进路办理道岔状态检查*/ -#define ETYPE_ROUTE_XUANPAI_OVERTIME ((UINT8)0x10) /*进路选排超时*/ -#define ETYPE_GROUP_AUTO_ROUTE_STATE ((UINT8)0x16) /*组合自动进路*/ -#define ETYPE_ROUTE_APPLY_SWITCH_MOVE ((UINT8)0xA4) /*进路道岔单操中*/ +#define ETYPE_ROUTE_LEVEL ((UINT8)0x01) /*进路监督级别*/ +#define ETYPE_ROUTE_TYPE ((UINT8)0x02) /*进路类型*/ +#define ETYPE_ROUTE_STATE ((UINT8)0x03) /*进路状态*/ +#define ETYPE_ROUTE_LEAD_PROPERTY ((UINT8)0x04) /*进路引导*/ +#define ETYPE_ROUTE_CANCEL ((UINT8)0x05) /*进路取消*/ +#define ETYPE_ROUTE_OVERLAP_UNLOCK ((UINT8)0x06) /*Overlap未锁闭*/ +#define ETYPE_ROUTE_OVERLAP_OCCUPY ((UINT8)0x07) /*Overlap占用*/ +#define ETYPE_ROUTE_FLYING_TRAIN ((UINT8)0x08) /*进路飞车*/ +#define ETYPE_RETURN_ROUTE_STATE ((UINT8)0x09) /*折返进路状态*/ +#define ETYPE_ROUTE_FIRST_XUANPAI_OVERTIME ((UINT8)0x0a) /*进路初选排超时*/ +#define ETYPE_ROUTE_APPLY_SWITCH_CHECK ((UINT8)0x0b) /*进路办理道岔状态检查*/ +#define ETYPE_ROUTE_XUANPAI_OVERTIME ((UINT8)0x10) /*进路选排超时*/ +#define ETYPE_GROUP_AUTO_ROUTE_STATE ((UINT8)0x16) /*组合自动进路*/ +#define ETYPE_ROUTE_CONNECT_OVERRIME ((UINT8)0x18) /*(联络线)进路办理超时*/ +#define ETYPE_ROUTE_APPLY_SWITCH_MOVE ((UINT8)0xA4) /*进路道岔单操中*/ +#define ETYPE_ROUTE_DSNCONNECT ((UINT8)0x19) /*迪士尼联络线联锁条件*/ +#define ETYPE_ROUTE_DSNCONNECT_CROSS ((UINT8)0x1A) /*迪士尼联络线跨压*/ #define ETYPE_COMM_WITH_VOBC ((UINT8)0x11) /*与VOBC通信*/ @@ -301,15 +311,17 @@ /* 道岔类型编码 (UINT8)0x61-(UINT8)0x7f */ /* 设备类型 CI_DEVICE_TYPE_SWITCH */ -#define ETYPE_SWT_YLOCK_STATE ((UINT8)0x61) /*道岔引导总锁状态*/ -#define ETYPE_SWT_FLOCK_STATE ((UINT8)0x62) /*道岔封锁状态*/ -#define ETYPE_SWT_LOCK_STATUS ((UINT8)0x63) /*道岔锁闭状态*/ -#define ETYPE_SWT_POSTION_STATE ((UINT8)0x64) /*道岔位置*/ -#define ETYPE_SWT_MOVE_INVALID ((UINT8)0x65) /*道岔不可动*/ -#define ETYPE_SWT_MOVE_OVERTIME ((UINT8)0x66) /*道岔动作锁闭超时*/ -#define ETYPE_SWT_USE_STATE ((UINT8)0x6aU) /*道岔征用*/ -#define ETYPE_SWT_MOVE_STATE ((UINT8)0x6bU) /*道岔搬动状态*/ -#define ETYPE_SWT_MOVE_CHECK_RESULT ((UINT8)0x6cU) /*道岔可动性检查结果*/ +#define ETYPE_SWT_YLOCK_STATE ((UINT8)0x61) /*道岔引导总锁状态*/ +#define ETYPE_SWT_FLOCK_STATE ((UINT8)0x62) /*道岔封锁状态*/ +#define ETYPE_SWT_LOCK_STATUS ((UINT8)0x63) /*道岔锁闭状态*/ +#define ETYPE_SWT_POSTION_STATE ((UINT8)0x64) /*道岔位置*/ +#define ETYPE_SWT_MOVE_INVALID ((UINT8)0x65) /*道岔不可动*/ +#define ETYPE_SWT_MOVE_OVERTIME ((UINT8)0x66) /*道岔动作锁闭超时*/ +#define ETYPE_SWT_USE_STATE ((UINT8)0x6aU) /*道岔征用*/ +#define ETYPE_SWT_MOVE_STATE ((UINT8)0x6bU) /*道岔搬动状态*/ +#define ETYPE_SWT_MOVE_CHECK_RESULT ((UINT8)0x6cU) /*道岔可动性检查结果*/ +#define ETYPE_SWT_WAIT_MOVE ((UINT8)0x6dU) /*等待道岔动作完成*/ +#define ETYPE_SWT_CONNECT_RET_FAIL ((UINT8)0x6Eu) /* Point failed to move to normal within 20 seconds of the over switch block being cleared */ /* 继电器故障类型编码 (UINT8)0x81-(UINT8)0x8f */ /* 设备类型 CI_DEVICE_TYPE_RELAY */ @@ -386,6 +398,9 @@ #define ETYPE_LOGSEC_FIRSTLOCK_STATE ((UINT8)0xC6) /*逻辑区段为第一个锁闭区段检查*/ #define ETYPE_LOGSEC_CBTC_PROPERTY ((UINT8)0xC7) /*逻辑区段CBTC属性检查*/ #define ETYPE_LOGSEC_CONTINUOUS ((UINT8)0xC8) /*逻辑区段连续性检查*/ +#define ETYPE_LOGSEC_CT_OVERRIDE_FAIL ((UINT8)0xC9) /*逻辑区段有CT列车占用,旁路无效*/ +#define ETYPE_LOGSEC_EA_BUILD ((UINT8)0xCA) /*逻辑区段防护区建立*/ +#define ETYPE_LOGSEC_DIRLOC_FAIL ((UINT8)0xCB) /*逻辑区段继电器检查条件不满足(迪士尼联络线)*/ /*动态路径故障类型*/ #define ETYPE_PART_ROUTE_RES ((UINT8)0xD0) /*动态路径资源检查*/ diff --git a/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.c b/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.c index 50767dc..fa0ce73 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.c +++ b/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.c @@ -18,8 +18,7 @@ EsbConfigDataStruct EsbConfigDataStru[ESB_SUM_MAX]; /* UINT16 LocalCiEsbIdBuf[ESB_SUM_MAX] = {0u}; /*定义本地联锁紧急停车按钮ID映射数组*/ INT16 EsbCurSum = 0; /*ESB当前总数*/ UINT16 totalEsbNum = 0u;/*本联锁和相邻联锁发送给本联锁ESB总数*/ - - +CesbConfigDataStruct LocalCesbConfigDataStru;/*定义本联锁全线紧急制动数据*/ /* @@ -662,4 +661,54 @@ UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId) } return retVal; +} + +/* +* 功能描述: 获取指定ESB ID关联的link编号 +* 参数说明: const UINT16 esbId, 紧急停车按钮 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetEsbRelateLinkId(const UINT16 esbId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 wLinkId = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/ + if (bufIndex < ESB_SUM_MAX) + { + + wLinkId = EsbConfigDataStru[bufIndex].wRelateLink; + } + else + { + /*不做处理*/ + } + return wLinkId; +} + +/* +* 功能描述: 获取指定CESB关联的激活继电器ID +* 参数说明: 无 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetCesbRelayId(void) +{ + UINT16 wCesbRelay = 0U; + wCesbRelay = LocalCesbConfigDataStru.wCesbRelayId; + return wCesbRelay; +} + +/* +* 功能描述: 获取指定CESB关联的旁路继电器ID +* 参数说明: 无 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetCesbCutRelayId(void) +{ + UINT16 wCesbCutRelay = 0U; + wCesbCutRelay = LocalCesbConfigDataStru.wCesbCutRelayId; + return wCesbCutRelay; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.h b/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.h index 1015dc0..78835d6 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.h +++ b/TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.h @@ -50,14 +50,24 @@ typedef struct S_EsbConfigDataStruct UINT16 EsbCutoffBuzzRelayId; /*切除蜂鸣器报警继电器ID*/ UINT8 ConfigAtsCiEssSteadyMask; /*是否配置了ATS-CI稳灯状态码位0x55 配置;0xaa未配置*/ UINT8 ConfigAtsCiEssFlashMask; /*是否配置了ATS-CI闪灯状态码位0x55 配置;0xaa未配置*/ + UINT16 wRelateLink;/*电子地图配置中关联LINK标号*/ } EsbConfigDataStruct; +/*CESB按钮配置数据结构体*/ +typedef struct S_CesbConfigDataStruct +{ + UINT16 wCesbId; /*全线紧急按钮ID (配置字段)*/ + UINT8 BelongCiId; /*所属联锁ID*/ + UINT16 wCesbRelayId; /*全线紧急停车按钮关联继电器*/ + UINT16 wCesbCutRelayId; /*全线紧急停车旁路按钮关联继电器*/ +} CesbConfigDataStruct; + /*******************************全局变量声明*******************************/ extern EsbConfigDataStruct EsbConfigDataStru[ESB_SUM_MAX]; /*定义ESB数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/ extern UINT16 LocalCiEsbIdBuf[ESB_SUM_MAX]; /*定义本地联锁紧急停车按钮ID映射数组*/ extern INT16 EsbCurSum; /*ESB当前总数*/ extern UINT16 totalEsbNum;/*本联锁和相邻联锁发送给本联锁ESB总数*/ - +extern CesbConfigDataStruct LocalCesbConfigDataStru;/*定义本联锁全线紧急制动数据*/ /* * 功能描述: 获取紧急停车当前总数 * 参数说明: void @@ -293,6 +303,30 @@ UINT16 GetEsbCutoffBuzzRelayId(const UINT16 esbId); */ UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId); +/* +* 功能描述: 获取指定ESB ID关联的link编号 +* 参数说明: const UINT16 esbId, 紧急停车按钮 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetEsbRelateLinkId(const UINT16 esbId); + +/* +* 功能描述: 获取指定CESB关联的激活继电器ID +* 参数说明: 无 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetCesbRelayId(void); + +/* +* 功能描述: 获取指定CESB关联的旁路继电器ID +* 参数说明: 无 +* 返回值 : 无 +*Create fan 2026.02.05 +*/ +UINT16 GetCesbCutRelayId(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ESB/ESBDataManage.c b/TSCP/src/APP/ciapp/ESB/ESBDataManage.c index f621b22..3b3b706 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBDataManage.c +++ b/TSCP/src/APP/ciapp/ESB/ESBDataManage.c @@ -11,9 +11,12 @@ #include "ESBDataManage.h" #include "ESBConfigDataManage.h" - +#include "../ParsePack/ParsePackGateWayData.h" +#include "../QueryFiles/dquCIInterFace.h" EsbDataStruct EsbDataStru[ESB_SUM_MAX]; /*定义ESB数据结构体*/ - +UINT8 g_CesbFlockState = CESB_STATE_VALID_NO; /* 全线区段CESB封锁状态 */ +UINT8 g_ScxCesbData = CESB_STATE_VALID_NO; /*试车线CESB状态*/ +UINT8 g_ScxCesbCutData = ESB_CUT_NO;/*试车线CESB旁路状态*/ /* * 功能描述: 获取指定ESB数据 @@ -1072,4 +1075,377 @@ UINT8 GetEsbRelayDownState(const UINT16 esbId) } return reVal; -} \ No newline at end of file +} + +/** +* @brief 设置全线区段CESB封锁全局变量状态 +* @param const UINT8 chState 全线区段CESB封锁状态 +* @return 无 +* @note 当输入参数不合法时,设置全线区段CESB封锁 +* Created By fan 2026.02.04 +*/ +void SetAllSecCesbState(const UINT8 chState) +{ + if (CESB_STATE_VALID_NO == chState) + { + g_CesbFlockState = chState; + } + else + { + g_CesbFlockState = CESB_STATE_VALID_YES; + } +} + +/** +* @brief 获取全线区段CESB封锁全局变量状态 +* @param 无 +* @return CESB_STATE_VALID_NO:未全线CESB封锁;CESB_STATE_VALID_YES :全线CESB封锁 +* Created By fan 2026.02.04 +*/ +UINT8 GetAllSecCesbState(void) +{ + return g_CesbFlockState; +} + +/** +* @brief 全线CEsb封锁取消主处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancleCesbFlockCmdProc(void) +{ + AtsCESBCancleMsgStru * strMsgFst = NULL; + AtsCESBCancleMsgStru * strMsgSnd = NULL; + + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsCesbMsgFst(); + strMsgSnd = GetAtsCesbMsgSnd(); + + if ((strMsgFst->chFlag != FLAG_SET) && (strMsgSnd->chFlag != FLAG_SET)) + { + ; /* 没有消息,什么也不做 */ + } + else if ((strMsgFst->chFlag == FLAG_SET) && (strMsgSnd->chFlag != FLAG_SET)) + {/* 一次消息 */ + CancelCesbFlockAtsCmdFst(); + } + else + {/* 二次消息 */ + CancelCesbFlockAtsCmdSnd(); + } +} + +/** +* @brief 全线CESB首次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancelCesbFlockAtsCmdFst(void) +{ + AtsCESBCancleMsgStru * strMsgFst = NULL; + AtsMsgCfmStru * strCfmFst = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT8 chFunRtn = CI_TIME_OUT; + UINT8 chState = 0U; /*全线区段CESB封锁状态*/ + UINT16 wCesbRelayId = 0u;/*CESB继电器*/ + UINT8 chCesbState = 0U;/*CESB激活状态*/ + UINT16 wCesbCutRelayId = 0u;/*CESB旁路继电器*/ + UINT8 chCesbCutState = 0U;/*CESB旁路状态*/ + UINT8 localCiType = 0U;/*联锁类型*/ + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsCesbMsgFst(); + strCfmFst = GetAtsCesbCfmFst(); + chState = GetAllSecCesbState(); + if (strMsgFst->dwCycle == dwCycle) + { + strCfmFst->chFlag = FLAG_SET; + strCfmFst->chTiocId = chLocalId; + strCfmFst->chStation = strMsgFst->chStation; + strCfmFst->wIndex = strMsgFst->wIndex; + strCfmFst->dwTime = dwCycle; + + /* 取消全线区段CESB封锁 */ + if (CESB_STATE_VALID_NO == chState) + {/* 当前未设置 */ + strCfmFst->chOpStatus = CONFIRM_CANCLE_CESB_FST_UNSET; + } + else + { + localCiType = GetLocalCiType();/*获取联锁类型*/ + if (CI_TYPE_SCX == localCiType) + { + /*获取试车线旁路及激活命令状态*/ + chCesbState = GetScxCesbCmdState(); + chCesbCutState = GetScxCesbCutCmdState(); + /*旁路或未激活*/ + if ((CESB_STATE_VALID_NO == chCesbState) || (ESB_CUT_YES == chCesbCutState)) + { + strCfmFst->chOpStatus = CONFIRM_CANCLE_CESB_FST_SUCCESS; + } + else + { + strCfmFst->chOpStatus = CONFIRM_CANCLE_CESB_RELAY_ACTIVE; + } + } + else + { + wCesbRelayId = GetCesbRelayId(); + chCesbState = GetRelayCollState(wCesbRelayId); + wCesbCutRelayId = GetCesbCutRelayId(); + chCesbCutState = GetRelayCollState(wCesbCutRelayId); + if ((RELAY_STATE_UP == chCesbCutState) || (RELAY_STATE_UP == chCesbState)) + { + strCfmFst->chOpStatus = CONFIRM_CANCLE_CESB_FST_SUCCESS; + } + else + { + strCfmFst->chOpStatus = CONFIRM_CANCLE_CESB_RELAY_ACTIVE; + } + } + } + + szCrcTmp[ii] = strMsgFst->chAtsId; + ii++; + szCrcTmp[ii] = strMsgFst->chStation; + ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmFst->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); /* ATS编号、车站编号、操作站编号、下发时间、命令类型计算CRC */ + + if (CONFIRM_CANCLE_CESB_FST_SUCCESS != strCfmFst->chOpStatus) + { + ClearAtsCesbMsgFirst(); /*处理不成功,需清除一次命令 */ + } + else + { + ; + } + } + else + {/* 接收到ATS一次消息非本周期,超时判断 */ + chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); + if (CI_TIME_OUT == chFunRtn) + { + ClearAtsCesbMsgFirst(); + } + else + { + ; + } + } +} + +/** +* @brief 取消CESB封锁二次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancelCesbFlockAtsCmdSnd(void) +{ + AtsCESBCancleMsgStru * strMsgFst = NULL; + AtsCESBCancleMsgStru * strMsgSnd = NULL; + AtsMsgCfmStru * strCfmFst = NULL; + AtsMsgCfmStru * strCfmSnd = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT32 dwCrc = 0u; + UINT16 wCesbRelayId = 0u;/*CESB继电器*/ + UINT8 chCesbState = 0U;/*CESB激活状态*/ + UINT16 wCesbCutRelayId = 0u;/*CESB旁路继电器*/ + UINT8 chCesbCutState = 0U;/*CESB旁路状态*/ + UINT8 localCiType = 0U;/*联锁类型*/ + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + strMsgFst = GetAtsCesbMsgFst(); + strMsgSnd = GetAtsCesbMsgSnd(); + strCfmFst = GetAtsCesbCfmFst(); + strCfmSnd = GetAtsCesbCfmSnd(); + + if ((NULL != strMsgFst) + && (NULL != strMsgSnd) + && (NULL != strCfmFst) + && (NULL != strCfmSnd)) + { + if (strMsgSnd->dwCycle == dwCycle) + { + strCfmSnd->chFlag = FLAG_SET; + strCfmSnd->chTiocId = chLocalId; + strCfmSnd->chStation = strMsgSnd->chStation; + strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->dwTime = dwCycle; + + if (FLAG_SET != strMsgFst->chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_SND_FIRST; /* 一次命令未执行,返回未执行首次取消 */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) + || (strMsgSnd->chStation != strMsgFst->chStation) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_SND_UNKNOWN; /* ATS一二次命令帧头输入不一致,返回未知 */ + chFlag = FLAG_SET; + } + else + { + localCiType = GetLocalCiType();/*获取联锁类型*/ + if (CI_TYPE_SCX == localCiType) + { + /*获取试车线旁路及激活命令状态*/ + chCesbState = GetScxCesbCmdState(); + chCesbCutState = GetScxCesbCutCmdState(); + /*旁路或未激活成功*/ + if ((CESB_STATE_VALID_YES == chCesbState) && (ESB_CUT_NO == chCesbCutState)) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_RELAY_ACTIVE; /* 未旁路且CESB仍然有效*/ + chFlag = FLAG_SET; + } + else + { + ;/*不处理*/ + } + } + else + { + /*正线看继电器状态*/ + wCesbRelayId = GetCesbRelayId(); + chCesbState = GetRelayCollState(wCesbRelayId); + wCesbCutRelayId = GetCesbCutRelayId(); + chCesbCutState = GetRelayCollState(wCesbCutRelayId); + if ((RELAY_STATE_UP != chCesbCutState) && (RELAY_STATE_UP != chCesbState)) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_RELAY_ACTIVE; /* 未旁路且CESB仍然有效*/ + chFlag = FLAG_SET; + } + else + { + /*不处理*/ + ; + } + } + } + + if (FLAG_UNSET == chFlag) + { + szCrcTmp[ii] = strMsgSnd->chTiocId; + ii++; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + + if (dwCrc != strMsgSnd->dwCrc32) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_SND_CHECKFAIL; /* 计算的CRC32与ATS二次消息CRC32不一致 */ + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chAtsId; + szCrcTmp[ii++] = strMsgSnd->chStation; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + LongToChar(strMsgSnd->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + if (FLAG_UNSET == chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_CANCLE_CESB_SND_SUCCESS; /* 检查通过,反馈确认成功 */ + SetAllSecCesbState(CESB_STATE_VALID_NO); /*设置CESB封锁无效*/ + } + else + { + ; + } + } + else + { + ; /** 非本周期消息,不处理 */ + } + ClearAtsCesbMsgFirst(); + ClearAtsCesbMsgSecond(); + } + else + { + ; /**不可能分支 不处理 */ + } +} + +/** +* @brief 获取试车线CESB命令设置状态 +* @param 无 +* @return CESB_STATE_VALID_NO 试车线CESB未激活;CESB_STATE_VALID_YES :试车线CESB激活 +* Created By fan 2026.03.10 +*/ +UINT8 GetScxCesbCmdState(void) +{ + return g_ScxCesbData; +} + +/** +* @brief 设置试车线CESB命令状态 +* @input CESB_STATE_VALID_NO 试车线CESB未激活;CESB_STATE_VALID_YES :试车线CESB激活 +* Created By fan 2026.03.10 +*/ +void SetScxCesbCmdState(UINT8 chCesbCmd) +{ + if ((CESB_STATE_VALID_NO == chCesbCmd)||(CESB_STATE_VALID_YES == chCesbCmd)) + { + g_ScxCesbData = chCesbCmd; + } + else + { + ;/*不处理*/ + } +} + +/** +* @brief 获取全线区段试车线CESB旁路命令设置状态 +* @param 无 +* @return ESB_CUT_NO:试车线未CESB旁路;ESB_CUT_YES 试车线CESB旁路有效 +* Created By fan 2026.03.10 +*/ +UINT8 GetScxCesbCutCmdState(void) +{ + return g_ScxCesbCutData; +} + +/** +* @brief 设置试车线CESB旁路命令状态 +* @input ESB_CUT_NO: 试车线未CESB旁路;ESB_CUT_YES : 试车线CESB旁路 +* Created By fan 2026.03.10 +*/ +void SetScxCesbCutCmdState(UINT8 chCesbCmd) +{ + if ((ESB_CUT_NO == chCesbCmd) || (ESB_CUT_YES == chCesbCmd)) + { + g_ScxCesbCutData = chCesbCmd; + } + else + { + ;/*不处理*/ + } +} diff --git a/TSCP/src/APP/ciapp/ESB/ESBDataManage.h b/TSCP/src/APP/ciapp/ESB/ESBDataManage.h index de4f733..cf275bc 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBDataManage.h +++ b/TSCP/src/APP/ciapp/ESB/ESBDataManage.h @@ -19,6 +19,7 @@ #include "ESBConfigDataManage.h" #include "CommonTypes.h" #include "../System/CiSystemDefine.h" +#include "../Section/SectionDefine.h" #ifdef __cplusplus @@ -51,9 +52,14 @@ typedef struct S_EsbDataStruct UINT8 EsbCutRelayDownState; /*紧急关闭旁路按钮采集继电器落下状态,0x55-正常采集落下,0xaa-通信异常落下*/ } EsbDataStruct; + + + /*******************************全局变量声明*******************************/ extern EsbDataStruct EsbDataStru[ESB_SUM_MAX]; /*定义ESB数据结构体*/ - +extern UINT8 g_CesbFlockState ; /* 全线区段CESB封锁状态 */ +extern UINT8 g_ScxCesbData;/*试车线CESB状态*/ +extern UINT8 g_ScxCesbCutData;/*试车线CESB旁路状态*/ /* * 功能描述: 获取指定ESB数据 @@ -407,6 +413,77 @@ void SetEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState); */ UINT8 GetEsbRelayDownState(const UINT16 esbId); +/** +* @brief 设置全线区段CESB封锁全局变量状态 +* @param const UINT8 chState 全线区段CESB封锁状态 +* @return 无 +* @note 当输入参数不合法时,设置全线区段CESB封锁 +* Created By fan 2026.02.04 +*/ +void SetAllSecCesbState(const UINT8 chState); + +/** +* @brief 获取全线区段CESB封锁全局变量状态 +* @param 无 +* @return CESB_STATE_VALID_NO:未全线CESB封锁;CESB_STATE_VALID_YES :全线CESB封锁 +* Created By fan 2026.02.04 +*/ +UINT8 GetAllSecCesbState(void); + +/** +* @brief 全线CEsb封锁取消主处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancleCesbFlockCmdProc(void); + +/** +* @brief 全线CESB首次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancelCesbFlockAtsCmdFst(void); + +/** +* @brief 取消CESB封锁二次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void CancelCesbFlockAtsCmdSnd(void); + +/** +* @brief 获取试车线CESB命令设置状态 +* @param 无 +* @return CESB_STATE_VALID_NO 试车线CESB未激活;CESB_STATE_VALID_YES :试车线CESB激活 +* Created By fan 2026.03.10 +*/ +UINT8 GetScxCesbCmdState(void); + +/** +* @brief 设置试车线CESB命令状态 +* @input CESB_STATE_VALID_NO 试车线CESB未激活;CESB_STATE_VALID_YES :试车线CESB激活 +* Created By fan 2026.03.10 +*/ +void SetScxCesbCmdState(UINT8 chCesbCmd); + +/** +* @brief 获取全线区段试车线CESB旁路命令设置状态 +* @param 无 +* @return ESB_CUT_NO:试车线未CESB旁路;ESB_CUT_YES 试车线CESB旁路有效 +* Created By fan 2026.03.10 +*/ +UINT8 GetScxCesbCutCmdState(void); + +/** +* @brief 设置试车线CESB旁路命令状态 +* @input ESB_CUT_NO: 试车线未CESB旁路;ESB_CUT_YES : 试车线CESB旁路 +* Created By fan 2026.03.10 +*/ +void SetScxCesbCutCmdState(UINT8 chCesbCmd); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ESB/ESBDefine.h b/TSCP/src/APP/ciapp/ESB/ESBDefine.h index 25821e6..0fa92c9 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBDefine.h +++ b/TSCP/src/APP/ciapp/ESB/ESBDefine.h @@ -23,6 +23,10 @@ #define ESB_STATE_VALID_NO ((UINT8)0x55) /*紧急无效*/ #define ESB_STATE_VALID_YES ((UINT8)0xaa) /*紧急有效*/ +/*全线紧急状态*/ +#define CESB_STATE_VALID_NO ((UINT8)0xAA) /*CESB紧急无效*/ +#define CESB_STATE_VALID_YES ((UINT8)0x55) /*CESB紧急有效*/ + /*紧急按钮旁路状态*/ #define ESB_CUT_NO ((UINT8)0x55) /* 未旁路 */ #define ESB_CUT_YES ((UINT8)0xaa) /* 旁路 */ diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c index 8a3b1f6..6af6d26 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c @@ -330,12 +330,6 @@ static void elm_FlyingProtect(void) UINT16 wTrainId = 0U; UINT8 chTimeCheck = 0u; UINT32 dwFlyOverCyc = 0U; - UINT8 cNvramFlag = 0U; /*列车使用NVRAM标志*/ - UINT8 cPosMonistorState = 0U; /*列车位置监督状态*/ - UINT8 cFuncSwitch = 0U; /*使用NVRAM位置且位置监督无效的列车飞车不宕机开关:0xAA-飞车不宕机 0x55-飞车宕机*/ - - /*周期清除使用NVRAM位置且位置监督无效的飞车信息*/ - ClearNvramFlyingTrain(); chCTCheck = elm_FlyingProtect_CT(); /*检查CT飞车*/ elm_FlyingProtect_UCT();/*UCT包络飞车删除为UKT*/ @@ -350,7 +344,7 @@ static void elm_FlyingProtect(void) { /** 获取数据配置的飞车宕机最大冗余时间 */ maxShutdownRedunTime = elm_PrepareCTFlyingRedunTime(); - cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_NVRAM_TRAIN_FlYING_OVER); + for (ii = 0U; ii < trainCnt; ii++) { wTrainId = GetTrainId(ii); @@ -358,23 +352,13 @@ static void elm_FlyingProtect(void) { dwFlyStartCyc = GetTrainStartFlyProtectCycNum(wTrainId); chTimeCheck = SystemOverTimeCheck(dwFlyStartCyc, (UINT32)maxShutdownRedunTime); - - if (CI_TIME_OUT== chTimeCheck) + if (CI_TIME_OUT== chTimeCheck) { - cNvramFlag = GetTrainNvramPosFlag(wTrainId); - cPosMonistorState = GetTrainPosMonitorState(wTrainId); - if ((TRAIN_NVRAM_POS_FLAG_YES == cNvramFlag) && (TRAIN_POS_MONITOR_VALID != cPosMonistorState) && (FUNC_SWITCH_ON == cFuncSwitch)) - { - /*使用NVRAM位置且位置监督无效的列车飞车后,若NVRAM列车飞车不宕机开关打开,RC仅向列车发飞车特控报文,不宕机*/ - } - else - { - SetFlyProtectOverCyc(dwCurCyc); /*飞车标志*/ - } + SetFlyProtectOverCyc(dwCurCyc); /*飞车标志*/ } else { - ; /*未超过冗余时间或列车通信中断*/ + ; /*未超过冗余时间*/ } } } @@ -1527,8 +1511,6 @@ void elm_MaintenanceInfo(void) outStringLength++; outString[outStringLength] = pAcAssertInfo->redunOverCanArb; /*冗余结束可判ARB标志*/ outStringLength++; - outString[outStringLength] = pAcAssertInfo->AxisCommBadArbFlag; /*计轴通信中断可判ARB标志*/ - outStringLength++; outString[outStringLength] = pAcAssertInfo->passTrainFlag; /*计轴区段好车通过标志*/ outStringLength++; ShortToChar(pAcAssertInfo->passTrainID, &outString[outStringLength]); /*计轴区段好车通过的列车ID*/ @@ -3064,13 +3046,9 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 UINT32 dwFlyStartCyc = 0U; UINT8 chTimeCheck = 0U; UINT8 flyCheck = 0U; - UINT8 cNvramFlag = 0U; /*列车使用NVRAM标志*/ - UINT8 cPosMonistorState = 0U; /*列车位置监督状态*/ - UINT8 cFuncSwitch = 0U; /*使用NVRAM位置且位置监督无效的列车飞车不宕机开关:0xAA-飞车不宕机 0x55-飞车宕机*/ - /** CT飞车防护*/ trainCnt = elm_PrepareCommTrainID(trainID); - cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_NVRAM_TRAIN_FlYING_OVER); + /** 遍历所有的通信车 */ for (cycle = 0u; cycle < trainCnt; cycle++) { @@ -3117,17 +3095,7 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 chTimeCheck = SystemOverTimeCheck(dwFlyStartCyc, (UINT32)maxShutdownRedunTime); if (CI_TIME_OUT == chTimeCheck) { - cNvramFlag = GetTrainNvramPosFlag(trainID[cycle]); - cPosMonistorState = GetTrainPosMonitorState(trainID[cycle]); - if ((TRAIN_NVRAM_POS_FLAG_YES == cNvramFlag) && (TRAIN_POS_MONITOR_VALID != cPosMonistorState) && (FUNC_SWITCH_ON == cFuncSwitch)) - { - /*使用NVRAM位置且位置监督无效的列车飞车后,若NVRAM列车飞车不宕机开关打开,RC仅向列车发飞车特控报文,不宕机*/ - AddNvramFlyingTrain(trainID[cycle]); - } - else - { - elm_AddFlyingTrain(trainID[cycle], pEnvelop->id); - } + elm_AddFlyingTrain(trainID[cycle], pEnvelop->id); } flyCheck++; } diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c index 04aad90..8277c14 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c @@ -6,6 +6,8 @@ #include "EnvelopeLogicProcess.h" #include "WholeLineScreenAPI.h" #include "TrainDataManage.h" +#include "SystemParameterManage.h" +#include "DeviceDataManage.h" /*================================静态函数声明区==============================*/ @@ -563,6 +565,12 @@ void elm_TrainScreen(void) UINT32 errorCode = 0u; UINT8 comstatus = 0U; const EnvelopeStruct* pEnvelop = NULL; + UINT8 cLocalCiType = 0U; + UINT8 cDsnFuncSwitch = 0U; /*迪士尼功能开关*/ + UINT8 cCurTrainTestStatus = 0U; /*当前试车状态*/ + UINT8 cFuncRetVal = CI_ERROR; + UINT8 cAcNum = 0U; /*车身占用的计轴区段数量*/ + UINT16 szAcId[MAX_AC_IN_TRAIN] = { 0U }; /*车身占用的计轴区段ID数组*/ for (cycle = 1u; cycle < ENVELOPE_SUM_MAX; cycle++) { @@ -579,28 +587,45 @@ void elm_TrainScreen(void) /** 获取列车的通信状态 */ comstatus = elm_PrepareTrainCommStatus(pEnvelop->trainID[0u]); /*CT包络且通信正常,才进行筛选*/ - if ((TYPE_CT_ENVELOPE == pEnvelop->envelopeType)&&(ELM_COM_STATUS_OK ==comstatus)) + if ((TYPE_CT_ENVELOPE == pEnvelop->envelopeType) && (ELM_COM_STATUS_OK == comstatus)) { - /** 判断前端是否可疑 */ - if (0u != pEnvelop->headTrainID) - { - /** 处理前端筛选*/ - elm_TrainHeadScreen(pEnvelop); - } - else - { - /** 无需处理 */ - } + cLocalCiType = GetLocalCiType(); + cDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + cCurTrainTestStatus = GetCiTrainTestStatus(); /*获取试车状态*/ + cFuncRetVal = CheckTrainIsCompletelyLocal(pEnvelop->trainID[0U], &cAcNum, szAcId); /*判断列车是否完全在本控区*/ - /** 判断后端是否可疑*/ - if (0u != pEnvelop->tailTrainID) + if ((CI_TYPE_SCX == cLocalCiType) + && (FUNC_SWITCH_ON == cDsnFuncSwitch) + && (CI_TRAIN_TEST_ON == cCurTrainTestStatus) + && (CI_SUCCESS == cFuncRetVal)) { - /** 处理后端筛选*/ - elm_TrainTailScreen(pEnvelop); + /*DSN试车线在试车中时,RC设置本控区内的通信车无前后端可疑*/ + (void)elm_SetEnvelopeHeadTrainID(pEnvelop->id, 0U); + (void)elm_SetEnvelopeTailTrainID(pEnvelop->id, 0U); } else { - /** 无需处理 */ + /** 判断前端是否可疑 */ + if (0u != pEnvelop->headTrainID) + { + /** 处理前端筛选*/ + elm_TrainHeadScreen(pEnvelop); + } + else + { + /** 无需处理 */ + } + + /** 判断后端是否可疑*/ + if (0u != pEnvelop->tailTrainID) + { + /** 处理后端筛选*/ + elm_TrainTailScreen(pEnvelop); + } + else + { + /** 无需处理 */ + } } } diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c b/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c index 99c2605..17607b8 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c @@ -2114,10 +2114,8 @@ static UINT8 elm_UCTEnvelopeHeadHandle(UINT8 endlineFlag, IN const EnvelopeStruc wAgLink = GetBGLinkRelAGLinkId(wLinkId); chBgUtSwitch = GetNoCGFollowUtSwitch(); wNextLinkId = FindAdjacentLinkIDSafe(wLinkId, ptemp->endPos.Dir, &wSwitchId, &cDirectionPointFlag); - if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) - && ((pPretemp->startPos.Lnk == wAgLink) || (pPretemp->endPos.Lnk == wAgLink)) - && (1U == ptemp->ACCnt)) - {/* B轨UT可追踪开关打开,UCT仅处于B轨,相邻区段是A轨,CT包络在A轨,此场景不延伸 */ + if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) && ((pPretemp->startPos.Lnk == wAgLink) || (pPretemp->endPos.Lnk == wAgLink))) + {/* B轨UT可追踪开关打开,UCT处于B轨,相邻区段是A轨,CT包络在A轨,此场景不延伸 */ ret = 0x55u; } else @@ -2786,10 +2784,8 @@ static UINT8 elm_UCTEnvelopeTailHandle(UINT8 endlineFlag, const EnvelopeStruct * wAgLink = GetBGLinkRelAGLinkId(wLinkId); chBgUtSwitch = GetNoCGFollowUtSwitch(); wNextLinkId = FindAdjacentLinkIDSafe(wLinkId, ~ptemp->startPos.Dir, &wSwitchId, &cDirectionPointFlag); - if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) - && ((pBacktemp->startPos.Lnk == wAgLink) || (pBacktemp->endPos.Lnk == wAgLink)) - && (1U == ptemp->ACCnt)) - {/* B轨UT可追踪开关打开,UCT仅处于B轨,相邻区段是A轨,CT包络在A轨,此场景不延伸 */ + if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) && ((pBacktemp->startPos.Lnk == wAgLink) || (pBacktemp->endPos.Lnk == wAgLink))) + {/* B轨UT可追踪开关打开,UCT处于B轨,相邻区段是A轨,CT包络在A轨,此场景不延伸 */ ret = 0x55u; } else @@ -3295,11 +3291,10 @@ static UINT8 elm_UCTEnvelopeMoving(const EnvelopeStruct* ptemp) * @return CI_ERROR 转换失败 * CI_SUCCESS 转换成功 * @note CT包络转换成UCT时,需要满足: - 1,无前端可疑 - 2、包络内包含的道岔无四开且占用, - 3,不为休眠车, - 4、列车车长不小于两倍线路最小车长 -* by cgh 20250915 + 1,无前端可疑 + 2、包络内包含的道岔无四开且占用, + 3,不为休眠车, + 4、列车车长不小于两倍线路最小车长 */ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) { @@ -3311,7 +3306,6 @@ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) UINT32 minTrainLength = 0U; UINT32 dwTempLength = 0U; UINT8 chTrainNvramPosFlag = 0U; - UINT8 chTrainIsIsFollowUtFlag = 0U;/*是否为列车可追踪UT*/ /** 入口参数校验 */ ASSERT_RET_VALUE(NULL == ptemp,ret,0x80000000U); @@ -3363,17 +3357,6 @@ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) { ; /* 不满足转为UCT条件 */ } - - if (0U == errorCode) - { - /** 获取列车是否处于可追踪UT场景 */ - chTrainIsIsFollowUtFlag = CheckTrainIsFollowUt(ptemp->id); - ASSER_ERROR(CI_SUCCESS == chTrainIsIsFollowUtFlag, errorCode, 0x02000000U); - } - else - { - ; /* 不满足转为UCT条件 */ - } /** 设置函数返回值 */ ASSERT_SETRET(0U == errorCode,ret,CI_SUCCESS,CI_ERROR); diff --git a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c index 7579e4c..50e8daf 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c @@ -19,6 +19,7 @@ #include "../SGBJ/SGBJConfigDataManage.h" #include "InterlockCommonManage.h" #include "../Section/PhysicalSectionConfigDataManage.h" +#include "../ConnectOverride/ConnectOverrideDataMg.h" #include "AxisAssertManage.h" #include "AxisAssertDataPrepare.h" #include "dquCIInit.h" @@ -32,6 +33,13 @@ UINT8 GetCloseSignaleColor(const UINT8 color); /* @brief 判断所有占用物理区段是否均有占用计轴区段 */ static void IsOccPhyHasOccAc(void); +/* +* 功能描述: 迪士尼GJ继电器驱动判断 +* 参数说明: const UINT16 wPhySecId 物理区段ID +* 返回值 : CI_SUCCESS:GJ吸起 CI_ERROR:GJ落下 +* +*/ +static UINT8 GetDisneyGJDriveState(UINT16 wPhySecId); /* * 功能描述: 驱动指定道岔ID继电器 @@ -548,6 +556,7 @@ void OcSignalDeviceOutput(void) UINT32 signalDriCloseTimeCount = 0U;/*信号机驱动关闭超时计数*/ UINT8 driveRetVal = 0U; UINT8 jkjRelayValidFlag = 0u; + UINT8 cSignalDsnConnectAttr = SIGNAL_CONNECT_FALSE; signalCurSum = GetSignalCurSum(); /*获取信号机总数*/ localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ @@ -596,7 +605,8 @@ void OcSignalDeviceOutput(void) if (CI_TIME_OUT == overTimeCheckResult) {/*信号机关闭超时*/ signalIsfushiFlag = GetSignalIsfushiFlag(signalId); - if(SIGNALTYPE_FUSHI_YES != signalIsfushiFlag)/*复示信号机驱动关闭超时,不宕机*/ + cSignalDsnConnectAttr = GetSignalDsnConnectAttr(signalId); + if ((SIGNALTYPE_FUSHI_YES != signalIsfushiFlag) && (SIGNAL_CONNECT_TRUE != cSignalDsnConnectAttr))/*复示信号机驱动关闭超时,不宕机*/ { /*xxxxx宕机 信号机关闭超时*/ SetPlatOverFlag(); /*设置平台宕机*/ @@ -2789,6 +2799,7 @@ void SignalDeviceToRelayStateProc(void) UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI); UINT8 relayDetainValidFlag = 0u;/*硬线扣车标志*/ UINT8 signalIsfushiFlag = 0u; + UINT8 cSignalDsnConnectAttr = SIGNAL_CONNECT_FALSE; signalCurSum = GetTotalSignalCurNum(); /*获取信号机总数*/ localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ @@ -2857,7 +2868,8 @@ void SignalDeviceToRelayStateProc(void) {/*信号机关闭超时*/ signalIsfushiFlag = GetSignalIsfushiFlag(signalId); - if (SIGNALTYPE_FUSHI_YES != signalIsfushiFlag)/*复示信号机驱动关闭超时,不宕机*/ + cSignalDsnConnectAttr = GetSignalDsnConnectAttr(signalId); + if ((SIGNALTYPE_FUSHI_YES != signalIsfushiFlag) && (SIGNAL_CONNECT_TRUE != cSignalDsnConnectAttr))/*复示信号机驱动关闭超时,不宕机*/ { /*xxxxx宕机 信号机关闭超时*/ SetPlatOverFlag(); /*设置平台宕机*/ @@ -3015,6 +3027,24 @@ UINT8 SetSignalRelayState(const UINT16 signalId) switch (signalType) { + case SIGNAL_TYPE_2_ALL_NOYINDAO_DSN: + switch (curDrvColor) + { + case SIGNAL_DRIVECOLOUR_RED: + { + (void)SetRelayDriveState(lxRelayId, RELAY_STATE_DOWN); + break; + + } + case SIGNAL_DRIVECOLOUR_GREEN: /* 蓝灯、用绿灯表示*/ + { + (void)SetRelayDriveState(lxRelayId, RELAY_STATE_UP); + break; + } + default: + /*不可达分支*/ + break; + } case SIGNAL_TYPE_4_ALL_NOYINDAO_ZX: /* 0x2A 四显示(不封灯、不带引导) 红、绿、蓝、黄*/ { if (FUNC_SWITCH_ON == bCiSwitchShowGreenYellow)/*如果显示绿黄灯开关【打开】*/ @@ -4106,6 +4136,7 @@ UINT8 GetSignalShowColor(const UINT16 signalId) bCiSwitchShowGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow); switch (signalType) { + case SIGNAL_TYPE_4_ALL_NOYINDAO_ZX:/*0x2A 四显示(不封灯、不带引导) 红、绿、蓝、黄*/ { if (FUNC_SWITCH_ON == bCiSwitchShowGreenYellow)/*如果显示绿黄灯开关【打开】*/ @@ -5122,22 +5153,22 @@ void SwitchRelayToDeviceStateProc(void) /*处理道岔*/ for (ii = 0u; ii < switchCurSum; ii++) { - switchId = 0u; /*道岔ID*/ - belongCiId = 0u; /*道岔所属联锁ID*/ - DbRelayId = 0u; /*道岔定表继电器ID*/ - FbRelayId = 0u; /*道岔反表继电器ID*/ - YcRelayId = 0u; /*道岔允操继电器ID*/ - DcRelayId = 0u; /*道岔定操继电器ID*/ - FcRelayId = 0u; /*道岔反操继电器ID*/ - ZDbRelayId = 0u; /*道岔总定表继电器ID*/ - ZFbRelayId = 0u; /*道岔总反表继电器ID*/ - DFHRelayId = 0u; /*道岔定反后继电器ID*/ - YcRelayState = 0u; /*道岔允操继电器状态*/ - DbRelayState = 0u; /*道岔定表继电器状态*/ - FbRelayState = 0u; /*道岔反表继电器状态*/ - ZDbRelayState = 0u; /*道岔总定表继电器状态*/ - ZFbRelayState = 0u; /*道岔总反表继电器状态*/ - DFHRelayState = 0u; /*道岔定反后继电器状态*/ + switchId = 0u; /*道岔ID*/ + belongCiId = 0u; /*道岔所属联锁ID*/ + DbRelayId = 0u; /*道岔定表继电器ID*/ + FbRelayId = 0u; /*道岔反表继电器ID*/ + YcRelayId = 0u; /*道岔允操继电器ID*/ + DcRelayId = 0u; /*道岔定操继电器ID*/ + FcRelayId = 0u; /*道岔反操继电器ID*/ + ZDbRelayId = 0u; /*道岔总定表继电器ID*/ + ZFbRelayId = 0u; /*道岔总反表继电器ID*/ + DFHRelayId = 0u; /*道岔定反后继电器ID*/ + YcRelayState = 0u; /*道岔允操继电器状态*/ + DbRelayState = 0u; /*道岔定表继电器状态*/ + FbRelayState = 0u; /*道岔反表继电器状态*/ + ZDbRelayState = 0u; /*道岔总定表继电器状态*/ + ZFbRelayState = 0u; /*道岔总反表继电器状态*/ + DFHRelayState = 0u; /*道岔定反后继电器状态*/ switchId = GetSwitchId(ii); /*获取道岔ID*/ @@ -5259,6 +5290,8 @@ void SwitchRelayToDeviceStateProc(void) (void)SetRelayDriveState(YcRelayId, RELAY_STATE_DOWN);/*设置允操继电器落下*/ (void)SetRelayDriveState(DcRelayId, RELAY_STATE_DOWN);/*设置定操继电器落下*/ (void)SetRelayDriveState(FcRelayId, RELAY_STATE_DOWN);/*设置反操继电器落下*/ + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, 0U); } } else if ((RELAY_STATE_UP == ZFbRelayState) @@ -5272,6 +5305,8 @@ void SwitchRelayToDeviceStateProc(void) (void)SetRelayDriveState(YcRelayId, RELAY_STATE_DOWN);/*设置允操继电器落下*/ (void)SetRelayDriveState(DcRelayId, RELAY_STATE_DOWN);/*设置定操继电器落下*/ (void)SetRelayDriveState(FcRelayId, RELAY_STATE_DOWN);/*设置反操继电器落下*/ + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, 0U); } } else @@ -5325,6 +5360,8 @@ void SwitchRelayToDeviceStateProc(void) (void)SetRelayDriveState(YcRelayId, RELAY_STATE_DOWN);/*设置允操继电器落下*/ (void)SetRelayDriveState(DcRelayId, RELAY_STATE_DOWN);/*设置定操继电器落下*/ (void)SetRelayDriveState(FcRelayId, RELAY_STATE_DOWN);/*设置反操继电器落下*/ + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, 0U); } } else if ((RELAY_STATE_UP == ZFbRelayState) @@ -5338,6 +5375,8 @@ void SwitchRelayToDeviceStateProc(void) (void)SetRelayDriveState(YcRelayId, RELAY_STATE_DOWN);/*设置允操继电器落下*/ (void)SetRelayDriveState(DcRelayId, RELAY_STATE_DOWN);/*设置定操继电器落下*/ (void)SetRelayDriveState(FcRelayId, RELAY_STATE_DOWN);/*设置反操继电器落下*/ + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, 0U); } } else @@ -6540,9 +6579,7 @@ void PsdRelayToDeviceStateProc(void) UINT16 psdSum = 0u; /*psd总数*/ UINT16 psdId = 0u; /*屏蔽门ID*/ UINT16 psdDoorRelayId = 0u; /*屏蔽门开关状态继电器ID*/ - UINT16 wPsdDoorRelayId2 = 0u; /*屏蔽门开关状态继电器ID*/ UINT16 psdMutualLockRelayId = 0u;/*互锁解除继电器ID*/ - UINT16 wPsdMutualLockRelayId2 = 0u;/*互锁解除继电器ID*/ UINT16 psdButtonRelayId = 0u; /*关门按钮继电器*/ UINT16 psdReopenButtonRelayId = 0u; /*PSD开门按钮继电器*/ UINT16 psdDepartureButtonRelayId = 0u; /*站台发车按钮继电器*/ @@ -6552,9 +6589,7 @@ void PsdRelayToDeviceStateProc(void) UINT8 chPsdRemoraState = 0U; UINT8 chGapDecMutualLockState = 0U; UINT8 chMutualLockState = 0U; - UINT8 chMutualLock2State = 0U; UINT8 chPsdCloseState = 0U; - UINT8 chPsdClose2State = 0U; UINT8 chPsdButtonState = 0U; UINT8 chPsdReOpenRelayState = 0U; UINT8 reVal = CI_SUCCESS; @@ -6566,7 +6601,6 @@ void PsdRelayToDeviceStateProc(void) UINT32 dwCycNum = 0U; UINT8 chDsnLinSwitch = 0U; UINT8 cFuncRet = 0U; - chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); psdSum = GetPsdSum(); @@ -6723,7 +6757,6 @@ void PsdRelayToDeviceStateProc(void) else {/*真实屏蔽门采用继电器状态更新互锁解除、开关状态及PCB按钮状态*/ psdMutualLockRelayId = GetPsdMutualLockRelayId(psdId); - wPsdMutualLockRelayId2 = GetPsdMutualLockRelayId2(psdId); if (psdMutualLockRelayId > 0u) { if (FUNC_SWITCH_ON != chDsnLinSwitch) @@ -6747,22 +6780,7 @@ void PsdRelayToDeviceStateProc(void) else { /*迪斯尼线路状态判断*/ - chMutualLockState = GetRelayCollState(psdMutualLockRelayId); - chMutualLock2State = GetRelayCollState(wPsdMutualLockRelayId2); - if ((RELAY_STATE_DOWN == chMutualLockState) - && (RELAY_STATE_DOWN == chMutualLock2State)) - { - reVal = SetPsdMutualLockRemoveState(psdId, PSD_MUTUALLOCK_REMOVE_NO); - } - else if ((RELAY_STATE_UP == chMutualLockState) - && (RELAY_STATE_UP == chMutualLock2State)) - { - reVal = SetPsdMutualLockRemoveState(psdId, PSD_MUTUALLOCK_REMOVE_YES); - } - else - { - reVal = SetPsdMutualLockRemoveState(psdId, PSD_MUTUALLOCK_REMOVE_NO); - } + DsnPsdMutualLockStateUpdate(psdId); } } @@ -6770,7 +6788,6 @@ void PsdRelayToDeviceStateProc(void) if (reVal == CI_SUCCESS) { psdDoorRelayId = GetPsdStateRelayId(psdId); - wPsdDoorRelayId2 = GetPsdStateRelayId2(psdId); if (psdDoorRelayId > 0u) { if (FUNC_SWITCH_ON != chDsnLinSwitch) @@ -6789,13 +6806,12 @@ void PsdRelayToDeviceStateProc(void) else { chPsdCloseState = GetRelayCollState(psdDoorRelayId); - chPsdClose2State = GetRelayCollState(wPsdDoorRelayId2); - if ((RELAY_STATE_UP == chPsdCloseState) && (RELAY_STATE_UP == chPsdClose2State)) + if (RELAY_STATE_UP == chPsdCloseState) { reVal = SetPsdState(psdId, PSD_STATE_CLOSE); } - else if ((RELAY_STATE_DOWN == chPsdCloseState) && (RELAY_STATE_DOWN == chPsdClose2State)) + else if (RELAY_STATE_DOWN == chPsdCloseState) { reVal = SetPsdState(psdId, PSD_STATE_OPEN); @@ -7899,7 +7915,6 @@ UINT8 EsbRelayToDeviceStateProc(void) UINT16 esbSum = 0u; /*esb总数*/ UINT16 esbId = 0u; /*紧急停车按钮ID*/ UINT16 esbRelayId = 0u;/*紧急停车按钮继电器ID*/ - UINT16 wEsbRelayId2 = 0u;/*紧急停车按钮继电器ID*/ UINT8 reVal = CI_ERROR; UINT8 relaySta = 0u; UINT16 esbRepRelayId = 0u;/*esb复视继电器ID*/ @@ -7913,15 +7928,13 @@ UINT8 EsbRelayToDeviceStateProc(void) UINT8 chEsbVirtualAtt = 0U; UINT8 chEsbCutRelayState = 0U; UINT8 chEsbRelayState = 0U; - UINT8 chEsbRelay2State = 0U; - UINT8 chDsnLinSwitch = 0U; UINT8 funcswitchZfsBtn = 0U; /*自复式按钮开关*/ - - chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + UINT8 chStartFlock = CI_START_FLOCK_YES; + UINT16 wRelateLnk = 0U;/*关联link*/ + UINT16 wRelatePhySec = 0U;/*关联物理区段*/ funcswitchZfsBtn = GetCiFunctionSwitchConfig(FUNC_ZIFUSHI_BUTTON); - + chStartFlock = GetStartFLockFlag(); esbSum = GetTotalEsbCurNum(); - for (ii = 0u; ii < esbSum; ii++) { esbId = GetEsbId(ii); @@ -7935,48 +7948,40 @@ UINT8 EsbRelayToDeviceStateProc(void) if (ESB_VIRTUAL_ATTR_YES != chEsbVirtualAtt) {/*不为虚拟设备才采集继电器状态*/ esbRelayId = GetEsbRelayId(esbId); - wEsbRelayId2 = GetEsbRelayId2(esbId); esbBelongCi = GetEsbBelongCiId(esbId);/*esb所属联锁*/ if (esbBelongCi == localCi) {/*esb所属联锁为本联锁*/ - if (FUNC_SWITCH_ON != chDsnLinSwitch) + + if (FUNC_SWITCH_ON == funcswitchZfsBtn) { - if (FUNC_SWITCH_ON == funcswitchZfsBtn) - { - /*自复式紧急停车按钮处理*/ - EsbZfsBtnProc(esbId); - EsbZfsCancelBtnProc(esbId); - } - else if (FUNC_SWITCH_ESB_NINGXIANG_RAIL == funcswitchZfsBtn) - { - /*宁象市域铁路紧急停车处理:紧急按钮为普通按钮,紧急取消按钮和紧急旁路按钮为自复式按钮*/ - /*1.紧急关闭按钮处理*/ - EsbNXRailBtnProc(esbId); - /*2.紧急关闭取消按钮处理*/ - EsbNXRailCancelBtnProc(esbId); - } - else - { - /*获取非自复式ESB当前需设置的状态*/ - chEsbRelayState = GetEsbCurNeedSetState(esbId); - reVal = SetEsbState(esbId, chEsbRelayState); - } + /*自复式紧急停车按钮处理*/ + EsbZfsBtnProc(esbId); + EsbZfsCancelBtnProc(esbId); + } + else if (FUNC_SWITCH_ESB_NINGXIANG_RAIL == funcswitchZfsBtn) + { + /*宁象市域铁路紧急停车处理:紧急按钮为普通按钮,紧急取消按钮和紧急旁路按钮为自复式按钮*/ + /*1.紧急关闭按钮处理*/ + EsbNXRailBtnProc(esbId); + /*2.紧急关闭取消按钮处理*/ + EsbNXRailCancelBtnProc(esbId); } else { - chEsbRelayState = GetRelayCollState(esbRelayId); - chEsbRelay2State = GetRelayCollState(wEsbRelayId2); - if ((RELAY_STATE_DOWN == chEsbRelayState) && (RELAY_STATE_DOWN == chEsbRelay2State)) + /*获取非自复式ESB当前需设置的状态*/ + chEsbRelayState = GetEsbCurNeedSetState(esbId); + reVal = SetEsbState(esbId, chEsbRelayState); + wRelateLnk = GetEsbRelateLinkId(esbId); + wRelatePhySec = GetLinkRelatedPhySec(wRelateLnk); + if ((ESB_STATE_VALID_YES == chEsbRelayState) && (CI_START_FLOCK_NO == chStartFlock)) { - reVal = SetEsbState(esbId, ESB_STATE_VALID_YES); - } - else if ((RELAY_STATE_UP == chEsbRelayState) && (RELAY_STATE_UP == chEsbRelay2State)) - { - reVal = SetEsbState(esbId, ESB_STATE_VALID_NO); + /*封锁对应区段*/ + (void)SetPhySecFLockState(wRelatePhySec, PHYSICAL_SECTION_FLOCK_YES); + SetPhySecFLockType(wRelatePhySec, SEC_FLOCK_TYPE_ESB); } else { - reVal = SetEsbState(esbId, ESB_STATE_VALID_YES); + ; } } @@ -8044,10 +8049,12 @@ UINT8 EsbRelayToDeviceStateProc(void) } } + /*更新全线紧急状态*/ + CesbStateUpdateProc(); + return reVal; } - /* * 功能描述: 更新Spks按钮逻辑状态 * 参数说明: void @@ -8259,20 +8266,7 @@ void SpksRelayToPhySecFlockStatus(void) { /*设置物理区段封锁状态失败*/ } - secFlockType = GetPhySecFLockType(phySecId); - if (PHY_SEC_FLOCK_TYPE_CMD == secFlockType) - { - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_SPKSCMD);/*封锁类型设置SPKS按下 且区段封锁命令 封锁*/ - } - else if (PHY_SEC_FLOCK_TYPE_NONE == secFlockType) - { - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_SPKS);/*记录物理区段封锁是由于SPKS按下导致*/ - } - else - { - /*已经设置SPKS封锁类型*/ - } - + SetPhySecFLockType(phySecId, SEC_FLOCK_TYPE_SPKS);/*增加物理区段封锁是由于SPKS按下导致*/ break; } } @@ -8342,23 +8336,16 @@ void SpksRelayToPhySecFlockStatus(void) /*此处即可判断处区段没有封锁 */ if ((jj == spksNum) && (0u< jj)) { + /*遍历结束无spks*/ + CancelPhySecFLockType(phySecId, SEC_FLOCK_TYPE_SPKS);/*删除SPKS封锁*/ secFlockType = GetPhySecFLockType(phySecId); - if (PHY_SEC_FLOCK_TYPE_SPKSCMD == secFlockType) - { - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_CMD);/*已有封锁命令区段封锁不能取消封锁 封锁类型降为仅命令封锁*/ - } - else if (PHY_SEC_FLOCK_TYPE_SPKS == secFlockType) + if (SEC_FLOCK_TYPE_NONE == secFlockType) { retValue = SetPhySecFLockState(phySecId, PHYSICAL_SECTION_FLOCK_NO); - if (CI_ERROR == retValue) - { - /*设置物理区段封锁状态失败*/ - } - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_NONE);/*封锁类型设置成无封锁*/ } else { - /*已有封锁命令区段封锁不能取消封锁*/ + /*有其他封锁命令区段 不能取消封锁*/ } } else @@ -9658,6 +9645,7 @@ UINT8 GetNoDDJSignalColor(const UINT16 signalId) UINT8 yellowRelaySta = RELAY_STATE_DOWN; /*黄灯继电器状态*/ UINT8 greenRelaySta = RELAY_STATE_DOWN; /*绿灯继电器状态*/ UINT8 blueRelaySta = RELAY_STATE_DOWN; /*蓝灯继电器状态*/ + UINT8 chSigEndAttr = 0U; /*信号机终端阻挡属性*/ firDsRelayId = GetSignalFirstDsRelayId(signalId); /*获取信号机1灯丝继电器ID*/ secDsRelayId = GetSignalSecondDsRelayId(signalId); /*获取信号机2灯丝继电器ID*/ @@ -9680,11 +9668,42 @@ UINT8 GetNoDDJSignalColor(const UINT16 signalId) yellowRelaySta = GetRelayCollState(yellowRelayId); greenRelaySta = GetRelayCollState(greenRelayId); blueRelaySta = GetRelayCollState(blueRelayId); + chSigEndAttr = GetSignalEndAttr(signalId); /*获取信号机终端阻挡属性*/ bCiSwitchShowGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow); switch (signalType) { + case SIGNAL_TYPE_2_ALL_NOYINDAO_DSN: /* 只需要采集列车继电器状态,反馈红灯还是蓝灯,*/ + { + if (0U == lxRelayId) + { + if (SIGNAL_END_YES == chSigEndAttr) + { + returnValue = SIGNAL_SHOWCOLOUR_RED; + } + else + { + /*无LXJ且不是终端阻挡信号机,ATS灰显*/ + } + } + else + { + if (RELAY_STATE_DOWN == lxRelaySta) + {/*红灯*/ + returnValue = SIGNAL_SHOWCOLOUR_RED; + } + else if (RELAY_STATE_UP == lxRelaySta) + {/*蓝灯---用绿灯表示*/ + returnValue = SIGNAL_SHOWCOLOUR_GREEN; + } + else + { + /*不处理*/ + } + } + break; + } case SIGNAL_TYPE_5_NOGREEN_YINDAO_CD:/*0x2C 高柱五显示(封绿灯、带引导、可点亮双黄灯)红、黄、绿、白、双黄*/ { if (FUNC_SWITCH_ON == bCiSwitchShowGreenYellow)/*如果显示绿黄灯开关【打开】*/ @@ -10334,8 +10353,6 @@ void RouteDCTYRelayToDeviceStateProc(void) UINT16 routeId = 0U; /*进路ID*/ UINT8 localCi = 0U; UINT8 belongCi = 0U; - UINT8 tmpExecRes = CI_ERROR;/*临时执行结果*/ - UINT8 reVal = CI_ERROR;/*返回值*/ UINT16 routeDCTYId = 0U;/*调车同意继电器id*/ UINT8 relayCollState = 0U;/*继电器采集状态*/ UINT8 chRouteType = 0U; /*进路类型*/ @@ -10622,12 +10639,14 @@ void ConnectLineRelayToDevStateProc(void) UINT16 dsQRelayId = 0u; UINT16 dsHRelayId = 0u; UINT16 byPassRelayId = 0u; + UINT16 EnableByPassRelayId = 0u; UINT8 dbRelayState = 0u; UINT8 fbRelayState = 0u; UINT8 dsRelayState = 0u; UINT8 dsQRelayState = 0u; UINT8 dsHRelayState = 0u; UINT8 byPassRelayState = 0u; + UINT8 EnableBypassRelayState = 0u; UINT16 ocConnetDataDevNum = 0u; UINT16 LxrelayId = 0u; UINT16 YxrelayId = 0u; @@ -10764,6 +10783,7 @@ void ConnectLineRelayToDevStateProc(void) dsQRelayId = GetSwitchDsQRelayId(devId); dsHRelayId = GetSwitchDsHRelayId(devId); byPassRelayId = GetSwitchByPassRelayId(devId); + EnableByPassRelayId = GetSwitchEnableBypassRelayId(devId); /*继电器状态*/ dbRelayState = GetRelayCollState(dbRelayId); @@ -10772,6 +10792,7 @@ void ConnectLineRelayToDevStateProc(void) dsQRelayState = GetRelayCollState(dsQRelayId); dsHRelayState = GetRelayCollState(dsHRelayId); byPassRelayState = GetRelayCollState(byPassRelayId); + EnableBypassRelayState = GetRelayCollState(EnableByPassRelayId); if (DEV_IS_THIS_LINE_NO == devIsThisLine) { @@ -10796,13 +10817,21 @@ void ConnectLineRelayToDevStateProc(void) /*设置道岔单独位置*/ SetSingleSwitchCurPosition(devId, SWITCH_POSITION_FANWEI); } + else if ((RELAY_STATE_DOWN == dbRelayState) && (RELAY_STATE_DOWN == fbRelayState)) + { + /*适配迪士尼联络线处理,道岔四开处理成移动中。wyd 20260316*/ + /*设置道岔移动中*/ + SetSwitchCurPosition(devId, SWITCH_POSITION_MOVE); + /*设置道岔单独位置*/ + SetSingleSwitchCurPosition(devId, SWITCH_POSITION_MOVE); + } else { + /*定表和反表均有效,异常场景,将道岔设置为四开*/ /*设置道岔四开*/ SetSwitchCurPosition(devId, SWITCH_POSITION_SIKAI); /*设置道岔单独位置*/ SetSingleSwitchCurPosition(devId, SWITCH_POSITION_SIKAI); - } } /*旁路继电器大于0*/ @@ -10821,6 +10850,19 @@ void ConnectLineRelayToDevStateProc(void) } } + if ((0u < EnableByPassRelayId) && (RELAY_STATE_UP == EnableBypassRelayState)) + { + /*反位使能旁路继电器吸起,将道岔设置为四开*/ + /*设置道岔四开*/ + SetSwitchCurPosition(devId, SWITCH_POSITION_SIKAI); + /*设置道岔单独位置*/ + SetSingleSwitchCurPosition(devId, SWITCH_POSITION_SIKAI); + } + else + { + /*无反位使能旁路继电器,或继电器落下,不处理*/ + } + /*单锁不为0*/ if (0u != dsRelayId) { @@ -10920,6 +10962,7 @@ void UpdateConnectDriveRelayOutput(void) UINT8 localCiId = 0u; UINT8 belongCi = 0u; UINT8 devState = 0u; /*设备状态*/ + UINT8 OverrideState = 0u; /*联络线旁路状态*/ UINT8 signalColor = 0u; UINT16 ocConnetDataDevNum = 0u; UINT8 switchBypassState = 0U; /*本线路道岔旁路状态*/ @@ -11026,13 +11069,12 @@ void UpdateConnectDriveRelayOutput(void) /*本线路*/ if (DEV_IS_THIS_LINE_YES == devIsThisLine) { - /*获取区段当前采集状态*/ - devState = GetPhySecCurOccupyState(devId); + devState = GetDisneyGJDriveState(devId); + OverrideState = GetOverrideStateByPhySecId(devId); relayId = GetPhySecGdDrvRelayId(devId); - - if (SECTION_OCCUPY_NO == devState) + if ((CI_SUCCESS == devState) || (CONNECT_OVERRIDE_STATE_YES == OverrideState)) { - /*空闲驱动GJ吸起*/ + /*满足迪士尼GJ吸起条件或旁路已激活,驱动GJ吸起*/ (void)SetRelayDriveState(relayId, RELAY_DRIVE_STATE_UP); } else @@ -11152,6 +11194,140 @@ void UpdateConnectDriveRelayOutput(void) } } +/* +* 功能描述: 迪士尼GJ继电器驱动判断 +* 参数说明: const UINT16 wPhySecId 物理区段ID +* 返回值 : CI_SUCCESS:GJ吸起 CI_ERROR:GJ落下 +*/ +static UINT8 GetDisneyGJDriveState(UINT16 wPhySecId) +{ + UINT8 chStartFLockTag = CI_START_FLOCK_ERROR; /*上电封锁标志*/ + UINT8 chStartLockTag = CI_START_LOCK_ERROR; /*上电锁闭标志*/ + UINT8 PhySecFLockState = 0u; /*区段封锁状态*/ + UINT8 LogSecOccupyState = 0u; /*逻辑区段占用状态*/ + UINT8 wLogSecSum = 0u; /*物理区段包含逻辑区段数量*/ + UINT16 *pLogSecIdBuf = NULL; /*物理区段包含逻辑区段ID*/ + UINT8 i = 0u; /*循环变量*/ + UINT8 j = 0u; /*循环变量*/ + UINT8 k = 0u; /*循环变量*/ + UINT8 wEaSum = 0u; /*防护区数量*/ + UINT8 wEaLogSecSum = 0u; /*防护区包含逻辑区段数量*/ + UINT16 *pEaLogSecIdBuf = NULL; /*防护区包含逻辑区段ID*/ + UINT8 retVal = CI_ERROR; /*函数返回值,CI_SUCCESS:GJ吸起 CI_ERROR:GJ落下*/ + UINT8 LogSecGJState = CI_ERROR; /*逻辑区段GJ驱动状态,CI_SUCCESS:GJ可以吸起 CI_ERROR:GJ需要落下*/ + + wLogSecSum = GetPhySecIncLogSecSum(wPhySecId); + pLogSecIdBuf = GetPhySecIncLogSecIdBuf(wPhySecId); + + if ((NULL == pLogSecIdBuf) || (0u == wLogSecSum)) + { + /*异常,GJ继电器落下*/ + } + else + { + /*获取上电封锁锁闭状态,物理区段封锁状态*/ + chStartFLockTag = GetStartFLockFlag(); + chStartLockTag = GetStartLockFlag(); + PhySecFLockState = GetPhySecFLockState(wPhySecId); + + /*判断是否封锁解锁*/ + if ((CI_START_FLOCK_NO == chStartFLockTag) + && (CI_START_LOCK_NO == chStartLockTag) + && (PHYSICAL_SECTION_FLOCK_NO == PhySecFLockState)) + { + /*已上电解封解锁,物理区段未封锁,继续检查*/ + /*获取防护区数量*/ + wEaSum = GetEaNum(); + /*遍历每个逻辑区段,判断是否有防护区*/ + for (i = 0u; i < wLogSecSum; i++) + { + /*逻辑区段GJ状态先置为可吸起*/ + LogSecGJState = CI_SUCCESS; + /*获取逻辑区段占用状态*/ + LogSecOccupyState = GetLogSecOccupyState(pLogSecIdBuf[i]); + if (LOGICSECTION_OCCUPY_NO == LogSecOccupyState) + { + /*逻辑区段出清,继续判断防护区。遍历所有防护区*/ + for (j = 0u; j < wEaSum; j++) + { + /*获取防护区包含逻辑区段*/ + wEaLogSecSum = EaGetLogNum(j); + pEaLogSecIdBuf = EaGetLogId(j); + /*异常防护*/ + if ((NULL == pEaLogSecIdBuf) || (0u == wEaLogSecSum)) + { + /*落下*/ + LogSecGJState = CI_ERROR; + } + else + { + /*遍历防护区逻辑区段是否为当前逻辑区段,是的话要求落下GJ*/ + for (k = 0u; k < wEaLogSecSum; k++) + { + if (pEaLogSecIdBuf[k] == pLogSecIdBuf[i]) + { + /*落下*/ + LogSecGJState = CI_ERROR; + SetErrorData(EFUNC_GetDisneyGJDriveState, CI_DEVICE_TYPE_LOGICSEC, + pLogSecIdBuf[i], ETYPE_LOGSEC_EA_BUILD, CI_ERROR, ESEND_LEVEL_ZERO);/*记录故障码*/ + break; + } + else + { + /*继续遍历*/ + } + } + } + + if (CI_SUCCESS == LogSecGJState) + { + /*继续遍历*/ + } + else + { + break; + } + } + } + else + { + /*区段占用,落下GJ*/ + LogSecGJState = CI_ERROR; + SetErrorData(EFUNC_GetDisneyGJDriveState, CI_DEVICE_TYPE_LOGICSEC, + pLogSecIdBuf[i], ETYPE_PS_MERGY_OCU_STATE, CI_ERROR, ESEND_LEVEL_ZERO);/*记录故障码*/ + } + + if (CI_SUCCESS == LogSecGJState) + { + /*继续遍历*/ + } + else + { + break; + } + } + + if (CI_SUCCESS == LogSecGJState) + { + /*逻辑区段和物理区段检查条件都通过,返回GJ继电器吸起*/ + retVal = CI_SUCCESS; + } + else + { + /*GJ继电器落下*/ + } + } + else + { + /*GJ继电器落下*/ + SetErrorData(EFUNC_GetDisneyGJDriveState, CI_DEVICE_TYPE_PHYSEC, + wPhySecId, ETYPE_PS_FLOCK_STATE, CI_ERROR, ESEND_LEVEL_ZERO);/*记录故障码*/ + } + } + + return retVal; +} + /* * 功能描述: 设置联络线道岔定反表继电器驱动状态 * 参数说明: const UINT16 devId 设备ID @@ -13079,6 +13255,8 @@ void VirtualEsbLogicProcess(void) UINT16 EssFlashMaskIdFlag = ESS_MASK_NO; /*Ess稳灯码位配置标志*/ UINT8 esbSetState = 0U; UINT8 chEsbbVirtualAttribute = 0U; + UINT16 wRelateLnk = 0U; + UINT16 wRelatePhySec = 0U; esbCurSum = GetEsbSum(); /*获取esb数量*/ localCiId = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ @@ -13116,7 +13294,15 @@ void VirtualEsbLogicProcess(void) } /*进行虚拟ESB状态更新*/ (void)SetEsbState(esbId, esbSetState); - + /*适配迪士尼虚拟封锁区段*/ + if (ESB_STATE_VALID_YES == esbSetState) + { + wRelateLnk = GetEsbRelateLinkId(esbId); + wRelatePhySec = GetLinkRelatedPhySec(wRelateLnk); + /*封锁对应区段*/ + (void)SetPhySecFLockState(wRelatePhySec, PHYSICAL_SECTION_FLOCK_YES); + SetPhySecFLockType(wRelatePhySec, SEC_FLOCK_TYPE_ESB); + } } else { @@ -14298,6 +14484,331 @@ void SGBJDriveOutputProc(void) } } +/* +* 功能描述:SSKS闪灯稳灯输出处理 +* 参数说明:void +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksFlashSteadyLightOutputProc(void) +{ + UINT16 wSsksLightRelaySum = 0U; /*SSKS闪灯稳灯继电器数量*/ + SsksLightRelayCfgDataStruct* pStrSsksLightRelayCfg = NULL; /*SSKS闪灯稳灯继电器静态数据*/ + UINT16 ii = 0U; + UINT8 cEnterRouteLockFlag = 0U; /*驶入存车线进路锁闭标志*/ + UINT8 cExportRouteLockFlag = 0U; /*驶出存车线进路锁闭标志*/ + + wSsksLightRelaySum = GetSsksLightRelaySum(); /*获取SSKS闪灯稳灯继电器信息*/ + pStrSsksLightRelayCfg = GetSsksLightRelayCfgStr(); + if ((0U < wSsksLightRelaySum) && (NULL != pStrSsksLightRelayCfg)) + { + for (ii = 0U; ii < wSsksLightRelaySum; ii++) + { + /*根据驶入存车线进路状态,更新“驶入存车线进路锁闭标志”和“延时驱稳灯起始周期”*/ + SsksRelEnterRouteFlagProc(pStrSsksLightRelayCfg[ii].SsksLightRelayId, pStrSsksLightRelayCfg[ii].cRelEnterRouteNum, pStrSsksLightRelayCfg[ii].szRelEnterRouteId); + + /*根据驶出存车线进路状态,更新“驶出存车线进路锁闭标志”*/ + SsksRelExportRouteFlagProc(pStrSsksLightRelayCfg[ii].SsksLightRelayId, pStrSsksLightRelayCfg[ii].cRelExportRouteNum, pStrSsksLightRelayCfg[ii].szRelExportRouteId); + + /*根据“驶入存车线进路锁闭标志”和“驶出存车线进路锁闭标志”,设置SSKS闪灯稳灯继电器驱动状态*/ + cEnterRouteLockFlag = GetSsksEnterRouteLockFlag(pStrSsksLightRelayCfg[ii].SsksLightRelayId); + cExportRouteLockFlag = GetSsksExportRouteLockFlag(pStrSsksLightRelayCfg[ii].SsksLightRelayId); + if ((SSKS_LIGHT_ROUTE_LOCK_NO != cEnterRouteLockFlag) || (SSKS_LIGHT_ROUTE_LOCK_NO != cExportRouteLockFlag)) + { + /*“驶入存车线进路锁闭标志”或“驶出存车线进路锁闭标志”有效,设置SSKS闪灯稳灯继电器驱动状态为落下*/ + (void)SetRelayDriveState(pStrSsksLightRelayCfg[ii].SsksLightRelayId, RELAY_DRIVE_STATE_DOWN); + } + else + { + /*“驶入存车线进路锁闭标志”和“驶出存车线进路锁闭标志”均无效,设置SSKS闪灯稳灯继电器驱动状态为吸起*/ + (void)SetRelayDriveState(pStrSsksLightRelayCfg[ii].SsksLightRelayId, RELAY_DRIVE_STATE_UP); + } + } + } + else + { + /*无SSKS闪灯稳灯继电器,不处理*/ + } +} + +/* +* 功能描述:SSKS关联驶入存车线进路标志处理 +* 参数说明:UINT16 wRelayId SSKS闪灯稳灯继电器ID +* UINT8 cEnterRouteNum 驶入存车线进路数量 +* UINT16 szEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX] 驶入存车线进路ID数组 +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksRelEnterRouteFlagProc(UINT16 wRelayId, UINT8 cEnterRouteNum, UINT16 szEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]) +{ + UINT16 wRelayIndex = 0U; + UINT8 ii = 0U; + UINT8 cRouteState = 0U; /*进路状态*/ + UINT32 dwCurCycNum = 0U; /*当前周期号*/ + UINT32 dwCurSteadyLightDelayStartCyc = 0U; /*延时驱稳灯起始周期*/ + UINT32 dwOverTimeCount = 0U; /*延时驱稳灯超时判断周期数*/ + UINT8 cTimeCheckFlag = 0U; + UINT8 cKeepWorkFlag = FLAG_UNSET; + UINT8 cIdleRouteNum = 0U; /*空闲的进路数量*/ + UINT8 cFuncRet = CI_ERROR; + + wRelayIndex = GetRelayConfigBufIndex(wRelayId); + + if ((RELAY_SUM_MAX > wRelayId) && ((SSKS_LIGHT_RELAY_ROUTE_MAX >= cEnterRouteNum) && (NULL != szEnterRouteId))) + { + for (ii = 0U; ii < cEnterRouteNum; ii++) + { + cRouteState = GetRouteState(szEnterRouteId[ii]); /*获取进路状态*/ + if ((ROUTE_STATE_YUXIAN_OPEN == cRouteState) || (ROUTE_STATE_NEAR_OPEN == cRouteState)) + { + /*进路信号开放,设置“驶入存车线进路锁闭标志”有效、设置“延时驱稳灯起始周期”为0*/ + SetSsksEnterRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_YES); + SetSsksSteadyLightDelayStartCyc(wRelayId, 0U); + cKeepWorkFlag = FLAG_SET; /*停止遍历*/ + } + else if ((ROUTE_STATE_AUTO_UNLOCK == cRouteState) || (ROUTE_STATE_NEAR_LOCK == cRouteState)) + { + cFuncRet = CheckRouteLastPSUnlockAndIdle(szEnterRouteId[ii]); /*检查存车线(进路最后一个区段)的上一个区段是否空闲且解锁*/ + if (CI_SUCCESS == cFuncRet) + { + /*存车线的上一个区段空闲且解锁,刷新“延时驱稳灯起始周期”*/ + dwCurCycNum = Get2oo2CurCycleNum(); + SetSsksSteadyLightDelayStartCyc(wRelayId, dwCurCycNum); /*此处直接设置即可,该函数内部有进行重复刷新周期号的防护*/ + } + else + { + /*不处理*/ + } + + /*根据“延时驱稳灯起始周期”是否超时,更新“驶入存车线进路锁闭标志”*/ + dwCurSteadyLightDelayStartCyc = GetSsksSteadyLightDelayStartCyc(wRelayId); + dwOverTimeCount = GetSsksSteadyLightDelayCount(); + cTimeCheckFlag = SystemOverTimeCheck(dwCurSteadyLightDelayStartCyc, dwOverTimeCount); + if (CI_TIME_OUT == cTimeCheckFlag) + { + /*“延时驱稳灯起始周期”超时,设置“驶入存车线进路锁闭标志”无效、设置“延时驱稳灯起始周期”为0*/ + SetSsksEnterRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_NO); + SetSsksSteadyLightDelayStartCyc(wRelayId, 0U); + } + else + { + /*不处理*/ + } + } + else if (ROUTE_STATE_IDLE == cRouteState) + { + cIdleRouteNum++; /*空闲的进路数量加1*/ + } + else + { + /*其它场景:根据“延时驱稳灯起始周期”是否超时,更新“驶入存车线进路锁闭标志”*/ + dwCurSteadyLightDelayStartCyc = GetSsksSteadyLightDelayStartCyc(wRelayId); + dwOverTimeCount = GetSsksSteadyLightDelayCount(); + cTimeCheckFlag = SystemOverTimeCheck(dwCurSteadyLightDelayStartCyc, dwOverTimeCount); + if (CI_TIME_OUT == cTimeCheckFlag) + { + /*“延时驱稳灯起始周期”超时,设置“驶入存车线进路锁闭标志”无效、设置“延时驱稳灯起始周期”为0*/ + SetSsksEnterRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_NO); + SetSsksSteadyLightDelayStartCyc(wRelayId, 0U); + } + else + { + /*不处理*/ + } + } + + if (FLAG_SET == cKeepWorkFlag) + { + break; /*存在进路开放,停止检查*/ + } + else + { + /*继续检查其它进路状态*/ + } + } + + if ((0U < cEnterRouteNum) && (cIdleRouteNum == cEnterRouteNum)) + { + /*所有进路均空闲,设置“驶入存车线进路锁闭标志”无效、设置“延时驱稳灯起始周期”为0*/ + SetSsksEnterRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_NO); + SetSsksSteadyLightDelayStartCyc(wRelayId, 0U); + } + else + { + /*不处理*/ + } + } + else + { + /*入参非法,不处理*/ + } +} + +/* +* 功能描述:检查进路内方最后一个物理区段的上一个区段是否空闲且解锁 +* 参数说明:UINT16 wRouteId 进路ID +* 返 回 值:0 失败(区段锁闭或占用) +* 1 成功(区段未锁闭且空闲) +* Created By LQ 2026.03.11 +*/ +UINT8 CheckRouteLastPSUnlockAndIdle(UINT16 wRouteId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 cPhySecNum = 0U; /*进路包含的物理区段数量*/ + RoutePhysicalSectionStruct* pstrRouteSectionData = NULL; /*进路包含的物理区段信息*/ + UINT16 wStartSignalId = 0U; /*进路始端信号机ID*/ + UINT16 wPrePhySecId = 0U; /*进路内方最后一个物理区段的上一个物理区段ID*/ + UINT8 cPhySecIncLogSecNum = 0U; /*物理区段包含的逻辑区段数量*/ + UINT16* pPhySecIncLogSecId = NULL; /*物理区段包含的逻辑区段ID*/ + UINT8 ii = 0U; + UINT8 cMerOccState = 0U; /*区段占用状态*/ + UINT8 cLockState = 0U; /*区段锁闭状态*/ + + wBufIndex = GetRouteConfigBufIndex(wRouteId); + cPhySecNum = GetRoutePhysicalSectionSum(wRouteId); + pstrRouteSectionData = GetRouteSectionData(wRouteId); + if ((ROUTE_SUM_MAX > wBufIndex) && (0U < cPhySecNum) && (NULL != pstrRouteSectionData)) + { + if (1U < cPhySecNum) + { + /*进路内方物理区段数量大于1,则进路内方倒数第二个物理区段即为最后一个物理区段的上一个物理区段*/ + wPrePhySecId = pstrRouteSectionData[cPhySecNum - 2U].PhysicalSectionId; + } + else + { + /*进路内方物理区段数量为1,则进路始端信号机外方第一物理区段即为最后一个物理区段的上一个物理区段*/ + wStartSignalId = GetRouteStartSignalId(wRouteId); + wPrePhySecId = GetSignalOutFirstPhySecId(wStartSignalId); + } + + cPhySecIncLogSecNum = GetPhySecIncLogSecSum(wPrePhySecId); + pPhySecIncLogSecId = GetPhySecIncLogSecIdBuf(wPrePhySecId); + + if ((0U != cPhySecIncLogSecNum) && (NULL != pPhySecIncLogSecId)) + { + for (ii = 0U; ii < cPhySecIncLogSecNum; ii++) + { + cMerOccState = GetLogSecCurOccupyState(pPhySecIncLogSecId[ii]); /*获取逻辑区段占用状态*/ + cLockState = GetLogSecLockState(pPhySecIncLogSecId[ii]); /*获取逻辑区段锁闭状态*/ + if ((SECTION_OCCUPY_NO == cMerOccState) && (LOG_SECTION_LOCK_NO == cLockState)) + { + /*逻辑区段空闲且未锁闭,继续检查*/ + } + else + { + break; /*停止遍历*/ + } + } + + if (ii == cPhySecIncLogSecNum) + { + cRetVal = CI_SUCCESS; /*所有逻辑区段均空闲且未锁闭,返回成功*/ + } + else + { + cRetVal = CI_ERROR; /*返回失败*/ + } + } + else + { + /*返回失败*/ + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回失败*/ + } + + return cRetVal; +} + +/* +* 功能描述:SSKS关联驶出存车线进路标志处理 +* 参数说明:UINT16 wRelayId SSKS闪灯稳灯继电器ID +* UINT8 cExportRouteNum 驶出存车线进路数量 +* UINT16 szExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX] 驶出存车线进路ID数组 +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksRelExportRouteFlagProc(UINT16 wRelayId, UINT8 cExportRouteNum, UINT16 szExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]) +{ + UINT16 wRelayIndex = 0U; + UINT8 ii = 0U; + UINT8 cRouteState = 0U; /*进路1状态*/ + UINT16 wStartSigId = 0U; /*进路始端信号机ID*/ + UINT16 wInFstPhySecId = 0U; /*进路内方第一物理区段ID*/ + UINT16 wInFstPhySecOccState = 0U; /*进路内方第一物理区段融合占用状态*/ + UINT16 wOutFstPhySecId = 0U; /*进路外方第一物理区段ID*/ + UINT16 wOutFstPhySecOccState = 0U; /*进路外方第一物理区段融合占用状态*/ + UINT8 cKeepWorkFlag = FLAG_UNSET; + UINT8 cIdleRouteNum = 0U; /*空闲的进路数量*/ + + wRelayIndex = GetRelayConfigBufIndex(wRelayId); + + if ((RELAY_SUM_MAX > wRelayId) && ((SSKS_LIGHT_RELAY_ROUTE_MAX >= cExportRouteNum) && (NULL != szExportRouteId))) + { + for (ii = 0U; ii < cExportRouteNum; ii++) + { + cRouteState = GetRouteState(szExportRouteId[ii]); /*获取进路状态*/ + if ((ROUTE_STATE_YUXIAN_OPEN == cRouteState) || (ROUTE_STATE_NEAR_OPEN == cRouteState)) + { + /*进路信号开放,设置“驶出存车线进路锁闭标志”有效*/ + SetSsksExportRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_YES); + cKeepWorkFlag = FLAG_SET; /*停止遍历*/ + } + else if (ROUTE_STATE_NEAR_LOCK == cRouteState) + { + wStartSigId = GetRouteStartSignalId(szExportRouteId[ii]); /*获取进路始端信号机*/ + wInFstPhySecId = GetSignalInFirstPhySecId(wStartSigId, 0U); /*获取进路内方第一物理区段*/ + wInFstPhySecOccState = GetPhySecCurMergeState(wInFstPhySecId); + wOutFstPhySecId = GetSignalOutFirstPhySecId(wStartSigId); /*获取进路外方第一物理区段*/ + wOutFstPhySecOccState = GetPhySecCurMergeState(wOutFstPhySecId); + if ((SECTION_OCCUPY_YES == wInFstPhySecOccState) && (SECTION_OCCUPY_NO == wOutFstPhySecOccState)) + { + /*列车完全驶入进路内方,设置“驶出存车线进路锁闭标志”无效*/ + SetSsksExportRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_NO); + } + else + { + /*列车未完全驶入进路内方,维持上周期“驶出存车线进路锁闭标志”*/ + } + } + else if (ROUTE_STATE_IDLE == cRouteState) + { + /*进路空闲或未配置驶出进路,设置“驶出存车线进路锁闭标志”无效*/ + cIdleRouteNum++; + } + else + { + /*其它场景,维持上周期“驶出存车线进路锁闭标志”*/ + } + + if (FLAG_SET == cKeepWorkFlag) + { + break; /*存在进路开放,停止检查*/ + } + else + { + /*继续检查其它进路状态*/ + } + } + + if ((0U < cExportRouteNum) && (cIdleRouteNum == cExportRouteNum)) + { + /*所有进路均空闲,设置“驶出存车线进路锁闭标志”无效*/ + SetSsksExportRouteLockFlag(wRelayId, SSKS_LIGHT_ROUTE_LOCK_NO); + } + else + { + /*不处理*/ + } + } + else + { + /*入参非法,不处理*/ + } +} /* * 功能描述: 设置继电器驱动起始周期 @@ -15725,49 +16236,81 @@ void EsbNXRailDisplayDrivOutput(const UINT16 wEsbId) * 参数说明:无 * 返 回 值:无 * Created By LQ 2025.05.23 +* Modify fan 2025.12.16:迪士尼线异常打开修改为CT停准停稳才非异常打开,虚拟PSD同理 */ void PsdExceptOpenProc(void) { UINT16 wPsdCurNum = 0U; /*PSD数量*/ UINT16 ii = 0U; UINT16 wPsdId = 0U; /*屏蔽门ID*/ - UINT8 cPsdVirtualAttr = 0U; /*虚拟属性*/ UINT8 cPsdMutualLockRemoveState = 0U; /*PSD互锁解除状态*/ UINT8 cPsdState = 0U; /*PSD开关门状态*/ UINT16 wPsdRelPhySecId = 0U; /*PSD所处物理区段ID*/ UINT8 cPhySecMerOccState = 0U; /*站台轨融合占用状态*/ - + UINT8 chSteadyFlag = 0U; + UINT8 utOrCtOccFlag = LOGICSECTION_OCCUPY_UT; + UINT8 chExceptOpenFlag = FLAG_SET; + UINT8 chStartFlock = CI_START_FLOCK_YES; wPsdCurNum = GetPsdSum(); + chStartFlock = GetStartFLockFlag(); for (ii = 0U; ii < wPsdCurNum; ii++) { wPsdId = GetPsdId(ii); - cPsdVirtualAttr = GetPsdVirtualAttribute(wPsdId); /*获取PSD虚拟属性*/ - if (PSD_VIRTUAL_ATTR_NO == cPsdVirtualAttr) + chExceptOpenFlag = FLAG_SET; + cPsdMutualLockRemoveState = GetPsdMutualLockRemoveState(wPsdId); /*获取PSD互锁解除状态*/ + wPsdRelPhySecId = GetPsdRelatedPhySecId(wPsdId); + if (0U < wPsdRelPhySecId) { - cPsdMutualLockRemoveState = GetPsdMutualLockRemoveState(wPsdId); /*获取PSD互锁解除状态*/ if (PSD_MUTUALLOCK_REMOVE_NO == cPsdMutualLockRemoveState) { cPsdState = GetPsdState(wPsdId); /*获取PSD开关门状态*/ - wPsdRelPhySecId = GetPsdRelatedPhySecId(wPsdId); cPhySecMerOccState = GetPhySecCurMergeState(wPsdRelPhySecId); if ((PSD_STATE_OPEN == cPsdState) && (SECTION_OCCUPY_YES != cPhySecMerOccState)) { - SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_YES); /*PSD打开且未占用,设置PSD异常打开*/ + /*异常打开*/ + chExceptOpenFlag = FLAG_SET; + } + else if (PSD_STATE_CLOSE == cPsdState) + { + /*未打开*/ + chExceptOpenFlag = FLAG_UNSET; } else { - SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*设置PSD未异常打开*/ + chSteadyFlag = GetPhySecStopSteadyFlag(wPsdRelPhySecId); + utOrCtOccFlag = GetPhySecPreOccState(wPsdRelPhySecId); + if ((PHYSICAL_SECTION_STOPSTEADY_YES == chSteadyFlag) && (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag)) + { + chExceptOpenFlag = FLAG_UNSET; + } + else + { + /*除CT停准停稳以外其他情况:异常打开*/ + chExceptOpenFlag = FLAG_SET; + } } } else - { - SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*互锁解除,设置PSD未异常打开*/ + { + chExceptOpenFlag = FLAG_UNSET; } - } - else - { - SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*虚拟PSD,设置PSD未异常打开*/ - } + /*设备物理区段封锁及关联屏蔽门ID*/ + if (FLAG_UNSET == chExceptOpenFlag) + { + SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*互锁解除或CT停稳,设置PSD未异常打开*/ + } + else + { + SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_YES); /*PSD异常打开*/ + } + } + } + + /*更新站台门异常打开状态*/ + if (CI_START_FLOCK_NO == chStartFlock) + { + /* 全站解封状态才可以进行区段站台门异常打开封锁状态设置 */ + PsdRelayToSecFlockStatus(); } } @@ -16442,4 +16985,454 @@ UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId) } return cRetVal; +} + +/* +* 功能描述: 更新接触网状态 +* 参数说明: void +* 返回值 : 无 +*/ +void OhlRelayToDeviceStateProc(void) +{ + UINT16 ii = 0u; /*游标*/ + UINT8 jj = 0u; /*游标*/ + UINT16 wOhlSum = 0u; /*接触网总数*/ + UINT16 wOhlId = 0u; /*接触网ID*/ + UINT8 chOhlRelayGroup = 0u; /*接触网继电器组数*/ + UINT16* wOhlEnergyIdBuf = NULL; /*接触网有电继电器ID*/ + UINT16* wOhlDeEnergyIdBuf = NULL; /*接触网断电继电器ID*/ + UINT8 energyCollState = 0U; /*有电继电器采集状态*/ + UINT8 deEnergyCollState = 0U; /*断电继电器采集状态*/ + UINT8 energizedFlag = 0u; /*接触网有电标志*/ + UINT8 deEnergizedFlag = 1u; /*接触网无电标志*/ + UINT32 curCycNum = 0u; + UINT32 ohlDeEnerCyc = 0u; /*接触网断电周期*/ + UINT32 ohlUnknowCyc = 0u; /*接触网未知周期*/ + UINT32 ohlNoelecTolerateTime = 0u; /*接触网断电状态容忍周期数(配置值)*/ + UINT32 ohlUnknowTolerateTime = 0u; /*接触网未知状态容忍周期数(配置值)*/ + UINT8 timeState = 0u; + UINT8 chLocalCiId = 0U; /*本地联锁ID*/ + UINT8 devBlongCiId = 0U; /*设备所属联锁ID*/ + + chLocalCiId = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ + wOhlSum = GetOhlCurSum(); + curCycNum = Get2oo2CurCycleNum(); + ohlNoelecTolerateTime = GetOhlNoelecTolerateTime(); + ohlUnknowTolerateTime = GetOhlUnknowTolerateTime(); + for (ii = 0u; ii < wOhlSum; ii++) + { + energizedFlag = 0u; /*接触网有电标志*/ + deEnergizedFlag = 1u; /*接触网无电标志*/ + wOhlId = GetOhlId(ii); + devBlongCiId = GetOhlBelongCiId(wOhlId); /*获取设备所属联锁ID*/ + + if ((0u != wOhlId) && (0U != chLocalCiId) && (chLocalCiId == devBlongCiId)) + { + chOhlRelayGroup = GetOhlGroupSum(wOhlId); /*继电器组数*/ + wOhlEnergyIdBuf = GetOhlEnergizedIdBuf(wOhlId);/*有电继电器ID序列*/ + wOhlDeEnergyIdBuf = GetOhlDeEnergizedIdBuf(wOhlId);/*断电继电器ID序列*/ + + for (jj = 0u; jj < chOhlRelayGroup; jj++) + { + energyCollState = GetRelayCollState(wOhlEnergyIdBuf[jj]); + deEnergyCollState = GetRelayCollState(wOhlDeEnergyIdBuf[jj]); + + if ((RELAY_STATE_UP == energyCollState) && (RELAY_STATE_DOWN == deEnergyCollState)) + {/*只要有一组有电继电器吸起,断电继电器落下,即接触网有电*/ + energizedFlag = 1u; + deEnergizedFlag = 0u; + } + else if ((RELAY_STATE_DOWN == energyCollState) && (RELAY_STATE_UP == deEnergyCollState)) + {/*需要所有组的有电继电器落下,断电继电器吸起,即接触网无电*/ + deEnergizedFlag = deEnergizedFlag & 1u; + } + else + {/*其他组合,即接触网未知*/ + deEnergizedFlag = 0u; + } + } + + if (1u == energizedFlag) + {/*接触网当前有电*/ + SetOhlPowerState(wOhlId, OHL_POWER_ENERGIZED);/*设置为有电*/ + SetOhlDeEnerCycNum(wOhlId, 0u); /*清除无电起始周期*/ + SetOhlUnknowCycNum(wOhlId, 0u); /*清除未知起始周期*/ + } + else if (1u == deEnergizedFlag) + {/*接触网当前无电*/ + ohlDeEnerCyc = GetOhlDeEnerCycNum(wOhlId); + if (0u == ohlDeEnerCyc) + {/*设置无电起始周期*/ + SetOhlDeEnerCycNum(wOhlId, curCycNum); + } + SetOhlUnknowCycNum(wOhlId, 0u); /*清除未知起始周期,未知转无电需要重新记录周期*/ + } + else + {/*接触网当前未知*/ + ohlUnknowCyc = GetOhlUnknowCycNum(wOhlId); + if (0u == ohlUnknowCyc) + {/*设置未知起始周期*/ + SetOhlUnknowCycNum(wOhlId, curCycNum); + } + SetOhlDeEnerCycNum(wOhlId, 0u); /*清除无电起始周期,无电转未知需要重新记录周期*/ + } + + ohlDeEnerCyc = GetOhlDeEnerCycNum(wOhlId); + timeState = SystemOverOrEqualTimeCheck(ohlDeEnerCyc, ohlNoelecTolerateTime);/*达到配置值*/ + if (CI_TIME_OUT == timeState) + {/*超时*/ + SetOhlPowerState(wOhlId, OHL_POWER_DE_ENERGIZED); /*设置接触网无电*/ + } + else + {/*不处理*/ + } + + ohlUnknowCyc = GetOhlUnknowCycNum(wOhlId); + timeState = SystemOverOrEqualTimeCheck(ohlUnknowCyc, ohlUnknowTolerateTime);/*达到配置值*/ + if (CI_TIME_OUT == timeState) + {/*超时*/ + SetOhlPowerState(wOhlId, OHL_POWER_UNKNOW); /*设置接触网未知*/ + } + else + {/*不处理*/ + } + } + else + { + /*指处理本联锁*/ + } + } +} + +/* +* 功能描述: 处理迪士尼屏蔽门互锁解除继电器状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void DsnPsdMutualLockStateUpdate(const UINT16 doorId) +{ + UINT16 psdMutualLockRelayId = 0u;/*互锁解除继电器ID*/ + UINT32 dwCurCyc = 0U;/*当前周期号*/ + UINT8 chLocalCi = 0U; + UINT8 chRelayBelongCi = 0U; + UINT8 cPsdState = PSD_STATE_CLOSE; /*屏蔽门状态*/ + UINT8 chPressWorkTimeCheck = 0u; + UINT8 chPressErrTimeCheck = 0u; + UINT8 chCutTimeCheck = 0u;/*有效时间判断*/ + UINT32 dwMutualLockWaitMaxTime = 0U;/*采集有效判断时间*/ + UINT32 dwBtnErrMaxTime = 0U;/*持续采集判断粘连时间*/ + UINT32 dwPsdRemoveMaxTime = 0U;/*最大有效时间*/ + UINT32 dwMutualLockPressCyc = 0U;/*采集起始时间*/ + UINT32 dwPsdRemoveStartTime = 0U;/*起效时间*/ + UINT32 dwMutualLockErrPressCyc = 0U;/*故障采集起始时间*/ + UINT16 vobcId = 0U;/*关联列车*/ + UINT8 chTrainCmd = 0U; + UINT8 chErrDownState = 0U;/*通信异常导致故障落下状态*/ + dwCurCyc = Get2oo2CurCycleNum(); + chLocalCi = GetSystemParaLocalCiId(); + + /*只处理迪士尼*/ + if(PSD_SUM_MAX > doorId) + { + psdMutualLockRelayId = GetPsdMutualLockRelayId(doorId); + chRelayBelongCi = GetRelayBelongCiId(psdMutualLockRelayId); + if (chLocalCi == chRelayBelongCi) + { + /***** 1.旁路按钮采集状态记录 *****/ + PsdDsnPsdCutBtnPressStateProc(doorId, psdMutualLockRelayId); + + /***** 2.处理旁路按钮状态 *****/ + cPsdState = GetPsdState(doorId); /*获取PSD状态*/ + dwMutualLockWaitMaxTime = GetMutuaLockCollTimeCount(); + dwBtnErrMaxTime = GetMutuaLockBtnErrTimeCount(); + dwPsdRemoveMaxTime = GetMutuaLockUsableTimeCount(); + dwMutualLockPressCyc = GetPsdMutualLockCollStartCyc(doorId); + dwPsdRemoveStartTime = GetPsdMutualLockStartCyc(doorId); + /*采集有效检查*/ + chPressWorkTimeCheck = SystemOverTimeCheck(dwMutualLockPressCyc, dwMutualLockWaitMaxTime); + /*采集有超时检查*/ + chPressErrTimeCheck = SystemOverTimeCheck(dwMutualLockPressCyc, dwBtnErrMaxTime); + /*故障落下检查*/ + chErrDownState = GetPsdMutualLockErrDownState(doorId); + if ((CI_TIME_OUT == chPressWorkTimeCheck) && (CI_TIME_IN == chPressErrTimeCheck)&&(PSD_BTN_ERROR_FLAG_NO==chErrDownState)) + { + /*按下有效未超时*/ + if ((0U == dwPsdRemoveStartTime)&&(PSD_STATE_OPEN == cPsdState)) + { + /*屏蔽门开门 当前未旁路 开始有效计时*/ + (void)SetPsdMutualLockRemoveState(doorId, PSD_MUTUALLOCK_REMOVE_YES); + SetPsdMutualLockStartCyc(doorId, dwCurCyc); + } + else + { + ;/*旁路有效计时处理见步骤3*/ + } + } + else if ((CI_TIME_OUT == chPressErrTimeCheck)||(PSD_BTN_ERROR_FLAG_YES == chErrDownState)) + { + /*故障按下超时或OC通信异常*/ + if (CI_TIME_OUT == chPressErrTimeCheck) + { + /*粘连 取消旁路 设置按钮故障*/ + SetPsdMutualLockErrState(doorId, PSD_BTN_ERROR_FLAG_YES); + } + /*未按下旁路按钮或者按下超时:设置未旁路*/ + SetPsdMutualLockStartCyc(doorId, 0U); + SetPsdMutualLockRemoveState(doorId, PSD_MUTUALLOCK_REMOVE_NO); + } + else + { + ;/*当前未按下旁路或未按下到有效时间: 维持既有存在旁路状态或未旁路状态*/ + } + /*处理故障采集与OC通信异常;正常采集与故障采集不同时设置*/ + dwMutualLockErrPressCyc = GetPsdMutualLockErrCollCyc(doorId); + chPressErrTimeCheck = SystemOverTimeCheck(dwMutualLockErrPressCyc, dwBtnErrMaxTime); + if (CI_TIME_OUT == chPressErrTimeCheck) + { + /*粘连 取消旁路 设置按钮故障*/ + SetPsdMutualLockErrState(doorId, PSD_BTN_ERROR_FLAG_YES); + /*设置未旁路*/ + SetPsdMutualLockStartCyc(doorId, 0U); + SetPsdMutualLockRemoveState(doorId, PSD_MUTUALLOCK_REMOVE_NO); + } + else + { + ;/*不处理*/ + } + + /***** 3.处理旁路有效状态 *****/ + dwPsdRemoveStartTime = GetPsdMutualLockStartCyc(doorId); + /*旁路有效计时判断*/ + chCutTimeCheck = SystemOverTimeCheck(dwPsdRemoveStartTime, dwPsdRemoveMaxTime); + if (0U < dwPsdRemoveStartTime) + { + /*存在既有旁路*/ + vobcId = GetPsdVobcId(doorId); + chTrainCmd = GetPsdVobcCmd(doorId); + /*存在列车开门命令 或有效计时不满足*/ + if (((0U < vobcId) && (VOBCTOCI_COMMAND_TYPE_PSDOPEN == chTrainCmd)) + ||(CI_TIME_IN != chCutTimeCheck)) + { + /*未旁路*/ + SetPsdMutualLockStartCyc(doorId, 0U); + SetPsdMutualLockRemoveState(doorId, PSD_MUTUALLOCK_REMOVE_NO); + } + else + { + ;/*维持有效状态及计时*/ + } + } + else + { + /*未旁路*/ + SetPsdMutualLockRemoveState(doorId, PSD_MUTUALLOCK_REMOVE_NO); + } + } + else + { + ; /*不处理*/ + } + } + else + { + ;/*不处理*/ + } +} + +/* +* 功能描述:迪士尼屏蔽门旁路按钮按下状态处理 +* 参数说明:const UINT16 wPsbId ID +* const UINT16 wMutualLockRelayId 旁路按钮采集继电器ID +* 返回值 :无 +* Created By fan 2025.12.17 +*/ +void PsdDsnPsdCutBtnPressStateProc(const UINT16 wPsdId, const UINT16 wMutualLockRelayId) +{ + UINT16 wIdIndex = 0U; /*数组下标*/ + UINT16 wRelayIdIndex = 0U; /*继电器数组下标*/ + UINT8 cCutRelayCollState = 0U; /*采集继电器状态*/ + UINT32 dwCutBtnPressCycNum = 0U; /*旁路按钮按下周期*/ + UINT32 dwCurCycNum = 0U; /*当前周期*/ + UINT8 cPsdState = PSD_STATE_CLOSE; /*屏蔽门状态*/ + UINT32 dwCutBtnErrPressCycNum = 0U; /*旁路按钮故障按下周期*/ + UINT8 chPsdMutualLockState = 0U; + UINT16 wRelayBelongOcId = 0U; /*继电器所属OC*/ + UINT8 cOcCommState = TRANSMIT_STATE_BAD; /*与OC通信状态*/ + UINT8 cABoardState = RELAY_BOARD_FAULT_YES; /*A系板卡状态*/ + UINT8 cBBoardState = RELAY_BOARD_FAULT_YES; /*B系板卡状态*/ + wIdIndex = GetPsdConfigBufIndex(wPsdId); + wRelayIdIndex = GetRelayConfigBufIndex(wIdIndex); + + if ((PSD_SUM_MAX > wIdIndex) && (wRelayIdIndex < RELAY_SUM_MAX)) + { + cCutRelayCollState = GetRelayCollState(wMutualLockRelayId); /*获取旁路按钮继电器采集状态*/ + if (RELAY_STATE_UP == cCutRelayCollState) + { + /** 继电器吸起,更新旁路按钮正常/误触发按下周期 **/ + cPsdState = GetPsdState(wPsdId); /*获取PSD状态*/ + chPsdMutualLockState = GetPsdMutualLockRemoveState(wPsdId);/*获取屏蔽门互锁解除状态*/ + dwCutBtnPressCycNum = GetPsdMutualLockCollStartCyc(wPsdId); /*获取旁路按钮按下周期*/ + dwCutBtnErrPressCycNum = GetPsdMutualLockErrCollCyc(wPsdId); /*获取旁路按钮故障按下周期*/ + dwCurCycNum = Get2oo2CurCycleNum(); + if ((PSD_MUTUALLOCK_REMOVE_NO == chPsdMutualLockState) && (PSD_STATE_OPEN == cPsdState)) + { + /*门开 未互锁解除*/ + if ((0U == dwCutBtnPressCycNum) && (0U == dwCutBtnErrPressCycNum)) + { + SetPsdMutualLockCollStartCyc(wPsdId, dwCurCycNum); /*记录按下*/ + } + else + { + ;/*不处理*/ + } + } + else + { + /*门关或旁路有效时采集到*/ + if ((0U == dwCutBtnPressCycNum) && (0U == dwCutBtnErrPressCycNum)) + { + SetPsdMutualLockErrCollCyc(wPsdId, dwCurCycNum); /*正常按下和误触发按下不同时存在*/ + } + else + { + /*不处理*/ + } + } + + } + else + { + /** 继电器落下,更新取消PSD盘古采集继电器落下状态 **/ + wRelayBelongOcId = GetRelayBelongOCId(wMutualLockRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*获取与OC通信状态*/ + cABoardState = GetRelayACollBoardState(wMutualLockRelayId); /*获取A系板卡状态*/ + cBBoardState = GetRelayBCollBoardState(wMutualLockRelayId); /*获取B系板卡状态*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*OC通信正常且有一系板卡状态正常,设置继电器正常落下*/ + SetPsdMutualLockErrDownState(wPsdId, PSD_BTN_ERROR_FLAG_NO); + } + else + { + /*OC通信异常或两系板卡状态均故障,设置继电器通信异常落下*/ + SetPsdMutualLockErrDownState(wPsdId, PSD_BTN_ERROR_FLAG_YES); + } + + SetPsdMutualLockCollStartCyc(wPsdId, 0U);/*清除旁路采集落下时间*/ + SetPsdMutualLockErrCollCyc(wPsdId, 0U);/*清除旁路误触发时间*/ + SetPsdMutualLockErrState(wPsdId, PSD_BTN_ERROR_FLAG_NO);/*设置未粘连故障*/ + } + } + else + { + /*入参非法,不处理*/ + } +} + +/* +* 功能描述: 根据PSD状态更新区段的站台门异常打开封锁状态 +* 参数说明: 无 +* 返回值 : 无 +* by fan 20260127 +*/ +void PsdRelayToSecFlockStatus(void) +{ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT16 wPhySecCurSum = 0U;/*区段总数*/ + UINT16 phySectionId = 0U; + UINT8 chBelongCiId = 0U;/*区段所属联锁*/ + UINT8 chLocalCiId = 0U; /*本联锁*/ + UINT8 chLogSecInPhySum = 0U;/*逻辑区段个数*/ + UINT16 *pLogSecInphyBuff = NULL; + UINT8 chPsdOpenCheck = 0U; + wPhySecCurSum = GetTotalPhySecCurNum(); /*获取物理区段总数*/ + chLocalCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ + for (ii = 0u; ii < wPhySecCurSum; ii++) + { + phySectionId = GetPhySecId(ii); /*获取物理区段ID*/ + chBelongCiId = GetPhySecBelongCiId(phySectionId); /*获取物理区段所属联锁ID*/ + /*仅处理本联锁*/ + if (chBelongCiId == chLocalCiId) + { + chLogSecInPhySum = GetPhySecIncLogSecSum(phySectionId); + pLogSecInphyBuff = GetPhySecIncLogSecIdBuf(phySectionId); + for (jj = 0U; jj < chLogSecInPhySum; jj++) + { + chPsdOpenCheck = CheckLogSecOpenPsd(pLogSecInphyBuff[jj]); + if (CI_ERROR == chPsdOpenCheck) + { + /*增加物理区段封锁状态*/ + SetPhySecFLockType(phySectionId, SEC_FLOCK_TYPE_APG); + SetPhySecFLockState(phySectionId, PHYSICAL_SECTION_FLOCK_YES); + break; + } + else + { + ;/*PSD未异常打开 维持既有状态*/ + } + } + } + else + { + ;/*不处理*/ + } + } +} + +/* +* 功能描述: 更新全线紧急停车逻辑状态 +* 参数说明: void +* 返回值 : 0u: 更新失败 +* 1: 更新成功 +* Created By fan 2026.03.10 +*/ +void CesbStateUpdateProc(void) +{ + UINT16 wCesbRelayId = 0U;/*CESB继电器ID*/ + UINT16 wCesbCutRelayId = 0U;/*CESB旁路继电器ID*/ + UINT8 chCesbRelayState = 0U;/*继电器状态*/ + UINT8 chCesbCutRelayState = 0U;/*旁路继电器状态*/ + UINT8 chStartFlock = CI_START_FLOCK_YES; + UINT8 chLocalCiType = GetLocalCiType(); + UINT8 chScxCesbState = 0U;/*试车线CESB激活状态*/ + UINT8 chScxCesbCutState = 0U;/*试车线CESB旁路状态*/ + chStartFlock = GetStartFLockFlag(); + wCesbRelayId = GetCesbRelayId(); + chCesbRelayState = GetRelayCollState(wCesbRelayId); + wCesbCutRelayId = GetCesbCutRelayId(); + chCesbCutRelayState = GetRelayCollState(wCesbCutRelayId); + if (CI_TYPE_SCX == chLocalCiType) + { + chScxCesbState = GetScxCesbCmdState(); + chScxCesbCutState = GetScxCesbCutCmdState(); + if ((CESB_STATE_VALID_YES == chScxCesbState) && (ESB_CUT_NO == chScxCesbCutState) && (CI_START_FLOCK_NO == chStartFlock)) + { + SetAllSecCesbState(CESB_STATE_VALID_YES); /*设置CESB封锁*/ + } + else + { + ;/*维持既有状态*/ + } + } + else + { + /*根据继电器状态设置*/ + if (0U == wCesbRelayId) + { + /*本集中区不具备CESB继电器,试车线根据CESB及CESB旁路命令设置*/ + SetAllSecCesbState(CESB_STATE_VALID_NO); /*设置CESB封锁无效*/ + } + else if ((RELAY_STATE_DOWN == chCesbRelayState) && (RELAY_STATE_DOWN == chCesbCutRelayState) && (CI_START_FLOCK_NO == chStartFlock)) + { + /*未旁路、CESB激活、上电解锁后设置全线CESB封锁*/ + SetAllSecCesbState(CESB_STATE_VALID_YES); /*设置CESB封锁*/ + } + else + { + ;/*维持既有状态*/ + } + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h index a0d2621..59701e4 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h @@ -44,8 +44,10 @@ #include "../WashMachine/WashMachineConfigDataManage.h" #include "../WashMachine/WashMachineDataManage.h" #include "../ParsePack/ParsePackOcData.h" +#include "../OHL/OHLDataManage.h" #include "ReverseCutDataManage.h" #include "ReverseCutConfigDataManage.h" +#include "../SsksLightRelay/SsksLightRelayDefine.h" #ifdef __cplusplus extern "C" { @@ -758,6 +760,43 @@ UINT8 CheckRelayDriveOutTime(const UINT16 wRelayId, const UINT32 dwTimeOutCycCou */ void SGBJDriveOutputProc(void); +/* +* 功能描述:SSKS闪灯稳灯输出处理 +* 参数说明:void +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksFlashSteadyLightOutputProc(void); + +/* +* 功能描述:SSKS关联驶入存车线进路标志处理 +* 参数说明:UINT16 wRelayId SSKS闪灯稳灯继电器ID +* UINT8 cEnterRouteNum 驶入存车线进路数量 +* UINT16 szEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX] 驶入存车线进路ID数组 +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksRelEnterRouteFlagProc(UINT16 wRelayId, UINT8 cEnterRouteNum, UINT16 szEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]); + +/* +* 功能描述:检查进路内方最后一个物理区段的上一个区段是否空闲且解锁 +* 参数说明:UINT16 wRouteId 进路ID +* 返 回 值:0 失败(区段锁闭或占用) +* 1 成功(区段未锁闭且空闲) +* Created By LQ 2026.03.11 +*/ +UINT8 CheckRouteLastPSUnlockAndIdle(UINT16 wRouteId); + +/* +* 功能描述:SSKS关联驶出存车线进路标志处理 +* 参数说明:UINT16 wRelayId SSKS闪灯稳灯继电器ID +* UINT8 cExportRouteNum 驶出存车线进路数量 +* UINT16 szExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX] 驶出存车线进路ID数组 +* 返 回 值:void +* Created By LQ 2025.12.16 +*/ +void SsksRelExportRouteFlagProc(UINT16 wRelayId, UINT8 cExportRouteNum, UINT16 szExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]); + /* * 功能描述: 设置继电器驱动起始周期 * 参数说明: const UINT16 relayId 继电器ID @@ -984,6 +1023,47 @@ UINT8 GetFstDetBtnCollTolerateRet(const UINT16 wSignalId); */ UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId); +/* +* 功能描述: 更新接触网状态 +* 参数说明: void +* 返回值 : 无 +*/ +void OhlRelayToDeviceStateProc(void); + +/* +* 功能描述:迪士尼屏蔽门旁路按钮按下状态处理 +* 参数说明:const UINT16 wPsbId ID +* const UINT16 wMutualLockRelayId 旁路按钮采集继电器ID +* 返回值 :无 +* Created By fan 2025.12.17 +*/ +void PsdDsnPsdCutBtnPressStateProc(const UINT16 wPsdId, const UINT16 wMutualLockRelayId); + +/* +* 功能描述: 处理迪士尼屏蔽门互锁解除继电器状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void DsnPsdMutualLockStateUpdate(const UINT16 doorId); + +/* +* 功能描述: 根据PSD状态更新区段的站台门异常打开封锁状态 +* 参数说明: 无 +* 返回值 : 无 +* by fan 20260127 +*/ +void PsdRelayToSecFlockStatus(void); + +/* +* 功能描述: 更新全线紧急停车逻辑状态 +* 参数说明: void +* 返回值 : 0u: 更新失败 +* 1: 更新成功 +* Created By fan 2026.03.10 +*/ +void CesbStateUpdateProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.c b/TSCP/src/APP/ciapp/IO/InputDataProcess.c index 493ded8..823aacf 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.c @@ -23,6 +23,8 @@ #include "NonAutoReturnDataManage.h" #include "../IO/DeviceRelayDataProcess.h" #include "MSCP_APP_API.h" +#include "ParsePackGateWayData.h" +#include "SwitchDefine.h" extern PlatformToCiDataStruct platformToCiDataStru[PLATFORM_TO_CI_SUM_MAX]; /*引用站台门与CI通信数据结构体*/ extern unsigned long TimeStamp = 0u; @@ -235,6 +237,69 @@ static void VobcBackUpConnectDataProc(VobcBackUpToCiDataStruct* vobcToCiDataStru * fan 20240815 */ static void BackupStopSteadyDataProc(VobcBackUpToCiDataStruct* vobcToCiDataStru); +/** +* @brief ATS解封解锁首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AllJieFengJieSuoAtsCmdFst(void); +/** +* @brief 全站解封解锁二次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AllJieFengJieSuoAtsCmdSnd(void); +/** +* @brief ATS全线解封解锁主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AllJieFengJieSuoCmdProc(void); +/** +* @brief ATS道岔强转首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdFst(void); +/** +* @brief 道岔强转二次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdSnd(void); +/** +* @brief ATS道岔强扳命令主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdProc(void); +/** +* @brief ATS计轴预复位首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdFst(void); +/** +* @brief 计轴预复位命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdSnd(void); +/** +* @brief ATS计轴预复位主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdProc(void); /* * 功能描述: 处理输入数据 * 参数说明: void @@ -246,10 +311,12 @@ void InputDataProcess(void) UINT8 localCiPattern = GetLocalCiPattern(); UINT8 chSwitch = 0u; UINT8 cRcWorkMode = 0U; + UINT8 cDsnFuncSwitch = 0U; /*迪士尼功能开关*/ signed long long cost[20] = {0U}; chSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH); cRcWorkMode = GetLocalRcWorkMode(); + cDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); cost[0] = MSCP_GetTick(); #if (kPLATFORM==kVXWORKS) @@ -285,6 +352,16 @@ void InputDataProcess(void) /*处理OC到CI数据*/ ProcessOcToCiData(); } + + if ((CI_TYPE_SCX == localCiType) && (FUNC_SWITCH_ON == cDsnFuncSwitch)) + { + /*DSN试车线试车状态处理*/ + DsnScxStateProc(); + } + else + { + /*不处理*/ + } #endif cost[1] = MSCP_GetTick(); @@ -368,7 +445,18 @@ void InputDataProcess(void) else { ; - } + } + + if ((CI_TYPE_SCX == localCiType) && (FUNC_SWITCH_ON == cDsnFuncSwitch)) + { + /*DSN试车线,根据列车安全位置更新物理区段采集占用状态*/ + DsnScxPhySecColOccProc(); + } + else + { + /*不处理*/ + } + /** 包络管理*/ elm_MainProcess(); @@ -424,12 +512,31 @@ void InputDataProcess(void) /*车辆段处理*/ (void)ProcessAtsOrXianDiToCiDataCld(); } - (void)UpdataAtsDeviceCommState(); (void)ProcessAtsOrXDToCiReturnToTRCmd();/*处理涉及相邻联锁的信号特开命令*/ /*cgh-合并CID-3037-1 处理虚拟ESB相关状态*/ VirtualEsbLogicProcess(); + + /*全线区段封锁命令处理 */ + AllSecFlockCmdProc(); + + /*CESB封锁命令处理 */ + CancleCesbFlockCmdProc(); + + /*区段封锁融合处理 */ + SectionFlockMergeLogicProc(); + + /*ATS网关下发解封解锁处理*/ + AllJieFengJieSuoCmdProc(); + /*ATS网关下发道岔强转处理*/ + AtsSwitchForceCmdProc(); + /*ATS网关下发计轴预复位处理*/ + AtsPhyPreResetCmdProc(); + + /*联络线旁路处理*/ + ConnectOverrideMainProc(); + cost[8] = MSCP_GetTick(); debug_infor_printf((const)"\n OutnetProcess :%dms ProcessAxleToCiData:%dms ProcessVobcBackupToCiData :%dms ProcessDeviceLogicState:%dms TrainMainProc:%dms as_MainProcess:%dms ssp_MainProcess:%dms VirtualEsbLogicProcess:%dms \n",(cost[1]-cost[0])/1000,(cost[2]-cost[1])/1000,(cost[3]-cost[2])/1000,(cost[4]-cost[3])/1000,(cost[5]-cost[4])/1000,(cost[6]-cost[5])/1000, (cost[7] - cost[6]) / 1000, (cost[8] - cost[7]) / 1000); } @@ -1577,6 +1684,7 @@ void ProcessTmcToTiocData(void) UINT8* deviceIdBuf = NULL; UINT8 ii = 0u; UINT8 cTransState = 0U; /*与TMC通信状态*/ + UINT8 cHLHTHeadCtxValid = 0U; /*互联互通有效性*/ /*手动更新TMC通信状态*/ cLocalTiocId = GetSystemParaLocalCiId(); @@ -1593,12 +1701,13 @@ void ProcessTmcToTiocData(void) cTransState = GetCiTransmitState(CI_SYSTEM_TYPE_TMC, deviceIdBuf[0]); /*RC仅与一个TMC通信*/ - if (TRANSMIT_STATE_GOOD == cTransState) + cHLHTHeadCtxValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_TMC, deviceIdBuf[0]); + if (CI_SUCCESS == cHLHTHeadCtxValid) { /*与TMC通信正常,不处理*/ } else - { + {/*消息有效*/ ClearLineCommTrainData(); /*与TMC通信中断,清除本地存储的全线通信车信息*/ } } @@ -1618,14 +1727,14 @@ void ProcessTmcToTiocData(void) if (NULL != pTmcInputData) { if (0x55u == pTmcInputData->tsrInputInfoStru.cTsrValidFlag) - { + {/*临时限速信息有效(TMC已上电确认)*/ /* 取消限速确认 */ if (CI_TSR_SURE_YES != cTsrSureFlag) { SetTsrSureFlag(CI_TSR_SURE_YES); } /* 收到TMC发送的临时限速有效信息,更新临时限速 */ - cRetVal = SetLocalTsrData(pTmcInputData->tsrInputInfoStru.cTsrSum, pTmcInputData->tsrInputInfoStru.szTsrInfo, pTmcInputData->tsrInputInfoStru.cAllLineTsrState, pTmcInputData->tsrInputInfoStru.cAllLineTsrSpeed); + cRetVal = SetLocalSpeedLimitData(pTmcInputData->tsrInputInfoStru.cTsrSum, pTmcInputData->tsrInputInfoStru.tmcTsrInfo, pTmcInputData->tsrInputInfoStru.cAllLineTsrState, pTmcInputData->tsrInputInfoStru.cAllLineTsrSpeed, pTmcInputData->tsrInputInfoStru.tsdsInputInfoStru); } else { @@ -1672,14 +1781,27 @@ void ProcessTmcToTiocData(void) { /*不处理*/ } - - /*处理全线通信车信息*/ + if (CI_SUCCESS == cRetVal) { if (0x55U == pTmcInputData->tsrInputInfoStru.cTsrValidFlag) { /*更新全线通信车信息*/ ProcessLineCommTrainData(pTmcInputData->cLineCtNum, pTmcInputData->szLineCtId); + + /*更新全线牵引加速度信息*/ + SetAllLineAccelerationState(pTmcInputData->cAllLineAccelerationState); + SetAllLineAccelerationValue(pTmcInputData->cAllLineAccelerationValue); + + /*更新区间牵引加速度信息*/ + SetLocalAreaAccelerationInfo(pTmcInputData->cAreaAccelerationNum, pTmcInputData->szAreaAccelerationInfo); + + /*更新全线制动率信息*/ + SetAllLineBrakeRateState(pTmcInputData->cAllLineBrakeRateState); + SetAllLineBrakeRateValue(pTmcInputData->cAllLineBrakeRateValue); + + /*更新区间制动率信息*/ + SetLocalAreaBrakeRateInfo(pTmcInputData->cAreaBrakeRateNum, pTmcInputData->szAreaBrakeRateInfo); } else { @@ -2638,6 +2760,41 @@ UINT8 ProcessAtsOrXianDiToCiData(void) ReleaseCtrlPower(virCiID, CONTRAL_POWER_NO, CmdDeviceId, cmdDevType);/*未解封之前,也可以释放联锁控制权*/ SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, 0u, 0u, virCiID); } + /*迪士尼解封解锁命令*/ + else if (ATS_CMD_UNLOCK_STARTSTATE_ONE == cmdType) + { + + + /*反馈命令收到信息*/ + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, cmdType, RESPONSE_FIRST, AFFIRM_SUCCESS, virCiID); + + ClearCiRevCmdData();/*清空CI接收命令数据队列*/ + + return CI_SUCCESS; + } + else if (ATS_CMD_UNLOCK_STARTSTATE_TWO == cmdType) + { + checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, cmdType, virCiID); + if (CI_SUCCESS == checkRetVal) + { + /*全站解封*/ + SetStartFLockUnLockLogicManage(); + + /*上电解锁*/ + SetStartupUnLockLogicManage(); + + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, cmdType, RESPONSE_SECOND, AFFIRM_SUCCESS, virCiID); + } + else + { + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, cmdType, RESPONSE_SECOND, AFFIRM_FAIL, virCiID); + } + + + ClearCiRevCmdData();/*清空CI接收命令数据队列*/ + + return CI_SUCCESS; + } else { continue; @@ -4205,8 +4362,39 @@ UINT8 ProcessAtsOrXianDiToCiData(void) /*清空一次确认命令ID*/ SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, AFFIRM_FAIL, virCiID); } + break; + case ATS_CMD_PROHIBIT_FAO: + /*禁止FAO进入逻辑区段命令*/ + LogSecProhibitFAOManage(LOGSEC_PROHIBIT_FAO_YES, cLogSecSum, pLogSecIdBuff); + break; + case ATS_CMD_CANCEL_PROHIBIT_FAO: + /*取消禁止FAO进入逻辑区段命令*/ + LogSecProhibitFAOManage(LOGSEC_PROHIBIT_FAO_NO, cLogSecSum, pLogSecIdBuff); + break; + case ATS_CMD_OHL_BYPASS: + /*接触网旁路命令*/ + OhlBypassManage(CmdDeviceId, OHL_BYPASS_YES); + break; + case ATS_CMD_CANCEL_OHL_BYPASS: + /*接触网取消旁路命令*/ + OhlBypassManage(CmdDeviceId, OHL_BYPASS_NO); + break; + case ATS_CMD_ECS_USE_START: + /*ECS自动触发启用命令*/ + EcsAutoTrigCmdPro(1U, ECS_AUTOTRIG_YES); /*DSN当前仅一个控区、一个ECS,默认设置ID为1的ECS*/ + break; + case ATS_CMD_ECS_USE_STOP: + /*ECS自动触发停用命令*/ + EcsAutoTrigCmdPro(1U, ECS_AUTOTRIG_NO); /*DSN当前仅一个控区、一个ECS,默认设置ID为1的ECS*/ + break; + case ATS_CMD_LOGSECTION_FLOCK_SET: + /*逻辑区段封锁命令*/ + LogSecFlockCmdSetManage(cLogSecSum, pLogSecIdBuff); + break; + case ATS_CMD_LOGSECTION_FLOCK_CANCLE: + /*逻辑区段解封命令*/ + LogSecFlockCmdCancleManage(cLogSecSum, pLogSecIdBuff); break; - default: cFunRetVal = VirtualDevCmdProc(CmdDeviceId, AtsOrXianDiToCiCmdStru[ii].CommandType);/*试车线虚拟设备状态处理*/ if (CI_ERROR == cFunRetVal) @@ -5443,6 +5631,22 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) /*释放联锁控制权*/ ReleaseCtrlPower(virCiID, CONTRAL_POWER_NO, CmdDeviceId, cmdDevType); break; + case ATS_CMD_PROHIBIT_FAO: + /*禁止FAO进入逻辑区段命令*/ + LogSecProhibitFAOManage(LOGSEC_PROHIBIT_FAO_YES, cLogSecSum, pLogSecIdBuff); + break; + case ATS_CMD_CANCEL_PROHIBIT_FAO: + /*取消禁止FAO进入逻辑区段命令*/ + LogSecProhibitFAOManage(LOGSEC_PROHIBIT_FAO_NO, cLogSecSum, pLogSecIdBuff); + break; + case ATS_CMD_OHL_BYPASS: + /*接触网旁路命令*/ + OhlBypassManage(CmdDeviceId, OHL_BYPASS_YES); + break; + case ATS_CMD_CANCEL_OHL_BYPASS: + /*接触网取消旁路命令*/ + OhlBypassManage(CmdDeviceId, OHL_BYPASS_NO); + break; default: { SetCiSendCmdBackInfoData(CI_BACK_INVALID_CMD,0u,0u,0u,AtsToCiCmdStru[ii].CommandType);/*无效命令反馈*/ @@ -5625,6 +5829,13 @@ void MergeAxleOcGdPhyState(void) UINT8 localCiId = 0u; UINT8 axisGdState = SECTION_OCCUPY_YES; UINT8 ocGdState = SECTION_OCCUPY_YES; + UINT8 cLocalCiType = 0U; /*集中区类型*/ + UINT8 cDsnFuncSwitch = 0U; /*迪士尼功能开关*/ + UINT8 cTrainTestStatus = 0U; /*试车线试车状态*/ + + cLocalCiType = GetLocalCiType(); + cDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + cTrainTestStatus = GetCiTrainTestStatus(); for (ii = 0u; ii < GetPhySecCurSum(); ii++) { phyId = GetPhySecId(ii); @@ -5632,37 +5843,56 @@ void MergeAxleOcGdPhyState(void) localCiId = GetSystemParaLocalCiId(); if (belongCiId == localCiId) { - axisGdState = GetPhySecCurAxisGdOccupyState(phyId); - - ocGdState = GetPhySecCurOcGdOccupyState(phyId); - - if ((SECTION_OCCUPY_FAULT != axisGdState) && (SECTION_OCCUPY_FAULT != ocGdState)) - {/*计轴采集的轨道状态和oc采集的轨道状态都不是故障态,做融合*/ - if (axisGdState == ocGdState) + if ((CI_TYPE_SCX == cLocalCiType) && (FUNC_SWITCH_ON == cDsnFuncSwitch)) + { + /*DSN试车线无计轴通信,需对物理区段采集占用状态进行特殊处理*/ + if (CI_TRAIN_TEST_ON == cTrainTestStatus) { - SetPhySecCurOccupyState(phyId, ocGdState); + /*试车期间周期设置空闲存在以下问题: + 1.物理区段采集占用起始周期会周期先清零、再根据通信车安全位置占用更新,列车连续占用删ARB功能将无法使用,但DSN试车线无法出现ARB,故对功能无影响。 + 2.列车安全位置覆盖的物理区段的之前采集占用状态每周期会更新两次,在进路和保护区段跨控区的一些异常场景下,保护区段锁闭会受影响,但DSN不存在进路和保护区段跨控区的场景,故对功能无影响。 + 3.计轴区段采集占用起始周期会周期先清零、再根据通信车安全位置占用更新,但此变量当前暂未使用,故对功能无影响。*/ + SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_NO); /*试车中,设置物理区段采集占用状态为空闲*/ } else - {/*不一致,设占用*/ - SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); + { + SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); /*未试车,设置物理区段采集占用状态为占用*/ } } - else if ((SECTION_OCCUPY_FAULT == axisGdState) && (SECTION_OCCUPY_FAULT != ocGdState)) - {/*计轴采集轨道状态故障,oc采集不故障,采信oc*/ - SetPhySecCurOccupyState(phyId, ocGdState); - } - else if ((SECTION_OCCUPY_FAULT != axisGdState) && (SECTION_OCCUPY_FAULT == ocGdState)) - {/*计轴采集轨道状态不故障,oc采集故障,采信计轴*/ - SetPhySecCurOccupyState(phyId, axisGdState); - } - else if ((SECTION_OCCUPY_FAULT == axisGdState) && (SECTION_OCCUPY_FAULT == ocGdState)) - {/*计轴采集轨道状态故障,oc采集故障,都不采信,设占用*/ - SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); - } else { - /*这种情况不存在*/ - SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); + axisGdState = GetPhySecCurAxisGdOccupyState(phyId); + + ocGdState = GetPhySecCurOcGdOccupyState(phyId); + + if ((SECTION_OCCUPY_FAULT != axisGdState) && (SECTION_OCCUPY_FAULT != ocGdState)) + {/*计轴采集的轨道状态和oc采集的轨道状态都不是故障态,做融合*/ + if (axisGdState == ocGdState) + { + SetPhySecCurOccupyState(phyId, ocGdState); + } + else + {/*不一致,设占用*/ + SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); + } + } + else if ((SECTION_OCCUPY_FAULT == axisGdState) && (SECTION_OCCUPY_FAULT != ocGdState)) + {/*计轴采集轨道状态故障,oc采集不故障,采信oc*/ + SetPhySecCurOccupyState(phyId, ocGdState); + } + else if ((SECTION_OCCUPY_FAULT != axisGdState) && (SECTION_OCCUPY_FAULT == ocGdState)) + {/*计轴采集轨道状态不故障,oc采集故障,采信计轴*/ + SetPhySecCurOccupyState(phyId, axisGdState); + } + else if ((SECTION_OCCUPY_FAULT == axisGdState) && (SECTION_OCCUPY_FAULT == ocGdState)) + {/*计轴采集轨道状态故障,oc采集故障,都不采信,设占用*/ + SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); + } + else + { + /*这种情况不存在*/ + SetPhySecCurOccupyState(phyId, SECTION_OCCUPY_YES); + } } } } @@ -5808,6 +6038,9 @@ void ProcessDeviceLogicState(void) /*倒切设备继电器处理*/ RvrsCutRlyToDvicSttPrc(); } + + /*接触网处理*/ + OhlRelayToDeviceStateProc(); } @@ -7878,11 +8111,14 @@ static UINT8 RouteReturnToThroughCondCheck(const UINT16 signalId,UINT8* toCiId) UINT16 nextRouteId = 0u; /*下一个进路*/ UINT8 returnRouteIdBelongCiId = 0u; UINT8 throughRouteIdBelongCiId = 0u; + UINT8 returnRouteDirection = 0u; UINT16 reRouteNormalLockPhy = 0u; UINT8 phyMergeState = 0u; UINT16 nextRouteLockPhy = 0u; - UINT16 wEndSignalId = 0U;/*折返进路的终端信号机*/ - UINT16 wStartSignalId = 0U;/*待信号特开进路的始端信号机*/ + UINT8 nextRouteDirection = 0u; + UINT8 haveDirChangeAfterRoute = 0u; + UINT8 haveDirChangeInRoute = 0u; + if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX)) { retVal = CI_ERROR; @@ -7906,8 +8142,6 @@ static UINT8 RouteReturnToThroughCondCheck(const UINT16 signalId,UINT8* toCiId) returnRouteId = GetPhySecRLockBelongRouteId(signalOutSecId); nextRouteId = GetPhySecRLockBelongRouteId(signalInSecId); - wEndSignalId = GetRouteEndSignalId(returnRouteId);/*获取终端信号机*/ - wStartSignalId = GetRouteStartSignalId(nextRouteId);/*待办理信号特开的进路始端信号机*/ throughRouteId = GetRouteThroughRouteId(returnRouteId); returnRouteIdBelongCiId = GetRouteBelongCiId(returnRouteId); throughRouteIdBelongCiId = GetRouteBelongCiId(throughRouteId); @@ -7935,9 +8169,32 @@ static UINT8 RouteReturnToThroughCondCheck(const UINT16 signalId,UINT8* toCiId) /*下一进路第一区段锁闭*/ if (PHYSICAL_SECTION_LOCK_NORMAL == nextRouteLockPhy) { - - /*信号机正确*/ - if(wEndSignalId == wStartSignalId) + /*获取锁闭进路*/ + nextRouteDirection = GetRouteDirection(nextRouteId); + returnRouteDirection = GetRouteDirection(returnRouteId); + + haveDirChangeAfterRoute = GetRouteHaveDirChangePointAfter(returnRouteId); + haveDirChangeInRoute = GetRouteHaveDirChangePointIn(returnRouteId); + + /*进路后方或进路内存在方向变化点*/ + if((ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeAfterRoute) || + (ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeInRoute)) + { + if(CI_SYSTEM_DIRECTION_UP == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_DOWN; + } + else if(CI_SYSTEM_DIRECTION_DOWN == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_UP; + } + else + { + /*不做处理*/ + } + } + /*方向相同*/ + if(nextRouteDirection == returnRouteDirection) { if(0u != throughRouteId) {/*returnRouteId和throughRouteId都不等于0u,说明returnRouteId确实是折返进路,throughRouteId是通过进路,且此时折返还未变成通过进路*/ @@ -7991,16 +8248,18 @@ static UINT8 RouteReturnToThroughCmdProc(const UINT16 signalId,const UINT8 fromC UINT8 returnRouteState = 0u; UINT8 returnRouteIdBelongCiId = 0u; UINT8 throughRouteIdBelongCiId = 0u; + UINT8 returnRouteDirection = 0u; UINT16 reRouteNormalLockPhy = 0u; UINT8 phyMergeState = 0u; UINT16 nextRouteLockPhy = 0u; UINT16 lockPhyBelongRoute = 0u; + UINT8 nextRouteDirection = 0u; + UINT8 haveDirChangeAfterRoute = 0u; + UINT8 haveDirChangeInRoute = 0u; UINT8 saveReRouteDir = 0u; UINT8 throughRouteDir = 0u; UINT16 wLastLgcSecId = 0U; UINT8 chTrainSum = 0u; - UINT16 wEndSignalId = 0U;/*折返进路的终端信号机*/ - UINT16 wStartSignalId = 0U;/*待信号特开进路的始端信号机*/ LogicTrainResStruct * pstLgcResInfo = NULL; LogicTrainResStruct stTmpResInfo[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; @@ -8027,8 +8286,6 @@ static UINT8 RouteReturnToThroughCmdProc(const UINT16 signalId,const UINT8 fromC returnRouteId = GetPhySecRLockBelongRouteId(signalOutSecId); nextRouteId = GetPhySecRLockBelongRouteId(signalInSecId); throughRouteId = GetRouteThroughRouteId(returnRouteId); - wEndSignalId = GetRouteEndSignalId(returnRouteId); - wStartSignalId = GetRouteStartSignalId(nextRouteId); returnRouteIdBelongCiId = GetRouteBelongCiId(returnRouteId); throughRouteIdBelongCiId = GetRouteBelongCiId(throughRouteId); @@ -8056,11 +8313,34 @@ static UINT8 RouteReturnToThroughCmdProc(const UINT16 signalId,const UINT8 fromC { /*获取锁闭进路*/ lockPhyBelongRoute = GetPhySecRLockBelongRouteId(signalInSecId); - saveReRouteDir = GetRouteDirection(returnRouteId);/*保存进路实际方向*/ + nextRouteDirection = GetRouteDirection(lockPhyBelongRoute); + returnRouteDirection = GetRouteDirection(returnRouteId); throughRouteDir = GetRouteDirection(throughRouteId); /*折返进路对应的通过进路方向*/ - /*检查信号机一致*/ - if(wEndSignalId == wStartSignalId) + haveDirChangeAfterRoute = GetRouteHaveDirChangePointAfter(returnRouteId); + haveDirChangeInRoute = GetRouteHaveDirChangePointIn(returnRouteId); + + saveReRouteDir = returnRouteDirection; /*保存进路实际方向*/ + + /*进路后方或进路内存在方向变化点*/ + if((ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeAfterRoute) || + (ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeInRoute) ) + { + if(CI_SYSTEM_DIRECTION_UP == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_DOWN; + } + else if(CI_SYSTEM_DIRECTION_DOWN == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_UP; + } + else + { + /*不做处理*/ + } + } + /*方向相同*/ + if(nextRouteDirection == returnRouteDirection) { /*清除折返进路*/ returnRouteState = GetRouteState(returnRouteId); @@ -8131,7 +8411,7 @@ static UINT8 VirtualDevCmdProc(const UINT16 devId,const UINT8 CMDType) UINT8 esbVirtualAttribute = GetEsbVirtualAttribute(devId); UINT8 spksVirtualAttribute = GetSpksVirtualAttribute(devId); - if ((0u < devId) && (0u < CMDType)) + if (0u < CMDType) { if (CI_TYPE_SCX == localCiType) {/*试车线联锁*/ @@ -8176,6 +8456,9 @@ static UINT8 VirtualDevCmdProc(const UINT16 devId,const UINT8 CMDType) if (PSD_VIRTUAL_ATTR_YES == psdVirtualAttribute) { cRetVal = SetPsdMutualLockRemoveState(devId, PSD_MUTUALLOCK_REMOVE_NO); + SetPsdMutualLockErrState(devId, PSD_BTN_ERROR_FLAG_NO); + SetPsdMutualLockStartCyc(devId, 0U); + SetPsdMutualLockCollStartCyc(devId, 0U); } break; case SCX_ATS_CMD_ESB_PRESS:/*ESB按下*/ @@ -8207,6 +8490,22 @@ static UINT8 VirtualDevCmdProc(const UINT16 devId,const UINT8 CMDType) cRetVal = CI_SUCCESS; } break; + case SCX_ATS_CMD_CESB_ACTIVE_YES:/*CESB按下*/ + SetScxCesbCmdState(CESB_STATE_VALID_YES); + cRetVal = CI_SUCCESS; + break; + case SCX_ATS_CMD_CESB_ACTIVE_NO:/*CESB取消*/ + SetScxCesbCmdState(CESB_STATE_VALID_NO); + cRetVal = CI_SUCCESS; + break; + case SCX_ATS_CMD_CESB_CUT_YES: /*CESB旁路有效*/ + SetScxCesbCutCmdState(ESB_CUT_YES); + cRetVal = CI_SUCCESS; + break; + case SCX_ATS_CMD_CESB_CUT_NO: /*CESB未旁路*/ + SetScxCesbCutCmdState(ESB_CUT_NO); + cRetVal = CI_SUCCESS; + break; case SCX_ATS_CMD_AUTO_RETURN_SET:/*设置无人折返*/ SetVirtualZDZFButtonState(VIRTUAL_ZDZFAJ_BUTTON_YES); cRetVal = CI_SUCCESS; @@ -8271,7 +8570,7 @@ static UINT8 VirtualDevCmdCiIdCheck(const UINT16 devId, const UINT8 CMDType) localCi = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ - if ((0u < devId) && (0u < CMDType)) + if (0u < CMDType) { switch (CMDType) { @@ -8293,6 +8592,10 @@ static UINT8 VirtualDevCmdCiIdCheck(const UINT16 devId, const UINT8 CMDType) break; case SCX_ATS_CMD_AUTO_RETURN_SET:/*设置无人折返*/ case SCX_ATS_CMD_AUTO_RETURN_CANCEL:/*取消无人折返*/ + case SCX_ATS_CMD_CESB_ACTIVE_YES:/*激活CESB*/ + case SCX_ATS_CMD_CESB_ACTIVE_NO:/*恢复CESB*/ + case SCX_ATS_CMD_CESB_CUT_YES:/*激活CESB旁路*/ + case SCX_ATS_CMD_CESB_CUT_NO:/*恢复CESB旁路*/ cRetVal = CI_SUCCESS; /*无设备ID,无需去检查控区*/ break; case SCX_ATS_CMD_SPKS_PRESS:/*SPKS按下*/ @@ -10125,6 +10428,8 @@ static void IvocInputRefreshTrain(const VobcToCiDataStruct stIvocToCiData) SetTrainRrmRqst(wTrainId, stIvocToCiData.chRrmReq); SetTrainAtsLgcStation(wTrainId, stIvocToCiData.wNextStation); SetTrainDerailment(wTrainId, stIvocToCiData.chDerailment); + SetTrainIntegrityState(wTrainId, stIvocToCiData.chIntegrityState); + SetTrainEscapeDoorState(wTrainId, stIvocToCiData.chEscapeDoorState); SetHeadAxisId(wTrainId, stIvocToCiData.wHeadAxisId); SetHeadITEResult(wTrainId, stIvocToCiData.wHeadITEResult); SetTailAxisId(wTrainId, stIvocToCiData.wTailAxisId); @@ -10771,14 +11076,14 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) SetTrainReportState(wTrainId, 0U); /*列车通信中断时,清除列车汇报状态为0*/ SetTrainDerailment(wTrainId, TRAIN_DERAIL_NO); + SetTrainIntegrityState(wTrainId, TRAIN_INTEGRITY_NOT_LOST); + SetTrainEscapeDoorState(wTrainId, TRAIN_ESCAPE_DOOR_NOT_OPEN); /*通信中断设置区间疏散命令状态为无效*/ SetTrainEaCmdState(wTrainId, TRAIN_EA_CMD_STATE_INVALID); /*通信中断设置向后跳跃未申请和序列号为0*/ SetTrainJumpBackApplyState(wTrainId, TRAIN_JUMP_BACK_STATE_INVALID); SetTrainJumpBackApplySN(wTrainId, 0U); - - SetTrainFlyProStartCycNum(wTrainId, 0U); /*通信中断后,清除飞车起始周期号*/ } } @@ -12464,12 +12769,8 @@ void ProcessOcToCiRelayDiffData(void) UINT8 cBoardStateOther = RELAY_BOARD_FAULT_YES; /*对系板卡状态初始化为故障*/ UINT8 PosValue_ForProcess = 0u; /*采集继电器当前地址的采集点数值:吸起、落下*/ UINT8 PosValue_ForProcessOther = 0u; /*采集继电器对系地址的采集点数值:吸起、落下*/ - UINT32 pointTolerateCyc = 0u; /*点位不一致容忍周期*/ - UINT8 timeState = 0U; - UINT32 curCycNum = 0u; IODiffDataStruct* pTempIODiffData = NULL; /*记录点位采集不一致*/ - curCycNum = Get2oo2CurCycleNum(); (void)CommonMemSet(&IODiffDataStru, (UINT32)((OC_SUM_MAX) * sizeof(IODiffDataStruct)), 0U, (UINT32)((OC_SUM_MAX) * sizeof(IODiffDataStruct))); /*先清空结构体*/ gDiffDataOcNum = 0u; @@ -12503,44 +12804,21 @@ void ProcessOcToCiRelayDiffData(void) if (PosValue_ForProcess != PosValue_ForProcessOther) { - /*不一致进行容忍*/ - pointTolerateCyc = GetPointTolerateCycNum(ocId, j, k);/*该点位容忍周期*/ - timeState = SystemOverTimeCheck(pointTolerateCyc, POINTTOLERATE_CYCNUM); - if (CI_TIME_NO == timeState) /*未计时,无容忍*/ - {/*设置当前周期*/ - SetPointTolerateCycNum(ocId, j, k, curCycNum); - debug_infor_printf((const)"IO Compare Diff Tolerate CycleNum = %d\n", curCycNum); - } - else if (CI_TIME_IN == timeState)/*容忍中*/ - {/*不处理*/ - } - else - { - /*点位采集不一致容忍超时,记录*/ - pTempIODiffData[i].OcId = (UINT8)ocId; /*OC ID*/ - pTempIODiffData[i].LocalBoardAdd[pTempIODiffData[i].DiffPointNum] = BoardAddress_ForProcess;/*点位对应的板卡地址*/ - pTempIODiffData[i].OtherBoardAdd[pTempIODiffData[i].DiffPointNum] = BoardAddress_ForProcessOther;/*对系板卡地址*/ - pTempIODiffData[i].TheDiffPoint[pTempIODiffData[i].DiffPointNum] = k + 1u;/*不一致的点位*/ - pTempIODiffData[i].DiffPointNum++; /*点位数量*/ - } - } - else - {/*该点位采集一致,清除容忍周期*/ - SetPointTolerateCycNum(ocId, j, k, 0u); + /*点位采集不一致,记录*/ + pTempIODiffData[i].OcId = (UINT8)ocId; /*OC ID*/ + pTempIODiffData[i].LocalBoardAdd[pTempIODiffData[i].DiffPointNum] = BoardAddress_ForProcess;/*点位对应的板卡地址*/ + pTempIODiffData[i].OtherBoardAdd[pTempIODiffData[i].DiffPointNum] = BoardAddress_ForProcessOther;/*对系板卡地址*/ + pTempIODiffData[i].TheDiffPoint[pTempIODiffData[i].DiffPointNum] = k + 1u;/*不一致的点位*/ + pTempIODiffData[i].DiffPointNum++; /*点位数量*/ } } } else { - /*板卡是故障,不记录,清除每个点位容忍周期*/ - for (k = 0u; k < (UINT8)OC_COLL_BOARD_POS_NUM; k++) - { - SetPointTolerateCycNum(ocId, j, k, 0u); - } + /*板卡是故障,不记录*/ } } - if (0u != pTempIODiffData[i].DiffPointNum) {/*该OC有点位不一致,不一致的OC数量加一*/ gDiffDataOcNum++; @@ -12553,4 +12831,1102 @@ void ProcessOcToCiRelayDiffData(void) {/*不处理*/ } -} \ No newline at end of file +} + +/* +* 功能描述:迪士尼试车线试车状态处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void DsnScxStateProc(void) +{ + UINT16 wEssIndicatorId = 0U; /*ESS表示灯ID*/ + UINT8 cDevRelaySum = 0U; /*设备继电器总数*/ + UINT16* pDevRelayIdBuf = NULL; /*继电器IDbuf*/ + UINT8 cRelayCollState = 0U; /*继电器采集状态*/ + + wEssIndicatorId = GetIndicatorIdByDevType(INDICATOR_TYPE_SCX_SHD_ESS); /*获取ESS表示灯ID*/ + cDevRelaySum = GetIndicatorRelaySum(wEssIndicatorId); /*获取相关继电器总数*/ + pDevRelayIdBuf = GetIndicatorRelayIdBuf(wEssIndicatorId); /*获取相关继电器ID buf*/ + + if ((0U != cDevRelaySum) && (NULL != pDevRelayIdBuf)) + { + cRelayCollState = GetRelayCollState(pDevRelayIdBuf[0]); /*获取ESS继电器采集状态*/ + if (RELAY_STATE_UP == cRelayCollState) + { + SetCiTrainTestStatus(CI_TRAIN_TEST_ON); /*ESS继电器吸起,设置试车中*/ + } + else + { + SetCiTrainTestStatus(CI_TRAIN_TEST_OFF); /*ESS继电器未吸起,设置未试车*/ + } + } + else + { + SetCiTrainTestStatus(CI_TRAIN_TEST_OFF); /*异常分支,设置未试车*/ + } +} + +/* +* 功能描述:迪士尼试车线物理区段采集占用状态处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void DsnScxPhySecColOccProc(void) +{ + UINT8 cCurTrainTestStatus = 0U; /*试车状态*/ + UINT8 cLocalCiId = 0U; + UINT8 cCommTrainSum = 0U; /*通信良好的列车数量*/ + UINT16 szCommTrainId[TRAIN_SUM_MAX] = { 0U }; /*通信良好的列车ID*/ + UINT8 ii = 0U; + UINT8 cFuncRetVal = CI_ERROR; + UINT8 cAcNum = 0U; /*车身占用的计轴区段数量*/ + UINT16 szAcId[MAX_AC_IN_TRAIN] = { 0U }; /*车身占用的计轴区段ID数组*/ + UINT8 jj = 0U; + UINT16 wPhySecId = 0U; /*物理区段ID*/ + UINT8 cPhySecBelongCiId = 0U; /*物理区段所属CI*/ + + cCurTrainTestStatus = GetCiTrainTestStatus(); /*获取当前试车状态*/ + if (CI_TRAIN_TEST_ON == cCurTrainTestStatus) + { + cLocalCiId = GetSystemParaLocalCiId(); + cCommTrainSum = GetCommGoodTrainInfo(szCommTrainId); + for (ii = 0U; ii < cCommTrainSum; ii++) + { + /*判断列车是否完全在本控区*/ + cFuncRetVal = CheckTrainIsCompletelyLocal(szCommTrainId[ii], &cAcNum, szAcId); + + if (CI_SUCCESS == cFuncRetVal) + { + /*列车完全在本控区,根据列车安全位置更新物理区段采集占用状态*/ + for (jj = 0U; jj < cAcNum; jj++) + { + wPhySecId = GetAxisSecRelativePhySecId(szAcId[jj]); + cPhySecBelongCiId = GetPhySecBelongCiId(wPhySecId); + if ((cLocalCiId == cPhySecBelongCiId) && (0U != cPhySecBelongCiId)) + { + SetPhySecCurOccupyState(wPhySecId, SECTION_OCCUPY_YES); + SetAxisOccupyState(szAcId[jj], AXIS_SECTION_OCCUPY_YES);/*同时设置此计轴区段占用(试车线无道岔)*/ + } + else + { + /*非本集中区物理区段,不处理*/ + } + } + } + else + { + /*列车不完全在本控区,不处理*/ + } + } + } + else + { + /*非试车中,不处理*/ + } +} + + +/** +* @brief ATS全线解封解锁主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AllJieFengJieSuoCmdProc(void) +{ + AtsJieFengJieSuoMsgStru* strMsgFst = NULL; + AtsJieFengJieSuoMsgStru* strMsgSnd = NULL; + + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsJieFengJieSuoMsgFst(); + strMsgSnd = GetAtsJieFengJieSuoMsgSnd(); + + if ((FLAG_SET != strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + { + ; /* 没有消息,什么也不做 */ + } + else if ((FLAG_SET ==strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + {/* 一次消息 */ + AllJieFengJieSuoAtsCmdFst(); + } + else + { + /* 二次消息 */ + AllJieFengJieSuoAtsCmdSnd(); + } +} + +/** +* @brief ATS解封解锁首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AllJieFengJieSuoAtsCmdFst(void) +{ + AtsJieFengJieSuoMsgStru* strMsgFst = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT8 chFunRtn = CI_TIME_OUT; + UINT8 chStartFLockFlag = 0u; + UINT8 chStartLockFlag = 0u; + + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsJieFengJieSuoMsgFst(); + strCfmFst = GetAtsJieFengJieSuoCfmFst(); + + if (strMsgFst->dwCycle == dwCycle) + { + strCfmFst->chFlag = FLAG_SET; + strCfmFst->chTiocId = chLocalId; + strCfmFst->chStation = strMsgFst->chStation; + strCfmFst->wIndex = strMsgFst->wIndex; + strCfmFst->dwTime = dwCycle; + + chStartFLockFlag = GetStartFLockFlag();/*获取全站解封状态*/ + chStartLockFlag = GetStartLockFlag();/*获取全站解锁状态*/ + + if ((CI_START_LOCK_NO == chStartLockFlag) && (CI_START_FLOCK_NO == chStartFLockFlag)) + {/*解封且解锁*/ + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID; + } + else + { + /* 当前未解封或解锁 */ + strCfmFst->chOpStatus = CONFIRM_FST_SUCCESS; + } + + szCrcTmp[ii] = strMsgFst->chAtsId; + ii++; + szCrcTmp[ii] = strMsgFst->chStation; + ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmFst->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); /* ATS编号、车站编号、操作站编号、下发时间、命令类型计算CRC */ + + if (CONFIRM_FST_SUCCESS != strCfmFst->chOpStatus) + { + ClearAtsJieFengJieSuoMsgFirst(); + } + else + { + ; + } + } + else + {/* 接收到ATS一次消息非本周期,超时判断 */ + chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); + if (CI_TIME_OUT == chFunRtn) + { + ClearAtsJieFengJieSuoMsgFirst(); + } + else + { + ; + } + } +} + +/** +* @brief 全站解封解锁二次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AllJieFengJieSuoAtsCmdSnd(void) +{ + AtsJieFengJieSuoMsgStru* strMsgFst = NULL; + AtsJieFengJieSuoMsgStru* strMsgSnd = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + AtsMsgCfmStru* strCfmSnd = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT32 dwCrc = 0u; + UINT8 startLockFlag = 0u; + UINT8 startFengsuoFlag = 0u; + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + strMsgFst = GetAtsJieFengJieSuoMsgFst(); + strMsgSnd = GetAtsJieFengJieSuoMsgSnd(); + strCfmFst = GetAtsJieFengJieSuoCfmFst(); + strCfmSnd = GetAtsJieFengJieSuoCfmSnd(); + + startLockFlag = GetStartLockFlag(); + startFengsuoFlag = GetStartFLockFlag(); + + if ((NULL != strMsgFst) + && (NULL != strMsgSnd) + && (NULL != strCfmFst) + && (NULL != strCfmSnd)) + { + if (strMsgSnd->dwCycle == dwCycle) + { + strCfmSnd->chFlag = FLAG_SET; + strCfmSnd->chTiocId = chLocalId; + strCfmSnd->chStation = strMsgSnd->chStation; + strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->dwTime = dwCycle; + + if (FLAG_SET != strMsgFst->chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_NOTFIRST; /* 一次命令未执行,返回未执行首次取消 */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) + || (strMsgSnd->chStation != strMsgFst->chStation) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_SND_UNKNOWN; /* ATS一二次命令帧头输入不一致,返回未知 */ + chFlag = FLAG_SET; + } + else + { + /*不处理*/ + ; + } + + if (FLAG_UNSET == chFlag) + { + if ((CI_START_LOCK_NO == startLockFlag) && (CI_START_FLOCK_NO == startFengsuoFlag)) + {/*解封且解锁*/ + strCfmSnd->chOpStatus = CONFIRM_CMD_INVALID; /* 等待2次命令期间,现地已执行解封解锁,返回命令无效 */ + chFlag = FLAG_SET; + } + else + {/*不处理*/ + + } + } + + if (FLAG_UNSET == chFlag) + { + szCrcTmp[ii] = strMsgSnd->chTiocId; + ii++; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + + if (dwCrc != strMsgSnd->dwCrc32) + { + strCfmSnd->chOpStatus = CONFIRM_SND_CHECKFAIL; /* 计算的CRC32与ATS二次消息CRC32不一致 */ + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chAtsId; + szCrcTmp[ii++] = strMsgSnd->chStation; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + LongToChar(strMsgSnd->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + + if (FLAG_UNSET == chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_SUCCESS; /* 检查通过,反馈确认成功 */ + /*全站解封*/ + SetStartFLockUnLockLogicManage(); + + /*上电解锁*/ + SetStartupUnLockLogicManage(); + } + else + { + ; + } + } + else + { + ; /** 非本周期消息,不处理 */ + } + ClearAtsJieFengJieSuoMsgFirst(); + ClearAtsJieFengJieSuoMsgSecond(); + } + else + { + ; /**不可能分支 不处理 */ + } +} + +/** +* @brief ATS道岔强扳命令主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdProc(void) +{ + AtsSwitchForceMsgStru* strMsgFst = NULL; + AtsSwitchForceMsgStru* strMsgSnd = NULL; + + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsSwitchForceMsgFst(); + strMsgSnd = GetAtsSwitchForceMsgSnd(); + + if ((FLAG_SET != strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + { + ; /* 没有消息,什么也不做 */ + } + else if ((FLAG_SET == strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + {/* 一次消息 */ + AtsSwitchForceCmdFst(); + } + else + { + /* 二次消息 */ + AtsSwitchForceCmdSnd(); + } +} + +/** +* @brief ATS道岔强转首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdFst(void) +{ + AtsSwitchForceMsgStru* strMsgFst = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT8 chFunRtn = CI_TIME_OUT; + UINT8 chStartFLockFlag = 0U; + UINT8 chStartLockFlag = 0U; + UINT8 chFlag = FLAG_UNSET; + UINT16 switchId = 0; + UINT8 retValue = 0U; + UINT8 chAllSwitchYLockFlag = 0u; + UINT8 chSwitchBelongCiId = 0u; + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsSwitchForceMsgFst(); + strCfmFst = GetAtsSwitchForceCfmFst(); + if (strMsgFst->dwCycle == dwCycle) + { + strCfmFst->chFlag = FLAG_SET; + strCfmFst->chTiocId = chLocalId; + strCfmFst->chStation = strMsgFst->chStation; + strCfmFst->wIndex = strMsgFst->wIndex; + strCfmFst->dwTime = dwCycle; + + chStartFLockFlag = GetStartFLockFlag();/*获取全站解封状态*/ + chStartLockFlag = GetStartLockFlag();/*获取全站解锁状态*/ + + if ((CI_START_FLOCK_NO == chStartFLockFlag)&& (CI_START_LOCK_NO == chStartLockFlag)) + { + /*nothing*/ + } + else + {/*未解封或解锁*/ + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*未上电解封解锁,反馈命令无效*/ + chFlag = FLAG_SET; + } + + if (FLAG_UNSET == chFlag) + { + /*根据互联互通4字节ID获取道岔ID*/ + retValue = dquQueryInDevIndex(QFUN_IDMAP_SWITCH_ID, strMsgFst->dwSiwtchId, &switchId); + if (CI_SUCCESS == retValue) + {/*nothing*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_ID_ILL;/*ID非法*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + + if (FLAG_UNSET == chFlag) + { + chAllSwitchYLockFlag = GetAllSwitchYLockFlag(); + if (CI_ALL_SWITCH_YLOCK_NO == chAllSwitchYLockFlag) + { + /*nothing do*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*引导总锁状态,反馈命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + chSwitchBelongCiId = GetSwitchBelongCiId(switchId); + if (chLocalId == chSwitchBelongCiId) + { + /*nothing do*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*道岔不属于本控区,反馈命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + strCfmFst->chOpStatus = CONFIRM_FST_SUCCESS; + } + else + { + /*nothing do*/ + } + + + szCrcTmp[ii] = strMsgFst->chAtsId; + ii++; + szCrcTmp[ii] = strMsgFst->chStation; + ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + + szCrcTmp[ii] = strMsgFst->chCmdType; + ii++; + + LongToChar(strMsgFst->dwSiwtchId, &szCrcTmp[ii]); + ii += 4u; + + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmFst->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); /* ATS编号、车站编号、操作站编号、下发时间、命令类型、命令ID 计算CRC */ + + if (CONFIRM_FST_SUCCESS != strCfmFst->chOpStatus) + { + ClearAtsSwitchForceMsgFirst(); + } + else + { + ; + } + } + else + {/* 接收到ATS一次消息非本周期,超时判断 */ + chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); + if (CI_TIME_OUT == chFunRtn) + { + ClearAtsSwitchForceMsgFirst(); + } + else + { + ; + } + } +} + +/** +* @brief 道岔强转二次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsSwitchForceCmdSnd(void) +{ + AtsSwitchForceMsgStru* strMsgFst = NULL; + AtsSwitchForceMsgStru* strMsgSnd = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + AtsMsgCfmStru* strCfmSnd = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT32 dwCrc = 0u; + UINT16 switchId = 0u; + UINT8 retValue = 0u; + UINT8 chAllSwitchYLockFlag = 0u; + + chAllSwitchYLockFlag = GetAllSwitchYLockFlag(); + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + strMsgFst = GetAtsSwitchForceMsgFst(); + strMsgSnd = GetAtsSwitchForceMsgSnd(); + strCfmFst = GetAtsSwitchForceCfmFst(); + strCfmSnd = GetAtsSwitchForceCfmSnd(); + + if ((NULL != strMsgFst) + && (NULL != strMsgSnd) + && (NULL != strCfmFst) + && (NULL != strCfmSnd)) + { + if (strMsgSnd->dwCycle == dwCycle) + { + strCfmSnd->chFlag = FLAG_SET; + strCfmSnd->chTiocId = chLocalId; + strCfmSnd->chStation = strMsgSnd->chStation; + strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->dwTime = dwCycle; + + if (FLAG_SET != strMsgFst->chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_NOTFIRST; /* 一次命令未执行,返回未执行首次取消 */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) + || (strMsgSnd->chStation != strMsgFst->chStation) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_SND_UNKNOWN; /* ATS一二次命令帧头输入不一致,返回未知 */ + chFlag = FLAG_SET; + } + else + { + /*不处理*/ + ; + } + + if (FLAG_UNSET == chFlag) + { + if (strMsgSnd->dwSiwtchId != strMsgFst->dwSiwtchId) + { + strCfmSnd->chOpStatus = CONFIRM_FORCE_SW_ID_DIF;/*一次二次ID不一致*/ + chFlag = FLAG_SET; + } + else + { + /*nothing do*/ + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + /*根据互联互通4字节ID获取道岔ID*/ + retValue = dquQueryInDevIndex(QFUN_IDMAP_SWITCH_ID, strMsgSnd->dwSiwtchId, &switchId); + if (CI_SUCCESS == retValue) + {/*nothing*/ + } + else + { + strCfmSnd->chOpStatus = CONFIRM_SND_UNKNOWN;/*一次二次ID一致后,必然能获取到ID,这里走不到*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + if (strMsgSnd->chCmdType != strMsgFst->chCmdType) + { + strCfmSnd->chOpStatus = CONFIRM_FORCE_SW_CMD_DIF;/*一次二次命令类型不一致*/ + chFlag = FLAG_SET; + } + else + { + /*nothing do*/ + } + } + else + { + /*nothing do*/ + } + + + if (FLAG_UNSET == chFlag) + { + szCrcTmp[ii] = strMsgSnd->chTiocId; + ii++; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + + if (dwCrc != strMsgSnd->dwCrc32) + { + strCfmSnd->chOpStatus = CONFIRM_SND_CHECKFAIL; /* 计算的CRC32与ATS二次消息CRC32不一致 */ + chFlag = FLAG_SET; + } + else + { + /*nothing do*/ + } + } + else + { + /*nothing do*/ + } + + + if (FLAG_UNSET == chFlag) + { + if (CI_ALL_SWITCH_YLOCK_NO == chAllSwitchYLockFlag) + { + /*nothing do*/ + } + else + { + strCfmSnd->chOpStatus = CONFIRM_CMD_INVALID;/*引导总锁状态,发送命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + + + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chAtsId; + szCrcTmp[ii++] = strMsgSnd->chStation; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; + szCrcTmp[ii++] = strMsgSnd->chCmdType; + LongToChar(strMsgSnd->dwSiwtchId, &szCrcTmp[ii]); + ii += 4u; + + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + LongToChar(strMsgSnd->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + + if (FLAG_UNSET == chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_SUCCESS; /* 检查通过,反馈确认成功 */ + + if (SWITCH_FORCE_DINGWEI == strMsgSnd->chCmdType) + { + /*道岔强扳定位命令*/ + (void)ForceSetSwitchPositionManage(switchId, SWITCH_POSITION_DINGWEI); + } + else if (SWITCH_FORCE_FANWEI == strMsgSnd->chCmdType) + { + /*道岔强扳反位命令*/ + (void)ForceSetSwitchPositionManage(switchId, SWITCH_POSITION_FANWEI); + } + else + { + /*nothing*/ + } + } + else + { + ; + } + } + else + { + ; /** 非本周期消息,不处理 */ + } + ClearAtsSwitchForceMsgFirst(); + ClearAtsSwitchForceMsgSecond(); + } + else + { + ; /**不可能分支 不处理 */ + } +} + +/** +* @brief ATS计轴预复位主处理函数 +* @param 无 +* @return 无 +* Created By Mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdProc(void) +{ + AtsPhyPreResetMsgStru* strMsgFst = NULL; + AtsPhyPreResetMsgStru* strMsgSnd = NULL; + + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsPhyPreResetMsgFst(); + strMsgSnd = GetAtsPhyPreResetMsgSnd(); + + if ((FLAG_SET != strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + { + ; /* 没有消息,什么也不做 */ + } + else if ((FLAG_SET == strMsgFst->chFlag) && (FLAG_SET != strMsgSnd->chFlag)) + {/* 一次消息 */ + AtsPhyPreResetCmdFst(); + } + else + { + /* 二次消息 */ + AtsPhyPreResetCmdSnd(); + } +} +/** +* @brief ATS计轴预复位首次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdFst(void) +{ + AtsPhyPreResetMsgStru* strMsgFst = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT8 chFunRtn = CI_TIME_OUT; + UINT8 chStartFLockFlag = 0u; + UINT8 chStartLockFlag = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 retValue = 0u; + UINT16 wPhySecId = 0u; + UINT8 chAllSwitchYLockFlag = 0u; + UINT8 chPhySecBelongCiId = 0u; + + chAllSwitchYLockFlag = GetAllSwitchYLockFlag(); + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsPhyPreResetMsgFst(); + strCfmFst = GetAtsPhyPreResetCfmFst(); + + if (strMsgFst->dwCycle == dwCycle) + { + strCfmFst->chFlag = FLAG_SET; + strCfmFst->chTiocId = chLocalId; + strCfmFst->chStation = strMsgFst->chStation; + strCfmFst->wIndex = strMsgFst->wIndex; + strCfmFst->dwTime = dwCycle; + + chStartFLockFlag = GetStartFLockFlag();/*获取全站解封状态*/ + chStartLockFlag = GetStartLockFlag();/*获取全站解锁状态*/ + + if ((CI_START_FLOCK_NO == chStartFLockFlag) && (CI_START_LOCK_NO == chStartLockFlag)) + { + /*nothing*/ + } + else + {/*未解封或解锁*/ + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*未上电解封解锁,反馈命令无效*/ + chFlag = FLAG_SET; + } + + if (FLAG_UNSET == chFlag) + { + /*根据互联互通4字节ID获取物理区段ID*/ + retValue = dquQueryInDevIndex(QFUN_IDMAP_PHY_ID, strMsgFst->dwPhySecHlhtId, &wPhySecId); + if (CI_SUCCESS == retValue) + {/*nothing*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_ID_ILL;/*ID非法*/ + chFlag = FLAG_SET; + } + } + + + if (FLAG_UNSET == chFlag) + { + if (CI_ALL_SWITCH_YLOCK_NO == chAllSwitchYLockFlag) + { + /*nothing do*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*引导总锁状态,反馈命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + chPhySecBelongCiId = GetPhySecBelongCiId(wPhySecId); + + if (chPhySecBelongCiId == chLocalId) + { + /*nothing do*/ + } + else + { + strCfmFst->chOpStatus = CONFIRM_CMD_INVALID;/*区段不在本控区,反馈命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + + + if (FLAG_UNSET == chFlag) + { + strCfmFst->chOpStatus = CONFIRM_FST_SUCCESS; + } + else + { + /*nothing do*/ + } + + + szCrcTmp[ii] = strMsgFst->chAtsId; + ii++; + szCrcTmp[ii] = strMsgFst->chStation; + ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + + LongToChar(strMsgFst->dwPhySecHlhtId, &szCrcTmp[ii]); + ii += 4u; + + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmFst->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); /* ATS编号、车站编号、操作站编号、下发时间、命令ID 计算CRC */ + + if (CONFIRM_FST_SUCCESS != strCfmFst->chOpStatus) + { + ClearAtsPhyPreResetMsgFirst(); + } + else + { + ; + } + } + else + {/* 接收到ATS一次消息非本周期,超时判断 */ + chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); + if (CI_TIME_OUT == chFunRtn) + { + ClearAtsPhyPreResetMsgFirst(); + } + else + { + ; + } + } +} + +/** +* @brief 计轴预复位再次命令处理函数 +* @param 无 +* @return 无 +* Created By mpt 2026.2.8 +*/ +static void AtsPhyPreResetCmdSnd(void) +{ + AtsPhyPreResetMsgStru* strMsgFst = NULL; + AtsPhyPreResetMsgStru* strMsgSnd = NULL; + AtsMsgCfmStru* strCfmFst = NULL; + AtsMsgCfmStru* strCfmSnd = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT32 dwCrc = 0u; + UINT8 retValue = 0u; + UINT16 wPhySecId = 0u; + UINT8 chAllSwitchYLockFlag = 0u; + + chAllSwitchYLockFlag = GetAllSwitchYLockFlag(); + + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + strMsgFst = GetAtsPhyPreResetMsgFst(); + strMsgSnd = GetAtsPhyPreResetMsgSnd(); + strCfmFst = GetAtsPhyPreResetCfmFst(); + strCfmSnd = GetAtsPhyPreResetCfmSnd(); + + if ((NULL != strMsgFst) + && (NULL != strMsgSnd) + && (NULL != strCfmFst) + && (NULL != strCfmSnd)) + { + if (strMsgSnd->dwCycle == dwCycle) + { + strCfmSnd->chFlag = FLAG_SET; + strCfmSnd->chTiocId = chLocalId; + strCfmSnd->chStation = strMsgSnd->chStation; + strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->dwTime = dwCycle; + + if (FLAG_SET != strMsgFst->chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_NOTFIRST; /* 一次命令未执行,返回未执行首次取消 */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) + || (strMsgSnd->chStation != strMsgFst->chStation) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_SND_UNKNOWN; /* ATS一二次命令帧头输入不一致,返回未知 */ + chFlag = FLAG_SET; + } + else + { + /*不处理*/ + ; + } + + if (FLAG_UNSET == chFlag) + { + if (strMsgSnd->dwPhySecHlhtId != strMsgFst->dwPhySecHlhtId) + { + strCfmSnd->chOpStatus = CONFIRM_PHY_PRERESET_ID_DIF;/*一次二次ID不一致*/ + chFlag = FLAG_SET; + } + else + { + /*nothing do*/ + } + } + else + { + /*nothing do*/ + } + + if (FLAG_UNSET == chFlag) + { + /*根据互联互通4字节ID获取物理区段ID*/ + retValue = dquQueryInDevIndex(QFUN_IDMAP_PHY_ID, strMsgSnd->dwPhySecHlhtId, &wPhySecId); + if (CI_SUCCESS == retValue) + {/*nothing*/ + } + else + { + strCfmSnd->chOpStatus = CONFIRM_SND_UNKNOWN;/*一次二次ID一致,所以这里走不到*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + + + if (FLAG_UNSET == chFlag) + { + szCrcTmp[ii] = strMsgSnd->chTiocId; + ii++; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + + if (dwCrc != strMsgSnd->dwCrc32) + { + strCfmSnd->chOpStatus = CONFIRM_SND_CHECKFAIL; /* 计算的CRC32与ATS二次消息CRC32不一致 */ + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + + + if (FLAG_UNSET == chFlag) + { + if (CI_ALL_SWITCH_YLOCK_NO == chAllSwitchYLockFlag) + { + /*nothing do*/ + } + else + { + strCfmSnd->chOpStatus = CONFIRM_CMD_INVALID;/*引导总锁状态,命令无效*/ + chFlag = FLAG_SET; + } + } + else + { + /*nothing do*/ + } + + + + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chAtsId; + szCrcTmp[ii++] = strMsgSnd->chStation; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgSnd->dwPhySecHlhtId, &szCrcTmp[ii]); + ii += 4u; + + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + LongToChar(strMsgSnd->dwTime, &szCrcTmp[ii]); + ii += 4u; + strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + + if (FLAG_UNSET == chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_SND_SUCCESS; /* 检查通过,反馈确认成功 */ + /*执行计轴预复位指令*/ + SetSectionResetLogicManage(wPhySecId, PHYSICAL_SECTION_PRE_RESET_YES); + + } + else + { + ; + } + } + else + { + ; /** 非本周期消息,不处理 */ + } + ClearAtsPhyPreResetMsgFirst(); + ClearAtsPhyPreResetMsgSecond(); + } + else + { + ; /**不可能分支 不处理 */ + } +} diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.h b/TSCP/src/APP/ciapp/IO/InputDataProcess.h index 2854c29..d689dd2 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.h @@ -466,6 +466,22 @@ void ProcessOCToCiPsdData(void); */ void ProcessOcToCiRelayDiffData(void); +/* +* 功能描述:迪士尼试车线试车状态处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void DsnScxStateProc(void); + +/* +* 功能描述:迪士尼试车线物理区段采集占用状态处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void DsnScxPhySecColOccProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c index 03d62b2..117e3af 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c @@ -21,7 +21,7 @@ #include "../RemoteRM/RRMDataPrepare.h" #include "NonAutoReturnDataManage.h" #include "InputDataProcess.h" - +#include "../ECS/ECSDataManage.h" /* @@ -137,6 +137,12 @@ void OutputDataProcess(void) /*声光报警器输出处理*/ SGBJDriveOutputProc(); + + /*SSKS闪灯稳灯输出处理*/ + SsksFlashSteadyLightOutputProc(); + + /*道岔反位使能请求输出处理*/ + SwitchReverseEnableDriveProc(); } else { @@ -194,6 +200,9 @@ void OutputDataProcess(void) /*无人折返继电器粘连状态处理*/ RtnRealyAdhesionStatePro(); + /*ECS监督处理*/ + EcsMonitorProc(); + /*虚拟设备输出处理*/ VirtualDeviceOutputProc(); @@ -221,6 +230,9 @@ void OutputDataProcess(void) /*更新照查联锁条件检查照查驱动*/ UpdateZhaoChaCheckZhaoChaDrive(); + /*联络线进路协议继电器驱动*/ + RouteConnectPrtlRelayDriveProc(); + /*设置驱动继电器混线状态*/ SetDriveRelayHunXianState(); @@ -587,6 +599,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co break; } + + case ETYPE_SWT_WAIT_MOVE: /*等待道岔动作完成*/ + returnValue = CI_BACK_SWT_WAIT_MOVE; + break; /* zt 删除单轨相关代码 2022-02-15 */ /*继电器故障反馈*/ @@ -929,6 +945,15 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co case ETYPE_PART_ROUTE_TRAIN_POS: returnValue = CI_BACK_DYM_ROUTE_TRAIN_POS; break; + case ETYPE_LOGSEC_CT_OVERRIDE_FAIL: + returnValue = CI_BACK_OVERRIDE_CT_OCCUPY; + break; + case ETYPE_ROUTE_CONNECT_OVERRIME: + returnValue = CI_BACK_CONNECT_ROUTE_OVERRIME; + break; + case ETYPE_SWT_CONNECT_RET_FAIL: + returnValue = CI_BACK_CONNECT_SWITCH_RET_FAIL; + break; default:/*数据错误*/ returnValue = 0U; break; @@ -1046,7 +1071,11 @@ void IndicatorStateProc(void) UINT8 cCommAxisNum = 0U; /*与本控区具有通信关系的计轴子系统数量*/ UINT8* pAxisSysIdBuf = NULL; UINT8 mm = 0U; - + UINT16 wCutRelayId = 0u;/*旁路继电器ID*/ + UINT8 chCutRelayState = 0u;/*旁路状态*/ + UINT8 chScxCesbState = 0U;/*试车线CESB状态*/ + UINT8 chScxCesbCutState = 0U;/*试车线CESB旁路状态*/ + dianshiLinshixiansuFlag = GetCiFunctionSwitchConfig(FUNC_DIANSHI_LINSHIXIANSU_FLAG); devCurSum = GetIndicatorCurSum(); /*获取指示器当前总数*/ interfaceType = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);/*获取试车线与车辆段接口方式*/ @@ -2159,6 +2188,118 @@ void IndicatorStateProc(void) SetIndicatorState(devId, INDICATOR_SHOW_COMM_RED); } } + else if (INDICATOR_TYPE_ALLSEC_FLOCK == devType) + { + chDevStateRtn = GetAllSecFlockState(); + SetIndicatorState(devId, INDICATOR_SHOW_YES); /*初始化无封锁*/ + if (ALLFLOCK_SET_YES == chDevStateRtn) + { + SetIndicatorState(devId, INDICATOR_SHOW_NO); + } + } + else if (INDICATOR_TYPE_SCX_SHD_ESS == devType) + { + devRelaySum = GetIndicatorRelaySum(devId); /*获取相关继电器总数*/ + devRelayIdBuf = GetIndicatorRelayIdBuf(devId); /*获取相关继电器ID buf*/ + if ((0U == devRelaySum) || (NULL == devRelayIdBuf)) + { + SetIndicatorState(devId, INDICATOR_SHOW_YES); /*设置亮红灯*/ + } + else + { + relayCollState = GetRelayCollState(devRelayIdBuf[0]); + if (RELAY_STATE_UP == relayCollState) + { + SetIndicatorState(devId, INDICATOR_SHOW_NO); /*ESS继电器吸起,试车中,设置亮绿灯*/ + } + else + { + SetIndicatorState(devId, INDICATOR_SHOW_YES); /*ESS继电器落下,未试车,设置亮红灯*/ + } + } + } + else if (INDICATOR_TYPE_CESB == devType) + { + /*旁路有效时发送旁路*/ + chDevStateRtn = GetAllSecCesbState();/*CESB封锁设置状态*/ + SetIndicatorState(devId, INDICATOR_CESB_INACTIVE_NOFLOCK); /*初始化未激活 无封锁*/ + if (CI_TYPE_SCX == chLocalCiType) + { + /*试车线根据命令设置指示灯*/ + chScxCesbState = GetScxCesbCmdState(); + chScxCesbCutState = GetScxCesbCutCmdState(); + if (ESB_CUT_YES == chScxCesbCutState) + { + if (CESB_STATE_VALID_NO == chDevStateRtn) + { + SetIndicatorState(devId, INDICATOR_CESB_CUT_NOFLOCK); /*设置CESB旁路有效 无封锁*/ + } + else + { + SetIndicatorState(devId, INDICATOR_CESB_CUT_FLOCK); /*设置CESB旁路有效 存在封锁*/ + } + } + else if (CESB_STATE_VALID_NO == chScxCesbState) + { + /*CESB未激活*/ + if (CESB_STATE_VALID_NO == chDevStateRtn) + { + SetIndicatorState(devId, INDICATOR_CESB_INACTIVE_NOFLOCK); /*设置未激活 无封锁*/ + } + else + { + SetIndicatorState(devId, INDICATOR_CESB_INACTIVE_FLOCK); /*设置未激活 存在封锁*/ + } + } + else + { + /*未旁路、CESB激活*/ + SetIndicatorState(devId, INDICATOR_CESB_ACTIVE_FLOCK); /*设置激活*/ + } + } + else + { + wCutRelayId = GetCesbCutRelayId(); + chCutRelayState = GetRelayCollState(wCutRelayId);/*旁路状态*/ + RelayId = GetCesbRelayId(); + relayCollState = GetRelayCollState(RelayId); /*继电器采集状态*/ + if (0U != RelayId) + { + if (RELAY_STATE_UP == chCutRelayState) + { /*旁路继电器吸起,旁路有效*/ + if (CESB_STATE_VALID_NO == chDevStateRtn) + { + SetIndicatorState(devId, INDICATOR_CESB_CUT_NOFLOCK); /*设置CESB旁路有效 无封锁*/ + } + else + { + SetIndicatorState(devId, INDICATOR_CESB_CUT_FLOCK); /*设置CESB旁路有效 存在封锁*/ + } + } + else if (RELAY_STATE_UP == relayCollState) + { + /*吸起 CESB未激活*/ + if (CESB_STATE_VALID_NO == chDevStateRtn) + { + SetIndicatorState(devId, INDICATOR_CESB_INACTIVE_NOFLOCK); /*设置未激活 无封锁*/ + } + else + { + SetIndicatorState(devId, INDICATOR_CESB_INACTIVE_FLOCK); /*设置未激活 存在封锁*/ + } + } + else + { + /*未旁路、CESB激活*/ + SetIndicatorState(devId, INDICATOR_CESB_ACTIVE_FLOCK); /*设置激活*/ + } + } + else + { + ;/*未配置CESB继电器时,维持未激活无封锁*/ + } + } + } else { /*不做处理*/ @@ -7192,7 +7333,7 @@ void AddXiansuPhySecData(const UINT16 wLogSecId,const UINT16 wTrainId) chPhySecFlockType = GetPhySecFLockType(wLogSecRelPhySecId); chPhySecAreaUrgentState = GetPhySecAreaUrgentState(wLogSecRelPhySecId); - if (((PHYSICAL_SECTION_FLOCK_YES == chPhySecFlockState) && ((PHY_SEC_FLOCK_TYPE_CMD == chPhySecFlockType) || (PHY_SEC_FLOCK_TYPE_SPKSCMD == chPhySecFlockType))) + if (((PHYSICAL_SECTION_FLOCK_YES == chPhySecFlockState) && (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD & chPhySecFlockType))) || (PHYSEC_AREA_URGENT_YES == chPhySecAreaUrgentState)) { chAddFlag = CI_SUCCESS; @@ -8573,3 +8714,73 @@ void RtnRealyAdhesionStatePro(void) } } +/* +* 功能描述:ECS监督处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsMonitorProc(void) +{ + UINT16 wEcsNum = 0U; /*ECS数量*/ + UINT16 ii = 0U; + UINT16 wEcsId = 0U; /*ECS ID*/ + UINT8 cLocalCiId = 0U; + UINT8 cEcsBelongCiId = 0U; /*ECS所属CI*/ + UINT8 cEcsAutoTrigState = 0U; /*ECS监督状态*/ + UINT16 wFanUpRelayId = 0U; /*风向为逻辑正方向的继电器ID*/ + UINT16 wFanDownRelayId = 0U; /*风向为逻辑反方向的继电器ID*/ + UINT16 wRelTrainId = 0U; /*ECS关联列车ID*/ + UINT16 wBufIndex = 0U; + + cLocalCiId = GetSystemParaLocalCiId(); + wEcsNum = GetEcsCurSum(); + for (ii = 0U; ii < wEcsNum; ii++) + { + wEcsId = GetEcsId(ii); + cEcsBelongCiId = GetEcsBelongCiId(wEcsId); + if (cEcsBelongCiId == cLocalCiId) + { + wFanUpRelayId = GetEcsRelFanUpRelayId(wEcsId); /*获取控制风机方向的继电器ID*/ + wFanDownRelayId = GetEcsRelFanDownRelayId(wEcsId); + + cEcsAutoTrigState = GetEcsAutoTrigState(wEcsId); + if (ECS_AUTOTRIG_YES == cEcsAutoTrigState) + { + /*ECS自动触发启用时,需要周期监督隧道内的拥堵状态,进而驱动相应的继电器吸起/落下*/ + /*1.更新ECS隧道关联的列车ID(该列车ID用于判断隧道内是通信车还是非通信车)*/ + UpdateEcsRelTrain(wEcsId); + + /*2.监督ECS隧道内的停车状态*/ + wRelTrainId = GetEcsRelTrainId(wEcsId); /*获取ECS关联列车ID*/ + wBufIndex = GetTrainBufIndex(wRelTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + /*关联列车ID有效,隧道内存在通信车,按照通信车监督隧道列车停车状态*/ + MonitorEcsTrainByCommTrain(wEcsId); + } + else + { + /*关联列车ID无效,隧道内不存在通信车,按照非通信车监督隧道列车停车状态*/ + MonitorEcsTrainByBadTrain(wEcsId); + } + + /*3.更新ECS隧道拥堵状态*/ + UpdateEcsJamState(wEcsId); + + /*4.根据ECS隧道拥堵状态,设置继电器驱动状态*/ + EcsFanRelayDriveProc(wEcsId); + } + else + { + /*ESC自动触发停用时,需要周期设置控制风机方向的继电器落下,其它相关状态已在ATS命令处理时清除*/ + (void)SetRelayDriveState(wFanUpRelayId, RELAY_DRIVE_STATE_DOWN); + (void)SetRelayDriveState(wFanDownRelayId, RELAY_DRIVE_STATE_DOWN); + } + } + else + { + /*非本控区ECS,不处理*/ + } + } +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.h b/TSCP/src/APP/ciapp/IO/OutputDataProcess.h index 5e89466..ac34364 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.h @@ -456,6 +456,14 @@ UINT8 FindRouteLeaveAxis(const UINT16 routeId); */ void RtnRealyAdhesionStatePro(void); +/* +* 功能描述:ECS监督处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsMonitorProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c index 8c79fb2..2aa205c 100644 --- a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c @@ -455,5 +455,46 @@ UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId) /*入参检查失败,返回失败*/ } + return wRetVal; +} + +/* +* 功能描述:通过表示灯类型获取表示灯ID +* 参数说明:UINT8 cDevType 表示灯类型 +* 返 回 值:0 获取数据失败 +* 其它 表示灯ID +* Created By LQ 2026.01.23 +*/ +UINT16 GetIndicatorIdByDevType(UINT8 cDevType) +{ + UINT16 wRetVal = 0U; + UINT16 wDevCurSum = 0U; /*表示灯总数*/ + UINT16 ii = 0U; + UINT16 wDevId = 0U; /*表示灯ID*/ + UINT8 cIndicatorType = 0U; /*表示灯类型*/ + + if (0U != cDevType) + { + wDevCurSum = GetIndicatorCurSum(); /*获取指示器当前总数*/ + for (ii = 0U; ii < wDevCurSum; ii++) + { + wDevId = GetIndicatorId(ii); /*获取表示灯ID*/ + cIndicatorType = GetIndicatorType(wDevId); /*获取表示灯类型*/ + if (cDevType == cIndicatorType) + { + wRetVal = wDevId; + break; /*找到目标类型,停止遍历*/ + } + else + { + /*继续遍历查找*/ + } + } + } + else + { + /*入参非法,返回0*/ + } + return wRetVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.h b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.h index a9fe270..b9b306b 100644 --- a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.h @@ -185,6 +185,15 @@ UINT8 GetIndicatorDevId(UINT16 indicatorId); */ UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId); +/* +* 功能描述:通过表示灯类型获取表示灯ID +* 参数说明:UINT8 cDevType 表示灯类型 +* 返 回 值:0 获取数据失败 +* 其它 表示灯ID +* Created By LQ 2026.01.23 +*/ +UINT16 GetIndicatorIdByDevType(UINT8 cDevType); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h b/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h index a96dc8c..526430f 100644 --- a/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h +++ b/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h @@ -132,6 +132,9 @@ #define INDICATOR_TYPE_RELAY_HUNXIAN ((UINT8)0x92) /*继电器混线表示灯*/ #define INDICATOR_TYPE_AUTORTN_ADHESION ((UINT8)0x62) /*无人折返按钮粘连状态指示灯*/ #define INDICATOR_TYPE_COMM_AXIS ((UINT8)0x96) /*与计轴通信状态:1-所有计轴通信正常;3-存在计轴通信异常*/ +#define INDICATOR_TYPE_ALLSEC_FLOCK ((UINT8)0x65) /*全线区段封锁指示灯*/ +#define INDICATOR_TYPE_CESB ((UINT8)0x98) /*CESB指示灯*/ +#define INDICATOR_TYPE_SCX_SHD_ESS ((UINT8)0x97U) /*迪士尼试车线SHD-ESS状态表示灯*/ /*指示灯显示状态*/ @@ -181,6 +184,12 @@ #define INDICATOR_SHOW_SC_NO ((UINT8)0x55) /*试车指示灯显示无效*/ #define INDICATOR_SHOW_SC_YES ((UINT8)0xaa) /*试车指示灯显示有效*/ +#define INDICATOR_CESB_INACTIVE_NOFLOCK ((UINT8)0x01) /* CESB未激活未封锁*/ +#define INDICATOR_CESB_INACTIVE_FLOCK ((UINT8)0x02) /* CESB未激活且封锁*/ +#define INDICATOR_CESB_ACTIVE_FLOCK ((UINT8)0x03) /* CESB激活且封锁*/ +#define INDICATOR_CESB_CUT_FLOCK ((UINT8)0x04) /* CESB旁路且封锁*/ +#define INDICATOR_CESB_CUT_NOFLOCK ((UINT8)0x05) /* CESB旁路且未封锁*/ + #define INDIC_POWER_I_1 ((UINT8)0x01) /*一路电源1*/ #define INDIC_POWER_I_2 ((UINT8)0x02) /*一路电源2*/ #define INDIC_POWER_II_1 ((UINT8)0x03) /*二路电源1*/ diff --git a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c index 0006cfe..c79c0b2 100644 --- a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c +++ b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c @@ -129,6 +129,9 @@ UINT8 InitAllStaticDataStr(void) /*声光报警器配置数据结构体*/ chRtn &= CommonMemSet(SGBJConfigDataStru, (UINT32)(SGBJ_SUM_MAX * sizeof(SGBJConfigDataStruct)), 0u, (UINT32)(SGBJ_SUM_MAX * sizeof(SGBJConfigDataStruct))); + /*ECS配置数据结构体*/ + chRtn &= CommonMemSet(ECSConfigDataStru, (UINT32)(ECS_MAX_NUM * sizeof(ECSConfigDataStruct)), (UINT8)0U, (UINT32)(ECS_MAX_NUM * sizeof(ECSConfigDataStruct))); + return chRtn; } @@ -155,7 +158,7 @@ UINT8 ReadConfigureData(void) UINT8 CiPattern = 0u; UINT8 chInitAllStaticDataStrRtn = 0u; UINT8 RtnTemp = 0u; - + initAllRet = InitAll((const)DataPath); @@ -667,7 +670,6 @@ UINT8 ReadConfigureData(void) ; /*不处理*/ } - if (0u == rtnVal) { InvSecSum = ReadInvaSectionConfigData(LocalCiId, InvSecConfigDataStru); /*读侵入区段配置数据*/ @@ -772,6 +774,44 @@ UINT8 ReadConfigureData(void) ; /*不处理*/ } + /*读SSKS闪灯稳灯继电器配置数据*/ + if (0U == rtnVal) + { + gSsksLightRelaySum = ReadSsksLightRelayCfgData(LocalCiId, gSsksLightRelayCfgStr); + if (-1 == gSsksLightRelaySum) + { + rtnVal = 40U; /*读取SSKS闪灯稳灯继电器配置数据失败*/ + debug_infor_printf((const)"\nReadSsksLightRelayCfgData fail.\n"); + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } + + /*读联络线旁路继电器配置数据*/ + if (0U == rtnVal) + { + gConnectOverrideRelaySum = ReadConnectOverrideCfgData(LocalCiId, gConnectOverrideRelayCfgStr); + if (-1 == gConnectOverrideRelaySum) + { + rtnVal = 46U; /*读取联络线旁路继电器配置数据失败*/ + debug_infor_printf((const)"\nReadConnectOverrideCfgData fail.\n"); + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } + /*读声光报警器配置数据*/ if (0u == rtnVal) { @@ -790,6 +830,56 @@ UINT8 ReadConfigureData(void) { ; /*不处理*/ } + + if (0u == rtnVal) + { + OhlCurSum = ReadOhlConfigData(LocalCiId, OhlConfigDataStru); + if (-1 == OhlCurSum) + { + rtnVal = 39U;/*读取接触网数据失败*/ + debug_infor_printf((const)"ReadOhlConfigData fail."); + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } + + if (0U == rtnVal) + { + ECSCurSum = ReadEcsConfigData(LocalCiId, ECSConfigDataStru); + if (-1 == ECSCurSum) + { + rtnVal = 43U;/*读取ECS数据失败*/ + debug_infor_printf((const)"\nReadEcsConfigData fail.\n"); + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } + + if (0U == rtnVal) + { + RtnTemp = ReadLocalCesbConfigData(LocalCiId, &LocalCesbConfigDataStru); + if (0U == RtnTemp) + { + rtnVal = 45U;/*读取CESB数据失败*/ + debug_infor_printf((const)"\nReadCesbConfigData fail.\n"); + } + else + { + ; /*不处理*/ + } + } if (0u == rtnVal) { @@ -979,7 +1069,13 @@ UINT8 ReadConfigureData(void) if (CI_SUCCESS == retValue) { /*读取联络线数据*/ - g_ret = OcConnectConfigDataToDevStruct(SignalConfigDataStru, PhysicalSectionConfigDataStru, SwitchConfigDataStru, OcConnetDataCfgStru, RelayConfigDataStru); + g_ret = OcConnectConfigDataToDevStruct(SignalConfigDataStru, + PhysicalSectionConfigDataStru, + SwitchConfigDataStru, + OcConnetDataCfgStru, + RelayConfigDataStru, + RouteConfigDataStru, + LogicSectionConfigDataStru); if (-1 == g_ret) { rtnVal = 35u; @@ -1071,6 +1167,68 @@ UINT8 ReadConfigureData(void) { ; /*不处理*/ } + + if (0U == rtnVal) + { + /*ECS关联物理区段初始化*/ + RtnTemp = EcsIncPhySecInfoInit(ECSConfigDataStru); /*需要在Link后面初始化*/ + if (0U == RtnTemp) + { + rtnVal = 44U; /*ECS关联物理区段初始化失败*/ + debug_infor_printf((const)"\nEcsIncPhySecInfoInit fail.\n"); + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } + + if (0u == rtnVal) + { + /*迪士尼联络线逻辑区段继电器条件读取*/ + retValue = OcConnectLogSecCondInit(); + if (1u == retValue) + { + ConnectLogSecCondRelayInit(ConnectLogSecCondCfgStru, LogicSectionConfigDataStru); + } + else + { + rtnVal = 47u; + debug_infor_printf((const)"OcConnectLogSecCondInit errcode =%d, OcConnectLogSecCondInit", rtnVal); + } + } + if (0u == rtnVal) + { + /*迪士尼共用道岔的逻辑区段整理*/ + retValue = InitLogSecSwitchShareStatusByPhysec(); + if (0U == retValue) + { + rtnVal = 48U; + debug_infor_printf((const)"\InitLogSecSwitchShareStatusByPhysec fail.\n"); + } + else + { + ; /*不处理*/ + } + } + + if (0u == rtnVal) + { + retValue = InitSpeedLimitSecConfigData(); + if (0U == retValue) + { + rtnVal = 49U; + debug_infor_printf((const)"\InitSpeedLimitSecConfigData fail.\n"); + } + else + { + ; /*不处理*/ + } + } } else { @@ -1267,6 +1425,33 @@ UINT8 DeviceDataManage(void) } } + if (0U == rtValue) + { + reval = OhlConfigDataManage(); + if (CI_ERROR == reval) + { + rtValue = 1u; + } + } + + if (0U == rtValue) + { + /*读取本地ECS ID*/ + reval = EcsConfigDataManage(); + if (CI_ERROR == reval) + { + rtValue = 1U; + } + else + { + /*返回成功*/ + } + } + else + { + /*返回失败*/ + } + return rtValue; } /* @@ -1922,18 +2107,26 @@ UINT8 CheckCiHaveZcSumErr(const UINT8 ciId) * OcConnetDataCfgStruct* pConnectCfgData 联络线数据结构体 * RelayConfigDataStruct* pRelayCfgData 继电器结构体 * 返回值 : 0,成功;-1,失败 -* NOTE:集成bug YF0083-224 +* NOTE: */ -INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, PhysicalSectionConfigDataStruct* pPhyCfgData, SwitchConfigDataStruct* pSwitchCfgData, OcConnetDataCfgStruct* pConnectCfgData, RelayConfigDataStruct* pRelayCfgData) +INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, + PhysicalSectionConfigDataStruct* pPhyCfgData, + SwitchConfigDataStruct* pSwitchCfgData, + OcConnetDataCfgStruct* pConnectCfgData, + RelayConfigDataStruct* pRelayCfgData, + RouteConfigDataStruct *pRouteCfgData, + LogicSectionConfigDataStruct *pLogSecCfgData) { /*变量初始化*/ UINT16 i = 0u; UINT16 j = 0u; UINT16 k = 0u; UINT16 m = 0U; + UINT16 n = 0U; INT8 retValue = -1; - if ((NULL != pSignalCfgData) && (NULL != pPhyCfgData) && (NULL != pSwitchCfgData) && ((NULL != pConnectCfgData))) + if ((NULL != pSignalCfgData) && (NULL != pPhyCfgData) && (NULL != pSwitchCfgData) + && (NULL != pConnectCfgData) && (NULL != pRelayCfgData) && (NULL != pRouteCfgData) && (NULL != pLogSecCfgData)) { retValue = 0; for (i = 0u; i < OcConnetDataDevNum; i++) @@ -2035,11 +2228,68 @@ INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, Phys pSwitchCfgData[j].DsHRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId; pSwitchCfgData[j].DsDrvHRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId; } - /*PYPASS*/ + /*BYPASS*/ else if (SWITCH_BYPASSJ_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType) { pSwitchCfgData[j].ByPassRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId; } + /*反位使能请求RWM*/ + else if (SWITCH_RWM_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType) + { + pSwitchCfgData[j].RwmRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId; + + /*给迪士尼联络线进路添加关键道岔,遍历所有进路*/ + for (m = 0u; m < ROUTE_SUM_MAX; m++) + { + /*判断迪士尼联络线进路类型*/ + if ((ROUTE_DISNEY_CONNECT_ENDMINE == pRouteCfgData[m].cDisneyConnectRouteAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == pRouteCfgData[m].cDisneyConnectRouteAttr)) + { + /*后半段属于本线,或者前半段属于本线,遍历所有道岔*/ + for (n = 0u; n < (UINT16)pRouteCfgData[m].RouteSwitchSum; n++) + { + /*判断道岔ID是否为当前RWM继电器对应道岔ID*/ + if (pRouteCfgData[m].RouteSwitchStru[n].SwitchId == pSwitchCfgData[j].SwitchId) + { + /*道岔ID一致,赋值联络线关键道岔ID*/ + pRouteCfgData[m].wRelConnectSwitchId = pSwitchCfgData[j].SwitchId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + /*类型不满足,无需添加关键道岔,继续遍历*/ + } + } + + for (m = 0u; m < LOGIC_SECTION_SUM_MAX; m++) + { + for (n = 0u; n < pLogSecCfgData[m].chLogsecSwitchSum; n++) + { + if ((pLogSecCfgData[m].LogsecSwitchIdStru[n].SwitchId == pSwitchCfgData[j].SwitchId) + && (SWITCH_POSITION_FANWEI == pLogSecCfgData[m].LogsecSwitchIdStru[n].SwitchPosition)) + { + /*逻辑区段反位包含该继电器,记录联络线道岔ID*/ + pLogSecCfgData[m].wConnectSwticthId = pSwitchCfgData[j].SwitchId; + break; + } + else + { + /*继续遍历*/ + } + } + } + } + /*反位使能旁路ENABLE BYPASS*/ + else if (SWITCH_ENABLE_BYPASS_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType) + { + pSwitchCfgData[j].EnableBypassRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId; + } else { /*不做处理*/ @@ -2107,7 +2357,6 @@ INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, Phys return(retValue); } - /********************************************* *函数功能:初始化OC 联络线接口继电器配置表数据 *参数说明:void @@ -2187,6 +2436,132 @@ UINT8 OcConnectConfigDataStructInit(void) return(rtnValue); } +/********************************************* +*函数功能:初始化联络线逻辑区段继电器条件器配置表数据 +*参数说明:void +*返回值:1,成功;0,失败 +*********************************************/ +UINT8 OcConnectLogSecCondInit(void) +{ + UINT8 funcRtn = 0u; + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 DataSize = 0u; /*数据大小(字节数)*/ + UINT16 i = 0u; + UINT16 j = 0u; + UINT16 realRowCount = 0u; /*实际表数据的行数*/ + UINT8 rtnValue = 0u; + + + /*读取数据*/ + /*读取 默认行车序列 数据*/ + funcRtn = dquGetConfigDataNew((const)DataPath, OC_DATA_TYPE, CONNECT_LOGSEC_COND_ID, &pDataAddr, &DataSize, &realRowCount); + if (0u == funcRtn) + { + /*函数调用失败*/ + rtnValue = 1u; + debug_infor_printf((const)"\nCONNECT_LOGSEC_COND_ID NO IN FS\n"); + } + else + { + rtnValue = 1u; + /*数据正常*/ + if ((0u != DataSize) && (0u != realRowCount)) + { + if (0u != (DataSize % realRowCount)) + { + debug_infor_printf((const)"\n OC_DATA_TYPE,CONNECT_LOGSEC_COND_ID len %d %d not equal to fs\n", DataSize, realRowCount); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, ((UINT32)CI_DATA_TYPE << 8) + CONNECT_LOGSEC_COND_ID, PRINT_ONCE); + rtnValue = 0u; + } + else + { + /*填写设备数量*/ + ConnectLogSecCondDevNum = realRowCount; + /*内存先设为无效*/ + (void)CommonMemSet(ConnectLogSecCondCfgStru, sizeof(ConnectLogSecDataCfgStru) *OC_CONNECT_LOGSEC_COND_SUM_MAX, + 0x00u, sizeof(ConnectLogSecDataCfgStru) *OC_CONNECT_LOGSEC_COND_SUM_MAX); + + for (i = 0u; i < realRowCount; i++) + { + if (OC_CONNECT_LOGSEC_COND_SUM_MAX > i) + { + ConnectLogSecCondCfgStru[i].LogSecId = dquCiShortFromChar(pDataAddr); + pDataAddr += 2u; + ConnectLogSecCondCfgStru[i].RelSecDirLockRelayId = ShortFromChar(pDataAddr); + pDataAddr += 2u; + ConnectLogSecCondCfgStru[i].RelRoutePrtlRelayId = ShortFromChar(pDataAddr); + pDataAddr += 2u; + } + else + { + /*无操作*/ + } + } + } + } + else + { + /*不做处理*/ + } + } + return(rtnValue); +} + +/* +* 功能描述: 将联络线逻辑区段继电器条件数据初始化到对应设备 +* 参数说明: ConnectLogSecDataCfgStru *pConnectLogSecCondCfgStru 联络线逻辑区段继电器条件配置数据结构体 +* LogicSectionConfigDataStruct *pLogicSectionConfigDataStru 逻辑区段配置数据结构体 +* 返回值 : 0,成功;-1,失败 +* NOTE:集成bug YF0083-224 +*/ +INT8 ConnectLogSecCondRelayInit(ConnectLogSecDataCfgStru *pConnectLogSecCondCfgStru, + LogicSectionConfigDataStruct *pLogicSectionConfigDataStru) +{ + /*变量初始化*/ + UINT16 i = 0u; /*循环变量*/ + UINT16 j = 0u; /*循环变量*/ + INT8 retValue = -1; /*返回值*/ + + if ((NULL != pConnectLogSecCondCfgStru) && (NULL != pLogicSectionConfigDataStru)) + { + retValue = 0; + for (i = 0u; i < ConnectLogSecCondDevNum; i++) + { + for (j = 0u; j < LOGIC_SECTION_SUM_MAX; j++) + { + if (pLogicSectionConfigDataStru[j].LogicSectionId == pConnectLogSecCondCfgStru[i].LogSecId) + { + pLogicSectionConfigDataStru[j].wRelSecDirLockRelayId = pConnectLogSecCondCfgStru[i].RelSecDirLockRelayId; + pLogicSectionConfigDataStru[j].wRelRoutePrtlRelayId = pConnectLogSecCondCfgStru[i].RelRoutePrtlRelayId; + break; + } + else + { + /*继续遍历*/ + } + } + + if (LOGIC_SECTION_SUM_MAX == j) + { + /*联络线逻辑区段继电器条件表配置的逻辑区段未在电子地图找到,返回失败*/ + retValue = -1; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + /*返回失败*/ + retValue = -1; + } + + return(retValue); +} + /********************************************* *函数功能:获取静态数据 *参数说明:UINT32* pConfigDataAdderBuf 静态数据存放地址,UINT16 pConfigDataLenBuf 静态数据长度存放地址,UINT16 wBufMaxLen数组容量 diff --git a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h index a818386..6afb98f 100644 --- a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h +++ b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h @@ -142,6 +142,13 @@ UINT8 CheckCiHaveZcSumErr(const UINT8 ciId); *********************************************/ UINT8 OcConnectConfigDataStructInit(void); +/********************************************* +*函数功能:初始化联络线逻辑区段继电器条件器配置表数据 +*参数说明:void +*返回值:1,成功;0,失败 +*********************************************/ +UINT8 OcConnectLogSecCondInit(void); + /* * 功能描述: 将联络线接口继电器配置表数据初始化到对应设备 * 参数说明: SignalConfigDataStruct* pSignalCfgData 信号机结构体 @@ -152,7 +159,23 @@ UINT8 OcConnectConfigDataStructInit(void); * 返回值 : 0,成功;-1,失败 * NOTE:集成bug YF0083-224 */ -INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, PhysicalSectionConfigDataStruct* pPhyCfgData, SwitchConfigDataStruct* pSwitchCfgData, OcConnetDataCfgStruct* pConnectCfgData, RelayConfigDataStruct* pRelayCfgData); +INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, + PhysicalSectionConfigDataStruct* pPhyCfgData, + SwitchConfigDataStruct* pSwitchCfgData, + OcConnetDataCfgStruct* pConnectCfgData, + RelayConfigDataStruct* pRelayCfgData, + RouteConfigDataStruct* pRouteCfgData, + LogicSectionConfigDataStruct* pLogSecCfgData); + +/* +* 功能描述: 将联络线逻辑区段继电器条件数据初始化到对应设备 +* 参数说明: ConnectLogSecDataCfgStru *pConnectLogSecCondCfgStru 联络线逻辑区段继电器条件配置数据结构体 +* LogicSectionConfigDataStruct *pLogicSectionConfigDataStru 逻辑区段配置数据结构体 +* 返回值 : 0,成功;-1,失败 +* NOTE: +*/ +INT8 ConnectLogSecCondRelayInit(ConnectLogSecDataCfgStru *pConnectLogSecCondCfgStru, + LogicSectionConfigDataStruct *pLogicSectionConfigDataStru); /********************************************* *函数功能:获取静态数据 @@ -170,6 +193,8 @@ UINT16 GetTiocDeviceConfigData(UINT32* pConfigDataAddrBuf, UINT16* pConfigDataLe * by cgh 20250605 *********************************************/ UINT8 ReadCiTransmitSpecifyDevData(const UINT8 chCiId, const UINT8 chSystemType, UINT8 szDeviceIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX]); + + #endif diff --git a/TSCP/src/APP/ciapp/Initial/InitialProcess.c b/TSCP/src/APP/ciapp/Initial/InitialProcess.c index 3a41f23..ad3dfb7 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.c +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.c @@ -20,6 +20,7 @@ #include "NonAutoReturnConfigDataManage.h" #include "../Deployment/DeploymentExtern.h" #include "NonAutoReturnDataManage.h" +#include "../ECS/ECSDataManage.h" /****************************初始化动态数据队列********************************************/ extern TransmitRelationDataStruct TransmitRelaDataStru[TRANSMIT_OBJECT_SUM_MAX]; /*引用已定义通信关系数据结构体*/ @@ -448,6 +449,12 @@ UINT8 InitialProcess(void) ret = InitAxleToCiDataStru(); } + + if (CI_SUCCESS == ret) + { + ret = InitAxisSecClassData(); + } + if (CI_SUCCESS == ret) {/*cgh-合并CID-3037-3:*/ /*初始化中央联锁结构体*/ @@ -456,6 +463,26 @@ UINT8 InitialProcess(void) ret = InitialOCStationIndicStaData(); } + if (CI_SUCCESS == ret) + { + /*初始化SSKS闪灯稳灯继电器动态数据*/ + ret = InitSsksLightRelayData(); + } + else + { + /*不处理*/ + } + + if (CI_SUCCESS == ret) + { + /*初始化联络线旁路继电器动态数据*/ + ret = InitConnectOverrideData(); + } + else + { + /*不处理*/ + } + if (CI_SUCCESS == ret) { /*初始化无人折返指示灯状态数据*/ @@ -472,6 +499,33 @@ UINT8 InitialProcess(void) {/*初始化LEU数据*/ (void)InitLEUDataStru(); } + + if (CI_SUCCESS == ret) + {/*初始化接触网数据*/ + (void)InitOhlDataStru(); + } + + if (CI_SUCCESS == ret) + { + /*初始化ECS数据*/ + (void)InitialEcsData(); + } + else + { + /*返回失败*/ + } + + if (CI_SUCCESS == ret) + { + /*初始化限速区段数据*/ + (void)InitTSRSecInfo(); + } + else + { + /*返回失败*/ + } + + /*初始化设备打印数据*/ (void)RecordDeviceDataLog(CI_ERROR); @@ -602,6 +656,7 @@ UINT8 InitialSignalData(void) SignalDataStru[signalId].cDetCutBtnRelayDownState = SIGNAL_RELAY_ERROR_DOWN_YES; /*扣车旁路按钮采集继电器落下状态初始化为异常落下*/ /*初始化信号机临时限速状态有效*/ SignalDataStru[signalId].LinShiXianSuSetFlag = SIGNAL_LINSHIXIANSUSET_STATE_YES;/*临时限速有效*/ + SignalDataStru[signalId].cTrainCrossRedSignalFlag = SIGNAL_TRAIN_CROSS_RED_NO; /*初始化闯红灯标志无效*/ routeSum = GetRouteCurSum(); @@ -769,6 +824,7 @@ UINT8 InitialSwitchData(void) SwitchDataStru[switchId].SingleSwitchCurPosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].SwitchDrivePos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].SwitchExpDrvPos = SWITCH_DRIVE_POS_INVALID; + SwitchDataStru[switchId].SwitchReverseEnable = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].switchPreExpDrvPos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].SwitMoveStartCycNum = 0u; SwitchDataStru[switchId].SwitDriveStartCycNum = 0u; @@ -798,6 +854,9 @@ UINT8 InitialSwitchData(void) SwitchDataStru[switchId].SwitchCollTolerateCycNum = 0U; SwitchDataStru[switchId].SwitchColPosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].switchFaultState = SWITCH_FAULT_STATE_YES; /*置为板卡故障*/ + SwitchDataStru[switchId].switchNormalPosCycNum = 0u; + SwitchDataStru[switchId].switchUnusualLogSecFlag = SWITCH_UNUSUAL_INVALID; + SwitchDataStru[switchId].switchMutDrvCycNum = 0u; /*初始化被防护锁闭的进路、保护区段、非进路数量及数组*/ for (jj=0; jj wOhlCurSum) + { + chReval = CI_SUCCESS; + for (ii = 0u; ii < wOhlCurSum; ii++) + { + ohlId = GetOhlId(ii); + devBlongCiId = GetOhlBelongCiId(ohlId); /*获取设备所属联锁ID*/ + + if ((0u != ohlId) && (0U != chLocalCiId) && (chLocalCiId == devBlongCiId)) + {/*初始化本控区*/ + OhlDataStru[ohlId].wOhlId = ohlId; + OhlDataStru[ohlId].chPowerState = OHL_POWER_ENERGIZED; /*接触网供电状态*/ + OhlDataStru[ohlId].dwOhlDeEnerCycNum = 0u; /*接触网断电起始周期*/ + OhlDataStru[ohlId].dwOhlUnknowCycNum = 0u; /*接触网未知起始周期*/ + OhlDataStru[ohlId].chOhlBypassFlag = OHL_BYPASS_NO;/*接触网旁路状态*/ + } + else + { + /*不处理*/ + } + } + } + else + { + ;/*返回失败*/ + } + + return chReval; +} + +/* +* 功能描述:初始化ECS数据 +* 参数说明:void +* 返 回 值:0 初始化失败 +* 1 初始化成功 +* Created By LQ 2026.01.26 +*/ +UINT8 InitialEcsData(void) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wEcsSum = 0U; /*防淹门总数*/ + UINT16 wEcsId = 0U; /*防淹门ID*/ + UINT16 ii = 0U; /*游标*/ + + wEcsSum = GetEcsCurSum(); + + for (ii = 0U; ii < wEcsSum; ii++) + { + wEcsId = GetEcsId(ii); + + if ((0U < wEcsId) && (ECS_MAX_NUM > wEcsId)) + { + ECSDataStru[wEcsId].wEcsId = wEcsId; + ECSDataStru[wEcsId].cAutoTrigState = ECS_AUTOTRIG_YES; + ECSDataStru[wEcsId].wRelTrainId = 0U; + ECSDataStru[wEcsId].dwTrainStopStartCycNum = 0U; + ECSDataStru[wEcsId].dwTrainMoveStartCycNum = 0U; + ECSDataStru[wEcsId].cJamState = ECS_JAM_NO; + ECSDataStru[wEcsId].cOccPhySecNum = 0U; + (void)CommonMemSet(ECSDataStru[wEcsId].szOccPhySecId, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM), (UINT8)0U, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM)); + } + else + { + cRetVal = CI_ERROR; + break; + } + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Initial/InitialProcess.h b/TSCP/src/APP/ciapp/Initial/InitialProcess.h index 60f890a..7419bfc 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.h +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.h @@ -73,6 +73,9 @@ #include "../AutoRoute/AutoRouteDataManage.h" #include "../NonAutoReturn/NonAutoReturnDataManage.h" #include "../VirtualDevice/VirtualDevDataManage.h" +#include "../SsksLightRelay/SsksLightRelayDataManage.h" +#include "../ConnectOverride/ConnectOverrideDataMg.h" +#include "SpeedLimitSecDataManage.h" #ifdef SCADE_MODE #include "../LogicManage/General/LogicManageScadeInterface.h" @@ -321,6 +324,24 @@ void InitPlatDataStru(void); */ UINT8 InitLEUDataStru(void); +/* +* 功能描述:SSKS闪灯稳灯继电器动态数据初始化 +* 参数说明:无 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*/ +UINT8 InitSsksLightRelayData(void); + +/* +* 功能描述:联络线旁路继电器动态数据初始化 +* 参数说明:无 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 20260311 +*/ +UINT8 InitConnectOverrideData(void); + /* * 功能描述: 初始化无人折返指示灯状态数据 * 参数说明: void @@ -330,6 +351,22 @@ UINT8 InitLEUDataStru(void); */ UINT8 InitialRtnIndicStaData(void); +/* +* 功能描述:初始化接触网数据 +* 参数说明:void +* 返回值 :返回初始化结果 +*/ +UINT8 InitOhlDataStru(void); + +/* +* 功能描述:初始化ECS数据 +* 参数说明:void +* 返 回 值:0 初始化失败 +* 1 初始化成功 +* Created By LQ 2026.01.26 +*/ +UINT8 InitialEcsData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionConfigDataManage.c b/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionConfigDataManage.c index 770df10..4840c59 100644 --- a/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionConfigDataManage.c @@ -134,6 +134,8 @@ UINT16 GetInvaSectId(UINT16 invSecAndConSwiId) return retVal; } + + /* 功能描述: 获得侵限区段所有条件道岔数量 输入参数: UINT16 invSecAndConSwiId 侵限区段及条件道岔数据ID diff --git a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c index 6157ce7..31df0b8 100644 --- a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c +++ b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c @@ -36,12 +36,17 @@ OverlapDataStruct Record_OverlapDataStru[OVERLAP_SUM_MAX];/* VirCIKeyDataStru Record_VirCIKeyDataStru[VIRTUAL_CI_MAX]= {0u};/*记录虚拟联锁关键数据*/ VirCIKeyDataStru newVirCIKeyDataStru[VIRTUAL_CI_MAX]= {0u}; SpksDataStruct Record_spksDataBuff[SPKS_SUM_MAX] = { 0u }; +SsksLightRelayDataStruct Record_SsksLightRelayDataStr[SSKS_LIGHT_RELAY_SUM_MAX] = { 0U }; /*SSKS闪灯稳灯继电器数据*/ TrainInfoStru Record_TrainInfo[TRAIN_SUM_MAX] = { 0u }; CfpDataStru Record_CfpInfo[CUTOFF_POINT_SUM_MAX] = { 0u }; TsrDataStruct Record_TsrInfo[TSR_MAX_SUM] = { 0u }; /* 参考临时限速动态数据 */ OCStationIndicDataStru Record_OCStationIndicBuff[INDICATOR_SUM_MAX] = { 0u }; LogicalRouteDataStruct Record_LogicalRouteDataStru[ROUTE_LOGICAL_SUM_MAX] = { 0U }; NonAutoReturnDataStruct Record_NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX] = { 0U }; +OhlDataStruct Record_OhlDataStru[OHL_MAX_NUM] = { 0U }; +ECSDataStruct Record_EcsDataStru[ECS_MAX_NUM] = { 0U }; +ConnectOverrideDataStru Record_ConnectOverrideData[CONNECT_OVERRIDE_RELAY_SUM_MAX] = { 0U }; +SpeedLimitSecInfo Record_TRSDataStru[MAX_LINE_SEC_NUM] = { 0U }; UINT8 outString[1024*1024] = {0u};/*比较后的设备打印数据缓冲*/ extern QueueStruct logPrintfQue; /*日志打印缓存队列*/ @@ -475,6 +480,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) TsrDataStruct* pNewTsrInfo = GetTsrData(); /* 临时限速信息 */ CfpDataStru * pNewCfpData = GetCfpData(); SpksDataStruct* pNewSpksData = GetSpksData(); + SsksLightRelayDataStruct* pSsksLightRelayData = NULL; OCStationIndicDataStru* pNewOCStationIndicData = GetOCStationIndicDataStru(); EsbDataStruct* pNewEsbData = GetEsbData(); LogicalRouteDataStruct* pNewLogicalRouteDataStru = GetLogicalRouteStr(); @@ -482,10 +488,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) UINT8 chEnIndex = 0u; UINT8 chTrainIndex = 0u; UINT16 deviceNum = 0u; + UINT16 tsrSecInfoNums = 0u; UINT8 localCiType = 0u; UINT16 wNonAutoReturnCurSum = 0U;/*无人折返按钮当前总数*/ NonAutoReturnDataStruct* pNonAutoReturnData = NULL;/*无人折返数据结构体指针*/ - + OhlDataStruct* pOhlDataStruct = NULL;/*接触网数据结构体指针*/ + ECSDataStruct* pEcsDataStruct = NULL;/*ECS数据结构体指针*/ + SpeedLimitSecInfo* tsrSecInfo = NULL;/*限速区段数据结构体指针*/ + ConnectOverrideDataStru *pConnectOverrideInfo = NULL; /*联络线旁路数据结构体指针*/ /*************************************打印物理区段数据********************************************/ /*打印区段数据*/ @@ -543,10 +553,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 4u; LongToChar(newPhysicalSectionData[deviceId].SecColOccupyStartCycNum, &outString[outStringLength]);/*区段采集占用开始周期*/ outStringLength += 4u; + LongToChar(newPhysicalSectionData[deviceId].SecMergeOccupyStartCycNum, &outString[outStringLength]);/*区段融合占用开始周期*/ + outStringLength += 4U; LongToChar(newPhysicalSectionData[deviceId].SecCurOccupyStartCycNum,&outString[outStringLength]);/*区段当前占用开始周期*/ outStringLength += 4u; LongToChar(newPhysicalSectionData[deviceId].SecOccuToClearStartCycNum,&outString[outStringLength]);/*区段占用变空闲开始周期*/ outStringLength += 4u; + LongToChar(newPhysicalSectionData[deviceId].dwMerOccToIdleStartCycNum, &outString[outStringLength]);/*区段融合空闲开始周期*/ + outStringLength += 4U; LongToChar(newPhysicalSectionData[deviceId].AutoUnlockStartCycNum,&outString[outStringLength]);/*自动解锁延时开始周期*/ outStringLength += 4u; LongToChar(newPhysicalSectionData[deviceId].FaultUnlockStartCycNum,&outString[outStringLength]);/*区故解解锁延时开始周期*/ @@ -713,6 +727,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength++; outString[outStringLength] = newSignalData[deviceId].cDetCutBtnRelayDownState; /*扣车旁路按钮采集继电器落下状态:0x55:正常采集落下,0xaa:通信异常落下*/ outStringLength++; + outString[outStringLength] = newSignalData[deviceId].cTrainCrossRedSignalFlag; /*列车闯红灯标志:0x55-无效,0xAA-有效*/ + outStringLength++; } } else @@ -914,7 +930,13 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newSwitchData[deviceId].SwitchByPassState; /*道岔旁路状态*/ outString[outStringLength++] = newSwitchData[deviceId].chSwitchJichaState; /*道岔挤岔状态*/ LongToChar(newSwitchData[deviceId].SwitchCollTolerateCycNum, &outString[outStringLength]);/*容忍周期号*/ + outStringLength += 4u; + LongToChar(newSwitchData[deviceId].switchNormalPosCycNum, &outString[outStringLength]);/*道岔开始判断常态位置起始周期号*/ outStringLength += 4u; + LongToChar(newSwitchData[deviceId].switchMutDrvCycNum, &outString[outStringLength]);/*道岔驱动起始周期号-定反操互斥*/ + outStringLength += 4u; + outString[outStringLength++] = newSwitchData[deviceId].switchUnusualLogSecFlag;/*道岔非常态位置逻辑区段延时锁闭标志*/ + outString[outStringLength++] = newSwitchData[deviceId].SwitchReverseEnable;/*道岔反位使能请求(迪士尼联络线)*/ } } else @@ -1125,6 +1147,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newRouteData[deviceId].cRouteDrivedSGBJFlag; /*进路驱动声光报警标志:0x55 未驱动过;0xAA 已驱动过*/ outString[outStringLength++] = newRouteData[deviceId].chRouteNearSecSearchState; /*进路接近区段查询状态是否有故障车*/ outString[outStringLength++] = newRouteData[deviceId].chRouteApplySwitchCheckFlag; /*进路办理相邻控区道岔检查标志*/ + outString[outStringLength++] = newRouteData[deviceId].cRouteRequestDrvState; /*迪士尼联络线进路请求继电器(URR)驱动状态*/ + outString[outStringLength++] = newRouteData[deviceId].cRouteReleaseDrvState; /*迪士尼联络线进路释放继电器(UCL)驱动状态*/ + outString[outStringLength++] = newRouteData[deviceId].cRouteAckDrvState; /*迪士尼联络线进路已设置保留继电器(UAR)驱动状态*/ } } else @@ -1356,6 +1381,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newLogicSecData[deviceId].chLinShiXianSuSetSpeed; /*逻辑区段临时限速值*/ outString[outStringLength++] = newLogicSecData[deviceId].chAblRelLogSecUsableFlag; /*ABL列车关联逻辑区段允许使用标志*/ outString[outStringLength++] = newLogicSecData[deviceId].cRouteLeaveLogFlag; /*离去区段ABL列车检查标志*/ + outString[outStringLength++] = newLogicSecData[deviceId].chLogSecFlockType; /*逻辑区段封锁类型*/ + outString[outStringLength++] = newLogicSecData[deviceId].chLogSecProhibitFAOFlag;/*逻辑区段禁止FAO运行状态*/ } } else @@ -1561,6 +1588,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength++; LongToChar(newPsdData[deviceId].dwPsdRelayDownCycNum, &outString[outStringLength]); /*PSD门关继电器落下起始周期*/ outStringLength += 4U; + LongToChar(newPsdData[deviceId].dwPsdMutualLockCollStartCyc, &outString[outStringLength]); /*PSD旁路继电器吸起起始周期*/ + outStringLength += 4U; + LongToChar(newPsdData[deviceId].dwPsdMutualLockErrCollCyc, &outString[outStringLength]); /*PSD旁路继电器故障按下周期*/ + outStringLength += 4U; + LongToChar(newPsdData[deviceId].dwPsdMutualLockStartCyc, &outString[outStringLength]); /*PSD旁路起始周期起始周期*/ + outStringLength += 4U; + outString[outStringLength++] = newPsdData[deviceId].cPsdMutualLockBtnErrState; /*旁路按钮故障状态*/ + outString[outStringLength++] = newPsdData[deviceId].cPsdMutualLockBtnErrDownState; /*屏蔽门旁路按钮故障落下状态:0x55-未故障,0xAA-故障*/ } } else @@ -2195,6 +2230,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) ShortToChar(pNewTrainInfoData[deviceId].wNextTioc, &outString[outStringLength]);/*下一TIOC编号,用作RRM*/ outStringLength += 2u; outString[outStringLength++] = pNewTrainInfoData[deviceId].chDerailment; /*脱轨状态*/ + outString[outStringLength++] = pNewTrainInfoData[deviceId].chIntegrityState; /*完整性状态*/ + outString[outStringLength++] = pNewTrainInfoData[deviceId].chEscapeDoorState; /*逃生门状态*/ ShortToChar(pNewTrainInfoData[deviceId].wHeadAxisId, &outString[outStringLength]);/*前方计轴编号*/ outStringLength += 2u; outString[outStringLength++] = pNewTrainInfoData[deviceId].wHeadITEResult; /*前方ITE识别结果*/ @@ -2762,6 +2799,342 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength = 0u; } + /*************************************打印SSKS闪灯稳灯数据******************************************************/ + pSsksLightRelayData = GetSsksLightRelayData(); + deviceNum = GetSsksLightRelaySum(); + for (ii = 0U; ii < deviceNum; ii++) + { + /*比较数据*/ + comparaResult = DeviceCompara((UINT8*)(&Record_SsksLightRelayDataStr[ii]), (UINT16)sizeof(SsksLightRelayDataStruct), + (UINT8*)(&pSsksLightRelayData[ii]), (UINT16)sizeof(SsksLightRelayDataStruct)); + + if (0U == comparaResult) + { + /*比较数据一致*/ + } + else if (1U == comparaResult) + { + /*比较数据不一致*/ + if (CI_ERROR == Flag) + { + /*不打印设备数据*/ + } + else + { + /**************打印数据信息****************/ + ShortToChar(pSsksLightRelayData[ii].SsksLightRelayId, &outString[outStringLength]); /*SSKS闪灯稳灯继电器ID*/ + outStringLength += 2U; + outString[outStringLength] = pSsksLightRelayData[ii].RelEnterRouteLockFlag; /*关联驶入存车线进路锁闭标志:0x55-无效,0xAA-有效*/ + outStringLength++; + outString[outStringLength] = pSsksLightRelayData[ii].RelExportRouteLockFlag; /*关联驶出存车线进路锁闭标志:0x55-无效,0xAA-有效*/ + outStringLength++; + LongToChar(pSsksLightRelayData[ii].dwSteadyLightDelayStartCycNum, &outString[outStringLength]); /*延时驱稳灯起始周期*/ + outStringLength += 4U; + } + } + else + { + returnValue = CI_ERROR; + break; + } + } + + if (outStringLength == 0U) + { + } + else + { +#ifdef PLATFORM_2OO2 + debug_infor_printf((const)"\nSsksLightRelayData:%d\nSsksLightRelayId(2)-RelEnterRouteLockFlag-RelExportRouteLockFlag-dwSteadyLightDelayStartCycNum(4):%d", (UINT16)sizeof(SsksLightRelayDataStruct), outStringLength); + + debug_out_array(0xAAU, outString, outStringLength); + +#endif + /*清空打印数据*/ + CleanString(outString); + outStringLength = 0U; + } + + /*************************************打印接触网数据******************************************************/ + pOhlDataStruct = GetOhlData(); + deviceNum = GetOhlCurSum(); + for (ii = 0U; ii < deviceNum; ii++) + { + /*比较数据*/ + deviceId = GetOhlId(ii); + + comparaResult = DeviceCompara((UINT8*)(&Record_OhlDataStru[deviceId]), (UINT16)sizeof(OhlDataStruct), + (UINT8*)(&pOhlDataStruct[deviceId]), (UINT16)sizeof(OhlDataStruct)); + + if (0U == comparaResult) + { + /*比较数据一致*/ + } + else if (1U == comparaResult) + { + /*比较数据不一致*/ + if (CI_ERROR == Flag) + { + /*不打印设备数据*/ + } + else + { + /**************打印数据信息****************/ + ShortToChar(pOhlDataStruct[deviceId].wOhlId, &outString[outStringLength]); /*接触网分区ID*/ + outStringLength += 2U; + outString[outStringLength] = pOhlDataStruct[deviceId].chPowerState; /*接触网供电状态:0x55-有电,0xAA-无电,0xFF-未知*/ + outStringLength++; + LongToChar(pOhlDataStruct[deviceId].dwOhlDeEnerCycNum, &outString[outStringLength]); /*接触网断电起始周期*/ + outStringLength += 4U; + LongToChar(pOhlDataStruct[deviceId].dwOhlUnknowCycNum, &outString[outStringLength]); /*接触网未知起始周期*/ + outStringLength += 4U; + outString[outStringLength] = pOhlDataStruct[deviceId].chOhlBypassFlag; /*接触网旁路状态:0x55-未旁路,0xAA-旁路*/ + outStringLength++; + } + } + else + { + returnValue = CI_ERROR; + break; + } + } + + if (outStringLength == 0U) + { + } + else + { +#ifdef PLATFORM_2OO2 + debug_infor_printf((const)"\nOhlData:%d\nwOhlId(2)-chPowerState-dwOhlDeEnerCycNum(4)-dwOhlUnknowCycNum(4)-chOhlBypassFlag:%d", (UINT16)sizeof(OhlDataStruct), outStringLength); + + debug_out_array(0xAAU, outString, outStringLength); + +#endif + /*清空打印数据*/ + CleanString(outString); + outStringLength = 0U; + } + + /*************************************打印ECS数据******************************************************/ + pEcsDataStruct = GetEcsData(); + deviceNum = GetEcsCurSum(); + for (ii = 0U; ii < deviceNum; ii++) + { + /*比较数据*/ + deviceId = GetEcsId(ii); + + comparaResult = DeviceCompara((UINT8*)(&Record_EcsDataStru[deviceId]), (UINT16)sizeof(ECSDataStruct), + (UINT8*)(&pEcsDataStruct[deviceId]), (UINT16)sizeof(ECSDataStruct)); + + if (0U == comparaResult) + { + /*比较数据一致*/ + } + else if (1U == comparaResult) + { + /*比较数据不一致*/ + if (CI_ERROR == Flag) + { + /*不打印设备数据*/ + } + else + { + /**************打印数据信息****************/ + ShortToChar(pEcsDataStruct[deviceId].wEcsId, &outString[outStringLength]); /*ECS/隧道 ID*/ + outStringLength += 2U; + outString[outStringLength] = pEcsDataStruct[deviceId].cAutoTrigState; /*ECS自动触发状态:0x55-启用,0xAA-停用*/ + outStringLength++; + ShortToChar(pEcsDataStruct[deviceId].wRelTrainId, &outString[outStringLength]); /*隧道关联列车ID*/ + outStringLength += 2U; + LongToChar(pEcsDataStruct[deviceId].dwTrainStopStartCycNum, &outString[outStringLength]); /*关联列车停车起始周期号*/ + outStringLength += 4U; + LongToChar(pEcsDataStruct[deviceId].dwTrainMoveStartCycNum, &outString[outStringLength]); /*关联列车移动起始周期号*/ + outStringLength += 4U; + outString[outStringLength] = pEcsDataStruct[deviceId].cJamState; /*隧道拥堵状态:0x55-拥堵,0xAA-不拥堵*/ + outStringLength++; + + if (ECS_REL_PHYSEC_MAX_NUM >= pEcsDataStruct[deviceId].cOccPhySecNum) + { + outString[outStringLength++] = pEcsDataStruct[deviceId].cOccPhySecNum; /*隧道内占用的物理区段数量*/ + for (jj = 0U; jj < pEcsDataStruct[deviceId].cOccPhySecNum; jj++) + { + ShortToChar(pEcsDataStruct[deviceId].szOccPhySecId[jj], &outString[outStringLength]); /*隧道内占用的物理区段ID数组*/ + outStringLength += 2U; + } + } + else + { + outString[outStringLength++] = 0U; /*逻辑进路列车脚下逻辑区段数量超限,不打印*/ + } + } + } + else + { + returnValue = CI_ERROR; + break; + } + } + + if (outStringLength == 0U) + { + } + else + { +#ifdef PLATFORM_2OO2 + debug_infor_printf((const)"\nECSData:%d\nwEcsId(2)-cAutoTrigState-wRelTrainId(2)-dwTrainStopStartCycNum(4)-dwTrainMoveStartCycNum(4)-cJamState-cOccPhySecNum-szOccPhySecId(2*Num):%d", (UINT16)sizeof(ECSDataStruct), outStringLength); + + debug_out_array(0xAAU, outString, outStringLength); + +#endif + /*清空打印数据*/ + CleanString(outString); + outStringLength = 0U; + } + + /*************************************打印联络线旁路数据******************************************************/ + pConnectOverrideInfo = GetConnectOverrideData(); + deviceNum = GetConnectOverrideRelaySum(); + if (NULL == pConnectOverrideInfo) + { + /*异常,nothing*/ + } + else + { + for (ii = 0U; ii < deviceNum; ii++) + { + /*比较数据*/ + deviceId = pConnectOverrideInfo[ii].ConnectOverrideId; + + comparaResult = DeviceCompara((UINT8*)(&Record_ConnectOverrideData[ii]), (UINT16)sizeof(ConnectOverrideDataStru), + (UINT8*)(&pConnectOverrideInfo[ii]), (UINT16)sizeof(ConnectOverrideDataStru)); + + if (0U == comparaResult) + { + /*比较数据一致*/ + } + else if (1U == comparaResult) + { + /*比较数据不一致*/ + if (CI_ERROR == Flag) + { + /*不打印设备数据*/ + } + else + { + /**************打印数据信息****************/ + ShortToChar(pConnectOverrideInfo[ii].ConnectOverrideId, &outString[outStringLength]); + outStringLength += 2u; + outString[outStringLength] = pConnectOverrideInfo[ii].OverrideState; + outStringLength += 1u; + outString[outStringLength] = pConnectOverrideInfo[ii].OverrideReason; + outStringLength += 1u; + LongToChar(pConnectOverrideInfo[ii].OverridePressStartCyc, &outString[outStringLength]); + outStringLength += 4u; + LongToChar(pConnectOverrideInfo[ii].OverrideErrTrigStartCyc, &outString[outStringLength]); + outStringLength += 4u; + outString[outStringLength] = pConnectOverrideInfo[ii].OverrideErrTrigState; + outStringLength += 1u; + outString[outStringLength] = pConnectOverrideInfo[ii].OverrideErrDownState; + outStringLength += 1u; + } + } + else + { + returnValue = CI_ERROR; + break; + } + } + + if (0u == outStringLength) + { + /*nothing*/ + } + else + { +#ifdef PLATFORM_2OO2 + debug_infor_printf((const)"\nConnectOverrideData:%d\nId(2)-State(1)-Reason(1)-PressCyc(4)-ErrTrigCyc(4)-ErrTrigStt(1)-ErrDownStt(1):%d", (UINT16)sizeof(ConnectOverrideDataStru), outStringLength); + + debug_out_array(0xAAU, outString, outStringLength); + +#endif + /*清空打印数据*/ + CleanString(outString); + outStringLength = 0U; + } + } + + /*************************************打印SpeedLimitSec数据******************************************************/ + tsrSecInfo = GetSpeedLimitSecInfo(); + tsrSecInfoNums = GetSpeedLimitSectionSum(); + + for (ii = 0; ii < tsrSecInfoNums; ii++) + { + /*比较数据*/ + deviceId = GetSpeedLimitSecId(ii); + comparaResult = DeviceCompara((UINT8*)(&Record_TRSDataStru[deviceId]), (UINT16)sizeof(SpeedLimitSecInfo), + (UINT8*)(&tsrSecInfo[deviceId]), (UINT16)sizeof(SpeedLimitSecInfo)); + + if (0U == comparaResult) + { + /*比较数据一致*/ + } + else if (1U == comparaResult) + { + /*比较数据不一致*/ + if (CI_ERROR == Flag) + { + /*不打印设备数据*/ + } + else + { + /**************打印数据信息****************/ + ShortToChar(tsrSecInfo[deviceId].secID, &outString[outStringLength]); /*限速区段ID*/ + outStringLength += 2U; + outString[outStringLength] = tsrSecInfo[deviceId].chTSRSetFlag; /*临时限速设置标志位,0x55设置,0xaa 未设置*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chNRSRSetFlag; /*NR限速设置标志位,0x55设置,0xaa 未设置*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chTFSRSetFlag; /*台风限速设置标志位,0x55设置,0xaa 未设置*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chAllSRSetFlag; /*全线限速设置标志位,0x55设置,0xaa 未设置*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chTSRSetValue; /*临时限速值*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chNRSRSetValue; /*NR限速值*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chTFSRSetValue; /*台风限速值*/ + outStringLength++; + outString[outStringLength] = tsrSecInfo[deviceId].chAllSRSetValue; /*全线限速值*/ + outStringLength++; + + } + } + else + { + returnValue = CI_ERROR; + break; + } + + } + + if (outStringLength == 0U) + { + + } + else + { +#ifdef PLATFORM_2OO2 + debug_infor_printf((const)"\nSLSData:%d\nsecID(2)--TSRSetFlag-NRSRSetFlag-TFSRSetFlag-AllSRSetFlag:%d", (UINT16)sizeof(SpeedLimitSecInfo), outStringLength); + + debug_out_array(0xAAU, outString, outStringLength); + +#endif + /*清空打印数据*/ + CleanString(outString); + outStringLength = 0U; + } + + return returnValue; } diff --git a/TSCP/src/APP/ciapp/LogRecord/LogRecord.h b/TSCP/src/APP/ciapp/LogRecord/LogRecord.h index 0232af4..215cb00 100644 --- a/TSCP/src/APP/ciapp/LogRecord/LogRecord.h +++ b/TSCP/src/APP/ciapp/LogRecord/LogRecord.h @@ -45,6 +45,10 @@ #include "../Route/LogicalRouteDataManage.h" #include "NonAutoReturnDataManage.h" #include "NonAutoReturnConfigDataManage.h" +#include "../SsksLightRelay/SsksLightRelayDataManage.h" +#include "../ECS/ECSDataManage.h" +#include "SpeedLimitSecConfigDataManage.h" +#include "../ConnectOverride/ConnectOverrideDataMg.h" #ifdef PLATFORM_LABVIEW_DEBUG #include "stdio.h" diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c index 1e8963a..ebd0a24 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c @@ -878,7 +878,7 @@ void PhySecFaultUnlockLogicManage(const UINT16 phySectionId,const UINT8 virCIid) */ /*正常情况下区故解绿光带*/ - phyFaultUnLockRes = PhySecFaultUnlockLogicProcess(phySectionId); + phyFaultUnLockRes = PhySecFaultUnlockLogicProcess(phySectionId, CI_ERROR); if (CI_SUCCESS == phyFaultUnLockRes) { /*成功*/ routeDir = GetRouteDirection(lockBelongRouteId); @@ -993,7 +993,7 @@ void PhySecFaultUnlockLogicManage(const UINT16 phySectionId,const UINT8 virCIid) (CICI_RELAY_INTERFACE_CONFIRM_YES == confirmRelayInterfaceFlag)&& (FUNC_SWITCH_ON == funcSwitchSupportRelayInterface)) { - phyFaultUnLockRes = PhySecFaultUnlockLogicProcess(phySectionId); + phyFaultUnLockRes = PhySecFaultUnlockLogicProcess(phySectionId, CI_ERROR); if (CI_SUCCESS == phyFaultUnLockRes) { /*成功*/ routeDir = GetRouteDirection(lockBelongRouteId); @@ -1607,6 +1607,7 @@ void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockT UINT8 CheckPhySecFaultUnlockCanDo(const UINT16 phySectionId,const UINT8 virCIid) { UINT16 lockBelongRouteId = 0u; /*区段锁闭所属进路ID*/ + UINT16 wTempPhySecId = 0u; UINT8 reVal = CI_ERROR; UINT8 belongvirCIid = 0u; UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); @@ -1672,7 +1673,7 @@ UINT8 CheckPhySecFaultUnlockCanDo(const UINT16 phySectionId,const UINT8 virCIid) /*按顺序解锁进路异常锁闭*/ if (CI_SUCCESS == reVal) { - isErrLock = RouteFirstLockErrCheck(lockBelongRouteId); + isErrLock = RouteFirstLockErrCheck(lockBelongRouteId, &wTempPhySecId); phyLockState = GetPhySecLockState(phySectionId); /*第一个锁闭的区段是故障锁闭*/ if (CI_SUCCESS == isErrLock ) diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c index 2cce109..942250e 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c @@ -22,7 +22,7 @@ #include "LogicalRouteDataManage.h" #include "../LogicProcess/LogicalRouteLogicCheck.h" #include "../LogicManage/TradInterlockLogicManage.h" - +#include "../ECS/ECSDataManage.h" @@ -76,6 +76,11 @@ static void TrainTransitmitStatJumpLockProcess(const UINT16 logSectionId, const * 返回值 : */ static void TrainLogicSecResRetreatManage(void); +static void SetReverseEnableByRouteId(UINT16 wRouteId, UINT8 cDrivePos); +static UINT8 DsnConnectRouteCancelProc(const UINT16 routeId); +static void RouteReqRlsRelayKeepProc(UINT16 wRouteId); +static void DisneyConnectAutoCancelProc(UINT16 wRouteId); +static void RouteNearOpenToLockErrProc(UINT16 routeId); /* * 功能描述: 设置联锁引导总锁标志逻辑 @@ -143,10 +148,13 @@ void SetCiYLockManage_UseVirCI(UINT8 setFlag, const UINT8 virCIid) void InterlockLogicMainProc(void) { UINT8 localCiType = GetLocalCiType(); - UINT8 cRcWorkMode = GetLocalRcWorkMode(); + UINT8 cDsnFuncSwitch = 0U; /*迪士尼功能开关*/ + + cDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); signed long long cost[20] = {0U}; - cost[0] = MSCP_GetTick(); + cost[0] = MSCP_GetTick(); + if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType)) { /*全自动折返进路逻辑处理*/ @@ -159,9 +167,14 @@ void InterlockLogicMainProc(void) NearCIRouteNeedCloseProce(); /*cgh-合并CID-2341-8:清除保护区段的选排起始周期号, 进路空闲状态,清除进路保护区段选排起始周期*/ ClearOverlapXuanPaiStartCycNum(); - if (CI_TYPE_SCX == localCiType) + + if ((CI_TYPE_SCX == localCiType) && (FUNC_SWITCH_ON != cDsnFuncSwitch)) { - CiTrainTestLogicManage(); + CiTrainTestLogicManage(); /*增加DSN开关防护*/ + } + else + { + /*DSN试车线更新试车状态放到输入处理,原因:放到输入处理,在不允许试车后,可当周期执行封锁区段等处理*/ } #if 0 /*指示灯逻辑管理*/ @@ -199,6 +212,9 @@ void InterlockLogicMainProc(void) /*进路逻辑处理*/ RouteLogicManage(); + /*道岔常态位置逻辑处理(释放解锁前)*/ + SwitchNormalPosProc(); + /*保护区段照查继电器更新管理*/ OverlapZhaoChaRelayUpDateManage(); @@ -222,6 +238,10 @@ void InterlockLogicMainProc(void) /*跳跃锁闭逻辑处理*/ JumpLockManage(); + + /*信号机列车闯红灯处理*/ + SignalTrainCrossRedPro(); + cost[4] = MSCP_GetTick(); debug_infor_printf((const)"\n JKJRelayLogicProcess :%dms RouteLogicManage:%dms LogicSecResManage:%dms JumpLockManage:%dms \n",(cost[1]-cost[0])/1000,(cost[2]-cost[1])/1000,(cost[3]-cost[2])/1000,(cost[4]-cost[3])/1000); @@ -723,8 +743,6 @@ void RouteAutoManage(const UINT16 routeId) UINT8 routeTriggerOccu = 0u; UINT8 phySectionUseState = 0u; UINT16 routeAutoReturnId = 0u; - UINT8 virCIid = 0u; - UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); checkDSBreakLoseEfficacyFlag = GetCiFunctionSwitchConfig(FUNC_DS_BREAK_AUTOSIG_LOSE_EFFICACY_FLAG); @@ -1089,10 +1107,8 @@ void RouteFirstXuanPaiManage(const UINT16 routeId) */ void RouteXuanPaiManage(const UINT16 routeId) { - UINT8 returnValue = CI_ERROR; /*返回值定义*/ - UINT8 NeedForDrvRoutAssoSwit = SWITCH_NEED_DRIV_FALSE; /*带动道岔是否需要被驱动*/ - UINT8 routSwitDrvOvtmFlag = 0U;/*进路内道岔是否驱动超时标志*/ - UINT8 chkSwitchPos = CI_ERROR; + UINT8 returnValue = CI_ERROR; /*返回值定义*/ + UINT8 wDsnConnectAttr = CI_ERROR; /*迪士尼联络线进路类型*/ returnValue = LockRouteProc(routeId); @@ -1100,10 +1116,27 @@ void RouteXuanPaiManage(const UINT16 routeId) { RouteXuanPaiCommonProcess(routeId, returnValue); } - else if (RETURN_LOCK_ERR_WAIT_SWCHECK == returnValue) + else if ((RETURN_LOCK_ERR_WAIT_SWCHECK == returnValue) || (RETURN_WAIT_DSNCONNECT_REQRLS == returnValue)) { /*等待相邻联锁反馈道岔检查状态*/ - ; + /*或迪士尼联络线进路等待URR、UCL到位*/ + } + else if (RETURN_WAIT_DSNCONNECT_OTHERCI == returnValue) + { + /*进此分支说明道岔已转动到位,设置联络线道岔反位使能请求无效*/ + SetReverseEnableByRouteId(routeId, SWITCH_DRIVE_POS_INVALID); + /*终端属于本线的进路,道岔动作到位后,驱动UAR吸起,等待区段方向锁闭有效*/ + wDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + /*设置进路协议继电器*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR吸起*/ + SetRouteAckDrvState(routeId, RELAY_STATE_UP); + } + else + { + /*nothing*/ + } } else { @@ -1416,10 +1449,101 @@ void RouteFirstLockErrManage(const UINT16 routeId) SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } + else + { + /*迪士尼联络线进路自动取消处理*/ + DisneyConnectAutoCancelProc(routeId); + } } } } +/* +* 功能描述: 迪士尼联络线自动取消进路处理 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : void +* 注意事项: 需在外部判断信号已关闭且无重开 +* 无需在外部判断进路联络线属性 +*/ +static void DisneyConnectAutoCancelProc(UINT16 wRouteId) +{ + UINT8 cDisneyConnectAttr = CI_ERROR; + UINT8 checkSum = 0u; + RouteOtherCheckStruct *pDataOtherCiDevBuf = NULL; + UINT8 i = 0u; + UINT8 cRelayState = RELAY_STATE_UP; + UINT8 cAutoCancelFlag = CI_ERROR; + UINT16 wRelayBelongOcId = 0U; /*继电器所属OC*/ + UINT8 cOcCommState = TRANSMIT_STATE_BAD; /*与OC通信状态*/ + UINT8 cABoardState = RELAY_BOARD_FAULT_YES; /*A系板卡状态*/ + UINT8 cBBoardState = RELAY_BOARD_FAULT_YES; /*B系板卡状态*/ + + /*迪士尼联络线自动取消进路处理*/ + cDisneyConnectAttr = GetRouteDisneyConnectAttr(wRouteId); + if (ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + { + /*只有完全处于联络线的进路能自动取消进路*/ + /*获取进路CBTC其他联锁*/ + checkSum = GetRouteCbtcOtherCiSum(wRouteId); + pDataOtherCiDevBuf = GetRouteCbtcOtherCiBuf(wRouteId); + if ((0u == checkSum) || (NULL == pDataOtherCiDevBuf)) + { + /*没有其他联锁,或指针防空异常,导向不自动取消*/ + } + else + { + /*判断所有区段方向锁闭继电器是否都落下*/ + cAutoCancelFlag = CI_SUCCESS; + for (i = 0u; i < checkSum; i++) + { + if (CI_DEVICE_TYPE_SECDIRLOCK == pDataOtherCiDevBuf[i].DevType) + { + cRelayState = GetRelayCollState(pDataOtherCiDevBuf[i].DevId); + /*获取所属OC*/ + wRelayBelongOcId = GetRelayBelongOCId(pDataOtherCiDevBuf[i].DevId); + /*获取与OC通信状态*/ + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); + /*获取A系板卡状态*/ + cABoardState = GetRelayACollBoardState(pDataOtherCiDevBuf[i].DevId); + /*获取B系板卡状态*/ + cBBoardState = GetRelayBCollBoardState(pDataOtherCiDevBuf[i].DevId); + /*判断继电器是否确实落下*/ + if ((RELAY_STATE_DOWN == cRelayState) + && (TRANSMIT_STATE_GOOD == cOcCommState) + && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*方向锁闭继电器确实落下*/ + } + else + { + /*未确实落下,不满足自动取消条件,退出判断*/ + cAutoCancelFlag = CI_ERROR; + break; + } + } + else + { + /*继续遍历*/ + } + } + + if (CI_SUCCESS == cAutoCancelFlag) + { + /*取消成功,进路转为空闲*/ + SetRouteStateManage(wRouteId, ROUTE_STATE_IDLE); + } + else + { + /*不满足自动总取消*/ + } + } + } + else + { + /*不处理*/ + } +} + /* * 功能描述: 进路预先锁闭管理 @@ -1433,6 +1557,8 @@ void RouteYuXianLockManage(const UINT16 routeId) UINT8 startSignalCurColor = 0u; /*始端信号机当前颜色*/ UINT8 startSignalPreDrvColor = 0u; /*始端信号机上周期驱动颜色*/ UINT8 cFuncRetVal = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; /*迪士尼联络线进路属性*/ + UINT8 cSignalOpenCloseState = CI_ERROR; /*信号机开放判断*/ /*获取进路动态字段*/ startSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/ @@ -1444,9 +1570,14 @@ void RouteYuXianLockManage(const UINT16 routeId) if (SIGNAL_OPEN == openCloseState) {/*始端信号机开放*/ - if (SIGNAL_OPEN != GetSignalOpenCloseState(startSignalPreDrvColor)) + cSignalOpenCloseState = GetSignalOpenCloseState(startSignalPreDrvColor); + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((SIGNAL_OPEN != cSignalOpenCloseState) + && (ROUTE_DISNEY_CONNECT_ALLOTHER != cDisneyConnectAttr) + && (ROUTE_DISNEY_CONNECT_ENDMINE != cDisneyConnectAttr)) {/*之前驱动关闭*/ /*驱动关闭的信号机未关闭*/ + /*迪士尼联络线进路,始端信号机在联络线的,不关心之前驱动状态*/ } else {/*之前驱动开放*/ @@ -1516,6 +1647,8 @@ void RouteYuXianLockManage(const UINT16 routeId) else { /*无重开或自动信号*/ + /*迪士尼联络线进路自动取消处理*/ + DisneyConnectAutoCancelProc(routeId); } } } @@ -1536,6 +1669,7 @@ void RouteYuXianOpenManage(const UINT16 routeId) UINT8 funcId = EFUNC_RouteYuXianOpenManage;/*函数ID*/ UINT8 checkResult = 0u; UINT8 dctyReOpenFlag = ROUTE_DCTY_REOPEN_NO; + UINT8 cDsnConnectAttr = CI_ERROR; /*获取进路动态字段*/ startSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/ @@ -1604,6 +1738,17 @@ void RouteYuXianOpenManage(const UINT16 routeId) } else { + /*始端在联络线的信号机需要赋值等待恢复,否则无法自动重开*/ + cDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDsnConnectAttr) || (ROUTE_DISNEY_CONNECT_ENDMINE == cDsnConnectAttr)) + { + SetRouteRecoverState(routeId, ROUTE_RECOVER_STA_WAIT); + } + else + { + /*nothing*/ + } + /*信号关闭*/ checkResult = RouteHaveTrainNear(routeId); if (CI_SUCCESS == checkResult) @@ -1646,6 +1791,8 @@ void RouteNearLockErrManage(const UINT16 routeId) UINT8 routeRepeatStat = 0U; UINT8 routeTrainNear = 0U; UINT8 cFuncRetVal = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; /*迪士尼联络线进路属性*/ + UINT8 cSignalOpenCloseState = CI_ERROR; /*信号机开放判断*/ /*获取进路始端信号机ID*/ startSignalId = GetRouteStartSignalId(routeId); @@ -1665,9 +1812,14 @@ void RouteNearLockErrManage(const UINT16 routeId) routeTrainNear = RouteHaveTrainNear(routeId); /*进路列车接近*/ if (SIGNAL_OPEN == openCloseState) {/*始端信号机开放*/ - if (SIGNAL_OPEN != preOpenCloseState) + cSignalOpenCloseState = GetSignalOpenCloseState(startSignalPreDrvColor); + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((SIGNAL_OPEN != cSignalOpenCloseState) + && (ROUTE_DISNEY_CONNECT_ALLOTHER != cDisneyConnectAttr) + && (ROUTE_DISNEY_CONNECT_ENDMINE != cDisneyConnectAttr)) {/*之前驱动关闭*/ - /*驱动关闭的信号机未关闭*/ + /*驱动关闭的信号机未关闭*/ + /*迪士尼联络线进路,始端信号机在联络线的,不关心之前驱动状态*/ } else {/*之前驱动开放*/ @@ -1741,6 +1893,8 @@ void RouteNearLockErrManage(const UINT16 routeId) else { /*无重开信号*/ + /*迪士尼联络线进路自动取消处理*/ + DisneyConnectAutoCancelProc(routeId); } } } @@ -1761,8 +1915,8 @@ void RouteNearOpenManage(const UINT16 routeId) UINT16 ii = 0u; /*循环索引*/ UINT8 curColor = 0u; UINT8 sigState = 0u; - UINT8 funcId = EFUNC_RouteNearOpenManage;/*函数ID*/ UINT8 checkResult = 0u; + UINT8 cDisneyConnectAttr = CI_ERROR; /*进路迪士尼联络线属性*/ /*获取进路动态字段*/ startSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/ @@ -1870,8 +2024,58 @@ void RouteNearOpenManage(const UINT16 routeId) } else { - /*信号故障关闭*/ - SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCKERR); /*-->设置接近锁闭异常*/ + /*信号异常关闭,降低圈复杂度提成子函数*/ + RouteNearOpenToLockErrProc(routeId); + } +} + +/* +* 功能描述: 进路接近开放转接近锁闭异常 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : void +*/ +static void RouteNearOpenToLockErrProc(UINT16 routeId) +{ + UINT16 startSignalId = 0u; /*进路始端信号机ID*/ + UINT8 curColor = 0u; + UINT8 sigState = 0u; + UINT8 funcId = EFUNC_RouteNearOpenManage;/*函数ID*/ + UINT8 cDisneyConnectAttr = CI_ERROR; /*进路迪士尼联络线属性*/ + UINT8 chRetVal = CI_ERROR; /*承接返回值*/ + + /*获取进路始端信号机ID*/ + startSignalId = GetRouteStartSignalId(routeId); + curColor = GetSignalCurColor(startSignalId); + sigState = GetSignalOpenCloseState(curColor); + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr)) + { + /*迪士尼联络线处理*/ + chRetVal = RouteLTrainEnter(routeId); + if (CI_SUCCESS == chRetVal) + { + /*-->设置接近锁闭正常*/ + SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCK); + } + else + { + /*信号故障关闭*//*-->设置接近锁闭异常*/ + SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCKERR); + + /*增加信号机故障关闭报馈警*/ + SetErrorData(funcId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, sigState, ESEND_LEVEL_ATS); + + /*保持开放期间信号异常关闭,设置对应始端信号机扣车旁路按钮无效*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + + /*始端在联络线的信号机需要赋值等待恢复,否则无法自动重开*/ + SetRouteRecoverState(routeId, ROUTE_RECOVER_STA_WAIT); + } + } + else + { + /*信号故障关闭*//*-->设置接近锁闭异常*/ + SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCKERR); /*增加信号机故障关闭报馈警*/ SetErrorData(funcId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, sigState, ESEND_LEVEL_ATS); @@ -1881,7 +2085,6 @@ void RouteNearOpenManage(const UINT16 routeId) } } - /* * 功能描述: 进路接近锁闭管理 * 参数说明: const UINT16 routeId, 进路ID @@ -2005,6 +2208,8 @@ void RouteNearLockManage(const UINT16 routeId) UINT16 returnSecId = 0U; /*折返区段*/ UINT8 localCiType = 0U;/*联锁类型*/ UINT8 cFuncRetVal = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; /*迪士尼联络线进路属性*/ + UINT8 cSignalOpenCloseState = CI_ERROR; /*信号机开放判断*/ localCiType = GetLocalCiType(); /*获取进路始端信号机ID*/ @@ -2038,9 +2243,14 @@ void RouteNearLockManage(const UINT16 routeId) if (SIGNAL_OPEN == openCloseState) {/*始端信号机开放*/ - if (SIGNAL_OPEN != GetSignalOpenCloseState(startSignalPreDrvColor)) + cSignalOpenCloseState = GetSignalOpenCloseState(startSignalPreDrvColor); + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((SIGNAL_OPEN != cSignalOpenCloseState) + && (ROUTE_DISNEY_CONNECT_ALLOTHER != cDisneyConnectAttr) + && (ROUTE_DISNEY_CONNECT_ENDMINE != cDisneyConnectAttr)) {/*之前驱动关闭*/ /*驱动关闭的信号机未关闭*/ + /*迪士尼联络线进路,始端信号机在联络线的,不关心之前驱动状态*/ } else {/*之前驱动开放*/ @@ -2259,6 +2469,8 @@ void RouteDelayUnlockManage(const UINT16 routeId) UINT16 wLastTrainId = 0u; UINT32 curCycle = 0u; UINT8 chRouteState = 0u; + UINT8 cDsnConnectCond = CI_ERROR; + UINT8 cStopEnsureFlag = CI_ERROR; /*获取进路动态字段*/ routeLevel = GetRouteLevel(routeId); /*获取进路监督级别*/ @@ -2291,8 +2503,9 @@ void RouteDelayUnlockManage(const UINT16 routeId) { /*延时计时*/ checkTimeState = SystemOverTimeCheck(delayStartCycNum, delayTotalCycSum); - /*解锁计时超时*/ - if (CI_TIME_OUT == checkTimeState) + cDsnConnectCond = DsnConnectRouteCancelProc(routeId); + /*解锁计时超时,且联络线条件满足*/ + if ((CI_TIME_OUT == checkTimeState) && (CI_SUCCESS == cDsnConnectCond)) { /*-->设置进路空闲*/ SetRouteStateManage(routeId, ROUTE_STATE_IDLE); @@ -2323,8 +2536,10 @@ void RouteDelayUnlockManage(const UINT16 routeId) { /*取消成功*/ checkTimeState = SystemOverTimeCheck(delayStartCycNum, delayTotalCycSum); - - if ((CI_TIME_OUT == checkTimeState) || (ROUTE_STOPENSURE_YES == GetRouteStopensureFlag(routeId))) + cDsnConnectCond = DsnConnectRouteCancelProc(routeId); + cStopEnsureFlag = GetRouteStopensureFlag(routeId); + if (((CI_TIME_OUT == checkTimeState) || (ROUTE_STOPENSURE_YES == cStopEnsureFlag)) + && (CI_SUCCESS == cDsnConnectCond)) { /*解锁超时或收到停车保证*/ SetRouteStateManage(routeId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ @@ -2580,6 +2795,7 @@ void RoutePhySecAutoUnlockErrManage(const UINT16 routeId) UINT32 logUnlockStartCycNum = 0u; UINT32 phyUnlockStartCycNum = 0u; UINT16 logBelongPhyId = 0u; + UINT8 cDsnConnectAttr = 0u; /*获取第一个延时锁闭逻辑区段*/ dlockLogId = GetRouteFirstDelayLockLogId(routeId); @@ -2607,8 +2823,25 @@ void RoutePhySecAutoUnlockErrManage(const UINT16 routeId) { /*不做处理*/ } + + /*迪士尼联络线自动区故解处理*/ + cDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDsnConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDsnConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cDsnConnectAttr)) + { + DsnConnectRouteSecUnlockProc(routeId); + } + else + { + /*nothing*/ + } + /*异常锁闭区段传递*/ RouteExpLockContinue(routeId); + + /*迪士尼联络线URR、UCL状态保持处理*/ + RouteReqRlsRelayKeepProc(routeId); } @@ -4000,7 +4233,6 @@ UINT8 KeepOpenRouteSignalProc(const UINT16 routeId) UINT16 startSignalId = 0u; /*进路始端信号机ID*/ UINT8 returnValue = 0u; /*返回值定义*/ UINT8 errType = CI_ERROR;/*定义检查失败时的错误类型*/ - UINT8 ciType = 0u; UINT16 outPhySecId = 0u; /*信号机外方第一区段ID*/ UINT16 inPhySecId = 0u; /*信号机内方第一区段ID*/ UINT8 inPhySecCurMergeState = 0U; @@ -4104,6 +4336,50 @@ UINT8 KeepOpenRouteSignalProc(const UINT16 routeId) } } +/* +* 功能描述: 迪士尼联络线总取消处理 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : UINT8 CI_SUCCESS 满足取消条件 CI_ERROR 不满足 +* 注意事项: 在取消进路前,或人解延时后解锁前调用 +*/ +static UINT8 DsnConnectRouteCancelProc(const UINT16 routeId) +{ + UINT8 cDsnConnectAttr = CI_ERROR; + UINT16 wCollRouteReleaseRelayId = 0u; + UINT8 cCollRouteReleaseState = RELAY_STATE_DOWN; + UINT8 retVal = CI_ERROR; + + cDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if (ROUTE_DISNEY_CONNECT_ENDMINE == cDsnConnectAttr) + { + /*后半段属于本线的联络线进路,检查UCL吸起*/ + wCollRouteReleaseRelayId = GetCollRouteReleaseRelayId(routeId); + if (0u == wCollRouteReleaseRelayId) + { + /*查询失败*/ + } + else + { + cCollRouteReleaseState = GetRelayCollState(wCollRouteReleaseRelayId); + if (RELAY_STATE_UP == cCollRouteReleaseState) + { + /*UCL吸起,返回成功*/ + retVal = CI_SUCCESS; + } + else + { + /*不处理*/ + } + } + } + else + { + /*无需检查,返回成功*/ + retVal = CI_SUCCESS; + } + + return retVal; +} /* * 功能描述: 进路总取消处理 @@ -4118,24 +4394,25 @@ void RouteZongQuXiaoProc(const UINT16 routeId) UINT8 routeDelayUnlockflag = 0u; /* 进路延时解锁属性*/ UINT8 checkRouteCancel = 0u; UINT8 cSignalInHumidRailFlag = PHYSEC_IN_HUMID_RAIL_NO; /*信号机湿轨标志*/ + UINT8 cDsnConnectCond = CI_ERROR; + UINT8 cSignalOpenState = SIGNAL_OPEN; /*获取进路动态字段*/ routeState = GetRouteState(routeId); /*获取进路状态*/ startSignalId = GetRouteStartSignalId(routeId); sigCurColor = GetSignalCurColor(startSignalId); + cSignalOpenState = GetSignalOpenCloseState(sigCurColor); - if (GetSignalOpenCloseState(sigCurColor) == SIGNAL_OPEN) + cDsnConnectCond = DsnConnectRouteCancelProc(routeId); + if ((SIGNAL_OPEN == cSignalOpenState) || ((CI_SUCCESS != cDsnConnectCond))) { - /*信号未关闭*/ - + /*信号未关闭,或联络线UCL未吸起,不执行后面的*/ (void)DriveSignalClose(startSignalId); /*驱动信号关闭*/ - return; } else { - /*信号已关闭*/ - + /*信号已关闭,且迪士尼联络线检查条件通过(非联络线进路直接通过)*/ SetRouteZongQuXiaoFlag(routeId, ROUTE_ZONGQUXIAO_SET_NO); /*取消进路总取消标志*/ } @@ -4362,6 +4639,7 @@ void RouteZongRenJieProc(const UINT16 routeId) UINT8 checkResultSecAndQXZC = 0u; /*RouteExceptLastSecOccuClrCheck此函数的检查结果*/ UINT8 cSignalColor = 0u; UINT8 cSignalOpenState = 0u; + UINT8 cDsnConnectCond = CI_ERROR; /*获取进路动态字段*/ routeState = GetRouteState(routeId); /*获取进路状态*/ @@ -4373,7 +4651,7 @@ void RouteZongRenJieProc(const UINT16 routeId) if (SIGNAL_OPEN == cSignalOpenState) { /*信号未关闭*/ - + /*始端在邻线的进路不驱动信号关闭*/ (void)DriveSignalClose(startSignalId); /*驱动信号关闭*/ #if 0 SetRouteZongRenJieCloseFlag(routeId, ROUTE_ZRJ_CLOSE_FLAG_YES); /*进路信号关闭是总人解导致*/ @@ -4397,10 +4675,8 @@ void RouteZongRenJieProc(const UINT16 routeId) if ((ROUTE_STATE_XUANPAI == routeState) || (ROUTE_STATE_FIRST_XUANPAI == routeState)) { /*进路选排或初选*/ - /*取消进路选排*/ SetRouteStateManage(routeId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ - } else if ((ROUTE_STATE_FIRST_LOCK == routeState) || (ROUTE_STATE_FIRST_LOCKERR == routeState) || @@ -4449,7 +4725,15 @@ void RouteZongRenJieProc(const UINT16 routeId) if (CI_SUCCESS == checkResult) {/*已无占用*/ - SetRouteStateManage(routeId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ + cDsnConnectCond = DsnConnectRouteCancelProc(routeId); + if (CI_SUCCESS == cDsnConnectCond) + { + SetRouteStateManage(routeId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ + } + else + { + /*等待*/ + } } else { @@ -5344,16 +5628,12 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI UINT8 cLogicSectionSum = 0u; /*逻辑区段总数*/ UINT16* pLogicSectionIdBuf = NULL; /*逻辑区段ID数组*/ UINT8 ii = 0u; /*遍历变量*/ - UINT8 jj = 0U; UINT8 rtVal = CI_ERROR; UINT8 routeDir = 0u;/*进路方向*/ UINT8 haveDirChangeInRoute = 0u;/*进路内有方向变化点*/ UINT8 haveDirChangeAfterRoute = 0u;/*进路和保护区段之间有方向变化点*/ UINT8 cLogicSectionLockState = 0u; UINT16 wRouteLastLogicSectionId = 0u; - UINT8 cTrainSum = 0u; - LogicTrainResStruct* pLogicTrainResData = NULL; - UINT16 wLockBelongRouteId = 0u;/*逻辑区段锁闭所属进路ID*/ phySecSum = GetOverlapPhySecSum(overlapId); /*获取overlap物理区段总数*/ pPhySecIdBuf = GetOverlapPhySecIdBuf(overlapId); /*获取overlap物理区段ID数组*/ @@ -5561,7 +5841,6 @@ void SetCommonRouteLogicManage(const UINT16 routeId,const UINT8 chSendLevel) UINT8 checkRetVal = CI_FALSE; UINT16 startSignalId = 0u; UINT8 sendLevel = 0u; /*故障发送级别*/ - UINT8 virCIid = 0u; UINT8 funcSwitch = 0u; /*功能开关*/ UINT8 cRcWorkMode = 0u; UINT8 cKeepWorkFlag = CI_ERROR; @@ -6027,8 +6306,6 @@ void RouteZongQuXiaoLogicManage(const UINT16 routeId) UINT8 overlapSum = 0u; UINT16* overlapIdBuf = NULL; UINT8 ii = 0u; - UINT8 virCIid = 0u; - UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX)) { @@ -6095,8 +6372,6 @@ void RouteZongRenJieLogicManage(const UINT16 routeId) UINT8 overlapSum = 0u; UINT16* overlapIdBuf = NULL; UINT8 ii = 0u; - UINT8 virCIid = 0u; - UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX)) { @@ -6197,7 +6472,7 @@ void SetSwitchPositionLogicManage(const UINT16 switchId, const UINT8 switchSetPo if (CI_SUCCESS == check_Result) {/*单操位置有效*/ /*道岔单操逻辑处理*/ - if (CI_SUCCESS == SetSwitchPositionLogicProcess(switchId, switchSetPos, 0U, &chTemp)) + if (CI_SUCCESS == SetSwitchPositionLogicProcess(switchId, switchSetPos, 0U, &chTemp, ESEND_LEVEL_ATS)) { /*成功*/ (void)SetSwitchDanCaoPosition(switchId, switchSetPos); /*设置单操位置标志*/ } @@ -7053,8 +7328,6 @@ void SetStartupUnLockLogicManage(void) void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) { UINT8 setStateResult = 0u; - UINT8 virCIid = 0u; - UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); UINT8 trainIdSum = 0u; /*列车ID总数量*/ UINT8 i = 0u; /*索引*/ UINT16* ptrainIdBuff = NULL; /*列车ID BUFF*/ @@ -7066,9 +7339,11 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) UINT8 cSGBJDelayOpenFlag = 0U; /*声光报警延时开放标志*/ UINT8 cRelZuHeSGBJDelayOpenFlag = 0U; /*关联组合进路声光报警延时开放标志*/ UINT32 dwCurDelayOpenStartCycNum = 0U; /*进路声光报警延时开放起始周期*/ + UINT8 wDsnConnectAttr = CI_ERROR; localCiType = GetLocalCiType(); curCycNum = Get2oo2CurCycleNum(); + wDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); switch (routeState) { @@ -7113,6 +7388,26 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) /*设置进路办理道岔检查标志为默认*/ SetRouteApplySwitchCheckFlag(routeId, ROUTE_APPLY_SWITCH_CHECK_DEF); + /*设置联络线道岔反位使能请求无效*/ + SetReverseEnableByRouteId(routeId, SWITCH_DRIVE_POS_INVALID); + + /*设置联络线进路协议继电器*/ + if (ROUTE_DISNEY_CONNECT_STARTMINE == wDsnConnectAttr) + { + /*始端属于本线的进路,驱动URR落下,驱动UCL吸起*/ + SetRouteRequestDrvState(routeId, RELAY_STATE_DOWN); + SetRouteReleaseDrvState(routeId, RELAY_STATE_UP); + } + else if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR落下*/ + SetRouteAckDrvState(routeId, RELAY_STATE_DOWN); + } + else + { + /*不处理*/ + } + if (localCiType == CI_TYPE_CLD) { SetRouteStopFlagManage(routeId, ROUTE_STOPCHECK_SET_NO); /*清除进路停止检查标志*/ @@ -7207,6 +7502,18 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) setStateResult = SetRouteState(routeId, routeState); if (CI_SUCCESS == setStateResult) { + wDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if (ROUTE_DISNEY_CONNECT_STARTMINE == wDsnConnectAttr) + { + /*始端属于本线的进路,驱动URR吸起,驱动UCL落下*/ + SetRouteRequestDrvState(routeId, RELAY_STATE_UP); + SetRouteReleaseDrvState(routeId, RELAY_STATE_DOWN); + } + else + { + /*不处理*/ + } + keepWork = CI_SUCCESS; } else @@ -7303,6 +7610,21 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) /*设置进路办理道岔检查标志为默认*/ SetRouteApplySwitchCheckFlag(routeId, ROUTE_APPLY_SWITCH_CHECK_DEF); + + /*设置联络线道岔反位使能请求无效*/ + SetReverseEnableByRouteId(routeId, SWITCH_DRIVE_POS_INVALID); + + /*设置进路协议继电器*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR吸起*/ + SetRouteAckDrvState(routeId, RELAY_STATE_UP); + } + else + { + /*nothing*/ + } + keepWork = CI_SUCCESS; } else @@ -7366,6 +7688,15 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) setStateResult = SetRouteState(routeId, routeState); if (CI_SUCCESS == setStateResult) { + if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR落下*/ + SetRouteAckDrvState(routeId, RELAY_STATE_DOWN); + } + else + { + /*不处理*/ + } keepWork = CI_SUCCESS; } else @@ -7381,6 +7712,15 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) if (CI_SUCCESS == setStateResult) { SetRouteXianSuConfirmStt(routeId, ROUTE_XIANSU_CONFIRM_NO); + if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR落下*/ + SetRouteAckDrvState(routeId, RELAY_STATE_DOWN); + } + else + { + /*不处理*/ + } keepWork = CI_SUCCESS; } else @@ -7413,6 +7753,7 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) { ; } + keepWork = CI_SUCCESS; } else @@ -7442,6 +7783,15 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) if (CI_SUCCESS == setStateResult) { SetRouteXianSuConfirmStt(routeId, ROUTE_XIANSU_CONFIRM_NO); + if (ROUTE_DISNEY_CONNECT_ENDMINE == wDsnConnectAttr) + { + /*终端属于本线的进路,驱动UAR落下*/ + SetRouteAckDrvState(routeId, RELAY_STATE_DOWN); + } + else + { + /*不处理*/ + } keepWork = CI_SUCCESS; } else @@ -7475,6 +7825,7 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) { ; } + keepWork = CI_SUCCESS; } else @@ -8039,7 +8390,6 @@ void LockOverlapLogicManage(const UINT16 routeId) UINT8 lockOverlapType = 0u; /*锁闭保护区段方式标识*/ UINT16 atsCmdLkOverlapId = 0u; /*ATS或现地期望锁闭保护区段ID*/ UINT8 ciCtrModeFlag = 0u; /*联锁控制模式标志*/ - UINT8 autoTriggerType = 0u; /*进路自动触发进路属性*/ UINT8 triggerFlag = 0u; /*进路自动触发设置标志*/ UINT8 autoSignalOrRouteValid = 0u; UINT8 virCIid = 0u; @@ -8248,8 +8598,11 @@ void SetStartFLockUnLockLogicManage(void) UINT8 tmpRet = CI_ERROR; UINT8 tmpFState = PHYSICAL_SECTION_FLOCK_YES; - + UINT8 jj = 0U; + UINT16* pLogSecBuf = NULL; + UINT8 chLogSecSum = 0U; UINT8 chStartFlockFlag = GetStartFLockFlag(); + UINT8 chCurLogLockType = 0U;/*当前区段封锁状态*/ if (CI_START_FLOCK_YES == chStartFlockFlag ) { /*未全站解封过*/ @@ -8290,10 +8643,24 @@ void SetStartFLockUnLockLogicManage(void) {/*物理区段封锁*/ tmpRet = SetPhySecFLockState(phySecId, PHYSICAL_SECTION_FLOCK_NO);/*设置物理区段封锁状态为未封锁*/ - - if (CI_ERROR == tmpRet) + pLogSecBuf = GetPhySecIncLogSecIdBuf(phySecId); + chLogSecSum = GetPhySecIncLogSecSum(phySecId); + if ((CI_ERROR != tmpRet)&&(NULL !=pLogSecBuf)) { - /*设置物理区段封锁错误处理*/ + for (jj = 0U; jj < chLogSecSum; jj++) + { + chCurLogLockType = GetLogSecFLockType(pLogSecBuf[jj]); + /*检查逻辑人工设置区段封锁状态*/ + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD & chCurLogLockType)) + { + chCurLogLockType -= SEC_FLOCK_TYPE_CMD; + } + SetLogSecFLockType(pLogSecBuf[jj], chCurLogLockType); + } + } + else + { + ;/*设置物理区段封锁错误处理*/ } } else @@ -8376,18 +8743,18 @@ void SetThroughRouteManage(const UINT16 signalId) UINT8 returnRouteState = 0u; /*折返进路状态*/ UINT8 returnRouteIdBelongCiId = 0u;/*折返进路所属联锁ID*/ UINT8 throughRouteIdBelongCiId = 0u;/*通过进路所属联锁ID*/ + UINT8 returnRouteDirection = 0u; UINT16 reRouteNormalLockPhy = 0u; UINT8 phyMergeState = 0u; UINT16 nextRouteLockPhy = 0u; UINT16 lockPhyBelongRoute = 0u; + UINT8 nextRouteDirection = 0u; + UINT8 haveDirChangeAfterRoute = 0u; + UINT8 haveDirChangeInRoute = 0u; UINT8 saveReRouteDir = 0u; UINT8 throughRouteDir = 0u; UINT16 wLastLgcSecId = 0U; - UINT16 wTrainId = 0u; UINT8 chTrainSum = 0u; - UINT16 wLogicSecId = 0u; - UINT16 wEndSignalId = 0U;/*折返进路的终端信号机*/ - UINT16 wStartSignalId = 0U;/*待信号特开进路的始端信号机*/ LogicTrainResStruct* pstLgcResInfo = NULL; LogicTrainResStruct stTmpResInfo[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; @@ -8410,8 +8777,6 @@ void SetThroughRouteManage(const UINT16 signalId) returnRouteId = GetPhySecRLockBelongRouteId(signalOutSecId); nextRouteId = GetPhySecRLockBelongRouteId(signalInSecId); throughRouteId = GetRouteThroughRouteId(returnRouteId); - wEndSignalId = GetRouteEndSignalId(returnRouteId);/*获取终端信号机*/ - wStartSignalId = GetRouteStartSignalId(nextRouteId);/*待办理信号特开的进路始端信号机*/ returnRouteIdBelongCiId = GetRouteBelongCiId(returnRouteId);/*获取折返进路所属联锁ID*/ throughRouteIdBelongCiId = GetRouteBelongCiId(throughRouteId);/*获取通过进路所属联锁ID*/ @@ -8436,11 +8801,35 @@ void SetThroughRouteManage(const UINT16 signalId) { /*获取锁闭进路*/ lockPhyBelongRoute = GetPhySecRLockBelongRouteId(signalInSecId); - saveReRouteDir = GetRouteDirection(returnRouteId);/*保存进路实际方向*/ + nextRouteDirection = GetRouteDirection(lockPhyBelongRoute); + returnRouteDirection = GetRouteDirection(returnRouteId); throughRouteDir = GetRouteDirection(throughRouteId); /*折返进路对应的通过进路方向*/ + haveDirChangeAfterRoute = GetRouteHaveDirChangePointAfter(returnRouteId); + haveDirChangeInRoute = GetRouteHaveDirChangePointIn(returnRouteId); + + saveReRouteDir = returnRouteDirection; /*保存进路实际方向*/ + + /*进路后方或进路内存在方向变化点*/ + if ((ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeAfterRoute) || + (ROUTE_HAVE_DIR_CHANGE_POINT == haveDirChangeInRoute)) + { + if (CI_SYSTEM_DIRECTION_UP == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_DOWN; + } + else if (CI_SYSTEM_DIRECTION_DOWN == returnRouteDirection) + { + returnRouteDirection = CI_SYSTEM_DIRECTION_UP; + } + else + { + /*不做处理*/ + } + } + /*方向相同*/ - if (wEndSignalId == wStartSignalId) + if (nextRouteDirection == returnRouteDirection) { if ((localCiId == returnRouteIdBelongCiId) && (localCiId == throughRouteIdBelongCiId)) {/*折返进路和通过进路都属于本联锁才设置折返进路空闲和通过进路自动解锁正常*/ @@ -8459,12 +8848,16 @@ void SetThroughRouteManage(const UINT16 signalId) SetLogSecLockState(wLastLgcSecId, LOG_SECTION_LOCK_NO, returnRouteId, saveReRouteDir); + + SetPhySecLockState(signalOutSecId, PHYSICAL_SECTION_LOCK_NO, returnRouteId, saveReRouteDir); SetRouteStateManage(returnRouteId, ROUTE_STATE_IDLE); /*设置区段属于当前进路锁闭*/ SetLogSecLockState(wLastLgcSecId, LOG_SECTION_LOCK_NORMAL, throughRouteId, throughRouteDir); + + if (NULL != pstLgcResInfo) { CpyLgcSecResTrain(wLastLgcSecId, chTrainSum, stTmpResInfo); @@ -9140,7 +9533,6 @@ void AllAutoReturnManage(const UINT16 routeId) UINT8 hasNearSecFalg = 0u; /*是否有接近区段*/ UINT8 virCIid = GetRouteBelongVirCiId(routeId); UINT16 recordErrorNum = GetErrorDataCurSum(); - UINT8 chPhySecSameFlag = 0U;/*区段重叠检查标志*/ /*全自动进路自动办理*/ autoRouteType = GetRouteAutoRouteSetState(routeId); @@ -10596,7 +10988,6 @@ UINT8 CheckRouteContainSwitchUseSta(UINT16 routeId) */ UINT8 SetSectionFLockLogicManage(const UINT16 phySecId) { - UINT16 phySecSum = 0u; /*物理区段总数*/ UINT8 localCiId = 0u; /*本地联锁ID*/ UINT8 belongCiId = 0u; /*进路所属联锁ID*/ UINT8 retVal = CI_ERROR; @@ -10655,15 +11046,11 @@ UINT8 SetSectionFLockLogicManage(const UINT16 phySecId) } else { - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_CMD);/*记录物理区段封锁是由于命令按下导致*/ + SetPhySecFLockType(phySecId, SEC_FLOCK_TYPE_CMD);/*记录物理区段封锁是由于命令按下导致*/ } } - else if ((PHYSICAL_SECTION_FLOCK_YES == flockState) && (PHY_SEC_FLOCK_TYPE_SPKS == flockType)) - {/*物理区段封锁*/ - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_SPKSCMD);/*记录物理区段封锁是由于命令和SPKS按下导致*/ - } - else - { /*已经设置封锁状态,或已经SPKS封锁不再设置区段封锁*/ + else if(SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD&flockType)) + { /*已经设置封锁状态,不再设置区段封锁*/ /*记录和发送故障码*/ SetErrorData(EFUNC_SET_SECTION_FLOCK, CI_DEVICE_TYPE_PHYSEC, @@ -10673,6 +11060,10 @@ UINT8 SetSectionFLockLogicManage(const UINT16 phySecId) retVal = CI_ERROR; } + else + { + SetPhySecFLockType(phySecId, SEC_FLOCK_TYPE_CMD);/*增加物理区段封锁原因是由于命令按下导致*/ + } } else { @@ -10688,13 +11079,11 @@ UINT8 SetSectionFLockLogicManage(const UINT16 phySecId) */ UINT8 CancelSectionFLockLogicManage(const UINT16 phySecId) { - UINT16 phySecSum = 0u; /*物理区段总数*/ UINT8 localCiId = 0u; /*本地联锁ID*/ UINT8 belongCiId = 0u; /*进路所属联锁ID*/ UINT8 retVal = CI_ERROR; UINT8 flockState = 0u; /*物理区段封锁状态*/ UINT8 flockType = 0u; /*物理区段封锁类型*/ - localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ belongCiId = GetPhySecBelongCiId(phySecId); /*获取区段所属联锁ID*/ @@ -10722,21 +11111,35 @@ UINT8 CancelSectionFLockLogicManage(const UINT16 phySecId) if (CI_SUCCESS == retVal) { flockState = GetPhySecFLockState(phySecId); /*物理区段封锁状态*/ - flockType = GetPhySecFLockType(phySecId); /*物理区段封锁类型*/ if (PHYSICAL_SECTION_FLOCK_YES == flockState) { - if (PHY_SEC_FLOCK_TYPE_SPKSCMD == flockType) - {/*物理区段封锁*/ - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_SPKS);/*封锁类型设置成SPKS按下封锁*/ - } - else if (PHY_SEC_FLOCK_TYPE_CMD == flockType) + flockType = GetPhySecFLockType(phySecId); /*物理区段封锁类型*/ + CancelPhySecFLockType(phySecId, SEC_FLOCK_TYPE_CMD); +#if 0 + if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG&flockType)) { + /*检查能否取消站台封锁*/ + wPsdId = GetPhyRelateOpenPsdId(phySecId); + if (0U != wPsdId) + { + ;/*存在未互锁解除屏蔽门 站台门封锁不能取消*/ + } + else + { + CancelPhySecFLockType(phySecId, SEC_FLOCK_TYPE_APG); + } + } +#endif + /*更新封锁状态*/ + flockType = GetPhySecFLockType(phySecId); /*物理区段封锁类型*/ + if (SEC_FLOCK_TYPE_NONE == flockType) + { + /*物理区段无其他封锁原因封锁*/ (void)SetPhySecFLockState(phySecId, PHYSICAL_SECTION_FLOCK_NO);/*设置物理区段封锁状态为未封锁*/ - SetPhySecFLockType(phySecId, PHY_SEC_FLOCK_TYPE_NONE);/*封锁类型设置成无封锁*/ } else { - /*SPKS封锁不能取消封锁*/ + /*存在其他封锁*/ } } else @@ -11608,7 +12011,7 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId) phyId = GetAxisSecRelativePhySecId(axisSecId);/*获取相关物理区段ID*/ chPhySecFLockType = GetPhySecFLockType(phyId);/*获取物理区段封锁类型*/ - if (PHY_SEC_FLOCK_TYPE_NONE != chPhySecFLockType) + if (SEC_FLOCK_TYPE_NONE != chPhySecFLockType) { /*物理区段处于封锁状态*/ AccToPhySecFlockTypeSetErrcode(phyId, functionId, ESEND_LEVEL_ZERO, chPhySecFLockType); @@ -12449,6 +12852,45 @@ void RoutePhyOrLogSecAutoUnlocManage(const UINT16 routeId) /*不做处理*/ } + /*迪士尼联络线URR、UCL状态保持处理*/ + RouteReqRlsRelayKeepProc(routeId); +} + +/* +* 功能描述: 迪士尼联络线URR、UCL状态保持处理 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : void +*/ +static void RouteReqRlsRelayKeepProc(UINT16 wRouteId) +{ + UINT8 wRouteDsnConnectAttr = CI_ERROR; /*进路联络线属性*/ + UINT16 wFirstLockedLogSecId = 0u; /*第一锁闭逻辑区段*/ + UINT8 wLogSecConnectAttr = CI_ERROR; /*逻辑区段联络线属性*/ + + /*获取进路联络线类型*/ + wRouteDsnConnectAttr = GetRouteDisneyConnectAttr(wRouteId); + /*判断是否始端本线进路*/ + if (ROUTE_DISNEY_CONNECT_STARTMINE == wRouteDsnConnectAttr) + { + /*获取第一锁闭逻辑区段联络线属性*/ + wFirstLockedLogSecId = GetRouteFirstLockedLogSecId(wRouteId); + wLogSecConnectAttr = GetLogSecConnectProperty(wFirstLockedLogSecId); + + if (LOGSEC_CONNECT_PROPERTY_YES == wLogSecConnectAttr) + { + /*第一锁闭区段为联络线区段,说明列车已出清/区故解已解锁本线所有区段,落下URR,吸起UCL*/ + SetRouteRequestDrvState(wRouteId, RELAY_STATE_DOWN); + SetRouteReleaseDrvState(wRouteId, RELAY_STATE_UP); + } + else + { + /*维持UAR状态,不处理*/ + } + } + else + { + /*不处理*/ + } } /* @@ -14421,7 +14863,7 @@ void PhySecJumpLockLogicManage(void) if (CI_SUCCESS == chTempcheck) { chPhySecFLockType = GetPhySecFLockType(wPhyId); /*获取物理区段封锁类型*/ - if ((PHY_SEC_FLOCK_TYPE_NONE == chPhySecFLockType)) + if ((SEC_FLOCK_TYPE_NONE == chPhySecFLockType)) { SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES); SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES); @@ -15148,12 +15590,14 @@ void RouteXuanPaiCommonProcess(const UINT16 wRouteId, const UINT8 chLockRoutePro UINT8 chSwitchDrive = CI_ERROR; /*道岔驱动结果*/ UINT8 chLocalCIType = 0U; UINT8 chReverseRouteProperty = 0U;/*反向进路属性*/ + UINT8 cDisneyConnectAttr = CI_ERROR; /*迪士尼联络线属性*/ chLocalCIType = GetLocalCiType(); chReverseRouteProperty = GetRouteReverseProperty(wRouteId); chNeedForDrvRoutAssoSwit = CheckRoutAssoSwitNeedDriv(wRouteId);/*检查进路带动道岔组是否需要被驱动*/ chRoutSwitDrvOvtmFlag = ChekRoutSwitDrivOvtmStat(wRouteId);/*检查进路内道岔是否驱动超时*/ chSwitchPos = CheckRouteSwitchPosRight(wRouteId);/*检查道岔位置是否正确*/ + cDisneyConnectAttr = GetRouteDisneyConnectAttr(wRouteId); /*获取迪士尼联络线进路类型*/ if ((CI_SUCCESS == chLockRouteProcCheck) && (SWITCH_NEED_DRIV_FALSE == chNeedForDrvRoutAssoSwit) && (CI_SUCCESS == chSwitchPos)) { @@ -15168,28 +15612,38 @@ void RouteXuanPaiCommonProcess(const UINT16 wRouteId, const UINT8 chLockRoutePro } else if (((CI_SUCCESS == chLockRouteProcCheck) && (SWITCH_NEED_DRIV_TRUE == chNeedForDrvRoutAssoSwit)) || (RETURN_LOCK_ERR_SWITPOS == chLockRouteProcCheck)) { - if (CI_SUCCESS == chRoutSwitDrvOvtmFlag) + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cDisneyConnectAttr)) { - chSwitchDrive = RouteLockDriveSwitch(wRouteId, chNeedForDrvRoutAssoSwit); - } - if ((CI_ERROR == chRoutSwitDrvOvtmFlag) || ((CI_SUCCESS == chRoutSwitDrvOvtmFlag) && (CI_ERROR == chSwitchDrive))) - { - /*进路内方道岔驱动超时或未超时但驱动道岔失败*/ - SetRoutAssoSwitSingOperStat(wRouteId, SWITCH_SINGLE_OPERATED_FALSE);/*清除进路带动道岔组被单操过的历史*/ - - SetRouteStateManage(wRouteId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ - - SetRoutePhySectionOccupyState(wRouteId, PHYSICAL_SECTION_USING_NO); /*清除区段征用*/ - - if (ROUTE_REVERSE_PROPERTY_YES == chReverseRouteProperty) - {/*进路若为反向进路,则恢复反向进路包含的自动信号进路的自动属性*/ - - SetRevrRouteAutoSigInvalidFlag(wRouteId, ROUTE_AUTOSIG_LOSE_SET_NO); - } + /*联络线道岔,不监督道岔驱动超时时间,不驱动道岔,需驱动道岔反位使能请求*/ + SetReverseEnableByRouteId(wRouteId, SWITCH_DRIVE_POS_FANWEI); } else { - ; /*继续*/ + if (CI_SUCCESS == chRoutSwitDrvOvtmFlag) + { + chSwitchDrive = RouteLockDriveSwitch(wRouteId, chNeedForDrvRoutAssoSwit); + } + if ((CI_ERROR == chRoutSwitDrvOvtmFlag) || ((CI_SUCCESS == chRoutSwitDrvOvtmFlag) && (CI_ERROR == chSwitchDrive))) + { + /*进路内方道岔驱动超时或未超时但驱动道岔失败*/ + SetRoutAssoSwitSingOperStat(wRouteId, SWITCH_SINGLE_OPERATED_FALSE);/*清除进路带动道岔组被单操过的历史*/ + + SetRouteStateManage(wRouteId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ + + SetRoutePhySectionOccupyState(wRouteId, PHYSICAL_SECTION_USING_NO); /*清除区段征用*/ + + if (ROUTE_REVERSE_PROPERTY_YES == chReverseRouteProperty) + {/*进路若为反向进路,则恢复反向进路包含的自动信号进路的自动属性*/ + + SetRevrRouteAutoSigInvalidFlag(wRouteId, ROUTE_AUTOSIG_LOSE_SET_NO); + } + } + else + { + ; /*继续*/ + } } } else @@ -15204,6 +15658,29 @@ void RouteXuanPaiCommonProcess(const UINT16 wRouteId, const UINT8 chLockRoutePro } } +/* +* 功能描述: 根据进路ID设置道岔反位使能请求(迪士尼联络线) +* 参数说明: const UINT16 wRouteId, 进路ID +* const UINT8 cDrivePos SWITCH_DRIVE_POS_FANWEI 设置请求 SWITCH_DRIVE_POS_INVALIDE 取消请求 +* 返回值 : void +* by wyd 20260316 +*/ +static void SetReverseEnableByRouteId(UINT16 wRouteId, UINT8 cDrivePos) +{ + UINT16 wRelConnectSwitchId = 0u; /*关联道岔反位使能请求ID*/ + + /*获取道岔反位使能请求ID*/ + wRelConnectSwitchId = GetRouteDisneyConnectSwitchId(wRouteId); + if (0u == wRelConnectSwitchId) + { + /*无关键道岔,无需驱动道岔反位使能请求*/ + } + else + { + /*道岔反位使能请求*/ + SetSwitchReverseEnable(wRelConnectSwitchId, cDrivePos); + } +} /* * 功能描述: 进路最近的车需要总人解进路时,延时处理逻辑 @@ -15871,13 +16348,8 @@ void RouteOtherCiSwitchManage(void) UINT8 chRouteStateFlag = 0U;/*进路状态转移标志*/ UINT8 chRouteSwPosValidCheck = 0U;/*进路其它联锁道岔检查*/ UINT8 chResult = 0U;/*检查结果*/ - UINT8 chTransmitStat = 0U;/*通信状态*/ UINT8 chRouteApplySwitchCheckFlag = 0U;/*进路办理道岔检查标志*/ UINT8 chOthCiRouteExistLocalCiSw = 0U;/*其他控区进路是否存在本控区道岔*/ - UINT16 errorCodeCurSum = 0U; - ErrorDataStruct* errorCodeStu = NULL; /*错误码数据*/ - UINT16 devId = 0U; - UINT8 devState = 0U; wRouteCurSum = GetRouteCurSum(); /*获取进路总数*/ chLocalCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ @@ -15916,7 +16388,7 @@ void RouteOtherCiSwitchManage(void) if (CI_SUCCESS == chResult) { SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_YES); - chResult = RouteRelAllSwitchPosCheck(wRouteId, &devId, &devState); + chResult = RouteRelAllSwitchPosCheck(wRouteId); if (CI_SUCCESS == chResult) { ; /*道岔位置正确返回成功*/ @@ -15932,7 +16404,6 @@ void RouteOtherCiSwitchManage(void) { /*引导进路要求相邻联锁道岔在规定位置,不驱动道岔*/ SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_NO); - SetRouteApplySwitchCheckErrorData(wRouteId, devId, CI_DEVICE_TYPE_SWITCH, devState, ETYPE_SWT_POSTION_STATE); } } @@ -15940,7 +16411,6 @@ void RouteOtherCiSwitchManage(void) else { SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_NO); - SetRouteApplySwitchCheckErrorData(wRouteId, wRouteId, CI_DEVICE_TYPE_ROUTE, 0U, ETYPE_ROUTE_APPLY_SWITCH_MOVE);/*进路道岔单操方向不一致*/ } } else @@ -15950,10 +16420,6 @@ void RouteOtherCiSwitchManage(void) } else { - /*处理相邻联锁传递处理错误码*/ - errorCodeCurSum = GetErrorDataCurSum(); /*获取错误码总数*/ - errorCodeStu = GetErrorData(errorCodeCurSum - 1U); /*最新故障记录*/ - SetRouteApplySwitchCheckErrorData(wRouteId, errorCodeStu->DeviceId, errorCodeStu->DeviceType, errorCodeStu->DeviceState, errorCodeStu->DeviceStateType); SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_NO); } } @@ -16533,4 +16999,508 @@ void TrainJumpBackApplyProc(void) } } } +} + +/* +* @brief 逻辑区段禁止FAO运行处理 +* @param const UINT8 setFlag 禁止FAO运行的标志 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +*/ +void LogSecProhibitFAOManage(const UINT8 setFlag, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]) +{ + UINT8 i = 0U; + UINT8 logSecProhibitFlag = 0u;/*禁止FAO运行标志*/ + UINT8 breakFlag = 0u; + + if ((0U != cLogSecSum) && (NULL != pLogSecIdBuff)) + { + /*先检查是否要响应这次命令*/ + for (i = 0u; i < cLogSecSum; i++) + { + logSecProhibitFlag = GetLogSecProhibitFAOState(pLogSecIdBuff[i]); + if ((LOGSEC_PROHIBIT_FAO_YES == setFlag) && (LOGSEC_PROHIBIT_FAO_YES == logSecProhibitFlag)) + {/*已经是禁止FAO运行*/ + breakFlag = 1u; + break; + } + else if ((LOGSEC_PROHIBIT_FAO_NO == setFlag) && (LOGSEC_PROHIBIT_FAO_NO == logSecProhibitFlag)) + {/*已经是允许FAO允许*/ + breakFlag = 1u; + break; + } + else + { + /*不处理*/ + } + } + + if (0u == breakFlag) + {/*都没设置过*/ + for (i = 0u; i < cLogSecSum; i++) + { + SetLogSecProhibitFAOState(pLogSecIdBuff[i], setFlag); + } + } + else + { + /*不响应*/ + } + + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:信号机列车闯红灯处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SignalTrainCrossRedPro(void) +{ + UINT16 wCurSignalSum = 0U; + UINT16 ii = 0U; + UINT16 wSignalId = 0U; + UINT8 cVirtualAttr = 0U; /*信号机虚拟属性*/ + UINT16 wInFstPhySecId = 0U; /*信号机内方第一物理区段ID*/ + UINT8 cInFstPhySecOccState = 0U; /*信号机内方第一物理区段占用状态*/ + UINT32 dwInFstSecMerOccStartCycNum = 0U; /*信号机内方第一物理区段融合占用起始周期*/ + UINT32 dwCurCycNum = 0U; /*当前周期号*/ + UINT16 wOutFstPhySecId = 0U; /*信号机外方第一物理区段ID*/ + UINT32 dwOutFstSecMerOccStartCycNum = 0U; /*信号机外方第一物理区段融合占用起始周期*/ + UINT32 dwCiAndAxleTransBadEnsureCnt = 0U; /*与计轴通信中断判断时间*/ + UINT16 wSignalInFstLogSecId = 0U; /*信号机内方第一逻辑区段ID*/ + UINT8 cErrReason = 0U; + UINT16 wSignalLightUpTrainId = 0U; /*信号机点灯区段最接近列车ID*/ + UINT8 cSignalLightExtinctState = 0u; /*信号机亮灭状态*/ + UINT8 cTrainLevel = 0U; /*列车级别*/ + UINT16 wRelRouteSum = 0U; /*以该信号机为始端的进路数量*/ + UINT16* pRelRouteId = NULL; /*以该信号机为始端的进路ID*/ + UINT16 jj = 0U; + UINT8 cRouteState = 0U; /*进路状态*/ + + wCurSignalSum = GetSignalCurSum(); /*获取本控区信号机数量*/ + for (ii = 0U; ii < wCurSignalSum; ii++) + { + wSignalId = GetSignalId(ii); /*获取信号机ID*/ + cVirtualAttr = GetSignalVirtualAttr(wSignalId); /*获取信号机虚拟属性*/ + if (SIGNAL_VIRTUAL_YES == cVirtualAttr) + { + /*虚拟信号机默认列车闯红灯标志无效*/ + SetTrainCrossRedSignalFlag(wSignalId, SIGNAL_TRAIN_CROSS_RED_NO); + } + else + { + wInFstPhySecId = GetSignalInFirstPhySecId(wSignalId, 0U); /*获取信号机内方第一物理区段ID*/ + cInFstPhySecOccState = GetPhySecCurMergeState(wInFstPhySecId); /*获取信号机内方第一物理区段占用状态*/ + if (SECTION_OCCUPY_NO == cInFstPhySecOccState) + { + /*信号机内方第一物理区段空闲,设置列车闯红灯标志无效*/ + SetTrainCrossRedSignalFlag(wSignalId, SIGNAL_TRAIN_CROSS_RED_NO); + } + else + { + dwCurCycNum = Get2oo2CurCycleNum(); + wOutFstPhySecId = GetSignalOutFirstPhySecId(wSignalId); + dwOutFstSecMerOccStartCycNum = GetSecMergeOccupyStartCycNum(wOutFstPhySecId); /*获取信号机外方第一区段融合占用起始周期*/ + dwInFstSecMerOccStartCycNum = GetSecMergeOccupyStartCycNum(wInFstPhySecId); /*获取信号机内方第一区段融合占用起始周期*/ + dwCiAndAxleTransBadEnsureCnt = GetCiAndAxleTransBadEnsureCnt(); /*获取判断与计轴通信中断超时周期数*/ + + wSignalInFstLogSecId = GetSignalInFirstLogSec(wSignalId, &cErrReason); /*获取信号机内方第一逻辑区段*/ + + /*检查信号机内外方第一物理区段是否连续占用且超过与计轴通信中断判断时间 + 1.仅内方第一区段融合占用当周期才进行后续判断; + 2.仅在内方第一区段道岔满足拓扑关系或失表时才进行后续判断*/ + if ((0U != dwOutFstSecMerOccStartCycNum) && (dwCurCycNum == dwInFstSecMerOccStartCycNum) + && ((dwOutFstSecMerOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwInFstSecMerOccStartCycNum) + && ((0U != wSignalInFstLogSecId) || (SIGNAL_IN_SW_POS_INVALID == cErrReason))) + { + /*检查闯红灯的列车级别*/ + wSignalLightUpTrainId = GetSignalLightUpTrainId(wSignalId); + cTrainLevel = GetTrainLevel(wSignalLightUpTrainId); + cSignalLightExtinctState = GetSignalLightExtinctState(wSignalId); + + /*检查亮灭标志的原因:CBTC车占用信号机外方区段,内方区段UT占用时,需使用该标志卡场景*/ + if ((0U != wSignalLightUpTrainId) && (TRAIN_LEVEL_VBTC != cTrainLevel) && (SIGNAL_LIGHT_EXTICT_STATE_NO != cSignalLightExtinctState)) + { + wRelRouteSum = GetStartSignalRouteSum(wSignalId); /*获取以该信号机为始端的进路信息*/ + pRelRouteId = GetStartSignalRouteBuf(wSignalId); + if ((0U < wRelRouteSum) && (NULL != pRelRouteId)) + { + for (jj = 0U; jj < wRelRouteSum; jj++) + { + cRouteState = GetRouteState(pRelRouteId[jj]); + if (ROUTE_STATE_NEAR_LOCK == cRouteState) + { + break; + } + else + { + /*继续遍历检查*/ + } + } + + if (jj != wRelRouteSum) + { + /*存在进路接近锁闭正常,维持上周期列车闯红灯标志*/ + } + else + { + /*不存在进路接近锁闭正常,设置列车闯红灯标志有效*/ + SetTrainCrossRedSignalFlag(wSignalId, SIGNAL_TRAIN_CROSS_RED_YES); + } + } + else + { + /*无进路,维持上周期列车闯红灯标志*/ + } + } + else + { + /*CBTC级别列车占压,维持上周期列车闯红灯标志*/ + } + } + else + { + /*信号机内外方第一区段非连续占用,维持上周期列车闯红灯标志*/ + } + } + } + } +} + +/* +* @brief 接触网旁路处理 +* @param const UINT16 ohlId 接触网分区ID +* const UINT8 setState 旁路标志 +*/ +void OhlBypassManage(const UINT16 ohlId, const UINT8 setState) +{ + UINT8 ohlBypassFlag = 0u;/*接触网旁路标志*/ + + ohlBypassFlag = GetOhlBypassFlag(ohlId); + if ((OHL_BYPASS_YES != ohlBypassFlag) && (OHL_BYPASS_YES == setState)) + {/*设置接触网旁路,且当前接触网未旁路*/ + SetOhlBypassFlag(ohlId, setState); + } + else if ((OHL_BYPASS_NO != ohlBypassFlag) && (OHL_BYPASS_NO == setState)) + {/*设置接触网未旁路,且当前接触网旁路*/ + SetOhlBypassFlag(ohlId, setState); + } + else + { + /*不处理*/ + } +} + +/* +* @brief 设置逻辑区段封锁命令处理 +* @param const UINT8 setFlag 封锁状态标志 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +*/ +void LogSecFlockCmdSetManage(const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]) +{ + UINT8 i = 0U; + UINT8 chLogSecFlockType = 0u;/*逻辑区段封锁类型*/ + UINT8 chCheckFlag = CI_ERROR; + UINT16 chLogSecId = 0U; + UINT8 localCiId = 0U; /*本地联锁ID*/ + UINT16 wFirstBelongPhySec = 0U; /*第一个逻辑区段所属物理区段*/ + UINT8 chBelongCiId = 0U; /*进路所属联锁ID*/ + UINT16 wBelongPhySec = 0U; /*所属物理区段*/ + localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ + if ((0U != cLogSecSum) && (NULL != pLogSecIdBuff)) + { + /*先检查是否要响应这次命令*/ + wFirstBelongPhySec = GetLgcSecRelativePhySecId(pLogSecIdBuff[0]); + chCheckFlag = CI_SUCCESS; + for (i = 0u; i < cLogSecSum; i++) + { + chLogSecId = pLogSecIdBuff[i]; + chBelongCiId = GetLogSecBelongCiId(chLogSecId); + wBelongPhySec = GetLgcSecRelativePhySecId(chLogSecId); + if ((chBelongCiId == localCiId)&&(wBelongPhySec == wFirstBelongPhySec)&&(0U != wFirstBelongPhySec)) + { + chLogSecFlockType = GetLogSecFLockType(chLogSecId); + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD& chLogSecFlockType)) + { + SetErrorData(EFUNC_SET_SECTION_FLOCK, CI_DEVICE_TYPE_LOGICSEC, chLogSecId, ETYPE_PS_FLOCK_STATE, PHYSICAL_SECTION_FLOCK_YES, ESEND_LEVEL_ATS); + chCheckFlag = CI_ERROR; + } + else + { + ;/*继续*/ + } + } + else + { + chCheckFlag = CI_ERROR; + debug_infor_printf((const)"\n LogSecFlockCmdManage Stop, FirstPhySec%d LogSec%d BelongSec:%d \n", wFirstBelongPhySec, chLogSecId,wBelongPhySec); + } + if (CI_ERROR == chCheckFlag) + { + break; + } + } + + if (CI_ERROR != chCheckFlag) + {/*都检查通过*/ + /*更新物理区段状态*/ + SetPhySecFLockType(wFirstBelongPhySec, SEC_FLOCK_TYPE_CMD); + (void)SetPhySecFLockState(wFirstBelongPhySec, PHYSICAL_SECTION_FLOCK_YES);/*设置物理区段封锁状态为封锁*/ + for (i = 0u; i < cLogSecSum; i++) + { + chLogSecId = pLogSecIdBuff[i]; + chLogSecFlockType = GetLogSecFLockType(chLogSecId); + chLogSecFlockType |= SEC_FLOCK_TYPE_CMD; + SetLogSecFLockType(chLogSecId, chLogSecFlockType); + } + } + else + { + ;/*不响应*/ + } + + } + else + { + /*不处理*/ + } +} + +/* +* @brief 取消逻辑区段封锁命令处理 +* @param const UINT8 setFlag 封锁状态标志 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +*/ +void LogSecFlockCmdCancleManage(const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]) +{ + UINT8 i = 0U; + UINT8 chLogSecFlockType = 0u;/*逻辑区段封锁类型*/ + UINT8 chCheckFlag = CI_ERROR; + UINT16 chLogSecId = 0U; + UINT8 localCiId = 0U; /*本地联锁ID*/ + UINT16 wFirstBelongPhySec = 0U; /*第一个逻辑区段所属物理区段*/ + UINT8 chBelongCiId = 0U; /*进路所属联锁ID*/ + UINT16 wBelongPhySec = 0U; /*所属物理区段*/ + UINT8 chApgFlockCheck = CI_ERROR;/*APG封锁取消检查*/ + UINT8 chEsbFlockCheck = CI_ERROR;/*ESB封锁取消检查*/ + localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ + if ((0U != cLogSecSum) && (NULL != pLogSecIdBuff)) + { + /*先检查是否要响应这次命令*/ + wFirstBelongPhySec = GetLgcSecRelativePhySecId(pLogSecIdBuff[0]); + for (i = 0u; i < cLogSecSum; i++) + { + chLogSecId = pLogSecIdBuff[i]; + chBelongCiId = GetLogSecBelongCiId(chLogSecId); + wBelongPhySec = GetLgcSecRelativePhySecId(chLogSecId); + if ((chBelongCiId == localCiId) && (wBelongPhySec == wFirstBelongPhySec) && (0U != wFirstBelongPhySec)) + { + chLogSecFlockType = GetLogSecFLockType(chLogSecId); + /*适用区段解封的条件:存在区段封锁或站台门异常打开封锁*/ + if ((SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD& chLogSecFlockType)) + || (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG& chLogSecFlockType)) + || (SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB& chLogSecFlockType))) + { + chCheckFlag = CI_SUCCESS; + } + else + { + SetErrorData(EFUNC_SET_SECTION_FLOCK, CI_DEVICE_TYPE_LOGICSEC, chLogSecId, ETYPE_PS_FLOCK_STATE, PHYSICAL_SECTION_FLOCK_NO, ESEND_LEVEL_ATS); + chCheckFlag = CI_ERROR; + } + } + else + { + chCheckFlag = CI_ERROR; + debug_infor_printf((const)"\n LogSecFlockCmdCancleManage Stop, FirstPhySec%d LogSec%d BelongSec:%d \n", wFirstBelongPhySec, chLogSecId, wBelongPhySec); + } + if (CI_ERROR == chCheckFlag) + { + break; + } + } + + if (CI_ERROR != chCheckFlag) + {/*都检查通过*/ + + for (i = 0u; i < cLogSecSum; i++) + { + chLogSecId = pLogSecIdBuff[i]; + chLogSecFlockType = GetLogSecFLockType(chLogSecId); + chApgFlockCheck = CheckLogSecOpenPsd(chLogSecId); + chEsbFlockCheck = CheckLogSecActivateEsb(chLogSecId); + /*存在APG封锁且当前无异常打开*/ + if ((SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG& chLogSecFlockType))&(CI_SUCCESS == chApgFlockCheck)) + { + chLogSecFlockType -= SEC_FLOCK_TYPE_APG; + } + else + { + ;/*无法解除站台门封锁的报警预留*/ + } + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD& chLogSecFlockType)) + { + chLogSecFlockType -= SEC_FLOCK_TYPE_CMD; + } + else + { + ;/*不处理*/ + } + if ((SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB& chLogSecFlockType))&& (CI_SUCCESS == chApgFlockCheck)) + { + chLogSecFlockType -= SEC_FLOCK_TYPE_ESB; + } + else + { + ;/*不处理*/ + } + SetLogSecFLockType(chLogSecId, chLogSecFlockType); + } + + /*更新取消时的物理区段封锁状态*/ + PhyFlockStateFromLogSec(wFirstBelongPhySec); + } + else + { + ;/*不响应*/ + } + + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:ECS自动触发命令处理 +* 参数说明:const UINT16 EcsId ECS ID +* const UINT8 setState 待设置的状态 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsAutoTrigCmdPro(const UINT16 EcsId, const UINT8 setState) +{ + UINT16 wEcsNum = 0U; /*ECS数量*/ + UINT16 ii = 0U; + UINT16 wCurEcsId = 0U; /*ECS ID*/ + UINT8 cLocalCiId = 0U; /*本控区ID*/ + UINT8 cEcsBelongCiId = 0U; /*ECS所属CI*/ + + if ((ECS_AUTOTRIG_YES == setState) || (ECS_AUTOTRIG_NO == setState)) + { + cLocalCiId = GetSystemParaLocalCiId(); + wEcsNum = GetEcsCurSum(); + for (ii = 0U; ii < wEcsNum; ii++) + { + wCurEcsId = GetEcsId(ii); + cEcsBelongCiId = GetEcsBelongCiId(wCurEcsId); + if ((wCurEcsId == EcsId) && (cEcsBelongCiId == cLocalCiId)) + { + SetEcsAutoTrigState(EcsId, setState); + + if (ECS_AUTOTRIG_NO == setState) + { + /*ECS停用后,清除所有动态数据*/ + ClearEcsDymData(EcsId); + } + else + { + /*不处理*/ + } + break; + } + else + { + /*非目标ECS或ECS非本控区,不处理*/ + } + } + } + else + { + /*异常分支,不处理*/ + } +} + +/* +* 功能描述:道岔常态位置逻辑处理 +* 参数说明:无 +* 返 回 值:无 +*/ +void SwitchNormalPosProc(void) +{ + UINT16 switchCurSum = 0U; /*道岔总数目*/ + UINT16 ii = 0U; /*循环索引*/ + UINT16 switchId = 0U; /*道岔ID*/ + UINT8 belongCiId = 0U; /*道岔所属联锁ID*/ + UINT8 localCiId = 0U; /*本地联锁ID*/ + UINT8 normalPos = 0u; /*道岔常态位置*/ + UINT16 switchLogSecId = 0U; /*道岔非常态位置的逻辑区段ID*/ + UINT8 logSecLockState = 0U; /*逻辑区段锁闭状态*/ + UINT8 unusualLogSecFlag = 0U; /*道岔非常态位置逻辑区段延时解锁标志*/ + + switchCurSum = GetSwitchCurSum(); /*获取道岔总数*/ + localCiId = GetSystemParaLocalCiId(); + + for (ii = 0U; ii < switchCurSum; ii++) + {/*遍历所有道岔*/ + switchId = GetSwitchId(ii); /*获取道岔ID*/ + if ((0u < switchId) && (switchId < SWITCH_SUM_MAX)) + { + belongCiId = GetSwitchBelongCiId(switchId); /*获取道岔所属联锁ID*/ + if ((belongCiId == localCiId) && (0u != localCiId)) + { + normalPos = GetSwitchNormalPosition(switchId);/*获取常态位置*/ + + if ((SWITCH_NORMAL_FANWEI == normalPos) || (SWITCH_NORMAL_DINGWEI == normalPos)) + {/*道岔常态位置在反位;或道岔常态位置在定位*/ + switchLogSecId = GetSwitchUnusualLogSecId(switchId); + } + else + {/*无常态位置或道岔四开挤岔,清常态位置起始周期*/ + } + + if (0U != switchLogSecId) + { + logSecLockState = GetLogSecLockState(switchLogSecId);/*获取道岔非常态位置逻辑区段锁闭状态*/ + unusualLogSecFlag = GetSwitchUnusualLogSecFlag(switchId); + + if (LOG_SECTION_LOCK_DELAY == logSecLockState) + {/*非常态位置的逻辑区段为延时解锁*/ + /*设置道岔非常态位置逻辑区段延时解锁标志有效*/ + SetSwitchUnusualLogSecFlag(switchId, SWITCH_UNUSUAL_VALID); + } + else if (LOG_SECTION_LOCK_NO == logSecLockState) + {/*非常态位置的逻辑区段锁闭未锁闭*/ + if (SWITCH_UNUSUAL_VALID == unusualLogSecFlag) + {/*道岔非常态位置逻辑区段延时解锁标志有效*/ + + /*进行道岔常态位置的条件检查CheckSwitchNomalPosProc*/ + CheckSwitchNomalPosProc(switchId); + } + else + {/*不处理*/ + } + } + else + {/*不处理*/ + } + } + else + {/*不处理*/ + } + } + } + + } + + } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h index 1f51a2d..7ee1152 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h @@ -1156,6 +1156,61 @@ void OverlapZhaoChaRelayUpDateManage(void); */ void TrainJumpBackApplyProc(void); +/* +* @brief 逻辑区段禁止FAO运行处理 +* @param const UINT8 setFlag 禁止FAO运行的标志 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +*/ +void LogSecProhibitFAOManage(const UINT8 setFlag, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]); + +/* +* 功能描述:信号机列车闯红灯处理 +* 参数说明:无 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SignalTrainCrossRedPro(void); + +/* +* @brief 接触网旁路处理 +* @param const UINT16 ohlId 接触网分区ID +* const UINT8 setState 旁路标志 +*/ +void OhlBypassManage(const UINT16 ohlId, const UINT8 setState); + +/* +* @brief 设置逻辑区段封锁命令处理 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +* Created By fan 2026.01.22 +*/ +void LogSecFlockCmdSetManage(const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]); + +/* +* @brief 取消逻辑区段封锁命令处理 +* const UINT8 cLogSecSum 逻辑区段数量 +* const UINT16 pLogSecIdBuff[] 逻辑区段序列 +* Created By fan 2026.01.22 +*/ +void LogSecFlockCmdCancleManage(const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[]); + +/* +* 功能描述:ECS自动触发命令处理 +* 参数说明:const UINT16 EcsId ECS ID +* const UINT8 setState 待设置的状态 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void EcsAutoTrigCmdPro(const UINT16 EcsId, const UINT8 setState); + +/* +* 功能描述:道岔常态位置逻辑处理 +* 参数说明:const UINT16 EcsId ECS ID +* 返 回 值:无 +*/ +void SwitchNormalPosProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c index 3223da4..414091d 100644 --- a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c @@ -189,6 +189,9 @@ UINT8 OpenCbtcLTrainRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) UINT8 sendLevel = ESEND_LEVEL_ZERO; UINT8 routeReverseProperty = 0u; UINT8 airShaftRouteType = 0u; + UINT8 cDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ + + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /* 联锁逻辑检查 */ /* 进路监督模式为【CBTC】*/ @@ -501,6 +504,37 @@ UINT8 OpenCbtcLTrainRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) { ; } + + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + /*迪士尼联络线其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + else + { + /*nothing*/ + } + } + else + { + /*nothing*/ + } + + if ((CI_ERROR == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr))) + { + /*始端不在本线的迪士尼联络线进路,自动重开*/ + reResult = CI_ROUTE_RECOVER_ERR; + } + else + { + /*不处理*/ + } + return reResult; } @@ -523,16 +557,16 @@ UINT8 OpenBlocLTrainRouteErrProcess(const UINT16 routeId) UINT8 checkResult = CI_ERROR; /*检查结果*/ UINT8 devState = 0u; /*设备状态*/ - UINT16 devId = 0u; /*设备ID*/ - - /* 进路内设备数据 */ - /* 取消标志 */ + /* 取消标志 */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); /*故障发送级别*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; + UINT8 cDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ + + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /* 联锁逻辑检查 */ /* 进路监督模式为【点式】*/ @@ -734,6 +768,37 @@ UINT8 OpenBlocLTrainRouteErrProcess(const UINT16 routeId) reResult = checkResult; } } + + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + /*迪士尼联络线其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + else + { + /*nothing*/ + } + } + else + { + /*nothing*/ + } + + if ((CI_ERROR == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr))) + { + /*始端不在本线的迪士尼联络线进路,自动重开*/ + reResult = CI_ROUTE_RECOVER_ERR; + } + else + { + /*不处理*/ + } + /* 返回 */ return reResult; } @@ -1096,7 +1161,6 @@ UINT8 OpenBlocReturnRouteErrProcess(const UINT16 routeId) UINT8 checkResult = CI_ERROR; /*检查结果*/ UINT8 devState = 0u; /*设备状态*/ - UINT8 devId = 0u; /*设备Id*/ /* 进路内设备数据 */ /* 取消标志 */ @@ -1105,8 +1169,6 @@ UINT8 OpenBlocReturnRouteErrProcess(const UINT16 routeId) /*故障发送级别*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; - UINT16 endSigId = 0u; /*获取中途折返信号机ID*/ - UINT8 endSigState = SIGNAL_OPEN; /* 联锁逻辑检查 */ @@ -1346,6 +1408,9 @@ UINT8 KeepCbtcLTrainRouteErrProcess(const UINT16 routeId) UINT16 trainEnteringRouteState = 0u; UINT8 signalCrossState = 0u; UINT8 rcWorkMode = 0U; /*rc工作模式*/ + UINT8 cDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ + + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); rcWorkMode = GetLocalRcWorkMode(); /* 联锁逻辑检查 */ @@ -1597,6 +1662,36 @@ UINT8 KeepCbtcLTrainRouteErrProcess(const UINT16 routeId) } } + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + /*迪士尼联络线其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + else + { + /*nothing*/ + } + } + else + { + /*nothing*/ + } + + if ((CI_ERROR == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr))) + { + /*始端不在本线的迪士尼联络线进路,自动重开*/ + reResult = CI_ROUTE_RECOVER_ERR; + } + else + { + /*不处理*/ + } + /* 返回 */ return reResult; } @@ -1616,17 +1711,16 @@ UINT8 KeepBlocLTrainRouteErrProcess(const UINT16 routeId) UINT8 const functionId = EFUNC_KEEP_UT_SIGNAL_ERR_ZX; /* 局部变量定义初始化 */ - UINT8 reResult = CI_ERROR; /*返回值*/ - UINT8 checkResult = CI_ERROR; /*检查结果*/ + UINT8 reResult = CI_ERROR; /*返回值*/ + UINT8 checkResult = CI_ERROR; /*检查结果*/ - UINT8 devState = 0u; /*设备状态*/ - UINT16 devId = 0u; /*设备ID*/ - - /* 进路内设备数据 */ - /* 取消标志 */ + UINT8 devState = 0u; /*设备状态*/ + UINT8 cDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ + /* 取消标志 */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /*故障发送级别*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; @@ -1823,6 +1917,36 @@ UINT8 KeepBlocLTrainRouteErrProcess(const UINT16 routeId) } } + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + /*迪士尼联络线其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + else + { + /*nothing*/ + } + } + else + { + /*nothing*/ + } + + if ((CI_ERROR == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr))) + { + /*始端不在本线的迪士尼联络线进路,自动重开*/ + reResult = CI_ROUTE_RECOVER_ERR; + } + else + { + /*不处理*/ + } + /* 返回 */ return reResult; } @@ -2142,10 +2266,8 @@ UINT8 KeepBlocReturnRouteErrProcess(const UINT16 routeId) UINT8 checkResult = CI_ERROR; /*检查结果*/ UINT8 devState = 0u; /*设备状态*/ - UINT16 devId = 0u; /*设备ID*/ - /* 进路内设备数据 */ - /* 取消标志 */ + /* 取消标志 */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); @@ -3059,11 +3181,6 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId) UINT8 devState = 0u; UINT8 ret = CI_SUCCESS; - /*进路始端信号机关联的PSD*/ - UINT16 rtStartSigId = 0u;/*进路始端信号机ID*/ - UINT8 psdSum = 0u;/*进路始端信号机关联的PSD数量*/ - UINT16 *psdIdBuf = NULL;/*进路始端信号机关联的PSD ID数组*/ - UINT16 j = 0u;/*遍历进路始端信号机关联的PSD ID数组的下标*/ UINT8 toOpenCheckFlag = 0u;/*恢复可重开信号的条件标志*/ UINT8 otherResult = 0u;/*其他联锁检查条件返回值*/ UINT8 cFuncSwitchSpks = 0U; /*SPKS信号重开检查进路级别开关*/ @@ -3088,17 +3205,13 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId) /* 开始检查 */ if ((0u != checkSum) && (NULL != dataOtherCiDevBuf)) { - rtStartSigId = GetRouteStartSignalId(routeId);/*获得进路始端信号机*/ - psdSum = GetSignalRelatedPsdSum(rtStartSigId);/*获得进路始端信号机关联的PSD数量*/ - psdIdBuf = GetSignalRelatedPsdBuf(rtStartSigId);/*获得进路始端信号机关联的PSD ID数组*/ - - /*开始检查*/ + /*开始检查*/ for (i = 0u; i < checkSum; i++) { tmpOtherCiDevInfo = &dataOtherCiDevBuf[i]; toOpenCheckFlag = 0u;/*默认为恢复不可重开*/ - /*判断检查条件为SPKS或是本信号机关联的PSD*/ + /*判断检查条件为SPKS或是进站、出战关联的PSD*/ if (CI_DEVICE_TYPE_SPKS == tmpOtherCiDevInfo->DevType) { cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); @@ -3114,17 +3227,11 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId) } else if (CI_DEVICE_TYPE_PSD == tmpOtherCiDevInfo->DevType) { - if ((NULL != psdIdBuf) && (0u < psdSum)) - { - for (j = 0u;j < psdSum;j++) - { - if (psdIdBuf[j] == tmpOtherCiDevInfo->DevId) - { - toOpenCheckFlag = 1u; - break; - } - } - } + toOpenCheckFlag = 1U; + } + else if (CI_DEVICE_TYPE_ESB == tmpOtherCiDevInfo->DevType) + { + toOpenCheckFlag = 1U; } else { @@ -3175,10 +3282,13 @@ static UINT8 RouteSecFLockErrCheck(UINT16 const routeId) UINT16 devId = 0u; UINT8 devState = 0u; UINT8 ret = CI_SUCCESS; - UINT8 fLockType = PHY_SEC_FLOCK_TYPE_NONE;/*物理区段封锁类型变量*/ - UINT8 cRouteLevel = ROUTE_LEVEL_BLOC; /*进路级别*/ - UINT8 cFuncSwitchSpks = 0U; /*SPKS信号重开检查进路级别开关*/ - + UINT8 cRouteFlockCheck = CI_ERROR; /*封锁检查*/ + UINT8 chFlockType = 0U;/*区段封锁类型*/ + UINT8 chPassFlockType = SEC_FLOCK_CBTCLASTSEC_PASS;/*不检查的类型*/ + UINT8 chPassLastFlock = ROUTE_PASS_LAST_FLOCK_NO;/*跳过最后区段配置*/ + UINT8 chRouteLevel = 0U;/*进路等级*/ + chRouteLevel = GetRouteLevel(routeId); + chPassLastFlock = GetRoutePassLastFlockProperty(routeId); if (0u == checkSum) { /*区段数据错误*/ @@ -3191,40 +3301,31 @@ static UINT8 RouteSecFLockErrCheck(UINT16 const routeId) { devId = dataIdBuf[i].PhysicalSectionId; devState = GetPhySecFLockState(devId); + chFlockType = GetPhySecFLockType(devId); /* 状态如果不是未封锁状态,则认为检查失败 */ if (PHYSICAL_SECTION_FLOCK_NO == devState) { /*不处理*/ } + else if ((ROUTE_LEVEL_CBTC == chRouteLevel) + && (ROUTE_PASS_LAST_FLOCK_YES == chPassLastFlock) + && ((checkSum - 1U) == i) + && (chPassFlockType == (chPassFlockType | chFlockType))) + { + ;/*CBTC进路最后区段 具备不检查ESB/APG/SPKS封锁属性/*/ + } else if (PHYSICAL_SECTION_FLOCK_YES ==devState ) { - fLockType = GetPhySecFLockType(devId);/*获得物理区段封锁类型*/ - - if (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) + cRouteFlockCheck = SectionFlockReOpenCheck(devId, routeId); + if ((CI_SUCCESS == cRouteFlockCheck)&&(CI_ERROR != ret)) { - if (CI_ERROR != ret) - { - cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); - cRouteLevel = GetRouteLevel(routeId); - if ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel))) - { - /*SPKS信号重开检查进路级别开关打开或(关闭且进路级别为CBTC)*/ - ret = CI_ROUTE_RECOVER_ERR; - } - else - { - ret = CI_ERROR; - } - } - else - { - ; - } + ret = CI_ROUTE_RECOVER_ERR; } else { ret = CI_ERROR; + break; } } else @@ -3256,10 +3357,7 @@ static UINT8 OverlapAllSecFLockValidErrCheck(UINT16 const overlapId) UINT16 devId = 0u; UINT8 devState = 0u; UINT8 ret = CI_SUCCESS; - - UINT8 fLockType = PHY_SEC_FLOCK_TYPE_NONE;/*物理区段封锁类型变量*/ - UINT8 cRouteLevel = ROUTE_LEVEL_BLOC; /*进路级别*/ - UINT8 cFuncSwitchSpks = 0U; /*SPKS信号重开检查进路级别开关*/ + UINT8 fLockOpenCheck = CI_ERROR;/*物理区段封锁类型变量*/ UINT16 wBelongRouteId = 0U; /*保护区段锁闭所属进路*/ if ((0U != overlapId) && (OVERLAP_SUM_MAX != overlapId)) @@ -3281,29 +3379,12 @@ static UINT8 OverlapAllSecFLockValidErrCheck(UINT16 const overlapId) } else if (PHYSICAL_SECTION_FLOCK_YES == devState) { - fLockType = GetPhySecFLockType(devId);/*获得物理区段封锁类型*/ + wBelongRouteId = GetOverlapBelongRouteId(overlapId); + fLockOpenCheck = SectionFlockReOpenCheck(devId, wBelongRouteId);/*获得物理区段封锁重开检查*/ - if (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) + if ((CI_ERROR != fLockOpenCheck)&&(CI_ERROR != ret)) { - wBelongRouteId = GetOverlapBelongRouteId(overlapId); - if ((CI_ERROR != ret) && (CI_ERROR != wBelongRouteId)) - { - cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); - cRouteLevel = GetRouteLevel(wBelongRouteId); - if ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel))) - { - /*SPKS信号重开检查进路级别开关打开或(关闭且进路级别为CBTC)*/ - ret = CI_ROUTE_RECOVER_ERR; - } - else - { - ret = CI_ERROR; - } - } - else - { - ; - } + ret = CI_ROUTE_RECOVER_ERR; } else { @@ -4223,6 +4304,28 @@ static UINT8 KeepCbtcRouteSectionErrCheck(const UINT16 routeId) #endif + if (CI_SUCCESS == reResult) + { + /*CBTC通过进路需再检查数据中配置的逻辑区段的占用状态*/ + devId = 0U; + devState = 0U; + checkResult = RouteCbtcKeepOpenLgcOccCheck(routeId, &devId, &devState); + if (CI_SUCCESS == checkResult) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 失败返回 */ + reResult = CI_ERROR; + } + } + else + { + /*非列车进路或已经检查失败,不处理*/ + } + /* 进路内所有区段未被封锁 */ if (CI_SUCCESS == reResult) { @@ -4342,6 +4445,29 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId) ; } + if (CI_SUCCESS == reResult) + { + /*CBTC通过进路需再检查数据中配置的逻辑区段的占用状态*/ + devId = 0U; + devState = 0U; + checkResult = RouteCbtcLogSecOccCheck(routeId, &devId, &devState); + if (CI_SUCCESS == checkResult) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 失败返回 */ + reResult = CI_ERROR; + } + } + else + { + /*非列车进路或已经检查失败,不处理*/ + } + + /*使用新增的函数RouteIntruSecVainSPKSErrCheck*/ #if 0 /*侵限区段侵限条件不满足检查*/ @@ -4383,7 +4509,7 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId) } #endif /* 进路内所有区段未被封锁 */ - if (checkResult == CI_SUCCESS) + if (CI_SUCCESS == reResult) { checkResult = RouteSecFLockErrCheck(routeId); if ((CI_ERROR == checkResult) || (CI_ROUTE_RECOVER_ERR == checkResult)) @@ -4538,10 +4664,8 @@ static UINT8 RouteIntruSecVainSPKSErrCheck(const UINT16 routeId) UINT8 devJumpLockState = 0U; UINT8 intruSwitchPosValid = CI_ERROR; UINT8 reVal = CI_ERROR; - UINT8 fLockType = PHY_SEC_FLOCK_TYPE_NONE;/*物理区段封锁类型变量*/ + UINT8 fLockOpenCheck = CI_ERROR;/*物理区段封锁检查*/ UINT8 checkFlockFlag = GetCiFunctionSwitchConfig(FUNC_INTRUSEC_CHECKFLOCK_FLAG); - UINT8 cFuncSwitchSpks = 0U; /*SPKS自动信号重开是否检查进路级别开关*/ - UINT8 cRouteLevel = 0U; UINT8 chPhySecLogLockState = 0U;/*物理区段逻辑锁闭状态*/ /* 检查侵限状态 */ @@ -4554,21 +4678,16 @@ static UINT8 RouteIntruSecVainSPKSErrCheck(const UINT16 routeId) { /*开始检查*/ reVal = CI_SUCCESS;/*先将返回值设置成功,若侵限成立则会修改函数返回值为CI_ERROR或CI_ROUTE_RECOVER_ERR*/ - cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); - cRouteLevel = GetRouteLevel(routeId); for (i = 0u; i < checkSum; i++) { devId = dataIdBuf[i].SectionId; devState = GetPhySecCurMergeState(devId);/*获取物理区段占用状态*/ devFLockState = GetPhySecFLockState(devId);/*获取物理区段封锁状态*/ - fLockType = GetPhySecFLockType(devId);/*获取物理区段封锁类型*/ devLockState = GetPhySecLockState(devId); devJumpLockState = GetPhySecJumpLockState(devId); chPhySecLogLockState = PhySecLogLockStateCheck(devId); - - /* 检查侵限区段是否占用或封锁*/ if ((SECTION_OCCUPY_YES == devState) || ((PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (FUNC_SWITCH_ON != checkFlockFlag)) @@ -4605,10 +4724,11 @@ static UINT8 RouteIntruSecVainSPKSErrCheck(const UINT16 routeId) if (CI_ERROR == intruSwitchPosValid) { /*有岔侵限条件成立*/ + fLockOpenCheck = SectionFlockReOpenCheck(devId, routeId); if ((PHYSICAL_SECTION_JUMP_LOCK_YES != devJumpLockState) && (PHYSICAL_SECTION_LOCK_NO == devLockState) && (SECTION_OCCUPY_YES != devState) - && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) - && ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel)))) - {/*侵限区段未占用且封锁且是由于SPKS按下导致的封锁且(SPKS自动重开开关打开或关闭但进路为CBTC),在SPKS恢复后可自动重开*/ + && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) + && (CI_SUCCESS==fLockOpenCheck)) + {/*侵限区段未占用且封锁且是由于可重开的封锁(spks或全线封锁),在恢复后可自动重开*/ reVal = CI_ROUTE_RECOVER_ERR; } else @@ -4619,10 +4739,11 @@ static UINT8 RouteIntruSecVainSPKSErrCheck(const UINT16 routeId) } else { + fLockOpenCheck = SectionFlockReOpenCheck(devId, routeId); if ((PHYSICAL_SECTION_JUMP_LOCK_YES != devJumpLockState) && (PHYSICAL_SECTION_LOCK_NO == devLockState) && (SECTION_OCCUPY_YES != devState) - && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) - && ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel)))) - {/*侵限区段未占用且封锁且是由于SPKS按下导致的封锁且(SPKS自动重开开关打开或关闭但进路为CBTC),在SPKS恢复后可自动重开*/ + && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) + && (CI_SUCCESS == fLockOpenCheck)) + {/*侵限区段未占用且封锁且是由于可重开的封锁(spks或全线封锁),在恢复后可自动重开恢复后可自动重开*/ reVal = CI_ROUTE_RECOVER_ERR; } else @@ -4665,8 +4786,6 @@ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) UINT8 thisRelayState = 0U; UINT8 routeState = 0U; UINT8 retVal = CI_ERROR; /*函数返回值*/ - UINT16 pDevId = 0U; - UINT8 pDevState = 0U; UINT8 chErrTemp = 0U; /* 对端照查检查 */ @@ -4790,15 +4909,13 @@ UINT8 RoutePhySecZhaoChaErrCheck(UINT16 const routeId ,UINT16 const phySecId) UINT8 secLockedDirection = 0u; /*区段锁闭方向*/ UINT8 routeDirection = 0u; /*进路方向*/ UINT8 retVal = CI_ERROR; /*函数返回值*/ - UINT8 fLockType = PHY_SEC_FLOCK_TYPE_NONE; /*物理区段封锁类型变量*/ + UINT8 fLockOpenCheck = CI_ERROR; /*物理区段封锁重开检查*/ UINT8 phyBelongCi = 0u; /*物理区段所属联锁*/ UINT8 commState = 0u; /*通信状态*/ /*相邻联锁是否支持继电接口*/ UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI); UINT8 localCi = GetSystemParaLocalCiId(); /*本机联锁*/ UINT8 confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/ - UINT8 cFuncSwitchSpks = 0U; /*SPKS信号自动重开开关,0x55检查进路级别,0xaa不检查*/ - UINT8 cRouteLevel = 0U; if ((0U == routeId ) || (0U == phySecId)) { @@ -4856,12 +4973,10 @@ UINT8 RoutePhySecZhaoChaErrCheck(UINT16 const routeId ,UINT16 const phySecId) } else if (PHYSICAL_SECTION_FLOCK_YES == secFlockState) { - fLockType = GetPhySecFLockType(phySecId);/*获得物理区段封锁类型*/ - cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); - cRouteLevel = GetRouteLevel(routeId); - if ((PHY_SEC_FLOCK_TYPE_SPKS == fLockType) && ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel)))) + fLockOpenCheck = SectionFlockReOpenCheck(phySecId, routeId);/*物理区段封锁重开检查*/ + if (CI_SUCCESS == fLockOpenCheck) { - retVal = CI_ROUTE_RECOVER_ERR; /* 状态如果SPKS导致的封锁且SPKS自动重开开关打开或关闭但进路为CBTC,则可以恢复重开*/ + retVal = CI_ROUTE_RECOVER_ERR; /* 区段封锁且是可重开封锁类型导致封锁,在封锁恢复后可自动重开*/ } else { diff --git a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c index 17c137d..fd445f7 100644 --- a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c @@ -3787,7 +3787,7 @@ void SetSwitchPositionM(const UINT16 switchId, const UINT8 switchSetPos) if (CI_SUCCESS == check_Result) {/*单操位置有效*/ /*单操道岔处理*/ - if (CI_SUCCESS == SetSwitchPositionLogicProcess(switchId, switchSetPos, 0u, &chTemp)) + if (CI_SUCCESS == SetSwitchPositionLogicProcess(switchId, switchSetPos, 0u, &chTemp, ESEND_LEVEL_ATS)) { /*检查通过*/ (void)SetSwitchDanCaoPosition(switchId, switchSetPos); /*设置单操位置标志*/ diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c index 360db1c..26d0951 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c @@ -46,6 +46,15 @@ CI_SUCCESS: CI_ROUTE_RECOVER_ERR:失败,但是当条件满足时可以重开信号 */ static UINT8 OtherCiValidErrCheck(UINT16 const routeId); + +/* +* 功能描述: 逻辑区段资源可用性检查—迪士尼联络线条件检查 +* 参数说明: UINT16 const wLogicSecId +* 返回值 : CI_ERROR +* CI_SUCCESS +* 故障编码: +*/ +static UINT8 LogSecDsnConnectCheck(UINT16 wLogSecId); /* * 功能描述: 进路信号机封锁状态检查 * 参数说明: UINT16 const routeId, 进路ID @@ -180,7 +189,6 @@ UINT8 RouteSignalEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDevS UINT8 signalCurColor = 0u; UINT8 routeInitEnemyState = 0u;/*进路初始敌对*/ - UINT8 commState = 0u;/*通信状态*/ /*相邻联锁是否支持继电接口*/ UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI); UINT8 confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/ @@ -2049,10 +2057,7 @@ UINT8 RouteSwitchPosAndMoveValidCheck(UINT16 const routeId,UINT8 sendLevel) UINT8 chLocalCiId = 0U;/*本地联锁ID*/ UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/ UINT8 chSearchCiId = 0U;/*查询到的联锁ID*/ - UINT16 chDevId = 0U; - UINT8 chDevState = 0U; - UINT8 chDevType = 0U; - UINT8 chDevErrorType = 0U; + if (0U == checkSum) { /*无检查项*/ @@ -2114,11 +2119,7 @@ UINT8 RouteSwitchPosAndMoveValidCheck(UINT16 const routeId,UINT8 sendLevel) else { reVal = CI_ERROR; - chDevId = GetRouteApplySwitchCheckErrorData(routeId, &chDevType, &chDevState, &chDevErrorType); - if (0U != chDevId) - { - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, chDevType, chDevId, chDevErrorType, chDevState, sendLevel); - } + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_APPLY_SWITCH_CHECK, chRouteApplySwitchCheckFlag, ESEND_LEVEL_ZERO); } } } @@ -2866,10 +2867,6 @@ UINT8 RouteRelProSwiPosAndMovValCheck(UINT16 const routeId,UINT8 sendLevel) UINT8 chLocalCiId = 0U;/*本地联锁ID*/ UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/ UINT8 chSearchCiId = 0U;/*查询到的联锁ID*/ - UINT16 chDevId = 0U; - UINT8 chDevState = 0U; - UINT8 chDevType = 0U; - UINT8 chDevErrorType = 0U; if (0U == checkSum) { @@ -2932,11 +2929,7 @@ UINT8 RouteRelProSwiPosAndMovValCheck(UINT16 const routeId,UINT8 sendLevel) else { reVal = CI_ERROR; - chDevId = GetRouteApplySwitchCheckErrorData(routeId, &chDevType, &chDevState, &chDevErrorType); - if (0U != chDevId) - { - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, chDevType, chDevId, chDevErrorType, chDevState, sendLevel); - } + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_APPLY_SWITCH_CHECK, chRouteApplySwitchCheckFlag, ESEND_LEVEL_ZERO); } } } @@ -4015,16 +4008,14 @@ UINT8 OverlapInvSecAndConSwiCheckup(UINT16 const overlapId, UINT16* pDevId, UINT UINT8 currSwitPos = 0U; /*条件道岔实际位置*/ UINT16 tmpDevId = 0U; /*临时变量*/ UINT8 tmpDevState = 0U; /*临时变量*/ - UINT8 fLockType = PHY_SEC_FLOCK_TYPE_NONE;/*物理区段封锁类型变量*/ UINT8 condSwitchPosValid = CI_ERROR; UINT8 devLockState = 0U; UINT8 devJumpLockState = 0U; UINT8 reVal = CI_SUCCESS; UINT8 checkFlockFlag = GetCiFunctionSwitchConfig(FUNC_INTRUSEC_CHECKFLOCK_FLAG); - UINT8 cFuncSwitchSpks = 0U; /*SPKS信号自动重开开关,0x55检查进路级别,0xaa不检查*/ UINT16 wLockBelongRouteId = 0U; /*保护区段锁闭所属进路*/ - UINT8 cRouteLevel = 0U; UINT8 chPhySecLogLockState = 0U;/*物理区段逻辑锁闭状态*/ + UINT8 chFlockReOpenCheck = CI_ERROR;/*可重开封锁检查*/ /*检查pDevId是否为NULL*/ if (NULL != pDevId) @@ -4054,10 +4045,8 @@ UINT8 OverlapInvSecAndConSwiCheckup(UINT16 const overlapId, UINT16* pDevId, UINT /* 检查侵限状态 */ if (0U < invSecAndConSwiSum) { - cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); wLockBelongRouteId = GetOverlapBelongRouteId(overlapId); - cRouteLevel = GetRouteLevel(wLockBelongRouteId); - + /*开始检查*/ for (i = 0U; i < invSecAndConSwiSum; i++) { @@ -4065,7 +4054,6 @@ UINT8 OverlapInvSecAndConSwiCheckup(UINT16 const overlapId, UINT16* pDevId, UINT invaSectId = GetInvaSectId(invSecAndConSwiId); invaSectState = GetPhySecCurMergeState(invaSectId); devFLockState = GetPhySecFLockState(invaSectId); - fLockType = GetPhySecFLockType(invaSectId); devLockState = GetPhySecLockState(invaSectId); devJumpLockState = GetPhySecJumpLockState(invaSectId); chPhySecLogLockState = PhySecLogLockStateCheck(invaSectId); @@ -4110,13 +4098,17 @@ UINT8 OverlapInvSecAndConSwiCheckup(UINT16 const overlapId, UINT16* pDevId, UINT {/*条件道岔满足侵限条件*/ *pDevId = invaSectId; *pDevState = invaSectState; - if ((SECTION_OCCUPY_YES != invaSectState) && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) - && ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel)))) - {/*侵限区段未占用且封锁且是由于SPKS按下导致的封锁,且SPKS重开开关打开或关闭但进路为CBTC,在SPKS恢复后可自动重开*/ + + /*检查封锁可自动重开条件*/ + chFlockReOpenCheck = SectionFlockReOpenCheck(invaSectId, wLockBelongRouteId); + + if ((SECTION_OCCUPY_YES != invaSectState) && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) + &&(CI_SUCCESS == chFlockReOpenCheck)) + {/*侵限区段未占用且封锁且是可重开封锁类型导致封锁,在封锁恢复后可自动重开*/ reVal = CI_ROUTE_RECOVER_ERR; } else - {/*除区段SPKS按下侵限成立外的其他条件导致的侵限成立的场景,不可重开*/ + {/*除区段SPKS按下、全线区段封锁侵限成立外的其他条件导致的侵限成立的场景,不可重开*/ reVal = CI_ERROR; } } @@ -4129,9 +4121,11 @@ UINT8 OverlapInvSecAndConSwiCheckup(UINT16 const overlapId, UINT16* pDevId, UINT {/*无道岔检查项,无岔侵限条件条件成立*/ *pDevId = invaSectId; *pDevState = invaSectState; - if ((SECTION_OCCUPY_YES != invaSectState) && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) - && ((FUNC_SWITCH_ON == cFuncSwitchSpks) || ((FUNC_SWITCH_OFF == cFuncSwitchSpks) && (ROUTE_LEVEL_CBTC == cRouteLevel)))) - {/*侵限区段未占用且封锁且是由于SPKS按下导致的封锁,且SPKS重开开关打开或关闭但进路为CBTC,在SPKS恢复后可自动重开*/ + /*检查封锁可自动重开条件*/ + chFlockReOpenCheck = SectionFlockReOpenCheck(invaSectId, wLockBelongRouteId); + if ((SECTION_OCCUPY_YES != invaSectState) && (PHYSICAL_SECTION_FLOCK_YES == devFLockState) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState) + && (CI_SUCCESS == chFlockReOpenCheck)) + {/*侵限区段未占用且封锁且是可重开封锁类型导致封锁,在封锁恢复后可自动重开*/ reVal = CI_ROUTE_RECOVER_ERR; } else @@ -4832,7 +4826,6 @@ UINT8 CheckProSwUseStateInHalfRoute(UINT16 const routeId, UINT16* pDevId, UINT8* { /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ - UINT16 devId = 0u; UINT8 devState = 0u; UINT8 reVal = CI_ERROR; UINT16 proSwitchId = 0u;/*防护道岔ID*/ @@ -4840,13 +4833,8 @@ UINT8 CheckProSwUseStateInHalfRoute(UINT16 const routeId, UINT16* pDevId, UINT8* UINT8 proSwitchRoutePos = 0u;/*进路要求的防护道岔位置*/ UINT8 switchCurPosition = 0u; UINT8 SwitchDrvPos = 0u; - - UINT8 phyBelongCi = 0u;/*区段所属联锁*/ - UINT8 commState = 0u;/*通信状态*/ - UINT16 phySecProtectUseRouteId = 0u; UINT16 phySecUseRouteId = 0u; - UINT16 phySecUseByLogRouteId = 0u; /*进路防护道岔*/ @@ -7351,7 +7339,11 @@ UINT8 RouteSecFLockCheck(UINT16 const routeId, UINT16 *pDevId,UINT8 *pDevState ) UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI); UINT8 localCi = GetSystemParaLocalCiId();/*本机联锁*/ UINT8 confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/ - + UINT8 chPassLastFlock = ROUTE_PASS_LAST_FLOCK_NO;/*跳过最后区段配置*/ + UINT8 chRouteLevel= GetRouteLevel(routeId);/*进路等级*/ + UINT8 chFlockType = 0U;/*区段封锁类型*/ + UINT8 chPassFlockType = SEC_FLOCK_CBTCLASTSEC_PASS;/*不检查的类型*/ + chPassLastFlock = GetRoutePassLastFlockProperty(routeId); /* 区段占用检查 */ if (NULL == pDataIdBuf) { @@ -7379,14 +7371,41 @@ UINT8 RouteSecFLockCheck(UINT16 const routeId, UINT16 *pDevId,UINT8 *pDevState ) } else { - /* 状态如果不是未封锁状态,则认为检查失败 */ - if (devState != PHYSICAL_SECTION_FLOCK_NO) + /*CBTC进路最后一区段且配置最后区段不检查SPKS/ESB/APG属性*/ + if ((ROUTE_LEVEL_CBTC == chRouteLevel) + &&(ROUTE_PASS_LAST_FLOCK_YES == chPassLastFlock) + &&((checkSum-1U) == i)) { - /*状态不一致返回故障状态*/ - *pDevId = devId; - *pDevState = devState; - ret = CI_ERROR; - break; + chFlockType = GetPhySecFLockType(devId); + /*不检查ESB/SPKS/APG,存在其他封锁时返回失败*/ + if (chPassFlockType != (chPassFlockType | chFlockType)) + { + /*返回故障状态*/ + *pDevId = devId; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; + ret = CI_ERROR; + break; + } + else + { + ;/*通过*/ + } + } + else + { + /* 状态如果不是未封锁状态,则认为检查失败 */ + if (devState != PHYSICAL_SECTION_FLOCK_NO) + { + /*状态不一致返回故障状态*/ + *pDevId = devId; + *pDevState = devState; + ret = CI_ERROR; + break; + } + else + { + ;/*继续*/ + } } } @@ -8181,9 +8200,6 @@ UINT8 CheckNearestTrainOfGarageDoor(const UINT16 garageDoorId, const UINT8 func UINT8 retVal = CI_ERROR; UINT16 trainId = 0U; /*最接近列车ID*/ UINT8 chSleepState = TRAIN_SLEEP_NO; /*列车休眠状态*/ - str_Zone strTrainZone = { 0u }; - struct_PathPoint gdPoint = { 0U }; - UINT8 containFlag = CI_ERROR; UINT16 devId = 0U; /*设备ID*/ UINT8 devState = 0U; /*设备状态*/ @@ -8809,7 +8825,6 @@ UINT8 OpenCbtcRouteOtherSignalCheck(UINT16 routeId, UINT8 functionId, UINT8 send UINT8 signalVirtualAttr = SIGNAL_VIRTUAL_NO;/*虚拟信号机属性*/ UINT8 repeatOpenFlag = ROUTE_REPEATOPEN_SET_NO;/*重开标志*/ - UINT8 needOpenNotTrueRepeatFlag = ROUTE_NEEDOPEN_REOPEN_NO;/*需开放不满足重开标志*/ routeState = GetRouteState(routeId);/*获取进路状态*/ /* 联锁逻辑检查 */ @@ -9269,27 +9284,36 @@ UINT8 KeepLTrainRouteSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel UINT16 devId = 0u; /*设备ID*/ UINT8 devState = 0u; /*设备状态*/ UINT8 FSwitchFlag = 0u; + UINT8 cDsnConnectAttr = CI_ERROR; /* 进路内设备数据 */ /* 始端信号机Id */ UINT16 const startSignalId = GetRouteStartSignalId(routeId); /* 联锁逻辑检查 */ - - /* 进路始端信号机上周期驱动颜色为【开放】*/ - devState = GetSignalOpenCloseState(GetSignalPreDriveColor(startSignalId)); - if (devState == SIGNAL_OPEN) + cDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDsnConnectAttr) || (ROUTE_DISNEY_CONNECT_ENDMINE == cDsnConnectAttr)) { - /* 通过检查 */ + /*始端在联络线的进路,不检查上周期驱动颜色为开放*/ reResult = CI_SUCCESS; } else { - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_SIGNAL,startSignalId,ETYPE_SIG_START_OPEN_STATE,devState,sendLevel); - /* 失败返回 */ - reResult = CI_ERROR; + /* 进路始端信号机上周期驱动颜色为【开放】*/ + devState = GetSignalOpenCloseState(GetSignalPreDriveColor(startSignalId)); + if (devState == SIGNAL_OPEN) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, devState, sendLevel); + /* 失败返回 */ + reResult = CI_ERROR; + } } if (CI_SUCCESS == reResult) @@ -9371,29 +9395,44 @@ UINT8 KeepLTrainRouteSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) { /* 局部变量定义初始化 */ - UINT8 reResult = CI_ERROR; /*返回值*/ - UINT8 checkResult = CI_ERROR; /*检查结果*/ + UINT8 reResult = CI_ERROR; /*返回值*/ + UINT8 checkResult = CI_ERROR; /*检查结果*/ - UINT8 reResultP = CI_ERROR; /*保护区段局部检查返回值*/ + UINT8 reResultP = CI_ERROR; /*保护区段局部检查返回值*/ - UINT16 devId = 0u; /*设备ID*/ - UINT8 devState = 0u; /*设备状态*/ + UINT16 devId = 0u; /*设备ID*/ + UINT8 devState = 0u; /*设备状态*/ UINT8 lineIdentity = CI_TRADITION_RAILWAY; - UINT32 startCycNum = GetRouteXuanPaiStartCycNum(routeId); /*选排起始周期号*/ - UINT32 startCycMax = GetSystemParaRouteXuanPaiCyc(); /*选排超限周期数*/ + UINT32 startCycNum = GetRouteXuanPaiStartCycNum(routeId); /*选排起始周期号*/ + UINT32 startCycMax = GetSystemParaRouteXuanPaiCyc(); /*选排超限周期数*/ + UINT8 cRouteDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ -/* 进路内设备数据 */ + /* 进路内设备数据 */ /* 选排锁闭超时状态 */ - UINT8 const routeTimeState = SystemOverTimeCheck(startCycNum, startCycMax); + UINT8 routeTimeState = CI_TIME_OUT; UINT8 chConnetCheckFunc = 0U; chConnetCheckFunc = GetCiFunctionSwitchConfig(FUNC_SETROUTE_CONNECT_CHECK); /*获取是否要检查联络线条件的开关*/ - lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*获取线路标识*/ -/* 联锁逻辑检查 */ - + /*获取联络线进路类型*/ + cRouteDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); + /*检查进路选排是否超时*/ + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cRouteDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cRouteDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cRouteDisneyConnectAttr)) + { + /*迪士尼联络线读取单独的超时周期数配置*/ + startCycMax = GetDsnConnectRouteOvertimeCyc(); + } + else + { + startCycMax = GetSystemParaRouteXuanPaiCyc(); + } + routeTimeState = SystemOverTimeCheck(startCycNum, startCycMax); + + /* 联锁逻辑检查 */ /*进路内所有道岔【未引导总锁】*/ devId = 0u; devState = 0u; @@ -9417,7 +9456,7 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*进路内所有道岔【未封锁】*/ devId = 0u; devState = 0u; - checkResult = RouteSwitchFLockCheck(routeId,&devId, &devState); + checkResult = RouteSwitchFLockCheck(routeId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* 通过检查 */ @@ -9426,10 +9465,9 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_FLOCK_STATE,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); /* 失败返回 */ reResult = CI_ERROR; - } } @@ -9438,7 +9476,7 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*进路防护道岔【未封锁】*/ devId = 0u; devState = 0u; - checkResult = RouteReltProtSwitchFLockCheck(routeId,&devId, &devState); + checkResult = RouteReltProtSwitchFLockCheck(routeId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* 通过检查 */ @@ -9447,10 +9485,9 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_FLOCK_STATE,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); /* 失败返回 */ reResult = CI_ERROR; - } } @@ -9458,13 +9495,25 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) { /*进路锁闭时间超时检查*/ /*判断为CI_TIME_IN时会存在普通进路转引导时此处超时(因为选排时间为0)*/ - if (CI_TIME_OUT == routeTimeState ) + if (CI_TIME_OUT == routeTimeState) { - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE,routeId, ETYPE_ROUTE_XUANPAI_OVERTIME,routeTimeState,sendLevel); - /* 失败返回 */ - reResult = CI_ERROR; - + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cRouteDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cRouteDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cRouteDisneyConnectAttr)) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_CONNECT_OVERRIME, routeTimeState, sendLevel); + /* 失败返回 */ + reResult = CI_ERROR; + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_XUANPAI_OVERTIME, routeTimeState, sendLevel); + /* 失败返回 */ + reResult = CI_ERROR; + } + } else { @@ -10017,11 +10066,12 @@ UINT8 ChekRoutSwitDrivOvtmStat(const UINT16 routeId) /* * 功能描述: 区段故障解锁 * 参数说明: UINT16 const phySectionId +* UINT8 const isConnectSec 是否联络线(联络线不报警)CI_SUCCESS是 CI_ERROR否 * 返回值 : CI_ERROR * CI_SUCCESS * 故障编码: EFUNC_UNLOCK_FAULT_SECTION */ -UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId) +UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId, UINT8 const isConnectSec) { /*函数故障码*/ UINT8 const functionId = EFUNC_UNLOCK_FAULT_SECTION; @@ -10044,6 +10094,16 @@ UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId) UINT8 otherCiId = 0u;/*其它联锁ID*/ UINT8 execRes = 0u;/*执行结果*/ + /*联络线不报警*/ + if (CI_SUCCESS == isConnectSec) + { + sendLevel = ESEND_LEVEL_ZERO; + } + else + { + sendLevel = ESEND_LEVEL_ATS; + } + /*获取区段相关信息*/ phySecLockBelongRouteId = GetPhySecRLockBelongRouteId(phySectionId); phyBelongCi = GetPhySecBelongCiId(phySectionId);/*获取物理区段所属联锁*/ @@ -11705,28 +11765,38 @@ UINT8 SetBlocRouteSignalCheck( UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT16 devId = 0u; /*设备ID*/ UINT8 devState = 0u; /*设备状态*/ UINT8 signalCurColor = 0u; + UINT8 cRouteDisneyConnectAttr = CI_ERROR; /*联络线进路类型(迪士尼)*/ /* 进路内设备数据 */ /* 始端信号机Id */ UINT16 const startSignalId = GetRouteStartSignalId(routeId); - + /*获取联络线进路类型*/ + cRouteDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /* 联锁逻辑检查 */ - /* 进路始端信号机未开放*/ - signalCurColor = GetSignalCurColor(startSignalId); - devState = GetSignalOpenCloseState(signalCurColor); - if (devState == SIGNAL_CLOSE) + if (ROUTE_DISNEY_CONNECT_ALLOTHER == cRouteDisneyConnectAttr) { - /* 通过检查 */ + /*完全属于邻线的进路,不检查进路始端信号机未开放*/ reResult = CI_SUCCESS; } else { - /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_SIGNAL,startSignalId,ETYPE_SIG_START_OPEN_STATE,devState,sendLevel); - /* 失败返回 */ - reResult = CI_ERROR; + /* 进路始端信号机未开放*/ + signalCurColor = GetSignalCurColor(startSignalId); + devState = GetSignalOpenCloseState(signalCurColor); + if (devState == SIGNAL_CLOSE) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, devState, sendLevel); + /* 失败返回 */ + reResult = CI_ERROR; + } } if (CI_SUCCESS == reResult) @@ -11734,7 +11804,7 @@ UINT8 SetBlocRouteSignalCheck( UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*进路内所有信号机【未封锁】*/ devId = 0u; devState = 0u; - checkResult = RouteSignalFLockCheck(routeId,&devId,&devState); + checkResult = RouteSignalFLockCheck(routeId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* 通过检查 */ @@ -11743,7 +11813,7 @@ UINT8 SetBlocRouteSignalCheck( UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* 记录故障码 */ - SetErrorData(functionId,CI_DEVICE_TYPE_SIGNAL,devId,ETYPE_SIG_FLOCK_STATE,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, devId, ETYPE_SIG_FLOCK_STATE, devState, sendLevel); /* 失败返回 */ reResult = CI_ERROR; @@ -13480,13 +13550,11 @@ UINT8 AutoReturnFloodStateCheck(const UINT16 autoReturnId) UINT8 ii = 0u; UINT16 routeId = 0u; - UINT8 checkResult = CI_ERROR; /*检查结果*/ UINT16 floodSum = 0u; UINT16 *pFloodIdBuf = NULL;/*临时变量:进路管理防淹门数量和id数组指针*/ - UINT16 phySecSum = 0u; - UINT16 *pPhySecIdBuf = NULL;/*临时变量:防淹门管理物理区段数量和id数组指针*/ + UINT16 jj=0u;/*临时索引*/ UINT16 kk=0u;/*临时索引*/ @@ -13494,7 +13562,6 @@ UINT8 AutoReturnFloodStateCheck(const UINT16 autoReturnId) UINT8 flagBreak = 0u;/*中断循环标志*/ UINT16 floodGateId = 0u;/*临时变量:防淹门id*/ - UINT8 floodState = 0u;/*防淹门状态*/ UINT16 devId = 0u; UINT8 sendLevel = ESEND_LEVEL_ATS; @@ -13624,21 +13691,14 @@ UINT8 AllAutoReturnFloodStateCheck(const UINT16 allAutoReturnId) UINT8 ii = 0u; UINT16 routeId = 0u; - UINT8 checkResult = CI_ERROR; /*检查结果*/ - UINT16 floodSum = 0u; UINT16 *pFloodIdBuf = NULL;/*临时变量:进路管理防淹门数量和id数组指针*/ - UINT16 phySecSum = 0u; - UINT16 *pPhySecIdBuf = NULL;/*临时变量:防淹门管理物理区段数量和id数组指针*/ - UINT16 jj=0u;/*临时索引*/ UINT16 kk=0u;/*临时索引*/ UINT16 pp=0u;/*临时索引*/ UINT16 floodGateId = 0u;/*临时变量:防淹门id*/ - UINT8 floodState = 0u;/*防淹门状态*/ - UINT16 devId = 0u; UINT8 flagBreak = 0u;/*中断循环标志*/ @@ -13812,7 +13872,6 @@ UINT8 ChekAutoTrigRouteFloodGateState(UINT16 routeId) UINT8 functionId = ETYPE_AUTO_TRAGGER_FLAG; UINT8 reVal = CI_ERROR; UINT8 sendLevel = ESEND_LEVEL_ATS; - UINT16 ii = 0U; UINT16 kk = 0U; UINT16 pp = 0U; UINT16 devId = 0U; @@ -14369,7 +14428,6 @@ UINT8 DRouteDCTYCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT8 FloodGateStateCheck(UINT16 floodGateId,UINT8 functionId,UINT8 sendLevel) { UINT8 reVal = CI_ERROR; - UINT8 ii = 0u; UINT8 floodState = 0u;/*防淹门状态*/ UINT16 bufIndex = 0u; @@ -15258,7 +15316,6 @@ UINT8 GroupInAutoRouteConditionCheck(UINT16 autoRouteId) UINT8 returnValue = CI_ERROR; UINT8 chkStatus = 0U;/*临时变量,检查结果*/ UINT8 chFunctionId = EFUNC_CHECK_GROUP_AUTO_ROUTE;/*函数ID*/ - UINT16 opposeRouteID = 0U; if ((0u == autoRouteId) || (AUTO_ROUTE_SUM_MAX <= autoRouteId)) { @@ -15396,7 +15453,6 @@ UINT8 CheckPhysecUseState(const UINT16 devId,const UINT16 routeId) UINT8 routeSwitchPos = 0U; UINT8 j = 0U; UINT16 phySecIncludeSwitchID = 0U; - UINT8 SwitchExpDrvPos = 0U;/*道岔期望动作位置*/ pRouteSwitchStruct = GetRouteSwitchData(routeId);/*正在办理的这条进路内的道岔数据*/ routeSwitchSum = GetRouteSwitchSum(routeId); @@ -15462,7 +15518,6 @@ UINT8 CheckOverlapPhysecUseState(const UINT16 devId,const UINT16 overlapId) UINT16 phySecIncludeSwitchID = 0U; UINT8 OverlapSwitchSum = 0U; OverlapConditionSwitchStruct* pConditionSwitchStr = NULL; - UINT8 SwitchDrvPos = 0U; OverlapSwitchSum = GetOverlapSwitchSum(overlapId); pConditionSwitchStr = GetOverlapCondSwitchStruct(overlapId); @@ -15740,7 +15795,7 @@ UINT8 LogicSecFLockCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState) else { chPhyFLockReason = GetPhySecFLockType(wLgcRelativePhyId); - if (PHY_SEC_FLOCK_TYPE_SPKS == chPhyFLockReason) + if (SEC_FLOCK_TYPE_SPKS == chPhyFLockReason) { /* SPKS按下时不影响资源征用*/ chRetVal = CI_SUCCESS; @@ -15783,7 +15838,6 @@ UINT8 LogicSecRelativeSwitchPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 UINT8 ii = 0U; UINT16 chDevId = 0U; UINT8 chDevState = 0U; - UINT16 wLgcRelativeAxleSecId = 0U; UINT8 chCheckSum = 0U; LogsecSwitchStruct *pstlogicSecSwitchBuf = NULL; @@ -15825,6 +15879,64 @@ UINT8 LogicSecRelativeSwitchPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 return chRetVal; } +/* +* 功能描述:获取逻辑区段所处道岔位置不一致原因 +* 参数说明:UINT16 const wLgcId 逻辑区段ID +* 返 回 值:1 位置一致 +* 0x55 道岔在相反位置 +* 0xAA 道岔失表 +* Created By LQ 2025.12.19 +*/ +UINT8 GetLogSecRelSwPosErrReason(UINT16 const wLgcId) +{ + UINT8 chRetVal = SIGNAL_IN_SW_POS_INVALID; + UINT8 ii = 0U; + UINT16 chDevId = 0U; + UINT8 chDevState = 0U; + UINT8 chCheckSum = 0U; + LogsecSwitchStruct* pstlogicSecSwitchBuf = NULL; + + chCheckSum = GetLogicSecSwitchSum(wLgcId); + pstlogicSecSwitchBuf = GetLogicSecSwitchIdStru(wLgcId); + if ((NULL != pstlogicSecSwitchBuf) && (LOGSEC_INCLUDE_SWITCH_SUM_MAX > chCheckSum)) + { + chRetVal = CI_SUCCESS; + for (ii = 0U; ii < chCheckSum; ii++) + { + chDevId = pstlogicSecSwitchBuf[ii].SwitchId; + chDevState = GetSwitchCurPosition(chDevId); + if (pstlogicSecSwitchBuf[ii].SwitchPosition == chDevState) + { + /* 位置一致,继续检查*/ + } + else if (((SWITCH_POSITION_DINGWEI == pstlogicSecSwitchBuf[ii].SwitchPosition) && (SWITCH_POSITION_FANWEI == chDevState)) + || ((SWITCH_POSITION_FANWEI == pstlogicSecSwitchBuf[ii].SwitchPosition) && (SWITCH_POSITION_DINGWEI == chDevState))) + { + chRetVal = SIGNAL_IN_SW_POS_REVERSE; /*道岔位置相反*/ + } + else + { + chRetVal = SIGNAL_IN_SW_POS_INVALID; /*道岔失表(四开/挤岔/移动中)*/ + } + + if (CI_SUCCESS != chRetVal) + { + break; + } + else + { + /*继续检查*/ + } + } + } + else + { + chRetVal = SIGNAL_IN_SW_POS_INVALID; + } + + return chRetVal; +} + /* * 功能描述: 逻辑区段所处道岔未封锁检查 * 参数说明: UINT16 const routeId, 进路ID @@ -16029,7 +16141,6 @@ UINT8 LogicSecRltvPrtctSwPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pD /* 局部变量定义初始化 */ UINT8 chRetVal = CI_ERROR; UINT8 ii = 0U; - UINT16 jj = 0U; UINT16 chDevId = 0U; UINT8 chDevState = 0U; UINT8 chCheckSum = 0U; @@ -16091,10 +16202,8 @@ UINT8 LogicSecRltvPrtctSwLockCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *p UINT8 chRetVal = CI_ERROR; UINT8 ii = 0U; UINT16 jj = 0U; - UINT8 kk = 0U; UINT16 chDevId = 0U; UINT8 chDevState = 0U; - UINT16 wLgcRelativeAxleSecId = 0U; UINT8 chProtectSwitchSum = 0U; LogsecSwitchStruct *chProtectSwitchIdBuf = NULL; @@ -16158,7 +16267,7 @@ UINT8 LogicIntruSecVainCheck(UINT16 const wLogicSecId, UINT16* pDevId, UINT8* pD UINT8 intruSwitchLockDir = 0U; UINT16 wDevId = 0u; UINT8 chDevState = 0u; - UINT8 chDevFengSuoState = 0u; + UINT8 chDevFengSuoState = 0u;/*封锁类型*/ UINT8 intruSwitchPosValid = CI_ERROR; UINT8 reVal = CI_ERROR; UINT8 chSwitchCurPos = 0U; @@ -16190,8 +16299,8 @@ UINT8 LogicIntruSecVainCheck(UINT16 const wLogicSecId, UINT16* pDevId, UINT8* pD for (i = 0u; i < chLgcIntruSum; i++) { wDevId = GetInvaSectId(pLgcSecIntruIdBuf[i]); - chDevState = GetPhySecCurMergeState(wDevId); chDevFengSuoState = GetPhySecFLockState(wDevId); + chDevState = GetPhySecCurMergeState(wDevId); chPhySecCtOrUt = GetPhySecUtOrCtOccuState(wDevId); chPhysecLockDir = GetPhySecLockDirection(wDevId); intruSwitchLockDir = pLgcSecIntruDirBuf[i]; @@ -17017,6 +17126,7 @@ UINT8 LogRouteLogicSecResSectionCheck(UINT16 wLogicSecId, UINT16 wLogRouteId, UI /* 返回结果 */ return reResult; } + /* * 功能描述: 逻辑区段资源可用性检查 * 参数说明: UINT16 const wLogicSecId @@ -17168,10 +17278,87 @@ UINT8 LogicSecResApplicabilityCheck(UINT16 const wLogicSecId) } } + /*迪士尼联络线联锁条件检查*/ + if (CI_SUCCESS == reResult) + { + checkResult = LogSecDsnConnectCheck(wLogicSecId); + if (CI_SUCCESS == checkResult) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 失败返回 */ + reResult = CI_ERROR; + } + } return reResult; } +/* +* 功能描述: 逻辑区段资源可用性检查—迪士尼联络线条件检查 +* 参数说明: UINT16 const wLogicSecId +* 返回值 : CI_ERROR +* CI_SUCCESS +* 故障编码: +*/ +static UINT8 LogSecDsnConnectCheck(UINT16 wLogSecId) +{ + UINT16 wSecDirLockRelayId = 0u; + UINT16 wRoutePrtlRelayId = 0u; + UINT8 cSecDirLockRelayState = RELAY_STATE_DOWN; + UINT8 cRoutePrtlRelayState = RELAY_STATE_DOWN; + UINT8 retVal = CI_ERROR; + + wSecDirLockRelayId = GetLogSecRelSecDirLockRelayId(wLogSecId); + wRoutePrtlRelayId = GetLogSecRelRoutePrtlRelayId(wLogSecId); + retVal = CI_SUCCESS; + + /*检查区段方向锁闭继电器*/ + if (0xFFFFu == wSecDirLockRelayId) + { + /*未配置,无需检查*/ + } + else + { + cSecDirLockRelayState = GetRelayCollState(wSecDirLockRelayId); + if (RELAY_STATE_UP == cSecDirLockRelayState) + { + /*检查通过*/ + } + else + { + retVal = CI_ERROR; + SetErrorData(EFUNC_LogSecDsnConnectCheck, CI_DEVICE_TYPE_LOGICSEC, + wLogSecId, ETYPE_LOGSEC_DIRLOC_FAIL, RELAY_STATE_DOWN, ESEND_LEVEL_ZERO); + } + } + + /*检查进路协议继电器*/ + if (0xFFFFu == wRoutePrtlRelayId) + { + /*未配置,无需检查*/ + } + else + { + cRoutePrtlRelayState = GetRelayCollState(wRoutePrtlRelayId); + if (RELAY_STATE_UP == cRoutePrtlRelayState) + { + /*检查通过*/ + } + else + { + retVal = CI_ERROR; + SetErrorData(EFUNC_LogSecDsnConnectCheck, CI_DEVICE_TYPE_LOGICSEC, + wLogSecId, ETYPE_LOGSEC_DIRLOC_FAIL, RELAY_STATE_DOWN, ESEND_LEVEL_ZERO); + } + } + + return retVal; +} + /* * 功能描述: 逻辑进路逻辑区段资源可用性检查 * 参数说明: UINT16 const wLogicSecId 逻辑区段ID @@ -17268,19 +17455,12 @@ UINT8 LogicSecSwitchLtrlDfncCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pD /* 局部变量定义初始化 */ UINT8 chRetVal = CI_ERROR; UINT8 ii = 0U; - UINT16 jj = 0U; - UINT16 chDevId = 0U; - UINT8 chDevState = 0U; UINT16 wSwitchRltvPhySecId = 0U; - UINT8 chCheckSum = 0U; UINT16 wLtrlDfncSwSum = 0U; - LogsecSwitchStruct* pProtectSwIdBuf = NULL; UINT8 chPhySecUtOrCtOccState = 0U; UINT8 chPhySecLockDir = 0U; UINT8 chSwitchCurPos = 0U; UINT8 *pSwitchLtrlDfncLockDir = NULL; - UINT16 wLgcLockBelongRutId = 0U; - UINT16 wRutIncProSwFlag = CI_ERROR; UINT8 chPhySecMerOccState = 0U; LogsecSwitchStruct *pstLtrlDfncSwitch = NULL; UINT8 cLogSecLockFlag = CI_ERROR; /*逻辑区段锁闭标志*/ @@ -17532,14 +17712,11 @@ UINT8 RouteCbtcFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDe UINT16 wOutFirstSecId = 0U; UINT8 chOutFirstOccState = 0U; UINT16 wInFirstSecId = 0U; - UINT16 wTrainId = 0U; UINT8 chTrainEnterState = 0U; - UINT8 chTrainInfoSum = 0U; UINT8 chReadyEnterRouteTrainSum = 0U; UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT8 chLogSecOccupyState = 0U;/*逻辑区段占用状态*/ - LOD_STRU strTrainLod = { 0U }; /*列车位置*/ - LOD_STRU strRouteStartSigLod = { 0U }; /*进路始端信号机位置*/ + if ((NULL != pDevId) && (NULL != pDevState)) { @@ -17574,44 +17751,11 @@ UINT8 RouteCbtcFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDe else if (1U == chReadyEnterRouteTrainSum) { chTrainEnterState = dsuTrainMinHeadCrossSignal(wszReadyEtRouteTrainId[0], routeId); - - if (TRAIN_ENTER_ROUTE_FULL == chTrainEnterState) + if ((TRAIN_ENTER_ROUTE_FULL == chTrainEnterState) || (TRAIN_ENTER_ROUTE_TAIL == chTrainEnterState)) { - /*列车完全驶入进路 by cgh 20250102*/ + /*列车完全驶入进路/短车高速车头驶出进路车尾还在进路,关灯 by cgh 20250102*/ chRetVal = CI_ERROR; } - else if (TRAIN_ENTER_ROUTE_TAIL == chTrainEnterState) - { - strTrainLod.Lnk = GetTrainMinTailLink(wszReadyEtRouteTrainId[0]); - strTrainLod.Off = GetTrainMinTailOffset(wszReadyEtRouteTrainId[0]); - strTrainLod.Dir = GetTrainDir(wszReadyEtRouteTrainId[0]); - - strRouteStartSigLod.Lnk = GetSignalProtectLink(startSignalId); - strRouteStartSigLod.Off = GetSignalProtectLinkOff(startSignalId); - strRouteStartSigLod.Dir = GetSignalDirection(startSignalId); - - chFunRet = IsPointABSameDir(strTrainLod, strRouteStartSigLod); - - if (FLAG_UNSET == chFunRet) - { - /*列车方向和进路始端信号机相反*/ - if (SECTION_OCCUPY_NO == devState) - { - /*第一逻辑区段融合状态未占压,不关灯 */ - chRetVal = CI_SUCCESS; - } - else - { - /*第一逻辑区段融合状态占压 关灯*/ - chRetVal = CI_ERROR; - } - } - else - { - /*列车方向和进路始端信号机相同*/ - chRetVal = CI_ERROR; - } - } else if (TRAIN_ENTER_ROUTE_HEAD == chTrainEnterState) { /*列车驶入进路未跨压信号机,不关灯 */ @@ -17622,7 +17766,7 @@ UINT8 RouteCbtcFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDe /*列车跨压信号机,需判断第一逻辑区段占压状态*/ if (SECTION_OCCUPY_NO == devState) - {/*第一逻辑区段融合状态未占压,不关灯 */ + {/*第一逻辑区段融合状态未占压,不关灯,等待占压 */ chRetVal = CI_SUCCESS; } else @@ -17699,7 +17843,6 @@ UINT8 RouteCbtcFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDe UINT8 RouteCbtcReturnFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevState) { /* 侵限区段 */ - UINT16 wLgcSecId = 0u; /*设备ID*/ UINT8 devState = 0u; /*设备状态*/ UINT8 chRetVal = CI_ERROR; UINT8 chFunRet = CI_ERROR; @@ -17709,15 +17852,11 @@ UINT8 RouteCbtcReturnFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT UINT16 wOutFirstSecId = 0U; UINT8 chOutFirstOccState = 0U; UINT16 wInFirstSecId = 0U; - UINT16 wTrainId = 0U; UINT8 chTrainEnterState = 0U; - UINT8 chTrainInfoSum = 0U; UINT8 chReadyEnterRouteTrainSum = 0U; UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT16 wCrossTrainId = 0u; UINT8 chGroupRelate = 0u; - LOD_STRU strTrainLod = { 0U }; /*列车位置*/ - LOD_STRU strRouteStartSigLod = { 0U }; /*进路始端信号机位置*/ if ((NULL != pDevId) && (NULL != pDevState)) { @@ -17792,43 +17931,12 @@ UINT8 RouteCbtcReturnFirstLgcSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT if ((CI_SUCCESS == chRetVal)&&(0u != wCrossTrainId)) { chTrainEnterState = dsuTrainMinHeadCrossSignal(wCrossTrainId, routeId); - if (TRAIN_ENTER_ROUTE_FULL == chTrainEnterState) + if ((TRAIN_ENTER_ROUTE_FULL == chTrainEnterState) + || (TRAIN_ENTER_ROUTE_TAIL == chTrainEnterState)) { - /*折返进路列车完全驶入进路关灯 by cgh 20231215*/ + /*折返进路列车完全驶入进路或车头驶出进路,关灯 by cgh 20231215*/ chRetVal = CI_ERROR; } - else if (TRAIN_ENTER_ROUTE_TAIL == chTrainEnterState) - { - strTrainLod.Lnk = GetTrainMinTailLink(wCrossTrainId); - strTrainLod.Off = GetTrainMinTailOffset(wCrossTrainId); - strTrainLod.Dir = GetTrainDir(wCrossTrainId); - - strRouteStartSigLod.Lnk = GetSignalProtectLink(startSignalId); - strRouteStartSigLod.Off = GetSignalProtectLinkOff(startSignalId); - strRouteStartSigLod.Dir = GetSignalDirection(startSignalId); - - chFunRet = IsPointABSameDir(strTrainLod, strRouteStartSigLod); - - if (FLAG_UNSET == chFunRet) - { - /*列车方向和进路始端信号机相反*/ - if (SECTION_OCCUPY_NO == devState) - { - /*第一逻辑区段融合状态未占压,不关灯 */ - chRetVal = CI_SUCCESS; - } - else - { - /*第一逻辑区段融合状态占压 关灯*/ - chRetVal = CI_ERROR; - } - } - else - { - /*列车方向和进路始端信号机相同*/ - chRetVal = CI_ERROR; - } - } else if (TRAIN_ENTER_ROUTE_HEAD == chTrainEnterState) { /*列车驶入进路未跨压信号机,不关灯 */ @@ -17968,7 +18076,6 @@ UINT8 RouteFaultOccuCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevState /* 进路区段*/ UINT8 const checkSum = GetRoutePhysicalSectionSum(routeId); RoutePhysicalSectionStruct* const dataIdBuf = GetRouteSectionData(routeId); - UINT16 wOutFirstPhySecId = 0U; UINT8 chTrainNum = 0U; UINT16 szTrianId[TRAIN_SUM_MAX] = { 0U }; UINT16 wTrainId = 0U; @@ -18121,7 +18228,6 @@ UINT8 RouteAllLgcSecXianSuCheck(UINT16 const routeId,UINT16 *pDevId, UINT8 *pDev UINT8 j = 0U; UINT16 devId = 0u; UINT8 devState = 0u; - UINT8 secDirction = 0u; UINT8 chRouteXianSuCfmState = 0U; /*进路数据*/ /* 进路区段*/ @@ -18598,11 +18704,15 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) UINT8 chReadyEnterRouteTrainSum = 0U; UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT16 wCrossTrainId = 0u; - UINT16 wInFirstSecId = 0U;/*进路内方第一区段*/ - UINT8 chLogSecCurOccupySta = 0U;/*逻辑区段融合占用状态*/ - UINT16 wStartSignalId = 0U;/*始端信号机ID*/ - UINT16 wOutFirstPhySecId = 0U;/*外方第一物理区段ID*/ - UINT8 chOutFirstPhyOccState = 0U;/*外方第一物理区段融合占用状态*/ + UINT16 wInFirstSecId = 0U; /*进路内方第一区段*/ + UINT8 chLogSecCurOccupySta = 0U; /*逻辑区段占用状态*/ + UINT8 chInLogSecCtUtOccupySta = 0U; /*内放第一逻辑区段融合占用状态*/ + UINT16 wStartSignalId = 0U; /*始端信号机ID*/ + UINT16 wOutFirstPhySecId = 0U; /*外方第一物理区段ID*/ + UINT8 chOutFirstPhyOccState = 0U; /*外方第一物理区段融合占用状态*/ + UINT8 cDsnConnectAttr = CI_ERROR; /*进路迪士尼联络线属性*/ + UINT16 wOutFirsLogSecId = 0u; /*外方第一逻辑区段ID*/ + UINT8 chOutLogSecCtUtOccupySta = 0U; /*外方第一逻辑区段融合占用状态*/ /* 通过检查 CBTC进路在第一逻辑区段有多个列车资源时,不是编组折返的两辆车,关信号*/ chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId); @@ -18669,6 +18779,11 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) wOutFirstPhySecId = GetSignalOutFirstPhySecId(wStartSignalId); chOutFirstPhyOccState = GetPhySecCurMergeState(wOutFirstPhySecId); + cDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + chInLogSecCtUtOccupySta = GetLogSecCurCtOrUtOccupyState(wInFirstSecId); + wOutFirsLogSecId = GetSignalOutFirstLogSec(wStartSignalId); + chOutLogSecCtUtOccupySta = GetLogSecCurCtOrUtOccupyState(wOutFirsLogSecId); + /*列车跨压信号机*/ if (TRAIN_ENTER_ROUTE_CROSS == chTrainEnterState) { @@ -18694,13 +18809,20 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) { if (SECTION_OCCUPY_NO != chLogSecCurOccupySta) { - ; /*短车高速列车完全在进路或者车头驶出第一逻辑区段占压,接近锁闭正常*/ + ; /*短车高速列车完全在进路或者车尾驶出第一逻辑区段占压,接近锁闭正常*/ } else { chRetVal = CI_ERROR; } } + else if (((ROUTE_DISNEY_CONNECT_ALLOTHER == cDsnConnectAttr) || (ROUTE_DISNEY_CONNECT_ENDMINE == cDsnConnectAttr)) + && (LOGICSECTION_OCCUPY_CT == chInLogSecCtUtOccupySta) && (LOGICSECTION_OCCUPY_CT == chOutLogSecCtUtOccupySta)) + { + /*信号机在联络线的进路,内方和外方第一逻辑区段均CT占用,不关信号。*/ + SetErrorData(EFUNC_RouteCbtcTiranEnterCheck, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT_CROSS, CI_SUCCESS, ESEND_LEVEL_ZERO); + } else { chRetVal = CI_ERROR; @@ -18747,7 +18869,6 @@ UINT8 RouteAllLtrlDfncSwitchCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *p /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 reVal = CI_ERROR; /* 区段占用检查 */ @@ -18927,8 +19048,6 @@ UINT8 AtsLockOverlapSecOccupyCheck(UINT16 const overlapId,UINT16 *pDevId,UINT8 * */ UINT8 CheckRouteIdOutFirstLogSecState(const UINT16 routeId,UINT16 *logicSecId) { - UINT16 bufIndex = 0; /*数组下标*/ - UINT8 retVal = CI_ERROR; UINT8 signalDirection = 0u; UINT16 signalOutFirstPhySecId = 0u; @@ -19168,19 +19287,16 @@ void AccToPhySecFlockTypeSetErrcode(const UINT16 phySectionId, const UINT8 funct UINT16 spksId = 0u; /*当保护区段内的物理区段是spks封锁时,报警显示spks落下*/ UINT8 spksState = 0u; /*spks状态*/ UINT8 PhySecFlockType = 0u; /*物理区段的封锁类型*/ + UINT16 wDevID = 0U;/*关联设备ID*/ + UINT8 chPsdState = 0U; bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ if (PHYSICAL_SECTION_SUM_MAX > bufIndex) { PhySecFlockType = GetPhySecFLockType(phySectionId); - if (PHY_SEC_FLOCK_TYPE_CMD == PhySecFlockType) - { - /*物理区段是ATS的命令封锁类型则报警对应物理区段*/ - /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySectionId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); - } - else if (PHY_SEC_FLOCK_TYPE_SPKS == PhySecFlockType) + /*优先报spks*/ + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS&PhySecFlockType)) {/*物理区段是spks落下造成的封锁,则报警spks按下*/ checkResult = CheckPhysecFlockReasonSpksId(phySectionId, &spksId, &spksState);/*获取物理区段封锁是由于那个spks落下导致的*/ if (CI_SUCCESS == checkResult) @@ -19189,16 +19305,32 @@ void AccToPhySecFlockTypeSetErrcode(const UINT16 phySectionId, const UINT8 funct SetErrorData(functionId, CI_DEVICE_TYPE_SPKS, spksId, ETYPE_SPKS_STATE_UP, spksState, sendLevel); } } - else if (PHY_SEC_FLOCK_TYPE_SPKSCMD == PhySecFlockType) +#if 0 + if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG&PhySecFlockType)) { - /*物理区段是spks落下且设置封锁,则报警两次一次报spks,一次报物理区段封锁 - 将设备状态类型特殊设置,在设置错误码的时候设置两次*/ + /*物理区段存在由站台门异常打开导致封锁*/ /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySectionId, ETYPE_PS_FLOCK_SPKSCMD_STATE, devState, sendLevel); + wDevID = GetPhyRelateOpenPsdId(phySectionId); + if (0U != wDevID) + { + chPsdState = GetPsdState(wDevID); + SetErrorData(functionId, CI_DEVICE_TYPE_PSD, wDevID, ETYPE_PSD_CLOSE_NO, chPsdState, sendLevel); + } + else + { + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySectionId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); + } + } +#endif + else if(SEC_FLOCK_TYPE_NONE != PhySecFlockType) + { + /*其他报警暂时全报警区段封锁*/ + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySectionId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); } else { - /*不做处理*/ + ; } } } @@ -19741,13 +19873,18 @@ UINT8 RouteHalfSecFLockCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevSt /* 进路区段*/ UINT8 const checkSum = GetHalfRouteLockLgcSecSum(routeId); UINT16* const pDataIdBuf = GetHalfRouteLockLgcSecIdBuf(routeId); - /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; + UINT8 devState = 0u;/*封锁状态*/ UINT8 ret = CI_ERROR; - + UINT16 wLastSec = 0U;/*完整进路的最后一个区段*/ + UINT8 chPassLastFlock = ROUTE_PASS_LAST_FLOCK_NO;/*跳过最后区段配置*/ + UINT8 chRouteLevel = GetRouteLevel(routeId);/*进路等级*/ + UINT8 chPassFlockType = SEC_FLOCK_CBTCLASTSEC_PASS;/*不检查的类型*/ + UINT8 jj = 0U; + UINT8 chShareSwitchNum = 0U; + UINT16* plogSecIdPBuf = NULL; if (0U == checkSum) { /*区段数据错误*/ @@ -19756,23 +19893,75 @@ UINT8 RouteHalfSecFLockCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevSt else { ret = CI_SUCCESS; + wLastSec = GetRouteLastPhySectionId(routeId); + chPassLastFlock = GetRoutePassLastFlockProperty(routeId); /*开始检查*/ for (i = 0u; i chShareSwitchNum) && (NULL != plogSecIdPBuf)) + { + /*检查与逻辑区段共用道岔的逻辑区段封锁状态*/ + for (jj = 0U; jj < chShareSwitchNum; jj++) + { + devState = GetLogSecFLockType(plogSecIdPBuf[jj]);/*逻辑区段封锁*/ + if (SEC_FLOCK_TYPE_NONE != devState) + { + /*区段处于封锁状态*/ + /*状态不一致返回故障状态*/ + *pDevId = plogSecIdPBuf[jj]; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; + ret = CI_ERROR; + break; + } + } + } + else + { + /*获取失败*/ + *pDevId = devId; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; + ret = CI_ERROR; + } + } + if (CI_ERROR == ret) + { + break;/*停止检查*/ + } } - - } } @@ -19970,7 +20159,6 @@ UINT8 RouteHalfIntruSecCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevSt /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; /* 区段占用检查 */ if (0U == checkSum) @@ -20139,7 +20327,6 @@ UINT8 RouteHalfSwitchMoveValidCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; UINT8 routeHalfSwitchMoveStt = 0U; /* 区段占用检查 */ @@ -20319,7 +20506,6 @@ UINT8 RouteHalfProSwitchMoveValCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; UINT8 routeHalfSwitchMoveStt = 0U; /* 区段占用检查 */ @@ -20377,9 +20563,7 @@ UINT8 RouteHalfProSwitchPosCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pD /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; - UINT8 routeHalfSwitchMoveStt = 0U; /* 区段占用检查 */ if (0U == checkSum) { @@ -20433,7 +20617,6 @@ UINT8 RouteHalfProSwitchFLockCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 * /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; /* 区段占用检查 */ if (0U == checkSum) @@ -20488,7 +20671,6 @@ UINT8 RouteHalfSwitchFLockCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDe /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; /* 区段占用检查 */ if (0U == checkSum) @@ -20544,7 +20726,6 @@ UINT8 RouteHalfSwitchPosCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevS /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 ret = CI_ERROR; /* 区段占用检查 */ if (0U == checkSum) @@ -20657,7 +20838,6 @@ UINT8 RouteHalfLtrlDfncSwitchCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 * /* 局部变量定义初始化 */ UINT16 i = 0u; /* 循环变量 */ UINT16 devId = 0u; - UINT8 devState = 0u; UINT8 reVal = CI_ERROR; /* 区段占用检查 */ @@ -20818,7 +20998,6 @@ UINT8 MainRouteCheck(UINT16 const routeId) UINT16 curRouteID = 0U; UINT8 curRoutestate = 0U; UINT8 i = 0U; - UINT8 j = 0U; UINT8 retVal = CI_ERROR; UINT16* subRouteIDBuff = GetSubRouteBuff(routeId); /*主进路包含的子进路ID*/ @@ -20877,11 +21056,6 @@ UINT8 MainRouteCheck(UINT16 const routeId) UINT8 SubRouteCheck(UINT16 const routeId) { - UINT16 curRouteID = 0U; - UINT8 curRoutestate = 0U; - UINT16 curPhysicId = 0U; - UINT8 curPhysicState = 0U; - UINT8 i = 0U; UINT8 j = 0U; UINT16 devId = 0U; @@ -20962,8 +21136,6 @@ UINT8 ChekRouteHalfSwDrvOvTime(const UINT16 routeId) UINT8 lgcSecSwitchSum = 0U; /*逻辑区段关联道岔数量*/ LogsecSwitchStruct *pLgcSecSwitchData = NULL; UINT8 ii = 0u; /*循环变量*/ - UINT8 jj = 0U; - RouteSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据*/ UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/ RouteProtectSwitchStruct routeProtectSwitchStru[ROUTE_PROTECTSWI_SUM_MAX] = { 0U }; /*防护道岔数据*/ @@ -21106,8 +21278,6 @@ UINT8 ChekRouteHalfSwPosRight(const UINT16 routeId) UINT8 lgcSecSwitchSum = 0U; /*逻辑区段关联道岔数量*/ LogsecSwitchStruct *pLgcSecSwitchData = NULL; UINT8 ii = 0u; /*循环变量*/ - UINT8 jj = 0U; - RouteSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据*/ UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/ RouteProtectSwitchStruct routeProtectSwitchStru[ROUTE_PROTECTSWI_SUM_MAX] = { 0U }; /*防护道岔数据*/ @@ -21231,8 +21401,6 @@ UINT8 LogSecSeqIsContinuousCheck(const UINT8 cLogSecSeqDir, const UINT8 cLogSecS UINT8 cRelatedLogSecSum = 0U; /*下一相邻逻辑区段数量*/ UINT16* pRelatedLogSecId = NULL; /*下一相邻逻辑区段ID数组*/ UINT8 cQueryLogicDir = 0U; /*查询的逻辑方向*/ - UINT8 cQueryRunDir = 0U; /*查询的运营方向*/ - UINT8 cDirChangeFlag = DIRECTIONPOINT_FLAG_INVALID; /*方向变化点标志*/ UINT8 cDirChangeNum = 0U; UINT16* pCurLinkIdBuff = NULL; /*当前逻辑区段包含的link*/ UINT16* pNxtLinkIdBuff = NULL; /*下一相邻逻辑区段包含的link*/ @@ -21586,7 +21754,6 @@ UINT8 LogSecSeqIncUTCheck(const UINT16 wTrainId, const UINT8 cLogSecSum, const U UINT8 j = 0U; UINT8 k = 0U; UINT8 cTrainCommState = 0U; /*列车通信状态*/ - EnvelopeStruct* pTrainEnvelopeData = NULL; /*列车包络*/ UINT8 cLogSecOccState = 0U; /*逻辑区段占用状态*/ UINT8 cLogSecIncLinkNum = 0U; /*逻辑区段包含的link数量*/ UINT16* pLogSecIncLinkIdBuff = NULL; /*逻辑区段包含的linkID*/ @@ -22231,7 +22398,6 @@ UINT8 LogSecFaultUnlockLogicProcess(UINT16 const wLogSecId) { UINT8 chResult = CI_ERROR; UINT8 const chFunctionId = EFUNC_UNLOCK_FAULT_LOGSEC;/*函数故障码*/ - UINT8 chLogSecLockState = 0U;/*逻辑区段锁闭状态*/ UINT8 chCheckResult = 0U;/*逻辑检查结果*/ UINT8 chSendLevel = ESEND_LEVEL_ATS;/*报警发送等级-ATS*/ UINT8 chTransmitState = 0U;/*与其他联锁通信状态*/ @@ -22596,7 +22762,7 @@ UINT8 SeqNumAndIncLogSecNumCheck(const UINT8 cSeqNum, const UINT8 pSeqIncLogSecN { if (0U != cSeqNum) { - for (ii == 0U; ii < cSeqNum; ii++) + for (ii = 0U; ii < cSeqNum; ii++) { if ((MAX_ROUTE_IN_LT_NUM > pSeqIncLogSecNum[ii])) { @@ -22904,7 +23070,6 @@ UINT8 GetLogSecTrainId(const UINT16 wLogSectionId, UINT16 * trainIdbuff) UINT16* cLogSecLinkBuf = NULL; UINT8 i = 0U; UINT8 j = 0U; - UINT8 k = 0U; TRAIN_SEQUANCE_s strTmp[SIZE_MAX_TRAINOFAC] = { 0u }; /*link上的列车序列*/ UINT8 tmpTrainNum = 0U; UINT8 trainCount = 0U; @@ -23203,9 +23368,7 @@ UINT8 SetFloodGateAcCloseApplyProc(UINT16 floodGateId) UINT16 phyId = 0U; /*物理区段ID*/ UINT8 phyOccupyState = 0u;/*临时变量:物理区段占用状态*/ UINT16 ii = 0u; - UINT8 jj = 0U; UINT8 kk = 0U; - UINT8 mm = 0U; UINT16 bufIndex = 0u; /*数组下标*/ UINT8 cAxisLinkSum = 0U; UINT16 *pAxisLinkIdBuf = NULL; @@ -23575,9 +23738,6 @@ UINT8 CheckLogicRouteCbtcProperty(const UINT8 wLogSecNum, const UINT16 pLogSecId UINT8 retVal = CI_ERROR; UINT8 ii = 0U; UINT8 cLogSecCbtcProperty = LOGSEC_CBTC_PROPERTY_NO; /*逻辑区段CBTC区域属性*/ - UINT16 wLogSecRLockRouteId = 0U; /*逻辑区段进路锁闭所属进路ID*/ - UINT16 wLogSecPLockRouteId = 0U; /*逻辑区段防护锁闭所属进路ID*/ - UINT8 cRouteCbtcProperty = ROUTE_CBTC_PROPERTY_NO; /*进路锁闭所属进路的CBTC区域属性*/ if ((0U != wLogSecNum) && (MAX_ROUTE_IN_LT_NUM > wLogSecNum) && (NULL != pLogSecId)) { @@ -23623,7 +23783,6 @@ UINT8 CheckRouteZhefanJiesuo(UINT16 const routeId) UINT8 checkResult = CI_ERROR; /*检查结果*/ UINT16 devId = 0u; /*设备ID*/ UINT8 devState = 0u; /*设备状态*/ - UINT8 routepreState = 0u; /*进路上周期状态*/ UINT16 cancleZhaoChaRelayId = 0u; /*取消照查继电器ID*/ UINT8 relayState = 0u; /*继电器采集状态*/ @@ -24162,12 +24321,7 @@ UINT8 RouteLeaveLogSecCheck(const UINT16 wLogSecId) UINT16 linkNum = 0U; UINT8 crossCount = 0U; /*存在交集的包络数量*/ EnvelopeStruct wCrossEnvolopInfo[SECTION_REL_ENVELOPE_SUM_MAX] = {0U}; /*存在交集的包络数据*/ - UINT16 tmpTrainId = 0U;/*包络中的列车ID*/ UINT16* pLogSecIncLinkBuff = NULL; /*逻辑区段包含的link ID*/ - UINT16 linkMaxHead = 0U; - UINT16 linkMinTail = 0U; - UINT32 offsetMaxHead = 0U; - UINT32 offsetMinTail = 0U; UINT8 checkFlag = CI_ERROR; leaveLogOccuState = GetLogSecCurCtOrUtOccupyState(wLogSecId); @@ -24313,7 +24467,6 @@ UINT8 TrainBackPosCrossLogCheck(const UINT16 envolopId, const UINT16 logsecId ,c UINT16 linkNum = 0U; LOD_STRU strPointA = { 0u }; LOD_STRU strPointB = { 0u }; - UINT8 ifCrossFlag = CI_ERROR; const EnvelopeStruct* pTempInfo = NULL; /*包络信息*/ UINT16 trainId = 0U; str_Zone strZoneLogic = { 0u }; /*逻辑区段空间位置*/ @@ -24494,11 +24647,9 @@ UINT8 CheckPhyUseSecCanOtherUse(UINT16 switchId, UINT8 switchState) { UINT8 retVal = CI_ERROR; RouteSwitchStruct *pRouteInnerSwitchIdBuf = NULL; /*进路内方道岔ID */ - UINT8 routeExpectSwitchState = 0U; /*进路期望的道岔位置*/ UINT8 routeSwitchSum = 0U; /*进路内包含的道岔数量*/ UINT16 ii = 0U; /*循环下标*/ UINT16 phyUseBelongRouteId = 0U; /*物理区段征用所属进路ID*/ - UINT8 routeState = 0U; /*进路状态*/ UINT16 switchBelongPhySecId = 0U; /*道岔所属物理区段ID*/ UINT16 phyProtUseBelongRouteId = 0U; /*道岔所属物理区段ID*/ UINT8 routeProtSwitchSum = 0U; /*进路内包含的道岔数量*/ @@ -24721,7 +24872,7 @@ UINT8 CtTrainHeadSuspCheck(const UINT16 wTrainId, const UINT8 cLogSecSeqDir,cons * 输出参数:无 * 返回值 :CI_ERROR 0 失败 * CI_SUCCESS 1 成功 -* Edit By cgh 2025.10.17 +* Created By LQ 2024.09.05 */ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSecIdBuff, const UINT16 wTrainId, const UINT8 cFunctionId, const UINT8 cSendLevel) { @@ -24735,6 +24886,10 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec UINT8 cPhySecType = PHYSICAL_SEC_TYPE_SWITCH; /*物理区段类型(是否岔区)*/ UINT8 cSleepWakeAttr = CI_ERROR; /*休眠唤醒轨属性*/ UINT8 cTrainCommState = TRAIN_COMM_STATE_UNKNOWN; /*列车通信状态*/ + UINT16 wTrainMaxHeadLink = 0U; + UINT16 wTrainMinHeadLink = 0U; + UINT16 wTrainMaxTailLink = 0U; + UINT16 wTrainMinTailLink = 0U; /*入参检查*/ if ((1U == cLogSecSum) && (NULL != pLogSecIdBuff) && ((ESEND_LEVEL_ATS == cSendLevel) || (ESEND_LEVEL_ZERO == cSendLevel))) @@ -24762,17 +24917,20 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec if (TRAIN_COMM_STATE_GOOD == cTrainCommState) /*通信车检查前筛*/ { - cRetVal = TrainOccSameSecCheck(wLogSecRelPhySecId, wTrainId); + wTrainMaxHeadLink = GetTrainMaxHeadLink(wTrainId); /*获取列车位置*/ + wTrainMinHeadLink = GetTrainMinHeadLink(wTrainId); + wTrainMaxTailLink = GetTrainMaxTailLink(wTrainId); + wTrainMinTailLink = GetTrainMinTailLink(wTrainId); - if (CI_SUCCESS != cRetVal) + if ((pLogSecIncLinkId[0] == wTrainMaxHeadLink) && (wTrainMaxHeadLink == wTrainMinHeadLink) + && (wTrainMinHeadLink == wTrainMaxTailLink) && (wTrainMaxTailLink == wTrainMinTailLink)) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_TRAIN_POS, 0U, cSendLevel); - debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] Position Is Error\n", wTrainId); + cRetVal = CI_SUCCESS; } else { - /*检查通过*/ - ; + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_TRAIN_POS, 0U, cSendLevel); + debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] Position Is Error\n", wTrainId); /*列车未完全处理休眠唤醒轨,返回失败*/ } } else @@ -25284,69 +25442,82 @@ UINT8 CheckSwitchPosAndMoveValid(const UINT16 wSwitchId,const UINT8 chSwitchPos, if ((0U < wSwitchId) && (SWITCH_SUM_MAX > wSwitchId)) { chRetVal = CI_SUCCESS; - chDevState = GetSwitchCurPosition(wSwitchId); - if (chSwitchPos == chDevState) + + /*道岔定反操互斥检查*/ + chRetVal = CheckSwitchDFMulValid(wSwitchId, chSwitchPos); + if (CI_SUCCESS == chRetVal) { - /* 道岔位置正确 */ - /*如果最近一次产生的有效驱动仍在延续,则返回失败*/ - chResult = checkSwtLastValDrvPosStayorNot(wSwitchId, chSwitchPos); - if (CI_SUCCESS == chResult) + chDevState = GetSwitchCurPosition(wSwitchId); + if (chSwitchPos == chDevState) { - ; /*检查通过*/ + /* 道岔位置正确 */ + /*如果最近一次产生的有效驱动仍在延续,则返回失败*/ + chResult = checkSwtLastValDrvPosStayorNot(wSwitchId, chSwitchPos); + if (CI_SUCCESS == chResult) + { + ; /*检查通过*/ + } + else + { + /* 记录故障码 */ + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); + chRetVal = CI_ERROR; + } } - else + else if (SWITCH_POSITION_SIKAI == chDevState) { + /*四开*/ /* 记录故障码 */ SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); chRetVal = CI_ERROR; } - } - else if (SWITCH_POSITION_SIKAI == chDevState) - { - /*四开*/ - /* 记录故障码 */ - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); - chRetVal = CI_ERROR; - } - else if (SWITCH_POSITION_JICHA == chDevState) - { - /*挤岔*/ - /* 记录故障码 */ - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); - chRetVal = CI_ERROR; - } - else - { - /* 道岔位置不正确 */ - if (CI_TYPE_CLD == chCiType) + else if (SWITCH_POSITION_JICHA == chDevState) { - chDevState = GetSwitchMoveValidState(wSwitchId, SWITCH_OPER_NO_DANCAO, sendLevel); + /*挤岔*/ + /* 记录故障码 */ + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); + chRetVal = CI_ERROR; } else { - if (FUNC_SWITCH_ON == chFuncSwitch) - { - /*适配进路提前驱动道岔功能*/ - chDevState = GetSwitchMoveEarlyValidState(wSwitchId, SWITCH_OPER_NO_DANCAO, sendLevel); - } - else + /* 道岔位置不正确 */ + if (CI_TYPE_CLD == chCiType) { chDevState = GetSwitchMoveValidState(wSwitchId, SWITCH_OPER_NO_DANCAO, sendLevel); } - } + else + { + if (FUNC_SWITCH_ON == chFuncSwitch) + { + /*适配进路提前驱动道岔功能*/ + chDevState = GetSwitchMoveEarlyValidState(wSwitchId, SWITCH_OPER_NO_DANCAO, sendLevel); + } + else + { + chDevState = GetSwitchMoveValidState(wSwitchId, SWITCH_OPER_NO_DANCAO, sendLevel); + } + } - if (CI_SUCCESS == chDevState) - { - ; /*道岔可动*/ - } - else - { - /*道岔位置不正确 且 道岔不可动作*/ - /* GetSwitchMoveValidState函数内已经记录故障码 */ - /*SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel);*/ - chRetVal = CI_ERROR; + if (CI_SUCCESS == chDevState) + { + ; /*道岔可动*/ + } + else + { + /*道岔位置不正确 且 道岔不可动作*/ + /* 记录故障码 */ + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); + chRetVal = CI_ERROR; + } } } + else + { + /*记录故障码*/ + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_WAIT_MOVE, 0U, sendLevel); + chRetVal = CI_ERROR; + } + } else { @@ -25370,8 +25541,6 @@ UINT8 RouteOtherCiSwPosValidCheck(UINT16 const routeId) RouteProtectSwitchStruct* pRouteProSwIdBuf = GetRouteRelatedProtSwitchData(routeId); UINT8 ii = 0U; /* 循环变量 */ UINT8 reVal = CI_ERROR; - UINT8 chRouteSwitchBelCiCheck = 0U;/*进路道岔是否全部属于进路所在联锁检查*/ - UINT8 chRouteApplySwitchCheckFlag = 0U;/*进路办理道岔检查标志*/ UINT8 chLocalCiId = 0U;/*本地联锁ID*/ UINT8 chSwitchBelCiId = 0U;/*道岔所属联锁ID*/ @@ -25389,7 +25558,7 @@ UINT8 RouteOtherCiSwPosValidCheck(UINT16 const routeId) chSwitchBelCiId = GetSwitchBelongCiId(pRouteSwIdBuf[ii].SwitchId); if ((chLocalCiId == chSwitchBelCiId) && (0U != chLocalCiId)) { - reVal = CheckSwitchPosAndMoveValid(pRouteSwIdBuf[ii].SwitchId, pRouteSwIdBuf[ii].SwitchPosition, ESEND_LEVEL_ZERO); + reVal = CheckSwitchPosAndMoveValid(pRouteSwIdBuf[ii].SwitchId, pRouteSwIdBuf[ii].SwitchPosition, ESEND_LEVEL_ATS); if (CI_ERROR == reVal) { break; @@ -25413,7 +25582,7 @@ UINT8 RouteOtherCiSwPosValidCheck(UINT16 const routeId) chSwitchBelCiId = GetSwitchBelongCiId(pRouteProSwIdBuf[ii].ProtectSwitchId); if ((chLocalCiId == chSwitchBelCiId) && (0U != chLocalCiId)) { - reVal = CheckSwitchPosAndMoveValid(pRouteProSwIdBuf[ii].ProtectSwitchId, pRouteProSwIdBuf[ii].ProtectPosition, ESEND_LEVEL_ZERO); + reVal = CheckSwitchPosAndMoveValid(pRouteProSwIdBuf[ii].ProtectSwitchId, pRouteProSwIdBuf[ii].ProtectPosition, ESEND_LEVEL_ATS); if (CI_ERROR == reVal) { break; @@ -25663,10 +25832,9 @@ UINT8 OverlapProSwUsingCheck(const UINT16 wOverlapId, UINT16* pDevId, UINT8* pDe * 参数说明: UINT16 const routeId, 进路号 * 返回值 : CI_ERROR * CI_SUCCESS -*输出参数:UINT16* switchID道岔ID、UINT8* chSwitchState道岔状态 * BY CGH 20250224 */ -UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* chSwitchState) +UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId) { /* 进路道岔 */ UINT8 chRouteSwSum = GetRouteSwitchSum(routeId); @@ -25695,8 +25863,6 @@ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* c { /*道岔位置不正确*/ reVal = CI_ERROR; - *switchID = szRouteSwDataBuf[ii].SwitchId; - *chSwitchState = chSwState; break; } } @@ -25715,8 +25881,6 @@ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* c { /*道岔位置不正确*/ reVal = CI_ERROR; - *switchID = szRouteSwDataBuf[ii].SwitchId; - *chSwitchState = chSwState; break; } } @@ -26087,123 +26251,173 @@ UINT8 OverlapOccuUnlockCheck(UINT16 overlapId, UINT8 functionId) } /* -* 功能描述:列车占用完全在指定区段检查 -* 输入参数:const UINT16 wPhySecId 物理区段ID -* const UINT16 wTrainId 列车ID -* 输出参数:无 -* 返回值 :CI_ERROR 0 不完全在 -* CI_SUCCESS 1 完全在 -* by cgh 20251017 +* 功能描述:区段封锁但可重开条件检查:存在spks封锁时检查开关打开或cbtc进路、无CMD封锁 +* 参数说明:UINT16 wPhySecId 区段ID wRouteId进路ID +* 返 回 值:CI_ERROR 0 失败 非可重开封锁 +* CI_SUCCESS 1 成功 可重开的封锁类型 +* Created By fan 2025.12.16 */ -UINT8 TrainOccSameSecCheck(const UINT16 wPhySecId, const UINT16 wTrainId) +UINT8 SectionFlockReOpenCheck(UINT16 wPhySecId,UINT16 wRouteId) { - /*局部变量初始化*/ - UINT8 chRetVal = CI_ERROR; /*函数返回值*/ - UINT16 wTrainIndex = 0U; /*列车索引*/ - UINT16 wTrainMaxHeadLink = 0U; /*列车大前LINK*/ - UINT16 wTrainMinHeadLink = 0U; /*列车小前LINK*/ - UINT16 wTrainMaxTailLink = 0U; /*列车大后LINK*/ - UINT16 wTrainMinTailLink = 0U; /*列车小后LINK*/ - UINT16 wTrainMaxHeadPhySecId = 0U; /*列车大前物理区段ID*/ - UINT16 wTrainMinHeadPhySecId = 0U; /*列车小前物理区段ID*/ - UINT16 wTrainMaxTailPhySecId = 0U; /*列车大后物理区段ID*/ - UINT16 wTrainMinTailPhySecId = 0U; /*列车小后物理区段ID*/ - UINT8 chPhySecCurOccState = 0U; /*物理区段当前占用状态*/ - - wTrainIndex = GetTrainBufIndex(wTrainId); - - if ((0U < wPhySecId) && (PHYSICAL_SECTION_SUM_MAX > wPhySecId) && (0U < wTrainIndex) && (TRAIN_SUM_MAX > wTrainIndex)) + UINT8 cFuncSwitchSpks = 0U; /*SPKS信号自动重开开关,0x55检查进路级别,0xaa不检查*/ + UINT8 cRouteLevel = 0U;/*进路级别*/ + UINT8 chRtn = CI_ERROR; + UINT8 fLockType = 0U;/*区段封锁类型*/ + fLockType = GetPhySecFLockType(wPhySecId); + cRouteLevel = GetRouteLevel(wRouteId); + cFuncSwitchSpks = GetCiFunctionSwitchConfig(FUNC_REPEATE_OPEN_CHECK_SPKS); + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD& fLockType)) { - chPhySecCurOccState = GetPhySecCurMergeState(wPhySecId); - - if (SECTION_OCCUPY_YES == chPhySecCurOccState) + /*存在人工区段封锁*/ + chRtn = CI_ERROR; + } + else if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS& fLockType)) + { + if((FUNC_SWITCH_ON == cFuncSwitchSpks) || (ROUTE_LEVEL_CBTC == cRouteLevel)) { - /*获取列车发送的位置*/ - wTrainMaxHeadLink = GetTrainMaxHeadLink(wTrainId); - wTrainMinHeadLink = GetTrainMinHeadLink(wTrainId); - wTrainMaxTailLink = GetTrainMaxTailLink(wTrainId); - wTrainMinTailLink = GetTrainMinTailLink(wTrainId); - - /*获取列车非安全位置对应的物理区段*/ - wTrainMaxHeadPhySecId = GetLinkRelatedPhySec(wTrainMaxHeadLink); - wTrainMinHeadPhySecId = GetLinkRelatedPhySec(wTrainMinHeadLink); - wTrainMaxTailPhySecId = GetLinkRelatedPhySec(wTrainMaxTailLink); - wTrainMinTailPhySecId = GetLinkRelatedPhySec(wTrainMinTailLink); - - if ((wPhySecId == wTrainMaxHeadPhySecId) || (wPhySecId == wTrainMinHeadPhySecId) - || (wPhySecId == wTrainMaxTailPhySecId) || (wPhySecId == wTrainMinTailPhySecId)) - { - /*占用是否属于同一区段检查*/ - chRetVal = OccBelSameSecCheck(wPhySecId, wTrainMaxHeadPhySecId); - chRetVal &= OccBelSameSecCheck(wPhySecId, wTrainMinHeadPhySecId); - chRetVal &= OccBelSameSecCheck(wPhySecId, wTrainMaxTailPhySecId); - chRetVal &= OccBelSameSecCheck(wPhySecId, wTrainMinTailPhySecId); - } - else - { - /*列车必须有一个位置在指定区段*/ - ; - } + /*存在spks封锁 要求CBTC进路,或不检查SPKS*/ + chRtn = CI_SUCCESS; } else { - /*待检查区段无占用*/ - + chRtn = CI_ERROR; } } else { - /*参数合法性校验不通过*/ - ; + /*其他条件均在封锁解除后可重开*/ + chRtn = CI_SUCCESS; } - - return chRetVal; + return chRtn; } /* -* 功能描述:占用是否属于同一区段检查 -* 输入参数:const UINT16 wBasePhySecId 基准物理区段ID -* const UINT16 wCheckPhySecId 待检查物理区段ID -* 输出参数:无 -* 返回值 :CI_ERROR 0 不属于 -* CI_SUCCESS 1 属于 -* by cgh 20251017 +* 功能描述:CBTC进路逻辑区段占用检查 +* 参数说明:UINT16 const routeId 进路ID +* UINT16 *pDevId 设备Id(出参) +* UINT8 *pDevState 设备状态(出参) +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.01.25 */ -UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId) +UINT8 RouteCbtcLogSecOccCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState) { - /*局部变量初始化*/ - UINT8 chRetVal = CI_ERROR; /*函数返回值*/ - UINT8 chPhySecCurOccState = 0U; /*物理区段当前占用状态*/ + UINT8 cRetVal = CI_ERROR; + UINT8 cDevNum = 0U; + UINT16* pDevIdBuf = NULL; + UINT8 ii = 0U; + UINT16 wDevId = 0U; + UINT8 cDevState = 0U; - if ((0U < wBasePhySecId) && (PHYSICAL_SECTION_SUM_MAX > wBasePhySecId) && (0U < wCheckPhySecId) && (PHYSICAL_SECTION_SUM_MAX > wCheckPhySecId)) + cDevNum = GetCbtcRouteCheckLgcSum(routeId); + pDevIdBuf = GetCbtcRouteCheckLgcId(routeId); + + if ((NULL != pDevIdBuf) && (NULL != pDevId) && (NULL != pDevState)) { - if (wBasePhySecId == wCheckPhySecId) + cRetVal = CI_SUCCESS; /*检查的逻辑区段数量可以为0(直接返回成功),但是ID数组不能为NULL*/ + for (ii = 0U; ii < cDevNum; ii++) { - /*占用属于同一区段*/ - chRetVal = CI_SUCCESS; - } - else - { - /*大前不在当前区段且在其它区段占用,检查结果为列车占用不完全在指定区段*/ - chPhySecCurOccState = GetPhySecCurMergeState(wCheckPhySecId); - - if (SECTION_OCCUPY_NO != chPhySecCurOccState) + wDevId = pDevIdBuf[ii]; + cDevState = GetLogSecCurOccupyState(wDevId); + + if (SECTION_OCCUPY_NO == cDevState) { - /*占用不属于同一区段*/ - chRetVal = CI_ERROR; + /*逻辑区段空闲,继续检查*/ } else { - /*占用属于同一区段*/ - chRetVal = CI_SUCCESS; + *pDevId = wDevId; + *pDevState = cDevState; + cRetVal = CI_ERROR; /*逻辑区段占用,停止遍历,返回失败*/ + break; } } } else { - /*参数合法性校验不通过*/ - chRetVal = CI_ERROR; + cRetVal = CI_ERROR; /*入参非法,返回失败*/ } - return chRetVal; + return cRetVal; } + +/* +* 功能描述:CBTC进路保持开放阶段逻辑区段占用检查 +* 参数说明:UINT16 const routeId 进路ID +* UINT16 *pDevId 设备Id(出参) +* UINT8 *pDevState 设备状态(出参) +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.03.12 +*/ +UINT8 RouteCbtcKeepOpenLgcOccCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cDevNum = 0U; + UINT16* pDevIdBuf = NULL; + UINT16 wInFstLogSecId = 0U; /*进路内方第一个逻辑区段ID*/ + UINT8 cLogSecUTCTOccState = 0U; /*逻辑区段CT/UT占用状态*/ + UINT8 ii = 0U; + UINT16 wDevId = 0U; + UINT8 cDevState = 0U; + + cDevNum = GetCbtcRouteCheckLgcSum(routeId); + pDevIdBuf = GetCbtcRouteCheckLgcId(routeId); + + if ((NULL != pDevIdBuf) && (NULL != pDevId) && (NULL != pDevState)) + { + cRetVal = CI_SUCCESS; /*检查的逻辑区段数量可以为0(直接返回成功),但是ID数组不能为NULL*/ + + wInFstLogSecId = GetRouteInFirstLogSecId(routeId); + + for (ii = 0U; ii < cDevNum; ii++) + { + wDevId = pDevIdBuf[ii]; + + if (wInFstLogSecId == wDevId) + { + cLogSecUTCTOccState = GetLogSecCurCtOrUtOccupyState(wInFstLogSecId); /*获取逻辑区段UT/CT占用状态*/ + if ((LOGICSECTION_OCCUPY_NO == cLogSecUTCTOccState) || (LOGICSECTION_OCCUPY_CT == cLogSecUTCTOccState)) + { + /*进路内方第一逻辑区段空闲或CT占用,继续检查*/ + } + else + { + *pDevId = wDevId; + *pDevState = SECTION_OCCUPY_YES; + cRetVal = CI_ERROR; /*逻辑区段UT占用,返回失败*/ + } + } + else + { + cDevState = GetLogSecCurOccupyState(wDevId); + if (SECTION_OCCUPY_NO == cDevState) + { + /*逻辑区段空闲,继续检查*/ + } + else + { + *pDevId = wDevId; + *pDevState = cDevState; + cRetVal = CI_ERROR; /*逻辑区段占用,停止遍历,返回失败*/ + } + } + + if (CI_SUCCESS != cRetVal) + { + cRetVal = CI_ERROR; + break; /*检查失败,停止遍历,返回失败*/ + } + else + { + /*继续检查*/ + } + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回失败*/ + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h index 09a3552..41998f7 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h @@ -1006,11 +1006,12 @@ UINT8 ChekRoutSwitDrivOvtmStat(const UINT16 routeId); /* * 功能描述: 区段故障解锁 * 参数说明: UINT16 const phySectionId +* UINT8 const isConnectSec 是否联络线(联络线不报警)CI_SUCCESS是 CI_ERROR否 * 返回值 : CI_ERROR * CI_SUCCESS * 故障编码: EFUNC_UNLOCK_FAULT_SECTION */ -UINT8 PhySecFaultUnlockLogicProcess(const UINT16 phySectionId); +UINT8 PhySecFaultUnlockLogicProcess(const UINT16 phySectionId, UINT8 const isConnectSec); /* * 功能描述: 检查进路总人解的可行性。只要进路有一个区段可以直接解锁或变绿光带都认为总人解可行。 @@ -1734,6 +1735,16 @@ UINT8 LogicSecFLockCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState); */ UINT8 LogicSecRelativeSwitchPosCheck(UINT16 const wLgcId, UINT16* pDevId, UINT8* pDevState); +/* +* 功能描述:获取逻辑区段所处道岔位置不一致原因 +* 参数说明:UINT16 const wLgcId 逻辑区段ID +* 返 回 值:1 位置一致 +* 0x55 道岔在相反位置 +* 0xAA 道岔失表 +* Created By LQ 2025.12.19 +*/ +UINT8 GetLogSecRelSwPosErrReason(UINT16 const wLgcId); + /* * 功能描述: 进路VBTC条件下第一逻辑区段检查 * 参数说明: @@ -2613,7 +2624,7 @@ UINT8 CtTrainHeadSuspCheck(const UINT16 wTrainId, const UINT8 cLogSecSeqDir, con * 输出参数:无 * 返回值 :CI_ERROR 0 失败 * CI_SUCCESS 1 成功 -* Edit By cgh 2025.10.17 +* Created By LQ 2024.09.05 */ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSecIdBuff, const UINT16 wTrainId, const UINT8 cFunctionId, const UINT8 cSendLevel); @@ -2706,13 +2717,13 @@ UINT8 OtherCiOvlpRelProSwMovValCheck(const UINT16 wOverlapId); UINT8 OverlapProSwUsingCheck(const UINT16 wOverlapId, UINT16* pDevId, UINT8* pDevState, UINT8* pAlarmType); /* -* 功能描述: 获取指定进路办理相邻控区道岔检查标志 -* 参数说明: const UINT16 routeId 进路ID -* 返 回 值: 进路办理相邻控区道岔检查标志 -* 输出参数:UINT16* switchID道岔ID、UINT8* chSwitchState道岔状态 -* by cgh 20241202 +* 功能描述: 进路关联所有道岔位置正确检查 +* 参数说明: UINT16 const routeId, 进路号) +* 返回值 : CI_ERROR +* CI_SUCCESS +* BY CGH 20250224 */ -UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* chSwitchState); +UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId); /* *函数功能:保护区段照查继电器检查 @@ -2763,26 +2774,35 @@ UINT8 RouteCldAttrCheck(UINT16 wRouteId); UINT8 OverlapOccuUnlockCheck(UINT16 overlapId, UINT8 functionId); /* -* 功能描述:列车占用完全在指定区段检查 -* 输入参数:const UINT16 wPhySecId 物理区段ID -* const UINT16 wTrainId 列车ID -* 输出参数:无 -* 返回值 :CI_ERROR 0 不完全在 -* CI_SUCCESS 1 完全在 -* by cgh 20251017 +* 功能描述:区段封锁但可重开条件检查:存在spks封锁时检查开关打开或cbtc进路、无CMD封锁 +* 参数说明:UINT16 wPhySecId 区段ID wRouteId进路ID +* 返 回 值:CI_ERROR 0 失败 非可重开封锁 +* CI_SUCCESS 1 成功 可重开的封锁类型 +* Created By fan 2025.12.16 */ -UINT8 TrainOccSameSecCheck(const UINT16 wPhySecId, const UINT16 wTrainId); +UINT8 SectionFlockReOpenCheck(UINT16 wPhySecId, UINT16 wRouteId); /* -* 功能描述:占用是否属于同一区段检查 -* 输入参数:const UINT16 wBasePhySecId 基准物理区段ID -* const UINT16 wCheckPhySecId 待检查物理区段ID -* 输出参数:无 -* 返回值 :CI_ERROR 0 不属于 -* CI_SUCCESS 1 属于 -* by cgh 20251017 +* 功能描述:CBTC进路逻辑区段占用检查 +* 参数说明:UINT16 const routeId 进路ID +* UINT16 *pDevId 设备Id(出参) +* UINT8 *pDevState 设备状态(出参) +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.01.25 */ -UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId); +UINT8 RouteCbtcLogSecOccCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState); + +/* +* 功能描述:CBTC进路保持开放阶段逻辑区段占用检查 +* 参数说明:UINT16 const routeId 进路ID +* UINT16 *pDevId 设备Id(出参) +* UINT8 *pDevState 设备状态(出参) +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.03.12 +*/ +UINT8 RouteCbtcKeepOpenLgcOccCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState); #endif diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c index 1e221ff..c0828e6 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c @@ -14,7 +14,11 @@ #include "DynamicRouteDataManage.h" #include "LogicalRouteLogicCheck.h" - +static UINT8 DsnConnectRouteReqRlsChk(UINT16 const routeId, UINT8 functionId, UINT8 sendLevel); +static UINT8 DsnConnectSecUnlockCheck(UINT16 wRouteId, OUT UINT16 *pPhySecId); +static UINT8 DsnConnectOtherCiCheckSubProc(UINT16 const routeId, + UINT8 const checkSum, RouteOtherCheckStruct *pDataOtherCiDevBuf); +static UINT8 LockBlocLTrainRouteSubProc(UINT16 const routeId); /* C02_办理点式级别列车进路 */ /* @@ -1314,8 +1318,10 @@ UINT8 LockBlocLTrainRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*设备ID*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; /*故障发送级别*/ UINT8 cAutoStateFlag = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; cAutoStateFlag = AutoSignalOrRouteValid(routeId); /*获取自动属性*/ + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /*获取迪士尼联络线进路类型*/ if (cAutoStateFlag == CI_SUCCESS) { /*自动进路或自动信号不发送ATS*/ @@ -1433,6 +1439,27 @@ UINT8 LockBlocLTrainRouteLogicProcess(UINT16 const routeId) } } + if ((CI_SUCCESS == reResult) + && ((ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr) || (ROUTE_DISNEY_CONNECT_STARTMINE == cDisneyConnectAttr))) + { + /* 迪士尼联络线道岔驱动条件检查,仅后半段或前半段属于本线的进路检查 */ + checkResult = DsnConnectRouteReqRlsChk(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /*等待*/ + reResult = checkResult; + } + } + else + { + /*不处理*/ + } + if (CI_SUCCESS == reResult) { /* 道岔联锁条件检查 */ @@ -1451,27 +1478,73 @@ UINT8 LockBlocLTrainRouteLogicProcess(UINT16 const routeId) } if (CI_SUCCESS == reResult) { - /*侵限区段侵限条件不满足检查*/ - devId = 0u; - devState = 0u; - checkResult = RouteIntruSecVainCheck(routeId, &devId, &devState); - if (checkResult == CI_SUCCESS) - { - /* 通过检查 */ - reResult = CI_SUCCESS; - } - else - { - /* 选排之前不再检查侵限*/ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_INTRU_OCU_STATE, devState, sendLevel); - /* 失败返回 */ - reResult = CI_ERROR; - } + /*降低圈复杂度,浓缩至子函数*/ + reResult = LockBlocLTrainRouteSubProc(routeId); } + else + { + /*nothing*/ + } + + /* 返回成功 */ + return reResult; +} + +/* +* 功能描述: 锁闭点式列车进路-子函数 +* 参数说明: UINT16 const routeId 进路号 +* 返回值 : CI_ERROR +* CI_SUCCESS +* 故障编码: EFUNC_LOCK_BLOC_T_ROUTE +*/ +static UINT8 LockBlocLTrainRouteSubProc(UINT16 const routeId) +{ + /*函数故障码*/ + UINT8 const functionId = EFUNC_LOCK_BLOC_T_ROUTE; + + /* 局部变量定义初始化 */ + UINT8 reResult = CI_SUCCESS; /*返回值,进入此函数说明前面都成功*/ + UINT8 checkResult = CI_ERROR; /*检查结果*/ + UINT8 devState = 0u; /*设备状态*/ + UINT16 devId = 0u; /*设备ID*/ + UINT8 sendLevel = ESEND_LEVEL_ZERO; /*故障发送级别*/ + UINT8 cAutoStateFlag = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; + + cAutoStateFlag = AutoSignalOrRouteValid(routeId); /*获取自动属性*/ + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /*获取迪士尼联络线进路类型*/ + if (cAutoStateFlag == CI_SUCCESS) + { + /*自动进路或自动信号不发送ATS*/ + sendLevel = ESEND_LEVEL_ZERO; + } + else + { + sendLevel = ESEND_LEVEL_ATS; + } + + /* 联锁逻辑检查 */ + /*侵限区段侵限条件不满足检查*/ + devId = 0u; + devState = 0u; + checkResult = RouteIntruSecVainCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /* 选排之前不再检查侵限*/ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_INTRU_OCU_STATE, devState, sendLevel); + /* 失败返回 */ + reResult = CI_ERROR; + } + if (CI_SUCCESS == reResult) { /*防淹门联锁条件检查*/ - checkResult = BlocRouteFloodGateCheck(routeId,functionId,sendLevel); + checkResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); if (CI_SUCCESS == checkResult) { reResult = CI_SUCCESS; @@ -1481,6 +1554,10 @@ UINT8 LockBlocLTrainRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } + else + { + /*nothing*/ + } if (CI_SUCCESS == reResult) { @@ -1495,12 +1572,37 @@ UINT8 LockBlocLTrainRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } + else + { + /*nothing*/ + } - /* 返回成功 */ - return reResult; + if ((CI_SUCCESS == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cDisneyConnectAttr))) + { + /*迪士尼联络线相关线路其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_SUCCESS == checkResult) + { + reResult = CI_SUCCESS; + } + else + { + /*其他联锁条件不满足,不直接转为空闲,等待超时*/ + reResult = RETURN_WAIT_DSNCONNECT_OTHERCI; + } + } + else + { + /*不处理*/ + } + + /* 返回 */ + return reResult; } - /* C08_锁闭CBTC列车进路 */ /* * 功能描述: 锁闭CBTC列车进路 @@ -1522,8 +1624,10 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*设备ID*/ UINT8 routeStateFlag = ROUTE_STATE_FLAG_NO; /*进路状态转移标志*/ UINT8 cAutoStateFlag = CI_ERROR; + UINT8 cDisneyConnectAttr = CI_ERROR; cAutoStateFlag = AutoSignalOrRouteValid(routeId); /*获取自动属性*/ + cDisneyConnectAttr = GetRouteDisneyConnectAttr(routeId); /*获取迪士尼联络线进路类型*/ if (cAutoStateFlag == CI_SUCCESS) { /*自动进路或自动信号不发送ATS*/ @@ -1661,6 +1765,27 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) } } + if ((CI_SUCCESS == reResult) + && ((ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr) || (ROUTE_DISNEY_CONNECT_STARTMINE == cDisneyConnectAttr))) + { + /* 迪士尼联络线道岔驱动条件检查,仅后半段或前半段属于本线的进路检查 */ + checkResult = DsnConnectRouteReqRlsChk(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* 通过检查 */ + reResult = CI_SUCCESS; + } + else + { + /*等待*/ + reResult = checkResult; + } + } + else + { + /*不处理*/ + } + if (CI_SUCCESS == reResult) { /* 道岔联锁条件检查 */ @@ -1760,10 +1885,362 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } + + if ((CI_SUCCESS == reResult) + && ((ROUTE_DISNEY_CONNECT_ALLOTHER == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cDisneyConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cDisneyConnectAttr))) + { + /*迪士尼联络线相关线路其他联锁条件检查*/ + checkResult = DsnConnectOtherCiValidCheck(routeId); + if (CI_SUCCESS == checkResult) + { + reResult = CI_SUCCESS; + } + else + { + /*其他联锁条件不满足,不直接转为空闲,等待超时*/ + reResult = RETURN_WAIT_DSNCONNECT_OTHERCI; + } + } + else + { + /*不处理*/ + } + /* 返回成功 */ return reResult; } +/* +* 功能描述: 迪士尼联络线其他联锁条件检查 +* 参数说明: UINT16 routeId 进路ID +* 返回值 : CI_ERROR 检查失败 +* CI_SUCCESS 检查成功 +* 注意事项: 本函数只检查区段方向、进路协议相关内容 +*/ +UINT8 DsnConnectOtherCiValidCheck(UINT16 const routeId) +{ + /*进路等级*/ + UINT8 const routeLevel = GetRouteLevel(routeId); + UINT8 checkSum = 0u; + RouteOtherCheckStruct *pDataOtherCiDevBuf = NULL; + + /* 局部变量定义初始化 */ + UINT8 ret = CI_ERROR; + UINT8 cRouteDsnConnectAttr = CI_ERROR; + + /*获取迪士尼联络线属性*/ + cRouteDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + if ((ROUTE_DISNEY_CONNECT_ALLOTHER == cRouteDsnConnectAttr) + || (ROUTE_DISNEY_CONNECT_ENDMINE == cRouteDsnConnectAttr) + || (ROUTE_DISNEY_CONNECT_STARTMINE == cRouteDsnConnectAttr)) + { + /*获取其他联锁检查条件数据*/ + if (ROUTE_LEVEL_BLOC == routeLevel) + { + checkSum = GetRouteBlocOtherCiSum(routeId); + pDataOtherCiDevBuf = GetRouteBlocOtherCiBuf(routeId); + } + else if (ROUTE_LEVEL_CBTC == routeLevel) + { + checkSum = GetRouteCbtcOtherCiSum(routeId); + pDataOtherCiDevBuf = GetRouteCbtcOtherCiBuf(routeId); + } + else + { + checkSum = 0u; + pDataOtherCiDevBuf = NULL; + } + + /* 开始检查 */ + if (NULL != pDataOtherCiDevBuf) + { + ret = DsnConnectOtherCiCheckSubProc(routeId, checkSum, pDataOtherCiDevBuf); + } + else + { + /*nothing*/ + } + } + else + { + /*非联络线,直接返回成功*/ + ret = CI_SUCCESS; + } + + return ret; +} + +/* +* 功能描述: 迪士尼联络线其他联锁条件检查-子函数 +* 参数说明: UINT16 routeId 进路ID +* 返回值 : CI_ERROR 检查失败 +* CI_SUCCESS 检查成功 +* 注意事项: 本函数只检查区段方向、进路协议相关内容 +*/ +static UINT8 DsnConnectOtherCiCheckSubProc(UINT16 const routeId, + UINT8 const checkSum, RouteOtherCheckStruct *pDataOtherCiDevBuf) +{ + RouteOtherCheckStruct *pTmpOtherCiDevInfo = NULL; + + /* 局部变量定义初始化 */ + UINT16 i = 0u; /* 循环变量 */ + UINT8 ret = CI_ERROR; + UINT8 cRelayCollState = CI_ERROR; + UINT8 cRouteState = ROUTE_STATE_IDLE; + UINT8 cRouteDsnConnectAttr = CI_ERROR; + UINT16 wRelayBelongOcId = 0U; /*继电器所属OC*/ + UINT8 cOcCommState = TRANSMIT_STATE_BAD; /*与OC通信状态*/ + UINT8 cABoardState = RELAY_BOARD_FAULT_YES; /*A系板卡状态*/ + UINT8 cBBoardState = RELAY_BOARD_FAULT_YES; /*B系板卡状态*/ + UINT8 cRouteAckDrvState = RELAY_STATE_DOWN; /*UAR继电器驱动状态*/ + + /* 开始检查 */ + if (NULL != pDataOtherCiDevBuf) + { + /*返回值先赋值为成功*/ + ret = CI_SUCCESS; + cRouteDsnConnectAttr = GetRouteDisneyConnectAttr(routeId); + /*开始检查*/ + for (i = 0u; iDevType) + { + case CI_DEVICE_TYPE_SECDIRLOCK: + /*区段方向锁闭继电器*/ + cRelayCollState = GetRelayCollState(pTmpOtherCiDevInfo->DevId); + if ((RELAY_STATE_UP == cRelayCollState) && (RELAY_STATE_UP == pTmpOtherCiDevInfo->DevStatus)) + { + /*区段方向锁闭继电器吸起,且数据配置吸起,检查通过*/ + } + else + { + /*区段方向锁闭继电器落下,或数据配置错误,返回检查条件不满足*/ + ret = CI_ERROR; + SetErrorData(EFUNC_DsnConnectOtherCi, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT, CI_DEVICE_TYPE_SECDIRLOCK, ESEND_LEVEL_ZERO); + } + break; + + case CI_DEVICE_TYPE_ROUTEREQUEST: + /*进路请求继电器,后半段属于本线的进路,仅在进路选排阶段检查*/ + cRouteState = GetRouteState(routeId); + if ((ROUTE_DISNEY_CONNECT_ENDMINE == cRouteDsnConnectAttr) && (ROUTE_STATE_XUANPAI != cRouteState)) + { + /*后半段属于本线的进路,非选排阶段不检查*/ + } + else + { + cRelayCollState = GetRelayCollState(pTmpOtherCiDevInfo->DevId); + if ((RELAY_STATE_UP == cRelayCollState) && (RELAY_STATE_UP == pTmpOtherCiDevInfo->DevStatus)) + { + /*进路请求继电器吸起,且数据配置吸起,检查通过*/ + } + else + { + /*进路请求继电器落下,或数据配置错误,返回检查条件不满足*/ + ret = CI_ERROR; + SetErrorData(EFUNC_DsnConnectOtherCi, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT, CI_DEVICE_TYPE_ROUTEREQUEST, ESEND_LEVEL_ZERO); + } + } + break; + + case CI_DEVICE_TYPE_ROUTERELEASE: + /*进路释放继电器*/ + cRelayCollState = GetRelayCollState(pTmpOtherCiDevInfo->DevId); + /*获取继电器所属OC ID*/ + wRelayBelongOcId = GetRelayBelongOCId(pTmpOtherCiDevInfo->DevId); + /*获取与OC通信状态*/ + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); + /*获取A系板卡状态*/ + cABoardState = GetRelayACollBoardState(pTmpOtherCiDevInfo->DevId); + /*获取B系板卡状态*/ + cBBoardState = GetRelayBCollBoardState(pTmpOtherCiDevInfo->DevId); + + if (((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + && (RELAY_STATE_DOWN == cRelayCollState) && (RELAY_STATE_DOWN == pTmpOtherCiDevInfo->DevStatus)) + { + /*进路释放继电器确实落下,且数据配置落下,检查通过*/ + } + else + { + /*进路释放继电器未确实落下,或数据配置错误,返回检查条件不满足*/ + ret = CI_ERROR; + SetErrorData(EFUNC_DsnConnectOtherCi, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT, CI_DEVICE_TYPE_ROUTERELEASE, ESEND_LEVEL_ZERO); + } + break; + + case CI_DEVICE_TYPE_ROUTEACK: + cRelayCollState = GetRelayCollState(pTmpOtherCiDevInfo->DevId); + if ((RELAY_STATE_UP == cRelayCollState) && (RELAY_STATE_UP == pTmpOtherCiDevInfo->DevStatus)) + { + /*进路已设置保留继电器吸起,且数据配置吸起,检查通过*/ + /*目前,终端在本线的进路,进初锁异常/预先锁闭/接近锁闭异常导致UAR落下后,无法信号重开; + 需增加UAR驱动判断,防止驱采不一致误重开信号。后续如果UAR驱动逻辑优化,再评估删除下面的判断。*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == cRouteDsnConnectAttr) + { + cRouteAckDrvState = GetRouteAckDrvState(routeId); + if (RELAY_STATE_UP == cRouteAckDrvState) + { + /*检查通过*/ + } + else + { + ret = CI_ERROR; + SetErrorData(EFUNC_DsnConnectOtherCi, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT, CI_DEVICE_TYPE_ROUTEACK, ESEND_LEVEL_ZERO); + } + } + else + { + /*检查通过*/ + } + } + else + { + /*进路已设置保留继电器落下,或数据配置错误,返回检查条件不满足*/ + ret = CI_ERROR; + SetErrorData(EFUNC_DsnConnectOtherCi, CI_DEVICE_TYPE_ROUTE, + routeId, ETYPE_ROUTE_DSNCONNECT, CI_DEVICE_TYPE_ROUTEACK, ESEND_LEVEL_ZERO); + } + break; + + default: + /*其他其他联锁类型,不处理*/ + break; + } + } + } + else + { + /*nothing*/ + } + + return ret; +} + +/* +* 功能描述: 迪士尼联络线其他进路请求和进路释放继电器检查 +* 参数说明: UINT16 routeId 进路ID +* 返回值 : CI_ERROR 失败(超时),转为空闲 +* CI_SUCCESS 检查成功 +* RETURN_WAIT_DSNCONNECT_REQRLS 条件不满足,等待 +* 注意事项: 仅后半段属于本线的进路的选排阶段适用本函数,作为驱动道岔反位使能请求继电器的条件 +*/ +static UINT8 DsnConnectRouteReqRlsChk(UINT16 const routeId, UINT8 functionId, UINT8 sendLevel) +{ + /*进路等级*/ + UINT8 const routeLevel = GetRouteLevel(routeId); /*进路级别*/ + UINT8 checkSum = 0u; /*其他联锁总数*/ + RouteOtherCheckStruct *pDataOtherCiDevBuf = NULL; /*其他联锁数组指针*/ + UINT16 i = 0u; /*循环变量*/ + UINT8 ret = CI_ERROR; /*返回值*/ + UINT8 cRelayCollState = CI_ERROR; /*继电器采集状态*/ + UINT16 wRelayBelongOcId = 0U; /*继电器所属OC*/ + UINT8 cOcCommState = TRANSMIT_STATE_BAD; /*与OC通信状态*/ + UINT8 cABoardState = RELAY_BOARD_FAULT_YES; /*A系板卡状态*/ + UINT8 cBBoardState = RELAY_BOARD_FAULT_YES; /*B系板卡状态*/ + UINT8 routeTimeState = CI_TIME_OUT; /*超时状态*/ + UINT32 startCycNum = 0u; /*选排起始周期号*/ + UINT32 startCycMax = 0u; /*选排超限周期数*/ + + /*选排超时判断*/ + startCycNum = GetRouteXuanPaiStartCycNum(routeId); + startCycMax = GetDsnConnectRouteOvertimeCyc(); + routeTimeState = SystemOverTimeCheck(startCycNum, startCycMax); + if (CI_TIME_OUT == routeTimeState) + { + /* 记录故障码 */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_CONNECT_OVERRIME, routeTimeState, sendLevel); + /* 失败返回 */ + ret = CI_ERROR; + } + else + { + /*获取其他联锁检查条件数据*/ + if (ROUTE_LEVEL_BLOC == routeLevel) + { + checkSum = GetRouteBlocOtherCiSum(routeId); + pDataOtherCiDevBuf = GetRouteBlocOtherCiBuf(routeId); + ret = CI_SUCCESS; + } + else if (ROUTE_LEVEL_CBTC == routeLevel) + { + checkSum = GetRouteCbtcOtherCiSum(routeId); + pDataOtherCiDevBuf = GetRouteCbtcOtherCiBuf(routeId); + ret = CI_SUCCESS; + } + else + { + checkSum = 0u; + pDataOtherCiDevBuf = NULL; + } + + /* 开始检查 */ + if ((0u != checkSum) && (NULL != pDataOtherCiDevBuf) && (CI_SUCCESS == ret)) + { + /*开始检查*/ + for (i = 0u; i设置进路空闲*/ + } + else + { + /*nothing*/ + } + } + } + else + { + /*nothing*/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h index 51cd2ed..18f88bf 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h @@ -368,7 +368,7 @@ UINT8 RoutePhySectionUseLogicProcess(const UINT16 routeId); * 故障编码: EFUNC_SET_SWITCH_POS * cgh-合并CID-3037-6: */ -UINT8 SetSwitchPositionLogicProcess(UINT16 const switchId, UINT8 const switchSetPos, const UINT8 chCmdType, UINT8* chSwitchTestFlag); +UINT8 SetSwitchPositionLogicProcess(UINT16 const switchId, UINT8 const switchSetPos, const UINT8 chCmdType, UINT8* chSwitchTestFlag, UINT8 sendLevelFlag); /* C30_设置道岔单锁*/ /* @@ -815,6 +815,23 @@ UINT8 RouteLgcSecResUnlockNextSecCheck(const UINT16 wRouteId, const UINT16 wUnlo */ UINT8 RouteLgcSecResReturnSecCheck(UINT16 wValidReturnSigId, const UINT16 wRouteId); +/* +* 功能描述: 迪士尼联络线其他联锁条件检查 +* 参数说明: UINT16 routeId 进路ID +* 返回值 : CI_ERROR 检查失败 +* CI_SUCCESS 检查成功 +* 注意事项: 本函数只检查区段方向、进路协议相关内容 +*/ +UINT8 DsnConnectOtherCiValidCheck(UINT16 const routeId); + +/* +* 功能描述:迪士尼联络线自动区故解处理 +* 参数说明:const UINT16 wRouteId 进路ID +* 返 回 值:CI_SUCCESS:可以解锁 CI_ERROR:不能解锁 +* Created By wyd 20260318 +*/ +void DsnConnectRouteSecUnlockProc(UINT16 wRouteId); + #if 0 /* * 功能描述: 逻辑区段保护锁闭可用性逻辑处理 diff --git a/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.c b/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.c index ce910e8..73801ac 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.c +++ b/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.c @@ -274,15 +274,17 @@ UINT8 LockLogRouteCheckProcess(UINT16 const logRouteId) * UINT8 pDevState,设备状态 * @note: */ -UINT8 LogRoutePhySecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState) +UINT8 LogRouteSecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState) { UINT16* LogSecIdBuff = NULL; UINT16 logSecSum = 0U; UINT16 ii = 0U; - UINT16 devId = 0U; /*关联物理区段ID*/ + UINT16 devId = 0U; /*关联区段ID*/ UINT8 devState = 0U; UINT8 retval = CI_ERROR; - + UINT8 chShareSwitchNum = 0U;/*共用道岔区段个数*/ + UINT16* plogSecIdPBuf = NULL;/*共用道岔区段序列*/ + UINT8 jj = 0U; LogSecIdBuff = GetLogicalRouteInLogSecId(logRouteId); logSecSum = GetLogicalRouteInLogSecSum(logRouteId); if ((NULL != LogSecIdBuff) && (0U != logSecSum) && (NULL!= pDevId) && (NULL != pDevState)) @@ -290,21 +292,48 @@ UINT8 LogRoutePhySecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevS retval = CI_SUCCESS; for (ii = 0U; ii < logSecSum; ii++) { - devId = GetLgcSecRelativePhySecId(LogSecIdBuff[ii]); - devState = GetPhySecFLockState(devId); - + devId =LogSecIdBuff[ii]; + devState = GetLogSecFLockType(devId); /* 状态如果不是未封锁状态,则认为检查失败 */ - if (PHYSICAL_SECTION_FLOCK_NO != devState ) + if (SEC_FLOCK_TYPE_NONE != devState ) { /*状态不一致返回故障状态*/ *pDevId = devId; - *pDevState = devState; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; retval = CI_ERROR; - break; } else { - /*继续检查*/ + chShareSwitchNum = GetLogSecSameSwitchSecSum(devId); + plogSecIdPBuf = GetLogSecSameSwitchSecId(devId); + if ((PHYSICAL_INCLUDE_AXIS_SUM_MAX > chShareSwitchNum) && (NULL != plogSecIdPBuf)) + { + /*检查与逻辑区段共用道岔的逻辑区段封锁状态*/ + for (jj = 0U; jj < chShareSwitchNum; jj++) + { + devState = GetLogSecFLockType(plogSecIdPBuf[jj]);/*逻辑区段封锁*/ + if (SEC_FLOCK_TYPE_NONE != devState) + { + /*区段处于封锁状态*/ + /*状态不一致返回故障状态*/ + *pDevId = plogSecIdPBuf[jj]; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; + retval = CI_ERROR; + break; + } + } + } + else + { + *pDevId = devId; + *pDevState = PHYSICAL_SECTION_FLOCK_YES; + retval = CI_ERROR; + } + + } + if (CI_ERROR == retval) + { + break;/*跳出*/ } } } @@ -637,7 +666,7 @@ UINT8 LogRouteSectionCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel) /*逻辑进路关联的物理区段未封锁*/ devId = 0u; devState = 0u; - checkResult = LogRoutePhySecFengSuoCheck(logRouteId, &devId, &devState); + checkResult = LogRouteSecFengSuoCheck(logRouteId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* 通过检查 */ @@ -646,7 +675,7 @@ UINT8 LogRouteSectionCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel) else { /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); /* 失败返回 */ reResult = CI_ERROR; } @@ -2010,7 +2039,7 @@ UINT8 KeepLogRouteSectionCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendL UINT8 devState = 0U; /*设备状态*/ /* 逻辑进路内所有区段未被封锁 */ - checkResult = LogRoutePhySecFengSuoCheck(wLogRouteId, &devId, &devState); + checkResult = LogRouteSecFengSuoCheck(wLogRouteId, &devId, &devState); if (CI_SUCCESS == checkResult) { /* 通过检查 */ @@ -2019,7 +2048,7 @@ UINT8 KeepLogRouteSectionCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendL else { /* 记录故障码 */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_PS_FLOCK_STATE, devState, sendLevel); /* 失败返回 */ reResult = CI_ERROR; } diff --git a/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.h b/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.h index 19b0727..891fe5c 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.h +++ b/TSCP/src/APP/ciapp/LogicProcess/LogicalRouteLogicCheck.h @@ -51,7 +51,7 @@ UINT8 LockLogRouteCheckProcess(UINT16 const logRouteId); * UINT8 sendLevel, 故障码发送级别 * @note: */ -UINT8 LogRoutePhySecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState); +UINT8 LogRouteSecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState); /** * @brief 逻辑进路逻辑区段锁闭检查 diff --git a/TSCP/src/APP/ciapp/Main/MainApp.c b/TSCP/src/APP/ciapp/Main/MainApp.c index b1e0372..ffe7957 100644 --- a/TSCP/src/APP/ciapp/Main/MainApp.c +++ b/TSCP/src/APP/ciapp/Main/MainApp.c @@ -113,7 +113,7 @@ UINT8 MainProcess(void) cost[2] = MSCP_GetTick(); /*退出运营处理*/ - (void)APP_API_ExitOperation(); + APP_API_ExitOperation(); /*联锁逻辑处理*/ diff --git a/TSCP/src/APP/ciapp/Mask/MaskDefine.h b/TSCP/src/APP/ciapp/Mask/MaskDefine.h index dda38d5..d812e64 100644 --- a/TSCP/src/APP/ciapp/Mask/MaskDefine.h +++ b/TSCP/src/APP/ciapp/Mask/MaskDefine.h @@ -98,6 +98,8 @@ #define MASK_ZC_CI_SIG_ENGINEERV_NEAR ((UINT8)0x97) /*定义信号机工程车接近码位*/ #define MASK_CI_ZC_SIG_ENGINCROSS_STE ((UINT8)0x98) /*定义信号机工程车关灯码位*/ +#define MASK_TYPE_SIGNAL_CROSS_RED ((UINT8)0x9F) /*定义CI-ATS信号机列车闯红灯码位*/ + /*物理区段相关码位*/ #define MASK_TYPE_PHYSECTION_OCCUPY ((UINT8)0x25) /*定义物理区段占用码位*/ #define MASK_TYPE_PHYSECTION_STARTLOCK ((UINT8)0x26) /*定义物理区段上电锁闭码位*/ @@ -140,8 +142,13 @@ #define MASK_TYPE_LOGICSECTION_JUMPLOCK ((UINT8)0x9A) /*定义逻辑区段跳跃锁闭码位*/ #define MASK_TYPE_LOGICSECTION_ARB ((UINT8)0x9B) /*定义逻辑区段ARB状态码位*/ #define MASK_TYPE_LOGICSECTION_SPKS_FLOCK ((UINT8)0x9C) /*定义逻辑区段SPKS封锁状态码位*/ - - +#define MASK_TYPE_LOGICSECTION_ALLSEC_FLOCK ((UINT8)0x9D) /*定义逻辑区段全线封锁状态码位*/ +#define MASK_TYPE_LOGICSECTION_APG_FLOCK ((UINT8)0x9E) /*定义逻辑区段站台门异常打开封锁码位*/ +#define MASK_TYPE_LOGICSECTION_PROHIBIT_FAO ((UINT8)0x9F) /*定义逻辑区段禁止FAO运行码位*/ +#define MASK_TYPE_LOGICSECTION_CMD_FLOCK ((UINT8)0xA0) /*定义逻辑区段人工封锁码位*/ +#define MASK_TYPE_LOGICSECTION_ESB_FLOCK ((UINT8)0xA1) /*定义逻辑区段ESB封锁码位*/ +#define MASK_TYPE_LOGICSECTION_CESB_FLOCK ((UINT8)0xA2) /*定义逻辑区段CESB封锁码位*/ +#define MASK_TYPE_LOGICSECTION_OVERRIDE ((UINT8)0xA8) /*定义逻辑区段旁路码位*/ /*保护区段相关码位*/ #define MASK_TYPE_OVERLAP_LOCKSTATE ((UINT8)0x30) /*定义保护区段锁闭状态码位*/ @@ -182,6 +189,7 @@ #define MASK_TYPE_ESP_FAULT ((UINT8)0x9d) /*定义紧急关闭按钮故障码位*/ #define MASK_TYPE_CUT_ESP_FAULT ((UINT8)0xA3) /*定义紧急关闭旁路按钮故障码位*/ #define MASK_TYPE_ESP_PRESS_STATE ((UINT8)0xA4) /*定义紧急关闭按钮按下状态码位*/ +#define MASK_TYPE_ESS_STATE ((UINT8)0xA7) /*定义ESS去位/停位状态码位*/ /*站台安全门相关码位*/ #define MASK_TYPE_PSD_STATE ((UINT8)0x60) /*定义站台安全门状态码位-ZC,LEU用*/ @@ -200,6 +208,7 @@ #define MASK_TYPE_PSD_VIDEO_QK_LU ((UINT8)0xA1) /*定义清客按钮箱视频清客表示灯(绿)状态码位*/ #define MASK_TYPE_PSD_VIDEO_QK_HONG ((UINT8)0xA2) /*定义清客按钮箱视频清客表示灯(红)状态码位*/ #define MASK_TYPE_PSD_EXCEPT_OPEN ((UINT8)0xA5) /*定义站台安全门异常打开码位*/ +#define MASK_TYPE_PSD_MUTUALLOCK_BTNERR ((UINT8)0xA6) /*定义站台安全门互锁解除按钮异常码位*/ /*车库门相关码位*/ #define MASK_TYPE_GARAGEDOOR_OPEN_STATE ((UINT8)0x62) /*定义车库门开门状态码位(CI->ATS)*/ @@ -235,5 +244,10 @@ /*防淹门相关码位*/ +/*临时限速相关码位*/ +#define MASK_TYPE_SPEEDLIMITSEC_STATE ((UINT8)0x9F) /*CI-ATS限速区段临时限速设置码位*/ +#define MASK_TYPE_SPEEDLIMITTF_STATE ((UINT8)0xa9) /*CI-ATS限速区段台风限速设置码位*/ +#define MASK_TYPE_SPEEDLIMITTNR_STATE ((UINT8)0xab) /*CI-ATS限速区段NR限速设置码位*/ +#define MASK_TYPE_SPEEDLIMITQX_STATE ((UINT8)0xac) /*CI-ATS限速区段全线临时限速设置码位*/ #endif diff --git a/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.c b/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.c new file mode 100644 index 0000000..ff94071 --- /dev/null +++ b/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.c @@ -0,0 +1,267 @@ +/******************************************************** +* +* 文 件 名: OHLConfigDataManage.c +* 版权说明: 北京交控科技有限公司 +* 创建时间: +* 作 者: 联锁组 +* 功能描述: 接触网相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "OHLConfigDataManage.h" + +OHLConfigDataStruct OhlConfigDataStru[OHL_MAX_NUM]; /*定义接触网数据配置结构体*/ +INT16 OhlCurSum = 0; /*接触网当前总数*/ +UINT16 LocalCiOhlIdBuf[OHL_MAX_NUM] = { 0u }; /*定义本地联锁接触网ID映射数组*/ + +/* +* 功能描述: 获取指定ID接触网索引号 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : SWITCH_SUM_MAX: 获取数据失败 +* = 1u) && (ohlId < OHL_MAX_NUM)) + { + retVal = ohlId; + } + + return retVal; +} + +/* +* 功能描述: 获取接触网分区当前总数 +* 参数说明: void +* 返回值 : 0: 获取数据失败 +* >0: 接触网分区当前总数 +*/ +UINT16 GetOhlCurSum(void) +{ + UINT16 retVal = 0u; + if (OhlCurSum >= (INT16)OHL_MAX_NUM) + { + retVal = OHL_MAX_NUM; + } + else if (OhlCurSum < 0) + { + retVal = 0u; + } + else + {/*OhlCurSum在[0,OHL_MAX_NUM)区间强转,保证安全*/ + retVal = (UINT16)OhlCurSum; + } + return retVal; +} + + +/* +* 功能描述: 整理读入的接触网配置数据 +* 参数说明: 无 +* 返回值 : CI_SUCCESS,整理成功 +* CI_ERROR,整理失败 +*/ +UINT8 OhlConfigDataManage(void) +{ + UINT16 ii = 0u; /*游标*/ + UINT16 jj = 0u; /*游标*/ + UINT16 ohlConfigDataSum = 0u; /*道岔设备配置数据总数*/ + UINT8 retVal = CI_SUCCESS; + UINT8 localCiId = 0u; + + localCiId = GetSystemParaLocalCiId(); + /*保存道岔ID索引数组*/ + ohlConfigDataSum = GetOhlCurSum(); + if (OHL_MAX_NUM <= ohlConfigDataSum) + {/*配置数据总数错误*/ + + retVal = CI_ERROR; + } + else + { + for (ii = 0u; ii < OHL_MAX_NUM; ii++) + { + if (jj == ohlConfigDataSum) + {/*遍历有效数据完毕*/ + + break; + } + + if ((OhlConfigDataStru[ii].wOhlId >= 1u) && (OhlConfigDataStru[ii].wOhlId < OHL_MAX_NUM)) + {/*id有效*/ + if (localCiId == OhlConfigDataStru[ii].chBelongCiId) + { + LocalCiOhlIdBuf[jj] = OhlConfigDataStru[ii].wOhlId; + jj++; + } + else + { + /*只处理本控区*/ + } + } + + } + } + + + + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网数据 +* 参数说明: +* 返回值 : OHLConfigDataStruct * +*/ +OHLConfigDataStruct* GetOhlConfigData(void) +{ + return OhlConfigDataStru; +} + +/* +* 功能描述: 获取指定数组下标对应的接触网ID +* 参数说明: const UINT16 bufIndex, 数组下标 +* 返回值 : 0: 获取数据失败 +* >0: 接触网ID +*/ +UINT16 GetOhlId(const UINT16 bufIndex) +{ + UINT16 retVal = CI_ERROR; + UINT16 ohlCurNum = 0u; /*接触网当前总数*/ + ohlCurNum = GetOhlCurSum(); + if (bufIndex < ohlCurNum) + { + retVal = LocalCiOhlIdBuf[bufIndex]; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网组数 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 接触网组数 +*/ +UINT8 GetOhlGroupSum(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlConfigDataStru[bufIndex].chRelayGroupNum; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网有电继电器ID数组 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : NULL: 获取数据失败 +* 非NULL: 有电继电器ID数组 +*/ +UINT16* GetOhlEnergizedIdBuf(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + UINT16* retVal = NULL; + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取区段数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlConfigDataStru[bufIndex].wEnergizedId; + } + else + { + + } + + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网断电继电器ID数组 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : NULL: 获取数据失败 +* 非NULL: 断电继电器ID数组 +*/ +UINT16* GetOhlDeEnergizedIdBuf(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + UINT16* retVal = NULL; + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取区段数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlConfigDataStru[bufIndex].wDeEnergizedId; + } + else + { + + } + + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网所属Oc ID +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 所属Oc ID +*/ +UINT16 GetOhlBelongOcId(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + UINT16 retVal = CI_ERROR; + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取区段数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlConfigDataStru[bufIndex].wBelongOcId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID接触网所属联锁ID +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 所属联锁ID +*/ +UINT8 GetOhlBelongCiId(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlConfigDataStru[bufIndex].chBelongCiId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.h b/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.h new file mode 100644 index 0000000..51877a2 --- /dev/null +++ b/TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.h @@ -0,0 +1,123 @@ +/******************************************************** +* +* 文 件 名: OHLConfigDataConfig.h +* 版权说明: 北京交控科技有限公司 +* 创建时间: +* 作 者: 联锁组 +* 功能描述: 接触网相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _OHL_CONFIG_DATA_MANAGE_H_ +#define _OHL_CONFIG_DATA_MANAGE_H_ + +#include "CommonTypes.h" +#include "OHLDefine.h" +#include "../System/CiSystemDefine.h" +#include "../System/SystemParameterManage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct S_OHLConfigDataStruct +{ + UINT16 wOhlId; /*接触网ID*/ + UINT16 wBelongOcId; /*所属OC ID*/ + UINT8 chBelongCiId; /*所属CI ID*/ + UINT8 chRelayGroupNum; /*接触网继电器组数*/ + UINT16 wEnergizedId[OHL_GROUP_MAX_NUM]; /*有电继电器ID*/ + UINT16 wDeEnergizedId[OHL_GROUP_MAX_NUM]; /*断电继电器ID*/ +}OHLConfigDataStruct; + +extern OHLConfigDataStruct OhlConfigDataStru[OHL_MAX_NUM]; /*定义接触网数据配置结构体*/ +extern INT16 OhlCurSum; /*接触网当前总数*/ +extern UINT16 LocalCiOhlIdBuf[OHL_MAX_NUM]; /*定义本地联锁接触网ID映射数组*/ + +/* +* 功能描述: 获取指定ID接触网索引号 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : SWITCH_SUM_MAX: 获取数据失败 +* 0: 接触网分区当前总数 +*/ +UINT16 GetOhlCurSum(void); + +/* +* 功能描述: 整理读入的接触网配置数据 +* 参数说明: 无 +* 返回值 : CI_SUCCESS,整理成功 +* CI_ERROR,整理失败 +*/ +UINT8 OhlConfigDataManage(void); + +/* +* 功能描述: 获取指定ID接触网数据 +* 参数说明: +* 返回值 : OHLConfigDataStruct * +*/ +OHLConfigDataStruct* GetOhlConfigData(void); + +/* +* 功能描述: 获取指定数组下标对应的接触网ID +* 参数说明: const UINT16 bufIndex, 数组下标 +* 返回值 : 0: 获取数据失败 +* >0: 接触网ID +*/ +UINT16 GetOhlId(const UINT16 bufIndex); + +/* +* 功能描述: 获取指定ID接触网组数 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 接触网组数 +*/ +UINT8 GetOhlGroupSum(const UINT16 ohlId); + +/* +* 功能描述: 获取指定ID接触网有电继电器ID数组 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : NULL: 获取数据失败 +* 非NULL: 有电继电器ID数组 +*/ +UINT16* GetOhlEnergizedIdBuf(const UINT16 ohlId); + +/* +* 功能描述: 获取指定ID接触网断电继电器ID数组 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : NULL: 获取数据失败 +* 非NULL: 断电继电器ID数组 +*/ +UINT16* GetOhlDeEnergizedIdBuf(const UINT16 ohlId); + +/* +* 功能描述: 获取指定ID接触网所属Oc ID +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 所属Oc ID +*/ +UINT16 GetOhlBelongOcId(const UINT16 ohlId); + +/* +* 功能描述: 获取指定ID接触网所属联锁ID +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 所属联锁ID +*/ +UINT8 GetOhlBelongCiId(const UINT16 ohlId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/OHL/OHLDataManage.c b/TSCP/src/APP/ciapp/OHL/OHLDataManage.c new file mode 100644 index 0000000..2479577 --- /dev/null +++ b/TSCP/src/APP/ciapp/OHL/OHLDataManage.c @@ -0,0 +1,187 @@ +/******************************************************** +* +* 文 件 名: OHLDataManage.c +* 版权说明: 北京交控科技有限公司 +* 创建时间: +* 作 者: 联锁组 +* 功能描述: 接触网相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "OHLDataManage.h" + +OhlDataStruct OhlDataStru[OHL_MAX_NUM]; /*定义接触网数据结构体*/ + +/* +* 功能描述: 获取指定ID接触网数据 +* 参数说明: +* 返回值 : + SwitchDataStruct * +*/ +OhlDataStruct* GetOhlData(void) +{ + return OhlDataStru; +} + +/* +* 功能描述: 设置指定ID接触网供电状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT8 powerState, 接触网供电状态 +* 返回值 : 无 +* +*/ +void SetOhlPowerState(const UINT16 ohlId, const UINT8 powerState) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + + if ((OHL_POWER_ENERGIZED == powerState) || (OHL_POWER_DE_ENERGIZED == powerState) + ||(OHL_POWER_UNKNOW == powerState)) + { + OhlDataStru[bufIndex].chPowerState = powerState; /*道岔引导总锁状态*/ + } + else + { + /*不做处理*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述: 获取指定ID接触网供电状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 接触网供电状态 +*/ +UINT8 GetOhlPowerState(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlDataStru[bufIndex].chPowerState; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 设置接触网断电状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetOhlDeEnerCycNum(const UINT16 ohlId, const UINT32 cycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + OhlDataStru[bufIndex].dwOhlDeEnerCycNum = cycNum; + } +} +/* +* 功能描述: 获取接触网断电状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT32 断电状态起始周期 +*/ +UINT32 GetOhlDeEnerCycNum(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlDataStru[bufIndex].dwOhlDeEnerCycNum; + } + return retVal; +} + +/* +* 功能描述: 设置接触网未知状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetOhlUnknowCycNum(const UINT16 ohlId, const UINT32 cycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + OhlDataStru[bufIndex].dwOhlUnknowCycNum = cycNum; + } +} +/* +* 功能描述: 获取接触网未知状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT32 未知状态起始周期 +*/ +UINT32 GetOhlUnknowCycNum(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlDataStru[bufIndex].dwOhlUnknowCycNum; + } + return retVal; +} + +/* +* 功能描述: 设置接触网旁路状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT8 bypassFlag 旁路标志 +* 返回值 : 无 +*/ +void SetOhlBypassFlag(const UINT16 ohlId, const UINT8 bypassFlag) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + if ((OHL_BYPASS_YES == bypassFlag) || (OHL_BYPASS_NO == bypassFlag)) + { + OhlDataStru[bufIndex].chOhlBypassFlag = bypassFlag; + } + else + {/*不处理*/ + } + } +} +/* +* 功能描述: 获取接触网旁路状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT8 接触网旁路状态 +*/ +UINT8 GetOhlBypassFlag(const UINT16 ohlId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetOhlConfigBufIndex(ohlId); /*获取道岔数组下标*/ + if (bufIndex < OHL_MAX_NUM) + { + retVal = OhlDataStru[bufIndex].chOhlBypassFlag; + } + return retVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/OHL/OHLDataManage.h b/TSCP/src/APP/ciapp/OHL/OHLDataManage.h new file mode 100644 index 0000000..7ab45b1 --- /dev/null +++ b/TSCP/src/APP/ciapp/OHL/OHLDataManage.h @@ -0,0 +1,113 @@ +/******************************************************** +* +* 文 件 名: OHLDataManage.h +* 版权说明: 北京交控科技有限公司 +* 创建时间: +* 作 者: 联锁组 +* 功能描述: 接触网相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _OHL_DATA_MANAGE_H_ +#define _OHL_DATA_MANAGE_H_ + +#include "OHLDefine.h" +#include "OHLConfigDataManage.h" +#include "CommonTypes.h" +#include "../System/CiSystemDefine.h" +#include "../System/SystemParameterManage.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*道岔数据结构体*/ +typedef struct S_OhlDataStruct +{ + UINT16 wOhlId; /*接触网ID (配置字段)*/ + UINT8 chPowerState; /*接触网供电状态*/ + UINT32 dwOhlDeEnerCycNum; /*接触网断电起始周期*/ + UINT32 dwOhlUnknowCycNum; /*接触网未知起始周期*/ + UINT8 chOhlBypassFlag; /*接触网旁路状态*/ +}OhlDataStruct; + +extern OhlDataStruct OhlDataStru[OHL_MAX_NUM]; /*定义道岔数据结构体*/ + +/* +* 功能描述: 获取指定ID接触网数据 +* 参数说明: +* 返回值 : + SwitchDataStruct * +*/ +OhlDataStruct* GetOhlData(void); + +/* +* 功能描述: 设置指定ID接触网供电状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT8 powerState, 接触网供电状态 +* 返回值 : 无 +* +*/ +void SetOhlPowerState(const UINT16 ohlId, const UINT8 powerState); + +/* +* 功能描述: 获取指定ID接触网供电状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : 0: 获取数据失败 +* >0: 接触网供电状态 +*/ +UINT8 GetOhlPowerState(const UINT16 ohlId); + +/* +* 功能描述: 设置接触网断电状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetOhlDeEnerCycNum(const UINT16 ohlId, const UINT32 cycNum); + +/* +* 功能描述: 获取接触网断电状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT32 断电状态起始周期 +*/ +UINT32 GetOhlDeEnerCycNum(const UINT16 ohlId); + +/* +* 功能描述: 设置接触网未知状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetOhlUnknowCycNum(const UINT16 ohlId, const UINT32 cycNum); + +/* +* 功能描述: 获取接触网未知状态起始周期 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT32 未知状态起始周期 +*/ +UINT32 GetOhlUnknowCycNum(const UINT16 ohlId); + +/* +* 功能描述: 设置接触网旁路状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* const UINT8 bypassFlag 旁路标志 +* 返回值 : 无 +*/ +void SetOhlBypassFlag(const UINT16 ohlId, const UINT8 bypassFlag); + +/* +* 功能描述: 获取接触网旁路状态 +* 参数说明: const UINT16 ohlId, 接触网ID +* 返回值 : UINT8 接触网旁路状态 +*/ +UINT8 GetOhlBypassFlag(const UINT16 ohlId); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/OHL/OHLDefine.h b/TSCP/src/APP/ciapp/OHL/OHLDefine.h new file mode 100644 index 0000000..d2aca38 --- /dev/null +++ b/TSCP/src/APP/ciapp/OHL/OHLDefine.h @@ -0,0 +1,29 @@ +/******************************************************** +* +* 文 件 名: OHLDataConfig.h +* 版权说明: 北京交控科技有限公司 +* 创建时间: 2014-12-05 +* 作 者: 联锁组 +* 功能描述: 接触网相关常量定义 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _OHL_DATA_CONFIG_H_ +#define _OHL_DATA_CONFIG_H_ + +#define OHL_MAX_NUM 3 /*接触网分区数最大值(最大支持2个,以ID为索引)*/ +#define OHL_GROUP_MAX_NUM 2 /*一个接触网分区继电器最大组数*/ + +/*接触网供电状态*/ +#define OHL_POWER_ENERGIZED ((UINT8)0x55)/*接触网有电*/ +#define OHL_POWER_DE_ENERGIZED ((UINT8)0xAA)/*接触网无电*/ +#define OHL_POWER_UNKNOW ((UINT8)0xFF)/*接触网未知*/ + +/*接触网旁路状态*/ +#define OHL_BYPASS_YES ((UINT8)0xAA)/*接触网旁路*/ +#define OHL_BYPASS_NO ((UINT8)0x55)/*接触网未旁路*/ + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c index 8fa6cb6..2323a5f 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c @@ -2855,4 +2855,242 @@ void SetPsdRelayDownCycNum(const UINT16 doorId, const UINT32 startCycNum) { /*不处理*/ } +} + +/* +* 功能描述:获取指定ID屏蔽门旁路采集起始周期号 +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门互锁解除继电器吸起起始周期号 +* Created By fan 2025.12.15 +*/ +UINT32 GetPsdMutualLockCollStartCyc(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStru[bufIndex].dwPsdMutualLockCollStartCyc; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* 功能描述:设置指定ID屏蔽门旁路采集起始周期号 +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By fan 2025.12.16 +*/ +void SetPsdMutualLockCollStartCyc(const UINT16 doorId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + PsdDataStru[bufIndex].dwPsdMutualLockCollStartCyc = startCycNum; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取指定ID屏蔽门故障按下周期号(误触发) +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门互锁解除继电器吸起起始周期号 +* Created By fan 2025.12.22 +*/ +UINT32 GetPsdMutualLockErrCollCyc(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStru[bufIndex].dwPsdMutualLockErrCollCyc; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* 功能描述:设置指定ID屏蔽门旁路故障按下周期号(误触发) +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By fan 2025.12.22 +*/ +void SetPsdMutualLockErrCollCyc(const UINT16 doorId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + PsdDataStru[bufIndex].dwPsdMutualLockErrCollCyc = startCycNum; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述:获取指定ID屏蔽门旁路起效周期 +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门旁路起效起始周期号 +* Created By fan 2025.12.15 +*/ +UINT32 GetPsdMutualLockStartCyc(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStru[bufIndex].dwPsdMutualLockStartCyc; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* 功能描述: 设置指定ID门旁路按钮故障落下状态(OC通信中断导致) +* 参数说明: const UINT16 doorId, 屏蔽门ID +* const UINT8 chErrState,旁路故障状态 +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void SetPsdMutualLockErrDownState(const UINT16 doorId, const UINT8 chErrState) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + if (PSD_SUM_MAX > bufIndex) + { + if ((PSD_BTN_ERROR_FLAG_YES == chErrState) || (PSD_BTN_ERROR_FLAG_NO == chErrState)) + { + PsdDataStru[bufIndex].cPsdMutualLockBtnErrDownState = chErrState; + } + else + {/*不处理*/ + } + } +} + +/* +* 功能描述: 获取指定ID旁路按钮故障落下状态(OC通信中断导致) +* 参数说明: const UINT16 doorId, 屏蔽门ID +* 返回值 : UINT8 旁路故障状态 +* Created By fan 2025.12.15 +*/ +UINT8 GetPsdMutualLockErrDownState(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = PSD_BTN_ERROR_FLAG_YES; + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdDataStru[bufIndex].cPsdMutualLockBtnErrDownState; + } + else + {/*不处理*/ + } + + return retVal; +} + +/* +* 功能描述:设置指定ID屏蔽门旁路旁路起效周期 +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By fan 2025.12.15 +*/ +void SetPsdMutualLockStartCyc(const UINT16 doorId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + + if (bufIndex < PSD_SUM_MAX) + { + PsdDataStru[bufIndex].dwPsdMutualLockStartCyc = startCycNum; + } + else + { + /*不处理*/ + } +} + +/* +* 功能描述: 设置指定ID门旁路按钮故障状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* const UINT8 chErrState,旁路故障状态 +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void SetPsdMutualLockErrState(const UINT16 doorId, const UINT8 chErrState) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + if (PSD_SUM_MAX > bufIndex) + { + if ((PSD_BTN_ERROR_FLAG_YES == chErrState) || (PSD_BTN_ERROR_FLAG_NO == chErrState)) + { + PsdDataStru[bufIndex].cPsdMutualLockBtnErrState = chErrState; + } + else + {/*不处理*/ + } + } +} + +/* +* 功能描述: 获取指定ID旁路按钮故障状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* 返回值 : UINT8 旁路故障状态 +* Created By fan 2025.12.15 +*/ +UINT8 GetPsdMutualLockErrState(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = PSD_BTN_ERROR_FLAG_YES; + + bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/ + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdDataStru[bufIndex].cPsdMutualLockBtnErrState; + } + else + {/*不处理*/ + } + + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/PSD/PSDDataManage.h b/TSCP/src/APP/ciapp/PSD/PSDDataManage.h index e7c5e0d..f833b40 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.h @@ -49,8 +49,6 @@ typedef struct S_PsdDataStruct UINT16 SrcVobcId;/*操作该屏蔽门的当前VOBC ID*/ UINT8 PsdCmd;/*操作屏蔽门的命令*/ - /*UINT16 ClosedRouteId;*//*因VOBC打开PSD而关闭信号的进路*/ - /*UINT8 LastDriState;*//*历史驱动状态*/ UINT32 CmdSetCycle;/*命令设置周期*/ UINT32 CmdSetCyclePsc;/*命令设置周期*/ UINT8 PsdRemoraState; /*屏蔽门障碍物状态*/ @@ -91,6 +89,11 @@ typedef struct S_PsdDataStruct UINT8 psdCloseErrState; /*关门故障状态*/ UINT8 cPsdExceptOpenState; /*屏蔽门异常打开状态:0x55-异常打开,0xAA-未异常打开*/ UINT32 dwPsdRelayDownCycNum; /*PSD门关继电器落下起始周期*/ + UINT32 dwPsdMutualLockCollStartCyc;/*PSD旁路按钮正常按下起始周期*/ + UINT32 dwPsdMutualLockErrCollCyc;/*PSD旁路按钮误触发按下起始周期*/ + UINT32 dwPsdMutualLockStartCyc;/*PSD旁路起效周期*/ + UINT8 cPsdMutualLockBtnErrState; /*屏蔽门互锁解除按钮故障状态:0x55-未故障,0xAA-故障*/ + UINT8 cPsdMutualLockBtnErrDownState; /*屏蔽门旁路按钮故障落下状态:0x55-未故障,0xAA-故障*/ } PsdDataStruct; extern PsdDataStruct PsdDataStru[PSD_SUM_MAX]; /*定义屏蔽门数据结构体*/ @@ -1001,6 +1004,89 @@ UINT32 GetPsdRelayDownCycNum(const UINT16 doorId); * Created By LQ 2025.06.26 */ void SetPsdRelayDownCycNum(const UINT16 doorId, const UINT32 startCycNum); +/* +* 功能描述:获取指定ID屏蔽门旁路采集起始周期号 +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门互锁解除继电器吸起起始周期号 +* Created By fan 2025.12.15 +*/ +UINT32 GetPsdMutualLockCollStartCyc(const UINT16 doorId); + +/* +* 功能描述:设置指定ID屏蔽门旁路采集起始周期号 +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By LQ 2025.06.26 +*/ +void SetPsdMutualLockCollStartCyc(const UINT16 doorId, const UINT32 startCycNum); + +/* +* 功能描述:获取指定ID屏蔽门故障按下周期号(误触发) +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门互锁解除继电器吸起起始周期号 +* Created By fan 2025.12.22 +*/ +UINT32 GetPsdMutualLockErrCollCyc(const UINT16 doorId); + +/* +* 功能描述:设置指定ID屏蔽门旁路故障按下周期号(误触发) +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By fan 2025.12.22 +*/ +void SetPsdMutualLockErrCollCyc(const UINT16 doorId, const UINT32 startCycNum); +/* +* 功能描述:获取指定ID屏蔽门旁路起效周期 +* 参数说明:const UINT16 doorId 屏蔽门ID +* 返 回 值:门旁路起效起始周期号 +* Created By fan 2025.12.15 +*/ +UINT32 GetPsdMutualLockStartCyc(const UINT16 doorId); + +/* +* 功能描述:设置指定ID屏蔽门旁路旁路起效周期 +* 参数说明:const UINT16 doorId 屏蔽门ID +* const UINT32 startCycNum 起始周期号 +* 返 回 值:无 +* Created By fan 2025.12.15 +*/ +void SetPsdMutualLockStartCyc(const UINT16 doorId, const UINT32 startCycNum); + +/* +* 功能描述: 设置指定ID门旁路按钮故障状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* const UINT8 chErrState,旁路故障状态 +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void SetPsdMutualLockErrState(const UINT16 doorId, const UINT8 chErrState); + +/* +* 功能描述: 获取指定ID旁路按钮故障状态 +* 参数说明: const UINT16 doorId, 屏蔽门ID +* 返回值 : UINT8 旁路故障状态 +* Created By fan 2025.12.15 +*/ +UINT8 GetPsdMutualLockErrState(const UINT16 doorId); + +/* +* 功能描述: 设置指定ID门旁路按钮故障落下状态(OC通信中断导致) +* 参数说明: const UINT16 doorId, 屏蔽门ID +* const UINT8 chErrState,旁路故障状态 +* Created By fan 2025.12.15 +* 返回值 : 无 +*/ +void SetPsdMutualLockErrDownState(const UINT16 doorId, const UINT8 chErrState); + +/* +* 功能描述: 获取指定ID旁路按钮故障落下状态(OC通信中断导致) +* 参数说明: const UINT16 doorId, 屏蔽门ID +* 返回值 : UINT8 旁路故障状态 +* Created By fan 2025.12.15 +*/ +UINT8 GetPsdMutualLockErrDownState(const UINT16 doorId); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/PSD/PSDDefine.h b/TSCP/src/APP/ciapp/PSD/PSDDefine.h index e4fa439..99cb86e 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDefine.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDefine.h @@ -207,4 +207,8 @@ #define HIGH_FOUR_CHAR ((UINT8)0U) /*高四字节*/ #define LOW_FOUR_CHAR ((UINT8)1U) /*低四字节*/ +/*自复式屏蔽门按钮故障标志*/ +#define PSD_BTN_ERROR_FLAG_NO ((UINT8)0x55) /*自复式屏蔽门按钮故障标志无效*/ +#define PSD_BTN_ERROR_FLAG_YES ((UINT8)0xaa) /*自复式屏蔽门按钮故障标志有效*/ + #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h index ddc1d3b..3309152 100644 --- a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h +++ b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h @@ -151,6 +151,23 @@ #define ATS_CMD_OC_P_PL_TWO ((UINT8)0xa9) /*设置OC-P旁路二次命令*/ #define ATS_CMD_QUXIAO_OC_P_PL_ONE ((UINT8)0xaa) /*取消OC-P旁路一次命令*/ #define ATS_CMD_QUXIAO_OC_P_PL_TWO ((UINT8)0xab) /*取消OC-P旁路二次命令*/ +#define ATS_CMD_PROHIBIT_FAO ((UINT8)0xac) /*禁止FAO列车进入逻辑区段命令*/ +#define ATS_CMD_CANCEL_PROHIBIT_FAO ((UINT8)0xad) /*取消禁止FAO列车进入逻辑区段命令*/ +#define ATS_CMD_OHL_BYPASS ((UINT8)0xae) /*设置接触网旁路命令*/ +#define ATS_CMD_CANCEL_OHL_BYPASS ((UINT8)0xaf) /*取消接触网旁路命令*/ + +#define ATS_CMD_ECS_USE_START ((UINT8)0xB0U) /*ECS自动触发启用命令*/ +#define ATS_CMD_ECS_USE_STOP ((UINT8)0xB1U) /*ECS自动触发停用命令*/ + +#define ATS_CMD_UNLOCK_STARTSTATE_ONE ((UINT8)0xB2) /*全站解封解锁一次*/ +#define ATS_CMD_UNLOCK_STARTSTATE_TWO ((UINT8)0xB3) /*全站解封解锁二次*/ +#define ATS_CMD_LOGSECTION_FLOCK_SET ((UINT8)0xB4) /*逻辑区段封锁*/ +#define ATS_CMD_LOGSECTION_FLOCK_CANCLE ((UINT8)0xB5) /*逻辑区段解封*/ + +#define SCX_ATS_CMD_CESB_ACTIVE_YES ((UINT8)0xB6) /*试车线虚拟CESB激活*/ +#define SCX_ATS_CMD_CESB_ACTIVE_NO ((UINT8)0xB7) /*试车线虚拟CESB激活*/ +#define SCX_ATS_CMD_CESB_CUT_YES ((UINT8)0xB8) /*试车线虚拟CESB旁路*/ +#define SCX_ATS_CMD_CESB_CUT_NO ((UINT8)0xB9) /*试车线虚拟CESB旁路恢复*/ #define ATS_CMD_GET_CTRL_POWER ((UINT8)0x81) /* 获取联锁控制权*/ #define ATS_CMD_RELEASE_CTRL_POWER ((UINT8)0x82) /* 释放联锁控制权*/ @@ -307,6 +324,7 @@ /* zt 删除单轨相关代码 2022-02-15 */ #define CI_BACK_SWT_USING ((UINT8)0x3f) /*道岔征用中*/ #define CI_BACK_SWT_MOVE_ERR ((UINT8)0x84) /*道岔搬动失败*/ +#define CI_BACK_SWT_WAIT_MOVE ((UINT8)0xAE) /*等待道岔动作完成后再操作*/ /*继电器故障反馈*/ #define CI_BACK_REL_ZHAOCHA_UP ((UINT8)0x41) /*照查继电器吸起*/ @@ -429,6 +447,13 @@ #define CI_BACK_DATA_APP_LEN_ERR ((UINT8)0xf7) /* CI与其他子系统数据应用层数据长度无效 */ #define CI_BACK_DATA_COM_PERIOD ((UINT8)0xf8) /* CI与其他子系统数据通信周期错误 */ #define CI_BACK_DATA_VER_CHECK_FAIL ((UINT8)0xfe) /* CI与其他子系统数据版本号校验失败 */ + +/*联络线相关反馈*/ +#define CI_BACK_OVERRIDE_SWITCH_FAIL ((UINT8)0xAF) /* 道岔不在定位,旁路无效 */ +#define CI_BACK_OVERRIDE_CT_OCCUPY ((UINT8)0xB0) /* CT列车占用,旁路无效 */ +#define CI_BACK_CONNECT_ROUTE_OVERRIME ((UINT8)0xB1) /* (联络线)进路办理超时 */ +#define CI_BACK_CONNECT_SWITCH_RET_FAIL ((UINT8)0xB2) /* Point failed to move to normal within 20 seconds of the over switch block being cleared */ + /*应答类型*/ #define RESPONSE_FIRST ((UINT8)0xAA) /*一次确认应答命令*/ #define RESPONSE_SECOND ((UINT8)0xBB) /*二次确认应答命令*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c index d597b62..6e8f96c 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c @@ -18,6 +18,7 @@ #include "../IO/OutputDataProcess.h" #include "EnvelopeManageAPI.h" #include "../DataManage/PlatDataManage.h" +#include "../ECS/ECSDataManage.h" /*解包使用*/ CommandDataStruct CiRevCmdDataStru[ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX] = {0u}; /*CI操作命令结构体数组*/ @@ -1196,6 +1197,12 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c /*组通信联锁信息*/ PackCiDataToAts(ciToXianDiDataBuffer, &ii); + /*组接触网信息*/ + PackOhlDataToAts(ciToXianDiDataBuffer, &ii); + + /*组ECS自动触发状态*/ + PackECSStateToAts(ciToXianDiDataBuffer, &ii); + /*预留40字节*/ ii += 40u; } @@ -1902,6 +1909,9 @@ UINT8 FindFirstOrder(UINT8 SecondOrder) case ATS_CMD_QUXIAO_OC_P_PL_TWO: reVal = ATS_CMD_QUXIAO_OC_P_PL_ONE; /*取消OC-P旁路一次命令*/ break; + case ATS_CMD_UNLOCK_STARTSTATE_TWO: + reVal = ATS_CMD_UNLOCK_STARTSTATE_ONE; /*迪士尼全站解封解锁*/ + break; default: reVal = 0u; break; @@ -3092,4 +3102,103 @@ void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) { /*入参检查失败,不处理*/ } +} + +/* +* 功能描述: 组接触网信息到ATS +* 参数说明:入参 +* UINT8* ciToXianDiDataBuffer 存放信息的buffer +* UINT16* ii 偏移量 +* 出参 +* 无 +* 返回值 : 无 +*/ +void PackOhlDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 index = 0u; + UINT16 tempIndex = 0u; + UINT8 ohlNum = 0u; /*接触网分区总数*/ + UINT16 ohlId = 0u; /*接触网分区ID*/ + UINT8 ohlPowerState = 0u; /*接触网状态*/ + UINT8 ohlBypass = 0u; /*接触网旁路状态*/ + UINT8 jj = 0u; + UINT8 chLocalCiId = 0u; /*本地联锁ID*/ + UINT8 devBlongCiId = 0u; /*设备所属联锁ID*/ + UINT8 localOhlNum = 0u; + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + index = *ii; + + chLocalCiId = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ + ohlNum = (UINT8)GetOhlCurSum(); + if ((0u < ohlNum) && (OHL_MAX_NUM > ohlNum)) + { + tempIndex = index; /*接触网数量*/ + index = index + 1u; + + for (jj = 0u; jj < ohlNum; jj++) + { + ohlId = GetOhlId(jj); /*接触网ID*/ + devBlongCiId = GetOhlBelongCiId(ohlId); /*获取设备所属联锁ID*/ + if ((0u != ohlId) && (0u != chLocalCiId) && (chLocalCiId == devBlongCiId)) + { + ShortToChar(ohlId, &ciToXianDiDataBuffer[index]); /*接触网 id*/ + index += 2u; + + ohlPowerState = GetOhlPowerState(ohlId); /*接触网状态*/ + ciToXianDiDataBuffer[index++] = ohlPowerState; + + ohlBypass = GetOhlBypassFlag(ohlId); /*接触网旁路状态*/ + ciToXianDiDataBuffer[index++] = ohlBypass; + + localOhlNum++; + } + else + { + /*不处理*/ + } + } + + ciToXianDiDataBuffer[tempIndex] = localOhlNum;/*接触网数量*/ + } + else + { + /*不处理*/ + } + + *ii = index; + } + else + { + /*入参检查失败,不处理*/ + } +} + +/* +* 功能描述:组ECS自动触发状态到ATS +* 参数说明:UINT8* ciToXianDiDataBuffer 存放信息的buffer(出参) +* UINT16* ii 偏移量(出参) +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void PackECSStateToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 index = 0U; + UINT8 cEcsState = 0U; + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + index = *ii; + cEcsState = GetEcsAutoTrigState(1U); /*DSN当前仅一个控区、一个ECS,默认使用ID为1的ECS*/ + + ciToXianDiDataBuffer[index] = cEcsState; /*组ECS自动触发状态*/ + index++; + + *ii = index; + } + else + { + /*入参检查失败,不处理*/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h index d8b589c..a4ffa33 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h @@ -408,6 +408,26 @@ UINT8 GetOcPscConfirmFlag(UINT8 index); */ void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii); +/* +* 功能描述: 组接触网信息到ATS +* 参数说明:入参 +* UINT8* ciToXianDiDataBuffer 存放信息的buffer +* UINT16* ii 偏移量 +* 出参 +* 无 +* 返回值 : 无 +*/ +void PackOhlDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii); + +/* +* 功能描述:组ECS自动触发状态到ATS +* 参数说明:UINT8* ciToXianDiDataBuffer 存放信息的buffer(出参) +* UINT16* ii 偏移量(出参) +* 返 回 值:无 +* Created By LQ 2026.01.23 +*/ +void PackECSStateToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c index d07fbdb..3ce4fec 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c @@ -16,6 +16,7 @@ #include "dsuRsspFunc.h" #include "protclStruct.h" #include "../QueryFiles/dquCIInterFace.h" +#include "AxisAssertDataPrepare.h" #define PHY_SEC_RESET_CMD (0x0DU) /*直接复位命令码*/ #define PHY_SEC_PRE_RESET_CMD (0x0EU) /*预复位命令码*/ @@ -26,6 +27,7 @@ AxisToCiDataStruct axisToCiDataStru[AXIS_TO_CI_SUM_MAX] = {0u}; /*Axis到CI数据帧结构体*/ static DSU_RSSP_INFO_STRU_WL dsuRsspInfo = { 0 }; /*RSSPI查询数据信息*/ +AxisSecClassDataStruct gAxisSecClassData = { 0U }; /*计轴区段分类数据*/ static UINT8 GalHeadCheck(const UINT32 localEtcsId, const UINT32 remoteEtcsId, const UINT16 devInterfaceType, const UINT8 prtrlVer, const UINT32 dataVer, HLHTGALInfoStruct* pMICommonPackage, UINT32* pErrorCode); static UINT8 GetRsspiAddr(const UINT16 locTypeId, const UINT16 oppTypeId, UINT16* locRsspiAddr, UINT16* oppRsspiAddr); @@ -1304,4 +1306,231 @@ UINT8 GetInAxlePhySecIdx(const UINT8 chAxleId, const UINT16 wIndexInAxle, UINT8* } return ret; +} + +/* +* 功能描述: 初始化计轴区段分类数据 +* 参数说明: +* 返回值 : CI_ERROR: 初始化失败 +* CI_SUCCESS: 初始化成功 +* by cgh 20260316 +*/ +UINT8 InitAxisSecClassData(void) +{ + UINT8 chReval = CI_ERROR; + UINT8 chDeviceSum =0U; /*获取通信Axis设备总数*/ + UINT8* szDeviceIdBuf = NULL; /*获取通信Axis设备ID数组*/ + AxisToCiDataStruct* CollAxisDataStru = NULL; /*计轴通信采集数据*/ + UINT16 wPhySecId = 0U; /*物理区段ID*/ + UINT8 chPhySecRelAcNum = 0U; /*物理区段关联的计轴区段数目*/ + UINT16* szPhySecRelAcId = NULL; /*物理区段关联计轴区段ID数组*/ + UINT16 ii = 0U; /*物理区段ID下标*/ + UINT8 chAxisSecIndex = 0U; /*计轴区段索引*/ + UINT8 chAxisSecCbtcProperty = 0U; /*计轴区段CBTC属性*/ + UINT8 chAdjacentSecTypeCheck = 0U; /*相邻区段类型检查*/ + + chDeviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); /*获取通信Axis设备总数*/ + szDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*获取通信Axis设备ID数组*/ + CollAxisDataStru = GetCollAxisDataStruct();; /*计轴通信采集数据*/ + + /*目前只初始化RC和一个计轴系统通信的场景*/ + if (1U == chDeviceSum) + { + /*数据防空*/ + if ((NULL != szDeviceIdBuf) && (NULL != CollAxisDataStru)) + { + chReval = CI_SUCCESS; + /*遍历计轴管辖的区段*/ + for (ii = 0U; ii < (UINT16)(CollAxisDataStru[szDeviceIdBuf[0]].SectionSum); ii++) + { + wPhySecId = CollAxisDataStru[szDeviceIdBuf[0]].axisDataStr[ii].PhySecId; + chPhySecRelAcNum = GetPAxisSectionSum(wPhySecId); + szPhySecRelAcId = GetPAxisSectionIdBuf(wPhySecId); + + /*数组防空*/ + if (NULL != szPhySecRelAcId) + { + /*遍历当前物理区段关联的计轴区段*/ + for (chAxisSecIndex = 0U; chAxisSecIndex < chPhySecRelAcNum; chAxisSecIndex++) + { + /* 第一步,添加集合A数据:计轴管辖的所有计轴区段数据*/ + if (gAxisSecClassData.chElementANum < CI_INCLUDE_AXIS_MAX_SUM) + { + gAxisSecClassData.szElementASecId[gAxisSecClassData.chElementANum] = szPhySecRelAcId[chAxisSecIndex]; + gAxisSecClassData.chElementANum++; + + chAxisSecCbtcProperty = GetAxisSecCbtcProperty(szPhySecRelAcId[chAxisSecIndex]); + + /*第二步,添加集合B数据:计轴管辖的所有具备CBTC属性的计轴区段数据*/ + if (AXIS_SEC_CBTC_PROPERTY_YES == chAxisSecCbtcProperty) + { + gAxisSecClassData.szElementBSecId[gAxisSecClassData.chElementBNum] = szPhySecRelAcId[chAxisSecIndex]; + gAxisSecClassData.chElementBNum++; + + chAdjacentSecTypeCheck = AxisAdjacentSecTypeCheck(szPhySecRelAcId[chAxisSecIndex]); + + /*第三步,添加集合C数据:计轴管辖的所有具备CBTC属性中不为联络线及非CBTC属性区段相邻区段的计轴区段数据*/ + if (CI_SUCCESS == chAdjacentSecTypeCheck) + { + gAxisSecClassData.szElementCSecId[gAxisSecClassData.chElementCNum] = szPhySecRelAcId[chAxisSecIndex]; + gAxisSecClassData.chElementCNum++; + } + else + { + /*不添加*/ + ; + } + + } + else + { + /*不添加*/ + ; + } + + } + else + { + /*初始化失败*/ + chReval = CI_ERROR; + break; + } + } + } + else + { + chReval = CI_ERROR; + } + + if (CI_ERROR == chReval) + { + break; + } + else + { + ; /*继续检查*/ + } + } + } + else + { + ; /*数据获取失败*/ + } + + debug_infor_printf((const)"\ngAxisSecClassData.chElementANum : %d\n", gAxisSecClassData.chElementANum); + for (ii = 0U; ii < gAxisSecClassData.chElementANum; ii++) + { + debug_infor_printf((const)"%d/", gAxisSecClassData.szElementASecId[ii]); + } + + debug_infor_printf((const)"\ngAxisSecClassData.chElementBNum : %d\n", gAxisSecClassData.chElementBNum); + for (ii = 0U; ii < gAxisSecClassData.chElementBNum; ii++) + { + debug_infor_printf((const)"%d/", gAxisSecClassData.szElementBSecId[ii]); + } + + debug_infor_printf((const)"\ngAxisSecClassData.chElementCNum : %d\n", gAxisSecClassData.chElementCNum); + for (ii = 0U; ii < gAxisSecClassData.chElementCNum; ii++) + { + debug_infor_printf((const)"%d/", gAxisSecClassData.szElementCSecId[ii]); + } + + } + else + { + chReval = CI_SUCCESS; + } + + return chReval; +} + +/** +* 函数功能:计轴区段相邻计轴区段类型检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 成功 +* CI_ERROR 0 失败 +* by cgh 20260309 +*/ +UINT8 AxisAdjacentSecTypeCheck(UINT16 wAxisSecId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chAcSameCnt = 0U; /*计轴前方计轴区段数目*/ + UINT16 szAcSameID[AC_MAXCNT_IN_SWITCH] = { 0U }; /*计轴前方计轴区段数组*/ + UINT8 chAcConvertCnt = 0U; /*计轴后方计轴区段数目*/ + UINT16 szAcConvertID[AC_MAXCNT_IN_SWITCH] = { 0U }; /*计轴后方计轴区段数组*/ + UINT8 chAcIndex = 0U; /*计轴区段索引*/ + UINT8 chLinkLine = 0U; /*计轴区段联络线属性*/ + UINT8 chAxisSecCbtcProperty = 0U; /*计轴区段CBTC属性*/ + + if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId)) + { + /* 查询前方计轴*/ + chAcSameCnt = aam_PrepareAdjacentAC(wAxisSecId, EMAP_SAME_DIR, szAcSameID); + + /** 查询后方计轴 */ + chAcConvertCnt = aam_PrepareAdjacentAC(wAxisSecId, EMAP_CONVER_DIR, szAcConvertID); + + if ((UINT8_MAX == chAcSameCnt) || (UINT8_MAX == chAcConvertCnt)) + { + chReval = CI_ERROR; + } + else + { + chReval = CI_SUCCESS; + /*遍历同向相邻计轴区段*/ + for (chAcIndex = 0U; chAcIndex < chAcSameCnt; chAcIndex++) + { + chLinkLine = aam_PrepareACIsLinkingAxle(szAcSameID[chAcIndex]); + chAxisSecCbtcProperty = GetAxisSecCbtcProperty(szAcSameID[chAcIndex]); + + /*相邻区段具备联络线属性或非CBTC属性*/ + if ((CI_SUCCESS == chLinkLine) || (AXIS_SEC_CBTC_PROPERTY_NO == chAxisSecCbtcProperty)) + { + chReval = CI_ERROR; + break; + } + else + { + ; /*相邻计轴区段不是联络线或具备CBTC属性,继续检查*/ + } + } + + if(CI_SUCCESS == chReval) + { + for (chAcIndex = 0U; chAcIndex < chAcConvertCnt; chAcIndex++) + { + chLinkLine = aam_PrepareACIsLinkingAxle(szAcConvertID[chAcIndex]); + chAxisSecCbtcProperty = GetAxisSecCbtcProperty(szAcConvertID[chAcIndex]); + + /*相邻区段具备联络线属性或非CBTC属性*/ + if ((CI_SUCCESS == chLinkLine) || (AXIS_SEC_CBTC_PROPERTY_NO == chAxisSecCbtcProperty)) + { + chReval = CI_ERROR; + break; + } + else + { + ; /*相邻计轴区段不是联络线或具备CBTC属性,继续检查*/ + } + + } + } + } + } + else + { + ; + } + return chReval; +} + +/* +* 功能描述: 获取计轴区段分类数据 +* 参数说明:无 +* 返回值 :计轴区段分类数据 +* by cgh 20260316 +*/ +AxisSecClassDataStruct GetAxisSecClassData(void) +{ + return gAxisSecClassData; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h index f2b7401..c24c582 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h @@ -70,8 +70,20 @@ typedef struct S_AxisToCiDataStruct AxisCollDataStruct axisDataStr[CI_INCLUDE_AXIS_MAX_SUM]; /*计轴区段信息结构体数组*/ }AxisToCiDataStruct; +/*计轴区段分类数据结构体*/ +typedef struct S_AxisSecClassDataStruct +{ + UINT8 chElementANum; /*元素A数量*/ + UINT16 szElementASecId[CI_INCLUDE_AXIS_MAX_SUM]; /*元素A数据*/ + UINT8 chElementBNum; /*元素B数量*/ + UINT16 szElementBSecId[CI_INCLUDE_AXIS_MAX_SUM]; /*元素B数据*/ + UINT8 chElementCNum; /*元素C数量*/ + UINT16 szElementCSecId[CI_INCLUDE_AXIS_MAX_SUM]; /*元素C数据*/ +} AxisSecClassDataStruct; + extern AxisToCiDataStruct axisToCiDataStru[AXIS_TO_CI_SUM_MAX]; /*Axis到CI数据帧结构体*/ +extern AxisSecClassDataStruct gAxisSecClassData; #ifdef __cplusplus @@ -140,6 +152,31 @@ UINT8 InitAxleToCiDataStru(void); */ UINT8 GetInAxlePhySecIdx(const UINT8 chAxleId, const UINT16 wIndexInAxle, UINT8* pAxleDataStrIdx); +/* +* 功能描述: 初始化计轴区段分类数据 +* 参数说明: +* 返回值 : CI_ERROR: 初始化失败 +* CI_SUCCESS: 初始化成功 +* by cgh 20260316 +*/ +UINT8 InitAxisSecClassData(void); + +/** +* 函数功能:计轴区段相邻计轴区段类型检查 +* 输入参数:UINT16 wAxisSecId 计轴区段ID +* 返回值:CI_SUCCESS 1 成功 +* CI_ERROR 0 失败 +* by cgh 20260309 +*/ +UINT8 AxisAdjacentSecTypeCheck(UINT16 wAxisSecId); + +/* +* 功能描述: 获取计轴区段分类数据 +* 参数说明:无 +* 返回值 :计轴区段分类数据 +* by cgh 20260316 +*/ +AxisSecClassDataStruct GetAxisSecClassData(void); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c index 2d30347..dd1f982 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c @@ -1079,9 +1079,9 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT else { wNeedCheckSwStaRouteSum = ShortFromChar(&dataBuf[wNeedCheckSwStaRouteIndex]);/*离去区段数量*/ - wNeedCheckSwStaRouteIndex += 2U;/*检查道岔进路数量*/ + wNeedCheckSwStaRouteIndex += 2U;/*离去区段数量*/ - wNeedCheckSwStaRouteIndex += wNeedCheckSwStaRouteSum * 8U; /*检查道岔进路数量数据*/ + wNeedCheckSwStaRouteIndex += wNeedCheckSwStaRouteSum * 3U; /*离去区段数据ID*/ } } @@ -1146,7 +1146,7 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT 2u + (spksNum * CICI_ONE_SPKS_LEN) + 2u + (virtualRelayNum * CICI_ONE_VIRTUAL_RELAY_LEN) + 2u + (floodGateNum * CICI_ONE_FLOODGATE_LEN)+ 2u + (overlapNum * CICI_ONE_OVERLAP_LEN) + 2u + (autoRouteNum * CICI_ONE_AUTOROUTE_LEN)+ 2u + (logsecLockStateNum * CICI_ONE_LOGSEC_LOCKSTATE_LEN) + logsecLockStateNum + (trainNum * 2U) + 2u + (wCfpInfoLen)+1U + cAreaSnowNum * 3U + - 1U + cAreaIteCutNum * 2U + 2U + cLeaveLogNum * 3U + 2U + wNeedCheckSwStaRouteSum * 8U + 2U + wNeedCheckProSwStaOlpNum * 3U + 2U + wProSwInfoLen; + 1U + cAreaIteCutNum * 2U + 2U + cLeaveLogNum * 3U + 2U + wNeedCheckSwStaRouteSum * 3U + 2U + wNeedCheckProSwStaOlpNum * 3U + 2U + wProSwInfoLen; if (stationLen == tmpStationLen) { reVal = CI_SUCCESS; @@ -1291,7 +1291,7 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT8 kk = 0u; UINT8 execRet = CI_ERROR; UINT8 reVal = CI_ERROR; - UINT8 chErrorType = 0U; + UINT16 routePhySecSum = 0u; RoutePhysicalSectionStruct* routePSSecStru = NULL; UINT16 preSecId = 0u; @@ -2942,36 +2942,30 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) ii += 2U; for (jj = 0u; jj < deviceSum; jj++) { - routeId = ShortFromChar(&dataBuf[ii]); - belongCiId = GetRouteBelongCiId(routeId); + deviceId = ShortFromChar(&dataBuf[ii]); + belongCiId = GetRouteBelongCiId(deviceId); if (belongCiId == localCiId) { ii += 2U; - chRouteState = GetRouteState(routeId); - chRouteStateFlag = GetRouteStateFlag(routeId); + chRouteState = GetRouteState(deviceId); + chRouteStateFlag = GetRouteStateFlag(deviceId); if ((ROUTE_STATE_XUANPAI == chRouteState) || (((ROUTE_STATE_AUTO_UNLOCK == chRouteState) || (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState)) && (ROUTE_STATE_FLAG_YES == chRouteStateFlag)) || (ROUTE_STATE_LEAD_XUANPAI == chRouteState)) { /*通信异步,只有进路所在联锁进路状态满足才根据相邻控区状态设置,防止本联锁已设置默认,相邻联锁异步传输了成功或者失败将默认误修改*/ - SetRouteApplySwitchCheckFlag(routeId, dataBuf[ii++]); - deviceId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - deviceFlag = dataBuf[ii++];/*类型*/ - deviceInfo = dataBuf[ii++];/*状态*/ - chErrorType = dataBuf[ii++];/*错误码*/ - SetRouteApplySwitchCheckErrorData(routeId, deviceId, deviceFlag, deviceInfo, chErrorType); + SetRouteApplySwitchCheckFlag(deviceId, dataBuf[ii++]); } else { - ii+=6U; + ii++; } } else { - ii += 8U;/*跳过不属于本联锁的进路,继续解析*/ + ii += 3U;/*跳过不属于本联锁的进路,继续解析*/ } } } @@ -3889,9 +3883,6 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt UINT16 wCiSendAreaIteCutIndex = 0U; ToCiAreaIteCutStruct* pCiSendAreaIteCut = NULL; UINT8 cCiSendAreaIteCutNum = 0U; /*本联锁发送给相邻联锁的区间ITE切除数量*/ - UINT8 devType = 0U; /*设备类型*/ - UINT8 devState = 0U; /*设备状态*/ - UINT8 chErrorType = 0U;/*失败类型*/ localCi = GetSystemParaLocalCiId(); startLockFlag = GetStartLockFlag(); @@ -4771,19 +4762,12 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt for (jj = 0u; jj < pTmpCiTransInfo->wNeedCheckSwitchStateRouteSum; jj++) { chRouteApplySwitchCheckFlag = GetRouteApplySwitchCheckFlag(pTmpCiTransInfo->szNeedCheckSwStateRouteBuf[jj]); - deviceId = GetRouteApplySwitchCheckErrorData(pTmpCiTransInfo->szNeedCheckSwStateRouteBuf[jj], &devType, &devState, &chErrorType); if ((ROUTE_APPLY_SWITCH_CHECK_NO == chRouteApplySwitchCheckFlag) || (ROUTE_APPLY_SWITCH_CHECK_YES == chRouteApplySwitchCheckFlag)) { ;/*进路办理道岔检查标志是成功或者失败需要反馈给进路所在联锁*/ ShortToChar(pTmpCiTransInfo->szNeedCheckSwStateRouteBuf[jj], &dataFrame[ii]);/*进路ID 2B*/ ii += 2U; dataFrame[ii++] = chRouteApplySwitchCheckFlag; - /*增加检查失败设备ID(2) 设备类型(1) 设备状态(1) 错误类型(1)*/ - ShortToChar(deviceId, &dataFrame[ii]);/*设备ID 2B*/ - ii += 2U; - dataFrame[ii++] = devType; - dataFrame[ii++] = devState; - dataFrame[ii++] = chErrorType; deviceSum++; } else @@ -9094,7 +9078,7 @@ static UINT16 PackCiToCiDataFrameEa(UINT8 dstCiId, UINT8* dataFrame) /* 类型 */ chPaType = GetPaTypeByIndex(chEaIndex); - if ((PA_TYPE_DA != chPaType) && (PA_TYPE_EA != chPaType)) + if ((PA_TYPE_DA_TG != chPaType) && (PA_TYPE_DA_TSM != chPaType) && (PA_TYPE_DA_WZX != chPaType) && (PA_TYPE_EA != chPaType)) { chPackFlag = CI_ERROR; } @@ -9195,7 +9179,7 @@ static UINT16 PackCiToCiDataFrameEa(UINT8 dstCiId, UINT8* dataFrame) /* 类型 */ chPaType = GetPaTypeByIndex(chEaIndex); - if ((PA_TYPE_DA != chPaType) && (PA_TYPE_EA != chPaType)) + if ((PA_TYPE_DA_TG != chPaType) && (PA_TYPE_DA_TSM != chPaType) && (PA_TYPE_DA_WZX != chPaType) && (PA_TYPE_EA != chPaType)) { chPackFlag = CI_ERROR; } @@ -10517,16 +10501,6 @@ UINT8 CheckCiToCiPhySecData(const UINT8* dataBuf, UINT16* index) { /*物理区段封锁类型*/ chPhySecFLockType = dataBuf[ii++]; - if ((PHY_SEC_FLOCK_TYPE_NONE == chPhySecFLockType) || (PHY_SEC_FLOCK_TYPE_SPKSCMD == chPhySecFLockType) - || (PHY_SEC_FLOCK_TYPE_SPKS == chPhySecFLockType) || (PHY_SEC_FLOCK_TYPE_CMD == chPhySecFLockType)) - { - retVal = CI_SUCCESS; /*继续解析*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"CheckCiToCiPhySecData wPhySecId %d Is Error: chPhySecFLockType Is %d\n", wPhySecId, chPhySecFLockType); - } } if (CI_SUCCESS == retVal) { @@ -13418,7 +13392,7 @@ UINT8 CheckCiToCiEaData(const UINT8* dataBuf, UINT16* index) { strEaTmp.chPaType = dataBuf[ii]; ii++; - if ((PA_TYPE_EA == strEaTmp.chPaType) || (PA_TYPE_DA == strEaTmp.chPaType)) + if ((PA_TYPE_EA == strEaTmp.chPaType) || (PA_TYPE_DA_TG == strEaTmp.chPaType) || (PA_TYPE_DA_TSM == strEaTmp.chPaType) || (PA_TYPE_DA_WZX == strEaTmp.chPaType)) { /*继续校验*/ } @@ -15670,10 +15644,6 @@ UINT8 CheckCiToCiNeedCheckSwRouteData(const UINT8* dataBuf, UINT16* index) UINT16 wNeedCheckRouteSum = 0U; /*需要检查进路数目*/ UINT32 wNeedCheckRouteId = 0U; /*需要检查进路ID*/ UINT8 chRouteApplySwitchCheckFlag = 0U;/*进路办理道岔检查标志*/ - UINT16 wErrorDevID = 0U; - UINT8 chErrorDevType = 0U; - UINT8 chErrorDevState = 0U; - UINT8 chErrorCodeType = 0U; if ((NULL != dataBuf) && (NULL != index)) { @@ -15696,99 +15666,12 @@ UINT8 CheckCiToCiNeedCheckSwRouteData(const UINT8* dataBuf, UINT16* index) ii++; if ((ROUTE_APPLY_SWITCH_CHECK_NO == chRouteApplySwitchCheckFlag) || (ROUTE_APPLY_SWITCH_CHECK_YES == chRouteApplySwitchCheckFlag)) { - /*设备ID 2 设备类型1 设备状态1 错误类型1*/ - wErrorDevID = ShortFromChar(&dataBuf[ii]); - ii += 2U; - chErrorDevType = dataBuf[ii++]; - chErrorDevState = dataBuf[ii++]; - chErrorCodeType = dataBuf[ii++]; - if (0U == wErrorDevID) - { - ;/*跳过类型、状态和错误类型检查*/ - } - else - { - switch (chErrorDevType) - { - case CI_DEVICE_TYPE_SWITCH: - if (SWITCH_SUM_MAX > wErrorDevID) - { - if ((ETYPE_SWT_POSTION_STATE == chErrorCodeType) - || (ETYPE_SWT_YLOCK_STATE == chErrorCodeType) - || (ETYPE_SWT_LOCK_STATUS == chErrorCodeType)) - { - ;/*通过*/ - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: Switchid: chErrorCodeType Is %d\n", chErrorCodeType); - } - } - else - { - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: Switchid: wErrorDevID Is %d\n", wErrorDevID); - retVal = CI_ERROR; - } - break; - case CI_DEVICE_TYPE_ROUTE: - if ((wNeedCheckRouteId != wErrorDevID) || (ETYPE_ROUTE_APPLY_SWITCH_MOVE != chErrorCodeType)) - { - retVal = CI_ERROR;/*错误类型*/ - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: Route: wErrorDevID Is %d\n", wErrorDevID); - } - break; - case CI_DEVICE_TYPE_LOGICSEC: - if (LOGIC_SECTION_SUM_MAX > wErrorDevID) - { - if (ETYPE_LOGSEC_LOCK_STATE == chErrorCodeType) - { - ;/*通过*/ - } - else - { - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: Logsec: chErrorDevState Is %d\n", chErrorCodeType); - retVal = CI_ERROR; - } - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: LogSec: wErrorDevID Is %d\n", wErrorDevID); - } - break; - case CI_DEVICE_TYPE_PHYSEC: - if (PHYSICAL_SECTION_SUM_MAX > wErrorDevID) - { - if ((ETYPE_PS_LOCK_STATE == chErrorCodeType) - ||(ETYPE_PS_JUMP_LOCK == chErrorCodeType) - ||(ETYPE_PS_MERGY_OCU_STATE == chErrorCodeType) - ||(ETYPE_PS_FLOCK_STATE == chErrorCodeType)) - { - ;/*通过*/ - } - else - { - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: PhySec: chErrorCodeType Is %d\n", chErrorCodeType); - retVal = CI_ERROR; - } - } - else - { - retVal = CI_ERROR; - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: PhySec: wErrorDevID Is %d\n", wErrorDevID); - } - break; - default: - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: chErrorDevType Is %d\n", chErrorDevType); - retVal = CI_ERROR;/*错误类型*/ - } - } + ; } else { /*返回失败*/ - debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: chRouteApplySwitchCheckFlag Is %d\n", chRouteApplySwitchCheckFlag); + debug_infor_printf((const)"CheckCiToCiLeaveLogSecData Is Error: chRouteApplySwitchCheckFlag Is %d\n", chRouteApplySwitchCheckFlag); retVal = CI_ERROR; } } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h index 929eb1b..c6910a4 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h @@ -100,7 +100,7 @@ #define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*取反*/ #define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*默认值*/ -#define CICI_VERSION ((UINT16)29) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2025.09.22*/ +#define CICI_VERSION ((UINT16)28) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2025.06.19*/ #define CICI_BEGIN_TO_STATION_LEN ((UINT16)16) /*从开始到站场长度止 cgh增加4个字节CI-CI校验信息*/ #define CICI_ONE_SWITCH_LEN ((UINT16)13) /*一个道岔数据长度*/ #define CICI_ONE_PHYSEC_LEN ((UINT16)23U)/*一个物理区段数据长度*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c index 0b4c017..94d9fab 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c @@ -26,12 +26,12 @@ #include "../DataManage/PlatDataManage.h" #include "dquCIInterFace.h" #include "NonAutoReturnDataManage.h" +#include "../ConnectOverride/ConnectOverrideDataMg.h" #include "2oo2InterfaceDataManage.h" PlatHeartDataStruct RecvHeartDataStru = { 0U }; /*平台心跳帧数据结构*/ PlatGPIODataStruct RecvPlatDataStruGPIO = { 0U };/*平台0x2D帧数据结构 GPIO采集状态*/ -PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance = { 0U };/*平台硬件采集故障容忍记录数据*/ /* * 功能描述: 信号机相关码位处理 @@ -273,33 +273,45 @@ UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da } break; case MASK_TYPE_SIGNAL_LIGHTSTATE:/*信号机亮灭状态码位*/ - if ((SIGNAL_SHOWCOLOUR_REDCLOSE == GetSignalCurColor(DeviceId)) - || (SIGNAL_SHOWCOLOUR_GREENCLOSE == GetSignalCurColor(DeviceId)) - || (SIGNAL_SHOWCOLOUR_YELLOWCLOSE == GetSignalCurColor(DeviceId)) - || (SIGNAL_SHOWCOLOUR_GREENYELLOWCLOSE == GetSignalCurColor(DeviceId)) - ) + tmpRtState = GetSignalLightExtinctState(DeviceId); + if (SIGNAL_LIGHT_EXTICT_STATE_NO == tmpRtState) { - SetMaskValue(MaskId, dataBuf); + SetMaskValue(MaskId, dataBuf);/*灭灯1*/ } else { - } break; case MASK_TYPE_SIGNAL_BREAK:/*信号机断丝码位*/ - if ((CI_PATTERN_FULL_ELECTRONIC == CiPattern) && (FUNC_SWITCH_OFF == chDsnLinSwitch))/*全电子联锁*/ + if (CI_PATTERN_FULL_ELECTRONIC == CiPattern)/*全电子联锁*/ { - getState = GetSignalCurColor(DeviceId); /*OC通信中断未设置断丝标志但信号机颜色为红断*/ - chDsFlag = GetSignalDsBreakFlag(DeviceId); - if ((SIGNAL_DS_BREAK_YES == chDsFlag)||(SIGNAL_SHOWCOLOUR_REDBREAK == getState)) + if (FUNC_SWITCH_ON == chDsnLinSwitch) /* DSN */ { - ; /*0为断丝*/ + chDsFlag = GetSignalDsBreakFlag(DeviceId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) /* 红灯断丝 */ + { + ; /*0为断丝*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } } else { - SetMaskValue(MaskId, dataBuf); + getState = GetSignalCurColor(DeviceId); /*OC通信中断未设置断丝标志但信号机颜色为红断*/ + chDsFlag = GetSignalDsBreakFlag(DeviceId); + if ((SIGNAL_DS_BREAK_YES == chDsFlag) || (SIGNAL_SHOWCOLOUR_REDBREAK == getState)) + { + ; /*0为断丝*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } } } + else { getState = GetSignalCurColor(DeviceId); @@ -492,6 +504,18 @@ UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da /*扣车旁路按钮未故障,码位值发0*/ } break; + + case MASK_TYPE_SIGNAL_CROSS_RED: + cDevState = GetTrainCrossRedSignalFlag(DeviceId); + if (SIGNAL_TRAIN_CROSS_RED_NO == cDevState) + { + SetMaskValue(MaskId, dataBuf); /*无列车闯红灯,码位值发1*/ + } + else + { + /*有列车闯红灯,码位值发0*/ + } + break; default: returnValue = CI_ERROR; break; @@ -514,6 +538,7 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da UINT8 returnValue = CI_SUCCESS;/*返回值默认成功*/ UINT8 switchLockStatus = 0U; UINT8 switchCurPosition = 0U; + UINT8 switchDsnConnectAttr = CI_ERROR; UINT8 switchLockState = 0U; UINT8 switchConnectDsState = 0U; UINT8 switchByPassState = 0U; @@ -523,7 +548,6 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da UINT16 indexFind = 0U; UINT8 devBelongThisLine = 0U; UINT8 switchBoardNum = 0U; - UINT8 switchStateCheck = CI_ERROR; switchLockStatus = GetSwitchLockStatus(DeviceId); @@ -728,8 +752,8 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da case MASK_TYPE_SWITCH_SUDDEN_JICHA: /*道岔静态红闪码位*/ switchCurPosition = GetSwitchJichaState(DeviceId); - - if (SWITCH_POSITION_SUDDEN_JICHA == switchCurPosition) + switchDsnConnectAttr = GetSwitchDsnConnectAttr(DeviceId); + if ((SWITCH_POSITION_SUDDEN_JICHA == switchCurPosition) && (CI_SUCCESS != switchDsnConnectAttr)) { ; /*有效值为0*/ } @@ -741,7 +765,9 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da case MASK_TYPE_SWITCH_JICHA: /*道岔静态红闪或动态红闪码位: 兼容28.0.0.14数据结构使用*/ switchCurPosition = GetSwitchJichaState(DeviceId); - if ((SWITCH_POSITION_SUDDEN_JICHA == switchCurPosition)|| (SWITCH_POSITION_DYNAMIC_JICHA == switchCurPosition)) + switchDsnConnectAttr = GetSwitchDsnConnectAttr(DeviceId); + if (((SWITCH_POSITION_SUDDEN_JICHA == switchCurPosition)|| (SWITCH_POSITION_DYNAMIC_JICHA == switchCurPosition)) + && (CI_SUCCESS != switchDsnConnectAttr)) { ; /*有效值为0*/ } @@ -1053,18 +1079,18 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8 } break; case MASK_TYPE_PHYSECTION_FLOCK: - /*封锁状态码位(ATS设置) 封锁发0 未封锁以及SPKS命令封锁发1*/ + /*封锁状态码位未封锁 以及SPKS命令封锁发1*/ phySecState = GetPhySecFLockState(DeviceId); if (PHYSICAL_SECTION_FLOCK_NO != phySecState) { phySecLockType = GetPhySecFLockType(DeviceId); - if (PHY_SEC_FLOCK_TYPE_SPKS != phySecLockType) + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD&phySecLockType)) { - /*除了SPKS封锁 都发0*/ + /*存在区段封锁 都发0*/ } else { - /*SPKS命令的封锁 发1*/ + /*其他发1*/ SetMaskValue(MaskId, dataBuf); } } @@ -1075,18 +1101,18 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8 } break; case MASK_TYPE_PHYSEC_FLOCK_SPKS: - /*封锁状态码位(SPKS开关设置 封锁发0 未封锁以及ATS封锁发1*/ + /*封锁状态码位(SPKS开关设置 封锁发0 未封锁以及其他封锁发1*/ phySecState = GetPhySecFLockState(DeviceId); if (PHYSICAL_SECTION_FLOCK_NO != phySecState) { phySecLockType = GetPhySecFLockType(DeviceId); - if (PHY_SEC_FLOCK_TYPE_CMD != phySecLockType) + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS&phySecLockType)) { - /*除了ATS封锁 都发0*/ + /*存在spks 发0*/ } else { - /*只有ATS命令的封锁 发1*/ + /*其他封锁 发1*/ SetMaskValue(MaskId, dataBuf); } } @@ -1196,10 +1222,12 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN UINT8 chJumpLockState = 0U;/*逻辑区段锁闭状态*/ UINT8 cLogArbState = 0U; /* 逻辑区段ARB状态 */ UINT8 chLogSecLockDirOpposedFlag = CI_ERROR;/*逻辑区段锁闭方向是否取反标志*/ - UINT8 cLogSpksFlockState = 0U; /* 逻辑区段SPKS封锁状态 */ UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*逻辑区段逻辑锁闭状态*/ UINT8 cLogSecLockDir = CI_SYSTEM_DIRECTION_NONE; /*逻辑区段锁闭方向*/ UINT8 chLogSecBelLogRouteSum = 0U;/*逻辑区段所属逻辑进路数目*/ + UINT8 chLogSecProhibitFAO = LOGSEC_PROHIBIT_FAO_NO; + UINT8 cLogFlockState = 0U; /* 逻辑区段封锁状态 */ + UINT8 cLogOverrideState = 0U; /* 逻辑区段旁路状态 */ switch (MaskType) { @@ -1366,11 +1394,11 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN break; case MASK_TYPE_LOGICSECTION_SPKS_FLOCK: /* 逻辑区段SPKS封锁状态 */ - cLogSpksFlockState = GetLogSecSpksFLockState(DeviceId); - /*区段SPKS封锁*/ - if (LOGIC_SECTION_SPKS_FLOCK_YES == cLogSpksFlockState) + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在全线区段封锁*/ + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS&cLogFlockState)) { - ; /*封锁发0*/ + ;/*封锁发0*/ } else { @@ -1378,6 +1406,100 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN SetMaskValue(MaskId, dataBuf); } + break; + case MASK_TYPE_LOGICSECTION_ALLSEC_FLOCK: + /* 逻辑区段全线区段封锁状态 */ + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在全线区段封锁*/ + if(SEC_FLOCK_TYPE_ALLFLOCK == (SEC_FLOCK_TYPE_ALLFLOCK&cLogFlockState)) + { + ;/*封锁发0*/ + } + else + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_APG_FLOCK: + /* 逻辑区段站台门异常打开封锁状态 */ + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在站台门异常打开封锁*/ + if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG&cLogFlockState)) + { + ;/*封锁发0*/ + } + else + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_PROHIBIT_FAO: + /* 逻辑区段禁止FAO运行状态 */ + chLogSecProhibitFAO = GetLogSecProhibitFAOState(DeviceId); + /*禁止FAO运行*/ + if (LOGSEC_PROHIBIT_FAO_YES == chLogSecProhibitFAO) + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_CMD_FLOCK: + /* 逻辑区段人工区段封锁状态 */ + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在对应封锁*/ + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD&cLogFlockState)) + { + ;/*封锁发0*/ + } + else + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_ESB_FLOCK: + /* 逻辑区段ESB区段封锁状态 */ + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在对应封锁*/ + if (SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB&cLogFlockState)) + { + ;/*封锁发0*/ + } + else + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_CESB_FLOCK: + /* 逻辑区段CESB区段封锁状态 */ + cLogFlockState = GetLogSecFLockType(DeviceId); + /*存在对应封锁*/ + if (SEC_FLOCK_TYPE_CESB == (SEC_FLOCK_TYPE_CESB&cLogFlockState)) + { + ;/*封锁发0*/ + } + else + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_LOGICSECTION_OVERRIDE: + /* 逻辑区段联络线旁路状态 */ + cLogOverrideState = GetOverrideStateByLogSecId(DeviceId); + /*存在对应联络线旁路*/ + if (CONNECT_OVERRIDE_STATE_YES == cLogOverrideState) + { + /*设置码位为1*/ + SetMaskValue(MaskId, dataBuf); + } + else + { + /*未设置发0*/ + } break; default: returnValue = CI_ERROR; @@ -1881,6 +2003,8 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮故障标志*/ UINT16 wEsbCollRelayId = 0U; /*ESB采集继电器ID*/ UINT8 cPsdExceptOpenState = 0U; /*屏蔽门异常打开状态*/ + UINT8 chBtnErrState = 0U;/*按钮故障状态*/ + UINT8 localCiType = GetLocalCiType();/*获取联锁类型*/ chRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId); virtualZDZFBelongCiId = GetVirtualZDZFBelongCiId(); @@ -1939,7 +2063,7 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data break; - case MASK_TYPE_ESP_STATE:/*站台紧急关闭按钮码位*/ + case MASK_TYPE_ESP_STATE:/*站台紧急关闭按钮状态码位*/ if ((ESB_STATE_VALID_NO == GetEsbState(DeviceId)) || (ESB_CUT_YES == GetEsbCutState(DeviceId))) { SetMaskValue(MaskId, dataBuf); @@ -2004,15 +2128,57 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data } break; case MASK_TYPE_ESP_PRESS_STATE: - wEsbCollRelayId = GetEsbRelayId(DeviceId); /*获取ESB采集继电器*/ - RelayCollState = GetRelayCollState(wEsbCollRelayId); /*获取ESB采集继电器状态*/ - if (RELAY_STATE_UP == RelayCollState) + if (CI_TYPE_SCX == localCiType) { - SetMaskValue(MaskId, dataBuf); /*ESB未按下,发1*/ + RelayCollState = GetEsbAutualState(DeviceId); + if (ESB_STATE_VALID_NO == RelayCollState) + { + SetMaskValue(MaskId, dataBuf); /*未按下1*/ + } + else + { + ;/*按下0*/ + } } else { - /*ESB按下,发0*/ + wEsbCollRelayId = GetEsbRelayId(DeviceId); /*获取ESB采集继电器*/ + RelayCollState = GetRelayCollState(wEsbCollRelayId); /*获取ESB采集继电器状态*/ + if (RELAY_STATE_UP == RelayCollState) + { + SetMaskValue(MaskId, dataBuf); /*ESB未按下,发1*/ + } + else + { + /*ESB按下,发0*/ + } + } + break; + case MASK_TYPE_ESS_STATE: + if (CI_TYPE_SCX == localCiType) + { + RelayCollState = GetEssState(DeviceId); + if (ESB_STATE_GO_FLAG == RelayCollState) + { + SetMaskValue(MaskId, dataBuf); /*去位1*/ + } + else + { + ;/*停位0*/ + } + } + else + { + wEsbCollRelayId = GetESSRelayId(DeviceId); /*获取ESS采集继电器*/ + RelayCollState = GetRelayCollState(wEsbCollRelayId); /*获取ESS采集继电器状态*/ + if (RELAY_STATE_UP == RelayCollState) + { + SetMaskValue(MaskId, dataBuf); /*去位*/ + } + else + { + /*ESB按下,发0*/ + } } break; case MASK_TYPE_PSD_STATE_ATS:/*站台屏蔽门状态码位;给ATS*/ @@ -2243,6 +2409,17 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data /*PSD异常打开,码位组0*/ } break; + case MASK_TYPE_PSD_MUTUALLOCK_BTNERR: /*站台屏蔽门旁路按钮粘连*/ + chBtnErrState = GetPsdMutualLockErrState(DeviceId); + if (PSD_BTN_ERROR_FLAG_YES == chBtnErrState) + { + SetMaskValue(MaskId, dataBuf); /*PSD旁路故障,码位组1*/ + } + else + { + /*PSD异常打开,码位组0*/ + } + break; default: returnValue = CI_ERROR; break; @@ -2439,6 +2616,7 @@ UINT8 GaragedoorMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8 * UINT8* dataBuf, 数据缓冲区 * 返回值 : 0: 码位处理失败 * 1: 码位处理成功 +* BY hh 2026.03.17 */ UINT8 FloodGateMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf) { @@ -2535,6 +2713,87 @@ UINT8 FloodGateMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* return returnValue; } + +/* +* 功能描述: 限速区段相关码位处理 +* 参数说明: UINT8 MaskType, 码位类型 +* UINT16 DeviceId, 设备ID +* UINT16 MaskId, 码位ID +* UINT8* dataBuf, 数据缓冲区 +* 返回值 : 0: 码位处理失败 +* 1: 码位处理成功 +* by hh 2026.03.17 +*/ +UINT8 SpeedLimitMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf) +{ + UINT8 returnValue = CI_ERROR;/*返回值默认失败*/ + UINT8 sPeedLimitState = FLAG_UNSET; /*临时变量:限速状态*/ + UINT16 Id = DeviceId; + + + switch (MaskType) + { + case MASK_TYPE_SPEEDLIMITSEC_STATE:/*CI-ATS限速区段临时限速设置码位*/ + { + /*临时限速区段状态有效*/ + sPeedLimitState = GetTSRSetFlag(Id); + if (FLAG_SL == sPeedLimitState) + { + + } + else + { + SetMaskValue(MaskId, dataBuf);/*未限速*/ + } + returnValue = CI_SUCCESS; + } + break; + case MASK_TYPE_SPEEDLIMITTF_STATE:/*CI-ATS限速区段台风限速设置码位*/ + { + /*台风限速状态有效*/ + sPeedLimitState = GetTFSRSetFlag(Id); + if (FLAG_SL == sPeedLimitState) + { + + } + else + { + SetMaskValue(MaskId, dataBuf);/*未限速*/ + } + returnValue = CI_SUCCESS; + } + break; + case MASK_TYPE_SPEEDLIMITTNR_STATE /*CI-ATS限速区段NR限速设置码位*/ + :/*CI-ATS限速区段NR限速设置码位*/ + { + SetMaskValue(MaskId, dataBuf); /*这版本没NR,都没有*/ + returnValue = CI_SUCCESS; + } + break; + case MASK_TYPE_SPEEDLIMITQX_STATE:/*CI-ATS限速区段全线临时限速设置码位*/ + { + /*全线限速状态有效 */ + sPeedLimitState = GetAllSRSetFlag(Id); + if (FLAG_SL == sPeedLimitState) + { + + } + else + { + SetMaskValue(MaskId, dataBuf);/*未限速*/ + } + returnValue = CI_SUCCESS; + } + break; + default: + returnValue = CI_ERROR; + break; + } + + return returnValue; +} + + /* * 功能描述: 生成码位 * 参数说明: const UINT8 localCiId, 本机联锁站ID @@ -2647,7 +2906,12 @@ UINT8 MaskPack(const UINT8 destSystemType, UINT8* dataBuf) returnValue = CI_ERROR; } break; - + case CI_DEVICE_TYPE_SPEEDLIMIT:/*限速区段相关码位*/ + if (CI_ERROR == SpeedLimitMaskManage(MaskType, DeviceId, MaskId, dataBuf)) + { + returnValue = CI_ERROR; + } + break; default: returnValue = CI_ERROR; break; @@ -4501,6 +4765,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf) UINT16 curCoup = 0U; UINT32 tempera = 0U; UINT8 flagEEPROM = 0U; + UINT32 ccuSyn = 0u;/*通控请求序列号*/ UINT32 crcRecv = 0U; /*接收到平台心跳帧*/ @@ -4542,6 +4807,9 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf) /*EEPROM存储检验*/ flagEEPROM = dataBuf[ii]; ii += 1u; + /*通控请求序列号*/ + ccuSyn = LongFromChar(&dataBuf[ii]); + ii += 4u; /*CRC校验码*/ crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/ ii += 4u; @@ -4551,7 +4819,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf) { /*计算CRC校验码,除长度2和CRC4*/ - crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 22U); + crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 26U); if (crcCheck == crcRecv) @@ -4642,6 +4910,7 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf) UINT8 boardSEBId = 0U;/*扩展板ID */ UINT16 dataLengthRcv = 0U; /*帧长度*/ + UINT32 sebSyn = 0u; /*串口请求序列号*/ UINT32 crcRecv = 0U; /*CRC校验码*/ UINT32 rcvCyc = 0U; /*周期号*/ /*接收到平台心跳帧*/ @@ -4665,17 +4934,20 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf) /*数据内容 3字节*/ ii += 5U; + /*串口请求序列号*/ + sebSyn = LongFromChar(&dataBuf[ii]); + ii += 4U; /*CRC校验码*/ crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/ ii += 4u; - /*长度校验*/ /*总长度16字节*/ + /*长度校验*/ /*总长度20字节*/ if (dataLengthRcv == ii - 2U) { /*计算CRC校验码,除长度2和CRC4*/ - crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 10U); + crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 14U); if (crcCheck == crcRecv) @@ -5136,9 +5408,62 @@ void PackCiToCimCollDiffData(void) {/*不处理*/ } - debug_infor_printf((const)"IO Compare Diff OCnum = %d\n", gDiffDataOcNum); - debug_out_array(0xAA, ciToCimDataBuffer, ii); - /*发送维护机*/ (void)DarkInfoPack(CIM_INFO_IO_COLL_DIFF_ALARM, ciToCimDataBuffer, ii); +} + +/* +* 功能描述: 组包发送CIM接触网信息 +* 参数说明: void +* 返回值 : 无 +*/ +void PackCiToCimOHLData(void) +{ + /*变量初始化*/ + UINT8 ciToCimDataBuffer[CI_TO_CIM_DATA_LEN_MAX] = { 0U }; + UINT8 ohlNum = 0u; /*接触网分区总数*/ + UINT16 ii = 0u; + UINT8 jj = 0u; + UINT16 tempIndex = 0u; + UINT16 ohlId = 0u; /*接触网分区ID*/ + UINT8 ohlPowerState = 0u; /*接触网状态*/ + UINT8 chLocalCiId = 0u; /*本地联锁ID*/ + UINT8 devBlongCiId = 0u; /*设备所属联锁ID*/ + UINT8 localOhlNum = 0u; + + ohlNum = (UINT8)GetOhlCurSum(); + if ((0u < ohlNum) && (OHL_MAX_NUM > ohlNum)) + { + chLocalCiId = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ + tempIndex = ii; /*接触网数量*/ + ii = ii + 1u; + + for (jj = 0u; jj < ohlNum; jj++) + { + ohlId = GetOhlId(jj); /*接触网ID*/ + devBlongCiId = GetOhlBelongCiId(ohlId); /*获取设备所属联锁ID*/ + if ((0u != ohlId) && (0U != chLocalCiId) && (chLocalCiId == devBlongCiId)) + { + ShortToChar(ohlId, &ciToCimDataBuffer[ii]); /*接触网 id*/ + ii += 2u; + + ohlPowerState = GetOhlPowerState(ohlId); /*接触网状态*/ + ciToCimDataBuffer[ii++] = ohlPowerState; + + localOhlNum++; + } + else + { + /*不处理*/ + } + } + ciToCimDataBuffer[tempIndex] = localOhlNum;/*接触网数量*/ + } + else + { + /*不处理*/ + } + + /*发送维护机*/ + (void)DarkInfoPack(CIM_INFO_OHL_POWER_ALARM, ciToCimDataBuffer, ii); } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h index 1d00ae4..5cc80ce 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h @@ -44,6 +44,8 @@ #include "../ParsePack/ParsePackOcData.h" #include "../DataManage/PlatDataManage.h" #include "../IO/DeviceRelayDataProcess.h" +#include "SpeedLimitSecDataManage.h" + #ifdef __cplusplus extern "C" { @@ -60,7 +62,7 @@ extern "C" { extern PlatHeartDataStruct RecvHeartDataStru; extern PlatGPIODataStruct RecvPlatDataStruGPIO; - extern PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance; + /* * 功能描述: 信号机相关码位处理 * 参数说明: UINT8 MaskType, 码位类型 @@ -223,6 +225,18 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId); */ UINT8 FloodGateMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf); +/* +* 功能描述: 限速区段相关码位处理 +* 参数说明: UINT8 MaskType, 码位类型 +* UINT16 DeviceId, 设备ID +* UINT16 MaskId, 码位ID +* UINT8* dataBuf, 数据缓冲区 +* 返回值 : 0: 码位处理失败 +* 1: 码位处理成功 +* BY hh 2026.03.17 +*/ +UINT8 SpeedLimitMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf); + /* * 功能描述: 组包发送CIM通信状态信息 * 参数说明: void @@ -386,6 +400,13 @@ void PackCiToCimFlyProtectData(void); */ void PackCiToCimCollDiffData(void); +/* +* 功能描述: 组包发送CIM接触网信息 +* 参数说明: void +* 返回值 : 无 +*/ +void PackCiToCimOHLData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h index 0e21919..53770d8 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h @@ -49,7 +49,7 @@ #define ZC_TO_CI_EB_MAX ((UINT16)254) /*ZC发送CI的区间紧急制动区段数量最大值*/ /*TIOC 和 TMC*/ -#define TIOC_TO_TMC_DATA_LEN_MAX ((UINT16)3000) /*联锁到ZC组包数据最大值*/ +#define TIOC_TO_TMC_DATA_LEN_MAX ((UINT16)3000) /*RC到TMC组包数据最大值*/ /*CI 和 LEU*/ #define LEU_TO_CI_SUM_MAX ((UINT16)9) /*定义联锁可以通信的LEU最大值*/ @@ -104,6 +104,7 @@ #define CIM_INFO_UNIT_ALARM ((UINT16)0x2011) /*发送CIM执行单元报警*/ #define CIM_INFO_FLYPROTECT_ALARM ((UINT16)0x2012) /*发送CIM飞车宕机报警*/ #define CIM_INFO_IO_COLL_DIFF_ALARM ((UINT16)0x2013) /*发送CIM IO双系采集不一致报警*/ +#define CIM_INFO_OHL_POWER_ALARM ((UINT16)0x2014) /*发送CIM 接触网供电状态报警*/ #define CI_AND_OTHER_TRANSMIT_GOOD ((UINT8)0x55) /*CI与其他系统双网通信正常*/ #define CI_AND_OTHER_TRANSMIT_LINK ((UINT8)0x5A) /*CI与其他系统单网通信正常*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c index a9fadef..2fbeb96 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c @@ -30,6 +30,37 @@ AtsMsgCfmStru g_strSndAtsCfmFst = { 0U }; /* AtsMsgCfmStru g_strSndAtsEaCfmFst = { 0U }; /*第二个ATS的取消区间疏散首次确认*/ AtsMsgCfmStru g_strSndAtsWlbCfmFst = { 0U }; /*第二个ATS的设置/取消全线列车紧急制动首次确认*/ AtsMsgCfmStru g_strSndAtsDaCfmFst = { 0U }; /*第二个ATS的取消脱轨防护区首次确认*/ +AtsMsgCfmStru g_strSndAtsAllFlockCfmFst = { 0U }; /*第二个ATS的设置/取消全线区段封锁首次确认*/ + +AtsAllSecFlockMsgStru g_strAtsAllFlockMsgFst = { 0 }; /*设置/取消全线区段封锁首次消息*/ +AtsMsgCfmStru g_strAtsAllFlockCfmFst = { 0u }; /*设置/取消全线区段封锁首次确认*/ +AtsAllSecFlockMsgStru g_strAtsAllFlockMsgSnd = { 0u }; /*取消全线区段封锁再次消息*/ +AtsMsgCfmStru g_strAtsAllFlockCfmSnd = { 0u }; /*取消全线区段封锁再次确认*/ + +AtsCESBCancleMsgStru g_strAtsCesbMsgFst = { 0 }; /*取消全线CESB封锁首次消息*/ +AtsMsgCfmStru g_strAtsCesbCfmFst = { 0u }; /*取消全线CESB封锁首次确认*/ +AtsCESBCancleMsgStru g_strAtsCesbMsgSnd = { 0u }; /*取消全线CESB封锁再次消息*/ +AtsMsgCfmStru g_strAtsCesbCfmSnd = { 0u }; /*取消全线CESB封锁再次确认*/ +AtsMsgCfmStru g_strSndAtsCesbCfmFst = { 0U }; /*第二个ATS的取消CESB封锁首次确认*/ + +AtsJieFengJieSuoMsgStru g_JieFengJieSuoMsgFst = { 0u }; /*全站解封解锁首次消息*/ +AtsMsgCfmStru g_strAtsJieFengJieSuoCfmFst = { 0u }; /*全站解封解锁首次确认*/ +AtsJieFengJieSuoMsgStru g_JieFengJieSuoMsgSnd = { 0u }; /*全站解封解锁再次消息*/ +AtsMsgCfmStru g_strAtsJieFengJieSuoCfmSnd = { 0u }; /*全站解封解锁再次确认*/ +AtsMsgCfmStru g_SndAtsJieFengJieSuoCfmFst = { 0U }; /*第二个ATS的解封解锁首次确认*/ + + +AtsSwitchForceMsgStru g_SwitchForceMsgFst = { 0u }; /*道岔强转首次消息*/ +AtsMsgCfmStru g_SwitchForceCfmFst = { 0u }; /*道岔强转首次确认*/ +AtsSwitchForceMsgStru g_SwitchForceMsgSnd = { 0u }; /*道岔强转再次消息*/ +AtsMsgCfmStru g_SwitchForceCfmSnd = { 0u }; /*道岔强转再次确认*/ +AtsMsgCfmStru g_SndAtsSwitchForceCfmFst = { 0U }; /*第二个ATS的道岔强转首次确认*/ + +AtsPhyPreResetMsgStru g_PhyPreResetMsgFst = { 0u }; /*预复位首次消息*/ +AtsMsgCfmStru g_PhyPreResetCfmFst = { 0u }; /*预复位首次确认*/ +AtsPhyPreResetMsgStru g_PhyPreResetMsgSnd = { 0u }; /*预复位再次消息*/ +AtsMsgCfmStru g_PhyPreResetCfmSnd = { 0u }; /*预复位再次确认*/ +AtsMsgCfmStru g_SndAtsPhyPreResetCfmFst = { 0U }; /*第二个ATS的预复位首次确认*/ /** * @brief 解析网关数据帧 @@ -66,7 +97,10 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) UINT8 cDevNum = 0U; UINT16 wDevId = 0U; UINT8 szCrcTmp[1024] = { 0U }; - + UINT8 chCmdType= 0U; + UINT32 dwSiwtchId = 0U; + UINT32 dwPhySecHlhtId = 0U; + if ((NULL != dataBuf) && (0u < dataLength)) { chLocalId = GetSystemParaLocalCiId(); @@ -116,6 +150,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) { for (chMsgIndex = 0u; chMsgIndex < chMsgNum; chMsgIndex++) { + jj = 0U; chMsgId = dataBuf[ii++]; wMsgLen = ShortFromChar(&dataBuf[ii]); ii += 2U; @@ -1172,13 +1207,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) break; } - case MSG_TYPE_DA_CANCLE_FIRST:/* 脱轨防护区取消首次消息 */ + case MSG_TYPE_DA_CANCLE_FIRST:/* 列车异常状态防护区取消首次消息 */ { wIndex = ShortFromChar(&dataBuf[ii + 2U]); if ((FLAG_SET != g_strAtsDaMsgFst.chFlag) || (g_strAtsDaMsgFst.wIndex == wIndex)) { - /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的取消脱轨防护首次消息*/ - g_strAtsDaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到取消脱轨防护区消息的周期号 */ + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的取消列车异常状态防护首次消息*/ + g_strAtsDaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到取消列车异常状态防护区消息的周期号 */ g_strAtsDaMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ if (0U < g_strAtsDaMsgFst.chAtsId) { @@ -1225,7 +1260,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } if (CI_SUCCESS == chRtn) { - g_strAtsDaMsgFst.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* 脱轨列车互联互通编号 */ + g_strAtsDaMsgFst.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* 列车互联互通编号 */ ii += 4u; if ((0u < g_strAtsDaMsgFst.dwDaTrainId) && (UINT32_MAX > g_strAtsDaMsgFst.dwDaTrainId)) { @@ -1250,7 +1285,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) g_strAtsDaMsgFst.chType = dataBuf[ii];/* 类型 */ ii++; - if (ATS_DA_CMD_TYPE_CANCEL == g_strAtsDaMsgFst.chType) + if ((PA_TYPE_DA_TG == g_strAtsDaMsgFst.chType) || (PA_TYPE_DA_TSM == g_strAtsDaMsgFst.chType) || (PA_TYPE_DA_WZX == g_strAtsDaMsgFst.chType)) { ; } @@ -1284,7 +1319,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } else { - /*解析第二个ATS下发的取消脱轨防护首次消息*/ + /*解析第二个ATS下发的取消列车异常状态防护首次消息*/ cAtsId = dataBuf[ii]; /* ATS编号 */ ii++; if (0U < cAtsId) @@ -1300,7 +1335,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) ii++; if (cAtsSendRcId == chLocalId) { - dwTrainHlhtId = LongFromChar(&dataBuf[ii]); /* 脱轨列车互联互通编号 */ + dwTrainHlhtId = LongFromChar(&dataBuf[ii]); /* 列车互联互通编号 */ ii += 4U; if ((0U < dwTrainHlhtId) && (UINT32_MAX > dwTrainHlhtId)) { @@ -1309,7 +1344,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) cCmdType = dataBuf[ii]; /* 类型 */ ii++; - if (ATS_DA_CMD_TYPE_CANCEL == cCmdType) + if ((PA_TYPE_DA_TG == cCmdType) || (PA_TYPE_DA_TSM == cCmdType) || (PA_TYPE_DA_WZX == cCmdType)) { cLineAttr = dataBuf[ii]; /* 线路属性 */ ii++; @@ -1360,6 +1395,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) g_strSndAtsDaCfmFst.chStation = cStation; g_strSndAtsDaCfmFst.wIndex = wIndex; g_strSndAtsDaCfmFst.dwTime = dwTime; + g_strSndAtsDaCfmFst.chDaType = cCmdType; g_strSndAtsDaCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ /*计算CRC*/ @@ -1386,7 +1422,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } break; } - case MSG_TYPE_DA_CANCLE_SECOND:/* 脱轨防护区取消二次消息 */ + case MSG_TYPE_DA_CANCLE_SECOND:/* 列车异常状态防护区取消二次消息 */ { g_strAtsDaMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ g_strAtsDaMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ @@ -1435,7 +1471,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } if (CI_SUCCESS == chRtn) { - g_strAtsDaMsgSnd.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* 疏散列车互联互通编号 */ + g_strAtsDaMsgSnd.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* 列车互联互通编号 */ ii += 4u; if ((0u < g_strAtsDaMsgSnd.dwDaTrainId) && (UINT32_MAX > g_strAtsDaMsgSnd.dwDaTrainId)) { @@ -1459,7 +1495,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) g_strAtsDaMsgSnd.chType = dataBuf[ii];/* 命令类型 */ ii++; - if (ATS_DA_CMD_TYPE_CANCEL == g_strAtsDaMsgSnd.chType) + if ((PA_TYPE_DA_TG == g_strAtsDaMsgSnd.chType) || (PA_TYPE_DA_TSM == g_strAtsDaMsgSnd.chType) || (PA_TYPE_DA_WZX == g_strAtsDaMsgSnd.chType)) { ; } @@ -1505,11 +1541,1203 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) break; } - default: + case MSG_TYPE_ALLSECFLOCK_CMD_FIRST: /* 全线区段封锁一次命令 */ { - chRtn = CI_ERROR; + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsAllFlockMsgFst.chFlag) || (g_strAtsAllFlockMsgFst.wIndex == wIndex)) + { + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的全线区段封锁首次消息*/ + g_strAtsAllFlockMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到全线列车全线区段封锁命令周期号 */ + g_strAtsAllFlockMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_strAtsAllFlockMsgFst.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgFst.chStation = dataBuf[ii++]; /* 车站编号 */ + g_strAtsAllFlockMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_strAtsAllFlockMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgFst.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_strAtsAllFlockMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, g_strAtsAllFlockMsgFst.chTiocId); + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4u; + + cCmdType = dataBuf[ii];/* 命令类型 */ + ii++; + + if ((SEC_ALLFLOCK_CMD_SET == cCmdType) || (SEC_ALLFLOCK_CMD_CANCLE == cCmdType)) + { + g_strAtsAllFlockMsgFst.chFlag = FLAG_SET; + g_strAtsAllFlockMsgFst.chType = cCmdType; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Cmd Type[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, cCmdType); + } + } + else + { + ; + } + } + else + { + /*解析第二个ATS下发的全线区段封锁首次消息*/ + cAtsId = dataBuf[ii]; /* ATS编号 */ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* 车站编号 */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC编号 */ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4U; + + cCmdType = dataBuf[ii]; /* 命令类型 */ + ii++; + if ((SEC_ALLFLOCK_CMD_SET == cCmdType) || (SEC_ALLFLOCK_CMD_CANCLE == cCmdType)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Cmd Type[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, cCmdType); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_ALLSECFLOCK_CMD_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strSndAtsAllFlockCfmFst.chFlag = FLAG_SET; + g_strSndAtsAllFlockCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsAllFlockCfmFst.chStation = cStation; + g_strSndAtsAllFlockCfmFst.wIndex = wIndex; + g_strSndAtsAllFlockCfmFst.dwTime = dwTime; + g_strSndAtsAllFlockCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ + + /*计算CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]);/* Work_Station_Index */ + jj += 2U; + LongToChar(dwTime, &szCrcTmp[jj]);/*时间*/ + jj += 4U; + szCrcTmp[jj] = cCmdType;/*设置或取消类型*/ + jj++; + g_strSndAtsAllFlockCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } break; } + case MSG_TYPE_ALLSECFLOCK_CMD_SECOND: /* 全线区段封锁二次命令 */ + { + g_strAtsAllFlockMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ + g_strAtsAllFlockMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_strAtsAllFlockMsgSnd.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgSnd.chStation = dataBuf[ii++]; /* 车站编号 */ + g_strAtsAllFlockMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_strAtsAllFlockMsgSnd.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgSnd.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_strAtsAllFlockMsgSnd.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgSnd.dwTime = LongFromChar(&dataBuf[ii]); /* 下发时间 */ + ii += 4u; + + g_strAtsAllFlockMsgSnd.chType = dataBuf[ii];/* 命令类型 */ + ii++; + + if (SEC_ALLFLOCK_CMD_CANCLE == g_strAtsAllFlockMsgSnd.chType) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsAllFlockMsgSnd.dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC值 */ + ii += 4u; + + g_strAtsAllFlockMsgSnd.chFlag = FLAG_SET; + } + else + { + ; + } + + break; + } + case MSG_TYPE_CESBFLOCK_CMD_FIRST: /* 全线CESB封锁取消一次命令 */ + { + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsCesbMsgFst.chFlag) || (g_strAtsCesbMsgFst.wIndex == wIndex)) + { + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的全线CESB封锁首次消息*/ + g_strAtsCesbMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到全线列车全线CESB封锁命令周期号 */ + g_strAtsCesbMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_strAtsCesbMsgFst.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgFst.chStation = dataBuf[ii++]; /* 车站编号 */ + g_strAtsCesbMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_strAtsCesbMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgFst.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_strAtsCesbMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_CESBFLOCK_CMD_FIRST, g_strAtsCesbMsgFst.chTiocId); + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4u; + g_strAtsCesbMsgFst.chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + /*解析第二个ATS下发的全线CESB封锁首次消息*/ + cAtsId = dataBuf[ii]; /* ATS编号 */ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* 车站编号 */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC编号 */ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4U; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_CESBFLOCK_CMD_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_CESBFLOCK_CMD_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_CESBFLOCK_CMD_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strSndAtsCesbCfmFst.chFlag = FLAG_SET; + g_strSndAtsCesbCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsCesbCfmFst.chStation = cStation; + g_strSndAtsCesbCfmFst.wIndex = wIndex; + g_strSndAtsCesbCfmFst.dwTime = dwTime; + g_strSndAtsCesbCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ + + /*计算CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]);/* Work_Station_Index */ + jj += 2U; + LongToChar(dwTime, &szCrcTmp[jj]);/*时间*/ + jj += 4U; + szCrcTmp[jj] = cCmdType;/*设置或取消类型*/ + jj++; + g_strSndAtsCesbCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } + break; + } + case MSG_TYPE_CESBFLOCK_CMD_SECOND: /* 全线区段CESB封锁取消二次命令 */ + { + g_strAtsCesbMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ + g_strAtsCesbMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_strAtsCesbMsgSnd.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgSnd.chStation = dataBuf[ii++]; /* 车站编号 */ + g_strAtsCesbMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_strAtsCesbMsgSnd.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgSnd.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_strAtsCesbMsgSnd.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgSnd.dwTime = LongFromChar(&dataBuf[ii]); /* 下发时间 */ + ii += 4u; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsCesbMsgSnd.dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC值 */ + ii += 4u; + + g_strAtsCesbMsgSnd.chFlag = FLAG_SET; + } + else + { + ; + } + + break; + } + + case MSG_JIEFENGJIESUO_CMD_FIRST:/*全线解封解锁一次命令*/ + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_JieFengJieSuoMsgFst.chFlag) || (g_JieFengJieSuoMsgFst.wIndex == wIndex)) + { + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的首次消息*/ + g_JieFengJieSuoMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到命令周期号 */ + g_JieFengJieSuoMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_JieFengJieSuoMsgFst.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgFst.chStation = dataBuf[ii++]; /* 车站编号 */ + g_JieFengJieSuoMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_JieFengJieSuoMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgFst.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_JieFengJieSuoMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_JIEFENGJIESUO_CMD_FIRST, g_JieFengJieSuoMsgFst.chTiocId); + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4u; + g_JieFengJieSuoMsgFst.chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + /*解析第二个ATS下发的首次消息*/ + cAtsId = dataBuf[ii]; /* ATS编号 */ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* 车站编号 */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC编号 */ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4U; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_JIEFENGJIESUO_CMD_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_JIEFENGJIESUO_CMD_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_JIEFENGJIESUO_CMD_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_SndAtsJieFengJieSuoCfmFst.chFlag = FLAG_SET; + g_SndAtsJieFengJieSuoCfmFst.chTiocId = cAtsSendRcId; + g_SndAtsJieFengJieSuoCfmFst.chStation = cStation; + g_SndAtsJieFengJieSuoCfmFst.wIndex = wIndex; + g_SndAtsJieFengJieSuoCfmFst.dwTime = dwTime; + g_SndAtsJieFengJieSuoCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ + + /*计算CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]);/* Work_Station_Index */ + jj += 2U; + LongToChar(dwTime, &szCrcTmp[jj]);/*时间*/ + jj += 4U; + g_SndAtsJieFengJieSuoCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } + + break; + + case MSG_JIEFENGJIESUO_CMD_SECOND:/*全线解封解锁二次命令*/ + g_JieFengJieSuoMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ + g_JieFengJieSuoMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_JieFengJieSuoMsgSnd.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgSnd.chStation = dataBuf[ii++]; /* 车站编号 */ + g_JieFengJieSuoMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_JieFengJieSuoMsgSnd.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgSnd.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_JieFengJieSuoMsgSnd.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgSnd.dwTime = LongFromChar(&dataBuf[ii]); /* 下发时间 */ + ii += 4u; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_JieFengJieSuoMsgSnd.dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC值 */ + ii += 4u; + + g_JieFengJieSuoMsgSnd.chFlag = FLAG_SET; + } + else + { + ; + } + break; + + case MSG_FORCE_SWITCT_CMD_FIRST:/*道岔强扳一次命令*/ + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_SwitchForceMsgFst.chFlag) || (g_SwitchForceMsgFst.wIndex == wIndex)) + { + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的首次消息*/ + g_SwitchForceMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到命令周期号 */ + g_SwitchForceMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_SwitchForceMsgFst.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgFst.chStation = dataBuf[ii++]; /* 车站编号 */ + g_SwitchForceMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_SwitchForceMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgFst.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_SwitchForceMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, g_SwitchForceMsgFst.chTiocId); + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgFst.chCmdType = dataBuf[ii++]; /* 命令类型 */ + if ((SWITCH_FORCE_DINGWEI == g_SwitchForceMsgFst.chCmdType)||(SWITCH_FORCE_FANWEI == g_SwitchForceMsgFst.chCmdType)) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse CmdType[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, g_SwitchForceMsgFst.chCmdType); + } + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgFst.dwSiwtchId = LongFromChar(&dataBuf[ii]); /* 道岔互联互通ID */ + ii += 4u; + if ((0U g_SwitchForceMsgFst.dwSiwtchId)) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse SiwtchId[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, g_SwitchForceMsgFst.dwSiwtchId); + } + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4u; + g_SwitchForceMsgFst.chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + /*解析第二个ATS下发的首次消息*/ + cAtsId = dataBuf[ii]; /* ATS编号 */ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* 车站编号 */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC编号 */ + ii++; + if (cAtsSendRcId == chLocalId) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + chCmdType = dataBuf[ii]; /*道岔强转位置 */ + ii++; + if ((SWITCH_FORCE_DINGWEI == chCmdType) || (SWITCH_FORCE_FANWEI == chCmdType)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse CmdType[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, chCmdType); + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + dwSiwtchId = LongFromChar(&dataBuf[ii]); /* 道岔互联互通ID */ + ii += 4u; + if ((0U < dwSiwtchId) && (UINT32_MAX > dwSiwtchId)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse SiwtchId[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, dwSiwtchId); + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4U; + } + + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_FORCE_SWITCT_CMD_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_SndAtsSwitchForceCfmFst.chFlag = FLAG_SET; + g_SndAtsSwitchForceCfmFst.chTiocId = cAtsSendRcId; + g_SndAtsSwitchForceCfmFst.chStation = cStation; + g_SndAtsSwitchForceCfmFst.wIndex = wIndex; + g_SndAtsSwitchForceCfmFst.dwTime = dwTime; + g_SndAtsSwitchForceCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ + /*计算CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]);/* Work_Station_Index */ + jj += 2U; + + szCrcTmp[jj] = chCmdType;/*命令类型*/ + jj++; + + LongToChar(dwSiwtchId, &szCrcTmp[jj]);/*道岔ID*/ + jj += 4U; + + LongToChar(dwTime, &szCrcTmp[jj]);/*时间*/ + jj += 4U; + g_SndAtsSwitchForceCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } + break; + case MSG_FORCE_SWITCT_CMD_SECOND:/*道岔强扳二次命令*/ + g_SwitchForceMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ + g_SwitchForceMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_SwitchForceMsgSnd.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.chStation = dataBuf[ii++]; /* 车站编号 */ + g_SwitchForceMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_SwitchForceMsgSnd.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_SwitchForceMsgSnd.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.chCmdType = dataBuf[ii++]; /* 命令类型 */ + if ((SWITCH_FORCE_DINGWEI == g_SwitchForceMsgSnd.chCmdType) || (SWITCH_FORCE_FANWEI == g_SwitchForceMsgSnd.chCmdType)) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.dwSiwtchId = LongFromChar(&dataBuf[ii]); /* 道岔互联互通ID */ + ii += 4u; + if ((0U < g_SwitchForceMsgSnd.dwSiwtchId) && (UINT32_MAX > g_SwitchForceMsgSnd.dwSiwtchId)) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.dwTime = LongFromChar(&dataBuf[ii]); /* 下发时间 */ + ii += 4u; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_SwitchForceMsgSnd.dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC值 */ + ii += 4u; + + g_SwitchForceMsgSnd.chFlag = FLAG_SET; + } + else + { + ; + } + break; + case MSG_PHY_PRE_RESET_CMD_FIRST:/*计轴预复位一次命令*/ + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_PhyPreResetMsgFst.chFlag) || (g_PhyPreResetMsgFst.wIndex == wIndex)) + { + /*未收到或重复收到同一个ATS的一次命令时,解析第一个ATS下发的首次消息*/ + g_PhyPreResetMsgFst.dwCycle = Get2oo2CurCycleNum(); /* 接收到命令周期号 */ + g_PhyPreResetMsgFst.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_PhyPreResetMsgFst.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgFst.chStation = dataBuf[ii++]; /* 车站编号 */ + g_PhyPreResetMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_PhyPreResetMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgFst.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_PhyPreResetMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, g_SwitchForceMsgFst.chTiocId); + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgFst.dwPhySecHlhtId = LongFromChar(&dataBuf[ii]); /* 区段互联互通ID */ + ii += 4u; + if ((0U < g_PhyPreResetMsgFst.dwPhySecHlhtId) && (UINT32_MAX > g_PhyPreResetMsgFst.dwPhySecHlhtId)) + { + ; + } + else + { + chRtn = CI_ERROR; + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse dwPhySecHlhtId[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, g_PhyPreResetMsgFst.dwPhySecHlhtId); + } + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4u; + g_PhyPreResetMsgFst.chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + /*解析第二个ATS下发的首次消息*/ + cAtsId = dataBuf[ii]; /* ATS编号 */ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* 车站编号 */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC编号 */ + ii++; + if (cAtsSendRcId == chLocalId) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + + + if (CI_SUCCESS == chRtn) + { + dwPhySecHlhtId = LongFromChar(&dataBuf[ii]); /* 互联互通ID */ + ii += 4u; + if ((0U < dwPhySecHlhtId) && (UINT32_MAX > dwPhySecHlhtId)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse dwPhySecHlhtId[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, dwPhySecHlhtId); + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + dwTime = LongFromChar(&dataBuf[ii]); /* 下发消息时间 */ + ii += 4U; + } + + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_PHY_PRE_RESET_CMD_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_SndAtsPhyPreResetCfmFst.chFlag = FLAG_SET; + g_SndAtsPhyPreResetCfmFst.chTiocId = cAtsSendRcId; + g_SndAtsPhyPreResetCfmFst.chStation = cStation; + g_SndAtsPhyPreResetCfmFst.wIndex = wIndex; + g_SndAtsPhyPreResetCfmFst.dwTime = dwTime; + g_SndAtsPhyPreResetCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*反馈其它操作站站操作中*/ + /*计算CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]);/* Work_Station_Index */ + jj += 2U; + + LongToChar(dwPhySecHlhtId, &szCrcTmp[jj]);/*物理区段互联互通ID*/ + jj += 4U; + + LongToChar(dwTime, &szCrcTmp[jj]);/*时间*/ + jj += 4U; + g_SndAtsPhyPreResetCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } + break; + case MSG_PHY_PRE_RESET_CMD_SECOND:/*计轴预复位二次命令*/ + g_PhyPreResetMsgSnd.dwCycle = Get2oo2CurCycleNum(); /* 收到消息周期号 */ + g_PhyPreResetMsgSnd.chAtsId = dataBuf[ii++]; /* ATS编号 */ + if (0U < g_PhyPreResetMsgSnd.chAtsId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgSnd.chStation = dataBuf[ii++]; /* 车站编号 */ + g_PhyPreResetMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */ + ii += 2U; + if (0U < g_PhyPreResetMsgSnd.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgSnd.chTiocId = dataBuf[ii++]; /* TIOC编号 */ + if (g_PhyPreResetMsgSnd.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgSnd.dwTime = LongFromChar(&dataBuf[ii]); /* 下发时间 */ + ii += 4u; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgSnd.dwPhySecHlhtId = LongFromChar(&dataBuf[ii]); /* 互联互通ID */ + ii += 4u; + if ((0U < g_PhyPreResetMsgSnd.dwPhySecHlhtId) && (UINT32_MAX > g_PhyPreResetMsgSnd.dwPhySecHlhtId)) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + + if (CI_SUCCESS == chRtn) + { + g_PhyPreResetMsgSnd.dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC值 */ + ii += 4u; + + g_PhyPreResetMsgSnd.chFlag = FLAG_SET; + } + else + { + ; + } + break; + default: + { + chRtn = CI_ERROR; + break; + } } if (wMsgLen != (ii - wMsgLenCount)) { @@ -1557,6 +2785,26 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) ClearSndAtsEaFstCfmMsg(); ClearSndAtsWlbFstCfmMsg(); ClearSndAtsDaFstCfmMsg(); + ClearAtsAllFlockMsgFirst(); + ClearAtsAllFlockMsgSecond(); + ClearSndAtsAllFlockFstCfmMsg(); + ClearAtsCesbMsgFirst(); + ClearAtsCesbMsgSecond(); + ClearSndAtsCesbFstCfmMsg(); + + /*清除全站解封解锁缓存*/ + ClearAtsJieFengJieSuoMsgFirst(); + ClearAtsJieFengJieSuoMsgSecond(); + ClearSndAtsJieFengJieSuoCfmMsg(); + + /*清除道岔强转缓存*/ + ClearAtsSwitchForceMsgFirst(); + ClearAtsSwitchForceMsgSecond(); + ClearSndAtsSwitchForceCfmMsg(); + /*清除计轴预复位缓存*/ + ClearAtsPhyPreResetMsgFirst(); + ClearAtsPhyPreResetMsgSecond(); + ClearSndAtsPhyPreResetCfmMsg(); } return chRtn; @@ -1743,9 +2991,9 @@ void ClearAtsWlbMsgSecond(void) } /** -* @brief 获取ATS取消脱轨防护区首次消息 +* @brief 获取ATS取消列车状态异常防护区域首次消息 * @param 无 -* @return ATS取消脱轨防护区首次消息 +* @return ATS取消列车状态异常防护区域首次消息 */ AtsDaMsgStru * GetAtsDaMsgFst(void) { @@ -1753,9 +3001,9 @@ AtsDaMsgStru * GetAtsDaMsgFst(void) } /** -* @brief 获取ATS取消脱轨防护区二次消息 +* @brief 获取ATS取消列车状态异常防护区域二次消息 * @param 无 -* @return ATS取消脱轨防护区二次消息 +* @return ATS取消列车状态异常防护区域二次消息 */ AtsDaMsgStru * GetAtsDaMsgSnd(void) { @@ -1763,9 +3011,9 @@ AtsDaMsgStru * GetAtsDaMsgSnd(void) } /** -* @brief 获取ATS取消脱轨防护区首次确认 +* @brief 获取ATS取消列车状态异常防护区域首次确认 * @param 无 -* @return ATS取消脱轨防护区首次确认 +* @return ATS取消列车状态异常防护区域首次确认 */ AtsMsgCfmStru * GetAtsDaCfmFst(void) { @@ -1773,9 +3021,9 @@ AtsMsgCfmStru * GetAtsDaCfmFst(void) } /** -* @brief 获取ATS取消脱轨防护区二次确认 +* @brief 获取ATS取消列车状态异常防护区域二次确认 * @param 无 -* @return ATS取消脱轨防护区二次确认 +* @return ATS取消列车状态异常防护区域二次确认 */ AtsMsgCfmStru * GetAtsDaCfmSnd(void) { @@ -1783,7 +3031,7 @@ AtsMsgCfmStru * GetAtsDaCfmSnd(void) } /** -* @brief 清除1次ATS取消脱轨防护区信息 +* @brief 清除1次ATS取消列车状态异常防护区域信息 * @param void * @return void */ @@ -1793,7 +3041,7 @@ void ClearAtsDaMsgFirst(void) } /** -* @brief 清除2次ATS取消脱轨防护区信息 +* @brief 清除2次ATS取消列车状态异常防护区域信息 * @param void * @return void */ @@ -2074,7 +3322,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) chEaConfigId = GetEaConfigID(chEaIndex); chEaAreaLineType = GetEaAreaLineType(chEaIndex); if ((NULL == pEaLgcId) || (CI_ERROR == chRtn) || (EA_SECTION_MAX_NUM < chEaLgcNum) - || ((PA_TYPE_DA != chPaType) && (PA_TYPE_EA != chPaType))) + || ((PA_TYPE_DA_TG != chPaType) && (PA_TYPE_DA_TSM != chPaType) && (PA_TYPE_DA_WZX != chPaType) && (PA_TYPE_EA != chPaType))) { chRtn = CI_ERROR; break; @@ -2386,8 +3634,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) if (CI_SUCCESS == chRtn) { - /* 组TIOC汇报给ATS的脱轨防护区域信息 */ - szToGateWayDataBuf[ii++] = MSG_TYPE_DA_REPORT; /* 脱轨防护区域汇报消息 */ + /* 组TIOC汇报给ATS的列车异常状态防护区域信息 */ + szToGateWayDataBuf[ii++] = MSG_TYPE_DA_REPORT; /* 列车异常状态防护区域汇报消息 */ wMsgLenIndex = ii; /* 记录帧长度存放下标 */ ii += 2u; szToGateWayDataBuf[ii++] = MSG_TYPE_DA_REPORT; @@ -2418,20 +3666,21 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) chEaAreaLineType = GetEaAreaLineType(chEaIndex); if ((NULL == pEaLgcId) || (CI_ERROR == chRtn) || (EA_SECTION_MAX_NUM < chEaLgcNum) - || ((PA_TYPE_DA != chPaType) && (PA_TYPE_EA != chPaType))) + || ((PA_TYPE_DA_TG != chPaType) && (PA_TYPE_DA_TSM != chPaType) && (PA_TYPE_DA_WZX != chPaType) && (PA_TYPE_EA != chPaType))) { chRtn = CI_ERROR; break; } else { - if ((chEaSrcId == chLocalId) && (PA_TYPE_DA == chPaType)) + if ((chEaSrcId == chLocalId) && ((PA_TYPE_DA_TG == chPaType) || (PA_TYPE_DA_TSM == chPaType) || (PA_TYPE_DA_WZX == chPaType))) { chEaSendNum++; - LongToChar(dwEaTrainHlhtId, &szToGateWayDataBuf[ii]); /* 区间疏散列车互联互通ID */ + LongToChar(dwEaTrainHlhtId, &szToGateWayDataBuf[ii]); /* 列车异常状态防护分区列车互联互通ID */ ii += 4u; szToGateWayDataBuf[ii++] = chEaAreaLineType; /* 上下行区域 */ + szToGateWayDataBuf[ii++] = chPaType; /* 防护区域类型 */ szToGateWayDataBuf[ii++] = chEaLgcNum; /* 逻辑区段数量 */ for (chEaLgcIndex = 0u; chEaLgcIndex < chEaLgcNum; chEaLgcIndex++) @@ -2473,6 +3722,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ii += 2U; LongToChar(g_strAtsDaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsDaCfmFst.chDaType; /* 类型 */ szToGateWayDataBuf[ii++] = g_strAtsDaCfmFst.chOpStatus; /* 确认结果 */ LongToChar(g_strAtsDaCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ ii += 4u; @@ -2510,6 +3760,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ii += 2U; LongToChar(g_strSndAtsDaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ ii += 4U; + szToGateWayDataBuf[ii++] = g_strSndAtsDaCfmFst.chDaType; /* 类型 */ szToGateWayDataBuf[ii] = g_strSndAtsDaCfmFst.chOpStatus; /* 确认结果 */ ii++; LongToChar(g_strSndAtsDaCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ @@ -2545,6 +3796,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ii += 2U; LongToChar(g_strAtsDaCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsDaCfmSnd.chDaType; /* 类型 */ szToGateWayDataBuf[ii++] = g_strAtsDaCfmSnd.chOpStatus; /* 确认结果 */ LongToChar(g_strAtsDaCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ ii += 4u; @@ -2592,6 +3844,536 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) { ; } + + if (CI_SUCCESS == chRtn) + { + /*第一个ATS全线区段封锁解封反馈*/ + if (FLAG_SET == g_strAtsAllFlockCfmFst.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_TYPE_ALLSECFLOCK_CONFIRM_FIRST; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_TYPE_ALLSECFLOCK_CONFIRM_FIRST; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsAllFlockCfmFst.chStation; /* 车站编号 */ + ShortToChar(g_strAtsAllFlockCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsAllFlockCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsAllFlockCfmFst.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsAllFlockCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsAllFlockCfmFst.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组第二个ATS的全线区段封锁首次确认信息*/ + if (FLAG_SET == g_strSndAtsAllFlockCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_ALLSECFLOCK_CONFIRM_FIRST; /* 帧类型 */ + ii++; + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_ALLSECFLOCK_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC编号 */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsAllFlockCfmFst.chStation; /* 车站编号 */ + ii++; + ShortToChar(g_strSndAtsAllFlockCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strSndAtsAllFlockCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsAllFlockCfmFst.chOpStatus; /* 确认结果 */ + ii++; + LongToChar(g_strSndAtsAllFlockCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + + /*组包后清除第二个ATS的确认信息*/ + ClearSndAtsAllFlockFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*二次全线区段封锁状态反馈*/ + if (FLAG_SET == g_strAtsAllFlockCfmSnd.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_TYPE_ALLSECFLOCK_CONFIRM_SECOND; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_TYPE_ALLSECFLOCK_CONFIRM_SECOND; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsAllFlockCfmSnd.chStation; /* 车站编号 */ + ShortToChar(g_strAtsAllFlockCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsAllFlockCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsAllFlockCfmSnd.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsAllFlockCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsAllFlockCfmSnd.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*第一次ATS CESB反馈*/ + if (FLAG_SET == g_strAtsCesbCfmFst.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_TYPE_CESBFLOCK_CONFIRM_FIRST; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_TYPE_CESBFLOCK_CONFIRM_FIRST; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsCesbCfmFst.chStation; /* 车站编号 */ + ShortToChar(g_strAtsCesbCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsCesbCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsCesbCfmFst.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsCesbCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsCesbCfmFst.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组第二个ATS的cesb首次确认信息*/ + if (FLAG_SET == g_strSndAtsCesbCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_CESBFLOCK_CONFIRM_FIRST; /* 帧类型 */ + ii++; + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_CESBFLOCK_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC编号 */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsCesbCfmFst.chStation; /* 车站编号 */ + ii++; + ShortToChar(g_strSndAtsCesbCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strSndAtsCesbCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsCesbCfmFst.chOpStatus; /* 确认结果 */ + ii++; + LongToChar(g_strSndAtsCesbCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + + /*组包后清除第二个ATS的确认信息*/ + ClearSndAtsCesbFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组cesb二次确认信息*/ + if (FLAG_SET == g_strAtsCesbCfmSnd.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_TYPE_CESBFLOCK_CONFIRM_SECOND; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_TYPE_CESBFLOCK_CONFIRM_SECOND; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsCesbCfmSnd.chStation; /* 车站编号 */ + ShortToChar(g_strAtsCesbCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsCesbCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsCesbCfmSnd.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsCesbCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsCesbCfmSnd.chFlag = FLAG_UNSET; + } + else + { + ; + } + + + /*解封解锁组包*/ + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_strAtsJieFengJieSuoCfmFst.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_JIEFENGJIESUO_BACK_FIRST; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_JIEFENGJIESUO_BACK_FIRST; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsJieFengJieSuoCfmFst.chStation; /* 车站编号 */ + ShortToChar(g_strAtsJieFengJieSuoCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsJieFengJieSuoCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsJieFengJieSuoCfmFst.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsJieFengJieSuoCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsJieFengJieSuoCfmFst.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组第二个ATS的解封解锁首次确认信息*/ + if (FLAG_SET == g_SndAtsJieFengJieSuoCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_JIEFENGJIESUO_BACK_FIRST; /* 帧类型 */ + ii++; + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_JIEFENGJIESUO_BACK_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC编号 */ + ii++; + szToGateWayDataBuf[ii] = g_SndAtsJieFengJieSuoCfmFst.chStation; /* 车站编号 */ + ii++; + ShortToChar(g_SndAtsJieFengJieSuoCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_SndAtsJieFengJieSuoCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4U; + szToGateWayDataBuf[ii] = g_SndAtsJieFengJieSuoCfmFst.chOpStatus; /* 确认结果 */ + ii++; + LongToChar(g_SndAtsJieFengJieSuoCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + + /*组包后清除第二个ATS的确认信息*/ + ClearSndAtsJieFengJieSuoCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_strAtsJieFengJieSuoCfmSnd.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_JIEFENGJIESUO_BACK_SECOND; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_JIEFENGJIESUO_BACK_SECOND; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_strAtsJieFengJieSuoCfmSnd.chStation; /* 车站编号 */ + ShortToChar(g_strAtsJieFengJieSuoCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_strAtsJieFengJieSuoCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_strAtsJieFengJieSuoCfmSnd.chOpStatus; /* 确认结果 */ + LongToChar(g_strAtsJieFengJieSuoCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_strAtsJieFengJieSuoCfmSnd.chFlag = FLAG_UNSET; + } + else + { + ; + } + + + /*道岔强转组包*/ + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_SwitchForceCfmFst.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_FORCE_SWITCT_BACK_FIRST; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_FORCE_SWITCT_BACK_FIRST; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_SwitchForceCfmFst.chStation; /* 车站编号 */ + ShortToChar(g_SwitchForceCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_SwitchForceCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_SwitchForceCfmFst.chOpStatus; /* 确认结果 */ + LongToChar(g_SwitchForceCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_SwitchForceCfmFst.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组第二个ATS首次确认信息*/ + if (FLAG_SET == g_SndAtsSwitchForceCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_FORCE_SWITCT_BACK_FIRST; /* 帧类型 */ + ii++; + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_FORCE_SWITCT_BACK_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC编号 */ + ii++; + szToGateWayDataBuf[ii] = g_SndAtsSwitchForceCfmFst.chStation; /* 车站编号 */ + ii++; + ShortToChar(g_SndAtsSwitchForceCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_SndAtsSwitchForceCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4U; + szToGateWayDataBuf[ii] = g_SndAtsSwitchForceCfmFst.chOpStatus; /* 确认结果 */ + ii++; + LongToChar(g_SndAtsSwitchForceCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + + /*组包后清除第二个ATS的确认信息*/ + ClearSndAtsSwitchForceCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_SwitchForceCfmSnd.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_FORCE_SWITCT_BACK_SECOND; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_FORCE_SWITCT_BACK_SECOND; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_SwitchForceCfmSnd.chStation; /* 车站编号 */ + ShortToChar(g_SwitchForceCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_SwitchForceCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_SwitchForceCfmSnd.chOpStatus; /* 确认结果 */ + LongToChar(g_SwitchForceCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_SwitchForceCfmSnd.chFlag = FLAG_UNSET; + } + else + { + ; + } + + /*计轴预复位组包*/ + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_PhyPreResetCfmFst.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_PHY_PRE_RESET_BACK_FIRST; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_PHY_PRE_RESET_BACK_FIRST; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_PhyPreResetCfmFst.chStation; /* 车站编号 */ + ShortToChar(g_PhyPreResetCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_PhyPreResetCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_PhyPreResetCfmFst.chOpStatus; /* 确认结果 */ + LongToChar(g_PhyPreResetCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_PhyPreResetCfmFst.chFlag = FLAG_UNSET; + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + /*组第二个ATS首次确认信息*/ + if (FLAG_SET == g_SndAtsPhyPreResetCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_PHY_PRE_RESET_BACK_FIRST; /* 帧类型 */ + ii++; + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_PHY_PRE_RESET_BACK_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC编号 */ + ii++; + szToGateWayDataBuf[ii] = g_SndAtsPhyPreResetCfmFst.chStation; /* 车站编号 */ + ii++; + ShortToChar(g_SndAtsPhyPreResetCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_SndAtsPhyPreResetCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4U; + szToGateWayDataBuf[ii] = g_SndAtsPhyPreResetCfmFst.chOpStatus; /* 确认结果 */ + ii++; + LongToChar(g_SndAtsPhyPreResetCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + + /*组包后清除第二个ATS的确认信息*/ + ClearSndAtsPhyPreResetCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + if (FLAG_SET == g_PhyPreResetCfmSnd.chFlag) + { + szToGateWayDataBuf[ii++] = MSG_PHY_PRE_RESET_BACK_SECOND; /* 帧类型 */ + wMsgLenIndex = ii; /* 记录帧长度存放下标 */ + ii += 2u; + szToGateWayDataBuf[ii++] = MSG_PHY_PRE_RESET_BACK_SECOND; + szToGateWayDataBuf[ii++] = chLocalId; /* TIOC编号 */ + szToGateWayDataBuf[ii++] = g_PhyPreResetCfmSnd.chStation; /* 车站编号 */ + ShortToChar(g_PhyPreResetCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* 操作站编号 */ + ii += 2U; + LongToChar(g_PhyPreResetCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* 时间 */ + ii += 4u; + szToGateWayDataBuf[ii++] = g_PhyPreResetCfmSnd.chOpStatus; /* 确认结果 */ + LongToChar(g_PhyPreResetCfmSnd.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4u; + wMsgLen = (ii - wMsgLenIndex - 2u); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* 帧长度 */ + chMsgNum++; /* 消息数量递增 */ + } + else + { + ; + } + g_PhyPreResetCfmSnd.chFlag = FLAG_UNSET; + } + else + { + ; + } + } else { @@ -2777,4 +4559,390 @@ void ClearSndAtsWlbFstCfmMsg(void) void ClearSndAtsDaFstCfmMsg(void) { (void)CommonMemSet((void*)&g_strSndAtsDaCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); -} \ No newline at end of file +} + +/** +* @brief 清除1次ATS设置/取消全线区段封锁信息 +* @param void +* @return void +*/ +void ClearAtsAllFlockMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_strAtsAllFlockMsgFst, (UINT32)sizeof(g_strAtsAllFlockMsgFst), (UINT8)0U, (UINT32)sizeof(g_strAtsAllFlockMsgFst)); +} + +/** +* @brief 清除2次ATS取消全线区段封锁信息 +* @param void +* @return void +*/ +void ClearAtsAllFlockMsgSecond(void) +{ + (void)CommonMemSet((void*)&g_strAtsAllFlockMsgSnd, (UINT32)sizeof(g_strAtsAllFlockMsgSnd), (UINT8)0U, (UINT32)sizeof(g_strAtsAllFlockMsgSnd)); +} + +/** +* @brief 获取ATS设置/取消全线区段封锁首次消息 +* @param 无 +* @return ATS设置/取消区间疏散首次消息 +* Created By fan 2025.12.13 +*/ +AtsAllSecFlockMsgStru * GetAtsFlockMsgFst(void) +{ + return &g_strAtsAllFlockMsgFst; +} +/** +* @brief 获取ATS取消全线区段封锁二次消息 +* @param 无 +* @return ATS取消全线列车紧急制动二次消息 +* Created By fan 2025.12.13 +*/ +AtsAllSecFlockMsgStru * GetAtsFlockMsgSnd(void) +{ + return &g_strAtsAllFlockMsgSnd; +} + +/** +* @brief 获取ATS设置/取消全线区段封锁首次确认 +* @param 无 +* @return ATS设置/取消全线区段封锁首次确认 +* Created By fan 2025.12.13 +*/ +AtsMsgCfmStru * GetAtsFlockCfmFst(void) +{ + return &g_strAtsAllFlockCfmFst; +} + +/** +* @brief 获取ATS取消全线区段封锁二次确认 +* @param 无 +* @return ATS取消全线区段封锁二次确认 +* Created By fan 2025.12.13 +*/ +AtsMsgCfmStru * GetAtsFlockCfmSnd(void) +{ + return &g_strAtsAllFlockCfmSnd; +} + +/** +* @brief 清除第二个ATS的全线区段封锁一次信息 +* @param 无 +* @return 无 +* @note Created By fan 2025.12.15 +*/ +void ClearSndAtsAllFlockFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsAllFlockCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); +} + + +/** +* @brief 清除1次ATS取消全线CESB封锁信息 +* @param void +* @return void +* Created By fan 2026.02.04 +*/ +void ClearAtsCesbMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_strAtsCesbMsgFst, (UINT32)sizeof(g_strAtsCesbMsgFst), (UINT8)0U, (UINT32)sizeof(g_strAtsCesbMsgFst)); +} + +/** +* @brief 清除2次ATS取消全线CESB封锁信息 +* @param void +* @return void +* Created By fan 2026.02.04 +*/ +void ClearAtsCesbMsgSecond(void) +{ + (void)CommonMemSet((void*)&g_strAtsCesbMsgSnd, (UINT32)sizeof(g_strAtsCesbMsgSnd), (UINT8)0U, (UINT32)sizeof(g_strAtsCesbMsgSnd)); +} + +/** +* @brief 获取ATS取消全线CESB封锁首次消息 +* @param 无 +* @return ATS取消全线CESB封锁首次消息 +* Created By fan 2026.02.04 +*/ +AtsCESBCancleMsgStru * GetAtsCesbMsgFst(void) +{ + return &g_strAtsCesbMsgFst; +} +/** +* @brief 获取ATS取消全线CESB封锁二次消息 +* @param 无 +* @return ATS取消全线CESB封锁二次消息 +* Created By fan 2026.02.04 +*/ +AtsCESBCancleMsgStru * GetAtsCesbMsgSnd(void) +{ + return &g_strAtsCesbMsgSnd; +} + +/** +* @brief 获取ATS取消全线CESB封锁首次确认 +* @param 无 +* @return ATS设置/取消全线CESB封锁首次确认 +* Created By fan 2026.02.04 +*/ +AtsMsgCfmStru * GetAtsCesbCfmFst(void) +{ + return &g_strAtsCesbCfmFst; +} + +/** +* @brief 获取ATS取消全线CESB封锁二次确认 +* @param 无 +* @return ATS取消全线CESB封锁二次确认 +* Created By fan 2026.02.04 +*/ +AtsMsgCfmStru * GetAtsCesbCfmSnd(void) +{ + return &g_strAtsCesbCfmSnd; +} + +/** +* @brief 清除第二个ATS的全线CESB封锁一次信息 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void ClearSndAtsCesbFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsCesbCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); +} + + + +/** +* @brief 获取ATS全站解封解锁首次消息 +* @param 无 +* @return ATS全站解封解锁首次消息 +* Created By mpt 2026.2.8 +*/ +AtsJieFengJieSuoMsgStru* GetAtsJieFengJieSuoMsgFst(void) +{ + return &g_JieFengJieSuoMsgFst; +} +/** +* @brief 获取ATS全站解封解锁二次消息 +* @param 无 +* @return ATS全站解封解锁二次消息 +* Created By mpt 2026.2.8 +*/ +AtsJieFengJieSuoMsgStru* GetAtsJieFengJieSuoMsgSnd(void) +{ + return &g_JieFengJieSuoMsgSnd; +} + +/** +* @brief 获取ATS全站解封解锁首次确认 +* @param 无 +* @return ATS全站解封解锁首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsJieFengJieSuoCfmFst(void) +{ + return &g_strAtsJieFengJieSuoCfmFst; +} + +/** +* @brief 获取ATS全站解封解锁二次确认 +* @param 无 +* @return ATS全站解封解锁二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsJieFengJieSuoCfmSnd(void) +{ + return &g_strAtsJieFengJieSuoCfmSnd; +} + +/** +* @brief 清除ATS全站解封解锁首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsJieFengJieSuoMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_JieFengJieSuoMsgFst, (UINT32)sizeof(g_JieFengJieSuoMsgFst), (UINT8)0U, (UINT32)sizeof(g_JieFengJieSuoMsgFst)); +} + +/** +* @brief 清除ATS全站解封解锁二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsJieFengJieSuoMsgSecond(void) +{ + (void)CommonMemSet((void*)&g_JieFengJieSuoMsgSnd, (UINT32)sizeof(g_JieFengJieSuoMsgSnd), (UINT8)0U, (UINT32)sizeof(g_JieFengJieSuoMsgSnd)); +} + +/** +* @brief 清除第二个ATS全站解封解锁一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsJieFengJieSuoCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_SndAtsJieFengJieSuoCfmFst, (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst), (UINT8)0U, (UINT32)sizeof(g_SndAtsJieFengJieSuoCfmFst)); +} + + +/** +* @brief 获取ATS道岔强转首次消息 +* @param 无 +* @return ATS道岔强转首次消息 +* Created By mpt 2026.2.8 +*/ +AtsSwitchForceMsgStru* GetAtsSwitchForceMsgFst(void) +{ + return &g_SwitchForceMsgFst; +} +/** +* @brief 获取ATS道岔强转二次消息 +* @param 无 +* @return ATS道岔强转二次消息 +* Created By mpt 2026.2.8 +*/ +AtsSwitchForceMsgStru* GetAtsSwitchForceMsgSnd(void) +{ + return &g_SwitchForceMsgSnd; +} + +/** +* @brief 获取ATS道岔强转首次确认 +* @param 无 +* @return ATS道岔强转首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsSwitchForceCfmFst(void) +{ + return &g_SwitchForceCfmFst; +} + +/** +* @brief 获取ATS道岔强转二次确认 +* @param 无 +* @return ATS道岔强转二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsSwitchForceCfmSnd(void) +{ + return &g_SwitchForceCfmSnd; +} + +/** +* @brief 清除ATS道岔强转首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsSwitchForceMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_SwitchForceMsgFst, (UINT32)sizeof(g_SwitchForceMsgFst), (UINT8)0U, (UINT32)sizeof(g_SwitchForceMsgFst)); +} + +/** +* @brief 清除ATS道岔强转二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsSwitchForceMsgSecond(void) +{ + (void)CommonMemSet((void*)&g_SwitchForceMsgSnd, (UINT32)sizeof(g_SwitchForceMsgSnd), (UINT8)0U, (UINT32)sizeof(g_SwitchForceMsgSnd)); +} +/** +* @brief 清除第二个ATS道岔强转一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsSwitchForceCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_SndAtsSwitchForceCfmFst, (UINT32)sizeof(g_SndAtsSwitchForceCfmFst), (UINT8)0U, (UINT32)sizeof(g_SndAtsSwitchForceCfmFst)); +} + + + + + +/** +* @brief 获取ATS计轴预复位首次消息 +* @param 无 +* @return ATS计轴预复位首次消息 +* Created By mpt 2026.2.8 +*/ +AtsPhyPreResetMsgStru* GetAtsPhyPreResetMsgFst(void) +{ + return &g_PhyPreResetMsgFst; +} +/** +* @brief 获取ATS计轴预复位二次消息 +* @param 无 +* @return ATS计轴预复位二次消息 +* Created By mpt 2026.2.8 +*/ +AtsPhyPreResetMsgStru* GetAtsPhyPreResetMsgSnd(void) +{ + return &g_PhyPreResetMsgSnd; +} + +/** +* @brief 获取ATS计轴预复位首次确认 +* @param 无 +* @return ATS道岔强转首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsPhyPreResetCfmFst(void) +{ + return &g_PhyPreResetCfmFst; +} + +/** +* @brief 获取ATS计轴预复位二次确认 +* @param 无 +* @return ATS道岔强转二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsPhyPreResetCfmSnd(void) +{ + return &g_PhyPreResetCfmSnd; +} + +/** +* @brief 清除ATS计轴预复位首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsPhyPreResetMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_PhyPreResetMsgFst, (UINT32)sizeof(g_PhyPreResetMsgFst), (UINT8)0U, (UINT32)sizeof(g_PhyPreResetMsgFst)); +} + +/** +* @brief 清除ATS计轴预复位二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsPhyPreResetMsgSecond(void) +{ + (void)CommonMemSet((void*)&g_PhyPreResetMsgSnd, (UINT32)sizeof(g_PhyPreResetMsgSnd), (UINT8)0U, (UINT32)sizeof(g_PhyPreResetMsgSnd)); +} +/** +* @brief 清除第二个ATS计轴复位一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsPhyPreResetCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_SndAtsPhyPreResetCfmFst, (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst), (UINT8)0U, (UINT32)sizeof(g_SndAtsPhyPreResetCfmFst)); +} + + diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h index 3ab0acb..4055733 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h @@ -10,11 +10,11 @@ #define MSG_TYPE_WLB_CONFIRM_FIRST ((UINT8)113u) /*全线列车紧急制动首次确认*/ #define MSG_TYPE_WLB_SET_SECOND ((UINT8)114u) /*全线列车紧急制动设置二次*/ #define MSG_TYPE_WLB_CONFIRM_SECOND ((UINT8)115u) /*全线列车紧急制动二次确认*/ -#define MSG_TYPE_DA_REPORT ((UINT8)116u) /*脱轨防护区汇报信息*/ -#define MSG_TYPE_DA_CANCLE_FIRST ((UINT8)117u) /*脱轨防护区取消首次消息*/ -#define MSG_TYPE_DA_CONFIRM_FIRST ((UINT8)118u) /*脱轨防护区首次确认消息*/ -#define MSG_TYPE_DA_CANCLE_SECOND ((UINT8)119u) /*脱轨防护区取消再次消息*/ -#define MSG_TYPE_DA_CONFIRM_SECOND ((UINT8)120u) /*脱轨防护区再次确认消息*/ +#define MSG_TYPE_DA_REPORT ((UINT8)116u) /*列车状态异常防护区汇报信息*/ +#define MSG_TYPE_DA_CANCLE_FIRST ((UINT8)117u) /*列车状态异常防护区取消首次消息*/ +#define MSG_TYPE_DA_CONFIRM_FIRST ((UINT8)118u) /*列车状态异常防护区首次确认消息*/ +#define MSG_TYPE_DA_CANCLE_SECOND ((UINT8)119u) /*列车状态异常防护区取消再次消息*/ +#define MSG_TYPE_DA_CONFIRM_SECOND ((UINT8)120u) /*列车状态异常防护区再次确认消息*/ #define MSG_TYPE_REPORT ((UINT8)121u) /*汇报远程筛选列车信息*/ #define MSG_TYPE_REQUEST_FIRST ((UINT8)122u) /*首次消息*/ #define MSG_TYPE_CONFIRM_FIRST ((UINT8)123u) /*首次确认*/ @@ -27,6 +27,29 @@ #define MSG_TYPE_EA_CONFIRM_SECOND ((UINT8)130u) /*区间疏散再次确认消息*/ #define MSG_TYPE_TRIAN_INFO_REPORT ((UINT8)131u) /*TIOC给ATS发送列车信息*/ #define MSG_TYPE_TRAIN_FLY_INFO ((UINT8)132u) /*TIOC给ATS发送飞车宕机报警信息*/ +#define MSG_TYPE_ALLSECFLOCK_CMD_FIRST ((UINT8)137u) /*全线区段封锁设置一次*/ +#define MSG_TYPE_ALLSECFLOCK_CONFIRM_FIRST ((UINT8)138u) /*全线区段封锁首次确认*/ +#define MSG_TYPE_ALLSECFLOCK_CMD_SECOND ((UINT8)139u) /*全线区段封锁设置二次*/ +#define MSG_TYPE_ALLSECFLOCK_CONFIRM_SECOND ((UINT8)140u) /*全线区段封锁二次确认*/ +#define MSG_TYPE_CESBFLOCK_CMD_FIRST ((UINT8)141u) /*全线CESB封锁取消一次*/ +#define MSG_TYPE_CESBFLOCK_CONFIRM_FIRST ((UINT8)142u) /*全线CESB封锁取消首次确认*/ +#define MSG_TYPE_CESBFLOCK_CMD_SECOND ((UINT8)143u) /*全线CESB封锁取消二次*/ +#define MSG_TYPE_CESBFLOCK_CONFIRM_SECOND ((UINT8)144u) /*全线CESB封锁取消二次确认*/ + +#define MSG_JIEFENGJIESUO_CMD_FIRST ((UINT8)145u) /*全线解封解锁一次*/ +#define MSG_JIEFENGJIESUO_BACK_FIRST ((UINT8)146u) /*全线解封解锁首次确认*/ +#define MSG_JIEFENGJIESUO_CMD_SECOND ((UINT8)147u) /*全线解封解锁二次*/ +#define MSG_JIEFENGJIESUO_BACK_SECOND ((UINT8)148u) /*全线解封解锁二次确认*/ + +#define MSG_FORCE_SWITCT_CMD_FIRST ((UINT8)149u) /*道岔强转一次*/ +#define MSG_FORCE_SWITCT_BACK_FIRST ((UINT8)150u) /*道岔强转首次确认*/ +#define MSG_FORCE_SWITCT_CMD_SECOND ((UINT8)151u) /*道岔强转二次*/ +#define MSG_FORCE_SWITCT_BACK_SECOND ((UINT8)152u) /*道岔强转二次确认*/ + +#define MSG_PHY_PRE_RESET_CMD_FIRST ((UINT8)153u) /*计轴预复位一次*/ +#define MSG_PHY_PRE_RESET_BACK_FIRST ((UINT8)154u) /*计轴预复位首次确认*/ +#define MSG_PHY_PRE_RESET_CMD_SECOND ((UINT8)155u) /*计轴预复位二次*/ +#define MSG_PHY_PRE_RESET_BACK_SECOND ((UINT8)156u) /*计轴预复位二次确认*/ #define CONFIRM_UNKNOWN ((UINT8)0u) /*未知*/ #define CONFIRM_FIRST_SUCCESS ((UINT8)1u) /*首次确认成功*/ @@ -58,6 +81,9 @@ #define WLB_TYPE_RC ((UINT8)2u) /*全线列车紧急制动*/ #define WLB_TYPE_PHYSEC ((UINT8)3u) /*物理区段紧急制动*/ +#define SEC_ALLFLOCK_CMD_SET ((UINT8)0xaau) /* 全线封锁设置命令 */ +#define SEC_ALLFLOCK_CMD_CANCLE ((UINT8)0x55u) /* 全线封锁取消命令 */ + #define CONFIRM_WLB_FST_UNKNOWN ((UINT8)0u) /*首次回复未知*/ #define CONFIRM_WLB_FST_SUCCESS ((UINT8)1u) /*首次回复成功*/ #define CONFIRM_WLB_FST_REPEAT ((UINT8)2u) /*首次回复重复设置*/ @@ -69,25 +95,41 @@ #define CONFIRM_WLB_SND_FIRST ((UINT8)4u) /*二次回复未执行首次确认*/ #define CONFIRM_WLB_SND_INFO_DIFF ((UINT8)8u) /*一二次命令信息不一致*/ -#define CONFIRM_DA_FST_UNKNOWN ((UINT8)0u) /*取消脱轨防护区首次回复未知*/ -#define CONFIRM_DA_FST_SUCCESS ((UINT8)1u) /*取消脱轨防护区首次回复成功*/ -#define CONFIRM_DA_FST_UNSET ((UINT8)7u) /*取消脱轨防护区首次回复未设置*/ -#define CONFIRM_DA_FST_DERAIL ((UINT8)9u) /*取消脱轨防护区首次回复当前列车处于脱轨状态*/ +#define CONFIRM_DA_FST_UNKNOWN ((UINT8)0u) /*取消列车状态异常防护区域首次回复未知*/ +#define CONFIRM_DA_FST_SUCCESS ((UINT8)1u) /*取消列车状态异常防护区域首次回复成功*/ +#define CONFIRM_DA_FST_UNSET ((UINT8)7u) /*取消列车状态异常防护区域首次回复未设置*/ +#define CONFIRM_DA_FST_DERAIL ((UINT8)9u) /*取消列车状态异常防护区域首次回复当前列车处于脱轨状态*/ -#define CONFIRM_DA_SND_UNKNOWN ((UINT8)0u) /*取消脱轨防护区再次回复未知*/ -#define CONFIRM_DA_SND_SUCCESS ((UINT8)1u) /*取消脱轨防护区再次回复成功*/ -#define CONFIRM_DA_SND_CRC ((UINT8)3u) /*取消脱轨防护区再次回复信息帧校验失败*/ -#define CONFIRM_DA_SND_FIRST ((UINT8)4u) /*取消脱轨防护区再次回复未执行首次*/ -#define CONFIRM_DA_SND_DIFF ((UINT8)8u) /*取消脱轨防护区再次回复列车ID与一次不一致*/ -#define CONFIRM_DA_SND_DERAIL ((UINT8)9u) /*取消脱轨防护区再次回复列车当前处于脱轨状态*/ -#define CONFIRM_DA_SND_LINE_DIFF ((UINT8)11U) /*取消脱轨防护一二次命令线路属性不一致*/ +#define CONFIRM_DA_SND_UNKNOWN ((UINT8)0u) /*取消列车状态异常防护区域再次回复未知*/ +#define CONFIRM_DA_SND_SUCCESS ((UINT8)1u) /*取消列车状态异常防护区域再次回复成功*/ +#define CONFIRM_DA_SND_CRC ((UINT8)3u) /*取消列车状态异常防护区域再次回复信息帧校验失败*/ +#define CONFIRM_DA_SND_FIRST ((UINT8)4u) /*取消列车状态异常防护区域再次回复未执行首次*/ +#define CONFIRM_DA_SND_DIFF ((UINT8)8u) /*取消列车状态异常防护区域再次回复列车ID与一次不一致*/ +#define CONFIRM_DA_SND_DERAIL ((UINT8)9u) /*取消列车状态异常防护区域再次回复列车当前处于脱轨状态*/ +#define CONFIRM_DA_SND_LINE_DIFF ((UINT8)11U) /*取消列车状态异常防护区域一二次命令线路属性不一致*/ + +#define CONFIRM_ALLFLOCK_FST_SUCCESS ((UINT8)1u) /*全线封锁首次回复成功*/ +#define CONFIRM_ALLFLOCK_FST_REPEAT ((UINT8)2u) /*全线封锁首次回复重复设置*/ +#define CONFIRM_ALLFLOCK_FST_UNSET ((UINT8)5u) /*全线封锁首次回复未设置*/ + +#define CONFIRM_ALLFLOCK_SND_UNKNOWN ((UINT8)0u) /*全线封锁二次回复未知*/ +#define CONFIRM_ALLFLOCK_SND_SUCCESS ((UINT8)1u) /*全线封锁二次回复成功*/ +#define CONFIRM_ALLFLOCK_SND_CHECKFAIL ((UINT8)3u) /*全线封锁信息帧校验失败*/ +#define CONFIRM_ALLFLOCK_SND_FIRST ((UINT8)4u) /*全线封锁二次回复未执行首次确认*/ + +#define CONFIRM_CANCLE_CESB_FST_SUCCESS ((UINT8)1u) /*取消CESB首次回复成功*/ +#define CONFIRM_CANCLE_CESB_FST_UNSET ((UINT8)5u) /*取消CESB首次回复未设置*/ + +#define CONFIRM_CANCLE_CESB_SND_UNKNOWN ((UINT8)0u) /*取消CESB二次回复未知*/ +#define CONFIRM_CANCLE_CESB_SND_SUCCESS ((UINT8)1u) /*取消CESB二次回复成功*/ +#define CONFIRM_CANCLE_CESB_SND_CHECKFAIL ((UINT8)3u) /*取消CESB信息帧校验失败*/ +#define CONFIRM_CANCLE_CESB_SND_FIRST ((UINT8)4u) /*取消CESB二次回复未执行首次确认*/ +#define CONFIRM_CANCLE_CESB_RELAY_ACTIVE ((UINT8)9u) /*取消CESB回复CESB激活*/ #define DA_AREA_UP ((UINT8)0x55u) /* 上行区域 */ #define DA_AREA_DOWN ((UINT8)0xaau) /* 下行区域 */ #define DA_AREA_ALL ((UINT8)0xffu) /* 上行和下行区域 */ -#define ATS_DA_CMD_TYPE_CANCEL ((UINT8)0x55u) /* ATS取消脱轨防护区命令类型 */ - #define CONFIRM_TIMEOUT_CC ((UINT16)400u) /*首次消息等待二次消息超时时间*/ #define GATE_WAY_PRTCL_VER ((UINT32)101u) /*协议版本号*/ @@ -100,6 +142,25 @@ #define EA_AREA_UP ((UINT8)0x55u) /* 上行区域 */ #define EA_AREA_DOWN ((UINT8)0xaau) /* 下行区域 */ #define EA_AREA_ALL ((UINT8)0xffu) /* 上行和下行区域 */ + + +#define CONFIRM_FST_SUCCESS ((UINT8)1u) /*首次回复成功*/ + + +#define CONFIRM_SND_UNKNOWN ((UINT8)0u) /*二次回复未知,一次二次不同*/ +#define CONFIRM_SND_SUCCESS ((UINT8)1u) /*二次回复成功*/ +#define CONFIRM_SND_CHECKFAIL ((UINT8)3u) /*CRC校验失败*/ +#define CONFIRM_SND_NOTFIRST ((UINT8)4u) /*二次回复未执行首次确认*/ + +#define CONFIRM_ID_ILL ((UINT8)5u) /*ID非法*/ +#define CONFIRM_PHY_PRERESET_ID_DIF ((UINT8)5u)/*一次二次命令ID不一致*/ +#define CONFIRM_FORCE_SW_ID_DIF ((UINT8)7u) /*一次二次命令ID不一致*/ +#define CONFIRM_FORCE_SW_CMD_DIF ((UINT8)8u) /*一次二次强转位置不一致*/ +#define CONFIRM_CMD_INVALID ((UINT8)15u) /*命令无效*/ + +#define SWITCH_FORCE_DINGWEI ((UINT8)0x55u) /* 强转定位 */ +#define SWITCH_FORCE_FANWEI ((UINT8)0xaau) /* 强转反位 */ + /* 远程筛选列车信息结构体 */ typedef struct { @@ -121,7 +182,7 @@ typedef struct AtsScreenTrainInfoStru strTrainInfo[TRAIN_SUM_MAX]; /*列车信息*/ }AtsScreenMsgFstStru; -/* ATS远程筛选确认结构体 */ +/* 确认信息结构体 */ typedef struct { UINT8 chFlag; /*消息有效性*/ @@ -131,6 +192,7 @@ typedef struct UINT32 dwTime; /*时间*/ UINT8 chOpStatus; /*操作结果*/ UINT32 dwCrc32; /*CRC*/ + UINT8 chDaType; /*防护分区类型*/ }AtsMsgCfmStru; /* ATS远程筛选二次消息结构体 */ @@ -181,7 +243,7 @@ typedef struct UINT16 wBrakeIndex; /*制动ID*/ }AtsWlbMsgStru; -/* ATS取消脱轨防护区信息结构体 */ +/* ATS取消列车状态异常防护区域信息结构体 */ typedef struct { UINT8 chFlag; /*消息接收状态*/ @@ -192,11 +254,80 @@ typedef struct UINT8 chTiocId; /*TIOC编号*/ UINT32 dwDaTrainId; /*列车互联互通编号*/ UINT32 dwTime; /*时间*/ - UINT8 chType; /*建立/取消*/ + UINT8 chType; /*类型*/ UINT8 chLine; /*线路*/ UINT32 dwCrc32; /*CRC值*/ }AtsDaMsgStru; +/* ATS设置/取消全线区段封锁信息结构体 */ +typedef struct +{ + UINT8 chFlag; /*消息接收状态*/ + UINT32 dwCycle; /*消息接收周期号*/ + UINT8 chAtsId; /*ATS编号*/ + UINT8 chStation; /*车站编号*/ + UINT16 wIndex; /*操作站编号*/ + UINT8 chTiocId; /*TIOC编号*/ + UINT32 dwTime; /*时间*/ + UINT8 chType; /*设置/取消*/ + UINT32 dwCrc32; /*CRC值*/ +}AtsAllSecFlockMsgStru; + +/* ATS取消全线CESB封锁信息结构体 */ +typedef struct +{ + UINT8 chFlag; /*消息接收状态*/ + UINT32 dwCycle; /*消息接收周期号*/ + UINT8 chAtsId; /*ATS编号*/ + UINT8 chStation; /*车站编号*/ + UINT16 wIndex; /*操作站编号*/ + UINT8 chTiocId; /*TIOC编号*/ + UINT32 dwTime; /*时间*/ + UINT32 dwCrc32; /*CRC值*/ +}AtsCESBCancleMsgStru; + +/* ATS解封解锁信息结构体 */ +typedef struct +{ + UINT8 chFlag; /*消息接收状态*/ + UINT32 dwCycle; /*消息接收周期号*/ + UINT8 chAtsId; /*ATS编号*/ + UINT8 chStation; /*车站编号*/ + UINT16 wIndex; /*操作站编号*/ + UINT8 chTiocId; /*TIOC编号*/ + UINT32 dwTime; /*时间*/ + UINT32 dwCrc32; /*CRC值*/ +}AtsJieFengJieSuoMsgStru; + +/* ATS道岔强转信息结构体 */ +typedef struct +{ + UINT8 chFlag; /*消息接收状态*/ + UINT32 dwCycle; /*消息接收周期号*/ + UINT8 chAtsId; /*ATS编号*/ + UINT8 chStation; /*车站编号*/ + UINT16 wIndex; /*操作站编号*/ + UINT8 chTiocId; /*TIOC编号*/ + UINT8 chCmdType; /*命令类型*/ + UINT32 dwSiwtchId; /*设备互联互通ID*/ + UINT32 dwTime; /*时间*/ + UINT32 dwCrc32; /*CRC值*/ +}AtsSwitchForceMsgStru; + +/* ATS计轴预复位信息结构体 */ +typedef struct +{ + UINT8 chFlag; /*消息接收状态*/ + UINT32 dwCycle; /*消息接收周期号*/ + UINT8 chAtsId; /*ATS编号*/ + UINT8 chStation; /*车站编号*/ + UINT16 wIndex; /*操作站编号*/ + UINT8 chTiocId; /*TIOC编号*/ + UINT32 dwPhySecHlhtId; /*设备ID*/ + UINT32 dwTime; /*时间*/ + UINT32 dwCrc32; /*CRC值*/ +}AtsPhyPreResetMsgStru; + /*******************************全局变量声明*******************************/ extern AtsScreenMsgFstStru g_strAtsMsgFst; extern AtsMsgCfmStru g_strAtsCfmFst; @@ -222,7 +353,37 @@ extern AtsMsgCfmStru g_strSndAtsCfmFst; /* extern AtsMsgCfmStru g_strSndAtsEaCfmFst; /*第二个ATS的取消区间疏散首次确认*/ extern AtsMsgCfmStru g_strSndAtsWlbCfmFst; /*第二个ATS的设置/取消全线列车紧急制动首次确认*/ extern AtsMsgCfmStru g_strSndAtsDaCfmFst; /*第二个ATS的取消脱轨防护区首次确认*/ +extern AtsMsgCfmStru g_strSndAtsAllFlockCfmFst; /*第二个ATS的设置/取消全线区段封锁首次确认*/ +extern AtsAllSecFlockMsgStru g_strAtsAllFlockMsgFst; /*设置/取消全线区段封锁首次消息*/ +extern AtsMsgCfmStru g_strAtsAllFlockCfmFst; /*设置/取消全线区段封锁首次确认*/ +extern AtsAllSecFlockMsgStru g_strAtsAllFlockMsgSnd; /*取消全线区段封锁再次消息*/ +extern AtsMsgCfmStru g_strAtsAllFlockCfmSnd; /*取消全线区段封锁再次确认*/ + +extern AtsCESBCancleMsgStru g_strAtsCesbMsgFst; /*取消全线CESB封锁首次消息*/ +extern AtsMsgCfmStru g_strAtsCesbCfmFst ; /*取消全线CESB封锁首次确认*/ +extern AtsCESBCancleMsgStru g_strAtsCesbMsgSnd ; /*取消全线CESB封锁再次消息*/ +extern AtsMsgCfmStru g_strAtsCesbCfmSnd ; /*取消全线CESB封锁再次确认*/ +extern AtsMsgCfmStru g_strSndAtsCesbCfmFst; /*第二个ATS的取消CESB封锁首次确认*/ + + +extern AtsJieFengJieSuoMsgStru g_JieFengJieSuoMsgFst ; /*全站解封解锁首次消息*/ +extern AtsMsgCfmStru g_strAtsJieFengJieSuoCfmFst ; /*全站解封解锁首次确认*/ +extern AtsJieFengJieSuoMsgStru g_JieFengJieSuoMsgSnd; /*全站解封解锁再次消息*/ +extern AtsMsgCfmStru g_strAtsJieFengJieSuoCfmSnd; /*全站解封解锁再次确认*/ +extern AtsMsgCfmStru g_SndAtsJieFengJieSuoCfmFst; /*第二个ATS的解封解锁首次确认*/ + +extern AtsSwitchForceMsgStru g_SwitchForceMsgFst; /*道岔强转首次消息*/ +extern AtsMsgCfmStru g_SwitchForceCfmFst; /*道岔强转首次确认*/ +extern AtsSwitchForceMsgStru g_SwitchForceMsgSnd; /*道岔强转再次消息*/ +extern AtsMsgCfmStru g_SwitchForceCfmSnd; /*道岔强转再次确认*/ +extern AtsMsgCfmStru g_SndAtsSwitchForceCfmFst; /*第二个ATS的道岔强转首次确认*/ + +extern AtsPhyPreResetMsgStru g_PhyPreResetMsgFst; /*预复位首次消息*/ +extern AtsMsgCfmStru g_PhyPreResetCfmFst; /*预复位首次确认*/ +extern AtsPhyPreResetMsgStru g_PhyPreResetMsgSnd; /*预复位再次消息*/ +extern AtsMsgCfmStru g_PhyPreResetCfmSnd; /*预复位再次确认*/ +extern AtsMsgCfmStru g_SndAtsPhyPreResetCfmFst; /*第二个ATS的预复位首次确认*/ /** * @brief 获取远程筛选ATS首次消息 @@ -367,42 +528,42 @@ void ClearAtsWlbMsgFirst(void); void ClearAtsWlbMsgSecond(void); /** -* @brief 获取ATS取消脱轨防护区首次消息 +* @brief 获取ATS取消列车状态异常防护区域首次消息 * @param 无 -* @return ATS取消脱轨防护区首次消息 +* @return ATS取消列车状态异常防护区域首次消息 */ -AtsDaMsgStru * GetAtsDaMsgFst(void); +AtsDaMsgStru* GetAtsDaMsgFst(void); /** -* @brief 获取ATS取消脱轨防护区二次消息 +* @brief 获取ATS取消列车状态异常防护区域二次消息 * @param 无 -* @return ATS取消脱轨防护区二次消息 +* @return ATS取消列车状态异常防护区域二次消息 */ -AtsDaMsgStru * GetAtsDaMsgSnd(void); +AtsDaMsgStru* GetAtsDaMsgSnd(void); /** -* @brief 获取ATS取消脱轨防护区首次确认 +* @brief 获取ATS取消列车状态异常防护区域首次确认 * @param 无 -* @return ATS取消脱轨防护区首次确认 +* @return ATS取消列车状态异常防护区域首次确认 */ -AtsMsgCfmStru * GetAtsDaCfmFst(void); +AtsMsgCfmStru* GetAtsDaCfmFst(void); /** -* @brief 获取ATS取消脱轨防护区二次确认 +* @brief 获取ATS取消列车状态异常防护区域二次确认 * @param 无 -* @return ATS取消脱轨防护区二次确认 +* @return ATS取消列车状态异常防护区域二次确认 */ -AtsMsgCfmStru * GetAtsDaCfmSnd(void); +AtsMsgCfmStru* GetAtsDaCfmSnd(void); /** -* @brief 清除1次ATS取消脱轨防护区信息 +* @brief 清除1次ATS取消列车状态异常防护区域信息 * @param void * @return void */ void ClearAtsDaMsgFirst(void); /** -* @brief 清除2次ATS取消脱轨防护区信息 +* @brief 清除2次ATS取消列车状态异常防护区域信息 * @param void * @return void */ @@ -449,4 +610,265 @@ void ClearSndAtsWlbFstCfmMsg(void); */ void ClearSndAtsDaFstCfmMsg(void); +/** +* @brief 清除1次ATS设置/取消全线区段封锁信息 +* @param void +* @return void +* @note Created By fan 2025.12.13 +*/ +void ClearAtsAllFlockMsgFirst(void); + +/** +* @brief 清除2次ATS取消全线区段封锁信息 +* @param void +* @return void +* @note Created By fan 2025.12.13 +*/ +void ClearAtsAllFlockMsgSecond(void); + +/** +* @brief 获取ATS设置/取消全线区段封锁首次消息 +* @param 无 +* @return ATS设置/取消区间疏散首次消息 +* Created By fan 2025.12.13 +*/ +AtsAllSecFlockMsgStru * GetAtsFlockMsgFst(void); +/** +* @brief 获取ATS取消全线区段封锁二次消息 +* @param 无 +* @return ATS取消全线列车紧急制动二次消息 +* Created By fan 2025.12.13 +*/ +AtsAllSecFlockMsgStru * GetAtsFlockMsgSnd(void); + +/** +* @brief 获取ATS设置/取消全线区段封锁首次确认 +* @param 无 +* @return ATS设置/取消全线区段封锁首次确认 +* Created By fan 2025.12.13 +*/ +AtsMsgCfmStru * GetAtsFlockCfmFst(void); + +/** +* @brief 获取ATS取消全线区段封锁二次确认 +* @param 无 +* @return ATS取消全线区段封锁二次确认 +* Created By fan 2025.12.13 +*/ +AtsMsgCfmStru * GetAtsFlockCfmSnd(void); + +/** +* @brief 清除第二个ATS的全线区段封锁一次信息 +* @param 无 +* @return 无 +* @note Created By fan 2025.12.15 +*/ +void ClearSndAtsAllFlockFstCfmMsg(void); + + +/** +* @brief 清除1次ATS取消全线CESB封锁信息 +* @param void +* @return void +* Created By fan 2026.02.04 +*/ +void ClearAtsCesbMsgFirst(void); + +/** +* @brief 清除2次ATS取消全线CESB封锁信息 +* @param void +* @return void +* Created By fan 2026.02.04 +*/ +void ClearAtsCesbMsgSecond(void); + +/** +* @brief 获取ATS取消全线CESB封锁首次消息 +* @param 无 +* @return ATS设置/取消区间疏散首次消息 +* Created By fan 2026.02.04 +*/ +AtsCESBCancleMsgStru * GetAtsCesbMsgFst(void); +/** +* @brief 获取ATS取消全线CESB封锁二次消息 +* @param 无 +* @return ATS取消全线CESB封锁二次消息 +* Created By fan 2026.02.04 +*/ +AtsCESBCancleMsgStru * GetAtsCesbMsgSnd(void); + +/** +* @brief 获取ATS取消全线CESB封锁首次确认 +* @param 无 +* @return ATS设置/取消全线CESB封锁首次确认 +* Created By fan 2026.02.04 +*/ +AtsMsgCfmStru * GetAtsCesbCfmFst(void); + +/** +* @brief 获取ATS取消全线CESB封锁二次确认 +* @param 无 +* @return ATS取消全线CESB封锁二次确认 +* Created By fan 2026.02.04 +*/ +AtsMsgCfmStru * GetAtsCesbCfmSnd(void); + +/** +* @brief 清除第二个ATS的全线CESB封锁一次信息 +* @param 无 +* @return 无 +* Created By fan 2026.02.04 +*/ +void ClearSndAtsCesbFstCfmMsg(void); + +/** +* @brief 获取ATS全站解封解锁首次消息 +* @param 无 +* @return ATS全站解封解锁首次消息 +* Created By mpt 2026.2.8 +*/ +AtsJieFengJieSuoMsgStru* GetAtsJieFengJieSuoMsgFst(void); +/** +* @brief 获取ATS全站解封解锁二次消息 +* @param 无 +* @return ATS全站解封解锁二次消息 +* Created By mpt 2026.2.8 +*/ +AtsJieFengJieSuoMsgStru* GetAtsJieFengJieSuoMsgSnd(void); +/** +* @brief 获取ATS全站解封解锁首次确认 +* @param 无 +* @return ATS全站解封解锁首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsJieFengJieSuoCfmFst(void); +/** +* @brief 获取ATS全站解封解锁二次确认 +* @param 无 +* @return ATS全站解封解锁二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsJieFengJieSuoCfmSnd(void); +/** +* @brief 清除ATS全站解封解锁首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsJieFengJieSuoMsgFirst(void); +/** +* @brief 清除ATS全站解封解锁二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsJieFengJieSuoMsgSecond(void); +/** +* @brief 获取ATS道岔强转首次消息 +* @param 无 +* @return ATS道岔强转首次消息 +* Created By mpt 2026.2.8 +*/ +AtsSwitchForceMsgStru* GetAtsSwitchForceMsgFst(void); +/** +* @brief 获取ATS道岔强转二次消息 +* @param 无 +* @return ATS道岔强转二次消息 +* Created By mpt 2026.2.8 +*/ +AtsSwitchForceMsgStru* GetAtsSwitchForceMsgSnd(void); +/** +* @brief 获取ATS道岔强转首次确认 +* @param 无 +* @return ATS道岔强转首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsSwitchForceCfmFst(void); +/** +* @brief 获取ATS道岔强转二次确认 +* @param 无 +* @return ATS道岔强转二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsSwitchForceCfmSnd(void); +/** +* @brief 清除ATS道岔强转首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsSwitchForceMsgFirst(void); +/** +* @brief 清除ATS道岔强转二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsSwitchForceMsgSecond(void); +/** +* @brief 获取ATS计轴预复位首次消息 +* @param 无 +* @return ATS计轴预复位首次消息 +* Created By mpt 2026.2.8 +*/ +AtsPhyPreResetMsgStru* GetAtsPhyPreResetMsgFst(void); +/** +* @brief 获取ATS计轴预复位二次消息 +* @param 无 +* @return ATS计轴预复位二次消息 +* Created By mpt 2026.2.8 +*/ +AtsPhyPreResetMsgStru* GetAtsPhyPreResetMsgSnd(void); +/** +* @brief 获取ATS计轴预复位首次确认 +* @param 无 +* @return ATS道岔强转首次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsPhyPreResetCfmFst(void); +/** +* @brief 获取ATS计轴预复位二次确认 +* @param 无 +* @return ATS道岔强转二次确认 +* Created By mpt 2026.2.8 +*/ +AtsMsgCfmStru* GetAtsPhyPreResetCfmSnd(void); + +/** +* @brief 清除ATS计轴预复位首次消息 +* @param void +* @return void +* Created By mpt 2026.2.8 +*/ +void ClearAtsPhyPreResetMsgFirst(void); +/** +* @brief 清除ATS计轴预复位二次消息 +* @param void +* @return void +* *Created By mpt 2026.2.8 +*/ +void ClearAtsPhyPreResetMsgSecond(void); +/** +* @brief 清除第二个ATS全站解封解锁一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsJieFengJieSuoCfmMsg(void); +/** +* @brief 清除第二个ATS道岔强转一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsSwitchForceCfmMsg(void); +/** +* @brief 清除第二个ATS计轴复位一次信息 +* @param 无 +* @return 无 +* *Created By mpt 2026.2.8 +*/ +void ClearSndAtsPhyPreResetCfmMsg(void); + + #endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c index 64c9048..d4634a4 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c @@ -237,7 +237,11 @@ UINT8 ParseOtherSysToCiData(void) if (ocId == chLocalCiId)/*如果oc id所属的ci id为本机联锁id*/ { oc2ciParseResult = ParseOcToCiDataFrame(data, (UINT16)dataLen, devId); - if (CI_CHECK_LEN_ERROR == oc2ciParseResult) + if (CI_ERROR == oc2ciParseResult) + { + /*解析OC数据错误处理,这个错误已经处理,连续10个周期,会通信中断,导向安全*/ + } + else if (CI_CHECK_LEN_ERROR == oc2ciParseResult) { /*长度校验错误处理,把此OC原始缓存所有设备状态导向安全*/ /* 长度校验失败处理: @@ -257,11 +261,7 @@ UINT8 ParseOtherSysToCiData(void) } else { - /*其它值,清除缓存数据*/ - ResetOcOriginalState(devId); - ConvertOcOriginDataToPtData();/*把解析的OC板卡数据转换为OC点位数据*/ - ConvertOcOriginDataToOcSigSwDev();/*把解析的OC设备数据转换为OC 信号机和 OC 道岔设备数据和OC轨道区段数据*/ - debug_infor_printf((const)"OC Id %d parse ERROR.", devId); + /*其它值,什么也不做*/ } } else @@ -1010,11 +1010,8 @@ UINT8 PackCiToOtherSysData(void) } else { - /*不处理*/ + PackCiToVobcFlyProtectData(); /*组飞车特控报文*/ } - - /*组飞车特控报文*/ - PackCiToVobcFlyProtectData(); #ifdef APPCI_MAINTAIN_DEBUG #ifdef PLATFORM_2OO2 @@ -1040,6 +1037,8 @@ UINT8 PackCiToOtherSysData(void) PackCiToCimFlyProtectData(); /*发送维护机IO双系采集不一致报警*/ PackCiToCimCollDiffData(); + /*发送维护机接触网供电状态报警*/ + PackCiToCimOHLData(); /*发送给AIM退出运营信息*/ AIMOutput(); /*发送给维护机执行单元报警信息*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c index e9a37f7..068df3e 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c @@ -1194,22 +1194,6 @@ void ResetOcOriginalState(const UINT8 ocId) } SetOcToCiDefaultDataStru(toFindIndex);/*置屏蔽门信息为安全侧*/ - - m_OcToCiOrginDataArr[toFindIndex].PowerAState = (UINT8)0xff; - m_OcToCiOrginDataArr[toFindIndex].PowerBState = (UINT8)0xff; - m_OcToCiOrginDataArr[toFindIndex].OCDevFaultState = (UINT8)0xff; - m_OcToCiOrginDataArr[toFindIndex].FanState = (UINT8)0xff; - - for (ii = 0u; ii < m_OcToCiOrginDataArr[toFindIndex].OCBoardSwapSysNum; ii++) - { - m_OcToCiOrginDataArr[toFindIndex].SwapSysBoardId[ii] = 0U; - } - m_OcToCiOrginDataArr[toFindIndex].OCBoardSwapSysNum = 0U; - - CommonMemSet(m_OcToCiOrginDataArr[toFindIndex].szPlusBox, (UINT32)(MAX_OC_PLUS_BOX_NUM)*(sizeof(OcPlusBox)), 0U, (UINT32)(MAX_OC_PLUS_BOX_NUM*(sizeof(OcPlusBox)))); - m_OcToCiOrginDataArr[toFindIndex].chPbNum = 0U; - - SetAllCleFarePCBButKeepSta(m_OcToCiOrginDataArr[toFindIndex].OcId, QK_PSD_BUTTON_STATE_UP); } } @@ -1357,6 +1341,10 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U pTmpOcToCiData->OcId = systemId; /*oc id赋值*/ + pTmpOcToCiData->ComStartCycle = Get2oo2CurCycleNum();/*保存收到OC数据时的通信开始周期*/ + + debug_infor_printf((const)"\nId:%d OC_COM:%d\n",pTmpOcToCiData->OcId,pTmpOcToCiData->ComStartCycle); + if (OC_CI_STATE_INFO == appInfoType)/*OC给CI的状态信息 0x8802*/ { /*by cgh 20230831 增加转辙机状态接口*/ @@ -1929,10 +1917,6 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_OC, systemId, hlhtGalHead.recvOppMsgSN); SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_OC, systemId, hlhtGalHead.preOwnMsgSN); SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_OC, systemId, curntCycleNo); - - /*解析通过 更新通信周期*/ - pTmpOcToCiData->ComStartCycle = Get2oo2CurCycleNum();/*保存收到OC数据时的通信开始周期*/ - debug_infor_printf((const)"\nId:%d OC_COM:%d\n", pTmpOcToCiData->OcId, pTmpOcToCiData->ComStartCycle); if(findFlag ==0u) /*如果需要更新的oc索引没找到,则认为这包数据是新的oc数据,需要增加oc总数量*/ { @@ -2700,46 +2684,9 @@ UINT16 GetKqChangeCommand(void) } -/* -* 功能描述: 获取点位采集容忍起始周期 -* 参数说明: const UINT16 ocId, OC ID -* const UINT8 boardNum, 板卡ID -* const UINT8 pointNum,点位ID -* 返回值 : UINT32 采集容忍起始周期 -*/ -UINT32 GetPointTolerateCycNum(const UINT16 ocId, const UINT8 boardNum, const UINT8 pointNum) -{ - UINT32 retVal = CI_ERROR; - - if ((OC_SUM_MAX > ocId) && (Oc_Max_Board_Num > boardNum) && (OC_COLL_BOARD_POS_NUM > pointNum)) - { - retVal = m_OcConvertedPtDataArr[ocId].BoardDatas[boardNum].TolerateCycNum[pointNum]; - } - else - {/*不处理*/ - } - - return retVal; -} - -/* -* 功能描述: 设置道岔采集容忍起始周期 -* 参数说明: const UINT16 ocId, OC ID -* const UINT8 boardNum, 板卡ID -* const UINT8 pointNum,点位ID -* const UINT32 cycNum 周期号 -* 返回值 : 无 -*/ -void SetPointTolerateCycNum(const UINT16 ocId, const UINT8 boardNum, const UINT8 pointNum, const UINT32 cycNum) -{ - if ((OC_SUM_MAX > ocId) && (Oc_Max_Board_Num > boardNum) && (OC_COLL_BOARD_POS_NUM > pointNum)) - { - m_OcConvertedPtDataArr[ocId].BoardDatas[boardNum].TolerateCycNum[pointNum] = cycNum; - } - else - {/*不处理*/ - } -} + + + diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h index a63cf8d..3637ce8 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h @@ -196,7 +196,6 @@ typedef struct S_OcBoardDataStruct1 UINT8 BoardAddress; /*板子地址*/ UINT8 BoardState; /*板卡状态,0x55:正常,0xaa:故障*/ UINT8 PosValueBuf[OC_COLL_BOARD_POS_NUM]; /*板子各位置数据*/ - UINT32 TolerateCycNum[OC_COLL_BOARD_POS_NUM];/*板子各位置容忍周期*/ }CollBoardData; typedef struct S_OcCollBoardDataStruct @@ -461,23 +460,6 @@ void SetOcToCiDefaultDataStru(UINT8 index); */ UINT16 GetKqChangeCommand(void); -/* -* 功能描述: 获取点位采集容忍起始周期 -* 参数说明: const UINT16 switchId, 道岔ID -* 返回值 : UINT32 采集容忍起始周期 -*/ -UINT32 GetPointTolerateCycNum(const UINT16 ocId, const UINT8 boardNum, const UINT8 pointNum); - -/* -* 功能描述: 设置道岔采集容忍起始周期 -* 参数说明: const UINT16 ocId, OC ID -* const UINT8 boardNum, 板卡ID -* const UINT8 pointNum,点位ID -* const UINT32 cycNum 周期号 -* 返回值 : 无 -*/ -void SetPointTolerateCycNum(const UINT16 ocId, const UINT8 boardNum, const UINT8 pointNum, const UINT32 cycNum); - #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackPSCData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackPSCData.c index f1bfb50..4bced48 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackPSCData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackPSCData.c @@ -42,8 +42,6 @@ UINT8 InitialPscToCiData(void) UINT16 psdId = 0u; UINT8 pscId = 0u; UINT8 deviceSum =0u;/*通信设备总数*/ - UINT8* deviceIdBuf = NULL;/*通信设备ID数组*/ - UINT8 psdSum = (UINT8)PSC_INCLUDE_PSD_MAX_SUM; UINT8 retVal = CI_SUCCESS; PscConfigDataStruct *pPSC = NULL; deviceSum = (UINT8)GetPscCurSum(); /*获取通信PSC设备总数*/ @@ -245,7 +243,6 @@ UINT8 ParsePscToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const */ UINT8 PackCiToPscData(UINT8 deviceId) { - UINT8 localCi = GetSystemParaLocalCiId(); /*本地联锁ID*/ UINT8 CiToPscDataBuffer[PSC_TO_CI_DATA_LEN_MAX] = {0u}; /*CI到PSC组帧数组*/ UINT16 devCurSum = 0u; /*设备总数*/ UINT16 devId = 0u; /*设备ID*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c index 3a2896b..767b0cc 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c @@ -133,7 +133,6 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) UINT8 localCiId = 0u; /*联锁ID*/ UINT8 headRet = HLHT_HEAD_ERROR;/*互联互通检查结果*/ INT32 InfoRemainValidity = 0; - UINT8 cTiocTmcPrtclVersion = TIOC_TMC_PRTCL_VER; /* 接口协议版本号 */ UINT8 cFunRetVal = CI_ERROR; UINT16 wMsgLen = 0u; UINT16 wMsgCheckLen = 0u; /* 用于解析校验的数据长度 */ @@ -191,14 +190,9 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) if (0 < InfoRemainValidity ) {/*报文有效,继续解析*/ - if (0u == hlhtGalHead.totalDataLen) + if ((2U > hlhtGalHead.totalDataLen) || (TIOC_TO_TMC_DATA_LEN_MAX < (hlhtGalHead.totalDataLen + 31U))) { - /* 仅有GAL头信息 */ - retVal = CI_ERROR; - } - else if (2u > hlhtGalHead.totalDataLen) - { - /* 数据长度错误,返回失败 */ + debug_infor_printf((const)"\nParseTmcToTiocDataFrame Error: GalTotalLen[%d] Is Invalid\n", hlhtGalHead.totalDataLen); retVal = CI_ERROR; } else @@ -236,33 +230,45 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) case TMC_TO_TIOC_TSR_MSG: /* 解析TMC临时限速信息 */ retVal = ParseTsrData(&dataBuf[ii], wMsgCheckLen); - dwParseStep |= 0x10000U; + dwParseStep |= 0x1000000U; debug_infor_printf((const)"\n ParseTsrData:%d", retVal); break; case TMC_TO_TIOC_SNOW_MSG: /*解析全线雨雪模式信息*/ retVal = ParseSnowData(&dataBuf[ii], wMsgCheckLen); - dwParseStep |= 0x01000U; + dwParseStep |= 0x0100000U; debug_infor_printf((const)"\n ParseSnowData:%d", retVal); break; case TMC_TO_TIOC_WLS_MSG: /* 解析免筛信息 */ retVal = ParseWLSData(&dataBuf[ii], wMsgCheckLen); - dwParseStep |= 0x00100U; + dwParseStep |= 0x0010000U; debug_infor_printf((const)"\n ParseWLSData:%d", retVal); break; case TMC_TO_TIOC_ITELINECUT_MSG: /* 解析ITE全线切除信息 */ retVal = ParseIteCutData(&dataBuf[ii], wMsgCheckLen); - dwParseStep |= 0x00010U; + dwParseStep |= 0x0001000U; debug_infor_printf((const)"\n ParseIteCutData:%d", retVal); break; case TMC_TO_TIOC_LINECT_MSG: /* 解析全线通信车信息 */ retVal = ParseLineCTData(&dataBuf[ii], wMsgCheckLen); - dwParseStep |= 0x00001U; + dwParseStep |= 0x0000100U; debug_infor_printf((const)"\n ParseLineCTData:%d", retVal); break; + case TMC_TO_TIOC_ACCEL_MSG: + /* 解析牵引加速度信息 */ + retVal = ParseAccelerationData(&dataBuf[ii], wMsgCheckLen); + dwParseStep |= 0x0000010U; + debug_infor_printf((const)"\n ParseAccelerationData:%d", retVal); + break; + case TMC_TO_TIOC_BRAKE_MSG: + /* 解析制动率信息 */ + retVal = ParseBrakeRateData(&dataBuf[ii], wMsgCheckLen); + dwParseStep |= 0x0000001U; + debug_infor_printf((const)"\n ParseBrakeRateData:%d", retVal); + break; default: retVal = CI_ERROR; break; @@ -289,10 +295,20 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) } } - /*校验TMC发送的帧是否完整,每加一帧、位得加1*/ - if ((CI_SUCCESS == retVal) && (0x11111U != dwParseStep)) + /*校验总长度*/ + if ((hlhtGalHead.totalDataLen + (UINT16)31U) != ii) { - debug_infor_printf((const)"\nParseTmcToTiocDataFrame Error: ParseStep Is 0x%05x\n", dwParseStep); + debug_infor_printf((const)"\nParseTmcToTiocDataFrame TotalLen Error: totalDataLen:%d, ii:%d\n", hlhtGalHead.totalDataLen, (ii-(UINT16)31U)); + retVal = CI_ERROR; + } + else + {/*不处理*/ + } + + /*校验TMC发送的帧是否完整,每加一帧、位得加1*/ + if ((CI_SUCCESS == retVal) && (0x1111111U != dwParseStep)) + { + debug_infor_printf((const)"\nParseTmcToTiocDataFrame Error: ParseStep Is 0x%07x\n", dwParseStep); retVal = CI_ERROR; /*缺少某帧,解析失败*/ } else @@ -311,7 +327,7 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_TMC, systemId, curntCycleNo); SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_TMC, systemId, 0u); - galHeadSaved = 1; + galHeadSaved = 1U; } else { @@ -335,7 +351,7 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_TMC, systemId, curntCycleNo); SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_TMC, systemId, 0u); - galHeadSaved = 1; + galHeadSaved = 1U; } else { @@ -436,13 +452,10 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) static UINT8 ParseTsrData(UINT8* dataBuf, UINT16 dataLen) { UINT8 cRetVal = CI_ERROR; - UINT8 cFunRetVal = 0u; /* 返回结果 */ UINT16 ii = 0u; UINT8 jj = 0u; UINT8 kk = 0u; - TsrDataStruct* pTmpTsrInfo = NULL; UINT8 cTiocId = 0u; - UINT8 cDevTiocId = 0u; UINT16 tsrMaxCmdSum = 0u; UINT16 tsrMaxSecSum = 0u; @@ -527,19 +540,18 @@ static UINT8 ParseTsrData(UINT8* dataBuf, UINT16 dataLen) { ; /* do nothing */ } - - /* 解析临时限速数量 */ + + /* 解析临时限速信息 */ if (CI_SUCCESS == cRetVal) { cTiocId = GetSystemParaLocalCiId(); /*获取联锁ID*/ - for (jj = 0u; jj < g_TmcToTiocDataStru.tsrInputInfoStru.cTsrSum;jj++) + for (jj = 0u; jj < g_TmcToTiocDataStru.tsrInputInfoStru.cTsrSum; jj++) { /* 限速值 */ - g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cSpeed = dataBuf[ii]; + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cSpeed = dataBuf[ii]; ii++; - if ((0u == g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cSpeed) - || (UINT8_MAX == g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cSpeed)) + if ((0u == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cSpeed)) { cRetVal = CI_ERROR; } @@ -548,14 +560,13 @@ static UINT8 ParseTsrData(UINT8* dataBuf, UINT16 dataLen) ; /* do nothing */ } - /* 限速区段数量 */ + /* 起点限速区段编号 */ if (CI_SUCCESS == cRetVal) { - g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cLogSecSum = dataBuf[ii]; - ii++; - if ((TSR_SEC_MAX_SUM < g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cLogSecSum) - ||(0u == g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cLogSecSum) - ||(tsrMaxSecSum < g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj].cLogSecSum)) + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrStartSecId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + if ((UINT16_MAX <= g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrStartSecId) + || (0u == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrStartSecId)) { cRetVal = CI_ERROR; } @@ -569,49 +580,105 @@ static UINT8 ParseTsrData(UINT8* dataBuf, UINT16 dataLen) ; /* do nothing */ } - /* 限速区段ID */ + /* 终点限速区段编号 */ if (CI_SUCCESS == cRetVal) { - pTmpTsrInfo = &g_TmcToTiocDataStru.tsrInputInfoStru.szTsrInfo[jj]; - for (kk = 0u; kk < pTmpTsrInfo->cLogSecSum;kk++) + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrEndSecId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + if ((UINT16_MAX <= g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrEndSecId) + || (g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].wTsrEndSecId < 1u)) { - pTmpTsrInfo->szLogSecId[kk] = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - if ((0u == pTmpTsrInfo->szLogSecId[kk]) || (UINT16_MAX == pTmpTsrInfo->szLogSecId[kk])) - { - cRetVal = CI_ERROR; - } - else - { - cDevTiocId = GetLogSecBelongCiId(pTmpTsrInfo->szLogSecId[kk]); - - if ((0u != cTiocId) && (cDevTiocId == cTiocId)) - { - ; /* 是本TIOC的逻辑区段 */ - } - else - { - cRetVal = CI_ERROR; - } - } - - if (CI_ERROR == cRetVal) - { - break; - } - else - { - ; /* do nothing */ - } + cRetVal = CI_ERROR; + } + else + { + ; /* do nothing */ } - } else { ; /* do nothing */ } + /* 临时限速起点限速区段至终点限速区段的逻辑方向 */ + if (CI_SUCCESS == cRetVal) + { + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrLogDir = dataBuf[ii]; + ii++; + if ((TSRSEC_LOG_DIR_SAME == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrLogDir) + || (TSRSEC_LOG_DIR_OPPOSITE == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrLogDir)) + { + cRetVal = CI_SUCCESS; + } + else + { + cRetVal = CI_ERROR; /* do nothing */ + } + } + else + { + ; /* do nothing */ + } + /* 临时限速包含的道岔数量 */ + if (CI_SUCCESS == cRetVal) + { + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrSwitchSum = dataBuf[ii]; + ii++; + if ((TSR_SWITCH_NUM_MAX < g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrSwitchSum)) + { + cRetVal = CI_ERROR; + } + else + { + ; /* do nothing */ + } + } + else + { + ; /* do nothing */ + } + + for (kk = 0u; kk < g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].cTsrSwitchSum; kk++) + { + /* 临时限速包含的道岔编号 */ + if (CI_SUCCESS == cRetVal) + { + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].TsrSwitchId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + if ((UINT16_MAX <= g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].TsrSwitchId) + || (g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].TsrSwitchId < 1u)) + { + cRetVal = CI_ERROR; + } + else + { + /* do nothing */ + } + + } + else + { + /* do nothing */ + } + /* 临时限速包含道岔编号的位置 */ + if (CI_SUCCESS == cRetVal) + { + g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].cTsrSwitchPostion = dataBuf[ii]; + ii++; + if ((TSRSEC_SWITCH_POS_DINGWEI == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].cTsrSwitchPostion) + || (TSRSEC_SWITCH_POS_FANWEI == g_TmcToTiocDataStru.tsrInputInfoStru.tmcTsrInfo[jj].switchData[kk].cTsrSwitchPostion)) + { + cRetVal = CI_SUCCESS; + } + else + { + cRetVal = CI_ERROR; + } + } + + } + + if (CI_ERROR == cRetVal) { break; @@ -627,6 +694,30 @@ static UINT8 ParseTsrData(UINT8* dataBuf, UINT16 dataLen) ; /* do nothing */ } + /*解析台风限速数据*/ + if (CI_SUCCESS == cRetVal) + { + g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonlimitState = dataBuf[ii]; + ii++; + + g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonSpeedlimit = dataBuf[ii]; + ii++; + if (((0x55U == g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonlimitState) && (0u == g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonSpeedlimit)) + || ((0xAAU == g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonlimitState) && (0u < g_TmcToTiocDataStru.tsrInputInfoStru.tsdsInputInfoStru.typhoonSpeedlimit))) + { + cRetVal = CI_SUCCESS; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + ;/*不处理*/ + } + + if (dataLen != ii) { cRetVal = CI_ERROR; @@ -850,7 +941,7 @@ static UINT8 ParseWLSData(UINT8* dataBuf, UINT16 dataLen) UINT8 PackTiocToTmcData( UINT8 deviceId) { UINT8 localCi = 0u; /*本地联锁ID*/ - UINT8 TiocToTmcDataBuffer[TIOC_TO_TMC_DATA_LEN_MAX] = {0u};/*CI到ZC组帧数组*/ + UINT8 TiocToTmcDataBuffer[TIOC_TO_TMC_DATA_LEN_MAX] = {0u};/*RC到TMC组帧数组*/ UINT16 ii = 0u; UINT32 cTiocEtcsId = 0u;/*TIOC互联互通编号*/ UINT32 cTmcEtcsId = 0u; /*TMC互联互通编号*/ @@ -913,20 +1004,33 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) switch (cStep) { case 0u: + /*组限速信息*/ wMagLen = PackToTmcTsrData(&TiocToTmcDataBuffer[ii]); break; case 1u: + /*组雨雪信息*/ wMagLen = PackToTmcSnowData(&TiocToTmcDataBuffer[ii]); break; case 2u: + /*组免筛信息*/ wMagLen = PackToTmcWLScreenData(&TiocToTmcDataBuffer[ii]); break; case 3u: + /*组ITE切除信息*/ wMagLen = PackToTmcIteCutData(&TiocToTmcDataBuffer[ii]); break; case 4U: + /*组全线通信车信息*/ wMagLen = PackToTmcLineCTData(&TiocToTmcDataBuffer[ii]); break; + case 5U: + /*组牵引加速度信息*/ + wMagLen = PackToTMCAccelerationData(&TiocToTmcDataBuffer[ii]); + break; + case 6U: + /*组制动率信息*/ + wMagLen = PackToTMCBrakeRateData(&TiocToTmcDataBuffer[ii]); + break; default: cStepRetVal = CI_ERROR; break; @@ -947,6 +1051,7 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) else { /* 长度无效 */ + debug_infor_printf((const)"\nPackTiocToTmcData Err: Step[%d]\n", cStep); cStepRetVal = CI_ERROR; retVal = CI_ERROR; } @@ -955,14 +1060,28 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) /* 填充数据长度 */ if (CI_SUCCESS == retVal) { - wAppDataLen = ii - wAppDataLenIndex; - wAppDataLen -= 2u; - /* 组应用数据长度 */ - ShortToChar(wAppDataLen, &TiocToTmcDataBuffer[wAppDataLenIndex]); + if (TIOC_TO_TMC_DATA_LEN_MAX >= ii) + { + wAppDataLen = ii - wAppDataLenIndex; + wAppDataLen -= 2U; + /* 组应用数据长度 */ + ShortToChar(wAppDataLen, &TiocToTmcDataBuffer[wAppDataLenIndex]); + } + else + { + debug_infor_printf((const)"\nPackTiocToTmcData Err: PackedLen[%d] Exceed Max[%d]\n", ii, TIOC_TO_TMC_DATA_LEN_MAX); + retVal = CI_ERROR; /*组包数量超限,返回失败*/ + } + } + else + { + /*组包失败,返回失败*/ } - } - + else + { + /*不处理*/ + } /* 写入发送队列 */ if (CI_SUCCESS == retVal) @@ -986,6 +1105,10 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) retVal = CI_ERROR; } } + else + { + /*不处理*/ + } return retVal; } @@ -1034,17 +1157,17 @@ static UINT16 PackToTmcTsrData(UINT8* TiocToTmcDataBuffer) UINT16 wRetVal = 0u; UINT8 startLockFlag = 0u; UINT8 cTsrSum = 0u; /* 临时限速数量 */ - UINT8 cTsrSecSum = 0u; /* 限速区段 */ UINT8 cFunRetVal = CI_ERROR; - UINT8 cAllLineTsrState = CI_ALL_LINE_TSR_UNVALID; + UINT8 cAllLineTsrState = 0x55U; UINT8 cAllLineTsrSpeed = 0u; - TsrDataStruct* pTsrData = NULL; + TsrTMCDataStruct* pTsrData = NULL; + TyphoonSpeedDataStruct typhoonSpeedData = { FLAG_UNSL,0U }; - cTsrSum = GetTsrSum(); - pTsrData = GetTsrData(); + cTsrSum = GetTsrTMCSum(); + pTsrData = GetTsrTMCData(); startLockFlag = GetStartLockFlag(); - cAllLineTsrState = GetAllLineTsrState(); - cAllLineTsrSpeed = GetAllLineTsrSpeed(); + cAllLineTsrState = GetCacheAllSpeedState(); + cAllLineTsrSpeed = GetCacheAllSpeedNum(); if ((NULL != TiocToTmcDataBuffer) && (NULL != pTsrData)) { @@ -1066,11 +1189,11 @@ static UINT16 PackToTmcTsrData(UINT8* TiocToTmcDataBuffer) TiocToTmcDataBuffer[ii++] = 0x55u;/* 临时限速有效 */ /* 全线临时限速信息 */ - if (CI_ALL_LINE_TSR_VALID == cAllLineTsrState) + if (FLAG_SL == cAllLineTsrState) { TiocToTmcDataBuffer[ii++] = 0xAAu; } - else if (CI_ALL_LINE_TSR_UNVALID == cAllLineTsrState) + else if (FLAG_UNSL == cAllLineTsrState) { TiocToTmcDataBuffer[ii++] = 0x55u; } @@ -1094,38 +1217,77 @@ static UINT16 PackToTmcTsrData(UINT8* TiocToTmcDataBuffer) { TiocToTmcDataBuffer[ii++] = pTsrData[jj].cSpeed;/* 限速速度 */ - cTsrSecSum = pTsrData[jj].cLogSecSum; - - if ((0u == cTsrSecSum) || (TSR_SEC_MAX_SUM < cTsrSecSum)) + /* 起点限速区段编号 */ + if ((UINT16_MAX <= pTsrData[jj].wTsrStartSecId) + || (0u == pTsrData[jj].wTsrStartSecId)) { cFunRetVal = CI_ERROR; } else { - TiocToTmcDataBuffer[ii++] = cTsrSecSum;/* 限速区段数量 */ + ShortToChar(pTsrData[jj].wTsrStartSecId, &TiocToTmcDataBuffer[ii]); /* 组起点限速区段编号 */ + ii += 2u; + } + - for (kk = 0u; kk < cTsrSecSum; kk++) + /* 终点限速区段编号 */ + if ((UINT16_MAX <= pTsrData[jj].wTsrEndSecId) + || (0u == pTsrData[jj].wTsrEndSecId)) + { + cFunRetVal = CI_ERROR; + } + else + { + ShortToChar(pTsrData[jj].wTsrEndSecId, &TiocToTmcDataBuffer[ii]); /* 组起点限速区段编号 */ + ii += 2u; + } + + + /* 临时限速起点限速区段至终点限速区段的逻辑方向 */ + if ((0x55u == pTsrData[jj].cTsrLogDir) + || (0xAAu == pTsrData[jj].cTsrLogDir)) + { + TiocToTmcDataBuffer[ii++] = pTsrData[jj].cTsrLogDir; /*组临时限速起点限速区段至终点限速区段的逻辑方向*/ + } + else + { + cFunRetVal = CI_ERROR; /* do nothing */ + } + /* 临时限速包含的道岔数量 */ + if ((TSR_SWITCH_NUM_MAX < pTsrData[jj].cTsrSwitchSum)) + { + cFunRetVal = CI_ERROR; + } + else + { + TiocToTmcDataBuffer[ii++] = pTsrData[jj].cTsrSwitchSum; /*组临时限速包含的道岔数量*/ + } + + for (kk = 0u; kk < pTsrData[jj].cTsrSwitchSum; kk++) + { + /* 临时限速包含的道岔编号 */ + if ((UINT16_MAX <= pTsrData[jj].switchData[kk].TsrSwitchId) + || (pTsrData[jj].switchData[kk].TsrSwitchId < 1u)) { - /* 组逻辑区段ID */ - if ((0u == pTsrData[jj].szLogSecId[kk]) || (UINT16_MAX == pTsrData[jj].szLogSecId[kk])) - { - cFunRetVal = CI_ERROR; - } - else - { - ShortToChar(pTsrData[jj].szLogSecId[kk], &TiocToTmcDataBuffer[ii]); - ii += 2u; - } - - if (CI_ERROR == cFunRetVal) - { - break; - } - else - { - } + cFunRetVal = CI_ERROR; + } + else + { + ShortToChar(pTsrData[jj].switchData[kk].TsrSwitchId, &TiocToTmcDataBuffer[ii]); /* 组临时限速包含的道岔编号 */ + ii += 2u; + } + /* 临时限速包含道岔编号的位置 */ + if ((TSRSEC_SWITCH_POS_DINGWEI == pTsrData[jj].switchData[kk].cTsrSwitchPostion) + || (TSRSEC_SWITCH_POS_FANWEI == pTsrData[jj].switchData[kk].cTsrSwitchPostion)) + { + TiocToTmcDataBuffer[ii++] = pTsrData[jj].switchData[kk].cTsrSwitchPostion; /*组临时限速包含道岔编号的位置*/ + } + else + { + cFunRetVal = CI_ERROR; } } + if (CI_ERROR == cFunRetVal) { @@ -1133,9 +1295,24 @@ static UINT16 PackToTmcTsrData(UINT8* TiocToTmcDataBuffer) } else { + } } } + + /*组包台风限速*/ + typhoonSpeedData = GetgTyphSpeedInfo(); + TiocToTmcDataBuffer[ii++] = typhoonSpeedData.typhoonlimitState; + TiocToTmcDataBuffer[ii++] = typhoonSpeedData.typhoonSpeedlimit; + if (((0x55U == typhoonSpeedData.typhoonlimitState) && (0U == typhoonSpeedData.typhoonSpeedlimit)) + || ((0xAAU == typhoonSpeedData.typhoonlimitState) && (0U < typhoonSpeedData.typhoonSpeedlimit))) + { + cFunRetVal = CI_SUCCESS; + } + else + { + cFunRetVal = CI_ERROR; + } } else { @@ -1146,6 +1323,11 @@ static UINT16 PackToTmcTsrData(UINT8* TiocToTmcDataBuffer) TiocToTmcDataBuffer[ii++] = 0u;/* 未设置全线临时限速 */ TiocToTmcDataBuffer[ii++] = 0u;/* 限速数量发0 */ + + TiocToTmcDataBuffer[ii++] = 0x55u;/* 台风限速状态发未设置 0x55 */ + + TiocToTmcDataBuffer[ii++] = 0u; /* 台风限速值发0 */ + } } else @@ -1756,5 +1938,491 @@ static UINT16 PackToTmcLineCTData(UINT8* TiocToTmcDataBuffer) /*入参非法,不处理*/ } + return wRetVal; +} + +/* +* 功能描述:解析牵引加速度信息 +* 参数说明:const UINT8* dataBuf 数据缓冲区 +* const UINT16 dataLength 数据长度 +* 返 回 值:CI_ERROR 0 数据解析失败 +* CI_SUCCESS 1 数据解析成功 +* Created By LQ 2026.02.04 +*/ +UINT8 ParseAccelerationData(UINT8* dataBuf, UINT16 dataLen) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cAllLineAccState = 0U; /*全线牵引加速度设置状态*/ + UINT8 cAllLineAccValue = 0U; /*全线牵引加速度设置值*/ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 cAreaNum = 0U; /*区间数量*/ + UINT16 wAreaId = 0U; /*区间ID*/ + UINT8 cAreaAccValue = 0U; /*区间牵引加速度设置值*/ + UINT8 cTmepNum = 0U; + UINT8 cAreaBelongCiId = 0U; /*区间关联SPKS所属CI*/ + UINT8 cLocalCiId = 0U; + + if (NULL != dataBuf) + { + cRetVal = CI_SUCCESS; + + cAllLineAccState = dataBuf[ii]; /*解析全线牵引加速度设置状态*/ + ii++; + + cAllLineAccValue = dataBuf[ii]; /*解析全线牵引加速度设置值*/ + ii++; + + if (((CI_ALL_LINE_ACC_VALID == cAllLineAccState) && (0U < cAllLineAccValue) && (UINT8_MAX > cAllLineAccValue)) + || ((CI_ALL_LINE_ACC_UNVALID == cAllLineAccState) && (0U == cAllLineAccValue))) + { + /*已设置全线牵引加速度时,加速度范围[1,254],未设置全线牵引加速度时,加速度应为0*/ + g_TmcToTiocDataStru.cAllLineAccelerationState = cAllLineAccState; /*存储解析的全线牵引加速度设置状态*/ + g_TmcToTiocDataStru.cAllLineAccelerationValue = cAllLineAccValue; /*存储解析的全线牵引加速度设置值*/ + + cAreaNum = dataBuf[ii]; /*解析区间牵引加速度数量*/ + ii++; + + if (ALL_AREA_SNOW_SUM_MAX >= cAreaNum) + { + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < cAreaNum; jj++) + { + wAreaId = ShortFromChar(&dataBuf[ii]); /*解析区间ID*/ + ii += 2U; + + cAreaAccValue = dataBuf[ii]; /*解析区间牵引加速度设置值*/ + ii++; + + if ((0U < wAreaId) && (UINT16_MAX > wAreaId) && (0U < cAreaAccValue) && (UINT8_MAX > cAreaAccValue)) + { + cAreaBelongCiId = GetAreaSnowPlatFormBelongCiId(wAreaId); /*获取区间所属控区*/ + if ((cLocalCiId == cAreaBelongCiId) && (0U != cLocalCiId)) + { + if (LOCAL_AREA_SNOW_SUM_MAX > cTmepNum) + { + g_TmcToTiocDataStru.szAreaAccelerationInfo[cTmepNum].wAreaId = wAreaId; + g_TmcToTiocDataStru.szAreaAccelerationInfo[cTmepNum].cAreaAccelerationValue = cAreaAccValue; + cTmepNum++; + } + else + { + debug_infor_printf((const)"\nParseAccelerationData: Local AreaAccNum Exceed Max[%d]\n", LOCAL_AREA_SNOW_SUM_MAX); + cRetVal = CI_ERROR; /*本控区区间牵引加速度数量超限,停止遍历,返回失败*/ + } + } + else + { + /*非本控区,不保存*/ + } + } + else + { + debug_infor_printf((const)"\nParseAccelerationData: AreaId[%d] Or AreaAccValue[%d] Is Invalid\n", wAreaId, cAreaAccValue); + cRetVal = CI_ERROR; /*区间ID或区间牵引加速度非法,停止遍历,返回失败*/ + } + + if (CI_SUCCESS != cRetVal) + { + break; /*解析失败,停止解析*/ + } + else + { + /*继续解析*/ + } + } + + g_TmcToTiocDataStru.cAreaAccelerationNum = cTmepNum; + + if (CI_SUCCESS == cRetVal) + { + if (dataLen == ii) + { + /*解析成功*/ + } + else + { + debug_infor_printf((const)"\nParseAccelerationData: MsgLen[%d] Is Not Equal ParseLen[%d]\n", dataLen, ii); + cRetVal = CI_ERROR; /*长度不一致,返回失败*/ + } + } + else + { + /*不处理*/ + } + } + else + { + debug_infor_printf((const)"\nParseAccelerationData: Total AreaNum[%d] Exceed Max[%d]\n", cAreaNum, ALL_AREA_SNOW_SUM_MAX); + cRetVal = CI_ERROR; /*区间牵引加速度数量超限,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nParseAccelerationData: AllLineAccState[0x%2x] Or AllLineAccValue[%d] Is Invalid\n", cAllLineAccState, cAllLineAccValue); + cRetVal = CI_ERROR; /*状态非法,返回失败*/ + } + } + else + { + /*入参非法,返回失败*/ + } + + return cRetVal; +} + +/* +* 功能描述:组TMC牵引加速度数据 +* 参数说明:UINT8* TiocToTmcDataBuffer 数据地址 +* 返 回 值:0 组数据失败 +* 其他 整包数据长度 +* Created By LQ 2026.02.04 +*/ +UINT16 PackToTMCAccelerationData(UINT8* TiocToTmcDataBuffer) +{ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT16 wMagLen = 0U; + UINT16 wMagLenIndex = 0U; + UINT16 wRetVal = 0U; + UINT8 cAllLineAccState = 0U; /*全线牵引加速度设置状态*/ + UINT8 cAllLineAccValue = 0U; /*全线牵引加速度设置值*/ + UINT8 cFunRetVal = CI_ERROR; + UINT8 cAreaNum = 0U; /*本地区间牵引加速度数量*/ + AreaAccelerationInfoStruct* pAreaAccData = NULL; /*本地区间牵引加速度信息数组*/ + + if (NULL != TiocToTmcDataBuffer) + { + cFunRetVal = CI_SUCCESS; + + wMagLenIndex = ii; + ii += 2U; + + ShortToChar(TIOC_TO_TMC_ACCEL_MSG, &TiocToTmcDataBuffer[ii]); /* 报文类型 */ + ii += 2U; + + ii += 2U; /*预留两字节*/ + + cAllLineAccState = GetAllLineAccelerationState(); /*获取全线牵引加速度设置状态*/ + + if ((CI_ALL_LINE_ACC_VALID == cAllLineAccState) || (CI_ALL_LINE_ACC_UNVALID == cAllLineAccState)) + { + TiocToTmcDataBuffer[ii] = cAllLineAccState; /*组全线牵引加速度设置状态*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCAccelerationData Err: AllLineAccelerationState[0x%2x] Is Invalid\n", cAllLineAccState); + cFunRetVal = CI_ERROR; /*全线牵引加速度设置状态错误,返回失败*/ + } + + cAllLineAccValue = GetAllLineAccelerationValue(); /*获取全线牵引加速度设置值*/ + if (UINT8_MAX > cAllLineAccValue) + { + TiocToTmcDataBuffer[ii] = cAllLineAccValue; /*组全线牵引加速度设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCAccelerationData Err: AllLineAccelerationValue[%d] Is Invalid\n", cAllLineAccValue); + cFunRetVal = CI_ERROR; /*全线牵引加速度设置值错误,返回失败*/ + } + + /*组区间牵引加速度信息*/ + cAreaNum = GetLocalAreaAccelerationNum(); + pAreaAccData = GetLocalAreaAcceleration(); + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaAccData)) + { + TiocToTmcDataBuffer[ii] = cAreaNum; /*组区间数量*/ + ii++; + + for (jj = 0U; jj < cAreaNum; jj++) + { + if ((0U < pAreaAccData[jj].wAreaId) && (UINT16_MAX > pAreaAccData[jj].wAreaId) + && (0U < pAreaAccData[jj].cAreaAccelerationValue) && (UINT8_MAX > pAreaAccData[jj].cAreaAccelerationValue)) + { + ShortToChar(pAreaAccData[jj].wAreaId, &TiocToTmcDataBuffer[ii]); /*组区间ID*/ + ii += 2U; + + TiocToTmcDataBuffer[ii] = pAreaAccData[jj].cAreaAccelerationValue; /*组区间牵引加速度设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCAccelerationData Err: AreaId[%d] Or AreaAccValue[%d] Is Invalid\n", pAreaAccData[jj].wAreaId, pAreaAccData[jj].cAreaAccelerationValue); + cFunRetVal = CI_ERROR; /*区间信息非法,返回失败*/ + break; + } + } + } + else + { + debug_infor_printf((const)"\nPackToTMCAccelerationData Err: Local AreaAccNum[%d] Exceed Max[%d]\n", cAreaNum, LOCAL_AREA_SNOW_SUM_MAX); + cFunRetVal = CI_ERROR; /*区间牵引加速度数量超限,返回失败*/ + } + + if (CI_SUCCESS == cFunRetVal) + { + /* 填写数据长度 */ + wMagLen = ii - wMagLenIndex; + wRetVal = wMagLen; + wMagLen -= 2U; + + ShortToChar(wMagLen, &TiocToTmcDataBuffer[wMagLenIndex]); + } + else + { + /*组包失败,不处理*/ + } + } + else + { + /*返回失败*/ + } + + return wRetVal; +} + +/* +* 功能描述:解析制动率信息 +* 参数说明:const UINT8* dataBuf 数据缓冲区 +* const UINT16 dataLength 数据长度 +* 返 回 值:CI_ERROR 0 数据解析失败 +* CI_SUCCESS 1 数据解析成功 +* Created By LQ 2026.02.04 +*/ +UINT8 ParseBrakeRateData(UINT8* dataBuf, UINT16 dataLen) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cAllLineBrakeState = 0U; /*全线制动率设置状态*/ + UINT8 cAllLineBrakeValue = 0U; /*全线制动率设置值*/ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 cAreaNum = 0U; /*区间数量*/ + UINT16 wAreaId = 0U; /*区间ID*/ + UINT8 cAreaBrakeValue = 0U; /*区间制动率设置值*/ + UINT8 cTmepNum = 0U; + UINT8 cAreaBelongCiId = 0U; /*区间关联SPKS所属CI*/ + UINT8 cLocalCiId = 0U; + + if (NULL != dataBuf) + { + cRetVal = CI_SUCCESS; + + cAllLineBrakeState = dataBuf[ii]; /*解析全线制动率设置状态*/ + ii++; + + cAllLineBrakeValue = dataBuf[ii]; /*解析全线制动率设置值*/ + ii++; + + if (((CI_ALL_LINE_BRAKE_VALID == cAllLineBrakeState) && (0U < cAllLineBrakeValue) && (UINT8_MAX > cAllLineBrakeValue)) + || ((CI_ALL_LINE_BRAKE_UNVALID == cAllLineBrakeState) && (0U == cAllLineBrakeValue))) + { + /*已设置全线制动率时,制动率范围[1,254],未设置制动率时,制动率应为0*/ + g_TmcToTiocDataStru.cAllLineBrakeRateState = cAllLineBrakeState; /*存储解析的全线制动率设置状态*/ + g_TmcToTiocDataStru.cAllLineBrakeRateValue = cAllLineBrakeValue; /*存储解析的全线制动率设置值*/ + + cAreaNum = dataBuf[ii]; /*解析区间制动率数量*/ + ii++; + + if (ALL_AREA_SNOW_SUM_MAX >= cAreaNum) + { + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < cAreaNum; jj++) + { + wAreaId = ShortFromChar(&dataBuf[ii]); /*解析区间ID*/ + ii += 2U; + + cAreaBrakeValue = dataBuf[ii]; /*解析区间制动率设置值*/ + ii++; + + if ((0U < wAreaId) && (UINT16_MAX > wAreaId) && (0U < cAreaBrakeValue) && (UINT8_MAX > cAreaBrakeValue)) + { + cAreaBelongCiId = GetAreaSnowPlatFormBelongCiId(wAreaId); /*获取区间所属控区*/ + if ((cLocalCiId == cAreaBelongCiId) && (0U != cLocalCiId)) + { + if (LOCAL_AREA_SNOW_SUM_MAX > cTmepNum) + { + g_TmcToTiocDataStru.szAreaBrakeRateInfo[cTmepNum].wAreaId = wAreaId; + g_TmcToTiocDataStru.szAreaBrakeRateInfo[cTmepNum].cAreaBrakeRateValue = cAreaBrakeValue; + cTmepNum++; + } + else + { + debug_infor_printf((const)"\nParseBrakeRateData: Local AreaBrakeNum Exceed Max[%d]\n", LOCAL_AREA_SNOW_SUM_MAX); + cRetVal = CI_ERROR; /*本控区区间制动率数量超限,停止遍历,返回失败*/ + } + } + else + { + /*非本控区,不保存*/ + } + } + else + { + debug_infor_printf((const)"\nParseBrakeRateData: AreaId[%d] Or AreaBrakeValue[%d] Is Invalid\n", wAreaId, cAreaBrakeValue); + cRetVal = CI_ERROR; /*区间ID或区间制动率非法,停止遍历,返回失败*/ + } + + if (CI_SUCCESS != cRetVal) + { + break; /*解析失败,停止解析*/ + } + else + { + /*继续解析*/ + } + } + + g_TmcToTiocDataStru.cAreaBrakeRateNum = cTmepNum; + + if (CI_SUCCESS == cRetVal) + { + if (dataLen == ii) + { + /*解析成功*/ + } + else + { + debug_infor_printf((const)"\nParseBrakeRateData: MsgLen[%d] Is Not Equal ParseLen[%d]\n", dataLen, ii); + cRetVal = CI_ERROR; /*长度不一致,返回失败*/ + } + } + else + { + /*不处理*/ + } + } + else + { + debug_infor_printf((const)"\nParseBrakeRateData: Total AreaNum[%d] Exceed Max[%d]\n", cAreaNum, ALL_AREA_SNOW_SUM_MAX); + cRetVal = CI_ERROR; /*区间制动率数量超限,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nParseBrakeRateData: AllLineBrakeState[0x%2x] Or AllLineBrakeValue[%d] Is Invalid\n", cAllLineBrakeState, cAllLineBrakeValue); + cRetVal = CI_ERROR; /*状态非法,返回失败*/ + } + } + else + { + /*入参非法,返回失败*/ + } + + return cRetVal; +} + +/* +* 功能描述:组TMC制动率数据 +* 参数说明:UINT8* TiocToTmcDataBuffer 数据地址 +* 返 回 值:0 组数据失败 +* 其他 整包数据长度 +* Created By LQ 2026.02.04 +*/ +UINT16 PackToTMCBrakeRateData(UINT8* TiocToTmcDataBuffer) +{ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT16 wMagLen = 0U; + UINT16 wMagLenIndex = 0U; + UINT16 wRetVal = 0U; + UINT8 cAllLineBrakeState = 0U; /*全线制动率设置状态*/ + UINT8 cAllLineBrakeValue = 0U; /*全线制动率设置值*/ + UINT8 cFunRetVal = CI_ERROR; + UINT8 cAreaNum = 0U; /*本地区间制动率数量*/ + AreaBrakeRateInfoStruct* pAreaBrakeData = NULL; /*本地区间制动率信息数组*/ + + if (NULL != TiocToTmcDataBuffer) + { + cFunRetVal = CI_SUCCESS; + + wMagLenIndex = ii; + ii += 2U; + + ShortToChar(TIOC_TO_TMC_BRAKE_MSG, &TiocToTmcDataBuffer[ii]); /* 报文类型 */ + ii += 2U; + + ii += 2U; /*预留两字节*/ + + cAllLineBrakeState = GetAllLineBrakeRateState(); /*获取全线制动率设置状态*/ + + if ((CI_ALL_LINE_BRAKE_VALID == cAllLineBrakeState) || (CI_ALL_LINE_BRAKE_UNVALID == cAllLineBrakeState)) + { + TiocToTmcDataBuffer[ii] = cAllLineBrakeState; /*组全线制动率设置状态*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCBrakeRateData Err: AllLineBrakeRateState[0x%2x] Is Invalid\n", cAllLineBrakeState); + cFunRetVal = CI_ERROR; /*全线制动率设置状态错误,返回失败*/ + } + + cAllLineBrakeValue = GetAllLineBrakeRateValue(); /*获取全线制动率设置值*/ + if (UINT8_MAX > cAllLineBrakeValue) + { + TiocToTmcDataBuffer[ii] = cAllLineBrakeValue; /*组全线制动率设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCBrakeRateData Err: AllLineBrakeRateValue[%d] Is Invalid\n", cAllLineBrakeValue); + cFunRetVal = CI_ERROR; /*全线制动率设置值错误,返回失败*/ + } + + /*组区间制动率信息*/ + cAreaNum = GetLocalAreaBrakeRateNum(); + pAreaBrakeData = GetLocalAreaBrakeRate(); + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaBrakeData)) + { + TiocToTmcDataBuffer[ii] = cAreaNum; /*组区间数量*/ + ii++; + + for (jj = 0U; jj < cAreaNum; jj++) + { + if ((0U < pAreaBrakeData[jj].wAreaId) && (UINT16_MAX > pAreaBrakeData[jj].wAreaId) + && (0U < pAreaBrakeData[jj].cAreaBrakeRateValue) && (UINT8_MAX > pAreaBrakeData[jj].cAreaBrakeRateValue)) + { + ShortToChar(pAreaBrakeData[jj].wAreaId, &TiocToTmcDataBuffer[ii]); /*组区间ID*/ + ii += 2U; + + TiocToTmcDataBuffer[ii] = pAreaBrakeData[jj].cAreaBrakeRateValue; /*组区间制动率设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackToTMCBrakeRateData Err: AreaId[%d] Or AreaBrakeValue[%d] Is Invalid\n", pAreaBrakeData[jj].wAreaId, pAreaBrakeData[jj].cAreaBrakeRateValue); + cFunRetVal = CI_ERROR; /*区间信息非法,返回失败*/ + break; + } + } + } + else + { + debug_infor_printf((const)"\nPackToTMCBrakeRateData Err: Local AreaBrakeNum[%d] Exceed Max[%d]\n", cAreaNum, LOCAL_AREA_SNOW_SUM_MAX); + cFunRetVal = CI_ERROR; /*区间制动率数量超限,返回失败*/ + } + + if (CI_SUCCESS == cFunRetVal) + { + /* 填写数据长度 */ + wMagLen = ii - wMagLenIndex; + wRetVal = wMagLen; + wMagLen -= 2U; + + ShortToChar(wMagLen, &TiocToTmcDataBuffer[wMagLenIndex]); + } + else + { + /*组包失败,不处理*/ + } + } + else + { + /*返回失败*/ + } + return wRetVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h index a4d3244..ccdcf4f 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h @@ -24,6 +24,8 @@ #include "SectionDefine.h" #include "LogicSectionDataManage.h" #include "WholeLineScreenAPI.h" +#include "SpeedLimitSecDataManage.h" +#include "SpeedLimitSecConfigDataManage.h" #define TIOC_TMC_PRTCL_VER ((UINT8)0x01u) /*TIOC-TMC协议版本号*/ #define TIOC_TMC_INTERFACE_INFOTYPE ((UINT16)0x0101u) /*TIOC-TMC接口信息类型*/ @@ -43,18 +45,27 @@ #define TIOC_TO_TMC_LINECT_MSG ((UINT16)0x0109U) /*TIOC发送TMC全线通信车信息类型*/ #define TMC_TO_TIOC_LINECT_MSG ((UINT16)0x010AU) /*TMC发送TIOC全线通信车信息类型*/ +#define TIOC_TO_TMC_ACCEL_MSG ((UINT16)0x010BU) /*RC发送TMC牵引加速度信息类型*/ +#define TMC_TO_TIOC_ACCEL_MSG ((UINT16)0x010CU) /*TMC发送RC牵引加速度信息类型*/ + +#define TIOC_TO_TMC_BRAKE_MSG ((UINT16)0x010DU) /*RC发送TMC制动率信息类型*/ +#define TMC_TO_TIOC_BRAKE_MSG ((UINT16)0x010EU) /*TMC发送RC制动率信息类型*/ + #ifdef __cplusplus extern "C" { #endif + /*临时限速输入缓冲结构体*/ typedef struct S_TsrInputInfoStruct { - UINT8 cTsrValidFlag; /* 临时限速有效标志:0x55:信息有些;0xAA:信息无效 */ + UINT8 cTsrValidFlag; /* 临时限速有效标志:0x55:信息有效;0xAA:信息无效 */ UINT8 cAllLineTsrState; /* 全线临时限速状态 */ UINT8 cAllLineTsrSpeed; /* 全线临时限速速度 */ UINT8 cTsrSum; /* 限速数量 */ - TsrDataStruct szTsrInfo[TSR_MAX_SUM]; /* 限速信息 */ + TsrDataStruct szTsrInfo[TSR_MAX_SUM]; /* ZC限速信息 */ + TsrTMCDataStruct tmcTsrInfo[TSR_MAX_SUM]; /*TMC限速信息*/ + TyphoonSpeedDataStruct tsdsInputInfoStru;/* 台风限速信息 */ } TsrInputInfoStruct; /*TMC->TIOC缓冲数据*/ @@ -70,6 +81,14 @@ typedef struct S_TmcToTiocDataStruct UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*区间ITE切除ID数组*/ UINT8 cLineCtNum; /*全线通信车数量*/ UINT16 szLineCtId[TRAIN_SUM_MAX]; /*全线通信车ID数组*/ + UINT8 cAllLineAccelerationState; /*全线牵引加速度设置状态:0x55-未设置;0xAA-已设置*/ + UINT8 cAllLineAccelerationValue; /*全线牵引加速度设置值*/ + UINT8 cAllLineBrakeRateState; /*全线制动率设置状态:0x55-未设置;0xAA-已设置*/ + UINT8 cAllLineBrakeRateValue; /*全线制动率设置值*/ + UINT8 cAreaAccelerationNum; /*区间牵引加速度数量*/ + AreaAccelerationInfoStruct szAreaAccelerationInfo[LOCAL_AREA_SNOW_SUM_MAX]; /*区间牵引加速度数组*/ + UINT8 cAreaBrakeRateNum; /*区间制动率数量*/ + AreaBrakeRateInfoStruct szAreaBrakeRateInfo[LOCAL_AREA_SNOW_SUM_MAX]; /*区间制动率数组*/ } TmcToTiocDataStruct; /* @@ -101,6 +120,45 @@ extern TmcToTiocDataStruct* GetTmcToTiocData(void); * 功能描述:清除TMC输入数据 */ extern void ClearTmcToTiocData(void); + +/* +* 功能描述:解析牵引加速度信息 +* 参数说明:const UINT8* dataBuf, 数据缓冲区 +* const UINT16 dataLength, 数据长度 +* 返 回 值:CI_ERROR 0 数据解析失败 +* CI_SUCCESS 1 数据解析成功 +* Created By LQ 2026.02.04 +*/ +UINT8 ParseAccelerationData(UINT8* dataBuf, UINT16 dataLen); + +/* +* 功能描述:组TMC牵引加速度数据 +* 参数说明:UINT8* TiocToTmcDataBuffer 数据地址 +* 返 回 值:0 组数据失败 +* 其他 整包数据长度 +* Created By LQ 2026.02.04 +*/ +UINT16 PackToTMCAccelerationData(UINT8* TiocToTmcDataBuffer); + +/* +* 功能描述:解析制动率信息 +* 参数说明:const UINT8* dataBuf 数据缓冲区 +* const UINT16 dataLength 数据长度 +* 返 回 值:CI_ERROR 0 数据解析失败 +* CI_SUCCESS 1 数据解析成功 +* Created By LQ 2026.02.04 +*/ +UINT8 ParseBrakeRateData(UINT8* dataBuf, UINT16 dataLen); + +/* +* 功能描述:组TMC制动率数据 +* 参数说明:UINT8* TiocToTmcDataBuffer 数据地址 +* 返 回 值:0 组数据失败 +* 其他 整包数据长度 +* Created By LQ 2026.02.04 +*/ +UINT16 PackToTMCBrakeRateData(UINT8* TiocToTmcDataBuffer); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c index 89734f9..ad5573c 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c @@ -27,6 +27,8 @@ #include "LogicSectionConfigDataManage.h" #include "WLBrakeDataManage.h" #include "../AxisSort/AxisSort_api.h" +#include "SpeedLimitSecDataManage.h" +#include "SpeedLimitSecConfigDataManage.h" /* * 功能描述: 拷贝VOBC发送给CI的信息结构体 @@ -349,7 +351,7 @@ static UINT8 WashMachineWorkModeCheck(UINT8 Data); static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength, const UINT16 wTrnId); /* -* 功能描述: 组包Ci到Ivoc区间雨雪与紧急制动信息 +* 功能描述: 组包Ci到Ivoc紧急制动信息 * 参数说明: UINT8* pDataBuf 数据缓冲区 * UINT16 *pDataLength 数据长度(输出参数) * UINT16 wTrainId 列车ID(不带0x14) @@ -357,7 +359,7 @@ static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength, c * CI_SUCCESS 1 成功 * Created By LQ 2023.11.10 */ -static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, UINT16 wTrainId); +static UINT8 PackCiToIvocUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, UINT16 wTrainId); /* * 功能描述: 组包Ci到VOBC后备通道信号机状态信息 @@ -571,7 +573,6 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength UINT8 cmdType = 0U; /*屏蔽门控制信息,0x55开,0xAA关*/ UINT8 funRet = 0U; UINT8 galSaveTag = 0U; /*互联互通头保存标志*/ - UINT32 hlhtStationId = 0U; /*获取互联互通站台ID*/ UINT32 transmitBadEnsureTime = 0U; /*通信失效时间*/ UINT16 TrainSignalId = 0U; UINT8 errorNum = 0U; @@ -1899,8 +1900,6 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) UINT16 ii = 0u; UINT8 kk = 0u; UINT16 sigId = 0u; /*信号机ID*/ - UINT8 rowIndex = 0u; - UINT8 colIndex = 0u; UINT32 curCycleNum = Get2oo2CurCycleNum(); UINT32 appCycleTime = GetSystemParaAppCycleTime(); UINT8 retVal = CI_SUCCESS; @@ -2559,18 +2558,9 @@ static UINT8 PackCiToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) */ static UINT8 ParseVobcToCiDataFrameFAOHLHT(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, VobcToCiDataStruct* vobcToCiDataStru, UINT8* saveGalHead,const UINT16 logId) { - UINT8 cmdType = 0u; /*屏蔽门命令类型*/ - UINT8 trainStopSteadyState = 0u; /*列车停稳状态*/ - UINT8 psdSum = 0u; - UINT8 trainDirection = 0u; /*列车方向*/ UINT16 ii = 0u; /*索引管理*/ - UINT8 jj = 0u; UINT8 retVal = CI_SUCCESS; - UINT8 retValue = 0u; - UINT16 psdId = 0u; /*PSD的ID*/ UINT16 appInfoType = 0u; /*应用信息类型*/ - UINT32 psdIdIntConnt = 0u; /*互联互通PSD的ID*/ - UINT32 trackSectionId = 0u; /*轨道区段ID*/ UINT32 curntCycleNo = 0u; /*当前周期号*/ UINT16 vobcName = 0u; /*VOBC设备名称:类型+ID*/ UINT16 ciName = 0u; /*联锁设备名称:类型+ID*/ @@ -2579,12 +2569,6 @@ static UINT8 ParseVobcToCiDataFrameFAOHLHT(const UINT8* dataBuf, const UINT16 da HLHTGALInfoStruct hlhtGalHead = { 0u }; INT32 vobcInfoRemainValidiy = 0; UINT8 headRet = HLHT_HEAD_ERROR;/*互联互通检查结果*/ - UINT32 signalId = 0u; /*VOBC->CI信号机ID*/ - UINT8 gapDetCmdType = 0u; /*间隙探测命令类型*/ - UINT8 doorState = 0u; /*VOBC-CI关联车门状态*/ - UINT8 cTempPsdCmdCode = 0U; - UINT8 chVideoQkState = 0U;/*视频清客状态*/ - UINT8 chVideoQkResult = 0U;/*视频清客结果*/ UINT16 wMsgLen = 0U;/*一条应用数据长度*/ UINT16 wTmpDataLen = 0U;/*临时长度记录*/ UINT16 wMsgCheckLen = 0u; /* 用于解析校验的数据长度 */ @@ -2822,7 +2806,6 @@ static UINT8 PackCiToVobcDataFAOHLHT(VobcToCiDataStruct *vobcToCiDataStru) UINT8 startSigColour = 0u; /*屏蔽门关联的出站进路始端信号机*/ UINT8 psdState = 0u; /*屏蔽门状态*/ UINT16 ii = 0u; - UINT16 jj = 0u; UINT8 kk = 0u; UINT16 sigId = 0u; /*信号机ID*/ UINT32 curCycleNum = Get2oo2CurCycleNum(); @@ -3286,8 +3269,6 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe UINT8 chEaNum = 0U; UINT8 chLogOutState = 0U; UINT32 dwCyc = 0u; - UINT8 chGroupState = 0u; - UINT16 wGroupOtherTrainId = 0u; UINT8 chTrainMode = 0u; UINT8 chTrainHeadScreenConfirm = 0u; UINT8 chTrainTailScreenConfirm = 0u; @@ -3423,7 +3404,11 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe || (TRAIN_MODE_FAM == chTrainMode) || (TRAIN_MODE_CAM == chTrainMode) || (TRAIN_MODE_RRM == chTrainMode) - || (TRAIN_MODE_VCM == chTrainMode)) + || (TRAIN_MODE_VCM == chTrainMode) + || (TRAIN_MODE_FOR == chTrainMode) + || (TRAIN_MODE_REV == chTrainMode) + || (TRAIN_MODE_S_B == chTrainMode) + || (TRAIN_MODE_SD == chTrainMode)) { pstVobcToCiDataStru->chTrainMode = chTrainMode; } @@ -4152,7 +4137,45 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe ; /*解析失败*/ } - + /*列车完整性状态*/ + if (CI_SUCCESS == chRetVal) + { + pstVobcToCiDataStru->chIntegrityState = pDataBuf[ii]; + ii++; + if ((TRAIN_INTEGRITY_LOST == pstVobcToCiDataStru->chIntegrityState) + || (TRAIN_INTEGRITY_NOT_LOST == pstVobcToCiDataStru->chIntegrityState)) + { + ; /*解析通过*/ + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + ; /*解析失败*/ + } + + /*列车逃生门状态*/ + if (CI_SUCCESS == chRetVal) + { + pstVobcToCiDataStru->chEscapeDoorState = pDataBuf[ii]; + ii++; + if ((TRAIN_ESCAPE_DOOR_OPEN == pstVobcToCiDataStru->chEscapeDoorState) + || (TRAIN_ESCAPE_DOOR_NOT_OPEN == pstVobcToCiDataStru->chEscapeDoorState)) + { + ; /*解析通过*/ + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + ; /*解析失败*/ + } /*视频清客相关信息*/ if (CI_SUCCESS == chRetVal) @@ -4808,8 +4831,6 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) { UINT8 cszCiToIvocDataBuf[VOBC_TO_CI_DATA_LEN_MAX] = { 0u };/*CI到VOBC组帧数组*/ UINT16 ii = 0u; - UINT16 jj = 0u; - UINT8 kk = 0u; UINT32 curCycleNum = Get2oo2CurCycleNum(); UINT32 appCycleTime = GetSystemParaAppCycleTime(); UINT8 chRetVal = CI_ERROR; @@ -4825,6 +4846,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) UINT8 outnetSafeSendRtn = 0u; UINT8 chFunRtn = CI_ERROR; UINT8 chSwState = 0u; + UINT8 chAllFlockState = 0U; /*首先获取组包时所需的信息,获取成功才有必要继续组包*/ if (NULL != pstVobcToCiDataStru) @@ -5045,10 +5067,10 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocReqAlignmentInfo Error \n", pstVobcToCiDataStru->VobcId); } - /*组区间雨雪状态和紧急制动信息*/ + /*组牵引加速度和制动率信息*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocSnowAndUrgentInfo(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); + chRetVal = PackCiToIvocAccAndBrakeInfo(cszCiToIvocDataBuf, &ii); } else { @@ -5056,6 +5078,17 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocUnlockOverlapInfo Error \n", pstVobcToCiDataStru->VobcId); } + /*组紧急制动信息*/ + if (CI_SUCCESS == chRetVal) + { + chRetVal = PackCiToIvocUrgentInfo(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); + } + else + { + /*发生组包错误*/ + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocAccAndBrakeInfo Error \n", pstVobcToCiDataStru->VobcId); + } + /*洗车信息*/ if (CI_SUCCESS == chRetVal) { @@ -5064,7 +5097,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /*发生组包错误*/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocSnowAndUrgentInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocUrgentInfo Error \n", pstVobcToCiDataStru->VobcId); } /*前方信号机信息*/ @@ -5131,9 +5164,10 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocPosMonitorInfo Error \n", pstVobcToCiDataStru->VobcId); } + /*发送逻辑区段禁止FAO运行信息*/ if (CI_SUCCESS == chRetVal) { - /*组包成功*/ + chRetVal = PackCiToIvocProhibitFAO(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); } else { @@ -5141,7 +5175,21 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocJumpBackReply Error \n", pstVobcToCiDataStru->VobcId); } - /*预留10字节*/ + if (CI_SUCCESS == chRetVal) + { + /*成功 组包两种全线区段封锁*/ + chAllFlockState = GetAllSecFlockState(); + cszCiToIvocDataBuf[ii++] = chAllFlockState; + chAllFlockState = GetAllSecCesbState(); + cszCiToIvocDataBuf[ii++] = chAllFlockState; + } + else + { + /*发生组包错误*/ + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocProhibitFAO Error \n", pstVobcToCiDataStru->VobcId); + } + + /*预留5字节*/ ii += 5U; } else if ((IVOC_CI_INFO_TYPE_LOGOUT_ASK == pstVobcToCiDataStru->appInfoType) && (curCycleNum == pstVobcToCiDataStru->ComStartCycle)) @@ -5255,7 +5303,6 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC { UINT8 cszCiToIvocDataBuf[VOBC_TO_CI_DATA_LEN_MAX] = { 0u };/*CI到VOBC组帧数组*/ UINT16 ii = 0u; - UINT8 psdIndex = 0U; /*PSD索引*/ UINT32 curCycleNum = Get2oo2CurCycleNum(); UINT32 appCycleTime = GetSystemParaAppCycleTime(); UINT8 chRetVal = CI_ERROR; @@ -5269,8 +5316,6 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC UINT16 wAppInfoIndex = 0U; UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; - UINT8 chFunRtn = CI_ERROR; - UINT8 chSwState = 0u; /*首先获取组包时所需的信息,获取成功才有必要继续组包*/ if (NULL != pstVobcBackUpToCiDataStru) @@ -5718,173 +5763,173 @@ static UINT8 PackCiToIvocPsdInfo(UINT8* pDataBuf, UINT16 *wDataLength) chPsdDoorStat = GetPsdState(wPsdId); chPsdMutualLockStat = GetPsdMutualLockRemoveState(wPsdId); psdButtonPangluState = GetPsdButtonPangluState(wPsdId); - /*门关或已互锁解除发送关门*/ - if ((PSD_STATE_CLOSE == chPsdDoorStat) || (PSD_MUTUALLOCK_REMOVE_YES== chPsdMutualLockStat)) - { - pDataBuf[ii] = CI_IVOC_PSD_STATE_CLOSE; - } - else if(PSD_STATE_OPEN==chPsdDoorStat) - { - - pDataBuf[ii] = CI_IVOC_PSD_STATE_OPEN; - } - else - { - chRetVal = CI_ERROR; - debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdDoorState_Error, state: %d \n", chPsdDoorStat); - } - ii++; - - if (CI_SUCCESS == chRetVal) - { - chPsdTmpStat = GetPsdButtonState(wPsdId); - chCleFarePcbState = GetCleFarePCBButtonState(wPsdId); - if (PSD_BUTTON_PANGLU_STATE_VALID == psdButtonPangluState) + /*门关或已互锁解除发送关门*/ + if ((PSD_STATE_CLOSE == chPsdDoorStat) || (PSD_MUTUALLOCK_REMOVE_YES == chPsdMutualLockStat)) { - pDataBuf[ii] = CI_IVOC_PSD_PCB_PL; /*站台关门按钮旁路值*/ + pDataBuf[ii] = CI_IVOC_PSD_STATE_CLOSE; + } + else if (PSD_STATE_OPEN == chPsdDoorStat) + { + + pDataBuf[ii] = CI_IVOC_PSD_STATE_OPEN; } else { - dwPsdButPreTimeCount = GetPsdButtonPressCount(); - dwPslPcbPreCyc = GetPCBPressCycNum(wPsdId); - dwCleFarePcbPreCyc = GetCleFarePCBPressCycNum(wPsdId); - chPslPcbTimeCheck = SystemOverTimeCheck(dwPslPcbPreCyc, dwPsdButPreTimeCount); - chCleFarePcbTimeCheck = SystemOverTimeCheck(dwCleFarePcbPreCyc, dwPsdButPreTimeCount); - if ((CI_TIME_OUT == chPslPcbTimeCheck) || (CI_TIME_OUT == chCleFarePcbTimeCheck)) - {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB只要有一个超时,站台按钮发送默认状态*/ - pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_UP; - } - else - { - if ((PSD_BUTTON_STATE_UP == chPsdTmpStat) && (QK_PSD_BUTTON_STATE_UP == chCleFarePcbState)) - {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB均未按下,站台按钮发送未按下状态*/ - pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_UP; - } - else if ((PSD_BUTTON_STATE_DOWN == chPsdTmpStat) || (QK_PSD_BUTTON_STATE_DOWN == chCleFarePcbState)) - {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB只要有一个按下,站台按钮发送按下状态*/ - pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_DOWN; - } - else - { - chRetVal = CI_ERROR; - debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdButtonState_Error, PSDstate: %d PCB-ButtonState: %d \n", chPsdTmpStat, chCleFarePcbState); - } - } + chRetVal = CI_ERROR; + debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdDoorState_Error, state: %d \n", chPsdDoorStat); } ii++; - } - if (CI_SUCCESS == chRetVal) - { - chPsdTmpStat =GetPsdOpenButtonState (wPsdId); - if (PSD_BUTTON_PANGLU_STATE_VALID == psdButtonPangluState) + if (CI_SUCCESS == chRetVal) { - pDataBuf[ii] = CI_IVOC_PSD_POB_PL; /*站台关门按钮默认值*/ - } - else - { - dwPobPreCyc = GetPOBPressCycNum(wPsdId); - dwPobButPreTimeCount = GetPsdButtonPressCount(); - chPobTimeCheck = SystemOverTimeCheck(dwPobPreCyc, dwPobButPreTimeCount); - if (CI_TIME_OUT == chPobTimeCheck) - { - /*POB按钮超时,发送未激活状态*/ - pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_INVALID; - } - else - { - if (PSD_OPEN_BUTTON_STATE_INVALID == chPsdTmpStat) - { - pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_INVALID;/*未激活*/ - } - else if (PSD_OPEN_BUTTON_STATE_VALID == chPsdTmpStat) - { - pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_VALID;/*激活*/ - } - else - { - chRetVal = CI_ERROR; - debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdOpenButtonState_Error, state: %d \n", chPsdTmpStat); - } - } - } - ii++; - } - - if (CI_SUCCESS == chRetVal) - { - psdDepartureButtonRelayId = GetPsdDeparConfmRelayId(wPsdId); - /*屏蔽门发车按钮状态更新*/ - if ((0u != psdDepartureButtonRelayId) && (UINT16_MAX != psdDepartureButtonRelayId)) - {/*站台发车按钮继电器ID有效*/ + chPsdTmpStat = GetPsdButtonState(wPsdId); + chCleFarePcbState = GetCleFarePCBButtonState(wPsdId); if (PSD_BUTTON_PANGLU_STATE_VALID == psdButtonPangluState) { - pDataBuf[ii] = CI_IVOC_PSD_PDB_PL; /*站台关门按钮默认值*/ + pDataBuf[ii] = CI_IVOC_PSD_PCB_PL; /*站台关门按钮旁路值*/ } else { - platDepartButtState = GetPsdDepartButtonState(wPsdId);/*站台发车按钮状态*/ - chTimeState = SystemOverTimeCheck(GetPSBPressCycNum(wPsdId), GetPsdButtonPressCount()); - if (CI_TIME_OUT == chTimeState) - { - pDataBuf[ii] = CI_IVOC_PSD_PDB_STATE_INVALID; + dwPsdButPreTimeCount = GetPsdButtonPressCount(); + dwPslPcbPreCyc = GetPCBPressCycNum(wPsdId); + dwCleFarePcbPreCyc = GetCleFarePCBPressCycNum(wPsdId); + chPslPcbTimeCheck = SystemOverTimeCheck(dwPslPcbPreCyc, dwPsdButPreTimeCount); + chCleFarePcbTimeCheck = SystemOverTimeCheck(dwCleFarePcbPreCyc, dwPsdButPreTimeCount); + if ((CI_TIME_OUT == chPslPcbTimeCheck) || (CI_TIME_OUT == chCleFarePcbTimeCheck)) + {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB只要有一个超时,站台按钮发送默认状态*/ + pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_UP; } else { - pDataBuf[ii] = platDepartButtState; + if ((PSD_BUTTON_STATE_UP == chPsdTmpStat) && (QK_PSD_BUTTON_STATE_UP == chCleFarePcbState)) + {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB均未按下,站台按钮发送未按下状态*/ + pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_UP; + } + else if ((PSD_BUTTON_STATE_DOWN == chPsdTmpStat) || (QK_PSD_BUTTON_STATE_DOWN == chCleFarePcbState)) + {/*cgh修改成都四线清客需求:PSL门控箱PCB及清客确认箱中PCB只要有一个按下,站台按钮发送按下状态*/ + pDataBuf[ii] = CI_IVOC_PSD_PCB_STATE_DOWN; + } + else + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdButtonState_Error, PSDstate: %d PCB-ButtonState: %d \n", chPsdTmpStat, chCleFarePcbState); + } } } + ii++; } - else - {/*无站台发车按钮给VOBC发送站台无发车按钮状态*/ - pDataBuf[ii] = CI_IVOC_PSD_PDB_NO_BUTTON; - } - ii++; - } - if (CI_SUCCESS == chRetVal) - { - gapDetStatus = GetPsdRemoraState(wPsdId); /*获取间隙探测状态*/ - gapDetMutualLockRemvSta = GetJXTCMutualLockState(wPsdId); /*获取间隙探测互锁解除状态*/ - psdStartDetCycNum = GetStartDetectionCycNum(wPsdId); /*获取间隙探测启动开始周期*/ - - if (((PSD_REMORA_NO == gapDetStatus) && (0u != psdStartDetCycNum)) - || (JXTC_MUTUALLOCK_REMOVE_YES == gapDetMutualLockRemvSta)) - {/*无障碍物或间隙探测互锁解锁*/ - pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_CLEAR; /*无障碍物*/ - } - else if ((PSD_REMORA_YES == gapDetStatus) && (0u != psdStartDetCycNum)) - {/*检测结果为有障碍物*/ - pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_UNCLEAR; /*有障碍物*/ - } - else - {/*其他情况发送默认值*/ - pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_DEFAULT; /*间隙探测状态默认值:未检测/无此功能*/ - } - } - - /*组屏蔽门互锁解除按钮状态*/ - if (CI_SUCCESS == chRetVal) - { - psdMutualLockRelayId = GetPsdMutualLockRelayId(wPsdId); - psdLockRemoveState = GetRelayCollState(psdMutualLockRelayId); - - /*继电器吸起——按钮按下*/ - if (RELAY_STATE_UP == psdLockRemoveState) + if (CI_SUCCESS == chRetVal) { - pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_DOWN; + chPsdTmpStat = GetPsdOpenButtonState(wPsdId); + if (PSD_BUTTON_PANGLU_STATE_VALID == psdButtonPangluState) + { + pDataBuf[ii] = CI_IVOC_PSD_POB_PL; /*站台关门按钮默认值*/ + } + else + { + dwPobPreCyc = GetPOBPressCycNum(wPsdId); + dwPobButPreTimeCount = GetPsdButtonPressCount(); + chPobTimeCheck = SystemOverTimeCheck(dwPobPreCyc, dwPobButPreTimeCount); + if (CI_TIME_OUT == chPobTimeCheck) + { + /*POB按钮超时,发送未激活状态*/ + pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_INVALID; + } + else + { + if (PSD_OPEN_BUTTON_STATE_INVALID == chPsdTmpStat) + { + pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_INVALID;/*未激活*/ + } + else if (PSD_OPEN_BUTTON_STATE_VALID == chPsdTmpStat) + { + pDataBuf[ii] = CI_IVOC_PSD_POB_STATE_VALID;/*激活*/ + } + else + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\nPackCiToIvocPsdInfo PsdOpenButtonState_Error, state: %d \n", chPsdTmpStat); + } + } + } + ii++; } - /*继电器落下——按钮未按下*/ - else if (RELAY_STATE_DOWN == psdLockRemoveState) + + if (CI_SUCCESS == chRetVal) { - pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_UP; + psdDepartureButtonRelayId = GetPsdDeparConfmRelayId(wPsdId); + /*屏蔽门发车按钮状态更新*/ + if ((0u != psdDepartureButtonRelayId) && (UINT16_MAX != psdDepartureButtonRelayId)) + {/*站台发车按钮继电器ID有效*/ + if (PSD_BUTTON_PANGLU_STATE_VALID == psdButtonPangluState) + { + pDataBuf[ii] = CI_IVOC_PSD_PDB_PL; /*站台关门按钮默认值*/ + } + else + { + platDepartButtState = GetPsdDepartButtonState(wPsdId);/*站台发车按钮状态*/ + chTimeState = SystemOverTimeCheck(GetPSBPressCycNum(wPsdId), GetPsdButtonPressCount()); + if (CI_TIME_OUT == chTimeState) + { + pDataBuf[ii] = CI_IVOC_PSD_PDB_STATE_INVALID; + } + else + { + pDataBuf[ii] = platDepartButtState; + } + } + } + else + {/*无站台发车按钮给VOBC发送站台无发车按钮状态*/ + pDataBuf[ii] = CI_IVOC_PSD_PDB_NO_BUTTON; + } + ii++; } - else + + if (CI_SUCCESS == chRetVal) { - /*发默认值*/ - pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_DEFAULT; + gapDetStatus = GetPsdRemoraState(wPsdId); /*获取间隙探测状态*/ + gapDetMutualLockRemvSta = GetJXTCMutualLockState(wPsdId); /*获取间隙探测互锁解除状态*/ + psdStartDetCycNum = GetStartDetectionCycNum(wPsdId); /*获取间隙探测启动开始周期*/ + + if (((PSD_REMORA_NO == gapDetStatus) && (0u != psdStartDetCycNum)) + || (JXTC_MUTUALLOCK_REMOVE_YES == gapDetMutualLockRemvSta)) + {/*无障碍物或间隙探测互锁解锁*/ + pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_CLEAR; /*无障碍物*/ + } + else if ((PSD_REMORA_YES == gapDetStatus) && (0u != psdStartDetCycNum)) + {/*检测结果为有障碍物*/ + pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_UNCLEAR; /*有障碍物*/ + } + else + {/*其他情况发送默认值*/ + pDataBuf[ii++] = CI_IVOC_GAP_DETECT_STATUS_DEFAULT; /*间隙探测状态默认值:未检测/无此功能*/ + } } - } + + /*组屏蔽门互锁解除按钮状态*/ + if (CI_SUCCESS == chRetVal) + { + psdMutualLockRelayId = GetPsdMutualLockRelayId(wPsdId); + psdLockRemoveState = GetRelayCollState(psdMutualLockRelayId); + + /*继电器吸起——按钮按下*/ + if (RELAY_STATE_UP == psdLockRemoveState) + { + pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_DOWN; + } + /*继电器落下——按钮未按下*/ + else if (RELAY_STATE_DOWN == psdLockRemoveState) + { + pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_UP; + } + else + { + /*发默认值*/ + pDataBuf[ii++] = PSD_MUTUALLOCK_STATE_DEFAULT; + } + } } else @@ -6391,7 +6436,6 @@ static UINT8 PackCiToIvocFloodGateInfo(UINT8* pDataBuf, UINT16 *wDataLength, UI UINT8 chRetVal = CI_ERROR; UINT8 chRet = CI_ERROR; UINT8 floodOpenState = 0U; /*开门锁定信息*/ - UINT8 floodCloseReq = 0U; /*关门请求信息*/ UINT8 floodCloseReqTempSta = 0U; if ((NULL == pDataBuf) @@ -6501,22 +6545,21 @@ static UINT8 PackCiToIvocFloodGateInfo(UINT8* pDataBuf, UINT16 *wDataLength, UI */ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) { - UINT8 chPhyFlockStat = 0U; /*记录状态*/ UINT16 wPhySecId = 0U; /*用作ID*/ UINT16 wPhyIndex = 0U; UINT16 wPhySum = 0U; - UINT16 wPhySendSumIndex = 0U; - UINT16 wPhySendSum = 0U; + UINT16 wSecSendSumIndex = 0U; + UINT16 wLogSendSum = 0U; UINT8 chStartLockStat = 0U; UINT16 ii = 0U; UINT8 chRetVal = CI_ERROR; UINT8 cTsrSureFlag = CI_TSR_SURE_NO;/* 限速确认标志 */ - UINT8 cSnowModel = CI_ALL_SNOW_UNVALID;/* 雨雪模式标志 */ - UINT8 cAllLineTsrState = CI_ALL_LINE_TSR_UNVALID;/* 全线临时限速 */ + UINT8 cAllLineTsrState = 0U;/* 全线临时限速 */ UINT8 cAllLineTsrSpeed = 0U;/* 雨雪模式标志 */ - UINT8 chSecFLockType = 0U;/*物理区段封锁类型*/ - UINT8 cSnowLevel = 0U; /*湿轨等级*/ - + UINT8 chSecFLockType = 0U;/*区段封锁类型*/ + UINT16* pLogSecBuf = NULL; + UINT8 chLogSecSum = 0U;/*物理区段关联逻辑区段个数*/ + UINT8 jj = 0U; if ((NULL == pDataBuf) || (NULL == wDataLength)) { @@ -6553,40 +6596,13 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) } ii += 1U; - /* 雨雪模式 */ - cSnowModel = GetAllSnowModel(); - cSnowLevel = GetAllSnowLevel(); - - if (CI_ALL_SNOW_VALID == cSnowModel) - { - /* 雨雪 */ - if (CI_SNOW_LEVEL_TWO == cSnowLevel) - { - pDataBuf[ii] = CI_SNOW_LEVEL_TWO; /*雨雪模式有效且湿轨等级为二级时,发0x02*/ - } - else if(CI_SNOW_LEVEL_ONE == cSnowLevel) - { - pDataBuf[ii] = CI_SNOW_LEVEL_ONE; /*雨雪模式有效且湿轨等级为一级时,发0x01*/ - } - else - { - pDataBuf[ii] = CI_ALL_SNOW_VALID; /*雨雪模式有效且湿轨等级为默认值时,发0x55*/ - } - } - else - { - /* 非雨雪 */ - pDataBuf[ii] = CI_ALL_SNOW_UNVALID; - } - ii += 1U; - /* 全线临时限速信息 */ - cAllLineTsrState = GetAllLineTsrState(); - cAllLineTsrSpeed = GetAllLineTsrSpeed(); - if (CI_ALL_LINE_TSR_VALID == cAllLineTsrState) + cAllLineTsrState = GetCacheAllSpeedState(); + cAllLineTsrSpeed = GetCacheAllSpeedNum(); + if (FLAG_SL == cAllLineTsrState) { /* 全线临时限速 */ - pDataBuf[ii] = CI_ALL_LINE_TSR_VALID; + pDataBuf[ii] = 0x55u; ii += 1U; pDataBuf[ii] = cAllLineTsrSpeed; ii += 1U; @@ -6594,7 +6610,7 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) } else { - pDataBuf[ii] = CI_ALL_LINE_TSR_UNVALID; + pDataBuf[ii] = 0xAAu; ii += 1U; pDataBuf[ii] = 0u; ii += 1U; @@ -6603,25 +6619,57 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) wPhySum = GetPhySecCurSum(); if (PHYSICAL_SECTION_SUM_MAX > wPhySum) { - wPhySendSumIndex = ii; + wSecSendSumIndex = ii; ii += 2U; for (wPhyIndex = 0U; wPhyIndex < wPhySum; wPhyIndex++) { wPhySecId =GetPhySecId (wPhyIndex); - if ((0U < wPhySecId) && (UINT16_MAX > wPhySecId)) + pLogSecBuf = GetPhySecIncLogSecIdBuf(wPhySecId); + chLogSecSum = GetPhySecIncLogSecSum(wPhySecId); + if ((0U < wPhySecId) && (UINT16_MAX > wPhySecId)&& (NULL != pLogSecBuf)) { - chPhyFlockStat =GetPhySecFLockState (wPhySecId); - chSecFLockType = GetPhySecFLockType(wPhySecId); - if ((PHYSICAL_SECTION_FLOCK_NO != chPhyFlockStat) && (PHY_SEC_FLOCK_TYPE_SPKS != chSecFLockType)) + for (jj = 0U; jj < chLogSecSum; jj++) { - /*物理区段存在人工封锁才发送*/ - ShortToChar(wPhySecId,&pDataBuf[ii]); - ii += 2U; - wPhySendSum++; - } - else - { - /*继续执行*/ + chSecFLockType = GetLogSecFLockType(pLogSecBuf[jj]); + if ((0U < pLogSecBuf[jj])&&(LOGIC_SECTION_SUM_MAX>pLogSecBuf[jj]) && (0xFFU != chSecFLockType)) + { + /*检查逻辑人工设置区段封锁状态*/ + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD & chSecFLockType)) + { + ShortToChar(pLogSecBuf[jj], &pDataBuf[ii]); + ii += 2U; + wLogSendSum++; + + } + else if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG & chSecFLockType)) + { + ShortToChar(pLogSecBuf[jj], &pDataBuf[ii]); + ii += 2U; + wLogSendSum++; + + } + else if (SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB & chSecFLockType)) + { + ShortToChar(pLogSecBuf[jj], &pDataBuf[ii]); + ii += 2U; + wLogSendSum++; + + } + else + { + /*继续执行*/ + } + if (CI_IVOC_FLOCK_LOG_SUM < wLogSendSum) + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocFLockInfo wLogSendSum Error, sum : %d MAX: %d \n", wLogSendSum, CI_IVOC_FLOCK_LOG_SUM); + } + } + else + { + /*逻辑区段ID或封锁状态错误,停止组包*/ + chRetVal = CI_ERROR; + } } } else @@ -6633,12 +6681,15 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) { break; } - else - { - /*继续执行*/ - } } - ShortToChar(wPhySendSum, &pDataBuf[wPhySendSumIndex]); + if (CI_SUCCESS == chRetVal) + { + ShortToChar(wLogSendSum, &pDataBuf[wSecSendSumIndex]); + } + else + { + ;/*不组包*/ + } } else { @@ -6894,11 +6945,8 @@ static UINT8 PackCiToIvocFaultTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) UINT32 dwTmpOff = 0U; UINT16 wOrgnLinkId = 0u; UINT32 dwOrgnOffset = 0u; - UINT8 chTrainDir = 0U; UINT16 ii = 0U; UINT8 chRetVal = CI_ERROR; - UINT8 chHeadScreStat = 0u; /*列车前筛标志*/ - UINT8 chTailScreStat = 0u; /*列车后筛标志*/ UINT16 szEnvelopeIdBuf[ENVELOPE_SUM_MAX] = { 0u }; UINT16 wEnvelopeSum = 0u; UINT16 wEnvelopeIndex = 0u; @@ -7210,22 +7258,14 @@ static UINT8 PackCiToIvocSleepTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) */ static UINT8 PackCiToIvocTsrInfo(UINT8* pDataBuf, UINT16 *wDataLength) { - UINT8 chPhyFlockStat = 0U; /*记录状态*/ - UINT16 wTsrId = 0U; /*用作ID*/ - UINT16 wTsrIndex = 0U; UINT8 cTsrSum = 0U; - UINT16 wTmpLinkId = 0U; - UINT32 dwTmpOff = 0U; - UINT16 wTsrSpeed = 0U; - UINT16 wTsrSecSum = 0U; - UINT8 chTsrCommStat = 0U; UINT16 ii = 0U; UINT8 chRetVal = CI_ERROR; UINT8 jj = 0u; UINT8 kk = 0u; - TsrDataStruct* pTsrData = NULL; - - pTsrData = GetTsrData();/*不会返回NULL*/ + TsrTMCDataStruct* pTsrData = NULL; + TyphoonSpeedDataStruct typhoonSpeedData = { FLAG_UNSL,0U }; + pTsrData = GetTsrTMCData();/*不会返回NULL*/ if ((NULL == pDataBuf) || (NULL == wDataLength)) @@ -7238,7 +7278,7 @@ static UINT8 PackCiToIvocTsrInfo(UINT8* pDataBuf, UINT16 *wDataLength) chRetVal = CI_SUCCESS; /* 获取限速数量 */ - cTsrSum = GetTsrSum(); + cTsrSum = GetTsrTMCSum(); if (TSR_MAX_SUM >= cTsrSum) { /* 临时限速数量 */ @@ -7247,42 +7287,82 @@ static UINT8 PackCiToIvocTsrInfo(UINT8* pDataBuf, UINT16 *wDataLength) for (jj = 0u;jj < cTsrSum;jj++) { - /* 组临时限速速度 */ - pDataBuf[ii] = pTsrData[jj].cSpeed; - ii++; + pDataBuf[ii++] = pTsrData[jj].cSpeed;/* 限速速度 */ - /* 组逻辑区段数量 */ - if ((0u == pTsrData[jj].cLogSecSum) || (TSR_SEC_MAX_SUM < pTsrData[jj].cLogSecSum)) + /* 起点限速区段编号 */ + if ((UINT16_MAX <= pTsrData[jj].wTsrStartSecId) + || (0u == pTsrData[jj].wTsrStartSecId)) { chRetVal = CI_ERROR; - debug_infor_printf((const)"\n PackCiToIvocTsrInfo LogSecSum_Error, sum : %d MAX: %d \n", pTsrData[jj].cLogSecSum, TSR_SEC_MAX_SUM); + debug_infor_printf((const)"\n PackCiToIvocTsrInfo TsrStartSecId_Error, ID : %d \n", pTsrData[jj].wTsrStartSecId); } else { - pDataBuf[ii] = pTsrData[jj].cLogSecSum; - ii++; + ShortToChar(pTsrData[jj].wTsrStartSecId, &pDataBuf[ii]); /* 组起点限速区段编号 */ + ii += 2u; } - if (CI_SUCCESS == chRetVal) - { - for (kk = 0u; kk < pTsrData[jj].cLogSecSum;kk++) - { - /* 逻辑区段ID */ - if ((0u == pTsrData[jj].szLogSecId[kk]) || (UINT16_MAX == pTsrData[jj].szLogSecId[kk])) - { - chRetVal = CI_ERROR; - } - else - { - ShortToChar(pTsrData[jj].szLogSecId[kk], &pDataBuf[ii]); - ii += 2u; - } - if (CI_ERROR == chRetVal) - { - debug_infor_printf((const)"\n PackCiToIvocTsrInfo LogSecId_Error, ID : %d \n", pTsrData[jj].szLogSecId[kk]); - break; - } + /* 终点限速区段编号 */ + if ((UINT16_MAX <= pTsrData[jj].wTsrEndSecId) + || (0u == pTsrData[jj].wTsrEndSecId)) + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocTsrInfo TsrEndSecId_Error, ID : %d \n", pTsrData[jj].wTsrEndSecId); + } + else + { + ShortToChar(pTsrData[jj].wTsrEndSecId, &pDataBuf[ii]); /* 组起点限速区段编号 */ + ii += 2u; + } + + + /* 临时限速起点限速区段至终点限速区段的逻辑方向 */ + if ((TSRSEC_LOG_DIR_SAME == pTsrData[jj].cTsrLogDir) + || (TSRSEC_LOG_DIR_OPPOSITE == pTsrData[jj].cTsrLogDir)) + { + pDataBuf[ii++] = pTsrData[jj].cTsrLogDir; /*组临时限速起点限速区段至终点限速区段的逻辑方向*/ + } + else + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocTsrInfo cTsrLogDir_Error, Dir : %d \n", pTsrData[jj].cTsrLogDir); + } + /* 临时限速包含的道岔数量 */ + if ((TSR_SWITCH_NUM_MAX < pTsrData[jj].cTsrSwitchSum)) + { + chRetVal = CI_ERROR; + } + else + { + pDataBuf[ii++] = pTsrData[jj].cTsrSwitchSum; /*组临时限速包含的道岔数量*/ + } + + for (kk = 0u; kk < pTsrData[jj].cTsrSwitchSum; kk++) + { + /* 临时限速包含的道岔编号 */ + if ((UINT16_MAX <= pTsrData[jj].switchData[kk].TsrSwitchId) + || (pTsrData[jj].switchData[kk].TsrSwitchId < 1u)) + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocTsrInfo TsrSwitchId_Error, ID : %d \n", pTsrData[jj].switchData[kk].TsrSwitchId); + } + else + { + ShortToChar(pTsrData[jj].switchData[kk].TsrSwitchId, &pDataBuf[ii]); /* 组临时限速包含的道岔编号 */ + ii += 2u; + } + + /* 临时限速包含道岔编号的位置 */ + if ((TSRSEC_SWITCH_POS_DINGWEI == pTsrData[jj].switchData[kk].cTsrSwitchPostion) + || (TSRSEC_SWITCH_POS_FANWEI == pTsrData[jj].switchData[kk].cTsrSwitchPostion)) + { + pDataBuf[ii++] = pTsrData[jj].switchData[kk].cTsrSwitchPostion; /*组临时限速包含道岔编号的位置*/ + } + else + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocTsrInfo TsrSwitchPostion_Error, ID : %d \n", pTsrData[jj].switchData[kk].cTsrSwitchPostion); } } @@ -7298,6 +7378,21 @@ static UINT8 PackCiToIvocTsrInfo(UINT8* pDataBuf, UINT16 *wDataLength) chRetVal = CI_ERROR; debug_infor_printf((const)"\n PackCiToIvocTsrInfo TsrSum_Error, sum : %d MAX: %d \n", cTsrSum , TSR_MAX_SUM); } + /*组包台风限速*/ + typhoonSpeedData = GetgTyphSpeedInfo(); + pDataBuf[ii++] = typhoonSpeedData.typhoonlimitState; + pDataBuf[ii++] = typhoonSpeedData.typhoonSpeedlimit; + if (((0x55U == typhoonSpeedData.typhoonlimitState) && (0U == typhoonSpeedData.typhoonSpeedlimit)) + || ((0xAAU == typhoonSpeedData.typhoonlimitState) && (0U < typhoonSpeedData.typhoonSpeedlimit))) + { + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + /*NR限速默认发0*/ + pDataBuf[ii++] = 0U; } @@ -7456,10 +7551,8 @@ static UINT8 PackCiToIvocLgcSgmtInfo(UINT8* pDataBuf, UINT16 *wDataLength,UINT1 UINT16 wLogicSecSum = 0U; UINT16 wLogicSecSendIndex = 0U; UINT16 wLogicSecSendSum = 0U; - UINT16 wRouteId = 0U; UINT16 wPLockRouteId = 0U; UINT16 wRLockRouteId = 0U; - UINT16 wRouteLockOverlapId = 0U; UINT16 ii = 0U; UINT16 wTrainSysId = 0U; LogicTrainResStruct * pstLogicResTrainInfo = NULL; @@ -7476,7 +7569,6 @@ static UINT8 PackCiToIvocLgcSgmtInfo(UINT8* pDataBuf, UINT16 *wDataLength,UINT1 UINT16 wLogSecRLockRouteId = 0U;/*逻辑区段锁闭所属进路*/ UINT8 chRouteType = 0U;/*进路类型*/ UINT16 wRouteLastPhy = 0U;/*进路最后一个物理区段*/ - UINT8 chSendFlag = 0U; UINT16 wMinTailPointBelongLogSecId = 0U; struct_PathPoint strTrainMinTail = { 0u }; @@ -7887,7 +7979,6 @@ static UINT8 PackCiToIvocLgcSgmtInfo(UINT8* pDataBuf, UINT16 *wDataLength,UINT1 */ static UINT8 PackCiToIvocReqAndReplyInfo(UINT8* pDataBuf, UINT16 *wDataLength,UINT16 wTrnId) { - UINT8 chPhyFlockStat = 0U; /*记录状态*/ UINT16 wRouteId = 0U; /*用作ID*/ UINT16 wRouteBelongCiId = 0U; /*用作ID*/ UINT16 wCiId = 0U; /*用作ID*/ @@ -8319,8 +8410,6 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) UINT16 ii = 0; UINT8 kk = 0; UINT16 sigId = 0; /*信号机ID*/ - UINT8 rowIndex = 0; - UINT8 colIndex = 0; UINT32 curCycleNum = Get2oo2CurCycleNum(); UINT32 appCycleTime = GetSystemParaAppCycleTime(); UINT8 retVal = CI_SUCCESS; @@ -8332,7 +8421,6 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) UINT32 signalIdInterConn = 0u; /*互联互通4字节信号机ID*/ UINT16 washMachineCurSum = GetWashMachineSum(); /*获取当前联锁包含洗车机数量*/ UINT16 washMachineId = 0u; - UINT8 psdValidFlag[2] = { 0,0 }; /*0无效,1有效*/ UINT8 psdReopenButtState = 0u; /*站台再次开门按钮状态*/ UINT8 platDepartButtState = 0u; /*站台发车按钮状态*/ UINT8 psdCloseButtState = 0u; /*屏蔽门状态*/ @@ -8838,8 +8926,6 @@ UINT8 PackCiToVobcDataFAOHLHToneSelfSecond(VobcToCiDataStruct* vobcToCiDataStru) UINT16 ii = 0U; UINT8 kk = 0U; UINT16 sigId = 0U; /*信号机ID*/ - UINT8 rowIndex = 0U; - UINT8 colIndex = 0U; UINT32 curCycleNum = Get2oo2CurCycleNum(); UINT32 appCycleTime = GetSystemParaAppCycleTime(); UINT8 retVal = CI_SUCCESS; @@ -8849,12 +8935,10 @@ UINT8 PackCiToVobcDataFAOHLHToneSelfSecond(VobcToCiDataStruct* vobcToCiDataStru) UINT32 emapCheckVer = 0u; UINT8 outStationSignalAllowOrNot = CI_VOBC_SIGNAL_DEFAULT; /*信号机的允许或禁止状态*/ UINT32 signalIdInterConn = 0u; /*互联互通4字节信号机ID*/ - UINT8 psdValidFlag[2U] = { 0U,0U }; /*0无效,1有效*/ UINT8 mutualLockState = 0u; /*互锁解除状态*/ UINT8 localhlhtId = 0u; UINT8 vobcHlhtId = 0u; UINT8 ciEmapCheckVer = 0u; - UINT8 flag = 0u; /*清客按钮按下后PDB状态组默认值*/ UINT8 chPsdBelongCiId = 0U; UINT16 wTempSendIndex = 0U; UINT8 chTempCheckFlag = CI_ERROR; @@ -9810,7 +9894,7 @@ static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength,co } /* -* 功能描述: 组包Ci到Ivoc区间雨雪与紧急制动信息 +* 功能描述: 组包Ci到Ivoc紧急制动信息 * 参数说明: UINT8* pDataBuf 数据缓冲区 * UINT16 *pDataLength 数据长度(输出参数) * UINT16 wTrainId 列车ID(不带0x14) @@ -9818,101 +9902,23 @@ static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength,co * CI_SUCCESS 1 成功 * Created By LQ 2023.11.10 */ -static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, UINT16 wTrainId) +static UINT8 PackCiToIvocUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, UINT16 wTrainId) { UINT8 retVal = CI_ERROR; UINT16 ii = 0U; UINT8 jj = 0U; - UINT16 kk = 0U; - UINT8 cAreaSnowTotalNum = 0U; /*区间雨雪站台数量*/ - UINT16 wAreaSnowNumIndex = 0U; - AreaSnowInfoStruct* pAreaSnowData = NULL; /*区间雨雪信息数组*/ - ToCiAreaSnowStruct* pRecvCiAreaSnow = NULL; /*相邻联锁发送的区间雨雪信息*/ UINT8 cWlbState = 0U; /*全线紧急制动状态*/ UINT8 cUrgentReason = 0U; /*紧急原因*/ UINT8 cAreaUrgentState = 0U; /*区域紧急制动状态*/ EnvelopeStruct* strTrainEnvelope = NULL; /*列车包络信息*/ UINT16 wAxisRelPhySecId = 0U; /*计轴区段关联的物理区段ID*/ UINT8 cUrgentState = 0U; /*发送给IVOC的紧急状态*/ - UINT16 wSnowPlatId = 0U; - UINT8 cSnowLevel = 0U; /*湿轨级别*/ if ((NULL != pDataBuf) && (NULL != pDataLength) && (0U != wTrainId) && (LINE_MAX_TRAIN > wTrainId)) { retVal = CI_SUCCESS; ii = *pDataLength; - /*组本地区间雨雪状态信息*/ - wAreaSnowNumIndex = ii; /*跳过区间雨雪站台数量*/ - ii++; - cAreaSnowTotalNum = GetLocalAreaSnowNum(); - pAreaSnowData = GetLocalAreaSnow(); - - if (LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowTotalNum) - { - for (jj = 0U; jj < cAreaSnowTotalNum; jj++) - { - wSnowPlatId = pAreaSnowData[jj].wAreaId; - cSnowLevel = pAreaSnowData[jj].cAreaSnowLevel; - if ((0U < wSnowPlatId) && (UINT16_MAX > wSnowPlatId) - && ((CI_SNOW_LEVEL_DEFAULT == cSnowLevel) || (CI_SNOW_LEVEL_ONE == cSnowLevel) || (CI_SNOW_LEVEL_TWO == cSnowLevel))) - { - ShortToChar(wSnowPlatId, &pDataBuf[ii]); /*组区间ID*/ - ii += 2U; - pDataBuf[ii] = cSnowLevel; /*组区间湿轨级别*/ - ii++; - } - else - { - retVal = CI_ERROR; /*区间雨雪站台Id非法,返回失败*/ - } - } - } - else - { - retVal = CI_ERROR; /*区间雨雪数量超限,返回失败*/ - debug_infor_printf((const)"\n PackCiToIvocSnowAndUrgentInfo AreaSnowSum_Error, sum : %d _MAX: %d \n", cAreaSnowTotalNum, LOCAL_AREA_SNOW_SUM_MAX); - } - - /*组相邻联锁发送的区间雨雪状态信息*/ - pRecvCiAreaSnow = GetCiRecvAreaSnowInfo(); - for (kk = 0U; kk < CI_COM_CI_MAX_NUM; kk++) - { - if (0U != pRecvCiAreaSnow[kk].cPlatFormNum) - { - for (jj = 0U; jj < pRecvCiAreaSnow[kk].cPlatFormNum; jj++) - { - if (LOCAL_AREA_SNOW_SUM_MAX > cAreaSnowTotalNum) - { - wSnowPlatId = pRecvCiAreaSnow[kk].szPlatFormInfo[jj].wAreaId; - cSnowLevel = pRecvCiAreaSnow[kk].szPlatFormInfo[jj].cAreaSnowLevel; - if ((0U < wSnowPlatId) && (UINT16_MAX > wSnowPlatId) - && ((CI_SNOW_LEVEL_DEFAULT == cSnowLevel) || (CI_SNOW_LEVEL_ONE == cSnowLevel) || (CI_SNOW_LEVEL_TWO == cSnowLevel))) - { - ShortToChar(wSnowPlatId, &pDataBuf[ii]); /*组区间ID*/ - ii += 2U; - pDataBuf[ii] = cSnowLevel; /*组区间湿轨级别*/ - ii++; - cAreaSnowTotalNum++; - } - else - { - retVal = CI_ERROR; /*区间雨雪站台Id非法,返回失败*/ - } - } - else - { - retVal = CI_ERROR; /*区间雨雪数量超限,返回失败*/ - } - } - } - else - { - /*继续遍历*/ - } - } - pDataBuf[wAreaSnowNumIndex] = cAreaSnowTotalNum; /*组区间雨雪站台数量*/ - /*组紧急制动状态信息*/ cWlbState = WlbGetState(); /*获取全线紧急状态*/ if (WLB_UNSET != cWlbState) @@ -9957,18 +9963,11 @@ static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, cUrgentState = CI_IVOC_URGENT_YES; /*紧急原因非0,发紧急有效*/ } - if (CI_SUCCESS == retVal) - { - pDataBuf[ii] = cUrgentState; /*组紧急制动状态*/ - ii++; - pDataBuf[ii] = cUrgentReason; /*组紧急制动原因*/ - ii++; - *pDataLength = ii; - } - else - { - /*不处理,返回失败*/ - } + pDataBuf[ii] = cUrgentState; /*组紧急制动状态*/ + ii++; + pDataBuf[ii] = cUrgentReason; /*组紧急制动原因*/ + ii++; + *pDataLength = ii; } else { @@ -12447,164 +12446,122 @@ static UINT8 PackCiToIvocPosMonitorInfo(UINT8* pDataBuf, UINT16* wDataLength, co */ void PackCiToVobcFlyProtectData(void) { + UINT8 ii = 0U; UINT8 jj = 0U; + UINT8 cszCiToIvocDataBuf[VOBC_TO_CI_DATA_LEN_MAX] = { 0U };/*CI到VOBC组帧数组*/ + UINT16 wDataIndex = 0U; /*组包数据索引*/ UINT8 chLineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); UINT8 chFlyProtectTrainNum = GetFlyProtectNum(); /*飞车宕机数目*/ TrainFlyProtectStru* pFlyData = NULL; /*飞车宕机数据*/ - UINT8 cNvramFlyProtectNum = 0U; /*使用NVRAM且位置监督无效的飞车数量*/ - UINT16* pNvramFlyProtectId = NULL; /*使用NVRAM且位置监督无效的飞车ID*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); /*本地联锁ID*/ + UINT32 dwCiEtcsId = 0U; /*联锁互联互通编号*/ + UINT32 dwVobcEtcsId = 0U; /*车载互联互通ID*/ + UINT32 dwEmapCheckVer = 0U; /*电子地图数据版本号*/ + UINT8 chTempResult = 0U;/*临时检查结果*/ + UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*当前联锁周期号*/ + UINT32 dwAppCycleTime = GetSystemParaAppCycleTime(); + UINT32 dwSrcCrntSN = 0U; + UINT32 dwCiRcvSN = 0U; + UINT16 wDstDevId = 0U; /*目的设备ID*/ - cNvramFlyProtectNum = GetNvramFlyProtectNum(); /*获取使用NVRAM且位置监督无效的飞车数量*/ - pNvramFlyProtectId = GetNvramFlyProtectId(); /*获取使用NVRAM且位置监督无效的飞车ID*/ if ((LINE_CC == chLineIdentity) - && (SHUT_DOWN_TRAIN_NUMMAX > chFlyProtectTrainNum) - && (SHUT_DOWN_TRAIN_NUMMAX > cNvramFlyProtectNum) && (NULL != pNvramFlyProtectId)) + && (0U < chFlyProtectTrainNum) && (SHUT_DOWN_TRAIN_NUMMAX > chFlyProtectTrainNum)) { - /*组飞车宕机的飞车特控报文*/ for (jj = 0U; jj < chFlyProtectTrainNum; jj++) { pFlyData = GetFlyProtectData(jj); if (NULL != pFlyData) { - PackCiToVobcFlyProtectInfo(pFlyData->wTrainId); + for (ii = 0U; ii < VobcToCiSum; ii++) + { + if (VobcToCiDataStru[ii].VobcId == pFlyData->wTrainId) + { + break; + } + } + + if (ii == VobcToCiSum) + { + ; /*没找到当前和该车通信*/ + } + else + { + /*开始组包*/ + chTempResult = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + chLocalCiId, 0U, &dwCiEtcsId); + chTempResult &= dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(VobcToCiDataStru[ii].VobcId), VobcToCiDataStru[ii].vobcLogId, &dwVobcEtcsId); + chTempResult &= GetCiEmapCheckVer(chLocalCiId, &dwEmapCheckVer, CI_SYSTEM_TYPE_VOBC); + + if (CI_SUCCESS == chTempResult) + { + dwSrcCrntSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcToCiDataStru[ii].VobcId)); + dwCiRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcToCiDataStru[ii].VobcId)); + wDataIndex = 0U; + + ShortToChar(IVOC_CI_INTERFACE_INFOTYPE, &cszCiToIvocDataBuf[wDataIndex]);/*接口信息类型*/ + wDataIndex += 2U; + LongToChar(dwCiEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*发送方标识信息*/ + wDataIndex += 4U; + LongToChar(dwVobcEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*接收方标识信息*/ + wDataIndex += 4U; + LongToChar(dwEmapCheckVer, &cszCiToIvocDataBuf[wDataIndex]);/*电子地图版本校验信息*/ + wDataIndex += 4U; + LongToChar(dwCurCycleNum, &cszCiToIvocDataBuf[wDataIndex]);/*本方消息序列号*/ + wDataIndex += 4U; + ShortToChar((UINT16)dwAppCycleTime, &cszCiToIvocDataBuf[wDataIndex]);/*设备通讯周期*/ + wDataIndex += 2U; + LongToChar(dwSrcCrntSN, &cszCiToIvocDataBuf[wDataIndex]);/*对方消息序列号:recvOppMsgSN记录收到对方上一条消息中的对方消息序列号*/ + wDataIndex += 4U; + LongToChar(dwCiRcvSN, &cszCiToIvocDataBuf[wDataIndex]);/*收到上一条消息时本方序列号*/ + wDataIndex += 4U; + cszCiToIvocDataBuf[wDataIndex++] = CI_VOBC_PRTCL_VER;/*HLHT+FAO_CI_VOBC接口协议版本号*/ + wDataIndex += 2U;/*通用报文头中的应用层报文总长度*/ + /*以下为应用层数据*/ + wDataIndex += 2U;/*报文长度*/ + ShortToChar(CI_IVOC_INFO_TYPE_SPECIAL_CONTROL, &cszCiToIvocDataBuf[wDataIndex]); + wDataIndex += 2U;/*应用报文类型*/ + wDataIndex += 2U;/*预留两个字节*/ + + /*特控报文*/ + cszCiToIvocDataBuf[wDataIndex++] = CI_IVOC_LOST_POSITION; + + /*应用层数据的报文长度 */ + cszCiToIvocDataBuf[31U] = (UINT8)((UINT8)((wDataIndex - 33U) >> 8U) & 0xFFU); + cszCiToIvocDataBuf[32U] = (UINT8)((wDataIndex - 33U) & 0xFFU); + + /*通用报文头中应用层报文总长度*/ + cszCiToIvocDataBuf[29U] = (UINT8)((UINT8)((wDataIndex - 31U) >> 8U) & 0xFFU); + cszCiToIvocDataBuf[30U] = (UINT8)((wDataIndex - 31U) & 0xFFU); + + wDstDevId = ((UINT16)(CI_SYSTEM_TYPE_VOBC << 8U) | VobcToCiDataStru[ii].VobcId); + chTempResult = OutnetSafeSend(wDstDevId, (VobcToCiDataStru[ii].vobcLogId), &cszCiToIvocDataBuf[0], wDataIndex); + + if (1U == chTempResult) + { /*写队列成功*/ +#ifdef LOGPRINT/*日志打印宏*/ +#ifdef PLATFORM_2OO2/*2oo2平台打印*/ + debug_infor_printf((const)"\nVOBCFLYPROTECT_SEND:%d vobc:%d", wDataIndex, VobcToCiDataStru[ii].VobcId); + debug_out_array(0xAA, cszCiToIvocDataBuf, wDataIndex); +#endif/*平台打印结束*/ +#endif + } + else + { + debug_infor_printf((const)"\nWrite VOBC %d FLYPROTECT Error, Len = %d\n", VobcToCiDataStru[ii].VobcId, wDataIndex); + } + + } + else + { + /*不组包*/ + debug_infor_printf((const)"\nvobc %d PackCiToVobcFlyProtectData error,dwCiEtcsId:%d dwVobcEtcsId:%d dwEmapCheckVer:%d \n", VobcToCiDataStru[ii].VobcId, dwCiEtcsId, dwVobcEtcsId, dwEmapCheckVer); + } + } } else { ; /*不组包*/ } } - - /*组飞车不宕机的飞车特控报文*/ - for (jj = 0U; jj < cNvramFlyProtectNum; jj++) - { - PackCiToVobcFlyProtectInfo(pNvramFlyProtectId[jj]); - } - } - else - { - ; /*其它接口无此帧*/ - } -} - -/* -* 功能描述:组RC到车载飞车宕机信息 -* 参数说明:const UINT16 wTrainId 列车ID -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId) -{ - UINT16 wBufIndex = 0U; - UINT8 ii = 0U; - UINT8 cszCiToIvocDataBuf[VOBC_TO_CI_DATA_LEN_MAX] = { 0U };/*CI到VOBC组帧数组*/ - UINT16 wDataIndex = 0U; /*组包数据索引*/ - UINT8 chLocalCiId = 0U; /*本地联锁ID*/ - UINT32 dwCiEtcsId = 0U; /*联锁互联互通编号*/ - UINT32 dwVobcEtcsId = 0U; /*车载互联互通ID*/ - UINT32 dwEmapCheckVer = 0U; /*电子地图数据版本号*/ - UINT8 chTempResult = 0U;/*临时检查结果*/ - UINT32 dwCurCycleNum = 0U; /*当前联锁周期号*/ - UINT32 dwAppCycleTime = 0U; - UINT32 dwSrcCrntSN = 0U; - UINT32 dwCiRcvSN = 0U; - UINT16 wDstDevId = 0U; /*目的设备ID*/ - - wBufIndex = GetTrainBufIndex(wTrainId); - chLocalCiId = GetSystemParaLocalCiId(); /*本地联锁ID*/ - if ((TRAIN_SUM_MAX > wBufIndex) && (0U != chLocalCiId)) - { - dwCurCycleNum = Get2oo2CurCycleNum(); /*当前联锁周期号*/ - dwAppCycleTime = GetSystemParaAppCycleTime(); - for (ii = 0U; ii < VobcToCiSum; ii++) - { - if (VobcToCiDataStru[ii].VobcId == wTrainId) - { - break; - } - else - { - /*继续遍历比较*/ - } - } - - if (ii == VobcToCiSum) - { - ; /*没找到当前和该车通信,不组包*/ - } - else - { - /*开始组包*/ - chTempResult = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + chLocalCiId, 0U, &dwCiEtcsId); - chTempResult &= dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(VobcToCiDataStru[ii].VobcId), VobcToCiDataStru[ii].vobcLogId, &dwVobcEtcsId); - chTempResult &= GetCiEmapCheckVer(chLocalCiId, &dwEmapCheckVer, CI_SYSTEM_TYPE_VOBC); - - if (CI_SUCCESS == chTempResult) - { - dwSrcCrntSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcToCiDataStru[ii].VobcId)); - dwCiRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcToCiDataStru[ii].VobcId)); - wDataIndex = 0U; - - ShortToChar(IVOC_CI_INTERFACE_INFOTYPE, &cszCiToIvocDataBuf[wDataIndex]);/*接口信息类型*/ - wDataIndex += 2U; - LongToChar(dwCiEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*发送方标识信息*/ - wDataIndex += 4U; - LongToChar(dwVobcEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*接收方标识信息*/ - wDataIndex += 4U; - LongToChar(dwEmapCheckVer, &cszCiToIvocDataBuf[wDataIndex]);/*电子地图版本校验信息*/ - wDataIndex += 4U; - LongToChar(dwCurCycleNum, &cszCiToIvocDataBuf[wDataIndex]);/*本方消息序列号*/ - wDataIndex += 4U; - ShortToChar((UINT16)dwAppCycleTime, &cszCiToIvocDataBuf[wDataIndex]);/*设备通讯周期*/ - wDataIndex += 2U; - LongToChar(dwSrcCrntSN, &cszCiToIvocDataBuf[wDataIndex]);/*对方消息序列号:recvOppMsgSN记录收到对方上一条消息中的对方消息序列号*/ - wDataIndex += 4U; - LongToChar(dwCiRcvSN, &cszCiToIvocDataBuf[wDataIndex]);/*收到上一条消息时本方序列号*/ - wDataIndex += 4U; - cszCiToIvocDataBuf[wDataIndex] = CI_VOBC_PRTCL_VER;/*HLHT+FAO_CI_VOBC接口协议版本号*/ - wDataIndex++; - - wDataIndex += 2U;/*通用报文头中的应用层报文总长度*/ - /*以下为应用层数据*/ - wDataIndex += 2U;/*报文长度*/ - ShortToChar(CI_IVOC_INFO_TYPE_SPECIAL_CONTROL, &cszCiToIvocDataBuf[wDataIndex]); - wDataIndex += 2U;/*应用报文类型*/ - wDataIndex += 2U;/*预留两个字节*/ - - /*特控报文*/ - cszCiToIvocDataBuf[wDataIndex] = CI_IVOC_LOST_POSITION; - wDataIndex++; - - /*应用层数据的报文长度 */ - cszCiToIvocDataBuf[31U] = (UINT8)((UINT8)((wDataIndex - 33U) >> 8U) & 0xFFU); - cszCiToIvocDataBuf[32U] = (UINT8)((wDataIndex - 33U) & 0xFFU); - - /*通用报文头中应用层报文总长度*/ - cszCiToIvocDataBuf[29U] = (UINT8)((UINT8)((wDataIndex - 31U) >> 8U) & 0xFFU); - cszCiToIvocDataBuf[30U] = (UINT8)((wDataIndex - 31U) & 0xFFU); - - wDstDevId = ((UINT16)(CI_SYSTEM_TYPE_VOBC << 8U) | VobcToCiDataStru[ii].VobcId); - chTempResult = OutnetSafeSend(wDstDevId, (VobcToCiDataStru[ii].vobcLogId), &cszCiToIvocDataBuf[0], wDataIndex); - - if (1U == chTempResult) - { /*写队列成功*/ -#ifdef LOGPRINT/*日志打印宏*/ -#ifdef PLATFORM_2OO2/*2oo2平台打印*/ - debug_infor_printf((const)"\nVOBCFLYPROTECT_SEND:%d vobc:%d", wDataIndex, VobcToCiDataStru[ii].VobcId); - debug_out_array(0xAA, cszCiToIvocDataBuf, wDataIndex); -#endif/*平台打印结束*/ -#endif - } - else - { - debug_infor_printf((const)"\nWrite VOBC %d FLYPROTECT Error, Len = %d\n", VobcToCiDataStru[ii].VobcId, wDataIndex); - } - } - else - { - /*不组包*/ - debug_infor_printf((const)"\nvobc %d PackCiToVobcFlyProtectInfo error,dwCiEtcsId:%d dwVobcEtcsId:%d dwEmapCheckVer:%d \n", VobcToCiDataStru[ii].VobcId, dwCiEtcsId, dwVobcEtcsId, dwEmapCheckVer); - } - } } else { @@ -12677,4 +12634,228 @@ UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTr return chRetVal; +} + +/* +* 功能描述:组包Ci到Ivoc的逻辑区段禁止FAO运行信息 +* 参数说明: UINT8* dataBuf, 数据缓冲区 +* UINT16 *dataLength, 数据长度 输出参数 +* UINT16 wTrainId 列车ID +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Create: fan 20250725 +*/ +UINT8 PackCiToIvocProhibitFAO(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 wLogicSecSum = 0U; /*逻辑区段数量*/ + UINT16 wLogicSecIndex = 0U; + UINT16 wLogicSecSendIndex = 0U; + UINT16 wLogicSecId = 0U; /*用作ID*/ + UINT16 logSecSendNum = 0u; /*禁止FAO运行的逻辑区段数量*/ + UINT8 logSecProhibitState = 0u; /*逻辑区段禁止FAO运行的标志*/ + + if ((NULL == pDataBuf) || (NULL == wDataLength)) + { + chRetVal = CI_ERROR; + } + else + { + ii = *wDataLength; + chRetVal = CI_SUCCESS; + + wLogicSecSum = GetLogicSecCurSum(); + if (LOGIC_SECTION_SUM_MAX > wLogicSecSum) + { + wLogicSecSendIndex = ii; + logSecSendNum = 0U; + ii += 1U; + + for (wLogicSecIndex = 0U; wLogicSecIndex < wLogicSecSum; wLogicSecIndex++) + { + /*遍历逻辑区段,获取禁止FAO运行的标志*/ + wLogicSecId = GetLogicSecId(wLogicSecIndex); + if ((0U < wLogicSecId) && (UINT16_MAX > wLogicSecId)) + { + logSecProhibitState = GetLogSecProhibitFAOState(wLogicSecId); + if (LOGSEC_PROHIBIT_FAO_YES == logSecProhibitState) + { + ShortToChar(wLogicSecId, &pDataBuf[ii]); + ii += 2u; + logSecSendNum++; + } + else + { + /*不处理*/ + } + } + else + { + /*错误,停止组包*/ + chRetVal = CI_ERROR; + debug_infor_printf((const)"\n PackCiToIvocProhibitFAO LogicSecId_Error, ID : %d \n", wLogicSecId); + } + + if (CI_SUCCESS != chRetVal) + { + break; + } + else + { + /*继续执行*/ + } + } + pDataBuf[wLogicSecSendIndex] = logSecSendNum; + } + else + { + /*逻辑区段数量错误 停止组包*/ + chRetVal = CI_ERROR; + } + } + + if (CI_SUCCESS == chRetVal) + { + *wDataLength = ii; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* 功能描述: 组包Ci到Ivoc牵引加速度和制动率信息 +* 参数说明: UINT8* pDataBuf 数据缓冲区(输出参数) +* UINT16 *pDataLength 数据长度(输出参数) +* 返回值 : CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.02.05 +*/ +UINT8 PackCiToIvocAccAndBrakeInfo(UINT8* pDataBuf, UINT16* pDataLength) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 cAllLineAccValue = 0U; /*全线牵引加速度设置值*/ + UINT8 cAllLineBrakeValue = 0U; /*全线制动率设置值*/ + UINT8 cAreaNum = 0U; /*区间数量*/ + AreaAccelerationInfoStruct* pAreaAccData = NULL; /*本地区间牵引加速度信息数组*/ + AreaBrakeRateInfoStruct* pAreaBrakeData = NULL; /*本地区间制动率信息数组*/ + + if ((NULL != pDataBuf) && (NULL != pDataLength)) + { + retVal = CI_SUCCESS; + ii = *pDataLength; + + cAllLineAccValue = GetAllLineAccelerationValue(); /*获取全线牵引加速度设置值*/ + if (UINT8_MAX > cAllLineAccValue) + { + pDataBuf[ii] = cAllLineAccValue; /*组全线牵引加速度设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: AllLineAccelerationValue[%d] Is Invalid\n", cAllLineAccValue); + retVal = CI_ERROR; /*全线牵引加速度设置值错误,返回失败*/ + } + + cAllLineBrakeValue = GetAllLineBrakeRateValue(); /*获取全线制动率设置值*/ + if (UINT8_MAX > cAllLineBrakeValue) + { + pDataBuf[ii] = cAllLineBrakeValue; /*组全线制动率设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: AllLineBrakeRateValue[%d] Is Invalid\n", cAllLineBrakeValue); + retVal = CI_ERROR; /*全线制动率设置值错误,返回失败*/ + } + + /*组区间牵引加速度信息*/ + cAreaNum = GetLocalAreaAccelerationNum(); + pAreaAccData = GetLocalAreaAcceleration(); + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaAccData)) + { + pDataBuf[ii] = cAreaNum; /*组区间数量*/ + ii++; + + for (jj = 0U; jj < cAreaNum; jj++) + { + if ((0U < pAreaAccData[jj].wAreaId) && (UINT16_MAX > pAreaAccData[jj].wAreaId) + && (0U < pAreaAccData[jj].cAreaAccelerationValue) && (UINT8_MAX > pAreaAccData[jj].cAreaAccelerationValue)) + { + ShortToChar(pAreaAccData[jj].wAreaId, &pDataBuf[ii]); /*组区间ID*/ + ii += 2U; + + pDataBuf[ii] = pAreaAccData[jj].cAreaAccelerationValue; /*组区间牵引加速度设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: AreaId[%d] Or AreaAccValue[%d] Is Invalid\n", pAreaAccData[jj].wAreaId, pAreaAccData[jj].cAreaAccelerationValue); + retVal = CI_ERROR; /*区间信息非法,返回失败*/ + break; + } + } + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: Local AreaAccNum[%d] Exceed Max[%d]\n", cAreaNum, LOCAL_AREA_SNOW_SUM_MAX); + retVal = CI_ERROR; /*区间牵引加速度数量超限,返回失败*/ + } + + /*组区间制动率信息*/ + cAreaNum = GetLocalAreaBrakeRateNum(); + pAreaBrakeData = GetLocalAreaBrakeRate(); + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaNum) && (NULL != pAreaBrakeData)) + { + pDataBuf[ii] = cAreaNum; /*组区间数量*/ + ii++; + + for (jj = 0U; jj < cAreaNum; jj++) + { + if ((0U < pAreaBrakeData[jj].wAreaId) && (UINT16_MAX > pAreaBrakeData[jj].wAreaId) + && (0U < pAreaBrakeData[jj].cAreaBrakeRateValue) && (UINT8_MAX > pAreaBrakeData[jj].cAreaBrakeRateValue)) + { + ShortToChar(pAreaBrakeData[jj].wAreaId, &pDataBuf[ii]); /*组区间ID*/ + ii += 2U; + + pDataBuf[ii] = pAreaBrakeData[jj].cAreaBrakeRateValue; /*组区间制动率设置值*/ + ii++; + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: AreaId[%d] Or AreaBrakeValue[%d] Is Invalid\n", pAreaBrakeData[jj].wAreaId, pAreaBrakeData[jj].cAreaBrakeRateValue); + retVal = CI_ERROR; /*区间信息非法,返回失败*/ + break; + } + } + } + else + { + debug_infor_printf((const)"\nPackCiToIvocAccAndBrakeInfo Err: Local AreaBrakeNum[%d] Exceed Max[%d]\n", cAreaNum, LOCAL_AREA_SNOW_SUM_MAX); + retVal = CI_ERROR; /*区间制动率数量超限,返回失败*/ + } + + if (CI_SUCCESS == retVal) + { + *pDataLength = ii; + } + else + { + /*不处理,返回失败*/ + } + } + else + { + /*入参非法,返回失败*/ + } + + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h index f554a8e..e61fa5d 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h @@ -202,6 +202,7 @@ #define CI_IVOC_FLOODGATE_APPLY_SUM ((UINT16)50U) /*CI到IVOC 防淹门关闭请求最大数量*/ #define CI_IVOC_PACKET_LENGTH_MAX ((UINT16)1400U) /*CI到IVOC 包长度数量最大值*/ #define TRAIN_TOPLATFORM_LOG_SUM ((UINT16)1000U) /*列车到站台的逻辑区段最大数量*/ +#define CI_IVOC_FLOCK_LOG_SUM ((UINT16)1000U) /*CI到IVOC封锁的逻辑区段最大数量*/ #define CI_IVOC_LOGSEC_JUMPLOCK_YES ((UINT8)0x55U) /*CI到IVOC 逻辑区段跳跃锁闭已锁闭*/ #define CI_IVOC_LOGSEC_JUMPLOCK_NO ((UINT8)0xaaU) /*CI到IVOC 逻辑区段跳跃锁闭未锁闭*/ @@ -343,7 +344,9 @@ typedef struct S_VobcToCiDataStruct UINT8 chRrmReq; /*远程RM申请*/ UINT16 wNextStation; /*下一站*/ UINT8 chDerailment; /*脱轨状态*/ - + UINT8 chIntegrityState; /*完整性状态*/ + UINT8 chEscapeDoorState; /*逃生门状态*/ + UINT8 chVideoQkState; /*视频清客状态*/ UINT8 chVideoQkResult; /*视频清客结果*/ UINT16 wVideoQkRelatePsdId1; /*视频清客关联屏蔽门ID1*/ @@ -696,14 +699,6 @@ UINT8 ParseFAOHLHTBackUpControlData(UINT8* dataBuf, UINT16 dataLen, VobcToCiData */ void PackCiToVobcFlyProtectData(void); -/* -* 功能描述:组RC到车载飞车宕机信息 -* 参数说明:const UINT16 wTrainId 列车ID -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId); - /* * 功能描述:组包Ci到Ivoc的向后跳跃申请回复 * 参数说明: UINT8* dataBuf, 数据缓冲区 @@ -714,6 +709,28 @@ void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId); * Create: fan 20250725 */ UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); + +/* +* 功能描述:组包Ci到Ivoc的逻辑区段禁止FAO运行信息 +* 参数说明: UINT8* dataBuf, 数据缓冲区 +* UINT16 *dataLength, 数据长度 输出参数 +* UINT16 wTrainId 列车ID +* 返 回 值:CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Create: fan 20250725 +*/ +UINT8 PackCiToIvocProhibitFAO(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); + +/* +* 功能描述: 组包Ci到Ivoc牵引加速度和制动率信息 +* 参数说明: UINT8* pDataBuf 数据缓冲区(输出参数) +* UINT16 *pDataLength 数据长度(输出参数) +* 返回值 : CI_ERROR 0 失败 +* CI_SUCCESS 1 成功 +* Created By LQ 2026.02.05 +*/ +UINT8 PackCiToIvocAccAndBrakeInfo(UINT8* pDataBuf, UINT16* pDataLength); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/CiConfigData.h b/TSCP/src/APP/ciapp/QueryFiles/CiConfigData.h index 38f5aad..a457750 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/CiConfigData.h +++ b/TSCP/src/APP/ciapp/QueryFiles/CiConfigData.h @@ -45,6 +45,7 @@ #include "../DiffLineDev/DiffLineDevConfigDataManage.h" #include "../VirtualDevice/VirtualDevDataManage.h" #include "../DataManage/DeviceConfigDataManage.h" +#include "../OHL/OHLConfigDataManage.h" #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c index 8cb8ad0..beac161 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c @@ -69,6 +69,14 @@ void SetGardoorphySecData(GaragedoorConfigDataStruct* pGaragedoorCfgDtStr, UINT1 UINT8 SetSignalVirtualAttr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct* pSgnlCfgDtStr); UINT8 SetSignalCrossCloseAttr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct* pSgnlCfgDtStr); +/********************************************* +*函数功能:根据电子地图中信号机属性设置信号机终端阻挡属性 +*参数说明:pSgnl是DSU信号机数据结构指针 +* pSgnlCfgDtStr,信号机配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +static UINT8 SetSignalEndAttr(DSU_SIGNAL_STRU* pSgnl, SignalConfigDataStruct* pSgnlCfgDtStr); + /********************************************* *函数功能:从点式临时限速配置数据(计轴区段)表到点式临时限速配置结构(逻辑区段)的转换 *参数说明:pDquOutStationSigStrRef 点式临时限速配置数据结构体指针 @@ -347,6 +355,28 @@ UINT8 RelayInit(CHAR* FSName) debug_infor_printf((const)"MenJinConfigDataStructInit fail.\r\n"); } + /*SSKS闪灯稳灯继电器初始化*/ + funcRtn *= SSksLightRelayCfgDataStrInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"SSksLightRelayCfgDataStrInit fail.\r\n"); + } + else + { + /*继续*/ + } + + /*联络线旁路继电器初始化*/ + funcRtn *= ConnectOverrideCfgDataStrInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"ConnectOverrideCfgDataStrInit fail.\r\n"); + } + else + { + /*继续*/ + } + /*防淹门*/ funcRtn *= FloodGateConfigDataStructInit(FSName); if (0u == funcRtn) @@ -385,6 +415,31 @@ UINT8 RelayInit(CHAR* FSName) debug_infor_printf((const)"GatewayConfigDataStructInit fail.\r\n"); } } + + /*接触网*/ + funcRtn *= OhlConfigDataStructInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"OhlConfigDataStructInit fail.\r\n"); + } + + /*ECS初始化*/ + funcRtn *= EcsConfigDataStructInit(FSName); + if (0U == funcRtn) + { + debug_infor_printf((const)"EcsConfigDataStructInit fail.\r\n"); + } + else + { + /*继续初始化*/ + } + + /*初始全线化紧急停车按钮接口配置数据结构体----对外结构体*/ + funcRtn *= CesbConfigDataStructInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"CesbConfigDataStructInit fail.\r\n"); + } /******************************************************************************** 联锁表数据内容计算 @@ -722,8 +777,6 @@ UINT8 SystemParameterStructInit(CHAR* FSName) /*对向行驶双车间隔最小安全距离(cm)*/ dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance = pCbtcConfigDataStru.OppositeTrackDistance; - /*站台追踪时,列车间隔距离(cm)*/ - dquCICfgDtStr.SystemParaStrNew.StationTrackDistance = pCbtcConfigDataStru.StationTrackDistance; /*线路最差情况下紧急制动距离(单位m)*/ dquCICfgDtStr.SystemParaStrNew.MaxMALength = pCbtcConfigDataStru.MaxMALength; @@ -1140,7 +1193,7 @@ UINT8 SglCfgDtStruFromDquSignalStr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct UINT16 ocIdBuff = 0u; UINT16 indexAc = 0U; UINT8 railwayType = CI_TRADITION_RAILWAY; - + UINT8 chDsnLinSwitch = 0u; /*入口参数防护*/ if((NULL == pSgnl) || (NULL == pSgnlCfgDtStr)) { @@ -1255,7 +1308,15 @@ UINT8 SglCfgDtStruFromDquSignalStr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct pSgnlCfgDtStr->RepLxRelayId = (RelayData.pRelaySignalStr+i)->wRepRelayTrainSignalId; pSgnlCfgDtStr->DetainDriveRelayId = (RelayData.pRelaySignalStr+i)->wRelayDriveDetainId; pSgnlCfgDtStr->detainRelayId = (RelayData.pRelaySignalStr+i)->wRelayCollDetainId; - pSgnlCfgDtStr->SignalType = (UINT8)((RelayData.pRelaySignalStr+i)->wSignalDrvColType); + chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + if (FUNC_SWITCH_ON == chDsnLinSwitch) + { + pSgnlCfgDtStr->SignalType = SIGNAL_TYPE_2_ALL_NOYINDAO_DSN; + } + else + { + pSgnlCfgDtStr->SignalType = (UINT8)((RelayData.pRelaySignalStr + i)->wSignalDrvColType); + } pSgnlCfgDtStr->detainRelayId = (RelayData.pRelaySignalStr + i)->DetainBtnCollRelayId; pSgnlCfgDtStr->detainCutRelayId = (RelayData.pRelaySignalStr + i)->DetainCutBtnRelayId; pSgnlCfgDtStr->detainDisplayRelayId = (RelayData.pRelaySignalStr + i)->DetainBtnIndicatorRelayId; @@ -1288,9 +1349,14 @@ UINT8 SglCfgDtStruFromDquSignalStr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct rtnvalue &= SetSignalVirtualAttr(pSgnl,pSgnlCfgDtStr);/*根据电子地图中信号机属性设置信号机虚拟属性*/ rtnvalue &= SetSignalCrossCloseAttr(pSgnl,pSgnlCfgDtStr);/*根据电子地图中信号机属性设置信号机调车跨压关灯属性*/ rtnvalue &= SetSignalFenDuanAttr(pSgnl, pSgnlCfgDtStr);/*根据电子地图中信号机属性设置信号机分段属性*/ + rtnvalue &= SetSignalEndAttr(pSgnl, pSgnlCfgDtStr);/*根据电子地图中信号机属性设置信号机端点属性*/ if (1U == rtnvalue) { + /*根据电子地图中信号机属性设置信号机联络线属性*/ + pSgnlCfgDtStr->DsnConnectAttr = + (0x55u == dsuStaticHeadStru.pLinkStru[dsuLinkIndex[pSgnl->wProtectLinkId]].cDisneyConnectAttr) + ? SIGNAL_CONNECT_TRUE : SIGNAL_CONNECT_FALSE; pSgnlCfgDtStr->wProtectLinkId = pSgnl->wProtectLinkId; pSgnlCfgDtStr->dwProtectOff = pSgnl->dwProtectLinkOfst; pSgnlCfgDtStr->chShineSignal = (UINT8)pSgnl->wShineSignal; @@ -1752,6 +1818,8 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru pSwitchCfgDtStr->DsQRelayId = 0u; pSwitchCfgDtStr->DsHRelayId = 0u; pSwitchCfgDtStr->ByPassRelayId = 0u; + pSwitchCfgDtStr->RwmRelayId = 0u; + pSwitchCfgDtStr->EnableBypassRelayId = 0u; for(j=0u;jwId==(RelayData.pRelayPointStr+j)->wPointId) @@ -1766,6 +1834,8 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru pSwitchCfgDtStr->DFHRelayId = (RelayData.pRelayPointStr+j)->wDFHId; pSwitchCfgDtStr->wShadowDbRelayId = (RelayData.pRelayPointStr + j)->wRelayShadowDingBiaoId; pSwitchCfgDtStr->wShadowFbRelayId = (RelayData.pRelayPointStr + j)->wRelayShadowFanBiaoId; + pSwitchCfgDtStr->wExtraPhySecId = (RelayData.pRelayPointStr + j)->wExtraPhySecId; + pSwitchCfgDtStr->chNormalPos = (RelayData.pRelayPointStr + j)->chNormalPos; if (pSwitchCfgDtStr->SwitchId>0u) { if (0u == pSwitchCfgDtStr->DbRelayId) @@ -2472,6 +2542,34 @@ UINT8 LogicSecCfgDtStruFromDquSgmtStr(DSU_LOGIC_SGMT_STRU* pLogicSgmt,LogicSecti /*存在link不具有CBTC区域属性,则逻辑区段不具有CBTC区域属性*/ } + pLgScCfgDtStr->chDisneyConnectAttr = LOGSEC_CONNECT_PROPERTY_NO; /*逻辑区段联络线区域属性*/ + + /*遍历逻辑区段包含的link,确定逻辑区段的联络线属性*/ + for (kk = 0U; kk < pLgScCfgDtStr->chLinkNum; kk++) + { + pLogSecIncLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pLgScCfgDtStr->szLinkIdBuff[kk]]; + if (0x55U != pLogSecIncLinkStru->cDisneyConnectAttr) + { + break; /*link不具有联络线属性,停止遍历*/ + } + else + { + /*link具有联络线区域属性,继续遍历*/ + } + } + + if ((kk == pLgScCfgDtStr->chLinkNum) && (0U != kk)) + { + pLgScCfgDtStr->chDisneyConnectAttr = LOGSEC_CONNECT_PROPERTY_YES; /*所有link均具有联络线区域属性,则逻辑区段具有联络线区域属性*/ + } + else + { + /*存在link不具有联络线区域属性,则逻辑区段不具有联络线区域属性*/ + } + + /*关联联络线道岔ID暂初始化为0*/ + pLgScCfgDtStr->wConnectSwticthId = 0u; + pLgScCfgDtStr->chLogLtrlDfncSwitchSum = 0u; for (ii = 0u; ii < LSDataLen.LSLgcSecLtrlDfncStruLen; ii++) { /*遍历逻辑区段的侧防道岔表*/ @@ -3103,7 +3201,9 @@ UINT8 LogicSecCfgDtStruFromDquSgmtStr(DSU_LOGIC_SGMT_STRU* pLogicSgmt,LogicSecti } } - + /*关联联络线继电器ID暂初始化为0xFFFF*/ + pLgScCfgDtStr->wRelSecDirLockRelayId = 0xFFFFu; + pLgScCfgDtStr->wRelRoutePrtlRelayId = 0xFFFFu; } else { @@ -3481,6 +3581,7 @@ UINT8 EsbCfgDtStruFromDquEmergStr(DSU_EMERG_STOP_STRU * pEmergStop,EsbConfigData } pEsbCfgDtStr->EsbId = pEmergStop->wId; + pEsbCfgDtStr->wRelateLink = pEmergStop->wRelatLkId; rtnvalue = GetDsuLinkIndexNum(pEmergStop->wRelatLkId,&Linkindex); if(CI_SUCCESS == rtnvalue) { @@ -3531,6 +3632,38 @@ UINT8 EsbCfgDtStruFromDquEmergStr(DSU_EMERG_STOP_STRU * pEmergStop,EsbConfigData return rtnvalue; } +/********************************************* +*函数功能:全线紧急停车按钮接口数据结构体 +*参数说明:pRelayCesb继电器结构体指针 +pCesbCfgDtStr配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 CesbCfgDtStruFromRelayData(Relay_CesbStruct*pRelayCesb,CesbConfigDataStruct* pCesbCfgDtStr) +{ + UINT8 rtnvalue = 0u; + /*入口参数防护*/ + if ((NULL == pRelayCesb) || (NULL == pCesbCfgDtStr)) + { + /*返回失败*/ + rtnvalue = 0U; + } + else + { + pCesbCfgDtStr->wCesbId = pRelayCesb->wCesbBtnId; + pCesbCfgDtStr->wCesbCutRelayId = pRelayCesb->wCesbCutRelayId; + pCesbCfgDtStr->wCesbRelayId = pRelayCesb->wCesbRelayId; + pCesbCfgDtStr->BelongCiId = (UINT8)GetCiIdByOcId(pRelayCesb->wOcId); + if (0U == pCesbCfgDtStr->BelongCiId) + { + rtnvalue = 0U; + } + else + { + rtnvalue = 1U; + } + } + return rtnvalue; +} /********************************************* *函数功能:初始化紧急停车按钮接口配置数据结构体----对外结构体 @@ -3575,6 +3708,54 @@ UINT8 EsbConfigDataStructInit(CHAR * FSName) return rtnvalue; } +/********************************************* +*函数功能:初始化全线紧急停车按钮接口配置数据结构体----对外结构体 +*参数说明:FSName文件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 CesbConfigDataStructInit(CHAR * FSName) +{ + UINT8 rtnvalue = 0u; + UINT8 callFun = 0u; + UINT16 i = 0u; + callFun = InitRelay_CESBStru(FSName); + /*电子地图初始化失败,函数失败退出*/ + if (0U == callFun) + { + rtnvalue = 0U; + } + else + { + rtnvalue = 1U; + } + + if (1U == rtnvalue) + { + dquCICfgDtStr.CesbCfgDtStrLen = RelayDataLen.RelayCesbStrLen; + if ((0U < dquCICfgDtStr.CesbCfgDtStrLen) && (NULL != RelayData.pCentreEsbStr)) + { + for (i = 0u; i < dquCICfgDtStr.CesbCfgDtStrLen; i++) + { + if (i >= CI_SUM_MAX) + { + /*全线紧急制动按钮个数不大于集中区数量*/ + rtnvalue = 0u; + debug_infor_printf((const)"CesbConfigDataStructInit fail. Sum Max:%d \n", CI_SUM_MAX); + } + else + { + rtnvalue &= CesbCfgDtStruFromRelayData(RelayData.pCentreEsbStr + i, &dquCICfgDtStr.CesbCfgDtStr[i]); + } + if (0u == rtnvalue) + { + break; + } + } + } + } + return rtnvalue; +} + /********************************************* @@ -4734,6 +4915,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS DSU_LINK_STRU* pRouteIncLinkStru = NULL; /*进路包含的link结构体*/ DSU_LINK_STRU * pRouteFirstLinkStru = NULL; DSU_LINK_STRU * pRouteSecondLinkStru = NULL; + DSU_LINK_STRU * pRouteEndLinkStru = NULL; UINT16 zCPhySecId= 0u; UINT8 checkResult = 0u; UINT16 signalIndex = 0u; @@ -5435,6 +5617,59 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS else { } + + if (CI_SUCCESS == rtnvalue) + { + /*进路迪士尼联络线属性处理*/ + /*翻转防护*/ + if (0u < pDsuRouteStr->wIncludeLinkNum) + { + /*初始化为全部属于本线*/ + pRouteCfgDtStr->cDisneyConnectRouteAttr = ROUTE_DISNEY_CONNECT_ALLMINE; + /*获取进路第一个LINK结构体*/ + pRouteFirstLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[0]]; + /*获取进路最后一个LINK结构体*/ + pRouteEndLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[pDsuRouteStr->wIncludeLinkNum - 1u]]; + if ((0x55u == pRouteFirstLinkStru->cDisneyConnectAttr) && (0x55u == pRouteEndLinkStru->cDisneyConnectAttr)) + { + /*进路完全属于邻线*/ + pRouteCfgDtStr->cDisneyConnectRouteAttr = ROUTE_DISNEY_CONNECT_ALLOTHER; + } + else if ((0x55u == pRouteFirstLinkStru->cDisneyConnectAttr) && (0xFFu == pRouteEndLinkStru->cDisneyConnectAttr)) + { + /*进路后半段属于本线*/ + pRouteCfgDtStr->cDisneyConnectRouteAttr = ROUTE_DISNEY_CONNECT_ENDMINE; + } + else if ((0xFFu == pRouteFirstLinkStru->cDisneyConnectAttr) && (0x55u == pRouteEndLinkStru->cDisneyConnectAttr)) + { + /*进路前半段属于本线*/ + pRouteCfgDtStr->cDisneyConnectRouteAttr = ROUTE_DISNEY_CONNECT_STARTMINE; + } + else if ((0xFFu == pRouteFirstLinkStru->cDisneyConnectAttr) && (0xFFu == pRouteEndLinkStru->cDisneyConnectAttr)) + { + /*进路前半段属于本线*/ + pRouteCfgDtStr->cDisneyConnectRouteAttr = ROUTE_DISNEY_CONNECT_ALLMINE; + } + else + { + /*数据配置有误*/ + rtnvalue = CI_ERROR; + } + } + else + { + /*数据初始化有误*/ + rtnvalue = CI_ERROR; + } + + /*迪士尼联络线关联关键道岔,暂赋值为0,初始化联络线继电器时再处理*/ + pRouteCfgDtStr->wRelConnectSwitchId = 0u; + } + else + { + /*nothing*/ + } + if(CI_SUCCESS == rtnvalue) { pRouteCfgDtStr->RouteInitEnemyStatus = ROUTE_INIT_NOT_ENEMY;/*初始化成不敌对*/ @@ -6453,6 +6688,9 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS /*不为接近时,是否延时解锁赋值*/ pRouteCfgDtStr->RouteNeedDelayUnlock = pLSRouteStr->wNeedDelayUnlock; + /*CBTC进路跳过最后区段ESB/APG/SPKS封锁*/ + pRouteCfgDtStr->cPassCbtcLastFlock = pLSRouteStr->cPassCbtcLastFlock; + /*调车同意继电器ID (配置字段)*/ pRouteCfgDtStr->DCRouteDCQJId = 0U; pRouteCfgDtStr->DCRouteDCQJTwoId = 0U; @@ -6965,6 +7203,7 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) callFun *= InitRelay_DCAgreeStru(FSName);/*初始化调车同意继电器表*/ callFun *= InitLS_SGBJStru(FSName); /*初始化声光报警表*/ callFun *= InitLS_TransRouteRtnDataStruct(FSName); /*初始化转换轨折返信号机表*/ + callFun *= InitLS_CbtcRouteLogSecStru(FSName); /*初始化CBTC进路逻辑区段检查表*/ /*电子地图初始化失败,函数失败退出*/ if(0u == callFun) @@ -7011,6 +7250,24 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) } } + if (1U == rtnvalue) + { + /*初始化CBTC进路需要检查的逻辑区段数据*/ + execRet = CbtcRouteLgcCheckCfgDataInit(&(dquCICfgDtStr.RouteCfgDtStr[i])); + if (1U == execRet) + { + ; /*继续执行*/ + } + else + {/*调用函数失败,返回0*/ + rtnvalue = 0U; + } + } + else + { + /*不处理*/ + } + if (1U != rtnvalue) { break; @@ -9376,6 +9633,38 @@ UINT8 SetSignalCrossCloseAttr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct* pSg return ret; } +/********************************************* +*函数功能:根据电子地图中信号机属性设置信号机终端阻挡属性 +*参数说明:pSgnl是DSU信号机数据结构指针 +* pSgnlCfgDtStr,信号机配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +static UINT8 SetSignalEndAttr(DSU_SIGNAL_STRU* pSgnl, SignalConfigDataStruct* pSgnlCfgDtStr) +{ + UINT8 ret = CI_SUCCESS; + UINT16 sigAttrEmap = 0u;/*电子地图中信号机属性*/ + + /*入口参数防护*/ + if ((NULL == pSgnl) || (NULL == pSgnlCfgDtStr)) + { + /*返回失败*/ + ret = CI_ERROR; + } + if (CI_SUCCESS == ret) + { + sigAttrEmap = pSgnl->wAttribute; + if ((0x0004u & sigAttrEmap) == 0x0004u) + { + pSgnlCfgDtStr->signalEndAttr = SIGNAL_END_YES; + } + else + { + pSgnlCfgDtStr->signalEndAttr = SIGNAL_END_NO; + } + + } + return ret; +} /********************************************* *函数功能:初始化物理区段故障锁闭照查继电器表 @@ -10248,7 +10537,6 @@ UINT8 ReadVirCIWithOCRelationData(CHAR* FSName) UINT8 RowDatalen =0u;/*行数*/ UINT8 virCIid = 0u; UINT8 jj =0u; - UINT16 ocid =0u; UINT8 ocNum=0u; @@ -10582,6 +10870,7 @@ UINT8 LinkCfgDtStruFromDquLinkStr(DSU_LINK_STRU* pLink, LinkDataConfigStru* pLin pLinkScCfgDtStr->wManageTioc = pLink->wManagePhysicalCI; pLinkScCfgDtStr->chLogicLineRelation = pLink->wLinkLogicDirUpAndDown; pLinkScCfgDtStr->chLogicDirChanged = pLink->wLogicDirChanged; + pLinkScCfgDtStr->chDsnConnectAttr = pLink->cDisneyConnectAttr; pLinkScCfgDtStr->chRelPhySecIsAGorBG = LINK_REL_PHYSEC_IS_DEFAULT; /*先初始化为非AG非BG*/ pLinkScCfgDtStr->wLinkSpecialEa = 0U; /*LINK特殊防护区域属性*/ @@ -12205,6 +12494,186 @@ UINT8 RouteRelatedSGBJCfgDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_SGBJ return rtnvalue; } +/********************************************* +* 函数功能:初始化SSKS闪灯稳灯继电器配置数据结构体----对外结构体 +* 参数说明:FSName文件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 SSksLightRelayCfgDataStrInit(CHAR* FSName) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cFuncRet = CI_ERROR; + + cFuncRet = dfsEmapInit(FSName); + cFuncRet *= InitRelaySsksLightStru(FSName); + + if (CI_SUCCESS == cFuncRet) + { + dquCICfgDtStr.SsksLightRelayCfgDataStrLen = RelayDataLen.RelaySsksLightStrLen; + + /*读取数据到静态数据结构体*/ + cRetVal = ReadSsksLightRelayCfgFromDqu(dquCICfgDtStr.SsksLightRelayCfgDataStr); + } + else + { + cRetVal = CI_ERROR; /*读表失败,返回失败*/ + } + + return cRetVal; +} + +/********************************************* +* 函数功能:从读取SSKS闪灯稳灯继电器数据到静态数据结构体 +* 参数说明:SsksLightRelayCfgDataStruct *pSsksLightRelayCfgStr是信号机配置数据结构指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 ReadSsksLightRelayCfgFromDqu(SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStr) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 i = 0U; + + if (NULL != pSsksLightRelayCfgStr) + { + cRetVal = CI_SUCCESS; + + for (i = 0U; i < RelayDataLen.RelaySsksLightStrLen; i++) + { + if (SSKS_LIGHT_RELAY_SUM_MAX > i) + { + if ((0U != RelayData.pRelaySsksLightStr[i].SsksLightRelayId) && (UINT16_MAX != RelayData.pRelaySsksLightStr[i].SsksLightRelayId)) + { + pSsksLightRelayCfgStr[i].SsksLightRelayId = RelayData.pRelaySsksLightStr[i].SsksLightRelayId; + pSsksLightRelayCfgStr[i].BelongOcId = RelayData.pRelaySsksLightStr[i].BelongOcId; + pSsksLightRelayCfgStr[i].BelongCiId = (UINT8)GetCiIdByOcId(RelayData.pRelaySsksLightStr[i].BelongOcId); + + pSsksLightRelayCfgStr[i].cRelEnterRouteNum = RelayData.pRelaySsksLightStr[i].RelEnterRouteNum; + (void)CommonMemCpy((void*)(pSsksLightRelayCfgStr[i].szRelEnterRouteId), (UINT32)(sizeof(UINT16) * SSKS_LIGHT_RELAY_ROUTE_MAX), + (const void*)(RelayData.pRelaySsksLightStr[i].RelEnterRouteId), (UINT32)(sizeof(UINT16) * SSKS_LIGHT_RELAY_ROUTE_MAX)); /*拷贝驶入存车线的进路ID*/ + + pSsksLightRelayCfgStr[i].cRelExportRouteNum = RelayData.pRelaySsksLightStr[i].RelExportRouteNum; + (void)CommonMemCpy((void*)(pSsksLightRelayCfgStr[i].szRelExportRouteId), (UINT32)(sizeof(UINT16) * SSKS_LIGHT_RELAY_ROUTE_MAX), + (const void*)(RelayData.pRelaySsksLightStr[i].RelExportRouteId), (UINT32)(sizeof(UINT16) * SSKS_LIGHT_RELAY_ROUTE_MAX)); /*拷贝驶出存车线的进路ID*/ + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; + } + + if (CI_SUCCESS != cRetVal) + { + break; + } + else + { + /*不处理*/ + } + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/********************************************* +* 函数功能:初始化联络线旁路继电器配置数据结构体----对外结构体 +* 参数说明:FSName文件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 2026.3.11 +*********************************************/ +UINT8 ConnectOverrideCfgDataStrInit(CHAR* FSName) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cFuncRet = CI_ERROR; + + cFuncRet = dfsEmapInit(FSName); + cFuncRet *= InitConnectOverrideStru(FSName); + + if (CI_SUCCESS == cFuncRet) + { + dquCICfgDtStr.ConnectOverrideCfgDataStrLen = RelayDataLen.RelayConnectOverrideStrLen; + + /*读取数据到静态数据结构体*/ + cRetVal = ReadConnectOverrideCfgFromDqu(dquCICfgDtStr.ConnectOverrideCfgDataStr); + } + else + { + cRetVal = CI_ERROR; /*读表失败,返回失败*/ + } + + return cRetVal; +} + +/********************************************* +* 函数功能:从读取联络线旁路继电器数据到静态数据结构体 +* 参数说明:ConnectOverrideCfgDataStru *pConnectOverrideCfgStr是联络线旁路配置数据结构指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 20260311 +*********************************************/ +UINT8 ReadConnectOverrideCfgFromDqu(ConnectOverrideCfgDataStru* pConnectOverrideCfgStr) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 i = 0U; + + if (NULL != pConnectOverrideCfgStr) + { + cRetVal = CI_SUCCESS; + + for (i = 0U; i < RelayDataLen.RelayConnectOverrideStrLen; i++) + { + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > i) + { + if ((0U != RelayData.pRelayConnectOverrideStr[i].ConnectOverrideId) && (UINT16_MAX != RelayData.pRelayConnectOverrideStr[i].ConnectOverrideId)) + { + pConnectOverrideCfgStr[i].ConnectOverrideId = RelayData.pRelayConnectOverrideStr[i].ConnectOverrideId; + pConnectOverrideCfgStr[i].BelongOcId = RelayData.pRelayConnectOverrideStr[i].BelongOcId; + pConnectOverrideCfgStr[i].BelongCiId = (UINT8)GetCiIdByOcId(RelayData.pRelayConnectOverrideStr[i].BelongOcId); + pConnectOverrideCfgStr[i].OverrideRelayId = RelayData.pRelayConnectOverrideStr[i].OverrideRelayId; + pConnectOverrideCfgStr[i].RelPhySecId = RelayData.pRelayConnectOverrideStr[i].RelPhySecId; + pConnectOverrideCfgStr[i].RelRouteRequestRelayId = RelayData.pRelayConnectOverrideStr[i].RelRouteRequestRelayId; + pConnectOverrideCfgStr[i].RelSwitchId = RelayData.pRelayConnectOverrideStr[i].RelSwitchId; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; + } + + if (CI_SUCCESS != cRetVal) + { + break; + } + else + { + /*不处理*/ + } + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + /********************************************* *函数功能:计算联锁进路点式接近区段逻辑区段数据 *参数说明:pLSRouteStr联锁进路结构体指针 @@ -12753,3 +13222,251 @@ static UINT8 LinkSpecialEaDataInit(CHAR* FSName) return retVal; } +/********************************************* +*函数功能:初始化接触网配置数据结构体----对外结构体 +*参数说明:FSName文件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 OhlConfigDataStructInit(CHAR* FSName) +{ + UINT8 rtnvalue = 0u; + UINT8 callFun = 0u; + UINT16 i = 0u; + + callFun = InitRelay_OhlStru(FSName); + /*初始化失败,函数失败退出*/ + if (0u == callFun) + { + rtnvalue = 0u; + } + else + {/*电子地图初始化成功,继续执行*/ + rtnvalue = 1u; + } + + if (1u == rtnvalue) + { + dquCICfgDtStr.wOhlCfgLen = RelayDataLen.RelayOhlStrLen; + for (i = 0u; i < RelayDataLen.RelayOhlStrLen; i++) + { + if (i >= OHL_MAX_NUM) + { + rtnvalue = 0u; + break; + } + else + { + ; + } + + rtnvalue &= OhlCfgDtStruFromDquStr(RelayData.pRelayOhlStr + i, &dquCICfgDtStr.OhlConfigDataStru[i]); + } + } + else + { + ; + } + + return rtnvalue; +} + +/********************************************* +*函数功能:接触网配置数据结构体计算 +*参数说明:pOhlCutRelay接触网结构体指针 +pOhlCfgDtStr接触网配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 OhlCfgDtStruFromDquStr(Relay_OhlStruct* pOhlCutRelay, OHLConfigDataStruct* pOhlCfgDtStr) +{ + UINT8 rtnvalue = 0u; + UINT16 jj = 0U; + + /*入口参数防护*/ + if ((NULL != pOhlCutRelay) && (NULL != pOhlCfgDtStr)) + { + pOhlCfgDtStr->wOhlId = pOhlCutRelay->wOhlId; + pOhlCfgDtStr->wBelongOcId = pOhlCutRelay->wBelongOcId; + pOhlCfgDtStr->chBelongCiId = pOhlCutRelay->chBelongCiId; + pOhlCfgDtStr->chRelayGroupNum = pOhlCutRelay->chRelayGroupNum; + + for (jj = 0u; jj < pOhlCfgDtStr->chRelayGroupNum; jj++) + { + pOhlCfgDtStr->wEnergizedId[jj] = pOhlCutRelay->wEnergizedId[jj]; + pOhlCfgDtStr->wDeEnergizedId[jj] = pOhlCutRelay->wDeEnergizedId[jj]; + } + + rtnvalue = 1u; + } + else + { + /*返回失败*/ + return 0u; + } + return rtnvalue; +} + +/********************************************* +* 函数功能:初始化ECS配置数据 +* 参数说明:FSName文件指针 +* 返回值:0,失败;1,成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 EcsConfigDataStructInit(CHAR* FSName) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 callFun = CI_ERROR; + UINT16 i = 0U; + + callFun = dfsEmapInit(FSName); + callFun *= InitRelayEcsStru(FSName); + + if (CI_SUCCESS == callFun) + { + cRetVal = CI_SUCCESS; + + if (ECS_MAX_NUM > dsuDataLenStru.wEcsLen) + { + dquCICfgDtStr.EcsCfgDtStrLen = dsuDataLenStru.wEcsLen; + for (i = 0U; i < dsuDataLenStru.wEcsLen; i++) + { + cRetVal = EcsCfgDtStrFromDquEcsStr(dsuStaticHeadStru.pEcsStru + i, &dquCICfgDtStr.EcsCfgDtStr[i]); /*从电子地图和OC表读取配置数据*/ + + if (CI_SUCCESS != cRetVal) + { + cRetVal = CI_ERROR; + break; + } + else + { + /*继续初始化*/ + } + } + } + else + { + debug_infor_printf((const)"\nEcsConfigDataStructInit fail: EcsLen Exceed Or Equal Max[%d]\n", dsuDataLenStru.wEcsLen); + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; /*电子地图/ECS继电器初始化失败,函数失败退出*/ + } + + + return cRetVal; +} + +/********************************************* +* 函数功能:计算ECS静态数据 +* 参数说明:DSU_ECS_STRU* pEcsStr ECS电子地图数据结构指针 +* ECSConfigDataStruct* pEcsCfgDtStr ECS静态配置数据结构指针(出参) +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 EcsCfgDtStrFromDquEcsStr(DSU_ECS_STRU* pEcsStr, ECSConfigDataStruct* pEcsCfgDtStr) +{ + UINT16 i = 0U; + UINT8 cRetVal = CI_ERROR; + UINT16 wLinkIndex = 0U; + + if ((NULL != pEcsStr) && (NULL != pEcsCfgDtStr)) + { + cRetVal = CI_SUCCESS; + pEcsCfgDtStr->wEcsId = pEcsStr->wEcsId; + pEcsCfgDtStr->wStartLinkId = pEcsStr->wTunnelStartLinkId; + pEcsCfgDtStr->dwStartLinkOff = pEcsStr->dwTunnelStartLinkOff; + pEcsCfgDtStr->wEndLinkId = pEcsStr->wTunnelEndLinkId; + pEcsCfgDtStr->dwEndLinkOff = pEcsStr->dwTunnelEndLinkOff; + + cRetVal = GetDsuLinkIndexNum(pEcsCfgDtStr->wStartLinkId, &wLinkIndex); + if (CI_SUCCESS == cRetVal) + { + pEcsCfgDtStr->cBelongCiId = (UINT8)dsuStaticHeadStru.pLinkStru[wLinkIndex].wManagePhysicalCI; + + pEcsCfgDtStr->wBelongOcId = 0U; + pEcsCfgDtStr->wFanUpRelayId = 0U; + pEcsCfgDtStr->wFanDownRelayId = 0U; + + for (i = 0U; i < RelayDataLen.RelayEcsStrLen; i++) + { + if ((RelayData.pRelayEcsStr + i)->EcsId == pEcsStr->wEcsId) + { + pEcsCfgDtStr->wBelongOcId = (RelayData.pRelayEcsStr + i)->BelongOcId; + pEcsCfgDtStr->wFanUpRelayId = (RelayData.pRelayEcsStr + i)->FanUpRelayId; + pEcsCfgDtStr->wFanDownRelayId = (RelayData.pRelayEcsStr + i)->FanDownRelayId; + break; + } + else + { + /*继续循环*/ + } + } + + if (i != RelayDataLen.RelayEcsStrLen) + { + cRetVal = CI_SUCCESS; + } + else + { + debug_infor_printf((const)"\nEcsCfgDtStrFromDquEcsStr Err: Ecs[%d] Find Relay Fail.\n", pEcsCfgDtStr->wEcsId); + cRetVal = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"\nEcsCfgDtStrFromDquEcsStr Err: GetStartLinkIndex Fail.\n"); + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回失败*/ + } + + return cRetVal; +} + +/********************************************* +* 函数功能:CBTC进路逻辑区段检查配置数据初始化 +* 参数说明:RouteConfigDataStruct* pRouteCfgDtStr 进路配置数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 CbtcRouteLgcCheckCfgDataInit(RouteConfigDataStruct* pRouteCfgDtStr) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 ii = 0U; + + if (NULL != pRouteCfgDtStr) + { + cRetVal = CI_SUCCESS; + + pRouteCfgDtStr->CbtcRouteCheckLgcSum = 0U; + (void)CommonMemSet(pRouteCfgDtStr->CbtcRouteCheckLgcId, (UINT32)(sizeof(UINT16) * MAX_ROUTE_IN_LT_NUM), (UINT8)0U, (UINT32)(sizeof(UINT16) * MAX_ROUTE_IN_LT_NUM)); + + for (ii = 0U; ii < LSDataLen.LSCbtcRouteLgcCheckStruLen; ii++) + { + if (pRouteCfgDtStr->RouteId == LSData.pLSCbtcRouteLgcCheckStru[ii].wRouteId) + { + /*找到目标进路,将需要检查的逻辑区段信息赋值到该进路的静态数据结构体中*/ + pRouteCfgDtStr->CbtcRouteCheckLgcSum = LSData.pLSCbtcRouteLgcCheckStru[ii].cCheckLogSecNum; + + (void)CommonMemCpy(pRouteCfgDtStr->CbtcRouteCheckLgcId, (UINT32)(sizeof(UINT16) * LSData.pLSCbtcRouteLgcCheckStru[ii].cCheckLogSecNum), + LSData.pLSCbtcRouteLgcCheckStru[ii].szCheckLogSecId, (UINT32)(sizeof(UINT16) * LSData.pLSCbtcRouteLgcCheckStru[ii].cCheckLogSecNum)); + } + else + { + /*继续遍历查找*/ + } + } + } + else + { + /*入参非法,返回0*/ + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h index 8ed5e4f..d8d791b 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h @@ -33,6 +33,9 @@ #include "../SGBJ/SGBJConfigDataManage.h" #include "../Section/AxisSectionConfigDataManage.h" #include "../System/SystemParameterManage.h" +#include "../SsksLightRelay/SsksLightRelayCfgDataManage.h" +#include "../ConnectOverride/ConnectOverrideCfgDataMg.h" +#include "../ECS/ECSConfigDataManage.h" #define ORIGIN_TO_TERMINAL ((UINT8)0x55) /*起点到终点*/ #define TERMINAL_TO_ORIGIN ((UINT8)0xAA) /*终点到起点*/ @@ -134,9 +137,16 @@ typedef struct GaragedoorConfigDataStruct GaragedoorCfgDtStr[GARAGE_DOOR_SUM_MAX]; /*车库门配置数据数组*/ UINT16 GaragedoorCfgDtStrLen; SpksDataConfigStruct spksDataConfigStr[SPKS_SUM_MAX]; /* SPKS对象 */ - UINT16 spksDataConfigStrLen; + UINT16 spksDataConfigStrLen; MJDataConfigStruct mjDataConfigStr[MJ_SUM_MAX]; /* 门禁配置数据数组 */ UINT16 mjDataConfigStrLen; + + SsksLightRelayCfgDataStruct SsksLightRelayCfgDataStr[SSKS_LIGHT_RELAY_SUM_MAX]; /*SSKS闪灯稳灯继电器数组*/ + UINT16 SsksLightRelayCfgDataStrLen; + + ConnectOverrideCfgDataStru ConnectOverrideCfgDataStr[CONNECT_OVERRIDE_RELAY_SUM_MAX]; /*联络线旁路继电器数组*/ + UINT16 ConnectOverrideCfgDataStrLen; + FloodGateConfigDataStruct FloodGateCfgDtStr[FLOOD_GATE_SUM_MAX]; /*防淹门配置数据数组*/ UINT16 FloodGateCfgDtStrLen; WashMachineConfigDataStruct WashMachineCfgStr[WASHMACHINE_SUM_MAX]; /*洗车机配置数据数组*/ @@ -185,6 +195,15 @@ typedef struct SGBJConfigDataStruct SGBJCfgDataStru[SGBJ_SUM_MAX]; /*声光报警器配置数据*/ UINT16 wSGBJCfgLen; /*声光报警器数量*/ + + OHLConfigDataStruct OhlConfigDataStru[OHL_MAX_NUM]; /*接触网配置数据*/ + UINT16 wOhlCfgLen; /*接触网分区数量*/ + + UINT16 EcsCfgDtStrLen; /*ECS表长度*/ + ECSConfigDataStruct EcsCfgDtStr[ECS_MAX_NUM]; /*ECS配置数据结构体*/ + + UINT16 CesbCfgDtStrLen; /*Cesb表长度*/ + CesbConfigDataStruct CesbCfgDtStr[CI_SUM_MAX]; /*CESB配置数据结构体*/ } dquCIConfigDataStr; @@ -328,6 +347,14 @@ UINT8 LogicSecConfigDataStructInit(CHAR * FSName); *返回值:0,失败;1,成功 *********************************************/ UINT8 EsbCfgDtStruFromDquEmergStr(DSU_EMERG_STOP_STRU * pEmergStop,EsbConfigDataStruct* pEsbCfgDtStr); + +/********************************************* +*函数功能:全线紧急停车按钮接口数据结构体 +*参数说明:pRelayCesb继电器结构体指针 +pCesbCfgDtStr配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 CesbCfgDtStruFromRelayData(Relay_CesbStruct*pRelayCesb, CesbConfigDataStruct* pCesbCfgDtStr); /********************************************* *函数功能:初始化紧急停车按钮接口配置数据结构体----对外结构体 *参数说明:FSName文件指针 @@ -335,6 +362,13 @@ UINT8 EsbCfgDtStruFromDquEmergStr(DSU_EMERG_STOP_STRU * pEmergStop,EsbConfigData *********************************************/ UINT8 EsbConfigDataStructInit(CHAR * FSName); +/********************************************* +*函数功能:初始化全线紧急停车按钮接口配置数据结构体----对外结构体 +*参数说明:FSName文件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 CesbConfigDataStructInit(CHAR * FSName); + /********************************************* *函数功能:屏蔽门配置数据结构体 *参数说明:pScreen屏蔽门结构体指针 @@ -892,6 +926,42 @@ UINT8 SGBJConfigDataStructInit(CHAR* FSName); *********************************************/ UINT8 RouteRelatedSGBJCfgDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_SGBJStruct* pLSSGBJStr); +/********************************************* +* 函数功能:初始化SSKS闪灯稳灯继电器配置数据结构体----对外结构体 +* 参数说明:FSName文件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 SSksLightRelayCfgDataStrInit(CHAR* FSName); + +/********************************************* +* 函数功能:初始化联络线旁路继电器配置数据结构体----对外结构体 +* 参数说明:FSName文件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 2026.3.11 +*********************************************/ +UINT8 ConnectOverrideCfgDataStrInit(CHAR* FSName); + +/********************************************* +* 函数功能:从读取SSKS闪灯稳灯继电器数据到静态数据结构体 +* 参数说明:SsksLightRelayCfgDataStruct *pSsksLightRelayCfgStr是信号机配置数据结构指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 ReadSsksLightRelayCfgFromDqu(SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStr); + +/********************************************* +* 函数功能:从读取联络线旁路继电器数据到静态数据结构体 +* 参数说明:ConnectOverrideCfgDataStru *pConnectOverrideCfgStr是联络线旁路配置数据结构指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 20260311 +*********************************************/ +UINT8 ReadConnectOverrideCfgFromDqu(ConnectOverrideCfgDataStru* pConnectOverrideCfgStr); + /********************************************* *函数功能:计算联锁进路点式接近区段逻辑区段数据 *参数说明:pLSRouteStr联锁进路结构体指针 @@ -937,5 +1007,47 @@ UINT8 AgLinkExistRelCGFlagCalc(LinkDataConfigStru* pLinkScCfgDtStr); *********************************************/ UINT8 BGLinkRelAGLinkCal(LinkDataConfigStru* pLinkScCfgDtStr); +/********************************************* +*函数功能:初始化接触网配置数据结构体----对外结构体 +*参数说明:FSName文件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 OhlConfigDataStructInit(CHAR* FSName); + +/********************************************* +*函数功能:接触网配置数据结构体计算 +*参数说明:pOhlCutRelay接触网结构体指针 +pOhlCfgDtStr接触网配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 OhlCfgDtStruFromDquStr(Relay_OhlStruct* pOhlCutRelay, OHLConfigDataStruct* pOhlCfgDtStr); + +/********************************************* +* 函数功能:初始化ECS配置数据 +* 参数说明:FSName文件指针 +* 返回值:0,失败;1,成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 EcsConfigDataStructInit(CHAR* FSName); + +/********************************************* +* 函数功能:计算ECS静态数据 +* 参数说明:DSU_ECS_STRU* pEcsStr ECS电子地图数据结构指针 +* ECSConfigDataStruct* pEcsCfgDtStr ECS静态配置数据结构指针(出参) +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 EcsCfgDtStrFromDquEcsStr(DSU_ECS_STRU* pEcsStr, ECSConfigDataStruct* pEcsCfgDtStr); + +/********************************************* +* 函数功能:CBTC进路逻辑区段检查配置数据初始化 +* 参数说明:RouteConfigDataStruct* pRouteCfgDtStr 进路配置数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 CbtcRouteLgcCheckCfgDataInit(RouteConfigDataStruct* pRouteCfgDtStr); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c index 4a09db6..6505623 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c @@ -1801,6 +1801,56 @@ INT16 ReadEsbConfigData(const UINT8 ciId,EsbConfigDataStruct* pEsbConfigDataStru return DataNum; } +/********************************************* +*函数功能:读本集中区全线紧急停车按钮配置数据 +*参数说明:pCesbConfigDataStru全线紧急停车配置数据结构体指针 +*返回值:0失败 1成功 +*********************************************/ +UINT8 ReadLocalCesbConfigData(const UINT8 ciId, CesbConfigDataStruct* pCesbConfigDataStru) +{ + UINT16 i = 0u; + UINT8 DataNum = 0U;; + if ((0u == ciId) || (NULL == pCesbConfigDataStru)) + { + DataNum = 0U; + } + else + { + DataNum = 1U; + } + + if (0U != DataNum) + { + pCesbConfigDataStru->BelongCiId = ciId; + pCesbConfigDataStru->wCesbId = 0U; + pCesbConfigDataStru->wCesbCutRelayId = 0U; + pCesbConfigDataStru->wCesbRelayId = 0U; + for (i = 0u; iwCesbCutRelayId = dquCICfgDtStr.CesbCfgDtStr[i].wCesbCutRelayId; + pCesbConfigDataStru->wCesbRelayId = dquCICfgDtStr.CesbCfgDtStr[i].wCesbRelayId; + pCesbConfigDataStru->wCesbId = dquCICfgDtStr.CesbCfgDtStr[i].wCesbId; + break; + } + } + else + { + /*返回失败*/ + DataNum = 0U; + debug_infor_printf((const)"\nReadCesbConfigData fail: BtnID Exceed MAX :%d\n", CI_SUM_MAX); + break; + } + + } + } + + return DataNum; +} /********************************************* *函数功能:读屏蔽门配置数据 @@ -2421,8 +2471,6 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst /*对向行驶双车间隔最小安全距离(cm)*/ SystemParameterStru->OppositeTrackDistance = dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance; - /*站台追踪时,列车间隔距离(cm)*/ - SystemParameterStru->StationTrackDistance = dquCICfgDtStr.SystemParaStrNew.StationTrackDistance; /*线路最差情况下紧急制动距离(单位m)*/ SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength; @@ -3819,7 +3867,6 @@ INT16 ReadLinkConfigData(LinkDataConfigStru* pLinkConfigAddr) if (LINK_SUM_MAX > dquCICfgDtStr.LinkCfgDtStr[i].wId) { pLinkConfigAddr[dquCICfgDtStr.LinkCfgDtStr[i].wId] = dquCICfgDtStr.LinkCfgDtStr[i]; - DataNum++; for (indexAc = 0u; indexAc < dsuDataLenStru.wAxleSgmtLen; indexAc++) { @@ -3837,6 +3884,10 @@ INT16 ReadLinkConfigData(LinkDataConfigStru* pLinkConfigAddr) } } } + else + { + ; + } } pLinkConfigAddr[dquCICfgDtStr.LinkCfgDtStr[i].wId].wStopAreaId = 0u; @@ -4343,6 +4394,98 @@ INT16 ReadSGBJConfigData(const UINT8 cLocalCiId, SGBJConfigDataStruct* pSGBJConf return dataNum; } +/********************************************* +* 函数功能:读SSKS闪灯稳灯继电器配置数据 +* 参数说明:const UINT8 cLocalCiId 本地联锁ID +* SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStru SSKS闪灯稳灯继电器配置数据结构体指针 +* 返 回 值:-1 读取失败 +* 其它 SSKS闪灯稳灯继电器数量 +* Created By LQ 2025.12.15 +*********************************************/ +INT16 ReadSsksLightRelayCfgData(const UINT8 cLocalCiId, SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStru) +{ + INT16 dataNum = -1; + UINT16 i = 0U; + + if ((NULL != pSsksLightRelayCfgStru) && (0U != cLocalCiId)) + { + dataNum = 0; + + for (i = 0U; i < dquCICfgDtStr.SsksLightRelayCfgDataStrLen; i++) + { + if (cLocalCiId == dquCICfgDtStr.SsksLightRelayCfgDataStr[i].BelongCiId) + { + if (SSKS_LIGHT_RELAY_SUM_MAX > dataNum) + { + pSsksLightRelayCfgStru[dataNum] = dquCICfgDtStr.SsksLightRelayCfgDataStr[i]; + dataNum++; + } + else + { + dataNum = -1; /*返回失败*/ + break; + } + } + else + { + /*继续遍历*/ + } + } + } + else + { + dataNum = -1; + } + + return dataNum; +} + +/********************************************* +* 函数功能:读联络线旁路继电器配置数据 +* 参数说明:const UINT8 cLocalCiId 本地联锁ID +* ConnectOverrideCfgDataStru* pConnectOverrideCfgStru 联络线旁路继电器配置数据结构体指针 +* 返 回 值:-1 读取失败 +* 其它 联络线旁路继电器数量 +* Created By wyd 20260311 +*********************************************/ +INT16 ReadConnectOverrideCfgData(const UINT8 cLocalCiId, ConnectOverrideCfgDataStru* pConnectOverrideCfgStru) +{ + INT16 dataNum = -1; + UINT16 i = 0U; + + if ((NULL != pConnectOverrideCfgStru) && (0U != cLocalCiId)) + { + dataNum = 0; + + for (i = 0U; i < dquCICfgDtStr.ConnectOverrideCfgDataStrLen; i++) + { + if (cLocalCiId == dquCICfgDtStr.ConnectOverrideCfgDataStr[i].BelongCiId) + { + if (CONNECT_OVERRIDE_RELAY_SUM_MAX > dataNum) + { + pConnectOverrideCfgStru[dataNum] = dquCICfgDtStr.ConnectOverrideCfgDataStr[i]; + dataNum++; + } + else + { + dataNum = -1; /*返回失败*/ + break; + } + } + else + { + /*继续遍历*/ + } + } + } + else + { + dataNum = -1; + } + + return dataNum; +} + /********************************************* *函数功能:确定计轴区段的边界计轴区段属性 *参数说明:const UINT16 wAxleId 计轴区段ID @@ -4632,3 +4775,218 @@ UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataSt return chReval; } +/********************************************* +*函数功能:读接触网配置数据 +*参数说明:ciId联锁ID, pOhlConfigDataStru接触网配置数据结构体指针 +*返回值:信号机数 +*********************************************/ +INT16 ReadOhlConfigData(const UINT8 ciId, OHLConfigDataStruct* pOhlConfigDataStru) +{ + INT16 DataNum = -1; + UINT16 i = 0u; + if ((0u == ciId) || (NULL == pOhlConfigDataStru)) + { + DataNum = -1; + } + else + { + DataNum = 0; + } + + if (0 == DataNum) + { + for (i = 0u; i < dquCICfgDtStr.wOhlCfgLen; i++) + { + /*访问数组不能越界,越界直接返回失败*/ + if (OHL_MAX_NUM >= dquCICfgDtStr.OhlConfigDataStru[i].wOhlId) + { + pOhlConfigDataStru[dquCICfgDtStr.OhlConfigDataStru[i].wOhlId] = dquCICfgDtStr.OhlConfigDataStru[i]; + + if (ciId == dquCICfgDtStr.OhlConfigDataStru[i].chBelongCiId) + { + DataNum++; + } + } + else + { + /*返回失败*/ + DataNum = -1; + break; + } + } + } + else + { + /*不处理*/ + } + + return DataNum; +} + +/********************************************* +* 函数功能:读ECS配置数据 +* 参数说明:ciId 联锁ID +* ECSConfigDataStruct* pEcsConfigDataStru ECS配置数据结构体指针 +* 返 回 值:ECS数量 +* Created By LQ 2026.01.24 +*********************************************/ +INT16 ReadEcsConfigData(const UINT8 ciId, ECSConfigDataStruct* pEcsConfigDataStru) +{ + UINT16 i = 0U; + INT16 DataNum = -1; + UINT16 wEcsId = 0U; + + if ((0U == ciId) || (NULL == pEcsConfigDataStru)) + { + DataNum = -1; + } + else + { + DataNum = 0; + for (i = 0U; i < dquCICfgDtStr.EcsCfgDtStrLen; i++) + { + if ((0U < dquCICfgDtStr.EcsCfgDtStr[i].wEcsId) && (ECS_MAX_NUM > dquCICfgDtStr.EcsCfgDtStr[i].wEcsId)) + { + wEcsId = dquCICfgDtStr.EcsCfgDtStr[i].wEcsId; + pEcsConfigDataStru[wEcsId] = dquCICfgDtStr.EcsCfgDtStr[i]; + if (ciId == dquCICfgDtStr.EcsCfgDtStr[i].cBelongCiId) + { + DataNum++; + } + else + { + /*继续遍历*/ + } + } + else + { + debug_infor_printf((const)"ReadEcsConfigData Err: EcsId[%d] Is Invalid", dquCICfgDtStr.EcsCfgDtStr[i].wEcsId); /*ECS ID非法,返回失败*/ + DataNum = -1; + break; + } + } + } + + return DataNum; +} + +/********************************************* +* 函数功能:初始化ECS包含的物理区段信息 +* 参数说明:ECSConfigDataStruct* pEcsConfigDataStru ECS配置数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.227 +*********************************************/ +UINT8 EcsIncPhySecInfoInit(ECSConfigDataStruct* pEcsConfigDataStru) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 i = 0U; + UINT16 wEcsId = 0U; + UINT8 cFuncRetVal = CI_ERROR; + struct_PathPoint strStartPoint = { 0U }; /*隧道起点位置*/ + struct_PathPoint strEndPoint = { 0U }; /*隧道终点位置*/ + UINT16 wLogSecNum = 0U; /*隧道关联的逻辑区段数量*/ + UINT16 szLogSecID[ECS_REL_LOGSEC_MAX_NUM] = { 0U }; /*道关联的逻辑区段ID*/ + UINT16 jj = 0U; + UINT16 wRelPhySecId = 0U; + UINT8 kk = 0U; + UINT8 cKeepWorkFlag = CI_SUCCESS; + + if (NULL != pEcsConfigDataStru) + { + cRetVal = CI_SUCCESS; + + for (i = 0U; i < dquCICfgDtStr.EcsCfgDtStrLen; i++) + { + wEcsId = dquCICfgDtStr.EcsCfgDtStr[i].wEcsId; + + /*初始化ECS关联的物理区段信息*/ + pEcsConfigDataStru[wEcsId].cRelPhySecNum = 0U; + (void)CommonMemSet(pEcsConfigDataStru[wEcsId].szRelPhySecId, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM), (UINT8)0U, (UINT32)(sizeof(UINT16) * ECS_REL_PHYSEC_MAX_NUM)); + + strStartPoint.wLinkId = pEcsConfigDataStru[wEcsId].wStartLinkId; + strStartPoint.dwOffset = pEcsConfigDataStru[wEcsId].dwStartLinkOff; + strEndPoint.wLinkId = pEcsConfigDataStru[wEcsId].wEndLinkId; + strEndPoint.dwOffset = pEcsConfigDataStru[wEcsId].dwEndLinkOff; + + cFuncRetVal = GetLogSecBtwTwoPoints(strStartPoint, strEndPoint, &wLogSecNum, szLogSecID); /*获取隧道范围内的的逻辑区段*/ + if ((CI_SUCCESS == cFuncRetVal) && (ECS_REL_LOGSEC_MAX_NUM >= wLogSecNum) && (0U < wLogSecNum)) + { + /*将查询到的逻辑区段转换成物理区段并存储*/ + for (jj = 0U; jj < wLogSecNum; jj++) + { + wRelPhySecId = GetLgcSecRelativePhySecId(szLogSecID[jj]); + if (0U != wRelPhySecId) + { + /*检查此物理区段是否已被添加*/ + for (kk = 0U; kk < pEcsConfigDataStru[wEcsId].cRelPhySecNum; kk++) + { + if (wRelPhySecId == pEcsConfigDataStru[wEcsId].szRelPhySecId[kk]) + { + break; /*已添加,停止遍历*/ + } + else + { + /*继续判断该物理区段是否已添加*/ + } + } + + if (kk == pEcsConfigDataStru[wEcsId].cRelPhySecNum) + { + /*物理区段未被添加,添加此物理区段*/ + if (ECS_REL_PHYSEC_MAX_NUM > pEcsConfigDataStru[wEcsId].cRelPhySecNum) + { + pEcsConfigDataStru[wEcsId].szRelPhySecId[pEcsConfigDataStru[wEcsId].cRelPhySecNum] = wRelPhySecId; + pEcsConfigDataStru[wEcsId].cRelPhySecNum++; + } + else + { + debug_infor_printf((const)"\nReadEcsConfigData Err: PhySec Num Exceed Max[%d]", ECS_REL_PHYSEC_MAX_NUM); /*物理区段数量超限,返回失败*/ + cKeepWorkFlag = CI_ERROR; + } + } + else + { + /*已添加,不处理*/ + } + } + else + { + debug_infor_printf((const)"ReadEcsConfigData Err: Query PhySec Fail"); /*获取逻辑区段关联的物理区段失败,返回失败*/ + cKeepWorkFlag = CI_ERROR; + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + debug_infor_printf((const)"ReadEcsConfigData Err: Query LogSec Fail"); /*查询逻辑区段失败或逻辑区段数量超限,返回失败*/ + cKeepWorkFlag = CI_ERROR; + } + + if (CI_SUCCESS != cKeepWorkFlag) + { + cRetVal = CI_ERROR; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + /*入参非法,返回失败*/ + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h index ed33cc7..2f36d23 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h @@ -97,7 +97,12 @@ INT16 ReadLogicSectionConfigData(const UINT8 ciId,LogicSectionConfigDataStruct* *********************************************/ INT16 ReadEsbConfigData(const UINT8 ciId,EsbConfigDataStruct* pEsbConfigDataStru);/*读紧急停车按钮配置数据*/ - +/********************************************* +*函数功能:读本集中区全线紧急停车按钮配置数据 +*参数说明:pCesbConfigDataStru全线紧急停车配置数据结构体指针 +*返回值:0失败 1成功 +*********************************************/ +UINT8 ReadLocalCesbConfigData(const UINT8 ciId, CesbConfigDataStruct* pCesbConfigDataStru); /********************************************* *函数功能:读屏蔽门配置数据 *参数说明:ciId联锁ID, pPsdConfigDataStru屏蔽门配置数据结构体指针 @@ -480,6 +485,26 @@ UINT8 GetWLScreenTypeById(const UINT8 ciId); *********************************************/ INT16 ReadSGBJConfigData(const UINT8 cLocalCiId, SGBJConfigDataStruct* pSGBJConfigDataStru); +/********************************************* +* 函数功能:读SSKS闪灯稳灯继电器配置数据 +* 参数说明:const UINT8 cLocalCiId 本地联锁ID +* SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStru SSKS闪灯稳灯继电器配置数据结构体指针 +* 返 回 值:-1 读取失败 +* 其它 SSKS闪灯稳灯继电器数量 +* Created By LQ 2025.12.15 +*********************************************/ +INT16 ReadSsksLightRelayCfgData(const UINT8 cLocalCiId, SsksLightRelayCfgDataStruct* pSsksLightRelayCfgStru); + +/********************************************* +* 函数功能:读联络线旁路继电器配置数据 +* 参数说明:const UINT8 cLocalCiId 本地联锁ID +* ConnectOverrideCfgDataStru* pConnectOverrideCfgStru 联络线旁路继电器配置数据结构体指针 +* 返 回 值:-1 读取失败 +* 其它 联络线旁路继电器数量 +* Created By wyd 20260311 +*********************************************/ +INT16 ReadConnectOverrideCfgData(const UINT8 cLocalCiId, ConnectOverrideCfgDataStru* pConnectOverrideCfgStru); + /********************************************* *函数功能:确定计轴区段的边界计轴区段属性 *参数说明:const UINT16 wAxleId 计轴区段ID @@ -507,6 +532,40 @@ UINT8 EnsureNearAxleStorageLineAtrr(const UINT16 wAxleId); */ UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru); +/********************************************* +*函数功能:读接触网配置数据 +*参数说明:ciId联锁ID, pOhlConfigDataStru接触网配置数据结构体指针 +*返回值:信号机数 +*********************************************/ +INT16 ReadOhlConfigData(const UINT8 ciId, OHLConfigDataStruct* pOhlConfigDataStru); + +/********************************************* +* 函数功能:读ECS配置数据 +* 参数说明:ciId 联锁ID +* ECSConfigDataStruct* pEcsConfigDataStru ECS配置数据结构体指针 +* 返 回 值:ECS数量 +* Created By LQ 2026.01.24 +*********************************************/ +INT16 ReadEcsConfigData(const UINT8 ciId, ECSConfigDataStruct* pEcsConfigDataStru); + +/********************************************* +* 函数功能:初始化ECS包含的物理区段信息 +* 参数说明:ECSConfigDataStruct* pEcsConfigDataStru ECS配置数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.227 +*********************************************/ +UINT8 EcsIncPhySecInfoInit(ECSConfigDataStruct* pEcsConfigDataStru); + +/********************************************* +* 函数功能:获取编号对照表中Vobc数目 +* 参数说明:无 +* 返 回 值:Vobc数目 +* +*********************************************/ +UINT16 dquGetVobcNumLen(void); + + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c index d53fe61..9af5d26 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c @@ -107,7 +107,7 @@ UINT8 RelayConfigDataStruFromChar(UINT8 * pDataAddr,RelayConfigDataStruct* pRela /********************************************* *函数功能:初始化紧急停车按钮继电器结构体 -*参数说明:pDataAddr数据地址, pEmgcyStpStr紧急停车按钮继电器配置数据结构体指针 realRowLen 每行字节的长度 +*参数说明:pDataAddr数据地址, pCesbStpStr紧急停车按钮继电器配置数据结构体指针 realRowLen 每行字节的长度 *返回值:0,失败;1,成功 *********************************************/ UINT8 R_EmegencyStopStructFromChar(UINT8 * pDataAddr,Relay_EmgcyStpStruct* pEmgcyStpStr, UINT16 realRowLen) @@ -180,6 +180,36 @@ UINT8 R_EmegencyStopStructFromChar(UINT8 * pDataAddr,Relay_EmgcyStpStruct* pEmgc rtnvalue = 1u; return rtnvalue; } + +/********************************************* +*函数功能:初始化全线紧急停车按钮继电器结构体 +*参数说明:pDataAddr数据地址, pCesbStpStr紧急停车按钮继电器配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 R_CesbStructFromChar(UINT8 * pDataAddr, Relay_CesbStruct* pCesbStpStr) +{ + UINT8 * pData = pDataAddr; + UINT8 rtnvalue = 0u; + + if ((NULL == pDataAddr) || (NULL == pCesbStpStr)) + { + rtnvalue = 0u; + } + else + { + pCesbStpStr->wCesbBtnId = dquCiShortFromChar(pData); /*全线紧急停车按钮ID */ + pData += 2u; + pCesbStpStr->wOcId = dquCiShortFromChar(pData); /*OC ID*/ + pData += 2u; + pCesbStpStr->wCesbRelayId = dquCiShortFromChar(pData); /*CESB继电器 id*/ + pData += 2u; + pCesbStpStr->wCesbCutRelayId = dquCiShortFromChar(pData); /*旁路继电器ID*/ + pData += 2u; + + rtnvalue = 1u; + } + return rtnvalue; +} /********************************************* *函数功能:从数据到屏蔽门继电器结构体 *参数说明:pDataAddr数据地址, pScrnStr屏蔽门继电器配置数据结构体指针,UINT16 rowLen 一行数据的长度 @@ -407,6 +437,12 @@ UINT8 R_PointStructFromChar(UINT8 * pDataAddr,Relay_PointStruct* pSwitchStr) pData += 2u; pSwitchStr->wRelayShadowFanBiaoId = dquCiShortFromChar(pData); /*反表继电器ID */ pData += 2u; + + pSwitchStr->wExtraPhySecId = dquCiShortFromChar(pData); /*道岔动作额外检查物理区段ID */ + pData += 2u; + pSwitchStr->chNormalPos = *pData; /*道岔常态位置*/ + pData += 1u; + }/* zt 删除单轨相关代码 2022-02-15 */ else { @@ -864,6 +900,170 @@ UINT8 R_SpksDataFromChar(UINT8 * pDataAddr,RelaySpksStruct* pSpksStr, UINT16 rea return rtnvalue; } +/********************************************* +* 函数功能:从FS读取数据到SSKS闪灯稳灯继电器结构体 +* 参数说明:pDataAddr数据地址 +* pSsksStr SSKS数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 R_SsksLightRelayDataFromChar(UINT8* pDataAddr, RelaySsksLightStruct* pSsksStr) +{ + UINT8* pData = pDataAddr; + UINT8 cRetVal = CI_ERROR; + UINT8 ii = 0U; + + if ((NULL != pDataAddr) && (NULL != pSsksStr)) + { + cRetVal = CI_SUCCESS; + + pSsksStr->SsksLightRelayId = dquCiShortFromChar(pData); /* 继电器ID */ + pData += 2U; + if ((0U != pSsksStr->SsksLightRelayId) && (UINT16_MAX != pSsksStr->SsksLightRelayId)) + { + pSsksStr->BelongOcId = dquCiShortFromChar(pData); /*OC ID*/ + pData += 2U; + if ((0U != pSsksStr->BelongOcId) && (UINT16_MAX != pSsksStr->BelongOcId)) + { + pSsksStr->RelEnterRouteNum = *pData; /*关联驶入存车线的进路数量*/ + pData += 1U; + if (SSKS_LIGHT_RELAY_ROUTE_MAX >= pSsksStr->RelEnterRouteNum) + { + for (ii = 0U; ii < SSKS_LIGHT_RELAY_ROUTE_MAX; ii++) + { + pSsksStr->RelEnterRouteId[ii] = dquCiShortFromChar(pData); /*关联驶入存车线的进路ID*/ + pData += 2U; + + if (((0U == pSsksStr->RelEnterRouteId[ii]) || (UINT16_MAX == pSsksStr->RelEnterRouteId[ii])) && (ii < pSsksStr->RelEnterRouteNum)) + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: RelEnterRouteId[%d] Error.\n", pSsksStr->RelEnterRouteId[ii]); + cRetVal = CI_ERROR; /*进路ID非法,返回失败*/ + break; + } + else + { + /*继续遍历读取数据*/ + } + } + + if (CI_SUCCESS == cRetVal) + { + pSsksStr->RelExportRouteNum = *pData; /*关联驶出存车线的进路数量*/ + pData += 1U; + if (SSKS_LIGHT_RELAY_ROUTE_MAX >= pSsksStr->RelExportRouteNum) + { + for (ii = 0U; ii < SSKS_LIGHT_RELAY_ROUTE_MAX; ii++) + { + pSsksStr->RelExportRouteId[ii] = dquCiShortFromChar(pData); /*关联驶出存车线的进路ID*/ + pData += 2U; + + if (((0U == pSsksStr->RelExportRouteId[ii]) || (UINT16_MAX == pSsksStr->RelExportRouteId[ii])) && (ii < pSsksStr->RelExportRouteNum)) + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: RelExportRouteId[%d] Error.\n", pSsksStr->RelExportRouteId[ii]); + cRetVal = CI_ERROR; /*进路ID非法,返回失败*/ + break; + } + else + { + /*继续遍历读取数据*/ + } + } + } + else + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: RelExportRouteNum[%d] Error.\n", pSsksStr->RelExportRouteNum); + cRetVal = CI_ERROR; /*驶出存车线数量非法,返回失败*/ + } + } + else + { + /*返回失败*/ + } + } + else + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: RelEnterRouteNum[%d] Error.\n", pSsksStr->RelEnterRouteNum); + cRetVal = CI_ERROR; /*驶入存车线数量非法,返回失败*/ + } + } + else + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: BelongOcId[%d] Error.\n", pSsksStr->BelongOcId); + cRetVal = CI_ERROR; /*OC ID非法,返回失败*/ + } + } + else + { + debug_infor_printf("\nR_SsksLightRelayDataFromChar Error: SsksLightRelayId[%d] Error.\n", pSsksStr->SsksLightRelayId); + cRetVal = CI_ERROR; /*继电器ID非法,返回失败*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/********************************************* +* 函数功能:从FS读取数据到联络线旁路继电器结构体 +* 参数说明:pDataAddr数据地址 +* pOverrideStr 联络线旁路数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 20260311 +*********************************************/ +UINT8 R_ConnectOverrideDataFromChar(UINT8* pDataAddr, ConnectOverrideStruct* pOverrideStr) +{ + UINT8* pData = pDataAddr; + UINT8 cRetVal = CI_ERROR; + + if ((NULL != pDataAddr) && (NULL != pOverrideStr)) + { + cRetVal = CI_SUCCESS; + + pOverrideStr->ConnectOverrideId = dquCiShortFromChar(pData); /* 索引编号 */ + pData += 2U; + if ((0U != pOverrideStr->ConnectOverrideId) && (UINT16_MAX != pOverrideStr->ConnectOverrideId)) + { + pOverrideStr->BelongOcId = dquCiShortFromChar(pData); /*OC ID*/ + pData += 2U; + if ((0U != pOverrideStr->BelongOcId) && (UINT16_MAX != pOverrideStr->BelongOcId)) + { + pOverrideStr->OverrideRelayId = dquCiShortFromChar(pData); /*联络线旁路开关采集继电器ID*/ + pData += 2U; + + pOverrideStr->RelPhySecId = dquCiShortFromChar(pData); /*关联物理区段ID*/ + pData += 2U; + + pOverrideStr->RelRouteRequestRelayId = dquCiShortFromChar(pData); /*关联进路请求继电器ID*/ + pData += 2U; + + pOverrideStr->RelSwitchId = dquCiShortFromChar(pData); /*关联道岔ID*/ + pData += 2U; + } + else + { + debug_infor_printf((const)"\nR_ConnectOverrideDataFromChar Error: BelongOcId[%d] Error.\n", pOverrideStr->BelongOcId); + cRetVal = CI_ERROR; /*OC ID非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nR_ConnectOverrideDataFromChar Error: SsksLightRelayId[%d] Error.\n", pOverrideStr->ConnectOverrideId); + cRetVal = CI_ERROR; /*继电器ID非法,返回失败*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + /********************************************* *函数功能:从数据到门禁继电器结构体 *参数说明:pDataAddr数据地址, pMjStr 门禁数据结构体指针 realRowLen 每一行数据长度 @@ -1141,3 +1341,137 @@ UINT8 R_OCIndicStruFromChar(UINT8* pDataAddr, OCStationIndicConfigDataStru* pInd } +/********************************************* +*函数功能:从数据到接触网继电器结构体 +*参数说明:pDataAddr数据地址, pOhlStr 接触网继电器配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 R_OhlStructFromChar(UINT8* pDataAddr, Relay_OhlStruct* pOhlStr) +{ + UINT8* pData = pDataAddr; + UINT8 rtnvalue = CI_ERROR; + UINT8 i = 0U; + + if ((NULL == pDataAddr) || (NULL == pOhlStr)) + { + ; + + } + else + { + rtnvalue = CI_SUCCESS; + + pOhlStr->wOhlId = dquCiShortFromChar(pData); /*接触网分区ID*/ + pData += 2u; + if ((0u < pOhlStr->wOhlId) && (OHL_MAX_NUM > pOhlStr->wOhlId)) + { + pOhlStr->wBelongOcId = dquCiShortFromChar(pData); /*所属OC ID*/ + pData += 2u; + + if ((0U != pOhlStr->wBelongOcId) && (UINT16_MAX != pOhlStr->wBelongOcId)) + { + pOhlStr->chBelongCiId = (UINT8)(GetCiIdByOcId(pOhlStr->wBelongOcId)); + pOhlStr->chRelayGroupNum = *pData; /*继电器组数*/ + pData += 1u; + + if ((0U < pOhlStr->chRelayGroupNum) && (OHL_GROUP_MAX_NUM >= pOhlStr->chRelayGroupNum)) + { + for (i = 0u; i < pOhlStr->chRelayGroupNum; i++) + { + pOhlStr->wEnergizedId[i] = dquCiShortFromChar(pData); /*有电继电器*/ + pData += 2u; + + pOhlStr->wDeEnergizedId[i] = dquCiShortFromChar(pData); /*断电继电器*/ + pData += 2u; + } + } + else + { + debug_infor_printf((const)"\R_OhlStructFromChar Error: chRelayGroupNum[%d] Error.\n", pOhlStr->chRelayGroupNum); + rtnvalue = CI_ERROR; /*组数非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\R_OhlStructFromChar Error: wBelongOcId[%d] Error.\n", pOhlStr->wBelongOcId); + rtnvalue = CI_ERROR; /*OC ID非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\R_OhlStructFromChar Error: wOhlId[%d] Error.\n", pOhlStr->wOhlId); + rtnvalue = CI_ERROR; /*分区ID非法,返回失败*/ + } + + } + + return rtnvalue; + +} + +/********************************************* +* 函数功能:从FS读取数据到ECS继电器结构体 +* 参数说明:UINT8* pDataAddr 数据地址 +* pEcsStrRelayEcsStruct* pEcsStr ECS数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 R_EcsRelayDataFromChar(UINT8* pDataAddr, RelayEcsStruct* pEcsStr) +{ + UINT8* pData = pDataAddr; + UINT8 cRetVal = CI_ERROR; + + if ((NULL != pDataAddr) && (NULL != pEcsStr)) + { + cRetVal = CI_SUCCESS; + + pEcsStr->EcsId = dquCiShortFromChar(pData); /*ECS ID */ + pData += 2U; + if ((0U < pEcsStr->EcsId) && (ECS_MAX_NUM > pEcsStr->EcsId)) + { + pEcsStr->BelongOcId = dquCiShortFromChar(pData); /*OC ID*/ + pData += 2U; + if ((0U != pEcsStr->BelongOcId) && (UINT16_MAX != pEcsStr->BelongOcId)) + { + pEcsStr->FanUpRelayId = dquCiShortFromChar(pData); /*风向为逻辑正方向继电器ID*/ + pData += 2U; + if ((0U != pEcsStr->FanUpRelayId) && (UINT16_MAX != pEcsStr->FanUpRelayId)) + { + pEcsStr->FanDownRelayId = dquCiShortFromChar(pData); /*风向为逻辑反方向继电器ID*/ + pData += 2U; + if ((0U != pEcsStr->FanDownRelayId) && (UINT16_MAX != pEcsStr->FanDownRelayId)) + { + /*返回成功*/ + } + else + { + debug_infor_printf((const)"\nR_EcsRelayDataFromChar Error: FanDownRelayId[%d] Error.\n", pEcsStr->FanDownRelayId); + cRetVal = CI_ERROR; /*FanDown继电器ID非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nR_EcsRelayDataFromChar Error: FanUpRelayId[%d] Error.\n", pEcsStr->FanUpRelayId); + cRetVal = CI_ERROR; /*FanUp继电器ID非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nR_EcsRelayDataFromChar Error: BelongOcId[%d] Error.\n", pEcsStr->BelongOcId); + cRetVal = CI_ERROR; /*OC ID非法,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nR_EcsRelayDataFromChar Error: EcsId[%d] Error.\n", pEcsStr->EcsId); + cRetVal = CI_ERROR; /*ECS ID非法,返回失败*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h index f630921..f2295f9 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h @@ -30,6 +30,13 @@ UINT8 RelayConfigDataStruFromChar(UINT8 * pDataAddr,RelayConfigDataStruct* pRela *********************************************/ UINT8 R_EmegencyStopStructFromChar(UINT8 * pDataAddr,Relay_EmgcyStpStruct* pEmgcyStpStr,UINT16 realRowLen); +/********************************************* +*函数功能:初始化全线紧急停车按钮继电器结构体 +*参数说明:pDataAddr数据地址, pCesbStpStr紧急停车按钮继电器配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 R_CesbStructFromChar(UINT8 * pDataAddr, Relay_CesbStruct* pCesbStpStr); + /********************************************* *函数功能:从数据到屏蔽门继电器结构体 *参数说明:pDataAddr数据地址, pScrnStr屏蔽门继电器配置数据结构体指针,UINT16 rowLen 一行数据的长度 @@ -107,6 +114,26 @@ UINT8 R_GaragedoorStructFromChar(UINT8 * pDataAddr,Relay_GaragedoorStruct* pGara *********************************************/ UINT8 R_SpksDataFromChar(UINT8 * pDataAddr,RelaySpksStruct* pSpksStr,UINT16 realRowLen); +/********************************************* +* 函数功能:从FS读取数据到SSKS闪灯稳灯继电器结构体 +* 参数说明:pDataAddr数据地址 +* pSsksStr SSKS数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 R_SsksLightRelayDataFromChar(UINT8* pDataAddr, RelaySsksLightStruct* pSsksStr); + +/********************************************* +* 函数功能:从FS读取数据到联络线旁路继电器结构体 +* 参数说明:pDataAddr数据地址 +* pOverrideStr 联络线旁路数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 20260311 +*********************************************/ +UINT8 R_ConnectOverrideDataFromChar(UINT8* pDataAddr, ConnectOverrideStruct* pOverrideStr); + /********************************************* *函数功能:从数据到门禁继电器结构体 *参数说明:pDataAddr数据地址, pMjStr 门禁数据结构体指针 realRowLen 每一行数据长度 @@ -149,4 +176,21 @@ UINT8 R_ReverseCutStrFromChar(UINT8 * pDataAddr, Relay_ReverseCutStruct * pRever * cgh-合并CID-3037-3: *********************************************/ UINT8 R_OCIndicStruFromChar(UINT8* pDataAddr, OCStationIndicConfigDataStru* pIndicStru); +/********************************************* +*函数功能:从数据到接触网继电器结构体 +*参数说明:pDataAddr数据地址, pOhlStr 接触网继电器配置数据结构体指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 R_OhlStructFromChar(UINT8* pDataAddr, Relay_OhlStruct* pOhlStr); + +/********************************************* +* 函数功能:从FS读取数据到ECS继电器结构体 +* 参数说明:UINT8* pDataAddr 数据地址 +* pEcsStrRelayEcsStruct* pEcsStr ECS数据结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 R_EcsRelayDataFromChar(UINT8* pDataAddr, RelayEcsStruct* pEcsStr); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c index 987333b..ec1646e 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c @@ -335,6 +335,102 @@ UINT8 InitRelay_EmgcyStpStru(CHAR* CIDataName) return rtnValue; } +/********************************************* +*函数功能:填充全线紧急停车按钮继电器结构体数组 +*参数说明:CIDataName件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 InitRelay_CESBStru(CHAR* CIDataName) +{ + UINT8 funcRtn = 0U; + Relay_CesbStruct* pCentreEsbStr = NULL; /*临时继电器变量*/ + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 DataSize = 0U; /*数据大小(字节数)*/ + UINT16 j = 0U; + UINT8 rtnValue = 0U; + UINT32 excelId = 0U; /*excel id*/ + UINT32 sheetId = 0U; /*sheet id*/ + UINT32 rowLen = 0U; /*读到的行数*/ + UINT16 realRowLen = 0U;/*实际表一行的长度*/ + UINT8 localCiPattern = 0U; /*本CI模式*/ + + /*已经初始化了,不用老是调用执行过程*/ + if (RelayData.pCentreEsbStr != NULL) + { + rtnValue = 1u; + } + else + { + localCiPattern = GetLocalCiPattern(); + excelId = OC_DATA_TYPE; + sheetId = OC_RELAY_CENTER_ESB_ID; + /*读取 默认行车序列 数据*/ + funcRtn = dquGetConfigDataNew(CIDataName, excelId, sheetId, &pDataAddr, &DataSize, &rowLen); + if (0u == funcRtn) + { + /*函数调用失败*/ + rtnValue = 0U; + } + else + { + /*求得个数*/ + if ((0U != DataSize) && (0U != rowLen)) + { + if (0U != DataSize % rowLen) + { + /*求得个数不为整数,数据错误*/ + debug_infor_printf((const)"\nCI_CI_DATA,CESB Btn len %d not equal to fs", rowLen); + rtnValue = 0u; + } + else + { + realRowLen = (UINT16)(DataSize / rowLen); + RelayDataLen.RelayCesbStrLen = (UINT16)rowLen; + + + if (DataSize < realRowLen) + { + rtnValue = 0U; + } + else + { + /*动态申请空间*/ + RelayData.pCentreEsbStr = (Relay_CesbStruct*)MyNew((UINT32)((sizeof(Relay_CesbStruct)) * (RelayDataLen.RelayCesbStrLen))); + /*动态申请空间失败*/ + if (NULL == RelayData.pCentreEsbStr) + { + RelayDataLen.RelayCesbStrLen = 0u; + rtnValue = 0u; + } + else + { + /*内存先设为无效*/ + (void)CommonMemSet(RelayData.pCentreEsbStr, (UINT32)sizeof(Relay_CesbStruct) * RelayDataLen.RelayCesbStrLen, 0x00, (UINT32)sizeof(Relay_CesbStruct) * RelayDataLen.RelayCesbStrLen); + /*解析数据到 默认行车序列 结构体数组 */ + rtnValue = 1u; + for (j = 0u; j < RelayDataLen.RelayCesbStrLen; j++) + { + pCentreEsbStr = RelayData.pCentreEsbStr + j; + + /*填充数据结构体*/ + rtnValue &= R_CesbStructFromChar(pDataAddr, pCentreEsbStr); + pDataAddr += realRowLen; + + } + } + } + } + } + else + { + rtnValue = 1U; + RelayDataLen.RelayCesbStrLen = 0U; + } + } + } + return rtnValue; +} + /********************************************* *函数功能:填充屏蔽门继电器结构体数组 *参数说明:CIDataName件指针 @@ -1249,6 +1345,220 @@ UINT8 InitRelaySpksStru(CHAR* CIDataName) return rtnValue; } +/********************************************* +* 函数功能:初始化SSKS闪灯稳灯继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 InitRelaySsksLightStru(CHAR* CIDataName) +{ + UINT8 cRetVal = CI_ERROR; + UINT32 dwExcelId = 0U; /*表ID*/ + UINT32 dwSheetId = 0U; /*表单编号*/ + UINT8 cFuncRtn = CI_ERROR; + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 dwDataSize = 0U; /*数据大小(字节数)*/ + UINT16 wRowCount = 0U; /*读到的行数*/ + UINT16 wRealRowLen = 0U; /*表一行的长度*/ + UINT16 ii = 0U; + RelaySsksLightStruct* pRelaySpksStr = NULL; + + if (NULL != RelayData.pRelaySsksLightStr) + { + cRetVal = CI_SUCCESS; /*已经初始化,返回成功*/ + } + else + { + /*读取SSKS闪灯稳灯继电器表*/ + dwExcelId = (UINT32)OC_DATA_TYPE; + dwSheetId = (UINT32)OC_RELAY_SSKS_LIGHT_ID; + cFuncRtn = dquGetConfigDataNew(CIDataName, dwExcelId, dwSheetId, &pDataAddr, &dwDataSize, &wRowCount); + if (CI_SUCCESS == cFuncRtn) + { + if ((0U != dwDataSize) && (0U != wRowCount)) + { + if (0U == (dwDataSize % wRowCount)) + { + if (SSKS_LIGHT_RELAY_SUM_MAX >= wRowCount) + { + wRealRowLen = (UINT16)(dwDataSize / wRowCount); + RelayDataLen.RelaySsksLightStrLen = wRowCount; + + /* 动态申请空间 */ + RelayData.pRelaySsksLightStr = (RelaySsksLightStruct*)MyNew((UINT32)(sizeof(RelaySsksLightStruct) * RelayDataLen.RelaySsksLightStrLen)); + + if (NULL != RelayData.pRelaySsksLightStr) + { + cRetVal = CI_SUCCESS; + /*读表前现将数据清零*/ + (void)CommonMemSet(RelayData.pRelaySsksLightStr, (UINT32)(sizeof(RelaySsksLightStruct) * RelayDataLen.RelaySsksLightStrLen), (UINT8)0U, (UINT32)(sizeof(RelaySsksLightStruct) * RelayDataLen.RelaySsksLightStrLen)); + + /*解析数据到结构体*/ + for (ii = 0U; ii < RelayDataLen.RelaySsksLightStrLen; ii++) + { + pRelaySpksStr = RelayData.pRelaySsksLightStr + ii; + + /*填充数据结构体*/ + cFuncRtn = R_SsksLightRelayDataFromChar(pDataAddr, pRelaySpksStr); + pDataAddr += wRealRowLen; + + if (CI_SUCCESS != cFuncRtn) + { + cRetVal = CI_ERROR; + break; + } + else + { + /*继续读取*/ + } + } + } + else + { + debug_infor_printf((const)"\nInitRelaySsksLightStru Error: Apply Memory Error.\n"); + RelayDataLen.RelaySsksLightStrLen = 0U; /* 动态申请空间失败,长度重置零 */ + cRetVal = CI_ERROR; /*申请空间失败,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelaySsksLightStru Error: RowCount[%d] Exceed Max[%d].\n", wRowCount, SSKS_LIGHT_RELAY_SUM_MAX); + cRetVal = CI_ERROR; /*行数超限,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelaySsksLightStru Error: RowCount %d not equal to fs\n", wRowCount); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (dwExcelId << 8U) + dwSheetId, PRINT_ONCE); + cRetVal = CI_ERROR; /*长度不一致,返回失败*/ + } + } + else + { + RelayDataLen.RelaySsksLightStrLen = 0U; + cRetVal = CI_SUCCESS; /*未配置数据,返回成功*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelaySsksLightStru Error: Read OC_RELAY_SSKS_LIGHT Table Error.\n"); + cRetVal = CI_ERROR; /*读表失败,返回失败*/ + } + } + + return cRetVal; +} + +/********************************************* +* 函数功能:初始化联络线旁路继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 2026.3.11 +*********************************************/ +UINT8 InitConnectOverrideStru(CHAR* CIDataName) +{ + UINT8 cRetVal = CI_ERROR; + UINT32 dwExcelId = 0U; /*表ID*/ + UINT32 dwSheetId = 0U; /*表单编号*/ + UINT8 cFuncRtn = CI_ERROR; + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 dwDataSize = 0U; /*数据大小(字节数)*/ + UINT16 wRowCount = 0U; /*读到的行数*/ + UINT16 wRealRowLen = 0U; /*表一行的长度*/ + UINT16 ii = 0U; + ConnectOverrideStruct* pRelayStr = NULL; + + if (NULL != RelayData.pRelayConnectOverrideStr) + { + cRetVal = CI_SUCCESS; /*已经初始化,返回成功*/ + } + else + { + /*读取联络线旁路继电器表*/ + dwExcelId = (UINT32)OC_DATA_TYPE; + dwSheetId = (UINT32)OC_CONNECT_OVERRIDE_ID; + cFuncRtn = dquGetConfigDataNew(CIDataName, dwExcelId, dwSheetId, &pDataAddr, &dwDataSize, &wRowCount); + if (CI_SUCCESS == cFuncRtn) + { + if ((0U != dwDataSize) && (0U != wRowCount)) + { + if (0U == (dwDataSize % wRowCount)) + { + if (CONNECT_OVERRIDE_RELAY_SUM_MAX >= wRowCount) + { + wRealRowLen = (UINT16)(dwDataSize / wRowCount); + RelayDataLen.RelayConnectOverrideStrLen = wRowCount; + + /* 动态申请空间 */ + RelayData.pRelayConnectOverrideStr = (ConnectOverrideStruct*)MyNew((UINT32)(sizeof(ConnectOverrideStruct) * RelayDataLen.RelayConnectOverrideStrLen)); + + if (NULL != RelayData.pRelayConnectOverrideStr) + { + cRetVal = CI_SUCCESS; + /*读表前现将数据清零*/ + (void)CommonMemSet(RelayData.pRelayConnectOverrideStr, + (UINT32)(sizeof(ConnectOverrideStruct) * RelayDataLen.RelayConnectOverrideStrLen), + (UINT8)0U, (UINT32)(sizeof(ConnectOverrideStruct) * RelayDataLen.RelayConnectOverrideStrLen)); + + /*解析数据到结构体*/ + for (ii = 0U; ii < RelayDataLen.RelayConnectOverrideStrLen; ii++) + { + pRelayStr = RelayData.pRelayConnectOverrideStr + ii; + + /*填充数据结构体*/ + cFuncRtn = R_ConnectOverrideDataFromChar(pDataAddr, pRelayStr); + pDataAddr += wRealRowLen; + + if (CI_SUCCESS != cFuncRtn) + { + cRetVal = CI_ERROR; + break; + } + else + { + /*继续读取*/ + } + } + } + else + { + debug_infor_printf((const)"\nInitConnectOverrideStru Error: Apply Memory Error.\n"); + RelayDataLen.RelayConnectOverrideStrLen = 0U; /* 动态申请空间失败,长度重置零 */ + cRetVal = CI_ERROR; /*申请空间失败,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitConnectOverrideStru Error: RowCount[%d] Exceed Max[%d].\n", wRowCount, CONNECT_OVERRIDE_RELAY_SUM_MAX); + cRetVal = CI_ERROR; /*行数超限,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitConnectOverrideStru Error: RowCount %d not equal to fs\n", wRowCount); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (dwExcelId << 8U) + dwSheetId, PRINT_ONCE); + cRetVal = CI_ERROR; /*长度不一致,返回失败*/ + } + } + else + { + RelayDataLen.RelayConnectOverrideStrLen = 0U; + cRetVal = CI_SUCCESS; /*未配置数据,返回成功*/ + } + } + else + { + debug_infor_printf((const)"\nInitConnectOverrideStru Error: Read OC_CONNECT_OVERRIDE Table Error.\n"); + cRetVal = CI_ERROR; /*读表失败,返回失败*/ + } + } + + return cRetVal; +} + /********************************************* *函数功能:初始化门禁解锁继电器结构体数组 *参数说明:CIDataName件指针 @@ -1647,3 +1957,204 @@ UINT8 InitRelay_ReverseCutStru(CHAR* CIDataName) return rtnValue; } +/********************************************* +*函数功能:填充接触网继电器结构体数组 +*参数说明:CIDataName件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 InitRelay_OhlStru(CHAR* CIDataName) +{ + UINT8 funcRtn = 0U; + Relay_OhlStruct* pOhlStr = NULL; /*接触网继电器变量*/ + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 DataSize = 0U; /*数据大小(字节数)*/ + UINT16 j = 0U; + UINT8 rtnValue = 0U; + UINT8 localCiPattern = 0U; + UINT32 dwExcelId = 0u; /*excel id*/ + UINT32 dwSheetId = 0u; /*sheet id*/ + UINT32 dwRowLen = 0u; /*行长度*/ + UINT16 wRealRowCount = 0U; /*行数*/ + + /*已经初始化了,不用老是调用执行过程*/ + if (NULL != RelayData.pRelayOhlStr) + { + rtnValue = 1u; + } + else + { + dwExcelId = OC_DATA_TYPE; + dwSheetId = OC_RELAY_OHL_ID; + + /*读取进路调车同意继电器数据表*/ + funcRtn = dquGetConfigDataNew(CIDataName, dwExcelId, dwSheetId, &pDataAddr, &DataSize, &wRealRowCount); + if (0U == funcRtn) + { + /*没有表*/ + rtnValue = 0U; + debug_infor_printf((const)"\nOC_OHL_RELAY_ID NO IN FS\n"); + } + else + { + rtnValue = 1U; + + if ((0U != DataSize) && (0U != wRealRowCount)) + { + if (0U != (DataSize % wRealRowCount)) + { + /*求得个数不为整数,数据错误*/ + debug_infor_printf((const)"\nCI_RELAY_DATA,RELAY_OHL len %d not equal to fs", (DataSize % wRealRowCount)); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, ((UINT32)(dwExcelId << 8U)) + dwSheetId, PRINT_ONCE); + rtnValue = 0U; + } + else + { + RelayDataLen.RelayOhlStrLen = wRealRowCount;/*计算结构体个数*/ + dwRowLen = DataSize / wRealRowCount; + + /*动态申请空间*/ + RelayData.pRelayOhlStr = (Relay_OhlStruct*)MyNew((UINT32)(sizeof(Relay_OhlStruct) * RelayDataLen.RelayOhlStrLen)); + + if (NULL == RelayData.pRelayOhlStr) + {/*动态申请空间失败*/ + RelayDataLen.RelayOhlStrLen = 0U; + rtnValue = 0U; + } + else + { + /*内存先设为无效*/ + (void)memset(RelayData.pRelayOhlStr, 0x00, sizeof(Relay_OhlStruct) * RelayDataLen.RelayOhlStrLen); + /*解析数据到 默认行车序列 结构体数组 */ + + for (j = 0u; j < RelayDataLen.RelayOhlStrLen; j++) + { + if (1U == rtnValue) + { + pOhlStr = RelayData.pRelayOhlStr + j; + + /*填充数据结构体*/ + rtnValue &= R_OhlStructFromChar(pDataAddr, pOhlStr); + pDataAddr += dwRowLen; + } + else + { + break; + } + } + } + } + } + else + { + ; + } + } + } + return rtnValue; +} + +/********************************************* +* 函数功能:初始化ECS继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 InitRelayEcsStru(CHAR* CIDataName) +{ + UINT8 cRetVal = CI_ERROR; + UINT32 dwExcelId = 0U; /*表ID*/ + UINT32 dwSheetId = 0U; /*表单编号*/ + UINT8 cFuncRtn = CI_ERROR; + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 dwDataSize = 0U; /*数据大小(字节数)*/ + UINT16 wRowCount = 0U; /*读到的行数*/ + UINT16 wRealRowLen = 0U; /*表一行的长度*/ + UINT16 ii = 0U; + RelayEcsStruct* pRelayEcsStr = NULL; + + if (NULL != RelayData.pRelayEcsStr) + { + cRetVal = CI_SUCCESS; /*已经初始化,返回成功*/ + } + else + { + /*读取ECS继电器表*/ + dwExcelId = (UINT32)OC_DATA_TYPE; + dwSheetId = (UINT32)OC_RELAY_ECS_ID; + cFuncRtn = dquGetConfigDataNew(CIDataName, dwExcelId, dwSheetId, &pDataAddr, &dwDataSize, &wRowCount); + if (CI_SUCCESS == cFuncRtn) + { + if ((0U != dwDataSize) && (0U != wRowCount)) + { + if (0U == (dwDataSize % wRowCount)) + { + if (ECS_MAX_NUM > wRowCount) + { + wRealRowLen = (UINT16)(dwDataSize / wRowCount); + RelayDataLen.RelayEcsStrLen = wRowCount; + + /* 动态申请空间 */ + RelayData.pRelayEcsStr = (RelayEcsStruct*)MyNew((UINT32)(sizeof(RelayEcsStruct) * RelayDataLen.RelayEcsStrLen)); + + if (NULL != RelayData.pRelayEcsStr) + { + cRetVal = CI_SUCCESS; + /*读表前现将数据清零*/ + (void)CommonMemSet(RelayData.pRelayEcsStr, (UINT32)(sizeof(RelayEcsStruct) * RelayDataLen.RelayEcsStrLen), (UINT8)0U, (UINT32)(sizeof(RelayEcsStruct) * RelayDataLen.RelayEcsStrLen)); + + /*解析数据到结构体*/ + for (ii = 0U; ii < RelayDataLen.RelayEcsStrLen; ii++) + { + pRelayEcsStr = RelayData.pRelayEcsStr + ii; + + /*填充数据结构体*/ + cFuncRtn = R_EcsRelayDataFromChar(pDataAddr, pRelayEcsStr); + pDataAddr += wRealRowLen; + + if (CI_SUCCESS != cFuncRtn) + { + cRetVal = CI_ERROR; + break; + } + else + { + /*继续读取*/ + } + } + } + else + { + debug_infor_printf((const)"\nInitRelayEcsStru Error: Apply Memory Error.\n"); + RelayDataLen.RelayEcsStrLen = 0U; /* 动态申请空间失败,长度重置零 */ + cRetVal = CI_ERROR; /*申请空间失败,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelayEcsStru Error: RowCount[%d] Exceed Or Equal Max[%d].\n", wRowCount, ECS_MAX_NUM); + cRetVal = CI_ERROR; /*行数超限,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelayEcsStru Error: RowCount %d not equal to fs\n", wRowCount); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (dwExcelId << 8U) + dwSheetId, PRINT_ONCE); + cRetVal = CI_ERROR; /*长度不一致,返回失败*/ + } + } + else + { + RelayDataLen.RelayEcsStrLen = 0U; + cRetVal = CI_SUCCESS; /*未配置数据,返回成功*/ + } + } + else + { + debug_infor_printf((const)"\nInitRelayEcsStru Error: Read OC_RELAY_ECS Table Error.\n"); + cRetVal = CI_ERROR; /*读表失败,返回失败*/ + } + } + + return cRetVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.h index 1344741..abde13c 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.h @@ -20,6 +20,7 @@ typedef struct SConfig_RelayDataStruct { Relay_EmgcyStpStruct* pRelayEmgcyStpStr; /*紧急停车按钮继电器结构体*/ + Relay_CesbStruct* pCentreEsbStr; /*全线紧急停车按钮继电器结构体*/ Relay_ScreenStruct* pRelayScreenStr ; /*屏蔽门继电器结构体*/ Relay_PhysicalSegmentStruct* pRelayPhysicalSgmtStr ;/*物理区段继电器结构体*/ Relay_PointStruct* pRelayPointStr ; /*道岔继电器结构体*/ @@ -31,16 +32,21 @@ typedef struct SConfig_RelayDataStruct RelayConfigDataStruct * pRelayCfgDtStr ; Relay_GaragedoorStruct *pRelayGaragedoorStr; /*车库门继电器结构体*/ RelaySpksStruct *pRelaySpksStr; /* SPKS继电器 */ + RelaySsksLightStruct* pRelaySsksLightStr; /*SSKS闪灯稳灯继电器 */ Relay_MJStruct* pMjStr; /* 门禁解锁继电器结构体 */ Relay_FloodGateStruct *pRelayFloodGateStr; /* 防淹门继电器 */ Relay_WashMachineStruct *pRelayWashMachineStr; /*洗车机继电器结构体*/ Relay_DCAgreeStruct *pRelayDCAgreeStr;/*调车同意继电器结构体*/ Relay_ReverseCutStruct *pRelayReverseCutStr;/*倒切设备继电器结构体*/ + Relay_OhlStruct* pRelayOhlStr; /*接触网继电器结构体*/ + RelayEcsStruct* pRelayEcsStr; /*ECS继电器 */ + ConnectOverrideStruct* pRelayConnectOverrideStr; /*联络线旁路继电器 */ } RelayDataStruct_Config; /*继电器数组长度结构体*/ typedef struct S_RelayDataStructLen { UINT16 RelayEmgcyStpStrLen ; /*紧急停车按钮继电器结构体数组长度*/ + UINT16 RelayCesbStrLen; /*全线紧急停车按钮继电器结构体数组长度*/ UINT16 RelayScreenStrLen ; /*屏蔽门继电器结构体数组长度*/ UINT16 RelayPhysicalSgmtStrLen ;/*物理区段继电器结构体数组长度*/ UINT16 RelayPointStrLen ; /*道岔继电器结构体数组长度*/ @@ -51,13 +57,17 @@ typedef struct S_RelayDataStructLen UINT16 RelayNoRtnStruLen; /*无人折返*/ UINT16 RelayCfgDtStrLen; UINT16 RelayGaragedoorStrLen; /*车库门继电器*/ - UINT16 RelaySpksStrLen; /* SPKS分配空间大小 */ + UINT16 RelaySpksStrLen; /* SPKS分配空间大小 */ UINT16 RelayMJStrLen; /* 门禁继电器分配空间大小 */ + UINT16 RelaySsksLightStrLen; /*SSKS闪灯稳灯继电器结构体数组长度*/ UINT16 RelayFloodGateStrLen; /*防淹门继电器*/ UINT16 RelayWashMachineStrLen; /*洗车机继电器结构体数量*/ UINT16 RelayMonoRailPointStrLen ; /*单轨道岔继电器结构体数组长度*/ UINT16 RelayDCAgreeStrLen;/*调车同意继电器结构体数量*/ UINT16 RelayReverseCutStrLen;/*倒切设备继电器结构体数量*/ + UINT16 RelayOhlStrLen; /*接触网继电器结构体数量*/ + UINT16 RelayEcsStrLen; /*ECS继电器结构体数组长度*/ + UINT16 RelayConnectOverrideStrLen; /*联络线旁路继电器结构体数组长度*/ } RelayDataStruct_ConfigLen; /*********定义全局的继电器信息数据变量*******/ @@ -122,6 +132,13 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName); *返回值:0,失败;1,成功 *********************************************/ UINT8 InitRelay_EmgcyStpStru(CHAR* CIDataName); + +/********************************************* +*函数功能:填充全线紧急停车按钮继电器结构体数组 +*参数说明:CIDataName件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 InitRelay_CESBStru(CHAR* CIDataName); /********************************************* *函数功能:填充无人折返结构体数组 *参数说明:CIDataName件指针 @@ -144,6 +161,24 @@ UINT8 InitRelay_GaragedoorStru(CHAR* CIDataName); *********************************************/ UINT8 InitRelaySpksStru(CHAR* CIDataName); +/********************************************* +* 函数功能:初始化SSKS闪灯稳灯继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.12.15 +*********************************************/ +UINT8 InitRelaySsksLightStru(CHAR* CIDataName); + +/********************************************* +* 函数功能:初始化联络线旁路继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By wyd 2026.3.11 +*********************************************/ +UINT8 InitConnectOverrideStru(CHAR* CIDataName); + /********************************************* *函数功能:初始化门禁继电器结构体数组 *参数说明:CIDataName件指针 @@ -173,5 +208,20 @@ UINT8 InitRelay_DCAgreeStru(CHAR* CIDataName); *********************************************/ UINT8 InitRelay_ReverseCutStru(CHAR* CIDataName); +/********************************************* +*函数功能:填充接触网继电器结构体数组 +*参数说明:CIDataName件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 InitRelay_OhlStru(CHAR* CIDataName); + +/********************************************* +* 函数功能:初始化ECS继电器结构体 +* 参数说明:CIDataName件指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +*********************************************/ +UINT8 InitRelayEcsStru(CHAR* CIDataName); #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h index 04de5c8..d09168d 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h @@ -67,7 +67,7 @@ #define OTHER_CI_DATA_LEN ((UINT8)42) #define ROUTE_DATA_ID ((UINT32)1) /*CI联锁表 -- 进路表*/ -#define ROUTE_DATA_LEN ((UINT32)53) /*51:增加不为接近时是否延时解锁 +2 CBTC开放需开放*/ +#define ROUTE_DATA_LEN ((UINT32)54) /*更新:20260313迪士尼进路最后区段不检查特定封锁*/ #define OVERLAP_LOCK_COND_DATA_ID ((UINT8)16) /*CI联锁表 -- 保护区段锁闭条件表*/ #define OVERLAP_LOCK_COND_DATA_LEN ((UINT8)44)/*保护区段锁闭条件表新增一列:防护道岔组IDUDE2*/ @@ -98,6 +98,8 @@ #define CONTACT_DATA_LEN ((UINT8)12U) +#define CBTC_ROUTE_LOGSEC_CHECK_ID ((UINT8)28U) /*CI联锁表 -- CBTC进路逻辑区段检查表*/ + /*单轨使用*/ /* zt 删除单轨相关代码 2022-02-15 */ @@ -312,6 +314,7 @@ typedef struct S_RouteStruct UINT16 wBLCKOtherCIID; /*点式级别其他联锁ID*/ UINT16 wFloodGateIdBuf[ROUTE_MAX_FLOOD_GATE_NUM]; /*防淹门*/ UINT8 wNeedDelayUnlock; /*进路人解、取消需要延时解锁*/ + UINT8 cPassCbtcLastFlock; /*CBCT进路不检查ESB/APG/SPKS封锁*/ } LS_RouteStruct; /*全自动折返进路表数据结构体*/ typedef struct S_AllAutoRtnRouteStruct @@ -413,5 +416,13 @@ typedef struct S_TransRouteZFSigStruct UINT16 wTransRouteZFSigId; /*转换轨折返信号机ID*/ } LS_TransRouteZFSigStruct; +/*CBTC进路逻辑区段检查表数据结构体*/ +typedef struct S_CbtcRouteLgcCheckStruct +{ + UINT16 wRouteId; /*进路ID */ + UINT8 cCheckLogSecNum; /*需要检查的逻辑区段数量*/ + UINT16 szCheckLogSecId[MAX_ROUTE_IN_LT_NUM]; /*需要检查的逻辑区段ID数组*/ +} LS_CbtcRouteLgcCheckStruct; + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c index f56bea8..083fa99 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c @@ -525,119 +525,130 @@ UINT8 LS_RouteStruFromChar(UINT8 * pDataAddr,LS_RouteStruct* pRouteStr) UINT8 * pData = pDataAddr; UINT16 i = 0u; UINT8 rtnvalue = 0u; - + UINT8 chTemp = 0U; if ((NULL == pDataAddr) || (NULL == pRouteStr)) { rtnvalue = 0u; - return rtnvalue; } - - /*进路ID */ - pRouteStr->wRouteId = dquCiShortFromChar(pData); - pData+=2u; - - /*进路方向 */ - pRouteStr->wDir = *pData; - pData++; - - - - /*引导属性*/ - pRouteStr->wYinDao = *pData; - pData++; - - /*始端按钮对应信号机ID*/ - pRouteStr->wStarBtnSignal = dquCiShortFromChar(pData); - pData+=2u; - - /*变通按钮对应信号机ID*/ - pRouteStr->wFlexibleSignal = dquCiShortFromChar(pData); - pData+=2u; - - /*终端按钮对应信号机ID*/ - pRouteStr->wEndBtnSignal = dquCiShortFromChar(pData); - pData+=2u; - - /*始端信号机显示颜色*/ - pRouteStr->wStarSignalClr = dquCiShortFromChar(pData); - pData+=2u; - - /*始端信号机引导开放颜色*/ - pRouteStr->wStarSigYinDaoClr = dquCiShortFromChar(pData); - pData+=2u; - - /*物理区段及检查属性ID*/ - pRouteStr->wPhySecCheckStaId= dquCiShortFromChar(pData); - pData+=2u; - - /*进路防护道岔组ID*/ - pRouteStr->wFHDCId= dquCiShortFromChar(pData); - pData+=2u; - - /*敌对信号及条件道岔ID*/ - - pRouteStr->wDDXHId = dquCiShortFromChar(pData); - pData+=2u; - - /*侵限区段ID*/ - for(i=0;iwIntrudePhySecId[i] = dquCiShortFromChar(pData); - pData+=2u; + rtnvalue = 1u; + /*进路ID */ + pRouteStr->wRouteId = dquCiShortFromChar(pData); + pData += 2u; + + /*进路方向 */ + pRouteStr->wDir = *pData; + pData++; + + /*引导属性*/ + pRouteStr->wYinDao = *pData; + pData++; + + /*始端按钮对应信号机ID*/ + pRouteStr->wStarBtnSignal = dquCiShortFromChar(pData); + pData += 2u; + + /*变通按钮对应信号机ID*/ + pRouteStr->wFlexibleSignal = dquCiShortFromChar(pData); + pData += 2u; + + /*终端按钮对应信号机ID*/ + pRouteStr->wEndBtnSignal = dquCiShortFromChar(pData); + pData += 2u; + + /*始端信号机显示颜色*/ + pRouteStr->wStarSignalClr = dquCiShortFromChar(pData); + pData += 2u; + + /*始端信号机引导开放颜色*/ + pRouteStr->wStarSigYinDaoClr = dquCiShortFromChar(pData); + pData += 2u; + + /*物理区段及检查属性ID*/ + pRouteStr->wPhySecCheckStaId = dquCiShortFromChar(pData); + pData += 2u; + + /*进路防护道岔组ID*/ + pRouteStr->wFHDCId = dquCiShortFromChar(pData); + pData += 2u; + + /*敌对信号及条件道岔ID*/ + pRouteStr->wDDXHId = dquCiShortFromChar(pData); + pData += 2u; + + /*侵限区段ID*/ + for (i = 0U; iwIntrudePhySecId[i] = dquCiShortFromChar(pData); + pData += 2u; + } + + /*进路折返信号机组ID*/ + pRouteStr->wReturnSignalId = dquCiShortFromChar(pData); + pData += 2u; + + /*防护区段解锁对应停稳物理区段ID*/ + pRouteStr->wFHQD_TW_WLQDId = dquCiShortFromChar(pData); + pData += 2u; + + /*进路相关可封锁信号机组ID*/ + pRouteStr->wFS_SignalId = dquCiShortFromChar(pData); + pData += 2u; + + /*进路开放需关闭信号机组ID*/ + pRouteStr->wSignalClsId = dquCiShortFromChar(pData); + pData += 2u; + + + /*进路开放需开放信号机组ID*/ + pRouteStr->wCBTCSignalOpenId = dquCiShortFromChar(pData); + pData += 2u; + + /*进路开放需开放信号机组ID*/ + pRouteStr->wSignalOpenId = dquCiShortFromChar(pData); + pData += 2u; + + + /*不同时开放信号机组*/ + pRouteStr->wBTSOpenId = dquCiShortFromChar(pData); + pData += 2u; + + /*带动道岔组ID*/ + pRouteStr->wDrvSwiGrpId = dquCiShortFromChar(pData); + pData += 2u; + + /*CBTC级别其他联锁ID*/ + pRouteStr->wCBTCOtherCIID = dquCiShortFromChar(pData); + pData += 2u; + /*点式级别其他联锁ID*/ + pRouteStr->wBLCKOtherCIID = dquCiShortFromChar(pData); + pData += 2u; + + /* 防淹门 ID */ + for (i = 0u; iwFloodGateIdBuf[i] = dquCiShortFromChar(pData); + pData += 2u; + } + /*进路人解、取消需要延时解锁属性*/ + pRouteStr->wNeedDelayUnlock = *pData; + pData++; + + /*CBCT进路不检查最后区段ESB/APG/SPKS封锁*/ + chTemp = *pData; + pData++; + if ((ROUTE_PASS_LAST_FLOCK_YES == chTemp) || (ROUTE_PASS_LAST_FLOCK_NO == chTemp)) + { + pRouteStr->cPassCbtcLastFlock = chTemp; + } + else + { + rtnvalue = 0U; + debug_infor_printf((const)"\n LS_RouteStruFromChar cPassCbtcLastFlock Error, Route ID: %d: \n", pRouteStr->wRouteId); + } } - /*进路折返信号机组ID*/ - pRouteStr->wReturnSignalId = dquCiShortFromChar(pData); - pData+=2u; - - /*防护区段解锁对应停稳物理区段ID*/ - pRouteStr->wFHQD_TW_WLQDId = dquCiShortFromChar(pData); - pData+=2u; - - /*进路相关可封锁信号机组ID*/ - pRouteStr->wFS_SignalId = dquCiShortFromChar(pData); - pData+=2u; - - /*进路开放需关闭信号机组ID*/ - pRouteStr->wSignalClsId = dquCiShortFromChar(pData); - pData+=2u; - - - /*进路开放需开放信号机组ID*/ - pRouteStr->wCBTCSignalOpenId = dquCiShortFromChar(pData); - pData += 2u; - - /*进路开放需开放信号机组ID*/ - pRouteStr->wSignalOpenId = dquCiShortFromChar(pData); - pData+=2u; - - - /*不同时开放信号机组*/ - pRouteStr->wBTSOpenId = dquCiShortFromChar(pData); - pData+=2u; - - /*带动道岔组ID*/ - pRouteStr->wDrvSwiGrpId = dquCiShortFromChar(pData); - pData+=2u; - - /*CBTC级别其他联锁ID*/ - pRouteStr->wCBTCOtherCIID = dquCiShortFromChar(pData); - pData+=2u; - /*点式级别其他联锁ID*/ - pRouteStr->wBLCKOtherCIID = dquCiShortFromChar(pData); - pData+=2u; - - /* 防淹门 ID */ - for(i=0u;iwFloodGateIdBuf[i] = dquCiShortFromChar(pData); - pData+=2u; - } - /*进路人解、取消需要延时解锁属性*/ - pRouteStr->wNeedDelayUnlock = *pData; - pData++; - - rtnvalue = 1u; return rtnvalue; } /********************************************* @@ -1010,8 +1021,6 @@ UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pL { UINT8* pData = pDataAddr; - UINT16 i = 0u; - UINT8 rtnvalue = 0u; if ((NULL != pDataAddr) && (NULL != pLSLgcInvEachStru)) @@ -1047,7 +1056,6 @@ UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pL UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRouteZFSigStru) { UINT8 * pData = pDataAddr; - UINT16 i = 0u; UINT8 rtnvalue = 0u; if ((NULL == pDataAddr) || (NULL == pTransRouteZFSigStru)) @@ -1064,5 +1072,54 @@ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRo rtnvalue = 1u; } + return rtnvalue; +} + +/********************************************* +* 函数功能:从数据到CBTC进路逻辑区段检查表转换 +* 参数说明:pDataAddr数据地址, +* LS_CbtcRouteLgcCheckStruct* pCbtcLgcStru CBTC进路逻辑区段检查数据结构体 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 LS_CbtcLgcCheckStruFromChar(UINT8* pDataAddr, LS_CbtcRouteLgcCheckStruct* pCbtcLgcStru) +{ + UINT8 rtnvalue = CI_ERROR; + UINT8* pData = NULL; + UINT16 i = 0U; + UINT16 wLogSecId = 0U; + UINT8 cLogSecNum = 0U; + + if ((NULL != pDataAddr) && (NULL != pCbtcLgcStru)) + { + rtnvalue = CI_SUCCESS; + pData = pDataAddr; + + pCbtcLgcStru->wRouteId = dquCiShortFromChar(pData); /*进路ID*/ + pData += 2U; + + for (i = 0U; i < MAX_ROUTE_IN_LT_NUM; i++) + { + wLogSecId = dquCiShortFromChar(pData); + pData += 2U; + if ((0U != wLogSecId) && (UINT16_MAX != wLogSecId)) + { + pCbtcLgcStru->szCheckLogSecId[cLogSecNum] = wLogSecId; /*仅读取ID有效的逻辑区段*/ + cLogSecNum++; + } + else + { + /*逻辑区段ID无效,不缓存*/ + } + } + + pCbtcLgcStru->cCheckLogSecNum = cLogSecNum; /*需要检查的逻辑区段数量*/ + } + else + { + rtnvalue = CI_ERROR; + } + return rtnvalue; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h index 4b39b27..e9f6e13 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h @@ -202,4 +202,14 @@ UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pL *********************************************/ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRouteZFSigStru); +/********************************************* +* 函数功能:从数据到CBTC进路逻辑区段检查表转换 +* 参数说明:pDataAddr数据地址, +* LS_CbtcRouteLgcCheckStruct* pCbtcLgcStru CBTC进路逻辑区段检查数据结构体 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 LS_CbtcLgcCheckStruFromChar(UINT8* pDataAddr, LS_CbtcRouteLgcCheckStruct* pCbtcLgcStru); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c index 2725968..ce136c1 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c @@ -2358,5 +2358,108 @@ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName) } } } + return rtnValue; +} + +/********************************************* +* 函数功能:填充CBTC进路逻辑区段检查数据结构体数组 +* 参数说明:LSDataName指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 InitLS_CbtcRouteLogSecStru(CHAR* LSDataName) +{ + UINT8 rtnValue = CI_ERROR; + UINT32 dwExcelId = 0U; + UINT32 dwSheetId = 0U; + UINT8 funcRtn = 0U; + UINT8* pDataAddr = NULL; /*数据地址*/ + UINT32 DataSize = 0U; /*数据大小(字节数)*/ + UINT16 realRowCount = 0U; /*实际表数据的行数*/ + UINT16 realRowLen = 0U; /*实际表数据的一行的长度*/ + UINT16 i = 0U; + LS_CbtcRouteLgcCheckStruct* pCbtcRouteLgcStr = NULL; /*临时结构体变量*/ + + /*已经初始化了,不用再重新初始化*/ + if (NULL != LSData.pLSCbtcRouteLgcCheckStru) + { + rtnValue = CI_SUCCESS; + } + else + { + rtnValue = CI_SUCCESS; + + /*读取CBTC进路逻辑区段检查表数据*/ + dwExcelId = (UINT32)LS_DATA_TYPE; + dwSheetId = (UINT32)CBTC_ROUTE_LOGSEC_CHECK_ID; + funcRtn = dquGetConfigDataNew(LSDataName, dwExcelId, dwSheetId, &pDataAddr, &DataSize, &realRowCount); + + if (0U == funcRtn) + { + /*函数调用失败*/ + debug_infor_printf((const)"\nLS_CBTCROUTELGCCHECK_TABLE Error: NO IN FS\n"); + rtnValue = CI_ERROR; + } + else + { + if ((0U != DataSize) && (0U != realRowCount)) + { + if (0U != (DataSize % realRowCount)) + { + debug_infor_printf((const)"\nTIOC_LS_DATA,LS_CBTCROUTELGCCHECK_TABLE Error: len %d %d not equal to fs\n", DataSize, realRowCount); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (dwExcelId << 8U) + dwSheetId, PRINT_ONCE); + rtnValue = CI_ERROR; + } + else + { + /*数据实际一行的数据字节长度*/ + realRowLen = (UINT16)(DataSize / realRowCount); + LSDataLen.LSCbtcRouteLgcCheckStruLen = realRowCount; + + /*动态申请空间*/ + LSData.pLSCbtcRouteLgcCheckStru = (LS_CbtcRouteLgcCheckStruct*)MyNew((UINT32)(sizeof(LS_CbtcRouteLgcCheckStruct) * LSDataLen.LSCbtcRouteLgcCheckStruLen)); + if (NULL == LSData.pLSCbtcRouteLgcCheckStru) + { + LSDataLen.LSCbtcRouteLgcCheckStruLen = 0U; + debug_infor_printf((const)"\nTIOC_LS_DATA,LS_CBTCROUTELGCCHECK_TABLE Error: Apply Memory Fail\n"); + rtnValue = CI_ERROR; /*动态申请空间失败,返回0*/ + } + else + { + /*内存先设为无效*/ + (void)CommonMemSet(LSData.pLSCbtcRouteLgcCheckStru, (UINT32)(sizeof(LS_CbtcRouteLgcCheckStruct) * LSDataLen.LSCbtcRouteLgcCheckStruLen), + (UINT8)0U, (UINT32)(sizeof(LS_CbtcRouteLgcCheckStruct) * LSDataLen.LSCbtcRouteLgcCheckStruLen)); + + for (i = 0U; i < LSDataLen.LSCbtcRouteLgcCheckStruLen; i++) + { + pCbtcRouteLgcStr = LSData.pLSCbtcRouteLgcCheckStru + i; + + /*填充数据到CBTC进路逻辑区段检查结构体*/ + rtnValue = LS_CbtcLgcCheckStruFromChar(pDataAddr, pCbtcRouteLgcStr); + pDataAddr += realRowLen; + + if (CI_SUCCESS != rtnValue) + { + debug_infor_printf((const)"\nRead LS_CBTCROUTELGCCHECK_TABLE Error: Error RowCount %d\n ", (i + 1U)); + rtnValue = CI_ERROR; + break; + } + else + { + /*继续读取*/ + } + } + } + } + } + else + { + LSDataLen.LSCbtcRouteLgcCheckStruLen = 0U; + debug_infor_printf((const)"\nLS_CBTCROUTELGCCHECK_TABLE Warning: DataSize Is Zero.\n "); /*行数为0,返回成功*/ + } + } + } + return rtnValue; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h index 7011f7f..d220c4a 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h @@ -44,6 +44,7 @@ typedef struct S_LSDataStruct LS_ContactLineStruct* pLSContactLineStr; /*逻辑区段关联联络线设备检查条件结构体*/ LS_EachLgcIntrudeStruct* pLSLgcInvEachStru;/*逻辑区段互相侵限表*/ LS_TransRouteZFSigStruct* pLSTransRouteZFSigStru; /*转换轨折返信号机结构体*/ + LS_CbtcRouteLgcCheckStruct* pLSCbtcRouteLgcCheckStru; /*CBTC进路逻辑区段检查结构体*/ }LSDataStruct; /*联锁数据结构*/ typedef struct S_LSDataStructLen @@ -75,6 +76,7 @@ typedef struct S_LSDataStructLen UINT16 LSContactStruLen; /*逻辑区段关联联络线设备检查条件表长度*/ UINT16 LSLgcInvEachLen; /*逻辑区段互相侵限条件表长度*/ UINT16 LSTransRouteZFSigStruLen; /*转换轨折返信号机表长度*/ + UINT16 LSCbtcRouteLgcCheckStruLen; /*CBTC进路逻辑区段检查表长度*/ }LSDataStructLen; /*********定义全局的联锁信息数据变量*******/ @@ -262,5 +264,14 @@ UINT8 InitLS_ContactConfigDataStruct(CHAR* LSDataName); *********************************************/ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName); +/********************************************* +* 函数功能:填充CBTC进路逻辑区段检查数据结构体数组 +* 参数说明:LSDataName指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.25 +*********************************************/ +UINT8 InitLS_CbtcRouteLogSecStru(CHAR* LSDataName); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c index 6d1ad36..6f59977 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c @@ -179,7 +179,7 @@ UINT8 MaskCfgDtStruFrmCIATSSignalMask(UINT8 * FSDataName) MASK_TYPE_SIGNAL_GREEN_YELLOW,MASK_TYPE_SIGNAL_MAINTAINSTATE,MASK_TYPE_SIGNAL_CLOSE_ABNORMAL,MASK_TYPE_SIGNAL_OC_BOARD_FAULT, MASK_TYPE_SIGNAL_CANCEL_DET_ERR,MASK_TYPE_SIGNAL_DET_ERR,MASK_TYPE_SIGNAL_RELAY_DETAIN,MASK_TYPE_SIGNAL_AUTO_DERAIN,0U, MASK_TYPE_SIGNAL_GREENBREAK,MASK_TYPE_SIGNAL_YELLOWBREAK,MASK_TYPE_SIGNAL_WHITEBREAK,MASK_TYPE_SIGNAL_BLUEBREAK, - MASK_TYPE_SIGNAL_DET_CUT_VALID,MASK_TYPE_SIGNAL_DET_CUT_ERR,0U }; + MASK_TYPE_SIGNAL_DET_CUT_VALID,MASK_TYPE_SIGNAL_DET_CUT_ERR,MASK_TYPE_SIGNAL_CROSS_RED,0U }; UINT16 BuChang = 0u; #if 0 funcRtn = dquGetConfigData(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_SIGNAL_MASK_ID,&pDataAddr,&DataSize); @@ -302,7 +302,8 @@ UINT8 MaskCfgDtStruFrmCIATSPsdMask(UINT8* FSDataName) MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID, MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,MASK_TYPE_PSD_JXTC_PANGLU, MASK_TYPE_PSD_PCBPSBDPB_PANGLU_STATE,MASK_TYPE_PSD_PDB_FLASH_STATE, - MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN,0U }; + MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN, + MASK_TYPE_PSD_MUTUALLOCK_BTNERR,0U }; #else UINT8 MaskType[] = { 0u,MASK_TYPE_PSD_STATE_ATS,MASK_TYPE_MUTUALLOCK_STATE,MASK_TYPE_REMORA_STATE, MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID,MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,0 }; #endif @@ -407,8 +408,8 @@ UINT8 MaskCfgDtStruFrmCIATSEsbMask(UINT8* FSDataName) UINT16 rowLen = 0u; UINT16 i = 0U; UINT8 chBreakFlag = 0U; - - UINT8 MaskType[] = { 0u, MASK_TYPE_ESP_STATE, MASK_TYPE_ESS_STEADY_STATE, MASK_TYPE_ESP_FLASH_STATE, MASK_TYPE_CANCEL_ESP_FAULT, MASK_TYPE_ESP_FAULT, MASK_TYPE_CUT_ESP_FAULT, MASK_TYPE_ESP_PRESS_STATE, 0u }; + UINT8 MaskType[] = { 0u, MASK_TYPE_ESP_STATE, MASK_TYPE_ESS_STEADY_STATE, MASK_TYPE_ESP_FLASH_STATE, MASK_TYPE_CANCEL_ESP_FAULT, + MASK_TYPE_ESP_FAULT, MASK_TYPE_CUT_ESP_FAULT, MASK_TYPE_ESP_PRESS_STATE, MASK_TYPE_ESS_STATE,0u }; UINT16 BuChang = 0u; funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_ESB_MASK_ID, &pDataAddr, &DataSize, &realRow); if (funcRtn == 0u) @@ -545,7 +546,14 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName) MASK_TYPE_UPWARD_DIRECTION, MASK_TYPE_DOWNWARD_DIRECTION, MASK_TYPE_LOGICSECTION_ARB, - MASK_TYPE_LOGICSECTION_SPKS_FLOCK,1u}; + MASK_TYPE_LOGICSECTION_SPKS_FLOCK, + MASK_TYPE_LOGICSECTION_ALLSEC_FLOCK, + MASK_TYPE_LOGICSECTION_APG_FLOCK, + MASK_TYPE_LOGICSECTION_PROHIBIT_FAO, + MASK_TYPE_LOGICSECTION_CMD_FLOCK, + MASK_TYPE_LOGICSECTION_ESB_FLOCK, + MASK_TYPE_LOGICSECTION_CESB_FLOCK, + MASK_TYPE_LOGICSECTION_OVERRIDE,1u}; UINT16 BuChang = 0u; funcRtn = dquGetConfigDataNew(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize,&rowCount); if(0u == funcRtn) @@ -1073,15 +1081,10 @@ UINT8 MaskCfgDtStruFrmCIATSPhySecMask(UINT8 * FSDataName) MASK_TYPE_PHYSECTION_PROTECTLOCK, MASK_TYPE_PHYSECTION_FAULTLOCK, MASK_TYPE_AXISSECTION_ARB, -#endif - - MASK_TYPE_PHYSECTION_FLOCK, -#if 0 MASK_TYPE_PHYSECTION_JUMPLOCK, #endif MASK_TYPE_PHYSECTION_PRERESET, - MASK_TYPE_PHYSECTION_UT_OCC, - MASK_TYPE_PHYSEC_FLOCK_SPKS + MASK_TYPE_PHYSECTION_UT_OCC }; UINT16 BuChang = 0u; @@ -1536,6 +1539,133 @@ UINT8 MaskCfgDtStruFrmCIATSFloodGate(UINT8 * FSDataName) return funcRtn; } + +/********************************************* +*函数功能:CI-ATS 限速区段码位 +*参数说明:FSDataName文件件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSSpeedSec(UINT8* FSDataName) { + UINT8 funcRtn = 0u; + UINT8* pDataAddr, * pDataLin; + UINT32 DataSize = 0u; + UINT16 MaskRow = 0u; + UINT16 DeviceID = 0u; + UINT16 residue = 0u; + UINT16 tempMaskId = 0u; /*码位ID临时变量*/ + UINT16 rowCount = 0u; + UINT8 rowLenth = 0u;/*行字节数*/ + + UINT8 MaskType[] = { + 0u, + MASK_TYPE_SPEEDLIMITSEC_STATE, /*CI-ATS限速区段临时限速设置码位*/ + MASK_TYPE_SPEEDLIMITTF_STATE, /*CI-ATS限速区段台风限速设置码位*/ + MASK_TYPE_SPEEDLIMITTNR_STATE, /*CI-ATS限速区段NR限速设置码位*/ + MASK_TYPE_SPEEDLIMITQX_STATE, /*CI-ATS限速区段全线临时限速设置码位*/ + 0u + }; + UINT16 BuChang = 0u; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_SPEEDLIMITSEC_MASK_ID, &pDataAddr, &DataSize, &rowCount); + if (0U == funcRtn) + { + funcRtn = CI_ERROR; + } + else + { + funcRtn = CI_SUCCESS; + if ((0u < DataSize) && (0u < rowCount)) + { + if (0u == DataSize % rowCount) + { + /*一行字节数*/ + rowLenth = (UINT8)(DataSize / rowCount); + for (; DataSize > 0u; DataSize -= 2u) + { + residue = (UINT16)(BuChang % ((UINT16)rowLenth / 2U)); + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + + pDataLin = pDataAddr + rowLenth - 2u; + MaskRow = ShortFromChar(pDataLin); + + /*访问数组不能越界,越界直接返回失败*/ + if (CI_SUM_MAX > MaskRow) + { + pDataAddr += 2u; + BuChang++; + } + else + { + funcRtn = CI_ERROR; + } + } + else if (residue < (UINT16)((rowLenth / 2u) - 1u)) + { + /*获取码位ID*/ + tempMaskId = ShortFromChar(pDataAddr); + + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + /*0和0xFFFF是无效的码位*/ + if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*检查是否为有效码位值*/ + { + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_SPEEDLIMIT; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % ((UINT16)rowLenth / 2u)]); + + + /*统计最大的有效码位*/ + if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow]) + { + ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToAtsMaskCurSum[MaskRow]++; + } + else + { + funcRtn = CI_ERROR; + } + } + + pDataAddr += 2u; + BuChang++; + } + else + { + pDataAddr += 2u; + BuChang++; + } + + if (CI_ERROR == funcRtn) + { + break; + } + else + { + ; + } + } + } + else + { + funcRtn = CI_ERROR; + } + } + else + { + funcRtn = CI_SUCCESS; + } + } + return funcRtn; +} + /********************************************* *函数功能:CI-ATS 车库门状态码位 *参数说明:FSDataName件指针 @@ -4192,6 +4322,10 @@ UINT8 MaskInit(UINT8 * FSDataName) /*CI-ATS 防淹门码位*/ funcRtn *= MaskCfgDtStruFrmCIATSFloodGate(FSDataName); + /*CI-ATS 限速区段码位*/ + funcRtn *= MaskCfgDtStruFrmCIATSSpeedSec(FSDataName); + + /* zt 删除单轨相关代码 2022-02-15 */ /***** diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h index 4d83842..d1483cb 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h @@ -108,7 +108,7 @@ #define CI_ATS_AUTO_ROUTE_MASK_ID ((UINT32)8) /*CI-ATS自动通过进路码位*/ #define CI_ATS_AUTO_ROUTE_MASK_LEN ((UINT32)6) /*CI-ATS自动通过进路码位字节长度--1行长度*/ #define CI_ATS_PHYSEC_MASK_ID ((UINT32)9) /*CI-ATS物理区码位*/ -#define CI_ATS_PHYSEC_MASK_LEN ((UINT32)14) /*CI-ATS物理区码位字节长度--1行长度*/ +#define CI_ATS_PHYSEC_MASK_LEN ((UINT32)10) /*CI-ATS物理区码位字节长度*/ #define CI_ATS_SPKS_MASK_ID ((UINT32)10) /*CI-ATS SPKS开关状态码位*/ #define CI_ATS_SPKS_MASK_LEN ((UINT32)8) /*CI-ATS SPKS开关状态码位字节长度--1行长度;2018.03.19 由6改为8,CI_ATS SPKS开关码位表增加一列开关旁路状态码位*/ @@ -123,7 +123,9 @@ #define CI_ATS_GARAGEDOOR_MASK_LEN ((UINT32)14) /*CI-ATS 车库门状态码位字节长度--1行长度*/ #define CI_ATS_FLOODGATE_MASK_ID ((UINT32)24) /*CI_ATS防淹门码位*/ +#define CI_ATS_SPEEDLIMITSEC_MASK_ID ((UINT32)25) /*CI_ATS限速区段码位*/ #define CI_ATS_FLOODGATE_MASK_LEN ((UINT32)10) /*CI_ATS防淹门码位字节长度--1行长度*/ +#define CI_ATS_SPEEDLIMIT_MASK_LEN ((UINT32)12) /*CI_ATS限速区段码位字节长度--1行长度*/ /* zt 删除单轨相关代码 2022-02-15 */ @@ -223,6 +225,13 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName); *********************************************/ UINT8 MaskCfgDtStruFrmCIATSFloodGate(UINT8 * FSDataName); +/********************************************* +*函数功能:CI-ATS 限速区段码位 +*参数说明:FSDataName文件件指针 +*返回值:0,失败;1,成功 +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSSpeedSec(UINT8* FSDataName); + /********************************************* *函数功能:CI-ATS 车库门状态码位 *参数说明:FSDataName件指针 diff --git a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h index 05afa28..bfa7214 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h @@ -107,7 +107,7 @@ #define LEN_OC_SWITCH ((UINT8)8) /*道岔继电器配置表*/ #define OC_SWITCH_RELAY_ID ((UINT8)4) -#define LEN_OC_SWITCH_RELAY ((UINT8)24) +#define LEN_OC_SWITCH_RELAY ((UINT8)27) /*信号机配置表*/ #define OC_SIGNAL_ID ((UINT8)5) #define LEN_OC_SIGNAL ((UINT8)24) @@ -133,10 +133,22 @@ #define OC_RELAY_EMERG_STOP_ID ((UINT8)12) #define OC_LEN_EMERG_STOP ((UINT8)22) +/*全线紧急停车按钮继电器表ID*/ +#define OC_RELAY_CENTER_ESB_ID ((UINT8)44) + /* SPKS继电器表 */ #define OC_RELAY_SPKS_ID ((UINT8)13) #define OC_LEN_RELAY_SPKS ((UINT8)14) +/*SSKS闪灯稳灯继电器表*/ +#define OC_RELAY_SSKS_LIGHT_ID ((UINT8)42) + +/*联络线旁路继电器表*/ +#define OC_CONNECT_OVERRIDE_ID ((UINT8)46) + +/*ECS继电器表*/ +#define OC_RELAY_ECS_ID ((UINT8)43U) + /* 门禁解锁继电器表 */ #define OC_RELAY_MJ_ID ((UINT8)32) /* 门禁 表单编号32*/ #define OC_LEN_RELAY_MJ ((UINT8)13) @@ -188,12 +200,18 @@ /*OC 联络线接口继电器配置表*/ #define OC_LIAISON_RELAY_ID ((UINT8)28) +/*联络线逻辑区段继电器条件表*/ +#define CONNECT_LOGSEC_COND_ID ((UINT8)45) + #define OC_RELAY_REVERSE_CUT_ID ((UINT8)30) #define OC_LEN_REVERSE_CUT ((UINT8)2) /*调车同意继电器表ID*/ #define OC_RELAY_DCAGREE_ID ((UINT8)36) +/*接触网继电器表*/ +#define OC_RELAY_OHL_ID ((UINT16)41) + /*紧急停车按钮继电器结构体*/ typedef struct S_Relay_EmegencyStopStruct { @@ -214,6 +232,15 @@ typedef struct S_Relay_EmegencyStopStruct UINT16 wCutoffEsbBuzzRelayId; /*切除蜂鸣器报警继电器ID*/ } Relay_EmgcyStpStruct; +/*CESB按钮继电器结构体*/ +typedef struct S_Relay_CESBStruct +{ + UINT16 wCesbBtnId; /*紧急停车按钮ID*/ + UINT16 wOcId; /*OC ID*/ + UINT16 wCesbRelayId; /*复示紧急停车按钮继电器ID*/ + UINT16 wCesbCutRelayId; /*紧急停车旁路按钮继电器ID*/ +} Relay_CesbStruct; + /*屏蔽门继电器结构体*/ typedef struct S_Relay_ScreenStruct { @@ -274,6 +301,8 @@ typedef struct S_Relay_PointStruct UINT16 wRelayFanCaoId; /*反操继电器ID*/ UINT16 wRelayZongDingBiaoId; /*总定表继电器ID*/ UINT16 wRelayZongFanBiaoId; /*总定表继电器ID*/ + UINT16 wExtraPhySecId; /*道岔动作额外检查物理区段ID*/ + UINT8 chNormalPos; /*道岔常态位置*/ /*以下为单轨道岔相关继电器*/ UINT16 wGZJId; /*故障继电器ID (配置字段)*/ UINT16 wJTYJaId; /*现场状态继电器ID (配置字段)*/ @@ -395,6 +424,37 @@ typedef struct SRelaySpksStruct UINT16 outsideRelayId; /*室外spks表示灯继电器*/ } RelaySpksStruct; +/*SSKS闪灯稳灯继电器结构体*/ +typedef struct S_RelaySsksLightStruct +{ + UINT16 SsksLightRelayId; /*SSKS闪灯稳灯继电器ID*/ + UINT16 BelongOcId; /*继电器所属OID*/ + UINT8 RelEnterRouteNum; /*关联驶入存车线的进路数量*/ + UINT16 RelEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]; /*关联驶入存车线的进路ID数组*/ + UINT8 RelExportRouteNum; /*关联驶出存车线的进路数量*/ + UINT16 RelExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]; /*关联驶出存车线的进路ID数组*/ +} RelaySsksLightStruct; + +/*联络线旁路继电器结构体*/ +typedef struct S_ConnectOverrideStruct +{ + UINT16 ConnectOverrideId; /*联络线旁路索引编号*/ + UINT16 BelongOcId; /*继电器所属OC ID*/ + UINT16 OverrideRelayId; /*联络线旁路开关采集继电器ID*/ + UINT16 RelPhySecId; /*关联物理区段ID*/ + UINT16 RelRouteRequestRelayId; /*关联进路请求继电器ID*/ + UINT16 RelSwitchId; /*关联道岔ID*/ +} ConnectOverrideStruct; + +/*ECS继电器结构体*/ +typedef struct S_RelayEcsStruct +{ + UINT16 EcsId; /*ECS ID*/ + UINT16 BelongOcId; /*继电器所属OID*/ + UINT16 FanUpRelayId; /*风向为逻辑正方向继电器ID*/ + UINT16 FanDownRelayId; /*风向为逻辑反方向继电器ID*/ +} RelayEcsStruct; + /* 门禁数据结构体 */ typedef struct S_Relay_MJStruct { @@ -458,4 +518,14 @@ typedef struct S_Relay_ReverseCutStruct UINT16 wReverseCutRelayId; /*倒切继电器ID*/ }Relay_ReverseCutStruct; +typedef struct S_Relay_OhlStruct +{ + UINT16 wOhlId; /*接触网分区ID*/ + UINT16 wBelongOcId; /*所属OC ID*/ + UINT8 chBelongCiId; /*所属CI ID*/ + UINT8 chRelayGroupNum; /*接触网继电器组数*/ + UINT16 wEnergizedId[OHL_GROUP_MAX_NUM]; /*有电继电器ID*/ + UINT16 wDeEnergizedId[OHL_GROUP_MAX_NUM]; /*断电继电器ID*/ +}Relay_OhlStruct; + #endif diff --git a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c index 5215b5f..32cdadf 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c @@ -27,18 +27,21 @@ RelayConfigDataStruct RelayConfigDataStru[RELAY_SUM_MAX] = {0u}; /* UINT16 LocalCiRelayIdBuf[RELAY_SUM_MAX] = {0u}; /*定义本地联锁继电器ID映射数组*/ INT16 RelayCurSum = 0; /*继电器当前总数*/ -BoardDataStruct CiCollBoardDataStru[BOARD_SUM_MAX]; /*定义采集板数据结构体数组*/ -UINT16 CiCollBoardCurSum = 0u; /*定义采集板当前总数*/ +BoardDataStruct CiCollBoardDataStru[BOARD_SUM_MAX]; /*定义采集板数据结构体数组*/ +UINT16 CiCollBoardCurSum = 0u; /*定义采集板当前总数*/ -BoardDataStruct CiDrvBoardDataStru[BOARD_SUM_MAX]; /*定义驱动板数据结构体数组*/ -UINT16 CiDrvBoardCurSum = 0u; /*定义驱动板当前总数*/ -ZhaochaCheckConfigDataStruct ZhaochaCheckConfigDataStru[ZHAOCHA_CHECK_SUM_MAX] = {0u};/*照查继电器联锁条件检查数据结构体数组*/ +BoardDataStruct CiDrvBoardDataStru[BOARD_SUM_MAX]; /*定义驱动板数据结构体数组*/ +UINT16 CiDrvBoardCurSum = 0u; /*定义驱动板当前总数*/ +ZhaochaCheckConfigDataStruct ZhaochaCheckConfigDataStru[ZHAOCHA_CHECK_SUM_MAX] = {0u}; /*照查继电器联锁条件检查数据结构体数组*/ /*新增,照查联锁检查条件照查继电器ID数量*/ UINT16 CiCheckZhaoChaRelayNum = 0u; -OcConnetDataCfgStruct OcConnetDataCfgStru[OC_LIAISON_DEV_SUM_MAX] = {0u}; /*联络线接口继电器配置表数组*/ +OcConnetDataCfgStruct OcConnetDataCfgStru[OC_LIAISON_DEV_SUM_MAX] = {0u}; /*联络线接口继电器配置表数组*/ UINT16 OcConnetDataDevNum = 0u; +ConnectLogSecDataCfgStru ConnectLogSecCondCfgStru[OC_CONNECT_LOGSEC_COND_SUM_MAX] = { 0u }; /*联络线逻辑区段继电器条件配置表数组*/ +UINT16 ConnectLogSecCondDevNum = 0u; + /********************OC相关******************/ OcDrvBoardDataStruct LocalCIOcDrvBoardConfigDataArr[OC_SUM_MAX];/*定义本联锁相关的OC板卡配置数据*/ UINT8 LocalCiOcSum = 0U; diff --git a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h index 4d62390..039ea82 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h @@ -118,8 +118,13 @@ typedef struct S_OcConnetDataCfgStruct UINT8 DevIsThisLine; /*设备是否本线路*/ }OcConnetDataCfgStruct; - - +/*联络线逻辑区段继电器条件配置表数据*/ +typedef struct S_ConnectLogSecDataCfgStru +{ + UINT16 LogSecId; /*逻辑区段ID*/ + UINT16 RelSecDirLockRelayId; /*关联方向锁闭继电器ID*/ + UINT16 RelRoutePrtlRelayId; /*关联进路协议继电器ID*/ +}ConnectLogSecDataCfgStru; /*****************OC相关**********************/ @@ -142,6 +147,9 @@ extern OcConnetDataCfgStruct OcConnetDataCfgStru[OC_LIAISON_DEV_SUM_MAX]; /* /*OC 联络线接口继电器配置表设备数量*/ extern UINT16 OcConnetDataDevNum; +extern ConnectLogSecDataCfgStru ConnectLogSecCondCfgStru[OC_CONNECT_LOGSEC_COND_SUM_MAX]; /*联络线逻辑区段继电器条件配置表数组*/ +extern UINT16 ConnectLogSecCondDevNum; + /*********************新加的:修复processiotoci耗时*****************/ extern BoardConfigStruct BoardConfigForeNodeA[OC_SUM_MAX][BOARD_MAX_ADDR];/*前节点A系板卡*/ extern BoardConfigStruct BoardConfigForeNodeB[OC_SUM_MAX][BOARD_MAX_ADDR];/*前节点B系板卡*/ diff --git a/TSCP/src/APP/ciapp/Relay/RelayDefine.h b/TSCP/src/APP/ciapp/Relay/RelayDefine.h index eac7507..fe833ee 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayDefine.h +++ b/TSCP/src/APP/ciapp/Relay/RelayDefine.h @@ -21,35 +21,35 @@ /*最大值定义*/ -#define RELAY_SUM_MAX ((UINT16)5000) /*定义继电器数量最大值*/ -#define BOARD_SUM_MAX ((UINT16)240) /*定义一个联锁站采集驱动板数目最大值*/ -#define BOARD_POS_MAX ((UINT16)40) /*定义一块电路板采集驱动点数目最大值*/ -#define ZHAOCHA_CHECK_SUM_MAX ((UINT16)50) /*照查继电器联锁条件检查表照查继电器数最大值*/ -#define ZHAOCHA_CHECK_TYPE_SUN_MAX ((UINT16)10) /*照查继电器联锁条件检查类型数最大值*/ +#define RELAY_SUM_MAX ((UINT16)5000) /*定义继电器数量最大值*/ +#define BOARD_SUM_MAX ((UINT16)240) /*定义一个联锁站采集驱动板数目最大值*/ +#define BOARD_POS_MAX ((UINT16)40) /*定义一块电路板采集驱动点数目最大值*/ +#define ZHAOCHA_CHECK_SUM_MAX ((UINT16)50) /*照查继电器联锁条件检查表照查继电器数最大值*/ +#define ZHAOCHA_CHECK_TYPE_SUN_MAX ((UINT16)10) /*照查继电器联锁条件检查类型数最大值*/ -#define BOARD_COLL_POS_NUM ((UINT16)32) /*定义采集板上采集点数量*/ -#define BOARD_DRV_POS_NUM ((UINT16)16) /*定义驱动板上驱动点数量*/ -#define BOARD_COLL_DATA_LEN ((UINT16)4) /*定义采集板上采集数据字节数*/ -#define BOARD_DRV_DATA_LEN ((UINT16)2) /*定义驱动板上驱动数据字节数*/ +#define BOARD_COLL_POS_NUM ((UINT16)32) /*定义采集板上采集点数量*/ +#define BOARD_DRV_POS_NUM ((UINT16)16) /*定义驱动板上驱动点数量*/ +#define BOARD_COLL_DATA_LEN ((UINT16)4) /*定义采集板上采集数据字节数*/ +#define BOARD_DRV_DATA_LEN ((UINT16)2) /*定义驱动板上驱动数据字节数*/ -#define IO_COLL_DIFF_MAX ((UINT8)254) /*定义IO双系采集比较不一致点位的最大值*/ -#define POINTTOLERATE_CYCNUM ((UINT8)7) /*IO双系采集不一致最大容忍周期数*/ +#define IO_COLL_DIFF_MAX ((UINT8)254) /*定义IO双系采集比较不一致点位的最大值*/ /************************OC*************************/ -#define OC_BOARD_SUM_MAX ((UINT8)44) /*一个OC对应最大44块板*/ -#define OC_COLL_BOARD_POS_NUM ((UINT16)40) /*定义一块OC电路板采集点数目最大值*/ -#define OC_LIAISON_RELAY_SUM_MAX ((UINT16)3) /*定义联络线接口继电器类型最大值*/ -#define OC_LIAISON_DEV_SUM_MAX ((UINT16)100) /*定义联络线接口继电器最大设备数*/ +#define OC_BOARD_SUM_MAX ((UINT8)44) /*一个OC对应最大44块板*/ +#define OC_COLL_BOARD_POS_NUM ((UINT16)40) /*定义一块OC电路板采集点数目最大值*/ +#define OC_LIAISON_RELAY_SUM_MAX ((UINT16)3) /*定义联络线接口继电器类型最大值*/ +#define OC_LIAISON_DEV_SUM_MAX ((UINT16)100) /*定义联络线接口继电器最大设备数*/ +#define OC_CONNECT_LOGSEC_COND_SUM_MAX ((UINT16)100) /*定义联络线逻辑区段继电器条件表最大设备数*/ /*继电器状态*/ -#define RELAY_STATE_DOWN ((UINT8)0x55) /*落下*/ -#define RELAY_STATE_UP ((UINT8)0xaa) /*吸起*/ +#define RELAY_STATE_DOWN ((UINT8)0x55) /*落下*/ +#define RELAY_STATE_UP ((UINT8)0xaa) /*吸起*/ /*继电器驱动状态*/ -#define RELAY_DRIVE_STATE_DOWN ((UINT8)0x55) /*落下*/ -#define RELAY_DRIVE_STATE_UP ((UINT8)0xaa) /*吸起*/ -#define RELAY_DRIVE_STATE_NULL ((UINT8)0xFF) /*无效*/ +#define RELAY_DRIVE_STATE_DOWN ((UINT8)0x55) /*落下*/ +#define RELAY_DRIVE_STATE_UP ((UINT8)0xaa) /*吸起*/ +#define RELAY_DRIVE_STATE_NULL ((UINT8)0xFF) /*无效*/ /*继电器采集描述*/ @@ -96,6 +96,8 @@ #define SIGNAL_YXJ_TYPE ((UINT8)0x09) /*YXJ继电器*/ #define SIGNAL_DXJ_TYPE ((UINT8)0x0A) /*DXJ继电器*/ #define CHECK_ZCJ_TYPE ((UINT8)0x0B) /*ZCJ继电器*/ +#define SWITCH_RWM_TYPE ((UINT8)0x0D) /*道岔反位使能请求继电器(RWM)*/ +#define SWITCH_ENABLE_BYPASS_TYPE ((UINT8)0x0E) /*道岔反位使能开关(Enable Bypass)*/ /*继电器混线相关*/ #define RELAY_HUNXIAN_NUM ((UINT8)10) /*继电器混线容忍最大周期*/ diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c index 4f6f56c..3ef8fce 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c @@ -715,9 +715,11 @@ UINT8 rrm_PrepareOriginSigStatOfRoute(UINT16 routeID) UINT16 sigId = 0u; UINT8 sigColor = 0u; UINT8 sigStatus = SIGNAL_CLOSE; - + UINT8 signalVirtualAttr = 0u; + UINT8 GreenDsBreakFlag = 0u; /*绿灯丝断丝标志*/ + UINT8 chDsnSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); sigId = GetRouteStartSignalId(routeID); - + if (0u == sigId) { /** 查询失败*/ @@ -728,8 +730,30 @@ UINT8 rrm_PrepareOriginSigStatOfRoute(UINT16 routeID) sigColor = GetSignalCurColor(sigId); sigStatus = GetSignalOpenCloseState(sigColor); + /** 设置函数返回值 */ - ASSERT_SETRET(SIGNAL_OPEN == sigStatus,ret,CI_SUCCESS,CI_ERROR); + ASSERT_SETRET(SIGNAL_OPEN == sigStatus, ret, CI_SUCCESS, CI_ERROR); + + if (FUNC_SWITCH_ON == chDsnSwitch) + { + + signalVirtualAttr = GetSignalVirtualAttr(sigId);/*获取信号机虚拟属性*/ + + GreenDsBreakFlag = GetSignalGreenDsBreakFlag(sigId); + /* 蓝灯断丝收回控权 */ + if ((SIGNAL_DS_BREAK_YES == GreenDsBreakFlag) &&(SIGNAL_VIRTUAL_YES != signalVirtualAttr)) + { + ret = CI_ERROR; + } + else + { + /* 不处理 */ + } + } + else + { + /** 不处理 */ + } } return ret; } @@ -814,26 +838,144 @@ void rrm_PrepareACLockStatAndDir(UINT16 ACID,UINT8 flag,OUT UINT8* pLockStat,OUT /** * @brief 获取计轴区段封锁状态和封锁原因 - * @param[in] UINT16 acID 计轴区段ID + * @param[in] UINT16 acID 计轴区段ID UINT16 trainID列车ID * @param[out] UINT8 *pFlockStatus 封锁状态 * @param[out] UINT8 *pFlockType 封锁原因 * @return 无 * @note */ -void rrm_PrepareACFLockStatusAndType(UINT16 acID,OUT UINT8 *pFlockStatus,OUT UINT8 *pFlockType) +void rrm_PrepareACFLockStatusAndType(UINT16 acID,OUT UINT8 *pFlockStatus,OUT UINT8 *pFlockType, UINT16 trainID) { - UINT16 phyID = 0u; - + UINT8 i = 0U; + UINT8 jj = 0U; + UINT8 chLogSecCnt = 0U; + const UINT16* pLogSecCntBuff = NULL; + UINT8 chLogFlockType = 0U;/*逻辑区段封锁类型*/ + UINT16 wBreakLogSec = 0U;/*封锁逻辑区段*/ + UINT8 chShareSwitchNum = 0U;/*共用道岔区段个数*/ + UINT16* plogSecIdPBuf = NULL;/*共用道岔数组*/ + UINT16 logSectionId = 0U; + UINT16 wTrainMinTailLink = 0U; + UINT32 dwTrainMinTailOff = 0U; + struct_PathPoint stTrainTailPoint = { 0U }; + UINT16 wMinTailBelongLogSec = 0U; /*小后所在逻辑区段ID*/ + UINT16 CheckLogFlag[AXIS_INCLUDE_LOG_SUM_MAX] = { 0U }; /*是否检查标志*/ + UINT8 chDir = 0U; /*列车运行逻辑方向*/ /** 入口参数校验 */ ASSERT_RET_NO_VALUE(NULL == pFlockStatus,0x80000000u); ASSERT_RET_NO_VALUE(NULL == pFlockType,0x40000000u); /** 通过计轴区段获取获取区段ID */ - phyID = GetAxisSecRelativePhySecId(acID); + chLogSecCnt = GetAxisSecLogSectionSum(acID); + pLogSecCntBuff = GetAxisSecLogSectionIdBuf(acID); /** 获取封锁状态和封锁类型 */ - (*pFlockStatus) = GetPhySecFLockState(phyID); - (*pFlockType) = GetPhySecFLockType(phyID); + if ((0u == chLogSecCnt) || (NULL == pLogSecCntBuff)) + { + (*pFlockStatus) = PHYSICAL_SECTION_FLOCK_YES; + (*pFlockType) = SEC_FLOCK_TYPE_CMD; + } + else + { + (*pFlockStatus) = PHYSICAL_SECTION_FLOCK_NO; + (*pFlockType) = SEC_FLOCK_TYPE_NONE; + wTrainMinTailLink = GetTrainMinTailLink(trainID); + dwTrainMinTailOff = GetTrainMinTailOffset(trainID); + stTrainTailPoint.wLinkId = wTrainMinTailLink; + stTrainTailPoint.dwOffset = dwTrainMinTailOff; + wMinTailBelongLogSec = GetPointBelongLogSec(stTrainTailPoint); + chDir = GetTrainDir(trainID); + if ((0U == wTrainMinTailLink) + ||((DIR_CONVERT != chDir)&&(DIR_SAME != chDir))) + { + /*方向或位置获取失败,计轴所有逻辑区段全查*/ + } + else + { + /*仅查找脚下及前方区段*/ + for (i = 0U; i < chLogSecCnt; i++) + { + if (pLogSecCntBuff[i] == wMinTailBelongLogSec) + {/*找到索引*/ + break; + } + } + if (i != chLogSecCnt) + { + /*车在当前计轴,不找车后*/ + if (DIR_SAME == chDir) + { + /*前方不查*/ + for (jj = 0U; jj < i; jj++) + { + CheckLogFlag[jj] = UINT8_MAX; + } + } + else + { + /*只查前面*/ + for (jj = i+1U; jj < chLogSecCnt; jj++) + { + CheckLogFlag[jj] = UINT8_MAX; + } + } + } + } + for (i = 0U; i < chLogSecCnt; i++) + { + if (0U == CheckLogFlag[i]) + { + logSectionId = pLogSecCntBuff[i]; + chLogFlockType = GetLogSecFLockType(logSectionId); + if (SEC_FLOCK_TYPE_NONE != chLogFlockType) + { + /*返回对应封锁类型*/ + (*pFlockStatus) = PHYSICAL_SECTION_FLOCK_YES; + (*pFlockType) = chLogFlockType; + wBreakLogSec = logSectionId; + + } + else + { + chShareSwitchNum = GetLogSecSameSwitchSecSum(logSectionId); + plogSecIdPBuf = GetLogSecSameSwitchSecId(logSectionId); + if ((PHYSICAL_INCLUDE_AXIS_SUM_MAX > chShareSwitchNum) && (NULL != plogSecIdPBuf)) + { + /*检查与逻辑区段共用道岔的逻辑区段封锁状态*/ + for (jj = 0U; jj < chShareSwitchNum; jj++) + { + chLogFlockType = GetLogSecFLockType(plogSecIdPBuf[jj]);/*逻辑区段封锁*/ + if (SEC_FLOCK_TYPE_NONE != chLogFlockType) + { + /*返回对应封锁类型*/ + (*pFlockStatus) = PHYSICAL_SECTION_FLOCK_YES; + (*pFlockType) = chLogFlockType; + wBreakLogSec = plogSecIdPBuf[jj]; + break; + } + } + } + else + { + /*获取失败返回封锁*/ + (*pFlockStatus) = PHYSICAL_SECTION_FLOCK_YES; + (*pFlockType) = SEC_FLOCK_TYPE_CMD; + wBreakLogSec = logSectionId; + } + } + if (0U != wBreakLogSec) + { + ASSER_DEBUG(0U != wBreakLogSec, RRM_LOG(RRM_LOG_ERROR, "rrm_PrepareACFLockStatusAndType Sec:%d Fail \n", wBreakLogSec)); + break;/*跳出*/ + } + } + else + { + /*列车在本计轴 忽略车后方区段*/ + } + } + } + } @@ -1581,4 +1723,145 @@ UINT8 rrm_PrepareAtsLgcStaIsOwn(const UINT16 wAtsLgcStaId) } return retVal; +} + +/** + * @brief 获取计轴上关联的逻辑区段禁止FAO运行状态 + * @param[in] UINT16 acID 计轴区段ID + * @param[in] UINT16 cycle 循环次数 + * @param[in] UINT16 trainID 车ID + * @param[out] 无 + * @return UINT8 + CI_SUCCESS 禁止FAO运行状态检查通过 + CI_ERROR 禁止FAO运行状态检查不通过 + */ +UINT8 rrm_PrepareProhibitOfAC(UINT16 acID, UINT16 cycle, UINT16 trainID) +{ + UINT8 ret = CI_ERROR; + UINT8 chLgcNum = 0U; /*逻辑区段数目*/ + const UINT16* pLgcIdBuf = NULL; /*逻辑区段ID序列*/ + UINT16 wTrainMinTailLink = 0U; + UINT32 dwTrainMinTailOff = 0U; + struct_PathPoint stTrainTailPoint = { 0U }; + UINT16 wMinTailBelongLogSec = 0U; /*小后所在逻辑区段ID*/ + UINT8 ii = 0U; /*游标*/ + UINT8 jj = 0U; /*游标*/ + UINT8 chLogSecProhibit = 0U; /*禁止FAO运行状态*/ + UINT8 chDir = 0U; /*列车运行逻辑方向*/ + UINT8 checkFlag = 0U;/*是否查询计轴区段包含的所有逻辑区段标志*/ + + chLgcNum = GetAxisSecLogSectionSum(acID); + pLgcIdBuf = GetAxisSecLogSectionIdBuf(acID); + + wTrainMinTailLink = GetTrainMinTailLink(trainID); + dwTrainMinTailOff = GetTrainMinTailOffset(trainID); + + if ((0U == chLgcNum) || (NULL == pLgcIdBuf)) + { + /*防护异常*/ + + } + else + { + if (0U == wTrainMinTailLink) + {/*无位置,查计轴区段的所有逻辑区段*/ + checkFlag = 1U; + } + else + {/*有位置*/ + if (0U == cycle) + { + /*cycle = 0,此时查列车脚下及之后的逻辑区段(当前计轴区段)*/ + /*查询点所属逻辑区段*/ + stTrainTailPoint.wLinkId = wTrainMinTailLink; + stTrainTailPoint.dwOffset = dwTrainMinTailOff; + wMinTailBelongLogSec = GetPointBelongLogSec(stTrainTailPoint); + + /*找到点所属逻辑区段在pLgcIdBuf的索引*/ + for (ii = 0U; ii < chLgcNum; ii++) + { + if (pLgcIdBuf[ii] == wMinTailBelongLogSec) + {/*找到索引*/ + break; + } + } + + if (ii != chLgcNum) + {/*防止没找到*/ + /*获取列车运行逻辑方向*/ + chDir = GetTrainDir(trainID); + if (DIR_SAME == chDir) + {/*与逻辑方向相同*/ + for (jj = ii; jj < chLgcNum; jj++) + { + chLogSecProhibit = GetLogSecProhibitFAOState(pLgcIdBuf[jj]); + if (LOGSEC_PROHIBIT_FAO_YES == chLogSecProhibit) + {/*存在禁止FAO运行*/ + ret = CI_ERROR; + break; + } + else + {/*继续查*/ + } + } + /*根据是否有禁止FAO运行区段返回通过或不通过*/ + if (jj == chLgcNum) + { + ret = CI_SUCCESS; + } + } + else if (DIR_CONVERT == chDir) + {/*与逻辑方向相反*/ + for (jj = 0U; jj < ii + 1U; jj++) + { + chLogSecProhibit = GetLogSecProhibitFAOState(pLgcIdBuf[jj]); + if (LOGSEC_PROHIBIT_FAO_YES == chLogSecProhibit) + {/*存在禁止FAO运行*/ + ret = CI_ERROR; + break; + } + else + {/*继续查*/ + } + } + /*根据是否有禁止FAO运行区段返回通过或不通过*/ + if (jj == (ii + 1U)) + { + ret = CI_SUCCESS; + } + } + else + {/*不处理*/ + } + } + } + else + {/*查当前计轴区段的所有逻辑区段*/ + checkFlag = 1U; + } + } + if (1U == checkFlag) + { + for (ii = 0U; ii < chLgcNum; ii++) + {/*遍历该计轴区段的所有逻辑区段*/ + chLogSecProhibit = GetLogSecProhibitFAOState(pLgcIdBuf[ii]); + if (LOGSEC_PROHIBIT_FAO_YES == chLogSecProhibit) + {/*存在禁止FAO运行*/ + ret = CI_ERROR; + break; + } + else + {/*继续查*/ + } + } + /*根据是否有禁止FAO运行区段返回通过或不通过*/ + if (ii == chLgcNum) + { + ret = CI_SUCCESS; + } + } + + } + + return ret; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.h b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.h index 92ca297..b524212 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.h +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.h @@ -282,13 +282,13 @@ void rrm_PrepareACLockStatAndDir(UINT16 ACID,UINT8 flag,OUT UINT8* pLockStat,OUT /** * @brief 获取计轴区段封锁状态和封锁原因 - * @param[in] UINT16 acID 计轴区段ID + * @param[in] UINT16 acID 计轴区段ID UINT16 trainID 列车ID * @param[out] UINT8 *pFlockStatus 封锁状态 * @param[out] UINT8 *pFlockType 封锁原因 * @return 无 * @note 无 */ - void rrm_PrepareACFLockStatusAndType(UINT16 acID,OUT UINT8 *pFlockStatus,OUT UINT8 *pFlockType); + void rrm_PrepareACFLockStatusAndType(UINT16 acID,OUT UINT8 *pFlockStatus,OUT UINT8 *pFlockType, UINT16 trainID); /** * @brief 获取计轴关联的道岔位置是否正确 @@ -438,6 +438,18 @@ UINT8 rrm_CfpTrainApplyCheck(const UINT16 wTrainID, IN const EnvelopeStruct* pTe */ UINT8 rrm_PrepareAtsLgcStaIsOwn(const UINT16 wAtsLgcStaId); +/** + * @brief 获取计轴上关联的逻辑区段禁止FAO运行状态 + * @param[in] UINT16 acID 计轴区段ID + * @param[in] UINT16 cycle 循环次数 + * @param[in] UINT16 trainID 车ID + * @param[out] 无 + * @return UINT8 + CI_SUCCESS 禁止FAO运行状态检查通过 + CI_ERROR 禁止FAO运行状态检查不通过 + */ +UINT8 rrm_PrepareProhibitOfAC(UINT16 acID, UINT16 cycle, UINT16 trainID); + #endif diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c index 4f18693..05b3f28 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c @@ -96,7 +96,6 @@ static UINT8 rrm_CheckObsAndSafeProtect(UINT8 funValid,UINT16 trainID,IN const R UINT16 cycle = 0u; UINT8 FlockStatus = ELM_AC_OCC; UINT8 FlockType = SEC_LOCK_ERROR; - /** 入口参数校验 */ ASSERT_RET_VALUE(NULL == pACSeq,ret,0x80000000u); ASSERT_RET_VALUE(NULL == rrmReason,ret,0x40000000u); @@ -110,7 +109,7 @@ static UINT8 rrm_CheckObsAndSafeProtect(UINT8 funValid,UINT16 trainID,IN const R for(cycle = 0u; cycle < pACSeq->acCnt;cycle++) { /** 获取区段的封锁状态及封锁类型 */ - rrm_PrepareACFLockStatusAndType(pACSeq->ACID[cycle],&FlockStatus,&FlockType); + rrm_PrepareACFLockStatusAndType(pACSeq->ACID[cycle],&FlockStatus,&FlockType,trainID); if (PHYSICAL_SECTION_FLOCK_NO == FlockStatus) { /** 区段未封锁,ESB是否按下 */ @@ -192,10 +191,23 @@ static UINT8 rrm_CheckObsAndSafeProtect(UINT8 funValid,UINT16 trainID,IN const R /** 继续遍历 */ } + /** 获取区段是否存在禁止FAO运行 */ + funRtn = rrm_PrepareProhibitOfAC(pACSeq->ACID[cycle], cycle, trainID); + if (CI_ERROR == funRtn) + { + *rrmReason = TRAIN_RRM_RESON_18; + errorCode += 0x00400000u; + break; + } + else + { + /** 继续遍历 */ + } + } else { - if (PHY_SEC_FLOCK_TYPE_SPKS == FlockType) + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS&FlockType)) { *rrmReason = TRAIN_RRM_RESON_07; } diff --git a/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDataManage.c b/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDataManage.c index 14ee6d2..89de453 100644 --- a/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDataManage.c +++ b/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDataManage.c @@ -216,6 +216,7 @@ UINT8 ReverseCutDataManageInit(void) gstReverseCutData[wIndex].wReverseCutId = wReverseCutId; gstReverseCutData[wIndex].wReverseState= REVERSE_DEVICE_CUT_STATE_DOWN; } +#if 0 if (FUNC_SWITCH_ON == chDsnLinSwitch) { gTiocSystemMode = REVERSE_MODE_SHADOW; @@ -228,6 +229,11 @@ UINT8 ReverseCutDataManageInit(void) gTiocSystemCutState = REVERSE_CUT_STATE_EXCEPTION; gTiocCanntCutReason = 0U; } +#endif + /* 默认为主机模式 */ + gTiocSystemMode = REVERSE_MODE_MAIN; + gTiocSystemCutState = REVERSE_CUT_STATE_EXCEPTION; + gTiocCanntCutReason = 0U; ret = CI_SUCCESS; } else diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c index 020cebd..46cde4e 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c @@ -3524,4 +3524,408 @@ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId,UINT8* chCiId) } return chRetVal; +} + +/* +* 功能描述:获取指定ID CBTC进路需要检查的逻辑区段数量 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:需要检查的逻辑区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetCbtcRouteCheckLgcSum(const UINT16 routeId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + cRetVal = RouteConfigDataStru[bufIndex].CbtcRouteCheckLgcSum; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* 功能描述:获取指定ID CBTC进路需要检查的逻辑区段ID数组 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:NULL 获取失败 +* 非NULL 逻辑区段ID数组 +* Created By LQ 2026.01.25 +*/ +UINT16* GetCbtcRouteCheckLgcId(const UINT16 routeId) +{ + UINT16* pRetVal = NULL; + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + if (ROUTE_SUM_MAX > bufIndex) + { + pRetVal = RouteConfigDataStru[bufIndex].CbtcRouteCheckLgcId; + } + else + { + /*入参非法,返回失败*/ + } + + return pRetVal; +} + +/* +* 功能描述: 获取指定ID进路CBTC不检查最后区段ESB/SPKS/APG封锁属性 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0: 获取数据失败 +* ROUTE_PASS_LAST_FLOCK_NO 0x55 ROUTE_PASS_LAST_FLOCK_YES 0xaa +* Create By fan 2026.03.09 +*/ +UINT8 GetRoutePassLastFlockProperty(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + retVal = RouteConfigDataStru[bufIndex].cPassCbtcLastFlock; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线类型(迪士尼) +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0: 获取数据失败 +* ROUTE_DISNEY_CONNECT_ALLOTHER ((UINT8)0x33) 进路完全属于邻线 +* ROUTE_DISNEY_CONNECT_ENDMINE ((UINT8)0x66) 进路后半段属于本线 +* ROUTE_DISNEY_CONNECT_STARTMINE ((UINT8)0x99) 进路前半段属于本线 +* ROUTE_DISNEY_CONNECT_ALLMINE ((UINT8)0xCC) 进路完全属于本线 +* Create By wyd 20260316 +*/ +UINT8 GetRouteDisneyConnectAttr(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + retVal = RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线关键道岔(迪士尼) +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:反位使能请求道岔ID +* Create By wyd 20260316 +*/ +UINT16 GetRouteDisneyConnectSwitchId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + retVal = RouteConfigDataStru[bufIndex].wRelConnectSwitchId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路请求继电器(URR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteRequestRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有前半段在本线的进路会驱动URR*/ + if (ROUTE_DISNEY_CONNECT_STARTMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTEREQUEST == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路释放继电器(UCL)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteReleaseRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有前半段在本线的进路会驱动UCL*/ + if (ROUTE_DISNEY_CONNECT_STARTMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTERELEASE == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路已设置保留继电器(UAR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteAckRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有后半段在本线的进路会驱动UAR*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTEACK == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路请求继电器(URR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteRequestRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有后半段在本线的进路会采集URR*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTEREQUEST == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路释放继电器(UCL)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteReleaseRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有后半段在本线的进路会采集UCL*/ + if (ROUTE_DISNEY_CONNECT_ENDMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTERELEASE == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路已设置保留继电器(UAR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteAckRelayId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + /*只有前半段在本线的进路会采集UAR*/ + if (ROUTE_DISNEY_CONNECT_STARTMINE == RouteConfigDataStru[bufIndex].cDisneyConnectRouteAttr) + { + /*遍历所有其他联锁(进路协议继电器在CBTC和后备其他联锁都会配置,选CBTC遍历即可)*/ + for (i = 0u; i < RouteConfigDataStru[bufIndex].CbtcOtherCiSum; i++) + { + if (CI_DEVICE_TYPE_ROUTEACK == RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevType) + { + retVal = RouteConfigDataStru[bufIndex].CbtcOtherCiBuff[i].DevId; + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + retVal = CI_ERROR; + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h index 3f413e7..aa9d306 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h @@ -251,6 +251,7 @@ typedef struct S_RouteConfigDataStruct UINT16 DCRouteTAJId;/*调车进路调车同意按钮继电器ID*/ UINT8 RouteNeedDelayUnlock; /* 进路状态初锁/初锁异常/预先锁闭,取消或人解需要延时解锁(配置字段)*/ + UINT8 cPassCbtcLastFlock; /* CBTC进路不检查最后区段ESB/SPKS/APG封锁(配置字段)*/ UINT16 CancelZhaoChaRelayOnRelayIntrf;/*继电接口下取消照查继电器*/ @@ -272,14 +273,18 @@ typedef struct S_RouteConfigDataStruct UINT16 RouteOutLogSecSum; /*进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID数量 此处是属于进路内物理区段但不属于进路且不属于进路内道岔关联的逻辑区段的逻辑区段数量*/ /*add 20221002 TIOC5.0*/ UINT16 RouteOutLogSecSumIdBuf[MAX_ROUTE_IN_LT_NUM]; /*进路包含物理区段关联的非进路内且非道岔关联的逻辑区段ID数组 此处是属于进路内物理区段但不属于进路且不属于进路内道岔关联的逻辑区段的逻辑区段ID数组*/ /*add 20221002 TIOC5.0*/ - RouteMainOrSubConfigData MainOrSubData; /*进路对应的子进路及主进路数据*/ /*add cgh 20230508*/ + RouteMainOrSubConfigData MainOrSubData; /*进路对应的子进路及主进路数据*/ /*add cgh 20230508*/ - UINT8 cSGBJDelayOpenFlag; /*进路声光报警延时开放标志,0xAA:延时开放,0x55:不延时开放*/ - UINT16 wRelatedSGBJNum; /*进路关联的声光报警器数量*/ - UINT16 szRelatedSGBJId[ROUTE_RELATED_SGBJ_NUM_MAX]; /*进路关联的声光报警器ID*/ - UINT8 cCbtcProperty; /*进路CBTC区域属性,0x55:CBTC区域,0xAA:非CBTC区域*/ - UINT16 wRelatedTransZFSigId; /*进路关联转换轨折返信号机id 未配置默认0*/ - UINT8 cRouteRukuProperty; /*是否为入库进路:0x55 入库进路;0xaa 非入库进路*/ + UINT8 cSGBJDelayOpenFlag; /*进路声光报警延时开放标志,0xAA:延时开放,0x55:不延时开放*/ + UINT16 wRelatedSGBJNum; /*进路关联的声光报警器数量*/ + UINT16 szRelatedSGBJId[ROUTE_RELATED_SGBJ_NUM_MAX]; /*进路关联的声光报警器ID*/ + UINT8 cCbtcProperty; /*进路CBTC区域属性,0x55:CBTC区域,0xAA:非CBTC区域*/ + UINT8 cDisneyConnectRouteAttr; /*进路CBTC联络线区域属性,0x33进路完全属于邻线,0x66后半段属于本线,0x99进路前半段属于本线,0xCC进路完全属于本线*/ + UINT16 wRelConnectSwitchId; /*(迪士尼)联络线进路关联关键道岔*/ + UINT16 wRelatedTransZFSigId; /*进路关联转换轨折返信号机id 未配置默认0*/ + UINT8 cRouteRukuProperty; /*是否为入库进路:0x55 入库进路;0xaa 非入库进路*/ + UINT8 CbtcRouteCheckLgcSum; /*CBTC进路需要检查的逻辑区段数量*/ + UINT16 CbtcRouteCheckLgcId[MAX_ROUTE_IN_LT_NUM]; /*CBTC进路需要检查的逻辑区段ID数组*/ }RouteConfigDataStruct; /*******************************全局变量声明*******************************/ @@ -1342,6 +1347,107 @@ UINT8 CheckRouteSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); */ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); +/* +* 功能描述:获取指定ID CBTC进路需要检查的逻辑区段数量 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:需要检查的逻辑区段数量 +* Created By LQ 2026.01.25 +*/ +UINT8 GetCbtcRouteCheckLgcSum(const UINT16 routeId); + +/* +* 功能描述:获取指定ID CBTC进路需要检查的逻辑区段ID数组 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:NULL 获取失败 +* 非NULL 逻辑区段ID数组 +* Created By LQ 2026.01.25 +*/ +UINT16* GetCbtcRouteCheckLgcId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路CBTC不检查最后区段ESB/SPKS/APG封锁属性 +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0: 获取数据失败 +* ROUTE_PASS_LAST_FLOCK_NO 0x55 ROUTE_PASS_LAST_FLOCK_YES 0xaa +* Create By fan 2026.03.09 +*/ +UINT8 GetRoutePassLastFlockProperty(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线类型(迪士尼) +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0: 获取数据失败 +* ROUTE_DISNEY_CONNECT_ALLOTHER ((UINT8)0x33) 进路完全属于邻线 +* ROUTE_DISNEY_CONNECT_ENDMINE ((UINT8)0x66) 进路后半段属于本线 +* ROUTE_DISNEY_CONNECT_STARTMINE ((UINT8)0x99) 进路前半段属于本线 +* ROUTE_DISNEY_CONNECT_ALLMINE ((UINT8)0xCC) 进路完全属于本线 +* Create By wyd 20260316 +*/ +UINT8 GetRouteDisneyConnectAttr(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线关键道岔(迪士尼) +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:反位使能请求道岔ID +* Create By wyd 20260316 +*/ +UINT16 GetRouteDisneyConnectSwitchId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路请求继电器(URR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteRequestRelayId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路释放继电器(UCL)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteReleaseRelayId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【驱动】进路已设置保留继电器(UAR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteAckRelayId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路请求继电器(URR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteRequestRelayId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路释放继电器(UCL)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteReleaseRelayId(const UINT16 routeId); + +/* +* 功能描述: 获取指定ID进路联络线【采集】进路已设置保留继电器(UAR)ID +* 参数说明: const UINT16 routeId, 进路ID +* 返回值 : 0:获取数据失败 +* 其他:继电器ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteAckRelayId(const UINT16 routeId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteDataManage.c b/TSCP/src/APP/ciapp/Route/RouteDataManage.c index 43ad57e..25d7291 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteDataManage.c @@ -143,6 +143,10 @@ UINT8 SetRouteState(const UINT16 routeId, const UINT8 routeState) { RouteDataStru[bufIndex].XuanPaiStartCycNum = dwCurCycleNum; /*设置进路选排起始周期*/ } + else + { + /*nothing*/ + } } else if ((ROUTE_STATE_FIRST_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCK == routeState) @@ -5696,15 +5700,6 @@ void SetRouteApplySwitchCheckFlag(UINT16 routeId, UINT8 setFlag) || (ROUTE_APPLY_SWITCH_CHECK_DEF == setFlag)) { RouteDataStru[bufIndex].chRouteApplySwitchCheckFlag = setFlag; - if (ROUTE_APPLY_SWITCH_CHECK_DEF == setFlag) - { - /*清零相邻联锁记录进路错误*/ - SetRouteApplySwitchCheckErrorData(routeId, 0U, 0U, 0U, 0U); - } - else - { - ;/*不处理*/ - } } else { @@ -5901,13 +5896,13 @@ UINT8 GetRouteToLeadFlag(const UINT16 routeId) } /* -* 功能描述:设置指定进路办理相邻控区检查错误记录 +* 功能描述:设置URR驱动状态 * 参数说明:UINT16 routeId 需设置的进路ID -* UINT16 devID 设备ID UINT8 devType 设备类型,UINT8 devState 设备状态 UINT8 errorType +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 * 返 回 值:无 -* by fan 20250922 +* Created By wyd 20260317 */ -void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devType, UINT8 devState, UINT8 errorType) +void SetRouteRequestDrvState(UINT16 routeId, UINT8 setFlag) { UINT16 bufIndex = 0U; /*数组下标*/ @@ -5915,10 +5910,14 @@ void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devTy if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].OtherCiRecordDevID = devID; - RouteDataStru[bufIndex].OtherCiRecordDevState = devState; - RouteDataStru[bufIndex].OtherCiRecordDevType = devType; - RouteDataStru[bufIndex].OtherCiRecordErrorType = errorType; + if ((RELAY_STATE_UP == setFlag) || (RELAY_STATE_DOWN == setFlag)) + { + RouteDataStru[bufIndex].cRouteRequestDrvState = setFlag; + } + else + { + ; /*不处理*/ + } } else { @@ -5927,29 +5926,203 @@ void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devTy } /* -* 功能描述:获取指定进路办理相邻控区检查错误记录 -* 参数说明:UINT16 routeId 进路ID -* 返 回 值:UINT16 设备ID -* 输出参数 UINT8 *devType设备类型, UINT8* devState设备状态,UINT8* errorType 错误类型 -* by fan 20250922 +* 功能描述:获取URR驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 */ -UINT16 GetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT8 *devType, UINT8* devState, UINT8* errorType) +UINT8 GetRouteRequestDrvState(const UINT16 routeId) { UINT16 bufIndex = 0U; /*数组下标*/ - UINT16 rtnDevId = 0U; + UINT8 reVal = RELAY_STATE_DOWN; bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ if (ROUTE_SUM_MAX > bufIndex) { - rtnDevId = RouteDataStru[bufIndex].OtherCiRecordDevID; - *devType = RouteDataStru[bufIndex].OtherCiRecordDevType; - *devState = RouteDataStru[bufIndex].OtherCiRecordDevState; - *errorType = RouteDataStru[bufIndex].OtherCiRecordErrorType; + reVal = RouteDataStru[bufIndex].cRouteRequestDrvState; + } + else + { + ; /*不做处理*/ + } + + return reVal; +} + +/* +* 功能描述:设置UCL驱动状态 +* 参数说明:UINT16 routeId 需设置的进路ID +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void SetRouteReleaseDrvState(UINT16 routeId, UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + if ((RELAY_STATE_UP == setFlag) || (RELAY_STATE_DOWN == setFlag)) + { + RouteDataStru[bufIndex].cRouteReleaseDrvState = setFlag; + } + else + { + ; /*不处理*/ + } } else { ; /*不处理*/ } - return rtnDevId; +} + +/* +* 功能描述:获取UCL驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 +*/ +UINT8 GetRouteReleaseDrvState(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 reVal = RELAY_STATE_DOWN; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + reVal = RouteDataStru[bufIndex].cRouteReleaseDrvState; + } + else + { + ; /*不做处理*/ + } + + return reVal; +} + +/* +* 功能描述:设置UAR驱动状态 +* 参数说明:UINT16 routeId 需设置的进路ID +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void SetRouteAckDrvState(UINT16 routeId, UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + if ((RELAY_STATE_UP == setFlag) || (RELAY_STATE_DOWN == setFlag)) + { + RouteDataStru[bufIndex].cRouteAckDrvState = setFlag; + } + else + { + ; /*不处理*/ + } + } + else + { + ; /*不处理*/ + } +} + +/* +* 功能描述:获取UAR驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 +*/ +UINT8 GetRouteAckDrvState(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 reVal = RELAY_STATE_DOWN; + + bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + reVal = RouteDataStru[bufIndex].cRouteAckDrvState; + } + else + { + ; /*不做处理*/ + } + + return reVal; +} + +/* +* 功能描述:迪士尼联络线进路协议继电器驱动处理 +* 参数说明:无 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void RouteConnectPrtlRelayDriveProc(void) +{ + UINT16 wRouteSum = 0u; /*进路总数*/ + UINT8 wLocalCiId = 0u; /*本机联锁ID*/ + UINT16 wRouteId = 0u; /*进路ID*/ + UINT8 wBelongCiId = 0u; /*进路所属联锁ID*/ + UINT16 i = 0u; /*循环变量*/ + UINT8 cConnectRouteAttr = CI_ERROR; /*进路联络线属性*/ + UINT16 wRouteRequestRelayId = 0u; /*进路请求继电器(URR)ID*/ + UINT16 wRouteReleaseRelayId = 0u; /*进路释放继电器(UCL)ID*/ + UINT16 wRouteAckRelayId = 0u; /*进路已设置保留继电器(UAR)ID*/ + UINT8 cRouteRequestRelayState = RELAY_STATE_DOWN; /*URR继电器驱动状态*/ + UINT8 cRouteReleaseRelayState = RELAY_STATE_DOWN; /*UCL继电器驱动状态*/ + UINT8 cRouteAckRelayState = RELAY_STATE_DOWN; /*UAR继电器驱动状态*/ + + /*获取进路总数*/ + wRouteSum = GetRouteCurSum(); + /*获取本机联锁ID*/ + wLocalCiId = GetSystemParaLocalCiId(); + /*遍历所有进路*/ + for (i = 0u; i < wRouteSum; i++) + { + /*只处理本联锁的进路*/ + wRouteId = GetRouteId(i); + wBelongCiId = GetRouteBelongCiId(wRouteId); + if (wBelongCiId == wLocalCiId) + { + /*获取并判断联络线属性*/ + cConnectRouteAttr = GetRouteDisneyConnectAttr(wRouteId); + if (ROUTE_DISNEY_CONNECT_ENDMINE == cConnectRouteAttr) + { + /*后半段在本线的进路驱动UAR*/ + wRouteAckRelayId = GetDrvRouteAckRelayId(wRouteId); + cRouteAckRelayState = GetRouteAckDrvState(wRouteId); + (void)SetRelayDriveState(wRouteAckRelayId, cRouteAckRelayState); + } + else if (ROUTE_DISNEY_CONNECT_STARTMINE == cConnectRouteAttr) + { + /*前半段在本线的进路驱动URR和UCL*/ + wRouteRequestRelayId = GetDrvRouteRequestRelayId(wRouteId); + wRouteReleaseRelayId = GetDrvRouteReleaseRelayId(wRouteId); + cRouteRequestRelayState = GetRouteRequestDrvState(wRouteId); + cRouteReleaseRelayState = GetRouteReleaseDrvState(wRouteId); + (void)SetRelayDriveState(wRouteRequestRelayId, cRouteRequestRelayState); + (void)SetRelayDriveState(wRouteReleaseRelayId, cRouteReleaseRelayState); + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/RouteDataManage.h b/TSCP/src/APP/ciapp/Route/RouteDataManage.h index 2d52fa6..4053f62 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteDataManage.h @@ -30,105 +30,104 @@ extern "C" { /*进路动态数据结构体*/ typedef struct S_HalfRouteDataStruct { - UINT8 HalfRouteSwitchMoveValid; /*半截锁闭是否可动道岔*/ - UINT8 RouteLockLgcSecNum; /*半截锁闭逻辑区段数量*/ - UINT16 RouteLockLgcSecIdBuf[MAX_ROUTE_IN_LT_NUM]; /*半截锁闭逻辑区段ID数组*/ - UINT16 HalfResReqTrainId; /*发送资源请求的列车ID*/ - UINT8 TrainLocLgcSecNum; /*列车所处逻辑区段数量*/ - UINT16 TrainLocLgcSecIdBuf[ROUTE_TRAIN_LOC_MAX_LGC_SUM]; /*列车所处逻辑区段ID数组*/ + UINT8 HalfRouteSwitchMoveValid; /*半截锁闭是否可动道岔*/ + UINT8 RouteLockLgcSecNum; /*半截锁闭逻辑区段数量*/ + UINT16 RouteLockLgcSecIdBuf[MAX_ROUTE_IN_LT_NUM]; /*半截锁闭逻辑区段ID数组*/ + UINT16 HalfResReqTrainId; /*发送资源请求的列车ID*/ + UINT8 TrainLocLgcSecNum; /*列车所处逻辑区段数量*/ + UINT16 TrainLocLgcSecIdBuf[ROUTE_TRAIN_LOC_MAX_LGC_SUM]; /*列车所处逻辑区段ID数组*/ }HalfRouteDataStruct; /*进路动态数据结构体*/ typedef struct S_RouteDataStruct { - UINT16 RouteId; /*进路ID (初始化字段)*/ - UINT8 RouteState; /*进路状态 (动态字段)*/ - UINT8 RoutePreState; /* 前一个进路状态 */ - UINT8 RoutePreLevel; /*进路之间监督级别(点式/CBTC) (动态字段)*/ - UINT8 RouteLevel; /*进路监督级别(点式/CBTC) (动态字段)*/ - UINT32 RouteLevelChangeCyc; /*进路监督级别发生变化起始周期号*/ - UINT16 AutoRouteId; /*自动进路Id(未设置/设置) (动态字段)*/ - UINT16 AutoReturnId; /*自动折返进路Id(未设置/设置) (动态字段)*/ - UINT32 XuanPaiStartCycNum; /*选排起始周期号 (动态字段)*/ - UINT32 RouteLockStartCycNum; /*进路锁闭起始周期号 (动态字段)*/ - UINT32 OverlapLockStartCycNum; /*保护区段锁闭起始周期号 (动态字段)*/ - UINT32 RouteOpenSigStatrtCycNum; /*进路信号开放起始周期号 (动态字段)*/ - UINT32 DelayUnlockStartCycNum; /*进路延时解锁起始周期号 (动态字段)*/ - UINT32 LeadFaultOpenStartCycNum; /*信号内方第一区段故障引导信号开放起始周期号 (动态字段)*/ - UINT16 OverlapLockedId; /*当前进路Overlap锁闭过OverlapId*/ - UINT8 ZongQuXiaoFlag; /*总取消标志(未设置/设置) (动态字段)*/ - UINT8 ZongRenJieFlag; /*总人解标志(未设置/设置) (动态字段)*/ - UINT8 RepeatOpenFlag; /*信号重开标志(未设置/设置) (动态字段)*/ - UINT8 StopCheckFlag; /*停止检查标志(未设置/设置) (动态字段)*/ - UINT8 StopKeepCheckFlag; /* 保持时候用 */ - UINT8 AutoSigPropertyLoseEfficacyFlag; /*自动信号属性失效标志(未设置/设置)(动态字段)*/ - UINT16 BelongLongRouteId; /*所属长调车进路ID (动态字段)*/ - UINT16 ThroughRouteId; /*通过进路ID(0未设置/设置) (初始化字段)*/ - UINT16 AllAutoReturnId; /*全自动折返进路Id(未设置/设置) (动态字段)*/ - UINT8 StopensureFlag; /*停车保证标志(未设置/设置) (动态字段)*/ - UINT8 ResourcecancelFlag; /*资源取消标志(不允许/允许) (动态字段)*/ - UINT8 SPKSToRouteCloseFlag; /*由SPKS导致进路始端信号机关闭标志(动态字段)*/ - UINT8 RouteAssoSwitSingOperStat; /*进路带动道岔单操状态*/ - UINT8 RouteInnerSwitDrivState; /*进路内道岔驱动状态*/ - UINT8 RouteAssocSwitDrivState; /*进路带动道岔驱动状态*/ - UINT8 RouteStateFlag; /*进路状态标志(1:表示有效;0:表示无效)*/ - UINT8 TrainEnterFlag; /*列车驶入标志*/ - UINT8 ZongRenJieDelayType; /*总人解延时类型,分为:倒计时结束后立刻全部区段解锁,第一个占压的物理区段前变异常锁闭,所有的物理区段变异常锁闭*/ - UINT8 RecoverOpenState; /*进路需要重开状态,用于处理PSD、SPKS、扣车恢复重开信号*/ - UINT8 TrainEnterRouteFlag; /*列车驶入进路标志,用于车辆段中途折返使用*/ - UINT16 atsExptLkOverlapId; /*ATS或现地期望锁闭的OverlapId*/ - UINT16 OtherCIRouteOvlpUTUnlockCount; /*其它联锁进路UT保护区段UT解锁周期数*/ - UINT16 OtherCIRouteOvlpCTUnlockCount; /*其它联锁进路CT保护区段CT解锁周期数*/ - UINT8 NeedOpenNotTrueRepeatFlag; /*需开放不满足时,重开标志*/ - UINT32 NeedOpenNotTrueRepeatStartCount; /*需开放不满足时,重开起始周期*/ - UINT8 DCQState; /*调车请求状态*/ - UINT8 DCTYState; /*调车同意状态*/ - UINT32 dwDcAgreeBtnPressCycNum; /*调车同意按钮按下起始周期*/ - UINT8 chDcAgreeButtonErrState; /*调车同意按钮故障状态*/ - UINT8 DCTYNotSatisfySignalReOpenFlag; /*调车同意不满足-信号重开标志*/ - UINT32 DCTYNotSatisfyStartCount; /*调车同意不满足-起始周期*/ - UINT8 CancleDelayflag; /*取消进路延时标志*/ - UINT8 CancelResDelayflag; /*资源取消申请标志位*/ - UINT32 RouteKeepSignalTolerateCycNum; /*点式进路处于信号开放状态下,终端信号机亮灯状态检查不通过,信号保持容忍开放状态开始周期*/ - UINT8 AutoSigCancleState; /*其他联锁自动信号进路取消状态*/ - UINT8 CancleAutoSigCmd; /*相邻联锁自动信号取消命令标志*/ + UINT16 RouteId; /*进路ID (初始化字段)*/ + UINT8 RouteState; /*进路状态 (动态字段)*/ + UINT8 RoutePreState; /* 前一个进路状态 */ + UINT8 RoutePreLevel; /*进路之间监督级别(点式/CBTC) (动态字段)*/ + UINT8 RouteLevel; /*进路监督级别(点式/CBTC) (动态字段)*/ + UINT32 RouteLevelChangeCyc; /*进路监督级别发生变化起始周期号*/ + UINT16 AutoRouteId; /*自动进路Id(未设置/设置) (动态字段)*/ + UINT16 AutoReturnId; /*自动折返进路Id(未设置/设置) (动态字段)*/ + UINT32 XuanPaiStartCycNum; /*选排起始周期号 (动态字段)*/ + UINT32 RouteLockStartCycNum; /*进路锁闭起始周期号 (动态字段)*/ + UINT32 OverlapLockStartCycNum; /*保护区段锁闭起始周期号 (动态字段)*/ + UINT32 RouteOpenSigStatrtCycNum; /*进路信号开放起始周期号 (动态字段)*/ + UINT32 DelayUnlockStartCycNum; /*进路延时解锁起始周期号 (动态字段)*/ + UINT32 LeadFaultOpenStartCycNum; /*信号内方第一区段故障引导信号开放起始周期号 (动态字段)*/ + UINT16 OverlapLockedId; /*当前进路Overlap锁闭过OverlapId*/ + UINT8 ZongQuXiaoFlag; /*总取消标志(未设置/设置) (动态字段)*/ + UINT8 ZongRenJieFlag; /*总人解标志(未设置/设置) (动态字段)*/ + UINT8 RepeatOpenFlag; /*信号重开标志(未设置/设置) (动态字段)*/ + UINT8 StopCheckFlag; /*停止检查标志(未设置/设置) (动态字段)*/ + UINT8 StopKeepCheckFlag; /* 保持时候用 */ + UINT8 AutoSigPropertyLoseEfficacyFlag; /*自动信号属性失效标志(未设置/设置)(动态字段)*/ + UINT16 BelongLongRouteId; /*所属长调车进路ID (动态字段)*/ + UINT16 ThroughRouteId; /*通过进路ID(0未设置/设置) (初始化字段)*/ + UINT16 AllAutoReturnId; /*全自动折返进路Id(未设置/设置) (动态字段)*/ + UINT8 StopensureFlag; /*停车保证标志(未设置/设置) (动态字段)*/ + UINT8 ResourcecancelFlag; /*资源取消标志(不允许/允许) (动态字段)*/ + UINT8 SPKSToRouteCloseFlag; /*由SPKS导致进路始端信号机关闭标志(动态字段)*/ + UINT8 RouteAssoSwitSingOperStat; /*进路带动道岔单操状态*/ + UINT8 RouteInnerSwitDrivState; /*进路内道岔驱动状态*/ + UINT8 RouteAssocSwitDrivState; /*进路带动道岔驱动状态*/ + UINT8 RouteStateFlag; /*进路状态标志(1:表示有效;0:表示无效)*/ + UINT8 TrainEnterFlag; /*列车驶入标志*/ + UINT8 ZongRenJieDelayType; /*总人解延时类型,分为:倒计时结束后立刻全部区段解锁,第一个占压的物理区段前变异常锁闭,所有的物理区段变异常锁闭*/ + UINT8 RecoverOpenState; /*进路需要重开状态,用于处理PSD、SPKS、扣车恢复重开信号*/ + UINT8 TrainEnterRouteFlag; /*列车驶入进路标志,用于车辆段中途折返使用*/ + UINT16 atsExptLkOverlapId; /*ATS或现地期望锁闭的OverlapId*/ + UINT16 OtherCIRouteOvlpUTUnlockCount; /*其它联锁进路UT保护区段UT解锁周期数*/ + UINT16 OtherCIRouteOvlpCTUnlockCount; /*其它联锁进路CT保护区段CT解锁周期数*/ + UINT8 NeedOpenNotTrueRepeatFlag; /*需开放不满足时,重开标志*/ + UINT32 NeedOpenNotTrueRepeatStartCount; /*需开放不满足时,重开起始周期*/ + UINT8 DCQState; /*调车请求状态*/ + UINT8 DCTYState; /*调车同意状态*/ + UINT32 dwDcAgreeBtnPressCycNum; /*调车同意按钮按下起始周期*/ + UINT8 chDcAgreeButtonErrState; /*调车同意按钮故障状态*/ + UINT8 DCTYNotSatisfySignalReOpenFlag; /*调车同意不满足-信号重开标志*/ + UINT32 DCTYNotSatisfyStartCount; /*调车同意不满足-起始周期*/ + UINT8 CancleDelayflag; /*取消进路延时标志*/ + UINT8 CancelResDelayflag; /*资源取消申请标志位*/ + UINT32 RouteKeepSignalTolerateCycNum; /*点式进路处于信号开放状态下,终端信号机亮灯状态检查不通过,信号保持容忍开放状态开始周期*/ + UINT8 AutoSigCancleState; /*其他联锁自动信号进路取消状态*/ + UINT8 CancleAutoSigCmd; /*相邻联锁自动信号取消命令标志*/ - UINT8 OverlapNeedCIlockFlag; /*保护区段需要由联锁自行锁闭标志*/ - UINT8 OverlapLockProcFlag; /*进路的保护区段在锁闭过程中*/ - UINT8 GroupRouteCmdFlag; /*进路是否具有组合进路命令标志。终端下发后,在各进路锁闭状态下设置,空闲后清除*/ - UINT8 AutoTriggerFlag; /*进路是否设置了自动触发*/ + UINT8 OverlapNeedCIlockFlag; /*保护区段需要由联锁自行锁闭标志*/ + UINT8 OverlapLockProcFlag; /*进路的保护区段在锁闭过程中*/ + UINT8 GroupRouteCmdFlag; /*进路是否具有组合进路命令标志。终端下发后,在各进路锁闭状态下设置,空闲后清除*/ + UINT8 AutoTriggerFlag; /*进路是否设置了自动触发*/ - UINT16 wStopEnsureTrainId; /*进路停车保证列车ID*/ - UINT32 dwStopEnsureCyc; /* 停车保证询问周期号 */ + UINT16 wStopEnsureTrainId; /*进路停车保证列车ID*/ + UINT32 dwStopEnsureCyc; /* 停车保证询问周期号 */ - UINT16 wResourceCancelTrainId; /*进路资源取消列车ID*/ - UINT32 dwResourceCancelCyc; /* 资源取消询问周期号 */ + UINT16 wResourceCancelTrainId; /*进路资源取消列车ID*/ + UINT32 dwResourceCancelCyc; /* 资源取消询问周期号 */ - UINT16 wZhefanjiesuoTrainId; /*进路最接近的车,需要考虑列车中途折返解锁的车ID*/ - UINT32 dwRouteZhefanjiesuoCyc; /*进路最接近的车,需要考虑列车中途折返解锁的周期号*/ + UINT16 wZhefanjiesuoTrainId; /*进路最接近的车,需要考虑列车中途折返解锁的车ID*/ + UINT32 dwRouteZhefanjiesuoCyc; /*进路最接近的车,需要考虑列车中途折返解锁的周期号*/ - UINT8 cResReqOtherCIId; /*发送资源请求的其他联锁ID*/ + UINT8 cResReqOtherCIId; /*发送资源请求的其他联锁ID*/ UINT8 chResReqTrainSum; - UINT16 wszResReqTrainId[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*发送资源请求的列车ID*/ - UINT8 ITSRouteApplyTrainIdSum; /*ITS申请路径命令的列车ID记录的总数量*/ - UINT16 ITSRouteApplyTrainIdBuf[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*通过ITS申请路径命令记录的列车ID数组*/ - UINT8 chShareOverlapCiId; /*公共保护区段ID*/ - UINT8 chRouteXiansuConfirm; /*进路限速确认状态*/ - HalfRouteDataStruct HalfRouteDataSt; /*进路半截锁闭状态*/ - UINT16 wBelongDrId; /*所属动态进路ID*/ - UINT32 dwFirstElockStartCycNum; /*进路第一个锁闭的逻辑区段延时设置区段故障起始周期号*/ - UINT8 cRelZuHeRouteSGBJDelayFlag; /*关联组合进路需延时开放标志*/ - UINT32 dwDelayOpenStartCycNum; /*声光报警进路延时开放延时起始周期*/ - UINT8 cRouteNeedDriveSGBJFlag; /*进路需驱动声光报警标志:0x55 无效;0xAA 有效*/ - UINT8 cRouteDrivedSGBJFlag; /*进路驱动过声光报警标志:0x55 未驱动过;0xAA 已驱动过*/ - UINT8 chRouteNearSecSearchState; /*进路接近区段状态*/ - UINT8 chRouteApplySwitchCheckFlag; /*进路办理相邻控区道岔检查标志*/ - UINT16 OtherCiRecordDevID; /*其他联锁检查失败设备ID*/ - UINT8 OtherCiRecordDevType; /*其他联锁检查失败设备类型*/ - UINT8 OtherCiRecordDevState; /*其他联锁检查失败设备状态*/ - UINT8 OtherCiRecordErrorType; /*其他联锁检查失败报警类型*/ - UINT8 cRouteToLeadFlag; /*普通进路转引导进路标志:0x55-无效,0xAA-有效(当周期清除,无需打印日志)*/ + UINT16 wszResReqTrainId[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*发送资源请求的列车ID*/ + UINT8 ITSRouteApplyTrainIdSum; /*ITS申请路径命令的列车ID记录的总数量*/ + UINT16 ITSRouteApplyTrainIdBuf[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*通过ITS申请路径命令记录的列车ID数组*/ + UINT8 chShareOverlapCiId; /*公共保护区段ID*/ + UINT8 chRouteXiansuConfirm; /*进路限速确认状态*/ + HalfRouteDataStruct HalfRouteDataSt; /*进路半截锁闭状态*/ + UINT16 wBelongDrId; /*所属动态进路ID*/ + UINT32 dwFirstElockStartCycNum; /*进路第一个锁闭的逻辑区段延时设置区段故障起始周期号*/ + UINT8 cRelZuHeRouteSGBJDelayFlag; /*关联组合进路需延时开放标志*/ + UINT32 dwDelayOpenStartCycNum; /*声光报警进路延时开放延时起始周期*/ + UINT8 cRouteNeedDriveSGBJFlag; /*进路需驱动声光报警标志:0x55 无效;0xAA 有效*/ + UINT8 cRouteDrivedSGBJFlag; /*进路驱动过声光报警标志:0x55 未驱动过;0xAA 已驱动过*/ + UINT8 chRouteNearSecSearchState; /*进路接近区段状态*/ + UINT8 chRouteApplySwitchCheckFlag; /*进路办理相邻控区道岔检查标志*/ + UINT8 cRouteToLeadFlag; /*普通进路转引导进路标志:0x55-无效,0xAA-有效(当周期清除,无需打印日志)*/ + UINT8 cRouteRequestDrvState; /*迪士尼联络线进路请求继电器(URR)驱动状态*/ + UINT8 cRouteReleaseDrvState; /*迪士尼联络线进路释放继电器(UCL)驱动状态*/ + UINT8 cRouteAckDrvState; /*迪士尼联络线进路已设置保留继电器(UAR)驱动状态*/ } RouteDataStruct; @@ -1694,23 +1693,66 @@ void SetRouteToLeadFlag(UINT16 routeId, UINT8 setFlag); UINT8 GetRouteToLeadFlag(const UINT16 routeId); /* -* 功能描述:设置指定进路办理相邻控区检查错误记录 +* 功能描述:设置URR驱动状态 * 参数说明:UINT16 routeId 需设置的进路ID -* UINT16 devID 设备ID UINT8 devType 设备类型,UINT8 devState 设备状态,UINT8 errorType 错误类型 +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 * 返 回 值:无 -* by fan 20250922 +* Created By wyd 20260317 */ -void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devType, UINT8 devState, UINT8 errorType); +void SetRouteRequestDrvState(UINT16 routeId, UINT8 setFlag); /* -* 功能描述:获取指定进路办理相邻控区检查错误记录 -* 参数说明:UINT16 routeId 进路ID -* 返 回 值:UINT16 设备ID -* 输出参数 UINT8 *devType设备类型, UINT8* devState设备状态,UINT8* errorType 错误类型 -* by fan 20250922 +* 功能描述:获取URR驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 */ -UINT16 GetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT8 *devType, UINT8* devState, UINT8* errorType); +UINT8 GetRouteRequestDrvState(const UINT16 routeId); +/* +* 功能描述:设置UCL驱动状态 +* 参数说明:UINT16 routeId 需设置的进路ID +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void SetRouteReleaseDrvState(UINT16 routeId, UINT8 setFlag); + +/* +* 功能描述:获取UCL驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 +*/ +UINT8 GetRouteReleaseDrvState(const UINT16 routeId); + +/* +* 功能描述:设置UAR驱动状态 +* 参数说明:UINT16 routeId 需设置的进路ID +* UINT8 setFlag 0xAA要求吸起 0x55要求落下 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void SetRouteAckDrvState(UINT16 routeId, UINT8 setFlag); + +/* +* 功能描述:获取UAR驱动状态 +* 参数说明:const UINT16 routeId 进路ID +* 返 回 值:0xAA 要求吸起 +* 0x55 要求落下 +* Created By wyd 20260317 +*/ +UINT8 GetRouteAckDrvState(const UINT16 routeId); + +/* +* 功能描述:迪士尼联络线进路协议继电器驱动处理 +* 参数说明:无 +* 返 回 值:无 +* Created By wyd 20260317 +*/ +void RouteConnectPrtlRelayDriveProc(void); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Route/RouteDefine.h b/TSCP/src/APP/ciapp/Route/RouteDefine.h index 16e7a42..bffac66 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDefine.h +++ b/TSCP/src/APP/ciapp/Route/RouteDefine.h @@ -373,6 +373,11 @@ #define ROUTE_CBTC_PROPERTY_YES ((UINT8)0x55) /*进路具有CBTC区域属性(所有link均具有CBTC区域属性)*/ #define ROUTE_CBTC_PROPERTY_NO ((UINT8)0xaa) /*进路不具有CBTC区域属性(存在link不具有CBTC区域属性)*/ +#define ROUTE_DISNEY_CONNECT_ALLOTHER ((UINT8)0x33) /*进路完全属于邻线*/ +#define ROUTE_DISNEY_CONNECT_ENDMINE ((UINT8)0x66) /*进路后半段属于本线*/ +#define ROUTE_DISNEY_CONNECT_STARTMINE ((UINT8)0x99) /*进路前半段属于本线*/ +#define ROUTE_DISNEY_CONNECT_ALLMINE ((UINT8)0xCC) /*进路完全属于本线*/ + #define ROUTE_RUKU_PROPERTY_YES ((UINT8)0x55U) /*入库进路*/ #define ROUTE_RUKU_PROPERTY_NO ((UINT8)0xaaU) /*非入库进路*/ @@ -386,5 +391,9 @@ #define ROUTE_TO_LEAD_FLAG_NO ((UINT8)0x55) /*普通进路转引导进路标志无效*/ #define ROUTE_TO_LEAD_FLAG_YES ((UINT8)0xaa) /*普通进路转引导进路标志有效*/ + +#define ROUTE_PASS_LAST_FLOCK_YES ((UINT8)0xaa) /*CBTC进路不检查最后区段ESB/SPKS/APG封锁标志有效*/ +#define ROUTE_PASS_LAST_FLOCK_NO ((UINT8)0x55) /*正常检查区段未封锁*/ + #endif diff --git a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c index 7a82247..33f94f5 100644 --- a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c @@ -50,6 +50,7 @@ UINT16 GetLinkNum(void) return wRetVal; } + /** * @brief GetLinkData 获取LINK数据 * @param void @@ -1761,8 +1762,6 @@ UINT8 DsuLinkSeqBtwPoints(p_strPathPoint pAPoint, p_strPathPoint pBPoint, OUT UI LOD_STRU LODAPointStru = { 0u }; LOD_STRU LODBPointStru = { 0u }; UINT8 cEmpDir = EMAP_SAME_DIR; - UINT16 wlinkNum = 0u; - UINT16 szLinkIdBuf[USE_DSU_TWOPOINT_LINK_SIZE] = { 0u }; UINT8 chRtn = CI_ERROR; if ((NULL != pDir) && (0u != pAPoint->wLinkId) && (0u != pBPoint->wLinkId)) @@ -1914,9 +1913,6 @@ UINT8 dsuCheckSameLoc(UINT16 wLinkSrc, UINT32 dwOffsetSrc, UINT16* wLinkDst, UIN { UINT32 tmpLinkLen = 0u; /*临时变量*/ UINT8 chReturnValue = CI_ERROR; /*函数返回结果,默认失败*/ - UINT8 chDirTemp = 0u; - UINT8 chDirChangeTimes = 0u; /*link方向改变次数*/ - UINT16 wLinkId = 0u; /*link缓存*/ UINT8 chFunRtn = CI_ERROR; UINT16 wSwitchId = 0u; UINT8 cDirectionPointFlag = 0U; /*是否具有方向变化点标志*/ @@ -2623,10 +2619,6 @@ UINT16 GetPointBelongLogSec(struct_PathPoint strPoint) UINT16 wIndex = 0u; UINT16 wLinkNum = 0U; str_Zone strZone = { 0u }; - UINT16 wOrgnLink = 0u; - UINT16 wTmanLink = 0u; - UINT32 dwOrgnOffset = UINT32_MAX; - UINT32 dwTmnlOffset = UINT32_MAX; UINT32 dwLen = UINT32_MAX; LOD_STRU strPointA = { 0u }; LOD_STRU strPointB = { 0u }; @@ -2711,24 +2703,15 @@ UINT8 GetLogSecBtwTwoPoints(struct_PathPoint strStart, struct_PathPoint strEnd, UINT16 wLogicId = 0u; UINT16 wIndex = 0u; str_Zone strZone = { 0u }; - UINT16 wOrgnLink = 0u; - UINT16 wTmanLink = 0u; - UINT32 dwOrgnOffset = UINT32_MAX; - UINT32 dwTmnlOffset = UINT32_MAX; UINT32 dwLen = UINT32_MAX; LOD_STRU strPointA = { 0u }; LOD_STRU strPointB = { 0u }; UINT8 chFunRtn = CI_ERROR; - UINT16 wRtn = 0u; struct_PathPoint strOrgn = { 0u }; struct_PathPoint strTmnl = { 0u }; UINT16 wNum = 0u; str_Zone strZoneLgc = { 0u }; - UINT16 wLink = 0u; UINT8 chLinkNum = 0u; - UINT16 wSwitchId = 0u; - UINT8 chEstatus = 0u; - UINT8 chSwitchPos = 0u; UINT16 wLinkNum = 0u; UINT8 chLgcSwPosCheckFlag = CI_ERROR; /* 逻辑区段道岔连通检查标志 */ UINT16 wLogicIdBuf[PHYSICAL_INCLUDE_LOG_SUM_MAX * 2U] = { 0U }; @@ -3272,74 +3255,79 @@ UINT16 GetAxisIdFromAxisSeqSafeSw(UINT16* szAxisId, UINT16 wAxisNum) * @param wLinkId * @param dwLinkOffset * @return 公里标 +* by cgh 20260310 */ UINT32 GetPointKm(UINT16 wLinkId, UINT32 dwLinkOffset) { UINT32 rtnValue = UINT32_MAX; UINT32 dwLinkLen = UINT32_MAX; - UINT16 wOrgnLinkId = 0u; - UINT16 wOrgnLinkType = 0u; - UINT16 wOrgnPointType = 0u; - UINT16 wTmnlPointType = 0u; + UINT16 wOrgnPointType = 0U; /*起点端点类型*/ + UINT16 wTmnlPointType = 0U; /*终点端电类型*/ + UINT16 wOrgnPointId = 0U; /*起点端点编号*/ + UINT16 wTmnlPointId = 0U; /*终点端点编号*/ + UINT32 dwOrgnPointKm = UINT32_MAX; /*始端公里标*/ + UINT32 dwTmnPointKm = UINT32_MAX; /*终端公里标*/ - wOrgnPointType = GetLinkOrgnPointTypeById(wLinkId); /* 获取link起点端点类型 */ - wTmnlPointType = GetLinkTmnlPointTypeById(wLinkId); /* 获取link终点端点类型 */ dwLinkLen = GetLinkLengthById(wLinkId); if ((dwLinkOffset <= dwLinkLen) && (UINT32_MAX != dwLinkLen)) { - if (EMAP_END_DOT != wOrgnPointType) - {/* link始端不为线路终端 */ - if (EMAP_AXLE_DOT == wOrgnPointType) - {/* 始端为计轴器 */ - rtnValue = GetAxisKmById(GetLinkOrgnPointIdById(wLinkId)); - } - else if (EMAP_POINT_DOT == wOrgnPointType) - {/* 始端为道岔 */ - rtnValue = GetSwitchKmById(GetLinkOrgnPointIdById(wLinkId)); - } - else - { - ; /* 不处理,类型错误,不可能分支 */ - } + wOrgnPointType = GetLinkOrgnPointTypeById(wLinkId); /* 获取link起点端点类型 */ + wTmnlPointType = GetLinkTmnlPointTypeById(wLinkId); /* 获取link终点端点类型 */ + wOrgnPointId = GetLinkOrgnPointIdById(wLinkId); + wTmnlPointId = GetLinkTmnlPointIdById(wLinkId); - if (UINT32_MAX != rtnValue) - { - rtnValue += dwLinkOffset; - } - else - { - ; /* 不处理 */ - } + if (EMAP_AXLE_DOT == wOrgnPointType) + { + /* 始端为计轴器 */ + dwOrgnPointKm = GetAxisKmById(wOrgnPointId); } - else if (EMAP_END_DOT != wTmnlPointType) - {/* link终端不为线路终端 */ + else if (EMAP_POINT_DOT == wOrgnPointType) + { + /* 始端为道岔 */ + dwOrgnPointKm = GetSwitchKmById(wOrgnPointId); + } + else + { + ; /* 不处理,类型错误,不可能分支 */ + } + + if (UINT32_MAX != dwOrgnPointKm) + { if (EMAP_AXLE_DOT == wTmnlPointType) - {/* 始端为计轴器 */ - rtnValue = GetAxisKmById(GetLinkTmnlPointTypeById(wLinkId)); + { + /* 终端为计轴器 */ + dwTmnPointKm = GetAxisKmById(wTmnlPointId); } else if (EMAP_POINT_DOT == wTmnlPointType) - {/* 终端为道岔 */ - rtnValue = GetSwitchKmById(GetLinkTmnlPointTypeById(wLinkId)); + { + /* 终端为道岔 */ + dwTmnPointKm = GetSwitchKmById(wTmnlPointId); } else { ; /* 不处理,类型错误,不可能分支 */ } - - rtnValue = GetAxisKmById(GetLinkTmnlPointIdById(wLinkId)); - if (UINT32_MAX != rtnValue) - { - rtnValue = rtnValue - (dwLinkLen - dwLinkOffset); - } - else - { - ; - } } else { - ; /*DO NOTHING rtn invalid value*/ + ; /* 不处理 */ + } + + if (UINT32_MAX != dwTmnPointKm) + { + if (dwOrgnPointKm < dwTmnPointKm) + { + rtnValue = dwOrgnPointKm + dwLinkOffset; + } + else + { + rtnValue = dwOrgnPointKm - dwLinkOffset; + } + } + else + { + ; /* 不处理 */ } } else @@ -3394,10 +3382,6 @@ UINT8 GetPointBelongLogSecEx(struct_PathPoint strPoint, UINT16 * pLgcIdBuf) UINT16 wIndex = 0u; UINT16 wLinkNum = 0U; str_Zone strZone = { 0u }; - UINT16 wOrgnLink = 0u; - UINT16 wTmanLink = 0u; - UINT32 dwOrgnOffset = UINT32_MAX; - UINT32 dwTmnlOffset = UINT32_MAX; UINT32 dwLen = UINT32_MAX; LOD_STRU strPointA = { 0u }; LOD_STRU strPointB = { 0u }; @@ -3491,7 +3475,6 @@ UINT16 GetAtsLgcStationBelongTioc(const UINT16 wLgcStation) { UINT16 wTiocId = 0u; UINT16 wLinkIndex = 0u; - UINT16 wLinkPltfrm = 0u; for (wLinkIndex = 0u; wLinkIndex < LINK_SUM_MAX; wLinkIndex++) { @@ -3519,7 +3502,6 @@ UINT16 GetLinkIDBelongPlatForm(const UINT16 wPlatform) UINT16 wLinkId = 0u; UINT16 wLinkIndex = 0u; UINT16 wLinkNum = 0u; - UINT16 wLinkPltfrm = 0u; wLinkNum = GetLinkNum(); for (wLinkIndex = 0u; wLinkIndex < wLinkNum; wLinkIndex++) { diff --git a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h index 65efb29..0411a29 100644 --- a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h @@ -29,8 +29,8 @@ extern "C" #define DIR_CONVERT 0xAAu /* 与逻辑方向相反 */ #define DIR_INVALID 0xFFU /*方向无效*/ -#define FLAG_SET 0x55u /* 置位 */ -#define FLAG_UNSET 0xAAu /* 未置位 */ +#define FLAG_SET 0xAAu /* 置位 */ +#define FLAG_UNSET 0x55u /* 未置位 */ #define FIND_FRONT_PROTECT_POINT_TIME 20U /* 查找前方防护点循环次数 */ #define MAX_POINT_IN_AREA 50u /*区域中包含的最大道岔数量*/ @@ -86,6 +86,7 @@ typedef struct UINT8 chLinkTgEvacuateDir; /*脱轨及区间疏散防护线路上下行属性*/ UINT8 chLinkLinXian; /*Link临线属性*/ UINT8 chRelPhySecIsAGorBG; /*Link关联物理区段为AG/BG:0x55 AG;0xAA BG;0xFF 非AG非BG*/ + UINT8 chDsnConnectAttr; /*Link CBTC联络线属性(迪士尼)*/ UINT8 chExistRelCGFlag; /*LINK是否存在关联CG标志*/ UINT16 wBGLinkRelAGLink; /*BGlink关联的AGlink*/ UINT16 wLinkSpecialEa; /*LINK特殊防护区域属性*/ @@ -156,6 +157,7 @@ extern UINT16 GetLinkNum(void); */ extern LinkDataConfigStru * GetLinkData(void); + /** * @brief GetLinkDataById 根据ID获取LINK数据 * @param linkId 编号 @@ -533,6 +535,7 @@ extern UINT16 GetAxisIdFromAxisSeqSafeSw(UINT16* szAxisId, UINT16 wAxisNum); * @param wLinkId * @param dwLinkOffset * @return 公里标 +* by cgh 20260310 */ extern UINT32 GetPointKm(UINT16 wLinkId, UINT32 dwLinkOffset); diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.c b/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.c index 5c9caf0..1a5dd73 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.c @@ -1307,6 +1307,31 @@ UINT8 GetLogSecCbtcProperty(const UINT16 logicSecId) return retVal; } +/* +* 功能描述: 获取指定ID逻辑区段的联络线属性 +* 参数说明: const UINT16 logicSecId, 逻辑区段ID +* 返回值 : 0: 获取数据失败 +* >0: 联络线属性 +* Created By fan 2026.03.16 +*/ +UINT8 GetLogSecConnectProperty(const UINT16 logicSecId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logicSecId); /*获取区段数组下标*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + retVal = LogicSectionConfigDataStru[bufIndex].chDisneyConnectAttr; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + /* * 功能描述: 获取指定ID逻辑区段关联PSD数量 * 参数说明: const UINT16 logicSecId, 逻辑区段ID @@ -1461,5 +1486,123 @@ UINT8 CheckLogSecBelSendRange(const UINT16 wCheckLogSecId) ; /*不处理*/ } + return retVal; +} + +/* +* 功能描述: 获取逻辑区段关联方向锁闭继电器ID +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : CI_ERROR 获取失败 +* 其他 逻辑区段关联方向锁闭继电器ID +* by wyd 20260316 +*/ +UINT16 GetLogSecRelSecDirLockRelayId(UINT16 wLogSecId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(wLogSecId); /*获取区段数组下标*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + retVal = LogicSectionConfigDataStru[bufIndex].wRelSecDirLockRelayId; + } + else + { + ; /*不处理*/ + } + return retVal; +} + +/* +* 功能描述: 获取逻辑区段关联进路协议继电器ID +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : CI_ERROR 获取失败 +* 其他 逻辑区段关联进路协议继电器ID +* by wyd 20260316 +*/ +UINT16 GetLogSecRelRoutePrtlRelayId(UINT16 wLogSecId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(wLogSecId); /*获取区段数组下标*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + retVal = LogicSectionConfigDataStru[bufIndex].wRelRoutePrtlRelayId; + } + else + { + ; /*不处理*/ + } + return retVal; +} + +/* +* 功能描述: 获取逻辑区段共享道岔的逻辑区段ID数组 +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : UINT16 数组指针 +* by fan 20260317 +*/ +UINT16* GetLogSecSameSwitchSecId(UINT16 wLogSecId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT16* pRetVal = NULL; + bufIndex = GetlogSectionBufIndex(wLogSecId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + pRetVal = LogicSectionConfigDataStru[bufIndex].wShareSwitchSecBuf; + } + else + { + ; /*不处理*/ + } + return pRetVal; +} + +/* +* 功能描述: 获取逻辑区段共享道岔的逻辑区段ID数量 +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : UINT8 共用道岔区段个数 PHYSICAL_INCLUDE_AXIS_SUM_MAX:获取失败 +* by fan 20260317 +*/ +UINT8 GetLogSecSameSwitchSecSum(UINT16 wLogSecId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 chRetVal = PHYSICAL_INCLUDE_AXIS_SUM_MAX; + bufIndex = GetlogSectionBufIndex(wLogSecId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + chRetVal = LogicSectionConfigDataStru[bufIndex].cShareSwitchSecSum; + } + else + { + ; /*不处理*/ + } + return chRetVal; +} +/* +* 功能描述: 增加与逻辑区段共用道岔的区段ID +* 参数说明: const UINT16 wBaseLogId, UINT16 wAddLogId +* 返回值 : CI_ERROR CI_SUCCESS +* by fan 20260317 +*/ +UINT8 AddLogSecSameSwitchSec(UINT16 wBaseLogId, UINT16 wAddLogId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 retVal = CI_ERROR; + UINT8 chCurSum = 0U; + bufIndex = GetlogSectionBufIndex(wBaseLogId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + chCurSum = LogicSectionConfigDataStru[bufIndex].cShareSwitchSecSum; + if (PHYSICAL_INCLUDE_AXIS_SUM_MAX >chCurSum) + { + LogicSectionConfigDataStru[bufIndex].wShareSwitchSecBuf[chCurSum] = wAddLogId; + LogicSectionConfigDataStru[bufIndex].cShareSwitchSecSum++; + retVal = CI_SUCCESS; + } + } return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.h b/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.h index 094e152..25bd71a 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LogicSectionConfigDataManage.h @@ -85,10 +85,16 @@ typedef struct S_LogicSectionConfigDataStruct UINT16 chContactAxisCheckID[PHY_SEC_CONTACT_CHECK_MAX_NUM]; /*逻辑区段关联联络线道岔所在计轴区段检查ID(配置字段)*/ UINT8 cCbtcProperty; /*逻辑区段CBTC区域属性,0x55:CBTC区域,0xaa:非CBTC区域*/ - UINT8 logSecRltPsdSum; /*逻辑区段关联屏蔽门数量*/ - UINT16 logSecRltPsdBuf[LOGSEC_RELATE_PSD_MAX]; /*逻辑区段关联屏蔽门ID数组*/ - UINT8 logSecRltEsbSum; /*关联紧急按钮数量*/ - UINT16 logSecRltEsbBuf[LOGSEC_RELATE_ESB_MAX]; /*逻辑区段关联紧急按钮ID数组*/ + UINT8 logSecRltPsdSum; /*逻辑区段关联屏蔽门数量*/ + UINT16 logSecRltPsdBuf[LOGSEC_RELATE_PSD_MAX]; /*逻辑区段关联屏蔽门ID数组*/ + UINT8 logSecRltEsbSum; /*关联紧急按钮数量*/ + UINT16 logSecRltEsbBuf[LOGSEC_RELATE_ESB_MAX]; /*逻辑区段关联紧急按钮ID数组*/ + UINT16 wRelSecDirLockRelayId; /*(联络线)逻辑区段关联方向锁闭继电器ID*/ + UINT16 wRelRoutePrtlRelayId; /*(联络线)逻辑区段关联进路协议继电器ID*/ + UINT8 chDisneyConnectAttr; /*逻辑区段联络线属性关联所有Link是否有联络线属性 0x55:联络线区域,0xAA:非联络线*/ + UINT16 wConnectSwticthId; /*逻辑区段关联迪士尼联络线道岔ID(监督出清后规定时间内动作到定位)*/ + UINT8 cShareSwitchSecSum; /*与区段存在共用道岔的区段数量*/ + UINT16 wShareSwitchSecBuf[PHYSICAL_INCLUDE_AXIS_SUM_MAX]; /*与区段存在共用道岔的区段数组*/ } LogicSectionConfigDataStruct; /*******************************全局变量声明*******************************/ @@ -498,6 +504,15 @@ UINT16* GetLogContactAxisCheckData(const UINT16 wLgcId); */ UINT8 GetLogSecCbtcProperty(const UINT16 logicSecId); +/* +* 功能描述: 获取指定ID逻辑区段的联络线属性 +* 参数说明: const UINT16 logicSecId, 逻辑区段ID +* 返回值 : 0: 获取数据失败 +* >0: 联络线属性 +* Created By fan 2026.03.16 +*/ +UINT8 GetLogSecConnectProperty(const UINT16 logicSecId); + /* * 功能描述: 获取指定ID逻辑区段关联PSD数量 * 参数说明: const UINT16 logicSecId, 逻辑区段ID @@ -541,6 +556,48 @@ UINT16 GetLogSecEsbByIdx(const UINT16 wLogicSecId, UINT8 wEsbIndex); */ UINT8 CheckLogSecBelSendRange(const UINT16 wCheckLogSecId); +/* +* 功能描述: 获取逻辑区段关联方向锁闭继电器ID +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : CI_ERROR 获取失败 +* 其他 逻辑区段关联方向锁闭继电器ID +* by wyd 20260316 +*/ +UINT16 GetLogSecRelSecDirLockRelayId(UINT16 wLogSecId); + +/* +* 功能描述: 获取逻辑区段关联进路协议继电器ID +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : CI_ERROR 获取失败 +* 其他 逻辑区段关联进路协议继电器ID +* by wyd 20260316 +*/ +UINT16 GetLogSecRelRoutePrtlRelayId(UINT16 wLogSecId); + +/* +* 功能描述: 获取逻辑区段共享道岔的逻辑区段ID数组 +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : UINT16 数组指针 +* by fan 20260317 +*/ +UINT16* GetLogSecSameSwitchSecId(UINT16 wLogSecId); + +/* +* 功能描述: 获取逻辑区段共享道岔的逻辑区段ID数量 +* 参数说明: const UINT16 wLogSecId, 逻辑区段ID +* 返回值 : UINT8 共用道岔区段个数 PHYSICAL_INCLUDE_AXIS_SUM_MAX:获取失败 +* by fan 20260317 +*/ +UINT8 GetLogSecSameSwitchSecSum(UINT16 wLogSecId); + +/* +* 功能描述: 增加与逻辑区段共用道岔的区段ID +* 参数说明: const UINT16 wBaseLogId, UINT16 wAddLogId +* 返回值 : CI_ERROR CI_SUCCESS +* by fan 20260317 +*/ +UINT8 AddLogSecSameSwitchSec(UINT16 wBaseLogId, UINT16 wAddLogId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c index 0f5bed2..f1c3e8c 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c @@ -1091,7 +1091,6 @@ void RemoveLogSecTrainInfoById(const UINT16 wLogSectionId, const UINT16 wTrnId) UINT8 chTrainSum = 0U; UINT8 ii = 0U; UINT8 chNeedKeepSum = 0U; - LogicTrainResStruct * pLogicTrainInfo = NULL; wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ @@ -1581,7 +1580,6 @@ void ClearLgcSecResTrain(UINT16 wLogSecId) UINT8 chTrainResSum = 0U; UINT16 wBufIndex = 0U; UINT8 ii = 0U; - UINT8 logRouteSum = 0; UINT16 wTrainId = 0U; /*列车ID*/ UINT16 chFlag = 0U; UINT8 chNeedKeepSum = 0U; @@ -1892,17 +1890,10 @@ UINT8 GetLgcSecResCanAdd(const UINT16 wLogSectionId,const UINT16 wTrnId) UINT16 wBufIndex = 0u; /*数组下标*/ UINT16 wRLockBelongRouteId = 0U; UINT16 wRLockStartSignalId = 0U; - UINT16 wPLockStartSignalId = 0U; - UINT16 wPLockEndSignalId = 0U; UINT16 wRLockLightUpTrainId = 0U; - UINT16 wPLockLightUpTrainId = 0U; - UINT16 wRouteLockOverLapId = 0U; - UINT8 chOverLapBelongCiId = 0U; - UINT8 chTrainCrossPLockStt = 0U; UINT8 chTrainCrossRLockStt = 0U; UINT8 cRouteCId = 0u; UINT8 cLocalCiId = 0u; - UINT8 chLgcResShareFlag = 0U; UINT8 autoRouteType = 0U; UINT8 autoSigRouteType = 0U; UINT8 autoProtRouteType = 0U; @@ -2975,7 +2966,7 @@ UINT8 GetBackUpVobcMinTsr(UINT16* minSpeed, UINT16 logSum, UINT16 szLogId[]) { if (pTsrData[jj].cSpeed < *minSpeed) { - for (mm == 0U; mm < pTsrData[jj].cLogSecSum; mm++) + for (mm = 0U; mm < pTsrData[jj].cLogSecSum; mm++) { for (kk = 0U; kk < logSum; kk++) { @@ -3069,7 +3060,6 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt SetAllLineTsrState(CI_ALL_LINE_TSR_UNVALID); SetAllLineTsrSpeed(0u); } - /* 更新临时限速 */ SetTsrSum(cTsrSum); /* 更新数据 */ @@ -4840,8 +4830,6 @@ UINT8 AddLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout LogSecLockBelLogRouteStruct* logRoutBuf = NULL; /*逻辑区段所属逻辑进路数组*/ UINT16 logRoutSum = 0U; /*逻辑区段所属逻辑进路数组数量*/ UINT8 retVal = CI_ERROR; - UINT8 ii = 0U; - UINT8 chNeedKeepSum = 0U; bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/ @@ -5604,7 +5592,6 @@ UINT8 GetLogSecLockBelLogRouteBuf(const UINT16 wLgcId,OUT LogSecLockBelLogRouteS void SetLogSecLockStateHlht(UINT16 wLogSectionId, const UINT8 lockState) { UINT16 bufIndex = 0u; /*数组下标*/ - UINT8 preLockState = 0u; bufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ @@ -5770,4 +5757,159 @@ void SetLogSecRelAllLogRouteState(const UINT16 wLogSectionId) { } -} \ No newline at end of file +} + +/* +* 功能描述: 设置逻辑区段禁止FAO运行状态 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : void +*/ +void SetLogSecProhibitFAOState(UINT16 wLogSectionId, const UINT8 chState) +{ + UINT16 wBufIndex = 0U; /*数组下标*/ + + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + if ((LOGSEC_PROHIBIT_FAO_YES == chState) || (LOGSEC_PROHIBIT_FAO_NO == chState)) + { + LogicSectionDataStru[wBufIndex].chLogSecProhibitFAOFlag = chState; + } + else + { + /*不处理*/ + } + } +} + +/* +* 功能描述: 获取逻辑区段禁止FAO运行状态 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : 禁止FAO运行状态 +*/ +UINT8 GetLogSecProhibitFAOState(UINT16 wLogSectionId) +{ + UINT16 wBufIndex = 0U; /*数组下标*/ + UINT8 chReval = LOGSEC_PROHIBIT_FAO_NO; + + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + chReval = LogicSectionDataStru[wBufIndex].chLogSecProhibitFAOFlag; + } + + return chReval; +} + +/* +* 功能描述: 设置逻辑区段封锁类型 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* const UINT8 chLogicFLockState 逻辑区段封锁类型 +* 返回值 : VOID +* by fan 20251215 +*/ +void SetLogSecFLockType(const UINT16 wLogSectionId, const UINT8 chLogicFLockState) +{ + UINT16 wBufIndex = 0u; /*数组下标*/ + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + LogicSectionDataStru[wBufIndex].chLogSecFlockType = chLogicFLockState; + } +} + +/* +* 功能描述: 获取逻辑区段封锁类型 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : UINT8 chLogSecFlockType, 0xFFU错误 +* by fan 20251215 +*/ +UINT8 GetLogSecFLockType(const UINT16 wLogSectionId) +{ + UINT16 wBufIndex = 0u; /*数组下标*/ + UINT8 chFlockType = 0xFFU; + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + chFlockType = LogicSectionDataStru[wBufIndex].chLogSecFlockType; + } + return chFlockType; +} + +/* +* 功能描述: 检查逻辑区段关联屏蔽门有无异常打开 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 :CI_ERROR 有异常打开 CI_SUCCESS 无异常打开 +* by fan 20260319 +*/ +UINT8 CheckLogSecOpenPsd(const UINT16 wLogSectionId) +{ + UINT8 chReval = CI_ERROR; + UINT8 ii = 0U; + UINT8 chPsdSum = 0U; + UINT8 chPsdState = 0U; + UINT16 wPsdId = 0U; + chPsdSum = GetLogSecPsdSum(wLogSectionId); + if (0U == chPsdSum) + { + chReval = CI_SUCCESS; + } + else if(LOGSEC_RELATE_PSD_MAX>=chPsdSum) + { + chReval = CI_SUCCESS; + for (ii = 0U; ii < chPsdSum; ii++) + { + wPsdId = GetLogSecPsdByIdx(wLogSectionId, ii); + chPsdState = GePsdExceptOpenState(wPsdId); + if (PSD_EXCEPT_OPEN_NO != chPsdState) + { + chReval = CI_ERROR; + break; + } + } + } + else + { + ;/*获取失败*/ + } + return chReval; +} + +/* +* 功能描述: 检查逻辑区段关联ESB有无激活 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 :CI_ERROR 有激活 CI_SUCCESS 无激活 +* by fan 20260319 +*/ +UINT8 CheckLogSecActivateEsb(const UINT16 wLogSectionId) +{ + UINT8 chReval = CI_ERROR; + UINT8 ii = 0U; + UINT8 chEsbSum = 0U; + UINT8 chEsbState = 0U; + UINT16 wEsbId = 0U; + chEsbSum = GetLogSecEsbSum(wLogSectionId); + if (0U == chEsbSum) + { + chReval = CI_SUCCESS; + } + else if (LOGSEC_RELATE_ESB_MAX >= chEsbSum) + { + chReval = CI_SUCCESS; + for (ii = 0U; ii < chEsbSum; ii++) + { + wEsbId = GetLogSecEsbByIdx(wLogSectionId, ii); + chEsbState = GetEsbState(wEsbId); + if (ESB_STATE_VALID_NO != chEsbState) + { + chReval = CI_ERROR; + break; + } + } + } + else + { + ;/*获取失败*/ + } + return chReval; +} diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h index 9402c7a..6e99a65 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h @@ -90,6 +90,8 @@ typedef struct S_LogicSectionDataStruct UINT8 chAblRelLogSecUsableFlag; /*ABL列车关联逻辑区段允许使用标志*/ UINT8 cRouteLeaveLogFlag; /*第一离去区段ABL列车检查是否通过(相邻联锁发送发)*/ + UINT8 chLogSecFlockType;/*逻辑区段封锁类型*/ + UINT8 chLogSecProhibitFAOFlag; /*逻辑区段禁止FAO运行标志*/ } LogicSectionDataStruct; /* 临时限速结构体 */ @@ -1302,6 +1304,52 @@ void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId); */ void SetLogSecRelAllLogRouteState(const UINT16 wLogSectionId); +/* +* 功能描述: 设置逻辑区段禁止FAO运行状态 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : void +*/ +void SetLogSecProhibitFAOState(UINT16 wLogSectionId, const UINT8 chState); + +/* +* 功能描述: 获取逻辑区段禁止FAO运行状态 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : 禁止FAO运行状态 +*/ +UINT8 GetLogSecProhibitFAOState(UINT16 wLogSectionId); + +/* +* 功能描述: 设置逻辑区段封锁类型 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* const UINT8 chLogicFLockState 逻辑区段封锁类型 +* 返回值 : VOID +* by fan 20251215 +*/ +void SetLogSecFLockType(const UINT16 wLogSectionId, const UINT8 chLogicFLockState); + +/* +* 功能描述: 获取逻辑区段封锁类型 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 : UINT8 chLogSecFlockType, 0xFFU错误 +* by fan 20251215 +*/ +UINT8 GetLogSecFLockType(const UINT16 wLogSectionId); + +/* +* 功能描述: 检查逻辑区段关联屏蔽门有无异常打开 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 :CI_ERROR 有异常打开 CI_SUCCESS 无异常打开 +* by fan 20260319 +*/ +UINT8 CheckLogSecOpenPsd(const UINT16 wLogSectionId); +/* +* 功能描述: 检查逻辑区段关联ESB有无激活 +* 参数说明: const UINT16 wLogSectionId, 逻辑区段ID +* 返回值 :CI_ERROR 有激活 CI_SUCCESS 无激活 +* by fan 20260319 +*/ +UINT8 CheckLogSecActivateEsb(const UINT16 wLogSectionId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c index c0ec92e..5a2e75d 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c @@ -1104,9 +1104,7 @@ void AddAdjacentPhySec(const UINT16 wPhySecId) UINT8 k = 0U; UINT16* pACBuff = NULL; /*物理区段计轴数组*/ UINT16 wAcStratLink = 0U;/*计轴始端link*/ - UINT16 wAxisID = 0U; /*计轴器编号*/ UINT16 wAcTerminLink = 0U; /*计轴终端link*/ - UINT16 phySectionConfigDataSum = 0u; /*物理区段设备配置数据总数*/ UINT8 chAcLinkSum = 0; UINT16* pAclinkBuf = NULL; UINT16 wStartNearLink = 0U; /*计轴始端相邻link*/ @@ -1356,10 +1354,7 @@ UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec) UINT16* wAdjacentPhyBuf = NULL; /*直接相连区段数组*/ UINT16 chAdjacentPhyNum = 0U; /*直接相连区段数量*/ UINT8 chNearSecNum = 0U; /*间接相邻数量*/ - UINT16* dwNearSecBuf = NULL; /*间接相连区段数组*/ UINT16 bufIndex = 0U; - UINT8 chCiType = 0U; - UINT8 chBelongCi = 0U; bufIndex = GetPhySecConfigBufIndex(basePhysec); /*获取区段数组下标*/ chAdjacentPhyNum = GetAdjacentPhySecNum(basePhysec); @@ -1464,7 +1459,6 @@ UINT8 PhySectionNearConfigDataManage(void) UINT8 chAdjacentPhyNum = 0U; /*直接相连区段数量*/ UINT8 chNearSecNum = 0U; /*间接相邻数量*/ UINT16* dwNearSecBuf = NULL; /*间接相连区段数组*/ - UINT8 chLocalCiType = GetLocalCiType(); UINT8 chLocal = GetSystemParaLocalCiId(); UINT8 chBelongCi = 0U; @@ -1610,4 +1604,97 @@ UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle) } return wReval; +} + +/* +* 功能描述: 物理区段内共用道岔的逻辑区段整理 +* 参数说明: const UINT16 wPhySecId +* 返回值 : CI_SUCCESS CI_ERROR +* by fan 2026.03.17 +*/ +UINT8 InitLogSecSwitchShareStatusByPhysec() +{ + UINT8 retVal = CI_ERROR; + UINT16* pLogSecInphyBuff = NULL;/*物理区段的逻辑区段ID*/ + UINT8 wLogSecSum = 0U; + UINT16 ii = 0U; + UINT8 cLogIndex = 0U; + UINT8 cCheckLogIndex = 0U; + UINT8 kk = 0U; + UINT8 jj = 0U; + UINT16 wPhySecId = 0U;/*物理区段ID*/ + LogsecSwitchStruct* SwitchList = NULL; + UINT8 chSwitchSum = 0U;/*逻辑区段关联道岔*/ + LogsecSwitchStruct* OtherSwitchList = NULL; + UINT8 chOtherSwitchSum = 0U;/*逻辑区段关联道岔*/ + UINT16 wBaseLogId = 0U; + UINT8 chAddSec = CI_ERROR; + UINT16 wSwitchId = 0U;/*逻辑区段关联道岔*/ + for (ii = 0u; ii < totalPhysicalSectionNum; ii++) + { + /*遍历物理区段*/ + retVal = CI_SUCCESS; + wPhySecId = LocalCiPhysicalSectionIdBuf[ii]; + wLogSecSum = GetPhySecIncLogSecSum(wPhySecId); + pLogSecInphyBuff = GetPhySecIncLogSecIdBuf(wPhySecId); + if (1U < wLogSecSum) + { + for (cLogIndex = 0U; cLogIndex < wLogSecSum-1U; cLogIndex++) + { + wBaseLogId = pLogSecInphyBuff[cLogIndex]; + SwitchList = GetLogicSecSwitchIdStru(wBaseLogId); + chSwitchSum = GetLogicSecSwitchSum(wBaseLogId); + /*遍历自己以外同一个物理区段的逻辑区段*/ + if (0U < chSwitchSum) + { + for (cCheckLogIndex = cLogIndex + 1U; cCheckLogIndex < wLogSecSum; cCheckLogIndex++) + { + OtherSwitchList = GetLogicSecSwitchIdStru(pLogSecInphyBuff[cCheckLogIndex]); + chOtherSwitchSum = GetLogicSecSwitchSum(pLogSecInphyBuff[cCheckLogIndex]); + chAddSec = CI_ERROR; + /*检查存在任意共用道岔的区段*/ + for (jj = 0U; jj < chSwitchSum; jj++) + { + wSwitchId = SwitchList[jj].SwitchId; + for (kk = 0U; kk < chOtherSwitchSum; kk++) + { + if (OtherSwitchList[kk].SwitchId == wSwitchId) + { + chAddSec = AddLogSecSameSwitchSec(wBaseLogId, pLogSecInphyBuff[cCheckLogIndex]); + chAddSec &= AddLogSecSameSwitchSec(pLogSecInphyBuff[cCheckLogIndex], wBaseLogId);/*相互共用道岔*/ + if (CI_ERROR == chAddSec) + { + debug_infor_printf((const)"\n LogSec1 :%d LogSec2 :%dShareSwitchSec Add Fail.\n", wBaseLogId, pLogSecInphyBuff[cCheckLogIndex]); + retVal = CI_ERROR; + } + break; + } + else + { + ;/*继续*/ + } + } + if ((CI_SUCCESS == chAddSec) || (CI_ERROR == retVal)) + { + break;/*区段已添加或错误*/ + } + } + } + } + else + { + ;/*不会有共用道岔*/ + } + } + } + else + { + ;/*无共用道岔区段*/ + } + if (CI_ERROR == retVal) + { + break;/*错误*/ + } + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h index fdb6af5..56fde24 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h @@ -511,6 +511,13 @@ void SetPhyPossibleArbTag(const UINT16 wPhySecId, UINT8 chArbTag); * by cgh 20250415 */ UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle); +/* +* 功能描述: 物理区段内共用道岔的逻辑区段整理 +* 参数说明:无 +* 返回值 : CI_SUCCESS CI_ERROR +* by fan 2026.03.17 +*/ +UINT8 InitLogSecSwitchShareStatusByPhysec(); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c index 6ac7be5..044220f 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c @@ -12,11 +12,11 @@ #include "PhysicalSectionDataManage.h" #include "AxisAssertManageAPI.h" - - +#include "../ParsePack/ParsePackGateWayData.h" +#include "../QueryFiles/dquCIInterFace.h" PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*定义物理区段数据结构体*/ - +UINT8 g_AllSecFlockState = ALLFLOCK_SET_NO; /* 全线区段封锁状态 */ /* * 功能描述: 获取指定ID数据 @@ -1312,6 +1312,7 @@ UINT8 GetPhySecCurAndMergeState(const UINT16 phySectionId) void SetPhySecCurMergeState(const UINT16 phySectionId, const UINT8 curProcState) { UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 dwCurCycNum = 0U; /*当前周期*/ bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ @@ -1319,7 +1320,6 @@ void SetPhySecCurMergeState(const UINT16 phySectionId, const UINT8 curProcState) { if ((SECTION_OCCUPY_NO == curProcState) || (SECTION_OCCUPY_YES == curProcState)) { - /*占用状态变化*/ if (PhysicalSectionDataStru[bufIndex].CurMergeOccupyState != curProcState) { @@ -1329,6 +1329,19 @@ void SetPhySecCurMergeState(const UINT16 phySectionId, const UINT8 curProcState) PhysicalSectionDataStru[bufIndex].CurMergeOccupyState = curProcState; /*物理区段当前融合状态*/ + dwCurCycNum = Get2oo2CurCycleNum(); + if (SECTION_OCCUPY_NO == curProcState) + { + /*更新物理区段融合占用起始周期为0、融合空闲起始周期为当周期*/ + SetSecMergeOccupyStartCycNum(phySectionId, 0U); + SetPhySecMerIdleStartCycNum(phySectionId, dwCurCycNum); + } + else + { + /*更新物理区段融合占用起始周期为当周期、融合空闲起始周期为0*/ + SetSecMergeOccupyStartCycNum(phySectionId, dwCurCycNum); + SetPhySecMerIdleStartCycNum(phySectionId, 0U); + } } else { @@ -2512,12 +2525,53 @@ void SetPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType) if (bufIndex < PHYSICAL_SECTION_SUM_MAX) { - if ((PHY_SEC_FLOCK_TYPE_NONE == fLockType) || (PHY_SEC_FLOCK_TYPE_SPKS == fLockType) || (PHY_SEC_FLOCK_TYPE_CMD == fLockType)|| (PHY_SEC_FLOCK_TYPE_SPKSCMD == fLockType)) + if ((SEC_FLOCK_TYPE_SPKS == fLockType) || (SEC_FLOCK_TYPE_CMD == fLockType) + || (SEC_FLOCK_TYPE_APG == fLockType) || (SEC_FLOCK_TYPE_ALLFLOCK == fLockType) + || (SEC_FLOCK_TYPE_ESB == fLockType) || (SEC_FLOCK_TYPE_CESB == fLockType)) { - PhysicalSectionDataStru[bufIndex].FLockType = fLockType; + PhysicalSectionDataStru[bufIndex].FLockType |= fLockType; + } + else + { + ; /*不处理 清除状态使用CancelPhySecFLockType*/ } } - + +} + +/* +* 功能描述: 删除特定物理区段封锁原因 +* 参数说明: +UINT16 phySectionId, 物理区段ID +const UINT8 fLockType,待删除物理区段封锁类型 +* 返回值 : +无 +*/ +void CancelPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 chTempState = 0U; + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((SEC_FLOCK_TYPE_SPKS == fLockType) || (SEC_FLOCK_TYPE_CMD == fLockType) + || (SEC_FLOCK_TYPE_APG == fLockType) || (SEC_FLOCK_TYPE_ALLFLOCK == fLockType) + || (SEC_FLOCK_TYPE_ESB == fLockType) || (SEC_FLOCK_TYPE_CESB == fLockType)) + { + chTempState = PhysicalSectionDataStru[bufIndex].FLockType & fLockType; + if (fLockType == chTempState) + { + /*存在待取消的封锁原因*/ + PhysicalSectionDataStru[bufIndex].FLockType -= fLockType; + } + } + else + { + ; /*参数非法*/ + } + } + } /* @@ -2529,7 +2583,7 @@ void SetPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType) UINT8 GetPhySecFLockType(const UINT16 phySectionId) { UINT16 bufIndex = 0u; /*数组下标*/ - UINT8 retVal = CI_ERROR; + UINT8 retVal = 0xFFU; bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ @@ -2539,7 +2593,7 @@ UINT8 GetPhySecFLockType(const UINT16 phySectionId) } else { - retVal = CI_ERROR; + retVal = 0xFFU; } return retVal; @@ -4233,4 +4287,682 @@ void SetHlhtPhySecCtOrUtOccState(const UINT16 phySecId, const UINT8 flag) { /*不做处理*/ } +} + +/* +* 功能描述:设置指定ID物理区段融合占用起始周期 +* 参数说明:const UINT16 phySectionId 物理区段ID +* const UINT8 startCycNum 占用起始周期 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SetSecMergeOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((0U == PhysicalSectionDataStru[bufIndex].SecMergeOccupyStartCycNum) || (0U == startCycNum)) + { + /*已设置的周期号为0或者待设置的周期号为0,则更新周期号*/ + PhysicalSectionDataStru[bufIndex].SecMergeOccupyStartCycNum = startCycNum; + } + else + { + /*不更新周期号*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述:获取指定ID物理区段融合占用起始周期 +* 参数说明:const UINT16 phySectionId, 区段ID +* 返 回 值:物理区段采集占用起始周期 +* Created By LQ 2025.12.12 +*/ +UINT32 GetSecMergeOccupyStartCycNum(const UINT16 phySectionId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + retVal = PhysicalSectionDataStru[bufIndex].SecMergeOccupyStartCycNum; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + + +/** +* @brief 全线区段封锁主处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.13 +*/ +void AllSecFlockCmdProc(void) +{ + AtsAllSecFlockMsgStru * strMsgFst = NULL; + AtsAllSecFlockMsgStru * strMsgSnd = NULL; + UINT8 cLocalCiType = 0U; + UINT8 cDsnFuncSwitch = 0U; /*迪士尼功能开关*/ + UINT8 cCurTrainTestStatus = 0U; /*当前试车状态*/ + + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsFlockMsgFst(); + strMsgSnd = GetAtsFlockMsgSnd(); + + if ((strMsgFst->chFlag != FLAG_SET) && (strMsgSnd->chFlag != FLAG_SET)) + { + ; /* 没有消息,什么也不做 */ + } + else if ((strMsgFst->chFlag == FLAG_SET) && (strMsgSnd->chFlag != FLAG_SET)) + {/* 一次消息 */ + AllSecFlockAtsCmdFst(); + } + else + {/* 二次消息 */ + AllSecFlockAtsCmdSnd(); + } + + cLocalCiType = GetLocalCiType(); + cDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + cCurTrainTestStatus = GetCiTrainTestStatus(); /*获取试车状态*/ + if ((CI_TYPE_SCX == cLocalCiType) && (FUNC_SWITCH_ON == cDsnFuncSwitch) && (CI_TRAIN_TEST_ON != cCurTrainTestStatus)) + { + /*DSN试车线不在试车中时,RC设置全线封锁,即使ATS下发全线解封命令,RC也会重置为全线封锁*/ + SetAllSecFlockState(ALLFLOCK_SET_YES); + } + else + { + /*不处理*/ + } +} + +/** +* @brief 全线区段封锁首次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.13 +*/ +static void AllSecFlockAtsCmdFst(void) +{ + AtsAllSecFlockMsgStru * strMsgFst = NULL; + AtsMsgCfmStru * strCfmFst = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT8 chFunRtn = CI_TIME_OUT; + UINT8 chState = 0U; /*全线区段封锁状态*/ + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + /*以下消息获取不会返回NULL*/ + strMsgFst = GetAtsFlockMsgFst(); + strCfmFst = GetAtsFlockCfmFst(); + + if (strMsgFst->dwCycle == dwCycle) + { + strCfmFst->chFlag = FLAG_SET; + strCfmFst->chTiocId = chLocalId; + strCfmFst->chStation = strMsgFst->chStation; + strCfmFst->wIndex = strMsgFst->wIndex; + strCfmFst->dwTime = dwCycle; + chState = GetAllSecFlockState(); + if (SEC_ALLFLOCK_CMD_CANCLE == strMsgFst->chType) + { + /* 取消全线区段封锁制动 */ + if (ALLFLOCK_SET_NO == chState) + {/* 当前未设置 */ + strCfmFst->chOpStatus = CONFIRM_ALLFLOCK_FST_UNSET; + } + else + { + strCfmFst->chOpStatus = CONFIRM_ALLFLOCK_FST_SUCCESS; + } + } + else if (SEC_ALLFLOCK_CMD_SET == strMsgFst->chType) + {/* 设置全线区段封 */ + if (ALLFLOCK_SET_YES == chState) + {/* 当前已设置,重复设置 */ + strCfmFst->chOpStatus = CONFIRM_ALLFLOCK_FST_REPEAT; + } + else + { + strCfmFst->chOpStatus = CONFIRM_ALLFLOCK_FST_SUCCESS; + SetAllSecFlockState(ALLFLOCK_SET_YES); + } + } + + szCrcTmp[ii] = strMsgFst->chAtsId; + ii++; + szCrcTmp[ii] = strMsgFst->chStation; + ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + szCrcTmp[ii] = strMsgFst->chType; + ii++; + strCfmFst->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); /* ATS编号、车站编号、操作站编号、下发时间、命令类型计算CRC */ + + if ((SEC_ALLFLOCK_CMD_SET == strMsgFst->chType) || (CONFIRM_ALLFLOCK_FST_SUCCESS != strCfmFst->chOpStatus)) + { + ClearAtsAllFlockMsgFirst(); /* 设置为一次命令或处理不成功,需清除一次命令 */ + } + else + { + ; + } + } + else + {/* 接收到ATS一次消息非本周期,超时判断 */ + chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); + if (CI_TIME_OUT == chFunRtn) + { + ClearAtsAllFlockMsgFirst(); + } + else + { + ; + } + } +} + +/** +* @brief 区段封锁类型更新处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.16 +*/ +void SectionFlockMergeLogicProc(void) +{ + /*更新全线区段封锁状态*/ + UINT16 wPhySecCurSum = 0U;/*区段总数*/ + UINT8 chLocalCiId = 0U; /*本联锁*/ + UINT16 phySectionId = 0U; + UINT8 chBelongCiId = 0U;/*区段所属联锁*/ + UINT8 chAllSecFlockState = 0U;/*全线区段封锁状态*/ + UINT8 cLogSecCbtcProperty = 0U;/*逻辑区段CBTC属性*/ + UINT16 ii = 0U; + UINT8 chPhySecFlockType = 0U;/*当前物理区段封锁类型*/ + UINT8 chLogSecFlockType = 0U;/*物理区段同步逻辑区段封锁类型*/ + UINT16* pLogSecBuf = NULL; + UINT8 chLogSecSum = 0U; + UINT8 jj = 0U; + UINT8 chStartFlock = 0U;/*上电封锁*/ + UINT8 chCurLogLockType = 0U;/*当前逻辑区段封锁状态*/ + UINT8 chTmpLogLockType = 0U;/*临时暂存封锁状态*/ + UINT8 chAllCesbFlockState = 0U;/*全线CESB封锁状态*/ + UINT8 chAllFlockCheck = CI_ERROR; + UINT8 chCESBFlockCheck = CI_ERROR; + UINT8 chConnectProperty = 0U; + wPhySecCurSum = GetTotalPhySecCurNum(); /*获取物理区段总数*/ + chLocalCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ + chAllSecFlockState = GetAllSecFlockState(); + chAllCesbFlockState = GetAllSecCesbState(); + chStartFlock = GetStartFLockFlag(); + /*处理物理区段*/ + for (ii = 0u; ii < wPhySecCurSum; ii++) + { + phySectionId = GetPhySecId(ii); /*获取物理区段ID*/ + chBelongCiId = GetPhySecBelongCiId(phySectionId); /*获取物理区段所属联锁ID*/ + /*仅处理本联锁*/ + if (chBelongCiId == chLocalCiId) + { + /*获取当前逻辑区段封锁状态*/ + pLogSecBuf = GetPhySecIncLogSecIdBuf(phySectionId); + chLogSecSum = GetPhySecIncLogSecSum(phySectionId); + if (NULL != pLogSecBuf) + { + chLogSecFlockType = SEC_FLOCK_TYPE_NONE; + if (CI_START_FLOCK_NO == chStartFlock) + { + chPhySecFlockType = GetPhySecFLockType(phySectionId); + /*更新站台门区段封锁*/ + if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG&chPhySecFlockType)) + { + /*根据物理区段既有异常打开状态更新逻辑区段*/ + chLogSecFlockType |= SEC_FLOCK_TYPE_APG; + } + + /*更新SPKS封锁*/ + if (SEC_FLOCK_TYPE_SPKS == (SEC_FLOCK_TYPE_SPKS&chPhySecFlockType)) + { + chLogSecFlockType |= SEC_FLOCK_TYPE_SPKS; + } + + /*更新ESB封锁*/ + if (SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB&chPhySecFlockType)) + { + chLogSecFlockType |= SEC_FLOCK_TYPE_ESB; + } + + } + else + { + /*更新上电封锁*/ + chLogSecFlockType = SEC_FLOCK_TYPE_CMD; + (void)SetPhySecFLockState(phySectionId, PHYSICAL_SECTION_FLOCK_YES);/*设置物理区段封锁状态为封锁*/ + } + /*封锁状态同步至逻辑区段*/ + chAllFlockCheck = CI_ERROR; + chCESBFlockCheck = CI_ERROR; + for (jj = 0U; jj < chLogSecSum; jj++) + { + chTmpLogLockType = chLogSecFlockType; + chCurLogLockType = GetLogSecFLockType(pLogSecBuf[jj]); + cLogSecCbtcProperty = GetLogSecCbtcProperty(pLogSecBuf[jj]); + chConnectProperty = GetLogSecConnectProperty(pLogSecBuf[jj]); + if((LOGSEC_CBTC_PROPERTY_YES == cLogSecCbtcProperty)&&(LOGSEC_CONNECT_PROPERTY_NO == chConnectProperty) + &&(CI_START_FLOCK_NO == chStartFlock)) + { + /*更新CBTC属性区段的CESB封锁和全线区段封锁状态*/ + if (ALLFLOCK_SET_YES == chAllSecFlockState) + { + chTmpLogLockType |= SEC_FLOCK_TYPE_ALLFLOCK; + chAllFlockCheck = CI_SUCCESS; + SetPhySecFLockType(phySectionId, SEC_FLOCK_TYPE_ALLFLOCK); + } + if (CESB_STATE_VALID_YES == chAllCesbFlockState) + { + chTmpLogLockType |= SEC_FLOCK_TYPE_CESB; + chCESBFlockCheck = CI_SUCCESS; + SetPhySecFLockType(phySectionId, SEC_FLOCK_TYPE_CESB); + } + } + + /*检查逻辑既有设置区段封锁状态*/ + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD & chCurLogLockType)) + { + chTmpLogLockType |= SEC_FLOCK_TYPE_CMD; + } + SetLogSecFLockType(pLogSecBuf[jj], chTmpLogLockType); + } + if (CI_ERROR == chAllFlockCheck) + { + /*区段内无CBTC区段或未全线封锁,删除物理区段全线封锁状态*/ + CancelPhySecFLockType(phySectionId, SEC_FLOCK_TYPE_ALLFLOCK); + } + if (CI_ERROR == chCESBFlockCheck) + { + /*区段内无CBTC区段或未CESB封锁,删除物理区段CESB封锁状态*/ + CancelPhySecFLockType(phySectionId, SEC_FLOCK_TYPE_CESB); + } + + chPhySecFlockType = GetPhySecFLockType(phySectionId); + /*更新物理区段封锁状态*/ + if ((SEC_FLOCK_TYPE_NONE == chPhySecFlockType) && (CI_START_FLOCK_NO == chStartFlock)) + { + (void)SetPhySecFLockState(phySectionId, PHYSICAL_SECTION_FLOCK_NO);/*设置物理区段封锁状态为未封锁*/ + } + else + { + (void)SetPhySecFLockState(phySectionId, PHYSICAL_SECTION_FLOCK_YES);/*设置物理区段封锁状态为封锁*/ + } + + } + } + else + { + ;/*不处理*/ + } + } +} + +/** +* @brief 全线列车区段封锁二次命令处理函数 +* @param 无 +* @return 无 +*/ +void AllSecFlockAtsCmdSnd(void) +{ + AtsAllSecFlockMsgStru * strMsgFst = NULL; + AtsAllSecFlockMsgStru * strMsgSnd = NULL; + AtsMsgCfmStru * strCfmFst = NULL; + AtsMsgCfmStru * strCfmSnd = NULL; + UINT32 dwCycle = 0u; + UINT8 chLocalId = 0u; + UINT8 chFlag = FLAG_UNSET; + UINT8 szCrcTmp[1024] = { 0u }; + UINT32 ii = 0u; + UINT32 dwCrc = 0u; + + chLocalId = GetSystemParaLocalCiId(); + dwCycle = Get2oo2CurCycleNum(); + strMsgFst = GetAtsFlockMsgFst(); + strMsgSnd = GetAtsFlockMsgSnd(); + strCfmFst = GetAtsFlockCfmFst(); + strCfmSnd = GetAtsFlockCfmSnd(); + + if ((NULL != strMsgFst) + && (NULL != strMsgSnd) + && (NULL != strCfmFst) + && (NULL != strCfmSnd)) + { + if (strMsgSnd->dwCycle == dwCycle) + { + strCfmSnd->chFlag = FLAG_SET; + strCfmSnd->chTiocId = chLocalId; + strCfmSnd->chStation = strMsgSnd->chStation; + strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->dwTime = dwCycle; + + if (FLAG_SET != strMsgFst->chFlag) + { + strCfmSnd->chOpStatus = CONFIRM_ALLFLOCK_SND_FIRST; /* 一次命令未执行,返回未执行首次取消 */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) + || (strMsgSnd->chStation != strMsgFst->chStation) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_ALLFLOCK_SND_UNKNOWN; /* ATS一二次命令帧头输入不一致,返回未知 */ + chFlag = FLAG_SET; + } + else if (strMsgSnd->chType != strMsgFst->chType) + { + strCfmSnd->chOpStatus = CONFIRM_ALLFLOCK_SND_CHECKFAIL; /* ATS一二次命令输入不一致,返回命令信息不一致 */ + chFlag = FLAG_SET; + } + else + { + /*不处理*/ + ; + } + + if (FLAG_UNSET == chFlag) + { + szCrcTmp[ii] = strMsgSnd->chTiocId; + ii++; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + szCrcTmp[ii] = strMsgSnd->chType; + ii++; + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + + if (dwCrc != strMsgSnd->dwCrc32) + { + strCfmSnd->chOpStatus = CONFIRM_ALLFLOCK_SND_CHECKFAIL; /* 计算的CRC32与ATS二次消息CRC32不一致 */ + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chAtsId; + szCrcTmp[ii++] = strMsgSnd->chStation; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; + LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + LongToChar(strMsgSnd->dwTime, &szCrcTmp[ii]); + ii += 4u; + szCrcTmp[ii++] = strMsgSnd->chType; + strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + + if ((SEC_ALLFLOCK_CMD_CANCLE == strMsgSnd->chType)&&( FLAG_UNSET == chFlag)) + { + strCfmSnd->chOpStatus = CONFIRM_ALLFLOCK_SND_SUCCESS; /* 检查通过,反馈确认成功 */ + SetAllSecFlockState(ALLFLOCK_SET_NO); /*设置全线封锁无效*/ + } + else + { + ; + } + } + else + { + ; /** 非本周期消息,不处理 */ + } + ClearAtsAllFlockMsgFirst(); + ClearAtsAllFlockMsgSecond(); + } + else + { + ; /**不可能分支 不处理 */ + } +} + +/** +* @brief 设置全线区段封锁全局变量状态 +* @param const UINT8 chState 全线区段封锁状态 +* @return 无 +* @note 当输入参数不合法时,设置全线区段封锁 +* Created By fan 2025.12.13 +*/ +void SetAllSecFlockState(const UINT8 chState) +{ + if (ALLFLOCK_SET_NO == chState) + { + g_AllSecFlockState = chState; + } + else + { + g_AllSecFlockState = ALLFLOCK_SET_YES; + } +} + +/** +* @brief 获取全线区段封锁全局变量状态 +* @param 无 +* @return ALLFLOCK_SET_NO:未全线封锁;ALLFLOCK_SET_YES :全线封锁 +* Created By fan 2025.12.13 +*/ +UINT8 GetAllSecFlockState(void) +{ + return g_AllSecFlockState; +} + +/* +* 功能描述:获取指定ID物理区段内占用的逻辑区段的锁闭所属进路 +* 参数说明:const UINT16 phySectionId 物理区段ID +* 返 回 值:0 获取失败 +* 非0 锁闭所属进路ID +* Created By LQ 2026.01.26 +*/ +UINT16 GetPhySecOccLgcLockRoute(const UINT16 phySectionId) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cPhySecIncLgcNum = 0U; /*物理区段包含的逻辑区段数量*/ + UINT16* pPhySecIncLgcId = NULL; /*物理区段包含的逻辑区段ID数组*/ + UINT8 ii = 0U; + UINT8 cLgcOccState = 0U; /*逻辑区段占用状态*/ + UINT16 wLockedRouteId = 0U; + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取物理区段数组下标*/ + + if (PHYSICAL_SECTION_SUM_MAX > bufIndex) + { + cPhySecIncLgcNum = GetPhySecIncLogSecSum(phySectionId); + pPhySecIncLgcId = GetPhySecIncLogSecIdBuf(phySectionId); + + if ((0U != cPhySecIncLgcNum) && (NULL != pPhySecIncLgcId)) + { + for (ii = 0U; ii < cPhySecIncLgcNum; ii++) + { + cLgcOccState = GetLogSecCurOccupyState(pPhySecIncLgcId[ii]); + wLockedRouteId = GetLogSecLockBelongRoute(pPhySecIncLgcId[ii]); + if ((SECTION_OCCUPY_NO != cLgcOccState) && (0U != wLockedRouteId)) + { + wRetVal = wLockedRouteId; /*传出占用的逻辑区段的锁闭所属进路*/ + break; + } + else + { + /*继续遍历*/ + } + } + } + else + { + /*异常分支,返回失败*/ + } + } + else + { + /*入参非法,返回失败*/ + } + + return wRetVal; +} + +/* +* 功能描述:设置指定ID物理区段融合空闲起始周期 +* 参数说明:const UINT16 phySectionId 物理区段ID +* const UINT8 startCycNum 起始周期 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void SetPhySecMerIdleStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ + + if (PHYSICAL_SECTION_SUM_MAX > bufIndex) + { + if ((0U == PhysicalSectionDataStru[bufIndex].dwMerOccToIdleStartCycNum) || (0U == startCycNum)) + { + /*已设置的周期号为0或者待设置的周期号为0,则更新周期号*/ + PhysicalSectionDataStru[bufIndex].dwMerOccToIdleStartCycNum = startCycNum; + } + else + { + /*不更新周期号*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述:获取指定ID物理区段融合空闲起始周期 +* 参数说明:const UINT16 phySectionId 区段ID +* 返 回 值:物理区段采集空闲起始周期 +* Created By LQ 2026.01.26 +*/ +UINT32 GetPhySecMerIdleStartCycNum(const UINT16 phySectionId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/ + + if (PHYSICAL_SECTION_SUM_MAX > bufIndex) + { + retVal = PhysicalSectionDataStru[bufIndex].dwMerOccToIdleStartCycNum; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述 人工解封时 根据物理区段关联逻辑区段封锁状态更新物理区段封锁 +* 参数说明:const UINT16 wPhySecId, 区段ID +* Created By fan 2026.02.03 +*/ +void PhyFlockStateFromLogSec(UINT16 wPhySecId) +{ + UINT8 chLogSecInPhySum = 0U;/*物理区段关联逻辑区段个数*/ + UINT16* pLogSecInphyBuff = NULL;/*关联逻辑区段数组*/ + UINT8 chPhyFlockType = 0U;/*物理区段封锁*/ + UINT8 chCmdCancelCheck = CI_SUCCESS;/*区段封锁是否取消标志*/ + UINT8 chApgCancelCheck = CI_SUCCESS;/*站台门异常打开封锁取消标志*/ + UINT8 chEsbCancelCheck = CI_SUCCESS;/*紧急按钮封锁取消标志*/ + UINT16 chLogSecId = 0U;/*逻辑区段ID*/ + UINT8 chLogSecFlockType = 0U;/*逻辑区段封锁状态*/ + UINT8 i = 0U; + UINT8 chStartFlock = 0U; + chStartFlock = GetStartFLockFlag();/*上电封锁状态*/ + if (CI_START_FLOCK_NO == chStartFlock) + { + chLogSecInPhySum = GetPhySecIncLogSecSum(wPhySecId); + pLogSecInphyBuff = GetPhySecIncLogSecIdBuf(wPhySecId); + if ((0U < chLogSecInPhySum) && (NULL != pLogSecInphyBuff)) + { + for (i = 0u; i < chLogSecInPhySum; i++) + { + chLogSecId = pLogSecInphyBuff[i]; + chLogSecFlockType = GetLogSecFLockType(chLogSecId); + if (SEC_FLOCK_TYPE_CMD == (SEC_FLOCK_TYPE_CMD& chLogSecFlockType)) + { + chCmdCancelCheck = CI_ERROR;/*仍然存在封锁的逻辑区段*/ + } + if (SEC_FLOCK_TYPE_APG == (SEC_FLOCK_TYPE_APG& chLogSecFlockType)) + { + chApgCancelCheck = CI_ERROR;/*仍然存在封锁的逻辑区段*/ + } + if (SEC_FLOCK_TYPE_ESB == (SEC_FLOCK_TYPE_ESB& chLogSecFlockType)) + { + chEsbCancelCheck = CI_ERROR;/*仍然存在封锁的逻辑区段*/ + } + } + if (CI_SUCCESS == chCmdCancelCheck) + { + /*删除物理区段的CMD封锁状态*/ + CancelPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_CMD); + } + else + { + SetPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_CMD); + } + if (CI_SUCCESS == chApgCancelCheck) + { + /*删除物理区段的APG封锁状态*/ + CancelPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_APG); + } + else + { + SetPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_APG); + } + if (CI_SUCCESS == chEsbCancelCheck) + { + /*删除物理区段的ESB封锁状态*/ + CancelPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_ESB); + } + else + { + SetPhySecFLockType(wPhySecId, SEC_FLOCK_TYPE_ESB); + } + chPhyFlockType = GetPhySecFLockType(wPhySecId); + if (SEC_FLOCK_TYPE_NONE == chPhyFlockType) + { + (void)SetPhySecFLockState(wPhySecId, PHYSICAL_SECTION_FLOCK_NO);/*设置物理区段封锁状态为未封锁*/ + } + else + { + ;/*存在其他封锁 保留*/ + } + } + } + else + { + (void)SetPhySecFLockState(wPhySecId, PHYSICAL_SECTION_FLOCK_YES);/*设置物理区段封锁状态为封锁*/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h index e9eaa03..f168f71 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h @@ -60,6 +60,7 @@ typedef struct S_PhysicalSectionDataStruct UINT8 ArbState; /*ARB状态 (动态字段)*/ UINT8 StopSteadyFlag; /*区段停稳信息(未停稳/停稳) (动态字段)*/ UINT32 SecColOccupyStartCycNum; /*区段采集占用起始周期 (动态字段)*/ + UINT32 SecMergeOccupyStartCycNum; /*区段融合占用起始周期 (动态字段)*/ UINT32 SecCurOccupyStartCycNum; /*区段当前占用开始周期 (动态字段)*/ UINT32 SecOccuToClearStartCycNum; /*区段占用变空闲开始周期 (动态字段)*/ UINT32 AutoUnlockStartCycNum; /*自动解锁延时开始周期 (动态字段)*/ @@ -88,9 +89,11 @@ typedef struct S_PhysicalSectionDataStruct UINT8 chPreABLTrainFlag; /*上一周期ABL列车标志 0xaa是ABL占用 每周期更新*/ UINT32 dwAblTagSetCyc; /*ABL标志设置周期*/ UINT8 cPhySecInHumidRailFlag; /*物理区段湿轨标志:0x55 无效;0xAA 有效*/ + UINT32 dwMerOccToIdleStartCycNum; /*物理区段融合空闲起始周期*/ } PhysicalSectionDataStruct; extern PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*定义物理区段数据结构体*/ +extern UINT8 g_AllSecFlockState; /* 全线区段封锁状态 */ /* * 功能描述: 清除区段防护锁闭状态 @@ -630,6 +633,16 @@ const UINT8 fLockType, */ void SetPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType); +/* +* 功能描述: 删除特定物理区段封锁原因 +* 参数说明: +UINT16 phySectionId, 物理区段ID +const UINT8 fLockType,待删除物理区段封锁类型 +* 返回值 : +无 +*/ +void CancelPhySecFLockType(const UINT16 phySectionId, const UINT8 fLockType); + /* * 功能描述: 获取物理区段封锁类型 * 参数说明: const UINT16 phySectionId, 区段ID @@ -1079,6 +1092,105 @@ void SetSecColOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCyc */ void SetHlhtPhySecCtOrUtOccState(const UINT16 phySecId, const UINT8 flag); +/* +* 功能描述:设置指定ID物理区段融合占用起始周期 +* 参数说明:const UINT16 phySectionId 物理区段ID +* const UINT8 startCycNum 占用起始周期 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SetSecMergeOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum); + +/* +* 功能描述:获取指定ID物理区段融合占用起始周期 +* 参数说明:const UINT16 phySectionId, 区段ID +* 返 回 值:物理区段采集占用起始周期 +* Created By LQ 2025.12.12 +*/ +UINT32 GetSecMergeOccupyStartCycNum(const UINT16 phySectionId); + +/** +* @brief 全线区段封锁主处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.13 +*/ +void AllSecFlockCmdProc(void); + +/** +* @brief 区段封锁类型更新处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.16 +*/ +void SectionFlockMergeLogicProc(void); + +/** +* @brief 全线区段封锁首次命令处理函数 +* @param 无 +* @return 无 +* Created By fan 2025.12.13 +*/ +static void AllSecFlockAtsCmdFst(void); + +/** +* @brief 全线列车区段封锁二次命令处理函数 +* @param 无 +* @return 无 +*/ +void AllSecFlockAtsCmdSnd(void); + +/** +* @brief 设置全线区段封锁全局变量状态 +* @param const UINT8 chState 全线区段封锁状态 +* @return 无 +* @note 当输入参数不合法时,设置全线区段封锁 +* Created By fan 2025.12.13 +*/ +void SetAllSecFlockState(const UINT8 chState); + +/** +* @brief 获取全线区段封锁全局变量状态 +* @param 无 +* @return ALLFLOCK_SET_NO:未全线封锁;ALLFLOCK_SET_YES :全线封锁 +* Created By fan 2025.12.13 +*/ +UINT8 GetAllSecFlockState(void); + +/* +* 功能描述:获取指定ID物理区段内占用的逻辑区段的锁闭所属进路 +* 参数说明:const UINT16 phySectionId 物理区段ID +* 返 回 值:0 获取失败 +* 非0 锁闭所属进路ID +* Created By LQ 2026.01.26 +*/ +UINT16 GetPhySecOccLgcLockRoute(const UINT16 phySectionId); + +/* +* 功能描述:设置指定ID物理区段融合空闲起始周期 +* 参数说明:const UINT16 phySectionId 物理区段ID +* const UINT8 startCycNum 起始周期 +* 返 回 值:无 +* Created By LQ 2026.01.26 +*/ +void SetPhySecMerIdleStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum); + +/* +* 功能描述:获取指定ID物理区段融合空闲起始周期 +* 参数说明:const UINT16 phySectionId 区段ID +* 返 回 值:物理区段采集空闲起始周期 +* Created By LQ 2026.01.26 +*/ +UINT32 GetPhySecMerIdleStartCycNum(const UINT16 phySectionId); + + +/* +* 功能描述 人工解封时 根据物理区段关联逻辑区段封锁状态更新物理区段封锁 +* 参数说明:const UINT16 wPhySecId, 区段ID +* Created By fan 2026.02.03 +*/ +void PhyFlockStateFromLogSec(UINT16 wPhySecId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/SectionDefine.h b/TSCP/src/APP/ciapp/Section/SectionDefine.h index 6c113cf..1b83d7e 100644 --- a/TSCP/src/APP/ciapp/Section/SectionDefine.h +++ b/TSCP/src/APP/ciapp/Section/SectionDefine.h @@ -188,12 +188,15 @@ #define PHYSICAL_JUMPUNLOCK_DELAY_SET_NO ((UINT8)0x55) /*未设置*/ #define PHYSICAL_JUMPUNLOCK_DELAY_SET_YES ((UINT8)0xaa) /*设置*/ -/*物理区段封锁类型宏定义*/ -#define PHY_SEC_FLOCK_TYPE_NONE ((UINT8)0x55) /*无封锁*/ -#define PHY_SEC_FLOCK_TYPE_SPKSCMD ((UINT8)0x10) /*SPKS按下 且设置区段封锁命令的物理区段封锁*/ -#define PHY_SEC_FLOCK_TYPE_SPKS ((UINT8)0xAA) /*SPKS按下 未设置区段封锁命令的物理区段封锁*/ -#define PHY_SEC_FLOCK_TYPE_CMD ((UINT8)0x20) /*SPKS未按下 设置区段封锁命令的物理区段封锁*/ - +/*区段封锁类型宏定义*/ +#define SEC_FLOCK_TYPE_NONE ((UINT8)0x00) /*无封锁*/ +#define SEC_FLOCK_TYPE_SPKS ((UINT8)0x01) /*存在SPKS按下封锁 */ +#define SEC_FLOCK_TYPE_CMD ((UINT8)0x02) /*存在区段封锁*/ +#define SEC_FLOCK_TYPE_APG ((UINT8)0x04) /*存在站台门区段封锁*/ +#define SEC_FLOCK_TYPE_ALLFLOCK ((UINT8)0x08) /*存在全线区段封锁*/ +#define SEC_FLOCK_TYPE_ESB ((UINT8)0x10) /*存在ESB区段封锁*/ +#define SEC_FLOCK_TYPE_CESB ((UINT8)0x20) /*存在CESB区段封锁*/ +#define SEC_FLOCK_CBTCLASTSEC_PASS ((SEC_FLOCK_TYPE_SPKS|SEC_FLOCK_TYPE_APG)|SEC_FLOCK_TYPE_ESB) /*CBTC进路最后区段不检查的封锁类型*/ /*物理区段是否属于ZC管辖区域*/ #define PHY_SEC_MANAGED_BY_ZC_YES ((UINT8)0x55) /*物理区段属于ZC管辖区域*/ @@ -267,6 +270,7 @@ /* 临时限速数量信息 */ #define TSR_SEC_MAX_SUM ((UINT8)50u) /* 单个限速的最大限速区段数目 */ #define TSR_MAX_SUM ((UINT8)20u) /* 本控区临时限速的最大数量 */ +#define TSR_SWITCH_NUM_MAX ((UINT8)10U) /*临时限速包含的道岔数量*/ #if 0 #define LOGIC_SECTION_JUMPLOCK_APPLY_NO ((UINT8)0x55) /*逻辑区段无跳跃锁闭申请命令*/ @@ -308,7 +312,7 @@ #define LINK_PLATFORM_YES ((UINT8)0x55) /* link为站台 */ #define LINK_PLATFORM_NO ((UINT8)0xaa) /* link不为站台 */ -#define POINT_BELONG_LGC_MAX ((UINT8)0x05u) /* 点所属逻辑区段最大数量 */ +#define POINT_BELONG_LGC_MAX ((UINT8)0x06u) /* 点所属逻辑区段最大数量 */ /*逻辑区段ARB状态*/ #define LGC_SECTION_ARB_NO ((UINT8)0x55) /*未ARB*/ @@ -334,6 +338,10 @@ #define LOGSEC_CBTC_PROPERTY_YES ((UINT8)0x55) /*逻辑区段具有CBTC区域属性(所有link均具有CBTC区域属性)*/ #define LOGSEC_CBTC_PROPERTY_NO ((UINT8)0xaa) /*逻辑区段不具有CBTC区域属性(存在link不具有CBTC区域属性)*/ +/*逻辑区段联络线区域属性*/ +#define LOGSEC_CONNECT_PROPERTY_YES ((UINT8)0x55) /*逻辑区段具有联络线属性(所有link均具有联络线属性)*/ +#define LOGSEC_CONNECT_PROPERTY_NO ((UINT8)0xaa) /*逻辑区段非联络线(存在link不具有联络线区域属性)*/ + /*逻辑区段ABL接近检查标志*/ #define LOGSEC_LEAVE_LOGSEC_REPLY_YES ((UINT8)0xaa) /*离去区段的ABL列车条件检查通过*/ #define LOGSEC_LEAVE_LOGSEC_REPLY_NO ((UINT8)0x55) /*离去区段的ABL列车条件检查不通过*/ @@ -364,4 +372,36 @@ #define AXIS_SEC_CBTC_PROPERTY_YES ((UINT8)0x55) /*计轴区段具有CBTC区域属性(所有link均具有CBTC区域属性)*/ #define AXIS_SEC_CBTC_PROPERTY_NO ((UINT8)0xaa) /*计轴区段不具有CBTC区域属性(存在link不具有CBTC区域属性)*/ +/*逻辑区段禁止FAO运行*/ +#define LOGSEC_PROHIBIT_FAO_YES ((UINT8)0xAA) /*逻辑区段禁止FAO运行*/ +#define LOGSEC_PROHIBIT_FAO_NO ((UINT8)0x55) /*逻辑区段允许FAO运行*/ + +/*区段全线封锁标志*/ +#define ALLFLOCK_SET_YES ((UINT8)0x55u) /* 全线封锁区段有效*/ +#define ALLFLOCK_SET_NO ((UINT8)0xaau) /* 未全线区段封锁*/ + +#define LINK_LINE_YES ((UINT8)0x55u) /* LINK具备联络线属性 */ +#define LINK_LINE_NO ((UINT8)0xAAu) /* LINK不具备联络线属性 */ + +#define LINK_INC_SRSEC_SUM_MAX (UINT8)150U /*link包含的限速区段数量最大值*/ +#define MAX_LINE_SEC_NUM 2001U /*线路中最大限速区段数量*/ +#define DEFAULT_UINT16_MAX 0xFFFFu + +/*限速区段是否设置*/ +#define FLAG_SL (UINT8)0xAAu /*已设置*/ +#define FLAG_UNSL (UINT8)0x55u /*未设置*/ +/*限速区段台风属性是否设置*/ +#define SPEED_LIMIT_TYPHOON_TYPE_VALID (UINT8)0x55u /*已设置台风属性*/ +#define SPEED_LIMIT_TYPHOON_TYPE_INVALID (UINT8)0xAAu /*未设置台风属性*/ + +/*限速区段起点至终点的逻辑方向*/ +#define TSRSEC_LOG_DIR_SAME ((UINT8)0x55)/*逻辑方向相同*/ +#define TSRSEC_LOG_DIR_OPPOSITE ((UINT8)0xAA)/*逻辑方向相反*/ + +#define TSRSEC_SWITCH_POS_DINGWEI ((UINT8)0x55) /*临时限速道岔定位*/ +#define TSRSEC_SWITCH_POS_FANWEI ((UINT8)0xAA) /*临时限速道岔反位*/ + +/*相邻限速区段查询方式*/ +#define QUERY_FOR_START (UINT8)0x55U /*按起点查询*/ +#define QUERY_FOR_END (UINT8)0xAAU /*按终点查询*/ #endif diff --git a/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.c b/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.c new file mode 100644 index 0000000..5a03ae5 --- /dev/null +++ b/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.c @@ -0,0 +1,832 @@ +/******************************************************** +* +* 文 件 名: SpeedLimitSecConfigDataManage.c +* 版权说明: 北京交控科技有限公司 +* 创建时间: 2020-03-20 +* 作 者: 联锁组 +* 功能描述: 限速区段数据配置管理 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "SpeedLimitSecConfigDataManage.h" + + +SpeedLimitConfigSecInfo gSpeedLimitSecConfigData[MAX_LINE_SEC_NUM] = { 0u }; /*限速区段配置信息*/ +UINT16 gSpeedLimitSecTotalLen = 0U; /*线路中限速区段数量*/ +UINT16 gSpeedLimitSecIdBuf[MAX_LINE_SEC_NUM] = { 0U }; /*存储限速区段ID*/ +str_LinkCfgInfo gLinkCfgData[LINK_SUM_MAX] = { 0U }; /*link配置数据结构体*/ + + +/* +* 功能描述: 获取指定ID限速区段索引号 +* 参数说明: const UINT16 speedLimitSecId, 限速区段ID +* 返回值 : MAX_LINE_SEC_NUM: 获取数据失败 +* = 1U) && (speedLimitSecId < MAX_LINE_SEC_NUM)) + { + retVal = speedLimitSecId; + } + else + { + ; + } + + return retVal; +} + +/* +* 功能描述: 查询限速区段所属RC ID +* 参数说明: const UINT16 TsrSecId 限速区段ID +* 返回值 : +* 0U: 失败 +* >0U: RC ID +* Created By:hh 2026.03.14 +*/ +UINT16 DsuTsrSecBelongRC(const UINT16 TsrSecId) +{ + UINT16 wRtn = 0U; + DSU_SPEED_LIMIT_SEC_STRU* pRespeedSgmtStru = NULL; + DSU_LINK_STRU* pLinkStru = NULL; + + /*入参防护检查*/ + if ((0U == TsrSecId) || (TsrSecId > g_dsuEmapStru->dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM) + || (MAX_LINE_SEC_NUM <= g_dsuEmapStru->dsuEmapIndexStru->dsuSpeedLimitSecIndex[TsrSecId])) + { + wRtn = 0U; + } + else + { + /*获取指定ID限速区段信息*/ + pRespeedSgmtStru = g_dsuEmapStru->dsuStaticHeadStru->pSpeedLimitSecStru + g_dsuEmapStru->dsuEmapIndexStru->dsuSpeedLimitSecIndex[TsrSecId]; + + if ((0U < pRespeedSgmtStru->wSecLinkId) && (pRespeedSgmtStru->wSecLinkId <= g_dsuEmapStru->dsuEmapIndexStru->LINKINDEXNUM) + && (LINK_SUM_MAX > g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[pRespeedSgmtStru->wSecLinkId])) + { + pLinkStru = g_dsuEmapStru->dsuStaticHeadStru->pLinkStru + g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[pRespeedSgmtStru->wSecLinkId]; + wRtn = pLinkStru->wManagePhysicalCI; + } + else + { + wRtn = 0U; + } + } + + return wRtn; +} + + + +/* +* 功能描述: 初始化限速区段信息。 +* 参数说明: void +* 返回值 : +* CI_SUCCESS,初始成功; +* CI_ERROR,初始化失败。 +* Created By:hh 2026.03.14 +*/ +UINT8 InitSpeedLimitSecConfigData(void) +{ + UINT8 chRtn = CI_ERROR; + UINT16 wSecCycle = 0U; + UINT16 wIndex = DEFAULT_UINT16_MAX; + DSU_SPEED_LIMIT_SEC_STRU* pRespeedSgmtStru = NULL; + DSU_LINK_STRU* pstrCurLinkStru = NULL; /*限速区段所在link信息*/ + + + UINT16 wRcId = 0U; + + /*重置限速区段信息为0*/ + (void)CommonMemSet(&gSpeedLimitSecConfigData[0U], (UINT32)(sizeof(SpeedLimitConfigSecInfo) * MAX_LINE_SEC_NUM), (UINT8)(0U), (UINT32)(sizeof(SpeedLimitConfigSecInfo) * MAX_LINE_SEC_NUM)); + + chRtn = LinkIncSRSecInfoInit(); /*初始化link包含的限速区段信息*/ + + if (CI_SUCCESS == chRtn) + { + if (0U == g_dsuEmapStru->dsuDataLenStru->wSpeedLimitSecLen) + { + chRtn = CI_SUCCESS; /*无限速区段,返回成功*/ + } + else + { + /*初始化限速区段信息*/ + for (wSecCycle = 0U; wSecCycle < g_dsuEmapStru->dsuDataLenStru->wSpeedLimitSecLen; wSecCycle++) + { + /*获取限速区段信息结构体指针*/ + pRespeedSgmtStru = g_dsuEmapStru->dsuStaticHeadStru->pSpeedLimitSecStru + wSecCycle; + if (NULL != pRespeedSgmtStru) + { + wIndex = pRespeedSgmtStru->wSLSecId; + if (wIndex < MAX_LINE_SEC_NUM) + { + /*缓存限速信息ID*/ + gSpeedLimitSecConfigData[wIndex].secID = pRespeedSgmtStru->wSLSecId; /*设置ID*/ + gSpeedLimitSecConfigData[wIndex].wBelongLinkId = pRespeedSgmtStru->wSecLinkId; /*设置限速区段所处link ID*/ + /*设置限速区段起始link 偏移量*/ + gSpeedLimitSecConfigData[wIndex].dwStartLinkOff = pRespeedSgmtStru->dwSecStartLinkOff; + /*设置限速区段终止link 偏移量*/ + gSpeedLimitSecConfigData[wIndex].dwEndLinkOff = pRespeedSgmtStru->dwSecEndLinkOff; + /*查询限速区段所属RC*/ + wRcId = DsuTsrSecBelongRC(gSpeedLimitSecConfigData[wIndex].secID); + pstrCurLinkStru = g_dsuEmapStru->dsuStaticHeadStru->pLinkStru + g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[gSpeedLimitSecConfigData[wIndex].wBelongLinkId]; + gSpeedLimitSecConfigData[wIndex].chTyphoonType = pstrCurLinkStru->cTyphoonTsrAttr; + if (0U != wRcId) + { + chRtn = SRSecRelOtherSRSecInit(&gSpeedLimitSecConfigData[wIndex]); /*初始化限速区段起点和终点关联的其它限速区段*/ + + /*限速区段关联的其它限速区段初始化成功*/ + if (CI_SUCCESS == chRtn) + { + gSpeedLimitSecConfigData[wIndex].chBelongRCID = (UINT8)wRcId; /*存储限速区段所属RC*/ + gSpeedLimitSecIdBuf[gSpeedLimitSecTotalLen] = pRespeedSgmtStru->wSLSecId; + gSpeedLimitSecTotalLen++; + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: SRSecRelOtherSRSecInit Fail\n"); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: Get Sec Belong Rc Fail\n"); + chRtn = CI_ERROR; + } + } + else + { + chRtn = CI_ERROR; /*数据异常,返回失败*/ + } + + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: Get Sec Info Fail\n"); + chRtn = CI_ERROR; /*数据异常,返回失败*/ + } + + if (CI_ERROR == chRtn) + { + break; + } + else + { + /*继续初始化*/ + } + } + + + if (CI_SUCCESS == chRtn) + { + /*初始化限速区段关联的起点道岔和终点道岔*/ + chRtn = SRSecRelSwitchInit(); + if (CI_SUCCESS == chRtn) + { + /*返回成功*/ + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: SRSecRelSwitchInit Fail\n"); + chRtn = CI_ERROR; /*数据异常,返回失败*/ + } + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: SRSecRelOtherSRSecInit Fail\n"); + chRtn = CI_ERROR; + } + } + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: LinkIncSRSecInfoInit Fail\n"); + chRtn = CI_ERROR; /*返回失败*/ + } + + return chRtn; + +} + +/* +* 功能描述:初始化link包含的限速区段信息 +* 参数说明:无 +* 返 回 值:0 失败 +* 1 成功 +* Created By hh 2026.03.13 +*/ +UINT8 LinkIncSRSecInfoInit(void) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 ii = 0U; + DSU_SPEED_LIMIT_SEC_STRU* pRespeedSgmtStru = NULL; + /*重置link包含的限速区段信息为0*/ + (void)CommonMemSet(&gLinkCfgData[0], (UINT32)(sizeof(str_LinkCfgInfo) * LINK_SUM_MAX), (UINT8)(0U), (UINT32)(sizeof(str_LinkCfgInfo) * LINK_SUM_MAX)); + if (0U == g_dsuEmapStru->dsuDataLenStru->wSpeedLimitSecLen) + { + cRetVal = CI_SUCCESS; /*限速区段表0行,返回成功*/ + } + else + { + for (ii = 0U; ii < g_dsuEmapStru->dsuDataLenStru->wSpeedLimitSecLen; ii++) + { + pRespeedSgmtStru = g_dsuEmapStru->dsuStaticHeadStru->pSpeedLimitSecStru + ii; + cRetVal = CI_SUCCESS; + if (LINK_SUM_MAX > pRespeedSgmtStru->wSecLinkId) + { + if (0U == gLinkCfgData[pRespeedSgmtStru->wSecLinkId].wLinkId) + { + gLinkCfgData[pRespeedSgmtStru->wSecLinkId].wLinkId = pRespeedSgmtStru->wSecLinkId; /*初始化link ID*/ + } + else + { + /*ID已初始化,无需重复赋值*/ + } + + if (LINK_INC_SRSEC_SUM_MAX > gLinkCfgData[pRespeedSgmtStru->wSecLinkId].cLinkIncSRSecNum) + { + gLinkCfgData[pRespeedSgmtStru->wSecLinkId].szLinkIncSRSecId[gLinkCfgData[pRespeedSgmtStru->wSecLinkId].cLinkIncSRSecNum] = pRespeedSgmtStru->wSLSecId; /*存储link包含的的限速区段ID*/ + gLinkCfgData[pRespeedSgmtStru->wSecLinkId].cLinkIncSRSecNum++; + } + else + { + debug_infor_printf((const)"LinkIncSRSecInfoInit Err: LinkIncSRSecNum Exceed Max[%d]\n", LINK_INC_SRSEC_SUM_MAX); + cRetVal = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"LinkIncSRSecInfoInit Err: LinkId[%d] Is Invalid\n", pRespeedSgmtStru->wSecLinkId); + cRetVal = CI_ERROR; + } + + if (CI_SUCCESS != cRetVal) + { + cRetVal = CI_ERROR; /*初始化失败,返回失败*/ + break; + } + else + { + /*继续遍历初始化*/ + } + } + } + /*对每一个Link包含的限速区段进行排序(按照从小到大)*/ + SortLinkIncSRSec(); + return cRetVal; +} + +/* +* 功能描述:排序限速区段 +* 参数说明:void +* 返 回 值:void +* Created By hh 2026.03.16 +*/ +void SortLinkIncSRSec(void) +{ + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT8 index_i = 0U; + UINT8 index_j = 0U; + str_SpeedSegInfo temp = { 0U }; + str_SpeedSegInfo SpeedSegData[LINK_INC_SRSEC_SUM_MAX] = { 0U }; + + for (ii = 0U; ii < LINK_SUM_MAX; ii++) + { + if (0U != gLinkCfgData[ii].wLinkId) + { + for (jj = 0; jj < gLinkCfgData[ii].cLinkIncSRSecNum; jj++) + { + SpeedSegData[jj].wLinkId = gLinkCfgData[ii].szLinkIncSRSecId[jj]; + SpeedSegData[jj].endLinkOff = g_dsuEmapStru->dsuStaticHeadStru->pSpeedLimitSecStru[g_dsuEmapStru->dsuEmapIndexStru->dsuSpeedLimitSecIndex[gLinkCfgData[ii].szLinkIncSRSecId[jj]]].dwSecEndLinkOff; + } + /*开始排序*/ + for (index_i = 0U; index_i < LINK_INC_SRSEC_SUM_MAX - 1U; index_i++) + { + for (index_j = 0U; index_j < LINK_INC_SRSEC_SUM_MAX - 1U - index_i; index_j++) + { + if (SpeedSegData[index_j].endLinkOff > SpeedSegData[index_j + 1U].endLinkOff) + { + temp = SpeedSegData[index_j]; + SpeedSegData[index_j] = SpeedSegData[index_j + 1U]; + SpeedSegData[index_j + 1U] = temp; + } + } + } + /*赋值排序后的数据*/ + for (jj = gLinkCfgData[ii].cLinkIncSRSecNum; jj > 0; jj--) + { + gLinkCfgData[ii].szLinkIncSRSecId[(gLinkCfgData[ii].cLinkIncSRSecNum) - jj] = SpeedSegData[LINK_INC_SRSEC_SUM_MAX - jj].wLinkId; + } + /*赋值完成,清除数据*/ + (void)CommonMemSet(SpeedSegData, (UINT32)(sizeof(str_SpeedSegInfo) * LINK_INC_SRSEC_SUM_MAX), (UINT8)(0U), (UINT32)(sizeof(str_SpeedSegInfo) * LINK_INC_SRSEC_SUM_MAX)); + } + } + +} + + + +/* +* 功能描述: 初始化限速区段起点和终点关联的其它限速区段 +* 参数说明: p_strTsrSecInfo pstrSRSecInfo 限速区段信息 +* 返回值 : +* CI_SUCCESS: 成功 +* CI_ERROR: 失败 +* Created By:hh 2026.03.14 +*/ +UINT8 SRSecRelOtherSRSecInit(pSpeedLimitConfigSecInfo pstrSRSecInfo) +{ + UINT8 cRetVal = CI_ERROR; + DSU_LINK_STRU* pstrCurLinkStru = NULL; /*限速区段所在link信息*/ + UINT16 wNextSRSecId = 0U; /*相邻限速区段ID*/ + + if (NULL != pstrSRSecInfo) + { + cRetVal = CI_SUCCESS; + + pstrCurLinkStru = g_dsuEmapStru->dsuStaticHeadStru->pLinkStru + g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[pstrSRSecInfo->wBelongLinkId]; + + /*判断限速区段起点偏移量是否为0*/ + if (0U == pstrSRSecInfo->dwStartLinkOff) + { + /*限速区段起点偏移量为0,则起点相邻的限速区段在所处link起点相邻的link中*/ + + /*查找限速区段起点相邻的正线限速区段*/ + wNextSRSecId = GetNextLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrCurLinkStru->wOrgnJointMainLkId); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wStartRelMainSRSecId = wNextSRSecId; + + /*查找限速区段起点相邻的侧线限速区段*/ + wNextSRSecId = GetNextLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrCurLinkStru->wOrgnJointSideLkId); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wStartRelSideSRSecId = wNextSRSecId; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + /*限速区段起点偏移量非0,则起点相邻的限速区段在所处link中*/ + wNextSRSecId = GetLocalLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrSRSecInfo->secID, QUERY_FOR_START); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wStartRelMainSRSecId = wNextSRSecId; + pstrSRSecInfo->wStartRelSideSRSecId = 0U; + } + else + { + cRetVal = CI_ERROR; + } + } + + /*判断当前执行是否成功*/ + if (CI_SUCCESS == cRetVal) + { + + /*判断限速区段终点偏移量是否为所处link长度*/ + if (pstrCurLinkStru->dwLength == pstrSRSecInfo->dwEndLinkOff) + { + /*限速区段终点偏移量为所处link长度,则终点相邻的限速区段在所处link终点相邻的link中*/ + + /*查找限速区段终点相邻的正线限速区段*/ + wNextSRSecId = GetNextLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrCurLinkStru->wTmnlJointMainLkId); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wEndRelMainSRSecId = wNextSRSecId; + + /*查找限速区段终点相邻的侧线限速区段*/ + wNextSRSecId = GetNextLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrCurLinkStru->wTmnlJointSideLkId); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wEndRelSideSRSecId = wNextSRSecId; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + /*限速区段终点偏移量非所处link长度,则终点相邻的限速区段在所处link中*/ + wNextSRSecId = GetLocalLinkIncNextSRSecId(pstrCurLinkStru->wId, pstrSRSecInfo->secID, QUERY_FOR_END); + + /*判断获取的限速区段ID是否有效*/ + if (MAX_LINE_SEC_NUM > wNextSRSecId) + { + pstrSRSecInfo->wEndRelMainSRSecId = wNextSRSecId; + pstrSRSecInfo->wEndRelSideSRSecId = 0U; + } + else + { + cRetVal = CI_ERROR; + } + } + } + else + { + /*返回失败*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + + + +/* +* 功能描述:获取限速区段的数量 +* 参数说明:无 +* 返 回 值:限速区段的数量 +* Created By yx 2026.03.14 +*/ +UINT16 GetSpeedLimitSectionSum(void) +{ + return gSpeedLimitSecTotalLen; +} + +/* +* 功能描述:查找相邻link包含的相邻限速区段 +* 参数说明:UINT16 wCurLinkId 当前link ID +* UINT16 wNextLinkId 相邻link ID +* 返 回 值:MAX_LINE_SEC_NUM 2001 失败 +* 其它 相邻限速区段ID +* Created By hh 2026.03.14 +*/ +UINT16 GetNextLinkIncNextSRSecId(UINT16 wCurLinkId, UINT16 wNextLinkId) +{ + UINT16 wRetVal = MAX_LINE_SEC_NUM; + UINT16 wBufIndex = 0U; + str_LinkCfgInfo* pstrLinkIncSRSecInfo = NULL; /*相邻link包含的限速区段信息*/ + DSU_LINK_STRU* pstrNextLinkStru = NULL; /*限速区段相邻link信息*/ + + wBufIndex = GetLinkIndexById(wCurLinkId); + if (LINK_SUM_MAX > wBufIndex) + { + pstrLinkIncSRSecInfo = GetLinkCfgData(wNextLinkId); /*获取相邻link包含的限速区段信息*/ + if (NULL != pstrLinkIncSRSecInfo) + { + pstrNextLinkStru = g_dsuEmapStru->dsuStaticHeadStru->pLinkStru + g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[wNextLinkId]; + /*判断是否相邻link的正线起点或侧线起点与本link相连*/ + if ((pstrNextLinkStru->wOrgnJointMainLkId == wCurLinkId) || (pstrNextLinkStru->wOrgnJointSideLkId == wCurLinkId)) + { + /*相邻link的正线起点或侧线起点与本link相连,则相邻link包含的限速区段中,起点偏移量为0的限速区段即为本限速区段的相邻限速区段*/ + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[0]; + } + else if ((pstrNextLinkStru->wTmnlJointMainLkId == wCurLinkId) || (pstrNextLinkStru->wTmnlJointSideLkId == wCurLinkId)) + { + /*相邻link的正线终点或侧线终点与本link相连,则相邻link包含的限速区段中,终点偏移量为link长度的限速区段即为本限速区段的相邻限速区段*/ + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[pstrLinkIncSRSecInfo->cLinkIncSRSecNum - 1U]; + } + else + { + wRetVal = MAX_LINE_SEC_NUM; /*异常分支,返回失败*/ + } + } + else + { + wRetVal = 0U; /*无相邻link,返回0,无相邻限速区段*/ + } + } + else + { + /*返回失败*/ + } + + return wRetVal; +} + + +/* +* 功能描述:获取指定ID Link配置的限速区段数据 +* 参数说明:const UINT16 wLinkId, Link ID +* 返 回 值:NULL 获取数据失败 +* 非NULL 获取成功 +* Created By hh 2026.03.13 +*/ +str_LinkCfgInfo* GetLinkCfgData(const UINT16 wLinkId) +{ + str_LinkCfgInfo* retVal = NULL; + UINT16 wBufIndex = 0U; + wBufIndex = GetLinkIndexById(wLinkId); + if (LINK_SUM_MAX > wBufIndex) + { + retVal = &gLinkCfgData[wBufIndex]; + } + else + { + /*返回失败*/ + } + + return retVal; +} + + +/* +* 功能描述:查找本link包含的相邻限速区段 +* 参数说明:UINT16 wCurLinkId 当前link ID +* UINT16 wCurSRSecId 当前限速区段ID +* UINT8 cType 查询方式 +* 返 回 值:MAX_LINE_SEC_NUM 2001 失败 +* 其它 相邻限速区段ID +* Created By hh 2026.03.13 +*/ +UINT16 GetLocalLinkIncNextSRSecId(const UINT16 wCurLinkId, const UINT16 wCurSRSecId, const UINT8 cType) +{ + UINT16 wRetVal = MAX_LINE_SEC_NUM; + str_LinkCfgInfo* pstrLinkIncSRSecInfo = NULL; /*link包含的限速区段信息*/ + UINT16 ii = 0U; + + pstrLinkIncSRSecInfo = GetLinkCfgData(wCurLinkId); /*获取相邻link包含的限速区段信息*/ + if ((NULL != pstrLinkIncSRSecInfo) && (0U < wCurSRSecId) && (MAX_LINE_SEC_NUM > wCurSRSecId) && ((QUERY_FOR_START == cType) || (QUERY_FOR_END == cType))) + { + + for (ii = 0U; ii < pstrLinkIncSRSecInfo->cLinkIncSRSecNum; ii++) + { + /*找到本限速区段下标*/ + if (pstrLinkIncSRSecInfo->szLinkIncSRSecId[ii] == wCurSRSecId) + { + /*是否查询起点相邻限速区段*/ + if (QUERY_FOR_START == cType) + { + /*查询起点相邻限速区段*/ + if (0U < ii) + { + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[ii - 1U]; + } + else + { + wRetVal = MAX_LINE_SEC_NUM; /*查询起点相邻限速区段时,该限速区段不可能为link的第一个限速区段,返回失败*/ + } + } + else + { + /*查询终点相邻限速区段*/ + if ((UINT16)(pstrLinkIncSRSecInfo->cLinkIncSRSecNum - 1U) > ii) + { + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[ii + 1U]; + } + else + { + wRetVal = MAX_LINE_SEC_NUM; /*查询终点相邻限速区段时,该限速区段不可能为link的最后一个限速区段,返回失败*/ + } + } + + break; + + } + else + { + /*不处理*/ + } + } + } + else + { + /*返回失败*/ + } + + return wRetVal; +} + +/* +* 功能描述: 获取所有限速区段数据 +* 参数说明:void +* 返回值 : 限速区段数据 +* Created By hh 2026.03.13 +*/ +SpeedLimitConfigSecInfo* GetTsrSecInfo(void) +{ + return gSpeedLimitSecConfigData; +} + +/* +* 功能描述: 获取指定下标限速区段ID +* 参数说明:const UINT16 bufIndex 数组下标 +* 返回值 :0U:获取失败 +* >0 限速区段数据Id +* Created By hh 2026.03.13 +*/ +UINT16 GetSpeedLimitSecId(const UINT16 bufIndex) +{ + UINT16 wRetVal = 0U; + UINT16 wSpeedLimitSecSum = 0U; + + wSpeedLimitSecSum = GetSpeedLimitSectionSum(); + + if (bufIndex < wSpeedLimitSecSum) + { + wRetVal = gSpeedLimitSecIdBuf[bufIndex]; + } + else + { + /*入参非法,返回失败*/ + wRetVal = 0U; + } + + return wRetVal; +} + + +/* +* 功能描述:初始化限速区段关联的道岔 +* 参数说明:无 +* 返 回 值:1 失败 +* 0 成功 +* Created By yx 2026.03.16 +*/ +UINT8 SRSecRelSwitchInit(void) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 ii = 0U; + DSU_POINT_STRU* pSwitchStru = NULL; + + for (ii = 0U; ii < g_dsuEmapStru->dsuDataLenStru->wPointLen; ii++) + { + cRetVal = CI_SUCCESS; + /*获取道岔信息结构体指针*/ + pSwitchStru = g_dsuEmapStru->dsuStaticHeadStru->pPointStru + ii; + + /*初始化道岔定位link限速区段关联的道岔ID*/ + cRetVal = SetSRSecRelSwitch(pSwitchStru->wId, pSwitchStru->wMainLkId, pSwitchStru->dwMainLkOfst); + if (CI_SUCCESS == cRetVal) + { + /*初始化道岔反位link限速区段关联的道岔ID*/ + cRetVal = SetSRSecRelSwitch(pSwitchStru->wId, pSwitchStru->wSideLkId, pSwitchStru->dwSideLkOfst); + if (CI_SUCCESS == cRetVal) + { + /*初始化道岔汇合link限速区段关联的道岔ID*/ + cRetVal = SetSRSecRelSwitch(pSwitchStru->wId, pSwitchStru->wConfluentLkId, pSwitchStru->dwConfluentLkOfst); + if (CI_SUCCESS == cRetVal) + { + /*返回成功*/ + } + else + { + debug_infor_printf((const)"SRSecRelSwitchInit Err: ConfluentLink Init Fail\n"); + cRetVal = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"SRSecRelSwitchInit Err: ConfluentLink Init Fail\n"); + cRetVal = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"SRSecRelSwitchInit Err: ConfluentLink Init Fail\n"); + cRetVal = CI_ERROR; + } + + if (CI_SUCCESS != cRetVal) + { + cRetVal = CI_ERROR; /*停止遍历,返回失败*/ + break; + } + else + { + /*继续遍历初始化*/ + } + } + + return cRetVal; +} + +/* +* 功能描述:设置限速区段关联的道岔ID +* 参数说明:UINT16 wSwitchId 道岔ID +* UINT16 wLinkId 道岔关联link ID +* UINT32 dwLinkOffset 道岔关联link偏移量 +* 返 回 值:1 失败 +* 0 成功 +* Created By yx 2026.03.16 +*/ +UINT8 SetSRSecRelSwitch(UINT16 wSwitchId, UINT16 wLinkId, UINT32 dwLinkOffset) +{ + UINT8 cRetVal = CI_ERROR; + str_LinkCfgInfo* pstrLinkIncSRSecInfo = NULL; /*link包含的限速区段信息*/ + DSU_LINK_STRU* pstrLinkStru = NULL; /*link信息*/ + UINT16 wSRSecIndex = 0U; /*限速区段索引*/ + + pstrLinkIncSRSecInfo = GetLinkCfgData(wLinkId); /*获取道岔关联link包含的限速区段信息*/ + + if ((0U < wSwitchId) && (UINT16_MAX > wSwitchId) && (NULL != pstrLinkIncSRSecInfo)) + { + cRetVal = CI_SUCCESS; + + pstrLinkStru = g_dsuEmapStru->dsuStaticHeadStru->pLinkStru + g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[wLinkId]; /*获取道岔汇合link的信息*/ + + if (0U == dwLinkOffset) + { + /*道岔关联link偏移量为0,则link包含的第一个限速区段的起点关联有道岔*/ + wSRSecIndex = pstrLinkIncSRSecInfo->szLinkIncSRSecId[0U]; + gSpeedLimitSecConfigData[wSRSecIndex].wStartSwitchId = wSwitchId; + } + else if (pstrLinkStru->dwLength == dwLinkOffset) + { + /*道岔关联link偏移量为link长度,则link包含的最后一个限速区段的终点关联有道岔*/ + wSRSecIndex =pstrLinkIncSRSecInfo->szLinkIncSRSecId[pstrLinkIncSRSecInfo->cLinkIncSRSecNum - 1U]; + gSpeedLimitSecConfigData[wSRSecIndex].wEndSwitchId = wSwitchId; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; /*入参非法,返回失败*/ + } + + return cRetVal; +} + + + + + +/* +*功能描述 获取指定ID区段的RCID +*参数说明:const UINT16 spLtId;限速区段ID +*返回值 +* 0U:失败 +* >0U:RCID +* Created By:hh 2026.03.14 +*/ +UINT8 GetSpdLmtSecRCID(const UINT16 spLtId) +{ + UINT8 chRtn = 0U; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecConfigData[wIndex].chBelongRCID; + } + else + { + chRtn = 0U; + } + return chRtn; +} + + +/* +*功能描述 获取指定ID区段的台风属性 +*参数说明:const UINT16 spLtId;限速区段ID +*返回值 +* FLAG_UNSL:未设置 +* FLAG_SL:已设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetSpdLmtSecTyphoonType(const UINT16 spLtId) +{ + UINT8 chRtn = SPEED_LIMIT_TYPHOON_TYPE_INVALID; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecConfigData[wIndex].chTyphoonType; + } + else + { + chRtn = SPEED_LIMIT_TYPHOON_TYPE_INVALID; + } + return chRtn; +} + + + diff --git a/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.h b/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.h new file mode 100644 index 0000000..789fdfe --- /dev/null +++ b/TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.h @@ -0,0 +1,234 @@ +/******************************************************** +* +* 文 件 名: SpeedLimitSecConfigDataManage.h +* 版权说明: 北京交控科技有限公司 +* 创建时间: 2020-03-20 +* 作 者: 联锁组 +* 功能描述: 限速区段数据配置管理函数的头文件 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + + +#ifndef _SPEED_LIMIT_SEC_CONFIG_DATA_MANAGE_H_ +#define _SPEED_LIMIT_SEC_CONFIG_DATA_MANAGE_H_ + +#include "Commontypes.h" +#include "dsuStruct.h" +#include "SectionDefine.h" +#include "dquQuery.h" +#include "CiSystemDefine.h" +#include "CommonMemory.h" +#include "PhysicalSectionConfigDataManage.h" +#include +#include"SwitchDefine.h" +#include "LogicSectionDataManage.h" +#include "SectionDefine.h" +#ifdef __cplusplus +extern "C" { +#endif + + + + +/*==================================定义限速区段结构体===========================*/ +typedef struct SPEED_LIMIT_SEC_CONFIG_STRU +{ + UINT16 secID; /*限速区段ID*/ + UINT8 chBelongRCID; /*所属RC ID*/ + UINT8 chTyphoonType; /*台风属性 0x55有效 0xAA无效*/ + UINT16 wBelongLinkId; /*所属link ID*/ + UINT32 dwStartLinkOff; /*起点偏移量*/ + UINT32 dwEndLinkOff; /*起点偏移量*/ + UINT16 wStartRelMainSRSecId; /*起点关联的正线限速区段ID*/ + UINT16 wStartRelSideSRSecId; /*起点关联的侧线限速区段ID*/ + UINT16 wEndRelMainSRSecId; /*终点关联的正线限速区段ID*/ + UINT16 wEndRelSideSRSecId; /*终点关联的侧线限速区段ID*/ + UINT16 wStartSwitchId; /*起点所在道岔ID*/ + UINT16 wEndSwitchId; /*终点所在道岔ID*/ +}SpeedLimitConfigSecInfo, *pSpeedLimitConfigSecInfo; + +/*限速区段局部数据结构体*/ +typedef struct SpeedSegInfo_Stuct +{ + UINT16 wLinkId; /*link ID*/ + UINT32 endLinkOff; /*终点偏移量*/ +}str_SpeedSegInfo; + +/*限速区段关联link配置信息结构体*/ +typedef struct LinkCfgInfo_Stuct +{ + UINT16 wLinkId; /*link ID*/ + UINT8 cLinkIncSRSecNum; /*link包含的限速区段数量*/ + UINT16 szLinkIncSRSecId[LINK_INC_SRSEC_SUM_MAX]; /*link包含的限速区段ID数组*/ +}str_LinkCfgInfo; + +extern SpeedLimitConfigSecInfo gSpeedLimitSecConfigData[MAX_LINE_SEC_NUM]; /*限速区段配置信息*/ +extern UINT16 gSpeedLimitSecTotalLen; /*线路中限速区段数量*/ +extern UINT16 gSpeedLimitSecIdBuf[MAX_LINE_SEC_NUM]; +extern str_LinkCfgInfo gLinkCfgData[LINK_SUM_MAX]; /*限速区段关联link配置数据结构体*/ + +/* +* 功能描述: 查询限速区段所属RC ID +* 参数说明: const UINT16 TsrSecId 限速区段ID +* 返回值 : +* 0U: 失败 +* >0U: RC ID +* Created By:hh 2026.03.14 +*/ +UINT16 DsuTsrSecBelongRC(const UINT16 TsrSecId); + +/* +* 功能描述:排序限速区段 +* 参数说明:void +* 返 回 值:void +* Created By hh 2026.03.16 +*/ +void SortLinkIncSRSec(void); + +/* +* 功能描述:获取指定ID Link配置数据 +* 参数说明:const UINT16 wLinkId, Link ID +* 返 回 值:NULL 获取数据失败 +* 非NULL 获取成功 +* Created By hh 2026.03.13 +*/ +str_LinkCfgInfo* GetLinkCfgData(const UINT16 wLinkId); + +/* +* 功能描述: 初始化限速区段起点和终点关联的其它限速区段 +* 参数说明: p_strTsrSecInfo pstrSRSecInfo 限速区段信息 +* 返回值 : +* CI_SUCCESS: 成功 +* CI_ERROR: 失败 +* Created By:hh 2026.03.14 +*/ +UINT8 SRSecRelOtherSRSecInit(pSpeedLimitConfigSecInfo pstrSRSecInfo); + + +/* +* 功能描述:查找相邻link包含的相邻限速区段 +* 参数说明:UINT16 wCurLinkId 当前link ID +* UINT16 wNextLinkId 相邻link ID +* 返 回 值:MAX_LINE_SEC_NUM 2001 失败 +* 其它 相邻限速区段ID +* Created By hh 2026.03.14 +*/ +UINT16 GetNextLinkIncNextSRSecId(UINT16 wCurLinkId, UINT16 wNextLinkId); + + +/* +* 功能描述:查找本link包含的相邻限速区段 +* 参数说明:const UINT16 wCurLinkId 当前link ID +* const UINT16 wCurSRSecId 当前限速区段ID +* const UINT8 cType 查询方式 +* 返 回 值:MAX_LINE_SEC_NUM 2001 失败 +* 其它 相邻限速区段ID +* Created By hh 2026.03.13 +*/ +UINT16 GetLocalLinkIncNextSRSecId(const UINT16 wCurLinkId, const UINT16 wCurSRSecId, const UINT8 cType); + + +/* +* 功能描述:初始化link包含的限速区段信息 +* 参数说明:无 +* 返 回 值:1 失败 +* 0 成功 +* Created By hh 2026.03.13 +*/ +UINT8 LinkIncSRSecInfoInit(void); + + +/* +* 功能描述:获取限速区段的数量 +* 参数说明:无 +* 返 回 值:限速区段的数量 +* Created By yx 2026.03.14 +*/ +UINT16 GetSpeedLimitSectionSum(void); + +/* +* 功能描述: 获取所有限速区段数据 +* 参数说明:void +* 返回值 : 限速区段数据 +* Created By hh 2026.03.13 +*/ +SpeedLimitConfigSecInfo* GetTsrSecInfo(void); + +/* +* 功能描述: 获取指定下标限速区段ID +* 参数说明:const UINT16 bufIndex 数组下标 +* 返回值 :0U:获取失败 +* >0 限速区段数据Id +* Created By hh 2026.03.13 +*/ +UINT16 GetSpeedLimitSecId(const UINT16 bufIndex); + + +/* +* 功能描述:初始化限速区段关联的道岔 +* 参数说明:无 +* 返 回 值:1 失败 +* 0 成功 +* Created By yx 2026.03.16 +*/ +UINT8 SRSecRelSwitchInit(void); + +/* +* 功能描述:设置限速区段关联的道岔ID +* 参数说明:UINT16 wSwitchId 道岔ID +* UINT16 wLinkId 道岔关联link ID +* UINT32 dwLinkOffset 道岔关联link偏移量 +* 返 回 值:1 失败 +* 0 成功 +* Created By yx 2026.03.16 +*/ +UINT8 SetSRSecRelSwitch(UINT16 wSwitchId, UINT16 wLinkId, UINT32 dwLinkOffset); + + +/* +* 功能描述: 获取指定ID限速区段索引号 +* 参数说明: const UINT16 speedLimitSecId, 限速区段ID +* 返回值 : MAX_LINE_SEC_NUM: 获取数据失败 +* 0U:RCID +* Created By:hh 2026.03.14 +*/ +UINT8 GetSpdLmtSecRCID(const UINT16 spLtId); + +/* +*功能描述 获取指定ID区段的台风属性 +*参数说明:const UINT16 spLtId;限速区段ID +*返回值 +* SPEED_LIMIT_TYPHOON_TYPE_VALID:未设置 +* SPEED_LIMIT_TYPHOON_TYPE_INVALID:已设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetSpdLmtSecTyphoonType(const UINT16 spLtId); +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.c b/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.c new file mode 100644 index 0000000..5b79e53 --- /dev/null +++ b/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.c @@ -0,0 +1,1020 @@ +/******************************************************** +* +* 文 件 名: SpeedLimitSecDataManage.c +* 版权说明: 北京交控科技有限公司 +* 创建时间: 2020-03-20 +* 作 者: 联锁组 +* 功能描述: 限速区段数据管理 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#include "SpeedLimitSecConfigDataManage.h" +#include "SpeedLimitSecDataManage.h" + + +SpeedLimitSecInfo gSpeedLimitSecData[MAX_LINE_SEC_NUM] = { 0u }; /*限速区段信息(本控区)*/ +TsrTMCDataStruct g_TsrTMCDataStru[TSR_MAX_SUM] = { 0u }; /*临时限速数据*/ +UINT8 g_TsrTMCSum = 0u; + +UINT8 gCacheAllSpeedState = FLAG_UNSL; /*缓存全线临时限速状态*/ +UINT8 gCacheAllSpeedNum = 0u; /*缓存全线临时限速速度值*/ +TyphoonSpeedDataStruct gTyphSpeedInfo = { FLAG_UNSL,0U }; /*台风限速信息*/ + + +/* +*功能描述 获取限速区段动态结构体信息 +*参数说明: void +*返回值:限速区段动态结构体信息指针 +* Created By:hh 2026.03.14 +*/ +SpeedLimitSecInfo* GetSpeedLimitSecInfo() +{ + return gSpeedLimitSecData; +} + +/* +*功能描述 获取指定ID区段的临时限速状态 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 +* FLAG_SL:设置 +* FLAG_UNSL:未设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTSRSetFlag(const UINT16 spLtId) +{ + UINT8 chRtn = FLAG_UNSL; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/ + if (MAX_LINE_SEC_NUM > wIndex) + { + if ((FLAG_UNSL == gSpeedLimitSecData[wIndex].chTSRSetFlag) || (FLAG_SL == gSpeedLimitSecData[wIndex].chTSRSetFlag)) + { + chRtn = gSpeedLimitSecData[wIndex].chTSRSetFlag; + } + else + { + chRtn = FLAG_UNSL; + } + } + else + { + chRtn = FLAG_UNSL; + } + return chRtn; +} + +/* +*功能描述 获取指定ID区段的NR限速状态 +*参数说明:const UINT16 spLtId;限速区段ID +*返回值 +* FLAG_UNSL:未设置 +* FLAG_SL:设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetNRSRSetFlag(const UINT16 spLtId) +{ + UINT8 chRtn = FLAG_UNSL; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; /*获取指定ID限速区段的数组下标*/ + if (MAX_LINE_SEC_NUM > wIndex) + { + + if ((FLAG_UNSL == gSpeedLimitSecData[wIndex].chNRSRSetFlag) || (FLAG_SL == gSpeedLimitSecData[wIndex].chNRSRSetFlag)) + { + chRtn = gSpeedLimitSecData[wIndex].chNRSRSetFlag; + } + else + { + chRtn = FLAG_UNSL; + } + } + else + { + chRtn = FLAG_UNSL; + } + return chRtn; +} + +/* +*功能描述 获取指定ID区段的台风限速状态 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 +* FLAG_UNSL:未设置 +* FLAG_SL:设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTFSRSetFlag(const UINT16 spLtId) +{ + UINT8 chRtn = FLAG_UNSL; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; /*获取指定ID限速区段的数组下标*/ + if (MAX_LINE_SEC_NUM > wIndex) + { + if ((FLAG_UNSL == gSpeedLimitSecData[wIndex].chTFSRSetFlag) || (FLAG_SL == gSpeedLimitSecData[wIndex].chTFSRSetFlag)) + { + chRtn = gSpeedLimitSecData[wIndex].chTFSRSetFlag; + } + else + { + chRtn = FLAG_UNSL; + } + } + else + { + chRtn = FLAG_UNSL; + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的台风限速状态 +*参数说明: const UINT16 spLtId; 限速区段ID +* const UINT8 state; 台风限速状态 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetTFSRSetFlag(const UINT16 spLtId, const UINT8 state) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + if ((FLAG_UNSL == state) || (FLAG_SL == state)) + { + gSpeedLimitSecData[wIndex].chTFSRSetFlag = state; + } + else + { + ;/*不处理*/ + } + + } + else + { + ;/*不处理*/ + } +} + +/* +*功能描述 获取指定ID区段的全线限速状态 +*参数说明: const UINT8 spLtId;限速区段ID +*返回值 +* FLAG_UNSL:未设置 +* FLAG_SL:已设置 +* Created By:hh 2026.03.14 +*/ +UINT8 GetAllSRSetFlag(const UINT16 spLtId) +{ + UINT8 chRtn = FLAG_UNSL; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + if ((FLAG_UNSL == gSpeedLimitSecData[wIndex].chAllSRSetFlag) || (FLAG_SL == gSpeedLimitSecData[wIndex].chAllSRSetFlag)) + { + chRtn = gSpeedLimitSecData[wIndex].chAllSRSetFlag; + } + else + { + chRtn = FLAG_UNSL; + } + } + else + { + chRtn = FLAG_UNSL; + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的全线限速状态 +*参数说明: const UINT16 spLtId; 限速区段ID +* const UINT8 state; 限速状态 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetAllSRSetFlag(const UINT16 spLtId, const UINT8 state) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + if ((FLAG_UNSL == state) || (FLAG_SL == state)) + { + gSpeedLimitSecData[wIndex].chAllSRSetFlag = state; + } + else + { + ;/*不处理*/ + } + + } + else + { + ;/*不处理*/ + } + +} + +/* +* 功能描述: 设置指定ID限速区段临时限速设置状态 +* 参数说明: const UINT16 tsrSecId, 限速区段ID +* const UINT8 linShiXianSuSetState, 临时限速设置状态 +* 返回值 : 无 +* +*/ +void SetTSRSetFlag(const UINT16 tsrSecId, const UINT8 linShiXianSuSetState) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetSpdLmtSecConfigBufIdx(tsrSecId); /*获取临时限速数组下标*/ + + if (MAX_LINE_SEC_NUM > bufIndex) + { + if ((FLAG_SL == linShiXianSuSetState) || (FLAG_UNSL == linShiXianSuSetState)) + { + gSpeedLimitSecData[bufIndex].chTSRSetFlag = linShiXianSuSetState; /*限速区段临时限速设置状态*/ + } + else + { + /*不做处理*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +*功能描述 获取指定ID区段的台风限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值: 限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTFSRSetValue(const UINT16 spLtId) +{ + UINT8 chRtn = 0U; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecData[wIndex].chTFSRSetValue; + } + else + { + ; /*返回0u*/ + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的台风限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;台风限速速度值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetTFSRSetValue(const UINT16 spLtId, const UINT8 Speed) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + gSpeedLimitSecData[wIndex].chTFSRSetValue = Speed; + } + else + { + ;/*不处理*/ + } +} + +/* +*功能描述 获取指定ID区段的全线限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 :限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetAllSRSetValue(const UINT16 spLtId) +{ + UINT8 chRtn = 0U; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecData[wIndex].chAllSRSetValue; + } + else + { + ; /*返回0U*/ + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的全线限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;台风限速速度值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetAllRSetValue(const UINT16 spLtId, const UINT8 Speed) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + gSpeedLimitSecData[wIndex].chAllSRSetValue = Speed; + } + else + { + ;/*不处理*/ + } +} + +/* +*功能描述 获取指定ID区段的临时限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 UINT8_MAX: 获取数据失败 +* 其它:限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTSRSetValue(const UINT16 spLtId) +{ + UINT8 chRtn = 0U; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecData[wIndex].chTSRSetValue; + } + else + { + ; /*返回0U*/ + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的临时限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;NR限速速度值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetTSRSetValue(const UINT16 spLtId, const UINT8 speed) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + gSpeedLimitSecData[wIndex].chTSRSetValue = speed; + } + else + { + ;/*不处理*/ + } +} + +/* +*功能描述 获取指定ID区段的NR限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值: 限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetNRSRSetValue(const UINT16 spLtId) +{ + UINT8 chRtn = 0U; + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + chRtn = gSpeedLimitSecData[wIndex].chNRSRSetValue; + } + else + { + ; /*返回0U*/ + } + return chRtn; +} + +/* +*功能描述 设置指定ID区段的NR限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;NR限速值 +*返回值: 无 +* Created By:hh 2026.03.14 +*/ +void SetNRSRSetValue(const UINT16 spLtId, const UINT8 speed) +{ + UINT16 wIndex = 0U; + wIndex = GetSpdLmtSecConfigBufIdx(spLtId); /*获取指定ID限速区段的数组下标*/; + if (MAX_LINE_SEC_NUM > wIndex) + { + gSpeedLimitSecData[wIndex].chNRSRSetValue = speed; + } + else + { + ;/*不处理*/ + } +} + + +/* +*功能描述 更新全线限速 +*参数说明:UINT8 state, 状态 +* UINT8 speed 速度值 +*返回值: void +* Created By:hh 2026.03.14 +*/ +void UpdateAllSpeed(UINT8 state, UINT8 speed) +{ + UINT8 chLocalCiId = 0U; + UINT16 chSpeedLimitSecLen = 0U; /*限速区段长度*/ + UINT16 ii = 0U; + UINT16 wId = DEFAULT_UINT16_MAX; + UINT8 wRcId = 0U; + chLocalCiId = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ + chSpeedLimitSecLen = GetSpeedLimitSectionSum(); + + for (ii = 0; ii < chSpeedLimitSecLen; ii++) + { + wId = GetSpeedLimitSecId(ii); + wRcId = GetSpdLmtSecRCID(wId); + if ((0U != wRcId) && (wRcId == chLocalCiId)) + { + /*只更新本联锁的全线限速区段*/ + if ((FLAG_SL == state) || (FLAG_UNSL == state)) + { + SetAllSRSetFlag(wId, state); + SetAllRSetValue(wId, speed); + } + else + { + ;/*不处理*/ + } + } + else + { + /*非本控区不处理*/ + } + } +} + +/* +* 功能描述: 初始化限速区段信息。 +* 参数说明: void +* 返回值 : +* CI_SUCCESS,初始成功; +* CI_ERROR,初始化失败。 +* Created By:hh 2026.03.14 +*/ +UINT8 InitTSRSecInfo(void) +{ + UINT8 chRtn = CI_ERROR; + UINT8 chSpdLmtTyphoonType = CI_ERROR; + UINT8 localRcId = 0U; + UINT16 wSecCycle = 0U; + UINT16 wId = DEFAULT_UINT16_MAX; + UINT16 speedLimitSectionSum = 0U; + UINT16 wRcId = 0U; + UINT8 RcWorkMode = 0U; + UINT8 chTmcSwitch = 0U; + RcWorkMode = GetLocalRcWorkMode(); /*RC工作模式获取*/ + chTmcSwitch = GetCiFunctionSwitchConfig(FUNC_TMC_SWITCH); + /*重置限速区段信息为0*/ + (void)CommonMemSet(&gSpeedLimitSecData[0U], (UINT32)(sizeof(SpeedLimitSecInfo) * MAX_LINE_SEC_NUM), (UINT8)(0U), (UINT32)(sizeof(SpeedLimitSecInfo) * MAX_LINE_SEC_NUM)); + + localRcId = GetSystemParaLocalCiId(); + speedLimitSectionSum = GetSpeedLimitSectionSum(); + + if (speedLimitSectionSum < MAX_LINE_SEC_NUM) + { + chRtn = CI_SUCCESS; + } + else + { + /*返回失败*/ + } + + if (CI_SUCCESS == chRtn) + { + if (0U == speedLimitSectionSum) + { + chRtn = CI_SUCCESS; /*无限速区段,返回成功*/ + } + else + { + /* 初始化临时限速信息 */ + setTsrTMCNum(0u); + + if (FUNC_SWITCH_OFF == chTmcSwitch) + { + SetTsrSureFlag(CI_TSR_SURE_YES); + } + else + { + SetTsrSureFlag(CI_TSR_SURE_NO); + } + /*初始化限速区段信息*/ + for (wSecCycle = 0U; wSecCycle < speedLimitSectionSum; wSecCycle++) + { + /*获取限速区段信息结构体指针*/ + wId = GetSpeedLimitSecId(wSecCycle); + wRcId = GetSpdLmtSecRCID(wId); + if ((localRcId == wRcId) && (0U != wRcId)) + { + /*缓存限速信息ID*/ + gSpeedLimitSecData[wId].secID = wId; /*设置ID*/ + + + /*设置NR限速默认为未设置*/ + gSpeedLimitSecData[wId].chNRSRSetFlag = FLAG_UNSL; + + /*设置NR限速值默认为0*/ + gSpeedLimitSecData[wId].chNRSRSetValue = 0U; + + /*设置临时限速默认为设置*/ + gSpeedLimitSecData[wId].chTSRSetValue = 0U; + + /*设置台风限速默认为未设置*/ + gSpeedLimitSecData[wId].chTFSRSetFlag = FLAG_UNSL; + + /*设置台风限速值默认为0*/ + gSpeedLimitSecData[wId].chTFSRSetValue = 0U; + + /*设置全线限速值默认为0*/ + gSpeedLimitSecData[wId].chAllSRSetValue = 0U; + + if (RC_WORK_MODE_TIOC == RcWorkMode) /*RC工作模式为TIOC工作模式*/ + { + /* 初始化逻辑区段未设置临时限速 */ + if (FUNC_SWITCH_ON == chTmcSwitch) + { + /*设置全局限速默认为设置*/ + gSpeedLimitSecData[wId].chAllSRSetFlag = FLAG_SL; + + /*设置临时限速默认为设置*/ + gSpeedLimitSecData[wId].chTSRSetFlag = FLAG_SL; + chSpdLmtTyphoonType = GetSpdLmtSecTyphoonType(wId); + if (SPEED_LIMIT_TYPHOON_TYPE_VALID == chSpdLmtTyphoonType) + { + gSpeedLimitSecData[wId].chTFSRSetFlag = FLAG_SL; + } + } + else + { + /*设置全局限速默认为未设置*/ + gSpeedLimitSecData[wId].chAllSRSetFlag = FLAG_UNSL; + + /*设置临时限速默认为未设置*/ + gSpeedLimitSecData[wId].chTSRSetFlag = FLAG_UNSL; + + } + } + else + { + ;/*不处理*/ + } + + } + else + { + /*不属于本联锁 不初始化动态数据管理*/ + } + + if (CI_ERROR == chRtn) + { + break; + } + else + { + /*继续初始化*/ + } + } + + } + } + else + { + debug_infor_printf((const)"\nInitTSRSecInfo Err: LinkIncSRSecInfoInit Fail\n"); + chRtn = CI_ERROR; /*返回失败*/ + } + + return chRtn; + +} + +/* +* 功能描述: 获取临时限速数据 +* 参数说明: +* 返回值 : 限速数据 +* Created By yx 2026.03.13 +*/ +TsrTMCDataStruct* GetTsrTMCData(void) +{ + return &g_TsrTMCDataStru[0]; +} + + +/* +* 功能描述: 设置限速数量 +* 参数说明: const UINT16 tsrSum, 限速数量 +* 返回值 : 0: 获取数据失败 +* >0: 当前临时限速设置状态 +*/ +void setTsrTMCNum(const UINT8 tsrSum) +{ + if (tsrSum <= TSR_MAX_SUM) + { + g_TsrTMCSum = tsrSum; + } + else + { + /*解析有数据校验,此处不处理*/ + } +} +/* +* 功能描述: 获取临时限速数量 +* 参数说明: +* 返回值 : 限速数量 +* Created By yx 2026.03.13 +*/ +UINT8 GetTsrTMCSum(void) +{ + return g_TsrTMCSum; +} + +/* +* 功能描述: 获取台风限速数据 +* 参数说明: +* 返回值 : 限速数量 +* Created By hh 2026.03.13 +*/ +TyphoonSpeedDataStruct GetgTyphSpeedInfo(void) +{ + return gTyphSpeedInfo; +} + + +/* +* 功能描述: 获取缓存全线临时限速状态 +* 参数说明: void +* 返回值 :0x55: 有效 0xAA:无效 +* Created By:hh 2026.03.17 +*/ +UINT8 GetCacheAllSpeedState(void) +{ + return gCacheAllSpeedState; +} + +/* +* 功能描述: 设置缓存全线临时限速状态 +* 参数说明: 0x55: 有效 0xAA:无效 +* 返回值 :void +* Created By:hh 2026.03.17 +*/ +void SetCacheAllSpeedState(UINT8 cSetState) +{ + if ((FLAG_SL == cSetState) || (FLAG_UNSL == cSetState)) + { + gCacheAllSpeedState = cSetState; + } + else + { + ; /*不处理*/ + } +} + +/* +* 功能描述: 获取缓存全线临时限速速度 +* 参数说明: void +* 返回值 :全线临时限速速值 +* Created By:hh 2026.03.17 +*/ + +UINT8 GetCacheAllSpeedNum(void) +{ + return gCacheAllSpeedNum; +} + +/* +* 功能描述: 设置缓存全线临时限速速度 +* 参数说明: UINT8 cSpeed 速度值 +* 返回值 : void +* Created By:hh 2026.03.17 +*/ +void SetCacheAllSpeedNum(UINT8 cSpeed) +{ + gCacheAllSpeedNum = cSpeed; +} + +/* +* 功能描述: 设置TMC本地临时限速数据 +* 参数说明: UINT8 cTsrSum 限速数量 +* TsrTMCDataStruct* TsrData 限速数据 +* 返回值 : CI_ERROR失败;CI_SUCCESS 成功 +* Created By:yx 2026.03.14 +*/ +UINT8 SetLocalSpeedLimitData(UINT8 cTsrSum, TsrTMCDataStruct* pTsrData, UINT8 cAllLineTsrState, UINT8 cAllLineTsrSpeed, TyphoonSpeedDataStruct typhSpeedData) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 ii = 0u; + UINT8 jj = 0u; + UINT16 kk = 0u; + UINT8 cTiocId = 0u; + UINT8 cCount = 0u; /*限速区段起点到终点包含的区段数量*/ + UINT16 wTsrSecNum = 0u; /*限速区段的数量*/ + UINT16 wTsrSecId = 0u; /*限速区段ID*/ + UINT8 cTsrSecBelongTiocId = 0u; /*限速区段所属tiocID*/ + UINT16 tsrIdData[TSR_SEC_MAX_SUM] = { 0u }; /*限速区段起点到终点包含的区段信息*/ + UINT8 cacheAllSpeedNum = 0U; + UINT8 cacheAllSpeedState = 0U; + + if ((TSR_MAX_SUM >= cTsrSum) && (NULL != pTsrData)) + { + cRetVal = CI_SUCCESS; + /* 更新全线临时限速信息 */ + if (0xAAu == cAllLineTsrState) + { + /* 存在全线临时限速 */ + SetCacheAllSpeedState(FLAG_SL); + SetCacheAllSpeedNum(cAllLineTsrSpeed); + } + else + { + /* 不存在全线临时限速 */ + SetCacheAllSpeedState(FLAG_UNSL); + SetCacheAllSpeedNum(0u); + } + + cacheAllSpeedState = GetCacheAllSpeedState(); + cacheAllSpeedNum = GetCacheAllSpeedNum(); + /*更新全线限速*/ + if (0 != cacheAllSpeedNum) + { + /*设置全线临时限速有效*/ + UpdateAllSpeed(cacheAllSpeedState, cacheAllSpeedNum); + } + else + { + /*设置全线临时限速无效*/ + UpdateAllSpeed(FLAG_UNSL, 0U); + } + + /*更新台风限速*/ + gTyphSpeedInfo.typhoonlimitState = typhSpeedData.typhoonlimitState; + gTyphSpeedInfo.typhoonSpeedlimit = typhSpeedData.typhoonSpeedlimit; + if ((0 != gTyphSpeedInfo.typhoonSpeedlimit)) + { + UpdateTFSRSetFlag(gTyphSpeedInfo.typhoonlimitState, gTyphSpeedInfo.typhoonSpeedlimit); + } + else + { + UpdateTFSRSetFlag(FLAG_UNSL, gTyphSpeedInfo.typhoonSpeedlimit); + } + + /* 更新临时限速 */ + setTsrTMCNum(cTsrSum); + (void)CommonMemSet((void*)g_TsrTMCDataStru, (UINT32)sizeof(TsrTMCDataStruct) * TSR_MAX_SUM, 0U, (UINT32)sizeof(TsrTMCDataStruct) * TSR_MAX_SUM); /*更新前清除缓存数据*/ + (void)CommonMemCpy((void*)g_TsrTMCDataStru, (UINT32)sizeof(TsrTMCDataStruct) * TSR_MAX_SUM, (const void*)pTsrData, (UINT32)sizeof(TsrTMCDataStruct) * TSR_MAX_SUM); /*更新缓存数据*/ + /*更新限速区段状态*/ + cTiocId = GetSystemParaLocalCiId(); + wTsrSecNum = GetSpeedLimitSectionSum(); + if (wTsrSecNum < MAX_LINE_SEC_NUM) + { + for (kk = 0u; kk < wTsrSecNum; kk++) + {/*遍历所有限速区段*/ + wTsrSecId = GetSpeedLimitSecId(kk); + cTsrSecBelongTiocId = GetSpdLmtSecRCID(wTsrSecId); + if ((0u != cTsrSecBelongTiocId) && (cTsrSecBelongTiocId == cTiocId)) + {/*处理本控区限速区段*/ + SetTSRSetValue(wTsrSecId, 0U); /*设置临时限速速度0*/ + SetTSRSetFlag(wTsrSecId, FLAG_UNSL); /*清理限速标志*/ + } + } + for (ii = 0u; ii < cTsrSum; ii++) + {/*遍历所有限速信息*/ + cRetVal = GetTsrStartToEndId(&pTsrData[ii], tsrIdData, &cCount); /*获取限速起点至终点的限速区段*/ + if (cRetVal == CI_SUCCESS) + {/*数据获取成功*/ + /*统一设置限速区间限速区段的限速状态*/ + for (jj = 0u; jj < cCount; jj++) + { + cTsrSecBelongTiocId = GetSpdLmtSecRCID(tsrIdData[jj]); + if ((0u != cTsrSecBelongTiocId) && (cTsrSecBelongTiocId == cTiocId)) + { + SetTSRSetValue(tsrIdData[jj], pTsrData[ii].cSpeed); /*设置临时限速速度*/ + SetTSRSetFlag(tsrIdData[jj], FLAG_SL); /*设置临时限速标志*/ + } + } + /*设置单个限速后清除缓存*/ + (void)CommonMemSet((void*)tsrIdData, (UINT32)sizeof(tsrIdData), 0U, (UINT32)(UINT32)sizeof(tsrIdData)); + cCount = 0u; + } + else + {/*获取数据失败*/ + cRetVal = CI_ERROR; + } + } + cRetVal = CI_SUCCESS; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + ; /* 返回失败 */ + } + + return cRetVal; + +} + + +/* +* 功能描述:查找限速区段起点到终点包含的限速区段 +* 参数说明:TsrTMCDataStruct* pTsrData 限速信息 +* UINT16* tsrIdData 限速区段ID数组 +* UINT8* count 包含的限速区段数量 +* 返 回 值:CI_ERROR 获取失败 +* CI_SUCCESS 获取成功 +* Created By yx 2026.03.14 +*/ +UINT8 GetTsrStartToEndId(TsrTMCDataStruct* pTsrData, UINT16* tsrIdData, UINT8* count) +{ + UINT8 retVal = CI_ERROR; + UINT16 wTsrMaxSectionSum = 0u; + UINT8 ii = 0u; + UINT8 jj = 0u; + UINT8 cSum = 0u; + UINT16 wTsrIndex = 0u; + UINT8 cSwitchIndex = 0u; /*道岔索引*/ + UINT16 wTempTsrSectionId = 0u; + wTsrMaxSectionSum = GetTsrMaxSecSum(); /*获取一个限速中最大限速区段数量*/ + SpeedLimitConfigSecInfo* speedLimitSecInfo = { 0u }; + speedLimitSecInfo = GetTsrSecInfo(); /*限速区段信息*/ + if (pTsrData == NULL || tsrIdData == NULL || count == NULL) + { + retVal = CI_ERROR; + } + else + { + if (pTsrData->cTsrLogDir == TSRSEC_LOG_DIR_SAME) + {/*逻辑方向相同*/ + wTempTsrSectionId = pTsrData->wTsrStartSecId; /*起点ID*/ + for (ii = 0;ii < wTsrMaxSectionSum; ii++) + { + if (wTempTsrSectionId != pTsrData->wTsrEndSecId) + {/*设置本限速区段状态*/ + tsrIdData[cSum++] = wTempTsrSectionId; /*存限速区段ID*/ + wTsrIndex = GetSpdLmtSecConfigBufIdx(wTempTsrSectionId); /*获取限速区段索引*/ + if (0u == speedLimitSecInfo[wTsrIndex].wEndRelSideSRSecId) + {/*无终点关联的侧线限速区段*/ + + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wEndRelMainSRSecId; /*终点关联的正线限速区段*/ + } + else + {/*终点有道岔*/ + for (jj = 0u; jj < pTsrData->cTsrSwitchSum; jj++) + { + if (speedLimitSecInfo[wTsrIndex].wEndSwitchId == pTsrData->switchData[jj].TsrSwitchId) + { + cSwitchIndex = jj; /*指定道岔的索引*/ + break; + } + } + if (pTsrData->switchData[cSwitchIndex].cTsrSwitchPostion == TSRSEC_SWITCH_POS_DINGWEI) + {/*道岔在定位*/ + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wEndRelMainSRSecId; /*终点关联的正线限速区段*/ + } + else + {/*道岔在反位*/ + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wEndRelSideSRSecId; /*终点关联的侧线限速区段*/ + } + } + } + else + { + break; + } + } + + } + else + {/*逻辑方向相反*/ + wTempTsrSectionId = pTsrData->wTsrStartSecId; /*起点ID*/ + for (ii = 0; ii < wTsrMaxSectionSum; ii++) + { + if (wTempTsrSectionId != pTsrData->wTsrEndSecId) + {/*设置本限速区段状态*/ + tsrIdData[cSum++] = wTempTsrSectionId; /*存限速区段ID*/ + wTsrIndex = GetSpdLmtSecConfigBufIdx(wTempTsrSectionId); /*获取限速区段索引*/ + if (0u == speedLimitSecInfo[wTsrIndex].wStartRelSideSRSecId) + {/*无起点关联的侧线限速区段*/ + + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wStartRelMainSRSecId; /* 起点关联的正线限速区段*/ + } + else + {/*起点所在道岔有数据*/ + for (jj = 0u; jj < pTsrData->cTsrSwitchSum; jj++) + { + if (speedLimitSecInfo[wTsrIndex].wStartSwitchId == pTsrData->switchData[jj].TsrSwitchId) + { + cSwitchIndex = jj; + break; + } + } + if (pTsrData->switchData[cSwitchIndex].cTsrSwitchPostion == TSRSEC_SWITCH_POS_DINGWEI) + {/*道岔在定位*/ + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wStartRelMainSRSecId; /*起点关联的正线限速区段*/ + } + else + {/*道岔在反位*/ + wTempTsrSectionId = speedLimitSecInfo[wTsrIndex].wStartRelSideSRSecId; /*起点关联的侧线限速区段*/ + } + } + } + else + { + /*找到终点编号*/ + break; + } + } + } + + if (wTempTsrSectionId != pTsrData->wTsrEndSecId) + {/*未找到终点*/ + (void)CommonMemSet((void*)tsrIdData, (UINT32)(sizeof(UINT16) * TSR_SEC_MAX_SUM), 0U, (UINT32)(sizeof(UINT16) * TSR_SEC_MAX_SUM)); /*清空数据*/ + *count = 0u; + retVal = CI_ERROR; + } + else + { + /*找到终点编号*/ + tsrIdData[cSum++] = pTsrData->wTsrEndSecId; /*添加限速区段终点ID*/ + *count = cSum; + /*获取到限速区段数据*/ + retVal = CI_SUCCESS; + } + } + + return retVal; +} + +/* +* 功能描述: 设具备台风限速区段状态和限速值。 +* 参数说明: const UINT8 state 状态 +* 返回值 :void +* +* Created By:hh 2026.03.14 +*/ +void UpdateTFSRSetFlag(const UINT8 state, const UINT8 speed) +{ + UINT16 ii = 0U; + UINT16 chLocalCiId = 0U; + UINT16 wSpeedLimitSecSum = 0U; + UINT16 wId = DEFAULT_UINT16_MAX; + UINT8 wRcId = 0U; + UINT8 chTyphoonType = SPEED_LIMIT_TYPHOON_TYPE_INVALID; + chLocalCiId = GetSystemParaLocalCiId(); /*获取本地联锁*/ + wSpeedLimitSecSum = GetSpeedLimitSectionSum(); + + if ((FLAG_SL == state) || (FLAG_UNSL == state)) + { + for (ii = 0; ii < wSpeedLimitSecSum; ii++) + { + /*获取限速区段信息结构体指针*/ + wId = GetSpeedLimitSecId(ii); + wRcId = GetSpdLmtSecRCID(wId); + chTyphoonType = GetSpdLmtSecTyphoonType(wId); + if ((0U != wRcId) && (chLocalCiId == wRcId)) + { + /*有台风属性且本控区*/ + if (SPEED_LIMIT_TYPHOON_TYPE_VALID == chTyphoonType) + { + /*设置台风限速属性*/ + SetTFSRSetFlag(wId, state); + SetTFSRSetValue(wId, speed); + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } + } + } + else + { + ;/*不处理*/ + } +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.h b/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.h new file mode 100644 index 0000000..0b462b1 --- /dev/null +++ b/TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.h @@ -0,0 +1,347 @@ +/******************************************************** +* +* 文 件 名: SpeedLimitSecDataManage.h +* 版权说明: 北京交控科技有限公司 +* 创建时间: 2020-03-20 +* 作 者: 联锁组 +* 功能描述: 限速区段数据管理函数的头文件 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + + +#ifndef _SPEED_LIMIT_SEC_DATA_MANAGE_H_ +#define _SPEED_LIMIT_SEC_DATA_MANAGE_H_ +#ifdef __cplusplus +extern "C" { +#endif +#include "Commontypes.h" +#include "dsuStruct.h" +#include "SectionDefine.h" +#include "dquQuery.h" +#include "CiSystemDefine.h" +#include "CommonMemory.h" +#include "PhysicalSectionConfigDataManage.h" +#include +#include"SwitchDefine.h" +#include "LogicSectionDataManage.h" + + +/*==================================定义限速区段结构体===========================*/ +typedef struct SPEED_LIMIT_DATA_STRU +{ + UINT16 secID; /*限速区段ID*/ + UINT8 chTSRSetFlag; /*临时限速设置标志位,0xaa设置,0x55 未设置*/ + UINT8 chTSRSetValue; /*临时限速速度值*/ + UINT8 chNRSRSetFlag; /*NR限速设置标志位,0xaa设置,0x55 未设置*/ + UINT8 chNRSRSetValue; /*NR限速速度值*/ + UINT8 chTFSRSetFlag; /*台风限速设置标志位,0xaa设置,0x55 未设置*/ + UINT8 chTFSRSetValue; /*台风限速速度值*/ + UINT8 chAllSRSetFlag; /*全线限速设置标志位,0xaa设置,0x55 未设置*/ + UINT8 chAllSRSetValue; /*全线限速值*/ +}SpeedLimitSecInfo, *pSpeedLimitSecInfo; + +/*台风限速输入结构体*/ +typedef struct S_TyphoonSpeedDataStruct +{ + UINT8 typhoonlimitState; /*台风限速状态*/ + UINT8 typhoonSpeedlimit; /*台风限速速度值*/ +}TyphoonSpeedDataStruct; + +/* 临时限速结构体 */ +typedef struct S_TsrTMCSwitchDataStruct +{ + UINT16 TsrSwitchId; /*临时限速包含的道岔编号*/ + UINT8 cTsrSwitchPostion; /*临时限速包含道岔编号的位置*/ +}TsrTMCSwitchDataStruct; +/* 临时限速结构体 */ +typedef struct S_TsrDataTMCStruct +{ + UINT8 cSpeed;/* 限速值:公里每小时 */ + UINT16 wTsrStartSecId; /*临时限速的起点限速区段编号*/ + UINT16 wTsrEndSecId; /*临时限速的终点限速区段编号*/ + UINT8 cTsrLogDir; /*临时限速起点限速区段至终点限速区段的逻辑方向*/ + UINT8 cTsrSwitchSum; /*临时限速包含的道岔数量*/ + TsrTMCSwitchDataStruct switchData[TSR_SWITCH_NUM_MAX]; /*限速道岔信息结构体*/ +}TsrTMCDataStruct; + + +extern SpeedLimitSecInfo gSpeedLimitSecData[MAX_LINE_SEC_NUM]; /*限速区段信息*/ +extern TsrTMCDataStruct g_TsrTMCDataStru[TSR_MAX_SUM]; /*临时限速数据*/ +extern UINT8 g_TsrTMCSum; +extern UINT8 gCacheAllSpeedState; /*缓存全线临时限速状态*/ +extern UINT8 gCacheAllSpeedNum; /*缓存全线临时限速速度值*/ +extern TyphoonSpeedDataStruct gTyphSpeedInfo; /*台风限速信息*/ + +/* +* 功能描述:初始化所有道岔定反位限速区段 +* 参数说明:void +* 返 回 值:CI_SUCCESS 成功 +* CI_ERROR 失败 +/* +* 功能描述: 获取临时限速数据 +* 参数说明: +* 返回值 : 限速数据 +* Created By yx 2026.03.13 +*/ +TsrTMCDataStruct* GetTsrTMCData(void); +/* +* 功能描述: 初始化限速区段信息。 +* 参数说明: void +* 返回值 : +* CI_SUCCESS,初始成功; +* CI_ERROR,初始化失败。 +* Created By:hh 2026.03.14 +*/ +UINT8 InitTSRSecInfo(void); +/* +*功能描述 更新全线限速 +*参数说明:UINT8 state, 状态 +* UINT8 speed 速度值 +*返回值: void +* Created By:hh 2026.03.14 +*/ +void UpdateAllSpeed(UINT8 state, UINT8 speed); +/* +*功能描述 设置指定ID区段的NR限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;NR限速值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetNRSRSetValue(const UINT16 spLtId, const UINT8 speed); +/* +*功能描述 获取指定ID区段的NR限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 UINT8_MAX: 获取数据失败 +* 其它:限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetNRSRSetValue(const UINT16 spLtId); +/* +*功能描述 设置指定ID区段的临时限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 speed;限速速度值 +*返回值: 无 +* Created By:hh 2026.03.14 +*/ +void SetTSRSetValue(const UINT16 spLtId, const UINT8 speed); +/* +*功能描述 获取指定ID区段的临时限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 UINT8_MAX: 获取数据失败 +* 其它:限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTSRSetValue(const UINT16 spLtId); +/* +*功能描述 设置指定ID区段的全线限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;台风限速速度值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetAllRSetValue(const UINT16 spLtId, const UINT8 Speed); +/* +*功能描述 获取指定ID区段的全线限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 UINT8_MAX: 获取数据失败 +* 其它:限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetAllSRSetValue(const UINT16 spLtId); +/* +*功能描述 设置指定ID区段的台风限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +* const UINT8 state;台风限速速度值 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetTFSRSetValue(const UINT16 spLtId, const UINT8 Speed); +/* +*功能描述 获取指定ID区段的台风限速速度值 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 UINT8_MAX: 获取数据失败 +* 其它:限速值 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTFSRSetValue(const UINT16 spLtId); +/* +* 功能描述: 设置指定ID限速区段临时限速设置状态 +* 参数说明: const UINT16 tsrSecId, 限速区段ID +* const UINT8 linShiXianSuSetState, 临时限速设置状态 +* 返回值 : 无 +* +*/ +void SetTSRSetFlag(const UINT16 tsrSecId, const UINT8 linShiXianSuSetState); +/* +*功能描述 获取指定ID区段的临时限速状态 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 +* 0U:失败 +* >0U:限速状态 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTSRSetFlag(const UINT16 spLtId); +/* +*功能描述 设置指定ID区段的全线限速状态 +*参数说明: const UINT16 spLtId; 限速区段ID +* const UINT8 state; 限速状态 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetAllSRSetFlag(const UINT16 spLtId, const UINT8 state); +/* +*功能描述 获取指定ID区段的全线限速状态 +*参数说明: const UINT8 spLtId;限速区段ID +*返回值 +* 0U:失败 +* >0U:限速状态 +* Created By:hh 2026.03.14 +*/ +UINT8 GetAllSRSetFlag(const UINT16 spLtId); +/* +*功能描述 设置指定ID区段的台风限速状态 +*参数说明: const UINT16 spLtId; 限速区段ID +* const UINT8 state; 台风限速状态 +*返回值:无 +* Created By:hh 2026.03.14 +*/ +void SetTFSRSetFlag(const UINT16 spLtId, const UINT8 state); +/* +*功能描述 获取指定ID区段的台风限速状态 +*参数说明: const UINT16 spLtId;限速区段ID +*返回值 +* 0U:失败 +* >0U:限速状态 +* Created By:hh 2026.03.14 +*/ +UINT8 GetTFSRSetFlag(const UINT16 spLtId); +/* +*功能描述 获取指定ID区段的NR限速状态 +*参数说明:const UINT16 spLtId;限速区段ID +*返回值 +* 0U:失败 +* >0U:限速状态 +* Created By:hh 2026.03.14 +*/ +UINT8 GetNRSRSetFlag(const UINT16 spLtId); + + +/* +* 功能描述: 获取临时限速数量 +* 参数说明: +* 返回值 : 限速数量 +* Created By yx 2026.03.13 +*/ +UINT8 GetTsrTMCSum(void); + +/* +* 功能描述: 获取临时限速数据 +* 参数说明: +* 返回值 : 限速数据 +* Created By yx 2026.03.13 +*/ +TsrTMCDataStruct* GetTsrTMCData(void); + +/* +* 功能描述: 设置限速数量 +* 参数说明: const UINT16 tsrSum, 限速数量 +* 返回值 : 0: 获取数据失败 +* >0: 当前临时限速设置状态 +*/ +void setTsrTMCNum(const UINT8 tsrSum); + +/* +* 功能描述: 获取台风限速数据 +* 参数说明: +* 返回值 : 限速数量 +* Created By hh 2026.03.13 +*/ +TyphoonSpeedDataStruct GetgTyphSpeedInfo(void); + +/* +*功能描述 更新全线限速 +*参数说明:UINT8 state, 状态 +* UINT8 speed 速度值 +*返回值: void +* Created By:hh 2026.03.14 +*/ +void UpdateAllSpeed(UINT8 state, UINT8 speed); + + +/* +* 功能描述: 获取缓存全线临时限速状态 +* 参数说明: void +* 返回值 :0x55: 有效 0xAA:无效 +* Created By:hh 2026.03.17 +*/ +UINT8 GetCacheAllSpeedState(void); + +/* +* 功能描述: 设置缓存全线临时限速状态 +* 参数说明: 0x55: 有效 0xAA:无效 +* 返回值 :void +* Created By:hh 2026.03.17 +*/ +void SetCacheAllSpeedState(UINT8 cSetState); + +/* +* 功能描述: 获取缓存全线临时限速速度 +* 参数说明: void +* 返回值 :全线临时限速速值 +* Created By:hh 2026.03.17 +*/ + +UINT8 GetCacheAllSpeedNum(void); + +/* +* 功能描述: 设置缓存全线临时限速速度 +* 参数说明: UINT8 cSpeed 速度值 +* 返回值 : void +* Created By:hh 2026.03.17 +*/ +void SetCacheAllSpeedNum(UINT8 cSpeed); + +/* +* 功能描述: 设置TMC本地临时限速数据 +* 参数说明: UINT8 cTsrSum 限速数量 +* TsrTMCDataStruct* TsrData 限速数据 +* TyphoonSpeedDataStruct gTyphSpeedInfo 台风限速数据 +* 返回值 : CI_ERROR失败;CI_SUCCESS 成功 +*/ +UINT8 SetLocalSpeedLimitData(UINT8 cTsrSum, TsrTMCDataStruct* pTsrData, UINT8 cAllLineTsrState, UINT8 cAllLineTsrSpeed, TyphoonSpeedDataStruct typhSpeedInfo); + +/* +* 功能描述:查找限速区段起点到终点包含的限速区段 +* 参数说明:TsrTMCDataStruct* pTsrData 限速信息 +* UINT16* tsrIdData 限速区段ID数组 +* UINT8* count 包含的限速区段数量 +* 返 回 值:CI_ERROR 获取失败 +* CI_SUCCESS 获取成功 +* Created By yx 2026.03.14 +*/ +UINT8 GetTsrStartToEndId(TsrTMCDataStruct* pTsrData, UINT16* tsrIdData, UINT8* count); + +/* +* 功能描述: 设具备台风限速区段状态和限速值。 +* 参数说明: const UINT8 state 状态 +* 返回值 :void +* +* Created By:hh 2026.03.14 +*/ +void UpdateTFSRSetFlag(const UINT8 state, const UINT8 speed); +/* +*功能描述 获取限速区段动态结构体信息 +*参数说明: void +*返回值:限速区段动态结构体信息指针 +* Created By:hh 2026.03.14 +*/ +SpeedLimitSecInfo* GetSpeedLimitSecInfo(); + +#ifdef __cplusplus + } +#endif +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.c b/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.c index f6475e1..19a247e 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.c @@ -1861,4 +1861,146 @@ UINT16 GetSignalOutFirstLogSec(const UINT16 signalId) } } return retVal; +} + +/* +* 功能描述:获取指定ID信号机内方第一逻辑区段 +* 参数说明:const UINT16 signalId, 信号机ID +* UINT8* pErrorReason 获取失败的原因 +* 返 回 值:0: 获取数据失败 +* >0: 逻辑区段ID +* Created By LQ 2025.12.19 +*/ +UINT16 GetSignalInFirstLogSec(const UINT16 signalId, UINT8* pErrorReason) +{ + UINT16 retVal = 0U; + UINT16 wInFstPhySecId = 0U;/*外方第一物理区段ID*/ + UINT8 phySecIncLogSecSum = 0U; /*物理区段包含的逻辑区段数量*/ + UINT16* phySecIncLogSecId = NULL; /*物理区段包含的逻辑区段ID*/ + UINT8 i = 0U; + UINT32 startLength = UINT16_MAX; + UINT32 endLength = UINT16_MAX; + UINT16 firstLogSecId = 0U; + LOD_STRU signalPoint = { 0U }; /*信号机位置*/ + LOD_STRU logSecStartPoint = { 0U }; /*逻辑区段始端位置*/ + LOD_STRU logSecEndtPoint = { 0U }; /*逻辑区段始端位置*/ + UINT8 logSecCount = 0U; + UINT16 logSecIdbuff[PHYSICAL_INCLUDE_SWITCH_SUM_MAX] = { 0U }; + UINT8 posCheck = CI_ERROR; + UINT8 cErrorReason = 0U; + + wInFstPhySecId = GetSignalInFirstPhySecId(signalId, 0U); + + if ((0U != wInFstPhySecId) && (NULL != pErrorReason)) + { + /*获取物理区段关联逻辑区段信息*/ + phySecIncLogSecSum = GetPhySecIncLogSecSum(wInFstPhySecId); + phySecIncLogSecId = GetPhySecIncLogSecIdBuf(wInFstPhySecId); + + /*获取信号机位置信息*/ + signalPoint.Lnk = GetSignalProtectLink(signalId); + signalPoint.Off = GetSignalProtectLinkOff(signalId); + + if ((0U != phySecIncLogSecSum) && (NULL != phySecIncLogSecId)) + { + for (i = 0U; i < phySecIncLogSecSum; i++) + { + logSecEndtPoint.Lnk = GetLgcSecTmnlLink(phySecIncLogSecId[i]); + logSecEndtPoint.Off = GetLgcSecTmnlOffset(phySecIncLogSecId[i]); + + logSecStartPoint.Lnk = GetLgcSecOrgnLink(phySecIncLogSecId[i]); + logSecStartPoint.Off = GetLgcSecOrgnOffset(phySecIncLogSecId[i]); + + startLength = elm_PrepareDistanceBtwPoints(signalPoint, logSecStartPoint); + endLength = elm_PrepareDistanceBtwPoints(signalPoint, logSecEndtPoint); + /*查询所有与信号机所在link相连的逻辑区段*/ + if ((0U == startLength) || (0U == endLength)) + { + logSecIdbuff[logSecCount] = phySecIncLogSecId[i]; + logSecCount++; + } + else + { + /*继续遍历*/ + } + } + + /*判断逻辑区段的道岔位置是否符合*/ + for (i = 0U; i < logSecCount; i++) + { + posCheck = GetLogSecRelSwPosErrReason(logSecIdbuff[i]); + if (CI_SUCCESS == posCheck) + { + retVal = logSecIdbuff[i]; + cErrorReason = 0U; + break; + } + else + { + if (SIGNAL_IN_SW_POS_INVALID != cErrorReason) + { + cErrorReason = posCheck; /*记录当前逻辑区段道岔位置失败原因*/ + } + else + { + /*存在道岔四开,不更新失败原因*/ + } + } + } + } + + *pErrorReason = cErrorReason; + } + else + { + /*返回0*/ + } + + return retVal; +} + +/* +* 功能描述: 获取指定ID信号机终端阻挡属性 +* 参数说明: const UINT16 signalId, 信号机ID +* 返回值 : 信号机终端阻挡属性 +*/ +UINT8 GetSignalEndAttr(const UINT16 signalId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = SIGNAL_END_NO; + + bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + retVal = SignalConfigDataStru[bufIndex].signalEndAttr; + } + else + { + /*不合法*/ + } + return retVal; +} + +/* +* 功能描述: 获取指定ID信号机联络线属性 +* 参数说明: const UINT16 signalId, 信号机ID +* 返回值 : 信号机联络线属性 +*/ +UINT8 GetSignalDsnConnectAttr(const UINT16 signalId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = SIGNAL_CONNECT_FALSE; + + bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/ + + if (SIGNAL_SUM_MAX > bufIndex) + { + retVal = SignalConfigDataStru[bufIndex].DsnConnectAttr; + } + else + { + /*不合法*/ + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.h b/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.h index b9ab851..5e78830 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Signal/SignalConfigDataManage.h @@ -102,6 +102,8 @@ typedef struct S_SignalConfigDataStruct UINT16 LxDrvRelayId; /*列车信号驱动继电器ID(配置字段-联络线使用)*/ UINT16 YxDrvRelayId; /*引导信号驱动继电器ID(配置字段-联络线使用)*/ UINT16 DxDrvRelayId; /*调车信号驱动继电器ID(配置字段-联络线使用)*/ + UINT8 signalEndAttr; /*信号机终端阻挡属性(配置字段)*/ + UINT8 DsnConnectAttr; /*迪士尼联络线属性*/ } SignalConfigDataStruct; typedef struct S_OC_SignalConfigDataStruct @@ -738,6 +740,30 @@ UINT16 GetSignalDxDrvRelayId(const UINT16 signalId); */ UINT16 GetSignalOutFirstLogSec(const UINT16 signalId); +/* +* 功能描述:获取指定ID信号机内方第一逻辑区段 +* 参数说明:const UINT16 signalId, 信号机ID +* UINT8* pErrorReason 获取失败的原因 +* 返 回 值:0: 获取数据失败 +* >0: 逻辑区段ID +* Created By LQ 2025.12.19 +*/ +UINT16 GetSignalInFirstLogSec(const UINT16 signalId, UINT8* pErrorReason); + +/* +* 功能描述: 获取指定ID信号机终端阻挡属性 +* 参数说明: const UINT16 signalId, 信号机ID +* 返回值 : 信号机终端阻挡属性 +*/ +UINT8 GetSignalEndAttr(const UINT16 signalId); + +/* +* 功能描述: 获取指定ID信号机联络线属性 +* 参数说明: const UINT16 signalId, 信号机ID +* 返回值 : 信号机联络线属性 +*/ +UINT8 GetSignalDsnConnectAttr(const UINT16 signalId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c index 8f50e36..5f109b8 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c +++ b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c @@ -281,6 +281,9 @@ UINT8 SetSignalCurColor(const UINT16 signalId, const UINT8 curColor) UINT16 relayId = 0u; UINT8 relayState = 0u; /*继电器状态*/ UINT8 signalColorValid = 0u; + UINT16 wDsj = 0U; + UINT8 signalVirtualAttr = 0U; + UINT8 chDsnSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); preDrvColor = GetSignalPreDriveColor(signalId);/*获取之前驱动颜色*/ @@ -300,13 +303,38 @@ UINT8 SetSignalCurColor(const UINT16 signalId, const UINT8 curColor) /*这是为了解决红亮转为红灭或红灭转为红亮之后,继电器动作开始周期不清零的问题*/ SignalDataStru[bufIndex].RelayActaionStartCycNum = 0u;/*信号机继电器动作开始周期清零*/ - SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_NO;/*设置未断丝标志*/ /*当前亮绿灯*/ if (SIGNAL_SHOWCOLOUR_GREEN == SignalDataStru[bufIndex].CurColor) { /*设置绿灯未断丝*/ SignalDataStru[bufIndex].GreenDsBreakFlag = SIGNAL_DS_BREAK_NO; + if(FUNC_SWITCH_ON == chDsnSwitch) + { + signalVirtualAttr = GetSignalVirtualAttr(signalId); /*获取信号机虚拟属性*/ + if (SIGNAL_VIRTUAL_YES == signalVirtualAttr) + { + SignalDataStru[bufIndex].GreenDsBreakFlag = SIGNAL_DS_BREAK_NO; /*虚拟信号机默认未断丝处理*/ + } + else + { + wDsj = GetSignalFirstDsRelayId(signalId); + relayState = GetRelayCollState(wDsj); + if (RELAY_STATE_UP == relayState) + { + ; /*灯丝完好*/ + } + else + { + SignalDataStru[bufIndex].GreenDsBreakFlag = SIGNAL_DS_BREAK_YES; /*绿灯断丝*/ + } + } + + } + else + { + ; /*不做处理*/ + } } /*亮黄灯*/ else if(SIGNAL_SHOWCOLOUR_YELLOW == SignalDataStru[bufIndex].CurColor) @@ -350,9 +378,39 @@ UINT8 SetSignalCurColor(const UINT16 signalId, const UINT8 curColor) /*设置双黄灯未断丝*/ SignalDataStru[bufIndex].DoubleYellowDsBreakFlag = SIGNAL_DS_BREAK_NO; } + else if(SIGNAL_SHOWCOLOUR_RED == SignalDataStru[bufIndex].CurColor) + { + SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_NO;/*设置未断丝标志*/ + if (FUNC_SWITCH_ON == chDsnSwitch) + { + signalVirtualAttr = GetSignalVirtualAttr(signalId); /*获取信号机虚拟属性*/ + if (SIGNAL_VIRTUAL_YES == signalVirtualAttr) + { + SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_NO; /*虚拟信号机默认未断丝处理*/ + } + else + { + wDsj = GetSignalFirstDsRelayId(signalId); + relayState = GetRelayCollState(wDsj); + if (RELAY_STATE_UP == relayState) + { + ; /*灯丝完好*/ + } + else + { + SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_YES; /*红灯断丝*/ + } + } + + } + else + { + ; /*不做处理*/ + } + } else { - /*不做处理*/ + ; /*不做处理*/ } } else @@ -5630,5 +5688,61 @@ UINT32 GetDetainSndBtnPressCycNum(const UINT16 signalId) /*不处理*/ } + return reVal; +} + +/* +* 功能描述:设置信号机列车闯红灯标志 +* 参数说明:const UINT16 signalId 信号机ID +* const UINT8 cFlag 列车闯红灯标志 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SetTrainCrossRedSignalFlag(const UINT16 signalId, const UINT8 cFlag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*获取信号机数组下标*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_TRAIN_CROSS_RED_NO == cFlag) || (SIGNAL_TRAIN_CROSS_RED_YES == cFlag)) + { + SignalDataStru[bufIndex].cTrainCrossRedSignalFlag = cFlag; + } + else + { + /*入参错误,不处理*/ + } + } + else + { + /*下标错误,不处理*/ + } +} + +/* +* 功能描述:获取信号机列车闯红灯标志 +* 参数说明:const UINT16 signalId 信号机ID +* 返 回 值:0x55 闯红灯标志无效 +* 0xaa 闯红灯标志有效 +* Created By LQ 2025.12.12 +*/ +UINT8 GetTrainCrossRedSignalFlag(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 reVal = SIGNAL_TRAIN_CROSS_RED_YES; + + bufIndex = GetSignalConfigBufIndex(signalId); /*获取信号机数组下标*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + reVal = SignalDataStru[bufIndex].cTrainCrossRedSignalFlag; + } + else + { + /*下标错误,返回0失败*/ + } + return reVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Signal/SignalDataManage.h b/TSCP/src/APP/ciapp/Signal/SignalDataManage.h index 774c07c..eed1dde 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDataManage.h +++ b/TSCP/src/APP/ciapp/Signal/SignalDataManage.h @@ -102,6 +102,7 @@ typedef struct S_SignalDataStruct UINT32 DetCutBtnErrTrigPressCycNum; /*扣车旁路按钮误触发按下周期*/ UINT8 cDetCutBtnErrFlag; /*扣车旁路按钮故障标志:0x55未故障,0xaa故障*/ UINT8 cDetCutBtnRelayDownState; /*扣车旁路按钮采集继电器落下状态:0x55:正常采集落下,0xaa:通信异常落下*/ + UINT8 cTrainCrossRedSignalFlag; /*列车闯红灯标志:0x55-无效,0xAA-有效*/ } SignalDataStruct; extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*定义信号机数据结构体*/ @@ -1182,6 +1183,24 @@ void SetDetainSndBtnPressCycNum(const UINT16 signalId, const UINT32 startCycNum) */ UINT32 GetDetainSndBtnPressCycNum(const UINT16 signalId); +/* +* 功能描述:设置信号机列车闯红灯标志 +* 参数说明:const UINT16 signalId 信号机ID +* const UINT8 cFlag 列车闯红灯标志 +* 返 回 值:无 +* Created By LQ 2025.12.12 +*/ +void SetTrainCrossRedSignalFlag(const UINT16 signalId, const UINT8 cFlag); + +/* +* 功能描述:获取信号机列车闯红灯标志 +* 参数说明:const UINT16 signalId 信号机ID +* 返 回 值:0x55 闯红灯标志无效 +* 0xaa 闯红灯标志有效 +* Created By LQ 2025.12.12 +*/ +UINT8 GetTrainCrossRedSignalFlag(const UINT16 signalId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Signal/SignalDefine.h b/TSCP/src/APP/ciapp/Signal/SignalDefine.h index a325c28..c73fdb9 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDefine.h +++ b/TSCP/src/APP/ciapp/Signal/SignalDefine.h @@ -51,6 +51,8 @@ #define SIGNAL_TYPE_1_ALL_END ((UINT8)0x36) /*(UINT8)0x36 单显示尽头阻挡信号机*/ #define SIGNAL_TYPE_THREE_JINKU_OFF (UINT8)0x37 /*进库/出库信号机(黄、白、红、红黄)(三显示带引导),可灭灯*/ +#define SIGNAL_TYPE_2_ALL_NOYINDAO_DSN ((UINT8)0x38) /* 二显示(不封灯) 红、蓝 */ + /*信号机保护封锁命令状态*/ #define SIGNAL_PLOCK_CMD_CREATE ((UINT8)0x55) /*建立请求*/ #define SIGNAL_PLOCK_CMD_CANCEL ((UINT8)0xaa) /*取消请求*/ @@ -99,6 +101,7 @@ #define SIGNAL_SHOWCOLOUR_INVALID ((UINT8)0xFF) /*无效颜色*/ + /*信号机驱动颜色*/ #define SIGNAL_DRIVECOLOUR_RED ((UINT8)0x01) /*红灯*/ #define SIGNAL_DRIVECOLOUR_YELLOW ((UINT8)0x02) /*黄灯*/ @@ -208,6 +211,9 @@ #define SIGNAL_CROSS_ClOSE_YES ((UINT8)0x55) /*调车跨压关灯*/ #define SIGNAL_CROSS_ClOSE_NO ((UINT8)0xAA) /*非调车跨压关灯*/ +#define SIGNAL_END_YES ((UINT8)0x55) /*信号机为终端阻挡信号机*/ +#define SIGNAL_END_NO ((UINT8)0xAA) /*信号机非终端阻挡信号机*/ + #define SIGNAL_RELATED_PSD_MAX_SUM ((UINT16)2) /*信号机关联的PSD数量*/ #define SIGNAL_RELATED_ESB_MAX_SUM ((UINT8)2) /*信号机关联的ESB数量*/ @@ -310,6 +316,18 @@ #define SIGNAL_IN_HUMID_RAIL_NO ((UINT8)0x55U) /*无效*/ #define SIGNAL_IN_HUMID_RAIL_YES ((UINT8)0xAAU) /*有效*/ +/*信号机列车闯红灯标志*/ +#define SIGNAL_TRAIN_CROSS_RED_NO ((UINT8)0x55U) /*闯红灯标志无效*/ +#define SIGNAL_TRAIN_CROSS_RED_YES ((UINT8)0xAAU) /*闯红灯标志有效*/ + +/*查询信号机内方第一逻辑区段失败原因*/ +#define SIGNAL_IN_SW_POS_REVERSE ((UINT8)0x55U) /*内方第一逻辑区段道岔位置相反*/ +#define SIGNAL_IN_SW_POS_INVALID ((UINT8)0xAAU) /*内方第一逻辑区段道岔位置无效*/ + +/*信号机CBTC联络线属性(迪士尼联络线)*/ +#define SIGNAL_CONNECT_TRUE ((UINT8)0x55u) /*联络线信号机*/ +#define SIGNAL_CONNECT_FALSE ((UINT8)0xFFu) /*非联络线信号机*/ + #endif diff --git a/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.c b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.c new file mode 100644 index 0000000..47b6247 --- /dev/null +++ b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.c @@ -0,0 +1,82 @@ +/******************************************************** +* +* 文 件 名: SsksLightRelayCfgDataManage.c +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2025-12-17 +* 作 者: 联锁组 +* 功能描述: SSKS闪灯稳灯继电器相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ +#include "SsksLightRelayCfgDataManage.h" + +SsksLightRelayCfgDataStruct gSsksLightRelayCfgStr[SSKS_LIGHT_RELAY_SUM_MAX] = { 0U }; /*SSKS闪灯稳灯继电器信息*/ +INT16 gSsksLightRelaySum = 0; /*SSKS闪灯稳灯继电器数量*/ + +/* +* 功能描述:获取指定ID的SSKS闪灯稳灯继电器的索引号 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:SSKS_LIGHT_RELAY_SUM_MAX 获取数据失败 +* gSsksLightRelaySum) + { + retVal = 0U; + } + else if (SSKS_LIGHT_RELAY_SUM_MAX <= (UINT16)gSsksLightRelaySum) + { + retVal = SSKS_LIGHT_RELAY_SUM_MAX; + } + else + { + retVal = (UINT16)gSsksLightRelaySum; + } + + return retVal; +} + +/* +* 功能描述:获取SSKS闪灯稳灯继电器静态数据 +* 参数说明:void +* 返 回 值:SSKS闪灯稳灯继电器静态数据 +* Created By LQ 2025.12.15 +*/ +SsksLightRelayCfgDataStruct* GetSsksLightRelayCfgStr(void) +{ + return gSsksLightRelayCfgStr; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.h b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.h new file mode 100644 index 0000000..14b6ea4 --- /dev/null +++ b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.h @@ -0,0 +1,70 @@ +/******************************************************** +* +* 文 件 名: SsksLightRelayCfgDataManage.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2025-12-17 +* 作 者: 联锁组 +* 功能描述: SSKS闪灯稳灯继电器相关配置 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _SSKSLIGHTRELAY_CFGDATA_MAG_H_ +#define _SSKSLIGHTRELAY_CFGDATA_MAG_H_ + +#include "CommonTypes.h" +#include "SsksLightRelayDefine.h" + +/*SSKS闪灯稳灯继电器配置数据结构体*/ +typedef struct S_SsksLightRelayCfgDataStruct +{ + UINT16 SsksLightRelayId; /*SSKS闪灯稳灯继电器ID*/ + UINT16 BelongOcId; /*继电器所属OID*/ + UINT8 BelongCiId; /*继电器所属联锁ID*/ + UINT8 cRelEnterRouteNum; /*关联驶入存车线的进路数量*/ + UINT16 szRelEnterRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]; /*关联驶入存车线的进路ID数组*/ + UINT8 cRelExportRouteNum; /*关联驶出存车线的进路数量*/ + UINT16 szRelExportRouteId[SSKS_LIGHT_RELAY_ROUTE_MAX]; /*关联驶出存车线的进路ID数组*/ +} SsksLightRelayCfgDataStruct; + +/*******************************全局变量声明*******************************/ +extern SsksLightRelayCfgDataStruct gSsksLightRelayCfgStr[SSKS_LIGHT_RELAY_SUM_MAX]; /*SSKS闪灯稳灯继电器信息*/ +extern INT16 gSsksLightRelaySum; /*SSKS闪灯稳灯继电器数量*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +* 功能描述:获取指定ID的SSKS闪灯稳灯继电器的索引号 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:SSKS_LIGHT_RELAY_SUM_MAX 获取数据失败 +* bufIndex) + { + cRetVal = gSsksLightRelayData[bufIndex].RelEnterRouteLockFlag; + } + else + { + /*不处理*/ + } + + return cRetVal; +} + +/* +* 功能描述:设置SSKS闪灯稳灯继电器关联驶入存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT8 cRouteLockFlag 进路锁闭标志 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksEnterRouteLockFlag(const UINT16 wSsksLightRelayId, const UINT8 cRouteLockFlag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetSsksLightRelayCfgBufIndex(wSsksLightRelayId); /*获取数组下标*/ + + if (SSKS_LIGHT_RELAY_SUM_MAX > bufIndex) + { + if ((SSKS_LIGHT_ROUTE_LOCK_NO == cRouteLockFlag) || (SSKS_LIGHT_ROUTE_LOCK_YES == cRouteLockFlag)) + { + gSsksLightRelayData[bufIndex].RelEnterRouteLockFlag = cRouteLockFlag; + } + else + { + /*不做处理*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述:获取SSKS闪灯稳灯继电器关联驶处存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:0x55 无效 +* 0xAA 有效 +* Created By LQ 2025.12.15 +*/ +UINT8 GetSsksExportRouteLockFlag(const UINT16 wSsksLightRelayId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT8 cRetVal = SSKS_LIGHT_ROUTE_LOCK_YES; + + bufIndex = GetSsksLightRelayCfgBufIndex(wSsksLightRelayId); /*获取数组下标*/ + + if (SSKS_LIGHT_RELAY_SUM_MAX > bufIndex) + { + cRetVal = gSsksLightRelayData[bufIndex].RelExportRouteLockFlag; + } + else + { + /*不处理*/ + } + + return cRetVal; +} + +/* +* 功能描述:设置SSKS闪灯稳灯继电器关联驶出存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT8 cRouteLockFlag 进路锁闭标志 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksExportRouteLockFlag(const UINT16 wSsksLightRelayId, const UINT8 cRouteLockFlag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetSsksLightRelayCfgBufIndex(wSsksLightRelayId); /*获取数组下标*/ + + if (SSKS_LIGHT_RELAY_SUM_MAX > bufIndex) + { + if ((SSKS_LIGHT_ROUTE_LOCK_NO == cRouteLockFlag) || (SSKS_LIGHT_ROUTE_LOCK_YES == cRouteLockFlag)) + { + gSsksLightRelayData[bufIndex].RelExportRouteLockFlag = cRouteLockFlag; + } + else + { + /*不做处理*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述:获取SSKS闪灯稳灯继电器延时驱稳灯起始周期 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:延时驱稳灯起始周期 +* Created By LQ 2025.12.15 +*/ +UINT32 GetSsksSteadyLightDelayStartCyc(const UINT16 wSsksLightRelayId) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + UINT32 dwRetVal = 0U; + + bufIndex = GetSsksLightRelayCfgBufIndex(wSsksLightRelayId); /*获取数组下标*/ + + if (SSKS_LIGHT_RELAY_SUM_MAX > bufIndex) + { + dwRetVal = gSsksLightRelayData[bufIndex].dwSteadyLightDelayStartCycNum; + } + else + { + /*不处理*/ + } + + return dwRetVal; +} + +/* +* 功能描述:设置SSKS闪灯稳灯继电器延时驱稳灯起始周期 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksSteadyLightDelayStartCyc(const UINT16 wSsksLightRelayId, const UINT32 dwCycNum) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetSsksLightRelayCfgBufIndex(wSsksLightRelayId); /*获取数组下标*/ + + if (SSKS_LIGHT_RELAY_SUM_MAX > bufIndex) + { + if ((0U == dwCycNum) + || ((0U != dwCycNum) && (0U == gSsksLightRelayData[bufIndex].dwSteadyLightDelayStartCycNum) && (SSKS_LIGHT_ROUTE_LOCK_YES == gSsksLightRelayData[bufIndex].RelEnterRouteLockFlag))) + { + /*仅在待设置周期号为0时,或在驶入存车线记录锁闭标志有效且为第一次设置周期号时才能更新起始周期号*/ + gSsksLightRelayData[bufIndex].dwSteadyLightDelayStartCycNum = dwCycNum; + } + else + { + /*不做处理*/ + } + } + else + { + /*不做处理*/ + } +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDataManage.h b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDataManage.h new file mode 100644 index 0000000..c66ac44 --- /dev/null +++ b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDataManage.h @@ -0,0 +1,100 @@ +/******************************************************** +* +* 文 件 名: SsksLightRelayDataManage.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2025-12-17 +* 作 者: 联锁组 +* 功能描述: SSKS闪灯稳灯继电器相关数据 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _SSKSLIGHTRELAY_DATA_MANAGE_H_ +#define _SSKSLIGHTRELAY_DATA_MANAGE_H_ + +#include "CommonTypes.h" +#include "SsksLightRelayCfgDataManage.h" + +/*SSKS闪灯稳灯继电器动态数据结构体*/ +typedef struct S_SsksLightRelayDataStruct +{ + UINT16 SsksLightRelayId; /*SSKS闪灯稳灯继电器ID*/ + UINT8 RelEnterRouteLockFlag; /*关联驶入存车线进路锁闭标志:0x55-无效,0xAA-有效*/ + UINT8 RelExportRouteLockFlag; /*关联驶出存车线进路锁闭标志:0x55-无效,0xAA-有效*/ + UINT32 dwSteadyLightDelayStartCycNum; /*延时驱稳灯起始周期*/ +} SsksLightRelayDataStruct; + +extern SsksLightRelayDataStruct gSsksLightRelayData[SSKS_LIGHT_RELAY_SUM_MAX]; /* SSKS闪灯稳灯继电器动态数据 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +* 功能描述:获取SSKS闪灯稳灯继电器动态数据 +* 参数说明:无 +* 返 回 值:SSKS闪灯稳灯继电器动态数据 +* Created By LQ 2025.12.15 +*/ +SsksLightRelayDataStruct* GetSsksLightRelayData(void); + +/* +* 功能描述:获取SSKS闪灯稳灯继电器关联驶入存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:0x55 无效 +* 0xAA 有效 +* Created By LQ 2025.12.15 +*/ +UINT8 GetSsksEnterRouteLockFlag(const UINT16 wSsksLightRelayId); + +/* +* 功能描述:设置SSKS闪灯稳灯继电器关联驶入存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT8 cRouteLockFlag 进路锁闭标志 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksEnterRouteLockFlag(const UINT16 wSsksLightRelayId, const UINT8 cRouteLockFlag); + +/* +* 功能描述:获取SSKS闪灯稳灯继电器关联驶处存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:0x55 无效 +* 0xAA 有效 +* Created By LQ 2025.12.15 +*/ +UINT8 GetSsksExportRouteLockFlag(const UINT16 wSsksLightRelayId); + +/* +* 功能描述:设置SSKS闪灯稳灯继电器关联驶出存车线进路锁闭标志 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT8 cRouteLockFlag 进路锁闭标志 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksExportRouteLockFlag(const UINT16 wSsksLightRelayId, const UINT8 cRouteLockFlag); + +/* +* 功能描述:获取SSKS闪灯稳灯继电器延时驱稳灯起始周期 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* 返 回 值:延时驱稳灯起始周期 +* Created By LQ 2025.12.15 +*/ +UINT32 GetSsksSteadyLightDelayStartCyc(const UINT16 wSsksLightRelayId); + +/* +* 功能描述:设置SSKS闪灯稳灯继电器延时驱稳灯起始周期 +* 参数说明:const UINT16 wSsksLightRelayId SSKS闪灯稳灯继电器ID +* const UINT32 dwCycNum 周期号 +* 返 回 值:无 +* Created By LQ 2025.12.15 +*/ +void SetSsksSteadyLightDelayStartCyc(const UINT16 wSsksLightRelayId, const UINT32 dwCycNum); + +#ifdef __cplusplus +}; +#endif + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDefine.h b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDefine.h new file mode 100644 index 0000000..4f8f0c0 --- /dev/null +++ b/TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDefine.h @@ -0,0 +1,27 @@ +/******************************************************** +* +* 文 件 名: SsksLightRelayDefine.h +* 版权说明: 交控科技股份有限公司 +* 创建时间: 2025-12-17 +* 作 者: 联锁组 +* 功能描述: SSKS闪灯稳灯继电器相关常量定义 +* 函数包括: +* 使用注意: +* 修改记录: +* +********************************************************/ + +#ifndef _SSKSLIGHTRELAY_DATA_DEFINE_H_ +#define _SSKSLIGHTRELAY_DATA_DEFINE_H_ + +/*SSKS闪灯稳灯继电器数量最大值*/ +#define SSKS_LIGHT_RELAY_SUM_MAX (UINT16)2U + +/*SSKS闪灯稳灯继电器关联驶入/驶出存车线进路数量最大值*/ +#define SSKS_LIGHT_RELAY_ROUTE_MAX (UINT8)4U + +/*SSKS关联存车线进路锁闭标志*/ +#define SSKS_LIGHT_ROUTE_LOCK_NO (UINT8)0x55 /*无效*/ +#define SSKS_LIGHT_ROUTE_LOCK_YES (UINT8)0xaa /*有效*/ + +#endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c index ff335b6..7ffb1bf 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c @@ -10,6 +10,7 @@ ********************************************************/ #include "SwitchConfigDataManage.h" +#include "../Section/LogicSectionConfigDataManage.h" SwitchConfigDataStruct SwitchConfigDataStru[SWITCH_SUM_MAX]; /*定义道岔数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/ UINT16 LocalCiSwitchIdBuf[SWITCH_SUM_MAX] = {0u}; /*定义本地联锁道岔ID映射数组*/ @@ -1420,5 +1421,146 @@ UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId) { retVal = CI_ERROR; } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔额外物理区段ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 额外物理区段ID +*/ +UINT16 GetSwitchExtraPhySecId(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + retVal = SwitchConfigDataStru[bufIndex].wExtraPhySecId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔常态位置 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 所属虚拟联锁ID +*/ +UINT8 GetSwitchNormalPosition(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (SWITCH_SUM_MAX > bufIndex) + { + retVal = SwitchConfigDataStru[bufIndex].chNormalPos; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔反位使能请求继电器(RWM)ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 道岔反位使能请求继电器(RWM)ID +*/ +UINT16 GetSwitchRwmRelayId(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (SWITCH_SUM_MAX > bufIndex) + { + retVal = SwitchConfigDataStru[bufIndex].RwmRelayId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔反位使能旁路开关采集继电器(Enable Bypass)ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 道岔反位使能旁路开关采集继电器(Enable Bypass)ID +*/ +UINT16 GetSwitchEnableBypassRelayId(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (SWITCH_SUM_MAX > bufIndex) + { + retVal = SwitchConfigDataStru[bufIndex].EnableBypassRelayId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔是否为联络线道岔 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : CI_ERROR:非联络线道岔 +* CI_SUCCESS:联络线道岔 +*/ +UINT8 GetSwitchDsnConnectAttr(const UINT16 switchId) +{ + UINT16 wLogSecNum = 0u; /*道岔关联逻辑区段数量*/ + UINT16 *pLogSecIdBuf = NULL; /*道岔关联逻辑区段ID*/ + UINT8 retVal = CI_ERROR; /*返回值*/ + UINT16 i = 0u; /*循环变量*/ + UINT8 cLogSecConnectAttr = CI_ERROR; /*逻辑区段联络线属性*/ + + /*获取道岔对应逻辑区段*/ + wLogSecNum = GetSwitchLogSecSum(switchId); + pLogSecIdBuf = GetSwitchLogSecBuf(switchId); + + /*异常防护*/ + if ((0u == wLogSecNum) || (NULL == pLogSecIdBuf)) + { + /*获取失败*/ + } + else + { + /*先赋值是联络线,遍历所有逻辑区段,任一逻辑区段非联络线则返回不是联络线*/ + retVal = CI_SUCCESS; + for (i = 0u; i < wLogSecNum; i++) + { + cLogSecConnectAttr = GetLogSecConnectProperty(pLogSecIdBuf[i]); + if (LOGSEC_CONNECT_PROPERTY_YES == cLogSecConnectAttr) + { + /*继续遍历*/ + } + else + { + retVal = CI_ERROR; + break; + } + } + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h index e081d29..1168b8f 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h @@ -28,67 +28,71 @@ extern "C" { typedef struct S_SwitchConfigDataStruct { - UINT16 SwitchId; /*道岔ID (配置字段)*/ - UINT8 BelongCiId; /*所属联锁ID (配置字段)*/ - UINT16 BelongOcId; /*所属OC ID (配置字段)*/ - UINT8 BelongVirCI; /*所属虚拟联锁*/ - UINT16 DSwitchOtherId; /*双动道岔另一个道岔ID (配置字段)*/ - UINT16 SwitchPhySecId; /*道岔物理区段ID (配置字段)*/ - UINT16 SwitchPhySecIdNum; /*多开道岔所属物理区段数量 (配置字段)*/ - UINT16 FcRelayId; /*道岔反操继电器ID (配置字段)*/ - UINT16 ZDbRelayId; /*道岔总定表继电器ID (配置字段)*/ - UINT16 ZFbRelayId; /*道岔总反表继电器ID (配置字段)*/ + UINT16 SwitchId; /*道岔ID (配置字段)*/ + UINT8 BelongCiId; /*所属联锁ID (配置字段)*/ + UINT16 BelongOcId; /*所属OC ID (配置字段)*/ + UINT8 BelongVirCI; /*所属虚拟联锁*/ + UINT16 DSwitchOtherId; /*双动道岔另一个道岔ID (配置字段)*/ + UINT16 SwitchPhySecId; /*道岔物理区段ID (配置字段)*/ + UINT16 SwitchPhySecIdNum; /*多开道岔所属物理区段数量 (配置字段)*/ + UINT16 FcRelayId; /*道岔反操继电器ID (配置字段)*/ + UINT16 ZDbRelayId; /*道岔总定表继电器ID (配置字段)*/ + UINT16 ZFbRelayId; /*道岔总反表继电器ID (配置字段)*/ + UINT16 wExtraPhySecId; /*道岔动作额外检查物理区段ID*/ + UINT8 chNormalPos; /*道岔常态位置*/ /*单轨与城市轨道交通公用继电器*/ - UINT16 DbRelayId; /*道岔定表继电器ID (配置字段) 即单开定位表示继电器ID*/ - UINT16 FbRelayId; /*道岔反表继电器ID (配置字段) 即单开反表表示继电器ID*/ - UINT16 YcRelayId; /*道岔允操继电器ID (配置字段) 即单开定位操作继电器ID*/ - UINT16 DcRelayId; /*道岔定操继电器ID (配置字段) 即单开反位操作继电器ID*/ - UINT16 wShadowDbRelayId; /*影子模式道岔定表继电器ID (配置字段) 迪斯尼*/ - UINT16 wShadowFbRelayId; /*影子模式道岔反表继电器ID (配置字段) 迪斯尼*/ + UINT16 DbRelayId; /*道岔定表继电器ID (配置字段) 即单开定位表示继电器ID*/ + UINT16 FbRelayId; /*道岔反表继电器ID (配置字段) 即单开反表表示继电器ID*/ + UINT16 YcRelayId; /*道岔允操继电器ID (配置字段) 即单开定位操作继电器ID*/ + UINT16 DcRelayId; /*道岔定操继电器ID (配置字段) 即单开反位操作继电器ID*/ + UINT16 wShadowDbRelayId; /*影子模式道岔定表继电器ID (配置字段) 迪斯尼*/ + UINT16 wShadowFbRelayId; /*影子模式道岔反表继电器ID (配置字段) 迪斯尼*/ /*以下为单轨道岔相关继电器*/ - UINT16 GZJId; /*故障继电器ID (配置字段)*/ - UINT16 JTYJaId; /*现场状态继电器ID (配置字段)*/ - UINT16 QQJId; /*现场请求继电器ID(配置字段)*/ - UINT16 SJFId; /*锁闭继电器ID (配置字段)*/ - UINT16 TYJId; /*同意现场控制继电器ID (配置字段)*/ - UINT16 ThreeNId; /*三开N位表示继电器ID(配置字段)*/ - UINT16 ThreeLId; /*三开L位表示继电器ID (配置字段)*/ - UINT16 ThreeRId; /*三开R位表示继电器ID(配置字段)*/ - UINT16 FiveNId; /*五开N位表示继电器ID (配置字段)*/ - UINT16 FiveL1Id; /*五开L1位表示继电器ID(配置字段)*/ - UINT16 FiveL2Id; /*五开L2位表示继电器ID(配置字段)*/ - UINT16 FiveR1Id; /*五开R1位表示继电器ID (配置字段)*/ - UINT16 FiveR2Id; /*五开R2位表示继电器ID (配置字段)*/ - UINT16 ThreeNYCId; /*三开N位操作继电器ID(配置字段)*/ - UINT16 ThreeLYCId; /*三开L位操作继电器ID (配置字段)*/ - UINT16 ThreeRYCId; /*三开R位操作继电器ID(配置字段)*/ - UINT16 FiveNYCId; /*五开N位操作继电器ID (配置字段)*/ - UINT16 FiveL1YCId; /*五开L1位操作继电器ID(配置字段)*/ - UINT16 FiveL2YCId; /*五开L2位操作继电器ID(配置字段)*/ - UINT16 FiveR1YCId; /*五开R1位操作继电器ID (配置字段)*/ - UINT16 FiveR2YCId; /*五开R2位操作继电器ID (配置字段)*/ - UINT16 DFHRelayId; /*道岔的DFH继电器ID(配置字段)*/ - UINT16 HostSwitchIdBuf[SWITCH_HOST_SWITCH_MAX_NUM];/*主体道岔ID数组*/ - UINT16 HostSwitchNum; /*主体道岔ID长度*/ - UINT16 SwitchLogSecSum; /*道岔关联的逻辑区段数*/ - UINT16 SwitchLogSecIdBuf[SWITCH_LOG_TRACK_MAX_NUM]; /*道岔关联的逻辑区段数组*/ - UINT8 SwitchIsThisLine; /*道岔是否本线路*/ - UINT16 DsRelayId; /*道岔单锁继电器ID*/ - UINT16 DsQRelayId; /*道岔单锁前节点继电器ID*/ - UINT16 DsHRelayId; /*道岔单锁后节点继电器ID*/ - UINT16 ByPassRelayId; /*道岔旁路继电器ID*/ + UINT16 GZJId; /*故障继电器ID (配置字段)*/ + UINT16 JTYJaId; /*现场状态继电器ID (配置字段)*/ + UINT16 QQJId; /*现场请求继电器ID(配置字段)*/ + UINT16 SJFId; /*锁闭继电器ID (配置字段)*/ + UINT16 TYJId; /*同意现场控制继电器ID (配置字段)*/ + UINT16 ThreeNId; /*三开N位表示继电器ID(配置字段)*/ + UINT16 ThreeLId; /*三开L位表示继电器ID (配置字段)*/ + UINT16 ThreeRId; /*三开R位表示继电器ID(配置字段)*/ + UINT16 FiveNId; /*五开N位表示继电器ID (配置字段)*/ + UINT16 FiveL1Id; /*五开L1位表示继电器ID(配置字段)*/ + UINT16 FiveL2Id; /*五开L2位表示继电器ID(配置字段)*/ + UINT16 FiveR1Id; /*五开R1位表示继电器ID (配置字段)*/ + UINT16 FiveR2Id; /*五开R2位表示继电器ID (配置字段)*/ + UINT16 ThreeNYCId; /*三开N位操作继电器ID(配置字段)*/ + UINT16 ThreeLYCId; /*三开L位操作继电器ID (配置字段)*/ + UINT16 ThreeRYCId; /*三开R位操作继电器ID(配置字段)*/ + UINT16 FiveNYCId; /*五开N位操作继电器ID (配置字段)*/ + UINT16 FiveL1YCId; /*五开L1位操作继电器ID(配置字段)*/ + UINT16 FiveL2YCId; /*五开L2位操作继电器ID(配置字段)*/ + UINT16 FiveR1YCId; /*五开R1位操作继电器ID (配置字段)*/ + UINT16 FiveR2YCId; /*五开R2位操作继电器ID (配置字段)*/ + UINT16 DFHRelayId; /*道岔的DFH继电器ID(配置字段)*/ + UINT16 HostSwitchIdBuf[SWITCH_HOST_SWITCH_MAX_NUM]; /*主体道岔ID数组*/ + UINT16 HostSwitchNum; /*主体道岔ID长度*/ + UINT16 SwitchLogSecSum; /*道岔关联的逻辑区段数*/ + UINT16 SwitchLogSecIdBuf[SWITCH_LOG_TRACK_MAX_NUM]; /*道岔关联的逻辑区段数组*/ + UINT8 SwitchIsThisLine; /*道岔是否本线路*/ + UINT16 DsRelayId; /*道岔单锁继电器ID*/ + UINT16 DsQRelayId; /*道岔单锁前节点继电器ID*/ + UINT16 DsHRelayId; /*道岔单锁后节点继电器ID*/ + UINT16 ByPassRelayId; /*道岔旁路继电器ID*/ + UINT16 RwmRelayId; /*道岔反位使能请求(RWM)继电器ID*/ + UINT16 EnableBypassRelayId; /*道岔反位使能旁路(Enable Bypass)继电器ID*/ - UINT16 wProtectSwitchNum; /*防护道岔数组长度 add by qw.liu 2022-02-08*/ - UINT16 wszProtectSwitchIdBuf[SWITCH_PROTECT_SWITCH_MAX_NUM];/*防护主体道岔ID数组 add by qw.liu 2022-02-08*/ + UINT16 wProtectSwitchNum; /*防护道岔数组长度 add by qw.liu 2022-02-08*/ + UINT16 wszProtectSwitchIdBuf[SWITCH_PROTECT_SWITCH_MAX_NUM]; /*防护主体道岔ID数组 add by qw.liu 2022-02-08*/ UINT32 dwSwitchKilo; /*道岔公里标*/ UINT8 chKiloType; /*公里标类型*/ - UINT16 DbDrvRelayId; /*道岔定表驱动继电器ID (配置字段-联络线使用)*/ - UINT16 FbDrvRelayId; /*道岔反表驱动继电器ID (配置字段-联络线使用)*/ - UINT16 DsDrvRelayId; /*道岔单锁驱动继电器ID (配置字段-联络线使用)*/ - UINT16 DsDrvQRelayId; /*道岔单锁前节点驱动继电器ID (配置字段-联络线使用)*/ - UINT16 DsDrvHRelayId; /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/ + UINT16 DbDrvRelayId; /*道岔定表驱动继电器ID (配置字段-联络线使用)*/ + UINT16 FbDrvRelayId; /*道岔反表驱动继电器ID (配置字段-联络线使用)*/ + UINT16 DsDrvRelayId; /*道岔单锁驱动继电器ID (配置字段-联络线使用)*/ + UINT16 DsDrvQRelayId; /*道岔单锁前节点驱动继电器ID (配置字段-联络线使用)*/ + UINT16 DsDrvHRelayId; /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/ } SwitchConfigDataStruct; typedef struct S_OC_SwitchConfigDataStruct @@ -562,6 +566,47 @@ UINT16 GetSwitchDbDrvRelayId(const UINT16 switchId); * >0: 定位驱动继电器ID */ UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔额外物理区段ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 额外物理区段ID +*/ +UINT16 GetSwitchExtraPhySecId(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔常态位置 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 所属虚拟联锁ID +*/ +UINT8 GetSwitchNormalPosition(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔反位使能请求继电器(RWM)ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 道岔反位使能请求继电器(RWM)ID +*/ +UINT16 GetSwitchRwmRelayId(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔反位使能旁路开关采集继电器(Enable Bypass)ID +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 道岔反位使能旁路开关采集继电器(Enable Bypass)ID +*/ +UINT16 GetSwitchEnableBypassRelayId(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔是否为联络线道岔 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : CI_ERROR:非联络线道岔 +* CI_SUCCESS:联络线道岔 +*/ +UINT8 GetSwitchDsnConnectAttr(const UINT16 switchId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c index 4a53cbc..35a0ddc 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c @@ -860,6 +860,9 @@ void SetSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) UINT8 moveTimeState = 0u; UINT8 ciPattern = GetLocalCiPattern(); + UINT8 cIsConnectAttr = CI_ERROR; + UINT8 cIsNotDiffLine = CI_TRUE; + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ if (bufIndex < SWITCH_SUM_MAX) @@ -899,11 +902,20 @@ void SetSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) /*道岔当前位置*/ SwitchDataStru[bufIndex].SwitchCurPosition = curPosition; - if (CI_TRUE == CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SWITCH, switchId)) - { /*只有具有本联锁控制权的道岔才设置道岔挤岔状态*/ + + cIsNotDiffLine = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SWITCH, switchId); + cIsConnectAttr = GetSwitchDsnConnectAttr(switchId); + if ((CI_TRUE == cIsNotDiffLine) && (CI_ERROR == cIsConnectAttr)) + { + /*只有具有本联锁控制权的道岔才设置道岔挤岔状态*/ + /*非联络线进路才设置道岔挤岔状态*/ /*设置道岔开始动作时间*/ SetSwitchMoveStartCycNum(switchId, Get2oo2CurCycleNum()); } + else + { + /*nothing*/ + } } else if (CI_TIME_IN == moveTimeState) { @@ -928,7 +940,6 @@ void SetSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) SwitchDataStru[bufIndex].SwitchCurPosition = SWITCH_POSITION_JICHA; /*时间不变*/ - } } else @@ -953,8 +964,9 @@ void SetSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) void SetSingleSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) { UINT16 bufIndex = 0u; /*数组下标*/ - UINT8 moveTimeState = 0u; + UINT8 cIsConnectAttr = CI_ERROR; + UINT8 cIsNotDiffLine = CI_TRUE; bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ @@ -1001,11 +1013,19 @@ void SetSingleSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) SwitchDataStru[bufIndex].SingleSwitchCurPosition = curPosition; /*设置道岔开始动作时间*/ - if (CI_TRUE == CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SWITCH, switchId)) - { /*只有具有本联锁控制权的道岔才设置道岔挤岔状态*/ + cIsNotDiffLine = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SWITCH, switchId); + cIsConnectAttr = GetSwitchDsnConnectAttr(switchId); + if ((CI_TRUE == cIsNotDiffLine) && (CI_ERROR == cIsConnectAttr)) + { + /*只有具有本联锁控制权的道岔才设置道岔挤岔状态*/ + /*非联络线进路才设置道岔挤岔状态*/ /*设置道岔开始动作时间*/ SetSwitchMoveStartCycNum(switchId,Get2oo2CurCycleNum()); } + else + { + /*nothing*/ + } } else if (moveTimeState == CI_TIME_IN) { @@ -1025,7 +1045,6 @@ void SetSingleSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) SwitchDataStru[bufIndex].SingleSwitchCurPosition = SWITCH_POSITION_JICHA; /*时间不变*/ - } } else if (SWITCH_POSITION_JICHA == curPosition) @@ -1112,6 +1131,8 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition) SwitchDataStru[bufIndex].SwitchDrivePos = drivePosition; /*道岔驱动开始时间*/ SetSwitchDriveStartCycNum(switchId, Get2oo2CurCycleNum()); + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, Get2oo2CurCycleNum()); } } else @@ -1123,6 +1144,8 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition) SwitchDataStru[bufIndex].SwitchDrivePos = SWITCH_DRIVE_POS_INVALID; /*道岔驱动开始时间*/ SetSwitchDriveStartCycNum(switchId, 0U); + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchId, 0U); } } @@ -1148,6 +1171,8 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition) SwitchDataStru[bufIndex2].SwitchDrivePos = drivePosition; /*道岔驱动开始时间*/ SetSwitchDriveStartCycNum(switchOtherId, Get2oo2CurCycleNum()); + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchOtherId, Get2oo2CurCycleNum()); } } else @@ -1159,6 +1184,8 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition) SwitchDataStru[bufIndex2].SwitchDrivePos = SWITCH_DRIVE_POS_INVALID; /*道岔驱动开始时间*/ SetSwitchDriveStartCycNum(switchOtherId, 0U); + /*用于定反操互斥判断的道岔驱动起始周期*/ + SetSwitchMulDrvCycNum(switchOtherId, 0U); } } } @@ -1453,6 +1480,60 @@ UINT8 SetSwitchExpDrvPosition(const UINT16 switchId, const UINT8 drivePosition) return retVal; } +/* +* 功能描述: 获取指定道岔反位使能请求 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 反位使能请求 +*/ +UINT8 GetSwitchReverseEnable(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (SWITCH_SUM_MAX > bufIndex) + { + retVal = SwitchDataStru[bufIndex].SwitchReverseEnable; + } + else + { + /*nothing*/ + } + + return retVal; +} + +/* +* 功能描述: 设置指定ID道岔反位使能请求(迪士尼联络线) +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT8 drivePosition, 驱动位置(反位或无效) +* 返回值 : 无 +*/ +void SetSwitchReverseEnable(const UINT16 switchId, const UINT8 drivePosition) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + if ((SWITCH_DRIVE_POS_FANWEI == drivePosition) || (SWITCH_DRIVE_POS_INVALID == drivePosition)) + { + SwitchDataStru[bufIndex].SwitchReverseEnable = drivePosition; + } + else + { + /*设置失败*/ + } + } + else + { + /*道岔ID错误*/ + } +} + /* * 功能描述: 获取指定ID道岔驱动状态 * 参数说明: const UINT16 switchId, 道岔ID @@ -2296,7 +2377,7 @@ void SetSwitchTestLogicManage(const UINT8 chCmdType) SwitchBelongCiId = GetSwitchBelongCiId(switchId); /*获取道岔所属联锁ID*/ if (SwitchBelongCiId == localCiId) { - chRtnTemp = SetSwitchPositionLogicProcess(switchId, SWITCH_POSITION_DINGWEI, ATS_CMD_SWITCH_DINGWEI_TEST_TWO, &chSwitchTestFlag); + chRtnTemp = SetSwitchPositionLogicProcess(switchId, SWITCH_POSITION_DINGWEI, ATS_CMD_SWITCH_DINGWEI_TEST_TWO, &chSwitchTestFlag, ESEND_LEVEL_ATS); if (CI_SUCCESS == chRtnTemp) { /*成功*/ retValue = SetSwitchDanCaoPosition(switchId, SWITCH_POSITION_DINGWEI); /*设置单操定位标志*/ @@ -2332,7 +2413,7 @@ void SetSwitchTestLogicManage(const UINT8 chCmdType) SwitchBelongCiId = GetSwitchBelongCiId(switchId); /*获取道岔所属联锁ID*/ if (SwitchBelongCiId == localCiId) { - chRtnTemp = SetSwitchPositionLogicProcess(switchId, SWITCH_POSITION_FANWEI, ATS_CMD_SWITCH_FANWEI_TEST_TWO, &chSwitchTestFlag); + chRtnTemp = SetSwitchPositionLogicProcess(switchId, SWITCH_POSITION_FANWEI, ATS_CMD_SWITCH_FANWEI_TEST_TWO, &chSwitchTestFlag, ESEND_LEVEL_ATS); if (CI_SUCCESS == chRtnTemp) { /*成功*/ retValue = SetSwitchDanCaoPosition(switchId, SWITCH_POSITION_FANWEI); /*设置单操反位标志*/ @@ -2814,3 +2895,239 @@ void SetHlhtCiSwitchPlockStatus(const UINT16 switchId, const UINT8 lockStatus) /*保护区段ID非法,不做处理*/ } } + +/* +* 功能描述: 设置道岔常态位置起始周期 +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetSwitchNormalPosCycNum(const UINT16 switchId, const UINT32 cycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + if (bufIndex < SWITCH_SUM_MAX) + { + SwitchDataStru[bufIndex].switchNormalPosCycNum = cycNum; + } +} +/* +* 功能描述: 获取道岔常态位置起始周期 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : UINT32 常态位置起始周期 +*/ +UINT32 GetSwitchNormalPosCycNum(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + if (bufIndex < SWITCH_SUM_MAX) + { + retVal = SwitchDataStru[bufIndex].switchNormalPosCycNum; + } + return retVal; +} + +/* +* 功能描述: 获取指定ID道岔驱动起始周期号-定反操互斥 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 驱动起始周期号 +*/ +UINT32 GetSwitchMulDrvCycNum(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + retVal = SwitchDataStru[bufIndex].switchMutDrvCycNum; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + + +/* +* 功能描述: 设置指定ID道岔驱动起始周期号-定反操互斥 +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT32 mulDrvCycNum, 驱动起始周期号 +* 返回值 : 无 +* +*/ +void SetSwitchMulDrvCycNum(const UINT16 switchId, const UINT32 mulDrvCycNum) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + SwitchDataStru[bufIndex].switchMutDrvCycNum = mulDrvCycNum; /*道岔驱动起始周期号*/ + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述: 设置指定ID道岔当前位置逻辑区段ID(当前位置定位或反位) +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 无 +* +*/ +UINT16 GetSwitchUnusualLogSecId(const UINT16 switchId) +{ + UINT16 switchLogSecSum = 0U; /*道岔关联逻辑区段*/ + const UINT16* pLgcIdBuf = NULL; /*道岔关联逻辑区段ID序列*/ + UINT8 LogSecSwitchSum = 0U; /*逻辑区段包含的道岔数*/ + LogsecSwitchStruct* pLogicSecSwitchIdData = NULL;/*逻辑区段道岔ID数据*/ + UINT16 switchLogSecId = 0U; /*道岔非常态位置的逻辑区段ID*/ + UINT16 ii = 0U; /*循环索引*/ + UINT16 jj = 0U; /*循环索引*/ + UINT8 curSwitchPos = SWITCH_POSITION_INVALID; /*道岔当前位置*/ + + switchLogSecSum = GetSwitchLogSecSum(switchId); + pLgcIdBuf = GetSwitchLogSecBuf(switchId); + curSwitchPos = GetSwitchCurPosition(switchId);/*获取道岔当前位置*/ + + if ((0U != switchLogSecSum) && (NULL != pLgcIdBuf)) + { + if ((SWITCH_POSITION_DINGWEI == curSwitchPos) || (SWITCH_POSITION_FANWEI == curSwitchPos)) + { + for (ii = 0U; ii < switchLogSecSum; ii++) + {/*遍历道岔关联的逻辑区段*/ + LogSecSwitchSum = GetLogicSecSwitchSum(pLgcIdBuf[ii]); + pLogicSecSwitchIdData = GetLogicSecSwitchIdStru(pLgcIdBuf[ii]); + for (jj = 0U; jj < LogSecSwitchSum; jj++) + {/*遍历逻辑区段包含的道岔*/ + if ((pLogicSecSwitchIdData[jj].SwitchId == switchId) && (pLogicSecSwitchIdData[jj].SwitchPosition == curSwitchPos)) + { + switchLogSecId = pLgcIdBuf[ii]; + break; + } + } + + if (jj != LogSecSwitchSum) + {/*找到该逻辑区段*/ + break; + } + } + } + else + {/*四开挤岔不查找*/ + } + } + else + {/*不处理*/ + } + + return switchLogSecId; +} + +/* +* 功能描述: 设置指定ID道岔非常态位置逻辑区段延时解锁标志 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 无 +* +*/ +void SetSwitchUnusualLogSecFlag(const UINT16 switchId, const UINT8 flag) +{ + UINT16 bufIndex = 0U; /*数组下标*/ + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + if ((SWITCH_UNUSUAL_VALID == flag) || (SWITCH_UNUSUAL_INVALID == flag)) + { + SwitchDataStru[bufIndex].switchUnusualLogSecFlag = flag; /*道岔非常态位置逻辑区段延时解锁标志*/ + } + else + {/*不处理*/ + } + } + else + { + /*不做处理*/ + } +} + +/* +* 功能描述: 获取指定ID道岔非常态位置逻辑区段延时解锁标志 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : SWITCH_UNUSUAL_VALID 有效 +* SWITCH_UNUSUAL_INVALID 无效 +*/ +UINT8 GetSwitchUnusualLogSecFlag(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*数组下标*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + retVal = SwitchDataStru[bufIndex].switchUnusualLogSecFlag; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* 功能描述: 道岔反位使能请求驱动处理 +* 参数说明: 无 +* 返回值 : 无 +*/ +void SwitchReverseEnableDriveProc(void) +{ + UINT16 wSwitchSum = 0u; /*道岔总数*/ + UINT16 i = 0u; /*循环变量*/ + UINT16 wSwitchId = 0u; /*道岔ID*/ + UINT8 cReverseEnable = CI_ERROR; /*反位使能请求*/ + UINT16 wRelayId = 0u; /*反位使能请求继电器ID*/ + UINT16 wEnableBypassRelayId = 0u; /*旁路继电器ID*/ + UINT8 cEnableBypassRelayState = CI_ERROR; /*旁路继电器状态*/ + + wSwitchSum = GetSwitchCurSum(); + for (i = 0u; i < wSwitchSum; i++) + { + /*遍历所有道岔,获取道岔ID和反位使能请求继电器ID*/ + wSwitchId = GetSwitchId(i); + wRelayId = GetSwitchRwmRelayId(wSwitchId); + if (0u == wRelayId) + { + /*未关联反位使能请求继电器,不处理*/ + } + else + { + /*获取反位使能请求*/ + cReverseEnable = GetSwitchReverseEnable(wSwitchId); + /*获取反位使能旁路继电器ID*/ + wEnableBypassRelayId = GetSwitchEnableBypassRelayId(wSwitchId); + /*获取反位使能旁路继电器状态*/ + cEnableBypassRelayState = GetRelayCollState(wEnableBypassRelayId); + if ((SWITCH_DRIVE_POS_FANWEI == cReverseEnable) + || ((0u < wEnableBypassRelayId) && (RELAY_STATE_UP == cEnableBypassRelayState))) + { + /*反位使能有效,或反位使能旁路继电器有效,驱动继电器吸起*/ + (void)SetRelayDriveState(wRelayId, RELAY_DRIVE_STATE_UP); + } + else + { + /*驱动继电器落下*/ + (void)SetRelayDriveState(wRelayId, RELAY_DRIVE_STATE_DOWN); + } + } + } +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h index 7010824..596a869 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h @@ -42,6 +42,7 @@ typedef struct S_SwitchDataStruct UINT8 SwitchColPosition; /*容忍前道岔采集位置*/ UINT8 SwitchDrivePos; /*道岔驱动位置:包含三开和五开道岔 (动态字段)*/ UINT8 SwitchExpDrvPos; /*道岔期望驱动位置:包含三开和五开道岔 (动态字段)*/ + UINT8 SwitchReverseEnable; /*道岔反位使能请求(迪士尼联络线),SWITCH_DRIVE_POS_FANWEI有效,SWITCH_DRIVE_POS_INVALID无效*/ UINT32 SwitMoveStartCycNum; /*道岔动作起始周期号 (动态字段)*/ UINT32 SwitDriveStartCycNum; /*道岔驱动起始周期号 (动态字段)*/ UINT8 chSwitchDrivedFlag; /*道岔被驱动过标志*/ @@ -49,6 +50,9 @@ typedef struct S_SwitchDataStruct UINT8 switchDrivingState; /*道岔驱动状态*/ UINT8 switchPreExpDrvPos; /*记录该道岔之前期望驱动位置*/ UINT8 switchDrivOvtmDrvPos; /*道岔驱动超时位置*/ + UINT32 switchNormalPosCycNum; /*道岔判断常态位置起始周期*/ + UINT8 switchUnusualLogSecFlag; /*道岔非常态位置逻辑区段延时锁闭标志*/ + UINT32 switchMutDrvCycNum; /*道岔驱动起始周期号-定反操互斥使用*/ /*单轨道岔*/ UINT8 switchFaultState; /*道岔故障状态*/ UINT8 switchApplyState; /* 道岔现场申请状态*/ @@ -308,6 +312,22 @@ UINT8 GetSwitchExpDrvPosition(const UINT16 switchId); */ UINT8 SetSwitchExpDrvPosition(const UINT16 switchId, const UINT8 drivePosition); +/* +* 功能描述: 获取指定道岔反位使能请求 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 反位使能请求 +*/ +UINT8 GetSwitchReverseEnable(const UINT16 switchId); + +/* +* 功能描述: 设置指定ID道岔反位使能请求(迪士尼联络线) +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT8 drivePosition, 驱动位置(反位或无效) +* 返回值 : 无 +*/ +void SetSwitchReverseEnable(const UINT16 switchId, const UINT8 drivePosition); + /* * 功能描述: 获取指定ID道岔驱动状态 * 参数说明: const UINT16 switchId, 道岔ID @@ -688,6 +708,69 @@ UINT8 GetSwitchCollPos(const UINT16 switchId); */ void SetHlhtCiSwitchPlockStatus(const UINT16 switchId, const UINT8 lockStatus); +/* +* 功能描述: 设置道岔常态位置起始周期 +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT32 cycNum 周期号 +* 返回值 : 无 +*/ +void SetSwitchNormalPosCycNum(const UINT16 switchId, const UINT32 cycNum); + +/* +* 功能描述: 获取道岔常态位置起始周期 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : UINT32 常态位置起始周期 +*/ +UINT32 GetSwitchNormalPosCycNum(const UINT16 switchId); + +/* +* 功能描述: 获取指定ID道岔驱动起始周期号-定反操互斥 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 0: 获取数据失败 +* >0: 驱动起始周期号 +*/ +UINT32 GetSwitchMulDrvCycNum(const UINT16 switchId); + +/* +* 功能描述: 设置指定ID道岔驱动起始周期号-定反操互斥 +* 参数说明: const UINT16 switchId, 道岔ID +* const UINT32 mulDrvCycNum, 驱动起始周期号 +* 返回值 : 无 +* +*/ +void SetSwitchMulDrvCycNum(const UINT16 switchId, const UINT32 mulDrvCycNum); + +/* +* 功能描述: 设置指定ID道岔当前位置逻辑区段ID(当前位置定位或反位) +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 无 +* +*/ +UINT16 GetSwitchUnusualLogSecId(const UINT16 switchId); + +/* +* 功能描述: 设置指定ID道岔非常态位置逻辑区段延时解锁标志 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : 无 +* +*/ +void SetSwitchUnusualLogSecFlag(const UINT16 switchId, const UINT8 flag); + +/* +* 功能描述: 获取指定ID道岔非常态位置逻辑区段延时解锁标志 +* 参数说明: const UINT16 switchId, 道岔ID +* 返回值 : SWITCH_UNUSUAL_VALID 有效 +* SWITCH_UNUSUAL_INVALID 无效 +*/ +UINT8 GetSwitchUnusualLogSecFlag(const UINT16 switchId); + +/* +* 功能描述: 道岔反位使能请求驱动处理 +* 参数说明: 无 +* 返回值 : 无 +*/ +void SwitchReverseEnableDriveProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h index 26e5d10..3bc9ff3 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h @@ -145,5 +145,17 @@ #define SEND_CIM_COLLTOLERATE_FW 0xAAu /*反位波动*/ #define SEND_CIM_COLLTOLERATE_NO 0xffu /*无波动*/ +/*道岔常态位置*/ +#define SWITCH_NORMAL_DINGWEI ((UINT8)0x55) /*常态位置定位*/ +#define SWITCH_NORMAL_FANWEI ((UINT8)0xAA) /*常态位置反位*/ +#define SWITCH_NORMAL_DEFAULT ((UINT8)0xFF) /*无常态位置*/ + +#define SWITCH_UNUSUAL_VALID ((UINT8)0x55) /*道岔非常态位置逻辑区段延时锁闭标志有效*/ +#define SWITCH_UNUSUAL_INVALID ((UINT8)0xAA) /*道岔非常态位置逻辑区段延时锁闭标志无效*/ + +#define SWITCH_DRV_CMD_FLAG_YES ((UINT8)0x55) /*存在驱动命令*/ +#define SWITCH_DRV_CMD_FLAG_NO ((UINT8)0xAA) /*不存在驱动命令*/ + + #endif diff --git a/TSCP/src/APP/ciapp/System/CiSystemDefine.h b/TSCP/src/APP/ciapp/System/CiSystemDefine.h index 674c207..942f818 100644 --- a/TSCP/src/APP/ciapp/System/CiSystemDefine.h +++ b/TSCP/src/APP/ciapp/System/CiSystemDefine.h @@ -81,47 +81,51 @@ #define CI_SYSTEM_DIRECTION_NONE ((UINT8)0xFF) /*无效*/ /*设备类型*/ -#define CI_DEVICE_TYPE_SWITCH ((UINT8)0x01) /*道岔*/ -#define CI_DEVICE_TYPE_SIGNAL ((UINT8)0x02) /*信号机*/ -#define CI_DEVICE_TYPE_PHYSEC ((UINT8)0x03) /*物理区段*/ -#define CI_DEVICE_TYPE_LOGICSEC ((UINT8)0x04) /*逻辑区段*/ -#define CI_DEVICE_TYPE_OVERLAP ((UINT8)0x05) /*保护区段*/ -#define CI_DEVICE_TYPE_ROUTE ((UINT8)0x06) /*进路*/ -#define CI_DEVICE_TYPE_PLATFORM ((UINT8)0x07) /*站台*/ -#define CI_DEVICE_TYPE_AXISSEC ((UINT8)0x08) /*计轴区段*/ -#define CI_DEVICE_TYPE_ESB ((UINT8)0x09) /*站台紧急关闭按钮*/ -#define CI_DEVICE_TYPE_PSD_EXCEPT_OPEN ((UINT8)0x0A) /*站台屏蔽门(异常打开)*/ -#define CI_DEVICE_TYPE_PSD ((UINT8)0x10) /*站台屏蔽门*/ -#define CI_DEVICE_TYPE_STOP ((UINT8)0x11) /*列车停稳信息*/ -#define CI_DEVICE_TYPE_RELAY ((UINT8)0x12) /*继电器*/ -#define CI_DEVICE_TYPE_GROUP_AUTO_ROUTE ((UINT8)0x13) /*组合自动进路*/ -#define CI_DEVICE_TYPE_CONNECT_SWITCH ((UINT8)0x14) /*联络线道岔*/ -#define CI_DEVICE_TYPE_NONROUTE ((UINT8)0xA1) /*非进路*/ -#define CI_DEVICE_TYPE_AUTORETURN ((UINT8)0xA2) /*自动折返*/ -#define CI_DEVICE_TYPE_AUTOROUTE ((UINT8)0xA3) /*自动通过*/ -#define CI_DEVICE_TYPE_LONGROUTE ((UINT8)0xA4) /*长调进路*/ -#define CI_DEVICE_TYPE_SPKS ((UINT8)0xA5) /* SPKS按钮 */ -#define CI_DEVICE_TYPE_GARAGEDOOR ((UINT8)0xA6) /*车库门*/ -#define CI_DEVICE_TYPE_WASHMACHINE ((UINT8)0xA7) /* 洗车机 */ -#define CI_DEVICE_TYPE_ALLAUTORETURN ((UINT8)0xA8) /*全自动折返*/ -#define CI_DEVICE_TYPE_OTHER_CI ((UINT8)0xA9) /* 其他联锁条件 */ -#define CI_DEVICE_TYPE_FLOODGATE ((UINT8)0xB0) /*防淹门*/ -#define CI_DEVICE_TYPE_LEU ((UINT8)0xB1) /*LEU*/ -#define CI_DEVICE_TYPE_COMM_VOBC ((UINT8)0xB2) /*与VOBC通信*/ -#define CI_DEVICE_TYPE_WASH_LINE ((UINT8)0xB3) /*洗车线*/ -#define CI_DEVICE_TYPE_TAJ ((UINT8)0xB4) /*调车同意按钮继电器*/ -#define CI_DEVICE_TYPE_CMDRPLY_VOBC ((UINT8)0xB5) /*VOBC 命令回复*/ -#define CI_DEVICE_TYPE_TSR_VOBC ((UINT8)0xB6) /*VOBC 临时限速*/ -#define CI_DEVICE_TYPE_SLEEP_VOBC ((UINT8)0xB7) /*VOBC 睡眠列车*/ -#define CI_DEVICE_TYPE_FAULT_VOBC ((UINT8)0xB8) /*VOBC 故障列车*/ -#define CI_DEVICE_TYPE_CUTOFF_POINT ((UINT8)0xB9) /*分界点*/ -#define CI_DEVICE_TYPE_OC_BOARD ((UINT8)0xBA) /*OC 板卡*/ -#define CI_DEVICE_TYPE_RES_ALIGNMENT ((UINT8)0xBB) /*资源对顶点*/ -#define CI_DEVICE_TYPE_WASH_ALLOW_PASS ((UINT8)0xBC) /*洗车同意通过*/ -#define CI_DEVICE_TYPE_TRAIN_VOBC ((UINT8)0xBD) /*VOBC 列车*/ -#define CI_DEVICE_TYPE_BACKUP_VOBC ((UINT8)0xBE) /*后备VOBC列车*/ -#define CI_DEVICE_TYPE_ZHAOCHA ((UINT8)0xC0) /*照查*/ - +#define CI_DEVICE_TYPE_SWITCH ((UINT8)0x01) /*道岔*/ +#define CI_DEVICE_TYPE_SIGNAL ((UINT8)0x02) /*信号机*/ +#define CI_DEVICE_TYPE_PHYSEC ((UINT8)0x03) /*物理区段*/ +#define CI_DEVICE_TYPE_LOGICSEC ((UINT8)0x04) /*逻辑区段*/ +#define CI_DEVICE_TYPE_OVERLAP ((UINT8)0x05) /*保护区段*/ +#define CI_DEVICE_TYPE_ROUTE ((UINT8)0x06) /*进路*/ +#define CI_DEVICE_TYPE_PLATFORM ((UINT8)0x07) /*站台*/ +#define CI_DEVICE_TYPE_AXISSEC ((UINT8)0x08) /*计轴区段*/ +#define CI_DEVICE_TYPE_ESB ((UINT8)0x09) /*站台紧急关闭按钮*/ +#define CI_DEVICE_TYPE_PSD_EXCEPT_OPEN ((UINT8)0x0A) /*站台屏蔽门(异常打开)*/ +#define CI_DEVICE_TYPE_PSD ((UINT8)0x10) /*站台屏蔽门*/ +#define CI_DEVICE_TYPE_STOP ((UINT8)0x11) /*列车停稳信息*/ +#define CI_DEVICE_TYPE_RELAY ((UINT8)0x12) /*继电器*/ +#define CI_DEVICE_TYPE_GROUP_AUTO_ROUTE ((UINT8)0x13) /*组合自动进路*/ +#define CI_DEVICE_TYPE_CONNECT_SWITCH ((UINT8)0x14) /*联络线道岔*/ +#define CI_DEVICE_TYPE_NONROUTE ((UINT8)0xA1) /*非进路*/ +#define CI_DEVICE_TYPE_AUTORETURN ((UINT8)0xA2) /*自动折返*/ +#define CI_DEVICE_TYPE_AUTOROUTE ((UINT8)0xA3) /*自动通过*/ +#define CI_DEVICE_TYPE_LONGROUTE ((UINT8)0xA4) /*长调进路*/ +#define CI_DEVICE_TYPE_SPKS ((UINT8)0xA5) /* SPKS按钮 */ +#define CI_DEVICE_TYPE_GARAGEDOOR ((UINT8)0xA6) /*车库门*/ +#define CI_DEVICE_TYPE_WASHMACHINE ((UINT8)0xA7) /* 洗车机 */ +#define CI_DEVICE_TYPE_ALLAUTORETURN ((UINT8)0xA8) /*全自动折返*/ +#define CI_DEVICE_TYPE_OTHER_CI ((UINT8)0xA9) /* 其他联锁条件 */ +#define CI_DEVICE_TYPE_FLOODGATE ((UINT8)0xB0) /*防淹门*/ +#define CI_DEVICE_TYPE_LEU ((UINT8)0xB1) /*LEU*/ +#define CI_DEVICE_TYPE_COMM_VOBC ((UINT8)0xB2) /*与VOBC通信*/ +#define CI_DEVICE_TYPE_WASH_LINE ((UINT8)0xB3) /*洗车线*/ +#define CI_DEVICE_TYPE_TAJ ((UINT8)0xB4) /*调车同意按钮继电器*/ +#define CI_DEVICE_TYPE_CMDRPLY_VOBC ((UINT8)0xB5) /*VOBC 命令回复*/ +#define CI_DEVICE_TYPE_TSR_VOBC ((UINT8)0xB6) /*VOBC 临时限速*/ +#define CI_DEVICE_TYPE_SLEEP_VOBC ((UINT8)0xB7) /*VOBC 睡眠列车*/ +#define CI_DEVICE_TYPE_FAULT_VOBC ((UINT8)0xB8) /*VOBC 故障列车*/ +#define CI_DEVICE_TYPE_CUTOFF_POINT ((UINT8)0xB9) /*分界点*/ +#define CI_DEVICE_TYPE_OC_BOARD ((UINT8)0xBA) /*OC 板卡*/ +#define CI_DEVICE_TYPE_RES_ALIGNMENT ((UINT8)0xBB) /*资源对顶点*/ +#define CI_DEVICE_TYPE_WASH_ALLOW_PASS ((UINT8)0xBC) /*洗车同意通过*/ +#define CI_DEVICE_TYPE_TRAIN_VOBC ((UINT8)0xBD) /*VOBC 列车*/ +#define CI_DEVICE_TYPE_BACKUP_VOBC ((UINT8)0xBE) /*后备VOBC列车*/ +#define CI_DEVICE_TYPE_ZHAOCHA ((UINT8)0xC0) /*照查*/ +#define CI_DEVICE_TYPE_SECDIRLOCK ((UINT8)0xC1) /*(迪士尼联络线)区段方向锁闭继电器*/ +#define CI_DEVICE_TYPE_ROUTEREQUEST ((UINT8)0xC2) /*(迪士尼联络线)进路请求继电器*/ +#define CI_DEVICE_TYPE_ROUTERELEASE ((UINT8)0xC3) /*(迪士尼联络线)进路释放继电器*/ +#define CI_DEVICE_TYPE_ROUTEACK ((UINT8)0xC4) /*(迪士尼联络线)进路已设置保留继电器*/ +#define CI_DEVICE_TYPE_SPEEDLIMIT ((UINT8)0xC5) /*临时限速区段*/ #define CI_DEVICE_TYPE_CMD ((UINT8)0x0B) /*命令*/ @@ -164,38 +168,40 @@ /*----------Manage----------*/ /*函数 LockxxxRouteProc, LockxxxRouteLogicProcess*/ -#define RETURN_LOCK_ERR_SWITPOS ((UINT8)0x22) /*进路选排道岔位置错误*/ +#define RETURN_LOCK_ERR_SWITPOS ((UINT8)0x22) /*进路选排道岔位置错误*/ -#define RETURN_LOCK_ERR_WAIT_SWCHECK ((UINT8)0x2f) /*进路选排等待相邻联锁反馈道岔检查结果*/ +#define RETURN_LOCK_ERR_WAIT_SWCHECK ((UINT8)0x2f) /*进路选排等待相邻联锁反馈道岔检查结果*/ /*函数 PhySecDelayUnlockLogicProcess*/ -#define RETURN_DELAYUNLOCK_ERR_TIMECOUNT ((UINT8)0x23) /*进路需关闭信号未关闭*/ +#define RETURN_DELAYUNLOCK_ERR_TIMECOUNT ((UINT8)0x23) /*进路需关闭信号未关闭*/ /*函数 OpenxxxRouteLogicProcess*/ -#define RETURN_OPEN_ERR_SIGOPEN ((UINT8)0x24) /*进路需关闭信号未关闭*/ +#define RETURN_OPEN_ERR_SIGOPEN ((UINT8)0x24) /*进路需关闭信号未关闭*/ -#define RETURN_OPEN_ERR_NEEDOPEN ((UINT8)0x2d) /*进路需开放,未开放........*/ +#define RETURN_OPEN_ERR_NEEDOPEN ((UINT8)0x2d) /*进路需开放,未开放........*/ -#define RETURN_DCTY_NOT_SATISIFY ((UINT8)0x2e) /*调车同意不满足........*/ +#define RETURN_DCTY_NOT_SATISIFY ((UINT8)0x2e) /*调车同意不满足........*/ -#define RETURN_AUTOLOCK_ERR_EXCEPT ((UINT8)0x25) /*进路区段未开始解锁*/ +#define RETURN_AUTOLOCK_ERR_EXCEPT ((UINT8)0x25) /*进路区段未开始解锁*/ -#define RETURN_LEADKEEP_SUCC_SETTIME ((UINT8)0x26) /*引导信号开放设置故障延时*/ +#define RETURN_LEADKEEP_SUCC_SETTIME ((UINT8)0x26) /*引导信号开放设置故障延时*/ -#define RETURN_FIRSTXUANPAI_ERR_WAIT ((UINT8)0x27) /*进路征用等待*/ +#define RETURN_FIRSTXUANPAI_ERR_WAIT ((UINT8)0x27) /*进路征用等待*/ -#define RETURN_AUTOSIGNAL_THRSEC_CLEAR ((UINT8)0x28) /*自动信号触发轨未占用*/ +#define RETURN_AUTOSIGNAL_THRSEC_CLEAR ((UINT8)0x28) /*自动信号触发轨未占用*/ -#define RELAY_STATE_WAITE ((UINT8)0x29) /*继电器需落下为落下*/ +#define RELAY_STATE_WAITE ((UINT8)0x29) /*继电器需落下为落下*/ -#define RETURN_FIRSTXUANPAI_QUXIAOAUTOSIG_WAIT ((UINT8)0x2a) /*进路选排等待取消自动信号进路*/ -#define RETURN_GRGDOOR_CLSCHK_WAITALLOW ((UINT8)0x2b) /* 存在关联区段占用,等待ZC或IVOC回复允许关门命令 */ -#define ROUTE_DELAY_UNLOCK ((UINT8)0x2c) /* 总人解引导进路后无驶入标志且进路内方最后一个区段空闲,设置延时解锁 */ -#define RES_CHECK_STATE_WAITE ((UINT8)0x2d) /*资源检查,本端继电器落下等待*/ -#define RETURN_WAIT_SWITCH_USING ((UINT8)0x30) /*等待道岔征用*/ -#define RETURN_WAIT_SWITCH_CHECK ((UINT8)0x31) /*等待道岔检查*/ +#define RETURN_FIRSTXUANPAI_QUXIAOAUTOSIG_WAIT ((UINT8)0x2a) /*进路选排等待取消自动信号进路*/ +#define RETURN_GRGDOOR_CLSCHK_WAITALLOW ((UINT8)0x2b) /* 存在关联区段占用,等待ZC或IVOC回复允许关门命令 */ +#define ROUTE_DELAY_UNLOCK ((UINT8)0x2c) /* 总人解引导进路后无驶入标志且进路内方最后一个区段空闲,设置延时解锁 */ +#define RES_CHECK_STATE_WAITE ((UINT8)0x2d) /*资源检查,本端继电器落下等待*/ +#define RETURN_WAIT_SWITCH_USING ((UINT8)0x30) /*等待道岔征用*/ +#define RETURN_WAIT_SWITCH_CHECK ((UINT8)0x31) /*等待道岔检查*/ +#define RETURN_WAIT_DSNCONNECT_OTHERCI ((UINT8)0x32) /*(迪士尼联络线)等待其他联锁条件满足*/ +#define RETURN_WAIT_DSNCONNECT_REQRLS ((UINT8)0x33) /*(迪士尼联络线)等待进路请求和释放继电器满足*/ -#define RETURN_GRARAGEDOOR_WAIT_IVOC ((UINT8)0x55) /* 车库门关闭检查:未收到IVOC车库门关闭确认信息 */ +#define RETURN_GRARAGEDOOR_WAIT_IVOC ((UINT8)0x55) /* 车库门关闭检查:未收到IVOC车库门关闭确认信息 */ /*打印日志缓冲最大值*/ #define RECORD_BUF_MAX 10000U @@ -307,5 +313,13 @@ #define CI_LOCAL_SNOW_UNVALID ((UINT8)0x55) /*本地雨雪模式命令无效*/ #define CI_LOCAL_SNOW_VALID ((UINT8)0xAA) /*本地雨雪模式命令有效*/ +/*全线牵引加速度设置状态*/ +#define CI_ALL_LINE_ACC_UNVALID ((UINT8)0x55U) /*未设置全线牵引加速度*/ +#define CI_ALL_LINE_ACC_VALID ((UINT8)0xAAU) /*已设置全线牵引加速度*/ + +/*全线制动率设置状态*/ +#define CI_ALL_LINE_BRAKE_UNVALID ((UINT8)0x55U) /*未设置全线制动率*/ +#define CI_ALL_LINE_BRAKE_VALID ((UINT8)0xAAU) /*已设置全线制动率*/ + #endif diff --git a/TSCP/src/APP/ciapp/System/SystemConfigDefine.h b/TSCP/src/APP/ciapp/System/SystemConfigDefine.h index 127c74b..5da018c 100644 --- a/TSCP/src/APP/ciapp/System/SystemConfigDefine.h +++ b/TSCP/src/APP/ciapp/System/SystemConfigDefine.h @@ -61,8 +61,8 @@ /*版本号*/ #define VER_MAIN_SUBCI_CI_CID ((UINT8)22) /*子系统主版本号*/ #define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/ -#define VER_BRUNCH_CI_CID ((UINT8)2) /*分支版本号..........主线填0....分支填1 调试填2 */ -#define VER_RETURN_SUBCI_CI_CID ((UINT8)1) /*子系统回归版本号*/ +#define VER_BRUNCH_CI_CID ((UINT8)51) /*分支版本号..........主线填0....分支填1 调试填2 */ +#define VER_RETURN_SUBCI_CI_CID ((UINT8)4) /*子系统回归版本号*/ #ifdef SCADE_MODE /*SCADE软件版本号*/ @@ -76,15 +76,15 @@ #define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/ #define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/ #define VER_SOFT_MIANVERSION ((UINT8)22) /*主版本号*/ -#define VER_SOFT_SUBVERSION ((UINT8)8) /*子版本号*/ +#define VER_SOFT_SUBVERSION ((UINT8)17) /*子版本号*/ #endif /*可兼容的公共数据结构版本号*/ #define VER_1_PUBLIC_FS_1 ((UINT8)30) #define VER_1_PUBLIC_FS_2 ((UINT8)21) -#define VER_1_PUBLIC_FS_3 ((UINT8)0) -#define VER_1_PUBLIC_FS_4 ((UINT8)0) +#define VER_1_PUBLIC_FS_3 ((UINT8)51) +#define VER_1_PUBLIC_FS_4 ((UINT8)3) #define VER_2_PUBLIC_FS_1 ((UINT8)0) #define VER_2_PUBLIC_FS_2 ((UINT8)0) @@ -99,7 +99,7 @@ /*可兼容的私有数据结构版本号*/ #define VER_1_PRIVATE_FS_1 ((UINT8)44) -#define VER_1_PRIVATE_FS_2 ((UINT8)1) +#define VER_1_PRIVATE_FS_2 ((UINT8)55) #define VER_2_PRIVATE_FS_1 ((UINT8)0xFF) #define VER_2_PRIVATE_FS_2 ((UINT8)0xFF) @@ -108,8 +108,8 @@ #define VER_3_PRIVATE_FS_2 ((UINT8)0xFF) /*可兼容OC数据结构版本号*/ -#define VER_1_OCDATA_FS_1 ((UINT8)29) /*oc 3.0 较新数据版本*/ -#define VER_1_OCDATA_FS_2 ((UINT8)0) +#define VER_1_OCDATA_FS_1 ((UINT8)31) /*oc 3.0 较新数据版本*/ +#define VER_1_OCDATA_FS_2 ((UINT8)55) #define VER_2_OCDATA_FS_1 ((UINT8)24) /*oc 2.1.6*/ #define VER_2_OCDATA_FS_2 ((UINT8)1) diff --git a/TSCP/src/APP/ciapp/System/SystemParameterManage.c b/TSCP/src/APP/ciapp/System/SystemParameterManage.c index 7e96388..86bb530 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.c +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.c @@ -110,9 +110,21 @@ UINT16 wArbNearSecProtectDistance = 0U; /*ARB UINT32 dwArbNearSecNoUtCount = 0U; /*ARB防护时间周期*/ UINT32 dwNonReturnBtnErrEnsureTime = 0U;/*无人折返按钮故障判断周期数*/ UINT32 dwOcCollTolerateCount = 0U; /*OC采集容忍周期数*/ +UINT32 dwSwitchNormalPosTime = 0U; /*道岔非运营常态位置容忍时间*/ +UINT32 dwOhlUnknowTolerateTime = 0U; /*接触网未知状态容忍时间*/ +UINT32 dwOhlNoelecTolerateTime = 0U; /*接触网断电状态容忍时间*/ UINT8 gCTFlyingRedunCount = 0u; -UINT16 StationTrackDistance = 0U; /*公共数据-站台追踪时,列车间隔距离(cm)*/ +UINT32 dwPsdMutuaLockUsableTime = 0U; /*站台门旁路有效时间*/ +UINT32 dwPsdMutuaLockCollTime = 0U; /*自复式站台门旁路按钮采集生效时间*/ +UINT32 dwPsdMutuaLockBtnErrTime = 0U; /*自复式站台门旁路按钮故障判断时间*/ +UINT32 dwSsksSteadyLightDelayCount = 0U; /*SSKS稳灯延时驱动周期数*/ +UINT32 dwEcsTrainStopTimeCount = 0U; /*ECS列车停车超时判断周期数*/ +UINT32 dwEcsTrainMoveTimeCount = 0U; /*ECS列车移动超时判断周期数*/ UINT32 LineMinTrainLength = 0U; /*公共数据-线路最小车长*/ +UINT32 dwConnectRouteOvertimeCyc = 0u; /*CBTC联络线,进路办理超时时间(周期数)*/ +UINT32 dwConnectOverrideValidCyc = 0u; /*联络线旁路开关有效采集时间(周期数)*/ +UINT32 dwConnectOverrideErrorCyc = 0u; /*联络线旁路开关故障采集时间(周期数)*/ + CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci oc关系数组*/ static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOC数据版本号 */ @@ -323,14 +335,49 @@ void SystemParaTimeToCycleCount(void) paraVal = GetSystemParaValue(ARB_CHECK_ALXE_TIME); dwArbNearSecNoUtCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*ARB区段检查相邻区段上次UT占用经过时间 (配置单位ms)*/ - StationTrackDistance = SystemParameterStruNew.StationTrackDistance; /*公共数据-站台追踪时,列车间隔距离(cm)*/ LineMinTrainLength = SystemParameterStruNew.dwLineMinTrainLength; /*公共数据-线路最小车长*/ paraVal = GetSystemParaValue(NONRETURN_BTN_ERR_ENSURE_TIME); dwNonReturnBtnErrEnsureTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*无人折返按钮故障判断时间(秒/S)*/ paraVal = GetSystemParaValue(OC_COLL_TOLERATE_TIME); - dwOcCollTolerateCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*C采集容忍周期数(ESB/PSD/SPKS/扣车)(ms)*/ + dwOcCollTolerateCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*OC采集容忍周期数(ESB/PSD/SPKS/扣车)(ms)*/ + + paraVal = GetSystemParaValue(SWITCH_NORMAL_POS_TIME); + dwSwitchNormalPosTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*道岔非运营常态位置容忍时间(秒:S)*/ + + paraVal = GetSystemParaValue(OHL_UNKNOW_TOLERATE_TIME); + dwOhlUnknowTolerateTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*接触网未知状态容忍时间(s)*/ + + paraVal = GetSystemParaValue(OHL_NOELEC_TOLERATE_TIME); + dwOhlNoelecTolerateTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*接触网断电状态容忍时间(s)*/ + + paraVal = GetSystemParaValue(PSD_MUTUALLOCK_USABLE_TIME); + dwPsdMutuaLockUsableTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*自复式站台门旁路按钮采集时间(s)*/ + + paraVal = GetSystemParaValue(PSD_MUTUALLOCK_COLL_TIME); + dwPsdMutuaLockCollTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*自复式站台门旁路按钮故障判断时间(s)*/ + + paraVal = GetSystemParaValue(PSD_MUTUALLOCK_ERR_ENSURE_TIME); + dwPsdMutuaLockBtnErrTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*自复式站台门旁路按钮故障判断时间(s)*/ + + paraVal = GetSystemParaValue(SSKS_STEADY_LIGHT_DELAY_TIME); + dwSsksSteadyLightDelayCount = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*SSKS稳灯延时驱动周期数(s)*/ + + paraVal = GetSystemParaValue(ECS_TRAIN_STOP_TIME); + dwEcsTrainStopTimeCount = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*ECS列车停车超时判断周期数(s)*/ + + paraVal = GetSystemParaValue(ECS_TRAIN_MOVE_TIME); + dwEcsTrainMoveTimeCount = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*ECS列车移动超时判断周期数(s)*/ + + paraVal = GetSystemParaValue(CONNECT_ROUTE_OVERTIME_TIME); + dwConnectRouteOvertimeCyc = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*CBTC联络线,进路办理超时时间(周期数)*/ + + paraVal = GetSystemParaValue(CONNECT_OVERRIDE_VALID_TIME); + dwConnectOverrideValidCyc = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*联络线旁路开关有效采集时间(周期数)*/ + + paraVal = GetSystemParaValue(CONNECT_OVERRIDE_ERROR_TIME); + dwConnectOverrideErrorCyc = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*联络线旁路开关故障采集时间(周期数)*/ } /* @@ -440,6 +487,16 @@ UINT32 GetSystemParaRouteXuanPaiCyc(void) return RouteXuanPaiCount; } +/* +* 功能描述: 获取系统参数进路选排超限周期数(迪士尼联络线) +* 参数说明: void +* 返回值 : 进路选排超限周期数 +*/ +UINT32 GetDsnConnectRouteOvertimeCyc(void) +{ + return dwConnectRouteOvertimeCyc; +} + /* * 功能描述: 获取系统参数进路锁闭超限周期数 * 参数说明: void @@ -1257,17 +1314,6 @@ UINT16 GetSigCrossMaxLen(void) return wSigCrossMaxLen; } -/* -* 功能描述: 获取退行防护最大距离 -* 参数说明: void -* 返回值 : UINT32 -* 创建 :qw.liu 2022-03-03 -*/ -UINT16 GetBackProtectMaxLen(void) -{ - - return StationTrackDistance; -} /* * 功能描述: 获取线路最小车长 @@ -2369,6 +2415,84 @@ UINT16 GetTiocSystemParameterData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDa ;/* 无处理 */ } + /* 站台门旁路有效时间周期数 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwPsdMutuaLockUsableTime; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + + /* 自复式站台门旁路按钮采集生效时间 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwPsdMutuaLockCollTime; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + + /* 自复式站台门旁路按钮故障判断时间 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwPsdMutuaLockBtnErrTime; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + + /* SSKS稳灯延时驱动周期数 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwSsksSteadyLightDelayCount; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + + /* ECS列车停车超时判断周期数 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwEcsTrainStopTimeCount; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + + /* ECS列车移动超时判断周期数 */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwEcsTrainMoveTimeCount; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* 无处理 */ + } + /* ci-oc关系数组 */ wTmpLen = 1u + wTmpConfigDataSum; if (wBufMaxLen >= wTmpLen) @@ -2944,4 +3068,134 @@ UINT8 GetLocalPublicDataType(void) UINT32 GetOcCollTolerateCount(void) { return dwOcCollTolerateCount; +} + +/* +* 功能描述:获取道岔非运营常态位置容忍周期数 +* 参数说明:void +* 返 回 值:道岔非运营常态位置容忍周期数 +*/ +UINT32 GetSwitchNormalPosTime(void) +{ + return dwSwitchNormalPosTime; +} + +/* +* 功能描述:获取接触网未知状态容忍周期数 +* 参数说明:void +* 返 回 值:接触网未知状态容忍周期数 +*/ +UINT32 GetOhlUnknowTolerateTime(void) +{ + return dwOhlUnknowTolerateTime; +} + +/* +* 功能描述:获取接触网断电状态容忍周期数 +* 参数说明:void +* 返 回 值:接触网断电状态容忍周期数 +*/ +UINT32 GetOhlNoelecTolerateTime(void) +{ + return dwOhlNoelecTolerateTime; +} + +/* +* 功能描述:获取SSKS稳灯延时驱动周期数 +* 参数说明:void +* 返 回 值:SSKS稳灯延时驱动周期数 +* Created By LQ 2025.12.16 +*/ +UINT32 GetSsksSteadyLightDelayCount(void) +{ + return dwSsksSteadyLightDelayCount; +} + +/* +* 功能描述:获取站台门旁路有效时间周期数 +* 参数说明:void +* 返 回 值:站台门旁路有效时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockUsableTimeCount(void) +{ + return dwPsdMutuaLockUsableTime; +} + +/* +* 功能描述:自复式站台门旁路按钮采集生效时间 +* 参数说明:void +* 返 回 值:站台门旁路持续采集有效时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockCollTimeCount(void) +{ + return dwPsdMutuaLockCollTime; +} + +/* +* 功能描述:自复式站台门旁路按钮故障判断时间 +* 参数说明:void +* 返 回 值:站台门旁路按钮粘连判断时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockBtnErrTimeCount(void) +{ + return dwPsdMutuaLockBtnErrTime; +} + +/* +* 功能描述:获取ECS列车停车超时判断周期数 +* 参数说明:void +* 返 回 值:ECS列车停车超时判断周期数 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsTrainStopTimeCount(void) +{ + return dwEcsTrainStopTimeCount; +} + +/* +* 功能描述:获取ECS列车移动超时判断周期数 +* 参数说明:void +* 返 回 值:ECS列车移动超时判断周期数 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsTrainMoveTimeCount(void) +{ + return dwEcsTrainMoveTimeCount; +} + +/* +* 功能描述:获取联络线旁路继电器判断采集有效周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断采集有效周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnCollCycNum(void) +{ + return dwConnectOverrideValidCyc; +} + +/* +* 功能描述:获取联络线旁路继电器判断采集故障周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断采集故障周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnFaultCycNum(void) +{ + return dwConnectOverrideErrorCyc; +} + +/* +* 功能描述:获取联络线旁路继电器判断误触发周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断误触发周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnErrTrigCycNum(void) +{ + /*暂定4周期(1000ms向上取整)*/ + return 4u; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/System/SystemParameterManage.h b/TSCP/src/APP/ciapp/System/SystemParameterManage.h index 92f6d4b..d9ba9bd 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.h +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.h @@ -75,7 +75,7 @@ extern "C" { #define FUNC_XIANSU_SWITCH ((UINT8)45) /*后备模式信号开放是否检查区段临时限速(0x55:不检查;0xaa:检查)*/ #define FUNC_RRM_SWITCH ((UINT8)46) /*远程RM功能开关*/ #define FUNC_DEPART_RRM_SWITCH ((UINT8)47) /*出站过程中支持远程RM功能开关*/ -#define FUNC_DA_SWITCH ((UINT8)48) /*脱轨防护功能开关(0x55:不支持;0xaa:支持)*/ +#define FUNC_DA_SWITCH ((UINT8)48) /*列车状态异常建立防护分区功能开关(0x55:不支持;0xaa:支持)*/ #define FUNC_OC_100_OR_200 ((UINT8)49) /*执行单元使用类型(0x55:OC-100;0xaa:OC-200)*/ #define FUNC_OC_200_INOUTNET ((UINT8)50) /*OC通信使用内外网配置(0x55:外网;0xaa:内网)*/ #define FUNC_ZIFUSHI_BUTTON ((UINT8)51) /*按钮是否为自复式(0x55:非自复式;0xaa:自复式)*/ @@ -87,7 +87,7 @@ extern "C" { #define FUNC_SETROUTE_CONNECT_CHECK ((UINT8)57) /*进路办理不检查联络线条件开关(0XAA:打开 0X55:关闭)*/ #define FUNC_ROUTELOCK_OPEN_SIGNAL ((UINT8)58) /*进路完整锁闭收到办理命令是否重开信号开关(0XAA:打开(执行) 0X55:关闭(不执行) */ #define FUNC_EVACUATE_RELATE_DIR_SWITCH ((UINT8)59) /*区间疏散防护区域区分上下行开关(0XAA:打开 0X55:关闭)*/ -#define FUNC_TG_RELATE_DIR_SWITCH ((UINT8)60) /*脱轨防护区域区分上下行开关(0XAA:打开 0X55:关闭)*/ +#define FUNC_TG_RELATE_DIR_SWITCH ((UINT8)60) /*列车异常状态防护区域区分上下行开关(0XAA:打开 0X55:关闭)*/ #define FUNC_INTRUSEC_VAIN_NEWVERSION ((UINT8)61) /*采用新版侵限数据(0XAA:采用 0X55:不采用)*/ #define FUNC_LJK_EXIST_DB ((UINT8)62) /*RC监督休眠唤醒轨列车相邻区段占压功能开关(0xAA,开,针对无DB的线路,配开; 0x55,关,有DB的线路,建议配关)*/ #define FUNC_ZQX_CHECK_HUMID_RAIL ((UINT8)63) /*总取消是否检查进路始端信号机处于湿轨范围内(0xAA:开,总取消检查湿轨模式状态; 0x55:关,总取消不检查湿轨模式状态)*/ @@ -96,8 +96,6 @@ extern "C" { #define FUNC_LEADROUTE_FLOODGATE_CHECK ((UINT8)67) /*引导进路是否检查防淹门状态(0x55:不检查;0xAA:检查)*/ #define FUNC_LEADROUTE_ESB_CHECK ((UINT8)68) /*引导进路是否检查ESB状态(0x55:不检查;0xAA:检查)*/ #define FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE ((UINT8)69) /*杭德需求:正线灭灯均亮蓝灯开关:0xAA打开 0x55关闭*/ -#define FUNC_NVRAM_TRAIN_FlYING_OVER ((UINT8)70) /*使用NVRAM位置且位置监督无效的列车飞车不宕机开关:0xAA-飞车不宕机 0x55-飞车宕机*/ - #define CiSum_ID ((UINT16)1)/*实际联锁集中站数量 编号*/ #define AppCycleTime_ID ((UINT16)2)/*联锁应用周期(单位:ms) (配置字段)*/ @@ -172,6 +170,19 @@ extern "C" { #define ARB_CHECK_ALXE_TIME (71U) /*区段ARB向相邻区段检查最近无坏车时间ms*/ #define NONRETURN_BTN_ERR_ENSURE_TIME (72U) /*无人折返按钮故障判断时间(秒/S)*/ #define OC_COLL_TOLERATE_TIME (73U) /*OC采集容忍时间(ESB/PSD/SPKS/扣车)(ms)*/ +#define SWITCH_NORMAL_POS_TIME (74U) /*道岔非运营常态位置容忍时间(秒:S)*/ +#define OHL_UNKNOW_TOLERATE_TIME (75U) /*接触网未知状态容忍时间(s)*/ +#define OHL_NOELEC_TOLERATE_TIME (76U) /*接触网断电状态容忍时间(s)*/ +#define PSD_MUTUALLOCK_USABLE_TIME (77U) /*站台门旁路有效时间(联锁撤销按钮有效时间)(s)*/ +#define PSD_MUTUALLOCK_COLL_TIME (78U) /*自复式站台门旁路按钮采集时间(s)*/ +#define PSD_MUTUALLOCK_ERR_ENSURE_TIME (79U) /*自复式站台门旁路按钮故障判断时间(s)*/ +#define SSKS_STEADY_LIGHT_DELAY_TIME ((UINT16)80U) /*SSKS稳灯延时驱动时间(s)*/ +#define ECS_TRAIN_STOP_TIME ((UINT16)81U) /*ECS隧道列车停车超时时间(s)*/ +#define ECS_TRAIN_MOVE_TIME ((UINT16)82U) /*ECS隧道列车移动超时时间(s)*/ +#define TRAIN_FAILURE_DA_TYPE ((UINT16)83U) /*列车状态异常防护分区计算方式*/ +#define CONNECT_ROUTE_OVERTIME_TIME (84U) /*CBTC联络线区域,进路办理超时时间(s)*/ +#define CONNECT_OVERRIDE_VALID_TIME (85U) /*联络线旁路开关有效采集时间(ms)*/ +#define CONNECT_OVERRIDE_ERROR_TIME (86U) /*联络线旁路开关故障采集时间(s)*/ #define FUNC_SWITCH_ON ((UINT8)0xAA) /*功能配置开关打开*/ #define FUNC_SWITCH_OFF ((UINT8)0x55) /*功能配置开关关闭*/ @@ -477,6 +488,15 @@ extern UINT32 dwArbNearSecNoUtCount; /*ARB extern UINT32 dwNonReturnBtnErrEnsureTime; /*无人折返按钮故障判断周期数*/ extern UINT32 dwOcCollTolerateCount; /*OC采集容忍周期数*/ extern UINT8 gCTFlyingRedunCount; +extern UINT32 dwSsksSteadyLightDelayCount; /*SSKS稳灯延时驱动周期数*/ +extern UINT32 dwEcsTrainStopTimeCount; /*ECS列车停车超时判断周期数*/ +extern UINT32 dwEcsTrainMoveTimeCount; /*ECS列车移动超时判断周期数*/ +extern UINT32 dwPsdMutuaLockUsableTime; /*站台门旁路有效时间*/ +extern UINT32 dwPsdMutuaLockCollTime; /*自复式站台门旁路按钮采集生效时间*/ +extern UINT32 dwPsdMutuaLockBtnErrTime; /*自复式站台门旁路按钮故障判断时间*/ +extern UINT32 dwConnectRouteOvertimeCyc; /*CBTC联络线,进路办理超时时间(周期数)*/ +extern UINT32 dwConnectOverrideValidCyc; /*联络线旁路开关有效采集时间(周期数)*/ +extern UINT32 dwConnectOverrideErrorCyc; /*联络线旁路开关故障采集时间(周期数)*/ extern CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci oc关系数组*/ /* @@ -529,6 +549,13 @@ UINT32 GetSystemParaStartUnlockCyc(void); */ UINT32 GetSystemParaRouteXuanPaiCyc(void); +/* +* 功能描述: 获取系统参数进路选排超限周期数 +* 参数说明: void +* 返回值 : 进路选排超限周期数 +*/ +UINT32 GetDsnConnectRouteOvertimeCyc(void); + /* * 功能描述: 获取系统参数进路锁闭超限周期数 * 参数说明: void @@ -1006,13 +1033,6 @@ UINT16 GetSigLightUpExAxleSecLen(void); */ UINT16 GetSigCrossMaxLen(void); -/* -* 功能描述: 获取退行防护最大距离 -* 参数说明: void -* 返回值 : UINT32 -* 创建 :qw.liu 2022-03-03 -*/ -UINT16 GetBackProtectMaxLen(void); /* * 功能描述: 获取线路最小车长 @@ -1417,6 +1437,99 @@ UINT8 GetLocalPublicDataType(void); */ UINT32 GetOcCollTolerateCount(void); +/* +* 功能描述:获取道岔非运营常态位置容忍周期数 +* 参数说明:void +* 返 回 值:道岔非运营常态位置容忍周期数 +*/ +UINT32 GetSwitchNormalPosTime(void); + +/* +* 功能描述:获取接触网未知状态容忍周期数 +* 参数说明:void +* 返 回 值:接触网未知状态容忍周期数 +*/ +UINT32 GetOhlUnknowTolerateTime(void); + +/* +* 功能描述:获取接触网断电状态容忍周期数 +* 参数说明:void +* 返 回 值:接触网断电状态容忍周期数 +*/ +UINT32 GetOhlNoelecTolerateTime(void); + +/* +* 功能描述:获取SSKS稳灯延时驱动周期数 +* 参数说明:void +* 返 回 值:SSKS稳灯延时驱动周期数 +* Created By LQ 2025.12.16 +*/ +UINT32 GetSsksSteadyLightDelayCount(void); + +/* +* 功能描述:获取站台门旁路有效时间周期数 +* 参数说明:void +* 返 回 值:站台门旁路有效时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockUsableTimeCount(void); + +/* +* 功能描述:自复式站台门旁路按钮采集生效时间 +* 参数说明:void +* 返 回 值:站台门旁路持续采集有效时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockCollTimeCount(void); + +/* +* 功能描述:自复式站台门旁路按钮故障判断时间 +* 参数说明:void +* 返 回 值:站台门旁路按钮粘连判断时间 +* Created By fan 2025.12.16 +*/ +UINT32 GetMutuaLockBtnErrTimeCount(void); + +/* +* 功能描述:获取ECS列车停车超时判断周期数 +* 参数说明:void +* 返 回 值:ECS列车停车超时判断周期数 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsTrainStopTimeCount(void); + +/* +* 功能描述:获取ECS列车移动超时判断周期数 +* 参数说明:void +* 返 回 值:ECS列车移动超时判断周期数 +* Created By LQ 2026.01.26 +*/ +UINT32 GetEcsTrainMoveTimeCount(void); + +/* +* 功能描述:获取联络线旁路继电器判断采集有效周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断采集有效周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnCollCycNum(void); + +/* +* 功能描述:获取联络线旁路继电器判断采集故障周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断采集故障周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnFaultCycNum(void); + +/* +* 功能描述:获取联络线旁路继电器判断误触发周期数 +* 参数说明:void +* 返 回 值:联络线旁路继电器判断误触发周期数 +* Created By wyd 2026.3.11 +*/ +UINT32 GetOverrideBtnErrTrigCycNum(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c index e8e28c9..08725aa 100644 --- a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c +++ b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c @@ -215,6 +215,16 @@ static UINT8 EaFindLinkAdjacentLinkID(struct_PathPoint pPoint, UINT8 chDirection */ static UINT16 GetAxisSpecialEaId(const UINT16 wAcId); +/** +* @brief 列车状态异常类型检查 +* @param const UINT16 wTrainId 列车ID +* @param const UINT8 chTrainFailureType 列车故障类型 +* @return CI_ERROR 当前故障仍存在 +* CI_SUCCESS 当前故障不存在 +* by cgh 20260206 +*/ +static UINT8 TrainFailureTypeCheck(const UINT16 wTrainId, const UINT8 chTrainFailureType); + /** * @brief 初始化函数 * @param 无 @@ -237,10 +247,12 @@ UINT8 EaConfigInit(void) UINT8 chEndLinkIdIndex = 0U;/*终点LINK ID索引*/ UINT8 chEaConfigLinkIndex = 0U;/*防护分区LINK索引*/ UINT16 wAdjacentLinkId = 0U;/*相邻LINK ID*/ + UINT16 wTrainFailureDaType = 0U; /* 获取区间疏散防护区域建立方式 */ wEaMode = GetSystemParaValue(EA_MODE_ID); wPlatformEaMode = GetSystemParaValue(EA_STATION_MODE_ID); + wTrainFailureDaType = GetSystemParaValue(TRAIN_FAILURE_DA_TYPE); if ((EA_MODE_PLATION != wEaMode) && (EA_MODE_SEC != wEaMode) && (EA_MODE_DIS != wEaMode)) { @@ -261,9 +273,9 @@ UINT8 EaConfigInit(void) if (CI_SUCCESS == chRtn) { - for (wIndex = 0U; wIndex < g_eaConfigNum; wIndex++) + if ((EA_MODE_PLATION == wEaMode) || (EA_MODE_SEC == wEaMode) || (DA_MODE_DATA_CONFIG == wTrainFailureDaType)) { - if ((EA_MODE_PLATION == wEaMode) || (EA_MODE_SEC == wEaMode)) + for (wIndex = 0U; wIndex < g_eaConfigNum; wIndex++) { /* 两站一区间 计算区间LINK*/ for (chPointIndex = 0U; chPointIndex < g_szEaConfig[wIndex].chStartLinkNum; chPointIndex++) @@ -347,7 +359,7 @@ UINT8 EaConfigInit(void) { debug_infor_printf((const)"wIndex:%d EaConfigInit chEaConfigLinkSum is zero\n", wIndex); chRtn = CI_ERROR; - } + } else { /*计算最终的区间相邻站台ID*/ @@ -411,7 +423,7 @@ UINT8 EaConfigInit(void) if (CI_SUCCESS == chRtn) { chStationFlag = IsLinkPlatform(wAdjacentLinkId); - if((CI_SUCCESS == chStationFlag) && (EA_BD_LINK_SUM_MAX > g_szEaConfig[wIndex].chEndStationLinkSum)) + if ((CI_SUCCESS == chStationFlag) && (EA_BD_LINK_SUM_MAX > g_szEaConfig[wIndex].chEndStationLinkSum)) { g_szEaConfig[wIndex].wSzEndStationLinkId[g_szEaConfig[wIndex].chEndStationLinkSum] = wAdjacentLinkId; g_szEaConfig[wIndex].chEndStationLinkSum++; @@ -434,13 +446,13 @@ UINT8 EaConfigInit(void) } } } - + if (CI_SUCCESS == chRtn) { debug_infor_printf((const)"wIndex:%d chEaConfigLinkSum = %d\n", wIndex, g_szEaConfig[wIndex].chEaConfigLinkSum); for (chPointIndex = 0U; chPointIndex < g_szEaConfig[wIndex].chEaConfigLinkSum; chPointIndex++) { - debug_infor_printf((const)"%d/",g_szEaConfig[wIndex].wSzEaConfigLinkId[chPointIndex]); + debug_infor_printf((const)"%d/", g_szEaConfig[wIndex].wSzEaConfigLinkId[chPointIndex]); } debug_infor_printf((const)"\nwIndex:%x chStartStationLinkSum = %d\n", wIndex, g_szEaConfig[wIndex].chStartStationLinkSum); for (chPointIndex = 0U; chPointIndex < g_szEaConfig[wIndex].chStartStationLinkSum; chPointIndex++) @@ -451,7 +463,7 @@ UINT8 EaConfigInit(void) debug_infor_printf((const)"\nwIndex:%x chEndStationLinkSum = %d\n", wIndex, g_szEaConfig[wIndex].chEndStationLinkSum); for (chPointIndex = 0U; chPointIndex < g_szEaConfig[wIndex].chEndStationLinkSum; chPointIndex++) { - debug_infor_printf((const)"%d/",g_szEaConfig[wIndex].wSzEndStationLinkId[chPointIndex]); + debug_infor_printf((const)"%d/", g_szEaConfig[wIndex].wSzEndStationLinkId[chPointIndex]); } debug_infor_printf((const)"\n"); } @@ -459,18 +471,18 @@ UINT8 EaConfigInit(void) { break; } - - } - else - { - ; /*不是两站一区间不计算*/ } } + else + { + ; /*其他方式不计算*/ + } } else { ; /* 初始化失败 */ } + return chRtn; } @@ -483,7 +495,6 @@ void EvacuationAreaProcess(void) UINT8 index = 0u; UINT16 wTrainId = 0u; UINT8 chBuildedFlag = 0u; - UINT8 chEaCmd = 0u; UINT8 chTrainAgreeFlag = CI_ERROR; UINT8 chEaNum = 0u; UINT8 chLocalId = GetSystemParaLocalCiId(); @@ -600,82 +611,94 @@ void EvacuationAreaProcess(void) */ static void EaCmdProc(void) { - UINT8 i = 0u; - UINT8 j = 0u; - UINT8 chTrainEaCmd = 0u; - UINT16 wTrainId = 0u; - UINT16 wEvaId = 0u; + UINT8 i = 0U; + UINT8 j = 0U; + UINT8 chTrainEaCmd = 0U; + UINT16 wTrainId = 0U; UINT8 chFunRtn = CI_ERROR; - UINT32 chTempRtn = CI_ERROR; - UINT8 chTransState = 0u; - UINT8 chZeroSpd = 0u; - UINT8 chTiocType = 0u; - UINT8 chLocalId = 0u; + UINT8 chTransState = 0U; + UINT8 chZeroSpd = 0U; + UINT8 chTiocType = 0U; + UINT8 chLocalId = 0U; UINT8 chEaSwitch = GetCiFunctionSwitchConfig(FUNC_EA_SWITCH); UINT8 chDaSwitch = GetCiFunctionSwitchConfig(FUNC_DA_SWITCH); - UINT8 chDerailment = 0u; - UINT16 wLinkId = 0u; - UINT16 wLinkTioc = 0u; + UINT16 wLinkTioc = 0U; + ELM_TrainSafeLocStruct tmpSafeLoc = { 0U }; /* 安全位置临时存储 */ + UINT8 chTrainLevel = 0U; /*列车级别*/ + UINT8 chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); /* 迪士尼功能开关 */ + UINT8 chDerailment = 0U; /*列车脱轨状态*/ + UINT8 chIntegrityState = 0U; /*完整性状态*/ + UINT8 chEscapeDoorState = 0U; /*逃生门状态*/ + chTiocType = GetLocalCiType(); /* 获取TIOC类型 */ chLocalId = GetSystemParaLocalCiId(); if ((CI_TYPE_ZX == chTiocType) || (CI_TYPE_SCX == chTiocType)) { - for (i = 0u; i < TRAIN_SUM_MAX; i++)/*遍历所有车*/ - {/* 遍历所有列车处理区间疏散命令 */ - wTrainId = GetTrainId(i); - chTransState = GetTrainTransitmitStat(wTrainId); - chTrainEaCmd = GetTrainEaCmd(wTrainId); - chZeroSpd = GetTrainZeroState(wTrainId); + if (FUNC_SWITCH_ON == chEaSwitch) + { + for (i = 0u; i < TRAIN_SUM_MAX; i++)/*遍历所有车*/ + {/* 遍历所有列车处理区间疏散命令 */ + wTrainId = GetTrainId(i); + chTransState = GetTrainTransitmitStat(wTrainId); + chTrainEaCmd = GetTrainEaCmd(wTrainId); + chZeroSpd = GetTrainZeroState(wTrainId); - if (((TRAIN_COMM_STATE_GOOD == chTransState) && (EA_PROTECT_BUILD == chTrainEaCmd) && (TRAIN_SPEED_ZERO_YES == chZeroSpd) && (FUNC_SWITCH_ON == chEaSwitch))) - { - for (j = 0u; j < g_eaNum; j++)/*遍历所有疏散区*/ + if ((TRAIN_COMM_STATE_GOOD == chTransState) && (EA_PROTECT_BUILD == chTrainEaCmd) && (TRAIN_SPEED_ZERO_YES == chZeroSpd)) { - /*判断通信车请求是否已经处理*/ - if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_EA == g_szEaData[j].chPaType)) + for (j = 0u; j < g_eaNum; j++)/*遍历所有疏散区*/ { - SetTrainEaCmd(wTrainId, EA_PROTECT_DEFAULT); - break; - } - } - - if (g_eaNum == j) - { - if (EA_MAX_NUM > g_eaNum) - { - SetTrainEaCmd(wTrainId, EA_PROTECT_DEFAULT); - g_szEaData[g_eaNum].wTrainId = wTrainId; - g_szEaData[g_eaNum].chBuildedFlag = EA_IS_NOT_BUILDED; - g_szEaData[g_eaNum].chSrcTiocId = chLocalId; - g_szEaData[g_eaNum].chDstTiocId = 0u; - g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; - g_szEaData[g_eaNum].chPaType = PA_TYPE_EA; - g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); - /*添加计算的LinkI序列*/ - chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_EA); - if (CI_SUCCESS == chFunRtn) + /*判断通信车请求是否已经处理*/ + if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_EA == g_szEaData[j].chPaType)) { - g_eaNum++; + SetTrainEaCmd(wTrainId, EA_PROTECT_DEFAULT); + break; + } + } + + if (g_eaNum == j) + { + if (EA_MAX_NUM > g_eaNum) + { + SetTrainEaCmd(wTrainId, EA_PROTECT_DEFAULT); + g_szEaData[g_eaNum].wTrainId = wTrainId; + g_szEaData[g_eaNum].chBuildedFlag = EA_IS_NOT_BUILDED; + g_szEaData[g_eaNum].chSrcTiocId = chLocalId; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; + g_szEaData[g_eaNum].chPaType = PA_TYPE_EA; + g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); + g_szEaData[g_eaNum].dwEaBuildMyCycNum = Get2oo2CurCycleNum(); + /*添加计算的LinkI序列*/ + chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_EA); + if (CI_SUCCESS == chFunRtn) + { + g_eaNum++; + } + else + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail"); + } } else { - g_szEaData[g_eaNum].wTrainId = 0u; - g_szEaData[g_eaNum].chBuildedFlag = 0u; - g_szEaData[g_eaNum].chSrcTiocId = 0u; - g_szEaData[g_eaNum].chDstTiocId = 0u; - g_szEaData[g_eaNum].chDstAllowed = 0u; - g_szEaData[g_eaNum].chPaType = 0u; - g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; SetPlatOverFlag(); - debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail"); + debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit"); } } else { - SetPlatOverFlag(); - debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit"); + ; } } else @@ -683,84 +706,262 @@ static void EaCmdProc(void) ; } } - else - { - ; - } + } + else + { + ; /*本项目不支持区间疏散*/ } - for (i = 0u; i < TRAIN_SUM_MAX; i++)/*遍历所有车*/ - {/* 遍历所有列车处理列车脱轨 */ - wTrainId = GetTrainId(i); - chDerailment = GetTrainDerailment(wTrainId); - wLinkId = GetTrainMaxHeadLink(wTrainId); - wLinkTioc = GetLinkManageTiocById(wLinkId); - - if ((FUNC_SWITCH_ON == chDaSwitch) && (TRAIN_DERAIL_NO != chDerailment) - && (wLinkTioc == chLocalId)) + if (FUNC_SWITCH_ON == chDaSwitch) + { + for (i = 0u; i < TRAIN_SUM_MAX; i++)/*遍历所有车*/ { - for (j = 0u; j < g_eaNum; j++)/*遍历所有疏散区*/ - { - /*判断通信车请求是否已经处理*/ - if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_DA == g_szEaData[j].chPaType)) - { - break; - } - } + /* 遍历所有列车处理列车状态异常防护区域 */ + wTrainId = GetTrainId(i); + (void)elm_PrepareTrainSafeLoc(wTrainId, &tmpSafeLoc); + wLinkTioc = GetLinkManageTiocById(tmpSafeLoc.endPos.Lnk); + chTrainLevel = GetTrainLevel(wTrainId); + chDerailment = GetTrainDerailment(wTrainId); + chIntegrityState = GetTrainIntegrityState(wTrainId); + chEscapeDoorState = GetTrainEscapeDoorState(wTrainId); - if (g_eaNum == j) + if ((wLinkTioc == chLocalId) && + ((FUNC_SWITCH_OFF == chDsnLinSwitch) + || ((FUNC_SWITCH_ON == chDsnLinSwitch)&&(TRAIN_LEVEL_VBTC == chTrainLevel)))) { - if (EA_MAX_NUM > g_eaNum) + /*列车安全车头在本控区,迪士尼项目需要额外检查当前列车级别为CBTC*/ + + if (TRAIN_DERAIL_NO != chDerailment) { - g_szEaData[g_eaNum].wTrainId = wTrainId; - g_szEaData[g_eaNum].chBuildedFlag = EA_IS_BUILDED; - g_szEaData[g_eaNum].chSrcTiocId = chLocalId; - g_szEaData[g_eaNum].chDstTiocId = 0u; - g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; - g_szEaData[g_eaNum].chPaType = PA_TYPE_DA; - g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); - /*添加计算的LinkI序列*/ - chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_DA); - if (CI_SUCCESS == chFunRtn) + /*根据列车不同状态异常分别建立防护区域,需要分开处理,避免同时多点故障*/ + + for (j = 0u; j < g_eaNum; j++) { - g_eaNum++; + /*判断通信车请求是否已经处理*/ + if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_DA_TG == g_szEaData[j].chPaType)) + { + break; + } + } + + if (g_eaNum == j) + { + if (EA_MAX_NUM > g_eaNum) + { + g_szEaData[g_eaNum].wTrainId = wTrainId; + g_szEaData[g_eaNum].chBuildedFlag = EA_IS_BUILDED; + g_szEaData[g_eaNum].chSrcTiocId = chLocalId; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; + g_szEaData[g_eaNum].chPaType = PA_TYPE_DA_TG; + g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); + g_szEaData[g_eaNum].dwEaBuildMyCycNum = Get2oo2CurCycleNum(); + /*添加计算的LinkI序列*/ + chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_DA_TG); + if (CI_SUCCESS == chFunRtn) + { + g_eaNum++; + } + else if (CI_TRUE == chFunRtn) + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + } + else + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail"); + } + } + else + { + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit"); + } } else { - g_szEaData[g_eaNum].wTrainId = 0u; - g_szEaData[g_eaNum].chBuildedFlag = 0u; - g_szEaData[g_eaNum].chSrcTiocId = 0u; - g_szEaData[g_eaNum].chDstTiocId = 0u; - g_szEaData[g_eaNum].chDstAllowed = 0u; - g_szEaData[g_eaNum].chPaType = 0u; - g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; - SetPlatOverFlag(); - debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail"); + debug_infor_printf((const)"chDerailment g_szEaData exist:%d\n", j); } } else { - SetPlatOverFlag(); - debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit"); + ; /*不处理 */ + } + + if (TRAIN_INTEGRITY_NOT_LOST != chIntegrityState) + { + /*根据列车不同状态异常分别建立防护区域,需要分开处理,避免同时多点故障*/ + + for (j = 0u; j < g_eaNum; j++) + { + /*判断通信车请求是否已经处理*/ + if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_DA_WZX == g_szEaData[j].chPaType)) + { + break; + } + } + + if (g_eaNum == j) + { + if (EA_MAX_NUM > g_eaNum) + { + g_szEaData[g_eaNum].wTrainId = wTrainId; + g_szEaData[g_eaNum].chBuildedFlag = EA_IS_BUILDED; + g_szEaData[g_eaNum].chSrcTiocId = chLocalId; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; + g_szEaData[g_eaNum].chPaType = PA_TYPE_DA_WZX; + g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); + g_szEaData[g_eaNum].dwEaBuildMyCycNum = Get2oo2CurCycleNum(); + /*添加计算的LinkI序列*/ + chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_DA_WZX); + if (CI_SUCCESS == chFunRtn) + { + g_eaNum++; + } + else if (CI_TRUE == chFunRtn) + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + } + else + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail\n"); + } + } + else + { + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit\n"); + } + } + else + { + debug_infor_printf((const)"chIntegrityState g_szEaData exist:%d\n", j); + } + } + else + { + ; /*不处理 */ + } + + if (TRAIN_ESCAPE_DOOR_NOT_OPEN != chEscapeDoorState) + { + /*根据列车不同状态异常分别建立防护区域,需要分开处理,避免同时多点故障*/ + + for (j = 0u; j < g_eaNum; j++) + { + /*判断通信车请求是否已经处理*/ + if ((wTrainId == g_szEaData[j].wTrainId) && (PA_TYPE_DA_TSM == g_szEaData[j].chPaType)) + { + break; + } + } + + if (g_eaNum == j) + { + if (EA_MAX_NUM > g_eaNum) + { + g_szEaData[g_eaNum].wTrainId = wTrainId; + g_szEaData[g_eaNum].chBuildedFlag = EA_IS_BUILDED; + g_szEaData[g_eaNum].chSrcTiocId = chLocalId; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = EA_DST_ALLOWED_NO; + g_szEaData[g_eaNum].chPaType = PA_TYPE_DA_TSM; + g_szEaData[g_eaNum].dwEaBuildCycNum = Get2oo2CurCycleNum(); + g_szEaData[g_eaNum].dwEaBuildMyCycNum = Get2oo2CurCycleNum(); + /*添加计算的LinkI序列*/ + chFunRtn = EvacuationAreaCalcu(g_eaNum, PA_TYPE_DA_TSM); + if (CI_SUCCESS == chFunRtn) + { + g_eaNum++; + } + else if (CI_TRUE == chFunRtn) + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + } + else + { + g_szEaData[g_eaNum].wTrainId = 0u; + g_szEaData[g_eaNum].chBuildedFlag = 0u; + g_szEaData[g_eaNum].chSrcTiocId = 0u; + g_szEaData[g_eaNum].chDstTiocId = 0u; + g_szEaData[g_eaNum].chDstAllowed = 0u; + g_szEaData[g_eaNum].chPaType = 0u; + g_szEaData[g_eaNum].dwEaBuildCycNum = 0U; + g_szEaData[g_eaNum].dwEaBuildMyCycNum = 0u; + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because build EA fail\n"); + } + } + else + { + SetPlatOverFlag(); + debug_infor_printf((const)"EaCmdProc is to shutdown,because the number of g_eaNum exceeds the limit\n"); + } + } + else + { + debug_infor_printf((const)"chEscapeDoorState g_szEaData exist:%d\n", j); + } + } + else + { + ; /*不处理 */ } } else { - ; + ; /*不建立*/ } } - else - { - ; - } + } + else + { + ; /*本项目不支持区间疏散*/ } } else { - ; /* 非正线或试车线,不处理区间疏散 */ + ; /* 非正线或试车线,不处理 */ } - - } /** @@ -800,8 +1001,6 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) UINT8 dwEaConfigId = 0u; UINT16 wAxisBelLinkId = 0U;/*计轴关联LINK ID*/ UINT16 wEaConfigIndex = 0U;/*防护区域配置数据索引*/ - UINT8 chAxisBelCiIdCheck = 0U; /*计轴区段所属联锁检查*/ - UINT8 chAcBelongCiId = 0U; /*计轴区段所属联锁ID*/ UINT8 chAxisSecAddFlag = CI_ERROR;/*计轴区段是否加入防护区域标志*/ UINT16 wSpecialEaId = 0U;/*特殊防护区域编号*/ @@ -864,7 +1063,7 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) chCalFlag = FLAG_UNSET; } } - else if ((EA_OUT_FIVE == chEaOut) || (EA_OUT_THREE == chEaOut) || (EA_OUT_FOUR == chEaOut) || (EA_OUT_SIX == chEaOut)) + else if ((EA_OUT_FIVE == chEaOut) || (EA_OUT_THREE == chEaOut) || (EA_OUT_FOUR == chEaOut) || (EA_OUT_SIX == chEaOut) || (EA_OUT_EIGHT == chEaOut)) { chCalFlag = FLAG_UNSET; /*两站一区间方式区间需要全部建立*/ @@ -1165,6 +1364,8 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) if (CI_SUCCESS == rtnValue) { + debug_infor_printf((const)"Train:%x g_szEaData.chEaIndex = %d\n", wTrainId, chEaIndex); + debug_infor_printf((const)"Train:%x PaType = %x\n", wTrainId, g_szEaData[chEaIndex].chPaType); debug_infor_printf((const)"Train:%x pMidLine = %u pMinEdge = %u pMaxEdge = %u\n", wTrainId,dwKmTemp,dwKm2,dwKm1); @@ -1433,19 +1634,13 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI UINT8 chPlatformFlag = CI_ERROR; UINT16 wIndex = 0u; UINT8 chTailPlatFlag = CI_ERROR; - UINT16 wACOfMaxSafeHeadLoc = 0u; /*列车最大安全前所属计轴ID*/ - UINT16 wACOfMinSafeTailLoc = 0u; /*列车最小安全后所属计轴ID*/ - UINT16 wMaxHeadLinkOrgnPointID = 0u; /*车头计轴区段起点端点ID*/ - UINT16 wMaxHeadLinkTmnlPointID = 0u; /*车头计轴区段终点端点ID*/ - UINT16 wMinTailLinkOrgnPointID = 0u; /*车尾计轴区段起点端点ID*/ - UINT16 wMinTailLinkTmnlPointID = 0u; /*车尾计轴区段终点端点ID*/ - UINT32 wMaxHeadLinkOrgnPointKm = 0u; /*车头计轴区段起点公里标*/ - UINT32 wMaxHeadLinkTmnlPointKm = 0u; /*车头计轴区段终点公里标*/ - UINT32 wMinTailLinkOrgnPointKm = 0u; /*车尾计轴区段起点公里标*/ - UINT32 wMinTailLinkTmnlPointKm = 0u; /*车尾计轴区段终点公里标*/ UINT16 wBasicLinkId = 0U;/*基准LINK ID*/ UINT8 chConfigLinkIndex = 0U;/*配置数据中LINK索引*/ UINT8 chCalcSpecialEa = 0U;/*特殊防护区域计算*/ + UINT16 wTrainFailureDaType = 0U; /* 列车状态异常防护分区类型 */ + ELM_TrainSafeLocStruct tmpSafeLoc = { 0U }; /* 安全位置临时存储 */ + UINT16 wTrainFailureEndLink = 0U; /* 列车状态异常防护分区车头LINK */ + UINT16 wTrainFailureStartLink = 0U; /* 列车状态异常防护分区车尾LINK */ /* 获取列车位置 */ wMaxHeadLink = GetTrainMaxHeadLink(wTrainId); @@ -1455,14 +1650,6 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI chTrainDir_Maxhead = GetTrainDir_MaxHead(wTrainId); chTrainDir_outTail = GetTrainDir(wTrainId); - wACOfMaxSafeHeadLoc = elm_PrepareACOfMaxSafeHeadLoc(wTrainId); /*获取计轴ID*/ - wACOfMinSafeTailLoc = elm_PrepareACOfMinSafeTailLoc(wTrainId); - - /*获取列车位置计轴区段的起点终点ID*/ - wMaxHeadLinkOrgnPointID = EaGetAcOrgnAxisId(wACOfMaxSafeHeadLoc); /*车头*/ - wMaxHeadLinkTmnlPointID = EaGetAcTmnlAxisId(wACOfMaxSafeHeadLoc); - wMinTailLinkOrgnPointID = EaGetAcOrgnAxisId(wACOfMinSafeTailLoc); /*车尾*/ - wMinTailLinkTmnlPointID = EaGetAcTmnlAxisId(wACOfMinSafeTailLoc); /* 判断列车位置有效性 */ chRtn = CheckLinkValid(wMaxHeadLink, dwMaxHeadOff); @@ -1478,11 +1665,6 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI { dwMaxHeadKm = GetPointKm(wMaxHeadLink, dwMaxHeadOff); dwMinTailKm = GetPointKm(wMinTailLink, dwMinTailOff); - /*获取车头尾起点终点计轴器的公里标*/ - wMaxHeadLinkOrgnPointKm = GetAxisKmById(wMaxHeadLinkOrgnPointID); /*车头公里标*/ - wMaxHeadLinkTmnlPointKm = GetAxisKmById(wMaxHeadLinkTmnlPointID); - wMinTailLinkOrgnPointKm = GetAxisKmById(wMinTailLinkOrgnPointID); /*车尾公里标*/ - wMinTailLinkTmnlPointKm = GetAxisKmById(wMinTailLinkTmnlPointID); chPlatformFlag = IsLinkPlatform(wMaxHeadLink); chTailPlatFlag = IsLinkPlatform(wMinTailLink); @@ -1498,174 +1680,184 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI if (CI_SUCCESS == chRtn) { *pMidLine = (dwMaxHeadKm + dwMinTailKm) / 2u; /* 中轴线公里标 */ + debug_infor_printf((const)"Train:%x dwMaxHeadKm = %u dwMinTailKm = %u pMidLine = %u\n", wTrainId, dwMaxHeadKm, dwMinTailKm, *pMidLine); wEaMode = GetSystemParaValue(EA_MODE_ID); wEaStationMode = GetSystemParaValue(EA_STATION_MODE_ID); - if ((PA_TYPE_DA == chType) || (EA_MODE_DIS == wEaMode) || ((EA_STATION_MODE_DIS == wEaStationMode) && (wMaxHeadLink == wMinTailLink) && (CI_SUCCESS == chPlatformFlag))) + wTrainFailureDaType = GetSystemParaValue(TRAIN_FAILURE_DA_TYPE); + + if ((DA_MODE_DATA_CONFIG == wTrainFailureDaType) && (PA_TYPE_EA != chType)) { - chCalcSpecialEa = CalcSpecialEa(wTrainId,wSpecialEaId); - if (CI_SUCCESS == chCalcSpecialEa) + (void)elm_PrepareTrainSafeLoc(wTrainId, &tmpSafeLoc); + wTrainFailureEndLink = tmpSafeLoc.endPos.Lnk; + wTrainFailureStartLink = tmpSafeLoc.startPos.Lnk; + + if ((0U != wTrainFailureEndLink) && (0U != wTrainFailureStartLink)) { - *pEaOut = EA_OUT_SEVEN; - *pMidLine = UINT32_MAX; - } - else - { - /* 获取区间疏散防护区域建立范围 */ - dwFrontDis = GetEaFrontDis(); - dwBehindDis = GetEaBehindDis(); - chTrainDir_outTail = ConvertTrainDir(chTrainDir_outTail); /*小后方向取反*/ - - /*车头*/ - if (DIR_SAME == chTrainDir_Maxhead) - {/*车头处公里标沿大前方向累加*/ - dwKm1 = dwMaxHeadKm + dwFrontDis; - } - else if (DIR_CONVERT == chTrainDir_Maxhead) - {/*车头处公里标沿大前方向累减*/ - if (dwMaxHeadKm >= dwFrontDis) - { - dwKm1 = dwMaxHeadKm - dwFrontDis; - } - else - { - dwKm1 = 0u; - } - } - else + for (wIndex = 0u; wIndex < g_eaConfigNum; wIndex++) { - chRtn = CI_ERROR; - } - - /*车尾*/ - if (DIR_SAME == chTrainDir_outTail) - {/*车尾处公里标沿车尾向外方向累加*/ - dwKm2 = dwMinTailKm + dwBehindDis; - } - else if (DIR_CONVERT == chTrainDir_outTail) - {/*车尾处公里标沿车尾向外方向累减*/ - if (dwMinTailKm >= dwBehindDis) + for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum; chConfigLinkIndex++) { - dwKm2 = dwMinTailKm - dwBehindDis; + if ((wTrainFailureEndLink == g_szEaConfig[wIndex].wSzEaConfigLinkId[chConfigLinkIndex]) || (wTrainFailureStartLink == g_szEaConfig[wIndex].wSzEaConfigLinkId[chConfigLinkIndex])) + { + break; + } + else + { + ; + } } - else - { - dwKm2 = 0u; - } - } - else - { - chRtn = CI_ERROR; - } - *pMinEdge = (dwKm1 < dwKm2) ? dwKm1 : dwKm2; - *pMaxEdge = (dwKm1 < dwKm2) ? dwKm2 : dwKm1; - *pEaOut = EA_OUT_ONE; - } - } - else if ((EA_STATION_MODE_PLAT == wEaStationMode) && (wMaxHeadLink == wMinTailLink) && (CI_SUCCESS == chPlatformFlag)) - { - *pMinEdge = (dwMaxHeadKm < dwMinTailKm) ? dwMaxHeadKm : dwMinTailKm; - *pMaxEdge = (dwMaxHeadKm < dwMinTailKm) ? dwMinTailKm : dwMaxHeadKm; - *pEaOut = EA_OUT_TWO; - } - else if ((EA_MODE_SEC == wEaMode) || (EA_MODE_PLATION == wEaMode)) - { - if (CI_ERROR == chPlatformFlag) - { - /* 车头不在站台,选取车头查询 */ - wBasicLinkId = wMaxHeadLink; - } - else if(CI_ERROR == chTailPlatFlag) - {/* 车尾不在站台,选取车尾查询 */ - wBasicLinkId = wMinTailLink; - } - else - { - /*不可能分支,以防护*/ - } - - for (wIndex = 0u; wIndex < g_eaConfigNum; wIndex++) - { - for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum; chConfigLinkIndex++) - { - if (wBasicLinkId == g_szEaConfig[wIndex].wSzEaConfigLinkId[chConfigLinkIndex]) + if (chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum) { + /*已经找到*/ break; - } + } else { ; } } - if (chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum) + if (wIndex < g_eaConfigNum) { - /*已经找到*/ - break; - } + *pEaOut = EA_OUT_EIGHT; + *pEaconfigId = (UINT8)g_szEaConfig[wIndex].wId; + } else { - ; + /*没找到,不建立防护分区,也不宕机*/ + chRtn = CI_TRUE; + debug_infor_printf((const)"Train:%x Da Not Build,Because Not Exist\n", wTrainId); } } - - if (wIndex < g_eaConfigNum) + else { - /*若当前建立方式为两站一区间不含站台,但列车一端在防护区域外的站台区间,防护区间计算需要包括该站台区域*/ - if (EA_MODE_SEC == wEaMode) + chRtn = CI_ERROR; + } + } + else + { + if ((DA_MODE_DIS == wTrainFailureDaType) || (EA_MODE_DIS == wEaMode) || ((EA_STATION_MODE_DIS == wEaStationMode) && (wMaxHeadLink == wMinTailLink) && (CI_SUCCESS == chPlatformFlag))) + { + chCalcSpecialEa = CalcSpecialEa(wTrainId, wSpecialEaId); + if (CI_SUCCESS == chCalcSpecialEa) { - /*车头处于站台车尾处于区间*/ - if ((CI_SUCCESS == chPlatformFlag) && (CI_ERROR == chTailPlatFlag)) - { - for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chStartStationLinkSum; chConfigLinkIndex++) - { - if (wMaxHeadLink == g_szEaConfig[wIndex].wSzStartStationLinkId[chConfigLinkIndex]) - { - break; - } - else - { - ; - } - } + *pEaOut = EA_OUT_SEVEN; + *pMidLine = UINT32_MAX; + } + else + { + /* 获取区间疏散防护区域建立范围 */ + dwFrontDis = GetEaFrontDis(); + dwBehindDis = GetEaBehindDis(); + chTrainDir_outTail = ConvertTrainDir(chTrainDir_outTail); /*小后方向取反*/ - /*先找是不是在区间起点站台*/ - if (chConfigLinkIndex < g_szEaConfig[wIndex].chStartStationLinkSum) + /*车头*/ + if (DIR_SAME == chTrainDir_Maxhead) + {/*车头处公里标沿大前方向累加*/ + dwKm1 = dwMaxHeadKm + dwFrontDis; + } + else if (DIR_CONVERT == chTrainDir_Maxhead) + {/*车头处公里标沿大前方向累减*/ + if (dwMaxHeadKm >= dwFrontDis) { - *pEaOut = EA_OUT_THREE; + dwKm1 = dwMaxHeadKm - dwFrontDis; } else { - for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEndStationLinkSum; chConfigLinkIndex++) - { - if (wMaxHeadLink == g_szEaConfig[wIndex].wSzEndStationLinkId[chConfigLinkIndex]) - { - break; - } - else - { - ; - } - } - if (chConfigLinkIndex < g_szEaConfig[wIndex].chEndStationLinkSum) - { - *pEaOut = EA_OUT_FOUR; - } - else - { - chRtn = CI_ERROR; /*起终点都找不到,错误*/ - } + dwKm1 = 0u; } - } - /*车头不处于站台 车尾处于站台*/ - else if ((CI_ERROR == chPlatformFlag) && (CI_SUCCESS == chTailPlatFlag)) + else { + chRtn = CI_ERROR; + } + + /*车尾*/ + if (DIR_SAME == chTrainDir_outTail) + {/*车尾处公里标沿车尾向外方向累加*/ + dwKm2 = dwMinTailKm + dwBehindDis; + } + else if (DIR_CONVERT == chTrainDir_outTail) + {/*车尾处公里标沿车尾向外方向累减*/ + if (dwMinTailKm >= dwBehindDis) + { + dwKm2 = dwMinTailKm - dwBehindDis; + } + else + { + dwKm2 = 0u; + } + } + else + { + chRtn = CI_ERROR; + } + + *pMinEdge = (dwKm1 < dwKm2) ? dwKm1 : dwKm2; + *pMaxEdge = (dwKm1 < dwKm2) ? dwKm2 : dwKm1; + *pEaOut = EA_OUT_ONE; + } + } + else if ((EA_STATION_MODE_PLAT == wEaStationMode) && (wMaxHeadLink == wMinTailLink) && (CI_SUCCESS == chPlatformFlag)) + { + *pMinEdge = (dwMaxHeadKm < dwMinTailKm) ? dwMaxHeadKm : dwMinTailKm; + *pMaxEdge = (dwMaxHeadKm < dwMinTailKm) ? dwMinTailKm : dwMaxHeadKm; + *pEaOut = EA_OUT_TWO; + } + else if ((EA_MODE_SEC == wEaMode) || (EA_MODE_PLATION == wEaMode)) + { + if (CI_ERROR == chPlatformFlag) + { + /* 车头不在站台,选取车头查询 */ + wBasicLinkId = wMaxHeadLink; + } + else if (CI_ERROR == chTailPlatFlag) + {/* 车尾不在站台,选取车尾查询 */ + wBasicLinkId = wMinTailLink; + } + else + { + /*不可能分支,以防护*/ + } + + for (wIndex = 0u; wIndex < g_eaConfigNum; wIndex++) + { + for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum; chConfigLinkIndex++) + { + if (wBasicLinkId == g_szEaConfig[wIndex].wSzEaConfigLinkId[chConfigLinkIndex]) + { + break; + } + else + { + ; + } + } + + if (chConfigLinkIndex < g_szEaConfig[wIndex].chEaConfigLinkSum) + { + /*已经找到*/ + break; + } + else + { + ; + } + } + + if (wIndex < g_eaConfigNum) + { + /*若当前建立方式为两站一区间不含站台,但列车一端在防护区域外的站台区间,防护区间计算需要包括该站台区域*/ + if (EA_MODE_SEC == wEaMode) + { + /*车头处于站台车尾处于区间*/ + if ((CI_SUCCESS == chPlatformFlag) && (CI_ERROR == chTailPlatFlag)) { for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chStartStationLinkSum; chConfigLinkIndex++) { - if (wMinTailLink == g_szEaConfig[wIndex].wSzStartStationLinkId[chConfigLinkIndex]) + if (wMaxHeadLink == g_szEaConfig[wIndex].wSzStartStationLinkId[chConfigLinkIndex]) { break; } @@ -1684,7 +1876,7 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI { for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEndStationLinkSum; chConfigLinkIndex++) { - if (wMinTailLink == g_szEaConfig[wIndex].wSzEndStationLinkId[chConfigLinkIndex]) + if (wMaxHeadLink == g_szEaConfig[wIndex].wSzEndStationLinkId[chConfigLinkIndex]) { break; } @@ -1704,41 +1896,88 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI } } + /*车头不处于站台 车尾处于站台*/ + else if ((CI_ERROR == chPlatformFlag) && (CI_SUCCESS == chTailPlatFlag)) + { + { + for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chStartStationLinkSum; chConfigLinkIndex++) + { + if (wMinTailLink == g_szEaConfig[wIndex].wSzStartStationLinkId[chConfigLinkIndex]) + { + break; + } + else + { + ; + } + } + + /*先找是不是在区间起点站台*/ + if (chConfigLinkIndex < g_szEaConfig[wIndex].chStartStationLinkSum) + { + *pEaOut = EA_OUT_THREE; + } + else + { + for (chConfigLinkIndex = 0U; chConfigLinkIndex < g_szEaConfig[wIndex].chEndStationLinkSum; chConfigLinkIndex++) + { + if (wMinTailLink == g_szEaConfig[wIndex].wSzEndStationLinkId[chConfigLinkIndex]) + { + break; + } + else + { + ; + } + } + if (chConfigLinkIndex < g_szEaConfig[wIndex].chEndStationLinkSum) + { + *pEaOut = EA_OUT_FOUR; + } + else + { + chRtn = CI_ERROR; /*起终点都找不到,错误*/ + } + } + + } + } + else if ((CI_ERROR == chPlatformFlag) && (CI_ERROR == chTailPlatFlag)) + { + /*列车不占压站台轨*/ + *pEaOut = EA_OUT_FIVE; + } + else + { + chRtn = CI_ERROR;/*不可达分支*/ + } + + *pEaconfigId = (UINT8)g_szEaConfig[wIndex].wId; } - else if ((CI_ERROR == chPlatformFlag) && (CI_ERROR == chTailPlatFlag)) + else if (EA_MODE_PLATION == wEaMode) { - /*列车不占压站台轨*/ - *pEaOut = EA_OUT_FIVE; + *pEaOut = EA_OUT_SIX; + *pEaconfigId = (UINT8)g_szEaConfig[wIndex].wId; } else { - chRtn = CI_ERROR;/*不可达分支*/ + /*不可达分支*/ + chRtn = CI_ERROR; } - - *pEaconfigId = (UINT8)g_szEaConfig[wIndex].wId; - } - else if (EA_MODE_PLATION == wEaMode) - { - *pEaOut = EA_OUT_SIX; - *pEaconfigId = (UINT8)g_szEaConfig[wIndex].wId; + + } else { - /*不可达分支*/ chRtn = CI_ERROR; } - - } else { - chRtn = CI_ERROR; + /* 不可能分支 */ + chRtn = CI_ERROR; } } - else - { - ; /* 不可能分支 */ - } } else { @@ -1763,11 +2002,8 @@ UINT8 EaGetadjacentStationKM(const UINT16 eaConfigIndex, const UINT32 wOrgnPoint { UINT8 chPointIndex = 0U;/*循环变量*/ UINT8 chRtn = CI_ERROR; - UINT16 trainAcId = 0U; - UINT32 retvalStartKm = 0U; /*返回防护始端公里标*/ UINT32 retvalEndKm = 0U; /*返回防护终端公里标*/ - UINT16 beforStartLink = 0U; /*防护区域始端相邻Link*/ UINT16 afterEndLink = 0U; /*防护区域终端相邻Link*/ UINT8 chStationFlag = 0U; /*判断标志:link是否为站台*/ @@ -2389,7 +2625,7 @@ static void EaAtsCancleExc(const UINT8 chEaIndex) UINT8 chIndex = 0U; UINT8 chPaType = 0U;/*防护区域类型*/ AtsEaMsgStru* strEaMsgSnd = NULL;/*ATS给RC的区间疏散二次取消消息*/ - AtsDaMsgStru* strDaMsgSnd = NULL;/*ATS给RC的脱轨二次取消消息*/ + AtsDaMsgStru* strDaMsgSnd = NULL;/*ATS给RC的列车状态异常防护分区二次取消消息*/ UINT8 chAtsMsgLine = 0U;/*ATS给RC疏散二次取消消息的线路上下行属性*/ UINT8 chEaAreaLineType = 0U;/*本地存储的区间疏散区域线路上下行属性*/ UINT8 chEaLinkSum = 0U;/*防护区域包含LINK数目*/ @@ -2406,7 +2642,8 @@ static void EaAtsCancleExc(const UINT8 chEaIndex) strDaMsgSnd = GetAtsDaMsgSnd(); chEaAreaLineType = GetEaAreaLineType(chEaIndex); chPaType = GetPaTypeByIndex(chEaIndex); - if (PA_TYPE_DA == chPaType) + + if ((PA_TYPE_DA_TG == chPaType) || (PA_TYPE_DA_TSM == chPaType) || (PA_TYPE_DA_WZX == chPaType)) { chAtsMsgLine = strDaMsgSnd->chLine; } @@ -2416,7 +2653,7 @@ static void EaAtsCancleExc(const UINT8 chEaIndex) } else { - ; /*不然不赋值ATS取消线路上下行属性,此时为0,下面不会执行*/ + ; /*不赋值ATS取消线路上下行属性,此时为0,下面不会执行*/ } if (0U != chAtsMsgLine) @@ -2614,6 +2851,10 @@ UINT32 GetEaTransferData(UINT8* pData, UINT32 dwIndex) /* 周期号*/ LongToChar(g_szEaData[ii].dwEaBuildCycNum, &pData[dwRetVal]); dwRetVal += 4u; + + /* 周期号*/ + LongToChar(g_szEaData[ii].dwEaBuildMyCycNum, &pData[dwRetVal]); + dwRetVal += 4u; } } @@ -2713,6 +2954,10 @@ UINT32 SetEaTransferData(UINT8* pData, UINT32 dwIndex) /* 防护区域建立周期号 */ g_szEaData[ii].dwEaBuildCycNum = LongFromChar(&pData[dwRetVal]); dwRetVal += 4u; + + /* 防护区域建立周期号 */ + g_szEaData[ii].dwEaBuildMyCycNum = LongFromChar(&pData[dwRetVal]); + dwRetVal += 4u; } } else @@ -2864,6 +3109,7 @@ void EaNeighborUpdata(EaDataStru * pEaDataSt) g_szEaData[chEaIndex].chDstTiocId = pEaDataSt->chDstTiocId; g_szEaData[chEaIndex].chPaType = pEaDataSt->chPaType; g_szEaData[chEaIndex].dwEaBuildCycNum = pEaDataSt->dwEaBuildCycNum; + g_szEaData[chEaIndex].dwEaBuildMyCycNum = Get2oo2CurCycleNum(); g_szEaData[chEaIndex].chDstAllowed = EA_DST_ALLOWED_NO; if (chEaIndex < g_eaNum) @@ -3035,7 +3281,7 @@ UINT8 IsLinkInEa(const UINT16 wLinkId) } /** -* @brief 脱轨防护区域取消处理 +* @brief 列车状态异常防护区域取消处理 * @param 无 * @return 无 */ @@ -3057,18 +3303,18 @@ void DaAtsCancleProc(void) ; /* 没有消息,什么也不做 */ } else if ((strMsgFst->chFlag == FLAG_SET) && (strMsgSnd->chFlag != FLAG_SET)) - {/* 取消脱轨防护区一次消息 */ + {/* 取消列车状态异常防护区域一次消息 */ DaAtsCancleFst(); } else - {/* 取消脱轨防护区二次消息 */ + {/* 取消列车状态异常防护区域二次消息 */ DaAtsCancleSnd(); } } } /** -* @brief 取消脱轨防护区首次处理 +* @brief 取消列车状态异常防护区域首次处理 * @param 无 * @return 无 */ @@ -3085,7 +3331,7 @@ void DaAtsCancleFst(void) UINT16 wTrainId = 0U; UINT16 wTrainLgcId = 0U; UINT8 chPaIndex = 0U; - UINT8 chDerailment = 0U; + UINT8 chTrainDaTypeCheck = 0U; UINT8 chEaAreaLinkType = 0U;/*防护区域线路上下行属性*/ chLocalId = GetSystemParaLocalCiId(); @@ -3102,6 +3348,7 @@ void DaAtsCancleFst(void) strCfmFst->chStation = strMsgFst->chStation; strCfmFst->wIndex = strMsgFst->wIndex; strCfmFst->dwTime = dwCycle; + strCfmFst->chDaType = strMsgFst->chType; chRtn = dquHlhtId2VobcName(strMsgFst->dwDaTrainId, &wTrainId, &wTrainLgcId); @@ -3112,16 +3359,16 @@ void DaAtsCancleFst(void) } else { - chPaIndex = PaGetIndex(wTrainId, PA_TYPE_DA); + chPaIndex = PaGetIndex(wTrainId, strCfmFst->chDaType); if (chPaIndex == g_eaNum) - {/* 脱轨防护区域未设置 */ + {/* 列车状态异常防护区域未设置 */ strCfmFst->chOpStatus = CONFIRM_DA_FST_UNSET; } else { - chDerailment = GetTrainDerailment(wTrainId); - if (TRAIN_DERAIL_NO != chDerailment) - {/* 列车当前处于脱轨状态 */ + chTrainDaTypeCheck = TrainFailureTypeCheck(wTrainId, strCfmFst->chDaType); + if (CI_SUCCESS != chTrainDaTypeCheck) + {/* 列车当前处于异常状态 */ strCfmFst->chOpStatus = CONFIRM_DA_FST_DERAIL; } else @@ -3166,7 +3413,7 @@ void DaAtsCancleFst(void) } } else - {/* 接收到ATS取消区间疏散一次消息非本周期,超时判断 */ + {/* 接收到ATS取消列车状态异常防护区域一次消息非本周期,超时判断 */ chFunRtn = SystemOverTimeCheck(strMsgFst->dwCycle, CONFIRM_TIMEOUT_CC); if (CI_TIME_OUT == chFunRtn) { @@ -3181,7 +3428,7 @@ void DaAtsCancleFst(void) } /** -* @brief 取消脱轨防护区二次处理 +* @brief 取消列车状态异常防护区域二次处理 * @param 无 * @return 无 */ @@ -3201,7 +3448,7 @@ void DaAtsCancleSnd(void) UINT16 wTrainId = 0u; UINT16 wTrainLgcId = 0u; UINT8 chPaIndex = 0u; - UINT8 chDerailment = 0u; + UINT8 chTrainDaTypeCheck = 0u; chLocalId = GetSystemParaLocalCiId(); dwCycle = Get2oo2CurCycleNum(); @@ -3218,6 +3465,7 @@ void DaAtsCancleSnd(void) strCfmSnd->chTiocId = chLocalId; strCfmSnd->chStation = strMsgSnd->chStation; strCfmSnd->wIndex = strMsgSnd->wIndex; + strCfmSnd->chDaType = strMsgSnd->chType; strCfmSnd->dwTime = dwCycle; if (FLAG_SET != strMsgFst->chFlag) @@ -3253,16 +3501,25 @@ void DaAtsCancleSnd(void) if (FLAG_UNSET == chFlag) { chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwDaTrainId, &wTrainId, &wTrainLgcId); - chDerailment = GetTrainDerailment(wTrainId); - if (TRAIN_DERAIL_NO != chDerailment) + if (CI_ERROR == chFunRtn) { - /* 列车当前处于脱轨状态 */ - strCfmSnd->chOpStatus = CONFIRM_DA_SND_DERAIL; + strCfmSnd->chOpStatus = CONFIRM_DA_SND_UNKNOWN; chFlag = FLAG_SET; } else { - ; + chTrainDaTypeCheck = TrainFailureTypeCheck(wTrainId, strCfmSnd->chDaType); + + if (CI_SUCCESS != chTrainDaTypeCheck) + { + /* 列车当前处于脱轨状态 */ + strCfmSnd->chOpStatus = CONFIRM_DA_SND_DERAIL; + chFlag = FLAG_SET; + } + else + { + ; + } } } else @@ -3314,7 +3571,7 @@ void DaAtsCancleSnd(void) if (FLAG_UNSET == chFlag) {/* 检查通过,反馈确认成功 */ strCfmSnd->chOpStatus = CONFIRM_DA_SND_SUCCESS; - chPaIndex = PaGetIndex(wTrainId, PA_TYPE_DA); + chPaIndex = PaGetIndex(wTrainId, strCfmSnd->chDaType); EaAtsCancleExc(chPaIndex); } else @@ -3449,6 +3706,44 @@ UINT16 * EaGetAcId(const UINT8 chIndex) return pRtn; } +/** +* @brief 获取防护区域逻辑区段数量 +* @param const UINT8 chIndex 防护区域索引 +* @return 防护区域逻辑区段数量 +*/ +UINT8 EaGetLogNum(const UINT8 chIndex) +{ + UINT8 chRtn = 0u; + if (EA_MAX_NUM > chIndex) + { + chRtn = g_szEaData[chIndex].strLgcInfo.chObjNum; + } + else + { + ; + } + return chRtn; +} + +/** +* @brief 获取防护区域逻辑区段编号 +* @param const UINT8 chIndex 防护区域索引 +* @return 防护区域逻辑区段编号 +*/ +UINT16 * EaGetLogId(const UINT8 chIndex) +{ + UINT16 * pRtn = NULL; + if (EA_MAX_NUM > chIndex) + { + pRtn = g_szEaData[chIndex].strLgcInfo.szObjId; + } + else + { + ; + } + return pRtn; +} + /** * @brief 判断逻辑区段是否处于防护区域内 * @param const UINT16 wLgcId 逻辑区段编号 @@ -3526,14 +3821,14 @@ UINT8 AxisSecAddProAreaCheck(const UINT16 wAxisSecId,const UINT8 chSetAreaType,c { UINT8 chReval = CI_SUCCESS;/*安全侧是要建立,检查通过*/ UINT8 chEvacuateRelDirSwitch = 0U;/*区间疏散防护区域区分上下行开关*/ - UINT8 chTgRelDirSwitch = 0U; /*脱轨防护区域区分上下行开关*/ + UINT8 chTgRelDirSwitch = 0U; /*列车状态异常防护区域区分上下行开关*/ UINT16 wMaxHeadLink = 0U;/*列车大前所在LINK*/ UINT8 chTrainLinkLine = 0U;/*列车所在LINK线路上下行属性*/ UINT8 chAxisLinkTgEvacuateDir = 0U;/*计轴区段LINK脱轨及区间疏散防护线路上下行属性*/ UINT16* wAxisIncLinkBuf = NULL;/*计轴区段包含LINK*/ if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId) - && ((PA_TYPE_DA == chSetAreaType) || (PA_TYPE_EA == chSetAreaType)) + && ((PA_TYPE_EA == chSetAreaType)|| (PA_TYPE_DA_TG == chSetAreaType) || (PA_TYPE_DA_TSM == chSetAreaType) || (PA_TYPE_DA_WZX == chSetAreaType)) && (((0U < wTrainId) && (TRAIN_SUM_MAX > wTrainId)) || ((TRAIN_ID_MIN < wTrainId) && (TRAIN_ID_MAX > wTrainId)))) { wAxisIncLinkBuf = EaGetAcLinkId(wAxisSecId); @@ -3563,7 +3858,7 @@ UINT8 AxisSecAddProAreaCheck(const UINT16 wAxisSecId,const UINT8 chSetAreaType,c chTrainLinkLine = GetLinkTgEvacuateDir(wMaxHeadLink); if (((PA_TYPE_EA == chSetAreaType) && (FUNC_SWITCH_ON == chEvacuateRelDirSwitch)) - || ((PA_TYPE_DA == chSetAreaType) && (FUNC_SWITCH_ON == chTgRelDirSwitch))) + || (((PA_TYPE_DA_TG == chSetAreaType) || (PA_TYPE_DA_TSM == chSetAreaType) || (PA_TYPE_DA_WZX == chSetAreaType)) && (FUNC_SWITCH_ON == chTgRelDirSwitch))) { if (LINK_TGEVACUATEDIR_ALL == chTrainLinkLine) { @@ -3658,8 +3953,6 @@ void ClearEaSecData(const UINT8 chEaIndex) UINT8 ii = 0U; UINT8 chFindFlag = CI_ERROR; UINT8 chCheckFlag = CI_ERROR; - UINT16 wTempLinkLineType = 0U;/*临时LINK线路上下行属性*/ - UINT16 wLinkLineType = 0U;/*LINK线路上下行属性*/ if ((EA_MAX_NUM > chEaIndex) && (0U < g_eaNum) && (chEaIndex < g_eaNum)) { @@ -3844,7 +4137,6 @@ void RefreshEaLineType(const UINT8 chEaIndex) */ UINT16 GetAxisBelongTiocAllLine(const UINT16 wAcId) { - UINT16 bufIndex = 0u; /*数组下标*/ UINT16 retVal = CI_ERROR; UINT16 wLinkId = 0u; UINT16 i = 0U; @@ -3891,6 +4183,25 @@ UINT32 EaGetBuildCycNum(const UINT8 chIndex) return retCycNum; } +/* +* 功能描述:获取防护区域建立时本RC的周期号 +* 参数说明:UINT8 chIndex 防护区域索引 +* 返回值 : UINT32 防护区域建立时本RC的周期号 +*/ +UINT32 EaGetBuildMyCycNum(const UINT8 chIndex) +{ + UINT32 retCycNum = 0U; + if (EA_MAX_NUM > chIndex) + { + retCycNum = g_szEaData[chIndex].dwEaBuildMyCycNum; + } + else + { + ; + } + return retCycNum; +} + /* * 功能描述:根据防护区域编号获取防护区域的索引 * 参数说明:UINT16 wEaId 防护区域编号 @@ -4171,7 +4482,7 @@ static UINT8 CalcSpecialEa(const UINT16 wTrainId, UINT16* wSpecialEaId) errorCode += 0x80000000U; } - debug_infor_printf((const)"\CalcSpecialEa Error errorCode:0x%08x\n", errorCode); + debug_infor_printf((const)"\nCalcSpecialEa Error errorCode:0x%08x\n", errorCode); return chRtn; } @@ -4231,7 +4542,7 @@ static UINT8 EaFindLinkAdjacentLinkID(struct_PathPoint pPoint, UINT8 chDirection dwAddSearchLen += GetLinkLengthById(wFindLinkId); wLinkSpecialEa = GetLinkSpecialEaAttr(wFindLinkId); wLinkBelCiId = GetLinkManageTiocById(wFindLinkId); - chLinkBelCiType = GetCiType(wLinkBelCiId); + chLinkBelCiType = GetCiType((UINT8)wLinkBelCiId); if (CI_TYPE_CLD == chLinkBelCiType) { @@ -4268,7 +4579,7 @@ static UINT8 EaFindLinkAdjacentLinkID(struct_PathPoint pPoint, UINT8 chDirection wFindLinkId = pathTreeTemp.wMainLinkId; dwAddSearchLen += GetLinkLengthById(wFindLinkId); wLinkBelCiId = GetLinkManageTiocById(wFindLinkId); - chLinkBelCiType = GetCiType(wLinkBelCiId); + chLinkBelCiType = GetCiType((UINT8)wLinkBelCiId); if (CI_TYPE_CLD == chLinkBelCiType) { chCheckFinishFlag = CI_TRUE; @@ -4345,3 +4656,69 @@ static UINT16 GetAxisSpecialEaId(const UINT16 wAcId) return wRtn; } +/** +* @brief 列车状态异常类型检查 +* @param const UINT16 wTrainId 列车ID +* @param const UINT8 chTrainFailureType 列车故障类型 +* @return CI_ERROR 当前故障仍存在 +* CI_SUCCESS 当前故障不存在 +* by cgh 20260206 +*/ +static UINT8 TrainFailureTypeCheck(const UINT16 wTrainId, const UINT8 chTrainFailureType) +{ + UINT8 chRtn = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 chTrainState = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if ((TRAIN_SUM_MAX > wBufIndex) && (0U < wBufIndex) && ((PA_TYPE_DA_TG == chTrainFailureType) || (PA_TYPE_DA_TSM == chTrainFailureType) || (PA_TYPE_DA_WZX == chTrainFailureType))) + { + if (PA_TYPE_DA_TG == chTrainFailureType) + { + chTrainState = GetTrainDerailment(wTrainId); + + if (TRAIN_DERAIL_NO != chTrainState) + { + ; /*故障仍存在*/ + } + else + { + chRtn = CI_SUCCESS; + } + } + else if (PA_TYPE_DA_TSM == chTrainFailureType) + { + chTrainState = GetTrainEscapeDoorState(wTrainId); + + if (TRAIN_ESCAPE_DOOR_NOT_OPEN != chTrainState) + { + ; /*故障仍存在*/ + } + else + { + chRtn = CI_SUCCESS; + } + } + else + { + chTrainState = GetTrainIntegrityState(wTrainId); + + if (TRAIN_INTEGRITY_NOT_LOST != chTrainState) + { + ; /*故障仍存在*/ + } + else + { + chRtn = CI_SUCCESS; + } + } + } + else + { + ; /*返回失败*/ + } + + return chRtn; +} + diff --git a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h index 10310d5..bdd371e 100644 --- a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h +++ b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h @@ -10,6 +10,8 @@ #define EA_MODE_PLATION 0x33u /* 防护区域建立方式:两站一区间含站台 */ #define EA_STATION_MODE_DIS 0x01u /* 站台防护区域建立方式:按距离 */ #define EA_STATION_MODE_PLAT 0x02u /* 站台防护区域建立方式:仅站台 */ +#define DA_MODE_DATA_CONFIG 0x01u /* 列车状态异常防护分区建立方式:按数据配置 */ +#define DA_MODE_DIS 0x02u /* 列车状态异常防护分区建立方式:按距离建立 */ #define EA_OUT_ONE 1u /* 防护区域按距离计算(需要向上取) */ #define EA_OUT_TWO 2u /* 防护区域仅站台(站台包含防护区域) */ @@ -18,12 +20,15 @@ #define EA_OUT_FIVE 5u /* 两站一区间不需要添加区间关联站台 */ #define EA_OUT_SIX 6u /* 两站一区间需要添加区间及两侧关联站台 */ #define EA_OUT_SEVEN 7u /* 仅出入段线特殊防护区域 */ +#define EA_OUT_EIGHT 8u /* 列车状态异常防护分区按数据配置建立,可以在数据中找到 */ #define EA_DST_ALLOWED_YES 0x55u /* 跨控区时,目标TIOC允许 */ #define EA_DST_ALLOWED_NO 0xaau /* 跨控区时,目标TIOC不允许 */ -#define PA_TYPE_EA 0x55u /* 区间疏散防护区域 */ -#define PA_TYPE_DA 0xaau /* 脱轨防护区域 */ +#define PA_TYPE_EA 0x55u /* 区间疏散防护区域 */ +#define PA_TYPE_DA_TG 0xaau /* 脱轨防护区域 */ +#define PA_TYPE_DA_TSM 0x5au /* 逃生门防护区域 */ +#define PA_TYPE_DA_WZX 0xa5u /* 列车完整性防护区域 */ typedef struct { @@ -63,10 +68,11 @@ typedef struct UINT8 chSrcTiocId; /* 疏散区域跨控区时,源TIOC编号 */ UINT8 chDstTiocId; /* 疏散区域跨控区时,目标TIOC编号 */ UINT8 chDstAllowed; /* 疏散区域跨控区时,目标TIOC允许状态 */ - UINT8 chPaType; /* 防护区域类型:0x55区间疏散防护区域;0xaa脱轨防护区域 */ + UINT8 chPaType; /* 防护区域类型:0x55区间疏散防护区域;0xaa脱轨防护区域;0X5A逃生门状态防护分区; 0XA5列车完整性状态防护分区 */ UINT8 chEaConfigId; /* 区间疏散方式为两站一区间时,对应的防护区间ID 不向相邻联锁与车发送*/ UINT8 chEaAreaLinkType; /* 防护区域上下行区域类型*/ UINT32 dwEaBuildCycNum; /*疏散建立时源Tioc的周期号*/ + UINT32 dwEaBuildMyCycNum; /*疏散建立时本Tioc的周期号*/ }EaDataStru, *pEaData; @@ -206,21 +212,21 @@ extern void NeighborGoodEaProc(UINT8 chTiocId); extern UINT8 IsLinkInEa(const UINT16 wLinkId); /** -* @brief 脱轨防护区域取消处理 +* @brief 列车状态异常防护区域取消处理 * @param 无 * @return 无 */ -extern void DaAtsCancleProc(void); +void DaAtsCancleProc(void); /** -* @brief 取消脱轨防护区首次处理 +* @brief 取消列车状态异常防护区域首次处理 * @param 无 * @return 无 */ extern void DaAtsCancleFst(void); /** -* @brief 取消脱轨防护区二次处理 +* @brief 取消列车状态异常防护区域二次处理 * @param 无 * @return 无 */ @@ -268,6 +274,20 @@ extern UINT8 EaGetAcNum(const UINT8 chIndex); */ extern UINT16 * EaGetAcId(const UINT8 chIndex); +/** +* @brief 获取防护区域逻辑区段数量 +* @param const UINT8 chIndex 防护区域索引 +* @return 防护区域逻辑区段数量 +*/ +extern UINT8 EaGetLogNum(const UINT8 chIndex); + +/** +* @brief 获取防护区域逻辑区段编号 +* @param const UINT8 chIndex 防护区域索引 +* @return 防护区域逻辑区段编号 +*/ +extern UINT16 * EaGetLogId(const UINT8 chIndex); + /** * @brief 判断逻辑区段是否处于防护区域内 * @param const UINT16 wLgcId 逻辑区段编号 @@ -327,6 +347,13 @@ UINT16 GetAxisBelongTiocAllLine(const UINT16 wAcId); */ UINT32 EaGetBuildCycNum(const UINT8 chIndex); +/* +* 功能描述:获取防护区域建立时本RC的周期号 +* 参数说明:UINT8 chIndex 防护区域索引 +* 返回值 : UINT32 防护区域建立时本RC的周期号 +*/ +UINT32 EaGetBuildMyCycNum(const UINT8 chIndex); + /* * 功能描述:根据防护区域编号获取防护区域的索引 * 参数说明:UINT16 wEaId 防护区域编号 diff --git a/TSCP/src/APP/ciapp/Train/TrainDataManage.c b/TSCP/src/APP/ciapp/Train/TrainDataManage.c index b8161de..21f8569 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDataManage.c +++ b/TSCP/src/APP/ciapp/Train/TrainDataManage.c @@ -29,9 +29,6 @@ TrainAtsScreenStru gszAtsScreenInfo[TRAIN_SUM_MAX] = { 0u }; UINT8 gFlyTrainCnt = 0U; /*飞车宕机报警列车数量*/ TrainFlyProtectStru gFlyTrainData[SHUT_DOWN_TRAIN_NUMMAX] = { 0U };/*飞车宕机报警列车数据*/ -UINT8 gNvramFlyTrainCnt = 0U; /*使用NVRAM且位置监督无效的飞车列车数量*/ -UINT16 gNvramFlyTrainId[SHUT_DOWN_TRAIN_NUMMAX] = { 0U }; /*飞使用NVRAM且位置监督无效的飞车列车ID*/ - /** * @brief 根据列车非安全信息计算列车安全位置函数 * @param UINT16 trainID @@ -261,6 +258,8 @@ UINT8 TrainDataModuleInit(void) gstTrainInfo[chCycle].wAtsLgcStation = 0u; gstTrainInfo[chCycle].wNextTioc = 0u; gstTrainInfo[chCycle].chDerailment = TRAIN_DERAIL_NO; + gstTrainInfo[chCycle].chIntegrityState = TRAIN_INTEGRITY_NOT_LOST; + gstTrainInfo[chCycle].chEscapeDoorState = TRAIN_ESCAPE_DOOR_NOT_OPEN; gstTrainInfo[chCycle].chNvramPosFlag = TRAIN_NVRAM_POS_FLAG_YES; gstTrainInfo[chCycle].strHeadTrainLocData.wHeadVobcId = UINT32_MAX; @@ -2300,7 +2299,7 @@ static void CalHeadTrainSafePosFromUnSafe(UINT16 wTrainId, UINT32 dwHeadDistance } else if ((TRAIN_NVRAM_POS_FLAG_NO != chNvramPosFlag) && (TRAIN_SLEEP_YES != chSleepStt) && (CI_SUCCESS == chTempCheckFlag) && (wTrainHeadLink == Temp_TrainSafeLoc.wHeadLink)) { - /*非休眠列车完全在休眠唤醒轨使用NVRAM位置,延伸到计轴区段终点*/ + /*非休眠列车完全在休眠唤醒轨使用NVRAM位置,在大前前方计轴端点往前延伸*/ wHeadAcId = GetLinkBelongAcId(wTrainHeadLink); chTempCheckFlag = elm_PrepareACLoc(wHeadAcId, chDir, &tmpHeadACLoc); @@ -2431,7 +2430,7 @@ static void CalTailTrainSafePosFromUnSafe(UINT16 trainID, UINT32 tailDistance, } else if ((TRAIN_NVRAM_POS_FLAG_NO != chNvramPosFlag) && (TRAIN_SLEEP_YES != chSleepStt) && (CI_SUCCESS == chTempCheckFlag) && (trainTailLink == strTrainSafeLoc.wTailLink)) { - /*非休眠列车完全在休眠唤醒轨使用NVRAM位置,延伸到计轴去段终点*/ + /*非休眠列车完全在休眠唤醒轨使用NVRAM位置,在小后前方计轴端点往前延伸*/ wTailAcId = GetLinkBelongAcId(trainTailLink); chTempCheckFlag = elm_PrepareACLoc(wTailAcId, trainDirection, &tmpTailACLoc); @@ -2520,11 +2519,10 @@ static void CalTrainSafePosition(void) UINT8 chSss = 0u; UINT8 chResult = CI_ERROR; UINT32 dwTailDistance = 0U;/*退行距离*/ - UINT8 chTrainIsSwTrackFlag = CI_ERROR;/*列车休眠唤醒轨标志*/ - - wTailDis = GetBackProtectMaxLen(); + UINT32 dwCiAndVobcTransBadEnsureTime = 0U; /*车地通信中断时间*/ + UINT8 chIntegrityState = 0U; /*列车完整性状态*/ - /*遍历所有列车*/ + /*遍历所有列车*/ for (trainCycle = 0u; trainCycle < TRAIN_SUM_MAX; trainCycle++) { wTrainId = GetTrainId(trainCycle); @@ -2551,18 +2549,28 @@ static void CalTrainSafePosition(void) if (CI_SUCCESS == chFunRtn) { - /*列车的通信协议延迟时间计算*/ - dwDelayTime = GetTrainMsgDelayTime(wTrainId); - trainRedundancy = (FLOAT64)dwDelayTime / 1000.0; + chIntegrityState = GetTrainIntegrityState(wTrainId); + if (TRAIN_INTEGRITY_NOT_LOST != chIntegrityState) + { + dwCiAndVobcTransBadEnsureTime = GetCiAndVobcTransBadEnsureTime(); + trainRedundancy = (FLOAT64)dwCiAndVobcTransBadEnsureTime / 1000.0; + } + else + { + /*列车的通信协议延迟时间计算*/ + dwDelayTime = GetTrainMsgDelayTime(wTrainId); + trainRedundancy = (FLOAT64)dwDelayTime / 1000.0; + } + gradeAcc = (FLOAT64)strTrainInfo.WorstGrade / 10.0; chSss = GetTrainStopSteadyState(wTrainId); - chTrainIsSwTrackFlag = CheckTrainIsSwTrack(wTrainId); + chSleepState = GetTrainSleepState(wTrainId); - if ((TRAIN_SS_YES == chSss) && (CI_SUCCESS == chTrainIsSwTrackFlag)) + if ((TRAIN_SS_YES == chSss) && (TRAIN_SLEEP_YES == chSleepState)) { - /*列车在休眠唤醒轨停准停稳后,车头向前计算距离为0*/ + /*休眠车停准停稳,当存在通信延时,车头向前计算距离为0*/ dwHeadDistance = 0; } else @@ -2583,6 +2591,7 @@ static void CalTrainSafePosition(void) /*by cgh 20240417 列车安全位置计算,当判断列车速度方向向后且非停准停稳,加退行包络不区分站台区间;*/ if ((TRAIN_SPEED_FRONT != chTrainSpeedDir) && (TRAIN_SS_YES != chSss)) { + wTailDis = strTrainInfo.StationTrackDistance; if (wTailDis < (UINT32)dwHeadDistance) { /* 最大退行防护距离 */ @@ -2742,6 +2751,9 @@ void ClearTrainInfo(UINT16 wTrainId) gstTrainInfo[wBufIndex].wAtsLgcStation = 0u; gstTrainInfo[wBufIndex].wNextTioc = 0u; gstTrainInfo[wBufIndex].chDerailment = TRAIN_DERAIL_NO; + gstTrainInfo[wBufIndex].chIntegrityState = TRAIN_INTEGRITY_NOT_LOST; + gstTrainInfo[wBufIndex].chEscapeDoorState = TRAIN_ESCAPE_DOOR_NOT_OPEN; + gstTrainInfo[wBufIndex].chNvramPosFlag = TRAIN_NVRAM_POS_FLAG_YES; gstTrainInfo[wBufIndex].strHeadTrainLocData.wHeadVobcId = UINT32_MAX; @@ -3402,37 +3414,34 @@ static UINT8 IsTrainInSafeArea(UINT16 wLinkId, UINT32 dwOffset) UINT8 chRtn = CI_ERROR; UINT16 wSwitchId = 0u; UINT8 chSwitchState = SWITCH_POSITION_SIKAI; - UINT16 szLgcIdBuf[POINT_BELONG_LGC_MAX] = { 0u }; + UINT16 *pSzLgcIdBuf = NULL; UINT8 chLgcNum = 0u; - struct_PathPoint strPoint = { 0u }; UINT8 chLgcIndex = 0u; UINT16 wPhyId = 0u; UINT8 chPhyState = SECTION_OCCUPY_YES; + UINT16 wAxleSecId = 0u; /* 入参检查 */ chRtn = CheckLinkValid(wLinkId, dwOffset); if (CI_SUCCESS == chRtn) { - strPoint.wLinkId = wLinkId; - strPoint.dwOffset = dwOffset; - chLgcNum = GetPointBelongLogSecEx(strPoint, szLgcIdBuf); - if ((0u == chLgcNum) || (POINT_BELONG_LGC_MAX < chLgcNum)) - {/* 获取逻辑区段失败,直接返回失败 */ + /*根据道岔状态查询点对应的计轴区段ID*/ + wAxleSecId = GetLinkBelongAcId(wLinkId); + /*获取计轴区段包含的逻辑区段*/ + chLgcNum = GetAxisSecLogSectionSum(wAxleSecId); + pSzLgcIdBuf = GetAxisSecLogSectionIdBuf(wAxleSecId); + if ((0u == chLgcNum) || (NULL == pSzLgcIdBuf)) + { chRtn = CI_ERROR; } else - { - ; - } - - if (CI_SUCCESS == chRtn) { for (chLgcIndex = 0u; chLgcIndex < chLgcNum; chLgcIndex++) {/* 遍历逻辑区段,遍历逻辑区段包含道岔,如果岔区占用且四开,返回失败 */ - wPhyId = GetLgcSecRelativePhySecId(szLgcIdBuf[chLgcIndex]); + wPhyId = GetLgcSecRelativePhySecId(pSzLgcIdBuf[chLgcIndex]); chPhyState = GetPhySecCurOccupyState(wPhyId); - chSwitchNum = GetLogicSecSwitchSum(szLgcIdBuf[chLgcIndex]); - pSwitchBuff = GetLogicSecSwitchIdStru(szLgcIdBuf[chLgcIndex]); + chSwitchNum = GetLogicSecSwitchSum(pSzLgcIdBuf[chLgcIndex]); + pSwitchBuff = GetLogicSecSwitchIdStru(pSzLgcIdBuf[chLgcIndex]); if (NULL == pSwitchBuff) { chRtn = CI_ERROR; @@ -3470,10 +3479,6 @@ static UINT8 IsTrainInSafeArea(UINT16 wLinkId, UINT32 dwOffset) } } } - else - { - ; - } } else { @@ -4210,7 +4215,9 @@ void SetTrainMode(const UINT16 wTrainId, const UINT8 chMode) || (TRAIN_MODE_EUM == chMode) || (TRAIN_MODE_RD == chMode) || (TRAIN_MODE_AR == chMode) || (TRAIN_MODE_FAM == chMode) || (TRAIN_MODE_CAM == chMode) || (TRAIN_MODE_RRM == chMode) - || (TRAIN_MODE_VCM == chMode))) + || (TRAIN_MODE_VCM == chMode)|| (TRAIN_MODE_FOR == chMode) + || (TRAIN_MODE_REV == chMode)|| (TRAIN_MODE_S_B == chMode) + || (TRAIN_MODE_SD == chMode))) { gstTrainInfo[wBufIndex].chTrainModel = chMode; } @@ -4637,7 +4644,7 @@ static void TrainDynProc(void) debug_infor_printf((const)"Train:%x dytest failure:chSleepLinkCheckFlag Error.\n", wTrainId); } else if ((PHYSICAL_SECTION_FLOCK_NO != chFlockState) - && ((FUNC_SWITCH_OFF != cAwakeCheckSpksSwitch) || ((FUNC_SWITCH_OFF == cAwakeCheckSpksSwitch) && (PHY_SEC_FLOCK_TYPE_SPKS != cPhySecFLockType)))) + && ((FUNC_SWITCH_OFF != cAwakeCheckSpksSwitch) || ((FUNC_SWITCH_OFF == cAwakeCheckSpksSwitch) && (SEC_FLOCK_TYPE_SPKS != cPhySecFLockType)))) {/* 物理区段封锁且(检查SPKS封锁或(不检查SPKS封锁且非SPKS封锁类型)),反馈不同意 */ SetTrainDynRpl(wTrainId, TRAIN_DYN_RPL_REFUSE); debug_infor_printf((const)"Train:%x dytest refuse: phy flock.\n", wTrainId); @@ -6505,7 +6512,7 @@ void SetTrainRrmReson(const UINT16 wTrainId, const UINT8 chReson) if ((TRAIN_SUM_MAX > wBufIndex) && ((TRAIN_RRM_RESON_02 == chReson) || (TRAIN_RRM_RESON_FF == chReson) || ((TRAIN_RRM_RESON_05 <= chReson) && (TRAIN_RRM_RESON_0E >= chReson)) - || ((TRAIN_RRM_RESON_15 <= chReson) && (TRAIN_RRM_RESON_17 >= chReson)))) + || ((TRAIN_RRM_RESON_15 <= chReson) && (TRAIN_RRM_RESON_18 >= chReson)))) { gstTrainInfo[wBufIndex].chRrmReson = chReson; } @@ -7639,7 +7646,7 @@ void SetTrainOtherRcRrmReson(const UINT16 wTrainId, const UINT8 chReson) if ((TRAIN_SUM_MAX > wBufIndex) && ((TRAIN_RRM_RESON_02 == chReson) || (TRAIN_RRM_RESON_FF == chReson) || ((TRAIN_RRM_RESON_05 <= chReson) && (TRAIN_RRM_RESON_0E >= chReson)) - || ((TRAIN_RRM_RESON_15 <= chReson) && (TRAIN_RRM_RESON_17 >= chReson)))) + || ((TRAIN_RRM_RESON_15 <= chReson) && (TRAIN_RRM_RESON_18 >= chReson)))) { gstTrainInfo[wBufIndex].chRrmResonFromOtherRc = chReson; } @@ -9781,7 +9788,6 @@ void TrainPosMonitorProc(void) UINT8 cPreMonitorState = TRAIN_POS_MONITOR_INVALID; /*上一周期列车位置监督状态*/ UINT8 cMonitorFailState = TRAIN_POS_MONITOR_INVALID; /*检查失败后需要设置的监督状态*/ UINT8 chAgTrainLeaveAgCheck = 0U; - UINT8 chNvramFlag = 0U; for (cTrainIndex = 0U; cTrainIndex < TRAIN_SUM_MAX; cTrainIndex++) { @@ -9835,10 +9841,9 @@ void TrainPosMonitorProc(void) { /*未设置列车ID,不处理*/ } - chNvramFlag = GetTrainNvramPosFlag(wTrainId); + /*2.设置列车位置监督标志*/ - if (((TRAIN_POS_MONITOR_DIFF == cMonitorFailState) || (TRAIN_POS_MONITOR_DIFF == cPreMonitorState)) - && (TRAIN_NVRAM_POS_FLAG_NO != chNvramFlag)) + if ((TRAIN_POS_MONITOR_DIFF == cMonitorFailState) || (TRAIN_POS_MONITOR_DIFF == cPreMonitorState)) { SetTrainPosMonitorState(wTrainId, TRAIN_POS_MONITOR_DIFF); /*列车完全不在监督link或上一周期监督状态是位置不一致,设置监督位置不一致*/ } @@ -10130,6 +10135,18 @@ UINT8 ZXorSCXTrainPosMonitorCheck(const UINT16 wTrainId, UINT16* pMonitorLinkId, } } + /*检查列车监督位置是否空闲*/ + cFuncRet = TrainPosMonitorIdleCheck(wTrainId); + if (CI_SUCCESS == cFuncRet) + { + /*监督位置占用,维持原检查结果,不处理*/ + } + else + { + cMonitorFailState = TRAIN_POS_MONITOR_INVALID; + cRetVal = CI_ERROR; /*监督位置空闲,返回失败,设置监督无效*/ + } + *pMonitorFailState = cMonitorFailState; } else @@ -10409,9 +10426,6 @@ UINT8 AGTrainPosMonitorOccCheck(const UINT16 wAGLinkId) UINT16 wDGLinkId = 0U; /*DGlink*/ UINT16 wDGAxleSecId = 0U; UINT8 cDGAxleSecOccState = AXIS_SECTION_OCCUPY_YES; /*DG计轴区段采集占用状态*/ - UINT16 wBGPhySecId = 0U; - UINT8 cBGPreOccState = 0U; /*BG之前采集占用状态*/ - UINT8 cBGCurOccState = 0U; /*BG当前采集占用状态*/ wLinkIndex = GetLinkIndexById(wAGLinkId); if ((0U < wLinkIndex) && (LINK_SUM_MAX > wLinkIndex)) @@ -10457,29 +10471,17 @@ UINT8 AGTrainPosMonitorOccCheck(const UINT16 wAGLinkId) } else { - /*无CG,检查DG+BG的采集占用状态*/ + /*无CG,仅检查DG的采集占用状态*/ wDGAxleSecId = GetLinkBelongAcId(wDGLinkId); cDGAxleSecOccState = GetAxisOccupyState(wDGAxleSecId); /*获取DG计轴区段采集占用状态*/ if (AXIS_SECTION_OCCUPY_NO == cDGAxleSecOccState) { - /*DG无占用,检查BG占用状态*/ - wBGPhySecId = GetLinkRelatedPhySec(wAGRelBGLinkId); - cBGPreOccState = GetPhySecPreOccupyState(wBGPhySecId); - cBGCurOccState = GetPhySecCurOccupyState(wBGPhySecId); - if ((SECTION_OCCUPY_NO == cBGPreOccState) && (SECTION_OCCUPY_YES == cBGCurOccState)) - { - cRetVal = CI_ERROR; /*BG由空闲到占用,返回失败*/ - } - else - { - cRetVal = CI_SUCCESS; /*DG无采集占用,返回成功*/ - } + cRetVal = CI_SUCCESS; /*DG无采集占用,返回成功*/ } else { cRetVal = CI_ERROR; /*DG存在采集占用,返回失败*/ } - } } else @@ -10622,6 +10624,18 @@ UINT8 CLDTrainPosMonitorCheck(const UINT16 wTrainId, UINT16* pMonitorLinkId, UIN } } + /*检查列车监督位置是否空闲*/ + cFuncRet = TrainPosMonitorIdleCheck(wTrainId); + if (CI_SUCCESS == cFuncRet) + { + /*监督位置占用,维持原检查结果,不处理*/ + } + else + { + cMonitorFailState = TRAIN_POS_MONITOR_INVALID; + cRetVal = CI_ERROR; /*监督位置空闲,返回失败,设置监督无效*/ + } + if (CI_SUCCESS == cRetVal) { *pMonitorLinkId = wTrainPosMonitorInLink; /*传出位置监督有效时的link*/ @@ -11426,6 +11440,52 @@ UINT32 GetTrainJumpBackApplySN(const UINT16 wTrainId) return dwRetVal; } +/* +* 功能描述:检查列车位置监督区段是否空闲 +* 参数说明:const UINT16 wTrainId 列车ID +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.08.08 +*/ +UINT8 TrainPosMonitorIdleCheck(const UINT16 wTrainId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wTrainIndex = 0U; + UINT16 wTrainPosMonitorInLink = 0U; /*列车位置监督状态有效时所处link*/ + UINT16 wTrainPosMonitorPhySec = 0U; /*列车位置监督所处物理区段*/ + UINT8 cPhySecOccState = 0U; + + wTrainIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wTrainIndex) + { + wTrainPosMonitorInLink = GetTrainPosMonitorInLink(wTrainId); + if (0U != wTrainPosMonitorInLink) + { + wTrainPosMonitorPhySec = GetLinkRelatedPhySec(wTrainPosMonitorInLink); + cPhySecOccState = GetPhySecCurMergeState(wTrainPosMonitorPhySec); + + if (SECTION_OCCUPY_YES == cPhySecOccState) + { + cRetVal = CI_SUCCESS; /*返回成功*/ + } + else + { + cRetVal = CI_ERROR; /*返回失败*/ + } + } + else + { + cRetVal = CI_SUCCESS; /*监督无效,不处理,返回成功*/ + } + } + else + { + cRetVal = CI_ERROR; /*入参检查失败,返回失败*/ + } + + return cRetVal; +} + /* * 功能描述: 清除列车安全车头方向 * 参数说明: const UINT16 wTrainId, 列车ID @@ -11469,40 +11529,165 @@ void ClearTrainSafeTailDir(const UINT16 wTrainId) } /* -* 功能描述: 检查列车是否完全在同一休眠唤醒轨 -* 参数说明: const UINT16 wTrainId, 列车ID -* 返回值 : CI_ERROR: 列车不完全在同一休眠唤醒轨 -* CI_SUCCESS: 列车完全在同一休眠唤醒轨 -* by cgh 20250915 +* 功能描述:获取与本集中区通信良好的列车数量和ID +* 参数说明:UINT16 pTrainId[TRAIN_SUM_MAX] 通信的列车ID数组(出参) +* 返 回 值:255 获取失败 +* >255 通信的列车数量 +* Created By LQ 2026.01.23 */ -UINT8 CheckTrainIsSwTrack(const UINT16 wTrainId) +UINT8 GetCommGoodTrainInfo(UINT16 pTrainId[TRAIN_SUM_MAX]) { - UINT8 chRetVal = CI_ERROR; + UINT8 cRetVal = TRAIN_SUM_MAX; + UINT16 wTrainSum = 0U; /*列车数量*/ + UINT16 ii = 0U; + UINT16 wTrainId = 0U; /*列车ID*/ + UINT8 cCommState = 0U; /*列车通信状态*/ + UINT8 cCommTrainSum = 0U; /*通信的列车数量*/ + + if (NULL != pTrainId) + { + wTrainSum = GetTrainSum(); + + for (ii = 0U; ii < wTrainSum; ii++) + { + wTrainId = GetTrainId(ii); + cCommState = GetTrainTransitmitStat(wTrainId); /** 获取列车通信状态*/ + + if (TRAIN_COMM_STATE_GOOD == cCommState) + { + if (TRAIN_SUM_MAX > wTrainSum) + { + pTrainId[cCommTrainSum] = wTrainId; /*记录通信良好的列车ID*/ + cCommTrainSum++; + } + else + { + break; /*数量超限,停止遍历*/ + } + } + else + { + /*继续遍历查找*/ + } + } + + cRetVal = cCommTrainSum; + } + else + { + /*入参非法,返回255*/ + } + + return cRetVal; +} + +/* +* 功能描述:判断列车是否完全在本控区 +* 参数说明:UINT16 wTrainId 列车ID +* UINT8* pAcNum 列车安全位置覆盖的计轴区段数量(出参) +* UINT16 pAcId[MAX_AC_IN_TRAIN] 列车安全位置覆盖的计轴区段ID数组(出参) +* 返 回 值:0 列车不完全在本控区 +* 1 列车完全在本控区 +* Created By LQ 2026.01.23 +*/ +UINT8 CheckTrainIsCompletelyLocal(UINT16 wTrainId, UINT8* pAcNum, UINT16 pAcId[MAX_AC_IN_TRAIN]) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cLocalCiId = 0U; + UINT16 wBufIndex = 0U; + LOD_STRU strStart = { 0U }; + LOD_STRU strEnd = { 0u }; + UINT8 cAcNum = 0U; /*车身占用的计轴区段数量*/ + UINT16 szAcId[MAX_AC_IN_TRAIN] = { 0U }; /*车身占用的计轴区段ID数组*/ + UINT8 ii = 0U; + UINT8 cAcBelongCiId = 0U; /*计轴区段所属CI*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) && (NULL != pAcNum) && (NULL != pAcId)) + { + /*获取列车安全位置*/ + strEnd.Lnk = GetTrainSafeHeadLink(wTrainId); + strEnd.Off = GetTrainSafeHeadOffset(wTrainId); + strEnd.Dir = GetTrainSafeHeadDir(wTrainId); + strStart.Lnk = GetTrainSafeTailLink(wTrainId); + strStart.Off = GetTrainSafeTailOffset(wTrainId); + strStart.Dir = GetTrainSafeTailDir(wTrainId); + + /*获取列车大前至小后车身占压的计轴区段,检查所有计轴区段是否均属于本控区*/ + cAcNum = elm_PrepareACBtwPoints(strStart, strEnd, szAcId); + for (ii = 0U; ii < cAcNum; ii++) + { + cAcBelongCiId = (UINT8)GetAxisBelongTioc(szAcId[ii]); + if ((cAcBelongCiId == cLocalCiId) && (0U != cAcBelongCiId)) + { + /*继续遍历检查*/ + } + else + { + break; + } + } + + if ((0U != cAcNum) && (ii == cAcNum)) + { + *pAcNum = cAcNum; /*传出列车安全位置覆盖的计轴区段信息*/ + (void)CommonMemCpy((void*)(pAcId), (UINT32)(sizeof(UINT16) * MAX_AC_IN_TRAIN), (const void*)(szAcId), (UINT32)(sizeof(UINT16) * MAX_AC_IN_TRAIN)); + cRetVal = CI_SUCCESS; /*所有计轴区段均属于本控区,返回1*/ + } + else + { + cRetVal = CI_ERROR; /*存在计轴区段不属于本控区,返回0*/ + } + } + else + { + /*入参非法,返回0*/ + } + + return cRetVal; +} + +/* +* 功能描述: 设置指定列车完整性状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* const UINT8 chState 列车完整性状态 +* 返回值 : 无 +* by cgh 20260205 +*/ +void SetTrainIntegrityState(const UINT16 wTrainId, const UINT8 chState) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if ((TRAIN_SUM_MAX > wBufIndex) + && ((TRAIN_INTEGRITY_LOST == chState) || (TRAIN_INTEGRITY_NOT_LOST == chState))) + { + gstTrainInfo[wBufIndex].chIntegrityState = chState; + } + else + { + ; + } +} + +/* +* 功能描述: 获取指定列车完整性状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* 返回值 : 列车完整性状态 +* by cgh 20260205 +*/ +UINT8 GetTrainIntegrityState(const UINT16 wTrainId) +{ + UINT8 chRetVal = TRAIN_INTEGRITY_LOST; UINT16 wBufIndex = 0U; - UINT8 chSleepFlag = 0U; /*休眠轨判断标志*/ wBufIndex = GetTrainBufIndex(wTrainId); if (TRAIN_SUM_MAX > wBufIndex) { - if ((gstTrainInfo[wBufIndex].wTrainMinTailLink == gstTrainInfo[wBufIndex].wTrainMaxHeadLink) - && (0U < gstTrainInfo[wBufIndex].wTrainMaxHeadLink) && (LINK_SUM_MAX > gstTrainInfo[wBufIndex].wTrainMaxHeadLink)) - { - chSleepFlag = IsLinkSwTrack(gstTrainInfo[wBufIndex].wTrainMaxHeadLink); - - if (CI_SUCCESS == chSleepFlag) - { - chRetVal = CI_SUCCESS; - } - else - { - ; - } - } - else - { - ; /*不完全在同一休眠唤醒轨*/ - } + chRetVal = gstTrainInfo[wBufIndex].chIntegrityState; } else { @@ -11513,123 +11698,50 @@ UINT8 CheckTrainIsSwTrack(const UINT16 wTrainId) } /* -* 功能描述: 检查列车是否为可追踪UT场景 -* 参数说明: const UINT16 wEnvelopeID, 包络ID -* 返回值 : CI_ERROR: 否 -* CI_SUCCESS: 是 -* by cgh 20250915 +* 功能描述: 设置指定列车逃生门状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* const UINT8 chState 列车逃生门状态 +* 返回值 : 无 +* by cgh 20260205 */ -UINT8 CheckTrainIsFollowUt(const UINT16 wEnvelopeID) +void SetTrainEscapeDoorState(const UINT16 wTrainId, const UINT8 chState) { - UINT8 chRetVal = CI_ERROR; - UINT8 chNoCGFollowUtSwitch = 0U; - const EnvelopeStruct* pEnvelop = NULL; - UINT8 chTrainHeadRelAbgAttr = 0U; /*列车头关联ACG属性*/ - UINT8 chTrainTailRelAbgAttr = 0U; /*列车尾关联ACG属性*/ + UINT16 wBufIndex = 0U; - chNoCGFollowUtSwitch = GetNoCGFollowUtSwitch(); - if (FUNC_SWITCH_ON == chNoCGFollowUtSwitch) + wBufIndex = GetTrainBufIndex(wTrainId); + + if ((TRAIN_SUM_MAX > wBufIndex) + && ((TRAIN_ESCAPE_DOOR_OPEN == chState) || (TRAIN_ESCAPE_DOOR_NOT_OPEN == chState))) { - pEnvelop = elm_GetEnvelopeInfoPtr(wEnvelopeID); - - if (NULL != pEnvelop) - { - chTrainHeadRelAbgAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->endPos.Lnk); - chTrainTailRelAbgAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->startPos.Lnk); - - if ((LINK_REL_PHYSEC_AG == chTrainHeadRelAbgAttr) || (LINK_REL_PHYSEC_BG == chTrainHeadRelAbgAttr) - || (LINK_REL_PHYSEC_AG == chTrainTailRelAbgAttr) || (LINK_REL_PHYSEC_BG == chTrainTailRelAbgAttr)) - { - chRetVal = CI_SUCCESS; - } - else - { - ; /*完全不在ABG*/ - } - } - else - { - - } + gstTrainInfo[wBufIndex].chEscapeDoorState = chState; } else { - ; /*功能开关关闭*/ + ; + } +} + +/* +* 功能描述: 获取指定列车逃生门状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* 返回值 : 列车逃生门状态 +* by cgh 20260205 +*/ +UINT8 GetTrainEscapeDoorState(const UINT16 wTrainId) +{ + UINT8 chRetVal = TRAIN_ESCAPE_DOOR_OPEN; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + chRetVal = gstTrainInfo[wBufIndex].chEscapeDoorState; + } + else + { + ; } return chRetVal; } - -/* -* 功能描述:获取使用NVRAM且位置监督无效的飞车ID -* 参数说明:UINT8 chIndex 索引 -* 返 回 值:UINT16* gNvramFlyTrainId 使用NVRAM且位置监督无效的飞车ID -* Created By LQ 2025.09.15 -*/ -UINT16* GetNvramFlyProtectId(void) -{ - return gNvramFlyTrainId; -} - -/* -* 功能描述:获取使用NVRAM且位置监督无效的飞车数量 -* 参数说明:无 -* 返 回 值:UINT8 gNvramFlyTrainCnt 使用NVRAM且位置监督无效的飞车数量 -* Created By LQ 2025.09.15 -*/ -UINT8 GetNvramFlyProtectNum(void) -{ - return gNvramFlyTrainCnt; -} - -/** -* 功能描述:添加使用NVRAM且位置监督无效的飞车数据 -* 参数说明:UINT16 wTrainID 列车ID -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void AddNvramFlyingTrain(UINT16 wTrainID) -{ - UINT8 ii = 0U; - - if (SHUT_DOWN_TRAIN_NUMMAX > gNvramFlyTrainCnt) - { - for (ii = 0U; ii < gNvramFlyTrainCnt; ii++) - { - if (gNvramFlyTrainId[ii] == wTrainID) - { - break; /*已存在,停止遍历*/ - } - else - { - /*继续遍历比较*/ - } - } - - if (ii == gNvramFlyTrainCnt) - { - gNvramFlyTrainId[gNvramFlyTrainCnt] = wTrainID; - gNvramFlyTrainCnt++; - } - else - { - ; /*已添加,不再重复添加*/ - } - } - else - { - ; /*不添加*/ - } -} - -/** -* 功能描述:清除使用NVRAM且位置监督无效的飞车数据 -* 参数说明:无 -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void ClearNvramFlyingTrain(void) -{ - gNvramFlyTrainCnt = 0U; - (void)CommonMemSet(gNvramFlyTrainId, (UINT32)(sizeof(UINT16) * SHUT_DOWN_TRAIN_NUMMAX), 0U, (UINT32)(sizeof(UINT16) * SHUT_DOWN_TRAIN_NUMMAX)); -} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Train/TrainDataManage.h b/TSCP/src/APP/ciapp/Train/TrainDataManage.h index ec183b6..6391439 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDataManage.h +++ b/TSCP/src/APP/ciapp/Train/TrainDataManage.h @@ -250,7 +250,8 @@ typedef struct S_TrainInfoStru UINT16 wAtsLgcStation; /*下一逻辑站台*/ UINT16 wNextTioc; /*下一TIOC编号,用作RRM*/ UINT8 chDerailment; /*脱轨状态*/ - + UINT8 chIntegrityState; /*完整性状态*/ + UINT8 chEscapeDoorState; /*逃生门状态*/ UINT16 wHeadAxisId; /*前方计轴编号*/ UINT8 wHeadITEResult; /*前方ITE识别结果 0x55:无列车 0xaa:有列车*/ UINT16 wTailAxisId; /*后方计轴编号*/ @@ -311,9 +312,6 @@ extern TrainAtsScreenStru gszAtsScreenInfo[TRAIN_SUM_MAX]; extern UINT8 gFlyTrainCnt; extern TrainFlyProtectStru gFlyTrainData[SHUT_DOWN_TRAIN_NUMMAX]; -extern UINT8 gNvramFlyTrainCnt; /*使用NVRAM且位置监督无效的飞车列车数量*/ -extern UINT16 gNvramFlyTrainId[SHUT_DOWN_TRAIN_NUMMAX]; /*飞使用NVRAM且位置监督无效的飞车列车ID*/ - /*================================================================================== *函数功能:初始化列车信息结构体。 *函数描述:该函数实现列车信息结构体的初始化。 @@ -2530,6 +2528,15 @@ void SetTrainJumpBackApplySN(const UINT16 wTrainId, const UINT32 dwJumpBackSN); */ UINT32 GetTrainJumpBackApplySN(const UINT16 wTrainId); +/* +* 功能描述:检查列车位置监督区段是否空闲 +* 参数说明:const UINT16 wTrainId 列车ID +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2025.08.08 +*/ +UINT8 TrainPosMonitorIdleCheck(const UINT16 wTrainId); + /* * 功能描述: 清除列车安全车头方向 * 参数说明: const UINT16 wTrainId, 列车ID @@ -2547,54 +2554,57 @@ void ClearTrainSafeHeadDir(const UINT16 wTrainId); void ClearTrainSafeTailDir(const UINT16 wTrainId); /* -* 功能描述: 检查列车是否完全在同一休眠唤醒轨 +* 功能描述:获取与本集中区通信良好的列车数量和ID +* 参数说明:UINT16 pTrainId[TRAIN_SUM_MAX] 通信的列车ID数组(出参) +* 返 回 值:255 获取失败 +* >255 通信的列车数量 +* Created By LQ 2026.01.23 +*/ +UINT8 GetCommGoodTrainInfo(UINT16 pTrainId[TRAIN_SUM_MAX]); + +/* +* 功能描述:判断列车是否完全在本控区 +* 参数说明:UINT16 wTrainId 列车ID +* UINT8* pAcNum 列车安全位置覆盖的计轴区段数量(出参) +* UINT16 pAcId[MAX_AC_IN_TRAIN] 列车安全位置覆盖的计轴区段ID数组(出参) +* 返 回 值:0 列车不完全在本控区 +* 1 列车完全在本控区 +* Created By LQ 2026.01.23 +*/ +UINT8 CheckTrainIsCompletelyLocal(UINT16 wTrainId, UINT8* pAcNum, UINT16 pAcId[MAX_AC_IN_TRAIN]); + +/* +* 功能描述: 设置指定列车完整性状态 * 参数说明: const UINT16 wTrainId, 列车ID -* 返回值 : CI_ERROR: 列车不完全在同一休眠唤醒轨 -* CI_SUCCESS: 列车完全在同一休眠唤醒轨 -* by cgh 20250915 +* const UINT8 chState 列车完整性状态 +* 返回值 : 无 +* by cgh 20260205 */ -UINT8 CheckTrainIsSwTrack(const UINT16 wTrainId); +void SetTrainIntegrityState(const UINT16 wTrainId, const UINT8 chState); +/* +* 功能描述: 获取指定列车完整性状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* 返回值 : 列车完整性状态 +* by cgh 20260205 +*/ +UINT8 GetTrainIntegrityState(const UINT16 wTrainId); /* -* 功能描述: 检查列车是否为可追踪UT场景 -* 参数说明: const UINT16 wEnvelopeID, 包络ID -* 返回值 : CI_ERROR: 否 -* CI_SUCCESS: 是 -* by cgh 20250915 +* 功能描述: 设置指定列车逃生门状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* const UINT8 chState 列车逃生门状态 +* 返回值 : 无 +* by cgh 20260205 */ -UINT8 CheckTrainIsFollowUt(const UINT16 wEnvelopeID); +void SetTrainEscapeDoorState(const UINT16 wTrainId, const UINT8 chState); /* -* 功能描述:获取使用NVRAM且位置监督无效的飞车ID -* 参数说明:UINT8 chIndex 索引 -* 返 回 值:UINT16* gNvramFlyTrainId 使用NVRAM且位置监督无效的飞车ID -* Created By LQ 2025.09.15 +* 功能描述: 获取指定列车逃生门状态 +* 参数说明: const UINT16 wTrainId, 列车ID +* 返回值 : 列车逃生门状态 +* by cgh 20260205 */ -UINT16* GetNvramFlyProtectId(void); - -/* -* 功能描述:获取使用NVRAM且位置监督无效的飞车数量 -* 参数说明:无 -* 返 回 值:UINT8 gNvramFlyTrainCnt 使用NVRAM且位置监督无效的飞车数量 -* Created By LQ 2025.09.15 -*/ -UINT8 GetNvramFlyProtectNum(void); - -/** -* 功能描述:添加使用NVRAM且位置监督无效的飞车数据 -* 参数说明:UINT16 wTrainID 列车ID -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void AddNvramFlyingTrain(UINT16 wTrainID); - -/** -* 功能描述:清除使用NVRAM且位置监督无效的飞车数据 -* 参数说明:无 -* 返 回 值:无 -* Created By LQ 2025.09.15 -*/ -void ClearNvramFlyingTrain(void); +UINT8 GetTrainEscapeDoorState(const UINT16 wTrainId); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Train/TrainDefine.h b/TSCP/src/APP/ciapp/Train/TrainDefine.h index 9780b84..14706a3 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDefine.h +++ b/TSCP/src/APP/ciapp/Train/TrainDefine.h @@ -95,6 +95,10 @@ #define TRAIN_MODE_CAM ((UINT8)8) /*CAM模式*/ #define TRAIN_MODE_RRM ((UINT8)9) /*RRM模式*/ #define TRAIN_MODE_VCM ((UINT8)10) /*VCM模式*/ +#define TRAIN_MODE_FOR ((UINT8)11) /*FOR模式*/ +#define TRAIN_MODE_REV ((UINT8)12) /*REV模式*/ +#define TRAIN_MODE_S_B ((UINT8)13) /*SB模式*/ +#define TRAIN_MODE_SD ((UINT8)14) /*SD模式*/ #define TRAIN_HEAD_CONFIRM_YES ((UINT8)0x55u) /*人工前筛确认*/ #define TRAIN_HEAD_CONFIRM_NO ((UINT8)0xffu) /*人工前筛未确认(默认值)*/ @@ -191,11 +195,18 @@ #define TRAIN_RRM_RESON_15 0x15u /* 未得相邻TIOC的RRM授权,不允许RRM */ #define TRAIN_RRM_RESON_16 0x16u /* 列车不属于正线\有前端可疑,不允许RRM */ #define TRAIN_RRM_RESON_17 0x17u /* 列车激活端与预期不一致,不允许RRM */ +#define TRAIN_RRM_RESON_18 0x18u /* 列车脚下或前方存在禁止FAO运行区段,不允许RRM */ #define TRAIN_RRM_RESON_FF 0xffu /* 默认值,表示RRM授权没有不允许 */ #define TRAIN_DERAIL_YES 0x55u /* 列车脱轨 */ #define TRAIN_DERAIL_NO 0xaau /* 列车未脱轨 */ +#define TRAIN_INTEGRITY_LOST 0x55u /* 完整性丢失 */ +#define TRAIN_INTEGRITY_NOT_LOST 0xaau /* 完整性未丢失 */ + +#define TRAIN_ESCAPE_DOOR_OPEN 0x55u /* 逃生门打开 */ +#define TRAIN_ESCAPE_DOOR_NOT_OPEN 0xaau /* 逃生门未打开 */ + #define TRAIN_RRM_OTHERCI_ALLOW 0x55u /* 跨控区远程RM-目标TIOC允许*/ #define TRAIN_RRM_OTHERCI_NOT_ALLOW 0xaau /* 跨控区远程RM-目标TIOC不允许*/ diff --git a/TSCP/src/DRV/imx8_drv_gpio.c b/TSCP/src/DRV/imx8_drv_gpio.c index 73cb1c9..43cfcd7 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.c +++ b/TSCP/src/DRV/imx8_drv_gpio.c @@ -9,51 +9,20 @@ static volatile uintptr_t gpio_base_4; static volatile uintptr_t gpio_base_5; static uintptr_t tbase; -static volatile unsigned int cnt = 0; +static volatile unsigned int cnt; static int val; static pthread_t timer_thread; -static pthread_t gpioFeedbackIrq_thread; -static pthread_t gpioChanAIrq_thread; -static pthread_t gpioChanBIrq_thread; static struct sigevent event; static intrspin_t spinner; -static struct sigevent gpioFeedbackIrqEvent = {0}; -static struct sigevent gpioChanAIrqEvent = {0}; -static struct sigevent gpioChanBIrqEvent = {0}; -static uint32_t irqCnt[3U] = {0}; - - -/*AB Sync*/ -static volatile uint8_t s_isABSyncStart = 0u; -static volatile uint8_t s_ECapPause[3u] = {0u};//閲囬泦寮鍏虫帶鍒 -static volatile uint32_t s_ABSynDuty = 0u;//瀹氫箟鍙岀郴蹇冭烦淇″彿杈撳嚭鐨勫崰绌烘瘮锛0.5--瀵瑰簲杈撳嚭鏄50% -static volatile struct SCapInfo s_CapInfo[3u] = {0U}; -static volatile ABSynMsgType g_userSetSyncMsgType = ABSynMsgType_0; - -static float sSyncMsgErrInfo[ABSynMsgType_MAX] = {0.0f}; - -static void calculate(uint8_t index,float *Duty,float *Period,uint32_t* pPulseCnt); -static ABSynMsgType drvPWMAnalyze(float Duty,float Period); -static void pulseCount(uint8_t index); -static void drvGetABSyn(float *Duty,float *Period,uint32_t* pPulseCnt); -static void Task_ABSyncPulse(void); - -void* gpioChanAIrq( void * arg); -const struct sigevent *gpioChanAIrq_handler (void *not_used, int id); -void* gpioChanBIrq( void * arg); -const struct sigevent *gpioChanBIrq_handler (void *not_used, int id); -void* gpioFeedbackIrq( void * arg); -const struct sigevent *gpioFeedbackIrq_handler (void *not_used, int id); - -char drv_vsr[4] = {93, 8, 0, 30}; +char drv_vsr[4] = {93u, 8u, 0u, 9u}; /*GPIO init*/ int imx8_gpio_init(void) { int ret = 0; - gpio_base_0 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO0_BASE); + gpio_base_0 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO0_BASE); if(gpio_base_0 == MAP_DEVICE_FAILED) { perror("Can't map device base 0 I/O"); @@ -64,7 +33,7 @@ int imx8_gpio_init(void) } - gpio_base_1 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO1_BASE); + gpio_base_1 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO1_BASE); if(gpio_base_1 == MAP_DEVICE_FAILED) { perror("Can't map device base 1 I/O"); @@ -75,7 +44,7 @@ int imx8_gpio_init(void) } - gpio_base_2 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO2_BASE); + gpio_base_2 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO2_BASE); if(gpio_base_2 == MAP_DEVICE_FAILED) { perror("Can't map device base 2 I/O"); @@ -86,7 +55,7 @@ int imx8_gpio_init(void) } - gpio_base_3 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO3_BASE); + gpio_base_3 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO3_BASE); if(gpio_base_3 == MAP_DEVICE_FAILED) { perror("Can't map device base 3 I/O"); @@ -97,7 +66,7 @@ int imx8_gpio_init(void) } - gpio_base_4 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO4_BASE); + gpio_base_4 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO4_BASE); if(gpio_base_4 == MAP_DEVICE_FAILED) { perror("Can't map device base 4 I/O"); @@ -108,7 +77,7 @@ int imx8_gpio_init(void) } - gpio_base_5 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO5_BASE); + gpio_base_5 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO5_BASE); if(gpio_base_5 == MAP_DEVICE_FAILED) { perror("Can't map device base 5 I/O"); @@ -684,6 +653,7 @@ const struct sigevent *handler (void *not_used, int id) void* timer( void * arg) { int ret = 0; + ret = ThreadCtl (_NTO_TCTL_IO, 0); SIGEV_INTR_INIT (&event); @@ -709,9 +679,6 @@ void* timer( void * arg) ret = InterruptWait(0, 0); ret = InterruptUnmask(IMX_GPT0_IRQ, val); } - - /*you will never reach here*/ - return NULL; } /*create 8khz timer*/ @@ -739,20 +706,10 @@ int imx8_create_timer_pthread(void) /*25% timer irq function*/ const struct sigevent *handler_25 (void *not_used, int id) { - unsigned int cpuid = 0; cnt++; - InterruptLock( &spinner ); - cpuid = imx8_read_cpuid(); - if (1U == cpuid) - { - Task_ABSyncPulse(); - } - else - { - /*do nothing*/ - } + InterruptLock( &spinner ); if((cnt%(uint32_t)4) == (uint32_t)0) { @@ -806,9 +763,6 @@ void* timer_25( void * arg) ret = InterruptUnmask(IMX_GPT0_IRQ, val); } - /*you will never reach here*/ - ret = NULL; - return ret; } @@ -834,6 +788,7 @@ int imx8_create_timer_pthread_25(void) } /************************************************************************/ + int imx8_gpio_release(void) { int ret = 0; @@ -905,715 +860,3 @@ int imx8_gpio_release(void) return ret; } - -const struct sigevent *gpioFeedbackIrq_handler (void *not_used, int id) -{ - if (NULL == not_used) - { - return &gpioFeedbackIrqEvent; - } - uint8_t index = *(uint8_t*)not_used; - InterruptLock( &spinner ); - irqCnt[index]++; - pulseCount(index); - InterruptUnlock( &spinner ); - return &gpioFeedbackIrqEvent; -} - -void* gpioFeedbackIrq( void * arg) -{ - int feedval = 0; - uint8_t index = 2u; - uint32_t regVal = 0u; - - (void)ThreadCtl (_NTO_TCTL_IO, NULL); - - /*disable gpio irq*/ - regVal = (in32(gpio_base_3 + IMX_GPIO_IMR) & (uint32_t)~(1UL << 26U)); - out32(gpio_base_3 + IMX_GPIO_IMR, regVal); - /*config gpio irq*/ - /*dir is input*/ - regVal = (in32(gpio_base_3 + IMX_GPIO_GDIR) & (uint32_t)~(1UL << 26U)); - out32(gpio_base_3 + IMX_GPIO_GDIR, regVal); - /*select trigger way--rising edge sensitive*/ - regVal = (in32(gpio_base_3 + IMX_GPIO_ICR2) | (uint32_t)(2UL << 20U)); - out32(gpio_base_3 + IMX_GPIO_ICR2, regVal); - /*clear isr reg*/ - regVal = (in32(gpio_base_3 + IMX_GPIO_ISR) | (uint32_t)(1UL << 26U)); - out32(gpio_base_3 + IMX_GPIO_ISR, regVal); - /*reg intr service*/ - SIGEV_INTR_INIT(&gpioFeedbackIrqEvent); - feedval = InterruptAttach(666, gpioFeedbackIrq_handler, (const void*)&index, 1,_NTO_INTR_FLAGS_TRK_MSK); -#if 0 - printf("gpio 3_26 irq init finished\n"); - printf("gpio3 IMR val is %x\n",in32(gpio_base_3 + IMX_GPIO_IMR)); - printf("gpio3 ISR val is %x\n",in32(gpio_base_3 + IMX_GPIO_ISR)); - printf("gpio3 GDIR val is %x\n",in32(gpio_base_3 + IMX_GPIO_GDIR)); - printf("gpio3 ICR2 val is %x\n",in32(gpio_base_3 + IMX_GPIO_ICR2)); -#endif - /*enable gpio irq*/ - regVal = (in32(gpio_base_3 + IMX_GPIO_IMR) | (uint32_t)(1UL << 26U)); - out32(gpio_base_3 + IMX_GPIO_IMR, regVal); - - - while(1) - { - (void)InterruptWait(0, NULL); - (void)InterruptUnmask(666, feedval); - } - - /*you will never reach here*/ - return NULL; - -} - - - -const struct sigevent *gpioChanBIrq_handler (void *not_used, int id) -{ - if (NULL == not_used) - { - return &gpioChanBIrqEvent; - } - uint8_t index = *(uint8_t*)not_used; - InterruptLock( &spinner ); - irqCnt[index]++; - pulseCount(index); - InterruptUnlock( &spinner ); - return &gpioChanBIrqEvent; -} - -void* gpioChanBIrq( void * arg) -{ - int chanBval = 0; - uint8_t index = 1u; - uint32_t regVal = 0u; - - (void)ThreadCtl (_NTO_TCTL_IO, NULL); - - /*disable gpio irq*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_IMR) & (uint32_t)~(1UL << 2U)); - out32(gpio_base_4 + IMX_GPIO_IMR, regVal); - /*config gpio0_12 irq*/ - /*dir is input*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_GDIR) & (uint32_t)~(1UL << 2U)); - out32(gpio_base_4 + IMX_GPIO_GDIR, regVal); - /*select trigger way--rising edge sensitive*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_ICR1) | (uint32_t) (2UL << 4U)); - out32(gpio_base_4 + IMX_GPIO_ICR1, regVal); - /*clear isr reg*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_ISR) | (uint32_t)(1UL << 2U)); - out32(gpio_base_4 + IMX_GPIO_ISR, regVal); - /*reg intr service*/ - SIGEV_INTR_INIT(&gpioChanBIrqEvent); - /*This step maybe enable the IMR?*/ - chanBval = InterruptAttach(674, gpioChanBIrq_handler, (const void*)&index, 1,_NTO_INTR_FLAGS_TRK_MSK); -#if 0 - printf("Chan B(4_2) irq init finished\n"); - printf("gpio4 IMR val is %x\n",in32(gpio_base_4 + IMX_GPIO_IMR)); - printf("gpio4 ISR val is %x\n",in32(gpio_base_4 + IMX_GPIO_ISR)); - printf("gpio4 GDIR val is %x\n",in32(gpio_base_4 + IMX_GPIO_GDIR)); - printf("gpio4 ICR1 val is %x\n",in32(gpio_base_4 + IMX_GPIO_ICR1)); -#endif - /*enable gpio irq*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_IMR) | (uint32_t)(1UL << 2U)); - out32(gpio_base_4 + IMX_GPIO_IMR, regVal); - - - while(1) - { - (void)InterruptWait(0, NULL); - (void)InterruptUnmask(674, chanBval); - } - - /*you will never reach here*/ - return NULL; -} - - -const struct sigevent *gpioChanAIrq_handler (void *not_used, int id) -{ - if (NULL == not_used) - { - return &gpioChanAIrqEvent; - } - uint8_t index = *(uint8_t*)not_used; - InterruptLock( &spinner ); - irqCnt[index]++; - pulseCount(index); - InterruptUnlock( &spinner ); - return &gpioChanAIrqEvent; -} - -void* gpioChanAIrq( void * arg) -{ - int chanAval = 0; - uint8_t index = 0u; - uint32_t regVal = 0u; - - (void)ThreadCtl (_NTO_TCTL_IO, NULL); - - /*disable gpio irq*/ - regVal = in32(gpio_base_4 + IMX_GPIO_IMR) & (uint32_t)~(1UL << 1U); - out32(gpio_base_4 + IMX_GPIO_IMR, regVal); - /*config gpio0_9 irq*/ - /*dir is input*/ - regVal = in32(gpio_base_4 + IMX_GPIO_GDIR) & (uint32_t)~(1UL << 1U); - out32(gpio_base_4 + IMX_GPIO_GDIR,regVal); - /*select trigger way--rising edge sensitive*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_ICR1) | (uint32_t)(2UL << 2U)); - out32(gpio_base_4 + IMX_GPIO_ICR1, regVal); - /*clear isr reg*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_ISR) | (uint32_t)(1UL << 1U)); - out32(gpio_base_4 + IMX_GPIO_ISR, regVal); - /*reg intr service*/ - SIGEV_INTR_INIT(&gpioChanAIrqEvent); - chanAval = InterruptAttach(673, gpioChanAIrq_handler, (const void*)&index, 1,_NTO_INTR_FLAGS_TRK_MSK); -#if 0 - printf("gpio ChanA(4_1) irq init finished\n"); - printf("gpio4 IMR val is %x\n",in32(gpio_base_4 + IMX_GPIO_IMR)); - printf("gpio4 ISR val is %x\n",in32(gpio_base_4 + IMX_GPIO_ISR)); - printf("gpio4 GDIR val is %x\n",in32(gpio_base_4 + IMX_GPIO_GDIR)); - printf("gpio4 ICR1 val is %x\n",in32(gpio_base_4 + IMX_GPIO_ICR1)); -#endif - /*enable gpio irq*/ - regVal = (in32(gpio_base_4 + IMX_GPIO_IMR) | (uint32_t)(1UL << 1U)); - out32(gpio_base_4 + IMX_GPIO_IMR, regVal); - - - while(1) - { - (void)InterruptWait(0, NULL); - (void)InterruptUnmask(673, chanAval); - } - - /*you will never reach here*/ - return NULL; -} - -int imx8_create_gpio_irq_pthread(void) -{ - int ret = 0; - - ret = pthread_create(&gpioFeedbackIrq_thread, NULL, gpioFeedbackIrq, NULL); - ret = pthread_create(&gpioChanAIrq_thread, NULL, gpioChanAIrq, NULL); - ret = pthread_create(&gpioChanBIrq_thread, NULL, gpioChanBIrq, NULL); - - return ret; -} - - -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉紑鍚 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭澘绾у垵濮嬪寲涔嬪悗璋冪敤涓娆¤鍑芥暟鍚姩鍔熻兘銆 - */ -void drvStartABSynSwitch(void) -{ - int i = 0; - - s_CapInfo[0U].isLocked = 0; - s_CapInfo[1U].isLocked = 0; - - for (i=0;i<(uint8_t)ABSynMsgType_MAX;i++) - { - sSyncMsgErrInfo[i] = 0.0f; - } - - (void)imx8_output(5,1); - s_isABSyncStart = 1; -} - - -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉叧闂 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛 - */ -void drvStopABSynSwitch(void) -{ - s_isABSyncStart = 0; - (void)imx8_output(5,0); -} -/* 鍑芥暟鍔熻兘锛氬彂閫佸弻绯荤‖閫氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛歁sgType锛氱‖閫氫俊鐨勪俊鎭細ABSynMsgType_0..ABSynMsgType_7 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氬掑垏鏂规鐢变簬纭欢闄愬埗锛屽彂閫侀鐜囦笉楂樹簬500Hz,鏈澶т娇鐢ˋBSynMsgType_4銆 - */ -void drvSetABSynMsg(ABSynMsgType MsgType) -{ - g_userSetSyncMsgType = MsgType; - switch((uint8_t)MsgType) - { - case 0: - s_ABSynDuty = 0; - break; - case 1://200hz - s_ABSynDuty = 80; - break; - case 2://300hz - s_ABSynDuty = 53; - break; - case 3://400hz - s_ABSynDuty = 40; - break; - case 4://500hz - s_ABSynDuty = 32; - break; - case 5://600hz - s_ABSynDuty = 27; - break; - case 6://700hz - s_ABSynDuty = 23; - break; - case 7://800hz - s_ABSynDuty = 20; - break; - default: - s_ABSynDuty =0; - break; - } -} - - -/* 鍑芥暟鍔熻兘锛氳緭鍑篜WM - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭斁鍦ㄥ畾鏃跺櫒涓柇鏈嶅姟绋嬪簭涓紝浜х敓PWM - */ -static void Task_ABSyncPulse(void) -{ - static uint32_t PulseCount = 0u; - static uint32_t PinValue = 1u; - uint32_t regVal = 0u; - uint32_t syncDuty = 0u; - - if(s_isABSyncStart == 1u) - { - PulseCount++; - syncDuty = s_ABSynDuty; - if((syncDuty > 0u) && (PulseCount >= syncDuty)) - { - PulseCount = 0; - PinValue ^= 0x1u; - if (0U == PinValue) - { - regVal = (in32(gpio_base_0 + IMX_GPIO_DR) & (uint32_t)~(1UL << 6U)); - out32(gpio_base_0 + IMX_GPIO_DR,regVal); - } - else - { - regVal = (in32(gpio_base_0 + IMX_GPIO_DR) | (uint32_t)(1UL << 6U)); - out32(gpio_base_0 + IMX_GPIO_DR, regVal); - - } - } - } -} - - - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖閫氫俊鐨勫弽棣堛 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱ABSynMsgType *pMsgType, 閲囬泦鍒扮殑type淇℃伅 - * 杩斿洖鍊 锛歎INT8, - * 0x00,姝e父銆 - * 0x81,鍛戒护涓庡弽棣堜笉涓鑷 - * 0x82,鎸囬拡涓虹┖ - * 浣跨敤娉ㄦ剰锛氬彂閫佷笌閲囬泦闂撮殧鑷冲皯涓40ms銆 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType) -{ - uint8_t ret = 0U; - float Duty = 0.0f; - float period = 0.0f; - uint32_t PulseCnt = 0u; - if (NULL != pMsgType) - { - calculate(2U,&Duty,&period,&PulseCnt); - *pMsgType = drvPWMAnalyze(Duty,period); - if (g_userSetSyncMsgType == *pMsgType) - { - ret =0u; - } - else - { - ret = 0x81u; - } - } - else - { - ret = 0x82U; - } - return ret; -} - -/* 鍑芥暟鍔熻兘锛氭煡璇㈠綋鍓嶅悇閫氶亾鏀跺埌鐨勫閮ㄨ剦鍐蹭釜鏁般 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛 uint8_t index -- 閫氶亾绱㈠紩锛0-瀵规柟A绯婚氶亾 1-瀵规柟B绯婚氶亾 2-鑷韩鍙嶉閫氶亾 - * uint32_t* pPulseCnt -- 澶栭儴瀛樺偍鍙橀噺鍦板潃 - * 杩斿洖鍊 锛歶int8_t 0-鎴愬姛 1-澶辫触锛氬叆鍙傞敊璇 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt) -{ - uint8_t ret = 0U; - if ((index > 2U) || (NULL == pPulseCnt)) - { - ret = 1u; - return ret; - } - - *pPulseCnt = s_CapInfo[index].capCount; - - return ret; -} - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧绯诲弻閫氶亾纭氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱MsgType[0]:瀵规柟A绯诲彂鍑虹殑纭氫俊淇℃伅:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]锛氬鏂笲绯诲彂鍑虹殑纭氫俊淇℃伅锛欰BSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:鏀跺埌瀵规柟A绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笰绯诲仠姝㈣緭鍑鸿剦鍐 - * pPulseCnt[1]:鏀跺埌瀵规柟B绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笲绯诲仠姝㈣緭鍑鸿剦鍐 - * 杩斿洖鍊 锛氭棤銆 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt) -{ - float Duty[2] = {0.0f}; - float Period[2] = {0.0f}; - - if(( NULL != pMsgType) && (NULL != pPulseCnt)) - { - drvGetABSyn(Duty,Period,pPulseCnt); - pMsgType[0] = drvPWMAnalyze(Duty[0],Period[0]); - pMsgType[1] = drvPWMAnalyze(Duty[1],Period[1]); - } - else - { - ; - } - -} - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧綋鍓嶇郴闂翠俊鍙疯剦鍐茬殑鏈澶ц宸笺 - * 杈撳叆鍙傛暟锛歶int8_t index - * 杈撳嚭鍙傛暟锛氭棤 - * 杩斿洖鍊 锛歠loat -- 璇樊鐧惧垎姣斻 - */ -float drvGetSyncSigErr(ABSynMsgType msgType) -{ - uint8_t index = 0u; - float ret = -1.0f; - if (msgType < ABSynMsgType_MAX) - { - index = (uint8_t)msgType; - ret = sSyncMsgErrInfo[index]; - } - - return ret; -} - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖鍒囩郴淇″彿鐨勫崰绌烘瘮鍙婇鐜囥 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛欴uty[0]:瀵圭郴CPU1鍗犵┖姣,淇濈暀3浣嶆湁鏁堝皬鏁,濡30%鍗犵┖姣旇〃绀轰负0.300 - * Period[0]锛氬绯籆PU1棰戠巼,鍗曚綅涓篐z - * Duty[1]:瀵圭郴CPU2鍗犵┖姣,淇濈暀3浣嶆湁鏁堝皬鏁,濡30%鍗犵┖姣旇〃绀轰负0.300 - * Period[1]锛氬绯籆PU2棰戠巼,鍗曚綅涓篐z - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛歅eriod涓0鏃惰〃绀洪敊璇 - */ -static void drvGetABSyn(float *Duty,float *Period,uint32_t* pPulseCnt) -{ - if ((NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - /*浣跨敤IO涓柇鏂瑰紡*/ - calculate(0U,&Duty[0],&Period[0],&pPulseCnt[0]); - calculate(1U,&Duty[1],&Period[1],&pPulseCnt[1]); -} - - -/* 鍑芥暟鍔熻兘锛歅WM淇″彿瑙f瀽涓哄弻绯籑sgType銆 - * 杈撳叆鍙傛暟锛欴uty:閲囬泦鍒扮殑PWM鍗犵┖姣 - * Period锛氶噰闆嗗埌鐨凱WM棰戠巼 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛欰BSynMsgType锛氬弻绯婚氫俊鐨勫叿浣撲俊鎭 - * 浣跨敤娉ㄦ剰锛氥 - */ -static ABSynMsgType drvPWMAnalyze(float Duty,float Period) -{ - ABSynMsgType ABSynMsgTypetemp = ABSynMsgType_0; - float syncErr = 0.0f; - float tmp = 0.0f; - float baseFreq = 0.0f; - uint8_t index = 0u; - - if((Duty > 0.45f) && (Duty < 0.55f) ) - { - if((Period > 150.0f) && (Period < 250.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_1; - } - else if((Period > 250.0f) && (Period < 350.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_2; - } - else if((Period > 350.0f) && (Period < 450.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_3; - } - else if((Period > 450.0f) && (Period < 550.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_4; - } - else if((Period > 550.0f) && (Period < 650.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_5; - } - else if((Period > 650.0f) && (Period < 750.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_6; - } - else if((Period > 750.0f) && (Period < 850.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_7; - } - else - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - } - else//鍗犵┖姣旀棤鎴栦笉姝e父 - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - - index = (uint8_t)ABSynMsgTypetemp; - baseFreq = (float)(index + 1u) * 100.0f; - tmp = (Period > baseFreq) ? (Period - baseFreq) : (baseFreq - Period); - syncErr = tmp / baseFreq * 100.0f; - tmp = sSyncMsgErrInfo[index]; - tmp = (syncErr > tmp) ? syncErr : tmp; - sSyncMsgErrInfo[index] = tmp; - - return ABSynMsgTypetemp; -} - -/*浣跨敤io涓柇鑾峰彇瀵圭鑴夊啿棰戠巼*/ -static void calculate(uint8_t index,float *Duty,float *Period,uint32_t* pPulseCnt) -{ - uint32_t curTimeStamp = 0u; - uint32_t startTimeStamp = 0u; - float tmp = 0.0f; - - if ((index > 2U) || (NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - - s_ECapPause[index] = 1U; - curTimeStamp = s_CapInfo[index].cap1CurrentTime; - startTimeStamp = s_CapInfo[index].cap1StartTime; - - uint32_t useTime = (curTimeStamp > startTimeStamp) ? \ - (curTimeStamp - startTimeStamp) : \ - (0xFFFFFFFFU - startTimeStamp + curTimeStamp); - - tmp = (float)useTime / (float)s_CapInfo[index].capCount; - s_CapInfo[index].fre = (32000.0f / tmp); - - *Period = s_CapInfo[index].fre; - *Duty = 0.5f; - *pPulseCnt = s_CapInfo[index].capCount; - s_CapInfo[index].cap1CurrentTime = 0u; - s_CapInfo[index].cap1StartTime = 0u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].isLocked = 0u; - s_ECapPause[index] = 0U; -} - - -static void pulseCount(uint8_t index) -{ - uint8_t capPause = 0u; - uint8_t syncStart = 0u; - if (index < 3u) - { - capPause = s_ECapPause[index]; - syncStart = s_isABSyncStart; - if ((0u == capPause) && (1u == syncStart)) - { - if(0u == s_CapInfo[index].isLocked) - { - s_CapInfo[index].isLocked = 1u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].cap1StartTime = cnt; - } - s_CapInfo[index].cap1CurrentTime = cnt; - s_CapInfo[index].capCount++; - } - else - { - /*do nothing*/ - } - } -} - - -/************************************************************************/ -/* -* @brief 璇诲彇phy瀵勫瓨鍣ㄧ浉鍏崇淮鎶や俊鎭 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬 -* -* @param[in] -* const char* fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* uint16_t infoLen - 瀵勫瓨鍣ㄤ俊鎭暟缁勯暱搴︼紝姝ら暱搴﹀簲璇ュぇ浜庣瓑浜12 -* @param[out] -* uint16_t * Info - 瀵勫瓨鍣ㄤ俊鎭暟缁勫瓨鍌ㄩ鍦板潃 -* @return rtn 杩斿洖鐘舵 -* - n: n涓哄疄闄呰鍙栫殑瀵勫瓨鍣ㄤ釜鏁 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen) -{ - /*- 鍙橀噺鍒濆鍖*/ - int sockfd = -1; - int rtn = -1; - int n = 0; - /*uint16_t regInfo[12u] = {0u};*/ - uint8_t regList[12] = {0u,1u,4u,5u,6u,7u,8u,9u,10u,15u,21u,31u}; - uint8_t i = 0u; - - if ((NULL == fecx) || (NULL == Info) || (0u == infoLen)) - { - return rtn; - } - - /*- 鍒涘缓DGRAM绫诲瀷濂楁帴瀛*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 閰嶇疆缃戠粶鎺ュ彛鍚嶇О*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 璁剧疆PHY瀵勫瓨鍣ㄨ闂弬鏁*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY瀵勫瓨鍣ㄨ鍙栧懡浠 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY璁惧鍦板潃 */ - phycmd.req.phy_reg = 1U; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - phycmd.req.phy_data = 0U; /* 鍒濆鍖栨暟鎹煙 */ - - n = ((12U <= infoLen)? 12 : (int)infoLen); - - for(i = 0u;i < n;i++) - { - phycmd.req.phy_reg = regList[i]; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - /*- 鍙戦侀┍鍔ㄦ帶鍒跺懡浠よ幏鍙朠HY鐘舵*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - Info[i] = phycmd.req.phy_data; - } - rtn = n; - close(sockfd); - } - /*- 杩斿洖鏈缁堟娴嬬粨鏋*/ - return rtn; -} - - -#if 0 -/*璋冭瘯鎺ュ彛*/ -void checkisr(void) -{ - static int ret = 0; - printf("irq cnt 0 is %d\n",irqCnt[0]); - printf("irq cnt 1 is %d\n",irqCnt[1]); - printf("irq cnt 2 is %d\n",irqCnt[2]); - printf("cur cnt is %d\n",cnt); -} -#endif - - -/************************************************************************/ -/* -* @brief 閫氳繃PHY瀵勫瓨鍣ㄦ鏌ユ寚瀹氱綉鍗¢摼璺姸鎬 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬侊紝 -* 鏍规嵁瀵勫瓨鍣ㄥ肩殑鐗瑰畾浣嶅垽鏂摼璺槸鍚︽甯搞 -* -* @param[in] fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* @return rtn 杩斿洖鐘舵 -* - 0: 閾捐矾鐘舵佹甯革紙PHY瀵勫瓨鍣╞it2涓1锛 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -* @note 鍑芥暟鎵ц娴佺▼锛 -* 1. 鍒涘缓UDP濂楁帴瀛 -* 2. 閰嶇疆phycmd鎺у埗缁撴瀯浣擄細 -* - ifd_name: 缃戠粶鎺ュ彛鍚嶇О -* - ifd_cmd: 浣跨敤READ_PHY_REG鍛戒护 -* - phy_id: PHY鍦板潃7 -* - phy_reg: 瀵勫瓨鍣ㄥ湴鍧1锛堢姸鎬佸瘎瀛樺櫒锛 -* 3. 閫氳繃devctl鍙戦佹帶鍒跺懡浠 -* 4. 瑙f瀽phy_data瀵勫瓨鍣ㄥ肩殑bit2鍒ゆ柇閾捐矾鐘舵 -*/ -int phytool(const char* fecx) -{ - /*- 鍙橀噺鍒濆鍖*/ - int sockfd = -1; - int rtn = -1; - - if (NULL == fecx) - { - return rtn; - } - - /*- 鍒涘缓DGRAM绫诲瀷濂楁帴瀛*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 閰嶇疆缃戠粶鎺ュ彛鍚嶇О*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 璁剧疆PHY瀵勫瓨鍣ㄨ闂弬鏁*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY瀵勫瓨鍣ㄨ鍙栧懡浠 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY璁惧鍦板潃 */ - phycmd.req.phy_reg = 1U; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - phycmd.req.phy_data = 0U; /* 鍒濆鍖栨暟鎹煙 */ - - /*- 鍙戦侀┍鍔ㄦ帶鍒跺懡浠よ幏鍙朠HY鐘舵*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - - close(sockfd); - - /*- 瑙f瀽鐘舵佸瘎瀛樺櫒bit2锛0x04锛夐摼璺姸鎬佹爣蹇*/ - if(1U == ((phycmd.req.phy_data & 0x04U)>>2U)) - { - rtn = 0; /* 閾捐矾姝e父 */ - } - else - { - ; /* 淇濇寔榛樿澶辫触鐘舵 */ - } - } - /*- 杩斿洖鏈缁堟娴嬬粨鏋*/ - return rtn; -} diff --git a/TSCP/src/DRV/imx8_drv_gpio.h b/TSCP/src/DRV/imx8_drv_gpio.h index 744dc67..a430781 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.h +++ b/TSCP/src/DRV/imx8_drv_gpio.h @@ -17,51 +17,6 @@ #include #include -#include -#include -#include - - -/*鍙岀郴鑴夊啿閫氫俊淇″彿绫诲瀷瀹氫箟*/ -typedef enum { //鍗犵┖姣-棰戠巼 - ABSynMsgType_0,//0.0-0,ErrorDuty-ErrorFrequency鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佹湭鏀跺埌鏈夋晥鐨凱WM淇″彿(鍖呭惈锛氭棤PWM淇″彿銆佷俊鍙峰弬鏁颁笉绗﹀悎棰勮鐨勮寖鍥) - ABSynMsgType_1,//0.5-200 鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佸彂閫佺鐨凪sgType涓嶆槸瑙勫畾鐨勬灇涓剧被鍨; - ABSynMsgType_2,//0.5-300 鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佸弻绯籔WM淇″彿浣胯兘鏍囧織娌℃湁鍛ㄦ湡缈昏浆(main鍑芥暟璺戦); - ABSynMsgType_3,//0.5-400 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_4,//0.5-500 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_5,//0.5-600 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_6,//0.5-700 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_7,//0.5-800 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_MAX = 0x08 -} ABSynMsgType; - -struct SCapInfo{ - uint8_t vaild;//0鏃犳晥 1鏈夋晥 - uint8_t isLocked;//1閿佸畾 - uint32_t capCount; - uint32_t cap1StartTime; //first rising - uint32_t cap1CurrentTime; //first falling - uint32_t cycle; //鍛ㄦ湡 - uint32_t pulseWidth; //鑴夊 - float dutyCycle; //鍗犵┖姣 - float fre; //棰戠巼 -}; - - -#define READ_PHY_REG 0x400U - -typedef struct { - uint8_t phy_id; - uint8_t phy_reg; - uint16_t phy_data; -}phy_access_t; - -static struct ifdrv2{ - struct ifdrv ifd; - phy_access_t req; -}phycmd; - - #define IMX_GPIO0_BASE 0x5D080000 #define IMX_GPIO1_BASE 0x5D090000 #define IMX_GPIO2_BASE 0x5D0A0000 @@ -74,18 +29,8 @@ static struct ifdrv2{ #define IMX_GPIO_DR 0x0U #define IMX_GPIO_GDIR 0x4U #define IMX_GPIO_PSR 0x8U -/*20250707--zhangzhongqi add*/ -#define IMX_GPIO_ICR1 0xCU -#define IMX_GPIO_ICR2 0x10U -#define IMX_GPIO_IMR 0x14U -#define IMX_GPIO_ISR 0x18U -#define IMX_GPIO_EDGE_SEL 0x1CU -#define IMX_GPIO_SIZE 0x20U -#define IMX_GPIO0_IRQ 168 -#define IMX_GPIO1_IRQ 169 - /*timer regisger */ #define IMX_GPT0_BASE 0x5D140000 #define IMX_GPT_SIZE 0x10000 @@ -138,111 +83,3 @@ const struct sigevent *handler_25 (void *not_used, int id); const struct sigevent *handler (void *not_used, int id); void* timer_25( void * arg); void* timer( void * arg); - -/* 鍑芥暟鍔熻兘锛氬垱寤鸿剦鍐叉娴嬩腑鏂嚎绋 - * 杈撳叆鍙傛暟锛歷oid - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭澘绾у垵濮嬪寲涔嬪悗璋冪敤涓娆¤鍑芥暟鍚姩鍔熻兘銆 - */ -int imx8_create_gpio_irq_pthread(void); -/* 鍑芥暟鍔熻兘锛氬彂閫佸弻绯荤‖閫氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛歁sgType锛氱‖閫氫俊鐨勪俊鎭細ABSynMsgType_0..ABSynMsgType_7 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氬掑垏鏂规鐢变簬纭欢闄愬埗锛屽彂閫侀鐜囦笉楂樹簬500Hz,鏈澶т娇鐢ˋBSynMsgType_4銆 - */ -void drvSetABSynMsg(ABSynMsgType MsgType); -/* 鍑芥暟鍔熻兘锛氳幏鍙栧绯诲弻閫氶亾纭氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱MsgType[0]:瀵规柟A绯诲彂鍑虹殑纭氫俊淇℃伅:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]锛氬鏂笲绯诲彂鍑虹殑纭氫俊淇℃伅锛欰BSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:鏀跺埌瀵规柟A绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笰绯诲仠姝㈣緭鍑鸿剦鍐 - * pPulseCnt[1]:鏀跺埌瀵规柟B绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笲绯诲仠姝㈣緭鍑鸿剦鍐 - * 杩斿洖鍊 锛氭棤銆 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt); -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉紑鍚 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭澘绾у垵濮嬪寲涔嬪悗璋冪敤涓娆¤鍑芥暟鍚姩鍔熻兘銆 - */ -void drvStartABSynSwitch(void); - -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉叧闂 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛 - */ -void drvStopABSynSwitch(void); - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖閫氫俊鐨勫弽棣堛 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱ABSynMsgType *pMsgType, 閲囬泦鍒扮殑type淇℃伅 - * 杩斿洖鍊 锛歎INT8, - * 0x00,姝e父銆 - * 0x81,鍛戒护涓庡弽棣堜笉涓鑷 - * 0x82,鎸囬拡涓虹┖ - * 浣跨敤娉ㄦ剰锛氬彂閫佷笌閲囬泦闂撮殧鑷冲皯涓40ms銆 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType); - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧綋鍓嶇郴闂翠俊鍙疯剦鍐茬殑鏈澶ц宸笺 - * 杈撳叆鍙傛暟锛歶int8_t index - * 杈撳嚭鍙傛暟锛氭棤 - * 杩斿洖鍊 锛歠loat -- 璇樊鐧惧垎姣斻 - */ -float drvGetSyncSigErr(ABSynMsgType msgType); - -/* 鍑芥暟鍔熻兘锛氭煡璇㈠綋鍓嶅悇閫氶亾鏀跺埌鐨勫閮ㄨ剦鍐蹭釜鏁般 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛 uint8_t index -- 閫氶亾绱㈠紩锛0-鑷韩鍙嶉閫氶亾 1-瀵规柟A绯婚氶亾 2-瀵规柟B绯婚氶亾 - * uint32_t* pPulseCnt -- 澶栭儴瀛樺偍鍙橀噺鍦板潃 - * 杩斿洖鍊 锛歶int8_t 0-鎴愬姛 1-澶辫触锛氬叆鍙傞敊璇 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt); - - -/************************************************************************/ -/* -* @brief 璇诲彇phy瀵勫瓨鍣ㄧ浉鍏崇淮鎶や俊鎭 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬 -* -* @param[in] -* const char* fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* uint16_t infoLen - 瀵勫瓨鍣ㄤ俊鎭暟缁勯暱搴︼紝姝ら暱搴﹀簲璇ュぇ浜庣瓑浜12 -* @param[out] -* uint16_t * Info - 瀵勫瓨鍣ㄤ俊鎭暟缁勫瓨鍌ㄩ鍦板潃 -* @return rtn 杩斿洖鐘舵 -* - n: n涓哄疄闄呰鍙栫殑瀵勫瓨鍣ㄤ釜鏁 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen); - -/************************************************************************/ -/* -* @brief 閫氳繃PHY瀵勫瓨鍣ㄦ鏌ユ寚瀹氱綉鍗¢摼璺姸鎬 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬侊紝 -* 鏍规嵁瀵勫瓨鍣ㄥ肩殑鐗瑰畾浣嶅垽鏂摼璺槸鍚︽甯搞 -* -* @param[in] fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* @return rtn 杩斿洖鐘舵 -* - 0: 閾捐矾鐘舵佹甯革紙PHY瀵勫瓨鍣╞it2涓1锛 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -* @note 鍑芥暟鎵ц娴佺▼锛 -* 1. 鍒涘缓UDP濂楁帴瀛 -* 2. 閰嶇疆phycmd鎺у埗缁撴瀯浣擄細 -* - ifd_name: 缃戠粶鎺ュ彛鍚嶇О -* - ifd_cmd: 浣跨敤READ_PHY_REG鍛戒护 -* - phy_id: PHY鍦板潃7 -* - phy_reg: 瀵勫瓨鍣ㄥ湴鍧1锛堢姸鎬佸瘎瀛樺櫒锛 -* 3. 閫氳繃devctl鍙戦佹帶鍒跺懡浠 -* 4. 瑙f瀽phy_data瀵勫瓨鍣ㄥ肩殑bit2鍒ゆ柇閾捐矾鐘舵 -*/ -int phytool(const char* fecx); diff --git a/TSCP/src/MSCP/CFM/CFM_Net.c b/TSCP/src/MSCP/CFM/CFM_Net.c index 34cff21..4384978 100644 --- a/TSCP/src/MSCP/CFM/CFM_Net.c +++ b/TSCP/src/MSCP/CFM/CFM_Net.c @@ -1,18 +1,18 @@ 锘/** -* @file CFM_Net.c -* @brief Communication Function Module: 缃戠粶閫氫俊鍔熻兘 -* @details -* 2oo2銆2x2銆佸唴缃戙佸缃戙佹牎鏃躲佸悓姝ョ瓑鐨勪互澶綉閫氫俊瀹炵幇 -* @author GT-BU -* @date 2021.02.20 -* @version V1.0 -* @copyright TCT -* @par 淇敼鏃ュ織 -* -*
Date Version Author Description -*
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 -*
-*/ + * @file CFM_Net.c + * @brief Communication Function Module: 缃戠粶閫氫俊鍔熻兘 + * @details + * 2oo2銆2x2銆佸唴缃戙佸缃戙佹牎鏃躲佸悓姝ョ瓑鐨勪互澶綉閫氫俊瀹炵幇 + * @author GT-BU + * @date 2021.02.20 + * @version V1.0 + * @copyright TCT + * @par 淇敼鏃ュ織 + * + *
Date Version Author Description + *
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 + *
+ */ #include "CFM_Net.h" #include "CM_Convert.h" #include "CM_Memory.h" @@ -44,75 +44,75 @@ #define CFM_OUTHEART_MSG_NUM_MAX (20u) #define CFM_INNET_SAFE_MSG_NUM_MAX (40u) - #define CFM_INNET_SAFE_MSG_SIZE (5120u) -#define CFM_INNET_RAW_MSG_SIZE (2048u) -#define CFM_OUTNET_SAFE_MSG_SIZE (5120u) +#define CFM_INNET_RAW_MSG_SIZE (2048u) +#define CFM_OUTNET_SAFE_MSG_SIZE (6144u) #define CFM_OUTNET_RAW_MSG_SIZE (5120u) #define CFM_OUTNET_HEART_MSG_SIZE (1000u) #define CFM_SYN_MSG_SIZE (1000u) /*鏆楁枃涓存椂鏃ュ織澶у皬 鍜 ctrl闃熷垪澶у皬*/ -#define CFM_INNET_LOG_MSG_SIZE_DARK (1024u * 80u) /* 鏆楁枃鏃ュ織澶у皬锛孼C瑕佹眰鏄80000(78*1024)瀛楄妭 */ -#define CFM_INNET_LOG_MSG_SIZE (5120u) /* 鏄庢枃娑堟伅闃熷垪澶у皬 */ +#define CFM_INNET_LOG_MSG_SIZE_DARK (1024u * 80u) /* 鏆楁枃鏃ュ織澶у皬锛孼C瑕佹眰鏄80000(78*1024)瀛楄妭 */ +#define CFM_INNET_LOG_MSG_SIZE (5120u) /* 鏄庢枃娑堟伅闃熷垪澶у皬 */ /*鏃ュ織鏀掑寘鍙戦 鏀掑寘澶у皬*/ #define LOG_MAX (5120u) /** 鎺ユ敹绾跨▼鎺у埗 */ typedef struct { - CM_CHAR IP[32]; /**< 鏈満IP */ - CM_UINT16 port; /**< 鏈満绔彛 */ - CM_SOCKET* pSock; /**< socket */ - CM_UINT32 rmtIP; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ - CM_UINT32 rmtPort; /**< 瀵圭绔彛*/ - CM_UINT8 cache_buf[NET_UDP_BUF_SIZE]; /**< udp鎺ユ敹缂撳啿鍖 */ - CM_MQ_Struct_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ - /*閫氳繃閫忎紶绠楁硶閫夐厤*/ - CM_INT32 ch; /**< 閫氶亾ID */ - CM_MQ_Struct_T InfoQ; /**< 鍩冨紬鐟為浄杈炬姤鏂囩敤 */ - CM_MUTEX_T mutex; /**< 浜掓枼淇″彿閲忥紝鐢ㄦ潵淇濇姢MsgQ鍜孖nfoQ */ - CM_MUTEX_T clear_mutex; /**< 浜掓枼淇″彿閲忥紝鐢ㄦ潵娓呯┖淇濇姢MsgQ鍜孖nfoQ */ - RAW_ALGORITHM ALGORITHM_Fun; /** 鏃堕棿鎴宠В鏋愮畻娉曟敞鍐屾寚閽*/ - /*閫氳繃tcp浣胯兘寮鍏抽夐厤*/ - CM_UINT16 Tcpid; /**< TcpID */ - CM_INT32 Offset; /**< tcp鎺ユ敹缂撳啿鍖哄亸绉婚噺 */ - CM_UINT8 threadNumBer; /* 绾跨▼鍙 */ -}STRU_CFM_RECV_CTRL_T; + CM_CHAR IP[32]; /**< 鏈満IP */ + CM_UINT16 port; /**< 鏈満绔彛 */ + CM_SOCKET *pSock; /**< socket */ + CM_UINT32 rmtIP; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ + CM_UINT32 rmtPort; /**< 瀵圭绔彛*/ + CM_UINT8 cache_buf[NET_UDP_BUF_SIZE]; /**< udp鎺ユ敹缂撳啿鍖 */ + CM_MQ_Struct_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ + /*閫氳繃閫忎紶绠楁硶閫夐厤*/ + CM_INT32 ch; /**< 閫氶亾ID */ + CM_MQ_Struct_T InfoQ; /**< 鍩冨紬鐟為浄杈炬姤鏂囩敤 */ + CM_MUTEX_T mutex; /**< 浜掓枼淇″彿閲忥紝鐢ㄦ潵淇濇姢MsgQ鍜孖nfoQ */ + CM_MUTEX_T clear_mutex; /**< 浜掓枼淇″彿閲忥紝鐢ㄦ潵娓呯┖淇濇姢MsgQ鍜孖nfoQ */ + RAW_ALGORITHM ALGORITHM_Fun; /** 鏃堕棿鎴宠В鏋愮畻娉曟敞鍐屾寚閽*/ + /*閫氳繃tcp浣胯兘寮鍏抽夐厤*/ + CM_UINT16 Tcpid; /**< TcpID */ + CM_INT32 Offset; /**< tcp鎺ユ敹缂撳啿鍖哄亸绉婚噺 */ + CM_UINT8 threadNumBer; /* 绾跨▼鍙 */ +} STRU_CFM_RECV_CTRL_T; /** LOG绾跨▼缁撴瀯浣 */ typedef struct { - CM_CHAR rmtIP[32]; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ - CM_UINT16 rmtPort; /**< 瀵圭绔彛*/ - CM_SOCKET* pSock; /**< socket */ - CM_MQ_Struct_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ -}STRU_CFM_SEND_LOG; + CM_CHAR rmtIP[32]; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ + CM_UINT16 rmtPort; /**< 瀵圭绔彛*/ + CM_SOCKET *pSock; /**< socket */ + CM_MQ_Struct_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ +} STRU_CFM_SEND_LOG; /** 鏆楁枃LOG绾跨▼缁撴瀯浣 */ typedef struct { - CM_CHAR rmtIP[32]; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ - CM_UINT16 rmtPort; /**< 瀵圭绔彛*/ - CM_SOCKET* pSock; /**< socket */ - STRU_CM_QUEUE_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ -}STRU_CFM_SEND_DARKLOG; + CM_CHAR rmtIP[32]; /**< 瀵圭IP锛0琛ㄧず涓嶆寚瀹 */ + CM_UINT16 rmtPort; /**< 瀵圭绔彛*/ + CM_SOCKET *pSock; /**< socket */ + STRU_CM_QUEUE_T MsgQ; /**< 鎺ユ敹娑堟伅闃熷垪 */ +} STRU_CFM_SEND_DARKLOG; /** 2涔樼嚎绋嬫帶鍒*/ -static STRU_CFM_RECV_CTRL_T s_CFM_Rx2x2; /**< 2x2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_State2x2; /**< 2x2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2x2; /**< 2x2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_State2x2; /**< 2x2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ /** 2鍙栫嚎绋嬫帶鍒*/ -static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2; /**< 2oo2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_App; /**< 搴旂敤2oo2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2Mainteance; /**< 2oo2缁存姢鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_State; /**< 2oo2缁存姢鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2; /**< 2oo2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_App; /**< 搴旂敤2oo2鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2Mainteance; /**< 2oo2缁存姢鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_State; /**< 2oo2缁存姢鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_Assert; /**< 2oo2瀹曟満鏁版嵁閫氫俊鎺ユ敹绾跨▼鎺у埗 */ /** 鍏朵粬閫氫俊绾跨▼鎺у埗*/ -static STRU_CFM_RECV_CTRL_T s_CFM_RxInnetSafe; /**< 鍐呯綉瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_RxRemoteUpdate; /**< 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_RxInnetRaw[INNET_RAW_DOUBLE_PASS_NUM]; /**< 鍐呯綉閫忎紶閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetSafe; /**< 澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetRaw; /**< 澶栫綉閫忎紶閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetHeart; /**< 澶栫綉蹇冭烦閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxInnetSafe; /**< 鍐呯綉瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxRemoteUpdate; /**< 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxInnetRaw[INNET_RAW_DOUBLE_PASS_NUM]; /**< 鍐呯綉閫忎紶閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetSafe; /**< 澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetRaw; /**< 澶栫綉閫忎紶閫氫俊鎺ユ敹绾跨▼鎺у埗 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxOutnetHeart; /**< 澶栫綉蹇冭烦閫氫俊鎺ユ敹绾跨▼鎺у埗 */ -static STRU_CFM_SEND_LOG s_CFM_Send_LogStr; /**< 鏃ュ織闃熷垪绠$悊 */ +static STRU_CFM_SEND_LOG s_CFM_Send_LogStr; /**< 鏃ュ織闃熷垪绠$悊 */ /* 鏆楁枃log绠$悊淇℃伅 */ STRU_LOG_CTRL_T ciphertextCtrl; static STRU_CFM_SEND_DARKLOG s_Log_CtrlQ; @@ -122,284 +122,297 @@ RAW_ALGORITHM p_ALGORITHM_Fun[INNET_RAW_DOUBLE_PASS_NUM] = {NULL}; /** 鏃堕挓鍚屾鎺у埗 */ typedef struct { - CM_CHAR IP[32]; /* 鏈満IP */ - CM_UINT16 port; /* 鏈満绔彛 */ - CM_SOCKET* pSock; /* 鏈湴socket */ + CM_CHAR IP[32]; /* 鏈満IP */ + CM_UINT16 port; /* 鏈満绔彛 */ + CM_SOCKET *pSock; /* 鏈湴socket */ - /* - * delay鍜宱ffset鍙椾簰鏂ヤ俊鍙烽噺mutex淇濇姢锛 - * 璇诲啓delay鍜宱ffset鏃堕渶瑕佸厛鍙栧緱浜掓枼淇″彿閲 - */ - CM_MUTEX_T mutex; /* 浜掓枼淇″彿閲 */ - ENUM_CM_RETURN isOK; /* 鏍℃椂鎴愬姛鏍囧織 */ - CM_INT64 delay; /* 寤惰繜鏃堕棿 */ - CM_INT64 offset; /* 鍋忕Щ鏃堕棿 */ + /* + * delay鍜宱ffset鍙椾簰鏂ヤ俊鍙烽噺mutex淇濇姢锛 + * 璇诲啓delay鍜宱ffset鏃堕渶瑕佸厛鍙栧緱浜掓枼淇″彿閲 + */ + CM_MUTEX_T mutex; /* 浜掓枼淇″彿閲 */ + ENUM_CM_RETURN isOK; /* 鏍℃椂鎴愬姛鏍囧織 */ + CM_INT64 delay; /* 寤惰繜鏃堕棿 */ + CM_INT64 offset; /* 鍋忕Щ鏃堕棿 */ -}STRU_CFM_TIME_CTRL_T; +} STRU_CFM_TIME_CTRL_T; /** 鍛ㄦ湡鍚屾鎺у埗 */ typedef struct { - CM_CHAR IP[32]; /* 鏈満IP */ - CM_UINT16 port; /* 鏈満绔彛 */ - CM_SOCKET* pSock; /* 鏈湴socket */ + CM_CHAR IP[32]; /* 鏈満IP */ + CM_UINT16 port; /* 鏈満绔彛 */ + CM_SOCKET *pSock; /* 鏈湴socket */ - CM_MUTEX_T mutex; /* 浜掓枼淇″彿閲 */ - /*浠ヤ笅鍙橀噺鍙椾簰鏂ヤ俊鍙烽噺淇濇姢*/ - CM_INT32 rxLen; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_UINT8 rxBuf[CFM_SYN_MSG_SIZE]; /* 鎺ユ敹鎶ユ枃 */ - CM_UINT64 rxTick; /* 鍚屾鎶ユ枃鎺ユ敹鏃跺埢 */ - /*浠ヤ笂鍙橀噺鍙椾簰鏂ヤ俊鍙烽噺淇濇姢*/ -}STRU_CFM_SYN_CTRL_T; + CM_MUTEX_T mutex; /* 浜掓枼淇″彿閲 */ + /*浠ヤ笅鍙橀噺鍙椾簰鏂ヤ俊鍙烽噺淇濇姢*/ + CM_INT32 rxLen; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_UINT8 rxBuf[CFM_SYN_MSG_SIZE]; /* 鎺ユ敹鎶ユ枃 */ + CM_UINT64 rxTick; /* 鍚屾鎶ユ枃鎺ユ敹鏃跺埢 */ + /*浠ヤ笂鍙橀噺鍙椾簰鏂ヤ俊鍙烽噺淇濇姢*/ +} STRU_CFM_SYN_CTRL_T; /** 閫氫俊灞俿ocket绠$悊 */ typedef struct { - CM_SOCKET Sock_2oo2_Time; /**< 2oo2鏍℃椂socket */ - CM_SOCKET Sock_2oo2_Data; /**< 2oo2鏁版嵁閫氫俊socket */ - CM_SOCKET Sock_2oo2_Data_App; /**< 搴旂敤2oo2鏁版嵁閫氫俊socket */ + CM_SOCKET Sock_2oo2_Time; /**< 2oo2鏍℃椂socket */ + CM_SOCKET Sock_2oo2_Data; /**< 2oo2鏁版嵁閫氫俊socket */ + CM_SOCKET Sock_2oo2_Data_App; /**< 搴旂敤2oo2鏁版嵁閫氫俊socket */ CM_SOCKET Sock_2oo2_Maintenance; /**< 2oo2缁存姢妯″紡socket */ - CM_SOCKET Sock_2oo2_2x2_State; /**< 2oo2涓婄數鍚屾socket */ + CM_SOCKET Sock_2oo2_2x2_State; /**< 2oo2涓婄數鍚屾socket */ + CM_SOCKET Sock_2oo2_Assert; /**< 瀹曟満浜屽彇 */ - CM_SOCKET Sock_2x2_Time; /**< 2x2鏍℃椂socket */ - CM_SOCKET Sock_2x2_Data; /**< 2x2鏁版嵁閫氫俊socket */ - CM_SOCKET Sock_2x2_Syn; /**< 2x2鍛ㄦ湡鍚屾socket */ - CM_SOCKET Sock_2x2_State; /**< 2x2鐘舵佸垏鎹ocket */ + CM_SOCKET Sock_2x2_Time; /**< 2x2鏍℃椂socket */ + CM_SOCKET Sock_2x2_Data; /**< 2x2鏁版嵁閫氫俊socket */ + CM_SOCKET Sock_2x2_Syn; /**< 2x2鍛ㄦ湡鍚屾socket */ + CM_SOCKET Sock_2x2_State; /**< 2x2鐘舵佸垏鎹ocket */ - CM_SOCKET Sock_InnetSafe; /**< 鍐呯綉瀹夊叏閫氫俊socket */ - CM_SOCKET Sock_OutnetSafe; /**< 澶栫綉瀹夊叏閫氫俊socket */ - CM_SOCKET Sock_OutnetRaw; /**< 澶栫綉閫忎紶閫氫俊socket */ - CM_SOCKET Sock_OutnetHeart; /**< 澶栫綉蹇冭烦閫氫俊socket */ + CM_SOCKET Sock_InnetSafe; /**< 鍐呯綉瀹夊叏閫氫俊socket */ + CM_SOCKET Sock_OutnetSafe; /**< 澶栫綉瀹夊叏閫氫俊socket */ + CM_SOCKET Sock_OutnetRaw; /**< 澶栫綉閫忎紶閫氫俊socket */ + CM_SOCKET Sock_OutnetHeart; /**< 澶栫綉蹇冭烦閫氫俊socket */ - CM_INT32 num_InnetRaw; /**< 鍐呯綉閫忎紶绔彛鏁伴噺 */ - CM_INT32 num_InnetRaw_Extend;/**< 鍐呯綉閫忎紶鎵╁睍绔彛鏁伴噺 */ - CM_SOCKET Sock_InnetRaw[INNET_RAW_DOUBLE_PASS_NUM]; /**< 鍐呯綉閫忎紶閫氫俊socket */ + CM_INT32 num_InnetRaw; /**< 鍐呯綉閫忎紶绔彛鏁伴噺 */ + CM_INT32 num_InnetRaw_Extend; /**< 鍐呯綉閫忎紶鎵╁睍绔彛鏁伴噺 */ + CM_SOCKET Sock_InnetRaw[INNET_RAW_DOUBLE_PASS_NUM]; /**< 鍐呯綉閫忎紶閫氫俊socket */ - CM_SOCKET Sock_LogBase; /**< 骞冲彴鏄庢枃socket */ - CM_SOCKET Sock_LogCiphertext; /**< 骞冲彴搴旂敤鏆楁枃鏃ュ織socket */ + CM_SOCKET Sock_LogBase; /**< 骞冲彴鏄庢枃socket */ + CM_SOCKET Sock_LogCiphertext; /**< 骞冲彴搴旂敤鏆楁枃鏃ュ織socket */ - CM_SOCKET Sock_Remote_Update; /**< 杩滅▼閮ㄧ讲socket */ -}STRU_CFM_SOCKS_T; + CM_SOCKET Sock_Remote_Update; /**< 杩滅▼閮ㄧ讲socket */ +} STRU_CFM_SOCKS_T; static STRU_CFM_SOCKS_T s_CFM_Sock; /**< 閫氫俊灞俿ocket绠$悊 */ -static STRU_CFM_TIME_CTRL_T s_CFM_2oo2_Time; /**< 2oo2鏃堕挓鍚屾鎺у埗 */ -static STRU_CFM_TIME_CTRL_T s_CFM_2x2_Time; /**< 2x2鏃堕挓鍚屾鎺у埗 */ -static STRU_CFM_SYN_CTRL_T s_CFM_2x2_Syn; /**< 2x2鍛ㄦ湡鍚屾鎺у埗 */ +static STRU_CFM_TIME_CTRL_T s_CFM_2oo2_Time; /**< 2oo2鏃堕挓鍚屾鎺у埗 */ +static STRU_CFM_TIME_CTRL_T s_CFM_2x2_Time; /**< 2x2鏃堕挓鍚屾鎺у埗 */ +static STRU_CFM_SYN_CTRL_T s_CFM_2x2_Syn; /**< 2x2鍛ㄦ湡鍚屾鎺у埗 */ static CM_UINT8 s_CFM_UDP_Cache[65535]; /**< 涓存椂缂撳啿鍖 */ -static CM_UINT16 g_CFM_OSCache_ClearNum; +static CM_UINT16 g_CFM_OSCache_ClearNum; static CM_UINT32 g_CFM_OSCache_Len; /*纭噸鍚氫俊鐘舵佺粨鏋勪綋*/ STRU_HARDWARE_BOOT_COM_T g_Hardware_boot_com_state; /** -* @brief 2oo2鐩稿叧缃戠粶閫氫俊鍒濆鍖 -*/ + * @brief 2oo2鐩稿叧缃戠粶閫氫俊鍒濆鍖 + */ static void s_NetInit_2oo2(void); /** -* @brief 閫氱敤2oo2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -static ENUM_CM_RETURN CFM_2oo2_Send_Currency(IN CM_SOCKET sock,IN const CM_UINT8* pBuf, IN CM_INT32 BufLen,IN CM_UINT16 nPortDest); + * @brief 閫氱敤2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +static ENUM_CM_RETURN CFM_2oo2_Send_Currency(IN CM_SOCKET sock, IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen, IN CM_UINT16 nPortDest); /** -* @brief 2oo2閲嶄紶璇锋眰涓庡簲绛擜CK鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,ENUM_2oo2_NET_T msgType); + * @brief 2oo2閲嶄紶璇锋眰涓庡簲绛擜CK鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl, ENUM_2oo2_NET_T msgType); /** -* @brief 2x2鐩稿叧缃戠粶閫氫俊鍒濆鍖 -*/ + * @brief 2x2鐩稿叧缃戠粶閫氫俊鍒濆鍖 + */ static void s_NetInit_2x2(void); /** -* @brief 鍛ㄦ湡鍚屾绾跨▼ -* @param arg 鎸囧悜STRU_CFM_SYN_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_SYN_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀跺懆鏈熷悓姝ユ姤鏂囥佸苟璁板綍鏀跺埌鎶ユ枃鐨勭簿纭椂闂 -* @see :: CFM_2x2_SyncSend -* @see :: CFM_2x2_SyncRecv -*/ -static CM_THREAD_FUNC_T t_SyncThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 鍛ㄦ湡鍚屾绾跨▼ + * @param arg 鎸囧悜STRU_CFM_SYN_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_SYN_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀跺懆鏈熷悓姝ユ姤鏂囥佸苟璁板綍鏀跺埌鎶ユ枃鐨勭簿纭椂闂 + * @see :: CFM_2x2_SyncSend + * @see :: CFM_2x2_SyncRecv + */ +static CM_THREAD_FUNC_T t_SyncThread(IN CM_Thread_Arg_Struct_T *arg); /*********************************鍐呯綉閫氫俊鐩稿叧*****************************************/ /** -* @brief 鍐呯綉閫氫俊鍒濆鍖 -*/ + * @brief 鍐呯綉閫氫俊鍒濆鍖 + */ static void s_NetInit_Innet(void); /** -* @brief UDP閫忎紶鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief UDP閫忎紶鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T *arg); /** -* @brief TCP鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ潪闃诲鏂瑰紡鎺ユ敹TCP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief TCP鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ潪闃诲鏂瑰紡鎺ユ敹TCP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T *arg); /*********************************澶栫綉閫氫俊鐩稿叧*****************************************/ /** -* @brief 澶栫綉閫氫俊鍒濆鍖 -*/ + * @brief 澶栫綉閫氫俊鍒濆鍖 + */ static void s_NetInit_Outnet(void); /* 缁存姢缃戦氫俊鍒濆鍖 */ static void s_NetInit_Maintain(void); /** -* @brief 鏃ュ織鍙戦佺嚎绋 -* @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -*/ -static CM_THREAD_FUNC_T t_LogSendThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 鏃ュ織鍙戦佺嚎绋 + * @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + */ +static CM_THREAD_FUNC_T t_LogSendThread(IN CM_Thread_Arg_Struct_T *arg); /* 杩滅▼閮ㄧ讲閫氫俊鍒濆鍖 */ static void s_NetInit_RemoteUpdate(void); /** -* @brief UDP鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief UDP鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T *arg); /** -* @brief 缁存姢妯″紡涓婾DP鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 缁存姢妯″紡涓婾DP鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T *arg); /** -* @brief 鏃堕挓鍚屾绾跨▼ -* @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_TIME_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀舵椂閽熷悓姝ユ姤鏂囧苟浣滃嚭搴旂瓟 -* 鏀跺埌璇锋眰鎶ユ枃鏃剁珛鍗崇粰鍑哄簲绛 -* 鏀跺埌搴旂瓟鎶ユ枃鏃惰褰曞苟璁$畻寤惰繜鏃堕棿銆佸亸绉绘椂闂 -* @see :: CFM_2oo2_TimeReq -* @see :: CFM_2oo2_TimeGet -*/ -static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 鏃堕挓鍚屾绾跨▼ + * @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_TIME_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀舵椂閽熷悓姝ユ姤鏂囧苟浣滃嚭搴旂瓟 + * 鏀跺埌璇锋眰鎶ユ枃鏃剁珛鍗崇粰鍑哄簲绛 + * 鏀跺埌搴旂瓟鎶ユ枃鏃惰褰曞苟璁$畻寤惰繜鏃堕棿銆佸亸绉绘椂闂 + * @see :: CFM_2oo2_TimeReq + * @see :: CFM_2oo2_TimeGet + */ +static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T *arg); /** -* @brief 杩滅▼閮ㄧ讲鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀惰繙绋嬮儴缃插懡浠DP鎶ユ枃锛岀劧鍚庤繘琛岀浉鍏冲鐞 -*/ -static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 杩滅▼閮ㄧ讲鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀惰繙绋嬮儴缃插懡浠DP鎶ユ枃锛岀劧鍚庤繘琛岀浉鍏冲鐞 + */ +static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T *arg); static CM_THREAD_FUNC_T t_ClearArpThread(void); /*********************************2鍙栫浉鍏*****************************************/ /** -* @brief 2oo2鐩稿叧缃戠粶閫氫俊鍒濆鍖 -*/ + * @brief 2oo2鐩稿叧缃戠粶閫氫俊鍒濆鍖 + */ static void s_NetInit_2oo2(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ - CM_BOOL rtCheck = CM_FALSE; /* 涓存椂鍙橀噺 */ + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ + CM_BOOL rtCheck = CM_FALSE; /* 涓存椂鍙橀噺 */ - /*- 鍒涘缓鏃堕棿鍚屾socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Time, CM_FALSE,(CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Time, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); - /*- 鍒涘缓骞冲彴鏁版嵁2鍙杝ocket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); - /*- 鍒涘缓搴旂敤鏁版嵁2鍙杝ocket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data_App, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_App, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - /*- 鍒涘缓2x鐘舵2鍙杝ocket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_2x2_State,0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + /*- 鍒涘缓鏃堕棿鍚屾socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Time, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); + /*- 鍒涘缓骞冲彴鏁版嵁2鍙杝ocket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); + /*- 鍒涘缓搴旂敤鏁版嵁2鍙杝ocket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data_App, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_App, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); + /*- 鍒涘缓2x鐘舵2鍙杝ocket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_2x2_State, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Assert, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Assert, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_26); - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { /*- 鍒涘缓缁存姢妯″紡涓嬬殑2鍙杝ocket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Maintenance, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_18); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Maintenance, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_18); } else { /*- 鏃犲鐞 */ } - /*- 閰嶇疆socket */ - val = (CM_INT32)NET_UDP_BUF_DOUBLESIZE; - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); - /*- 鍒濆鍖栨帶鍒朵俊鎭 */ - CM_NM_ASSERT(s_CFM_2oo2_Time.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_7); - (void)sprintf(s_CFM_2oo2_Time.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); - s_CFM_2oo2_Time.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Time; - s_CFM_2oo2_Time.pSock = &s_CFM_Sock.Sock_2oo2_Time; - rt = CM_Mutex_Init(&s_CFM_2oo2_Time.mutex); - CM_NM_ASSERT(ENUM_CM_TRUE == rt,NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_8); + /*- 閰嶇疆socket */ + val = (CM_INT32)NET_UDP_BUF_DOUBLESIZE; + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_RCVBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_RCVBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); + /*- 鍒濆鍖栨帶鍒朵俊鎭 */ + CM_NM_ASSERT(s_CFM_2oo2_Time.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_7); + (void)sprintf(s_CFM_2oo2_Time.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); + s_CFM_2oo2_Time.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Time; + s_CFM_2oo2_Time.pSock = &s_CFM_Sock.Sock_2oo2_Time; + rt = CM_Mutex_Init(&s_CFM_2oo2_Time.mutex); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_8); - /*- 鍚姩2oo2鏃堕挓鍚屾绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_TimeThread, "2oo2_T", 0, CM_TASK_PRIORITY_72, (CM_Thread_Arg_Struct_T*)&s_CFM_2oo2_Time); - CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_11); + /*- 鍚姩2oo2鏃堕挓鍚屾绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_TimeThread, "2oo2_T", 0, CM_TASK_PRIORITY_72, (CM_Thread_Arg_Struct_T *)&s_CFM_2oo2_Time); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_11); - /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_NM_ASSERT(s_CFM_Rx2oo2.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_9); - (void)sprintf(s_CFM_Rx2oo2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); - s_CFM_Rx2oo2.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Data; - s_CFM_Rx2oo2.pSock = &s_CFM_Sock.Sock_2oo2_Data; - s_CFM_Rx2oo2.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); - s_CFM_Rx2oo2.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data; - rt = CM_MQ_Init(&s_CFM_Rx2oo2.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_10); - /*- 鍚姩2oo2鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2); - CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_12); + /*- 閰嶇疆鎺ユ敹绾跨▼ */ + CM_NM_ASSERT(s_CFM_Rx2oo2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_9); + (void)sprintf(s_CFM_Rx2oo2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); + s_CFM_Rx2oo2.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Data; + s_CFM_Rx2oo2.pSock = &s_CFM_Sock.Sock_2oo2_Data; + s_CFM_Rx2oo2.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); + s_CFM_Rx2oo2.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data; + rt = CM_MQ_Init(&s_CFM_Rx2oo2.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_10); + /*- 鍚姩2oo2鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2oo2); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_12); + CM_NM_ASSERT(s_CFM_Rx2oo2_Assert.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_27); + (void)sprintf(s_CFM_Rx2oo2_Assert.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Assert.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Assert; + s_CFM_Rx2oo2_Assert.pSock = &s_CFM_Sock.Sock_2oo2_Assert; + s_CFM_Rx2oo2_Assert.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Assert.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Assert; + rt = CM_MQ_Init(&s_CFM_Rx2oo2_Assert.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_28); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx_Assert", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2oo2_Assert); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_29); - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { - CM_NM_ASSERT(s_CFM_Rx2oo2Mainteance.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_19); + CM_NM_ASSERT(s_CFM_Rx2oo2Mainteance.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_19); (void)sprintf(s_CFM_Rx2oo2Mainteance.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); s_CFM_Rx2oo2Mainteance.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance; s_CFM_Rx2oo2Mainteance.pSock = &s_CFM_Sock.Sock_2oo2_Maintenance; s_CFM_Rx2oo2Mainteance.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); s_CFM_Rx2oo2Mainteance.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Maintenance; rt = CM_MQ_Init(&s_CFM_Rx2oo2Mainteance.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_MAINTENANCE_BUF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_20); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_20); /*- 鍚姩2oo2缁存姢鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvMaintenanceThread, "2oo2_Maintenance", 0, CM_TASK_PRIORITY_89, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2Mainteance); - CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_21); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvMaintenanceThread, "2oo2_Maintenance", 0, CM_TASK_PRIORITY_89, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2oo2Mainteance); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_21); } else { @@ -407,7 +420,7 @@ static void s_NetInit_2oo2(void) } /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_NM_ASSERT(s_CFM_Rx2oo2_App.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); + CM_NM_ASSERT(s_CFM_Rx2oo2_App.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); (void)sprintf(s_CFM_Rx2oo2_App.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); s_CFM_Rx2oo2_App.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_App; s_CFM_Rx2oo2_App.pSock = &s_CFM_Sock.Sock_2oo2_Data_App; @@ -415,63 +428,62 @@ static void s_NetInit_2oo2(void) s_CFM_Rx2oo2_App.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data_App; s_CFM_Rx2oo2_App.threadNumBer = (CM_UINT8)ENUM_THREAD_2oo2_AppRecv; rt = CM_MQ_Init(&s_CFM_Rx2oo2_App.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_15); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_15); /*- 鍚姩2oo2鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx_App", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_App); - CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_16); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx_App", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2oo2_App); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_16); /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_NM_ASSERT(s_CFM_Rx2oo2_State.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_22); + CM_NM_ASSERT(s_CFM_Rx2oo2_State.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_22); (void)sprintf(s_CFM_Rx2oo2_State.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); s_CFM_Rx2oo2_State.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_2x2_State; s_CFM_Rx2oo2_State.pSock = &s_CFM_Sock.Sock_2oo2_2x2_State; s_CFM_Rx2oo2_State.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); s_CFM_Rx2oo2_State.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_2x2_State; rt = CM_MQ_Init(&s_CFM_Rx2oo2_State.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)CFM_INNET_RAW_MSG_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_23); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_23); /*- 鍚姩2oo2鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_State); - CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_24); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2oo2_State); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_24); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } /** -* @brief 2oo2涓婄數鍚屾 -* @details -*/ + * @brief 2oo2涓婄數鍚屾 + * @details + */ ENUM_CM_RETURN CFM_2oo2_InitSync(void) { - /*- 鍙橀噺鍒濆鍖 */ + /*- 鍙橀噺鍒濆鍖 */ - - CM_UINT8 syn[10] = "SYN"; /* 鍚屾鎶ユ枃 */ - CM_UINT8 rxBuf[1500]; /* 鎺ユ敹缂撳啿鍖 */ - CM_INT32 rxLen = 0; /* 鎺ユ敹闀垮害 */ - ENUM_CM_RETURN SyncFlag = ENUM_CM_FALSE; /* 鍚屾鏍囪 */ - CM_UINT64 costStart = 0u; /* 60000*/ - CM_UINT64 costEnd = 0u; - CM_UINT64 timeResult = 0u; - /* - 涓烘彁楂樻墽琛屾晥鐜囧拰绮惧害锛屾墍鏈夊悓姝ャ佹牎鏃舵姤鏂囬兘鏄煭灏忕殑鏃犱繚鎶ゆ姤鏂囷紝 - 鑰屽懆鏈熼昏緫涓殑鍚屾鏍¢獙鎶ユ枃鏄湁鍏呭垎瀹夊叏淇濇姢鐨勶紝 - 浠庤岀‘淇濈▼搴忔墽琛岀殑瀹夊叏鎬 - */ - costStart = CM_GetTick(); - MSCP_LOG_MSG("costStart == %lld\n",costStart); - /*- 涓庨偦鏈轰氦鎹㈡牎楠屽抚 */ - rxLen = SFM_2oo2_Exchange_Currency(syn, 3, rxBuf, (CM_UINT8)sizeof(rxBuf), NUM_2oo2_FIRSTSYNC); - /*- 鏍¢獙甯ч暱搴︽槸鍚︾浉鍚 */ + CM_UINT8 syn[10] = "SYN"; /* 鍚屾鎶ユ枃 */ + CM_UINT8 rxBuf[1500]; /* 鎺ユ敹缂撳啿鍖 */ + CM_INT32 rxLen = 0; /* 鎺ユ敹闀垮害 */ + ENUM_CM_RETURN SyncFlag = ENUM_CM_FALSE; /* 鍚屾鏍囪 */ + CM_UINT64 costStart = 0u; /* 60000*/ + CM_UINT64 costEnd = 0u; + CM_UINT64 timeResult = 0u; + /* + 涓烘彁楂樻墽琛屾晥鐜囧拰绮惧害锛屾墍鏈夊悓姝ャ佹牎鏃舵姤鏂囬兘鏄煭灏忕殑鏃犱繚鎶ゆ姤鏂囷紝 + 鑰屽懆鏈熼昏緫涓殑鍚屾鏍¢獙鎶ユ枃鏄湁鍏呭垎瀹夊叏淇濇姢鐨勶紝 + 浠庤岀‘淇濈▼搴忔墽琛岀殑瀹夊叏鎬 + */ + costStart = CM_GetTick(); + MSCP_LOG_MSG("costStart == %lld\n", costStart); + /*- 涓庨偦鏈轰氦鎹㈡牎楠屽抚 */ + rxLen = SFM_2oo2_Exchange_Currency(syn, 3, rxBuf, (CM_UINT8)sizeof(rxBuf), NUM_2oo2_FIRSTSYNC); + /*- 鏍¢獙甯ч暱搴︽槸鍚︾浉鍚 */ costEnd = CM_GetTick(); /*- 瓒呰繃浜1鍒嗛挓鏈敹鍒伴偦鏈烘暟鎹 */ - if(costEnd - costStart > 60000000000u) + if (costEnd - costStart > 60000000000u) { /*- 缃负鍚屾澶辫触 */ - timeResult = (costEnd - costStart)/1000000000u; + timeResult = (costEnd - costStart) / 1000000000u; (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CFMNET_ININTSYNC_TIMEOUT, 8U, &timeResult); MSCP_LOG_MSG("timeResult == %lld\n", timeResult); CM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_32, TSCP_DARK_ASSERT_1); } /*- 鏀跺埌浜嗘纭殑涓婄數鍚屾鎶ユ枃 */ - else if((3 == rxLen) && (0 == CM_Memcmp(rxBuf, syn, (CM_SIZE_T)3))) + else if ((3 == rxLen) && (0 == CM_Memcmp(rxBuf, syn, (CM_SIZE_T)3))) { /*- 缃綅鍚屾鎴愬姛 */ SyncFlag = ENUM_CM_TRUE; @@ -482,107 +494,108 @@ ENUM_CM_RETURN CFM_2oo2_InitSync(void) /*- 鎺ユ敹鏁版嵁閿欒瀹曟満 */ CM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_32, TSCP_DARK_ASSERT_2); } - /*- 杩斿洖鍚屾缁撴灉 */ - return SyncFlag; + /*- 杩斿洖鍚屾缁撴灉 */ + return SyncFlag; } /** -* @brief 鍙戣捣涓娆2oo2鏃堕挓鍚屾 -* @details -* 鍙戦佷竴涓2oo2鏃堕挓鍚屾璇锋眰鎶ユ枃 -* 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 -* 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 -* @see :: CFM_2oo2_TimeGet -* @see :: t_TimeThread -*/ + * @brief 鍙戣捣涓娆2oo2鏃堕挓鍚屾 + * @details + * 鍙戦佷竴涓2oo2鏃堕挓鍚屾璇锋眰鎶ユ枃 + * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 + * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 + * @see :: CFM_2oo2_TimeGet + * @see :: t_TimeThread + */ void CFM_2oo2_TimeReq(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 buf[100]; - CM_INT32 len = 0; - CM_ATOMIC CM_UINT64 tick = 0u; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 buf[100]; + CM_INT32 len = 0; + CM_ATOMIC CM_UINT64 tick = 0u; - /*- 鐢熸垚鏃堕挓鍚屾璇锋眰鎶ユ枃 */ - len = 9; - buf[0] = (CM_UINT8)ENUM_TIME_REQ; + /*- 鐢熸垚鏃堕挓鍚屾璇锋眰鎶ユ枃 */ + len = 9; + buf[0] = (CM_UINT8)ENUM_TIME_REQ; - tick = DFM_GetCycTick(); + tick = DFM_GetCycTick(); - CM_64ToChar(tick, buf + 1); - /*- 鍙戦佹椂閽熷悓姝ヨ姹傛姤鏂 */ - (void)CM_UDP_Send_Msg(s_CFM_Sock.Sock_2oo2_Time, buf, len, inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2),g_PFM_Cfg.Peer_Cfg.Port_2oo2_Time); + CM_64ToChar(tick, buf + 1); + /*- 鍙戦佹椂閽熷悓姝ヨ姹傛姤鏂 */ + (void)CM_UDP_Send_Msg(s_CFM_Sock.Sock_2oo2_Time, buf, len, inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2), g_PFM_Cfg.Peer_Cfg.Port_2oo2_Time); } /** -* @brief 璇诲彇鏃堕挓鍚屾缁撴灉 -* @param pDelay 寤惰繜鏃堕棿 -* @param pOffset 鍋忕Щ鏃堕棿 -* @return 鎵ц缁撴灉 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) + * @brief 璇诲彇鏃堕挓鍚屾缁撴灉 + * @param pDelay 寤惰繜鏃堕棿 + * @param pOffset 鍋忕Щ鏃堕棿 + * @return 鎵ц缁撴灉 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64 *pDelay, OUT CM_INT64 *pOffset) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; - /*- 閿佸畾浜掓枼閿 */ - rt = CM_Mutex_Lock(s_CFM_2oo2_Time.mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); - /*- 鏄惁淇濆瓨浜嗘椂閽熷悓姝ョ粨鏋 */ - if (ENUM_CM_TRUE == s_CFM_2oo2_Time.isOK) - { - /*- 璇诲彇鏃堕挓鍚屾缁撴灉 */ - *pDelay = s_CFM_2oo2_Time.delay; - *pOffset = s_CFM_2oo2_Time.offset; - /*- 娓呴櫎鏃堕挓鍚屾缁撴灉 */ - s_CFM_2oo2_Time.isOK = ENUM_CM_FALSE; - rt = ENUM_CM_TRUE; - } - else + /*- 閿佸畾浜掓枼閿 */ + rt = CM_Mutex_Lock(s_CFM_2oo2_Time.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); + /*- 鏄惁淇濆瓨浜嗘椂閽熷悓姝ョ粨鏋 */ + if (ENUM_CM_TRUE == s_CFM_2oo2_Time.isOK) + { + /*- 璇诲彇鏃堕挓鍚屾缁撴灉 */ + *pDelay = s_CFM_2oo2_Time.delay; + *pOffset = s_CFM_2oo2_Time.offset; + /*- 娓呴櫎鏃堕挓鍚屾缁撴灉 */ + s_CFM_2oo2_Time.isOK = ENUM_CM_FALSE; + ret = ENUM_CM_TRUE; + } + else { /*- 鏃犲鐞 */ } - /*- 閲婃斁浜掓枼閿 */ - rt = CM_Mutex_Unlock(s_CFM_2oo2_Time.mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_2); - /*- 杩斿洖鎵ц缁撴灉 */ - return rt; + /*- 閲婃斁浜掓枼閿 */ + rt = CM_Mutex_Unlock(s_CFM_2oo2_Time.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_2); + /*- 杩斿洖鎵ц缁撴灉 */ + return ret; } /** -* @brief 閫氱敤2oo2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -static ENUM_CM_RETURN CFM_2oo2_Send_Currency(IN CM_SOCKET sock,IN const CM_UINT8* pBuf, IN CM_INT32 BufLen,IN CM_UINT16 nPortDest) + * @brief 閫氱敤2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +static ENUM_CM_RETURN CFM_2oo2_Send_Currency(IN CM_SOCKET sock, IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen, IN CM_UINT16 nPortDest) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鍏ュ弬鎸囬拡闃茬┖ */ - if(NULL != pBuf) - { + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍏ュ弬鎸囬拡闃茬┖ */ + if (NULL != pBuf) + { /*- UDP鏂瑰紡閫氳繃2oo2鏁版嵁閫氫俊閫氶亾鍚戦偦鏈哄彂閫 */ - rt = CM_UDP_Send_Msg(sock, pBuf, BufLen, inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2),nPortDest); - } - else - { - /*绌烘寚閽堣繑鍥炲け璐*/ - } - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; + rt = CM_UDP_Send_Msg(sock, pBuf, BufLen, inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2), nPortDest); + } + else + { + /*绌烘寚閽堣繑鍥炲け璐*/ + } + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; } /** -* @brief 2oo2閲嶄紶璇锋眰涓庡簲绛擜CK鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,ENUM_2oo2_NET_T msgType) + * @brief 2oo2閲嶄紶璇锋眰涓庡簲绛擜CK鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl, ENUM_2oo2_NET_T msgType) { CM_UINT8 sendbuf[20] = {0}; CM_UINT32 SysCyc = DFM_GetBirthCount(); /*骞冲彴鍛ㄦ湡鍙*/ @@ -593,42 +606,42 @@ static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_ 4瀛楄妭 搴忓垪鍙 1瀛楄妭 绫诲瀷 */ - CM_LongToChar(9u, &sendbuf[0]); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ - CM_LongToChar(SysCyc, &sendbuf[4]); /* 鍛ㄦ湡鍙 */ - CM_LongToChar(p_2oo2_Ctrl->SN, &sendbuf[8]); /* 搴忓垪鍙 */ - sendbuf[12] = (CM_UINT8)msgType; /* 绫诲瀷 */ + CM_LongToChar(9u, &sendbuf[0]); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ + CM_LongToChar(SysCyc, &sendbuf[4]); /* 鍛ㄦ湡鍙 */ + CM_LongToChar(p_2oo2_Ctrl->SN, &sendbuf[8]); /* 搴忓垪鍙 */ + sendbuf[12] = (CM_UINT8)msgType; /* 绫诲瀷 */ - /*- 杩斿洖鍙戦佺粨鏋 */ - return p_2oo2_Ctrl->DataSend(sendbuf,13u); + /*- 杩斿洖鍙戦佺粨鏋 */ + return p_2oo2_Ctrl->DataSend(sendbuf, 13u); } /** -* @brief 2oo2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_DataSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { /*- 鎸囬拡闃茬┖*/ - CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_31, TSCP_DARK_ASSERT_1); - /*- 杩斿洖鍙戦佺粨鏋 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data); + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_31, TSCP_DARK_ASSERT_1); + /*- 杩斿洖鍙戦佺粨鏋 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data, pBuf, BufLen, g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data); } /** -* @brief 2oo2鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鎸囬拡闃茬┖*/ - /*- 鍙橀噺鍒濆鍖 */ + /*- 鎸囬拡闃茬┖*/ + /*- 鍙橀噺鍒濆鍖 */ CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); ENUM_CM_RETURN rt = ENUM_CM_FALSE; /*- 鎸囬拡闃茬┖*/ @@ -640,7 +653,7 @@ CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) { /*- 杈撳嚭鎺ユ敹鏁版嵁 */ len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2.cache_buf + 6), (CM_SIZE_T)len); + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_Rx2oo2.cache_buf + 6), (CM_SIZE_T)len); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_2); } else @@ -653,33 +666,33 @@ CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) } /** -* @brief 2oo2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_DataSend_App(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_DataSend_App(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { - /*- 鍏ュ弬鎸囬拡闃茬┖ */ - CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_34, TSCP_DARK_ASSERT_1); - /*- 杩斿洖鍙戦佺粨鏋 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data_App,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data_App); + /*- 鍏ュ弬鎸囬拡闃茬┖ */ + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_34, TSCP_DARK_ASSERT_1); + /*- 杩斿洖鍙戦佺粨鏋 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data_App, pBuf, BufLen, g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data_App); } /** -* @brief 2oo2鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鎸囬拡闃茬┖*/ - /*- 鍙橀噺鍒濆鍖 */ + /*- 鎸囬拡闃茬┖*/ + /*- 鍙橀噺鍒濆鍖 */ CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); ENUM_CM_RETURN rt = ENUM_CM_FALSE; /*- 鎸囬拡闃茬┖*/ @@ -691,7 +704,7 @@ CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) { /*- 杈撳嚭鎺ユ敹鏁版嵁 */ len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2_App.cache_buf + 6), (CM_SIZE_T)len); + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_Rx2oo2_App.cache_buf + 6), (CM_SIZE_T)len); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_33, TSCP_DARK_ASSERT_2); } else @@ -703,33 +716,33 @@ CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) return (CM_INT32)len; } /** -* @brief 2oo2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_2xStateSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_2xStateSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { /*- 鎸囬拡闃茬┖*/ - CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_1); - /*- 杩斿洖鍙戦佺粨鏋 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_2x2_State,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_2x2_State); + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_1); + /*- 杩斿洖鍙戦佺粨鏋 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_2x2_State, pBuf, BufLen, g_PFM_Cfg.Peer_Cfg.Port_2oo2_2x2_State); } /** -* @brief 2oo2鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鎸囬拡闃茬┖*/ - /*- 鍙橀噺鍒濆鍖 */ + /*- 鎸囬拡闃茬┖*/ + /*- 鍙橀噺鍒濆鍖 */ CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); ENUM_CM_RETURN rt = ENUM_CM_FALSE; /*- 鎸囬拡闃茬┖*/ @@ -741,7 +754,7 @@ CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) { /*- 杈撳嚭鎺ユ敹鏁版嵁 */ len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2_State.cache_buf + 6), (CM_SIZE_T)len); + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_Rx2oo2_State.cache_buf + 6), (CM_SIZE_T)len); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_39, TSCP_DARK_ASSERT_2); } else @@ -753,132 +766,131 @@ CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) return (CM_INT32)len; } /** -* @brief 2oo2鏁版嵁鍙戦(缁存姢妯″紡) -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_DataSend_Crash(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2oo2鏁版嵁鍙戦(缁存姢妯″紡) + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_DataSend_Crash(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { - /*- 杩斿洖鍙戦佺粨鏋 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Maintenance,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Maintenance); -} - - -/** -* @brief 2oo2鏁版嵁鎺ユ敹(缁存姢妯″紡) -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) -{ - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鎸囬拡闃茬┖*/ - CM_ASSERT_MAINTAIN(NULL != pBuf); - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_Rx2oo2Mainteance.MsgQ, s_CFM_Rx2oo2Mainteance.cache_buf, &len); - - /*- 鏄惁鑾峰彇鎴愬姛 */ - if ((ENUM_CM_TRUE == rt) && (6u < len)) - { - /*- 杈撳嚭鎺ユ敹鏁版嵁 */ - len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2Mainteance.cache_buf + 6), (CM_SIZE_T)len); - CM_ASSERT_MAINTAIN(ENUM_CM_TRUE == rt); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; -} -/** -* @brief 2oo2鏁版嵁鍙戦(瀹曟満鐘舵) -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2oo2_DataSend_ASSERT(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) -{ - /*- 杩斿洖鍙戦佺粨鏋 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data); + /*- 杩斿洖鍙戦佺粨鏋 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Maintenance, pBuf, BufLen, g_PFM_Cfg.Peer_Cfg.Port_2oo2_Maintenance); } /** -* @brief 2oo2鏁版嵁鎺ユ敹(瀹曟満鐘舵) -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2鏁版嵁鎺ユ敹(缁存姢妯″紡) + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鎸囬拡闃茬┖*/ - CM_ASSERT_MAINTAIN(NULL != pBuf); - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_Rx2oo2.MsgQ, s_CFM_Rx2oo2.cache_buf, &len); - /*- 鏄惁鑾峰彇鎴愬姛 */ - if ((ENUM_CM_TRUE == rt) && (6u < len)) - { - /*- 杈撳嚭鎺ユ敹鏁版嵁 */ - len -= 6u; - (void)CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2.cache_buf + 6), (CM_SIZE_T)len); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鎸囬拡闃茬┖*/ + CM_ASSERT_MAINTAIN(NULL != pBuf); + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_Rx2oo2Mainteance.MsgQ, s_CFM_Rx2oo2Mainteance.cache_buf, &len); + + /*- 鏄惁鑾峰彇鎴愬姛 */ + if ((ENUM_CM_TRUE == rt) && (6u < len)) + { + /*- 杈撳嚭鎺ユ敹鏁版嵁 */ + len -= 6u; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_Rx2oo2Mainteance.cache_buf + 6), (CM_SIZE_T)len); + CM_ASSERT_MAINTAIN(ENUM_CM_TRUE == rt); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; +} +/** + * @brief 2oo2鏁版嵁鍙戦(瀹曟満鐘舵) + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2oo2_DataSend_ASSERT(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) +{ + /*- 杩斿洖鍙戦佺粨鏋 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Assert, pBuf, BufLen, g_PFM_Cfg.Peer_Cfg.Port_2oo2_Assert); } /** -* @breif 鍏ㄥ弻宸ヤ笉鍒嗗寘2oo2鏁版嵁浜ゆ崲锛屾敮鎸侀噸浼 -* @param pMyData 鏈満鏁版嵁鎸囬拡 -* @param DataLen 鏈墽鏁版嵁闀垮害 -* @param pPeerData 閭绘満鏁版嵁鎸囬拡 -* @param DataSize 閭绘満鏁版嵁缂撳啿鍖哄ぇ灏 -* @param msgTye 2oo2浜ゆ崲鏁版嵁绫诲瀷 -* @return 鏀跺埌鐨勯偦鏈烘暟鎹暱搴 -*/ -CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const CM_UINT8 * pMyData, IN CM_INT32 DataLen, OUT CM_UINT8 * pPeerData, IN CM_UINT32 DataSize) + * @brief 2oo2鏁版嵁鎺ユ敹(瀹曟満鐘舵) + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 rxLen = -1; - CM_INT32 allLen = -1; /* 鏀跺埌鐨勬姤鏂囨婚暱搴 */ - CM_UINT8 recvBuf[1500] = {0u}; - CM_UINT32 msgLen = 0u; - CM_UINT8 msgType = 0u; - CM_UINT32 msgSN = 0u; - CM_UINT32 msgCyc = 0u; - CM_BOOL mineRcvFlag = CM_FALSE;/*鏈満鎺ユ敹瀹屾垚鏍囧織*/ - CM_BOOL peerRcvFlag = CM_FALSE;/*瀵圭郴鎺ユ敹瀹屾垚鏍囧織*/ - /*鍙戦佺浉鍏*/ - CM_UINT8 sendBuf[1500] = {0u}; - CM_UINT32 sysCyc = DFM_GetBirthCount(); /*骞冲彴鍛ㄦ湡鍙*/ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鎸囬拡闃茬┖*/ + CM_ASSERT_MAINTAIN(NULL != pBuf); + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_Rx2oo2_Assert.MsgQ, s_CFM_Rx2oo2_Assert.cache_buf, &len); + /*- 鏄惁鑾峰彇鎴愬姛 */ + if ((ENUM_CM_TRUE == rt) && (6u < len)) + { + /*- 杈撳嚭鎺ユ敹鏁版嵁 */ + len -= 6u; + (void)CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_Rx2oo2_Assert.cache_buf + 6), (CM_SIZE_T)len); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; +} - CM_UINT64 curTick = 0u; /* 褰撳墠鏃跺埢 */ - CM_UINT64 sTick = 0u; /* 璧峰Tick */ - /*- 鍏ュ彛妫鏌 */ - if((p_2oo2_Ctrl != NULL) && (pMyData != NULL) && (DataLen < 1490) && (pPeerData != NULL)) - { - /*- 鏇存柊2oo2閫氫俊搴忓垪鍙 */ +/** + * @breif 鍏ㄥ弻宸ヤ笉鍒嗗寘2oo2鏁版嵁浜ゆ崲锛屾敮鎸侀噸浼 + * @param pMyData 鏈満鏁版嵁鎸囬拡 + * @param DataLen 鏈墽鏁版嵁闀垮害 + * @param pPeerData 閭绘満鏁版嵁鎸囬拡 + * @param DataSize 閭绘満鏁版嵁缂撳啿鍖哄ぇ灏 + * @param msgTye 2oo2浜ゆ崲鏁版嵁绫诲瀷 + * @return 鏀跺埌鐨勯偦鏈烘暟鎹暱搴 + */ +CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl, IN const CM_UINT8 *pMyData, IN CM_INT32 DataLen, OUT CM_UINT8 *pPeerData, IN CM_UINT32 DataSize) +{ + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 rxLen = -1; + CM_INT32 allLen = -1; /* 鏀跺埌鐨勬姤鏂囨婚暱搴 */ + CM_UINT8 recvBuf[1500] = {0u}; + CM_UINT32 msgLen = 0u; + CM_UINT8 msgType = 0u; + CM_UINT32 msgSN = 0u; + CM_UINT32 msgCyc = 0u; + CM_BOOL mineRcvFlag = CM_FALSE; /*鏈満鎺ユ敹瀹屾垚鏍囧織*/ + CM_BOOL peerRcvFlag = CM_FALSE; /*瀵圭郴鎺ユ敹瀹屾垚鏍囧織*/ + /*鍙戦佺浉鍏*/ + CM_UINT8 sendBuf[1500] = {0u}; + CM_UINT32 sysCyc = DFM_GetBirthCount(); /*骞冲彴鍛ㄦ湡鍙*/ + + CM_UINT64 curTick = 0u; /* 褰撳墠鏃跺埢 */ + CM_UINT64 sTick = 0u; /* 璧峰Tick */ + /*- 鍏ュ彛妫鏌 */ + if ((p_2oo2_Ctrl != NULL) && (pMyData != NULL) && (DataLen < 1490) && (pPeerData != NULL)) + { + /*- 鏇存柊2oo2閫氫俊搴忓垪鍙 */ p_2oo2_Ctrl->SN++; /* 2oo2閫氫俊甯ф牸寮忥細 @@ -887,52 +899,50 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const 4瀛楄妭 搴忓垪鍙 1瀛楄妭 绫诲瀷 */ - CM_LongToChar((CM_UINT32)DataLen + 9u, &sendBuf[0]); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ - CM_LongToChar(sysCyc, &sendBuf[4]); /* 鍛ㄦ湡鍙 */ - CM_LongToChar(p_2oo2_Ctrl->SN, &sendBuf[8]); /* 搴忓垪鍙 */ - sendBuf[12] = (CM_UINT8)ENUM_2oo2_NET_DATA; /* 绫诲瀷 */ - (void)CM_Memcpy((void*)(&sendBuf[13]),1490u,pMyData,(CM_SIZE_T)DataLen); + CM_LongToChar((CM_UINT32)DataLen + 9u, &sendBuf[0]); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ + CM_LongToChar(sysCyc, &sendBuf[4]); /* 鍛ㄦ湡鍙 */ + CM_LongToChar(p_2oo2_Ctrl->SN, &sendBuf[8]); /* 搴忓垪鍙 */ + sendBuf[12] = (CM_UINT8)ENUM_2oo2_NET_DATA; /* 绫诲瀷 */ + (void)CM_Memcpy((void *)(&sendBuf[13]), 1490u, pMyData, (CM_SIZE_T)DataLen); /*- 鍙戦2oo2鏁版嵁 */ (void)p_2oo2_Ctrl->DataSend(sendBuf, DataLen + 13); /*- 璁板綍璧峰鏃堕棿*/ sTick = CM_GetTick(); - while(1) + while (1) { - rxLen = p_2oo2_Ctrl->DataRecv(recvBuf,1500u); - if(rxLen >= 13) + rxLen = p_2oo2_Ctrl->DataRecv(recvBuf, 1500u); + if (rxLen >= 13) { msgLen = CM_LongFromChar(&recvBuf[0]); msgCyc = CM_LongFromChar(&recvBuf[4]); msgSN = CM_LongFromChar(&recvBuf[8]); msgType = recvBuf[12]; - if(((msgLen + 4u) == (CM_UINT32)rxLen) - && (msgCyc == sysCyc) - && (msgSN == p_2oo2_Ctrl->SN)) + if (((msgLen + 4u) == (CM_UINT32)rxLen) && (msgCyc == sysCyc) && (msgSN == p_2oo2_Ctrl->SN)) { - switch((ENUM_2oo2_NET_T)msgType) + switch ((ENUM_2oo2_NET_T)msgType) { case ENUM_2oo2_NET_ARQ: /*- 鍙戦2oo2鏁版嵁 */ (void)p_2oo2_Ctrl->DataSend(sendBuf, DataLen + 13); - if(CM_TRUE == mineRcvFlag) + if (CM_TRUE == mineRcvFlag) { - (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_RCV_SUCCESS); + (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl, ENUM_2oo2_NET_RCV_SUCCESS); } break; case ENUM_2oo2_NET_RCV_SUCCESS: peerRcvFlag = CM_TRUE; break; case ENUM_2oo2_NET_DATA: - if(CM_FALSE == mineRcvFlag) + if (CM_FALSE == mineRcvFlag) { /*鎺ユ敹鎴愬姛*/ allLen = (CM_INT32)(msgLen - 9u); - (void)CM_Memcpy((void*)pPeerData,DataSize,&recvBuf[13],(CM_SIZE_T)allLen); + (void)CM_Memcpy((void *)pPeerData, DataSize, &recvBuf[13], (CM_SIZE_T)allLen); mineRcvFlag = CM_TRUE; - (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_RCV_SUCCESS); - (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_RCV_SUCCESS); - (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_RCV_SUCCESS); + (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl, ENUM_2oo2_NET_RCV_SUCCESS); + (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl, ENUM_2oo2_NET_RCV_SUCCESS); + (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl, ENUM_2oo2_NET_RCV_SUCCESS); } else { @@ -955,10 +965,10 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const CM_Sleep(1); curTick = CM_GetTick(); /*- 瓒呮椂閲嶄紶锛屾帴鏀舵垚鍔熸爣蹇椾笉鍝嶅簲*/ - if((CM_UNSIGNED_MILLION*10u) < (curTick-sTick)) + if ((CM_UNSIGNED_MILLION * 10u) < (curTick - sTick)) { /*鍙戦侀噸浼犺姹*/ - (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_ARQ); + (void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl, ENUM_2oo2_NET_ARQ); /*- 閲嶇疆璧峰鏃堕棿*/ sTick = CM_GetTick(); } @@ -967,218 +977,217 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const /*- 鏃犲鐞 */ } } - if((CM_TRUE == mineRcvFlag) && (CM_TRUE == peerRcvFlag)) - { - /*- 缁撴潫鎺ユ敹 */ - rxLen = (CM_INT32)msgLen - 9; - break; - } - else - { - /*- 鏃犲鐞 */ - } - }/*while*/ - } - else - { - rxLen = -1; - } - /*- 杩斿洖鏀跺埌鐨勬姤鏂囬暱搴 */ - return allLen; + if ((CM_TRUE == mineRcvFlag) && (CM_TRUE == peerRcvFlag)) + { + /*- 缁撴潫鎺ユ敹 */ + rxLen = (CM_INT32)msgLen - 9; + break; + } + else + { + /*- 鏃犲鐞 */ + } + } /*while*/ + } + else + { + rxLen = -1; + } + /*- 杩斿洖鏀跺埌鐨勬姤鏂囬暱搴 */ + return allLen; } - /*********************************2X鐩稿叧*****************************************/ /** -* @brief 2x2鐩稿叧缃戠粶閫氫俊鍒濆鍖 -*/ + * @brief 2x2鐩稿叧缃戠粶閫氫俊鍒濆鍖 + */ static void s_NetInit_2x2(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ - CM_BOOL rtCheck = CM_FALSE; /* 涓存椂鍙橀噺 */ - /*- 鍒涘缓socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Time, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ + CM_BOOL rtCheck = CM_FALSE; /* 涓存椂鍙橀噺 */ + /*- 鍒涘缓socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Time, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Data, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Syn, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Syn, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); - /*- 鍒涘缓2x鐘舵佸垏鎹㈢嫭绔嬬嚎绋媠ocket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_State, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_13); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Data, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Syn, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Syn, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + /*- 鍒涘缓2x鐘舵佸垏鎹㈢嫭绔嬬嚎绋媠ocket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_State, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_13); - /*- 鍒濆鍖栨帶鍒朵俊鎭 */ - CM_ASSERT(s_CFM_2x2_Time.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_4); + /*- 鍒濆鍖栨帶鍒朵俊鎭 */ + CM_ASSERT(s_CFM_2x2_Time.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_4); (void)sprintf(s_CFM_2x2_Time.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); s_CFM_2x2_Time.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Time; s_CFM_2x2_Time.pSock = &s_CFM_Sock.Sock_2x2_Time; rt = CM_Mutex_Init(&s_CFM_2x2_Time.mutex); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_5); - /*- 閰嶇疆socket */ - val = (CM_INT32)(NET_UDP_BUF_DOUBLESIZE); - (void)setsockopt(s_CFM_Sock.Sock_2x2_Data, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2x2_Data, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + /*- 閰嶇疆socket */ + val = (CM_INT32)(NET_UDP_BUF_DOUBLESIZE); + (void)setsockopt(s_CFM_Sock.Sock_2x2_Data, SOL_SOCKET, SO_RCVBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2x2_Data, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); - CM_ASSERT(s_CFM_2x2_Syn.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_6); - (void)sprintf(s_CFM_2x2_Syn.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); - s_CFM_2x2_Syn.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Syn; - s_CFM_2x2_Syn.pSock = &s_CFM_Sock.Sock_2x2_Syn; - rt = CM_Mutex_Init(&s_CFM_2x2_Syn.mutex); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_7); + CM_ASSERT(s_CFM_2x2_Syn.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_6); + (void)sprintf(s_CFM_2x2_Syn.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_2x2_Syn.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Syn; + s_CFM_2x2_Syn.pSock = &s_CFM_Sock.Sock_2x2_Syn; + rt = CM_Mutex_Init(&s_CFM_2x2_Syn.mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_7); - /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_Rx2x2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_8); - (void)sprintf(s_CFM_Rx2x2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); - s_CFM_Rx2x2.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Data; - s_CFM_Rx2x2.pSock = &s_CFM_Sock.Sock_2x2_Data; - s_CFM_Rx2x2.rmtIP = inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2); - s_CFM_Rx2x2.rmtPort = g_PFM_Cfg.Partner_Cfg.Port_2x2_Data; - rt = CM_MQ_Init(&s_CFM_Rx2x2.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2X2_BUF_SIZE); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_9); + /*- 閰嶇疆鎺ユ敹绾跨▼ */ + CM_ASSERT(s_CFM_Rx2x2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_8); + (void)sprintf(s_CFM_Rx2x2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_Rx2x2.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Data; + s_CFM_Rx2x2.pSock = &s_CFM_Sock.Sock_2x2_Data; + s_CFM_Rx2x2.rmtIP = inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2); + s_CFM_Rx2x2.rmtPort = g_PFM_Cfg.Partner_Cfg.Port_2x2_Data; + rt = CM_MQ_Init(&s_CFM_Rx2x2.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2X2_BUF_SIZE); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_9); - /*-閰嶇疆鐘舵佸垏鎹㈢嚎绋 */ - CM_ASSERT(s_CFM_State2x2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_14); - (void)sprintf(s_CFM_State2x2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); - s_CFM_State2x2.port = g_PFM_Cfg.Local_Cfg.Port_2x2_State; - s_CFM_State2x2.pSock = &s_CFM_Sock.Sock_2x2_State; - s_CFM_State2x2.rmtIP = inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2); - s_CFM_State2x2.rmtPort = g_PFM_Cfg.Partner_Cfg.Port_2x2_State; - s_CFM_State2x2.threadNumBer = (CM_UINT8)ENUM_THREAD_2x2_StateRecv; - rt = CM_MQ_Init(&s_CFM_State2x2.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)CFM_2X2_MSG_NUM_MAX); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_15); + /*-閰嶇疆鐘舵佸垏鎹㈢嚎绋 */ + CM_ASSERT(s_CFM_State2x2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_14); + (void)sprintf(s_CFM_State2x2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_State2x2.port = g_PFM_Cfg.Local_Cfg.Port_2x2_State; + s_CFM_State2x2.pSock = &s_CFM_Sock.Sock_2x2_State; + s_CFM_State2x2.rmtIP = inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2); + s_CFM_State2x2.rmtPort = g_PFM_Cfg.Partner_Cfg.Port_2x2_State; + s_CFM_State2x2.threadNumBer = (CM_UINT8)ENUM_THREAD_2x2_StateRecv; + rt = CM_MQ_Init(&s_CFM_State2x2.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)CFM_2X2_MSG_NUM_MAX); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_15); - /*- 鍚姩2x2鏃堕挓鍚屾绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_TimeThread, "2x2_T", 0, CM_TASK_PRIORITY_76, (CM_Thread_Arg_Struct_T*)&s_CFM_2x2_Time); - CM_ASSERT(CM_TRUE == rtCheck,NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_10); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ - /*- 鍚姩2x2鍛ㄦ湡鍚屾绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_SyncThread, "2x2_Syn", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T*)&s_CFM_2x2_Syn); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_16); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ - - /*- 鍚姩2x2骞冲彴鏁版嵁鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2x2_Rx", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2x2); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_11); - /*- 鍚姩2x2骞冲彴鏁版嵁鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2x2_RxState", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T*)&s_CFM_State2x2); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_12); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*- 鍚姩2x2鏃堕挓鍚屾绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_TimeThread, "2x2_T", 0, CM_TASK_PRIORITY_76, (CM_Thread_Arg_Struct_T *)&s_CFM_2x2_Time); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_10); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*- 鍚姩2x2鍛ㄦ湡鍚屾绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_SyncThread, "2x2_Syn", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T *)&s_CFM_2x2_Syn); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_16); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*- 鍚姩2x2骞冲彴鏁版嵁鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2x2_Rx", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T *)&s_CFM_Rx2x2); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_11); + /*- 鍚姩2x2骞冲彴鏁版嵁鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2x2_RxState", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T *)&s_CFM_State2x2); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_12); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } /** -* @brief 2x2鐘舵佹暟鎹彂閫 -* @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2x2_StateChange_Send(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2x2鐘舵佹暟鎹彂閫 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2x2_StateChange_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鍏ュ弬鎸囬拡闃茬┖ */ - if(NULL != pBuf) - { + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍏ュ弬鎸囬拡闃茬┖ */ + if (NULL != pBuf) + { /*- 2x鐘舵佸垏鎹DP閫氫俊閫氶亾鍚戝绯诲彂閫 */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_State, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2),g_PFM_Cfg.Partner_Cfg.Port_2x2_State); - } - else - { - /*绌烘寚閽堣繑鍥炲け璐*/ - } - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_State, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_State); + } + else + { + /*绌烘寚閽堣繑鍥炲け璐*/ + } + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; } /** -* @brief 閫氱敤2x2鐘舵佹暟鎹帴鏀 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2x2_StateChange_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 閫氱敤2x2鐘舵佹暟鎹帴鏀 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2x2_StateChange_Recv(CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - CM_UINT8 tempBuf[200] = {0}; - CM_RE_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_40, TSCP_DARK_ASSERT_1); - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_State2x2.MsgQ, tempBuf, &len); - /*- 鏄惁鑾峰彇鎴愬姛 */ - if ((rt == ENUM_CM_TRUE) && (len > 6u)) - { - /*- 杈撳嚭鎺ユ敹鏁版嵁 */ - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(tempBuf), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_40, TSCP_DARK_ASSERT_2); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + CM_UINT8 tempBuf[200] = {0}; + CM_RE_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_40, TSCP_DARK_ASSERT_1); + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_State2x2.MsgQ, tempBuf, &len); + /*- 鏄惁鑾峰彇鎴愬姛 */ + if ((rt == ENUM_CM_TRUE) && (len > 6u)) + { + /*- 杈撳嚭鎺ユ敹鏁版嵁 */ + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(tempBuf), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_40, TSCP_DARK_ASSERT_2); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; } /** -* @brief 鍙戣捣涓娆2x2鏃堕挓鍚屾 -* @details -* 鍙戦佷竴涓2x2鏃堕挓鍚屾璇锋眰鎶ユ枃 -* 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 -* 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 -* @see :: CFM_2x2_TimeGet -* @see :: t_TimeThread -*/ + * @brief 鍙戣捣涓娆2x2鏃堕挓鍚屾 + * @details + * 鍙戦佷竴涓2x2鏃堕挓鍚屾璇锋眰鎶ユ枃 + * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 + * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 + * @see :: CFM_2x2_TimeGet + * @see :: t_TimeThread + */ void CFM_2x2_TimeReq(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 buf[100]; - CM_INT32 len = 0; - CM_ATOMIC CM_UINT64 tick = 0u; - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鐢熸垚鏃堕挓鍚屾璇锋眰鎶ユ枃 */ - len = 9; - buf[0] = (CM_UINT8)ENUM_TIME_REQ; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 buf[100]; + CM_INT32 len = 0; + CM_ATOMIC CM_UINT64 tick = 0u; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鐢熸垚鏃堕挓鍚屾璇锋眰鎶ユ枃 */ + len = 9; + buf[0] = (CM_UINT8)ENUM_TIME_REQ; - tick = DFM_GetCycTick(); + tick = DFM_GetCycTick(); - CM_64ToChar(tick, buf + 1); - /*- 鍙戦佹椂閽熷悓姝ヨ姹傛姤鏂 */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Time, buf, len, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_Time); - if(ENUM_CM_TRUE != rt) - { - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1)); - MSCP_LOG_MSG("CFM_2x2_TimeReq UDP_SEND Error!\n"); - } - else - { - /*- 涓嶅鐞 */ - } + CM_64ToChar(tick, buf + 1); + /*- 鍙戦佹椂閽熷悓姝ヨ姹傛姤鏂 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Time, buf, len, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_Time); + if (ENUM_CM_TRUE != rt) + { + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1)); + MSCP_LOG_MSG("CFM_2x2_TimeReq UDP_SEND Error!\n"); + } + else + { + /*- 涓嶅鐞 */ + } } /** -* @brief 璇诲彇2x2鏃堕挓鍚屾缁撴灉 -* @param pDelay 寤惰繜鏃堕棿 -* @param pOffset 鍋忕Щ鏃堕棿 -* @return 鎵ц缁撴灉 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) + * @brief 璇诲彇2x2鏃堕挓鍚屾缁撴灉 + * @param pDelay 寤惰繜鏃堕棿 + * @param pOffset 鍋忕Щ鏃堕棿 + * @return 鎵ц缁撴灉 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64 *pDelay, OUT CM_INT64 *pOffset) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鎸囬拡涓嶄负绌 */ - if((NULL != pDelay) && (NULL != pOffset)) + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + /*- 鎸囬拡涓嶄负绌 */ + if ((NULL != pDelay) && (NULL != pOffset)) { /*- 閿佸畾浜掓枼閿 */ rt = CM_Mutex_Lock(s_CFM_2x2_Time.mutex); @@ -1191,11 +1200,11 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) *pOffset = s_CFM_2x2_Time.offset; /*- 娓呴櫎鏃堕挓鍚屾缁撴灉 */ s_CFM_2x2_Time.isOK = ENUM_CM_FALSE; - rt = ENUM_CM_TRUE; + ret = ENUM_CM_TRUE; } else { - //TSCP_DARK_CFMNET_2x2TIMEGET_REDERROR + // TSCP_DARK_CFMNET_2x2TIMEGET_REDERROR (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1)); MSCP_LOG_MSG("s_CFM_2x2_Time.isOK != ENUM_CM_TRUE\n"); } @@ -1205,273 +1214,271 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) } else { - //TSCP_DARK_CFMNET_2x2TIMEGET_REDNULL + // TSCP_DARK_CFMNET_2x2TIMEGET_REDNULL (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2)); MSCP_LOG_MSG("pDelay == NULL || pOffset == NULL\n"); } - /*- 杩斿洖鎵ц缁撴灉 */ - return rt; + /*- 杩斿洖鎵ц缁撴灉 */ + return ret; } /** -* @brief 鍛ㄦ湡鍚屾绾跨▼ -* @param arg 鎸囧悜STRU_CFM_SYN_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_SYN_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀跺懆鏈熷悓姝ユ姤鏂囥佸苟璁板綍鏀跺埌鎶ユ枃鐨勭簿纭椂闂 -* @see :: CFM_2x2_SyncSend -* @see :: CFM_2x2_SyncRecv -*/ -static CM_THREAD_FUNC_T t_SyncThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 鍛ㄦ湡鍚屾绾跨▼ + * @param arg 鎸囧悜STRU_CFM_SYN_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_SYN_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀跺懆鏈熷悓姝ユ姤鏂囥佸苟璁板綍鏀跺埌鎶ユ枃鐨勭簿纭椂闂 + * @see :: CFM_2x2_SyncSend + * @see :: CFM_2x2_SyncRecv + */ +static CM_THREAD_FUNC_T t_SyncThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_SYN_CTRL_T* pCtrl = (STRU_CFM_SYN_CTRL_T*)arg; /* 绾跨▼鍙傛暟 */ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ - CM_UINT8 buf[1000] = { 0u }; /* 鎺ユ敹缂撳啿鍖 */ - CM_INT32 len; /* 鏁版嵁闀垮害 */ - CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_SYN_CTRL_T *pCtrl = (STRU_CFM_SYN_CTRL_T *)arg; /* 绾跨▼鍙傛暟 */ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ + CM_UINT8 buf[1000] = {0u}; /* 鎺ユ敹缂撳啿鍖 */ + CM_INT32 len; /* 鏁版嵁闀垮害 */ + CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d Sync Service Start\n", pCtrl->IP, (CM_INT32)pCtrl->port); - /*- 寰幆鎺ユ敹鍚屾鎶ユ枃 */ - while (1) - { - /*- 闃诲鎺ユ敹鍛ㄦ湡鍚屾鎶ユ枃 */ - len = CM_UDP_Recv_Msg(*(pCtrl->pSock), buf, (CM_INT32)sizeof(buf), &srcIP, &srcPort); - tick = CM_GetTick(); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if (len > 0) - { - /*- 璁板綍鎶ユ枃鍐呭鍜屾帴鏀舵椂鍒 */ - rt = CM_Mutex_Lock(pCtrl->mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1); + MSCP_LOG_MSG("IP:%s:%d Sync Service Start\n", pCtrl->IP, (CM_INT32)pCtrl->port); + /*- 寰幆鎺ユ敹鍚屾鎶ユ枃 */ + while (1) + { + /*- 闃诲鎺ユ敹鍛ㄦ湡鍚屾鎶ユ枃 */ + len = CM_UDP_Recv_Msg(*(pCtrl->pSock), buf, (CM_INT32)sizeof(buf), &srcIP, &srcPort); + tick = CM_GetTick(); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if (len > 0) + { + /*- 璁板綍鎶ユ枃鍐呭鍜屾帴鏀舵椂鍒 */ + rt = CM_Mutex_Lock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1); - pCtrl->rxLen = len; - rt = CM_Memcpy((void*)pCtrl->rxBuf, sizeof(pCtrl->rxBuf), (void*)buf, (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); - pCtrl->rxTick = tick; + pCtrl->rxLen = len; + rt = CM_Memcpy((void *)pCtrl->rxBuf, sizeof(pCtrl->rxBuf), (void *)buf, (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); + pCtrl->rxTick = tick; - rt = CM_Mutex_Unlock(pCtrl->mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); - } - else - { - /*- 涓嶅鐞 */ - } - } - return NULL; + rt = CM_Mutex_Unlock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); + } + else + { + /*- 涓嶅鐞 */ + } + } + return NULL; } /** -* @brief 2x2鍚屾鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2x2_SyncSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2x2鍚屾鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2x2_SyncSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /* UDP鏂瑰紡浠2x2鍛ㄦ湡鍚屾閫氶亾鍙戦 */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Syn, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2),g_PFM_Cfg.Partner_Cfg.Port_2x2_Syn); - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /* UDP鏂瑰紡浠2x2鍛ㄦ湡鍚屾閫氶亾鍙戦 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Syn, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_Syn); + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; } /** -* @brief 2x2鍚屾鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param bufSize 鎺ユ敹缂撳啿鍖哄ぇ灏 -* @param pRxTick 鎺ユ敹鏃跺埢 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2x2_SyncRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 bufSize, OUT CM_UINT64* pRxTick) + * @brief 2x2鍚屾鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param bufSize 鎺ユ敹缂撳啿鍖哄ぇ灏 + * @param pRxTick 鎺ユ敹鏃跺埢 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2x2_SyncRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 bufSize, OUT CM_UINT64 *pRxTick) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 len = 0; - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 閿佸畾浜掓枼淇″彿閲 */ - rt = CM_Mutex_Lock(s_CFM_2x2_Syn.mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_1); - /*- 鏄惁鎶ユ枃闀垮害澶т簬0涓旀帴鏀剁紦鍐插尯瓒冲澶 */ - if ((s_CFM_2x2_Syn.rxLen > 0) && ((CM_UINT32)s_CFM_2x2_Syn.rxLen <= bufSize)) - { - /*- 杈撳嚭鎺ユ敹鎶ユ枃 */ - len = s_CFM_2x2_Syn.rxLen; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)bufSize, (void*)s_CFM_2x2_Syn.rxBuf, (CM_SIZE_T)s_CFM_2x2_Syn.rxLen); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_2); - *pRxTick = s_CFM_2x2_Syn.rxTick; + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 len = 0; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 閿佸畾浜掓枼淇″彿閲 */ + rt = CM_Mutex_Lock(s_CFM_2x2_Syn.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_1); + /*- 鏄惁鎶ユ枃闀垮害澶т簬0涓旀帴鏀剁紦鍐插尯瓒冲澶 */ + if ((s_CFM_2x2_Syn.rxLen > 0) && ((CM_UINT32)s_CFM_2x2_Syn.rxLen <= bufSize)) + { + /*- 杈撳嚭鎺ユ敹鎶ユ枃 */ + len = s_CFM_2x2_Syn.rxLen; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)bufSize, (void *)s_CFM_2x2_Syn.rxBuf, (CM_SIZE_T)s_CFM_2x2_Syn.rxLen); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_2); + *pRxTick = s_CFM_2x2_Syn.rxTick; - /*- 娓呴櫎鎶ユ枃闀垮害 */ - s_CFM_2x2_Syn.rxLen = 0; - } - else + /*- 娓呴櫎鎶ユ枃闀垮害 */ + s_CFM_2x2_Syn.rxLen = 0; + } + else { /*- 鏃犲鐞 */ } - /*- 閲婃斁浜掓枼淇″彿閲 */ - rt = CM_Mutex_Unlock(s_CFM_2x2_Syn.mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_3); - /*- 杩斿洖鎶ユ枃闀垮害 */ - return len; + /*- 閲婃斁浜掓枼淇″彿閲 */ + rt = CM_Mutex_Unlock(s_CFM_2x2_Syn.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_3); + /*- 杩斿洖鎶ユ枃闀垮害 */ + return len; } - - /** -* @brief 2x2鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param BufLen 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2x2_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) + * @brief 2x2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2x2_DataSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- UDP鏂瑰紡浠2x2鏁版嵁閫氶亾鍙戦佹姤鏂 */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Data, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_Data); - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- UDP鏂瑰紡浠2x2鏁版嵁閫氶亾鍙戦佹姤鏂 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Data, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2), g_PFM_Cfg.Partner_Cfg.Port_2x2_Data); + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; } /** -* @brief 2x2涓插彛鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥(闈炵┖) -* @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥(0~0xffffffff) -* @param msgType 鍙戦佹姤鏂囩被鍨 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_NULL 鍙戦佹潯浠朵笉婊¤冻 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_2x2_UartDataSend(IN CM_UINT8* pBuf, IN CM_UINT16 BufLen) + * @brief 2x2涓插彛鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥(闈炵┖) + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥(0~0xffffffff) + * @param msgType 鍙戦佹姤鏂囩被鍨 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_NULL 鍙戦佹潯浠朵笉婊¤冻 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_2x2_UartDataSend(IN CM_UINT8 *pBuf, IN CM_UINT16 BufLen) { ENUM_CM_RETURN rtnval = ENUM_CM_FALSE; #ifdef QNX /*- 杩斿洖鍙戦佺粨鏋 */ - rtnval = CM_Com_LocalDataSend((CM_UINT8*)pBuf, BufLen); + rtnval = CM_Com_LocalDataSend((CM_UINT8 *)pBuf, BufLen); #else - rtnval = ENUM_CM_TRUE; + rtnval = ENUM_CM_TRUE; #endif - return rtnval; + return rtnval; } /** -* @brief 2x2鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2x2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_Rx2x2.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鑾峰彇鎴愬姛 */ - if ((rt == ENUM_CM_TRUE) && (len > 6u)) - { - /*- 杈撳嚭鎺ユ敹鏁版嵁 */ - len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_Rx2x2.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鑾峰彇鎴愬姛 */ + if ((rt == ENUM_CM_TRUE) && (len > 6u)) + { + /*- 杈撳嚭鎺ユ敹鏁版嵁 */ + len -= 6u; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; } /** -* @brief 2x2涓插彛鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡(闈炵┖) -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏(0~0xffffffff) -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2x2涓插彛鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡(闈炵┖) + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏(0~0xffffffff) + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize) { #ifdef QNX - /*- 杩斿洖鍙戦佺粨鏋 */ - return CM_Com_OtherDataRecv(pBuf, BufSize); + /*- 杩斿洖鍙戦佺粨鏋 */ + return CM_Com_OtherDataRecv(pBuf, BufSize); #else - return 0; + return 0; #endif } /*********************************鍐呯綉閫氫俊鐩稿叧*****************************************/ /** -* @brief 鍐呯綉閫氫俊鍒濆鍖 -*/ + * @brief 鍐呯綉閫氫俊鍒濆鍖 + */ static void s_NetInit_Innet(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_INT32 rcv_val = 0; /* 涓存椂鍙橀噺 */ - CM_INT32 send_val = 0; /* 涓存椂鍙橀噺 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_INT32 bCast = 1; - CM_CHAR *p_tmpIPCom; - CM_BOOL rtCheck = CM_FALSE; - rcv_val = (CM_INT32)NET_UDP_BUF_SIZE; - send_val = (CM_INT32)(NET_UDP_BUF_SIZE); + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_INT32 rcv_val = 0; /* 涓存椂鍙橀噺 */ + CM_INT32 send_val = 0; /* 涓存椂鍙橀噺 */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + ENUM_ETHERENT_TYPE bCast = ENUM_BROADCAST; + CM_CHAR *p_tmpIPCom; + CM_BOOL rtCheck = CM_FALSE; + rcv_val = (CM_INT32)NET_UDP_BUF_SIZE; + send_val = (CM_INT32)(NET_UDP_BUF_SIZE); STRU_PFM_INNET_CFG_T *pCom = NULL; - /*- 鍒涘缓瀹夊叏閫氫俊socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Com), g_PFM_Cfg.Local_Cfg.Port_Innet_Safe, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_RCVBUF, (void*)(&rcv_val), (unsigned int)sizeof(rcv_val)); - (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_SNDBUF, (void*)(&send_val), (unsigned int)sizeof(send_val)); + /*- 鍒涘缓瀹夊叏閫氫俊socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Com), g_PFM_Cfg.Local_Cfg.Port_Innet_Safe, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); + (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_RCVBUF, (void *)(&rcv_val), (unsigned int)sizeof(rcv_val)); + (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_SNDBUF, (void *)(&send_val), (unsigned int)sizeof(send_val)); - /*- 閰嶇疆鍜屽惎鍔ㄥ唴缃戝畨鍏ㄩ氫俊鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_RxInnetSafe.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); - (void)sprintf(s_CFM_RxInnetSafe.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Com); - s_CFM_RxInnetSafe.port = g_PFM_Cfg.Local_Cfg.Port_Innet_Safe; - s_CFM_RxInnetSafe.pSock = &s_CFM_Sock.Sock_InnetSafe; - s_CFM_RxInnetSafe.rmtIP = 0u; - rt = CM_MQ_Init(&s_CFM_RxInnetSafe.MsgQ, (CM_UINT16)CFM_INNET_SAFE_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_SAFE_MSG_SIZE)); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "InnetS_Rx", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T*)&s_CFM_RxInnetSafe); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_4); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*- 閰嶇疆鍜屽惎鍔ㄥ唴缃戝畨鍏ㄩ氫俊鎺ユ敹绾跨▼ */ + CM_ASSERT(s_CFM_RxInnetSafe.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); + (void)sprintf(s_CFM_RxInnetSafe.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Com); + s_CFM_RxInnetSafe.port = g_PFM_Cfg.Local_Cfg.Port_Innet_Safe; + s_CFM_RxInnetSafe.pSock = &s_CFM_Sock.Sock_InnetSafe; + s_CFM_RxInnetSafe.rmtIP = 0u; + rt = CM_MQ_Init(&s_CFM_RxInnetSafe.MsgQ, (CM_UINT16)CFM_INNET_SAFE_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_SAFE_MSG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "InnetS_Rx", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T *)&s_CFM_RxInnetSafe); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_4); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ - s_CFM_Sock.num_InnetRaw = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Num; - s_CFM_Sock.num_InnetRaw_Extend = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Extend_Num; - /*- @alias 鍒涘缓閫忎紶閫氫俊socket */ - for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) - { - if(i <= s_CFM_Sock.num_InnetRaw) - { - p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com; - } - else - { - p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com_Extend; - } - if(RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) - { - /*鏈娇鑳借閫氶亾*/ - } - /*鏄惁浣胯兘TCP*/ - else if (RAW_COM_TCP == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) + s_CFM_Sock.num_InnetRaw = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Num; + s_CFM_Sock.num_InnetRaw_Extend = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Extend_Num; + /*- @alias 鍒涘缓閫忎紶閫氫俊socket */ + for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) + { + if (i <= s_CFM_Sock.num_InnetRaw) + { + p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com; + } + else + { + p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com_Extend; + } + if (RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) + { + /*鏈娇鑳借閫氶亾*/ + } + /*鏄惁浣胯兘TCP*/ + else if (RAW_COM_TCP == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { /*- 鏌ヨ鏈嶅姟绔疘P銆佺鍙 */ pCom = PFM_INI_InnetID2Addr(g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId); @@ -1480,14 +1487,14 @@ static void s_NetInit_Innet(void) if (1u == g_PFM_Cfg.CPU_ID) { rt = CM_TCP_Socket_Create(&s_CFM_Sock.Sock_InnetRaw[i], (CM_UINT32)inet_addr(p_tmpIPCom), - g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, - g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId,pCom->IP_G,pCom->Port_Raw_G); + g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, + g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId, pCom->IP_G, pCom->Port_Raw_G); } else { rt = CM_TCP_Socket_Create(&s_CFM_Sock.Sock_InnetRaw[i], (CM_UINT32)inet_addr(p_tmpIPCom), - g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, - g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId,pCom->IP_P,pCom->Port_Raw_P); + g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, + g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId, pCom->IP_P, pCom->Port_Raw_P); } CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_6); } @@ -1496,28 +1503,28 @@ static void s_NetInit_Innet(void) /*UDP閫氫俊*/ if (RAW_COM_BROADCAST == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { - bCast = 1;/*骞挎挱妯″紡*/ + bCast = ENUM_BROADCAST; /*骞挎挱妯″紡*/ } else { - bCast = 0;/*榛樿鍗曟挱缁勬挱妯″紡*/ + bCast = ENUM_UNICAST; /*榛樿鍗曟挱缁勬挱妯″紡*/ } rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetRaw[i], - CM_FALSE, - (CM_UINT32)inet_addr(p_tmpIPCom), - g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, - (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].IP_InnetRaw_maddr), (CM_UINT8)bCast); + CM_FALSE, + (CM_UINT32)inet_addr(p_tmpIPCom), + g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, + (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].IP_InnetRaw_maddr), bCast); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_7); - rcv_val = (CM_INT32)NET_UDP_BUF_SIZE*60;/*姝ゅ蹇呴』寮澶э紝鐢ㄤ簬鎺ユ敹GIGE澶ф暟鎹*/ - (void)setsockopt(s_CFM_Sock.Sock_InnetRaw[i], SOL_SOCKET, SO_RCVBUF, (void*)(&rcv_val), (unsigned int)sizeof(rcv_val)); - (void)setsockopt(s_CFM_Sock.Sock_InnetRaw[i], SOL_SOCKET, SO_SNDBUF, (void*)(&send_val), (unsigned int)sizeof(send_val)); + rcv_val = (CM_INT32)NET_UDP_BUF_SIZE * 60; /*姝ゅ蹇呴』寮澶э紝鐢ㄤ簬鎺ユ敹GIGE澶ф暟鎹*/ + (void)setsockopt(s_CFM_Sock.Sock_InnetRaw[i], SOL_SOCKET, SO_RCVBUF, (void *)(&rcv_val), (unsigned int)sizeof(rcv_val)); + (void)setsockopt(s_CFM_Sock.Sock_InnetRaw[i], SOL_SOCKET, SO_SNDBUF, (void *)(&send_val), (unsigned int)sizeof(send_val)); } - } + } - /*- @alias 閰嶇疆鍜屽惎鍔ㄥ唴缃戦忎紶閫氫俊鎺ユ敹绾跨▼ */ - for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) - { - if(i <= s_CFM_Sock.num_InnetRaw) + /*- @alias 閰嶇疆鍜屽惎鍔ㄥ唴缃戦忎紶閫氫俊鎺ユ敹绾跨▼ */ + for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) + { + if (i <= s_CFM_Sock.num_InnetRaw) { p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com; } @@ -1525,143 +1532,142 @@ static void s_NetInit_Innet(void) { p_tmpIPCom = g_PFM_Cfg.Local_Cfg.IP_Com_Extend; } - if(RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) + if (RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { /*鏈娇鑳借閫氶亾-涓嶅紑鍚嚎绋*/ } - /*鏄惁浣胯兘TCP*/ - else if (RAW_COM_TCP == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) + /*鏄惁浣胯兘TCP*/ + else if (RAW_COM_TCP == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { - /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_RxInnetRaw[i].IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_8); - (void)sprintf(s_CFM_RxInnetRaw[i].IP, "%s", p_tmpIPCom); - s_CFM_RxInnetRaw[i].port = g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw; - s_CFM_RxInnetRaw[i].pSock = &s_CFM_Sock.Sock_InnetRaw[i]; - s_CFM_RxInnetRaw[i].ch = i; + /*- 閰嶇疆鎺ユ敹绾跨▼ */ + CM_ASSERT(s_CFM_RxInnetRaw[i].IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_8); + (void)sprintf(s_CFM_RxInnetRaw[i].IP, "%s", p_tmpIPCom); + s_CFM_RxInnetRaw[i].port = g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw; + s_CFM_RxInnetRaw[i].pSock = &s_CFM_Sock.Sock_InnetRaw[i]; + s_CFM_RxInnetRaw[i].ch = i; if (1u == g_PFM_Cfg.CPU_ID) { - s_CFM_RxInnetRaw[i].rmtIP = pCom->IP_G; + s_CFM_RxInnetRaw[i].rmtIP = pCom->IP_G; s_CFM_RxInnetRaw[i].rmtPort = pCom->Port_Raw_G; } else { - s_CFM_RxInnetRaw[i].rmtIP = pCom->IP_P; + s_CFM_RxInnetRaw[i].rmtIP = pCom->IP_P; s_CFM_RxInnetRaw[i].rmtPort = pCom->Port_Raw_P; } s_CFM_RxInnetRaw[i].Tcpid = g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Server_DevId; s_CFM_RxInnetRaw[i].Offset = (CM_INT32)0; /*2鍙栦娇鑳芥椂闂存埑闃熷垪鍜岃В鏋愮畻娉*/ - if((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) + if ((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) { rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].InfoQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(16)); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_9); rt = CM_Mutex_Init(&s_CFM_RxInnetRaw[i].mutex); rt &= CM_Mutex_Init(&s_CFM_RxInnetRaw[i].clear_mutex); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_10); - s_CFM_RxInnetRaw[i].ALGORITHM_Fun = p_ALGORITHM_Fun[i];/*绠楁硶娉ㄥ唽琛*/ + s_CFM_RxInnetRaw[i].ALGORITHM_Fun = p_ALGORITHM_Fun[i]; /*绠楁硶娉ㄥ唽琛*/ } else { - s_CFM_RxInnetRaw[i].ALGORITHM_Fun = NULL;/*鏈敞鍐岀┖鎸囬拡*/ - MSCP_LOG_MSG("TCP[%d]-ALGORITHM_Fun is NULL\n",i); + s_CFM_RxInnetRaw[i].ALGORITHM_Fun = NULL; /*鏈敞鍐岀┖鎸囬拡*/ + MSCP_LOG_MSG("TCP[%d]-ALGORITHM_Fun is NULL\n", i); } - rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].MsgQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_RAW_MSG_SIZE)); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_11); + rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].MsgQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_RAW_MSG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_11); - /*- 鍚姩澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_TcpRecvThread, "InnetS_Rx_Tcp", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_RxInnetRaw[i]); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_17); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*- 鍚姩澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_TcpRecvThread, "InnetS_Rx_Tcp", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_RxInnetRaw[i]); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_17); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } else { /*UDP閫氫俊*/ - CM_ASSERT(s_CFM_RxInnetRaw[i].IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_12); - (void)sprintf(s_CFM_RxInnetRaw[i].IP, "%s", p_tmpIPCom); - s_CFM_RxInnetRaw[i].port = g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw; - s_CFM_RxInnetRaw[i].pSock = &s_CFM_Sock.Sock_InnetRaw[i]; - s_CFM_RxInnetRaw[i].rmtIP = 0u; - s_CFM_RxInnetRaw[i].ch = i; + CM_ASSERT(s_CFM_RxInnetRaw[i].IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_12); + (void)sprintf(s_CFM_RxInnetRaw[i].IP, "%s", p_tmpIPCom); + s_CFM_RxInnetRaw[i].port = g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw; + s_CFM_RxInnetRaw[i].pSock = &s_CFM_Sock.Sock_InnetRaw[i]; + s_CFM_RxInnetRaw[i].rmtIP = 0u; + s_CFM_RxInnetRaw[i].ch = i; - rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].MsgQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_RAW_MSG_SIZE)); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_13); - /*2鍙栦娇鑳芥椂闂存埑闃熷垪鍜岃В鏋愮畻娉*/ - if((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) - { + rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].MsgQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(CFM_INNET_RAW_MSG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_13); + /*2鍙栦娇鑳芥椂闂存埑闃熷垪鍜岃В鏋愮畻娉*/ + if ((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) + { rt = CM_MQ_Init(&s_CFM_RxInnetRaw[i].InfoQ, (CM_UINT16)CFM_INNET_RAW_MSG_NUM_MAX, (CM_UINT16)(16)); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_14); rt = CM_Mutex_Init(&s_CFM_RxInnetRaw[i].mutex); rt &= CM_Mutex_Init(&s_CFM_RxInnetRaw[i].clear_mutex); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_15); - s_CFM_RxInnetRaw[i].ALGORITHM_Fun = p_ALGORITHM_Fun[i];/*绠楁硶娉ㄥ唽琛*/ - MSCP_LOG_MSG("Init s_CFM_RxInnetRaw[%d]:addr:0x%x\n",i,p_ALGORITHM_Fun[i]); - } - else - { - MSCP_LOG_MSG("UDP[%d]-ALGORITHM_Fun is NULL\n",i); - s_CFM_RxInnetRaw[i].ALGORITHM_Fun = NULL;/*鏈敞鍐岀┖鎸囬拡*/ - } + s_CFM_RxInnetRaw[i].ALGORITHM_Fun = p_ALGORITHM_Fun[i]; /*绠楁硶娉ㄥ唽琛*/ + MSCP_LOG_MSG("Init s_CFM_RxInnetRaw[%d]:addr:0x%x\n", i, p_ALGORITHM_Fun[i]); + } + else + { + MSCP_LOG_MSG("UDP[%d]-ALGORITHM_Fun is NULL\n", i); + s_CFM_RxInnetRaw[i].ALGORITHM_Fun = NULL; /*鏈敞鍐岀┖鎸囬拡*/ + } - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRawRecvThread, "InnetR_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_RxInnetRaw[i]); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_16); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRawRecvThread, "InnetR_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T *)&s_CFM_RxInnetRaw[i]); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_16); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } - } + } } /** -* @brief UDP閫忎紶鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief UDP閫忎紶鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_RECV_CTRL_T* pCtrl = (STRU_CFM_RECV_CTRL_T*)arg; /* 绾跨▼鎺у埗淇℃伅 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - CM_UINT8* rcvBuf = NULL; - CM_INT32 len; /* 鎶ユ枃闀垮害 */ - CM_UINT32 srcIP;/* 婧怚P */ - CM_UINT16 srcPort;/* 婧愮鍙 */ + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_RECV_CTRL_T *pCtrl = (STRU_CFM_RECV_CTRL_T *)arg; /* 绾跨▼鎺у埗淇℃伅 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ + CM_UINT8 *rcvBuf = NULL; + CM_INT32 len; /* 鎶ユ枃闀垮害 */ + CM_UINT32 srcIP; /* 婧怚P */ + CM_UINT16 srcPort; /* 婧愮鍙 */ - CM_UINT32 calccrc = 0u; /* 鏍¢獙鍜 */ + CM_UINT32 calccrc = 0u; /* 鏍¢獙鍜 */ - CM_UINT8 *info = NULL;/* 闆疯揪鐗瑰緛淇℃伅 */ - CM_UINT8 CompareEnable = 0u;/* 骞冲彴姣旇緝闆疯揪鐗瑰緛淇℃伅 */ + CM_UINT8 *info = NULL; /* 闆疯揪鐗瑰緛淇℃伅 */ + CM_UINT8 CompareEnable = 0u; /* 骞冲彴姣旇緝闆疯揪鐗瑰緛淇℃伅 */ #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d UDP Raw recv Start\n", pCtrl->IP, pCtrl->port); - /*- 寰幆鎺ユ敹UDP鏁版嵁 */ - while (1) - { - /*- UDP闃诲鎺ユ敹 */ - rcvBuf = CM_MQ_Get_BufAddr(&pCtrl->MsgQ); - if(NULL != rcvBuf) - { - len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(pCtrl->MsgQ.maxMsgSize - 6u), &srcIP, &srcPort); - if (len > 0) - { - /*- 婧怚P绔彛鏄惁鍚堟硶 */ - if ((pCtrl->rmtIP == 0u) - || ((srcIP == pCtrl->rmtIP) && (srcPort== pCtrl->rmtPort))) + MSCP_LOG_MSG("IP:%s:%d UDP Raw recv Start\n", pCtrl->IP, pCtrl->port); + /*- 寰幆鎺ユ敹UDP鏁版嵁 */ + while (1) + { + /*- UDP闃诲鎺ユ敹 */ + rcvBuf = CM_MQ_Get_BufAddr(&pCtrl->MsgQ); + if (NULL != rcvBuf) + { + len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(pCtrl->MsgQ.maxMsgSize - 6u), &srcIP, &srcPort); + if (len > 0) + { + /*- 婧怚P绔彛鏄惁鍚堟硶 */ + if ((pCtrl->rmtIP == 0u) || ((srcIP == pCtrl->rmtIP) && (srcPort == pCtrl->rmtPort))) { /*- @alias 灏嗘敹鍒扮殑鎶ユ枃鍐欏叆绾跨▼鎺ユ敹闃熷垪 */ CM_LongToChar(srcIP, rcvBuf); CM_ShortToChar(srcPort, &rcvBuf[4u]); info = CM_MQ_Get_BufAddr(&pCtrl->InfoQ); - if((NULL != (RAW_ALGORITHM)(*pCtrl->ALGORITHM_Fun)) && (NULL != info)) + if ((NULL != (RAW_ALGORITHM)(*pCtrl->ALGORITHM_Fun)) && (NULL != info)) { /*瑙f瀽鏃堕棿鎴崇瓑浜屽彇鏁版嵁*/ - rt = (*pCtrl->ALGORITHM_Fun)(&rcvBuf[6u],len,info,&CompareEnable); - if(ENUM_CM_TRUE == rt) + rt = (*pCtrl->ALGORITHM_Fun)(&rcvBuf[6u], len, info, &CompareEnable); + if (ENUM_CM_TRUE == rt) { - if(1u == CompareEnable) + if (1u == CompareEnable) { /*鍐欏叆CRC*/ calccrc = CM_Crc32(&rcvBuf[6u], (CM_UINT32)len); @@ -1671,7 +1677,7 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) if (ENUM_CM_TRUE == rt) { /*- 淇濆瓨閫氫俊鏁版嵁 */ - rt = CM_MQ_UpData(&pCtrl->MsgQ,(CM_UINT16)(len + 6)); + rt = CM_MQ_UpData(&pCtrl->MsgQ, (CM_UINT16)(len + 6)); if (ENUM_CM_TRUE == rt) { /*- 鏃犲鐞*/ @@ -1679,9 +1685,9 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 闃插尽鎬ф竻绌*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR1, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR1, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len); (void)CM_MQ_RollbackData(&pCtrl->InfoQ); } @@ -1689,9 +1695,9 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 闃插尽鎬ф竻绌*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR2, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR2, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len); } (void)CM_Mutex_Unlock(pCtrl->mutex); @@ -1703,17 +1709,16 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) rt = CM_MQ_UpData(&pCtrl->InfoQ, (CM_UINT16)(10u)); if (ENUM_CM_TRUE == rt) { - rt = CM_MQ_UpData(&pCtrl->MsgQ,(CM_UINT16)(len + 6)); + rt = CM_MQ_UpData(&pCtrl->MsgQ, (CM_UINT16)(len + 6)); if (ENUM_CM_TRUE == rt) { - } else { /*- 闃插尽鎬ф竻绌*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR3, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR3, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len); (void)CM_MQ_RollbackData(&pCtrl->InfoQ); } @@ -1721,9 +1726,9 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 闃插尽鎬ф竻绌*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR4, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR4, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len); } (void)CM_Mutex_Unlock(pCtrl->mutex); @@ -1738,7 +1743,7 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) { /*瑙f瀽鎸囬拡涓虹┖*/ /*- 淇濆瓨閫氫俊鏁版嵁 */ - rt = CM_MQ_UpData(&pCtrl->MsgQ,(CM_UINT16)(len + 6)); + rt = CM_MQ_UpData(&pCtrl->MsgQ, (CM_UINT16)(len + 6)); if (ENUM_CM_TRUE == rt) { /*鏃犳搷浣*/ @@ -1746,9 +1751,9 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 闃插尽鎬ф竻绌*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR5, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR5, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len); rt = CM_MQ_Clear(&pCtrl->MsgQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_9); @@ -1765,17 +1770,17 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 鎺ユ敹鍑洪敊 */ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR6, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR6, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("Raw port %d rx err(len=%d)\n", pCtrl->port, len); CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_11); } - } - else - { - - if(NULL != (RAW_ALGORITHM)(*pCtrl->ALGORITHM_Fun)) + } + else + { + + if (NULL != (RAW_ALGORITHM)(*pCtrl->ALGORITHM_Fun)) { MSCP_LOG_MSG("port %d rx overflow(msgLen=%d) MsgQ is full!\n", pCtrl->port, len); (void)CM_Mutex_Lock(pCtrl->clear_mutex); @@ -1784,78 +1789,76 @@ static CM_THREAD_FUNC_T t_UdpRawRecvThread(IN CM_Thread_Arg_Struct_T* arg) rt = CM_MQ_Clear(&pCtrl->InfoQ); (void)CM_Mutex_Unlock(pCtrl->clear_mutex); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_13); - } else { - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR7, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_UDPRAWRECVTHREAD_UPDATAEOR7, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); MSCP_LOG_MSG("port %d rx overflow(msgLen=%d) MsgQ is full!\n", pCtrl->port, len); rt = CM_MQ_Clear(&pCtrl->MsgQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_14); - } - } - } - return NULL; + } + } + return NULL; } /** -* @brief TCP鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ潪闃诲鏂瑰紡鎺ユ敹TCP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief TCP鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ潪闃诲鏂瑰紡鎺ユ敹TCP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_RECV_CTRL_T* pCtrl = (STRU_CFM_RECV_CTRL_T*)arg; /* 绾跨▼鎺у埗淇℃伅 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - CM_INT32 len; /* 鎶ユ枃闀垮害 */ - CM_SOCKET tcpsock = -1; /* 涓存椂鍙橀噺 */ - CM_UINT16 tcpId = 0u; /* 涓存椂鍙橀噺 */ - CM_UINT32 ServeraddrIP = 0u; /* 涓存椂鍙橀噺 */ - CM_UINT16 ServerportNumber = 0u; /* 涓存椂鍙橀噺 */ - CM_UINT32 TcpState = 0u; /* 涓存椂鍙橀噺 */ - CM_UINT16 ConnectFlag = 0u; /* 涓存椂鍙橀噺 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 涓存椂缁撴灉 */ - CM_INT32 FullFrameSize = 0; /* 涓存椂鍙橀噺 */ - CM_INT32 Count = 0; /* 涓存椂鍙橀噺 */ + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_RECV_CTRL_T *pCtrl = (STRU_CFM_RECV_CTRL_T *)arg; /* 绾跨▼鎺у埗淇℃伅 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ + CM_INT32 len; /* 鎶ユ枃闀垮害 */ + CM_SOCKET tcpsock = -1; /* 涓存椂鍙橀噺 */ + CM_UINT16 tcpId = 0u; /* 涓存椂鍙橀噺 */ + CM_UINT32 ServeraddrIP = 0u; /* 涓存椂鍙橀噺 */ + CM_UINT16 ServerportNumber = 0u; /* 涓存椂鍙橀噺 */ + CM_UINT32 TcpState = 0u; /* 涓存椂鍙橀噺 */ + CM_UINT16 ConnectFlag = 0u; /* 涓存椂鍙橀噺 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 涓存椂缁撴灉 */ + CM_INT32 FullFrameSize = 0; /* 涓存椂鍙橀噺 */ + CM_INT32 Count = 0; /* 涓存椂鍙橀噺 */ struct in_addr serveraddr; - CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ + CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - rt = CM_Memcpy((void*) &serveraddr, sizeof(serveraddr), (void*)(&pCtrl->rmtIP), (CM_SIZE_T)4); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); - - MSCP_LOG_MSG("Client: IP:%s, Port :%d, Server: IP:%s, Port :%d, Tcpid = %u, Tcp recv Start\n", pCtrl->IP, pCtrl->port,inet_ntoa(serveraddr), pCtrl->rmtPort,pCtrl->Tcpid); + rt = CM_Memcpy((void *)&serveraddr, sizeof(serveraddr), (void *)(&pCtrl->rmtIP), (CM_SIZE_T)4); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); + + MSCP_LOG_MSG("Client: IP:%s, Port :%d, Server: IP:%s, Port :%d, Tcpid = %u, Tcp recv Start\n", pCtrl->IP, pCtrl->port, inet_ntoa(serveraddr), pCtrl->rmtPort, pCtrl->Tcpid); tcpId = pCtrl->Tcpid; - /*- 寰幆鎺ユ敹TCP鏁版嵁 */ - while (1) - { - /*- 姣忔杞閲嶇疆杩炴帴鎴愬姛鏍囧織涓0 */ - ConnectFlag = 0u; + /*- 寰幆鎺ユ敹TCP鏁版嵁 */ + while (1) + { + /*- 姣忔杞閲嶇疆杩炴帴鎴愬姛鏍囧織涓0 */ + ConnectFlag = 0u; tick = CM_GetTick(); tick = tick + (CM_UINT64)(100000000u); - if(ENUM_2x2_MASTER == SFM_2x2_GetLocal2x2State()) + if (ENUM_2x2_MASTER == SFM_2x2_GetLocal2x2State()) { /*- 鏌ヨ濂楁帴瀛楃姸鎬 */ ret = CM_TCP_Msgstate_Query(tcpId, &tcpsock, &TcpState, &ServeraddrIP, &ServerportNumber); CM_RE_ASSERT(ENUM_CM_TRUE == ret, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2); - if (((CM_UINT32)ENUM_CM_CLOSED == (CM_UINT32)TcpState) || ((CM_UINT32)ENUM_CM_CONNFAIL == (CM_UINT32)TcpState) ) + if (((CM_UINT32)ENUM_CM_CLOSED == (CM_UINT32)TcpState) || ((CM_UINT32)ENUM_CM_CONNFAIL == (CM_UINT32)TcpState)) { /*- 濂楁帴瀛楃姸鎬佷负宸叉柇寮杩炴帴锛屽緟鍒涘缓 */ /*- 閲嶆柊鍒涘缓socket */ - ret = CM_TCP_Socket_Create(&tcpsock,(CM_UINT32)inet_addr(pCtrl->IP), pCtrl->port,tcpId,ServeraddrIP, ServerportNumber); + ret = CM_TCP_Socket_Create(&tcpsock, (CM_UINT32)inet_addr(pCtrl->IP), pCtrl->port, tcpId, ServeraddrIP, ServerportNumber); if (ENUM_CM_TRUE != ret) { /*鏃ュ織璁板綍*/ @@ -1865,7 +1868,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) else { /*- 寤虹珛杩炴帴锛岃秴鏃舵椂闂翠负20姣 */ - ret = CM_TCP_Socket_Connect(tcpId,(CM_UINT32)20); + ret = CM_TCP_Socket_Connect(tcpId, (CM_UINT32)20); if (ENUM_CM_TRUE != ret) { /*- 杩炴帴澶辫触*/ @@ -1880,11 +1883,11 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) } } } - else if((CM_UINT32)ENUM_CM_NOCONN == (CM_UINT32)TcpState) + else if ((CM_UINT32)ENUM_CM_NOCONN == (CM_UINT32)TcpState) { /*- 濂楁帴瀛楃姸鎬佷负宸插垱寤猴紝鏈繛鎺 */ /*- 寤虹珛杩炴帴锛岃秴鏃舵椂闂翠负20姣 */ - ret = CM_TCP_Socket_Connect(tcpId,(CM_UINT32)20); + ret = CM_TCP_Socket_Connect(tcpId, (CM_UINT32)20); if (ENUM_CM_TRUE != ret) { /*- 杩炴帴澶辫触 */ @@ -1897,9 +1900,8 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) /*- 杩炴帴鎴愬姛锛岀疆杩炴帴鎴愬姛鏍囧織涓1 */ ConnectFlag = 1u; } - } - else if((CM_UINT32)ENUM_CM_CONNECTED == (CM_UINT32)TcpState) + else if ((CM_UINT32)ENUM_CM_CONNECTED == (CM_UINT32)TcpState) { /*- 杩炴帴鎴愬姛锛岀疆杩炴帴鎴愬姛鏍囧織涓1 */ ConnectFlag = 1u; @@ -1920,7 +1922,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) Count = 0; /*- 鎷嗗垎瀹屾暣甯ф暟鎹 */ - ret = CM_TCP_Find_Full_Frame(pCtrl->cache_buf + 6,len,&FullFrameSize); + ret = CM_TCP_Find_Full_Frame(pCtrl->cache_buf + 6, len, &FullFrameSize); if (ENUM_CM_TRUE == ret) { @@ -1929,7 +1931,6 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) CM_LongToChar(ServeraddrIP, pCtrl->cache_buf); CM_ShortToChar(ServerportNumber, pCtrl->cache_buf + 4); - /*- 淇濆瓨閫氫俊鏁版嵁 */ rt = CM_MQ_Write(&pCtrl->MsgQ, pCtrl->cache_buf, (CM_UINT16)CM_SIGNED_SHORT_EXP(FullFrameSize + 6)); if (ENUM_CM_TRUE == rt) @@ -1938,7 +1939,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) if (len > FullFrameSize) { /*- 淇濆瓨鍓╀綑鐨勬暟鎹紝渚涗笅娆′娇鐢 */ - (void)CM_Memmove((void*)(pCtrl->cache_buf + 6), (CM_SIZE_T)CM_SIGNED_INT_EXP(sizeof(pCtrl->cache_buf) - 6), (void*)(pCtrl->cache_buf + 6 + FullFrameSize), (CM_SIZE_T)CM_SIGNED_INT_EXP(len - FullFrameSize)); + (void)CM_Memmove((void *)(pCtrl->cache_buf + 6), (CM_SIZE_T)CM_SIGNED_INT_EXP(sizeof(pCtrl->cache_buf) - 6), (void *)(pCtrl->cache_buf + 6 + FullFrameSize), (CM_SIZE_T)CM_SIGNED_INT_EXP(len - FullFrameSize)); /*- 淇濆瓨鍋忕Щ閲 */ pCtrl->Offset = len - FullFrameSize; @@ -1947,7 +1948,6 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) { /*- 姝eソ鏄畬鏁村抚锛屽皢鍋忕Щ閲忕疆涓0 */ - pCtrl->Offset = 0; } } @@ -1968,7 +1968,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) pCtrl->Offset = len; } } - else if(0 == len) + else if (0 == len) { /*- 鏈澶勭悊鏈敹鍒版暟鎹 */ @@ -2010,7 +2010,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) ret = CM_TCP_Msgstate_Query(tcpId, &tcpsock, &TcpState, &ServeraddrIP, &ServerportNumber); CM_RE_ASSERT(ENUM_CM_TRUE == ret, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_3); - if ((CM_UINT32)ENUM_CM_CONNECTED == TcpState ) + if ((CM_UINT32)ENUM_CM_CONNECTED == TcpState) { /*閲婃斁杩炴帴*/ (void)CM_TCP_Socket_Close(tcpId, (CM_UINT32)ENUM_CM_CLOSED); @@ -2019,7 +2019,7 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) pCtrl->Offset = 0; /*- 灏嗘湭鏀跺埌鏁版嵁璁℃暟缃负0 */ - Count = 0; + Count = 0; } else { @@ -2029,24 +2029,24 @@ static CM_THREAD_FUNC_T t_TcpRecvThread(IN CM_Thread_Arg_Struct_T* arg) /* 绾跨▼杞澶勭悊锛屾瘡杞100姣 */ (void)DFM_WaitUntill(tick); - } - return NULL; + } + return NULL; } /* @brief 鍐呯綉閫忎紶TCP閫氫俊鏁版嵁鍙戦 -* @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param DstIP 鐩殑IP -* @param DstPort 鐩殑绔彛 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_InnetRaw_Tcp_Send(IN CM_UINT16 Tcpid, IN const CM_UINT8* Buf, IN CM_INT32 Len) + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_InnetRaw_Tcp_Send(IN CM_UINT16 Tcpid, IN const CM_UINT8 *Buf, IN CM_INT32 Len) { /*- 杩斿洖鍐呯綉閫忎紶TCP閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ - return CM_TCP_Send_Msg(Tcpid, Buf, Len); + return CM_TCP_Send_Msg(Tcpid, Buf, Len); } /*璇绘暟鎹椂绂佹娓呯┖锛堝嵆浣垮啓婊★級*/ @@ -2059,24 +2059,24 @@ inline void CFM_InnetRawClear_Mutex_UnLock(IN CM_INT32 ch) (void)CM_Mutex_Unlock(s_CFM_RxInnetRaw[ch].clear_mutex); } /** -* @brief 鑾峰彇鎸囧畾鍐呯綉閫忎紶閫氶亾鐨勫叏閮ㄦ姤鏂囩壒寰佷俊鎭紙鏃堕棿鎴冲拰搴忓垪鍙凤級 -* @param ch 閫氶亾鍙 -* @param info 鐗瑰緛淇℃伅 -* @param infoSize 鐗瑰緛淇℃伅鏁扮粍鐨勯暱搴 -* @return 鐗瑰緛淇℃伅闀垮害 -*/ -CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 infoSize,OUT CM_UINT8 *CompareEnable) + * @brief 鑾峰彇鎸囧畾鍐呯綉閫忎紶閫氶亾鐨勫叏閮ㄦ姤鏂囩壒寰佷俊鎭紙鏃堕棿鎴冲拰搴忓垪鍙凤級 + * @param ch 閫氶亾鍙 + * @param info 鐗瑰緛淇℃伅 + * @param infoSize 鐗瑰緛淇℃伅鏁扮粍鐨勯暱搴 + * @return 鐗瑰緛淇℃伅闀垮害 + */ +CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 infoSize, OUT CM_UINT8 *CompareEnable) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 i = 0; - CM_INT32 num = 0; - CM_UINT32 temp_size = 0u; - CM_UINT16 len = 0u; - CM_UINT32 offset = 0u; - num = CM_MQ_Get_Msg_Num(&s_CFM_RxInnetRaw[ch].InfoQ); - CM_RE_ASSERT((CM_UINT32)(num*12) <= infoSize, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_28, TSCP_DARK_ASSERT_1); - if(0 < num) - { + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 i = 0; + CM_INT32 num = 0; + CM_UINT32 temp_size = 0u; + CM_UINT16 len = 0u; + CM_UINT32 offset = 0u; + num = CM_MQ_Get_Msg_Num(&s_CFM_RxInnetRaw[ch].InfoQ); + CM_RE_ASSERT((CM_UINT32)(num * 12) <= infoSize, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_28, TSCP_DARK_ASSERT_1); + if (0 < num) + { /*- @alias 鑾峰彇鍏ㄩ儴鐗瑰緛淇℃伅 */ for (i = 0; i < num; i++) { @@ -2085,12 +2085,12 @@ CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 offset += len; } /*濡傛灉闀垮害绛変簬鏃堕棿鎴+CRC 12涓瓧鑺傦紝闇瑕佹瘮杈*/ - if(12u == len) + if (12u == len) { *CompareEnable = 1u; } /*濡傛灉闀垮害绛変簬鏃堕棿鎴 10涓瓧鑺傦紝涓嶉渶瑕佹瘮杈*/ - else if(10u == len) + else if (10u == len) { *CompareEnable = 0u; } @@ -2100,40 +2100,40 @@ CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 } temp_size = (CM_UINT32)num * len; CM_RE_ASSERT(offset == temp_size, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_28, TSCP_DARK_ASSERT_3); - } - else - { - *CompareEnable = 1u; - } - /*- 杩斿洖璇诲彇鐨勭壒寰佷俊鎭暱搴 */ - return offset; + } + else + { + *CompareEnable = 1u; + } + /*- 杩斿洖璇诲彇鐨勭壒寰佷俊鎭暱搴 */ + return offset; } /** -* @brief 鑾峰彇涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 -* @param ch 閫氶亾鍙 -* @param bufFirst 甯уご -* @param bufFirstLen 甯уご闀垮害 -* @param bufSecond 鏈夋晥鏁版嵁 -* @param bufSecondLen 鏈夋晥鏁版嵁闀垮害 -* @return 鏃 -* @details -*/ + * @brief 鑾峰彇涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 + * @param ch 閫氶亾鍙 + * @param bufFirst 甯уご + * @param bufFirstLen 甯уご闀垮害 + * @param bufSecond 鏈夋晥鏁版嵁 + * @param bufSecondLen 鏈夋晥鏁版嵁闀垮害 + * @return 鏃 + * @details + */ ENUM_CM_RETURN CFM_InnetRaw_Rx_MsgInfoQueue(IN CM_INT32 ch, OUT CM_UINT8 bufFirst[], IN CM_UINT32 bufFirstLen, - OUT CM_UINT8 *bufSecond, IN CM_UINT32 *bufSecondLen) + OUT CM_UINT8 *bufSecond, IN CM_UINT32 *bufSecondLen) { ENUM_CM_RETURN rt = ENUM_CM_FALSE; - CM_UINT8* read_addr = NULL; + CM_UINT8 *read_addr = NULL; CM_UINT16 addrBuf_Size = 0u; /*- 璇诲彇閫氫俊鎶ユ枃闃熷垪鍜岀壒寰佷俊鎭槦鍒 */ - read_addr = CM_MQ_Read_Addr(&s_CFM_RxInnetRaw[ch].MsgQ,&addrBuf_Size); + read_addr = CM_MQ_Read_Addr(&s_CFM_RxInnetRaw[ch].MsgQ, &addrBuf_Size); CM_ASSERT(NULL != read_addr, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_29, TSCP_DARK_ASSERT_1); rt = CM_MQ_Read_Clear(&s_CFM_RxInnetRaw[ch].InfoQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_29, TSCP_DARK_ASSERT_2); CM_RE_ASSERT(addrBuf_Size > (bufFirstLen), NET_MODE, DARK_FAULT_CODE_FUN_ORDER_29, TSCP_DARK_ASSERT_3); - (void)CM_Memcpy(bufFirst,(CM_SIZE_T)bufFirstLen,read_addr,(CM_SIZE_T)bufFirstLen); - rt = CM_Memcpy(bufSecond,(CM_SIZE_T)*bufSecondLen,&read_addr[bufFirstLen],(CM_SIZE_T)CM_UNSIGNED_INT_EXP(addrBuf_Size - bufFirstLen)); - if(ENUM_CM_TRUE == rt) + (void)CM_Memcpy(bufFirst, (CM_SIZE_T)bufFirstLen, read_addr, (CM_SIZE_T)bufFirstLen); + rt = CM_Memcpy(bufSecond, (CM_SIZE_T)*bufSecondLen, &read_addr[bufFirstLen], (CM_SIZE_T)CM_UNSIGNED_INT_EXP(addrBuf_Size - bufFirstLen)); + if (ENUM_CM_TRUE == rt) { *bufSecondLen = addrBuf_Size - bufFirstLen; rt = CM_MQ_Read_UpData(&s_CFM_RxInnetRaw[ch].MsgQ); @@ -2142,18 +2142,18 @@ ENUM_CM_RETURN CFM_InnetRaw_Rx_MsgInfoQueue(IN CM_INT32 ch, OUT CM_UINT8 bufFirs else { (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1)); - MSCP_LOG_MSG("Raw[%d]not enough space:%d<-%d!!!\n", ch, *bufSecondLen,addrBuf_Size - bufFirstLen); + MSCP_LOG_MSG("Raw[%d]not enough space:%d<-%d!!!\n", ch, *bufSecondLen, addrBuf_Size - bufFirstLen); *bufSecondLen = 0; rt = ENUM_CM_FALSE; } return rt; } /** -* @brief 娓呴櫎涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 -* @param ch 閫氶亾鍙 -* @return 鏃 -* @details -*/ + * @brief 娓呴櫎涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 + * @param ch 閫氶亾鍙 + * @return 鏃 + * @details + */ void CFM_Clear_InnetRaw_Rx_Msg(IN CM_INT32 ch) { ENUM_CM_RETURN rt1 = ENUM_CM_FALSE; @@ -2169,68 +2169,67 @@ void CFM_Clear_InnetRaw_Rx_Msg(IN CM_INT32 ch) /*********************************澶栫綉閫氫俊鐩稿叧*****************************************/ /** -* @brief 澶栫綉閫氫俊鍒濆鍖 -*/ + * @brief 澶栫綉閫氫俊鍒濆鍖 + */ static void s_NetInit_Outnet(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ - CM_BOOL rtCheck; /* 涓存椂鍙橀噺 */ + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ + CM_BOOL rtCheck; /* 涓存椂鍙橀噺 */ - /*- 鍒涘缓socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); + /*- 鍒涘缓socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); - /*- 閰嶇疆socket */ - val = (CM_INT32)NET_UDP_BUF_SIZE; - (void)setsockopt(s_CFM_Sock.Sock_OutnetSafe, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_OutnetSafe, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + /*- 閰嶇疆socket */ + val = (CM_INT32)NET_UDP_BUF_SIZE; + (void)setsockopt(s_CFM_Sock.Sock_OutnetSafe, SOL_SOCKET, SO_RCVBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_OutnetSafe, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); - /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_RxOutnetSafe.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); - (void)sprintf(s_CFM_RxOutnetSafe.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Out); - s_CFM_RxOutnetSafe.port = g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe; - s_CFM_RxOutnetSafe.pSock = &s_CFM_Sock.Sock_OutnetSafe; - s_CFM_RxOutnetSafe.rmtIP = 0u; - s_CFM_RxOutnetSafe.threadNumBer = (CM_UINT8)ENUM_THREAD_OutnetS_Rx; - rt = CM_MQ_Init(&s_CFM_RxOutnetSafe.MsgQ, (CM_UINT16)CFM_OUTNET_MSG_NUM_MAX, (CM_UINT16)(CFM_OUTNET_SAFE_MSG_SIZE)); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_3); - /*- 鍚姩澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetS_Rx", 0, CM_TASK_PRIORITY_74, (CM_Thread_Arg_Struct_T*)&s_CFM_RxOutnetSafe); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_4); + /*- 閰嶇疆鎺ユ敹绾跨▼ */ + CM_ASSERT(s_CFM_RxOutnetSafe.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); + (void)sprintf(s_CFM_RxOutnetSafe.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Out); + s_CFM_RxOutnetSafe.port = g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe; + s_CFM_RxOutnetSafe.pSock = &s_CFM_Sock.Sock_OutnetSafe; + s_CFM_RxOutnetSafe.rmtIP = 0u; + s_CFM_RxOutnetSafe.threadNumBer = (CM_UINT8)ENUM_THREAD_OutnetS_Rx; + rt = CM_MQ_Init(&s_CFM_RxOutnetSafe.MsgQ, (CM_UINT16)CFM_OUTNET_MSG_NUM_MAX, (CM_UINT16)(CFM_OUTNET_SAFE_MSG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_3); + /*- 鍚姩澶栫綉瀹夊叏閫氫俊鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetS_Rx", 0, CM_TASK_PRIORITY_74, (CM_Thread_Arg_Struct_T *)&s_CFM_RxOutnetSafe); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_4); /*- 鍒涘缓澶栫綉蹇冭烦socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetHeart, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart, 0u, (CM_UINT8)0); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_9); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetHeart, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_9); - /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_RxOutnetHeart.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_10); - (void)sprintf(s_CFM_RxOutnetHeart.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Out); - s_CFM_RxOutnetHeart.port = g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart; - s_CFM_RxOutnetHeart.pSock = &s_CFM_Sock.Sock_OutnetHeart; - s_CFM_RxOutnetHeart.rmtIP = 0u; - rt = CM_MQ_Init(&s_CFM_RxOutnetHeart.MsgQ, (CM_UINT16)CFM_OUTHEART_MSG_NUM_MAX, (CM_UINT16)(CFM_OUTNET_HEART_MSG_SIZE)); - CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_11); - /*- 鍚姩澶栫綉蹇冭烦鎺ユ敹绾跨▼ */ - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetH_Rx", 0, CM_TASK_PRIORITY_82, (CM_Thread_Arg_Struct_T*)&s_CFM_RxOutnetHeart); - CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_12); + /*- 閰嶇疆鎺ユ敹绾跨▼ */ + CM_ASSERT(s_CFM_RxOutnetHeart.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_10); + (void)sprintf(s_CFM_RxOutnetHeart.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Out); + s_CFM_RxOutnetHeart.port = g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart; + s_CFM_RxOutnetHeart.pSock = &s_CFM_Sock.Sock_OutnetHeart; + s_CFM_RxOutnetHeart.rmtIP = 0u; + rt = CM_MQ_Init(&s_CFM_RxOutnetHeart.MsgQ, (CM_UINT16)CFM_OUTHEART_MSG_NUM_MAX, (CM_UINT16)(CFM_OUTNET_HEART_MSG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_11); + /*- 鍚姩澶栫綉蹇冭烦鎺ユ敹绾跨▼ */ + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetH_Rx", 0, CM_TASK_PRIORITY_82, (CM_Thread_Arg_Struct_T *)&s_CFM_RxOutnetHeart); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_12); /*鍒ゆ柇澶栫綉閫忎紶浣胯兘寮鍏*/ - if(0x55u == (CM_UINT32)g_PFM_Cfg.M_OutnetRaw_Enable) - { + if (0x55u == (CM_UINT32)g_PFM_Cfg.M_OutnetRaw_Enable) + { /*- 鍒涘缓socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetRaw, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Raw, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetRaw, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Raw, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_5); - /*- 閰嶇疆socket */ val = (CM_INT32)NET_UDP_BUF_SIZE; - (void)setsockopt(s_CFM_Sock.Sock_OutnetRaw, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_OutnetRaw, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_OutnetRaw, SOL_SOCKET, SO_RCVBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_OutnetRaw, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); /*- 閰嶇疆鎺ユ敹绾跨▼ */ - CM_ASSERT(s_CFM_RxOutnetRaw.IP != NULL,NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_6); + CM_ASSERT(s_CFM_RxOutnetRaw.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_6); (void)sprintf(s_CFM_RxOutnetRaw.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_Out); s_CFM_RxOutnetRaw.port = g_PFM_Cfg.Local_Cfg.Port_Outnet_Raw; s_CFM_RxOutnetRaw.pSock = &s_CFM_Sock.Sock_OutnetRaw; @@ -2238,25 +2237,25 @@ static void s_NetInit_Outnet(void) rt = CM_MQ_Init(&s_CFM_RxOutnetRaw.MsgQ, (CM_UINT16)CFM_OUTNET_RAW_MSG_NUM_MAX, (CM_UINT16)(CFM_OUTNET_RAW_MSG_SIZE)); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_7); - rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetR_Rx", 0, CM_TASK_PRIORITY_82, (CM_Thread_Arg_Struct_T*)&s_CFM_RxOutnetRaw); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "OutnetR_Rx", 0, CM_TASK_PRIORITY_82, (CM_Thread_Arg_Struct_T *)&s_CFM_RxOutnetRaw); CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_8); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ - } - else - { - /*澶栫綉閫忎紶鏈娇鑳*/ - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1)); - } + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ + } + else + { + /*澶栫綉閫忎紶鏈娇鑳*/ + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1)); + } - rtCheck = CM_Thread_Create((CM_THREAD_T*) NULL, (CM_THREAD_FUNC_T) t_ClearArpThread,"Clear_Arp", 0, CM_TASK_PRIORITY_94, NULL); - CM_RE_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_13); + rtCheck = CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_ClearArpThread, "Clear_Arp", 0, CM_TASK_PRIORITY_94, NULL); + CM_RE_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_13); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } /** -* @brief 鑾峰彇鎺ユ敹鍖呮暟鍜屾帴鍙楅暱搴﹀苟涓旀竻绌 -*/ + * @brief 鑾峰彇鎺ユ敹鍖呮暟鍜屾帴鍙楅暱搴﹀苟涓旀竻绌 + */ void CFM_GetOSCache(void) { MSCP_LOG_MSG("g_CFM_OSCache_ClearNum = %d, g_CFM_OSCache_Len = %d\n", g_CFM_OSCache_ClearNum, g_CFM_OSCache_Len); @@ -2265,8 +2264,8 @@ void CFM_GetOSCache(void) } /** -* @brief 娓呯┖澶栫綉瀹夊叏鏁版嵁闃熷垪闀垮害 -*/ + * @brief 娓呯┖澶栫綉瀹夊叏鏁版嵁闃熷垪闀垮害 + */ void CFM_ClearCache(void) { (void)CM_MQ_Clear(&s_CFM_RxOutnetSafe.MsgQ); @@ -2274,14 +2273,14 @@ void CFM_ClearCache(void) /*********************************缁存姢缃戠浉鍏*****************************************/ /** -* @brief 缁存姢缃戦氫俊闃熷垪鍒濆鍖 -*/ + * @brief 缁存姢缃戦氫俊闃熷垪鍒濆鍖 + */ void CFM_Maintain_Queue_Init(void) { /*- 鍙橀噺鍒濆鍖 */ ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ /*- 骞冲彴鏃ュ織闃熷垪鍒濆鍖 */ - rt = CM_MQ_Init((CM_MQ_Struct_T*)&s_CFM_Send_LogStr.MsgQ, (CM_UINT16)CFM_INNET_LOG_MSG_SIZE, (CM_UINT16)(CFM_INNET_LOG_SIZE)); + rt = CM_MQ_Init((CM_MQ_Struct_T *)&s_CFM_Send_LogStr.MsgQ, (CM_UINT16)CFM_INNET_LOG_MSG_SIZE, (CM_UINT16)(CFM_INNET_LOG_SIZE)); CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); rt = CM_QueueInitial(&s_Log_CtrlQ.MsgQ, CFM_INNET_LOG_MSG_SIZE_DARK); @@ -2289,163 +2288,161 @@ void CFM_Maintain_Queue_Init(void) (void)CM_Mutex_Init(&ciphertextCtrl.mutex); } /** -* @brief 缁存姢缃戦氫俊UDP鍒濆鍖 -*/ + * @brief 缁存姢缃戦氫俊UDP鍒濆鍖 + */ void CFM_Maintain_Init(void) { ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - /*- UDP鍗忚鍒濆鍖 */ - rt = CM_UDP_Init(); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_1); + /*- UDP鍗忚鍒濆鍖 */ + rt = CM_UDP_Init(); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_1); - /*- 缁存姢缃戦氫俊鍒濆鍖 */ - s_NetInit_Maintain(); /* 棣栧厛鍒濆鍖栫淮鎶ょ綉閫氫俊锛屼互浣夸互澶綉鏃ュ織鍙敤 */ + /*- 缁存姢缃戦氫俊鍒濆鍖 */ + s_NetInit_Maintain(); /* 棣栧厛鍒濆鍖栫淮鎶ょ綉閫氫俊锛屼互浣夸互澶綉鏃ュ織鍙敤 */ - CM_Sleep(1000u); - PFM_SendLastAssertLog(); + CM_Sleep(1000u); + PFM_SendLastAssertLog(); - DFM_Network_Check(); + DFM_Network_Check(); } - /* 缁存姢缃戦氫俊鍒濆鍖 */ static void s_NetInit_Maintain(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ - /*- 鍒涘缓socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogBase, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Base, 0u, (CM_UINT8)0); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1); - s_CFM_Send_LogStr.pSock = &s_CFM_Sock.Sock_LogBase; + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_INT32 val = 0; /* 涓存椂鍙橀噺 */ + /*- 鍒涘缓socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogBase, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Base, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1); + s_CFM_Send_LogStr.pSock = &s_CFM_Sock.Sock_LogBase; - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogCiphertext, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext, 0u, (CM_UINT8)0); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_2); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogCiphertext, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_2); s_Log_CtrlQ.pSock = &s_CFM_Sock.Sock_LogCiphertext; - /*- 閰嶇疆socket */ - val = (CM_INT32)NET_UDP_BUF_SIZE * 32; - (void)setsockopt(s_CFM_Sock.Sock_LogBase, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_LogCiphertext, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + /*- 閰嶇疆socket */ + val = (CM_INT32)NET_UDP_BUF_SIZE * 32; + (void)setsockopt(s_CFM_Sock.Sock_LogBase, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_LogCiphertext, SOL_SOCKET, SO_SNDBUF, (void *)(&val), (unsigned int)sizeof(val)); - /*鍒濆鍖栧弬鏁*/ - CM_NM_ASSERT(s_CFM_Send_LogStr.rmtIP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_3); - CM_NM_ASSERT(g_PFM_Cfg.Logger_IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_4); + /*鍒濆鍖栧弬鏁*/ + CM_NM_ASSERT(s_CFM_Send_LogStr.rmtIP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_3); + CM_NM_ASSERT(g_PFM_Cfg.Logger_IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_4); (void)sprintf(s_CFM_Send_LogStr.rmtIP, "%s", g_PFM_Cfg.Logger_IP); s_CFM_Send_LogStr.rmtPort = g_PFM_Cfg.Local_Cfg.Port_Log_Base; CM_NM_ASSERT(s_Log_CtrlQ.rmtIP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_5); - (void)sprintf(s_Log_CtrlQ.rmtIP, "%s", g_PFM_Cfg.Logger_IP); - s_Log_CtrlQ.rmtPort = g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext; + (void)sprintf(s_Log_CtrlQ.rmtIP, "%s", g_PFM_Cfg.Logger_IP); + s_Log_CtrlQ.rmtPort = g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext; - /*鍒涘缓鍙戦佺嚎绋*/ - /*- 鍚姩鏄庢枃鏃ュ織鍙戦佺嚎绋 */ - (void)CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_LogSendThread, "LogSend", 0, CM_TASK_PRIORITY_90, (CM_Thread_Arg_Struct_T*)&s_CFM_Send_LogStr); - CM_Sleep(100u);/* 寤舵椂绛夊緟绾跨▼鍚姩 */ + /*鍒涘缓鍙戦佺嚎绋*/ + /*- 鍚姩鏄庢枃鏃ュ織鍙戦佺嚎绋 */ + (void)CM_Thread_Create((CM_THREAD_T *)NULL, (CM_THREAD_FUNC_T)t_LogSendThread, "LogSend", 0, CM_TASK_PRIORITY_90, (CM_Thread_Arg_Struct_T *)&s_CFM_Send_LogStr); + CM_Sleep(100u); /* 寤舵椂绛夊緟绾跨▼鍚姩 */ } - /** -* @brief 鏃ュ織鍙戦佺嚎绋 -* @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -*/ -static CM_THREAD_FUNC_T t_LogSendThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 鏃ュ織鍙戦佺嚎绋 + * @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + */ +static CM_THREAD_FUNC_T t_LogSendThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_SEND_LOG* pCtrl = (STRU_CFM_SEND_LOG*)arg; /* 绾跨▼鍙傛暟 */ - ENUM_CM_RETURN rt1 = ENUM_CM_FALSE; /* 骞冲彴涓存椂鍙橀噺 */ - CM_UINT8 buf[CFM_INNET_LOG_SIZE * 2u] = { 0u }; /* 鎺ユ敹缂撳啿鍖 */ - CM_UINT16 len = 0u; /* 鏁版嵁闀垮害 */ - CM_UINT16 offset = 0u; - CM_UINT16 bufSize = 0u; + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_SEND_LOG *pCtrl = (STRU_CFM_SEND_LOG *)arg; /* 绾跨▼鍙傛暟 */ + ENUM_CM_RETURN rt1 = ENUM_CM_FALSE; /* 骞冲彴涓存椂鍙橀噺 */ + CM_UINT8 buf[CFM_INNET_LOG_SIZE * 2u] = {0u}; /* 鎺ユ敹缂撳啿鍖 */ + CM_UINT16 len = 0u; /* 鏁版嵁闀垮害 */ + CM_UINT16 offset = 0u; + CM_UINT16 bufSize = 0u; #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d LogSend Service Start\n", pCtrl->rmtIP, (CM_INT32)pCtrl->rmtPort); - /*- 寰幆鎵ц鎺ユ敹绾跨▼ */ - while (1) - { - /*- 鑾峰彇娑堟伅鏉℃暟*/ - bufSize = CFM_INNET_LOG_SIZE * 2u; - offset = 0u; - len = bufSize; + MSCP_LOG_MSG("IP:%s:%d LogSend Service Start\n", pCtrl->rmtIP, (CM_INT32)pCtrl->rmtPort); + /*- 寰幆鎵ц鎺ユ敹绾跨▼ */ + while (1) + { + /*- 鑾峰彇娑堟伅鏉℃暟*/ + bufSize = CFM_INNET_LOG_SIZE * 2u; + offset = 0u; + len = bufSize; - do - { - rt1 = CM_MQ_Read(&pCtrl->MsgQ, &buf[offset], &len); - if((ENUM_CM_TRUE == rt1) && (len > 0u)) - { - if(0x55u == PFM_LOG_GET_STOP_FLAG()) - { - /*- 鍒ゆ柇瀹曟満鍓嶆槸鍚︽湁鏈彂閫佺殑鏀掑寘鏁版嵁*/ - if(offset > 0u) - { - /*- 鏈夋敀鍖呮暟鎹 鍏堟妸杩欓儴鍒嗘暟鎹彂閫佸嚭鍘*/ - (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, buf, (CM_INT32)offset, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); - CM_Sleep(1u);//鍙戦佸畬寤舵椂1ms - } - else - { - ; - } - /*- 鍙戦佹湰娆¤鍒扮殑鏁版嵁*/ - (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, &buf[offset], (CM_INT32)len, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); - (void)CM_Memset(buf, 0u, (CM_SIZE_T)(offset + len) ,sizeof(buf)); - bufSize = CFM_INNET_LOG_SIZE * 2u; - offset = 0u; - } - else if(buf[offset + 1u] == (CM_UINT8)'b') - { - /*- 鏄暟瀛 鐩存帴鍙戦*/ - (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, buf, (CM_INT32)offset, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); - CM_Sleep(1u); - (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, &buf[offset], (CM_INT32)len, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); - (void)CM_Memset(buf, 0u, (CM_SIZE_T)(offset + len) ,sizeof(buf)); - CM_Sleep(1u); - bufSize = CFM_INNET_LOG_SIZE * 2u; - offset = 0u; - } - else - { - offset += len; - bufSize -= len; - } - len = bufSize; - } - else - { + do + { + rt1 = CM_MQ_Read(&pCtrl->MsgQ, &buf[offset], &len); + if ((ENUM_CM_TRUE == rt1) && (len > 0u)) + { + if (0x55u == PFM_LOG_GET_STOP_FLAG()) + { + /*- 鍒ゆ柇瀹曟満鍓嶆槸鍚︽湁鏈彂閫佺殑鏀掑寘鏁版嵁*/ + if (offset > 0u) + { + /*- 鏈夋敀鍖呮暟鎹 鍏堟妸杩欓儴鍒嗘暟鎹彂閫佸嚭鍘*/ + (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, buf, (CM_INT32)offset, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); + CM_Sleep(1u); // 鍙戦佸畬寤舵椂1ms + } + else + { + ; + } + /*- 鍙戦佹湰娆¤鍒扮殑鏁版嵁*/ + (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, &buf[offset], (CM_INT32)len, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); + (void)CM_Memset(buf, 0u, (CM_SIZE_T)(offset + len), sizeof(buf)); + bufSize = CFM_INNET_LOG_SIZE * 2u; + offset = 0u; + } + else if (buf[offset + 1u] == (CM_UINT8)'b') + { + /*- 鏄暟瀛 鐩存帴鍙戦*/ + (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, buf, (CM_INT32)offset, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); + CM_Sleep(1u); + (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, &buf[offset], (CM_INT32)len, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); + (void)CM_Memset(buf, 0u, (CM_SIZE_T)(offset + len), sizeof(buf)); + CM_Sleep(1u); + bufSize = CFM_INNET_LOG_SIZE * 2u; + offset = 0u; + } + else + { + offset += len; + bufSize -= len; + } + len = bufSize; + } + else + { CM_delayUs((CM_UINT64)5000u); - } - }while(offset < LOG_MAX); + } + } while (offset < LOG_MAX); /*- UDP鏁版嵁鍙戦*/ (void)CM_UDP_Send_Msg((CM_SOCKET)*pCtrl->pSock, buf, (CM_INT32)offset, (CM_UINT32)inet_addr(pCtrl->rmtIP), pCtrl->rmtPort); (void)CM_Memset(buf, 0u, (CM_SIZE_T)offset, sizeof(buf)); CM_Sleep(1u); - } - return NULL; + } + return NULL; } /** -* @brief 鏆楁枃鏃ュ織缁勫寘鍙戦佸嚱鏁 -* @param 鏃 -* @return 鏃 -* @details -*/ + * @brief 鏆楁枃鏃ュ織缁勫寘鍙戦佸嚱鏁 + * @param 鏃 + * @return 鏃 + * @details + */ void CFM_LogCiphertextSend(void) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ - CM_UINT8 sendBuf[CFM_INNET_LOG_MSG_SIZE_DARK + 20u] = { 0u }; /* 鍙戦侀槦鍒楀啿鍖 */ - CM_UINT32 sendOffset = 11u; /* 鍙戦侀槦鍒楀亸绉婚噺,鍖呭ご鍗11瀛楄妭 */ - CM_UINT32 dataLen = 0u; /* 淇℃伅鍖呴槦鍒楀ぇ灏 */ - CM_UINT8 appType = 0u; /* 搴旂敤绫诲瀷 */ - CM_UINT32 crc = 0u; - CM_UINT8 typeBoard = 1u; /* id = 1浠h〃涓绘満鏉 */ + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 涓存椂鍙橀噺 */ + CM_UINT8 sendBuf[CFM_INNET_LOG_MSG_SIZE_DARK + 20u] = {0u}; /* 鍙戦侀槦鍒楀啿鍖 */ + CM_UINT32 sendOffset = 11u; /* 鍙戦侀槦鍒楀亸绉婚噺,鍖呭ご鍗11瀛楄妭 */ + CM_UINT32 dataLen = 0u; /* 淇℃伅鍖呴槦鍒楀ぇ灏 */ + CM_UINT8 appType = 0u; /* 搴旂敤绫诲瀷 */ + CM_UINT32 crc = 0u; + CM_UINT8 typeBoard = 1u; /* id = 1浠h〃涓绘満鏉 */ (void)CM_Mutex_Lock(ciphertextCtrl.mutex); dataLen = CM_QueueStatus(&s_Log_CtrlQ.MsgQ); @@ -2455,7 +2452,7 @@ void CFM_LogCiphertextSend(void) /*- 浠庡彂閫佺紦鍐插尯璇诲嚭鏁版嵁 */ rt = CM_QueueRead(dataLen, &sendBuf[sendOffset], &s_Log_CtrlQ.MsgQ); (void)CM_Mutex_Unlock(ciphertextCtrl.mutex); - if(ENUM_CM_TRUE == rt) + if (ENUM_CM_TRUE == rt) { /*- sendOffset鍋忕Щ閲忓鍔 */ sendOffset += dataLen; @@ -2463,35 +2460,35 @@ void CFM_LogCiphertextSend(void) CM_LongToChar(sendOffset, &sendBuf[0]); /*- 婧愮被鍨 */ sendBuf[4] = typeBoard; - if(0 == strcmp(g_PFM_Cfg.APP_NAME, "ZC")) + if (0 == strcmp(g_PFM_Cfg.APP_NAME, "ZC")) { appType = 1u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "RCOCI")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "RCOCI")) { appType = 2u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "CI")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "CI")) { appType = 3u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "TMC")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "TMC")) { appType = 4u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "ITE")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "ITE")) { appType = 5u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "TSL")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "TSL")) { appType = 6u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "DSU")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "DSU")) { appType = 7u; } - else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "YJP")) + else if (0 == strcmp(g_PFM_Cfg.APP_NAME, "YJP")) { appType = 8u; } @@ -2508,54 +2505,52 @@ void CFM_LogCiphertextSend(void) CM_LongToChar(crc, &sendBuf[sendOffset]); /*- 鍙戦佷竴鏁村寘,鍚庨潰鍙兘閮芥槸0,鐢变笂浣嶆満瑙f瀽 */ - (void)CM_UDP_Send_Msg((CM_SOCKET)*s_Log_CtrlQ.pSock, (CM_UINT8*)sendBuf, (CM_INT32)CM_UNSIGNED_INT_EXP(sendOffset+4u), (CM_UINT32)inet_addr(s_Log_CtrlQ.rmtIP), s_Log_CtrlQ.rmtPort); + (void)CM_UDP_Send_Msg((CM_SOCKET)*s_Log_CtrlQ.pSock, (CM_UINT8 *)sendBuf, (CM_INT32)CM_UNSIGNED_INT_EXP(sendOffset + 4u), (CM_UINT32)inet_addr(s_Log_CtrlQ.rmtIP), s_Log_CtrlQ.rmtPort); } else { - MSCP_LOG_MSG("Ciphertext read queue fail \n"); + /* 鏃犲鐞*/ } - } else { (void)CM_Mutex_Unlock(ciphertextCtrl.mutex); - MSCP_LOG_MSG("dataLen = %d\n",dataLen); } } /** -* @brief 骞冲彴鏄庢枃鏃ュ織鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_BaseLog_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len) + * @brief 骞冲彴鏄庢枃鏃ュ織鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_BaseLog_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len) { - /*- 杩斿洖鏃ュ織閫氶亾鐨勫彂閫佺粨鏋 */ + /*- 杩斿洖鏃ュ織閫氶亾鐨勫彂閫佺粨鏋 */ return CM_MQ_Write(&s_CFM_Send_LogStr.MsgQ, Buf, (CM_UINT16)Len); } /** -* @brief 搴旂敤鏃ュ織鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_AppLog_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len) + * @brief 搴旂敤鏃ュ織鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_AppLog_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len) { - /*- 杩斿洖鏃ュ織閫氶亾鐨勫彂閫佺粨鏋 */ + /*- 杩斿洖鏃ュ織閫氶亾鐨勫彂閫佺粨鏋 */ return CM_MQ_Write(&s_CFM_Send_LogStr.MsgQ, Buf, (CM_UINT16)Len); } /** -* @brief 骞冲彴鏃ュ織淇濆瓨鏈湴鏂囦欢 -* @param FILE * fp_crash 鏂囦欢鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -* @return 鏃 -*/ -void CFM_BaseLog_SaveLocal(FILE * fp_crash) + * @brief 骞冲彴鏃ュ織淇濆瓨鏈湴鏂囦欢 + * @param FILE * fp_crash 鏂囦欢鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + * @return 鏃 + */ +void CFM_BaseLog_SaveLocal(FILE *fp_crash) { /*- 鍙橀噺鍒濆鍖 */ CM_UINT16 i = 1u; @@ -2563,51 +2558,51 @@ void CFM_BaseLog_SaveLocal(FILE * fp_crash) CM_UINT8 Buf[CFM_INNET_LOG_MSG_SIZE] = {0u}; ENUM_CM_RETURN rtnval = ENUM_CM_FALSE; /*- 濡傛灉鍙傛暟闈炵┖ */ - if(NULL != fp_crash) + if (NULL != fp_crash) { /*- 閿佸畾娑堟伅闃熷垪 */ (void)CM_Mutex_Lock(s_CFM_Send_LogStr.MsgQ.mutex); /*- @alias 璇诲彇娑堟伅闃熷垪鍐欏叆鏈湴鏂囦欢涓 */ - for(i = 1u;i <= CFM_INNET_LOG_SIZE;i++) + for (i = 1u; i <= CFM_INNET_LOG_SIZE; i++) { Len = CFM_INNET_LOG_MSG_SIZE; - rtnval = CM_MQ_Again_Read(&s_CFM_Send_LogStr.MsgQ, i,Buf, &Len); - if((ENUM_CM_TRUE == rtnval) && (Len > 0u) && (Buf[1] == (CM_UINT8)'s')) + rtnval = CM_MQ_Again_Read(&s_CFM_Send_LogStr.MsgQ, i, Buf, &Len); + if ((ENUM_CM_TRUE == rtnval) && (Len > 0u) && (Buf[1] == (CM_UINT8)'s')) { - (void)fwrite(Buf,(CM_SIZE_T)1u,Len,fp_crash); + (void)fwrite(Buf, (CM_SIZE_T)1u, Len, fp_crash); } } - /*- 閲婃斁娑堟伅闃熷垪 */ - (void)CM_Mutex_Unlock(s_CFM_Send_LogStr.MsgQ.mutex); + /*- 閲婃斁娑堟伅闃熷垪 */ + (void)CM_Mutex_Unlock(s_CFM_Send_LogStr.MsgQ.mutex); } else { /*- 杈撳嚭澶辫触鎻愮ず淇℃伅 */ - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_6, 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_6, TSCP_DARK_ASSERT_1)); (void)printf("Unable to output log\n"); } } /** -* @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織瀛樺偍 -* @param infoType 鏁版嵁绫诲瀷 -* 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 -* 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 -* 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 -* @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff -* @param infoLen 鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffff -* @param info 鏁版嵁/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鎸囬拡 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ + * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織瀛樺偍 + * @param infoType 鏁版嵁绫诲瀷 + * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 + * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 + * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 + * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff + * @param infoLen 鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffff + * @param info 鏁版嵁/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鎸囬拡 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ ENUM_CM_RETURN CFM_DarkLog_Storage(IN const CM_UINT8 infoType, IN const CM_UINT16 code, IN const CM_UINT32 infoLen, IN const void *info) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 TempBuf[CFM_INNET_LOG_MSG_SIZE_DARK] = { 0u }; + CM_UINT8 TempBuf[CFM_INNET_LOG_MSG_SIZE_DARK] = {0u}; CM_UINT32 TempBufLen = infoLen + 7u; ENUM_CM_RETURN ret = ENUM_CM_FALSE; /*- 濡傛灉鏁版嵁涓虹┖鎴栬呮暟鎹暱搴+鍖呭ご澶у皬澶т簬闃熷垪澶у皬,鍒欒繑鍥炲け璐*/ - if((NULL == info) || (CFM_INNET_LOG_MSG_SIZE_DARK < (infoLen + 7u)) || (ENUM_INIT_MAIN_QUEUE_NET > PFM_LOG_GET_INIT_STAGE())) + if ((NULL == info) || (CFM_INNET_LOG_MSG_SIZE_DARK < (infoLen + 7u)) || (ENUM_INIT_MAIN_QUEUE_NET > PFM_LOG_GET_INIT_STAGE())) { MSCP_LOG_MSG("If the data is empty or the data length + header size is greater than the queue size, failure is returned\n"); ret = ENUM_CM_FALSE; @@ -2615,28 +2610,28 @@ ENUM_CM_RETURN CFM_DarkLog_Storage(IN const CM_UINT8 infoType, IN const CM_UINT1 else { /*- 缁勫寘*/ - TempBuf[0] = infoType; + TempBuf[0] = infoType; CM_ShortToChar(code, &TempBuf[1]); CM_LongToChar(infoLen, &TempBuf[3]); - if((4u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) + if ((4u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) { - CM_LongToChar(*(const CM_UINT32*)info,&TempBuf[7]); + CM_LongToChar(*(const CM_UINT32 *)info, &TempBuf[7]); ret = ENUM_CM_TRUE; } - else if((2u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) + else if ((2u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) { - CM_ShortToChar(*(const CM_UINT16*)info,&TempBuf[7]); + CM_ShortToChar(*(const CM_UINT16 *)info, &TempBuf[7]); ret = ENUM_CM_TRUE; } - else if((8u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) + else if ((8u == infoLen) && (DARK_LOG_STRING != (CM_UINT8)infoType)) { - CM_64ToChar(*(const CM_UINT32*)info,&TempBuf[7]); + CM_64ToChar(*(const CM_UINT32 *)info, &TempBuf[7]); ret = ENUM_CM_TRUE; } else { - ret = CM_Memcpy(&TempBuf[7], (CM_SIZE_T)CM_UNSIGNED_INT_EXP(CFM_INNET_LOG_MSG_SIZE_DARK-7u), info, (CM_SIZE_T)infoLen); - if(ENUM_CM_FALSE == ret) + ret = CM_Memcpy(&TempBuf[7], (CM_SIZE_T)CM_UNSIGNED_INT_EXP(CFM_INNET_LOG_MSG_SIZE_DARK - 7u), info, (CM_SIZE_T)infoLen); + if (ENUM_CM_FALSE == ret) { MSCP_LOG_MSG("Memcpy Dark Write failed\n"); } @@ -2646,19 +2641,19 @@ ENUM_CM_RETURN CFM_DarkLog_Storage(IN const CM_UINT8 infoType, IN const CM_UINT1 } } /*- 濡傛灉缁勫寘娌¢棶棰*/ - if(ENUM_CM_TRUE == ret) + if (ENUM_CM_TRUE == ret) { /*- 鐩存帴灏嗙粍濂界殑淇℃伅鍖呭啓鍒伴槦鍒椾腑*/ /*- 鍦ㄨ繖鍔犻攣*/ ret = CM_Mutex_Lock(ciphertextCtrl.mutex); - if(ENUM_CM_FALSE == ret) + if (ENUM_CM_FALSE == ret) { MSCP_LOG_MSG("Dark Mutex Lock failed\n"); } else { - ret= CM_QueueWrite(TempBufLen, TempBuf, &s_Log_CtrlQ.MsgQ);/*闀垮害*/ - if(ENUM_CM_FALSE == ret) + ret = CM_QueueWrite(TempBufLen, TempBuf, &s_Log_CtrlQ.MsgQ); /*闀垮害*/ + if (ENUM_CM_FALSE == ret) { MSCP_LOG_MSG("Dark Write faild(Maybe the queue is full)\n"); } @@ -2679,18 +2674,18 @@ ENUM_CM_RETURN CFM_DarkLog_Storage(IN const CM_UINT8 infoType, IN const CM_UINT1 return ret; } /** -* @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織澶氬彉閲忓瓨鍌 -* @param infoType 鏁版嵁绫诲瀷 -* 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 -* 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 -* 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 -* @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff -* @param infoCut 鏁版嵁涓暟 鍙栧艰寖鍥达細0~0xff -* @param ... 鍙彉鍙傛暟/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鏁版嵁锛屼絾鏄渶瑕佷笌sizeof()鎴愬浣跨敤銆 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ + * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織澶氬彉閲忓瓨鍌 + * @param infoType 鏁版嵁绫诲瀷 + * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 + * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 + * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 + * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff + * @param infoCut 鏁版嵁涓暟 鍙栧艰寖鍥达細0~0xff + * @param ... 鍙彉鍙傛暟/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鏁版嵁锛屼絾鏄渶瑕佷笌sizeof()鎴愬浣跨敤銆 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ ENUM_CM_RETURN CFM_DarkLog_Multiple(IN const CM_UINT8 infoType, IN const CM_UINT16 code, CM_UINT8 infoCut, ...) { va_list argList; @@ -2700,40 +2695,40 @@ ENUM_CM_RETURN CFM_DarkLog_Multiple(IN const CM_UINT8 infoType, IN const CM_UINT CM_UINT8 dataBuf[1024] = {0}; CM_UINT16 totalLen = 0u; /*鍒ゆ柇鏄惁涓轰笖澶т簬0*/ - if(infoCut > 0u) + if (infoCut > 0u) { /*瀹氫綅鍙傛暟閾捐〃鏍堥《浣嶇疆*/ va_start(argList, (infoCut)); /* @alias 寰幆璇诲彇鏁版嵁*/ - for(i = 0u; ithreadNumBer) - { - pmask = (void*)(0x20u | 0x10u | 0x08u | 0x04u); - } - else - { - pmask = (void*)(0x01u|0x02u); - } - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + if (ENUM_THREAD_2oo2_AppRecv == pCtrl->threadNumBer) + { + pmask = (void *)(0x20u | 0x10u | 0x08u | 0x04u); + } + else + { + pmask = (void *)(0x01u | 0x02u); + } + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d UDP recv Start\n", pCtrl->IP, pCtrl->port); - /*- 寰幆鎺ユ敹UDP鏁版嵁 */ - while (1) - { - /*- UDP闃诲鎺ユ敹 */ + MSCP_LOG_MSG("IP:%s:%d UDP recv Start\n", pCtrl->IP, pCtrl->port); + /*- 寰幆鎺ユ敹UDP鏁版嵁 */ + while (1) + { + /*- UDP闃诲鎺ユ敹 */ rcvBuf = CM_MQ_Get_BufAddr(&pCtrl->MsgQ); - if(NULL != rcvBuf) + if (NULL != rcvBuf) { len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(pCtrl->MsgQ.maxMsgSize - 6u), &srcIP, &srcPort); /*- 鏄惁鏀跺埌鏈夋晥鏁版嵁 */ if (len > 0) { /*- 婧怚P绔彛鏄惁鍚堟硶 */ - if ((pCtrl->rmtIP == 0u) - || ((srcIP == pCtrl->rmtIP) && (srcPort== pCtrl->rmtPort))) + if ((pCtrl->rmtIP == 0u) || ((srcIP == pCtrl->rmtIP) && (srcPort == pCtrl->rmtPort))) { /*- @alias 灏嗘敹鍒扮殑鎶ユ枃鍐欏叆绾跨▼鎺ユ敹闃熷垪 */ - if((CM_UINT8)ENUM_THREAD_2x2_StateRecv == pCtrl->threadNumBer) + if ((CM_UINT8)ENUM_THREAD_2x2_StateRecv == pCtrl->threadNumBer) { /*鎺ユ敹鏁版嵁鏃堕棿鎴砿s鏁拌褰*/ - CM_LongToChar((CM_UINT32)(CM_GetTick()/CM_UNSIGNED_MILLION), rcvBuf); + CM_LongToChar((CM_UINT32)(CM_GetTick() / CM_UNSIGNED_MILLION), rcvBuf); } else { @@ -2937,7 +2931,7 @@ static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T* arg) CM_ShortToChar(srcPort, &rcvBuf[4u]); } /*- 淇濆瓨閫氫俊鏁版嵁 */ - rt = CM_MQ_UpData(&pCtrl->MsgQ,(CM_UINT16)CM_SIGNED_INT_EXP(len + 6)); + rt = CM_MQ_UpData(&pCtrl->MsgQ, (CM_UINT16)CM_SIGNED_INT_EXP(len + 6)); /*- 鏁版嵁淇濆瓨鏄惁鎴愬姛 */ if (ENUM_CM_TRUE == rt) { @@ -2950,8 +2944,8 @@ static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T* arg) rt = CM_MQ_Clear(&pCtrl->MsgQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_1); } - (ENUM_THREAD_OutnetS_Rx == (ENUM_THREAD_NUM_T)pCtrl->threadNumBer)?(g_CFM_OSCache_ClearNum++):g_CFM_OSCache_ClearNum; - (ENUM_THREAD_OutnetS_Rx == (ENUM_THREAD_NUM_T)pCtrl->threadNumBer)?(g_CFM_OSCache_Len += (CM_UINT32)len):g_CFM_OSCache_Len; + (ENUM_THREAD_OutnetS_Rx == (ENUM_THREAD_NUM_T)pCtrl->threadNumBer) ? (g_CFM_OSCache_ClearNum++) : g_CFM_OSCache_ClearNum; + (ENUM_THREAD_OutnetS_Rx == (ENUM_THREAD_NUM_T)pCtrl->threadNumBer) ? (g_CFM_OSCache_Len += (CM_UINT32)len) : g_CFM_OSCache_Len; } else { @@ -2975,53 +2969,52 @@ static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T* arg) MSCP_LOG_MSG("buf clear\n"); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_4); } - } - return NULL; + } + return NULL; } /** -* @brief 缁存姢妯″紡涓婾DP鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 -*/ -static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 缁存姢妯″紡涓婾DP鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀禪DP鎶ユ枃骞跺啓鍏ョ嚎绋嬫帴鏀堕槦鍒 + */ +static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_RECV_CTRL_T* pCtrl = (STRU_CFM_RECV_CTRL_T*)arg; /* 绾跨▼鎺у埗淇℃伅 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - CM_UINT8* rcvBuf = NULL; - CM_INT32 len; /* 鎶ユ枃闀垮害 */ - CM_UINT32 srcIP;/* 婧怚P */ - CM_UINT16 srcPort;/* 婧愮鍙 */ - CM_SOCKADDR_T srcaddr;/* 鍦板潃杞崲*/ + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_RECV_CTRL_T *pCtrl = (STRU_CFM_RECV_CTRL_T *)arg; /* 绾跨▼鎺у埗淇℃伅 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ + CM_UINT8 *rcvBuf = NULL; + CM_INT32 len; /* 鎶ユ枃闀垮害 */ + CM_UINT32 srcIP; /* 婧怚P */ + CM_UINT16 srcPort; /* 婧愮鍙 */ + CM_SOCKADDR_T srcaddr; /* 鍦板潃杞崲*/ #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d dpRecvMaintenance recv Start\n", pCtrl->IP, pCtrl->port); - /*- 寰幆鎺ユ敹UDP鏁版嵁 */ - while (1) - { - /*- UDP闃诲鎺ユ敹 */ + MSCP_LOG_MSG("IP:%s:%d dpRecvMaintenance recv Start\n", pCtrl->IP, pCtrl->port); + /*- 寰幆鎺ユ敹UDP鏁版嵁 */ + while (1) + { + /*- UDP闃诲鎺ユ敹 */ rcvBuf = CM_MQ_Get_BufAddr(&pCtrl->MsgQ); - if(NULL != rcvBuf) + if (NULL != rcvBuf) { len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(pCtrl->MsgQ.maxMsgSize - 6u), &srcIP, &srcPort); /*- 鏄惁鏀跺埌鏈夋晥鏁版嵁 */ if (len > 0) { /*- 婧怚P绔彛鏄惁鍚堟硶 */ - if ((pCtrl->rmtIP == 0u) - || ((srcIP == pCtrl->rmtIP) && (srcPort== pCtrl->rmtPort))) + if ((pCtrl->rmtIP == 0u) || ((srcIP == pCtrl->rmtIP) && (srcPort == pCtrl->rmtPort))) { /*- @alias 灏嗘敹鍒扮殑鎶ユ枃鍐欏叆绾跨▼鎺ユ敹闃熷垪 */ CM_LongToChar(srcIP, rcvBuf); CM_ShortToChar(srcPort, &rcvBuf[4u]); /*- 淇濆瓨閫氫俊鏁版嵁 */ - rt = CM_MQ_UpData(&pCtrl->MsgQ,(CM_UINT16)CM_SIGNED_INT_EXP(len + 6)); + rt = CM_MQ_UpData(&pCtrl->MsgQ, (CM_UINT16)CM_SIGNED_INT_EXP(len + 6)); /*- 鏁版嵁淇濆瓨鏄惁鎴愬姛 */ if (ENUM_CM_TRUE == rt) { @@ -3032,8 +3025,7 @@ static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* ar /*- 闃插尽鎬ф竻绌*/ /* MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len);*/ rt = CM_MQ_Clear(&pCtrl->MsgQ); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_1); - + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_1); } } else @@ -3041,171 +3033,170 @@ static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* ar /*- 鏉ヨ嚜闈為鏈烮P绔彛鐨勬暟鎹*/ srcaddr.sin_addr.s_addr = srcIP; MSCP_LOG_MSG("rx err want port:%d src [%s:%d]:%d \n", pCtrl->rmtPort, inet_ntoa(srcaddr.sin_addr), srcPort, len); - CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_2); + CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_2); } } else { /*- 鎺ユ敹鍑洪敊 */ MSCP_LOG_MSG("port %d rx err(len=%d)\n", pCtrl->port, len); - CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_3); + CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_3); } } else { /*鑾峰彇闃熷垪鎸囬拡澶辫触锛屾竻绌洪槦鍒*/ rt = CM_MQ_Clear(&pCtrl->MsgQ); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_4); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_4); } - } - return NULL; + } + return NULL; } /** -* @brief 鏃堕挓鍚屾绾跨▼ -* @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 -* @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_TIME_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀舵椂閽熷悓姝ユ姤鏂囧苟浣滃嚭搴旂瓟 -* 鏀跺埌璇锋眰鎶ユ枃鏃剁珛鍗崇粰鍑哄簲绛 -* 鏀跺埌搴旂瓟鎶ユ枃鏃惰褰曞苟璁$畻寤惰繜鏃堕棿銆佸亸绉绘椂闂 -* @see :: CFM_2oo2_TimeReq -* @see :: CFM_2oo2_TimeGet -*/ -static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 鏃堕挓鍚屾绾跨▼ + * @param arg 鎸囧悜STRU_CFM_TIME_CTRL鐨勬寚閽 + * @return 绾跨▼鍑芥暟杩斿洖鍊硷紙瀹為檯姘歌繙涓嶄細杩斿洖锛 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_TIME_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀舵椂閽熷悓姝ユ姤鏂囧苟浣滃嚭搴旂瓟 + * 鏀跺埌璇锋眰鎶ユ枃鏃剁珛鍗崇粰鍑哄簲绛 + * 鏀跺埌搴旂瓟鎶ユ枃鏃惰褰曞苟璁$畻寤惰繜鏃堕棿銆佸亸绉绘椂闂 + * @see :: CFM_2oo2_TimeReq + * @see :: CFM_2oo2_TimeGet + */ +static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_TIME_CTRL_T* pCtrl = (STRU_CFM_TIME_CTRL_T*)arg; /* 绾跨▼鍙傛暟 */ - CM_UINT8 buf[100] = { 0u }; /* 鎺ユ敹缂撳啿鍖 */ - CM_INT32 len; /* 鏁版嵁闀垮害 */ - CM_UINT32 srcIP; /* 婧怚P */ - CM_UINT16 srcPort; /* 婧愮鍙 */ - CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ - CM_UINT64 T1 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ - CM_UINT64 T2 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ - CM_UINT64 T3 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ - CM_UINT64 T4 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_TIME_CTRL_T *pCtrl = (STRU_CFM_TIME_CTRL_T *)arg; /* 绾跨▼鍙傛暟 */ + CM_UINT8 buf[100] = {0u}; /* 鎺ユ敹缂撳啿鍖 */ + CM_INT32 len; /* 鏁版嵁闀垮害 */ + CM_UINT32 srcIP; /* 婧怚P */ + CM_UINT16 srcPort; /* 婧愮鍙 */ + CM_UINT64 tick = 0u; /* 绮剧‘鏃堕棿 */ + CM_UINT64 T1 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ + CM_UINT64 T2 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ + CM_UINT64 T3 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ + CM_UINT64 T4 = 0u; /* 鏃堕挓鍚屾鍙傛暟 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d Time Service Start\n", pCtrl->IP, (CM_INT32)pCtrl->port); - /*- 寰幆鎵ц鎺ユ敹绾跨▼ */ - while (1) - { - /*- 闃诲鎺ユ敹鏃堕挓鍚屾鎶ユ枃 */ - len = CM_UDP_Recv_Msg(*(pCtrl->pSock), buf, (CM_INT32)sizeof(buf), &srcIP, &srcPort); - tick = DFM_GetCycTick(); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if (len > 0) - { - /*- 鎶ユ枃绫诲瀷 */ - switch ((ENUM_TIME_MSG_T)buf[0]) - { - case ENUM_TIME_REQ: /*-< 鏃堕挓鍚屾璇锋眰 */ - /*- 闀垮害鏄惁鍚堟硶 */ - if (9 == len) - { - /*- 瑙f瀽璇锋眰鎶ユ枃 */ - T1 = CM_64FromChar(buf + 1); - /*- 鐢熸垚搴旂瓟鎶ユ枃 */ - T2 = tick; - buf[0] = (CM_UINT8)ENUM_TIME_ACK; - CM_64ToChar(T1, buf + 1); - CM_64ToChar(T2, buf + 9); - T3 = DFM_GetCycTick(); - CM_64ToChar(T3, buf + 17); - /*- 鍙戦佸簲绛旀姤鏂 */ - (void)CM_UDP_Send_Msg(*(pCtrl->pSock), buf, (CM_INT32)25, srcIP, srcPort); - } - else + MSCP_LOG_MSG("IP:%s:%d Time Service Start\n", pCtrl->IP, (CM_INT32)pCtrl->port); + /*- 寰幆鎵ц鎺ユ敹绾跨▼ */ + while (1) + { + /*- 闃诲鎺ユ敹鏃堕挓鍚屾鎶ユ枃 */ + len = CM_UDP_Recv_Msg(*(pCtrl->pSock), buf, (CM_INT32)sizeof(buf), &srcIP, &srcPort); + tick = DFM_GetCycTick(); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if (len > 0) + { + /*- 鎶ユ枃绫诲瀷 */ + switch ((ENUM_TIME_MSG_T)buf[0]) + { + case ENUM_TIME_REQ: /*-< 鏃堕挓鍚屾璇锋眰 */ + /*- 闀垮害鏄惁鍚堟硶 */ + if (9 == len) + { + /*- 瑙f瀽璇锋眰鎶ユ枃 */ + T1 = CM_64FromChar(buf + 1); + /*- 鐢熸垚搴旂瓟鎶ユ枃 */ + T2 = tick; + buf[0] = (CM_UINT8)ENUM_TIME_ACK; + CM_64ToChar(T1, buf + 1); + CM_64ToChar(T2, buf + 9); + T3 = DFM_GetCycTick(); + CM_64ToChar(T3, buf + 17); + /*- 鍙戦佸簲绛旀姤鏂 */ + (void)CM_UDP_Send_Msg(*(pCtrl->pSock), buf, (CM_INT32)25, srcIP, srcPort); + } + else { /*- 鏃犲鐞 */ } - /*- 杩斿洖 */ - break; - case ENUM_TIME_ACK:/*-< 鏃堕挓鍚屾搴旂瓟 */ - /*- 闀垮害鏄惁鍚堟硶 */ - if (25 == len) - { - /*- 瑙f瀽搴旂瓟鎶ユ枃 */ - T1 = CM_64FromChar(buf + 1); - T2 = CM_64FromChar(buf + 9); - T3 = CM_64FromChar(buf + 17); - T4 = tick; - /*- 璁板綍寤惰繜鏃堕棿鍜屽亸绉绘椂闂 */ - rt = CM_Mutex_Lock(pCtrl->mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); - pCtrl->isOK = ENUM_CM_TRUE; - pCtrl->delay = (CM_INT64)((T4 - T1) - (T3 - T2)) / 2; - pCtrl->offset = (CM_INT64)((T2 + T3) - (T4 + T1)) / 2; - rt = CM_Mutex_Unlock(pCtrl->mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); - - } - else + /*- 杩斿洖 */ + break; + case ENUM_TIME_ACK: /*-< 鏃堕挓鍚屾搴旂瓟 */ + /*- 闀垮害鏄惁鍚堟硶 */ + if (25 == len) + { + /*- 瑙f瀽搴旂瓟鎶ユ枃 */ + T1 = CM_64FromChar(buf + 1); + T2 = CM_64FromChar(buf + 9); + T3 = CM_64FromChar(buf + 17); + T4 = tick; + /*- 璁板綍寤惰繜鏃堕棿鍜屽亸绉绘椂闂 */ + rt = CM_Mutex_Lock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + pCtrl->isOK = ENUM_CM_TRUE; + pCtrl->delay = (CM_INT64)((T4 - T1) - (T3 - T2)) / 2; + pCtrl->offset = (CM_INT64)((T2 + T3) - (T4 + T1)) / 2; + rt = CM_Mutex_Unlock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); + } + else { /*- 鏃犲鐞 */ } - /*- 杩斿洖 */ - break; - case ENUM_TIME_ERROR:/*-< 淇濈暀瀛 */ - /*- 瀹曟満 */ - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); - /*- 杩斿洖 */ - break; - default: - /*- 杩斿洖 */ - break; - } - } - else - { - /*- 涓嶅鐞 */ - } - } - return NULL; + /*- 杩斿洖 */ + break; + case ENUM_TIME_ERROR: /*-< 淇濈暀瀛 */ + /*- 瀹曟満 */ + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); + /*- 杩斿洖 */ + break; + default: + /*- 杩斿洖 */ + break; + } + } + else + { + /*- 涓嶅鐞 */ + } + } + return arg; } /** -* @brief 杩滅▼閮ㄧ讲鎺ユ敹绾跨▼ -* @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 -* @details -* 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket -* 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀惰繙绋嬮儴缃插懡浠DP鎶ユ枃锛岀劧鍚庤繘琛岀浉鍏冲鐞 -*/ -static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 杩滅▼閮ㄧ讲鎺ユ敹绾跨▼ + * @param arg 鎸囧悜STRU_CFM_RECV_CTRL鐨勬寚閽 + * @details + * 鍒涘缓鏈嚎绋嬩箣鍓嶅簲鍏堥厤缃ソSTRU_CFM_RECV_CTRL锛屽寘鎷垱寤洪樆濉為氫俊鐨剆ocket + * 鏈嚎绋嬪皢浠ラ樆濉炴柟寮忔帴鏀惰繙绋嬮儴缃插懡浠DP鎶ユ枃锛岀劧鍚庤繘琛岀浉鍏冲鐞 + */ +static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T *arg) { - /*- 鍙橀噺鍒濆鍖 */ - STRU_CFM_RECV_CTRL_T* pCtrl = (STRU_CFM_RECV_CTRL_T*)arg; /* 绾跨▼鎺у埗淇℃伅 */ + /*- 鍙橀噺鍒濆鍖 */ + STRU_CFM_RECV_CTRL_T *pCtrl = (STRU_CFM_RECV_CTRL_T *)arg; /* 绾跨▼鎺у埗淇℃伅 */ STRU_PFM_INNET_CFG_T *pCom = NULL; - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - CM_UINT8 rcvBuf[1024] = { 0u }; /* 鎺ユ敹缂撳啿鍖 */ - CM_INT32 len; /* 鎶ユ枃闀垮害 */ - CM_UINT32 srcIP;/* 婧怚P */ - CM_UINT16 srcPort;/* 婧愮鍙 */ - CM_UINT32 rmtIP;/* 瀵规柟IP */ - CM_UINT16 rmtPort_safe;/* 瀵规柟sfp绔彛 */ - CM_UINT16 rmtPort_raw;/* 瀵规柟閫忎紶绔彛 */ - struct in_addr serveraddr;/* 婧恑p */ - CM_UINT8 Result = 0x0u;/* 璇锋眰澶勭悊缁撴灉 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ + CM_UINT8 rcvBuf[1024] = {0u}; /* 鎺ユ敹缂撳啿鍖 */ + CM_INT32 len; /* 鎶ユ枃闀垮害 */ + CM_UINT32 srcIP; /* 婧怚P */ + CM_UINT16 srcPort; /* 婧愮鍙 */ + CM_UINT32 rmtIP; /* 瀵规柟IP */ + CM_UINT16 rmtPort_safe; /* 瀵规柟sfp绔彛 */ + CM_UINT16 rmtPort_raw; /* 瀵规柟閫忎紶绔彛 */ + struct in_addr serveraddr; /* 婧恑p */ + CM_UINT8 Result = 0x0u; /* 璇锋眰澶勭悊缁撴灉 */ #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - MSCP_LOG_MSG("IP:%s:%d UDP recv Start\n", pCtrl->IP, pCtrl->port); + MSCP_LOG_MSG("IP:%s:%d UDP recv Start\n", pCtrl->IP, pCtrl->port); /*- 鑾峰彇鐩殑IP绔彛 */ pCom = PFM_INI_InnetID2Addr(g_Maintenance_Id); if (NULL != pCom) { /*- 鏈満鏄惁涓篊PU1 */ if (1u == g_PFM_Cfg.CPU_ID) - { + { rmtIP = pCom->IP_G; rmtPort_safe = pCom->Port_Safe_G; rmtPort_raw = pCom->Port_Raw_G; @@ -3215,7 +3206,7 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) rmtIP = pCom->IP_P; rmtPort_safe = pCom->Port_Safe_P; rmtPort_raw = pCom->Port_Raw_P; - } + } } else { @@ -3223,21 +3214,21 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) MSCP_LOG_MSG("Map Value From g_Maintenance_Id Error!!!\n"); } - /*- 寰幆鎺ユ敹UDP鏁版嵁 */ - while (1) - { - /* 璇锋眰澶勭悊缁撴灉閲嶆柊缃0 */ - Result = 0x0u; - /*- UDP闃诲鎺ユ敹 */ - len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)sizeof(rcvBuf)-6, &srcIP, &srcPort); + /*- 寰幆鎺ユ敹UDP鏁版嵁 */ + while (1) + { + /* 璇锋眰澶勭悊缁撴灉閲嶆柊缃0 */ + Result = 0x0u; + /*- UDP闃诲鎺ユ敹 */ + len = CM_UDP_Recv_Msg(*(pCtrl->pSock), &rcvBuf[6u], (CM_INT32)sizeof(rcvBuf) - 6, &srcIP, &srcPort); /*- 鏄惁鏀跺埌鏈夋晥鏁版嵁 */ if (len > 0) { MSCP_LOG_DATALEN(rcvBuf, len, "t_RemoteUpdateThread rcvBuflen"); /*- 婧怚P绔彛鏄惁鍚堟硶 */ - if ((srcIP == rmtIP) && ((srcPort== rmtPort_safe) || (srcPort == rmtPort_raw))) + if ((srcIP == rmtIP) && ((srcPort == rmtPort_safe) || (srcPort == rmtPort_raw))) { - if (srcPort== rmtPort_safe) + if (srcPort == rmtPort_safe) { /*- @alias 闇瑕佽Вsfp鍗忚鐨勮繙绋嬮儴缃插懡浠 */ /*- @alias 灏嗘敹鍒扮殑瀹屾暣甯у啓鍏ョ嚎绋嬫帴鏀堕槦鍒 */ @@ -3247,7 +3238,7 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) rt = CM_MQ_Write(&pCtrl->MsgQ, rcvBuf, (CM_UINT16)CM_SIGNED_SHORT_EXP(len + 6)); if (ENUM_CM_TRUE == rt) { - MSCP_LOG_MSG("CM_MQ_Write success!!! len = %d\n",len); + MSCP_LOG_MSG("CM_MQ_Write success!!! len = %d\n", len); /*鎴愬姛鏃犳搷浣*/ } else @@ -3265,8 +3256,8 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) if (0xa3u == rcvBuf[8u]) { /*- 鏂囦欢鏇存柊璇锋眰 */ - MSCP_LOG_MSG("recv 0xa3 pack g_RemoteUpdate_State = %d\n",g_RemoteUpdate_State); - rt = PFM_FileUpdate_Request(&rcvBuf[6u],(CM_UINT16)len,&Result); + MSCP_LOG_MSG("recv 0xa3 pack g_RemoteUpdate_State = %d\n", g_RemoteUpdate_State); + rt = PFM_FileUpdate_Request(&rcvBuf[6u], (CM_UINT16)len, &Result); if (ENUM_CM_TRUE != rt) { (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_2)); @@ -3292,13 +3283,13 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) } } } - else if(0xa4u == rcvBuf[8u]) + else if (0xa4u == rcvBuf[8u]) { if (0x01u == g_RemoteUpdate_State) { /*- 褰撳墠杩滅▼閮ㄧ讲杩囩▼涓轰笂浼犲畬鎴愰獙璇佽姹*/ /*- 鏂囦欢涓婁紶瀹屾垚楠岃瘉璇锋眰 */ - rt = PFM_FileVerity_Request(&rcvBuf[6u],(CM_UINT16)len); + rt = PFM_FileVerity_Request(&rcvBuf[6u], (CM_UINT16)len); if (ENUM_CM_TRUE != rt) { (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_3)); @@ -3319,21 +3310,22 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) { /*- 涓嶆槸褰撳墠搴旇鏀跺埌鐨勮繃绋嬫姤鏂囦涪寮冧笉澶勭悊*/ MSCP_LOG_MSG("0xa4u The packet should not be received in the current state!!! \n"); - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4)); } + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4)); + } } else { /*- 鏉ヨ嚜闈為鏈熷抚绫诲瀷鐨勬暟鎹*/ - (void)CM_Memcpy((void*) &serveraddr, sizeof(serveraddr), (void*) &srcIP, (CM_SIZE_T)4); + (void)CM_Memcpy((void *)&serveraddr, sizeof(serveraddr), (void *)&srcIP, (CM_SIZE_T)4); MSCP_LOG_MSG("frame type err [%s:%d]:%d:%x \n", inet_ntoa(serveraddr), srcPort, len, rcvBuf[8u]); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_5)); } - } + } } else { /*- 鏉ヨ嚜闈為鏈烮P绔彛鐨勬暟鎹*/ - (void)CM_Memcpy((void*) &serveraddr, sizeof(serveraddr), (void*) &srcIP, (CM_SIZE_T)4); + (void)CM_Memcpy((void *)&serveraddr, sizeof(serveraddr), (void *)&srcIP, (CM_SIZE_T)4); MSCP_LOG_MSG("rx err [%s:%d]:%d \n", inet_ntoa(serveraddr), srcPort, len); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_6)); } @@ -3342,20 +3334,20 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) { /*- 鎺ユ敹鍑洪敊 */ MSCP_LOG_MSG("port %d rx err(len=%d)\n", pCtrl->port, len); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_REMOTEUPDATETHREAD_LENEOR, 2, \ - sizeof(CM_UINT16),pCtrl->port, - sizeof(CM_INT32),len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_REMOTEUPDATETHREAD_LENEOR, 2, + sizeof(CM_UINT16), pCtrl->port, + sizeof(CM_INT32), len); } - } + } - return NULL; + return NULL; } /** -* @brief 娓呯┖鎺ユ敹缂撳啿鍖 -*/ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_Net2XFlush(void) { - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; if (0x55u == g_PFM_Cfg.M_2x2_Enable) { /*- 2x2鎺ユ敹缂撳啿鍖烘竻绌 */ @@ -3368,17 +3360,17 @@ void CFM_Net2XFlush(void) } } /** -* @brief 娓呯┖鎺ユ敹缂撳啿鍖 -*/ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_Net2X_State_Flush(void) { - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; if (0x55u == g_PFM_Cfg.M_2x2_Enable) { - rt = CM_MQ_Flush(&s_CFM_State2x2.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_11); - rt = CM_Com_OtherDataClear(); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_9); + rt = CM_MQ_Flush(&s_CFM_State2x2.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_11); + rt = CM_Com_OtherDataClear(); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_9); } else { @@ -3386,176 +3378,175 @@ void CFM_Net2X_State_Flush(void) } } /** -* @brief 娓呯┖鎺ユ敹缂撳啿鍖 -*/ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_NetFlush(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 i = 0; - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 i = 0; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /*- 2x2鍔熻兘鏄惁寮鍚 */ - CFM_Net2XFlush(); - CFM_Net2X_State_Flush(); + CFM_Net2XFlush(); + CFM_Net2X_State_Flush(); - /*- 鍐呯綉瀹夊叏鎺ユ敹缂撳啿鍖烘竻绌 */ - rt = CM_MQ_Flush(&s_CFM_RxInnetSafe.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_2); + /*- 鍐呯綉瀹夊叏鎺ユ敹缂撳啿鍖烘竻绌 */ + rt = CM_MQ_Flush(&s_CFM_RxInnetSafe.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_2); - /*- 澶栫綉瀹夊叏鎺ユ敹缂撳啿鍖烘竻绌 */ - rt = CM_MQ_Flush(&s_CFM_RxOutnetSafe.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_3); + /*- 澶栫綉瀹夊叏鎺ユ敹缂撳啿鍖烘竻绌 */ + rt = CM_MQ_Flush(&s_CFM_RxOutnetSafe.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_3); - /*鍒ゆ柇澶栫綉閫忎紶浣胯兘寮鍏*/ - if(0x55u == (CM_UINT32)g_PFM_Cfg.M_OutnetRaw_Enable) - { + /*鍒ゆ柇澶栫綉閫忎紶浣胯兘寮鍏*/ + if (0x55u == (CM_UINT32)g_PFM_Cfg.M_OutnetRaw_Enable) + { /* 澶栫綉閫忎紶缂撳啿鍖烘竻绌 */ rt = CM_MQ_Flush(&s_CFM_RxOutnetRaw.MsgQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_7); - } - else - { - /*鏃犲鐞 */ - } - if((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { + } + else + { + /*鏃犲鐞 */ + } + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { /*- 鍐呯綉杩滅▼閮ㄧ讲鎺ユ敹缂撳啿鍖烘竻绌 */ rt = CM_MQ_Flush(&s_CFM_RxRemoteUpdate.MsgQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_8); - } - else - { + } + else + { /*鏃犲鐞 */ - } + } - rt = CM_MQ_Flush(&s_CFM_RxOutnetHeart.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_10); + rt = CM_MQ_Flush(&s_CFM_RxOutnetHeart.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_10); /*- @alias 鍐呯綉閫忎紶缂撳啿鍖烘竻绌 */ - for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) - { + for (i = 1; i <= (s_CFM_Sock.num_InnetRaw + s_CFM_Sock.num_InnetRaw_Extend); i++) + { if (RAW_COM_DISENABLE != g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { - if((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) - { - (void)CM_Mutex_Lock(s_CFM_RxInnetRaw[i].mutex); - rt = CM_MQ_Flush(&s_CFM_RxInnetRaw[i].MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_4); + if ((0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) && (0x55u == (CM_UINT16)g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE)) + { + (void)CM_Mutex_Lock(s_CFM_RxInnetRaw[i].mutex); + rt = CM_MQ_Flush(&s_CFM_RxInnetRaw[i].MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_4); rt = CM_MQ_Flush(&s_CFM_RxInnetRaw[i].InfoQ); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_5); (void)CM_Mutex_Unlock(s_CFM_RxInnetRaw[i].mutex); - } - else - { - rt = CM_MQ_Flush(&s_CFM_RxInnetRaw[i].MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_6); - } + } + else + { + rt = CM_MQ_Flush(&s_CFM_RxInnetRaw[i].MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_6); + } } else { - } - } + } } /** -* @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pSrcIP 婧怚P -* @param pSrcPort 婧愮鍙 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_InnetSafe_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort) + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_InnetSafe_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxInnetSafe.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > 6u)) - { - /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxInnetSafe.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > 6u)) + { + /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + len -= 6u; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; } /** -* @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pSrcIP 婧怚P -* @param pSrcPort 婧愮鍙 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_InnetSafeRm_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort) + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_InnetSafeRm_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - CM_ASSERT(pBuf != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_35, TSCP_DARK_ASSERT_2); - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxRemoteUpdate.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > 6u)) - { - /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_35, TSCP_DARK_ASSERT_1); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; -} - -/** -* @brief 鍐呯綉瀹夊叏杩滅▼閮ㄧ讲閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pSrcIP 婧怚P -* @param pSrcPort 婧愮鍙 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_InnetRemoteUpdate_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort) -{ - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - - CM_ASSERT_MAINTAIN(pBuf != NULL); + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + CM_ASSERT(pBuf != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_35, TSCP_DARK_ASSERT_2); /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ rt = CM_MQ_Read(&s_CFM_RxRemoteUpdate.MsgQ, s_CFM_UDP_Cache, &len); /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ if ((ENUM_CM_TRUE == rt) && (len > 6u)) { /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ len -= 6u; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_35, TSCP_DARK_ASSERT_1); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; +} + +/** + * @brief 鍐呯綉瀹夊叏杩滅▼閮ㄧ讲閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_InnetRemoteUpdate_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort) +{ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + + CM_ASSERT_MAINTAIN(pBuf != NULL); + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxRemoteUpdate.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > 6u)) + { + /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + len -= 6u; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); if (ENUM_CM_TRUE != rt) { len = 0u; @@ -3572,555 +3563,535 @@ CM_INT32 CFM_InnetRemoteUpdate_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OU /*- 鎺ユ敹闀垮害涓0 */ len = 0u; } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; } /** -* @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param DstIP 鐩殑IP -* @param DstPort 鐩殑绔彛 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_InnetSafe_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_InnetSafe_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) { - /*- 杩斿洖鍐呯綉瀹夊叏閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ - return CM_UDP_Send_Msg(s_CFM_Sock.Sock_InnetSafe, Buf, Len, DstIP, DstPort); + /*- 杩斿洖鍐呯綉瀹夊叏閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ + return CM_UDP_Send_Msg(s_CFM_Sock.Sock_InnetSafe, Buf, Len, DstIP, DstPort); } /** -* @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param DstIP 鐩殑IP -* @param DstPort 鐩殑绔彛 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_InnetRemoteUpdate_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) + * @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_InnetRemoteUpdate_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) { - /*- 杩斿洖鍐呯綉瀹夊叏閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ - return CM_UDP_Send_Msg(s_CFM_Sock.Sock_Remote_Update, Buf, Len, DstIP, DstPort); + /*- 杩斿洖鍐呯綉瀹夊叏閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ + return CM_UDP_Send_Msg(s_CFM_Sock.Sock_Remote_Update, Buf, Len, DstIP, DstPort); } /** -* @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 -* @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pSrcIP 婧怚P -* @param pSrcPort 婧愮鍙 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0 鎺ユ敹澶辫触 -*/ -CM_UINT16 CFM_InnetRaw_Recv(IN CM_INT32 ch, OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort) + * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ +CM_UINT16 CFM_InnetRaw_Recv(IN CM_INT32 ch, OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxInnetRaw[ch].MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > (CM_UINT16)(6u))) - { - /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ - len -= 6u; - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)(len)); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return len; -} - -/** -* @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鍙戦 -* @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param DstIP 鐩殑IP -* @param DstPort 鐩殑绔彛 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_InnetRaw_Send(IN CM_INT32 ch, IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) -{ - /*- 杩斿洖鍐呯綉閫忎紶閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ - return CM_UDP_Send_Msg(s_CFM_Sock.Sock_InnetRaw[ch], Buf, Len, DstIP, DstPort); -} - -/** -* @brief 澶栫綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pChn 澶栫綉閫氶亾绫诲瀷 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_INT32 CFM_OutnetSafe_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn) -{ - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - - CM_UINT32 srcIP = 0u; - CM_UINT16 srcPort = 0u; - - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxOutnetSafe.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > 6u)) - { - /*- 璇诲彇婧怚P鍜岀鍙 */ - srcIP = CM_LongFromChar(s_CFM_UDP_Cache); - srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); - len -= 6u; - /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ - if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_OutnetSafe_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ - *pChn = ENUM_OUTNET_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_1); - } - /*- 鏄惁鏉ヨ嚜钃濈綉CC */ - else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_OutnetSafe_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉钃濈綉 */ - *pChn = ENUM_OUTNET_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_2); - } - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_OutnetSafe_Port == srcPort)) - { - *pChn = ENUM_OUTNET_EXTEND_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_3); - } - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_OutnetSafe_Port == srcPort)) - { - *pChn = ENUM_OUTNET_EXTEND_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_4); - } - else - { - /*- 寮傚父锛屽畷鏈*/ - MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETSAFE_RECVLENERO, 3, \ - sizeof(CM_UINT32),srcIP, - sizeof(CM_UINT16),srcPort, - sizeof(CM_UINT16),len); - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_5); - } - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return (CM_INT32)len; -} - -/** -* @brief 澶栫綉瀹夊叏鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param Chn 澶栫綉閫氶亾绫诲瀷 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_OutnetSafe_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) -{ - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鏄惁鏄缃戠孩缃戦氶亾 */ - if (ENUM_OUTNET_RED == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP),g_PFM_Cfg.CC_R_OutnetSafe_Port); - } - /*- 鏄惁鏄缃戣摑缃戦氶亾 */ - else if (ENUM_OUTNET_BLUE == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_OutnetSafe_Port); - } - else if (ENUM_OUTNET_EXTEND_RED == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_OutnetSafe_Port); - } - else if (ENUM_OUTNET_EXTEND_BLUE == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_OutnetSafe_Port); - } - else - { - /*- 寮傚父锛屽畷鏈 */ - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_24, TSCP_DARK_ASSERT_1); - } - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; -} - -/** -* @brief 澶栫綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pChn 澶栫綉閫氶亾绫诲瀷 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_UINT16 CFM_OutnetRaw_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn) -{ - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - - CM_UINT32 srcIP = 0u; - CM_UINT16 srcPort = 0u; - - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxOutnetRaw.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > 6u)) - { - /*- 璇诲彇婧怚P鍜岀鍙 */ - srcIP = CM_LongFromChar(s_CFM_UDP_Cache); - srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); - len -= 6u; - /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ - if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_OutnetRaw_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ - *pChn = ENUM_OUTNET_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_1); - } - /*- 鏄惁鏉ヨ嚜钃濈綉CC */ - else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_OutnetRaw_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉钃濈綉 */ - *pChn = ENUM_OUTNET_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_2); - } - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_OutnetRaw_Port == srcPort)) - { - *pChn = ENUM_OUTNET_EXTEND_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_3); - } - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_OutnetRaw_Port == srcPort)) - { - *pChn = ENUM_OUTNET_EXTEND_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_4); - } - else - { - /*- 寮傚父锛屽畷鏈*/ - MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETRAW_RECVLENERO, 3, \ - sizeof(CM_UINT32),srcIP, - sizeof(CM_UINT16),srcPort, - sizeof(CM_UINT16),len); - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_5); - } - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return len; -} - -/** -* @brief 澶栫綉閫忎紶鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param Chn 澶栫綉閫氶亾绫诲瀷 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_OutnetRaw_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) -{ - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - /*- 鏄惁鏄缃戠孩缃戦氶亾 */ - if (ENUM_OUTNET_RED == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP),g_PFM_Cfg.CC_R_OutnetRaw_Port); - } - /*- 鏄惁鏄缃戣摑缃戦氶亾 */ - else if (ENUM_OUTNET_BLUE == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_OutnetRaw_Port); - } - else if (ENUM_OUTNET_EXTEND_RED == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_OutnetRaw_Port); - } - else if (ENUM_OUTNET_EXTEND_BLUE == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_OutnetRaw_Port); - } - else - { - /*- 寮傚父锛屽畷鏈 */ - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_1); - } - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; -} - -/** -* @brief 澶栫綉蹇冭烦閫氫俊鏁版嵁鎺ユ敹 -* @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 -* @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 -* @param pChn 澶栫綉閫氶亾绫诲瀷 -* @return 鎺ユ敹鎶ユ枃闀垮害 -* - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 -* - 0鎴栬礋鏁 鎺ユ敹澶辫触 -*/ -CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn) -{ - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); - ENUM_CM_RETURN rt = ENUM_CM_FALSE; - - CM_UINT32 srcIP = 0u; - CM_UINT16 srcPort = 0u; - /*- 鍙傛暟闈炵┖妫鏌 */ - if((NULL != pBuf) && (NULL != pChn)) + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxInnetRaw[ch].MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > (CM_UINT16)(6u))) { - /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ - rt = CM_MQ_Read(&s_CFM_RxOutnetHeart.MsgQ, s_CFM_UDP_Cache, &len); - /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if ((ENUM_CM_TRUE == rt) && (len > 6u)) - { - /*- 璇诲彇婧怚P鍜岀鍙 */ - srcIP = CM_LongFromChar(s_CFM_UDP_Cache); - srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); - len -= 6u; - /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ - if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ - *pChn = ENUM_OUTNET_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_1); - } - /*- 鏄惁鏉ヨ嚜钃濈綉CC */ - else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉钃濈綉 */ - *pChn = ENUM_OUTNET_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_2); - } + /*- 淇濆瓨婧怚P銆佺鍙e拰鏀跺埌鐨勬姤鏂 */ + len -= 6u; + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)(len)); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return len; +} + +/** + * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鍙戦 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_InnetRaw_Send(IN CM_INT32 ch, IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort) +{ + /*- 杩斿洖鍐呯綉閫忎紶閫氫俊閫氶亾鐨勫彂閫佺粨鏋 */ + return CM_UDP_Send_Msg(s_CFM_Sock.Sock_InnetRaw[ch], Buf, Len, DstIP, DstPort); +} + +/** + * @brief 澶栫綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_INT32 CFM_OutnetSafe_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn) +{ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + + CM_UINT32 srcIP = 0u; + CM_UINT16 srcPort = 0u; + + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxOutnetSafe.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > 6u)) + { + /*- 璇诲彇婧怚P鍜岀鍙 */ + srcIP = CM_LongFromChar(s_CFM_UDP_Cache); + srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); + len -= 6u; + /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ + if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_OutnetSafe_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ + *pChn = ENUM_OUTNET_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_1); + } + /*- 鏄惁鏉ヨ嚜钃濈綉CC */ + else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_OutnetSafe_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉钃濈綉 */ + *pChn = ENUM_OUTNET_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_2); + } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_OutnetSafe_Port == srcPort)) + { + *pChn = ENUM_OUTNET_EXTEND_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_3); + } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_OutnetSafe_Port == srcPort)) + { + *pChn = ENUM_OUTNET_EXTEND_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_4); + } + else + { + /*- 寮傚父锛屽畷鏈*/ + MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETSAFE_RECVLENERO, 3, + sizeof(CM_UINT32), srcIP, + sizeof(CM_UINT16), srcPort, + sizeof(CM_UINT16), len); + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_5); + } + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return (CM_INT32)len; +} + +/** + * @brief 澶栫綉瀹夊叏鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_OutnetSafe_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) +{ + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鏄惁鏄缃戠孩缃戦氶亾 */ + if (ENUM_OUTNET_RED == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP), g_PFM_Cfg.CC_R_OutnetSafe_Port); + } + /*- 鏄惁鏄缃戣摑缃戦氶亾 */ + else if (ENUM_OUTNET_BLUE == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_OutnetSafe_Port); + } + else if (ENUM_OUTNET_EXTEND_RED == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_OutnetSafe_Port); + } + else if (ENUM_OUTNET_EXTEND_BLUE == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetSafe, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_OutnetSafe_Port); + } + else + { + /*- 寮傚父锛屽畷鏈 */ + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_24, TSCP_DARK_ASSERT_1); + } + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; +} + +/** + * @brief 澶栫綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_UINT16 CFM_OutnetRaw_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn) +{ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + + CM_UINT32 srcIP = 0u; + CM_UINT16 srcPort = 0u; + + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxOutnetRaw.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > 6u)) + { + /*- 璇诲彇婧怚P鍜岀鍙 */ + srcIP = CM_LongFromChar(s_CFM_UDP_Cache); + srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); + len -= 6u; + /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ + if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_OutnetRaw_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ + *pChn = ENUM_OUTNET_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_1); + } + /*- 鏄惁鏉ヨ嚜钃濈綉CC */ + else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_OutnetRaw_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉钃濈綉 */ + *pChn = ENUM_OUTNET_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_2); + } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_OutnetRaw_Port == srcPort)) + { + *pChn = ENUM_OUTNET_EXTEND_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_3); + } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_OutnetRaw_Port == srcPort)) + { + *pChn = ENUM_OUTNET_EXTEND_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_4); + } + else + { + /*- 寮傚父锛屽畷鏈*/ + MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETRAW_RECVLENERO, 3, + sizeof(CM_UINT32), srcIP, + sizeof(CM_UINT16), srcPort, + sizeof(CM_UINT16), len); + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_5); + } + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } + /*- 杩斿洖鎺ユ敹闀垮害 */ + return len; +} + +/** + * @brief 澶栫綉閫忎紶鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_OutnetRaw_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) +{ + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鏄惁鏄缃戠孩缃戦氶亾 */ + if (ENUM_OUTNET_RED == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP), g_PFM_Cfg.CC_R_OutnetRaw_Port); + } + /*- 鏄惁鏄缃戣摑缃戦氶亾 */ + else if (ENUM_OUTNET_BLUE == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_OutnetRaw_Port); + } + else if (ENUM_OUTNET_EXTEND_RED == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_OutnetRaw_Port); + } + else if (ENUM_OUTNET_EXTEND_BLUE == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetRaw, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_OutnetRaw_Port); + } + else + { + /*- 寮傚父锛屽畷鏈 */ + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_1); + } + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; +} + +/** + * @brief 澶栫綉蹇冭烦閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ +CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn) +{ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + + CM_UINT32 srcIP = 0u; + CM_UINT16 srcPort = 0u; + /*- 鍙傛暟闈炵┖妫鏌 */ + if ((NULL != pBuf) && (NULL != pChn)) + { + /*- 浠庢帴鏀剁嚎绋嬭幏鍙栬緭鍏ユ姤鏂 */ + rt = CM_MQ_Read(&s_CFM_RxOutnetHeart.MsgQ, s_CFM_UDP_Cache, &len); + /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ + if ((ENUM_CM_TRUE == rt) && (len > 6u)) + { + /*- 璇诲彇婧怚P鍜岀鍙 */ + srcIP = CM_LongFromChar(s_CFM_UDP_Cache); + srcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); + len -= 6u; + /*- 鏄惁鏉ヨ嚜绾㈢綉CC */ + if ((srcIP == inet_addr(g_PFM_Cfg.CC_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉绾㈢綉 */ + *pChn = ENUM_OUTNET_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_1); + } + /*- 鏄惁鏉ヨ嚜钃濈綉CC */ + else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉钃濈綉 */ + *pChn = ENUM_OUTNET_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_2); + } /*- 鏄惁鏉ヨ嚜绾㈢綉SEB */ - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉绾㈢綉SEB */ - *pChn = ENUM_OUTNET_EXTEND_RED; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_3); - } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉绾㈢綉SEB */ + *pChn = ENUM_OUTNET_EXTEND_RED; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_3); + } /*- 鏄惁鏉ヨ嚜钃濈綉SEB */ - else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) - { - /*- 鏉ヨ嚜澶栫綉钃濈綉SEB */ - *pChn = ENUM_OUTNET_EXTEND_BLUE; - rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_4); - } - else - { - /*- 寮傚父锛屽畷鏈*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETHEART_RECVLENERO, 3, \ - sizeof(CM_UINT32),srcIP, - sizeof(CM_UINT16),srcPort, - sizeof(CM_UINT16),len); - MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_5); - } - } - else - { - /*- 鎺ユ敹闀垮害涓0 */ - len = 0u; - } + else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) + { + /*- 鏉ヨ嚜澶栫綉钃濈綉SEB */ + *pChn = ENUM_OUTNET_EXTEND_BLUE; + rt = CM_Memcpy((void *)pBuf, (CM_SIZE_T)BufSize, (void *)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_4); + } + else + { + /*- 寮傚父锛屽畷鏈*/ + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_OUTNETHEART_RECVLENERO, 3, + sizeof(CM_UINT32), srcIP, + sizeof(CM_UINT16), srcPort, + sizeof(CM_UINT16), len); + MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_5); + } + } + else + { + /*- 鎺ユ敹闀垮害涓0 */ + len = 0u; + } } else { /*- 绌烘寚閽堟棤澶勭悊*/ } - /*- 杩斿洖鎺ユ敹闀垮害 */ - return len; + /*- 杩斿洖鎺ユ敹闀垮害 */ + return len; } /** -* @brief 澶栫綉蹇冭烦鏁版嵁鍙戦 -* @param pBuf 鍙戦佹姤鏂囨寚閽 -* @param Len 鍙戦佹姤鏂囬暱搴 -* @param Chn 澶栫綉閫氶亾绫诲瀷 -* @return 鍙戦佺粨鏋 -* - ENUM_CM_TRUE 鎴愬姛 -* - ENUM_CM_FALSE 澶辫触 -*/ -ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) + * @brief 澶栫綉蹇冭烦鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ +ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /*- 鍙傛暟闈炵┖妫鏌 */ - if(NULL != pBuf) + if (NULL != pBuf) { - /*- 鏄惁鏄缃戠孩缃戦氶亾 */ - if (ENUM_OUTNET_RED == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP),g_PFM_Cfg.CC_R_Heart_Port); - } - /*- 鏄惁鏄缃戣摑缃戦氶亾 */ - else if (ENUM_OUTNET_BLUE == Chn) - { - /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_Heart_Port); - } + /*- 鏄惁鏄缃戠孩缃戦氶亾 */ + if (ENUM_OUTNET_RED == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰绾㈢綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.CC_R_IP), g_PFM_Cfg.CC_R_Heart_Port); + } + /*- 鏄惁鏄缃戣摑缃戦氶亾 */ + else if (ENUM_OUTNET_BLUE == Chn) + { + /*- UDP鏂瑰紡浠ュ缃戞暟鎹氶亾鍙戦佺粰钃濈綉CC */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.CC_B_IP), g_PFM_Cfg.CC_B_Heart_Port); + } /*- 鏄惁鏄缃戞墿灞曠孩缃戦氶亾 */ - else if (ENUM_OUTNET_EXTEND_RED == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_Heart_Port); - } + else if (ENUM_OUTNET_EXTEND_RED == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_R_IP), g_PFM_Cfg.CC_R_Heart_Port); + } /*- 鏄惁鏄缃戞墿灞曡摑缃戦氶亾 */ - else if (ENUM_OUTNET_EXTEND_BLUE == Chn) - { - rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_Heart_Port); - } - else - { - /*- 寮傚父锛屽畷鏈 */ - CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_36, TSCP_DARK_ASSERT_1); - } + else if (ENUM_OUTNET_EXTEND_BLUE == Chn) + { + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_OutnetHeart, pBuf, Len, inet_addr(g_PFM_Cfg.EXTEND_B_IP), g_PFM_Cfg.CC_B_Heart_Port); + } + else + { + /*- 寮傚父锛屽畷鏈 */ + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_36, TSCP_DARK_ASSERT_1); + } } else { /*- 绌烘寚閽堟棤澶勭悊*/ (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1)); } - /*- 杩斿洖鍙戦佺粨鏋 */ - return rt; + /*- 杩斿洖鍙戦佺粨鏋 */ + return rt; } - static CM_THREAD_FUNC_T t_ClearArpThread(void) { static STRU_HARDWARE_BOOT_COM_T lastComRecord; CM_UINT32 cycle = DFM_GetBirthCount(); + CM_UINT8 cmdBuf[100] = {0}; #if QNX - void* pmask = NULL; - /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ - pmask = (void*)(0x01u|0x02u); - (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); + void *pmask = NULL; + /*- 鏈嚎绋嬮攣瀹氬湪 A53 core 1 */ + pmask = (void *)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); #endif - while(1) + while (1) { cycle = DFM_GetBirthCount(); - if((cycle > (g_Hardware_boot_com_state.CCU_A_Count + 100u))&&(lastComRecord.CCU_A_Count != g_Hardware_boot_com_state.CCU_A_Count)) + if ((cycle > (g_Hardware_boot_com_state.CCU_A_Count + 100u)) && (lastComRecord.CCU_A_Count != g_Hardware_boot_com_state.CCU_A_Count)) { lastComRecord.CCU_A_Count = g_Hardware_boot_com_state.CCU_A_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.60"); - } - else - { - (void)system("arp -d 192.168.2.60"); - } - MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_A_Count=%d,lastComRecord.CCU_A_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_A_Count,lastComRecord.CCU_A_Count); + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_R_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); + MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_A_Count=%d,lastComRecord.CCU_A_Count=%d\n", cycle, g_Hardware_boot_com_state.CCU_A_Count, lastComRecord.CCU_A_Count); } else { /* 鏃犲鐞 */ } - if((cycle > (g_Hardware_boot_com_state.CCU_B_Count + 100u))&&(lastComRecord.CCU_B_Count != g_Hardware_boot_com_state.CCU_B_Count)) + if ((cycle > (g_Hardware_boot_com_state.CCU_B_Count + 100u)) && (lastComRecord.CCU_B_Count != g_Hardware_boot_com_state.CCU_B_Count)) { lastComRecord.CCU_B_Count = g_Hardware_boot_com_state.CCU_B_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.61"); - } - else - { - (void)system("arp -d 192.168.2.61"); - } - MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_B_Count=%d,lastComRecord.CCU_B_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_B_Count,lastComRecord.CCU_B_Count); + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_B_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); + MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_B_Count=%d,lastComRecord.CCU_B_Count=%d\n", cycle, g_Hardware_boot_com_state.CCU_B_Count, lastComRecord.CCU_B_Count); } else { /* 鏃犲鐞 */ } - if(NULL == p_Serial_IN_VOBC_Func) + if (NULL == p_Serial_IN_VOBC_Func) { /* 鏃犲鐞 */ } else { - if((cycle > (g_Hardware_boot_com_state.SEB_A_Count + 100u))&&(lastComRecord.SEB_A_Count != g_Hardware_boot_com_state.SEB_A_Count)) + if ((cycle > (g_Hardware_boot_com_state.SEB_A_Count + 100u)) && (lastComRecord.SEB_A_Count != g_Hardware_boot_com_state.SEB_A_Count)) { lastComRecord.SEB_A_Count = g_Hardware_boot_com_state.SEB_A_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.70"); - } - else - { - (void)system("arp -d 192.168.2.70"); - } - MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_A_Count=%d,lastComRecord.SEB_A_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_A_Count,lastComRecord.SEB_A_Count); + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_R_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); + MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_A_Count=%d,lastComRecord.SEB_A_Count=%d\n", cycle, g_Hardware_boot_com_state.SEB_A_Count, lastComRecord.SEB_A_Count); } else { /* 鏃犲鐞 */ } - if((cycle > (g_Hardware_boot_com_state.SEB_B_Count + 100u))&&(lastComRecord.SEB_B_Count != g_Hardware_boot_com_state.SEB_B_Count)) + if ((cycle > (g_Hardware_boot_com_state.SEB_B_Count + 100u)) && (lastComRecord.SEB_B_Count != g_Hardware_boot_com_state.SEB_B_Count)) { lastComRecord.SEB_B_Count = g_Hardware_boot_com_state.SEB_B_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.71"); - } - else - { - (void)system("arp -d 192.168.2.71"); - } - MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_B_Count=%d,lastComRecord.SEB_B_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_B_Count,lastComRecord.SEB_B_Count); + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_B_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); + MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_B_Count=%d,lastComRecord.SEB_B_Count=%d\n", cycle, g_Hardware_boot_com_state.SEB_B_Count, lastComRecord.SEB_B_Count); } else { @@ -4133,6 +4104,27 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) return NULL; } +ENUM_CM_RETURN CFM_LogQ_isEmpty(void) +{ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT32 len1 = 0u, len2 = 0u; + len1 = CM_QueueStatus(&s_Log_CtrlQ.MsgQ); + len2 = CM_MQ_Get_Msg_Num(&s_CFM_Send_LogStr.MsgQ); + if (0u == len1 && 0u == len2) + { + ret = ENUM_CM_TRUE; + } + else + { + } + return ret; +} +void CFM_AssertRecved(void) +{ + CM_INT32 assertMsgNum = 0; + assertMsgNum = CM_MQ_Get_Msg_Num(&s_CFM_Rx2oo2_Assert.MsgQ); + CM_ASSERT((0u == assertMsgNum), NET_MODE, DARK_FAULT_CODE_FUN_ORDER_41, TSCP_DARK_ASSERT_1); +} /* MAC灞傦細14瀛楄妭 diff --git a/TSCP/src/MSCP/CFM/CFM_Net.h b/TSCP/src/MSCP/CFM/CFM_Net.h index 72b6b64..097b340 100644 --- a/TSCP/src/MSCP/CFM/CFM_Net.h +++ b/TSCP/src/MSCP/CFM/CFM_Net.h @@ -1,18 +1,18 @@ 锘/** -* @file CFM_Net.h -* @brief Communication Function Module: 缃戠粶閫氫俊鍔熻兘 -* @details -* 2oo2銆2x2銆佸唴缃戙佸缃戙佹牎鏃躲佸悓姝ョ瓑鐨勪互澶綉閫氫俊瀹炵幇 -* @author GT-BU -* @date 2021.02.20 -* @version V1.0 -* @copyright TCT -* @par 淇敼鏃ュ織 -* -*
Date Version Author Description -*
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 -*
-*/ + * @file CFM_Net.h + * @brief Communication Function Module: 缃戠粶閫氫俊鍔熻兘 + * @details + * 2oo2銆2x2銆佸唴缃戙佸缃戙佹牎鏃躲佸悓姝ョ瓑鐨勪互澶綉閫氫俊瀹炵幇 + * @author GT-BU + * @date 2021.02.20 + * @version V1.0 + * @copyright TCT + * @par 淇敼鏃ュ織 + * + *
Date Version Author Description + *
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 + *
+ */ #ifndef CFM_NET_H #define CFM_NET_H @@ -30,20 +30,19 @@ extern "C" #endif /*娉ㄦ剰UDP鍗忚鏍堝崟涓猆DP鍖呮渶澶65535瀛楄妭锛1024*64-1锛*/ -#define NET_UDP_2OO2_BUF_SIZE ((1024*64)-(1)) /*2OO2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ -#define NET_UDP_MAINTENANCE_BUF_SIZE ((1024*5)-(1)) /*2OO2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢淮鎶ゆā寮忎笅鐢ㄤ簬鎺ユ敹浠g爜锛*/ -#define NET_UDP_2X2_BUF_SIZE ((1024*64)-(1)) /*2X2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ -#define NET_UDP_BUF_SIZE ((1024*64)-(1)) /*UDPsocket娑堟伅闃熷垪缂撳啿鍖猴紙鐢ㄤ簬鎺ユ敹浠g爜锛*/ -#define NET_UDP_BUF_DOUBLESIZE ((1024*256) - (1)) /*UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ +#define NET_UDP_2OO2_BUF_SIZE ((1024 * 64) - (1)) /*2OO2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ +#define NET_UDP_MAINTENANCE_BUF_SIZE ((1024 * 5) - (1)) /*2OO2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢淮鎶ゆā寮忎笅鐢ㄤ簬鎺ユ敹浠g爜锛*/ +#define NET_UDP_2X2_BUF_SIZE ((1024 * 64) - (1)) /*2X2UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ +#define NET_UDP_BUF_SIZE ((1024 * 64) - (1)) /*UDPsocket娑堟伅闃熷垪缂撳啿鍖猴紙鐢ㄤ簬鎺ユ敹浠g爜锛*/ +#define NET_UDP_BUF_DOUBLESIZE ((1024 * 256) - (1)) /*UDP鍗忚鏍堢紦鍐插尯澶у皬锛堢敤浜庢帴鏀朵唬鐮侊級*/ -#define NET_50K_SIZE (50000u) /*瀹為檯鍏佽浣跨敤鐨勫簲鐢ㄥ抚澶у皬锛堢敤浜庡彂閫佷唬鐮侊級*/ -#define NET_20K_SIZE (20000u) /*瀹為檯鍏佽浣跨敤鐨勫簲鐢ㄥ抚澶у皬锛堢敤浜庡彂閫佷唬鐮侊級*/ +#define NET_50K_SIZE (50000u) /*瀹為檯鍏佽浣跨敤鐨勫簲鐢ㄥ抚澶у皬锛堢敤浜庡彂閫佷唬鐮侊級*/ +#define NET_20K_SIZE (20000u) /*瀹為檯鍏佽浣跨敤鐨勫簲鐢ㄥ抚澶у皬锛堢敤浜庡彂閫佷唬鐮侊級*/ #define CFM_INNET_RAW_MSG_NUM_MAX (7000u) #define CFM_OUTNET_RAW_MSG_NUM_MAX (1000u) - /*鏆楁枃绫诲瀷瀹忓畾涔*/ -#define DARK_LOG_STRING (0x55u) +#define DARK_LOG_STRING (0x55u) #define DARK_LOG_HEX (0xAAu) #define DARK_LOG_DEC (0xFFu) @@ -53,610 +52,625 @@ extern "C" ENUM_TIME_ERROR = 0, /**< 淇濈暀 */ ENUM_TIME_REQ, /**< 鏃堕挓鍚屾璇锋眰 */ ENUM_TIME_ACK /**< 鏃堕挓鍚屾搴旂瓟 */ - }ENUM_TIME_MSG_T; + } ENUM_TIME_MSG_T; typedef struct { - CM_SEM_T m_logStart; /* 鑷寮濮嬩俊鍙烽噺 */ - CM_SEM_T m_logStop; /* 鑷缁撴潫淇″彿閲 */ - CM_MUTEX_T mutex; /**< 浜掓枼淇″彿閲 */ - }STRU_LOG_CTRL_T; + CM_SEM_T m_logStart; /* 鑷寮濮嬩俊鍙烽噺 */ + CM_SEM_T m_logStop; /* 鑷缁撴潫淇″彿閲 */ + CM_MUTEX_T mutex; /**< 浜掓枼淇″彿閲 */ + } STRU_LOG_CTRL_T; /*- 鏃堕挓鍚屾鎶ユ枃绫诲瀷 */ typedef enum { - ENUM_THREAD_ERROR = 0, /**< 淇濈暀 */ - ENUM_THREAD_OutnetS_Rx = 1, /**< 澶栫綉瀹夊叏绾跨▼ */ - ENUM_THREAD_2oo2_AppRecv = 2, /**< 搴旂敤2鍙栫嚎绋 */ - ENUM_THREAD_2x2_StateRecv = 3 /**< 鐘舵2x绾跨▼ */ - }ENUM_THREAD_NUM_T; + ENUM_THREAD_ERROR = 0, /**< 淇濈暀 */ + ENUM_THREAD_OutnetS_Rx = 1, /**< 澶栫綉瀹夊叏绾跨▼ */ + ENUM_THREAD_2oo2_AppRecv = 2, /**< 搴旂敤2鍙栫嚎绋 */ + ENUM_THREAD_2x2_StateRecv = 3 /**< 鐘舵2x绾跨▼ */ + } ENUM_THREAD_NUM_T; /* 鏆楁枃鍙戦佹帶鍒跺彉閲 */ extern STRU_LOG_CTRL_T ciphertextCtrl; /** 2oo2灏忔暟鎹噺鍗曞寘閫氫俊鎺у埗 */ typedef struct { - CM_UINT32 SN; /**< 閫氫俊搴忓垪鍙 */ + CM_UINT32 SN; /**< 閫氫俊搴忓垪鍙 */ /*2鍙栧彂閫佸嚱鏁版寚閽堟敞鍐*/ - ENUM_CM_RETURN (*DataSend)(IN const CM_UINT8* , IN CM_INT32 ); + ENUM_CM_RETURN (*DataSend)(IN const CM_UINT8 *, IN CM_INT32); /*2鍙栨帴鏀跺嚱鏁版寚閽堟敞鍐*/ - CM_INT32 (*DataRecv)(OUT CM_UINT8* , IN CM_UINT32 ); - }STRU_2OO2_NET_NO_PACK_T; + CM_INT32 (*DataRecv)(OUT CM_UINT8 *, IN CM_UINT32); + } STRU_2OO2_NET_NO_PACK_T; /** 灏忔暟鎹噺鍗曞寘2oo2鎶ユ枃绫诲瀷 */ typedef enum { - ENUM_2oo2_NET_ERROR = 0, /**< 淇濈暀 */ - ENUM_2oo2_NET_DATA, /**< 鏁版嵁*/ - ENUM_2oo2_NET_ARQ, /*閲嶄紶璇锋眰*/ - ENUM_2oo2_NET_RCV_SUCCESS, /*鎺ユ敹鎴愬姛鏍囧織*/ - }ENUM_2oo2_NET_T; + ENUM_2oo2_NET_ERROR = 0, /**< 淇濈暀 */ + ENUM_2oo2_NET_DATA, /**< 鏁版嵁*/ + ENUM_2oo2_NET_ARQ, /*閲嶄紶璇锋眰*/ + ENUM_2oo2_NET_RCV_SUCCESS, /*鎺ユ敹鎴愬姛鏍囧織*/ + } ENUM_2oo2_NET_T; /*娉ㄥ唽閫忎紶绠楁硶鍑芥暟鎸囬拡鏁扮粍*/ extern RAW_ALGORITHM p_ALGORITHM_Fun[INNET_RAW_DOUBLE_PASS_NUM]; /*纭噸鍚氫俊鐘舵佺粨鏋勪綋*/ typedef struct { - CM_UINT32 SYS_Count; /*-绯荤粺鍛ㄦ湡 */ - CM_UINT32 CCU_A_Count;/*-閫氭帶A鍛ㄦ湡 */ - CM_UINT32 CCU_B_Count;/*-閫氭帶B鍛ㄦ湡 */ - CM_UINT32 SEB_A_Count;/*-涓插彛鏉緼鍛ㄦ湡 */ - CM_UINT32 SEB_B_Count;/*-涓插彛鏉緽鍛ㄦ湡 */ - }STRU_HARDWARE_BOOT_COM_T; + CM_UINT32 SYS_Count; /*-绯荤粺鍛ㄦ湡 */ + CM_UINT32 CCU_A_Count; /*-閫氭帶A鍛ㄦ湡 */ + CM_UINT32 CCU_B_Count; /*-閫氭帶B鍛ㄦ湡 */ + CM_UINT32 SEB_A_Count; /*-涓插彛鏉緼鍛ㄦ湡 */ + CM_UINT32 SEB_B_Count; /*-涓插彛鏉緽鍛ㄦ湡 */ + CM_UINT32 CCU_A_SN; /*-閫氭帶A搴忓垪鍙 */ + CM_UINT32 CCU_B_SN; /*-閫氭帶B搴忓垪鍙 */ + CM_UINT32 SEB_A_SN; /*-涓插彛鏉緼搴忓垪鍙 */ + CM_UINT32 SEB_B_SN; /*-涓插彛鏉緽搴忓垪鍙 */ + } STRU_HARDWARE_BOOT_COM_T; extern STRU_HARDWARE_BOOT_COM_T g_Hardware_boot_com_state; /** - * @brief 2oo2涓婄數鍚屾 - * @details - */ + * @brief 2oo2涓婄數鍚屾 + * @details + */ ENUM_CM_RETURN CFM_2oo2_InitSync(void); /** - * @brief 鍙戣捣涓娆2oo2鏃堕挓鍚屾 - * @details - * 鍙戦佷竴涓2oo2鏃堕挓鍚屾璇锋眰鎶ユ枃 - * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 - * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 - * @see :: CFM_2oo2_TimeGet - * @see :: t_TimeThread - */ + * @brief 鍙戣捣涓娆2oo2鏃堕挓鍚屾 + * @details + * 鍙戦佷竴涓2oo2鏃堕挓鍚屾璇锋眰鎶ユ枃 + * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 + * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 + * @see :: CFM_2oo2_TimeGet + * @see :: t_TimeThread + */ void CFM_2oo2_TimeReq(void); /** - * @brief 璇诲彇鏃堕挓鍚屾缁撴灉 - * @param pDelay 寤惰繜鏃堕棿 - * @param pOffset 鍋忕Щ鏃堕棿 - * @return 鎵ц缁撴灉 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset); + * @brief 璇诲彇鏃堕挓鍚屾缁撴灉 + * @param pDelay 寤惰繜鏃堕棿 + * @param pOffset 鍋忕Щ鏃堕棿 + * @return 鎵ц缁撴灉 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64 *pDelay, OUT CM_INT64 *pOffset); /** - * @brief 2oo2鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_DataSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2oo2鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2oo2鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ - * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_DataSend_App(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_DataSend_App(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2oo2鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2oo2鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_2xStateSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2oo2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_2xStateSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2oo2鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2oo2鏁版嵁鍙戦(缁存姢妯″紡) - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_DataSend_Crash(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2oo2鏁版嵁鍙戦(缁存姢妯″紡) + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_DataSend_Crash(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2oo2鏁版嵁鎺ユ敹(缁存姢妯″紡) - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2鏁版嵁鎺ユ敹(缁存姢妯″紡) + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2oo2鏁版嵁鍙戦(瀹曟満鐘舵) - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2oo2_DataSend_ASSERT(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2oo2鏁版嵁鍙戦(瀹曟満鐘舵) + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2oo2_DataSend_ASSERT(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2oo2鏁版嵁鎺ユ敹(瀹曟満鐘舵) - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2鏁版嵁鎺ユ敹(瀹曟満鐘舵) + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @breif 鍏ㄥ弻宸ヤ笉鍒嗗寘2oo2鏁版嵁浜ゆ崲锛屾敮鎸侀噸浼 - * @param pMyData 鏈満鏁版嵁鎸囬拡 - * @param DataLen 鏈墽鏁版嵁闀垮害 - * @param pPeerData 閭绘満鏁版嵁鎸囬拡 - * @param DataSize 閭绘満鏁版嵁缂撳啿鍖哄ぇ灏 - * @param msgTye 2oo2浜ゆ崲鏁版嵁绫诲瀷 - * @return 鏀跺埌鐨勯偦鏈烘暟鎹暱搴 - */ - CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const CM_UINT8 * pMyData, IN CM_INT32 DataLen, OUT CM_UINT8 * pPeerData, IN CM_UINT32 DataSize); + * @breif 鍏ㄥ弻宸ヤ笉鍒嗗寘2oo2鏁版嵁浜ゆ崲锛屾敮鎸侀噸浼 + * @param pMyData 鏈満鏁版嵁鎸囬拡 + * @param DataLen 鏈墽鏁版嵁闀垮害 + * @param pPeerData 閭绘満鏁版嵁鎸囬拡 + * @param DataSize 閭绘満鏁版嵁缂撳啿鍖哄ぇ灏 + * @param msgTye 2oo2浜ゆ崲鏁版嵁绫诲瀷 + * @return 鏀跺埌鐨勯偦鏈烘暟鎹暱搴 + */ + CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl, IN const CM_UINT8 *pMyData, IN CM_INT32 DataLen, OUT CM_UINT8 *pPeerData, IN CM_UINT32 DataSize); /** - * @brief 2x2鐘舵佹暟鎹彂閫 - * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ - * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2x2_StateChange_Send(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2x2鐘舵佹暟鎹彂閫 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2x2_StateChange_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 閫氱敤2oo2鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2x2_StateChange_Recv(CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 閫氱敤2oo2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 1~0xFFFFFFFF 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2x2_StateChange_Recv(CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 鍙戣捣涓娆2x2鏃堕挓鍚屾 - * @details - * 鍙戦佷竴涓2x2鏃堕挓鍚屾璇锋眰鎶ユ枃 - * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 - * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 - * @see :: CFM_2x2_TimeGet - * @see :: t_TimeThread - */ + * @brief 鍙戣捣涓娆2x2鏃堕挓鍚屾 + * @details + * 鍙戦佷竴涓2x2鏃堕挓鍚屾璇锋眰鎶ユ枃 + * 鐢卞弻鏂圭殑鏃堕挓鍚屾绾跨▼瀹屾垚涓娆TP鏍℃椂鎿嶄綔 + * 鎿嶄綔瀹屾垚鍚庢湰鏂圭殑鏃堕挓鍚屾绾跨▼浼氳褰曞埌寤惰繜鏃堕棿鍜屽亸绉绘椂闂 + * @see :: CFM_2x2_TimeGet + * @see :: t_TimeThread + */ void CFM_2x2_TimeReq(void); /** - * @brief 璇诲彇2x2鏃堕挓鍚屾缁撴灉 - * @param pDelay 寤惰繜鏃堕棿 - * @param pOffset 鍋忕Щ鏃堕棿 - * @return 鎵ц缁撴灉 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset); + * @brief 璇诲彇2x2鏃堕挓鍚屾缁撴灉 + * @param pDelay 寤惰繜鏃堕棿 + * @param pOffset 鍋忕Щ鏃堕棿 + * @return 鎵ц缁撴灉 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64 *pDelay, OUT CM_INT64 *pOffset); /** - * @brief 2x2鍚屾鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2x2_SyncSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2x2鍚屾鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2x2_SyncSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2x2鍚屾鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param bufSize 鎺ユ敹缂撳啿鍖哄ぇ灏 - * @param pRxTick 鎺ユ敹鏃跺埢 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2x2_SyncRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 bufSize, OUT CM_UINT64* pRxTick); + * @brief 2x2鍚屾鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param bufSize 鎺ユ敹缂撳啿鍖哄ぇ灏 + * @param pRxTick 鎺ユ敹鏃跺埢 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2x2_SyncRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 bufSize, OUT CM_UINT64 *pRxTick); /** - * @brief 2x2鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param BufLen 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2x2_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + * @brief 2x2鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param BufLen 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2x2_DataSend(IN const CM_UINT8 *pBuf, IN CM_INT32 BufLen); /** - * @brief 2x2涓插彛鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥(闈炵┖) - * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥(0~0xffffffff) - * @param msgType 鍙戦佹姤鏂囩被鍨 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_NULL 鍙戦佹潯浠朵笉婊¤冻 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_2x2_UartDataSend(IN CM_UINT8* pBuf, IN CM_UINT16 BufLen); + * @brief 2x2涓插彛鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 鍙栧艰寖鍥(闈炵┖) + * @param BufLen 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥(0~0xffffffff) + * @param msgType 鍙戦佹姤鏂囩被鍨 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_NULL 鍙戦佹潯浠朵笉婊¤冻 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_2x2_UartDataSend(IN CM_UINT8 *pBuf, IN CM_UINT16 BufLen); /** - * @brief 2x2鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2x2鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2x2涓插彛鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡(闈炵┖) - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏(0~0xffffffff) - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2x2涓插彛鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡(闈炵┖) + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏(0~0xffffffff) + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /* @brief 鍐呯綉閫忎紶TCP閫氫俊鏁版嵁鍙戦 - * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param DstIP 鐩殑IP - * @param DstPort 鐩殑绔彛 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_InnetRaw_Tcp_Send(IN CM_UINT16 Tcpid, IN const CM_UINT8* Buf, IN CM_INT32 Len); + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_InnetRaw_Tcp_Send(IN CM_UINT16 Tcpid, IN const CM_UINT8 *Buf, IN CM_INT32 Len); /*璇绘暟鎹椂绂佹娓呯┖锛堝嵆浣垮啓婊★級*/ void CFM_InnetRawClear_Mutex_Lock(IN CM_INT32 ch); void CFM_InnetRawClear_Mutex_UnLock(IN CM_INT32 ch); /** - * @brief 鑾峰彇鎸囧畾鍐呯綉閫忎紶閫氶亾鐨勫叏閮ㄦ姤鏂囩壒寰佷俊鎭紙鏃堕棿鎴冲拰搴忓垪鍙凤級 - * @param ch 閫氶亾鍙 - * @param info 鐗瑰緛淇℃伅 - * @param infoSize 鐗瑰緛淇℃伅鏁扮粍鐨勯暱搴 - * @return 鐗瑰緛淇℃伅闀垮害 - */ - CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 infoSize,OUT CM_UINT8 *CompareEnable); + * @brief 鑾峰彇鎸囧畾鍐呯綉閫忎紶閫氶亾鐨勫叏閮ㄦ姤鏂囩壒寰佷俊鎭紙鏃堕棿鎴冲拰搴忓垪鍙凤級 + * @param ch 閫氶亾鍙 + * @param info 鐗瑰緛淇℃伅 + * @param infoSize 鐗瑰緛淇℃伅鏁扮粍鐨勯暱搴 + * @return 鐗瑰緛淇℃伅闀垮害 + */ + CM_UINT32 CFM_InnetRaw_GetInfo(IN CM_INT32 ch, OUT CM_UINT8 info[], IN CM_UINT32 infoSize, OUT CM_UINT8 *CompareEnable); /** - * @brief 鑾峰彇涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 - * @param ch 閫氶亾鍙 - * @param bufFirst 甯уご - * @param bufFirstLen 甯уご闀垮害 - * @param bufSecond 鏈夋晥鏁版嵁 - * @param bufSecondLen 鏈夋晥鏁版嵁闀垮害 - * @return 鏃 - * @details - */ + * @brief 鑾峰彇涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 + * @param ch 閫氶亾鍙 + * @param bufFirst 甯уご + * @param bufFirstLen 甯уご闀垮害 + * @param bufSecond 鏈夋晥鏁版嵁 + * @param bufSecondLen 鏈夋晥鏁版嵁闀垮害 + * @return 鏃 + * @details + */ ENUM_CM_RETURN CFM_InnetRaw_Rx_MsgInfoQueue(IN CM_INT32 ch, OUT CM_UINT8 bufFirst[], IN CM_UINT32 bufFirstLen, - OUT CM_UINT8 *bufSecond, IN CM_UINT32 *bufSecondLen); + OUT CM_UINT8 *bufSecond, IN CM_UINT32 *bufSecondLen); /** - * @brief 娓呴櫎涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 - * @param ch 閫氶亾鍙 - * @return 鏃 - * @details - */ + * @brief 娓呴櫎涓甯у甫鏃堕棿鎴崇殑閫忎紶鏁版嵁 + * @param ch 閫氶亾鍙 + * @return 鏃 + * @details + */ void CFM_Clear_InnetRaw_Rx_Msg(IN CM_INT32 ch); /** - * @brief 鑾峰彇鎺ユ敹鍖呮暟鍜屾帴鍙楅暱搴﹀苟涓旀竻绌 - */ + * @brief 鑾峰彇鎺ユ敹鍖呮暟鍜屾帴鍙楅暱搴﹀苟涓旀竻绌 + */ void CFM_GetOSCache(void); /** - * @brief 娓呯┖澶栫綉瀹夊叏鏁版嵁闃熷垪闀垮害 - */ + * @brief 娓呯┖澶栫綉瀹夊叏鏁版嵁闃熷垪闀垮害 + */ void CFM_ClearCache(void); /*********************************缁存姢缃戠浉鍏*****************************************/ /** - * @brief 缁存姢缃戦氫俊闃熷垪鍒濆鍖 - */ + * @brief 缁存姢缃戦氫俊闃熷垪鍒濆鍖 + */ void CFM_Maintain_Queue_Init(void); /** - * @brief 缁存姢缃戦氫俊UDP鍒濆鍖 - */ + * @brief 缁存姢缃戦氫俊UDP鍒濆鍖 + */ void CFM_Maintain_Init(void); /** - * @brief 鏆楁枃鏃ュ織缁勫寘鍙戦佸嚱鏁 - * @param 鏃 - * @return 鏃 - * @details - */ + * @brief 鏆楁枃鏃ュ織缁勫寘鍙戦佸嚱鏁 + * @param 鏃 + * @return 鏃 + * @details + */ void CFM_LogCiphertextSend(void); /** - * @brief 骞冲彴鏄庢枃鏃ュ織鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_BaseLog_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len); + * @brief 骞冲彴鏄庢枃鏃ュ織鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_BaseLog_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len); /** - * @brief 搴旂敤鏃ュ織鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_AppLog_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len); + * @brief 搴旂敤鏃ュ織鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_AppLog_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len); /** - * @brief 骞冲彴鏃ュ織淇濆瓨鏈湴鏂囦欢 - * @param FILE * fp_crash 鏂囦欢鎸囬拡 - * @return 鏃 - */ - void CFM_BaseLog_SaveLocal(FILE * fp_crash); + * @brief 骞冲彴鏃ュ織淇濆瓨鏈湴鏂囦欢 + * @param FILE * fp_crash 鏂囦欢鎸囬拡 + * @return 鏃 + */ + void CFM_BaseLog_SaveLocal(FILE *fp_crash); /** - * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織瀛樺偍 - * @param infoType 鏁版嵁绫诲瀷 - * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 - * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 - * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 - * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff - * @param infoLen 鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffff - * @param info 鏁版嵁/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鎸囬拡 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ + * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織瀛樺偍 + * @param infoType 鏁版嵁绫诲瀷 + * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 + * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 + * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 + * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff + * @param infoLen 鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffff + * @param info 鏁版嵁/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鎸囬拡 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ ENUM_CM_RETURN CFM_DarkLog_Storage(IN const CM_UINT8 infoType, IN const CM_UINT16 code, IN const CM_UINT32 infoLen, IN const void *info); /** - * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織澶氬彉閲忓瓨鍌 - * @param infoType 鏁版嵁绫诲瀷 - * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 - * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 - * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 - * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff - * @param infoCut 鏁版嵁涓暟 鍙栧艰寖鍥达細0~0xff - * @param ... 鍙彉鍙傛暟/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鏁版嵁锛屼絾鏄渶瑕佷笌sizeof()鎴愬浣跨敤銆 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ + * @brief 搴旂敤/骞冲彴鏆楁枃鏃ュ織澶氬彉閲忓瓨鍌 + * @param infoType 鏁版嵁绫诲瀷 + * 鍙栧艰寖鍥达細0x55锛歩nfo涓哄瓧绗︿覆鏁版嵁鏂瑰紡 + * 0xAA锛歩nfo涓哄崄鍏繘鍒舵暟鎹柟寮 + * 0xFF锛歩nfo涓哄崄杩涘埗鏁版嵁鏂瑰紡 + * @param code 淇℃伅缂栫爜/淇℃伅绫诲瀷 鍙栧艰寖鍥达細0~0xffff + * @param infoCut 鏁版嵁涓暟 鍙栧艰寖鍥达細0~0xff + * @param ... 鍙彉鍙傛暟/淇℃伅 鍙栧艰寖鍥达細浠绘剰绫诲瀷鏁版嵁锛屼絾鏄渶瑕佷笌sizeof()鎴愬浣跨敤銆 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ ENUM_CM_RETURN CFM_DarkLog_Multiple(IN const CM_UINT8 infoType, IN const CM_UINT16 code, CM_UINT8 infoCut, ...); /*********************************绾跨▼閫氱敤妯″潡*****************************************/ /** - * @brief 2鍙栥佽繙绋嬮儴缃查氫俊鍒濆鍖 - */ + * @brief 2鍙栥佽繙绋嬮儴缃查氫俊鍒濆鍖 + */ void CFM_UpdateAnd2oo2_Net_Init(void); /** - * @brief 缃戠粶閫氫俊妯″潡鍒濆鍖 - */ + * @brief 缃戠粶閫氫俊妯″潡鍒濆鍖 + */ void CFM_Net_Init(void); /** - * @brief 閰嶇疆缃戝崱ip - */ + * @brief 閰嶇疆缃戝崱ip + */ void CFM_NetworkCard_Init(void); /** - * @brief 娓呯┖鎺ユ敹缂撳啿鍖 - */ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_Net2XFlush(void); /** - * @brief 娓呯┖鎺ユ敹缂撳啿鍖 - */ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_Net2X_State_Flush(void); /** - * @brief 娓呯┖鎺ユ敹缂撳啿鍖 - */ + * @brief 娓呯┖鎺ユ敹缂撳啿鍖 + */ void CFM_NetFlush(void); /** - * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pSrcIP 婧怚P - * @param pSrcPort 婧愮鍙 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_InnetSafe_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort); + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_InnetSafe_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort); /** - * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pSrcIP 婧怚P - * @param pSrcPort 婧愮鍙 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_InnetSafeRm_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort); + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_InnetSafeRm_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort); /** - * @brief 鍐呯綉瀹夊叏杩滅▼閮ㄧ讲閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pSrcIP 婧怚P - * @param pSrcPort 婧愮鍙 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_InnetRemoteUpdate_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort); + * @brief 鍐呯綉瀹夊叏杩滅▼閮ㄧ讲閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufSize 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_InnetRemoteUpdate_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort); /** - * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param DstIP 鐩殑IP - * @param DstPort 鐩殑绔彛 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_InnetSafe_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); + * @brief 鍐呯綉瀹夊叏閫氫俊鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_InnetSafe_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); /** - * @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param DstIP 鐩殑IP - * @param DstPort 鐩殑绔彛 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_InnetRemoteUpdate_Send(IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); + * @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏閫氫俊鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_InnetRemoteUpdate_Send(IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); /** - * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 - * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pSrcIP 婧怚P - * @param pSrcPort 婧愮鍙 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0 鎺ユ敹澶辫触 - */ - CM_UINT16 CFM_InnetRaw_Recv(IN CM_INT32 ch, OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32* pSrcIP, OUT CM_UINT16* pSrcPort); + * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pSrcIP 婧怚P + * @param pSrcPort 婧愮鍙 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0 鎺ユ敹澶辫触 + */ + CM_UINT16 CFM_InnetRaw_Recv(IN CM_INT32 ch, OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT CM_UINT32 *pSrcIP, OUT CM_UINT16 *pSrcPort); /** - * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鍙戦 - * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param DstIP 鐩殑IP - * @param DstPort 鐩殑绔彛 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_InnetRaw_Send(IN CM_INT32 ch, IN const CM_UINT8* Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); + * @brief 鍐呯綉閫忎紶閫氫俊鏁版嵁鍙戦 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param DstIP 鐩殑IP + * @param DstPort 鐩殑绔彛 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_InnetRaw_Send(IN CM_INT32 ch, IN const CM_UINT8 *Buf, IN CM_INT32 Len, IN CM_UINT32 DstIP, IN CM_UINT16 DstPort); /** - * @brief 澶栫綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pChn 澶栫綉閫氶亾绫诲瀷 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_INT32 CFM_OutnetSafe_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn); + * @brief 澶栫綉瀹夊叏閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_INT32 CFM_OutnetSafe_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn); /** - * @brief 澶栫綉瀹夊叏鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param Chn 澶栫綉閫氶亾绫诲瀷 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_OutnetSafe_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); + * @brief 澶栫綉瀹夊叏鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_OutnetSafe_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); /** - * @brief 澶栫綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pChn 澶栫綉閫氶亾绫诲瀷 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_UINT16 CFM_OutnetRaw_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn); + * @brief 澶栫綉閫忎紶閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_UINT16 CFM_OutnetRaw_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn); /** - * @brief 澶栫綉閫忎紶鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param Chn 澶栫綉閫氶亾绫诲瀷 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_OutnetRaw_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); + * @brief 澶栫綉閫忎紶鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_OutnetRaw_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); /** - * @brief 澶栫綉蹇冭烦閫氫俊鏁版嵁鎺ユ敹 - * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 - * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 - * @param pChn 澶栫綉閫氶亾绫诲瀷 - * @return 鎺ユ敹鎶ユ枃闀垮害 - * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 - * - 0鎴栬礋鏁 鎺ユ敹澶辫触 - */ - CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T* pChn); + * @brief 澶栫綉蹇冭烦閫氫俊鏁版嵁鎺ユ敹 + * @param pBuf 鎺ユ敹鎶ユ枃鎸囬拡 + * @param BufLen 鎺ユ敹鎶ユ枃缂撳啿鍖哄ぇ灏 + * @param pChn 澶栫綉閫氶亾绫诲瀷 + * @return 鎺ユ敹鎶ユ枃闀垮害 + * - 姝f暣鏁 鎺ユ敹鎶ユ枃闀垮害 + * - 0鎴栬礋鏁 鎺ユ敹澶辫触 + */ + CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize, OUT ENUM_OUTNET_CHN_T *pChn); /** - * @brief 澶栫綉蹇冭烦鏁版嵁鍙戦 - * @param pBuf 鍙戦佹姤鏂囨寚閽 - * @param Len 鍙戦佹姤鏂囬暱搴 - * @param Chn 澶栫綉閫氶亾绫诲瀷 - * @return 鍙戦佺粨鏋 - * - ENUM_CM_TRUE 鎴愬姛 - * - ENUM_CM_FALSE 澶辫触 - */ - ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); + * @brief 澶栫綉蹇冭烦鏁版嵁鍙戦 + * @param pBuf 鍙戦佹姤鏂囨寚閽 + * @param Len 鍙戦佹姤鏂囬暱搴 + * @param Chn 澶栫綉閫氶亾绫诲瀷 + * @return 鍙戦佺粨鏋 + * - ENUM_CM_TRUE 鎴愬姛 + * - ENUM_CM_FALSE 澶辫触 + */ + ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8 *pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); + /** + * @brief 鑾峰彇鏄庢枃鍜屾殫鏂囨棩蹇楅槦鍒楁槸鍚﹀潎涓虹┖ + * @return 鑾峰彇缁撴灉 + * - ENUM_CM_TRUE 鍧囦负绌 + * - ENUM_CM_FALSE 涓嶅潎涓虹┖ + */ + ENUM_CM_RETURN CFM_LogQ_isEmpty(void); + /** + * @brief 鍒ゆ柇鏀跺埌瀹曟満鍚庣殑2鍙栵紝绔嬪嵆鎵ц瀹曟満鎿嶄綔 + */ + void CFM_AssertRecved(void); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/CFM/CFM_Raw.c b/TSCP/src/MSCP/CFM/CFM_Raw.c index 82ed3dd..8174ee2 100644 --- a/TSCP/src/MSCP/CFM/CFM_Raw.c +++ b/TSCP/src/MSCP/CFM/CFM_Raw.c @@ -1,18 +1,18 @@ 锘/** -* @file CFM_Raw.c -* @brief Communication Function Module: 缃戠粶閫忎紶閫氫俊 -* @details -* 鍐呯綉閫忎紶閫氫俊鐨勫疄鐜 -* @author GT-BU -* @date 2021.03.01 -* @version V1.0 -* @copyright TCT -* @par 淇敼鏃ュ織 -* -*
Date Version Author Description -*
2021.03.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 -*
-*/ + * @file CFM_Raw.c + * @brief Communication Function Module: 缃戠粶閫忎紶閫氫俊 + * @details + * 鍐呯綉閫忎紶閫氫俊鐨勫疄鐜 + * @author GT-BU + * @date 2021.03.01 + * @version V1.0 + * @copyright TCT + * @par 淇敼鏃ュ織 + * + *
Date Version Author Description + *
2021.03.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 + *
+ */ #include "CFM_Raw.h" #include "CM_Convert.h" #include "CFM_Net.h" @@ -24,45 +24,47 @@ #include "PFM_Cfg.h" #include "PFM_RemoteUpdate.h" #include "CM_CRC32.h" +#include "PFM_InputOutput.h" /** -* @brief 鍐呯綉閫忎紶鏁版嵁鎺ユ敹 -* @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 -* @param Buf 鎺ユ敹鍐呯綉閫忎紶鏁版嵁鎸囬拡 -* @param bufSize 鎺ユ敹鍐呯綉閫忎紶鏁版嵁缂撳啿鍖哄ぇ灏 -* @return 鏀跺埌鐨勫唴缃戦忎紶鏁版嵁甯ч暱搴 -* @details -* 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉閫忎紶杈撳叆鏁版嵁 -* 鎸夊唴缃戦忎紶鎺ユ敹甯ф墦鍖呭悗浜ょ粰骞冲彴灞 -*/ + * @brief 鍐呯綉閫忎紶鏁版嵁鎺ユ敹 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param Buf 鎺ユ敹鍐呯綉閫忎紶鏁版嵁鎸囬拡 + * @param bufSize 鎺ユ敹鍐呯綉閫忎紶鏁版嵁缂撳啿鍖哄ぇ灏 + * @return 鏀跺埌鐨勫唴缃戦忎紶鏁版嵁甯ч暱搴 + * @details + * 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉閫忎紶杈撳叆鏁版嵁 + * 鎸夊唴缃戦忎紶鎺ユ敹甯ф墦鍖呭悗浜ょ粰骞冲彴灞 + */ static CM_UINT32 s_CFM_RawInfo_len = 0u; -static CM_UINT8 s_CFM_RawInfo[CFM_INNET_RAW_MSG_NUM_MAX * 12u]; +static CM_UINT8 s_CFM_RawInfo[CFM_INNET_RAW_MSG_NUM_MAX * 12u]; static CM_UINT32 s_CFM_RawInfo_peer_len = 0u; -static CM_UINT8 s_CFM_RawInfo_peer[CFM_INNET_RAW_MSG_NUM_MAX * 12u]; +static CM_UINT8 s_CFM_RawInfo_peer[CFM_INNET_RAW_MSG_NUM_MAX * 12u]; +static void s_CCSEB_STATE_CAL(void); /** -* @brief 鍐呯綉閫忎紶鎺ユ敹锛堥氱敤妯″紡--鍘熻壘寮楃憺妯″紡锛 -* @param ch 閫忎紶閫氶亾鍙 -* @buf 鎺ユ敹鏁扮粍 -* @bufSize 鎺ユ敹鏁扮粍澶у皬 -* @maininfobuf 鏈満杈呭姪淇℃伅鏁扮粍 -* @maininfolen 鏈満杈呭姪淇℃伅鏁扮粍闀垮害 -* @peerinfobuf 閭绘満杈呭姪淇℃伅鏁扮粍 -* @peerinfolen 閭绘満杈呭姪淇℃伅鏁扮粍闀垮害 -* @infobufSize -* @return 鎺ユ敹鏁版嵁闀垮害 -*/ -CM_UINT32 CFM_RxInnetRaw_COM(IN CM_INT32 ch, OUT CM_UINT8* buf, IN CM_UINT32 bufSize, - OUT CM_UINT8* maininfobuf,OUT CM_UINT32* maininfolen, - OUT CM_UINT8* peerinfobuf,OUT CM_UINT32* peerinfolen,IN CM_UINT32 infobufSize) + * @brief 鍐呯綉閫忎紶鎺ユ敹锛堥氱敤妯″紡--鍘熻壘寮楃憺妯″紡锛 + * @param ch 閫忎紶閫氶亾鍙 + * @buf 鎺ユ敹鏁扮粍 + * @bufSize 鎺ユ敹鏁扮粍澶у皬 + * @maininfobuf 鏈満杈呭姪淇℃伅鏁扮粍 + * @maininfolen 鏈満杈呭姪淇℃伅鏁扮粍闀垮害 + * @peerinfobuf 閭绘満杈呭姪淇℃伅鏁扮粍 + * @peerinfolen 閭绘満杈呭姪淇℃伅鏁扮粍闀垮害 + * @infobufSize + * @return 鎺ユ敹鏁版嵁闀垮害 + */ +CM_UINT32 CFM_RxInnetRaw_COM(IN CM_INT32 ch, OUT CM_UINT8 *buf, IN CM_UINT32 bufSize, + OUT CM_UINT8 *maininfobuf, OUT CM_UINT32 *maininfolen, + OUT CM_UINT8 *peerinfobuf, OUT CM_UINT32 *peerinfolen, IN CM_UINT32 infobufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 len = 0u; - CM_UINT8 CompareEnable = 0u; - if(RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].Port_Type_Enable) - { - /*绂佺敤閫忎紶绔彛*/ - } - else - { + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 len = 0u; + CM_UINT8 CompareEnable = 0u; + if (RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].Port_Type_Enable) + { + /*绂佺敤閫忎紶绔彛*/ + } + else + { /*- 鏄惁寮鍚2oo2鍔熻兘 */ if ((0x55u == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].INNET_2oo2_RAW) && @@ -70,9 +72,9 @@ CM_UINT32 CFM_RxInnetRaw_COM(IN CM_INT32 ch, OUT CM_UINT8* buf, IN CM_UINT32 buf { CFM_InnetRawClear_Mutex_Lock(ch); /*- 鑾峰彇鏈満鐨勫唴缃戦忎紶閫氶亾鐗瑰緛淇℃伅 */ - s_CFM_RawInfo_len = CFM_InnetRaw_GetInfo(ch, s_CFM_RawInfo, (CM_UINT32)sizeof(s_CFM_RawInfo),&CompareEnable); + s_CFM_RawInfo_len = CFM_InnetRaw_GetInfo(ch, s_CFM_RawInfo, (CM_UINT32)sizeof(s_CFM_RawInfo), &CompareEnable); /*- 灏嗙壒寰佷俊鎭繘琛2oo2浜ゆ崲 */ - if(0x55u == g_PFM_Cfg.M_2oo2_Enable) + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { s_CFM_RawInfo_peer_len = (CM_UINT32)SFM_2oo2_Exchange_Currency(s_CFM_RawInfo, (CM_INT32)s_CFM_RawInfo_len, s_CFM_RawInfo_peer, (CM_UINT32)sizeof(s_CFM_RawInfo_peer), ENUM_2oo2_RAW_INFO); } @@ -81,17 +83,17 @@ CM_UINT32 CFM_RxInnetRaw_COM(IN CM_INT32 ch, OUT CM_UINT8* buf, IN CM_UINT32 buf /*浜屽彇寮鍏虫湭鎵撳紑*/ } /*MSCP_LOG_MSG("[%d]info:%d,%d\n", ch, s_CFM_RawInfo_len, s_CFM_RawInfo_peer_len);*/ - if(1u == CompareEnable) + if (1u == CompareEnable) { /*- 瀵瑰弻鏈虹殑鐗瑰緛淇℃伅杩涜姣旇緝锛屾彁鍙2oo2姣旇緝涓鑷寸殑鍐呯綉閫忎紶鎺ユ敹鎶ユ枃*/ len = CFM_InnetRaw_Rx(ch, buf, bufSize); - MSCP_LOG_MSG("[%d]rx %u Info, %u bytes\n", ch, s_CFM_RawInfo_len/12u, len); + MSCP_LOG_MSG("[%d]rx %u Info, %u bytes\n", ch, s_CFM_RawInfo_len / 12u, len); } else { /*涓嶆瘮杈冩暟鎹紝鐩存帴璇诲彇閫忎紶鏁版嵁鍒扮紦鍐插尯*/ - len = CFM_InnetRaw_Rx_Camera(ch, buf, bufSize,maininfobuf,maininfolen,peerinfobuf,peerinfolen,infobufSize); - MSCP_LOG_MSG("[%d]rx %d Info,%u Minfo,%u Pinfo, %u bytes\n", ch, s_CFM_RawInfo_len/10u,*maininfolen,*peerinfolen, len); + len = CFM_InnetRaw_Rx_Camera(ch, buf, bufSize, maininfobuf, maininfolen, peerinfobuf, peerinfolen, infobufSize); + MSCP_LOG_MSG("[%d]rx %d Info,%u Minfo,%u Pinfo, %u bytes\n", ch, s_CFM_RawInfo_len / 10u, *maininfolen, *peerinfolen, len); } CFM_InnetRawClear_Mutex_UnLock(ch); } @@ -100,154 +102,153 @@ CM_UINT32 CFM_RxInnetRaw_COM(IN CM_INT32 ch, OUT CM_UINT8* buf, IN CM_UINT32 buf /*- 浠庡唴缃戦忎紶閫氶亾璇诲彇鎺ユ敹淇℃伅 */ len = CFM_RxInnetRaw(ch, buf, bufSize); } - - } - /*- 杩斿洖鎺ユ敹鏁版嵁闀垮害 */ - return len; + } + /*- 杩斿洖鎺ユ敹鏁版嵁闀垮害 */ + return len; } /** -* @brief 鍐呯綉閫忎紶鎺ユ敹 -* @param ch 鍐呯綉閫忎紶閫氶亾鍙 -* @param buf 鎺ユ敹鏁扮粍 -* @param bufSize 鎺ユ敹鏁扮粍澶у皬 -* @return 鎺ユ敹鏁版嵁闀垮害 -*/ + * @brief 鍐呯綉閫忎紶鎺ユ敹 + * @param ch 鍐呯綉閫忎紶閫氶亾鍙 + * @param buf 鎺ユ敹鏁扮粍 + * @param bufSize 鎺ユ敹鏁扮粍澶у皬 + * @return 鎺ユ敹鏁版嵁闀垮害 + */ CM_UINT32 CFM_RxInnetRaw(IN CM_INT32 ch, OUT CM_UINT8 *buf, IN CM_UINT32 bufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 rxLen = 0u; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ - CM_UINT16 devID = 0u; /* 璁惧ID */ - STRU_PFM_INNET_CFG_T *pCom = NULL; /*閫氫俊閰嶇疆淇℃伅*/ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 rxLen = 0u; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ + CM_UINT16 devID = 0u; /* 璁惧ID */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /*閫氫俊閰嶇疆淇℃伅*/ - CM_INT32 count = 0; + CM_INT32 count = 0; - /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ - rxLen = (CM_UINT32)CFM_InnetRaw_Recv(ch, buf + i + PFM_RAW_HEADER_SIZE, bufSize - (CM_UINT32)i - PFM_RAW_HEADER_SIZE, &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏄惁璇诲埌浜嗘暟鎹 */ - if (rxLen > 0u) - { - /*- 鑾峰彇婧怚D */ - pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); + /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ + rxLen = (CM_UINT32)CFM_InnetRaw_Recv(ch, buf + i + PFM_RAW_HEADER_SIZE, bufSize - (CM_UINT32)i - PFM_RAW_HEADER_SIZE, &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏄惁璇诲埌浜嗘暟鎹 */ + if (rxLen > 0u) + { + /*- 鑾峰彇婧怚D */ + pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); - if(NULL == pCom) - { - devID = (CM_UINT16)ch; - } - else - { - devID = pCom->InnetID; - } - - count++; + if (NULL == pCom) + { + devID = (CM_UINT16)ch; + } + else + { + devID = pCom->InnetID; + } - /* - 鍐呯綉閫忎紶甯ф牸寮忥細 - 4瀛楄妭 闀垮害锛堜笉鍚嚜韬級 - 2瀛楄妭 婧怚D - n瀛楄妭 鏁版嵁 - */ - /*- 濉叆鎺ユ敹闃熷垪 */ - CM_LongToChar((rxLen + PFM_RAW_DEVID_SIZE), buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ShortToChar(devID, buf + i + PFM_RAW_LEN_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /* i += (rxLen + 4); */ - i = i + (rxLen + PFM_RAW_HEADER_SIZE); - } - else + count++; + + /* + 鍐呯綉閫忎紶甯ф牸寮忥細 + 4瀛楄妭 闀垮害锛堜笉鍚嚜韬級 + 2瀛楄妭 婧怚D + n瀛楄妭 鏁版嵁 + */ + /*- 濉叆鎺ユ敹闃熷垪 */ + CM_LongToChar((rxLen + PFM_RAW_DEVID_SIZE), buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar(devID, buf + i + PFM_RAW_LEN_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /* i += (rxLen + 4); */ + i = i + (rxLen + PFM_RAW_HEADER_SIZE); + } + else { /*- 鏃犲鐞 */ } - } while (rxLen > 0u); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETRAW_RECVLEN, 3U, - sizeof(CM_INT32),ch, - sizeof(CM_INT32),count, - sizeof(CM_UINT32),i); - /*- @alias 璁板綍鎺ユ敹淇℃伅鏁伴噺 */ - MSCP_LOG_MSG("[%d]rx %d pkts, %d bytes\n", ch, count, i); + } while (rxLen > 0u); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETRAW_RECVLEN, 3U, + sizeof(CM_INT32), ch, + sizeof(CM_INT32), count, + sizeof(CM_UINT32), i); + /*- @alias 璁板綍鎺ユ敹淇℃伅鏁伴噺 */ + MSCP_LOG_MSG("[%d]rx %d pkts, %d bytes\n", ch, count, i); - /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ - return i; + /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ + return i; } /** -* @brief 闆疯揪鏁版嵁鐨2oo2姣旇緝鎺ユ敹 -* @param ch 閫氶亾鍙 -* @param peer_info 閭绘満鐗瑰緛淇℃伅鏁扮粍 -* @param peer_len 閭绘満鐗瑰緛淇℃伅闀垮害 -* @param buf 2oo2閫氳繃鐨勬帴鏀朵俊鎭暟缁 -* @param buf_size 鎺ユ敹淇℃伅鏁扮粍澶у皬 -* @return 2oo2閫氳繃鐨勬帴鏀朵俊鎭暱搴 -* @details -* 鏍稿績绠楁硶鎻忚堪濡備笅锛 -* while(!local.empty() && !peer.empty()) -* { -* info_local = local.front(); -* info_peer = peer.front(); -* if (info_local.ts == info_peer.ts) -* { -* if (info_local.crc == info_peer.crc) -* { -* app.push(info_local.msg); -* } -* local.pop(); -* peer.pop(); -* } -* else if (info_local.ts < info_peer.ts) -* { -* local.pop(); -* } -* else -* { -* peer.pop(); -* } -* } -*/ + * @brief 闆疯揪鏁版嵁鐨2oo2姣旇緝鎺ユ敹 + * @param ch 閫氶亾鍙 + * @param peer_info 閭绘満鐗瑰緛淇℃伅鏁扮粍 + * @param peer_len 閭绘満鐗瑰緛淇℃伅闀垮害 + * @param buf 2oo2閫氳繃鐨勬帴鏀朵俊鎭暟缁 + * @param buf_size 鎺ユ敹淇℃伅鏁扮粍澶у皬 + * @return 2oo2閫氳繃鐨勬帴鏀朵俊鎭暱搴 + * @details + * 鏍稿績绠楁硶鎻忚堪濡備笅锛 + * while(!local.empty() && !peer.empty()) + * { + * info_local = local.front(); + * info_peer = peer.front(); + * if (info_local.ts == info_peer.ts) + * { + * if (info_local.crc == info_peer.crc) + * { + * app.push(info_local.msg); + * } + * local.pop(); + * peer.pop(); + * } + * else if (info_local.ts < info_peer.ts) + * { + * local.pop(); + * } + * else + * { + * peer.pop(); + * } + * } + */ CM_UINT32 CFM_InnetRaw_Rx(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_size) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 rtnLen = 0u;/*杩斿洖鏁版嵁闀垮害*/ - CM_UINT32 local_info_len = 0u;/*鏈満淇℃伅闀垮害*/ - CM_UINT32 peer_info_len = 0u;/*涓存満淇℃伅闀垮害*/ - CM_UINT32 local_now_info_len = 0u;/*鏈満褰撳墠淇℃伅闀垮害*/ - CM_UINT32 peer_now_info_len = 0u;/*涓存満褰撳墠淇℃伅闀垮害*/ - CM_UINT64 ts_local = 0u; /* 鏈満鏃堕棿鎴 */ - CM_UINT64 ts_peer = 0u; /* 閭绘満鏃堕棿鎴 */ - CM_UINT32 crc_local = 0u;/* 鏈満CRC */ - CM_UINT32 crc_peer = 0u; /* 閭绘満CRC */ - CM_UINT8 temp_buf[16] = {0u};/* 涓存椂淇℃伅缂撳啿 */ - CM_UINT32 temp_len = 0u; /*涓存椂淇℃伅闀垮害*/ - CM_UINT32 msg_len = 0u; /*鏈湴淇℃伅闀垮害*/ - CM_UINT32 src_ip = 0u; /* 婧怚P */ - CM_UINT16 src_port = 0u; /* 婧愮鍙 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 rtnLen = 0u; /*杩斿洖鏁版嵁闀垮害*/ + CM_UINT32 local_info_len = 0u; /*鏈満淇℃伅闀垮害*/ + CM_UINT32 peer_info_len = 0u; /*涓存満淇℃伅闀垮害*/ + CM_UINT32 local_now_info_len = 0u; /*鏈満褰撳墠淇℃伅闀垮害*/ + CM_UINT32 peer_now_info_len = 0u; /*涓存満褰撳墠淇℃伅闀垮害*/ + CM_UINT64 ts_local = 0u; /* 鏈満鏃堕棿鎴 */ + CM_UINT64 ts_peer = 0u; /* 閭绘満鏃堕棿鎴 */ + CM_UINT32 crc_local = 0u; /* 鏈満CRC */ + CM_UINT32 crc_peer = 0u; /* 閭绘満CRC */ + CM_UINT8 temp_buf[16] = {0u}; /* 涓存椂淇℃伅缂撳啿 */ + CM_UINT32 temp_len = 0u; /*涓存椂淇℃伅闀垮害*/ + CM_UINT32 msg_len = 0u; /*鏈湴淇℃伅闀垮害*/ + CM_UINT32 src_ip = 0u; /* 婧怚P */ + CM_UINT16 src_port = 0u; /* 婧愮鍙 */ - CM_UINT16 dev_id = 0u; /* 婧愯澶嘔D */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 涓存椂鍙橀噺 */ + CM_UINT16 dev_id = 0u; /* 婧愯澶嘔D */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 涓存椂鍙橀噺 */ - CM_INT32 drop_local = 0; /* 涓㈠純鐨勬湰鏈哄寘鏁 */ - CM_INT32 drop_peer = 0; /* 涓㈠純鐨勯偦鏈哄寘鏁 */ - CM_INT32 drop_both = 0; /* 涓㈠純鐨勫弻鏈哄寘鏁帮紙CRC涓嶄竴鑷达級*/ - CM_INT32 count = 0; /* 鎬诲寘鏁 */ - CM_UINT64 stick = 0u; /* 寮濮嬫椂鍒 */ - CM_UINT64 etick = 0u; /* 缁撴潫鏃跺埢 */ - - /*- 璇诲彇娑堟伅鏁伴噺 */ - local_info_len = s_CFM_RawInfo_len / 12u; - peer_info_len = s_CFM_RawInfo_peer_len / 12u; - stick= CM_64FromChar(s_CFM_RawInfo); - if(0x55u == g_PFM_Cfg.M_2oo2_Enable) - { - /*2鍙栦娇鑳*/ - while(((local_info_len - local_now_info_len) > 0u) && ((peer_info_len - peer_now_info_len) > 0u)) + CM_INT32 drop_local = 0; /* 涓㈠純鐨勬湰鏈哄寘鏁 */ + CM_INT32 drop_peer = 0; /* 涓㈠純鐨勯偦鏈哄寘鏁 */ + CM_INT32 drop_both = 0; /* 涓㈠純鐨勫弻鏈哄寘鏁帮紙CRC涓嶄竴鑷达級*/ + CM_INT32 count = 0; /* 鎬诲寘鏁 */ + CM_UINT64 stick = 0u; /* 寮濮嬫椂鍒 */ + CM_UINT64 etick = 0u; /* 缁撴潫鏃跺埢 */ + + /*- 璇诲彇娑堟伅鏁伴噺 */ + local_info_len = s_CFM_RawInfo_len / 12u; + peer_info_len = s_CFM_RawInfo_peer_len / 12u; + stick = CM_64FromChar(s_CFM_RawInfo); + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) + { + /*2鍙栦娇鑳*/ + while (((local_info_len - local_now_info_len) > 0u) && ((peer_info_len - peer_now_info_len) > 0u)) { /*- 鑾峰彇鏈満闃熷垪鍜岄偦鏈洪槦鍒楅槦棣栫殑鐗瑰緛淇℃伅 */ - ts_local = CM_64FromChar(&s_CFM_RawInfo[(local_now_info_len*12u)]); - crc_local = CM_LongFromChar(&s_CFM_RawInfo[(local_now_info_len*12u) + 8u]); + ts_local = CM_64FromChar(&s_CFM_RawInfo[(local_now_info_len * 12u)]); + crc_local = CM_LongFromChar(&s_CFM_RawInfo[(local_now_info_len * 12u) + 8u]); - ts_peer = CM_64FromChar(&s_CFM_RawInfo_peer[(peer_now_info_len*12u)]); + ts_peer = CM_64FromChar(&s_CFM_RawInfo_peer[(peer_now_info_len * 12u)]); crc_peer = CM_LongFromChar(&s_CFM_RawInfo_peer[(peer_now_info_len * 12u) + 8u]); /*- 涓ら槦闃熼鎶ユ枃鐨勬椂闂存埑鏄惁鐩稿悓 */ if (ts_local == ts_peer) @@ -257,13 +258,13 @@ CM_UINT32 CFM_InnetRaw_Rx(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_s { temp_len = 6u; msg_len = buf_size - (CM_UINT32)rtnLen; - (void)CFM_InnetRaw_Rx_MsgInfoQueue(ch,&temp_buf[0],temp_len,&buf[rtnLen + PFM_RAW_HEADER_SIZE],&msg_len); + (void)CFM_InnetRaw_Rx_MsgInfoQueue(ch, &temp_buf[0], temp_len, &buf[rtnLen + PFM_RAW_HEADER_SIZE], &msg_len); src_ip = CM_LongFromChar(temp_buf); src_port = CM_ShortFromChar(temp_buf + 4); /*- 鏌ユ壘婧愯澶嘔D */ pCom = PFM_INI_InnetIP2Addr(src_ip, src_port); - if(NULL == pCom) + if (NULL == pCom) { dev_id = (CM_UINT16)ch; } @@ -273,7 +274,7 @@ CM_UINT32 CFM_InnetRaw_Rx(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_s } /*- 闃熼鍔犲叆搴旂敤鎺ユ敹闃熷垪 */ CM_RE_ASSERT(msg_len <= 65531u, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); - CM_LongToChar((CM_UINT32)(msg_len+PFM_RAW_DEVID_SIZE),&buf[rtnLen]); + CM_LongToChar((CM_UINT32)(msg_len + PFM_RAW_DEVID_SIZE), &buf[rtnLen]); CM_ShortToChar(dev_id, &buf[rtnLen + PFM_RAW_LEN_SIZE]); rtnLen = rtnLen + (msg_len + PFM_RAW_HEADER_SIZE); count++; @@ -302,22 +303,22 @@ CM_UINT32 CFM_InnetRaw_Rx(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_s drop_peer++; } } - } - else - { - /*2鍙栨湭浣胯兘*/ - while(((local_info_len - local_now_info_len) > 0u)) - { - ts_local = CM_64FromChar(&s_CFM_RawInfo[(local_now_info_len*12)]); - temp_len = 6u; + } + else + { + /*2鍙栨湭浣胯兘*/ + while (((local_info_len - local_now_info_len) > 0u)) + { + ts_local = CM_64FromChar(&s_CFM_RawInfo[(local_now_info_len * 12)]); + temp_len = 6u; msg_len = (CM_UINT32)buf_size - (CM_UINT32)rtnLen; - (void)CFM_InnetRaw_Rx_MsgInfoQueue(ch,&temp_buf[0],temp_len,&buf[rtnLen + PFM_RAW_HEADER_SIZE],&msg_len); + (void)CFM_InnetRaw_Rx_MsgInfoQueue(ch, &temp_buf[0], temp_len, &buf[rtnLen + PFM_RAW_HEADER_SIZE], &msg_len); src_ip = CM_LongFromChar(temp_buf); src_port = CM_ShortFromChar(temp_buf + 4); /*- 鏌ユ壘婧愯澶嘔D */ pCom = PFM_INI_InnetIP2Addr(src_ip, src_port); - if(NULL == pCom) + if (NULL == pCom) { dev_id = (CM_UINT16)ch; } @@ -327,114 +328,114 @@ CM_UINT32 CFM_InnetRaw_Rx(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_s } /*- 闃熼鍔犲叆搴旂敤鎺ユ敹闃熷垪 */ CM_RE_ASSERT(msg_len <= 65531u, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); - CM_LongToChar((CM_UINT32)(msg_len+PFM_RAW_DEVID_SIZE),&buf[rtnLen]); + CM_LongToChar((CM_UINT32)(msg_len + PFM_RAW_DEVID_SIZE), &buf[rtnLen]); CM_ShortToChar(dev_id, &buf[rtnLen + PFM_RAW_LEN_SIZE]); rtnLen = rtnLen + (msg_len + PFM_RAW_HEADER_SIZE); count++; local_now_info_len++; - } - } - /*- @alias 璁板綍鏀跺埌鐨勬姤鏂囨暟閲 */ - if ((ch == 2) || (ch == 7) || (ch == 1)) - { - etick = ts_local; - MSCP_LOG_MSG("rx[%d]:%d pkts, %d bytes(%llx...%llx)\n", ch,count,rtnLen,stick,etick); - } - else - { - /* 涓嶅鐞 */ - } + } + } + /*- @alias 璁板綍鏀跺埌鐨勬姤鏂囨暟閲 */ + if ((ch == 2) || (ch == 7) || (ch == 1)) + { + etick = ts_local; + MSCP_LOG_MSG("rx[%d]:%d pkts, %d bytes(%llx...%llx)\n", ch, count, rtnLen, stick, etick); + } + else + { + /* 涓嶅鐞 */ + } - /*- @alias 璁板綍鍙屾満CRC涓嶄竴鑷寸殑鎶ユ枃鏁伴噺 */ - if (drop_local > 0) - { - MSCP_LOG_MSG("[%d]drop local %d pkts\n",ch, drop_local); - } - else - { - /* 涓嶅鐞 */ - } + /*- @alias 璁板綍鍙屾満CRC涓嶄竴鑷寸殑鎶ユ枃鏁伴噺 */ + if (drop_local > 0) + { + MSCP_LOG_MSG("[%d]drop local %d pkts\n", ch, drop_local); + } + else + { + /* 涓嶅鐞 */ + } - /*- @alias 璁板綍涓㈠純鐨勯偦鏈烘姤鏂囨暟閲 */ - if (drop_peer > 0) - { - MSCP_LOG_MSG("[%d]drop peer %d pkts\n",ch, drop_peer); - } - else - { - /* 涓嶅鐞 */ - } + /*- @alias 璁板綍涓㈠純鐨勯偦鏈烘姤鏂囨暟閲 */ + if (drop_peer > 0) + { + MSCP_LOG_MSG("[%d]drop peer %d pkts\n", ch, drop_peer); + } + else + { + /* 涓嶅鐞 */ + } - /*- @alias 璁板綍涓㈠純鐨勬湰鏈烘姤鏂囨暟閲 */ - if (drop_both > 0) - { - MSCP_LOG_MSG("[%d]drop both %d pkts\n",ch, drop_both); - } - else - { - /* 涓嶅鐞 */ - } - /*鍒ゆ柇缂撳啿鍖虹┖闂存槸鍚﹁冻澶*/ - CM_RE_ASSERT(buf_size >= (CM_UINT32)rtnLen, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - /*- 杩斿洖2oo2閫氳繃鐨勬帴鏀舵姤鏂囬暱搴 */ - return rtnLen; + /*- @alias 璁板綍涓㈠純鐨勬湰鏈烘姤鏂囨暟閲 */ + if (drop_both > 0) + { + MSCP_LOG_MSG("[%d]drop both %d pkts\n", ch, drop_both); + } + else + { + /* 涓嶅鐞 */ + } + /*鍒ゆ柇缂撳啿鍖虹┖闂存槸鍚﹁冻澶*/ + CM_RE_ASSERT(buf_size >= (CM_UINT32)rtnLen, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); + /*- 杩斿洖2oo2閫氳繃鐨勬帴鏀舵姤鏂囬暱搴 */ + return rtnLen; } /** -* @brief 鐩告満鏁版嵁鐨2oo2姣旇緝鎺ユ敹 -* @param ch 閫氶亾鍙 鍙栧艰寖鍥:0~0xffff -* @param buf 鎺ユ敹鏁扮粍 鍙栧艰寖鍥:闈炵┖ -* @param buf_size 鎺ユ敹鏁扮粍澶у皬 鍙栧艰寖鍥:0~0xffffffff -* @param maininfobuf 鏈満杈呭姪淇℃伅鏁扮粍 鍙栧艰寖鍥:闈炵┖ -* @param maininfolen 鏈満杈呭姪淇℃伅鏁扮粍闀垮害 鍙栧艰寖鍥:闈炵┖ -* @param peerinfobuf 閭绘満杈呭姪淇℃伅鏁扮粍 鍙栧艰寖鍥:闈炵┖ -* @param peerinfolen 閭绘満杈呭姪淇℃伅鏁扮粍闀垮害 鍙栧艰寖鍥:闈炵┖ -* @param infobufSize 杈呭姪淇℃伅閫氶亾缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥:0~0xffffffff -* @return 鎺ユ敹鏁版嵁澶у皬 鍙栧艰寖鍥:0~0xffffffff -* @details -*/ + * @brief 鐩告満鏁版嵁鐨2oo2姣旇緝鎺ユ敹 + * @param ch 閫氶亾鍙 鍙栧艰寖鍥:0~0xffff + * @param buf 鎺ユ敹鏁扮粍 鍙栧艰寖鍥:闈炵┖ + * @param buf_size 鎺ユ敹鏁扮粍澶у皬 鍙栧艰寖鍥:0~0xffffffff + * @param maininfobuf 鏈満杈呭姪淇℃伅鏁扮粍 鍙栧艰寖鍥:闈炵┖ + * @param maininfolen 鏈満杈呭姪淇℃伅鏁扮粍闀垮害 鍙栧艰寖鍥:闈炵┖ + * @param peerinfobuf 閭绘満杈呭姪淇℃伅鏁扮粍 鍙栧艰寖鍥:闈炵┖ + * @param peerinfolen 閭绘満杈呭姪淇℃伅鏁扮粍闀垮害 鍙栧艰寖鍥:闈炵┖ + * @param infobufSize 杈呭姪淇℃伅閫氶亾缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥:0~0xffffffff + * @return 鎺ユ敹鏁版嵁澶у皬 鍙栧艰寖鍥:0~0xffffffff + * @details + */ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT32 buf_size, - OUT CM_UINT8 maininfobuf[],OUT CM_UINT32* maininfolen, - OUT CM_UINT8 peerinfobuf[],OUT CM_UINT32* peerinfolen,IN CM_UINT32 infobufSize) + OUT CM_UINT8 maininfobuf[], OUT CM_UINT32 *maininfolen, + OUT CM_UINT8 peerinfobuf[], OUT CM_UINT32 *peerinfolen, IN CM_UINT32 infobufSize) { /*- 鍙橀噺鍒濆鍖 */ ENUM_CM_RETURN rt = ENUM_CM_FALSE; - CM_UINT8 RawFrontCache[256u] = { 0u }; /**< 涓存椂缂撳啿鍖 */ + CM_UINT8 RawFrontCache[256u] = {0u}; /**< 涓存椂缂撳啿鍖 */ CM_UINT16 i = 0u; CM_UINT16 j = 0u; CM_UINT16 timeoffset = 0u; CM_UINT32 tmpmsgLen = 0u; CM_UINT32 retmsgLen = 0u; - CM_UINT32 msgBeginLen = 0u;/*璁板綍姣忓抚璧峰涓嬫爣*/ + CM_UINT32 msgBeginLen = 0u; /*璁板綍姣忓抚璧峰涓嬫爣*/ CM_UINT32 msgLen = 0u; CM_UINT32 msgFrontLen = 0u; - CM_UINT32 myinfolen = 0u;/*杈呭姪淇℃伅闀垮害*/ - CM_UINT32 otherinfolen = 0u;/*杈呭姪淇℃伅闀垮害*/ - CM_UINT8 Complete_Flag = 0u;/*鎵惧埌瀹屾暣甯ф爣蹇*/ - CM_UINT16 Complete_Size = 0u;/*瀹屾暣甯ф暟閲*/ - CM_UINT16 InfoArea = 0u;/*鏃堕棿鎴宠緟鍔╀俊鎭殑浣嶇疆*/ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ - CM_UINT16 devID = 0u; /* 璁惧ID */ - CM_UINT8 DataType = 0u; /* 鏁版嵁绫诲瀷 */ - CM_UINT8 DataShift = 0u; /* 鏁版嵁绫诲瀷 */ + CM_UINT32 myinfolen = 0u; /*杈呭姪淇℃伅闀垮害*/ + CM_UINT32 otherinfolen = 0u; /*杈呭姪淇℃伅闀垮害*/ + CM_UINT8 Complete_Flag = 0u; /*鎵惧埌瀹屾暣甯ф爣蹇*/ + CM_UINT16 Complete_Size = 0u; /*瀹屾暣甯ф暟閲*/ + CM_UINT16 InfoArea = 0u; /*鏃堕棿鎴宠緟鍔╀俊鎭殑浣嶇疆*/ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧愮鍙 */ + CM_UINT16 devID = 0u; /* 璁惧ID */ + CM_UINT8 DataType = 0u; /* 鏁版嵁绫诲瀷 */ + CM_UINT8 DataShift = 0u; /* 鏁版嵁绫诲瀷 */ STRU_PFM_INNET_CFG_T *pCom = NULL; /*閫氫俊閰嶇疆淇℃伅*/ /*- 寰幆瑙f瀽鐗瑰緛淇℃伅鏁版嵁鍖 */ - CM_ASSERT(buf != NULL, RAW_MODE,DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); - for(i = 0u;i<(s_CFM_RawInfo_len/10u);++i) + CM_ASSERT(buf != NULL, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + for (i = 0u; i < (s_CFM_RawInfo_len / 10u); ++i) { /*- 鑾峰彇鏁版嵁绫诲瀷 */ - DataType = s_CFM_RawInfo[i*10u]; + DataType = s_CFM_RawInfo[i * 10u]; /*- 濡傛灉鏄捣濮嬪抚*/ - if(0x01u == DataType) + if (0x01u == DataType) { /*璁板綍鎵惧埌鏃堕棿鎴*/ - if(1u == Complete_Flag) + if (1u == Complete_Flag) { /*涓㈠純澶氫綑鏃堕棿鎴*/ CFM_Clear_InnetRaw_Rx_Msg(ch); /*涓㈠純涓嶅畬鏁村浘鍍忔暟鎹*/ - for(j = 0u;j < Complete_Size;++j) + for (j = 0u; j < Complete_Size; ++j) { CFM_Clear_InnetRaw_Rx_Msg(ch); } @@ -444,10 +445,10 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 /*nothing to do*/ } /*- 濡傛灉鑾峰彇鍋忕Щ閲忓ぇ浜0*/ - if(0u < s_CFM_RawInfo[i*10u+1u]) + if (0u < s_CFM_RawInfo[i * 10u + 1u]) { /*- 鍋忕Щ涓虹湡瀹炲亸绉婚噺*/ - DataShift = s_CFM_RawInfo[i*10u+1u]+6u; + DataShift = s_CFM_RawInfo[i * 10u + 1u] + 6u; } else { @@ -464,10 +465,10 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 else { /*- 濡傛灉涓嶆槸璧峰甯*/ - if(1u == Complete_Flag) + if (1u == Complete_Flag) { /*- 濡傛灉鏄粨鏉熷抚*/ - if(0x02u == DataType) + if (0x02u == DataType) { /*姝ら樁娈垫棩蹇楄繃澶氫細涓㈠寘*/ /*- 璧峰甯ф爣蹇楁竻闆*/ @@ -475,7 +476,7 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 /*- 鍙栧嚭璧峰甯ф暟鎹*/ CFM_Clear_InnetRaw_Rx_Msg(ch); /*- 璁板綍璧峰甯ф椂闂存埑*/ - (void)CM_Memcpy(&maininfobuf[myinfolen],(infobufSize-myinfolen),&s_CFM_RawInfo[timeoffset*10+2],8u); + (void)CM_Memcpy(&maininfobuf[myinfolen], (infobufSize - myinfolen), &s_CFM_RawInfo[timeoffset * 10 + 2], 8u); myinfolen += 8u; CM_RE_ASSERT(infobufSize >= myinfolen, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); /* @@ -485,20 +486,20 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 n瀛楄妭 鏁版嵁 */ /*- 鎷疯礉鍥惧儚鏁版嵁绗竴鍖*/ - msgBeginLen = tmpmsgLen;/*璁板綍璧峰涓嬫爣锛岀敤鏉ユ坊鍔犻暱搴*/ - tmpmsgLen += PFM_RAW_HEADER_SIZE;/*4瀛楄妭闀垮害+2瀛楄妭璁惧绫诲瀷ID*/ + msgBeginLen = tmpmsgLen; /*璁板綍璧峰涓嬫爣锛岀敤鏉ユ坊鍔犻暱搴*/ + tmpmsgLen += PFM_RAW_HEADER_SIZE; /*4瀛楄妭闀垮害+2瀛楄妭璁惧绫诲瀷ID*/ msgLen = buf_size - tmpmsgLen; msgFrontLen = DataShift; - rt = CFM_InnetRaw_Rx_MsgInfoQueue(ch,RawFrontCache,msgFrontLen,&buf[tmpmsgLen],&msgLen); + rt = CFM_InnetRaw_Rx_MsgInfoQueue(ch, RawFrontCache, msgFrontLen, &buf[tmpmsgLen], &msgLen); /*- 濡傛灉鎷疯礉鍥惧儚鏁版嵁绗竴鍖呮垚鍔*/ - if(ENUM_CM_TRUE == rt) + if (ENUM_CM_TRUE == rt) { - srcIP = CM_LongFromChar(RawFrontCache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ + srcIP = CM_LongFromChar(RawFrontCache); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ srcPort = CM_ShortFromChar(RawFrontCache + 4); /* parasoft-suppress BD-PB-CHECKRET "鍚庣画鍦ㄦ煡璇㈠搴斿唴缃慖D鏃惰繘琛岄潪娉曞奸槻鎶" */ /*- 鑾峰彇璁惧绫诲瀷ID*/ pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); /*- 濡傛灉璁惧绫诲瀷ID涓虹┖*/ - if(NULL == pCom) + if (NULL == pCom) { /*- 鏇存柊璁惧绫诲瀷ID涓洪氶亾鍙*/ devID = (CM_UINT16)ch; @@ -512,13 +513,13 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 CM_ShortToChar(devID, &buf[msgBeginLen + PFM_RAW_LEN_SIZE]); tmpmsgLen += msgLen; /*- 杩炵画鎷疯礉鍓╀綑鍥惧儚鏁版嵁*/ - for(j = 1u;j < Complete_Size;++j) + for (j = 1u; j < Complete_Size; ++j) { msgLen = buf_size - tmpmsgLen; msgFrontLen = DataShift; - rt = CFM_InnetRaw_Rx_MsgInfoQueue(ch,RawFrontCache,msgFrontLen,&buf[tmpmsgLen],&msgLen); + rt = CFM_InnetRaw_Rx_MsgInfoQueue(ch, RawFrontCache, msgFrontLen, &buf[tmpmsgLen], &msgLen); /*- 濡傛灉鎷疯礉鍓╀綑鍥惧儚閿欒*/ - if(ENUM_CM_FALSE == rt) + if (ENUM_CM_FALSE == rt) { /*- 缁撴潫鎷疯礉*/ break; @@ -526,7 +527,7 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 tmpmsgLen += msgLen; } /*- 濡傛灉鎷疯礉鍓╀綑鍥惧儚姝g‘*/ - if(ENUM_CM_TRUE == rt) + if (ENUM_CM_TRUE == rt) { /*- 鎷疯礉瀹屾垚娣诲姞闀垮害*/ CM_LongToChar((tmpmsgLen - msgBeginLen - PFM_RAW_LEN_SIZE), &buf[msgBeginLen]); @@ -567,12 +568,12 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 /*- 瀹屾暣甯ф暟閲忔竻闆*/ Complete_Size = 0u; /*- 寰幆瑙f瀽閭绘満鐗瑰緛淇℃伅鏁版嵁鍖 */ - for(i = 0u;i<(s_CFM_RawInfo_peer_len/10u);i++) + for (i = 0u; i < (s_CFM_RawInfo_peer_len / 10u); i++) { /*- 鑾峰彇鏁版嵁绫诲瀷 */ - DataType = s_CFM_RawInfo_peer[i*10u]; + DataType = s_CFM_RawInfo_peer[i * 10u]; /*- 濡傛灉鏄捣濮嬪抚*/ - if(0x01u == DataType) + if (0x01u == DataType) { /*璁板綍鎵惧埌鏃堕棿鎴*/ InfoArea = i; @@ -584,15 +585,15 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 else { /*- 濡傛灉涓嶆槸璧峰甯*/ - if(1u == Complete_Flag) + if (1u == Complete_Flag) { /*- 濡傛灉鏄粨鏉熷抚*/ - if(0x02u == DataType) + if (0x02u == DataType) { /*- 璧峰甯ф爣蹇楁竻闆*/ Complete_Flag = 0u; /*- 璁板綍璧峰甯ф椂闂存埑*/ - (void)CM_Memcpy(&peerinfobuf[otherinfolen],(infobufSize-otherinfolen),&s_CFM_RawInfo_peer[10*InfoArea+2],8u); + (void)CM_Memcpy(&peerinfobuf[otherinfolen], (infobufSize - otherinfolen), &s_CFM_RawInfo_peer[10 * InfoArea + 2], 8u); otherinfolen += 8u; } else @@ -616,46 +617,46 @@ CM_UINT32 CFM_InnetRaw_Rx_Camera(IN CM_INT32 ch, OUT CM_UINT8 buf[], IN CM_UINT3 return retmsgLen; } /** -* @brief 鍙戦佸唴缃戦忎紶鎶ユ枃 -* @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -*/ + * @brief 鍙戦佸唴缃戦忎紶鎶ユ枃 + * @param ch 鍐呯綉閫忎紶閫氶亾搴忓彿锛孾1...n]鏈夋晥 + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + */ CM_UINT8 CFM_TxInnetRaw(IN CM_INT32 ch, IN const CM_UINT8 *Buf, IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 rt = 1u; - CM_UINT32 i = 0u; - CM_UINT16 msgLen = 0u; - CM_UINT16 dstID = 0u; - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - STRU_PFM_INNET_CFG_T *pCom = NULL; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 rt = 1u; + CM_UINT32 i = 0u; + CM_UINT16 msgLen = 0u; + CM_UINT16 dstID = 0u; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + STRU_PFM_INNET_CFG_T *pCom = NULL; - /*- 寰幆鍙戦佹墍鏈夊唴缃戦忎紶鏁版嵁 */ - while ((i + 4u) < Len) - { - /* - 鍐呯綉閫忎紶鍗忚澶达細 - 2瀛楄妭 闀垮害锛堜笉鍚嚜韬級 - 2瀛楄妭 鐩殑ID - n瀛楄妭 鏁版嵁 - */ - /*- 瑙f瀽鍐呯綉鍙戦佸崗璁ご */ - msgLen = CM_ShortFromChar(Buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - dstID = CM_ShortFromChar(Buf + i + 2u); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 寰幆鍙戦佹墍鏈夊唴缃戦忎紶鏁版嵁 */ + while ((i + 4u) < Len) + { + /* + 鍐呯綉閫忎紶鍗忚澶达細 + 2瀛楄妭 闀垮害锛堜笉鍚嚜韬級 + 2瀛楄妭 鐩殑ID + n瀛楄妭 鏁版嵁 + */ + /*- 瑙f瀽鍐呯綉鍙戦佸崗璁ご */ + msgLen = CM_ShortFromChar(Buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + dstID = CM_ShortFromChar(Buf + i + 2u); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_RE_ASSERT(msgLen > 2u, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT((i + msgLen + 2u) <= Len, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT(msgLen > 2u, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((i + msgLen + 2u) <= Len, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); - /*- 鏌ヨ鐩殑IP銆佺鍙 */ - pCom = PFM_INI_InnetID2Addr(dstID); - /*- 鏌ヨ鐩殑IP銆佺鍙f槸鍚︽垚鍔 */ - if (NULL != pCom) - { - if(RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].Port_Type_Enable) + /*- 鏌ヨ鐩殑IP銆佺鍙 */ + pCom = PFM_INI_InnetID2Addr(dstID); + /*- 鏌ヨ鐩殑IP銆佺鍙f槸鍚︽垚鍔 */ + if (NULL != pCom) + { + if (RAW_COM_DISENABLE == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].Port_Type_Enable) { /*绂佺敤閫忎紶绔彛*/ } @@ -663,108 +664,108 @@ CM_UINT8 CFM_TxInnetRaw(IN CM_INT32 ch, IN const CM_UINT8 *Buf, IN CM_UINT32 Len { CM_RE_ASSERT(pCom->InnetID == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[ch].Server_DevId, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); ret = CFM_InnetRaw_Tcp_Send(pCom->InnetID, Buf + i + 4u, (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 2u)); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- @alias 璁板綍鍙戦佸紓甯镐俊鎭 */ - if (ENUM_CM_TRUE != ret) - { - MSCP_LOG_MSG("innet raw tcp send to %04x fail\n", dstID); - rt = 0u; - } - else + /*- @alias 璁板綍鍙戦佸紓甯镐俊鎭 */ + if (ENUM_CM_TRUE != ret) + { + MSCP_LOG_MSG("innet raw tcp send to %04x fail\n", dstID); + rt = 0u; + } + else { /*- 鏃犲鐞 */ } } else { - /*- @alias 璋冪敤閫氫俊灞傚彂閫 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - ret = CFM_InnetRaw_Send(ch, Buf + i + 4u, (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 2u), pCom->IP_G,pCom->Port_Raw_G); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } - else - { - ret = CFM_InnetRaw_Send(ch, Buf + i + 4u, (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 2u), pCom->IP_P, pCom->Port_Raw_P); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } - MSCP_LOG_MSG("CFM_InnetRaw_Send:ch:%d,dstID:0x%x,len:%d\n", ch,dstID,msgLen - 2u); - /*- @alias 璁板綍鍙戦佸紓甯镐俊鎭 */ - if (ENUM_CM_TRUE != ret) - { - MSCP_LOG_MSG("innet raw send to %04x fail\n", dstID); - rt = 0u; - } - else + /*- @alias 璋冪敤閫氫俊灞傚彂閫 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + ret = CFM_InnetRaw_Send(ch, Buf + i + 4u, (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 2u), pCom->IP_G, pCom->Port_Raw_G); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } + else + { + ret = CFM_InnetRaw_Send(ch, Buf + i + 4u, (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 2u), pCom->IP_P, pCom->Port_Raw_P); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } + MSCP_LOG_MSG("CFM_InnetRaw_Send:ch:%d,dstID:0x%x,len:%d\n", ch, dstID, msgLen - 2u); + /*- @alias 璁板綍鍙戦佸紓甯镐俊鎭 */ + if (ENUM_CM_TRUE != ret) + { + MSCP_LOG_MSG("innet raw send to %04x fail\n", dstID); + rt = 0u; + } + else { /*- 鏃犲鐞 */ - } + } } - } - else - { - /*- 鎶ラ敊 */ - MSCP_LOG_MSG("innet raw send err:wrong dstID = %04x\n",dstID); - CM_RE_ASSERT(0, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_4); - rt = 0u; - } - /*- 璺宠浆鍒颁笅涓鏉″緟鍙戦佹姤鏂 */ - i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); - } - /*- 杩斿洖鎵ц缁撴灉 */ - return rt; + } + else + { + /*- 鎶ラ敊 */ + MSCP_LOG_MSG("innet raw send err:wrong dstID = %04x\n", dstID); + CM_RE_ASSERT(0, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_4); + rt = 0u; + } + /*- 璺宠浆鍒颁笅涓鏉″緟鍙戦佹姤鏂 */ + i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); + } + /*- 杩斿洖鎵ц缁撴灉 */ + return rt; } /** -* @brief 澶栫綉閫忎紶鎺ユ敹 -* @param buf 鎺ユ敹鏁扮粍 -* @param bufSize 鎺ユ敹鏁扮粍澶у皬 -* @return 鎺ユ敹鏁版嵁闀垮害 -*/ + * @brief 澶栫綉閫忎紶鎺ユ敹 + * @param buf 鎺ユ敹鏁扮粍 + * @param bufSize 鎺ユ敹鏁扮粍澶у皬 + * @return 鎺ユ敹鏁版嵁闀垮害 + */ CM_UINT32 CFM_RxOutnetRaw(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 rxLen = 0u; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - ENUM_OUTNET_CHN_T Chn = ENUM_OUTNET_ERROR; - /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ - rxLen = CFM_OutnetRaw_Recv(&buf[i+4u], CM_UNSIGNED_INT_EXP(bufSize - i - 4u),&Chn); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏄惁璇诲埌浜嗘暟鎹 */ - if (rxLen > 0u) - { - CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(rxLen + 4u); - } - else + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 rxLen = 0u; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + ENUM_OUTNET_CHN_T Chn = ENUM_OUTNET_ERROR; + /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ + rxLen = CFM_OutnetRaw_Recv(&buf[i + 4u], CM_UNSIGNED_INT_EXP(bufSize - i - 4u), &Chn); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏄惁璇诲埌浜嗘暟鎹 */ + if (rxLen > 0u) + { + CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(rxLen + 4u); + } + else { /*- 鏃犲鐞 */ } - } while (rxLen > 0u); + } while (rxLen > 0u); - /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ - return i; + /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ + return i; } /** -* @brief 鍙戦佸缃戦忎紶鎶ユ枃 -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -*/ + * @brief 鍙戦佸缃戦忎紶鎶ユ枃 + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + */ CM_UINT8 CFM_TxOutnetRaw(IN CM_UINT8 Buf[], IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 rt = 1u; - CM_UINT16 i = 0u; - CM_UINT16 msgLen = 0u; - CM_UINT32 tx_sn = 0u; - CM_UINT32 Crc = 0u; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 rt = 1u; + CM_UINT16 i = 0u; + CM_UINT16 msgLen = 0u; + CM_UINT32 tx_sn = 0u; + CM_UINT32 Crc = 0u; if ((0u < Len) && (0x55u == g_PFM_Cfg.M_OutnetRaw_Enable)) { - while((CM_UINT16)(i + 19u) < Len) + while ((CM_UINT16)(i + 19u) < Len) { /*CC澶栫綉杈撳嚭甯 2瀛楄妭 闀垮害 @@ -777,29 +778,29 @@ CM_UINT8 CFM_TxOutnetRaw(IN CM_UINT8 Buf[], IN CM_UINT32 Len) n瀛楄妭 鏁版嵁 4瀛楄妭CRC */ - /*- 瑙f瀽閫忎紶鍙戦佸ご */ - msgLen = CM_ShortFromChar(&Buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 濉啓甯у簭鍙*/ - tx_sn = SFM_GetTxSn(); - CM_LongToChar(tx_sn, &Buf[i + 7u]); - if(msgLen > 2u) - { - Crc = CM_Crc32(&Buf[i], msgLen - 2u); - } - else - { - MSCP_LOG_MSG("Crc len error!!!\n"); - } - CM_LongToChar(Crc, &Buf[i + msgLen - 2u]); - CM_RE_ASSERT(msgLen > (CM_UINT16)(19u), RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT((i + msgLen + 2u) <= Len, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); + /*- 瑙f瀽閫忎紶鍙戦佸ご */ + msgLen = CM_ShortFromChar(&Buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 濉啓甯у簭鍙*/ + tx_sn = SFM_GetTxSn(); + CM_LongToChar(tx_sn, &Buf[i + 7u]); + if (msgLen > 2u) + { + Crc = CM_Crc32(&Buf[i], msgLen - 2u); + } + else + { + MSCP_LOG_MSG("Crc len error!!!\n"); + } + CM_LongToChar(Crc, &Buf[i + msgLen - 2u]); + CM_RE_ASSERT(msgLen > (CM_UINT16)(19u), RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((i + msgLen + 2u) <= Len, RAW_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); /*- 鍚戠孩缃慍C鍙戦丆C澶栫綉甯 */ (void)CFM_OutnetRaw_Send(&Buf[i], (CM_INT32)(msgLen + 2u), ENUM_OUTNET_RED); /*- 鍚戣摑缃慍C鍙戦丆C澶栫綉甯 */ (void)CFM_OutnetRaw_Send(&Buf[i], (CM_INT32)(msgLen + 2u), ENUM_OUTNET_BLUE); /*- 璺宠浆鍒颁笅涓鏉″緟鍙戦佹姤鏂 */ - i = i + (msgLen + 2u); + i = i + (msgLen + 2u); } } else @@ -810,71 +811,96 @@ CM_UINT8 CFM_TxOutnetRaw(IN CM_UINT8 Buf[], IN CM_UINT32 Len) return rt; } /** -* @brief 澶栫綉蹇冭烦鎺ユ敹 -* @param buf 鎺ユ敹鏁扮粍 鍙栧艰寖鍥达細闈炵┖ -* @param bufSize 鎺ユ敹鏁扮粍澶у皬 鍙栧艰寖鍥达細0~0xFFFFFFFF -* @return 鎺ユ敹鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xFFFFFFFF -*/ + * @brief 澶栫綉蹇冭烦鎺ユ敹 + * @param buf 鎺ユ敹鏁扮粍 鍙栧艰寖鍥达細闈炵┖ + * @param bufSize 鎺ユ敹鏁扮粍澶у皬 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鎺ユ敹鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xFFFFFFFF + */ CM_UINT32 CFM_RxOutnetHeart(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 rxLen = 0u; /*- 鎺ユ敹鎶ユ枃闀垮害 */ - CM_UINT32 i = 0u; /*- 寰幆鍙橀噺 */ - ENUM_OUTNET_CHN_T Chn = ENUM_OUTNET_ERROR; - CM_UINT8 send_2oo2_buf[16] = {0u}; - CM_UINT8 rcv_2oo2_buf[16] = {0u}; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 rxLen = 0u; /*- 鎺ユ敹鎶ユ枃闀垮害 */ + CM_UINT32 i = 0u; /*- 寰幆鍙橀噺 */ + ENUM_OUTNET_CHN_T Chn = ENUM_OUTNET_ERROR; + CM_UINT8 send_2oo2_buf[24] = {0u}; + CM_UINT8 rcv_2oo2_buf[24] = {0u}; CM_INT32 rcv_len = 0; CM_UINT32 cycle = DFM_GetBirthCount(); - CM_UINT8 ccState[2] = {0,0}; - CM_UINT8 sebState[2] = {0,0}; - /*- 濡傛灉鍏ュ弬鎸囬拡涓嶄负绌 */ - if(NULL != buf) + CM_UINT32 recvSN = 0u; + CM_UINT32 *p_ccseb_count = NULL; + CM_UINT32 *p_ccseb_sn = NULL; + CM_UINT32 recvCrc = 0u; + CM_UINT32 calcCrc = 0u; + /*- 濡傛灉鍏ュ弬鎸囬拡涓嶄负绌 */ + if (NULL != buf) { - /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ - rxLen = CFM_OutnetHeart_Recv(&buf[i+4u], CM_UNSIGNED_INT_EXP(bufSize - i - 4u),&Chn); /*- parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏄惁璇诲埌浜嗘暟鎹 */ - if (rxLen > 0u) - { - CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /*- parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(rxLen + 4u); - /*- 璁板綍閫氫俊鐘舵*/ - switch (Chn) + /*- 寰幆鎺ユ敹鍐呯綉閫忎紶鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傝鍙栭氫俊鏁版嵁 */ + rxLen = CFM_OutnetHeart_Recv(&buf[i + 4u], CM_UNSIGNED_INT_EXP(bufSize - i - 4u), &Chn); /*- parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏄惁璇诲埌浜嗘暟鎹 */ + if (rxLen >= 20u) + { + recvSN = CM_LongFromChar(buf + i + rxLen - 4u); /*- 鑾峰彇蹇冭烦搴忓垪鍙 */ + MSCP_LOG_MSG("CFM_RxOutnetHeart: Chn=%d, rxLen=%d, recvSN=%u\n", Chn, rxLen, recvSN); + CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /*- parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + recvCrc = CM_LongFromChar(buf + i + rxLen); /*- 鑾峰彇蹇冭烦CRC */ + calcCrc = CM_Crc32(&buf[i + 6], rxLen - 6u); + i = i + (CM_UINT32)CM_UNSIGNED_SHORT_EXP(rxLen + 4u); + if (recvCrc == calcCrc) { - case ENUM_OUTNET_RED: - g_Hardware_boot_com_state.CCU_A_Count = cycle; - break; - case ENUM_OUTNET_BLUE: - g_Hardware_boot_com_state.CCU_B_Count = cycle; - break; - case ENUM_OUTNET_EXTEND_RED: - g_Hardware_boot_com_state.SEB_A_Count = cycle; - break; - case ENUM_OUTNET_EXTEND_BLUE: - g_Hardware_boot_com_state.SEB_B_Count = cycle; - break; - default: - break; + /*- 璁板綍閫氫俊鐘舵*/ + switch (Chn) + { + case ENUM_OUTNET_RED: + p_ccseb_count = &g_Hardware_boot_com_state.CCU_A_Count; + p_ccseb_sn = &g_Hardware_boot_com_state.CCU_A_SN; + break; + case ENUM_OUTNET_BLUE: + p_ccseb_count = &g_Hardware_boot_com_state.CCU_B_Count; + p_ccseb_sn = &g_Hardware_boot_com_state.CCU_B_SN; + break; + case ENUM_OUTNET_EXTEND_RED: + p_ccseb_count = &g_Hardware_boot_com_state.SEB_A_Count; + p_ccseb_sn = &g_Hardware_boot_com_state.SEB_A_SN; + break; + case ENUM_OUTNET_EXTEND_BLUE: + p_ccseb_count = &g_Hardware_boot_com_state.SEB_B_Count; + p_ccseb_sn = &g_Hardware_boot_com_state.SEB_B_SN; + break; + default: + break; + } + if (recvSN > *p_ccseb_sn || *p_ccseb_sn == 0xFFFFFFFFu) + { + *p_ccseb_sn = recvSN; + *p_ccseb_count = cycle; + } + else + { + } } - } - else + else + { + } + } + else { /*- 鏃犲鐞 */ } - } while (rxLen > 0u); + } while (rxLen > 0u); g_Hardware_boot_com_state.SYS_Count = cycle; - /*- @alias 浜屽彇鍚屾鍙宑pu閫氫俊缁撴灉 */ - if(0x55u == g_PFM_Cfg.M_2oo2_Enable) + /*- @alias 浜屽彇鍚屾鍙宑pu閫氫俊缁撴灉 */ + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { - CM_LongToChar(g_Hardware_boot_com_state.CCU_A_Count,&send_2oo2_buf[0u]); - CM_LongToChar(g_Hardware_boot_com_state.CCU_B_Count,&send_2oo2_buf[4u]); - CM_LongToChar(g_Hardware_boot_com_state.SEB_A_Count,&send_2oo2_buf[8u]); - CM_LongToChar(g_Hardware_boot_com_state.SEB_B_Count,&send_2oo2_buf[12u]); - rcv_len = SFM_2oo2_Exchange_Currency(send_2oo2_buf,16,rcv_2oo2_buf,16,ENUM_2oo2_RAW_INFO); - if(16 == rcv_len) + CM_LongToChar(g_Hardware_boot_com_state.CCU_A_Count, &send_2oo2_buf[0u]); + CM_LongToChar(g_Hardware_boot_com_state.CCU_B_Count, &send_2oo2_buf[4u]); + CM_LongToChar(g_Hardware_boot_com_state.SEB_A_Count, &send_2oo2_buf[8u]); + CM_LongToChar(g_Hardware_boot_com_state.SEB_B_Count, &send_2oo2_buf[12u]); + rcv_len = SFM_2oo2_Exchange_Currency(send_2oo2_buf, 16, rcv_2oo2_buf, 16, ENUM_2oo2_RAW_INFO); + if (16 == rcv_len) { (g_Hardware_boot_com_state.CCU_A_Count >= CM_LongFromChar(&rcv_2oo2_buf[0])) ? (g_Hardware_boot_com_state.CCU_A_Count) : (g_Hardware_boot_com_state.CCU_A_Count = CM_LongFromChar(&rcv_2oo2_buf[0])); (g_Hardware_boot_com_state.CCU_B_Count >= CM_LongFromChar(&rcv_2oo2_buf[4])) ? (g_Hardware_boot_com_state.CCU_B_Count) : (g_Hardware_boot_com_state.CCU_B_Count = CM_LongFromChar(&rcv_2oo2_buf[4])); @@ -890,7 +916,7 @@ CM_UINT32 CFM_RxOutnetHeart(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) { /*- 鏃犲鐞 */ } - MSCP_LOG_MSG("CCU_A_Count = %d,CCU_B_Count = %d,SEB_A_Count = %d,SEB_B_Count = %d\n",g_Hardware_boot_com_state.CCU_A_Count,g_Hardware_boot_com_state.CCU_B_Count,g_Hardware_boot_com_state.SEB_A_Count,g_Hardware_boot_com_state.SEB_B_Count); + MSCP_LOG_MSG("CCU_A_Count = %d,CCU_B_Count = %d,SEB_A_Count = %d,SEB_B_Count = %d\n", g_Hardware_boot_com_state.CCU_A_Count, g_Hardware_boot_com_state.CCU_B_Count, g_Hardware_boot_com_state.SEB_A_Count, g_Hardware_boot_com_state.SEB_B_Count); } else { @@ -898,41 +924,39 @@ CM_UINT32 CFM_RxOutnetHeart(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) } /*- @alias 鍚慳im姹囨姤閫氫俊鎯呭喌 */ - (1u == PFM_CCUSEB_Comstate(0))? (ccState[1] = 0xaau) : (ccState[1] = 0x55u); - (1u == PFM_CCUSEB_Comstate(1))? (ccState[0] = 0xaau) : (ccState[0] = 0x55u); - (1u == PFM_CCUSEB_Comstate(2))? (sebState[1] = 0xaau) : (sebState[1] = 0x55u); - (1u == PFM_CCUSEB_Comstate(3))? (sebState[0] = 0xaau) : (sebState[0] = 0x55u); - MSCP_LOG_MSG("rCC = %d, bCC = %d, rSEB = %d, bSEB = %d\n", ccState[1], ccState[0], sebState[1], sebState[0]); + s_CCSEB_STATE_CAL(); + /*- 濉啓鏆楁枃鏃ュ織 */ - /*- 濉啓鏆楁枃鏃ュ織 */ - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CCSTATE, 2U, &ccState); - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_SEBSTATE, 2U, &sebState); - - /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ - return i; + /*- 杩斿洖鎶ユ枃鎬婚暱搴 */ + return i; } /** -* @brief 鍙戦佸缃戝績璺虫姤鏂 -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -*/ -CM_UINT8 CFM_TxOutnetHeart(IN const CM_UINT8 Buf[], IN CM_UINT32 Len) + * @brief 鍙戦佸缃戝績璺虫姤鏂 + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + */ +CM_UINT8 CFM_TxOutnetHeart(ENUM_2x2_STATE_T local2x2state) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 rt = 0u; - - if ((0u < Len) && (NULL != Buf)) + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 rt = 0u; + CM_UINT8 Buf[100] = {0u}; + CM_UINT32 Len = 0u; + if (NULL != Buf) { /*- 鍚戞墍鏈夊璁惧彂閫佸績璺宠姹 锛屾槸鍚﹀尯鍒咰PU*/ - (void)CFM_OutnetHeart_Send(Buf,Len,ENUM_OUTNET_RED); - (void)CFM_OutnetHeart_Send(Buf,Len,ENUM_OUTNET_BLUE); - if(NULL != p_Status_Communication_Func) + Len = PFM_OutnetHeart_Send(Buf, sizeof(Buf), g_Hardware_boot_com_state.CCU_A_SN, local2x2state); + (void)CFM_OutnetHeart_Send(Buf, Len, ENUM_OUTNET_RED); + Len = PFM_OutnetHeart_Send(Buf, sizeof(Buf), g_Hardware_boot_com_state.CCU_B_SN, local2x2state); + (void)CFM_OutnetHeart_Send(Buf, Len, ENUM_OUTNET_BLUE); + if (NULL != p_Status_Communication_Func) { - (void)CFM_OutnetHeart_Send(Buf,Len,ENUM_OUTNET_EXTEND_RED); - (void)CFM_OutnetHeart_Send(Buf,Len,ENUM_OUTNET_EXTEND_BLUE); + Len = PFM_OutnetHeart_Send(Buf, sizeof(Buf), g_Hardware_boot_com_state.SEB_A_SN, local2x2state); + (void)CFM_OutnetHeart_Send(Buf, Len, ENUM_OUTNET_EXTEND_RED); + Len = PFM_OutnetHeart_Send(Buf, sizeof(Buf), g_Hardware_boot_com_state.SEB_B_SN, local2x2state); + (void)CFM_OutnetHeart_Send(Buf, Len, ENUM_OUTNET_EXTEND_BLUE); } rt = 1u; } @@ -944,4 +968,30 @@ CM_UINT8 CFM_TxOutnetHeart(IN const CM_UINT8 Buf[], IN CM_UINT32 Len) return rt; } +static void s_CCSEB_STATE_CAL(void) +{ + CM_UINT8 ccsebState[4] = {0}; + CM_UINT32 i = 0u, j = 0u; + CM_UINT32 *p_ccseb_sn[4] = { + &g_Hardware_boot_com_state.CCU_B_SN, + &g_Hardware_boot_com_state.CCU_A_SN, + &g_Hardware_boot_com_state.SEB_B_SN, + &g_Hardware_boot_com_state.SEB_A_SN, + }; + for (i = 0u; i < 4u; ++i) + { + if (1u == PFM_CCUSEB_Comstate(i)) + { + ccsebState[i] = 0xaau; + *(p_ccseb_sn[i]) = 0xffffffffu; + } + else + { + ccsebState[i] = 0x55u; + } + } + MSCP_LOG_MSG("rCC = %d, bCC = %d, rSEB = %d, bSEB = %d\n", ccsebState[1], ccsebState[0], ccsebState[3], ccsebState[2]); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CCSTATE, 2U, ccsebState); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_SEBSTATE, 2U, ccsebState + 2U); +} diff --git a/TSCP/src/MSCP/CFM/CFM_Raw.h b/TSCP/src/MSCP/CFM/CFM_Raw.h index 3cd98df..2250cd0 100644 --- a/TSCP/src/MSCP/CFM/CFM_Raw.h +++ b/TSCP/src/MSCP/CFM/CFM_Raw.h @@ -50,7 +50,7 @@ extern "C" CM_UINT32 CFM_RxOutnetRaw(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize); CM_UINT8 CFM_TxOutnetRaw(IN CM_UINT8 Buf[], IN CM_UINT32 Len); - CM_UINT8 CFM_TxOutnetHeart(IN const CM_UINT8 Buf[], IN CM_UINT32 Len); + CM_UINT8 CFM_TxOutnetHeart(ENUM_2x2_STATE_T local2x2state); CM_UINT32 CFM_RxOutnetHeart(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize); #ifdef __cplusplus } diff --git a/TSCP/src/MSCP/CM/CM_Com.c b/TSCP/src/MSCP/CM/CM_Com.c index f85e908..695ffb7 100644 --- a/TSCP/src/MSCP/CM/CM_Com.c +++ b/TSCP/src/MSCP/CM/CM_Com.c @@ -405,20 +405,31 @@ ENUM_CM_RETURN CM_Com_LocalDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT16 BufSize) /*- 鍙橀噺鍒濆鍖 */ ENUM_CM_RETURN rtnValue = ENUM_CM_FALSE; CM_UINT8 buf[COM_UART_BUF_SIZE] = { 0u }; /* 鎺ユ敹缂撳啿鍖 */ - CM_INT32 ret = 0; - CM_UINT8 data = 0u; + CM_INT32 recvNum = 0; + CM_UINT8 data[COM_UART_BUF_SIZE] = { 0u }; CM_UINT32 len = 0u; /* 鏁版嵁闀垮害 */ CM_UINT64 now_time = 0u; CM_UINT64 start_time = CM_GetTick(); + CM_UINT32 i = 0u; /*- 寰幆鎵ц鎺ユ敹绾跨▼ */ do { /*浠庝覆鍙f帴鏀舵暟鎹*/ - ret = CM_ComRev((CM_UINT8)g_COM[1u].Num,&data,(CM_UINT16)1u); + recvNum = CM_ComRev((CM_UINT8)g_COM[1u].Num,data,(CM_UINT16)sizeof(data)); /*- 鏄惁鏀跺埌鏈夋晥鎶ユ枃 */ - if(1 == ret) + if(1 <= recvNum) { - rtnValue = CM_FFFEDecode(&g_COM[1u].prtclFFFEStru,data,buf,&len); + for(i = 0u; i < (CM_UINT32)recvNum; i++) + { + rtnValue = CM_FFFEDecode(&g_COM[1u].prtclFFFEStru,data[i],buf,&len); + if(rtnValue == ENUM_CM_TRUE) + { + break; + } + else + { + } + } /*鎺ユ敹鍒板畬鏁村寘鍐欏叆鎺ユ敹闃熷垪*/ if(ENUM_CM_TRUE == rtnValue) { @@ -433,7 +444,7 @@ ENUM_CM_RETURN CM_Com_LocalDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT16 BufSize) } else { - MSCP_LOG_MSG("COM:1 rx fail %d!!\n",ret); + MSCP_LOG_MSG("COM:1 rx fail %d!!\n",recvNum); /* nothing to do */ } now_time = CM_GetTick(); diff --git a/TSCP/src/MSCP/CM/CM_Time.c b/TSCP/src/MSCP/CM/CM_Time.c index 0ef2e8f..eaa3b98 100644 --- a/TSCP/src/MSCP/CM/CM_Time.c +++ b/TSCP/src/MSCP/CM/CM_Time.c @@ -121,8 +121,17 @@ void CM_Sleep(CM_UINT32 ms) /*绮惧噯寤舵椂鍑芥暟*/ void CM_delayUs(CM_UINT64 us) { - CM_TIMESPEC_T tv; - tv.tv_sec = (time_t)CM_UNSIGNED_LONG_INT_EXP(us / 1000000U); - tv.tv_nsec = (long)CM_UNSIGNED_LONG_INT_EXP(us % 1000000U); - (void)select(0, NULL, NULL, NULL, &tv); + CM_TIMESPEC_T rem; /*- 寤舵椂琚墦鏂悗鐨勫墿浣欐椂闂*/ + CM_INT8 ret = 0; + CM_TIMESPEC_T req = { + .tv_sec = (time_t)(us / 1000000u), + .tv_nsec = (long)((us % 1000000u) * 1000u) + }; + + ret = nanosleep(&req, &rem); + while ((-1 == ret) && (EINTR == errno)) + { + ret = nanosleep(&req, &rem); + req = rem; + } } diff --git a/TSCP/src/MSCP/CM/CM_UDP.c b/TSCP/src/MSCP/CM/CM_UDP.c index 6c1ef2a..bcf75e7 100644 --- a/TSCP/src/MSCP/CM/CM_UDP.c +++ b/TSCP/src/MSCP/CM/CM_UDP.c @@ -170,7 +170,7 @@ ENUM_CM_RETURN CM_UDP_Is_Write_Ready(IN CM_SOCKET sock) * - ENUM_CM_TRUE 鎴愬姛 * - ENUM_CM_FALSE 澶辫触 */ -ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN CM_UINT8 broadFlag) +ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN ENUM_ETHERENT_TYPE broadType) { /*- 鍙橀噺鍒濆鍖 */ CM_SOCKADDR_T addrHost; /* 涓绘満鍦板潃 */ @@ -198,26 +198,21 @@ ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockM retError = CM_Memset((void*) &addrHost, (CM_UINT8)0U, (size_t)(sizeof(CM_SOCKADDR_T)), (size_t)(sizeof(CM_SOCKADDR_T))); addrHost.sin_family = (CM_INT16)AF_INET; addrHost.sin_port = htons(portNumber); -#ifdef WIN32 - addrHost.sin_addr.s_addr = addrIP; - if(1 == broadFlag) + /*缁勬挱鍙戦*/ + switch(broadType) { + case ENUM_UNICAST: /*骞挎挱*/ - setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); - } - else - { + addrHost.sin_addr.s_addr = addrIP; + break; + case ENUM_MULTICAST_SEND: /*鍗曟挱-缁勬挱*/ - } -#else - if(1u == broadFlag) - { /*骞挎挱*/ - addrHost.sin_addr.s_addr = INADDR_ANY; - (void)setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); - } - else - { + addrHost.sin_addr.s_addr = addrIP; + (void)setsockopt(*pSock, IPPROTO_IP, IP_MULTICAST_IF, &addrHost.sin_addr, sizeof(addrHost.sin_addr)); + break; + case ENUM_MULTICAST_RCV: + /*缁勬挱鎺ユ敹*/ if (0u != maddr) { /*缁勬挱*/ @@ -227,25 +222,26 @@ ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockM /*- 閰嶇疆缁勬挱鍦板潃 */ multiCast.imr_interface.s_addr = addrIP; multiCast.imr_multiaddr.s_addr = maddr; - ret = setsockopt(*pSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)(&multiCast), (unsigned int)sizeof(multiCast)); + (void)setsockopt(*pSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)(&multiCast), (unsigned int)sizeof(multiCast)); } else { - /*鍗曟挱*/ - addrHost.sin_addr.s_addr = addrIP; + printf("maddr is null!!\n"); } + break; + case ENUM_BROADCAST: + addrHost.sin_addr.s_addr = INADDR_ANY; + (void)setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); + break; + default: + break; } -#endif ret = (CM_INT32)bind(*pSock, (CM_SOCKADDR*) &addrHost, (unsigned int)sizeof(CM_SOCKADDR)); /*- 缁戝畾鏄惁鎴愬姛 */ if ((ret != CM_SOCKET_ERROR) && (ENUM_CM_TRUE == retError)) { /*- 璁剧疆socket鐨勯樆濉炴ā寮 */ -#ifdef WIN32 - ret = ioctlsocket(*pSock, (long)FIONBIO, (unsigned long *)&isNonBlockMode); -#else/*Linux Vxworks甯哥敤PIOX鏍囧噯*/ ret = ioctl(*pSock, FIONBIO, &isNonBlockMode); -#endif /*- 璁剧疆socket鐨勯樆濉炴ā寮忔槸鍚﹀け璐 */ if (CM_SOCKET_ERROR == ret) { diff --git a/TSCP/src/MSCP/CM/CM_UDP.h b/TSCP/src/MSCP/CM/CM_UDP.h index 3eae6ed..2ebd870 100644 --- a/TSCP/src/MSCP/CM/CM_UDP.h +++ b/TSCP/src/MSCP/CM/CM_UDP.h @@ -28,6 +28,15 @@ extern "C" /** @brief UDP浼犺緭鏃跺垎鍖呯殑澶у皬 */ #define CM_UDP_LAN_MSG_SIZE_MAX (1472) /**< 灞鍩熺綉涓嬫瘡鏉DP娑堟伅澶у皬 */ #define CM_UDP_WAN_MSG_SIZE_MAX (548) /**< 骞垮煙缃戜笅姣忔潯UDP娑堟伅澶у皬 */ +typedef enum +{ + ENUM_DISENABLE = 0u, /**< 绂佺敤 */ + ENUM_UNICAST = 1u, /**< 鍗曟挱 */ + ENUM_BROADCAST = 2u, /**< 骞挎挱 */ + ENUM_MULTICAST_SEND = 3u, /**< 缁勬挱鍙戦 */ + ENUM_MULTICAST_RCV = 4u, /**< 缁勬挱鎺ユ敹 */ + ENUM_COM_TCP = 5u /**< TCP鍗忚 */ +}ENUM_ETHERENT_TYPE; /** * @brief CM_UDP_Init @@ -48,7 +57,7 @@ extern "C" * @param[in] maddr * @return ENUM_CM_RETURN */ - ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN CM_UINT8 broadFlag); + ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN ENUM_ETHERENT_TYPE broadType); /** * @brief CM_UDP_Send_Msg diff --git a/TSCP/src/MSCP/DFM/DFM_DRV.h b/TSCP/src/MSCP/DFM/DFM_DRV.h index c82b049..21c0ad8 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV.h +++ b/TSCP/src/MSCP/DFM/DFM_DRV.h @@ -48,9 +48,6 @@ CM_INT32 DFM_output(CM_UINT8 channel, CM_UINT8 level); /*- 鍒囩郴鎸夐挳 */ CM_INT32 DFM_switchButton(void); -/*- 鐪嬮棬鐙楁寚绀虹伅 */ -void DFM_ledMonitor(CM_UINT8 light); - /*-閫氶亾鐢垫祦鐢靛帇璇诲彇*/ CM_INT32 DFM_Read_ina3321(INOUT CM_INT32* channel_1_shunt, INOUT CM_FLOAT32* channel_1_bus, INOUT CM_INT32* channel_2_shunt, INOUT CM_FLOAT32* channel_2_bus, INOUT CM_INT32* channel_3_shunt, INOUT CM_FLOAT32* channel_3_bus); diff --git a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c index 937124d..696d231 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c +++ b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c @@ -619,18 +619,24 @@ void DFM_Network_Check(void) (void)system("drvtools -link9131 3 >> networkcheck.txt"); FILE *file = fopen(filename, "r"); - while (NULL != fgets(pFileBuf, sizeof(pFileBuf), file)) { - if('w' != pFileBuf[0]) - { - MSCP_LOG_MSG("%s", pFileBuf); - (void)printf("%s", pFileBuf); - } - else - { - /* 涓嶅仛澶勭悊,杩囨护鏃犵敤鏁版嵁 */ - } + if(NULL == file) + { + printf("open networkcheck.txt error\n"); + } + else{ + while (NULL != fgets(pFileBuf, sizeof(pFileBuf), file)) { + if('w' != pFileBuf[0]) + { + MSCP_LOG_MSG("%s", pFileBuf); + (void)printf("%s", pFileBuf); + } + else + { + /* 涓嶅仛澶勭悊,杩囨护鏃犵敤鏁版嵁 */ + } + } + /* 鍏抽棴鏂囦欢 */ + (void)fclose(file); } - /* 鍏抽棴鏂囦欢 */ - (void)fclose(file); return; } diff --git a/TSCP/src/MSCP/MSCP_APP_API.c b/TSCP/src/MSCP/MSCP_APP_API.c index 0316222..66fc894 100644 --- a/TSCP/src/MSCP/MSCP_APP_API.c +++ b/TSCP/src/MSCP/MSCP_APP_API.c @@ -74,14 +74,12 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, case ENUM_MSG_OUTNET_SAFE: /*-< 澶栫綉瀹夊叏閫氫俊 */ /*- 浠庡缃戝畨鍏ㄥ崗璁鍙栧簲鐢ㄦ帴鏀舵姤鏂 */ *pRxLen = Prtcl_OutnetSafe_AppRecv(pSrcName, pSrcLogicID, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 杩斿洖 */ break; case ENUM_MSG_INNET_SAFE: /*-< 鍐呯綉瀹夊叏閫氫俊 */ *pSrcLogicID = 0u; /*- 浠庡唴缃戝畨鍏ㄥ崗璁鍙栧簲鐢ㄦ帴鏀舵姤鏂 */ *pRxLen = Prtcl_InnetSafe_AppRecv(pSrcName, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 杩斿洖 */ break; case ENUM_MSG_INNET_MAINTENANCE: /*-< 杩滅▼閮ㄧ讲鍔熻兘鍐呯綉瀹夊叏閫氫俊 */ @@ -89,7 +87,6 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 浠庡唴缃戝畨鍏ㄥ崗璁鍙栧簲鐢ㄦ帴鏀舵姤鏂 */ *pRxLen = Prtcl_InnetSafe_RmRecv(pSrcName, pLifeTime, rxBuf, rxSize); MSCP_LOG_BIN(rxBuf,*pRxLen); - rt = 1u; /*- 杩斿洖 */ break; case ENUM_MSG_ERROR: /*-< 淇濈暀瀛 */ @@ -103,7 +100,14 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 杩斿洖 */ break; } - + if(0u < *pRxLen) + { + rt = 1u; + } + else + { + rt = 0u; + } } else { diff --git a/TSCP/src/MSCP/MSCP_main.c b/TSCP/src/MSCP/MSCP_main.c index b5f36d0..7dd876b 100644 --- a/TSCP/src/MSCP/MSCP_main.c +++ b/TSCP/src/MSCP/MSCP_main.c @@ -189,6 +189,8 @@ static void MSCP_Init(void) PFM_LOG_SET_STOPTIMER(TSCP_DARK_TSCPINIT); /*- 搴旂敤鐗堟湰鍙峰垵濮嬪寲锛屽繀椤诲湪搴旂敤杞欢鍒濆鍖栧墠 */ PFM_CFG_RegisterVerson_Init(); + /*- 鍒濆鍖栬鍙杕ain id锛屽湪搴旂敤鍒濆鍖栦箣鍓*/ + PFM_CFG_MAINID_Init(); /*- 搴旂敤杞欢鍒濆鍖栧唴缃戝畨鍏ㄥ崗璁弬鏁-浠ュ強閰嶇疆鏂囦欢鍙傛暟 */ APP_API_Data_Init(); PFM_LOG_SET_INIT_STAGE(ENUM_INIT_API_DATA); diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.c b/TSCP/src/MSCP/PFM/PFM_Cfg.c index 73a7fab..31f054d 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.c +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.c @@ -40,11 +40,11 @@ CM_CHAR FS_FILE_PATH[100]; /** 骞冲彴杞欢鐗堟湰鍙 */ -const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 53u }; +const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 16u, 0u, 3u }; /** 椹卞姩杞欢鐗堟湰鍙 */ CM_UINT8 MSCP_DRV_VERION[4] = {0}; /** 涓庣淮鎶や竴浣撴満鎺ュ彛鏂囨。鐗堟湰鍙(鎺ュ彛鏂囨。鍙戠敓鏀瑰彉鏃跺崌绾х増鏈彿) */ -CM_UINT16 TSCP_DOC_VERION[2] = {31u,0u}; +CM_UINT16 TSCP_DOC_VERION[2] = {35u,10u}; /** 鎿嶄綔绯荤粺鐗堟湰鍙 */ CM_UINT8 TSCP_QNX_VERION[10] = {0u}; @@ -62,6 +62,26 @@ STRU_APP_VERSON g_App_Verson; static STRU_APP_CFG_T g_AppCfgInterface; static void s_str2md5(IN const CM_CHAR* str, OUT CM_UINT8 md5[16]); static void PFM_CFG_Check_BoardID(void); +void PFM_CFG_MAINID_Init(void) +{ + g_PFM_Cfg.CPU_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI,"ID","CPU_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.CPU_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + g_PFM_Cfg.BOARD_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI, "ID", "BOARD_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.BOARD_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + PFM_CFG_Check_BoardID(); + g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_4); + g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); + MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ + sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, + sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, + sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); +} /** * @brief 骞冲彴閰嶇疆鏂囦欢鍒濆鍖 */ @@ -78,28 +98,7 @@ void PFM_CFG_Init(void) MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3], __DATE__, __TIME__); (void)printf("MSCP start version:%d.%d.%d.%d \n", MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3]); - /*- 璇诲彇ID淇℃伅 */ - g_PFM_Cfg.CPU_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI,"ID","CPU_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.CPU_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); - g_PFM_Cfg.BOARD_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI, "ID", "BOARD_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.BOARD_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); - /*妫鏌ラ厤缃枃浠禝D涓庣‖浠禝D鏄惁涓鑷*/ - PFM_CFG_Check_BoardID(); - - g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); - - g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); - MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ - sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, - sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, - sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); (void)strcpy(FS_FILE_PATH,g_AppCfgInterface.FS_NAME); (void)strcpy(g_PFM_Cfg.APP_NAME,g_AppCfgInterface.APP_NAME); MSCP_LOG_MSG("FS_NAME:%s\n",FS_FILE_PATH); @@ -171,6 +170,7 @@ void PFM_CFG_Init(void) g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Time = 51002; g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Maintenance = 51004; + g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Assert = 51008; (void)strcpy(g_PFM_Cfg.CPU_CFG[cpuID].IP_2x2,g_AppCfgInterface.CPU[cpuID-1].IP_2x2); g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Data = 52001; g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Time = 52002; @@ -274,7 +274,7 @@ void PFM_CFG_Init(void) g_PFM_Cfg.CC_R_InnetRaw_Port = g_AppCfgInterface.OutNetRed.InnetRaw_Port; g_PFM_Cfg.CC_R_Heart_Port = 53003; - g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port;; + g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port; g_PFM_Cfg.CC_B_OutnetRaw_Port = g_AppCfgInterface.OutNetBlue.OutnetRaw_Port; g_PFM_Cfg.CC_B_InnetRaw_Port = g_AppCfgInterface.OutNetBlue.InnetRaw_Port; g_PFM_Cfg.CC_B_Heart_Port = 53003; diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.h b/TSCP/src/MSCP/PFM/PFM_Cfg.h index d2b7f7a..671801d 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.h +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.h @@ -67,6 +67,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 鎿嶄綔绯荤粺鐗堟湰鍙 */ CM_UINT16 Port_2oo2_Data_App; /**< 搴旂敤2oo2鏁版嵁閫氫俊绔彛 */ CM_UINT16 Port_2oo2_Time; /**< 2oo2鏍℃椂绔彛 */ CM_UINT16 Port_2oo2_Maintenance; /**< 2oo2缁存姢绔彛 */ + CM_UINT16 Port_2oo2_Assert; CM_UINT16 Port_2oo2_2x2_State; /**< 2oo2 2x鐘舵佷氦浜掔鍙 */ CM_CHAR IP_2x2[32]; /**< 2x2閫氫俊IP */ @@ -346,6 +347,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 鎿嶄綔绯荤粺鐗堟湰鍙 */ void PFM_CFG_IfconfigIp(void); void PFM_CFG_SendDarkCfg(void); + void PFM_CFG_MAINID_Init(void); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c b/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c index 6344855..96f715e 100644 --- a/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c +++ b/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c @@ -240,6 +240,8 @@ void PFM_CFC_Monitor(void) { /*- 鏃犲鐞 */ } + /* 鍒ゆ柇鏀跺埌瀹曟満鍚庣殑2鍙栨秷鎭紝绔嬪嵆鎵ц瀹曟満鎿嶄綔*/ + CFM_AssertRecved(); /*- 璁$畻鍠傜嫍鑷冲綋鍓嶇殑鏃堕棿 */ CM_Sleep(WATCH_DOG_POLL_TIME); diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.c b/TSCP/src/MSCP/PFM/PFM_InputOutput.c index dd59bb6..aadef15 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.c +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.c @@ -1,18 +1,18 @@ 锘/** -* @file PFM_InputOutput.c -* @brief Platform Function Module: 杈撳叆杈撳嚭绠$悊 -* @details -* 骞冲彴杈撳叆寰懆鏈熷拰杈撳嚭寰懆鏈熺殑2oo2銆2x2鍔熻兘瀹炵幇 -* @author GT-BU -* @date 2021.02.20 -* @version V1.0 -* @copyright TCT -* @par 淇敼鏃ュ織 -* -*
Date Version Author Description -*
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 -*
-*/ + * @file PFM_InputOutput.c + * @brief Platform Function Module: 杈撳叆杈撳嚭绠$悊 + * @details + * 骞冲彴杈撳叆寰懆鏈熷拰杈撳嚭寰懆鏈熺殑2oo2銆2x2鍔熻兘瀹炵幇 + * @author GT-BU + * @date 2021.02.20 + * @version V1.0 + * @copyright TCT + * @par 淇敼鏃ュ織 + * + *
Date Version Author Description + *
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 + *
+ */ #include "PFM_InputOutput.h" #include "CM_Convert.h" #include "CM_CRC32.h" @@ -32,43 +32,41 @@ #include "DFM_Time.h" #include "PFM_RemoteUpdate.h" /*骞冲彴閫氫俊瀹归噺*/ -#define PFM_INNETRAW_BUFF_SIZE (1024u*1024u*10u) /* 鍐呯綉閫忎紶閫氫俊閫忎紶UDP缂撳啿鍖哄ぇ灏 1M*5锛屽簲鐢ㄨ鐢ㄩ噺涓2M */ -#define PFM_OUTNETRAW_BUFF_SIZE (1024u*1024u*10u) /* 澶栫綉瀹夊叏閫氫俊閫氶亾UDP缂撳啿鍖哄ぇ灏 1M*10锛屽簲鐢ㄨ鐢ㄩ噺涓500k */ +#define PFM_INNETRAW_BUFF_SIZE (1024u * 1024u * 10u) /* 鍐呯綉閫忎紶閫氫俊閫忎紶UDP缂撳啿鍖哄ぇ灏 1M*5锛屽簲鐢ㄨ鐢ㄩ噺涓2M */ +#define PFM_OUTNETRAW_BUFF_SIZE (1024u * 1024u * 10u) /* 澶栫綉瀹夊叏閫氫俊閫氶亾UDP缂撳啿鍖哄ぇ灏 1M*10锛屽簲鐢ㄨ鐢ㄩ噺涓500k */ /* -* 閫氫俊閫氶亾娑夊強鐨勫唴瀹癸細 -* CFM寤虹珛閫氫俊灞傞氶亾锛岄氫俊鎶ユ枃鐨勬帴鏀躲佸彂閫 -* CFM SFM PFM -* 鍐呯綉瀹夊叏閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | 鍐呯綉瀹夊叏鍗忚瑙f瀽銆佸皝瑁 | 2oo2浜ゆ崲锛2x2浜ゆ崲 | -* 鍐呯綉閫忎紶閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | / | 2oo2浜ゆ崲锛2x2浜ゆ崲 | -* 澶栫綉瀹夊叏閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | 澶栫綉瀹夊叏鍗忚瑙f瀽銆佸皝瑁 | 2oo2浜ゆ崲锛2x2浜ゆ崲 | -* 澶栫綉閫忎紶閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | / | 2oo2浜ゆ崲锛2x2浜ゆ崲 | -*/ + * 閫氫俊閫氶亾娑夊強鐨勫唴瀹癸細 + * CFM寤虹珛閫氫俊灞傞氶亾锛岄氫俊鎶ユ枃鐨勬帴鏀躲佸彂閫 + * CFM SFM PFM + * 鍐呯綉瀹夊叏閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | 鍐呯綉瀹夊叏鍗忚瑙f瀽銆佸皝瑁 | 2oo2浜ゆ崲锛2x2浜ゆ崲 | + * 鍐呯綉閫忎紶閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | / | 2oo2浜ゆ崲锛2x2浜ゆ崲 | + * 澶栫綉瀹夊叏閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | 澶栫綉瀹夊叏鍗忚瑙f瀽銆佸皝瑁 | 2oo2浜ゆ崲锛2x2浜ゆ崲 | + * 澶栫綉閫忎紶閫氫俊 | UDP閫氫俊绔彛锛屾帴鏀躲佸彂閫 | / | 2oo2浜ゆ崲锛2x2浜ゆ崲 | + */ -static CM_INT32 s_2x2oo2_app = 1; /* app缂撳啿鍖虹储寮 */ +static CM_INT32 s_2x2oo2_app = 1; /* app缂撳啿鍖虹储寮 */ -static const CM_INT32 s_2x2oo2_InnetSafe = 1; /* 鍐呯綉瀹夊叏閫氫俊鐨勯氶亾绱㈠紩 */ -static const CM_INT32 s_2x2oo2_OutnetSafe = 2; /* 澶栫綉瀹夊叏閫氫俊鐨勯氶亾绱㈠紩 */ -static const CM_INT32 s_2x2oo2_OutnetRaw = 3; /* 澶栫綉閫忎紶閫氶亾鐨勯氶亾绱㈠紩 */ -static const CM_INT32 s_2x2oo2_RemoteUpdate = 4; /* 杩滅▼閮ㄧ讲閫氶亾鐨勯氶亾绱㈠紩 */ -static const CM_INT32 s_2x2oo2_OutnetHeart = 5; /* 澶栫綉蹇冭烦閫氶亾鐨勯氶亾绱㈠紩 */ -static CM_INT32 s_2x2oo2_InnetRaw_num = 0; /* 鍐呯綉閫忎紶閫氶亾鐨勬暟閲 */ -static CM_INT32 s_2x2oo2_InnetRaw_Extend_num = 0;/* 鍐呯綉閫忎紶閫氶亾鐨勬暟閲 */ -static CM_INT32 s_2x2oo2_InnetRaw[INNET_RAW_DOUBLE_PASS_NUM];/* 鍐呯綉閫忎紶閫氶亾鐨勯氶亾绱㈠紩浠 */ -/*2x鍒嗗抚鎺ユ敹涓存椂缂撳啿鍖*/ -CM_UINT8 g_2x2oo2_Frame_TempBuf[SFM_OUTNETSAFE_BUFF_SIZE] = {0u}; +static const CM_INT32 s_2x2oo2_InnetSafe = 1; /* 鍐呯綉瀹夊叏閫氫俊鐨勯氶亾绱㈠紩 */ +static const CM_INT32 s_2x2oo2_OutnetSafe = 2; /* 澶栫綉瀹夊叏閫氫俊鐨勯氶亾绱㈠紩 */ +static const CM_INT32 s_2x2oo2_OutnetRaw = 3; /* 澶栫綉閫忎紶閫氶亾鐨勯氶亾绱㈠紩 */ +static const CM_INT32 s_2x2oo2_RemoteUpdate = 4; /* 杩滅▼閮ㄧ讲閫氶亾鐨勯氶亾绱㈠紩 */ +static const CM_INT32 s_2x2oo2_OutnetHeart = 5; /* 澶栫綉蹇冭烦閫氶亾鐨勯氶亾绱㈠紩 */ +static CM_INT32 s_2x2oo2_InnetRaw_num = 0; /* 鍐呯綉閫忎紶閫氶亾鐨勬暟閲 */ +static CM_INT32 s_2x2oo2_InnetRaw_Extend_num = 0; /* 鍐呯綉閫忎紶閫氶亾鐨勬暟閲 */ +static CM_INT32 s_2x2oo2_InnetRaw[INNET_RAW_DOUBLE_PASS_NUM]; /* 鍐呯綉閫忎紶閫氶亾鐨勯氶亾绱㈠紩浠 */ /* 閫忎紶鏀跺彂閫氶亾鐨勭畝鍖栧畯 */ #define APP_RAW_TX(ch) (g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_InnetRaw[(ch)]]) #define APP_RAW_RX(ch) (g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetRaw[(ch)]]) #define PFM_RAW_TX(ch) (g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetRaw[(ch)]]) #define PFM_RAW_RX(ch) (g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetRaw[(ch)]]) -static CM_UINT32 s_InnetRaw_Mine_AppReadIndex[INNET_RAW_DOUBLE_PASS_NUM]; /**< 搴旂敤鎺ユ敹鍐呯綉閫忎紶娑堟伅鐨勬寚閽 */ -static CM_UINT32 s_InnetRaw_Peer_AppReadIndex[INNET_RAW_DOUBLE_PASS_NUM]; /**< 搴旂敤鎺ユ敹鍐呯綉閫忎紶娑堟伅鐨勬寚閽 */ -static CM_UINT32 s_OutnetRaw_Mine_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉閫忎紶娑堟伅鐨勬寚閽 */ -static CM_UINT32 s_OutnetRaw_Peer_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉閫忎紶娑堟伅鐨勬寚閽 */ -static CM_UINT32 s_OutnetHeart_Mine_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉蹇冭烦娑堟伅鐨勬寚閽 */ -static CM_UINT32 s_OutnetHeart_Peer_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉蹇冭烦娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_InnetRaw_Mine_AppReadIndex[INNET_RAW_DOUBLE_PASS_NUM]; /**< 搴旂敤鎺ユ敹鍐呯綉閫忎紶娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_InnetRaw_Peer_AppReadIndex[INNET_RAW_DOUBLE_PASS_NUM]; /**< 搴旂敤鎺ユ敹鍐呯綉閫忎紶娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_OutnetRaw_Mine_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉閫忎紶娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_OutnetRaw_Peer_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉閫忎紶娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_OutnetHeart_Mine_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉蹇冭烦娑堟伅鐨勬寚閽 */ +static CM_UINT32 s_OutnetHeart_Peer_AppReadIndex; /**< 搴旂敤鎺ユ敹澶栫綉蹇冭烦娑堟伅鐨勬寚閽 */ /*璁板綍绾㈣摑缃戦氫俊璁惧涓存椂buf*/ static CM_UINT16 s_rciRedTempBuf[16u * 18u] = {0u}; @@ -88,8 +86,8 @@ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSi /* 杈撳叆闃舵鐨2x2鍚屾 */ static void s_input_2x2sync(void); /** -* @brief 杈撳叆闃舵鐨2x2鍚屾 -*/ + * @brief 杈撳叆闃舵鐨2x2鍚屾 + */ static void s_input_2x2sync(void) { /*- 鍙橀噺鍒濆鍖 */ @@ -106,27 +104,27 @@ static void s_input_2x2sync(void) { /*- 灏嗘暣涓氫俊闃熷垪鍙戦佸埌瀵圭郴 */ SFM_2x2_Send(g_2x2oo2_rx[g_2x2oo2_base][i].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][i].mine_len, (ENUM_2x2_MSG_T)(i)); - SFM_2x2_Send(g_2x2oo2_rx[g_2x2oo2_base][i].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][i].peer_len, (ENUM_2x2_MSG_T)(g_2x2oo2_data_num+i)); + SFM_2x2_Send(g_2x2oo2_rx[g_2x2oo2_base][i].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][i].peer_len, (ENUM_2x2_MSG_T)(g_2x2oo2_data_num + i)); } else - { - MSCP_LOG_MSG("(CM_BOOL)g_2x2oo2_rx[g_2x2oo2_base][%d].b_2x2_Enable = %d\n", i,(CM_BOOL)g_2x2oo2_rx[g_2x2oo2_base][i].b_2x2_Enable); - } + { + MSCP_LOG_MSG("(CM_BOOL)g_2x2oo2_rx[g_2x2oo2_base][%d].b_2x2_Enable = %d\n", i, (CM_BOOL)g_2x2oo2_rx[g_2x2oo2_base][i].b_2x2_Enable); + } } } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } } /** -* @brief 杈撳叆闃舵鐨2oo2浜ゆ崲 -*/ + * @brief 杈撳叆闃舵鐨2oo2浜ゆ崲 + */ static void s_input_2oo2sync(void) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT64 templog[20]; + CM_UINT64 templog[20]; CM_INT32 i = 0; /* 寰幆鍙橀噺 */ CM_UINT8 ret = 0; CM_UINT64 syn2oo2time = 0u; @@ -142,34 +140,34 @@ static void s_input_2oo2sync(void) g_2x2oo2_rx[g_2x2oo2_base][i].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][i].buf_size, ENUM_2oo2_INPUT_EX); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } } templog[0] = CM_GetTick(); /*- @alias 鍗忚杩囨护2鍙栭噸澶嶆暟鎹 */ - if(1 == g_PFM_Cfg.CPU_ID) + if (1 == g_PFM_Cfg.CPU_ID) { - ret = SFM_OutProtclTwoRepeat(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len, - g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf,&g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len); + ret = SFM_OutProtclTwoRepeat(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len, + g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf, &g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len); } else { - ret = SFM_OutProtclTwoRepeat(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf,g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len, - g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, &g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); + ret = SFM_OutProtclTwoRepeat(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len, + g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, &g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); } CM_ASSERT(ret == 1, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); templog[1] = CM_GetTick(); - syn2oo2time = (templog[1] - templog[0])/1000u; - MSCP_LOG_MSG("s_input_2oo2sync 2oo2syntime = %lld\n",syn2oo2time); + syn2oo2time = (templog[1] - templog[0]) / 1000u; + MSCP_LOG_MSG("s_input_2oo2sync 2oo2syntime = %lld\n", syn2oo2time); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PFMINPUTOUTPUT_INPUT2oo2SYNC, 8U, &syn2oo2time); } /** -* @brief 寰懆鏈熸帶鍒跺垵濮嬪寲 -*/ + * @brief 寰懆鏈熸帶鍒跺垵濮嬪寲 + */ void PFM_Init(void) { /*- 鍙橀噺鍒濆鍖 */ @@ -181,7 +179,7 @@ void PFM_Init(void) s_2x2oo2_app = 1; /*- @alias 鍒濆鍖栧唴缃戝畨鍏ㄩ氫俊鍜屽缃戝畨鍏ㄩ氫俊閰嶇疆 */ - for (base = 0; base < 2; base++)/*- 閬嶅巻鍙岀紦鍐插尯 */ + for (base = 0; base < 2; base++) /*- 閬嶅巻鍙岀紦鍐插尯 */ { /*- 鍒濆鍖栧唴缃戝畨鍏ㄦ帴鏀堕厤缃 */ g_2x2oo2_rx[base][s_2x2oo2_InnetSafe].b_2oo2_Enable = (CM_UINT32)CM_TRUE; @@ -201,7 +199,7 @@ void PFM_Init(void) g_2x2oo2_rx[base][s_2x2oo2_OutnetRaw].buf_size = (CM_UINT32)PFM_OUTNETRAW_BUFF_SIZE; rt = CM_Mutex_Init(&g_2x2oo2_rx[base][s_2x2oo2_OutnetRaw].app_mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - /*- 鍒濆鍖栬繙绋嬮儴缃插唴缃戝畨鍏ㄦ帴鏀堕厤缃 */ + /*- 鍒濆鍖栬繙绋嬮儴缃插唴缃戝畨鍏ㄦ帴鏀堕厤缃 */ g_2x2oo2_rx[base][s_2x2oo2_RemoteUpdate].b_2oo2_Enable = (CM_UINT32)CM_TRUE; g_2x2oo2_rx[base][s_2x2oo2_RemoteUpdate].b_2x2_Enable = (CM_UINT32)CM_FALSE; g_2x2oo2_rx[base][s_2x2oo2_RemoteUpdate].buf_size = (CM_UINT32)SFM_INNETSAFE_RM_BUFF_SIZE; @@ -213,7 +211,6 @@ void PFM_Init(void) g_2x2oo2_rx[base][s_2x2oo2_OutnetHeart].buf_size = (CM_UINT32)SFM_INNETSAFE_BUFF_SIZE; rt = CM_Mutex_Init(&g_2x2oo2_rx[base][s_2x2oo2_OutnetHeart].app_mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_19); - /*- 鍒濆鍖栧唴缃戝畨鍏ㄥ彂閫侀厤缃 */ g_2x2oo2_tx[base][s_2x2oo2_InnetSafe].buf_size = (CM_UINT32)SFM_INNETSAFE_BUFF_SIZE; @@ -233,150 +230,150 @@ void PFM_Init(void) g_2x2oo2_tx[base][s_2x2oo2_OutnetRaw].buf_size = (CM_UINT32)PFM_OUTNETRAW_BUFF_SIZE; rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_OutnetRaw].mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_7); - /*- 鍒濆鍖栬繙绋嬮儴缃插唴缃戝畨鍏ㄥ彂閫侀厤缃 */ + /*- 鍒濆鍖栬繙绋嬮儴缃插唴缃戝畨鍏ㄥ彂閫侀厤缃 */ g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].buf_size = (CM_UINT32)SFM_INNETSAFE_RM_BUFF_SIZE; g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].b_2oo2_Enable = (CM_UINT32)CM_TRUE; g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].b_2x2_Enable = (CM_UINT32)CM_FALSE; rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_17); /*- 鍒濆鍖栧缃戝績璺充俊鎭彂閫侀厤缃 */ - g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].b_2oo2_Enable = (CM_UINT32)CM_TRUE; + g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].b_2oo2_Enable = (CM_UINT32)CM_FALSE; g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].b_2x2_Enable = (CM_UINT32)CM_FALSE; - g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].buf_size = (CM_UINT32)SFM_INNETSAFE_BUFF_SIZE; + g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].buf_size = (CM_UINT32)0u; rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_20); - } - + } + /*- @alias 鍒濆鍖栧唴缃戦忎紶閫氶亾閰嶇疆 */ s_2x2oo2_InnetRaw_num = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Num; s_2x2oo2_InnetRaw_Extend_num = g_PFM_Cfg.Local_Cfg.Port_Innet_Raw_Extend_Num; - for (base = 0; base < 2; base++)/* 閬嶅巻鍙岀紦鍐插尯 */ + for (base = 0; base < 2; base++) /* 閬嶅巻鍙岀紦鍐插尯 */ { - for (i = 1; i <= (s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num); i++)/* 閬嶅巻鎵鏈夐忎紶閫氶亾 */ + for (i = 1; i <= (s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num); i++) /* 閬嶅巻鎵鏈夐忎紶閫氶亾 */ { /* 鍒濆鍖栭忎紶閫氶亾绱㈠紩 */ s_2x2oo2_InnetRaw[i] = s_2x2oo2_OutnetHeart + i; - /* 鍒濆鍖栨帴鏀堕氶亾閰嶇疆 -鍙湁鍏ㄩ儴鏁版嵁闇瑕佷簩鍙栵紝鏃堕棿鎴充笉闇瑕2鍙*/ - if((CM_UINT16)0x55u == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) - { - if((CM_UINT16)0xAAu == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE) - { - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_TRUE; - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)0u; - } - else - { - /*闇瑕佷簩鍙栨椂闂存埑锛屼笉闇瑕佸叏閮ㄦ暟鎹簩鍙*/ - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; - /*杈呭姪淇℃伅-缂撳啿鍖洪暱搴﹀垎閰*/ - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)CFM_INNET_RAW_MSG_NUM_MAX * 12u; - } - g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_TRUE; - } - else - { - /*璇ラ氶亾閫忎紶鏁版嵁鍧囦笉闇瑕佷簩鍙*/ - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)0u; - g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; - } + /* 鍒濆鍖栨帴鏀堕氶亾閰嶇疆 -鍙湁鍏ㄩ儴鏁版嵁闇瑕佷簩鍙栵紝鏃堕棿鎴充笉闇瑕2鍙*/ + if ((CM_UINT16)0x55u == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2oo2_RAW) + { + if ((CM_UINT16)0xAAu == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].TIME_STAMP_ENABLE) + { + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_TRUE; + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)0u; + } + else + { + /*闇瑕佷簩鍙栨椂闂存埑锛屼笉闇瑕佸叏閮ㄦ暟鎹簩鍙*/ + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; + /*杈呭姪淇℃伅-缂撳啿鍖洪暱搴﹀垎閰*/ + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)CFM_INNET_RAW_MSG_NUM_MAX * 12u; + } + g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_TRUE; + } + else + { + /*璇ラ氶亾閫忎紶鏁版嵁鍧囦笉闇瑕佷簩鍙*/ + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].helpinfo_buf_size = (CM_UINT32)0u; + g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2oo2_Enable = (CM_UINT32)CM_FALSE; + } - if((CM_UINT16)0x55u == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2x2_RAW) - { - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_TRUE; - g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_TRUE; - } - else - { - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_FALSE; - g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_FALSE; - } + if ((CM_UINT16)0x55u == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].INNET_2x2_RAW) + { + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_TRUE; + g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_TRUE; + } + else + { + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_FALSE; + g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].b_2x2_Enable = (CM_UINT32)CM_FALSE; + } - g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].buf_size = (CM_UINT32)PFM_INNETRAW_BUFF_SIZE; - rt = CM_Mutex_Init(&g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].app_mutex); - CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_8); - /* 鍒濆鍖栧彂閫侀氶亾閰嶇疆 */ - g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].buf_size = (CM_UINT32)PFM_INNETRAW_BUFF_SIZE; - rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].mutex); - CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_9); + g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].buf_size = (CM_UINT32)PFM_INNETRAW_BUFF_SIZE; + rt = CM_Mutex_Init(&g_2x2oo2_rx[base][s_2x2oo2_InnetRaw[(i)]].app_mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_8); + /* 鍒濆鍖栧彂閫侀氶亾閰嶇疆 */ + g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].buf_size = (CM_UINT32)PFM_INNETRAW_BUFF_SIZE; + rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_InnetRaw[(i)]].mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_9); } } /*- 纭畾閫氶亾鎬绘暟 = 鍥哄畾閫氶亾鏁 + 鍐呯綉閫忎紶閫氶亾鏁 + 鍐呯綉閫忎紶鎵╁睍閫氶亾鏁 */ g_2x2oo2_data_num = s_2x2oo2_OutnetHeart + s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num; /*- @alias 缂撳啿鍖哄唴瀛樺垎閰 */ - for (base = 0; base < 2; base++)/* 閬嶅巻鍙岀紦鍐插尯 */ + for (base = 0; base < 2; base++) /* 閬嶅巻鍙岀紦鍐插尯 */ { - for (i = 1; i <= g_2x2oo2_data_num; i++)/*閬嶅巻鎵鏈夐氶亾*/ + for (i = 1; i <= g_2x2oo2_data_num; i++) /*閬嶅巻鎵鏈夐氶亾*/ { /* 涓烘帴鏀堕氶亾鍒嗛厤鍐呭瓨 */ - if(0u < g_2x2oo2_rx[base][i].buf_size) - { - g_2x2oo2_rx[base][i].p_mine_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); - CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_mine_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_10); - } - else - { - /*- 鏃犲鐞 */ - } + if (0u < g_2x2oo2_rx[base][i].buf_size) + { + g_2x2oo2_rx[base][i].p_mine_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); + CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_mine_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_10); + } + else + { + /*- 鏃犲鐞 */ + } if (CM_TRUE == (CM_BOOL)g_2x2oo2_rx[base][i].b_2oo2_Enable) { - g_2x2oo2_rx[base][i].p_peer_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); + g_2x2oo2_rx[base][i].p_peer_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_peer_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_11); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } if (CM_TRUE == (CM_BOOL)g_2x2oo2_rx[base][i].b_2x2_Enable) { - g_2x2RcvMaxNum[base] = g_2x2oo2_data_num*base + i;/*璁板綍2x鍙岀紦鍐插尯鏈澶у簭鍙*/ - g_2x2oo2_rx[base][i].p_rmt_mine_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); + g_2x2RcvMaxNum[base] = g_2x2oo2_data_num * base + i; /*璁板綍2x鍙岀紦鍐插尯鏈澶у簭鍙*/ + g_2x2oo2_rx[base][i].p_rmt_mine_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_rmt_mine_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_12); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } if ((CM_TRUE == (CM_BOOL)g_2x2oo2_rx[base][i].b_2oo2_Enable) && (CM_TRUE == (CM_BOOL)g_2x2oo2_rx[base][i].b_2x2_Enable)) { - g_2x2oo2_rx[base][i].p_rmt_peer_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); + g_2x2oo2_rx[base][i].p_rmt_peer_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].buf_size); CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_rmt_peer_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_13); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } /*鍒濆鍖栬緟鍔╀俊鎭氶亾缂撳啿鍖*/ if (0u < g_2x2oo2_rx[base][i].helpinfo_buf_size) { - g_2x2oo2_rx[base][i].p_mine_helpinfo_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].helpinfo_buf_size); - CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_mine_helpinfo_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); - g_2x2oo2_rx[base][i].p_peer_helpinfo_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].helpinfo_buf_size); - CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_peer_helpinfo_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_15); + g_2x2oo2_rx[base][i].p_mine_helpinfo_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].helpinfo_buf_size); + CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_mine_helpinfo_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); + g_2x2oo2_rx[base][i].p_peer_helpinfo_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_rx[base][i].helpinfo_buf_size); + CM_ASSERT(NULL != g_2x2oo2_rx[base][i].p_peer_helpinfo_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_15); } else { - /*- 鏃犲鐞 */ + /*- 鏃犲鐞 */ } /* 涓哄彂閫侀氶亾鍒嗛厤鍐呭瓨 */ - if(0u < g_2x2oo2_tx[base][i].buf_size) + if (0u < g_2x2oo2_tx[base][i].buf_size) { - g_2x2oo2_tx[base][i].p_buf = (CM_UINT8*)CM_Malloc((CM_SIZE_T)g_2x2oo2_tx[base][i].buf_size); - CM_ASSERT(NULL != g_2x2oo2_tx[base][i].p_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_16); + g_2x2oo2_tx[base][i].p_buf = (CM_UINT8 *)CM_Malloc((CM_SIZE_T)g_2x2oo2_tx[base][i].buf_size); + CM_ASSERT(NULL != g_2x2oo2_tx[base][i].p_buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_16); } else { - /*- 鏃犲鐞 */ + /*- 鏃犲鐞 */ } } } } /** -* @brief 鍙岀紦鍐插垏鎹 -*/ + * @brief 鍙岀紦鍐插垏鎹 + */ void PFM_BufSwich(void) { /*- 鍙橀噺鍒濆鍖 */ @@ -388,19 +385,19 @@ void PFM_BufSwich(void) /*鍐呯綉瀹夊叏閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].mine_len = 0u; - g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].peer_len = 0u; + g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].peer_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].rmt_mine_len = 0u; - g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].rmt_peer_len = 0u; - /*澶栫綉瀹夊叏閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ + g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetSafe].rmt_peer_len = 0u; + /*澶栫綉瀹夊叏閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].mine_len = 0u; - g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].peer_len = 0u; + g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].peer_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].rmt_mine_len = 0u; - g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].rmt_peer_len = 0u; + g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetSafe].rmt_peer_len = 0u; - /*澶栫綉閫忎紶閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ + /*澶栫綉閫忎紶閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].peer_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].mine_len = 0u; - g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].app_index_log = 0u;/*娓呯┖鏈懆鏈熷钩鍙板強灏嗚褰曠殑鏍囧織*/ + g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].app_index_log = 0u; /*娓呯┖鏈懆鏈熷钩鍙板強灏嗚褰曠殑鏍囧織*/ /*杩滅▼閮ㄧ讲閫氶亾閫氶亾-缂撳啿鍖洪暱搴︽竻闆*/ g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_RemoteUpdate].mine_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_RemoteUpdate].peer_len = 0u; @@ -409,18 +406,18 @@ void PFM_BufSwich(void) g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart].mine_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart].peer_len = 0u; g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart].rmt_mine_len = 0u; - g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart].rmt_peer_len = 0u; + g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart].rmt_peer_len = 0u; g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].app_index_log = 0u; /*- @alias 鍐呯綉閫忎紶閫氶亾闀垮害褰0 */ for (i = 1; i <= (s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num); i++) { - APP_RAW_RX(i).mine_len = 0u; - APP_RAW_RX(i).mine_helpinfo_len = 0u; - APP_RAW_RX(i).peer_len = 0u; - APP_RAW_RX(i).peer_helpinfo_len = 0u; - PFM_RAW_RX(i).app_index_log = 0u; - - /*- @alias 鍐呯綉閫忎紶閫氶亾鐨勮绱㈠紩褰0 */ + APP_RAW_RX(i).mine_len = 0u; + APP_RAW_RX(i).mine_helpinfo_len = 0u; + APP_RAW_RX(i).peer_len = 0u; + APP_RAW_RX(i).peer_helpinfo_len = 0u; + PFM_RAW_RX(i).app_index_log = 0u; + + /*- @alias 鍐呯綉閫忎紶閫氶亾鐨勮绱㈠紩褰0 */ s_InnetRaw_Mine_AppReadIndex[i] = 0u; s_InnetRaw_Peer_AppReadIndex[i] = 0u; } @@ -433,8 +430,8 @@ void PFM_BufSwich(void) CM_RE_ASSERT(g_2x2oo2_base != s_2x2oo2_app, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); PFM_CFC_Check(2); - /*- @alias 澶栫綉閫忎紶閫氶亾鐨勮绱㈠紩褰0 */ - s_OutnetRaw_Mine_AppReadIndex = 0u; + /*- @alias 澶栫綉閫忎紶閫氶亾鐨勮绱㈠紩褰0 */ + s_OutnetRaw_Mine_AppReadIndex = 0u; s_OutnetRaw_Peer_AppReadIndex = 0u; s_OutnetHeart_Mine_AppReadIndex = 0; @@ -442,35 +439,36 @@ void PFM_BufSwich(void) } /** -* @brief 杈撳叆寰懆鏈熷鐞 -* @details -* 杈撳叆寰懆鏈熺殑2oo2銆2x2澶勭悊锛 -* 骞冲彴鏁版嵁鎺ユ敹锛 -* 2x2鍙戦侊紱 -* 鏈湴杈撳叆鏁版嵁2oo2浜ゆ崲鍜屾瘮杈冿紱 -* 杈撳叆闃舵2x2澶勭悊锛 -* 浜や粯鍗忚閫傞厤灞傚鐞嗐 -*/ + * @brief 杈撳叆寰懆鏈熷鐞 + * @details + * 杈撳叆寰懆鏈熺殑2oo2銆2x2澶勭悊锛 + * 骞冲彴鏁版嵁鎺ユ敹锛 + * 2x2鍙戦侊紱 + * 鏈湴杈撳叆鏁版嵁2oo2浜ゆ崲鍜屾瘮杈冿紱 + * 杈撳叆闃舵2x2澶勭悊锛 + * 浜や粯鍗忚閫傞厤灞傚鐞嗐 + */ void PFM_InputProc(void) { /*- 鍙橀噺鍒濆鍖 */ CM_INT32 i = 0; - ENUM_2x2_STATE_T p_state_2x2 = ENUM_2x2_SHUTDOWN; /* 瀵圭郴鐑鐘舵 */ + ENUM_2x2_STATE_T p_state_2x2 = ENUM_2x2_SHUTDOWN; /* 瀵圭郴鐑鐘舵 */ + ENUM_2x2_STATE_T localstate = SFM_2x2_GetLocal2x2State(); /* 鏈満2x2鐘舵 */ /************************骞冲彴鏁版嵁鎺ユ敹*************************/ /*- 澶栫綉瀹夊叏鏁版嵁鎺ユ敹 */ PFM_CFC_Check(26); g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len = (CM_UINT32)SFM_RxOutnetSafe(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_size); - MSCP_LOG_MSG("g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len = %d\n",g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); + MSCP_LOG_MSG("g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len = %d\n", g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); /*鍒ゆ柇澶栫綉閫忎紶浣胯兘寮鍏*/ - if((CM_UINT32)0x55u == g_PFM_Cfg.M_OutnetRaw_Enable) + if ((CM_UINT32)0x55u == g_PFM_Cfg.M_OutnetRaw_Enable) { - /*- 澶栫綉閫忎紶鏁版嵁鎺ユ敹 */ - g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].mine_len = CFM_RxOutnetRaw(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size); - } + /*- 澶栫綉閫忎紶鏁版嵁鎺ユ敹 */ + g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].mine_len = CFM_RxOutnetRaw(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_size); + } else { - /*澶栫綉閫忎紶鏈娇鑳*/ + /*澶栫綉閫忎紶鏈娇鑳*/ } /*- 澶栫綉蹇冭烦鏁版嵁鎺ユ敹 */ g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].mine_len = CFM_RxOutnetHeart(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].buf_size); @@ -478,25 +476,21 @@ void PFM_InputProc(void) PFM_CFC_Check(27); g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].mine_len = (CM_UINT32)SFM_RxInnetSafe(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_size); PFM_CFC_Check(28); - g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len = (CM_UINT32)SFM_RxInnetSafeRm(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_size); + g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len = (CM_UINT32)SFM_RxInnetSafeRm(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_size); PFM_CFC_Check(29); /*- @alias 鍐呯綉閫忎紶鏁版嵁鎺ユ敹 */ for (i = 1; i <= s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num; i++) { - PFM_RAW_RX(i).mine_len = CFM_RxInnetRaw_COM(i, PFM_RAW_RX(i).p_mine_buf, (CM_UINT32)PFM_RAW_RX(i).buf_size,/*閫忎紶鏁版嵁*/ - PFM_RAW_RX(i).p_mine_helpinfo_buf,&PFM_RAW_RX(i).mine_helpinfo_len, /*閫忎紶鏁版嵁鏈満杈呭姪淇℃伅*/ - PFM_RAW_RX(i).p_peer_helpinfo_buf,&PFM_RAW_RX(i).peer_helpinfo_len, /*閫忎紶鏁版嵁涓存満杈呭姪淇℃伅*/ - (CM_UINT32)PFM_RAW_RX(i).helpinfo_buf_size);/*閫忎紶鏁版嵁缂撳啿鍖洪暱搴*/ - MSCP_LOG_MSG("[%d]:APP_LastReadIndex:%d,T = %d us\n", i, PFM_RAW_RX(i).app_index_log,NOW_USED_TIME); + PFM_RAW_RX(i).mine_len = CFM_RxInnetRaw_COM(i, PFM_RAW_RX(i).p_mine_buf, (CM_UINT32)PFM_RAW_RX(i).buf_size, /*閫忎紶鏁版嵁*/ + PFM_RAW_RX(i).p_mine_helpinfo_buf, &PFM_RAW_RX(i).mine_helpinfo_len, /*閫忎紶鏁版嵁鏈満杈呭姪淇℃伅*/ + PFM_RAW_RX(i).p_peer_helpinfo_buf, &PFM_RAW_RX(i).peer_helpinfo_len, /*閫忎紶鏁版嵁涓存満杈呭姪淇℃伅*/ + (CM_UINT32)PFM_RAW_RX(i).helpinfo_buf_size); /*閫忎紶鏁版嵁缂撳啿鍖洪暱搴*/ + MSCP_LOG_MSG("[%d]:APP_LastReadIndex:%d,T = %d us\n", i, PFM_RAW_RX(i).app_index_log, NOW_USED_TIME); } PFM_CFC_Check(30); /*- 澶栫綉蹇冭烦鏁版嵁鍙戦佸墠缁勫寘*/ - g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].buf_len = PFM_OutnetHeart_Send(); - /*- 鍙戦佸缃戝績璺虫暟鎹*/ - (void)CFM_TxOutnetHeart(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].buf_len); - /*- 娓呯┖蹇冭烦鏁版嵁寰楅暱搴(涓诲閮芥竻绌) */ - g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetHeart].buf_len = 0; + (void)CFM_TxOutnetHeart(localstate); PFM_CFC_Check(31); /*棰勭暀*/ /*************************鏈湴杈撳叆鏁版嵁2oo2浜ゆ崲鍜屾瘮杈*************************/ MSCP_LOG_MSG("timecurr 1 Input Recv = %lld us\n", NOW_USED_TIME); @@ -507,9 +501,9 @@ void PFM_InputProc(void) s_input_2oo2sync(); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } /*************************2x2鍙戦*************************/ MSCP_LOG_MSG("timecurr 2 Input 2oo2 = %lld us\n", NOW_USED_TIME); @@ -521,9 +515,9 @@ void PFM_InputProc(void) (void)s_input_2x2sync(); } else - { - /*- 鏃犲鐞 */ - } + { + /*- 鏃犲鐞 */ + } MSCP_LOG_MSG("timecurr 3 Input 2x2Send = %lld us\n", NOW_USED_TIME); /*************************杈撳叆闃舵2x2澶勭悊*************************/ @@ -537,7 +531,7 @@ void PFM_InputProc(void) else { /*- 鏇存柊鎺у埗娴佺姸鎬 */ - PFM_CFC_Check(33); + PFM_CFC_Check(33); PFM_CFC_Check(34); PFM_CFC_Check(35); PFM_CFC_Check(36); @@ -549,49 +543,47 @@ void PFM_InputProc(void) /*************************浜や粯鍗忚閫傞厤灞傚鐞*************************/ /*- 鑾峰彇瀵圭郴鐑鐘舵 */ p_state_2x2 = SFM_2x2_GetPartner2x2State(); - MSCP_LOG_MSG("SFM_Write bef T = %d us\n",NOW_USED_TIME); + MSCP_LOG_MSG("SFM_Write bef T = %d us\n", NOW_USED_TIME); /*- @alias 灏嗗懆鏈熻緭鍏ユ暟鎹氦浠樼粰鍗忚閫傞厤灞傚鐞 */ if (MSCP_CPU_1 == g_PFM_Cfg.CPU_ID) { - SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len, ENUM_INNET_PURPLE); - SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].peer_len, ENUM_INNET_GREEN); - - + SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len, ENUM_INNET_PURPLE); + SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].peer_len, ENUM_INNET_GREEN); + if (ENUM_2x2_MASTER == p_state_2x2) { /* 瀵圭郴涓轰富绯伙紝鍙娇鐢ㄤ富绯昏緭鍏 */ PFM_CFC_Check(40); SFM_WriteInnetSafeInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_rmt_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].rmt_mine_len, ENUM_INNET_GREEN); - + PFM_CFC_Check(41); SFM_WriteInnetSafeInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_rmt_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].rmt_peer_len, ENUM_INNET_PURPLE); - + PFM_CFC_Check(42); 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); } else - { + { /* 瀵圭郴涓嶆槸涓伙紝浣跨敤鑷繁鐨勮緭鍏 */ PFM_CFC_Check(40); SFM_WriteInnetSafeInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].mine_len, ENUM_INNET_GREEN); - + PFM_CFC_Check(41); SFM_WriteInnetSafeInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_InnetSafe].peer_len, ENUM_INNET_PURPLE); - + PFM_CFC_Check(42); s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); PFM_CFC_Check(43); s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len); - } + } } else { - SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].peer_len, ENUM_INNET_GREEN); - SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len, ENUM_INNET_PURPLE); - - + SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].peer_len, ENUM_INNET_GREEN); + SFM_WriteInnetSafeRmInput(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].mine_len, ENUM_INNET_PURPLE); + if (ENUM_2x2_MASTER == p_state_2x2) { /* 瀵圭郴涓轰富绯伙紝鍙娇鐢ㄤ富绯昏緭鍏 */ @@ -603,7 +595,6 @@ 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); - } else { @@ -616,64 +607,63 @@ void PFM_InputProc(void) s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_peer_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].peer_len); PFM_CFC_Check(43); s_RxOutnetToSFM(g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_mine_buf, g_2x2oo2_rx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].mine_len); - } - } + } + } MSCP_LOG_MSG("timecurr 5 Input SetPro = %lld us\n", NOW_USED_TIME); } /** -* @brief 杈撳嚭寰懆鏈熷鐞 -* @details -* 杈撳嚭寰懆鏈熺殑2oo2銆2x2澶勭悊锛 -* 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹紱 -* 鐢熸垚杈撳嚭鏍¢獙甯э紱 -* 2oo2杈撳嚭姣旇緝锛 -* 杈撳嚭闃舵2x2澶勭悊锛 -* 骞冲彴鏁版嵁鍙戦併 -*/ + * @brief 杈撳嚭寰懆鏈熷鐞 + * @details + * 杈撳嚭寰懆鏈熺殑2oo2銆2x2澶勭悊锛 + * 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹紱 + * 鐢熸垚杈撳嚭鏍¢獙甯э紱 + * 2oo2杈撳嚭姣旇緝锛 + * 杈撳嚭闃舵2x2澶勭悊锛 + * 骞冲彴鏁版嵁鍙戦併 + */ void PFM_OutputProc(void) { /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 check_2oo2_Len = 0; /* 杈撳嚭鏍¢獙甯ч暱搴 */ - CM_UINT8 check_2oo2_Buf[500] = { 0u }; /* 杈撳嚭鏍¢獙甯ф暟缁 */ - CM_INT32 check_2x2_Len = 0; /* 杈撳嚭鏍¢獙甯ч暱搴 */ - CM_UINT8 check_2x2_Buf[500] = { 0u }; /* 杈撳嚭鏍¢獙甯ф暟缁 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_UINT8 buf_peer[500] = { 0u }; /* 閭绘満鎺ユ敹缂撳啿鍖 */ - CM_INT32 ret = 0; /* 涓存椂鍙橀噺 */ + CM_INT32 check_2oo2_Len = 0; /* 杈撳嚭鏍¢獙甯ч暱搴 */ + CM_UINT8 check_2oo2_Buf[500] = {0u}; /* 杈撳嚭鏍¢獙甯ф暟缁 */ + CM_INT32 check_2x2_Len = 0; /* 杈撳嚭鏍¢獙甯ч暱搴 */ + CM_UINT8 check_2x2_Buf[500] = {0u}; /* 杈撳嚭鏍¢獙甯ф暟缁 */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_UINT8 buf_peer[500] = {0u}; /* 閭绘満鎺ユ敹缂撳啿鍖 */ + CM_INT32 ret = 0; /* 涓存椂鍙橀噺 */ ENUM_2x2_STATE_T state_2x2 = ENUM_2x2_SHUTDOWN; /* 鏈郴鐑鐘舵 */ - /*########################浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹########################*/ /*- 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹 */ PFM_CFC_Check(5); g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_len = (CM_INT32)SFM_ReadInnetCodedOutput(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_size); - g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len = (CM_INT32)SFM_ReadInnetRmCodedOutput(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_size); + g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len = (CM_INT32)SFM_ReadInnetRmCodedOutput(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_size); PFM_CFC_Check(6); g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_len = (CM_INT32)SFM_ReadOutnetCodedOutput(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_size); /*########################鐢熸垚杈撳嚭鏍¢獙甯########################*/ - PFM_CFC_Check(7); + PFM_CFC_Check(7); /*- 鏄惁寮鍚簡2oo2鍔熻兘鎴2x2鍔熻兘 */ if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { /*- 鐢熸垚杈撳嚭鏍¢獙甯 */ - check_2oo2_Len = s_2oo2OutputCheckFrame_Pack(check_2oo2_Buf, (CM_UINT32)sizeof(check_2oo2_Buf)); + check_2oo2_Len = s_2oo2OutputCheckFrame_Pack(check_2oo2_Buf, (CM_UINT32)sizeof(check_2oo2_Buf)); } else - { - /*- 鏃犲鐞 */ - } - PFM_CFC_Check(8); - if(0x55u == g_PFM_Cfg.M_2x2_Enable) { - /*- 鐢熸垚杈撳嚭鏍¢獙甯 */ - check_2x2_Len = s_2x2OutputCheckFrame_Pack(check_2x2_Buf, (CM_UINT32)sizeof(check_2x2_Buf)); - } - else - { - /*- 鏃犲鐞 */ - } + /*- 鏃犲鐞 */ + } + PFM_CFC_Check(8); + if (0x55u == g_PFM_Cfg.M_2x2_Enable) + { + /*- 鐢熸垚杈撳嚭鏍¢獙甯 */ + check_2x2_Len = s_2x2OutputCheckFrame_Pack(check_2x2_Buf, (CM_UINT32)sizeof(check_2x2_Buf)); + } + else + { + /*- 鏃犲鐞 */ + } MSCP_LOG_MSG("timecurr 14 OutputCheckFrame_Pack = %lld us\n", NOW_USED_TIME); /*########################2oo2杈撳嚭姣旇緝########################*/ PFM_CFC_Check(9); @@ -686,11 +676,11 @@ void PFM_OutputProc(void) /*- 妫鏌2oo2鍙屾満鐨勮緭鍑烘牎楠屽抚鏄惁涓鑷 */ CM_RE_ASSERT(check_2oo2_Len == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); ret = CM_Memcmp(check_2oo2_Buf, buf_peer, (CM_SIZE_T)check_2oo2_Len); - if(0 != ret) + if (0 != ret) { - MSCP_LOG_DATALEN(check_2oo2_Buf,check_2oo2_Len,"Ouput check_2oo2_Buf"); - MSCP_LOG_DATALEN(buf_peer,check_2oo2_Len,"Ouput buf_peer"); - CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); + MSCP_LOG_DATALEN(check_2oo2_Buf, check_2oo2_Len, "Ouput check_2oo2_Buf"); + MSCP_LOG_DATALEN(buf_peer, check_2oo2_Len, "Ouput buf_peer"); + CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); } } else @@ -711,24 +701,24 @@ void PFM_OutputProc(void) { /*- 鏇存柊鎺у埗娴佺姸鎬 */ - PFM_CFC_Check(10); - PFM_CFC_Check(11); - PFM_CFC_Check(12); - PFM_CFC_Check(13); - PFM_CFC_Check(14); + PFM_CFC_Check(10); + PFM_CFC_Check(11); + PFM_CFC_Check(12); + PFM_CFC_Check(13); + PFM_CFC_Check(14); } MSCP_LOG_MSG("timecurr 16 Output2x2 = %lld us\n", NOW_USED_TIME); /*########################骞冲彴鏁版嵁鍙戦########################*/ - PFM_CFC_Check(15); + PFM_CFC_Check(15); if (0x55u == g_PFM_Cfg.M_2x2_Enable) { - /*鐑鐘舵佸垏鎹*/ - SFM_2x2_ChangeState(); + /*鐑鐘舵佸垏鎹*/ + SFM_2x2_ChangeState(); } else { - /*鏃犲鐞 */ + /*鏃犲鐞 */ } PFM_CFC_Check(16); /*- 鑾峰彇褰撳墠鐑鐘舵 */ @@ -738,9 +728,9 @@ void PFM_OutputProc(void) /*- 鏈郴鏄惁涓轰富 */ if (ENUM_2x2_MASTER == state_2x2) { - MSCP_LOG_MSG("Out:innetSafe = %d, innetRaw = %d, outnetSafe = %d\n", (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_len, (CM_UINT32)PFM_RAW_TX(i).buf_len, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_len); + MSCP_LOG_MSG("Out:innetSafe = %d, innetRaw = %d, outnetSafe = %d\n", (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_len, (CM_UINT32)PFM_RAW_TX(i).buf_len, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_len); /*- 鍙戦佸唴缃戝畨鍏ㄨ緭鍑烘暟鎹 */ - PFM_CFC_Check(17); + PFM_CFC_Check(17); SFM_TxInnetSafe(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_len); PFM_CFC_Check(18); @@ -750,7 +740,7 @@ void PFM_OutputProc(void) (void)CFM_TxInnetRaw(i, PFM_RAW_TX(i).p_buf, (CM_UINT32)PFM_RAW_TX(i).buf_len); } - /*- 鍙戦佸缃戝畨鍏ㄨ緭鍑烘暟鎹 */ + /*- 鍙戦佸缃戝畨鍏ㄨ緭鍑烘暟鎹 */ PFM_CFC_Check(19); SFM_TxOutnetSafe(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_len); /*- 鍙戦佸缃戦忎紶杈撳嚭鏁版嵁 */ @@ -760,22 +750,22 @@ void PFM_OutputProc(void) else { /*- 鐩存帴鏇存柊鎺у埗娴佺姸鎬 */ - PFM_CFC_Check(17); - PFM_CFC_Check(18); - PFM_CFC_Check(19); - PFM_CFC_Check(20); + PFM_CFC_Check(17); + PFM_CFC_Check(18); + PFM_CFC_Check(19); + PFM_CFC_Check(20); } /*- 鍙戦佸唴缃戝畨鍏ㄧ淮鎶ゆā寮忔暟鎹*/ - SFM_TxInnetSafeRm(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len); - MSCP_LOG_MSG("SFM_TxInnetSafeRm = %d\n",g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len); + SFM_TxInnetSafeRm(g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].p_buf, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len); + MSCP_LOG_MSG("SFM_TxInnetSafeRm = %d\n", g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_RemoteUpdate].buf_len); /*- 娓呯┖澶栫綉閫忎紶鏁版嵁寰楅暱搴(涓诲閮芥竻绌) */ - g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_len = 0; + g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetRaw].buf_len = 0; /*- @alias 娓呯┖鍐呯綉閫忎紶鏁版嵁寰楅暱搴(涓诲閮芥竻绌) */ for (i = 1; i <= (s_2x2oo2_InnetRaw_num + s_2x2oo2_InnetRaw_Extend_num); i++) { PFM_RAW_TX(i).buf_len = 0; } - PFM_CFC_Check(21);/*棰勭暀鎺у埗娴*/ + PFM_CFC_Check(21); /*棰勭暀鎺у埗娴*/ /*- 纭欢閲嶅惎杈撳嚭*/ MSCP_LOG_MSG("timecurr 16.2 = %lld us\n", NOW_USED_TIME); PFM_HardWareBoot_OutPut(); @@ -783,17 +773,17 @@ void PFM_OutputProc(void) } /** -* @brief 鍛ㄦ湡鏈鐞 -* @details -* 鐢熸垚鍜屼紶杈撹窡闅忔暟鎹 -*/ + * @brief 鍛ㄦ湡鏈鐞 + * @details + * 鐢熸垚鍜屼紶杈撹窡闅忔暟鎹 + */ void PFM_EndProc(void) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 crc = 0u; /* crc鍊 */ - CM_UINT8 mybuf[8] = { 0u }; /* 鏈満2oo2缂撳啿鍖 */ - CM_UINT8 peerbuf[8] = { 0u };/* 閭绘満2oo2缂撳啿鍖 */ - CM_INT32 len = 0; /* 闀垮害 */ + CM_UINT32 crc = 0u; /* crc鍊 */ + CM_UINT8 mybuf[8] = {0u}; /* 鏈満2oo2缂撳啿鍖 */ + CM_UINT8 peerbuf[8] = {0u}; /* 閭绘満2oo2缂撳啿鍖 */ + CM_INT32 len = 0; /* 闀垮害 */ ENUM_BOARD_STATE_T remoteState; static CM_UINT8 MaintenanceFlag = 0u; /* 搴旂敤鍏抽敭鏁版嵁鐨2oo2姣旇緝 */ @@ -803,42 +793,41 @@ void PFM_EndProc(void) if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { /*- 鐢熸垚璺熼殢鏁版嵁鐨勭壒寰佷俊鎭 */ - crc = CM_Crc32(g_TxAppFollow, (CM_UINT32)g_TxAppFollow_len); CM_LongToChar((CM_UINT32)g_TxAppFollow_len, mybuf); - CM_LongToChar(crc, mybuf + 4); + (void)CM_Memcpy(mybuf + 4, 4, g_TxAppFollow, 4); /*- 2oo2浜ゆ崲鐗瑰緛淇℃伅 */ len = SFM_2oo2_Exchange_Currency(mybuf, 8, peerbuf, 8u, ENUM_2oo2_OUTPUT_CHECK); /*- 2oo2涓ユ牸姣旇緝鐗瑰緛淇℃伅 */ CM_RE_ASSERT(8 == len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); - if(0 == CM_Memcmp(mybuf, peerbuf, (CM_SIZE_T)8)) + if (0 == CM_Memcmp(mybuf, peerbuf, (CM_SIZE_T)8)) { - /*- 鏃犲鐞 */ + /*- 鏃犲鐞 */ } else { - MSCP_LOG_DATALEN(g_TxAppFollow, g_TxAppFollow_len, "PFM_EndProc g_TxAppFollow_len"); - CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); + MSCP_LOG_DATALEN(g_TxAppFollow, g_TxAppFollow_len, "PFM_EndProc g_TxAppFollow_len"); + CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_2); } /*鏉垮崱鐘舵佷笌纭欢閲嶅惎IO鏇存柊*/ PFM_HardWareBoot_UpData(); - /*- 鍛ㄦ湡鏈淮鎶ゆā寮忚浆鎹 */ + /*- 鍛ㄦ湡鏈淮鎶ゆā寮忚浆鎹 */ remoteState = PFM_GetBoardState(); - CM_LongToChar(remoteState,mybuf); + CM_LongToChar(remoteState, mybuf); len = SFM_2oo2_Exchange_Currency(mybuf, 4, peerbuf, 4u, ENUM_2oo2_OUTPUT_CHECK); CM_RE_ASSERT(0 == CM_Memcmp(mybuf, peerbuf, (CM_SIZE_T)4), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_3); - if(1u == MaintenanceFlag) + if (1u == MaintenanceFlag) { - (void)SFM_2oo2_Exchange_Currency(mybuf, 0, peerbuf, 0u, ENUM_2oo2_SHUTDOWNQUIT); - /*- 杩涘叆杩愯惀妯″紡 */ - CM_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_4); + (void)SFM_2oo2_Exchange_Currency(mybuf, 0, peerbuf, 0u, ENUM_2oo2_SHUTDOWNQUIT); + /*- 杩涘叆杩愯惀妯″紡 */ + CM_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_4); } - else if(ENUM_BOARDSTATE_EXIT == g_boardState) + else if (ENUM_BOARDSTATE_EXIT == g_boardState) { - MaintenanceFlag = 1u; + MaintenanceFlag = 1u; } else { - /*- 缁х画杩愯 */ + /*- 缁х画杩愯 */ } } else @@ -860,77 +849,76 @@ void PFM_EndProc(void) /*- 鏃犲鐞 */ } - } /** -* @brief 灏嗘敹鍒扮殑澶栫綉杈撳叆鎶ユ枃濉啓鍒板畨鍏ㄥ崗璁眰 -* @param Buf 澶栫綉杈撳叆鎶ユ枃鎸囬拡 -* @param len 澶栫綉杈撳叆鎶ユ枃闀垮害 -*/ + * @brief 灏嗘敹鍒扮殑澶栫綉杈撳叆鎶ユ枃濉啓鍒板畨鍏ㄥ崗璁眰 + * @param Buf 澶栫綉杈撳叆鎶ユ枃鎸囬拡 + * @param len 澶栫綉杈撳叆鎶ユ枃闀垮害 + */ static void s_RxOutnetToSFM(IN const CM_UINT8 buf[], IN CM_UINT32 len) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 i = 0u; - CM_UINT32 redLen = 0u; /* 绾㈢綉鎶ユ枃闀垮害 */ - CM_UINT32 blueLen = 0u; /* 钃濈綉鎶ユ枃闀垮害 */ + CM_UINT8 i = 0u; + CM_UINT32 redLen = 0u; /* 绾㈢綉鎶ユ枃闀垮害 */ + CM_UINT32 blueLen = 0u; /* 钃濈綉鎶ユ枃闀垮害 */ CM_UINT32 offset = 0u; /* 钃濈綉鎶ユ枃闀垮害 */ - CM_UINT32 tmpLen = len; /* 钃濈綉鎶ユ枃闀垮害 */ - for(i = 0u;i < 2u; i++) + CM_UINT32 tmpLen = len; /* 钃濈綉鎶ユ枃闀垮害 */ + for (i = 0u; i < 2u; i++) { - tmpLen = len - offset; - /*- 杈撳叆鍚堟硶鎬ф鏌ユ槸鍚﹂氳繃 */ - if (tmpLen >= 8u) - { - /*- 灏嗙孩銆佽摑缃戝缃戣緭鍏ユ姤鏂囧垎鍒~鍏ュ畨鍏ㄥ崗璁眰 */ - redLen = CM_LongFromChar(&buf[offset]); - CM_RE_ASSERT(redLen <= (tmpLen - 8u),IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); - SFM_WriteOutnetSafeInput(&buf[offset + 4u], redLen, ENUM_OUTNET_RED); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 娉ㄥ唽鍑芥暟鏄惁涓虹┖ */ - if(NULL == p_Status_Communication_Func) - { - /*- 鏃犲鐞 */ - } - else - { - /*- 灏嗘暟鎹粰鍒板簲鐢,搴旂敤瑙e寘鍒ゆ柇閫氫俊鎯呭喌 */ - (*p_Status_Communication_Func)(&buf[offset + 4u], redLen, ENUM_OUTNET_RED, s_rciRedTempBuf, &s_rciRedTempBufOffset); - } - blueLen = CM_LongFromChar(&buf[offset + 4u + redLen]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_RE_ASSERT(blueLen <= (tmpLen - 8u - redLen),IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_2); - SFM_WriteOutnetSafeInput(&buf[offset + 8u + redLen], blueLen, ENUM_OUTNET_BLUE);/* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - if(NULL == p_Status_Communication_Func) - { - /*- 鏃犲鐞 */ - } - else - { - /*- 灏嗘暟鎹粰鍒板簲鐢,搴旂敤瑙e寘鍒ゆ柇閫氫俊鎯呭喌 */ - (*p_Status_Communication_Func)(&buf[offset + 8u + redLen], blueLen, ENUM_OUTNET_BLUE, s_rciBlueTempBuf, &s_rciBlueTempBufOffset); - } - offset = blueLen + 8u + redLen; - } - else - { - /*- 鏃犲鐞 */ - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PFMINPUTOUTPUT_RXOUTNETTOSFM, 4U, &tmpLen); - } + tmpLen = len - offset; + /*- 杈撳叆鍚堟硶鎬ф鏌ユ槸鍚﹂氳繃 */ + if (tmpLen >= 8u) + { + /*- 灏嗙孩銆佽摑缃戝缃戣緭鍏ユ姤鏂囧垎鍒~鍏ュ畨鍏ㄥ崗璁眰 */ + redLen = CM_LongFromChar(&buf[offset]); + CM_RE_ASSERT(redLen <= (tmpLen - 8u), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); + SFM_WriteOutnetSafeInput(&buf[offset + 4u], redLen, ENUM_OUTNET_RED); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 娉ㄥ唽鍑芥暟鏄惁涓虹┖ */ + if (NULL == p_Status_Communication_Func) + { + /*- 鏃犲鐞 */ + } + else + { + /*- 灏嗘暟鎹粰鍒板簲鐢,搴旂敤瑙e寘鍒ゆ柇閫氫俊鎯呭喌 */ + (*p_Status_Communication_Func)(&buf[offset + 4u], redLen, ENUM_OUTNET_RED, s_rciRedTempBuf, &s_rciRedTempBufOffset); + } + blueLen = CM_LongFromChar(&buf[offset + 4u + redLen]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_RE_ASSERT(blueLen <= (tmpLen - 8u - redLen), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_2); + SFM_WriteOutnetSafeInput(&buf[offset + 8u + redLen], blueLen, ENUM_OUTNET_BLUE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + if (NULL == p_Status_Communication_Func) + { + /*- 鏃犲鐞 */ + } + else + { + /*- 灏嗘暟鎹粰鍒板簲鐢,搴旂敤瑙e寘鍒ゆ柇閫氫俊鎯呭喌 */ + (*p_Status_Communication_Func)(&buf[offset + 8u + redLen], blueLen, ENUM_OUTNET_BLUE, s_rciBlueTempBuf, &s_rciBlueTempBufOffset); + } + offset = blueLen + 8u + redLen; + } + else + { + /*- 鏃犲鐞 */ + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PFMINPUTOUTPUT_RXOUTNETTOSFM, 4U, &tmpLen); + } } } /** -* @brief 鐢熸垚杈撳嚭鏍¢獙鎶ユ枃 -* @param Buf 杈撳嚭鏍¢獙鎶ユ枃鎸囬拡 -* @param BufSize 杈撳嚭鏍¢獙鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鏍¢獙鎶ユ枃闀垮害 -*/ + * @brief 鐢熸垚杈撳嚭鏍¢獙鎶ユ枃 + * @param Buf 杈撳嚭鏍¢獙鎶ユ枃鎸囬拡 + * @param BufSize 杈撳嚭鏍¢獙鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鏍¢獙鎶ユ枃闀垮害 + */ static CM_INT32 s_2oo2OutputCheckFrame_Pack(OUT CM_UINT8 buf[], IN CM_UINT32 BufSize) { /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_INT32 ch = 0; /* 寰幆鍙橀噺 */ - CM_UINT32 len = 0u; /* 杈撳嚭璺熼殢鎶ユ枃闀垮害 */ - CM_UINT32 crc = 0u; /* 杈撳嚭璺熼殢鎶ユ枃CRC */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_INT32 ch = 0; /* 寰幆鍙橀噺 */ + CM_UINT32 len = 0u; /* 杈撳嚭璺熼殢鎶ユ枃闀垮害 */ + CM_UINT32 crc = 0u; /* 杈撳嚭璺熼殢鎶ユ枃CRC */ CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 绯荤粺鍛ㄦ湡鍙 */ /*- 鍏ュ弬妫鏌*/ @@ -942,39 +930,39 @@ static CM_INT32 s_2oo2OutputCheckFrame_Pack(OUT CM_UINT8 buf[], IN CM_UINT32 Buf /*- @alias 濉啓杈撳嚭鎶ユ枃鐨勯暱搴﹀拰crc */ for (ch = 1; ch <= g_2x2oo2_data_num; ch++) { - if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][ch].b_2oo2_Enable) - { - len = (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][ch].buf_len; - crc = CM_Crc32(g_2x2oo2_tx[g_2x2oo2_base][ch].p_buf, len); - CM_LongToChar(len, &buf[i]); - i += 4; - CM_LongToChar(crc, &buf[i]); - i += 4; - } - else - { - /*浜屽彇鏍囧織鏈娇鑳*/ - } + if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][ch].b_2oo2_Enable) + { + len = (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][ch].buf_len; + crc = CM_Crc32(g_2x2oo2_tx[g_2x2oo2_base][ch].p_buf, len); + CM_LongToChar(len, &buf[i]); + i += 4; + CM_LongToChar(crc, &buf[i]); + i += 4; + } + else + { + /*浜屽彇鏍囧織鏈娇鑳*/ + } } /*浜屽彇琛ㄥ喅鍔犲叆纭噸鍚爣蹇*/ buf[i++] = PFM_GetBoardRebootState(); - MSCP_LOG_MSG("PFM_GetBoardState = %d, PFM_GetBoardRebootState = %d\n",PFM_GetBoardState(), PFM_GetBoardRebootState()); + MSCP_LOG_MSG("PFM_GetBoardState = %d, PFM_GetBoardRebootState = %d\n", PFM_GetBoardState(), PFM_GetBoardRebootState()); /*- 杩斿洖杈撳嚭鏍¢獙鎶ユ枃闀垮害 */ return i; } /** -* @brief 鐢熸垚杈撳嚭鏍¢獙鎶ユ枃 -* @param Buf 杈撳嚭鏍¢獙鎶ユ枃鎸囬拡 -* @param BufSize 杈撳嚭鏍¢獙鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鏍¢獙鎶ユ枃闀垮害 -*/ + * @brief 鐢熸垚杈撳嚭鏍¢獙鎶ユ枃 + * @param Buf 杈撳嚭鏍¢獙鎶ユ枃鎸囬拡 + * @param BufSize 杈撳嚭鏍¢獙鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鏍¢獙鎶ユ枃闀垮害 + */ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSize) { /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_INT32 ch = 0; /* 寰幆鍙橀噺 */ - CM_UINT32 len = 0u; /* 杈撳嚭璺熼殢鎶ユ枃闀垮害 */ - CM_UINT32 crc = 0u; /* 杈撳嚭璺熼殢鎶ユ枃CRC */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_INT32 ch = 0; /* 寰幆鍙橀噺 */ + CM_UINT32 len = 0u; /* 杈撳嚭璺熼殢鎶ユ枃闀垮害 */ + CM_UINT32 crc = 0u; /* 杈撳嚭璺熼殢鎶ユ枃CRC */ CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 绯荤粺鍛ㄦ湡鍙 */ /*- 鍏ュ弬妫鏌*/ CM_ASSERT(((4 + (g_2x2oo2_data_num * 8)) <= (CM_INT32)BufSize) && (NULL != buf), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); @@ -985,65 +973,65 @@ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSi /*- @alias 濉啓杈撳嚭鎶ユ枃鐨勯暱搴﹀拰crc */ for (ch = 1; ch <= g_2x2oo2_data_num; ch++) { - if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][ch].b_2x2_Enable) - { - len = (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][ch].buf_len; - crc = CM_Crc32(g_2x2oo2_tx[g_2x2oo2_base][ch].p_buf, len); - CM_LongToChar(len, &buf[i]); - i += 4; - CM_LongToChar(crc, &buf[i]); - i += 4; - } - else - { - /*浜屽彇鏍囧織鏈娇鑳*/ - } + if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][ch].b_2x2_Enable) + { + len = (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][ch].buf_len; + crc = CM_Crc32(g_2x2oo2_tx[g_2x2oo2_base][ch].p_buf, len); + CM_LongToChar(len, &buf[i]); + i += 4; + CM_LongToChar(crc, &buf[i]); + i += 4; + } + else + { + /*浜屽彇鏍囧織鏈娇鑳*/ + } } - + /*- 杩斿洖杈撳嚭鏍¢獙鎶ユ枃闀垮害 */ return i; } /** -* @brief 鎺ユ敹澶栫綉閫忎紶鎶ユ枃 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹澶栫綉閫忎紶鎶ユ枃 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +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; + 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) + 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; + 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; + 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) && (NULL != p_Mine_Buf) && (NULL != p_Peer_Buf) && (NULL != p_mutex)) , 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); /*- 鑷繁鏄惁鏄疌PU1 */ if (1u == g_PFM_Cfg.CPU_ID) { @@ -1058,7 +1046,7 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) /*- 閿佸畾鎺ユ敹閫氶亾 */ 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)); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 瑙i攣鎺ユ敹閫氶亾 */ 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); @@ -1075,7 +1063,7 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) /*- 閿佸畾鎺ユ敹閫氶亾 */ 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)); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 瑙i攣鎺ユ敹閫氶亾 */ 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); @@ -1085,7 +1073,6 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) { /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ } - } else { @@ -1101,12 +1088,11 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) /*- 閿佸畾鎺ユ敹閫氶亾 */ 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)); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_Peer_Buf + s_OutnetRaw_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 瑙i攣鎺ユ敹閫氶亾 */ 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)Mine_len) @@ -1119,12 +1105,11 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) /*- 閿佸畾鎺ユ敹閫氶亾 */ 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)); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_Mine_Buf + s_OutnetRaw_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); /*- 瑙i攣鎺ユ敹閫氶亾 */ 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; - } else { @@ -1133,46 +1118,45 @@ CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) } /*- 杩斿洖鎺ユ敹缁撴灉 */ /* MSCP_LOG_MSG("PFM_OutnetRaw_AppRecv msgLen =%d\n",msgLen); */ - /* MSCP_LOG_MSG("PFM_OutnetRaw_AppRecv rt =%d\n",rt); */ + /* MSCP_LOG_MSG("PFM_OutnetRaw_AppRecv rt =%d\n",rt); */ return rt; } - /** -* @brief 鍙戦佸缃戦忎紶鎶ユ枃 -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -* 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 -* 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 -*/ -CM_UINT8 PFM_OutnetRaw_AppSend( IN const CM_UINT8* txBuf, IN CM_UINT32 txLen, IN CM_UINT16 dstName, IN CM_UINT16 dstLogicID, IN CM_UINT16 type) + * @brief 鍙戦佸缃戦忎紶鎶ユ枃 + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + * 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 + * 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 + */ +CM_UINT8 PFM_OutnetRaw_AppSend(IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen, IN CM_UINT16 dstName, IN CM_UINT16 dstLogicID, IN CM_UINT16 type) { /*- 鍏ュ彛妫鏌 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT32 sysCount = SFM_2x2_GetSysCount(); /* 鍛ㄦ湡鍙 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT32 sysCount = SFM_2x2_GetSysCount(); /* 鍛ㄦ湡鍙 */ - CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetRaw_Enable, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); - CM_ASSERT(NULL != txBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_4); - CM_RE_ASSERT(txLen <= NET_20K_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2); + CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetRaw_Enable, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); + CM_ASSERT(NULL != txBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_4); + CM_RE_ASSERT(txLen <= NET_20K_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2); /*- 鍐欏叆澶栫綉閫忎紶鏁扮粍 */ - /*CC澶栫綉杈撳嚭甯 - 2瀛楄妭 闀垮害 - 1瀛楄妭 鍗忚鐗堟湰 - 4瀛楄妭 鍛ㄦ湡鍙 - 4瀛楄妭甯у簭鍙 - 2瀛楄妭 鐩殑璁惧id - 2瀛楄妭 鐩殑閫昏緫id - 2瀛楄妭 鍗忚绫诲瀷 - n瀛楄妭 鏁版嵁 - 4瀛楄妭CRC - */ + /*CC澶栫綉杈撳嚭甯 + 2瀛楄妭 闀垮害 + 1瀛楄妭 鍗忚鐗堟湰 + 4瀛楄妭 鍛ㄦ湡鍙 + 4瀛楄妭甯у簭鍙 + 2瀛楄妭 鐩殑璁惧id + 2瀛楄妭 鐩殑閫昏緫id + 2瀛楄妭 鍗忚绫诲瀷 + n瀛楄妭 鏁版嵁 + 4瀛楄妭CRC + */ CM_ShortToChar((CM_UINT16)(txLen + 19), g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len); - g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf[g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 2] = 0u; /*鍗忚鐗堟湰 鍥哄畾濉0*/ + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf[g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 2] = 0u; /*鍗忚鐗堟湰 鍥哄畾濉0*/ CM_LongToChar(sysCount, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 3); /*濉叆鍛ㄦ湡鍙*/ /* 姝ゅ绌哄嚭4涓瓧鑺傜殑甯у簭鍙蜂綅缃 锛屽彂閫佺殑鏃跺欏~鍏*/ CM_LongToChar(0u, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 7); @@ -1181,269 +1165,269 @@ CM_UINT8 PFM_OutnetRaw_AppSend( IN const CM_UINT8* txBuf, IN CM_UINT32 txLen, IN CM_ShortToChar(type, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 15); /*- 鍐欏叆澶栫綉閫忎紶鏁扮粍 */ - ret = CM_Memcpy((void*)(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 17), - (CM_SIZE_T)CM_UNSIGNED_INT_EXP(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_size - (CM_UINT32)g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len - 17u), - (const void*)(txBuf), (CM_SIZE_T)(txLen)); + ret = CM_Memcpy((void *)(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + 17), + (CM_SIZE_T)CM_UNSIGNED_INT_EXP(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_size - (CM_UINT32)g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len - 17u), + (const void *)(txBuf), (CM_SIZE_T)(txLen)); CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_3); CM_LongToChar(0u, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].p_buf + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len + txLen + 17); - g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len += (CM_INT32)CM_UNSIGNED_INT_EXP(txLen+21u); + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetRaw].buf_len += (CM_INT32)CM_UNSIGNED_INT_EXP(txLen + 21u); /*- 杩斿洖鎵ц缁撴灉 */ return (CM_UINT8)ret; } /** -* @brief 鎺ユ敹鍐呯綉閫忎紶鎶ユ枃 -* @param ch 閫氶亾ID -* @param pSrcName 婧愯澶嘔D -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 PFM_InnetRaw_AppRecv(IN CM_INT32 ch, OUT CM_UINT16* pSrcName, OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹鍐呯綉閫忎紶鎶ユ枃 + * @param ch 閫氶亾ID + * @param pSrcName 婧愯澶嘔D + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 PFM_InnetRaw_AppRecv(IN CM_INT32 ch, OUT CM_UINT16 *pSrcName, OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { /*- 鍙橀噺鍒濆鍖 */ CM_UINT32 msgLen = 0u; /* 娑堟伅闀垮害 */ CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ ENUM_CM_RETURN ret = ENUM_CM_FALSE; - APP_RAW_RX(ch).app_index_log++;/*璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ + APP_RAW_RX(ch).app_index_log++; /*璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ /*- 鍏ュ弬妫鏌 */ CM_ASSERT(NULL != rxBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_17); - /*- 鑷繁鏄惁鏄疌PU1 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_1); - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_3); - CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); - s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_5); - CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_6); - CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_7); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); - s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - } - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_8); - } - else - { - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_9); - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_10); - CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_11); - CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_12); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); - s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_13); - CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_14); - CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_15); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); - s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - } - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_16); - } + /*- 鑷繁鏄惁鏄疌PU1 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_1); + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); + s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_5); + CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_6); + CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_7); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); + s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + } + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_8); + } + else + { + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_9); + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_10); + CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_11); + CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_12); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); + s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_13); + CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_14); + CM_RE_ASSERT((msgLen - PFM_RAW_DEVID_SIZE) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_15); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(msgLen - PFM_RAW_DEVID_SIZE)); + s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + } + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_16); + } /*- 杩斿洖鎺ユ敹缁撴灉 */ return rt; } /** -* @brief 蹇熸帴鏀跺唴缃戦忎紶鎶ユ枃 -* @param ch 閫氶亾ID -* @param pSrcName 婧愯澶嘔D -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁勪簩绾ф寚閽 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 PFM_InnetRaw_AppRecv_Fast(IN CM_INT32 ch, OUT CM_UINT16* pSrcName, OUT const CM_UINT8** rxBuf) + * @brief 蹇熸帴鏀跺唴缃戦忎紶鎶ユ枃 + * @param ch 閫氶亾ID + * @param pSrcName 婧愯澶嘔D + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁勪簩绾ф寚閽 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 PFM_InnetRaw_AppRecv_Fast(IN CM_INT32 ch, OUT CM_UINT16 *pSrcName, OUT const CM_UINT8 **rxBuf) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 msgLen = 0u; /* 娑堟伅闀垮害 */ - CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - APP_RAW_RX(ch).app_index_log++;/*璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ - /*- 鍏ュ弬妫鏌 */ - CM_ASSERT(NULL != rxBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_13); - /*- 鑷繁鏄惁鏄疌PU1 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_1); - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_3); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - rxBuf[0] = APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; - s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_4); - CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_5); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - rxBuf[0] = APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; - s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - } - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_6); - } - else - { - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_7); - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_8); - CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_9); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - rxBuf[0] = APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; - s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) - { - msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); - CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_10); - CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_11); - rt = msgLen - PFM_RAW_DEVID_SIZE; - *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); - rxBuf[0] = APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; - s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - } - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_12); - } + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 msgLen = 0u; /* 娑堟伅闀垮害 */ + CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + APP_RAW_RX(ch).app_index_log++; /*璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ + /*- 鍏ュ弬妫鏌 */ + CM_ASSERT(NULL != rxBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_13); + /*- 鑷繁鏄惁鏄疌PU1 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_1); + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_3); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + rxBuf[0] = APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; + s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_4); + CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_5); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + rxBuf[0] = APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; + s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + } + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_6); + } + else + { + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_7); + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) < (CM_UINT32)APP_RAW_RX(ch).peer_len) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_8); + CM_RE_ASSERT((s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_9); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + rxBuf[0] = APP_RAW_RX(ch).p_peer_buf + s_InnetRaw_Peer_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; + s_InnetRaw_Peer_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE) <= (CM_UINT32)(APP_RAW_RX(ch).mine_len)) + { + msgLen = CM_LongFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch]); + CM_RE_ASSERT(msgLen >= PFM_RAW_DEVID_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_10); + CM_RE_ASSERT((s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE + msgLen) <= (CM_UINT32)APP_RAW_RX(ch).mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_11); + rt = msgLen - PFM_RAW_DEVID_SIZE; + *pSrcName = CM_ShortFromChar(APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_LEN_SIZE); + rxBuf[0] = APP_RAW_RX(ch).p_mine_buf + s_InnetRaw_Mine_AppReadIndex[ch] + PFM_RAW_HEADER_SIZE; + s_InnetRaw_Mine_AppReadIndex[ch] += (CM_UINT32)msgLen + PFM_RAW_LEN_SIZE; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + } + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_12); + } - /*- 杩斿洖鎺ユ敹缁撴灉 */ - return rt; + /*- 杩斿洖鎺ユ敹缁撴灉 */ + return rt; } /** -* @brief 鎺ユ敹鍐呯綉閫忎紶杈呭姪淇℃伅 -* @param ch 閫氶亾ID -* @param pSrcName 婧愯澶嘔D -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 PFM_InnetRawHelpInfo_AppRecv(IN CM_INT32 ch, OUT CM_UINT8* MainInfoBuf,OUT CM_UINT8* PeerInfoBuf,IN CM_INT16 rxSize,OUT CM_UINT16 *PeerInfoLen) + * @brief 鎺ユ敹鍐呯綉閫忎紶杈呭姪淇℃伅 + * @param ch 閫氶亾ID + * @param pSrcName 婧愯澶嘔D + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 PFM_InnetRawHelpInfo_AppRecv(IN CM_INT32 ch, OUT CM_UINT8 *MainInfoBuf, OUT CM_UINT8 *PeerInfoBuf, IN CM_INT16 rxSize, OUT CM_UINT16 *PeerInfoLen) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 msgLen = 0u; /* 娑堟伅闀垮害 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - /*- 鍏ュ弬妫鏌 */ - CM_ASSERT((NULL != MainInfoBuf) && (NULL != PeerInfoBuf) && (NULL != PeerInfoLen), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_3); - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_1); - (void)CM_Memcpy(MainInfoBuf,(CM_SIZE_T)rxSize,APP_RAW_RX(ch).p_mine_helpinfo_buf,(CM_SIZE_T)APP_RAW_RX(ch).mine_helpinfo_len); - msgLen = APP_RAW_RX(ch).mine_helpinfo_len; - /*- 浣胯兘2鍙栬幏鍙栭偦鏈烘暟鎹紝鏈娇鑳2鍙栬幏鍙栨湰鏈烘暟鎹*/ - if(0x55u == g_PFM_Cfg.M_2oo2_Enable) - { - (void)CM_Memcpy(PeerInfoBuf,(CM_SIZE_T)rxSize,APP_RAW_RX(ch).p_peer_helpinfo_buf,(CM_SIZE_T)APP_RAW_RX(ch).peer_helpinfo_len); - *PeerInfoLen = (CM_UINT16)APP_RAW_RX(ch).peer_helpinfo_len; - } - else - { - (void)CM_Memcpy(PeerInfoBuf,(CM_SIZE_T)rxSize,APP_RAW_RX(ch).p_mine_helpinfo_buf,(CM_SIZE_T)APP_RAW_RX(ch).mine_helpinfo_len); - *PeerInfoLen = (CM_UINT16)APP_RAW_RX(ch).mine_helpinfo_len; - } - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); - return msgLen; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 msgLen = 0u; /* 娑堟伅闀垮害 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + /*- 鍏ュ弬妫鏌 */ + CM_ASSERT((NULL != MainInfoBuf) && (NULL != PeerInfoBuf) && (NULL != PeerInfoLen), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_3); + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_1); + (void)CM_Memcpy(MainInfoBuf, (CM_SIZE_T)rxSize, APP_RAW_RX(ch).p_mine_helpinfo_buf, (CM_SIZE_T)APP_RAW_RX(ch).mine_helpinfo_len); + msgLen = APP_RAW_RX(ch).mine_helpinfo_len; + /*- 浣胯兘2鍙栬幏鍙栭偦鏈烘暟鎹紝鏈娇鑳2鍙栬幏鍙栨湰鏈烘暟鎹*/ + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) + { + (void)CM_Memcpy(PeerInfoBuf, (CM_SIZE_T)rxSize, APP_RAW_RX(ch).p_peer_helpinfo_buf, (CM_SIZE_T)APP_RAW_RX(ch).peer_helpinfo_len); + *PeerInfoLen = (CM_UINT16)APP_RAW_RX(ch).peer_helpinfo_len; + } + else + { + (void)CM_Memcpy(PeerInfoBuf, (CM_SIZE_T)rxSize, APP_RAW_RX(ch).p_mine_helpinfo_buf, (CM_SIZE_T)APP_RAW_RX(ch).mine_helpinfo_len); + *PeerInfoLen = (CM_UINT16)APP_RAW_RX(ch).mine_helpinfo_len; + } + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(APP_RAW_RX(ch).app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); + return msgLen; } /** -* @brief 鍙戦佸唴缃戦忎紶鎶ユ枃 -* @param ch 閫氶亾ID -* @param dstName 鐩殑璁惧ID -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -* 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 -* 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 -*/ -CM_UINT8 PFM_InnetRaw_AppSend(IN CM_INT32 ch, IN CM_UINT16 dstName, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) + * @brief 鍙戦佸唴缃戦忎紶鎶ユ枃 + * @param ch 閫氶亾ID + * @param dstName 鐩殑璁惧ID + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + * 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 + * 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 + */ +CM_UINT8 PFM_InnetRaw_AppSend(IN CM_INT32 ch, IN CM_UINT16 dstName, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen) { /*- 鍏ュ彛妫鏌 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_RE_ASSERT(txLen <= NET_20K_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT((txLen + 4u + (CM_UINT32)(APP_RAW_TX(ch).buf_len)) <= (CM_UINT32)(APP_RAW_TX(ch).buf_size), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2); + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_RE_ASSERT(txLen <= NET_20K_SIZE, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((txLen + 4u + (CM_UINT32)(APP_RAW_TX(ch).buf_len)) <= (CM_UINT32)(APP_RAW_TX(ch).buf_size), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2); CM_ASSERT(NULL != txBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_4); /*- 鍐欏叆鍐呯綉閫忎紶鏁扮粍 */ /* @@ -1453,341 +1437,354 @@ CM_UINT8 PFM_InnetRaw_AppSend(IN CM_INT32 ch, IN CM_UINT16 dstName, IN const CM_ */ CM_ShortToChar((CM_UINT16)(txLen + 2u), APP_RAW_TX(ch).p_buf + APP_RAW_TX(ch).buf_len); CM_ShortToChar(dstName, APP_RAW_TX(ch).p_buf + APP_RAW_TX(ch).buf_len + 2); - ret = CM_Memcpy((void*)(APP_RAW_TX(ch).p_buf + APP_RAW_TX(ch).buf_len + 4), - (CM_SIZE_T)CM_UNSIGNED_INT_EXP(APP_RAW_TX(ch).buf_size - (CM_UINT32)APP_RAW_TX(ch).buf_len - 4u), - (const void*)(txBuf), (CM_SIZE_T)(txLen)); + ret = CM_Memcpy((void *)(APP_RAW_TX(ch).p_buf + APP_RAW_TX(ch).buf_len + 4), + (CM_SIZE_T)CM_UNSIGNED_INT_EXP(APP_RAW_TX(ch).buf_size - (CM_UINT32)APP_RAW_TX(ch).buf_len - 4u), + (const void *)(txBuf), (CM_SIZE_T)(txLen)); CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_3); - APP_RAW_TX(ch).buf_len += (CM_INT32)CM_UNSIGNED_INT_EXP(txLen + 4u); + APP_RAW_TX(ch).buf_len += (CM_INT32)CM_UNSIGNED_INT_EXP(txLen + 4u); /*- 杩斿洖鎵ц缁撴灉 */ return (CM_UINT8)1u; } /** -* @brief 鍙戦佸缃戝績璺虫姤鏂 -* @return 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF -* @details 浠呴檺骞冲彴璋冪敤锛屼笉鍙搴旂敤鎻愪緵鎺ュ彛 -*/ -CM_INT32 PFM_OutnetHeart_Send(void) + * @brief 鍙戦佸缃戝績璺虫姤鏂 + * @return 鍙戦佹姤鏂囬暱搴 鍙栧艰寖鍥达細0~0x7FFFFFFF + * @details 浠呴檺骞冲彴璋冪敤锛屼笉鍙搴旂敤鎻愪緵鎺ュ彛 + */ +CM_INT32 PFM_OutnetHeart_Send(CM_UINT8 *buf, CM_UINT32 bufsize, CM_UINT32 txSN, ENUM_2x2_STATE_T local2x2State) { /*- 鍒濆鍖栧彉閲 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT8 offset = 2u; - CM_UINT8 buf[20] = {0};/*- 涓存椂鏁扮粍*/ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT32 offset = 0u; CM_UINT32 crc = 0u; - STRU_2x2oo2_tx_T *p_2x2oo2_tx = &g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_OutnetHeart]; /* - 2瀛楄妭 闀垮害 - n瀛楄妭 鏁版嵁 - */ + 2瀛楄妭 闀垮害 + 1瀛楄妭 璇锋眰绫诲瀷 + 2瀛楄妭 鏉垮崱ID + 2瀛楄妭 CPUID + 1瀛楄妭 鏈郴鐘舵 + 1瀛楄妭 涓诲鐢ㄧ姸鎬 + 4瀛楄妭 鍛ㄦ湡鍙 + 2瀛楄妭 鍛ㄦ湡鏃堕棿 + 4瀛楄妭 搴忓垪鍙 + 4瀛楄妭 CRC + */ /*- 鍐欏叆澶栫綉蹇冭烦鏁扮粍 */ - buf[offset++] = 0x06u;/* 璇锋眰绫诲瀷*/ - buf[offset++] = SFM_2x2_GetLastLocal2x2State(); - CM_LongToChar(SFM_2x2_GetSysCount(), &buf[offset]); - offset += 4u; - crc = CM_Crc32(&buf[2u],offset-2u);/*- 姝ゅ涓嶉渶闃叉姢锛宱ffset鍒濆鍊煎氨鏄2*/ - CM_LongToChar(crc, &buf[offset]); - offset += 4u; - /*- 濉啓鏁版嵁闀垮害*/ - CM_ShortToChar((CM_UINT16)(offset-2u), &buf[0u]); - /* 鎬婚暱搴*/ - ret = CM_Memcpy((void*)p_2x2oo2_tx->p_buf, - (CM_SIZE_T)CM_UNSIGNED_INT_EXP(p_2x2oo2_tx->buf_size), - (const void*)(buf), (CM_SIZE_T)(offset)); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_1); - p_2x2oo2_tx->buf_len += (CM_INT32)CM_UNSIGNED_INT_EXP(offset); + if (bufsize >= 23u && buf != NULL) + { + offset = 2u; /*- 鍓2瀛楄妭鐣欑粰闀垮害*/ + buf[offset++] = 0x06u; /* 璇锋眰绫诲瀷*/ + CM_ShortToChar(g_PFM_Cfg.BOARD_ID, &buf[offset]); /* 鏉垮崱ID*/ + offset += 2u; + CM_ShortToChar(g_PFM_Cfg.CPU_ID, &buf[offset]); + offset += 2u; + buf[offset++] = (CM_UINT8)local2x2State; /* 鏈郴鐘舵*/ + buf[offset++] = 0x01u; /* 涓诲鐢ㄧ姸鎬 1涓轰富鐢*/ + CM_LongToChar(SFM_2x2_GetSysCount(), &buf[offset]); + offset += 4u; + CM_ShortToChar((CM_UINT16)g_PFM_Cfg.CYC_TIME, &buf[offset]); /* 鍛ㄦ湡鏃堕棿*/ + offset += 2u; + CM_LongToChar(txSN, &buf[offset]); /* 搴忓垪鍙*/ + offset += 4u; + crc = CM_Crc32(&buf[2u], offset - 2u); /*- 姝ゅ涓嶉渶闃叉姢锛宱ffset鍒濆鍊煎氨鏄2*/ + CM_LongToChar(crc, &buf[offset]); + offset += 4u; + /*- 濉啓鏁版嵁闀垮害*/ + CM_ShortToChar((CM_UINT16)(offset - 2u), &buf[0u]); + } /*- 杩斿洖鍙戦佹姤鏂囬暱搴*/ - return p_2x2oo2_tx->buf_len; + return offset; } /** -* @brief 鎺ユ敹澶栫綉蹇冭烦鎶ユ枃 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 鍙栧艰寖鍥达細闈炵┖ -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯澶у皬 鍙栧艰寖鍥达細0~0xFFFFFFFF -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 鍙栧艰寖鍥达細0~0xFFFFFFFF -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -* 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -*/ -CM_UINT32 PFM_OutnetHeart_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹澶栫綉蹇冭烦鎶ユ枃 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 鍙栧艰寖鍥达細闈炵┖ + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯澶у皬 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 鍙栧艰寖鍥达細0~0xFFFFFFFF + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + * 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + */ +CM_UINT32 PFM_OutnetHeart_AppRecv(OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { /*- 鍙橀噺鍒濆鍖 */ CM_UINT32 msgLen = 0u; /*- 娑堟伅闀垮害 */ CM_UINT32 rt = 0u; /*- 鍑芥暟杩斿洖鍊 */ ENUM_CM_RETURN ret = ENUM_CM_FALSE; STRU_2x2oo2_rx_T *p_2x2oo2_rx = &g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_OutnetHeart]; - p_2x2oo2_rx->app_index_log++;/*-璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ + p_2x2oo2_rx->app_index_log++; /*-璁板綍搴旂敤璋冪敤娆℃暟锛屾瘡鍛ㄦ湡娓呴浂*/ /*- 鍏ュ弬妫鏌 */ CM_ASSERT(NULL != rxBuf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1); /*- 鏈郴鏄惁涓轰富绯 */ - if(ENUM_2x2_MASTER == SFM_2x2_GetLastLocal2x2State()) + if (ENUM_2x2_MASTER == SFM_2x2_GetLastLocal2x2State()) { - /*- 鑷繁鏄惁鏄疌PU1 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->mine_len)) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_4); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_5); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_6); - s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->peer_len) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_7); - CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_8); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_9); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_10); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_11); - s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - MSCP_LOG_MSG("Heart_AppRecv_MM_cpu:%d M_len:%d,P_len:%d\n",g_PFM_Cfg.CPU_ID,s_OutnetHeart_Mine_AppReadIndex,s_OutnetHeart_Peer_AppReadIndex); - } - } - else - { - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->peer_len) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_12); - CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_13); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_14); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_15); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_16); - s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->mine_len)) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_17); - CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_18); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_19); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_20); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_21); - s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - MSCP_LOG_MSG("Heart_AppRecv_MM_cpu:%d M_len:%d,P_len:%d\n",g_PFM_Cfg.CPU_ID,s_OutnetHeart_Mine_AppReadIndex,s_OutnetHeart_Peer_AppReadIndex); - } - } + /*- 鑷繁鏄惁鏄疌PU1 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->mine_len)) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_4); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_5); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_6); + s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->peer_len) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_7); + CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_8); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_9); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_10); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_11); + s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + MSCP_LOG_MSG("Heart_AppRecv_MM_cpu:%d M_len:%d,P_len:%d\n", g_PFM_Cfg.CPU_ID, s_OutnetHeart_Mine_AppReadIndex, s_OutnetHeart_Peer_AppReadIndex); + } + } + else + { + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->peer_len) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_12); + CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_13); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_14); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_15); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_16); + s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->mine_len)) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_17); + CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_18); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_19); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_20); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_21); + s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + MSCP_LOG_MSG("Heart_AppRecv_MM_cpu:%d M_len:%d,P_len:%d\n", g_PFM_Cfg.CPU_ID, s_OutnetHeart_Mine_AppReadIndex, s_OutnetHeart_Peer_AppReadIndex); + } + } } /*- 瀵圭郴鏄惁鏄富绯 */ - else if(ENUM_2x2_MASTER == SFM_2x2_GetLastPartner2x2State()) + else if (ENUM_2x2_MASTER == SFM_2x2_GetLastPartner2x2State()) { - /*- 鑷繁鏄惁鏄疌PU1 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->rmt_mine_len)) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_22); - CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_23); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_24); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_25); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_26); - s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->rmt_peer_len) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_27); - CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_28); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_29); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_30); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_31); - s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - MSCP_LOG_MSG("Heart_AppRecv_PM_cpu:%d M_len:%d,P_len:%d\n",g_PFM_Cfg.CPU_ID,s_OutnetHeart_Mine_AppReadIndex,s_OutnetHeart_Peer_AppReadIndex); - } - } - else - { - /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->rmt_peer_len) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_32); - CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_33); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_34); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_35); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_36); - s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ - else if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->rmt_mine_len)) - { - msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex); - CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_37); - CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_38); - CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_39); - rt = msgLen; - /*- 閿佸畾鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_40); - /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ - (void)CM_Memcpy((void*)rxBuf, (CM_SIZE_T)rxSize, (void*)(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); - /*- 瑙i攣鎺ユ敹閫氶亾 */ - ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_41); - s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; - } - else - { - /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ - MSCP_LOG_MSG("Heart_AppRecv_PM_cpu:%d M_len:%d,P_len:%d\n",g_PFM_Cfg.CPU_ID,s_OutnetHeart_Mine_AppReadIndex,s_OutnetHeart_Peer_AppReadIndex); - } - } + /*- 鑷繁鏄惁鏄疌PU1 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->rmt_mine_len)) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_22); + CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_23); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_24); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_25); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_26); + s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->rmt_peer_len) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_27); + CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_28); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_29); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_30); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_31); + s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + MSCP_LOG_MSG("Heart_AppRecv_PM_cpu:%d M_len:%d,P_len:%d\n", g_PFM_Cfg.CPU_ID, s_OutnetHeart_Mine_AppReadIndex, s_OutnetHeart_Peer_AppReadIndex); + } + } + else + { + /*- 閭绘満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + if ((s_OutnetHeart_Peer_AppReadIndex + 4u) < (CM_UINT32)p_2x2oo2_rx->rmt_peer_len) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_32); + CM_RE_ASSERT((s_OutnetHeart_Peer_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_peer_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_33); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_34); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_35); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_rmt_peer_buf + s_OutnetHeart_Peer_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_36); + s_OutnetHeart_Peer_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + /*- 鏈満閫氶亾鏄惁鏈夋暟鎹湭鍙栬蛋 */ + else if ((s_OutnetHeart_Mine_AppReadIndex + 4u) <= (CM_UINT32)(p_2x2oo2_rx->rmt_mine_len)) + { + msgLen = CM_LongFromChar(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex); + CM_RE_ASSERT(msgLen > 0u, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_37); + CM_RE_ASSERT((s_OutnetHeart_Mine_AppReadIndex + 4u + msgLen) <= (CM_UINT32)p_2x2oo2_rx->rmt_mine_len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_38); + CM_RE_ASSERT((msgLen) <= rxSize, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_39); + rt = msgLen; + /*- 閿佸畾鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Lock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_40); + /*- 鎷疯礉鏁版嵁鍒拌緭鍑虹紦鍐插尯 */ + (void)CM_Memcpy((void *)rxBuf, (CM_SIZE_T)rxSize, (void *)(p_2x2oo2_rx->p_rmt_mine_buf + s_OutnetHeart_Mine_AppReadIndex + 4u), (CM_SIZE_T)(msgLen)); + /*- 瑙i攣鎺ユ敹閫氶亾 */ + ret = CM_Mutex_Unlock(p_2x2oo2_rx->app_mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_41); + s_OutnetHeart_Mine_AppReadIndex += (CM_UINT32)msgLen + 4u; + } + else + { + /*- 鍙岀綉閮藉彇瀹屼簡锛岃繑鍥瀟rue */ + MSCP_LOG_MSG("Heart_AppRecv_PM_cpu:%d M_len:%d,P_len:%d\n", g_PFM_Cfg.CPU_ID, s_OutnetHeart_Mine_AppReadIndex, s_OutnetHeart_Peer_AppReadIndex); + } + } } - else/*< 濡傛灉鏃犱富绯 */ + else /*< 濡傛灉鏃犱富绯 */ { - /*- 鏃犲鐞 */ - MSCP_LOG_MSG("Heart_AppRecv Not Master\n"); + /*- 鏃犲鐞 */ + MSCP_LOG_MSG("Heart_AppRecv Not Master\n"); } /*- 杩斿洖鎺ユ敹缁撴灉 */ return rt; } /** -* @brief 缁存姢妯″紡杈撳叆寰懆鏈熷鐞(鏃犲畷鏈哄嚱鏁) -* @details -* 骞冲彴鏁版嵁鎺ユ敹锛 -* 鏈湴杈撳叆鏁版嵁2oo2浜ゆ崲鍜屾瘮杈冿紱 -* 浜や粯鍗忚閫傞厤灞傚鐞嗐 -*/ + * @brief 缁存姢妯″紡杈撳叆寰懆鏈熷鐞(鏃犲畷鏈哄嚱鏁) + * @details + * 骞冲彴鏁版嵁鎺ユ敹锛 + * 鏈湴杈撳叆鏁版嵁2oo2浜ゆ崲鍜屾瘮杈冿紱 + * 浜や粯鍗忚閫傞厤灞傚鐞嗐 + */ void PFM_InputProc_Crash(void) { - CM_UINT8 data[1024*10] = {0u}; - CM_UINT8 pData[1024*10] = {0u}; - CM_UINT32 dataLen = 0u; - CM_INT32 ret = 0; + CM_UINT8 data[1024 * 10] = {0u}; + CM_UINT8 pData[1024 * 10] = {0u}; + CM_UINT32 dataLen = 0u; + CM_INT32 ret = 0; /************************骞冲彴鏁版嵁鎺ユ敹*************************/ - g_PFM_Check = PFM_CFC_PROC_NUM + 2; + g_PFM_Check = PFM_CFC_PROC_NUM + 2; /*- 鍐呯綉瀹夊叏鏁版嵁鎺ユ敹 */ - dataLen = (CM_UINT32)SFM_RxInnetRemoteUpdate(data, sizeof(data)); + dataLen = (CM_UINT32)SFM_RxInnetRemoteUpdate(data, sizeof(data)); /*- 鏄惁寮鍚簡2oo2鍔熻兘 */ if (0x55u == g_RMUP_Cfg.M_2oo2_Enable) { /*- 2oo2浜ゆ崲杈撳嚭鏍¢獙甯 */ - ret = SFM_2oo2_Exchange_FullDuplex_Crash(data, dataLen, pData, (CM_UINT32)1024u*10u, ENUM_2oo2_OUTPUT_EX); + ret = SFM_2oo2_Exchange_FullDuplex_Crash(data, dataLen, pData, (CM_UINT32)1024u * 10u, ENUM_2oo2_OUTPUT_EX); } else { /*- 鏃犲鐞 */ } g_PFM_Check = PFM_CFC_PROC_NUM + 3; - MSCP_LOG_MSG("PFM_InputProc_Crash dataLen = %d\n",dataLen); - if(2u == g_RMUP_Cfg.CPU_ID) - { - SFM_WriteInnetSafeRmInput(pData, ret, ENUM_INNET_GREEN); - MSCP_LOG_DATALEN(pData, ret, "PFM_InputProc_Crash pData"); - SFM_WriteInnetSafeRmInput(data, dataLen, ENUM_INNET_PURPLE); - MSCP_LOG_DATALEN(data, dataLen, "PFM_InputProc_Crash data"); - } - else if(1u == g_RMUP_Cfg.CPU_ID) - { - SFM_WriteInnetSafeRmInput(data, dataLen, ENUM_INNET_GREEN); - MSCP_LOG_DATALEN(data, dataLen, "PFM_InputProc_Crash data"); - SFM_WriteInnetSafeRmInput(pData, ret, ENUM_INNET_PURPLE); - MSCP_LOG_DATALEN(pData, ret, "PFM_InputProc_Crash pData"); - } - else - { - MSCP_LOG_MSG("Channel exception\n"); - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1)); - } - g_PFM_Check = PFM_CFC_PROC_NUM + 4; + MSCP_LOG_MSG("PFM_InputProc_Crash dataLen = %d\n", dataLen); + if (2u == g_RMUP_Cfg.CPU_ID) + { + SFM_WriteInnetSafeRmInput(pData, ret, ENUM_INNET_GREEN); + MSCP_LOG_DATALEN(pData, ret, "PFM_InputProc_Crash pData"); + SFM_WriteInnetSafeRmInput(data, dataLen, ENUM_INNET_PURPLE); + MSCP_LOG_DATALEN(data, dataLen, "PFM_InputProc_Crash data"); + } + else if (1u == g_RMUP_Cfg.CPU_ID) + { + SFM_WriteInnetSafeRmInput(data, dataLen, ENUM_INNET_GREEN); + MSCP_LOG_DATALEN(data, dataLen, "PFM_InputProc_Crash data"); + SFM_WriteInnetSafeRmInput(pData, ret, ENUM_INNET_PURPLE); + MSCP_LOG_DATALEN(pData, ret, "PFM_InputProc_Crash pData"); + } + else + { + MSCP_LOG_MSG("Channel exception\n"); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1)); + } + g_PFM_Check = PFM_CFC_PROC_NUM + 4; } /** -* @brief 缁存姢妯″紡杈撳嚭寰懆鏈熷鐞(鏃犲畷鏈哄嚱鏁) -* @details -* 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹紱 -* 骞冲彴鏁版嵁鍙戦併 -*/ + * @brief 缁存姢妯″紡杈撳嚭寰懆鏈熷鐞(鏃犲畷鏈哄嚱鏁) + * @details + * 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹紱 + * 骞冲彴鏁版嵁鍙戦併 + */ void PFM_OutputProc_Crash(void) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 data[1024*100] = {0u}; - CM_UINT32 dataLen = 0u; - CM_UINT8 pData[1024*100] = {0u}; + CM_UINT8 data[1024 * 100] = {0u}; + CM_UINT32 dataLen = 0u; + CM_UINT8 pData[1024 * 100] = {0u}; CM_UINT32 ret = 0u; /*########################浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹########################*/ /*- 浠庡崗璁傞厤灞傝幏鍙栬緭鍑烘暟鎹 */ - dataLen = SFM_ReadInnetCodedOutputCrash(data, sizeof(data)); + dataLen = SFM_ReadInnetCodedOutputCrash(data, sizeof(data)); /*- 鏄惁寮鍚簡2oo2鍔熻兘 */ if (0x55u == g_RMUP_Cfg.M_2oo2_Enable) { /*- 2oo2浜ゆ崲杈撳嚭鏍¢獙甯 */ - ret = SFM_2oo2_Exchange_FullDuplex_Crash(data, dataLen, pData, (CM_UINT32)1024u*100u, ENUM_2oo2_OUTPUT_EX); + ret = SFM_2oo2_Exchange_FullDuplex_Crash(data, dataLen, pData, (CM_UINT32)1024u * 100u, ENUM_2oo2_OUTPUT_EX); /*- 妫鏌2oo2鍙屾満鐨勮緭鍑烘牎楠屽抚鏄惁涓鑷 */ CM_ASSERT_MAINTAIN(dataLen == ret); ret = CM_Memcmp(data, pData, (CM_SIZE_T)dataLen); @@ -1799,37 +1796,34 @@ void PFM_OutputProc_Crash(void) /*- 鏃犲鐞 */ } - /*- 鍙戦佸唴缃戝畨鍏ㄨ緭鍑烘暟鎹 */ + /*- 鍙戦佸唴缃戝畨鍏ㄨ緭鍑烘暟鎹 */ SFM_TxInnetSafeRemoteUpdate(data, dataLen); MSCP_LOG_DATALEN(data, dataLen, "PFM_OutputProc_Crash data"); } - /** -* @brief 鑾峰彇骞冲彴鏆傚瓨鐨勭孩钃濈綉璁惧淇℃伅 -* @param RedBuf 绾㈢綉缂撳啿鍖 鍙栧艰寖鍥:闈炵┖ -* @param BlueBuf 绡綉缂撳啿鍖 鍙栧艰寖鍥达細闈炵┖ -* @details RCI鐢ㄤ簬鑾峰彇骞冲彴鏆傚瓨鐨勭孩钃濈綉璁惧淇℃伅 -*/ -void PFM_GetRciTempBuf(OUT CM_UINT16* RedBuf, OUT CM_UINT16* BlueBuf) + * @brief 鑾峰彇骞冲彴鏆傚瓨鐨勭孩钃濈綉璁惧淇℃伅 + * @param RedBuf 绾㈢綉缂撳啿鍖 鍙栧艰寖鍥:闈炵┖ + * @param BlueBuf 绡綉缂撳啿鍖 鍙栧艰寖鍥达細闈炵┖ + * @details RCI鐢ㄤ簬鑾峰彇骞冲彴鏆傚瓨鐨勭孩钃濈綉璁惧淇℃伅 + */ +void PFM_GetRciTempBuf(OUT CM_UINT16 *RedBuf, OUT CM_UINT16 *BlueBuf) { - /*- 鍏ュ弬鏄惁闈炵┖ */ - if((RedBuf!=NULL) && (BlueBuf!=NULL)) - { - /*- 绾㈣摑缃戦氫俊婧愯澶囦俊鎭 */ - (void)CM_Memcpy((void*)RedBuf,sizeof(CM_UINT16)*288u,s_rciRedTempBuf,sizeof(CM_UINT16)*288u); - (void)CM_Memcpy((void*)BlueBuf,sizeof(CM_UINT16)*288u,s_rciBlueTempBuf,sizeof(CM_UINT16)*288u); - (void)CM_Memset(s_rciRedTempBuf, 0u, sizeof(CM_UINT16)*288u, sizeof(CM_UINT16)*288u); - (void)CM_Memset(s_rciBlueTempBuf, 0u, sizeof(CM_UINT16)*288u, sizeof(CM_UINT16)*288u); - s_rciRedTempBufOffset = 0u; - s_rciBlueTempBufOffset = 0u; - } - else - { - /*- 鏃犲鐞 */ - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2)); - MSCP_LOG_MSG("RED or BLUE Buf is NULL\n"); - } + /*- 鍏ュ弬鏄惁闈炵┖ */ + if ((RedBuf != NULL) && (BlueBuf != NULL)) + { + /*- 绾㈣摑缃戦氫俊婧愯澶囦俊鎭 */ + (void)CM_Memcpy((void *)RedBuf, sizeof(CM_UINT16) * 288u, s_rciRedTempBuf, sizeof(CM_UINT16) * 288u); + (void)CM_Memcpy((void *)BlueBuf, sizeof(CM_UINT16) * 288u, s_rciBlueTempBuf, sizeof(CM_UINT16) * 288u); + (void)CM_Memset(s_rciRedTempBuf, 0u, sizeof(CM_UINT16) * 288u, sizeof(CM_UINT16) * 288u); + (void)CM_Memset(s_rciBlueTempBuf, 0u, sizeof(CM_UINT16) * 288u, sizeof(CM_UINT16) * 288u); + s_rciRedTempBufOffset = 0u; + s_rciBlueTempBufOffset = 0u; + } + else + { + /*- 鏃犲鐞 */ + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2)); + MSCP_LOG_MSG("RED or BLUE Buf is NULL\n"); + } } - - diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.h b/TSCP/src/MSCP/PFM/PFM_InputOutput.h index 2735779..035fb70 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.h +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.h @@ -52,7 +52,7 @@ extern "C" /* 鍐呯綉閫忎紶鏁版嵁鍙戦 */ CM_UINT8 PFM_InnetRaw_AppSend(IN CM_INT32 ch, IN CM_UINT16 dstName, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen); /* 鍙戦佸缃戝績璺虫姤鏂 */ - CM_INT32 PFM_OutnetHeart_Send(void); + CM_INT32 PFM_OutnetHeart_Send(CM_UINT8* buf, CM_UINT32 bufsize, CM_UINT32 txSN, ENUM_2x2_STATE_T local2x2State); /** * @brief 鎺ユ敹澶栫綉蹇冭烦鎶ユ枃 */ diff --git a/TSCP/src/MSCP/PFM/PFM_Log.c b/TSCP/src/MSCP/PFM/PFM_Log.c index 124f091..aada3cf 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.c +++ b/TSCP/src/MSCP/PFM/PFM_Log.c @@ -28,6 +28,7 @@ #include #include #include "CM_IniFile.h" +#include "CFM_Raw.h" extern CM_UINT32 g_MSCP_SysCount; ENUM_INIT_STAGE_FLAG g_InitUpdateFlag = ENUM_ERROR;/*- 鍒濆鍖栭樁娈垫爣蹇*/ @@ -44,7 +45,16 @@ static STRU_2OO2_NET_NO_PACK_T s_2oo2_AutoReboot = { static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, const CM_CHAR *filename, const CM_CHAR *func, CM_INT32 line); static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T boardState, CM_UINT32 MaintenanceFlag); -static void PFM_LOG_ManageCrashlog(void); +/* 瀹曟満鍓嶅悜閫氭帶鍙戦佺姸鎬佷负瀹曟満鐨勫績璺*/ +static void s_OutnetHeart_Send(void); +/* @brief 閫氱敤寰幆鏃ュ織绠$悊 +* @param file_type 鏂囦欢绫诲瀷鏍囪瘑 +* 0: 瀹曟満鏃ュ織 (crashlog) +* 1: 璺熻釜鏃ュ織 (.kev) +* 2: 绾跨▼鏃ュ織 (threads) +* @return 鏃 +*/ +static void PFM_LOG_ManageFiles(CM_UINT8 file_type); /** * @brief 璁剧疆鍒濆鍖栭樁娈垫爣蹇 * @param ENUM_INIT_STAGE_FLAG stage 璁剧疆鍒濆鍖栭樁娈 @@ -219,6 +229,37 @@ void MSCP_PFM_LOG_DARK(IN const CM_UINT8 infoType, IN const CM_UINT16 code, IN c (void)CFM_DarkLog_Storage(infoType, code, infoLen, info); } +void MSCP_ASSERT_TraceLog(void) +{ + CM_CHAR trace_cmd[256] = {0}; + CM_CHAR pidin_cmd[256] = {0}; + CM_INT32 ret = 0; + (void)sprintf(trace_cmd, + "tracelogger -c -n %d -s%d -f %s &", PFM_RECORD_BUF, PFM_RECORD_TIME_S, PFM_LATEST_TRACE_NAME); + ret = system(trace_cmd); + if (-1 == ret) + { + (void)printf("ERROR: Failed to start tracelogger: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's tracelogger or threads_log system fail\n"); + } + else + { + ; + } + (void)sprintf(pidin_cmd, + "pidin -p %d threads >> %s &", getpid(),PFM_LATEST_THREADS_NAME); + ret = system(pidin_cmd); + if (-1 == ret) + { + (void)printf("ERROR: Failed to start pidin: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's pidin or threads_log system fail\n"); + } + else + { + ; + } + CM_Sleep(PFM_RECORD_TIME_S + 1u); +} /** * @brief 鏂█ @@ -249,6 +290,7 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo ENUM_2x2_STATE_T localState = ENUM_2x2_SHUTDOWN; CM_UINT8 countFalse = 0xff; CM_UINT8 tmepIndex = 0u; + ENUM_CM_RETURN LogQisEmpty = ENUM_CM_FALSE; /* 鏄庢枃涓庢殫鏂囨棩蹇楅槦鍒楁槸鍚﹀潎涓虹┖*/ /*- 鍏ㄥ眬瀹曟満鏍囧織鏄惁鏈夋晥 */ if(0x55u == s_stopflag) { @@ -270,6 +312,7 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo /*- 缃綅鍏ㄥ眬瀹曟満鏍囧織 */ s_stopflag = 0x55u; SFM_2x2_LOG_Transition(); + s_OutnetHeart_Send(); /* 鍙戦佸畷鏈哄墠蹇冭烦*/ /*- 鎺у埗鍙拌緭鍑烘柇瑷澶辨晥淇℃伅 */ MSCP_LOG_MSG("ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); (void)printf("ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); @@ -309,10 +352,10 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo (void)fclose(fp_historical); /*- 鍏抽棴鎵鏈塗CP杩炴帴 */ (void)CM_TCP_Socket_Close_shutdown(); - CM_Sleep(500u); /*- 瀹夊叏鍏虫柇*/ DFM_saftyOff(); + MSCP_ASSERT_TraceLog(); /*- 璁剧疆LED鎸囩ず鐏*/ if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) { @@ -336,6 +379,13 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo { CFM_LogCiphertextSend(); } + LogQisEmpty = CFM_LogQ_isEmpty(); + while (ENUM_CM_FALSE == LogQisEmpty) + { + CFM_LogCiphertextSend(); + LogQisEmpty = CFM_LogQ_isEmpty(); + CM_Sleep(2u); + } /*- 閫鍑鸿繍钀ユ晠闅滅爜*/ if(darkBuf == 0x0D0404) @@ -400,6 +450,7 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh CM_UINT32 darkBuf = (Mode<<16u)|(faultCode<<8u)|funNum; ENUM_2x2_STATE_T localState = ENUM_2x2_SHUTDOWN; CM_UINT8 lightPs = 0x55; + ENUM_CM_RETURN LogQisEmpty = ENUM_CM_FALSE; /* 鏄庢枃涓庢殫鏂囨棩蹇楅槦鍒楁槸鍚﹀潎涓虹┖*/ /*- 鍏ㄥ眬瀹曟満鏍囧織鏄惁鏈夋晥 */ if(0x55u == s_stopflag) { @@ -421,13 +472,13 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh /*- 缃綅鍏ㄥ眬瀹曟満鏍囧織 */ s_stopflag = 0x55u; SFM_2x2_LOG_Transition(); + s_OutnetHeart_Send(); /* 鍙戦佸畷鏈哄墠蹇冭烦*/ /*- 鎺у埗鍙拌緭鍑烘柇瑷澶辨晥淇℃伅 */ MSCP_LOG_MSG("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); (void)printf("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); AutoReboot_Flag = PFM_LOG_SHUTDOWN(darkBuf, MaintenanceFlag, filename, func, line); /*- 鍏抽棴鎵鏈塗CP杩炴帴 */ (void)CM_TCP_Socket_Close_shutdown(); - CM_Sleep(500u); /*- 瀹夊叏鍏虫柇*/ DFM_saftyOff(); if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) @@ -452,6 +503,13 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { CFM_LogCiphertextSend(); } + LogQisEmpty = CFM_LogQ_isEmpty(); + while (ENUM_CM_FALSE == LogQisEmpty) + { + CFM_LogCiphertextSend(); + LogQisEmpty = CFM_LogQ_isEmpty(); + CM_Sleep(2u); + } /*- 鏄惁鎵ц閲嶅惎鍛戒护*/ if(AutoReboot_Flag == 0x55u) { @@ -464,6 +522,7 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { (void)printf("Please check err!!!\n"); } + MSCP_ASSERT_TraceLog(); /*- 璁剧疆鏁呴殰妯″紡*/ PFM_SetBoardState(ENUM_BOARDSTATE_DEFAULT); @@ -575,7 +634,9 @@ void MSCP_Read_Del_Logfile(void) } /*- 鍏抽棴鏂囦欢鎻忚堪绗 */ (void)fclose(pfile); - PFM_LOG_ManageCrashlog(); + PFM_LOG_ManageFiles(0u); + PFM_LOG_ManageFiles(1u); + PFM_LOG_ManageFiles(2u); } else { @@ -820,7 +881,7 @@ static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, c * @param darkBuf 鏁呴殰鐮 鍙栧艰寖鍥达細0~0xffffffff * @return 鏃 */ -static void PFM_LOG_MaintenanceMode(CM_UINT32 MaintenanceFlag, CM_UINT32 darkBuf) +static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T MaintenanceFlag, CM_UINT32 darkBuf) { /*- 鍙橀噺鍒濆鍖 */ CM_UINT64 sMaintenanceTack = CM_GetTick()/CM_UNSIGNED_MILLION; @@ -895,51 +956,91 @@ void PFM_SendLastAssertLog(void) { MSCP_LOG_MSG("Last crashlog:%s \n", s_crashlogBuf); } - /** -* @brief 瀹曟満鏃ュ織绠$悊 +* @brief 閫氱敤寰幆鏃ュ織绠$悊 +* @param file_type 鏂囦欢绫诲瀷鏍囪瘑 +* 0: 瀹曟満鏃ュ織 (crashlog) +* 1: 璺熻釜鏃ュ織 (.kev) +* 2: 绾跨▼鏃ュ織 (threads) * @return 鏃 */ -static void PFM_LOG_ManageCrashlog(void) +static void PFM_LOG_ManageFiles(CM_UINT8 file_type) { /*- 璇诲畷鏈烘枃浠*/ - FILE *pcrash_num = NULL; - CM_CHAR str_crash_new_name[256] = {0}; - CM_CHAR str_crash_old_name[256] = {0}; - CM_UINT32 i = 0; + FILE *p_file = NULL; + CM_CHAR str_new_name[256] = {0}; + CM_CHAR str_old_name[256] = {0}; + CM_CHAR final_name[256] = {0}; + CM_CHAR base_name[64] = {0}; + CM_CHAR extension[16] = {0}; + CM_CHAR latest_file[128] = {0}; + CM_UINT32 max_count = 0u; + CM_UINT32 i = 0u; + CM_UINT8 typeValid = 1u; + switch(file_type) + { + case 0u: /* 瀹曟満鏃ュ織 */ + (void)strcpy(base_name, "crashlog_"); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, "crashlog.txt"); + max_count = PFM_MAX_TRACE_COUNT; + break; + case 1u: /* 璺熻釜鏃ュ織 */ + (void)strcpy(base_name, PFM_BASE_TRACE_NAME); + (void)strcpy(extension, ".kev"); + (void)strcpy(latest_file, PFM_LATEST_TRACE_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + case 2u: /* 绾跨▼鏃ュ織 */ + (void)strcpy(base_name, PFM_BASE_THREADS_NAME); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, PFM_LATEST_THREADS_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + default: + typeValid = 0u; + break; /* 鏃犳晥鐨勬枃浠剁被鍨 */ + } + if(1u == typeValid) + { /*- 鏌ユ壘绗竴涓笉瀛樺湪鐨勬枃浠跺悕 */ - for(i = 0u;i<10u;i++) + for(i = 1u; i <= max_count; i++) { /*- 閫氳繃鎵撳紑鏂囦欢鎴愬姛妫娴嬫枃浠舵槸鍚﹀瓨鍦 */ - sprintf(str_crash_new_name,"crashlog_%d.txt",i + 1u); - pcrash_num = fopen(str_crash_new_name,"r"); + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + p_file = fopen(str_new_name, "r"); /*- 鎵惧埌绗竴涓笉瀛樺湪鐨勬枃浠跺悕 */ - if(NULL == pcrash_num) + if(NULL == p_file) { - /*- 璺冲嚭 */ + (void)strcpy(final_name, str_new_name); break; } else { /*- 鍏抽棴鏂囦欢 */ - fclose(pcrash_num); + (void)fclose(p_file); } } /*- 濡傛灉鎵鏈夋枃浠跺悕閮藉瓨鍦紝鍒犻櫎鏈鏃х殑鏃ュ織锛坈rashlog_1.txt锛*/ - if(10u == i) - { - (void)strcpy(str_crash_old_name,"crashlog_1.txt"); - (void)remove(str_crash_old_name); - for(i = 2u;i <= 10u; i++) + if(i > max_count) { - (void)sprintf(str_crash_new_name,"crashlog_%d.txt",i); - (void)rename(str_crash_new_name,str_crash_old_name); - (void)strcpy(str_crash_old_name,str_crash_new_name); + (void)sprintf(str_old_name,"%s%d%s", base_name, 1u, extension); + (void)remove(str_old_name); + for(i = 2u; i <= max_count; i++) + { + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + (void)sprintf(str_old_name, "%s%d%s", base_name, i - 1u, extension); + (void)rename(str_new_name, str_old_name); } + (void)strcpy(final_name, str_new_name); } /*- 瀵规枃浠堕噸鏂板懡鍚 */ - (void)rename("crashlog.txt",str_crash_new_name); + if(final_name[0] != 0) + { + (void)rename(latest_file, final_name); + } + } } /* * @brief 鏆楁枃鏃ュ織鏁呴殰鐮佺敓鎴愭寚閽堝嚱鏁 @@ -955,3 +1056,9 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num) /*杩斿洖鏁呴殰鐮佸湴鍧*/ return &lastcode; } +static void s_OutnetHeart_Send(void) +{ + CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); + CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); + CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); +} diff --git a/TSCP/src/MSCP/PFM/PFM_Log.h b/TSCP/src/MSCP/PFM/PFM_Log.h index 90a9f06..658922b 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.h +++ b/TSCP/src/MSCP/PFM/PFM_Log.h @@ -169,6 +169,13 @@ void MSCP_PFM_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_ /* 璁板綍浜岃繘鍒舵棩蹇 */ #define MSCP_LOG_BIN(buf,len) (MSCP_PFM_LOG_BIN(__FILE__,__FUNCTION__,(CM_INT32)__LINE__,(buf),(len))) +#define PFM_MAX_TRACE_COUNT (10u) +#define PFM_BASE_TRACE_NAME "trace_log_" // 鏂囦欢鍚嶅墠缂 (trace_crash_1.kev) +#define PFM_LATEST_TRACE_NAME "trace_log_latest.kev" +#define PFM_BASE_THREADS_NAME "threads_state_" // 鏂囦欢鍚嶅墠缂 (threads_state_1.txt) +#define PFM_LATEST_THREADS_NAME "threads_state_latest.txt" +#define PFM_RECORD_TIME_S (5u) +#define PFM_RECORD_BUF (1024) /* 1024 * 16KB = 16MB*/ /* 鍑芥暟瀹炵幇 */ void MSCP_PFM_LOG_BIN(IN const CM_CHAR *filename, IN const CM_CHAR *func, IN CM_INT32 line, IN const CM_UINT8 *Buf, IN CM_UINT32 Len); @@ -202,6 +209,7 @@ void MSCP_LOG_DATALEN(IN CM_UINT8 *Buf, IN CM_UINT32 Len, IN char *Annotation); CM_UINT8 PFM_LOG_GET_STOP_FLAG(void); void PFM_SendLastAssertLog(void); +void MSCP_ASSERT_TraceLog(void); CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define DARK_FAULT_CODE_MERGE(Mode,faultCode,funNum) (PFM_DarkLogGenerate(Mode,faultCode,funNum)) /***************************鏆楁枃鏃ュ織鏁呴殰鐮佷俊鎭紪鐮佽〃****************************/ @@ -275,6 +283,26 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define DARK_FAULT_CODE_FUN_ORDER_38 (0x26u) #define DARK_FAULT_CODE_FUN_ORDER_39 (0x27u) #define DARK_FAULT_CODE_FUN_ORDER_40 (0x28u) +#define DARK_FAULT_CODE_FUN_ORDER_41 (0x29u) +#define DARK_FAULT_CODE_FUN_ORDER_42 (0x2Au) +#define DARK_FAULT_CODE_FUN_ORDER_43 (0x2Bu) +#define DARK_FAULT_CODE_FUN_ORDER_44 (0x2Cu) +#define DARK_FAULT_CODE_FUN_ORDER_45 (0x2Du) +#define DARK_FAULT_CODE_FUN_ORDER_46 (0x2Eu) +#define DARK_FAULT_CODE_FUN_ORDER_47 (0x2Fu) +#define DARK_FAULT_CODE_FUN_ORDER_48 (0x30u) +#define DARK_FAULT_CODE_FUN_ORDER_49 (0x31u) +#define DARK_FAULT_CODE_FUN_ORDER_50 (0x32u) +#define DARK_FAULT_CODE_FUN_ORDER_51 (0x33u) +#define DARK_FAULT_CODE_FUN_ORDER_52 (0x34u) +#define DARK_FAULT_CODE_FUN_ORDER_53 (0x35u) +#define DARK_FAULT_CODE_FUN_ORDER_54 (0x36u) +#define DARK_FAULT_CODE_FUN_ORDER_55 (0x37u) +#define DARK_FAULT_CODE_FUN_ORDER_56 (0x38u) +#define DARK_FAULT_CODE_FUN_ORDER_57 (0x39u) +#define DARK_FAULT_CODE_FUN_ORDER_58 (0x3Au) +#define DARK_FAULT_CODE_FUN_ORDER_59 (0x3Bu) +#define DARK_FAULT_CODE_FUN_ORDER_60 (0x3Cu) /**************鍏蜂綋瀹曟満鍘熷洜缂栫爜锛堝嚱鏁板唴鐨勫畷鏈洪『搴忥級***************/ diff --git a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c index dd9d423..e69af64 100644 --- a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c +++ b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c @@ -2219,16 +2219,23 @@ static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 MSCP_LOG_MSG("error pack 0xa8 localState = %d partnerState = %d\n", localState, partnerState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_9)); } + else if(s_packFirstRecvTimer != s_packFirstSendTimer) + { + s_packSwitchAccredit = 1u; + s_switchAuthorization = 12u; + MSCP_LOG_MSG("error pack 0xa8 s_firstTimer = %d packTimer = %d\n", s_packFirstSendTimer, s_packFirstRecvTimer); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_10)); + } else { /*- 浜屾鑷冲垏绯荤姸鎬佺姸鎬 */ s_switchRmFlag = 0x55u; s_packSwitchAccredit = 0u; s_switchAuthorization = 0u; + s_firstState = ENUM_2x2_SHUTDOWN; } /*鍐嶆搴旂瓟*/ recvType = 0x58u; - s_firstState = ENUM_2x2_SHUTDOWN; } /*- 鍒囩郴鍛戒护璇锋眰鍥炲 */ PFM_RemoteSwitch_Send(recvType,packTimer,s_packSwitchAccredit,s_switchAuthorization); @@ -2930,19 +2937,19 @@ CM_UINT8 PFM_CCUSEB_Comstate(CM_UINT8 type) { case 0: /*- 鍒ゆ柇绾㈤氭帶鏄惁閫氫俊涓柇 */ - ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.CCU_A_Count) > 1)?1u:0u; + ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.CCU_B_Count) > 1)?1u:0u; break; case 1: /*- 鍒ゆ柇钃濋氭帶鏄惁閫氫俊涓柇 */ - ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.CCU_B_Count) > 1)?1u:0u; + ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.CCU_A_Count) > 1)?1u:0u; break; case 2: /*- 鍒ゆ柇绾覆鍙f槸鍚﹂氫俊涓柇 */ - ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.SEB_A_Count) > 1)?1u:0u; + ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.SEB_B_Count) > 1)?1u:0u; break; case 3: /*- 鍒ゆ柇钃濅覆鍙f槸鍚﹂氫俊涓柇 */ - ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.SEB_B_Count) > 1)?1u:0u; + ret = ((g_Hardware_boot_com_state.SYS_Count - g_Hardware_boot_com_state.SEB_A_Count) > 1)?1u:0u; break; default: ret = 1u; diff --git a/TSCP/src/MSCP/SFM/SFM_2oo2.c b/TSCP/src/MSCP/SFM/SFM_2oo2.c index 0d70b3e..c1c2ae3 100644 --- a/TSCP/src/MSCP/SFM/SFM_2oo2.c +++ b/TSCP/src/MSCP/SFM/SFM_2oo2.c @@ -54,6 +54,7 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E static void s_2oo2_Send_Crash(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msgType); /* 缁存姢妯″紡2oo2鎺ユ敹 */ static CM_INT32 s_2oo2_Recv_Crash(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT ENUM_2oo2_MSG_T *pMsgType,STRU_2OO2_CTRL_T *p_2oo2_Ctrl); +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type); /** * @brief 2oo2涓婄數鍒濆鍖 * @param vitalBuf 鍏抽敭鏁版嵁鏁扮粍 @@ -245,6 +246,9 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ CM_UINT16 FrameIndex = 0u; /* 甯у簭鍙 */ CM_UINT32 FrameLen = 0u; /* 甯ч暱搴 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*绯荤粺鍛ㄦ湡鍙*/ + CM_UINT32 crc = 0u; + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 鍒ゆ柇鏄惁璁$畻CRC*/ + clacCrcFlag = s_isClac2oo2Crc(msgType); PFM_LOG_SET_STOPTIMER(TSCP_DARK_2OO2); /*- 鍏ュ彛妫鏌 */ CM_ASSERT(((DataLen >= 0) && (NULL != Data) && (NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); @@ -281,9 +285,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ { CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 23); /* 甯у簭鍙 */ (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25),(CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)NET_20K_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(NET_20K_SIZE + 25u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堝~鍐欐弧甯э級 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, NET_20K_SIZE + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[NET_20K_SIZE + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(29u + NET_20K_SIZE)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(25u + NET_20K_SIZE)); /* 浜ょ粰閫氫俊灞傚彂閫 */ - + } } /*- 鍙戦佸熬甯 */ @@ -291,8 +303,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ CM_LongToChar(21u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*闀垮害*/ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(25u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*闀垮害*/ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, FrameLen + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[FrameLen + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(29u + FrameLen)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(25u + FrameLen)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); } else @@ -313,6 +334,7 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg { /*- 鍙橀噺鍒濆鍖 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*绯荤粺鍛ㄦ湡鍙*/ + CM_UINT32 crc = 0u; /*- 鍏ュ彛妫鏌 */ CM_ASSERT(((NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); /* @@ -327,15 +349,17 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg 4瀛楄妭 CRC(鍚暱搴) */ /*- 濉厖鎶ユ枃澶 */ - CM_LongToChar(19u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ + CM_LongToChar(23u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ CM_LongToChar(p_2oo2_Ctrl->LocalID, p_2oo2_Ctrl->UDP_Cache + 4); /* 婧怚D */ CM_LongToChar(p_2oo2_Ctrl->PeerID, p_2oo2_Ctrl->UDP_Cache + 8); /* 鐩殑ID */ CM_LongToChar(SysCyc, p_2oo2_Ctrl->UDP_Cache + 12); /* 鍛ㄦ湡鍙 */ CM_LongToChar(p_2oo2_Ctrl->SN, p_2oo2_Ctrl->UDP_Cache + 16); /* 搴忓垪鍙 */ p_2oo2_Ctrl->UDP_Cache[20] = (CM_UINT8)msgType; /* 绫诲瀷 */ CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 21); /* 閲嶄紶搴忓彿 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, 23); + CM_LongToChar(crc, p_2oo2_Ctrl->UDP_Cache + 23); - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)23); /* 浜ょ粰閫氫俊灞傚彂閫 */ + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)27); /* 浜ょ粰閫氫俊灞傚彂閫 */ } /** * @brief 2oo2鎺ユ敹鏀寔閲嶄紶 @@ -366,7 +390,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E CM_INT32 allLen = 0; /* 鏀跺埌鐨勬姤鏂囨婚暱搴 */ CM_UINT8 type = 0u; /* 鎶ユ枃绫诲瀷 */ CM_UINT16 ARQ_Cut = 0u; /* 璁板綍閲嶄紶璇锋眰娆℃暟 */ - + CM_UINT32 msgCrc = 0u; /* 鎶ユ枃CRC */ + CM_UINT32 calcCrc = 0u; /* 鏈湴璁$畻CRC */ + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 鍒ゆ柇鏄惁璁$畻CRC*/ CM_UINT16 ARQ_FrameStart = 0u;/* 閲嶄紶甯у簭鍙 */ CM_UINT8 MineRcvSuccessFlag = CM_FALSE;/*鏈満鎺ユ敹瀹屾垚鏍囧織*/ CM_UINT8 PeerRcvSuccessFlag = CM_FALSE;/*瀵圭郴鎺ユ敹瀹屾垚鏍囧織*/ @@ -385,7 +411,7 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E /*- 浠庨氫俊灞傛帴鏀2oo2鎶ユ枃 */ rxLen = p_2oo2_Ctrl->DataRecv(p_2oo2_Ctrl->UDP_Cache, (CM_UINT32)sizeof(p_2oo2_Ctrl->UDP_Cache)); /*- 鏀跺埌鐨勬姤鏂囬暱搴︽槸鍚﹀ぇ浜23 */ - if (23 <= rxLen) + if (25 <= rxLen) { /*- 瑙f瀽2oo2鎶ユ枃澶 */ @@ -408,11 +434,22 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E msgCyc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 12); msgSN = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 16); type = p_2oo2_Ctrl->UDP_Cache[20]; + clacCrcFlag = s_isClac2oo2Crc(type); + if(ENUM_CM_TRUE == clacCrcFlag) + { + msgCrc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + msgLen); + calcCrc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, msgLen); + } + else + { + calcCrc = msgCrc; + } if (((msgLen + 4u) == (CM_UINT32)rxLen) && (SrcID == p_2oo2_Ctrl->PeerID) && (DstID == p_2oo2_Ctrl->LocalID) && (msgCyc == sysCyc) - && (msgSN == p_2oo2_Ctrl->SN)) + && (msgSN == p_2oo2_Ctrl->SN) + && (msgCrc == calcCrc)) { switch(type) { @@ -444,7 +481,14 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E if (CM_FALSE == MineRcvSuccessFlag) { pData = p_2oo2_Ctrl->UDP_Cache + 25; + if(ENUM_CM_TRUE == clacCrcFlag) + { + DataLen = (CM_INT32)msgLen - 25; + } + else + { DataLen = (CM_INT32)msgLen - 21; + } /*- 鍒嗗抚鎺ユ敹2oo2鎶ユ枃 */ ret = SFM_FrameSave(&p_2oo2_Ctrl->FrameCtrl, type, FrameNum, FrameIndex, pData, DataLen, RxData, &allLen, RxSize); /*- 鏄惁鏀堕綈浜嗗畬鏁2oo2鎶ユ枃 */ @@ -477,9 +521,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E } else { - MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d\n", + MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d, crc:%d, calcrc:%d\n", rxLen, msgLen, SrcID, p_2oo2_Ctrl->PeerID, DstID, p_2oo2_Ctrl->LocalID, - msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type); + msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type, msgCrc, calcCrc); (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2OO2_RCV_ERR,11u, sizeof(CM_INT32),rxLen, sizeof(CM_UINT32),msgLen, @@ -975,7 +1019,7 @@ void SFM_2oo2_Reset_AutoRbootCut(void) RM_Reset_FaultRbootCut(0); CM_RE_ASSERT(cut == 0u, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); /*- 鍚屾椂淇敼鏃堕棿闃堝*/ - g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u;; + g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u; } else { @@ -983,6 +1027,19 @@ void SFM_2oo2_Reset_AutoRbootCut(void) } } } +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type){ + ENUM_CM_RETURN rt = ENUM_CM_TRUE; + switch (type) + { + case ENUM_2oo2_INPUT_EX: + case ENUM_2oo2_END_EX: + rt = ENUM_CM_FALSE; + break; + default: + break; + } + return rt; +} /** * @brief 鍒濆鍖2鍙栨帶鍒舵暟鎹互鍙婃竻绌2鍙栫紦鍐插尯 diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index 5a1b74f..3c34d10 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.c +++ b/TSCP/src/MSCP/SFM/SFM_2x2.c @@ -97,6 +97,10 @@ static CM_BOOL s_State_2x2_Analysis(OUT STRU_2X2_STATE_CTRL_T *p_partner_state,C static ENUM_CM_RETURN s_State_2x2Sync(OUT STRU_2X2_STATE_CTRL_T *p_partner_state); static void s_State_Transition(void); +/** + * 缁熶竴缃垏绯绘爣蹇 + */ +static void s_2x2_CloseSwitchFlag(void); /** * @brief 2X鐘舵佸垏鎹㈢嫭绔嬬嚎绋 */ @@ -206,7 +210,7 @@ static void s_State_Switch(void) { s_timeSecond = CM_GetTick(); /*- 褰撴鎸変笅鏃堕棿璺濈涓娆℃寜涓嬫椂闂寸浉宸3s,鍒欏垽鏂槸鍚﹂渶瑕佸垏绯 */ - if(s_timeSecond - s_timeFirst >= MSCP_2X2_SWITCH_3S) + if((s_timeSecond - s_timeFirst) >= MSCP_2X2_SWITCH_3S) { /*- 濡傛灉鏈垏绯诲垯鍑嗗鍒囩郴,濡傛灉浠ュ垏绯诲垯浼戠湢鍚庣户缁瓑寰呮澗寮鎸夐挳,闃叉鎸佺画鎸夊帇 */ if((s_LocalState == s_2x2_state_Ctrl.LocalState) && (s_PartnerState == s_2x2_state_Ctrl.PartnerState)) @@ -632,6 +636,7 @@ static void s_State_Transition(void) /*- 鍙橀噺鍒濆鍖 */ CM_UINT8 boardID = 0u; /* 鏉垮崱ID */ static CM_UINT32 dropCount = 0u; + CM_UINT32 comstate = 0u; /* 鍥涚嚎閫氫俊鐘舵侊紝鏈変笁绾挎甯稿嵆涓簅k*/ ENUM_CM_RETURN Flag_Sick_Down = ENUM_CM_FALSE; /* TODO锛氬鏋滆嚜宸卞仴搴峰害涓嶈冻浠ュ崌涓 */ ENUM_2x2_STATE_T TempState = ENUM_2x2_SHUTDOWN; /*涓存椂鐘舵*/ @@ -686,6 +691,7 @@ static void s_State_Transition(void) s_2x2_state_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN; /*閫氫俊SN鍙锋竻绌-闃叉瀵圭郴閲嶆柊涓婄數鍚庝笉鎺ユ敹鏂扮殑SN鍙*/ s_2x2_state_Ctrl.RxSN = 0u; + s_2x2_state_Ctrl.RxStateSysCyc = 0u; } else { @@ -725,7 +731,7 @@ static void s_State_Transition(void) { /*- 鏃犲鐞 */ SFM_LOG_MSG_2X("Transition:2x2:OFFLINE>SLAVE SysCyc:%d,BF:%d,AF:%d,COK:%d,OUT:%d,TS:%d,AFC:%d\n", - s_2x2_state_Ctrl.SysCyc,s_2x2_state_Ctrl.LastRxInputSysCyc, + s_2x2_state_Ctrl.SysCyc,s_2x2_state_Ctrl.LastRxInputSysCyc,s_2x2_state_Ctrl.LastFollowCyc, s_2x2_state_Ctrl.LastCheckOKCount,s_2x2_state_Ctrl.OutPutCheckFailFlag, s_2x2_state_Ctrl.TimeSyncFlag, s_2x2_state_Ctrl.AppFollowCmpFlag); @@ -765,7 +771,7 @@ static void s_State_Transition(void) /*濡傛灉鑷繁灏嗙寮绂荤嚎鐘舵侊紝澶嶄綅绂荤嚎璁℃椂鍣*/ s_2x2_state_Ctrl.offLineCounter = 0u; } - else if ((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || (ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState)) + else if (((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || (ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState)) && (CM_TRUE == s_2x2_state_Ctrl.preMasterAllowed)) { /*濡傛灉瀵圭郴瀹曟満鎴栫绾匡紝绱Н绂荤嚎璁℃椂*/ if (s_2x2_state_Ctrl.offLineCounter <= (MSCP_2x2_OFFLINE_WAIT * (s_2x2_thread_Ctrl.number_Cyc - 1u))) @@ -842,22 +848,14 @@ static void s_State_Transition(void) /*- 杩斿洖 */ break; case ENUM_2x2_MASTER:/*-< 涓荤郴 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; /* 涓荤郴闄嶇绾垮悗锛屼箣鍚庡嚭鐜板弻绂荤嚎鍙氳繃棰勫崌涓诲崌涓*/ /*濡傛灉鍋ュ悍搴﹁〃绀洪渶瑕佸垏绯伙紝鍒欒嚜宸遍檷绂荤嚎*/ /*- 鑷繁鏄惁鍋ュ悍搴︿笉瓒 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { /*- 鏈郴闄嶇绾 */ s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); #if 0 s_2x2_state_Ctrl.RxBaseFollowSysCyc = 0u; /**< 鏀跺埌鐨勫绯昏窡闅忔暟鎹殑鍛ㄦ湡鍙凤紝2oo2浜ゆ崲 */ s_2x2_state_Ctrl.RxAppFollowSysCyc = 0u; /**< 鏀跺埌鐨勫绯诲簲鐢ㄨ窡闅忔暟鎹殑鍛ㄦ湡鍙凤紝2oo2浜ゆ崲 */ @@ -899,37 +897,19 @@ static void s_State_Transition(void) } } - else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && + else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LastPartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.PartnerSwitchState) && (1u == s_2x2_state_Ctrl.ctrSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 妫娴嬪埌瀵圭郴鏄绯伙紝涓斿弻绯诲垏绯绘寜閽姸鎬佷负ENUM_2x2_SWITCH_OPEN锛屼富绯婚檷涓哄绯*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(SWITCH)\n"); } else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (1u == s_2x2_state_Ctrl.aidSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 妫娴嬪埌瀵圭郴鏄绯伙紝涓斿厑璁窤ID鍒囩郴锛 涓荤郴闄嶄负澶囩郴*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(AID SWITCH)\n"); } else @@ -939,6 +919,7 @@ static void s_State_Transition(void) /*- 杩斿洖 */ break; case ENUM_2x2_SLAVE:/*-< 澶囩郴 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_FALSE; /* 澶囩郴闄嶇绾垮悗锛岀姝㈤氳繃棰勫崌涓诲崌涓*/ /*- 鑷繁鏄惁鍋ュ悍搴︿笉瓒 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { @@ -958,7 +939,7 @@ static void s_State_Transition(void) (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineUartOKCount[0],0u)) && (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u))) { - /*鍓嶄袱涓懆鏈熸槸鍚﹀瓨鍦ㄤ腑鏂-鏈懆鏈熶覆鍙f槸鍚︽甯-骞朵笖瀵圭郴涓嶆槸涓荤郴鍒欏崌涓*/ + /*鍦ㄥ畬鍏ㄤ腑鏂墠锛屾湁涓夌嚎閫氫俊姝e父鍒欏厑璁稿垏绯*/ if( /*涓庡綋鍓嶅懆鏈熷樊3-5璁や负姝e父锛岃秴杩囬槇鍊艰涓轰笉鍚屾椂鏂嚎锛岄氫俊鏁呴殰*/ (MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) && (MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.PeerComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) && @@ -967,6 +948,11 @@ static void s_State_Transition(void) { /*涓嶅瓨鍦ㄦ柇绾匡紝鍒ゆ柇涓哄畷鏈烘垨鏂數鍗囦富*/ /*- 鏈郴鍗囦富 */ + if(ENUM_2x2_SLAVE != s_2x2_state_Ctrl.LastLocalState && ENUM_2x2_MASTER != s_2x2_state_Ctrl.LastLocalState) + { + /* 鍗囧鍚庡簲鐢ㄨ繕娌℃湁鎴愬姛璺熼殢杩囷紝绂佹鍗囦富锛屼富绯诲畷鏈猴紝璺熼殢瀹曟満*/ + CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + } s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; @@ -980,6 +966,7 @@ static void s_State_Transition(void) s_2x2_state_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN; /*閫氫俊SN鍙锋竻绌-闃叉瀵圭郴閲嶆柊涓婄數鍚庝笉鎺ユ敹鏂扮殑SN鍙*/ s_2x2_state_Ctrl.RxSN = 0u; + s_2x2_state_Ctrl.RxStateSysCyc = 0u; SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER锛侊紒锛(ALL interrupt)\n"); } else @@ -994,42 +981,37 @@ static void s_State_Transition(void) CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); } } - else if((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || - ((ENUM_2x2_MASTER != s_2x2_state_Ctrl.PartnerState) &&/*TODO 瀵圭郴鐘舵佸繀椤绘槸鏈鏂扮殑*/ - (ENUM_2x2_MASTER == s_2x2_state_Ctrl.LastLocalState))) + else if((ENUM_2x2_MASTER != s_2x2_state_Ctrl.PartnerState) &&/*TODO 瀵圭郴鐘舵佸繀椤绘槸鏈鏂扮殑*/ + (ENUM_2x2_MASTER == s_2x2_state_Ctrl.LastLocalState)) { s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(ROLLBACK\n"); } + else if(ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) + { + if(ENUM_2x2_SLAVE != s_2x2_state_Ctrl.LastLocalState) + { + s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; + SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(Master OFFLINE SLAVE DOWN\n"); + } + else + { + s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; + s_2x2_CloseSwitchFlag(); + SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(Master OFFLINE SLAVE UP\n"); + } + } /*- 涓庝富绯昏緭鍑轰笉涓鑷 鎴栧簲鐢ㄨ窡闅忔暟鎹笉涓鑷*/ else if((1u == s_2x2_state_Ctrl.OutPutCheckFailFlag) || (1u == s_2x2_state_Ctrl.AppFollowCmpFlag)) { s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(OutPut failed)\n"); - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); } else if((ENUM_2x2_MASTER == s_2x2_state_Ctrl.PartnerState) && ((1u == s_2x2_state_Ctrl.aidSwitchFlag)||(1u == s_2x2_state_Ctrl.ctrSwitchFlag)) && - (0u == s_2x2_state_Ctrl.MicroCyc)) + (0u == s_2x2_state_Ctrl.MicroCyc) && (ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LastLocalState)) { /*鏄惁婊¤冻鑷冲皯涓涓互澶綉鍜屼换涓閫氶亾*/ if(((ENUM_CM_TRUE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineComOKCount[0],0u)) && @@ -1051,16 +1033,7 @@ static void s_State_Transition(void) /*鎶ヨ绂佹鍒囩郴*/ SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>SLAVE(NOT MASTER)\n"); } - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); } /*- 涓庡绯绘槸鍚﹀悓姝ヨ秴鏃 */ else if ((s_2x2_state_Ctrl.SysCyc - s_2x2_state_Ctrl.LastCheckOKCount) >= MSCP_2X2_SYNC_TIMEOUT_CYC) @@ -1123,7 +1096,7 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 鏃犲鐞*/ } /*寰皬鍛ㄦ湡鎵ц*/ - for(s_2x2_state_Ctrl.MicroCyc = 0;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) + for(s_2x2_state_Ctrl.MicroCyc = 0u;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) { /*- 璁板綍璧峰鏃堕棿*/ sTick = CM_GetTick(); @@ -1175,7 +1148,7 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 璁板綍褰撳墠鏃堕棿*/ CM_Sleep(1); curTick[5] = CM_GetTick(); - }while(((curTick[5] - sTick) < MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION) && (s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc-1u) /*ms*/); + }while(((curTick[5] - sTick) < (MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION)) && (s_2x2_state_Ctrl.MicroCyc < (s_2x2_thread_Ctrl.number_Cyc-1u)) /*ms*/); SFM_LOG_MSG_2X("2x2_StateChange_Thread[%d],ST:%dms,2T1:%dms,XT:%dms,2T2:%dms,TT:%dms,OT:%dms,M:%d,S:%d\n",s_2x2_state_Ctrl.MicroCyc, (curTick[0] - sTick)/CM_UNSIGNED_MILLION,(curTick[1] - sTick)/CM_UNSIGNED_MILLION, (curTick[2] - sTick)/CM_UNSIGNED_MILLION,(curTick[3] - sTick)/CM_UNSIGNED_MILLION, @@ -1435,6 +1408,7 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U CM_Sem_Init(&s_2x2_thread_Ctrl.m_Start); CM_Sem_Init(&s_2x2_thread_Ctrl.m_Stop); + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; /*鍒濆鍖栧簲鐢ㄨ窡闅忔暟鎹紦鍐插尯*/ g_TxAppFollow_len = 4; CM_LongToChar(0u, g_TxAppFollow); @@ -1499,11 +1473,11 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U { offset = (myOffset + peerOffset) / 2u; } - else if (myOffset < MSCP_CYC_TIME * CM_UNSIGNED_MILLION) + else if (myOffset < (MSCP_CYC_TIME * CM_UNSIGNED_MILLION)) { offset = myOffset; } - else if (peerOffset < MSCP_CYC_TIME * CM_UNSIGNED_MILLION) + else if (peerOffset < (MSCP_CYC_TIME * CM_UNSIGNED_MILLION)) { offset = peerOffset; } @@ -1926,7 +1900,7 @@ static void s_2x2_Recv(void) /*- 鍒嗗抚鎺ユ敹璺熼殢鎶ユ枃 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_2); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_3); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxBaseFollow, &g_RxBaseFollow_len, (CM_UINT32)sizeof(g_RxBaseFollow)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxBaseFollow, &g_RxBaseFollow_len, (CM_UINT32)sizeof(g_RxBaseFollow)); /*- 鏄惁鏀堕綈浜嗚窡闅忔姤鏂 */ if (ENUM_CM_TRUE == ret) { @@ -1960,7 +1934,7 @@ static void s_2x2_Recv(void) /*- 鍒嗗抚鎺ユ敹璺熼殢鎶ユ枃 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_5); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_6); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollow, &g_RxAppFollow_len, (CM_UINT32)sizeof(g_RxAppFollow)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollow, &g_RxAppFollow_len, (CM_UINT32)sizeof(g_RxAppFollow)); /*- 鏄惁鏀堕綈浜嗚窡闅忔姤鏂 */ if (ENUM_CM_TRUE == ret) { @@ -1993,7 +1967,7 @@ static void s_2x2_Recv(void) /*- 鍒嗗抚鎺ユ敹璺熼殢鎶ユ枃 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_17); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_19); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW_CRC, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollowCrc, &g_RxAppFollowCrc_len, (CM_UINT32)sizeof(g_RxAppFollowCrc)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW_CRC, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollowCrc, &g_RxAppFollowCrc_len, (CM_UINT32)sizeof(g_RxAppFollowCrc)); /*- 鏄惁鏀堕綈浜嗚窡闅忔姤鏂 */ if (ENUM_CM_TRUE == ret) { @@ -2061,7 +2035,7 @@ static void s_2x2_Recv(void) /*- 鍒嗗抚鎺ユ敹鏁版嵁鍚屾鎶ユ枃 */ CM_RE_ASSERT(FrameNum <= (SFM_OUTNETSAFE_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_11); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_12); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, g_2x2oo2_rx[g_2x2oo2_base][type].p_rmt_mine_buf, &g_2x2oo2_rx[g_2x2oo2_base][type].rmt_mine_len, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][type].buf_size); @@ -2104,14 +2078,14 @@ static void s_2x2_Recv(void) /*- 鍒嗗抚鎺ユ敹鏁版嵁鍚屾鎶ユ枃 */ CM_RE_ASSERT(FrameNum <= (SFM_OUTNETSAFE_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_15); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_16); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, - g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].p_rmt_peer_buf, - &g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].rmt_peer_len, - (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].buf_size); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, + g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].p_rmt_peer_buf, + &g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].rmt_peer_len, + (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].buf_size); /*璁板綍瀵圭郴閭绘満鏁版嵁闀垮害*/ - s_2x2_Ctrl.InPutDoublePassLen[type-g_2x2oo2_data_num][1] = g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].rmt_peer_len; + s_2x2_Ctrl.InPutDoublePassLen[(CM_INT32)type-g_2x2oo2_data_num][1] = g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].rmt_peer_len; /*- 鏄惁鏀堕綈浜嗗叏閮ㄦ暟鎹悓姝ユ姤鏂 */ - if ((ENUM_CM_TRUE == ret) && (type == g_2x2RcvMaxNum[1])) + if ((ENUM_CM_TRUE == ret) && ((CM_UINT8)type == g_2x2RcvMaxNum[1])) { /*- 鏇存柊瀵圭郴杈撳叆鐘舵 */ s_2x2_Ctrl.InputPeerSysCyc = msgCyc; @@ -2315,7 +2289,7 @@ void SFM_2x2_InputProc(void) SFM_SetSfpPrtclFollowData(len_sfprtcl, g_RxBaseFollow + 4u + len_prtcl + 4u); /*- 骞冲彴鏁版嵁璺熼殢*/ - len_pfm = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl + 4u); + len_pfm = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl + 4u + len_sfprtcl); CM_RE_ASSERT(len_pfm == ((CM_UINT32)g_RxBaseFollow_len - len_prtcl - len_sfprtcl - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_4); CM_RE_ASSERT(len_pfm == 8u, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_5); /*姝ゅ浣跨敤涓存椂鍛ㄦ湡鍙锋帴鏀,鍦ㄥ懆鏈熸湯鍚屾*/ @@ -2590,7 +2564,7 @@ static void SFM_2x2_RecvAppFollowData(CM_UINT32 sysCyc, ENUM_2x2_STATE_T stat) ret = SFM_2oo2_Exchange_Currency(g_RxAppFollow, g_RxAppFollow_len, g_RxAppFollow, 0u, ENUM_2oo2_END_EX); } - CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1); } /*- 鏄惁闇瑕佷粠閭绘満鎺ユ敹搴旂敤鍚屾鏁版嵁 */ else if (s_2x2_Ctrl.RxAppFollowSysCyc < peerCtrl.RxAppFollowSysCyc) @@ -2600,7 +2574,7 @@ static void SFM_2x2_RecvAppFollowData(CM_UINT32 sysCyc, ENUM_2x2_STATE_T stat) { /*- 鎺ユ敹搴旂敤璺熼殢鏁版嵁鐨凜RC鍜岄暱搴*/ MSCP_LOG_MSG("B-A:g_RxAppFollowCrc_len:%lld\n",g_RxAppFollowCrc_len); - g_RxAppFollow_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); + g_RxAppFollowCrc_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); } else { @@ -2703,7 +2677,7 @@ void SFM_2x2_EndProc(void) } MSCP_LOG_MSG("slef stata is %d use time = %lld\n",stat,(curTickTest[1] - curTickTest[0]) / 1000u); /*鏇存柊鍛ㄦ湡鍙*/ - if ((s_2x2_Ctrl.RxBaseFollowSysCyc >= sysCyc) && (ENUM_2x2_MASTER != stat)) + if ((s_2x2_Ctrl.SysCycSync >= sysCyc) && (ENUM_2x2_MASTER != stat)) { g_MSCP_SysCount = s_2x2_Ctrl.SysCycSync; } @@ -3063,7 +3037,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) 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); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); } else { @@ -3094,7 +3068,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) 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); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); } else if(peerCtrl->InPutDoublePassLen[i][0] > s_2x2_Ctrl.InPutDoublePassLen[i][1]) @@ -3121,7 +3095,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) 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); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_4); } else if(peerCtrl->InPutDoublePassLen[i][1] > s_2x2_Ctrl.InPutDoublePassLen[i][0]) { @@ -3404,3 +3378,19 @@ void SFM_2x2_SemPost(void) } } +/** + * 缁熶竴缃垏绯绘爣蹇 + */ +static void s_2x2_CloseSwitchFlag(void) +{ + s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.ctrSwitchFlag = 0u; + s_2x2_state_Ctrl.aidSwitchFlag = 0u; +} diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.h b/TSCP/src/MSCP/SFM/SFM_2x2.h index fb51f6a..6fedc57 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.h +++ b/TSCP/src/MSCP/SFM/SFM_2x2.h @@ -247,6 +247,8 @@ extern CM_UINT32 g_MSCP_SysCount; ENUM_2x2_AID_SWITCH_STATE PartnerAIDSwitchState; /**< 瀵圭郴鐨勪富鍔ㄥ垏绯绘寜閽姸鎬 */ ENUM_2x2_AID_SWITCH_STATE PartPeerAIDSwitchState; /**< 瀵圭郴鐨勯偦鏈虹殑涓诲姩鍒囩郴鎸夐挳鐘舵 */ CM_UINT8 aidSwitchFlag; /**< aid鍒囩郴鎺у埗鏍囧織 */ + /* 绂荤嚎鏄惁鍏佽鍗囬鍗囦富*/ + CM_BOOL preMasterAllowed; }STRU_2X2_STATE_CTRL_T; /*2x鐘舵佸垏鎹㈢嚎绋嬪弬鏁*/ typedef struct diff --git a/TSCP/src/MSCP/SFM/SFM_Prtcl.c b/TSCP/src/MSCP/SFM/SFM_Prtcl.c index bb32bbc..0f538b0 100644 --- a/TSCP/src/MSCP/SFM/SFM_Prtcl.c +++ b/TSCP/src/MSCP/SFM/SFM_Prtcl.c @@ -1,23 +1,23 @@ 锘/** -* @file SFM_Prtcl.c -* @brief Safe Function Module: 瀹夊叏鍗忚澶勭悊 -* @details -* 浠庨氫俊灞傝幏鍙栬緭鍏ユ暟鎹氦缁欏钩鍙板眰浜ゆ崲銆佹瘮杈 -* 浠庡钩鍙板眰鑾峰彇杈撳叆鏁版嵁浜ょ粰鍗忚灞傝В鏋 -* 浠庡崗璁眰鑾峰彇杈撳叆鏁版嵁浜ょ粰搴旂敤灞備娇鐢 -* 浠庡簲鐢ㄥ眰鑾峰彇杈撳嚭鏁版嵁浜ょ粰鍗忚灞傚皝瑁 -* 浠庡崗璁眰鑾峰彇杈撳嚭鏁版嵁浜ょ粰骞冲彴灞傛瘮杈 -* 浠庡钩鍙板眰鑾峰彇杈撳嚭鏁颁氦缁欓氫俊灞傚彂閫 -* @author GT-BU -* @date 2021.02.20 -* @version V1.0 -* @copyright TCT -* @par 淇敼鏃ュ織 -* -*
Date Version Author Description -*
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 -*
-*/ + * @file SFM_Prtcl.c + * @brief Safe Function Module: 瀹夊叏鍗忚澶勭悊 + * @details + * 浠庨氫俊灞傝幏鍙栬緭鍏ユ暟鎹氦缁欏钩鍙板眰浜ゆ崲銆佹瘮杈 + * 浠庡钩鍙板眰鑾峰彇杈撳叆鏁版嵁浜ょ粰鍗忚灞傝В鏋 + * 浠庡崗璁眰鑾峰彇杈撳叆鏁版嵁浜ょ粰搴旂敤灞備娇鐢 + * 浠庡簲鐢ㄥ眰鑾峰彇杈撳嚭鏁版嵁浜ょ粰鍗忚灞傚皝瑁 + * 浠庡崗璁眰鑾峰彇杈撳嚭鏁版嵁浜ょ粰骞冲彴灞傛瘮杈 + * 浠庡钩鍙板眰鑾峰彇杈撳嚭鏁颁氦缁欓氫俊灞傚彂閫 + * @author GT-BU + * @date 2021.02.20 + * @version V1.0 + * @copyright TCT + * @par 淇敼鏃ュ織 + * + *
Date Version Author Description + *
2021.02.01 V1.0 GT-BU 鍒涘缓鍒濆鐗堟湰 + *
+ */ #include "SFM_Prtcl.h" #include "CM_Convert.h" @@ -42,12 +42,12 @@ #include "protclInterFun.h" #include "sfpplatform.h" #include "dsuProtclFun.h" -static CM_UINT8 s_Prtcl_UDP_Cache[NET_UDP_BUF_SIZE]; /**< UDP缂撳啿鍖 */ -static CM_UINT8 s_TmpCache[SFM_TMP_CACHE_SIZE]; /**< 澶栫綉閫氫俊涓存椂缂撳啿鍖 */ +static CM_UINT8 s_Prtcl_UDP_Cache[NET_UDP_BUF_SIZE]; /**< UDP缂撳啿鍖 */ +static CM_UINT8 s_TmpCache[SFM_TMP_CACHE_SIZE]; /**< 澶栫綉閫氫俊涓存椂缂撳啿鍖 */ static ProtclConfigInfoStru s_OutnetPrtcl; /**< 澶栫綉閫氫俊鎺у埗缁撴瀯浣 */ -static struc_Unify_Info s_InnetPrtcl; /**< 鍐呯綉閫氫俊鎺у埗缁撴瀯浣 */ -static struc_Unify_Info s_InnetPrtcl_RM; /**< 杩滅▼閮ㄧ讲鍐呯綉閫氫俊鎺у埗缁撴瀯浣 */ +static struc_Unify_Info s_InnetPrtcl; /**< 鍐呯綉閫氫俊鎺у埗缁撴瀯浣 */ +static struc_Unify_Info s_InnetPrtcl_RM; /**< 杩滅▼閮ㄧ讲鍐呯綉閫氫俊鎺у埗缁撴瀯浣 */ static CM_MUTEX_T s_Outnet_AppSend_M; static STRU_CM_QUEUE_T s_Outnet_AppSendQ; @@ -70,342 +70,351 @@ static STRU_CM_QUEUE_T s_Innet_AppRecvQ; static CM_MUTEX_T s_Innet_RmRecv_M; static STRU_CM_QUEUE_T s_Innet_RmRecvQ; -extern CM_UINT32 g_MSCP_SysCount; /**< 绯荤粺鍛ㄦ湡鍙 */ +extern CM_UINT32 g_MSCP_SysCount; /**< 绯荤粺鍛ㄦ湡鍙 */ extern CM_INT32 g_PFM_Check; static CM_UINT32 s_txSn = 1u; /** -* @breif 澶栫綉瀹夊叏鍗忚鍒濆鍖(-1) -* @details -* 澶栫綉瀹夊叏鍗忚鐨勫垵濮嬪寲 -* 鍒濆鍖栧け璐ュ皢瀹曟満 -*/ + * @brief 澶栫綉鎺ユ敹鍚庣殑鍘婚噸鎿嶄綔 + * @param redData 绾㈢綉鏁版嵁鎸囬拡 + * @param redDataLen 绾㈢綉鏁版嵁闀垮害 + * @param blueData 钃濈綉鏁版嵁鎸囬拡 + * @param blueDataLen 钃濈綉鏁版嵁闀垮害 + */ +static CM_UINT8 s_Outnet_Recv_Dedup(CM_UINT8 *redData, CM_UINT32 redDataLen, CM_UINT8 *blueData, CM_UINT32 *blueDataLen); +/** + * @breif 澶栫綉瀹夊叏鍗忚鍒濆鍖(-1) + * @details + * 澶栫綉瀹夊叏鍗忚鐨勫垵濮嬪寲 + * 鍒濆鍖栧け璐ュ皢瀹曟満 + */ void SFM_PrtclOutInit(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - CM_UINT16 OutnetID = g_PFM_Cfg.OUTNET_ID; /* 澶栫綉ID */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + CM_UINT16 OutnetID = g_PFM_Cfg.OUTNET_ID; /* 澶栫綉ID */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; - /*- @alias 澶栫綉瀹夊叏鍗忚鍒濆鍖*/ - if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) - { - s_OutnetPrtcl.cpuId = g_PFM_Cfg.CPU_ID - 1u;/* cpuId鍜屽簲鐢ㄨ緭鍑烘暟鎹笌svc鏈夊叧 */ - s_OutnetPrtcl.LocalID = (CM_UINT8)(OutnetID % 256u); - s_OutnetPrtcl.LocalType = (CM_UINT8)(OutnetID / 256u); - s_OutnetPrtcl.CycleNum = &g_MSCP_SysCount; - s_OutnetPrtcl.InputSize = 6000u; - s_OutnetPrtcl.OutputSize = 6000u; - s_OutnetPrtcl.RecordArraySize = 30000u; - s_OutnetPrtcl.MaxNumPerCycle = 35u; /* 浠c涓句緥锛氬寘鏁*4*2*2*2 */ + /*- @alias 澶栫綉瀹夊叏鍗忚鍒濆鍖*/ + if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) + { + s_OutnetPrtcl.cpuId = g_PFM_Cfg.CPU_ID - 1u; /* cpuId鍜屽簲鐢ㄨ緭鍑烘暟鎹笌svc鏈夊叧 */ + s_OutnetPrtcl.LocalID = (CM_UINT8)(OutnetID % 256u); + s_OutnetPrtcl.LocalType = (CM_UINT8)(OutnetID / 256u); + s_OutnetPrtcl.CycleNum = &g_MSCP_SysCount; + s_OutnetPrtcl.InputSize = 7200u; + s_OutnetPrtcl.OutputSize = 7200u; + s_OutnetPrtcl.RecordArraySize = 30000u; + s_OutnetPrtcl.MaxNumPerCycle = 35u; /* 浠c涓句緥锛氬寘鏁*4*2*2*2 */ #if QNX - rt = ProtclInitFunc((CM_UINT8*)FS_FILE_PATH, (CM_UINT32)inParamLen, inParam, &s_OutnetPrtcl); + rt = ProtclInitFunc((CM_UINT8 *)FS_FILE_PATH, (CM_UINT32)inParamLen, inParam, &s_OutnetPrtcl); #else - CM_CHAR WIN32_profile[1024] = {0}; - strcat(&WIN32_profile, p_exe_path); - strcat(&WIN32_profile, FS_FILE_PATH); - rt = ProtclInitFunc((CM_UINT8*)&WIN32_profile, (CM_UINT32)inParamLen, inParam, &s_OutnetPrtcl); + CM_CHAR WIN32_profile[1024] = {0}; + strcat(&WIN32_profile, p_exe_path); + strcat(&WIN32_profile, FS_FILE_PATH); + rt = ProtclInitFunc((CM_UINT8 *)&WIN32_profile, (CM_UINT32)inParamLen, inParam, &s_OutnetPrtcl); #endif - /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ - CM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); + /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ + CM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); - /*- 鍒濆鍖栧簲鐢ㄥ缃戞帴鏀躲佸彂閫佺紦鍐插尯 */ - (void)CM_Mutex_Init(&s_Outnet_AppSend_M); - (void)CM_Mutex_Init(&s_Outnet_AppRecv_M); - ret = CM_QueueInitial(&s_Outnet_AppSendQ, SFM_OUTNETSAFE_BUFF_SIZE); - CM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); - ret = CM_QueueInitial(&s_Outnet_AppRecvQ, SFM_OUTNETSAFE_BUFF_SIZE); - CM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + /*- 鍒濆鍖栧簲鐢ㄥ缃戞帴鏀躲佸彂閫佺紦鍐插尯 */ + (void)CM_Mutex_Init(&s_Outnet_AppSend_M); + (void)CM_Mutex_Init(&s_Outnet_AppRecv_M); + ret = CM_QueueInitial(&s_Outnet_AppSendQ, SFM_OUTNETSAFE_BUFF_SIZE); + CM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); + ret = CM_QueueInitial(&s_Outnet_AppRecvQ, SFM_OUTNETSAFE_BUFF_SIZE); + CM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); - /*fs_init(FS_FILE_PATH);*/ - } - else + /*fs_init(FS_FILE_PATH);*/ + } + else { /*- 鏃犲鐞*/ } } /** -* @breif 鍐呯綉瀹夊叏鍗忚鍒濆鍖(sfp) -* @param p_SfpInnetPara鍐呯綉鍗忚buf -* @details -* 鍐呯綉瀹夊叏鍗忚鐨勫垵濮嬪寲 -* 鍒濆鍖栧け璐ュ皢瀹曟満 -*/ -void SFM_PrtclInInit(CM_UINT8* p_SfpInnetPara) + * @breif 鍐呯綉瀹夊叏鍗忚鍒濆鍖(sfp) + * @param p_SfpInnetPara鍐呯綉鍗忚buf + * @details + * 鍐呯綉瀹夊叏鍗忚鐨勫垵濮嬪寲 + * 鍒濆鍖栧け璐ュ皢瀹曟満 + */ +void SFM_PrtclInInit(CM_UINT8 *p_SfpInnetPara) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - CM_UINT16 InnetID = g_PFM_Cfg.INNET_ID_RM; /* 杩滅▼閮ㄧ讲鍐呯綉ID */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT16 InnetID1 = g_PFM_Cfg.INNET_ID; /* 鍐呯綉ID */ - /*- 鍏ュ弬鏄惁涓虹┖ */ - if ((0x55u == g_PFM_Cfg.M_InnetSafe_Enable) && (NULL != p_SfpInnetPara)) - { - /*- 鍐呯綉瀹夊叏鍗忚鍒濆鍖*/ - CM_NM_ASSERT(0u != InnetID1, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_9); - s_InnetPrtcl.LocalID = (CM_UINT8)(InnetID1 % 256u); - s_InnetPrtcl.LocalType = (CM_UINT8)(InnetID1 / 256u); - s_InnetPrtcl.TimeCounter = &g_MSCP_SysCount; - s_InnetPrtcl.RedundTimeout = 0xFFFFu; - s_InnetPrtcl.OutputTimeout = 0xFFFFu; - s_InnetPrtcl.DataBase = p_SfpInnetPara; - s_InnetPrtcl.MaxNumLink = 10u; - s_InnetPrtcl.MaxNumPerCycle = 5u; - s_InnetPrtcl.InputSize = 5000u; - s_InnetPrtcl.OutputSize = 5000u; - s_InnetPrtcl.OutnetQueueSize = 65000u; - s_InnetPrtcl.RecordArraySize = 65000u; - s_InnetPrtcl.CycleNum = &g_MSCP_SysCount; - rt = ProtclInit(0u, (CM_UINT32)0u, NULL, &s_InnetPrtcl); - /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ - CM_NM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_6); + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + CM_UINT16 InnetID = g_PFM_Cfg.INNET_ID_RM; /* 杩滅▼閮ㄧ讲鍐呯綉ID */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT16 InnetID1 = g_PFM_Cfg.INNET_ID; /* 鍐呯綉ID */ + /*- 鍏ュ弬鏄惁涓虹┖ */ + if ((0x55u == g_PFM_Cfg.M_InnetSafe_Enable) && (NULL != p_SfpInnetPara)) + { + /*- 鍐呯綉瀹夊叏鍗忚鍒濆鍖*/ + CM_NM_ASSERT(0u != InnetID1, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_9); + s_InnetPrtcl.LocalID = (CM_UINT8)(InnetID1 % 256u); + s_InnetPrtcl.LocalType = (CM_UINT8)(InnetID1 / 256u); + s_InnetPrtcl.TimeCounter = &g_MSCP_SysCount; + s_InnetPrtcl.RedundTimeout = 0xFFFFu; + s_InnetPrtcl.OutputTimeout = 0xFFFFu; + s_InnetPrtcl.DataBase = p_SfpInnetPara; + s_InnetPrtcl.MaxNumLink = 10u; + s_InnetPrtcl.MaxNumPerCycle = 5u; + s_InnetPrtcl.InputSize = 5000u; + s_InnetPrtcl.OutputSize = 5000u; + s_InnetPrtcl.OutnetQueueSize = 65000u; + s_InnetPrtcl.RecordArraySize = 65000u; + s_InnetPrtcl.CycleNum = &g_MSCP_SysCount; + rt = ProtclInit(0u, (CM_UINT32)0u, NULL, &s_InnetPrtcl); + /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ + CM_NM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_6); - /*- 鍒濆鍖栧簲鐢ㄥ唴缃戞帴鏀躲佸彂閫佺紦鍐插尯*/ - (void)CM_Mutex_Init(&s_Innet_AppSend_M); - (void)CM_Mutex_Init(&s_Innet_AppRecv_M); - ret = CM_QueueInitial(&s_Innet_AppSendQ, SFM_INNETSAFE_BUFF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_7); - ret = CM_QueueInitial(&s_Innet_AppRecvQ, SFM_INNETSAFE_BUFF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_8); - } - else - { - /*- 鏃犲鐞*/ - } + /*- 鍒濆鍖栧簲鐢ㄥ唴缃戞帴鏀躲佸彂閫佺紦鍐插尯*/ + (void)CM_Mutex_Init(&s_Innet_AppSend_M); + (void)CM_Mutex_Init(&s_Innet_AppRecv_M); + ret = CM_QueueInitial(&s_Innet_AppSendQ, SFM_INNETSAFE_BUFF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_7); + ret = CM_QueueInitial(&s_Innet_AppRecvQ, SFM_INNETSAFE_BUFF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_8); + } + else + { + /*- 鏃犲鐞*/ + } - /*- 鍏ュ弬鏄惁涓虹┖ */ - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id) && (NULL != p_SfpInnetPara)) - { - /*- 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏鍗忚鍒濆鍖*/ - CM_NM_ASSERT(0u != InnetID, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1); - s_InnetPrtcl_RM.LocalID = (CM_UINT8)(InnetID % 256u); - s_InnetPrtcl_RM.LocalType = (CM_UINT8)(InnetID / 256u); - s_InnetPrtcl_RM.TimeCounter = &g_MSCP_SysCount; - s_InnetPrtcl_RM.RedundTimeout = 0xFFFFu; - s_InnetPrtcl_RM.OutputTimeout = 0xFFFFu; - s_InnetPrtcl_RM.DataBase = p_SfpInnetPara; - s_InnetPrtcl_RM.MaxNumLink = 10u; - s_InnetPrtcl_RM.MaxNumPerCycle = 5u; - s_InnetPrtcl_RM.InputSize = 5000u; - s_InnetPrtcl_RM.OutputSize = 5000u; - s_InnetPrtcl_RM.OutnetQueueSize = 65000u; - s_InnetPrtcl_RM.RecordArraySize = 65000u; - s_InnetPrtcl_RM.CycleNum = &g_MSCP_SysCount; - rt = ProtclInit(0u, (CM_UINT32)0u, NULL, &s_InnetPrtcl_RM); - /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ - CM_NM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); + /*- 鍏ュ弬鏄惁涓虹┖ */ + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id) && (NULL != p_SfpInnetPara)) + { + /*- 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏鍗忚鍒濆鍖*/ + CM_NM_ASSERT(0u != InnetID, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1); + s_InnetPrtcl_RM.LocalID = (CM_UINT8)(InnetID % 256u); + s_InnetPrtcl_RM.LocalType = (CM_UINT8)(InnetID / 256u); + s_InnetPrtcl_RM.TimeCounter = &g_MSCP_SysCount; + s_InnetPrtcl_RM.RedundTimeout = 0xFFFFu; + s_InnetPrtcl_RM.OutputTimeout = 0xFFFFu; + s_InnetPrtcl_RM.DataBase = p_SfpInnetPara; + s_InnetPrtcl_RM.MaxNumLink = 10u; + s_InnetPrtcl_RM.MaxNumPerCycle = 5u; + s_InnetPrtcl_RM.InputSize = 5000u; + s_InnetPrtcl_RM.OutputSize = 5000u; + s_InnetPrtcl_RM.OutnetQueueSize = 65000u; + s_InnetPrtcl_RM.RecordArraySize = 65000u; + s_InnetPrtcl_RM.CycleNum = &g_MSCP_SysCount; + rt = ProtclInit(0u, (CM_UINT32)0u, NULL, &s_InnetPrtcl_RM); + /*- 妫鏌ュ缃戝畨鍏ㄥ崗璁垵濮嬪寲缁撴灉 */ + CM_NM_ASSERT(1u == rt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_2); - /*- 鍒濆鍖栧簲鐢ㄥ唴缃戞帴鏀躲佸彂閫佺紦鍐插尯*/ - (void)CM_Mutex_Init(&s_Innet_RmSend_M); + /*- 鍒濆鍖栧簲鐢ㄥ唴缃戞帴鏀躲佸彂閫佺紦鍐插尯*/ + (void)CM_Mutex_Init(&s_Innet_RmSend_M); (void)CM_Mutex_Init(&s_Innet_AppRmSend_M); - (void)CM_Mutex_Init(&s_Innet_RmRecv_M); - ret = CM_QueueInitial(&s_Innet_RmSendQ, SFM_INNETSAFE_RM_BUFF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == ret,PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); + (void)CM_Mutex_Init(&s_Innet_RmRecv_M); + ret = CM_QueueInitial(&s_Innet_RmSendQ, SFM_INNETSAFE_RM_BUFF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_3); ret = CM_QueueInitial(&s_Innet_AppRmSendQ, SFM_INNETSAFE_RM_BUFF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == ret,PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_4); - ret = CM_QueueInitial(&s_Innet_RmRecvQ, SFM_INNETSAFE_RM_BUFF_SIZE); - CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_5); - } - else - { - /*- 鏃犲鐞*/ - } + CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_4); + ret = CM_QueueInitial(&s_Innet_RmRecvQ, SFM_INNETSAFE_RM_BUFF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_5); + } + else + { + /*- 鏃犲鐞*/ + } } /** -* @brief 鍐呯綉瀹夊叏鏁版嵁鎺ユ敹 -* @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 -* @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 -* @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 -* @details -* 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 -* 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 -*/ + * @brief 鍐呯綉瀹夊叏鏁版嵁鎺ユ敹 + * @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 + * @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 + * @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 + * @details + * 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 + * 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 + */ CM_INT32 SFM_RxInnetSafe(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧怚D */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ - CM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); - /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ - rxLen = CFM_InnetSafe_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ - if (0 < rxLen) - { - /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ - pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); - CM_ASSERT(NULL != pCom, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧怚D */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ + CM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ + rxLen = CFM_InnetSafe_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ + if (0 < rxLen) + { + /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ + pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); + CM_ASSERT(NULL != pCom, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); - /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ - CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - i += rxLen + 2; - } - else - { - /*- 鏃犲鐞*/ - } - } while (0 < rxLen); + i += rxLen + 2; + } + else + { + /*- 鏃犲鐞*/ + } + } while (0 < rxLen); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETSAFE_RECVLEN, 4U, &i); - /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ - return i; + /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ + return i; } /** -* @brief 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏鏁版嵁鎺ユ敹 -* @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 -* @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 -* @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 -* @details -* 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 -* 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 -*/ + * @brief 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏鏁版嵁鎺ユ敹 + * @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 + * @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 + * @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 + * @details + * 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 + * 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 + */ CM_INT32 SFM_RxInnetSafeRm(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧怚D */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ - CM_NM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_1); - /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ - rxLen = CFM_InnetSafeRm_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ - if (0 < rxLen) - { - /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ - pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); - CM_NM_ASSERT(NULL != pCom, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_2); + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧怚D */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ + CM_NM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_1); + /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ + rxLen = CFM_InnetSafeRm_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ + if (0 < rxLen) + { + /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ + pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort); + CM_NM_ASSERT(NULL != pCom, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_2); - /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ - CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - i = i + rxLen + 2; - } - else - { - /*- 鏃犲鐞*/ - } - } while (0 < rxLen); + i = i + rxLen + 2; + } + else + { + /*- 鏃犲鐞*/ + } + } while (0 < rxLen); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETSAFERM_RECVLEN, 4U, &i); - /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ - return i; + /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ + return i; } /** -* @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏鏁版嵁鎺ユ敹 -* @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 -* @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 -* @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 -* @details -* 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 -* 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 -*/ + * @brief 鍐呯綉杩滅▼閮ㄧ讲瀹夊叏鏁版嵁鎺ユ敹 + * @param Buf 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁鎸囬拡 + * @param BufSize 鎺ユ敹鍐呯綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 + * @return 鏀跺埌鐨勫唴缃戝畨鍏ㄦ暟鎹婚暱搴 + * @details + * 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡鍐呯綉瀹夊叏杈撳叆鏁版嵁 + * 鎸夊唴缃戝畨鍏ㄦ帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 + */ CM_INT32 SFM_RxInnetRemoteUpdate(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_INT32 i = 0; /* 寰幆鍙橀噺 */ - CM_UINT32 srcIP = 0u; /* 婧怚P */ - CM_UINT16 srcPort = 0u; /* 婧怚D */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_INT32 i = 0; /* 寰幆鍙橀噺 */ + CM_UINT32 srcIP = 0u; /* 婧怚P */ + CM_UINT16 srcPort = 0u; /* 婧怚D */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 鍐呯綉閫氫俊閰嶇疆 */ if (NULL != Buf) { - /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ - rxLen = CFM_InnetRemoteUpdate_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ - if (0 < rxLen) - { - /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ - pCom = PFM_INI_RmInnetIP2Addr(srcIP, srcPort); + /*- 寰幆鎺ユ敹鍐呯綉閫氫俊鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傛帴鏀跺唴缃戦氫俊鏁版嵁 */ + rxLen = CFM_InnetRemoteUpdate_Recv(&Buf[i + 2u], CM_UNSIGNED_INT_EXP(BufSize - (CM_UINT32)i - 2u), &srcIP, &srcPort); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 鏀跺埌鐨勬暟鎹暱搴︽槸鍚﹀ぇ浜0 */ + if (0 < rxLen) + { + /*- 鏍规嵁婧怚P銆丳ort纭畾婧怚D */ + pCom = PFM_INI_RmInnetIP2Addr(srcIP, srcPort); if (NULL != pCom) { - /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ - CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate yes recv \n"); - i = i + rxLen + 2; + /*- 鎵撳寘鎴愬唴缃戣緭鍏ュ抚 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate yes recv \n"); + i = i + rxLen + 2; } else { MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate PFM_INI_InnetIP2Addr Is Null!!! \n"); } - } - else - { - MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate no recv \n"); - /*- 鏃犲鐞*/ - } - } while (0 < rxLen); - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETREMOTEUPDATE_RECVLEN, 4U, &i); + } + else + { + MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate no recv \n"); + /*- 鏃犲鐞*/ + } + } while (0 < rxLen); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_CFMNET_INNETREMOTEUPDATE_RECVLEN, 4U, &i); } else { MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate Buf Is Null!!! \n"); } - /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ - return i; + /*- 杩斿洖鍐呯綉杈撳叆甯ф婚暱搴 */ + return i; } /** -* @brief 澶栫綉瀹夊叏鏁版嵁鎺ユ敹 -* @param Buf 鎺ユ敹澶栫綉瀹夊叏鏁版嵁鎸囬拡 -* @param BufSize 鎺ユ敹澶栫綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 -* @return 鏀跺埌鐨勫缃戝畨鍏ㄦ暟鎹抚闀垮害 -* @details -* 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡澶栫綉瀹夊叏杈撳叆鏁版嵁 -* 鎸夊缃戞帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 -*/ + * @brief 澶栫綉瀹夊叏鏁版嵁鎺ユ敹 + * @param Buf 鎺ユ敹澶栫綉瀹夊叏鏁版嵁鎸囬拡 + * @param BufSize 鎺ユ敹澶栫綉瀹夊叏鏁版嵁缂撳啿鍖哄ぇ灏 + * @return 鏀跺埌鐨勫缃戝畨鍏ㄦ暟鎹抚闀垮害 + * @details + * 浠庨氫俊灞傝幏鍙栨湰鍛ㄦ湡澶栫綉瀹夊叏杈撳叆鏁版嵁 + * 鎸夊缃戞帴鏀跺抚鎵撳寘鍚庝氦缁欏钩鍙板眰 + */ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) { - /*- 鍙橀噺鍒濆鍖 */ - ENUM_OUTNET_CHN_T ch = ENUM_OUTNET_ERROR; /* 閫氶亾绫诲瀷 */ - CM_INT32 allLen = 0; /* 鎶ユ枃鎬婚暱 */ - CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ - CM_UINT8 ccVer = 0u; /* CC鐗堟湰 */ - /*CM_UINT32 hlhtID = 0u; 浜掕仈浜掗欼D */ - CM_UINT16 srcID = 0u; /* 璁惧ID */ - CM_UINT16 logicID = 0u; /* 閫昏緫ID */ - CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ - CM_UINT16 appLen = 0u; /* 鐢ㄦ埛鏁版嵁闀垮害 */ - CM_UINT32 redLen = 0u; /* 绾㈢綉鎶ユ枃鎬婚暱 */ - CM_UINT32 blueLen = 0u; /* 钃濈綉鎶ユ枃鎬婚暱 */ - /* 鏉ュ湪閫氭帶鐨勯潪娉曟暟鎹畉est mod */ - CM_UINT16 potoType = 0u; - CM_UINT16 dataType = 0u; - CM_UINT16 potycrc = 0u; - CM_UINT16 potycrcdata = 0u; - ENUM_CM_RETURN isTransformInFrame = ENUM_CM_FALSE; /*鏄惁闇瑕佹敼鍙樺抚鏍煎紡*/ - CM_UINT64 rxCtrlLen = 0u; - /*- 瀵瑰叆鍙傝繘琛岄槻绌烘鏌,濡傛灉涓虹┖鍒欏畷鏈 */ - CM_ASSERT(NULL != buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - /*- 寰幆鎺ユ敹澶栫綉鏁版嵁 */ - do - { - /*- 浠庨氫俊灞傛帴鏀跺缃戞暟鎹 */ - rxLen = CFM_OutnetSafe_Recv(s_Prtcl_UDP_Cache, sizeof(s_Prtcl_UDP_Cache), &ch); - (rxLen > 0)?(rxCtrlLen += rxLen):rxCtrlLen; - if(rxCtrlLen > g_PFM_Cfg.OutnetSafePack_Len) - { - CFM_ClearCache(); - break; - } + /*- 鍙橀噺鍒濆鍖 */ + ENUM_OUTNET_CHN_T ch = ENUM_OUTNET_ERROR; /* 閫氶亾绫诲瀷 */ + CM_INT32 allLen = 0; /* 鎶ユ枃鎬婚暱 */ + CM_INT32 rxLen = 0; /* 鎺ユ敹鎶ユ枃闀垮害 */ + CM_UINT8 ccVer = 0u; /* CC鐗堟湰 */ + /*CM_UINT32 hlhtID = 0u; 浜掕仈浜掗欼D */ + CM_UINT16 srcID = 0u; /* 璁惧ID */ + CM_UINT16 logicID = 0u; /* 閫昏緫ID */ + CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ + CM_UINT16 appLen = 0u; /* 鐢ㄦ埛鏁版嵁闀垮害 */ + CM_UINT32 redLen = 0u; /* 绾㈢綉鎶ユ枃鎬婚暱 */ + CM_UINT32 blueLen = 0u; /* 钃濈綉鎶ユ枃鎬婚暱 */ + /* 鏉ュ湪閫氭帶鐨勯潪娉曟暟鎹畉est mod */ + CM_UINT16 potoType = 0u; + CM_UINT16 dataType = 0u; + CM_UINT16 potycrc = 0u; + CM_UINT16 potycrcdata = 0u; + ENUM_CM_RETURN isTransformInFrame = ENUM_CM_FALSE; /*鏄惁闇瑕佹敼鍙樺抚鏍煎紡*/ + CM_UINT64 rxCtrlLen = 0u; + CM_UINT32 ret = 0u; + /*- 瀵瑰叆鍙傝繘琛岄槻绌烘鏌,濡傛灉涓虹┖鍒欏畷鏈 */ + CM_ASSERT(NULL != buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); + /*- 寰幆鎺ユ敹澶栫綉鏁版嵁 */ + do + { + /*- 浠庨氫俊灞傛帴鏀跺缃戞暟鎹 */ + rxLen = CFM_OutnetSafe_Recv(s_Prtcl_UDP_Cache, sizeof(s_Prtcl_UDP_Cache), &ch); + (rxLen > 0) ? (rxCtrlLen += rxLen) : rxCtrlLen; + if (rxCtrlLen > g_PFM_Cfg.OutnetSafePack_Len) + { + CFM_ClearCache(); + break; + } - /*- 鎺ユ敹闀垮害鏄惁澶т簬0 */ - if (0 < rxLen) - { + /*- 鎺ユ敹闀垮害鏄惁澶т簬0 */ + if (0 < rxLen) + { /* TSL鏄熼摼 涓绘満-搴曞骇 鐢ㄩ氫俊鍗忚 */ /*- 鏍规嵁澶栫綉甯ф姤鏂囧ご纭畾婧怚D */ /* @@ -432,7 +441,7 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) srcID = CM_ShortFromChar(s_Prtcl_UDP_Cache + 3); /*- 濡傛灉搴旂敤娌℃湁娉ㄥ唽杈撳叆ats杞溅鏁版嵁澶囩敤閫氶亾鍒ゆ柇鍑芥暟 */ - if(NULL == p_Serial_IN_VOBC_Func) + if (NULL == p_Serial_IN_VOBC_Func) { /*- 鏃犲鐞 */ } @@ -446,16 +455,15 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) /* 鏉ュ湪閫氭帶鐨勯潪娉曟暟鎹畉est mod */ potoType = CM_ShortFromChar(s_Prtcl_UDP_Cache + 11); dataType = CM_ShortFromChar(s_Prtcl_UDP_Cache + 13); - if(potoType == 4u) + if (potoType == 4u) { - potycrc = ComputeMsgCRC16_WL(s_Prtcl_UDP_Cache + 13,appLen-2); + potycrc = ComputeMsgCRC16_WL(s_Prtcl_UDP_Cache + 13, appLen - 2); potycrcdata = CM_ShortFromCharLE(s_Prtcl_UDP_Cache + 13 + appLen - 2); - if((!(dataType==0x0180U || dataType==0x0190U || dataType==0x0191U || dataType==0x0181U)) || (potycrc != potycrcdata)) + if ((!(dataType == 0x0180U || dataType == 0x0190U || dataType == 0x0191U || dataType == 0x0181U)) || (potycrc != potycrcdata)) { - MSCP_LOG_MSG("appLen = %d, dataType = %x, potycrc = %x, potycrcdata = %x \n",appLen,dataType,potycrc,potycrcdata); + MSCP_LOG_MSG("appLen = %d, dataType = %x, potycrc = %x, potycrcdata = %x \n", appLen, dataType, potycrc, potycrcdata); } - } /*- @alias 鎵撳寘鍒板缃戞帴鏀跺崗璁抚 */ @@ -469,31 +477,31 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) if ((ENUM_OUTNET_RED == ch) || (ENUM_OUTNET_EXTEND_RED == ch)) { /*- 鏄惁鏉ヨ嚜ats杞溅鐨勮緭鍏ユ暟鎹 */ - if(ENUM_CM_TRUE == isTransformInFrame) + if (ENUM_CM_TRUE == isTransformInFrame) { /*- 鏍规嵁ats鐨勫寘鏍煎紡瑙f暟鎹 */ appLen = msgLen - 29u; srcID = CM_ShortFromChar(s_Prtcl_UDP_Cache + 19); logicID = CM_ShortFromChar(s_Prtcl_UDP_Cache + 21); - CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ShortToChar(srcID, &buf[redLen + 6u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ShortToChar(logicID, &buf[redLen + 8u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_Memcpy((void*)(&buf[redLen + 10u]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - redLen - 10u), (void*)(s_Prtcl_UDP_Cache + 27), (CM_SIZE_T)(appLen));/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar(srcID, &buf[redLen + 6u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar(logicID, &buf[redLen + 8u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_Memcpy((void *)(&buf[redLen + 10u]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - redLen - 10u), (void *)(s_Prtcl_UDP_Cache + 27), (CM_SIZE_T)(appLen)); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ } else { /*- 瑙f簮璁惧閫昏緫id */ - CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ShortToChar(srcID, &buf[redLen + 6u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ShortToChar(logicID, &buf[redLen + 8u]);/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_Memcpy((void*)(&buf[redLen + 10u]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - redLen - 10u), (void*)(s_Prtcl_UDP_Cache + 13), (CM_SIZE_T)(appLen));/* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar(srcID, &buf[redLen + 6u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + CM_ShortToChar(logicID, &buf[redLen + 8u]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_Memcpy((void *)(&buf[redLen + 10u]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - redLen - 10u), (void *)(s_Prtcl_UDP_Cache + 13), (CM_SIZE_T)(appLen)); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ } redLen += (CM_UINT32)appLen + 6u; } else { /*- 鏄惁鏉ヨ嚜ats杞溅鐨勮緭鍏ユ暟鎹 */ - if(ENUM_CM_TRUE == isTransformInFrame) + if (ENUM_CM_TRUE == isTransformInFrame) { /*- 鏍规嵁ats鐨勫寘鏍煎紡瑙f暟鎹 */ appLen = msgLen - 29u; @@ -502,7 +510,7 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) CM_ShortToChar((CM_UINT16)(appLen + 4u), s_TmpCache + blueLen + 4u); CM_ShortToChar(srcID, s_TmpCache + blueLen + 6u); CM_ShortToChar(logicID, s_TmpCache + blueLen + 8u); - (void)CM_Memcpy((void*)(s_TmpCache + blueLen + 10u), sizeof(s_TmpCache) - blueLen - 10u, (void*)(s_Prtcl_UDP_Cache + 27u), (CM_SIZE_T)(appLen)); + (void)CM_Memcpy((void *)(s_TmpCache + blueLen + 10u), sizeof(s_TmpCache) - blueLen - 10u, (void *)(s_Prtcl_UDP_Cache + 27u), (CM_SIZE_T)(appLen)); MSCP_LOG_MSG("srcID = %d, appLen = %d\n", srcID, appLen); } else @@ -511,37 +519,42 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) CM_ShortToChar((CM_UINT16)(appLen + 4u), s_TmpCache + blueLen + 4u); CM_ShortToChar(srcID, s_TmpCache + blueLen + 6u); CM_ShortToChar(logicID, s_TmpCache + blueLen + 8u); - (void)CM_Memcpy((void*)(s_TmpCache + blueLen + 10u), sizeof(s_TmpCache) - blueLen - 10u, (void*)(s_Prtcl_UDP_Cache + 13u), (CM_SIZE_T)(appLen)); + (void)CM_Memcpy((void *)(s_TmpCache + blueLen + 10u), sizeof(s_TmpCache) - blueLen - 10u, (void *)(s_Prtcl_UDP_Cache + 13u), (CM_SIZE_T)(appLen)); } blueLen += (CM_UINT32)appLen + 6u; } - } - else - { - /* MSCP_LOG_MSG("No communication with the external network\n"); */ - } - } while (0 < rxLen); - CFM_GetOSCache(); - /* 鎵撳寘鎴愬缃戞帴鏀跺抚 - 4瀛楄妭 绾㈢綉鎶ユ枃鎬婚暱 - n瀛楄妭 p涓缃戝崗璁抚 - 4瀛楄妭 钃濈綉鎶ユ枃鎬婚暱 - m瀛楄妭 q涓缃戝崗璁抚 - */ - /*- 杈撳嚭绾㈣摑缃戠殑澶栫綉鎺ユ敹甯 */ - CM_RE_ASSERT((redLen + blueLen + 8u) <= bufSize, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_6); - allLen = (CM_INT32)CM_UNSIGNED_INT_EXP(redLen + blueLen + 8u); - CM_LongToChar(redLen, buf); - CM_LongToChar(blueLen, &buf[4u + redLen]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_Memcpy((void*)(&buf[8u + redLen]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - 8u - redLen), (void*)(s_TmpCache + 4), (CM_SIZE_T)blueLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /*- 杩斿洖澶栫綉鎺ユ敹甯ф婚暱搴 */ - return allLen; + } + else + { + /* MSCP_LOG_MSG("No communication with the external network\n"); */ + } + } while (0 < rxLen); + CFM_GetOSCache(); + /* 鎵撳寘鎴愬缃戞帴鏀跺抚 + 4瀛楄妭 绾㈢綉鎶ユ枃鎬婚暱 + n瀛楄妭 p涓缃戝崗璁抚 + 4瀛楄妭 钃濈綉鎶ユ枃鎬婚暱 + m瀛楄妭 q涓缃戝崗璁抚 + */ + /*- 杈撳嚭绾㈣摑缃戠殑澶栫綉鎺ユ敹甯 */ + CM_LongToChar(redLen, buf); + CM_LongToChar(blueLen, s_TmpCache); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + blueLen += 4u; + ret = s_Outnet_Recv_Dedup(buf, redLen + 4u, s_TmpCache, &blueLen); + CM_ASSERT(ret == 1u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_7); + blueLen -= 4u; + CM_RE_ASSERT((redLen + blueLen + 8u) <= bufSize, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_6); + CM_LongToChar(blueLen, &buf[4u + redLen]); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + allLen = (CM_INT32)CM_UNSIGNED_INT_EXP(redLen + blueLen + 8u); + (void)CM_Memcpy((void *)(&buf[8u + redLen]), (CM_SIZE_T)CM_UNSIGNED_INT_EXP(bufSize - 8u - redLen), (void *)(s_TmpCache + 4), (CM_SIZE_T)blueLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /*- 杩斿洖澶栫綉鎺ユ敹甯ф婚暱搴 */ + return allLen; } /*鎶婂崗璁唴缃戝抚鏍煎紡鐨勬暟鎹啓鍏ュ崗璁眰*/ void SFM_WriteInnetSafeInput(IN const CM_UINT8 buf[], IN CM_UINT32 len, IN ENUM_INNET_CHN_T ch) { - MSCP_LOG_MSG("SFM_WriteInnetSafeInput len = %d\n",len); + MSCP_LOG_MSG("SFM_WriteInnetSafeInput len = %d\n", len); (void)QueueWrite((CM_UINT32)len, buf, &s_InnetPrtcl.OutnetQueueA); } @@ -549,400 +562,403 @@ void SFM_WriteInnetSafeInput(IN const CM_UINT8 buf[], IN CM_UINT32 len, IN ENUM_ void SFM_WriteInnetSafeRmInput(IN const CM_UINT8 buf[], IN CM_UINT32 len, IN ENUM_INNET_CHN_T ch) { CM_ASSERT_MAINTAIN(buf != NULL); - MSCP_LOG_MSG("SFM_WriteInnetSafeRmInput len=%d\n",len); + MSCP_LOG_MSG("SFM_WriteInnetSafeRmInput len=%d\n", len); (void)QueueWrite((CM_UINT32)len, buf, &s_InnetPrtcl_RM.OutnetQueueA); - } /** -* @brief 鎶婂崗璁缃戝抚鏍煎紡鐨勬暟鎹啓鍏ュ崗璁眰 -* @param Buf 鍗忚澶栫綉鎺ユ敹鎶ユ枃鎸囬拡 -* @param len 鍗忚澶栫綉鎺ユ敹鎶ユ枃闀垮害 -* @param ch 澶栫綉閫氶亾绫诲瀷 -*/ + * @brief 鎶婂崗璁缃戝抚鏍煎紡鐨勬暟鎹啓鍏ュ崗璁眰 + * @param Buf 鍗忚澶栫綉鎺ユ敹鎶ユ枃鎸囬拡 + * @param len 鍗忚澶栫綉鎺ユ敹鎶ユ枃闀垮害 + * @param ch 澶栫綉閫氶亾绫诲瀷 + */ void SFM_WriteOutnetSafeInput(IN const CM_UINT8 buf[], IN CM_UINT32 len, IN ENUM_OUTNET_CHN_T ch) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 surplusLen = 0u; //鍓╀綑鏁版嵁 - CM_UINT32 currLenBef = 0u; //褰撳墠鏁版嵁 - CM_UINT32 currLenAft = 0u; //褰撳墠鏁版嵁 - /*- 鏄惁涓虹孩缃戞姤鏂 */ - if (ENUM_OUTNET_RED == ch) - { - /*- 灏嗚緭鍏ュ啓鍏ュ崗璁殑绾㈢綉杈撳叆闃熷垪 */ - currLenBef = QueueStatus(&s_OutnetPrtcl.OutnetQueueA); - surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueA); - MSCP_LOG_MSG("Red QueueWrite before:currLen=%d,surplusLen=%d\n",currLenBef,surplusLen); - (void)QueueWrite(len, buf, &s_OutnetPrtcl.OutnetQueueA); - surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueA);//闃熷垪鍓╀綑澶氬皯绌洪棿 - currLenAft = QueueStatus(&s_OutnetPrtcl.OutnetQueueA);//閲岄潰澶氬皯鏁版嵁 - MSCP_LOG_MSG("Red QueueWrite after:currLen=%d,surplusLen=%d\n",currLenAft,surplusLen); - } - /*- 鏄惁涓鸿摑缃戞姤鏂 */ - else if (ENUM_OUTNET_BLUE == ch) - { - /*- 灏嗚緭鍏ュ啓鍏ュ崗璁殑钃濈綉杈撳叆闃熷垪 */ - currLenBef = QueueStatus(&s_OutnetPrtcl.OutnetQueueB); - surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueB); - MSCP_LOG_MSG("Blue QueueWrite before:currLen=%d,surplusLen=%d\n",currLenBef,surplusLen); - (void)QueueWrite(len, buf, &s_OutnetPrtcl.OutnetQueueB); - surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueB);//闃熷垪鍓╀綑澶氬皯绌洪棿 - currLenAft = QueueStatus(&s_OutnetPrtcl.OutnetQueueB);//閲岄潰澶氬皯鏁版嵁 - MSCP_LOG_MSG("Blue QueueWrite after:currLen=%d,surplusLen=%d\n",currLenAft,surplusLen); - } - else - { - /*- 瀹曟満 */ - CM_RE_ASSERT(0, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); - } + CM_UINT32 surplusLen = 0u; // 鍓╀綑鏁版嵁 + CM_UINT32 currLenBef = 0u; // 褰撳墠鏁版嵁 + CM_UINT32 currLenAft = 0u; // 褰撳墠鏁版嵁 + /*- 鏄惁涓虹孩缃戞姤鏂 */ + if (ENUM_OUTNET_RED == ch) + { + /*- 灏嗚緭鍏ュ啓鍏ュ崗璁殑绾㈢綉杈撳叆闃熷垪 */ + currLenBef = QueueStatus(&s_OutnetPrtcl.OutnetQueueA); + surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueA); + MSCP_LOG_MSG("Red QueueWrite before:currLen=%d,surplusLen=%d\n", currLenBef, surplusLen); + (void)QueueWrite(len, buf, &s_OutnetPrtcl.OutnetQueueA); + surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueA); // 闃熷垪鍓╀綑澶氬皯绌洪棿 + currLenAft = QueueStatus(&s_OutnetPrtcl.OutnetQueueA); // 閲岄潰澶氬皯鏁版嵁 + MSCP_LOG_MSG("Red QueueWrite after:currLen=%d,surplusLen=%d\n", currLenAft, surplusLen); + } + /*- 鏄惁涓鸿摑缃戞姤鏂 */ + else if (ENUM_OUTNET_BLUE == ch) + { + /*- 灏嗚緭鍏ュ啓鍏ュ崗璁殑钃濈綉杈撳叆闃熷垪 */ + currLenBef = QueueStatus(&s_OutnetPrtcl.OutnetQueueB); + surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueB); + MSCP_LOG_MSG("Blue QueueWrite before:currLen=%d,surplusLen=%d\n", currLenBef, surplusLen); + (void)QueueWrite(len, buf, &s_OutnetPrtcl.OutnetQueueB); + surplusLen = QueueGetSpace(&s_OutnetPrtcl.OutnetQueueB); // 闃熷垪鍓╀綑澶氬皯绌洪棿 + currLenAft = QueueStatus(&s_OutnetPrtcl.OutnetQueueB); // 閲岄潰澶氬皯鏁版嵁 + MSCP_LOG_MSG("Blue QueueWrite after:currLen=%d,surplusLen=%d\n", currLenAft, surplusLen); + } + else + { + /*- 瀹曟満 */ + CM_RE_ASSERT(0, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); + } } /** -* @brief 鍗忚灞傝В鏋愭敹鍒扮殑鏁版嵁 -*/ + * @brief 鍗忚灞傝В鏋愭敹鍒扮殑鏁版嵁 + */ void SFM_UnPrtclProc(void) { CM_UINT32 QueuelenDataToApp = 0; - /*- 鍙橀噺鍒濆鍖 */ - PFM_CFC_Check(44); - /*- @alias 澶栫綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ - if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) - { - (void)QueueClear(&s_OutnetPrtcl.DataToApp); - (void)ProtclReceiveDataFunc(&s_OutnetPrtcl); - (void)QueueClear(&s_OutnetPrtcl.OutnetQueueA); - (void)QueueClear(&s_OutnetPrtcl.OutnetQueueB); - } - else + /*- 鍙橀噺鍒濆鍖 */ + PFM_CFC_Check(44); + /*- @alias 澶栫綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ + if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) + { + (void)QueueClear(&s_OutnetPrtcl.DataToApp); + (void)ProtclReceiveDataFunc(&s_OutnetPrtcl); + (void)QueueClear(&s_OutnetPrtcl.OutnetQueueA); + (void)QueueClear(&s_OutnetPrtcl.OutnetQueueB); + } + else { /*- 鏃犲鐞*/ } - - PFM_CFC_Check(45); - /*- @alias 鍐呯綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ - if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) - { - (void)QueueClear(&s_InnetPrtcl.DataToApp); - s_InnetPrtcl.RadamSN = SFM_2x2_GetSysCount(); - (void)ProtclReceive(&s_InnetPrtcl); - (void)QueueClear(&s_InnetPrtcl.OutnetQueueA); - (void)QueueClear(&s_InnetPrtcl.OutnetQueueB); - } - else + + PFM_CFC_Check(45); + /*- @alias 鍐呯綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ + if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) + { + (void)QueueClear(&s_InnetPrtcl.DataToApp); + s_InnetPrtcl.RadamSN = SFM_2x2_GetSysCount(); + (void)ProtclReceive(&s_InnetPrtcl); + (void)QueueClear(&s_InnetPrtcl.OutnetQueueA); + (void)QueueClear(&s_InnetPrtcl.OutnetQueueB); + } + else { /*- 鏃犲鐞*/ } - PFM_CFC_Check(46); + PFM_CFC_Check(46); /*- @alias 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - (void)QueueClear(&s_InnetPrtcl_RM.DataToApp); - s_InnetPrtcl_RM.RadamSN = SFM_2x2_GetSysCount(); - (void)ProtclReceive(&s_InnetPrtcl_RM); - (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueA); - (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueB); + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { + (void)QueueClear(&s_InnetPrtcl_RM.DataToApp); + s_InnetPrtcl_RM.RadamSN = SFM_2x2_GetSysCount(); + (void)ProtclReceive(&s_InnetPrtcl_RM); + (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueA); + (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueB); - QueuelenDataToApp = QueueStatus(&s_InnetPrtcl_RM.DataToApp); - MSCP_LOG_MSG("QueuelenDataToApp = %d\n",QueuelenDataToApp); - } - else + QueuelenDataToApp = QueueStatus(&s_InnetPrtcl_RM.DataToApp); + MSCP_LOG_MSG("QueuelenDataToApp = %d\n", QueuelenDataToApp); + } + else { /*- 鏃犲鐞*/ } } /** -* @brief 鎺ユ敹澶栫綉鍗忚鎶ユ枃 -* @param pSrcName 婧愯澶嘔D -* @param pSrcLogicID 婧愰昏緫ID -* @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 Prtcl_OutnetSafe_AppRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT16* pSrcLogicID, OUT CM_UINT8* pLifeTime, - OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹澶栫綉鍗忚鎶ユ枃 + * @param pSrcName 婧愯澶嘔D + * @param pSrcLogicID 婧愰昏緫ID + * @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 Prtcl_OutnetSafe_AppRecv(OUT CM_UINT16 *pSrcName, OUT CM_UINT16 *pSrcLogicID, OUT CM_UINT8 *pLifeTime, + OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 tmpBuf[2] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ - CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ - CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 tmpBuf[2] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ + CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ + CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); + CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); - /*- 閿佸畾鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Lock(s_Outnet_AppRecv_M); + /*- 閿佸畾鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Lock(s_Outnet_AppRecv_M); - qStatus = CM_QueueStatus(&s_Outnet_AppRecvQ); - /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ - if (7u < qStatus) - { - /* - * 鍗忚閫傞厤灞傚ご锛 - * 2瀛楄妭 闀垮害锛堜笉鍚嚜韬級 - * 2瀛楄妭 婧怚D - * 2瀛楄妭 閫昏緫ID - * 1瀛楄妭 鐢熷瓨鏃堕棿 - * n瀛楄妭 鏁版嵁*/ - /*- 璇诲彇鍗忚甯ч暱搴 */ - (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ);/*闀垮害*/ - msgLen = CM_ShortFromChar(tmpBuf); - /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ - if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) - { - /*- 璇诲彇鍜岃緭鍑哄崗璁抚澶 */ - (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ);/*婧怚D*/ - *pSrcName = CM_ShortFromChar(tmpBuf); + qStatus = CM_QueueStatus(&s_Outnet_AppRecvQ); + /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ + if (7u < qStatus) + { + /* + * 鍗忚閫傞厤灞傚ご锛 + * 2瀛楄妭 闀垮害锛堜笉鍚嚜韬級 + * 2瀛楄妭 婧怚D + * 2瀛楄妭 閫昏緫ID + * 1瀛楄妭 鐢熷瓨鏃堕棿 + * n瀛楄妭 鏁版嵁*/ + /*- 璇诲彇鍗忚甯ч暱搴 */ + (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ); /*闀垮害*/ + msgLen = CM_ShortFromChar(tmpBuf); + /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ + if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) + { + /*- 璇诲彇鍜岃緭鍑哄崗璁抚澶 */ + (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ); /*婧怚D*/ + *pSrcName = CM_ShortFromChar(tmpBuf); - (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ);/*閫昏緫ID*/ - *pSrcLogicID = CM_ShortFromChar(tmpBuf); + (void)CM_QueueRead(2u, tmpBuf, &s_Outnet_AppRecvQ); /*閫昏緫ID*/ + *pSrcLogicID = CM_ShortFromChar(tmpBuf); - (void)CM_QueueRead(1u, pLifeTime, &s_Outnet_AppRecvQ);/*鐢熷瓨鏃堕棿*/ + (void)CM_QueueRead(1u, pLifeTime, &s_Outnet_AppRecvQ); /*鐢熷瓨鏃堕棿*/ - /*- 璇诲彇搴旂敤鏁版嵁 */ - (void)CM_QueueRead(msgLen - 5u, rxBuf, &s_Outnet_AppRecvQ); - /*- 杈撳嚭搴旂敤鏁版嵁闀垮害 */ - rt = (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + /*- 璇诲彇搴旂敤鏁版嵁 */ + (void)CM_QueueRead(msgLen - 5u, rxBuf, &s_Outnet_AppRecvQ); + /*- 杈撳嚭搴旂敤鏁版嵁闀垮害 */ + rt = (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u); + } + else + { + /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Outnet Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); + } + } + else { /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Outnet Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); } - /*- 瑙i攣鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Unlock(s_Outnet_AppRecv_M); + /*- 瑙i攣鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Unlock(s_Outnet_AppRecv_M); - /*- 杩斿洖 */ - return rt; + /*- 杩斿洖 */ + return rt; } /** -* @brief 鍙戦佸缃戝崗璁姤鏂 -* @param dstName 鐩殑璁惧ID -* @param dstLogicID 鐩殑閫昏緫ID -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -* 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 搴旂敤姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 -* 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 -*/ -CM_UINT8 Prtcl_OutnetSafe_AppSend(IN CM_UINT16 dstName, IN CM_UINT16 dstLogicID, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) + * @brief 鍙戦佸缃戝崗璁姤鏂 + * @param dstName 鐩殑璁惧ID + * @param dstLogicID 鐩殑閫昏緫ID + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + * 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 搴旂敤姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 + * 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 + */ +CM_UINT8 Prtcl_OutnetSafe_AppSend(IN CM_UINT16 dstName, IN CM_UINT16 dstLogicID, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = 0u; /* 闀垮害 */ - CM_UINT8 buf[2u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ - CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_1); + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = 0u; /* 闀垮害 */ + CM_UINT8 buf[2u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ + CM_ASSERT(0x55u == g_PFM_Cfg.M_OutnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_1); - /*- 杈撳叆闀垮害妫鏌 */ - CM_RE_ASSERT(txLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_2); - /* - 2瀛楄妭 闀垮害(涓嶅惈鑷韩) - 2瀛楄妭 鐩殑ID - 2瀛楄妭 鐩殑閫昏緫ID - n瀛楄妭 鏁版嵁 - */ + /*- 杈撳叆闀垮害妫鏌 */ + CM_RE_ASSERT(txLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_2); + /* + 2瀛楄妭 闀垮害(涓嶅惈鑷韩) + 2瀛楄妭 鐩殑ID + 2瀛楄妭 鐩殑閫昏緫ID + n瀛楄妭 鏁版嵁 + */ - len = (CM_UINT16)(txLen + 4u); - CM_ShortToChar(len, buf); + len = (CM_UINT16)(txLen + 4u); + CM_ShortToChar(len, buf); - /*- 閿佸畾鍙戦侀槦鍒 */ - (void)CM_Mutex_Lock(s_Outnet_AppSend_M); + /*- 閿佸畾鍙戦侀槦鍒 */ + (void)CM_Mutex_Lock(s_Outnet_AppSend_M); - /*- 濉啓鍗忚杈撳嚭甯уご */ - temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ);/*闀垮害*/ - CM_ShortToChar(dstName, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ);/*鐩殑ID*/ - CM_ShortToChar(dstLogicID, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ);/*鐩殑閫昏緫ID*/ - /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ - temprt &= CM_QueueWrite(txLen, txBuf, &s_Outnet_AppSendQ); - if(ENUM_CM_TRUE == temprt) - { - rt = 1u;/*鎴愬姛*/ - } - else - { - rt = 0u;/*澶辫触*/ - } + /*- 濉啓鍗忚杈撳嚭甯уご */ + temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ); /*闀垮害*/ + CM_ShortToChar(dstName, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ); /*鐩殑ID*/ + CM_ShortToChar(dstLogicID, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Outnet_AppSendQ); /*鐩殑閫昏緫ID*/ + /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ + temprt &= CM_QueueWrite(txLen, txBuf, &s_Outnet_AppSendQ); + if (ENUM_CM_TRUE == temprt) + { + rt = 1u; /*鎴愬姛*/ + } + else + { + rt = 0u; /*澶辫触*/ + } - /*- 瑙i攣鍙戦侀槦鍒 */ - (void)CM_Mutex_Unlock(s_Outnet_AppSend_M); + /*- 瑙i攣鍙戦侀槦鍒 */ + (void)CM_Mutex_Unlock(s_Outnet_AppSend_M); - /*- 杩斿洖 */ - return rt; + /*- 杩斿洖 */ + return rt; } /** -* @brief 鎺ユ敹鍐呯綉鍗忚鎶ユ枃 -* @param pSrcName 婧愯澶嘔D -* @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 Prtcl_InnetSafe_AppRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTime, OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹鍐呯綉鍗忚鎶ユ枃 + * @param pSrcName 婧愯澶嘔D + * @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 Prtcl_InnetSafe_AppRecv(OUT CM_UINT16 *pSrcName, OUT CM_UINT8 *pLifeTime, OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 headBuf[7u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ - CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ - CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 headBuf[7u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ + CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ + CM_UINT32 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - CM_ASSERT(0x55u == g_PFM_Cfg.M_InnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); + CM_ASSERT(0x55u == g_PFM_Cfg.M_InnetSafe_Enable, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); - /*- 閿佸畾鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Lock(s_Innet_AppRecv_M); + /*- 閿佸畾鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Lock(s_Innet_AppRecv_M); - qStatus = CM_QueueStatus(&s_Innet_AppRecvQ); - /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ - if (7u < qStatus) - { - /*- 璇诲彇鍗忚甯уご */ - /* - 2瀛楄妭 闀垮害(涓嶅惈鑷韩) - 2瀛楄妭 棰勭暀 - 2瀛楄妭 婧怚D(灏忕) - 1瀛楄妭 鍓╀綑鏈夋晥鏃堕棿 - n瀛楄妭 鏁版嵁 - */ - (void)CM_QueueRead(7u, headBuf, &s_Innet_AppRecvQ);/*闀垮害*/ - msgLen = CM_ShortFromChar(headBuf); - /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ - if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) - { - *pSrcName = CM_ShortFromCharLE(headBuf + 4u); - *pLifeTime = headBuf[6]; - (void)CM_QueueRead(msgLen - 5u, rxBuf, &s_Innet_AppRecvQ); - rt = (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + qStatus = CM_QueueStatus(&s_Innet_AppRecvQ); + /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ + if (7u < qStatus) + { + /*- 璇诲彇鍗忚甯уご */ + /* + 2瀛楄妭 闀垮害(涓嶅惈鑷韩) + 2瀛楄妭 棰勭暀 + 2瀛楄妭 婧怚D(灏忕) + 1瀛楄妭 鍓╀綑鏈夋晥鏃堕棿 + n瀛楄妭 鏁版嵁 + */ + (void)CM_QueueRead(7u, headBuf, &s_Innet_AppRecvQ); /*闀垮害*/ + msgLen = CM_ShortFromChar(headBuf); + /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ + if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) + { + *pSrcName = CM_ShortFromCharLE(headBuf + 4u); + *pLifeTime = headBuf[6]; + (void)CM_QueueRead(msgLen - 5u, rxBuf, &s_Innet_AppRecvQ); + rt = (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u); + } + else + { + /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Innet Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); + } + } + else { /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Innet Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); } - /*- 瑙i攣鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Unlock(s_Innet_AppRecv_M); + /*- 瑙i攣鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Unlock(s_Innet_AppRecv_M); - /*- 杩斿洖鎶ユ枃闀垮害 */ - return rt; + /*- 杩斿洖鎶ユ枃闀垮害 */ + return rt; } /** -* @brief 鍙戦佸唴缃戝畨鍏ㄥ崗璁姤鏂 -* @param dstName 鐩殑璁惧ID -* @param dstLogicID 鐩殑閫昏緫ID -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -* 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 -* 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 -*/ -CM_UINT8 Prtcl_InnetSafe_AppSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) + * @brief 鍙戦佸唴缃戝畨鍏ㄥ崗璁姤鏂 + * @param dstName 鐩殑璁惧ID + * @param dstLogicID 鐩殑閫昏緫ID + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + * 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷彲澶氭璋冪敤鏈嚱鏁颁粠鑰屽彂閫佸涓簲鐢ㄦ姤鏂囷紝 + * 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 + */ +CM_UINT8 Prtcl_InnetSafe_AppSend(IN CM_UINT16 dstName, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = 0u; /* 闀垮害 */ - CM_UINT8 buf[2u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = 0u; /* 闀垮害 */ + CM_UINT8 buf[2u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ - /*- 杈撳叆闀垮害妫鏌 */ + /*- 杈撳叆闀垮害妫鏌 */ if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable && txLen <= NET_20K_SIZE) { - /* - 2瀛楄妭 闀垮害(涓嶅惈鑷韩) - 2瀛楄妭 鐩殑ID(灏忕) - n瀛楄妭 鏁版嵁 - */ - /*- 閿佸畾鍙戦侀槦鍒 */ - (void)CM_Mutex_Lock(s_Innet_AppSend_M); + /* + 2瀛楄妭 闀垮害(涓嶅惈鑷韩) + 2瀛楄妭 鐩殑ID(灏忕) + n瀛楄妭 鏁版嵁 + */ + /*- 閿佸畾鍙戦侀槦鍒 */ + (void)CM_Mutex_Lock(s_Innet_AppSend_M); - /*- 濉啓鍗忚杈撳嚭甯уご */ - len = (CM_UINT16)(txLen + 4u); - CM_ShortToChar(len, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ);/*闀垮害*/ - CM_ShortToCharLE(0u, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ);/*2瀛楄妭棰勭暀*/ - CM_ShortToCharLE(dstName, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ);/*鐩殑ID*/ - /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ - temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_AppSendQ); - if(ENUM_CM_TRUE == temprt) - { - rt = 1u;/*鎴愬姛*/ - } - else - { - rt = 0u;/*澶辫触*/ - } + /*- 濉啓鍗忚杈撳嚭甯уご */ + len = (CM_UINT16)(txLen + 4u); + CM_ShortToChar(len, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ); /*闀垮害*/ + CM_ShortToCharLE(0u, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ); /*2瀛楄妭棰勭暀*/ + CM_ShortToCharLE(dstName, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppSendQ); /*鐩殑ID*/ + /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ + temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_AppSendQ); + if (ENUM_CM_TRUE == temprt) + { + rt = 1u; /*鎴愬姛*/ + } + else + { + rt = 0u; /*澶辫触*/ + } - /*- 瑙i攣鍙戦侀槦鍒 */ - (void)CM_Mutex_Unlock(s_Innet_AppSend_M); + /*- 瑙i攣鍙戦侀槦鍒 */ + (void)CM_Mutex_Unlock(s_Innet_AppSend_M); } else { /*鏃犲鐞*/ } - /*- 杩斿洖 */ - return rt; + /*- 杩斿洖 */ + return rt; } /** -* @brief 鎺ユ敹杩滅▼閮ㄧ讲鍐呯綉鍗忚鎶ユ枃锛堝簲鐢ㄦ帴鏀讹級 -* @param pSrcName 婧愯澶嘔D -* @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTime, OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹杩滅▼閮ㄧ讲鍐呯綉鍗忚鎶ユ枃锛堝簲鐢ㄦ帴鏀讹級 + * @param pSrcName 婧愯澶嘔D + * @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16 *pSrcName, OUT CM_UINT8 *pLifeTime, OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 headBuf[7u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ - CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ - CM_UINT32 rt_len = 0u; /* 鍑芥暟杩斿洖闀垮害鍊 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 headBuf[7u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ + CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ + CM_UINT32 rt_len = 0u; /* 鍑芥暟杩斿洖闀垮害鍊 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { - /*- 閿佸畾鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Lock(s_Innet_RmRecv_M); + /*- 閿佸畾鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Lock(s_Innet_RmRecv_M); - qStatus = CM_QueueStatus(&s_Innet_RmRecvQ); - MSCP_LOG_MSG("Prtcl_InnetSafe_RmRecv len = %d\n", qStatus); - do - { + qStatus = CM_QueueStatus(&s_Innet_RmRecvQ); + MSCP_LOG_MSG("Prtcl_InnetSafe_RmRecv len = %d\n", qStatus); + do + { /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ if (7u < qStatus) { @@ -955,7 +971,7 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim 1瀛楄妭 鍓╀綑鏈夋晥鏃堕棿 n瀛楄妭 鏁版嵁 */ - (void)CM_QueueRead(7u, headBuf, &s_Innet_RmRecvQ);/*闀垮害*/ + (void)CM_QueueRead(7u, headBuf, &s_Innet_RmRecvQ); /*闀垮害*/ msgLen = CM_ShortFromChar(headBuf); /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) @@ -966,9 +982,9 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim (void)CM_QueueRead(rt_len, rxBuf, &s_Innet_RmRecvQ); /*- 瑙f瀽閫氫俊鍗忚锛屽鏋滄槸閲嶅惎鎴栧垏绯诲懡浠わ紝鎵ц閲嶅惎鎴栧垏绯婚昏緫*/ - rt = PFM_RemoteRun_Data(rxBuf,rt_len); + rt = PFM_RemoteRun_Data(rxBuf, rt_len); /*- 濡傛灉鏄噸鍚懡浠*/ - if((0xA5 <= rt) && (0xA8 >= rt)) + if ((0xA5 <= rt) && (0xA8 >= rt)) { /*- 骞冲彴杩囨护閲嶅惎鍛戒护*/ qStatus -= rt_len; @@ -984,52 +1000,54 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim else { /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Rm Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); break; } } else { /*- 鏃犲鐞*/ + MSCP_LOG_MSG("Rm Recv, msglen:%d, qstatus:%d, rxsize:%d\n", msgLen, qStatus, rxSize); break; } - }while(1); - /*- 瑙i攣鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); + } while (1); + /*- 瑙i攣鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); } else { /*- 鏃犲鐞*/ } - /*- 杩斿洖鎶ユ枃闀垮害 */ - return rt_len; + /*- 杩斿洖鎶ユ枃闀垮害 */ + return rt_len; } /** -* @brief 鎺ユ敹杩滅▼閮ㄧ讲鍐呯綉鍗忚鎶ユ枃锛堝钩鍙伴鍑鸿繍钀ュ悗鎺ユ敹锛 -* @param pSrcName 婧愯澶嘔D -* @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 -* @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 -* @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 -* @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 -* @details -* 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 -*/ -CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTime, OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 鎺ユ敹杩滅▼閮ㄧ讲鍐呯綉鍗忚鎶ユ枃锛堝钩鍙伴鍑鸿繍钀ュ悗鎺ユ敹锛 + * @param pSrcName 婧愯澶嘔D + * @param pLifeTime 鎶ユ枃鍓╀綑鏈夋晥鏈 + * @param rxBuf 鏀跺埌鐨勫簲鐢ㄦ姤鏂囨暟缁 + * @param rxSize 鎺ユ敹搴旂敤鎶ユ枃鐨勭紦鍐插尯锛坮xBuf锛夊ぇ灏忥紝搴斾笉灏忎簬鍙兘鏀跺埌鐨勬渶闀垮簲鐢ㄦ姤鏂囬暱搴 + * @return 鏀跺埌鐨勫簲鐢ㄦ姤鏂囬暱搴 + * @details + * 姣忔璋冪敤鑾峰緱涓鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 姣忓懆鏈熷簲鎸佺画璋冪敤鏈嚱鏁扮洿鍒拌幏寰楃殑鎶ユ枃闀垮害 *pRxLen == 0 + */ +CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16 *pSrcName, OUT CM_UINT8 *pLifeTime, OUT CM_UINT8 *rxBuf, IN CM_UINT32 rxSize) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 headBuf[7u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ - CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ - CM_UINT32 rt_len = 0u; /* 鍑芥暟杩斿洖闀垮害鍊 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 headBuf[7u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 鎶ユ枃闀垮害 */ + CM_UINT32 qStatus = 0u; /* 闃熷垪鐘舵 */ + CM_UINT32 rt_len = 0u; /* 鍑芥暟杩斿洖闀垮害鍊 */ + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { - /*- 閿佸畾鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Lock(s_Innet_RmRecv_M); + /*- 閿佸畾鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Lock(s_Innet_RmRecv_M); - qStatus = CM_QueueStatus(&s_Innet_RmRecvQ); - MSCP_LOG_MSG("Prtcl_InnetSafe_PlatRmRecv len = %d\n", qStatus); + qStatus = CM_QueueStatus(&s_Innet_RmRecvQ); + MSCP_LOG_MSG("Prtcl_InnetSafe_PlatRmRecv len = %d\n", qStatus); /*- 闃熷垪涓槸鍚︽湁瓒冲闀跨殑鏁版嵁 */ if (7u < qStatus) @@ -1043,7 +1061,7 @@ CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLif 1瀛楄妭 鍓╀綑鏈夋晥鏃堕棿 n瀛楄妭 鏁版嵁 */ - (void)CM_QueueRead(7u, headBuf, &s_Innet_RmRecvQ);/*闀垮害*/ + (void)CM_QueueRead(7u, headBuf, &s_Innet_RmRecvQ); /*闀垮害*/ msgLen = CM_ShortFromChar(headBuf); /*- 妫鏌ュ崗璁抚闀垮害鏄惁鍚堟硶 */ if ((msgLen <= (qStatus - 2u)) && (msgLen > 5u) && ((msgLen - 5u) < rxSize)) @@ -1062,37 +1080,36 @@ CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLif { /*- 鏃犲鐞*/ } - /*- 瑙i攣鎺ユ敹闃熷垪 */ - (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); + /*- 瑙i攣鎺ユ敹闃熷垪 */ + (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); } else { /*- 鏃犲鐞*/ } - /*- 杩斿洖鎶ユ枃闀垮害 */ - return rt_len; + /*- 杩斿洖鎶ユ枃闀垮害 */ + return rt_len; } - /** -* @brief 搴旂敤鍙戦佽繙绋嬮儴缃查鍑鸿繍钀ョ‘璁ゅ唴缃戝崗璁姤鏂 -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -*/ -CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) + * @brief 搴旂敤鍙戦佽繙绋嬮儴缃查鍑鸿繍钀ョ‘璁ゅ唴缃戝崗璁姤鏂 + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + */ +CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT8 buf[2u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ - CM_ASSERT_MAINTAIN(txBuf != NULL); + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT8 buf[2u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ + CM_ASSERT_MAINTAIN(txBuf != NULL); /*- 杈撳叆闀垮害妫鏌 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { /* 2瀛楄妭 闀垮害(涓嶅惈鑷韩) @@ -1103,16 +1120,16 @@ CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) /*- 濉啓鍗忚杈撳嚭甯уご */ CM_ShortToChar(txLen, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppRmSendQ);/*闀垮害*/ + temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppRmSendQ); /*闀垮害*/ /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_AppRmSendQ); - if(ENUM_CM_TRUE == temprt) + if (ENUM_CM_TRUE == temprt) { - rt = 1u;/*鎴愬姛*/ + rt = 1u; /*鎴愬姛*/ } else { - rt = 0u;/*澶辫触*/ + rt = 0u; /*澶辫触*/ } /*- 瑙i攣鍙戦侀槦鍒 */ @@ -1122,396 +1139,396 @@ CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) { /*鏃犲鐞*/ } - /*- 杩斿洖 */ - return rt; + /*- 杩斿洖 */ + return rt; } /** -* @brief 鍙戦佽繙绋嬮儴缃插唴缃戝崗璁姤鏂 -* @param dstName 鐩殑璁惧ID -* @param dstLogicID 鐩殑閫昏緫ID -* @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 -* @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 -* @return 鍑芥暟鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触(杈撳叆闈炴硶) -* @details -* 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 -* 骞冲彴姣忓懆鏈熷彧鑳借皟鐢ㄦ湰鍑芥暟涓娆″彂閫佷竴涓繙绋嬮儴缃叉姤鏂囷紝 -* 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 -*/ -CM_UINT8 Prtcl_InnetSafe_RmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen) + * @brief 鍙戦佽繙绋嬮儴缃插唴缃戝崗璁姤鏂 + * @param dstName 鐩殑璁惧ID + * @param dstLogicID 鐩殑閫昏緫ID + * @param txBuf 鍙戦佺殑搴旂敤鎶ユ枃鏁扮粍 + * @param txLen 鍙戦佺殑搴旂敤鎶ユ枃闀垮害 + * @return 鍑芥暟鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触(杈撳叆闈炴硶) + * @details + * 姣忔璋冪敤鍙戦佷竴鏉″畬鏁寸殑搴旂敤鎶ユ枃 + * 骞冲彴姣忓懆鏈熷彧鑳借皟鐢ㄦ湰鍑芥暟涓娆″彂閫佷竴涓繙绋嬮儴缃叉姤鏂囷紝 + * 娉ㄦ剰鎬诲彂閫侀暱搴︿笉瑕佽秴杩囧懆鏈熼氫俊鎬婚噺闄愬埗 + */ +CM_UINT8 Prtcl_InnetSafe_RmSend(IN CM_UINT16 dstName, IN const CM_UINT8 *txBuf, IN CM_UINT32 txLen) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 len = 0u; /* 闀垮害 */ - CM_UINT16 applen = 0u; /* 闀垮害 */ - CM_UINT8 buf[2u] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT8 Buftmp[128] = { 0u }; /* 涓存椂鍙橀噺 */ - CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ - ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT16 len = 0u; /* 闀垮害 */ + CM_UINT16 applen = 0u; /* 闀垮害 */ + CM_UINT8 buf[2u] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT8 Buftmp[128] = {0u}; /* 涓存椂鍙橀噺 */ + CM_UINT8 rt = 0u; /* 鍑芥暟杩斿洖鍊 */ + ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 涓存椂杩斿洖鍊 */ - /*- 杈撳叆闀垮害妫鏌 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + /*- 杈撳叆闀垮害妫鏌 */ + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { - /*- 閿佸畾鍙戦侀槦鍒 */ - (void)CM_Mutex_Lock(s_Innet_AppRmSend_M); + /*- 閿佸畾鍙戦侀槦鍒 */ + (void)CM_Mutex_Lock(s_Innet_AppRmSend_M); /*- 璇诲彇搴旂敤甯уご */ /* 2瀛楄妭 闀垮害(涓嶅惈鑷韩) n瀛楄妭 鏁版嵁 */ - (void)CM_QueueRead(2u, buf, &s_Innet_AppRmSendQ);/*闀垮害*/ + (void)CM_QueueRead(2u, buf, &s_Innet_AppRmSendQ); /*闀垮害*/ applen = CM_ShortFromChar(buf); - (void)CM_QueueRead(applen, Buftmp, &s_Innet_AppRmSendQ);/*闀垮害*/ + (void)CM_QueueRead(applen, Buftmp, &s_Innet_AppRmSendQ); /*闀垮害*/ - /*- 瑙i攣鍙戦侀槦鍒 */ - (void)CM_Mutex_Unlock(s_Innet_AppRmSend_M); - - /* - 2瀛楄妭 闀垮害(涓嶅惈鑷韩) - 2瀛楄妭 鐩殑ID(灏忕) - n瀛楄妭 鏁版嵁 - */ - (void)CM_Mutex_Lock(s_Innet_RmSend_M); + /*- 瑙i攣鍙戦侀槦鍒 */ + (void)CM_Mutex_Unlock(s_Innet_AppRmSend_M); - /*- 濉啓鍗忚杈撳嚭甯уご */ - len = (CM_UINT16)(txLen + 4u)+applen; - CM_ShortToChar(len, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*闀垮害*/ - CM_ShortToCharLE(0u, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*2瀛楄妭棰勭暀*/ - CM_ShortToCharLE(dstName, buf); - temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*鐩殑ID*/ - /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ - temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_RmSendQ); - if(ENUM_CM_TRUE == temprt) - { - temprt &= CM_QueueWrite(applen, Buftmp, &s_Innet_RmSendQ); - if(ENUM_CM_TRUE == temprt) - { - rt = 1u;/*鎴愬姛*/ - } - else - { - rt = 0u;/*澶辫触*/ - } - } - else - { - rt = 0u;/*澶辫触*/ - } + /* + 2瀛楄妭 闀垮害(涓嶅惈鑷韩) + 2瀛楄妭 鐩殑ID(灏忕) + n瀛楄妭 鏁版嵁 + */ + (void)CM_Mutex_Lock(s_Innet_RmSend_M); - /*- 瑙i攣鍙戦侀槦鍒 */ - (void)CM_Mutex_Unlock(s_Innet_RmSend_M); + /*- 濉啓鍗忚杈撳嚭甯уご */ + len = (CM_UINT16)(txLen + 4u) + applen; + CM_ShortToChar(len, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ); /*闀垮害*/ + CM_ShortToCharLE(0u, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ); /*2瀛楄妭棰勭暀*/ + CM_ShortToCharLE(dstName, buf); + temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ); /*鐩殑ID*/ + /*- 濉啓搴旂敤杈撳嚭鎶ユ枃 */ + temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_RmSendQ); + if (ENUM_CM_TRUE == temprt) + { + temprt &= CM_QueueWrite(applen, Buftmp, &s_Innet_RmSendQ); + if (ENUM_CM_TRUE == temprt) + { + rt = 1u; /*鎴愬姛*/ + } + else + { + rt = 0u; /*澶辫触*/ + } + } + else + { + rt = 0u; /*澶辫触*/ + } + + /*- 瑙i攣鍙戦侀槦鍒 */ + (void)CM_Mutex_Unlock(s_Innet_RmSend_M); } else { /*鏃犲鐞*/ } - /*- 杩斿洖 */ - return rt; + /*- 杩斿洖 */ + return rt; } /** -* @brief 鍗忚灞傚皝瑁呭緟鍙戦佹暟鎹 -*/ + * @brief 鍗忚灞傚皝瑁呭緟鍙戦佹暟鎹 + */ void SFM_EnPrtclProc(void) { - CM_UINT16 local_len = 0u; - CM_UINT8 local_buf[1500u] = {0u}; - CM_UINT16 peer_len = 0u; - CM_UINT8 p_peer_buf[1500u] = {0u}; - CM_UINT32 len1 = 0u; - CM_UINT32 len2 = 0u; - /*- 鍗忚灞傚皝瑁呭緟鍙戦佸缃戞暟鎹 */ - PFM_CFC_Check(3); - if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) - { - CM_LongToChar(0u, s_OutnetPrtcl.AppArray); - CM_LongToChar(0u, s_OutnetPrtcl.RecordArray); - (void)ProtclSendDataFunc(&s_OutnetPrtcl); - (void)QueueClear(&s_OutnetPrtcl.OutputDataQueue); - /*- 鏄惁寮鍚2oo2鍔熻兘 */ - if (0x55u == g_PFM_Cfg.M_2oo2_Enable) - { - /*- 鍙孋PU浜ゆ崲SVC */ - (void)ProtclGetSwapData(local_buf,1500u,&s_OutnetPrtcl); - local_len = 2u + CM_ShortFromChar(local_buf); - CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); - peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); - (void)ProtclSetSwapData(p_peer_buf,&s_OutnetPrtcl); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + CM_UINT16 local_len = 0u; + CM_UINT8 local_buf[1500u] = {0u}; + CM_UINT16 peer_len = 0u; + CM_UINT8 p_peer_buf[1500u] = {0u}; + CM_UINT32 len1 = 0u; + CM_UINT32 len2 = 0u; + /*- 鍗忚灞傚皝瑁呭緟鍙戦佸缃戞暟鎹 */ + PFM_CFC_Check(3); + if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) + { + CM_LongToChar(0u, s_OutnetPrtcl.AppArray); + CM_LongToChar(0u, s_OutnetPrtcl.RecordArray); + (void)ProtclSendDataFunc(&s_OutnetPrtcl); + (void)QueueClear(&s_OutnetPrtcl.OutputDataQueue); + /*- 鏄惁寮鍚2oo2鍔熻兘 */ + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) + { + /*- 鍙孋PU浜ゆ崲SVC */ + (void)ProtclGetSwapData(local_buf, 1500u, &s_OutnetPrtcl); + local_len = 2u + CM_ShortFromChar(local_buf); + CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); + peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); + (void)ProtclSetSwapData(p_peer_buf, &s_OutnetPrtcl); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } - /*- 鍐呯綉瀹夊叏鍗忚灏佽 */ - PFM_CFC_Check(4); - if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) - { - CM_LongToChar(0u, s_InnetPrtcl.PrtclSndBuff); - CM_LongToChar(0u, s_InnetPrtcl.RecordArray); - (void)ProtclOutput(&s_InnetPrtcl); - (void)QueueClear(&s_InnetPrtcl.OutputDataQueue); - /*- 鏄惁寮鍚2oo2鍔熻兘 */ - if (0x55u == g_PFM_Cfg.M_2oo2_Enable) - { - /*- 鍙孋PU浜ゆ崲SVC */ - (void)SfpGetSwapData(local_buf,1500u,&s_InnetPrtcl); - local_len = 2u + CM_ShortFromChar(local_buf); - CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2); - peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); - (void)SfpSetSwapData(p_peer_buf,&s_InnetPrtcl); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + /*- 鍐呯綉瀹夊叏鍗忚灏佽 */ + PFM_CFC_Check(4); + if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) + { + CM_LongToChar(0u, s_InnetPrtcl.PrtclSndBuff); + CM_LongToChar(0u, s_InnetPrtcl.RecordArray); + (void)ProtclOutput(&s_InnetPrtcl); + (void)QueueClear(&s_InnetPrtcl.OutputDataQueue); + /*- 鏄惁寮鍚2oo2鍔熻兘 */ + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) + { + /*- 鍙孋PU浜ゆ崲SVC */ + (void)SfpGetSwapData(local_buf, 1500u, &s_InnetPrtcl); + local_len = 2u + CM_ShortFromChar(local_buf); + CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2); + peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); + (void)SfpSetSwapData(p_peer_buf, &s_InnetPrtcl); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } /*- 杩滅▼閮ㄧ讲鍐呯綉瀹夊叏鍗忚灏佽 */ - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff); - CM_LongToChar(0u, s_InnetPrtcl_RM.RecordArray); - (void)ProtclOutput(&s_InnetPrtcl_RM); - (void)QueueClear(&s_InnetPrtcl_RM.OutputDataQueue); + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { + CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff); + CM_LongToChar(0u, s_InnetPrtcl_RM.RecordArray); + (void)ProtclOutput(&s_InnetPrtcl_RM); + (void)QueueClear(&s_InnetPrtcl_RM.OutputDataQueue); - len1 = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); - len2 = CM_LongFromChar(s_InnetPrtcl_RM.RecordArray); - MSCP_LOG_MSG("s_InnetPrtcl_RM.PrtclSndBuff = %d, s_InnetPrtcl_RM.RecordArray = %d\n",len1,len2); - /*- 鏄惁寮鍚2oo2鍔熻兘 */ - if (0x55u == g_PFM_Cfg.M_2oo2_Enable) - { - /*- 鍙孋PU浜ゆ崲SVC */ - (void)SfpGetSwapData(local_buf,1500u,&s_InnetPrtcl_RM); - local_len = 2u + CM_ShortFromChar(local_buf); - CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_3); - peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); - (void)SfpSetSwapData(p_peer_buf,&s_InnetPrtcl_RM); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + len1 = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); + len2 = CM_LongFromChar(s_InnetPrtcl_RM.RecordArray); + MSCP_LOG_MSG("s_InnetPrtcl_RM.PrtclSndBuff = %d, s_InnetPrtcl_RM.RecordArray = %d\n", len1, len2); + /*- 鏄惁寮鍚2oo2鍔熻兘 */ + if (0x55u == g_PFM_Cfg.M_2oo2_Enable) + { + /*- 鍙孋PU浜ゆ崲SVC */ + (void)SfpGetSwapData(local_buf, 1500u, &s_InnetPrtcl_RM); + local_len = 2u + CM_ShortFromChar(local_buf); + CM_RE_ASSERT(local_len <= sizeof(local_buf), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_3); + peer_len = (CM_UINT16)SFM_2oo2_Exchange_Currency(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_OUTPUT_EX); + (void)SfpSetSwapData(p_peer_buf, &s_InnetPrtcl_RM); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } } /** -* @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣緭鍑哄抚 -* @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 -* @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鎶ユ枃鎬婚暱搴 -*/ + * @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣緭鍑哄抚 + * @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 + * @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鎶ユ枃鎬婚暱搴 + */ CM_UINT32 SFM_ReadInnetCodedOutput(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /* - * 鏍煎紡锛 - * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | - * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 - */ - /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ - CM_UINT32 len = CM_LongFromChar(s_InnetPrtcl.PrtclSndBuff); - CM_RE_ASSERT(BufSize >= 4u, PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_2); - /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ - (void)CM_Memcpy((void*)Buf, (CM_SIZE_T)BufSize, (void*)s_InnetPrtcl.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); + /* + * 鏍煎紡锛 + * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | + * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 + */ + /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ + CM_UINT32 len = CM_LongFromChar(s_InnetPrtcl.PrtclSndBuff); + CM_RE_ASSERT(BufSize >= 4u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_2); + /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ + (void)CM_Memcpy((void *)Buf, (CM_SIZE_T)BufSize, (void *)s_InnetPrtcl.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); - /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ - return len + 4u ; + /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ + return len + 4u; } /** -* @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣繙绋嬮儴缃茶緭鍑哄抚 -* @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 -* @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鎶ユ枃鎬婚暱搴 -*/ + * @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣繙绋嬮儴缃茶緭鍑哄抚 + * @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 + * @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鎶ユ枃鎬婚暱搴 + */ CM_UINT32 SFM_ReadInnetRmCodedOutput(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /* - * 鏍煎紡锛 - * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | - * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 - */ - /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ + /* + * 鏍煎紡锛 + * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | + * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 + */ + /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ CM_UINT32 len = 0u; - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { - len = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); - CM_RE_ASSERT(BufSize >= 4u,PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_2); - /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ - (void)CM_Memcpy((void*)Buf, (CM_SIZE_T)BufSize, (void*)s_InnetPrtcl_RM.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); + len = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); + CM_RE_ASSERT(BufSize >= 4u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_2); + /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ + (void)CM_Memcpy((void *)Buf, (CM_SIZE_T)BufSize, (void *)s_InnetPrtcl_RM.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); } else { - CM_Memset((void*)Buf,0u, 4u,(CM_SIZE_T)BufSize); + CM_Memset((void *)Buf, 0u, 4u, (CM_SIZE_T)BufSize); } - /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ - return len + 4u ; + /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ + return len + 4u; } /** -* @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣緭鍑哄抚锛堝畷鏈烘儏鍐佃皟鐢級 -* @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 -* @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鎶ユ枃鎬婚暱搴 -*/ + * @brief 浠庡崗璁傞厤灞傝鍙栧崗璁唴缃戣緭鍑哄抚锛堝畷鏈烘儏鍐佃皟鐢級 + * @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 + * @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鎶ユ枃鎬婚暱搴 + */ CM_UINT32 SFM_ReadInnetCodedOutputCrash(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - /* - * 鏍煎紡锛 - * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | - * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 - */ - /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ - CM_UINT32 len = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); - MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash len3 = %d\n",len); + /* + * 鏍煎紡锛 + * 4瀛楄妭鎬婚暱搴 | 4瀛楄妭鍐呯綉杈撳嚭鎶ユ枃闀垮害 | 鍐呯綉杈撳嚭甯1 | 鍐呯綉杈撳嚭甯2 鈥︹ 鍐呯綉杈撳嚭甯 | 4瀛楄妭鏃ュ織鎶ユ枃闀垮害 | n瀛楄妭鏃ュ織鎶ユ枃 | + * 鍐呯綉杈撳嚭甯: 2瀛楄妭甯ч暱搴 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID(澶х) + 2瀛楄妭棰勭暀 + n瀛楄妭鏁版嵁 + */ + /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ + CM_UINT32 len = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff); + MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash len3 = %d\n", len); if (BufSize >= 4u && len <= (BufSize - 4u)) { - /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ - ret = CM_Memcpy((void*)Buf, (CM_SIZE_T)BufSize, (void*)s_InnetPrtcl_RM.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); + /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ + ret = CM_Memcpy((void *)Buf, (CM_SIZE_T)BufSize, (void *)s_InnetPrtcl_RM.PrtclSndBuff, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); CM_ASSERT_MAINTAIN(ret == ENUM_CM_TRUE); } else { - MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash BufSize is %u error!!! \n",BufSize); + MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash BufSize is %u error!!! \n", BufSize); } - /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ - return len + 4u; + /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ + return len + 4u; } /** -* @brief 浠庡崗璁傞厤灞傝鍙栧崗璁缃戣緭鍑哄抚 -* @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 -* @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 -* @return 杈撳嚭鎶ユ枃鎬婚暱搴 -*/ + * @brief 浠庡崗璁傞厤灞傝鍙栧崗璁缃戣緭鍑哄抚 + * @param Buf 杈撳嚭鎶ユ枃缂撳啿鍖烘寚閽 + * @param BufSize 杈撳嚭鎶ユ枃缂撳啿鍖哄ぇ灏 + * @return 杈撳嚭鎶ユ枃鎬婚暱搴 + */ CM_UINT32 SFM_ReadOutnetCodedOutput(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize) { - /* - * 鏍煎紡锛 - * 4瀛楄妭鎬婚暱搴 | 澶栫綉杈撳嚭甯1 | 澶栫綉杈撳嚭甯2 鈥︹ - * 澶栫綉杈撳嚭甯э細2瀛楄妭闀垮害 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID + 2瀛楄妭閫昏緫ID + n瀛楄妭鏁版嵁 - */ - /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ - CM_UINT32 len = CM_LongFromChar(s_OutnetPrtcl.AppArray); - CM_RE_ASSERT(BufSize >= 4u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_1); - CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_2); - /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ - (void)CM_Memcpy((void*)Buf, (CM_SIZE_T)BufSize, (void*)s_OutnetPrtcl.AppArray, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); - /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ - return len + 4u; + /* + * 鏍煎紡锛 + * 4瀛楄妭鎬婚暱搴 | 澶栫綉杈撳嚭甯1 | 澶栫綉杈撳嚭甯2 鈥︹ + * 澶栫綉杈撳嚭甯э細2瀛楄妭闀垮害 + 1瀛楄妭鍗忚绫诲瀷 + 2瀛楄妭鐩殑ID + 2瀛楄妭閫昏緫ID + n瀛楄妭鏁版嵁 + */ + /*- 鑾峰彇杈撳嚭鎶ユ枃鎬婚暱搴 */ + CM_UINT32 len = CM_LongFromChar(s_OutnetPrtcl.AppArray); + CM_RE_ASSERT(BufSize >= 4u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(len <= (BufSize - 4u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_11, TSCP_DARK_ASSERT_2); + /*- 杈撳嚭鍏ㄩ儴杈撳嚭鎶ユ枃 */ + (void)CM_Memcpy((void *)Buf, (CM_SIZE_T)BufSize, (void *)s_OutnetPrtcl.AppArray, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 4u)); + /*- 杩斿洖杈撳嚭鎶ユ枃鎬婚暱搴 */ + return len + 4u; } /** -* @brief 鍙戦佸唴缃戝畨鍏ㄩ氫俊鏁版嵁 -* @param buf 杈撳嚭鏁版嵁鏁扮粍 -* @param Len 杈撳嚭鏁版嵁闀垮害 -* @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 -*/ + * @brief 鍙戦佸唴缃戝畨鍏ㄩ氫俊鏁版嵁 + * @param buf 杈撳嚭鏁版嵁鏁扮粍 + * @param Len 杈撳嚭鏁版嵁闀垮害 + * @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 + */ void SFM_TxInnetSafe(IN CM_UINT8 Buf[], IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 allLen = CM_LongFromChar(Buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ - CM_UINT32 dataLen = 0u; - CM_UINT32 dataEnd = 0u; - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ - CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ - STRU_PFM_INNET_CFG_T* pCom = NULL;/* 閫氫俊閰嶇疆 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 allLen = CM_LongFromChar(Buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ + CM_UINT32 dataLen = 0u; + CM_UINT32 dataEnd = 0u; + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ + CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 閫氫俊閰嶇疆 */ - CM_RE_ASSERT((allLen + 4u) == Len, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((allLen + 4u) == Len, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_1); - dataLen = CM_LongFromChar(&Buf[4u]); - dataEnd = dataLen + 8u; + dataLen = CM_LongFromChar(&Buf[4u]); + dataEnd = dataLen + 8u; - i = 8u; - /*- 閬嶅巻杈撳嚭闃熷垪 */ - while ((i + 7u) < dataEnd) - { - /* - 鍗忚澶栫綉杈撳嚭甯уご - 2瀛楄妭 闀垮害 - 1瀛楄妭 鍗忚绫诲瀷 - 2瀛楄妭 鐩殑ID - 2瀛楄妭 棰勭暀 - n瀛楄妭 鏁版嵁 - */ - /*- 瑙f瀽鍗忚鍐呯綉杈撳嚭甯уご */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ + i = 8u; + /*- 閬嶅巻杈撳嚭闃熷垪 */ + while ((i + 7u) < dataEnd) + { + /* + 鍗忚澶栫綉杈撳嚭甯уご + 2瀛楄妭 闀垮害 + 1瀛楄妭 鍗忚绫诲瀷 + 2瀛楄妭 鐩殑ID + 2瀛楄妭 棰勭暀 + n瀛楄妭 鏁版嵁 + */ + /*- 瑙f瀽鍗忚鍐呯綉杈撳嚭甯уご */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ - CM_RE_ASSERT(msgLen > 5u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT(msgLen <= (Len - i - 2u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_3); - CM_RE_ASSERT(msgLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_4); + CM_RE_ASSERT(msgLen > 5u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT(msgLen <= (Len - i - 2u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT(msgLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_4); - /*- 鑾峰彇鐩殑IP绔彛 */ - pCom = PFM_INI_InnetID2Addr(dstID); - /*- 鏄惁鑾峰彇鎴愬姛 */ - if (NULL != pCom) - { - /*- 鏈満鏄惁涓篊PU1 */ - if (1u == g_PFM_Cfg.CPU_ID) - { - /*- 浠庣豢缃戦氶亾鍙戦 */ - (void)CFM_InnetSafe_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_G, pCom->Port_Safe_G); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } - else - { - /*- 浠庣传缃戦氶亾鍙戦 */ - (void)CFM_InnetSafe_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_P, pCom->Port_Safe_P); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } - } - else - { - /*- 鏃犲鐞*/ - } - i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); - } + /*- 鑾峰彇鐩殑IP绔彛 */ + pCom = PFM_INI_InnetID2Addr(dstID); + /*- 鏄惁鑾峰彇鎴愬姛 */ + if (NULL != pCom) + { + /*- 鏈満鏄惁涓篊PU1 */ + if (1u == g_PFM_Cfg.CPU_ID) + { + /*- 浠庣豢缃戦氶亾鍙戦 */ + (void)CFM_InnetSafe_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_G, pCom->Port_Safe_G); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } + else + { + /*- 浠庣传缃戦氶亾鍙戦 */ + (void)CFM_InnetSafe_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_P, pCom->Port_Safe_P); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } + } + else + { + /*- 鏃犲鐞*/ + } + i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); + } } /** -* @brief 鍙戦佸唴缃戝畨鍏ㄨ繙绋嬮儴缃查氫俊鏁版嵁 -* @param buf 杈撳嚭鏁版嵁鏁扮粍 -* @param Len 杈撳嚭鏁版嵁闀垮害 -* @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 -*/ + * @brief 鍙戦佸唴缃戝畨鍏ㄨ繙绋嬮儴缃查氫俊鏁版嵁 + * @param buf 杈撳嚭鏁版嵁鏁扮粍 + * @param Len 杈撳嚭鏁版嵁闀垮害 + * @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 + */ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 allLen = 0u; /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ - CM_UINT32 dataLen = 0u; - CM_UINT32 dataEnd = 0u; - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ - CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ - STRU_PFM_INNET_CFG_T* pCom = NULL;/* 閫氫俊閰嶇疆 */ - ENUM_CM_RETURN ret = ENUM_CM_FALSE; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 allLen = 0u; /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ + CM_UINT32 dataLen = 0u; + CM_UINT32 dataEnd = 0u; + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + 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)) + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { allLen = CM_LongFromChar(Buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ - CM_RE_ASSERT((allLen + 4u) == Len,PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((allLen + 4u) == Len, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1); dataLen = CM_LongFromChar(&Buf[4u]); dataEnd = dataLen + 8u; @@ -1529,14 +1546,14 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) n瀛楄妭 鏁版嵁 */ /*- 瑙f瀽鍗忚鍐呯綉杈撳嚭甯уご */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ CM_RE_ASSERT(msgLen > 5u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT(msgLen <= (Len - i - 2u),PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_3); - CM_RE_ASSERT(msgLen <= NET_20K_SIZE,PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_4); + CM_RE_ASSERT(msgLen <= (Len - i - 2u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT(msgLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_4); /*- 鑾峰彇鐩殑IP绔彛 */ pCom = PFM_INI_InnetID2Addr(dstID); @@ -1550,24 +1567,24 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) if (1u == g_PFM_Cfg.CPU_ID) { /*- 浠庣豢缃戦氶亾鍙戦 */ - 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ } else { /*- 浠庣传缃戦氶亾鍙戦 */ - 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ } - MSCP_LOG_MSG("plafm send innetsafeRm data ret = %#x\n",ret); + MSCP_LOG_MSG("plafm send innetsafeRm data ret = %#x\n", ret); } else { - MSCP_LOG_MSG("SFM_TxInnetSafeRm dstID = %x error!!! \n",dstID); + MSCP_LOG_MSG("SFM_TxInnetSafeRm dstID = %x error!!! \n", dstID); } } else { MSCP_LOG_MSG("Get dest IP and port fial!\n"); - /*- 鏃犲鐞*/ + /*- 鏃犲鐞*/ } i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); } @@ -1579,144 +1596,143 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len) } /** -* @brief 鍙戦佸唴缃戣繙绋嬮儴缃插畨鍏ㄩ氫俊鏁版嵁锛堝畷鏈哄悗浣跨敤锛 -* @param buf 杈撳嚭鏁版嵁鏁扮粍 -* @param Len 杈撳嚭鏁版嵁闀垮害 -* @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 -*/ + * @brief 鍙戦佸唴缃戣繙绋嬮儴缃插畨鍏ㄩ氫俊鏁版嵁锛堝畷鏈哄悗浣跨敤锛 + * @param buf 杈撳嚭鏁版嵁鏁扮粍 + * @param Len 杈撳嚭鏁版嵁闀垮害 + * @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍐呯綉SFP鍗忚杈撳嚭鎶ユ枃缁撴瀯缁勭粐 + */ void SFM_TxInnetSafeRemoteUpdate(IN CM_UINT8 Buf[], IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 allLen = CM_LongFromChar(Buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ - CM_UINT32 dataLen = 0u; - CM_UINT32 dataEnd = 0u; - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ - CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ - STRU_PFM_INNET_CFG_T* pCom = NULL;/* 閫氫俊閰嶇疆 */ + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 allLen = CM_LongFromChar(Buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ + CM_UINT32 dataLen = 0u; + CM_UINT32 dataEnd = 0u; + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ + CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ + STRU_PFM_INNET_CFG_T *pCom = NULL; /* 閫氫俊閰嶇疆 */ if ((allLen + 4u) == Len) { - MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : allLen=%d,Len=%d\n",allLen,Len); - dataLen = CM_LongFromChar(&Buf[4u]); - dataEnd = dataLen + 8u; + MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : allLen=%d,Len=%d\n", allLen, Len); + dataLen = CM_LongFromChar(&Buf[4u]); + dataEnd = dataLen + 8u; - i = 8u; + i = 8u; - MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : i=%d,dataEnd=%d\n",i,dataEnd); - /*- 閬嶅巻杈撳嚭闃熷垪 */ - while ((i + 7u) < dataEnd) - { - /* - 鍗忚澶栫綉杈撳嚭甯уご - 2瀛楄妭 闀垮害 - 1瀛楄妭 鍗忚绫诲瀷 - 2瀛楄妭 鐩殑ID - 2瀛楄妭 棰勭暀 - n瀛楄妭 鏁版嵁 - */ - /*- 瑙f瀽鍗忚鍐呯綉杈撳嚭甯уご */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ - MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : msgLen=%d,dstID=%d\n",msgLen,dstID); + MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : i=%d,dataEnd=%d\n", i, dataEnd); + /*- 閬嶅巻杈撳嚭闃熷垪 */ + while ((i + 7u) < dataEnd) + { + /* + 鍗忚澶栫綉杈撳嚭甯уご + 2瀛楄妭 闀垮害 + 1瀛楄妭 鍗忚绫诲瀷 + 2瀛楄妭 鐩殑ID + 2瀛楄妭 棰勭暀 + n瀛楄妭 鏁版嵁 + */ + /*- 瑙f瀽鍗忚鍐呯綉杈撳嚭甯уご */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2瀛楄妭 甯ч暱搴 */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + /* Buf[i + 2u]; */ /* 1瀛楄妭 鍗忚绫诲瀷 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2瀛楄妭 鐩殑ID */ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2瀛楄妭 (閫昏緫id) */ + MSCP_LOG_MSG("\nSFM_TxInnetSafeRemoteUpdate : msgLen=%d,dstID=%d\n", msgLen, dstID); if (msgLen > 5u && msgLen <= (Len - i - 2u) && msgLen <= NET_20K_SIZE) { - /*- 鑾峰彇鐩殑IP绔彛 */ - pCom = PFM_INI_RmInnetID2Addr(dstID); - /*- 鏄惁鑾峰彇鎴愬姛 */ - if (NULL != pCom) - { + /*- 鑾峰彇鐩殑IP绔彛 */ + pCom = PFM_INI_RmInnetID2Addr(dstID); + /*- 鏄惁鑾峰彇鎴愬姛 */ + if (NULL != pCom) + { if (g_Maintenance_Id == dstID) { /*- 杩滅▼閮ㄧ讲缁存姢缁堢璁惧 */ - /*- 鏈満鏄惁涓篊PU1 */ - if (1u == g_RMUP_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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } - 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - } + /*- 鏈満鏄惁涓篊PU1 */ + if (1u == g_RMUP_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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } + 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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + } } else { - MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate dstID = %x error!!! \n",dstID); + MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate dstID = %x error!!! \n", dstID); } - } - else - { - /*- 鏃犲鐞*/ - } - i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); + } + else + { + /*- 鏃犲鐞*/ + } + i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); } else { - MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate msgLen = %u error!!! \n",msgLen); + MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate msgLen = %u error!!! \n", msgLen); } - } + } } else { - MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate allLen = %u error!!! \n",allLen); + MSCP_LOG_MSG("SFM_TxInnetSafeRemoteUpdate allLen = %u error!!! \n", allLen); } } /** -* @brief 鍙戦佸缃戝畨鍏ㄩ氫俊鏁版嵁 -* @param buf 杈撳嚭鏁版嵁鏁扮粍 -* @param Len 杈撳嚭鏁版嵁闀垮害 -* @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍗忚閫傞厤灞傚缃戣緭鍑烘姤鏂囩粨鏋勭粍缁 -*/ + * @brief 鍙戦佸缃戝畨鍏ㄩ氫俊鏁版嵁 + * @param buf 杈撳嚭鏁版嵁鏁扮粍 + * @param Len 杈撳嚭鏁版嵁闀垮害 + * @details 杈撳嚭鏁版嵁鏁扮粍鎸夌収鍗忚閫傞厤灞傚缃戣緭鍑烘姤鏂囩粨鏋勭粍缁 + */ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 allLen = CM_LongFromChar(buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ - CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ - CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ - CM_UINT16 appLen = 0u; /* 搴旂敤閫氫俊鏁版嵁闀垮害 */ - CM_INT32 ccLen = 0; /* 杈撳嚭缁機C鐨勬姤鏂囬暱搴 */ - CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ - CM_UINT16 logicID = 0u; /* 鐩殑閫昏緫ID */ - /* CM_UINT32 srcHlhtId = 0u; */ /* 婧愪簰鑱斾簰閫欼D */ - /* CM_UINT32 dstHlhtId = 0u; */ /* 鐩殑浜掕仈浜掗欼D */ - CM_UINT8 type = 0u; /* 鍗忚绫诲瀷 */ - CM_UINT32 crc = 0u; /* CRC */ - CM_UINT32 sysCount = SFM_2x2_GetSysCount(); /* 鍛ㄦ湡鍙 */ - ENUM_CM_RECCUSEB isSendExtendBoard = ENUM_CM_CC; /*鏄惁鍙戠粰鎵╁睍鏉*/ - ENUM_CM_RETURN isTransformOutFrame = ENUM_CM_FALSE; /*鏄惁闇瑕佹敼鍙樺抚鏍煎紡*/ - CM_UINT16 eAtsOutLen = 0; /* 鏀瑰彉鍚庣殑鐪熷疄闀垮害 */ - CM_UINT16 eTrueSrcID = 0; /* 鏀瑰彉鍚庣殑鐪熷疄婧愯澶囩被鍨婭D */ - CM_UINT16 eTrueDstID = 0; /* 鏀瑰彉鍚庣殑鐪熷疄鐩殑璁惧绫诲瀷ID */ - CM_UINT32 tx_sn = 0u; - CM_RE_ASSERT((allLen + 4u) == Len, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); - i = 4u; - /*- 寰幆閬嶅巻杈撳嚭闃熷垪 */ - while ((i + 7u) < Len) - { - /* - 鍗忚澶栫綉杈撳嚭甯уご - 2瀛楄妭 闀垮害 - 1瀛楄妭 鍗忚绫诲瀷 - 2瀛楄妭 鐩殑ID - 2瀛楄妭 閫昏緫ID - n瀛楄妭 鏁版嵁 - */ - /*- 瑙f瀽鍗忚澶栫綉杈撳嚭甯уご */ - msgLen = CM_ShortFromChar(&buf[i]); /*2瀛楄妭 甯ч暱搴*/ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - type = buf[i + 2u]; /*1瀛楄妭 鍗忚绫诲瀷*/ - dstID = CM_ShortFromChar(&buf[i + 3u]); /*2瀛楄妭 鐩殑璁惧ID*/ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - logicID = CM_ShortFromChar(&buf[i + 5u]); /*2瀛楄妭 閫昏緫ID*/ - appLen = msgLen - 5u; /* 澶栫綉閫氫俊鏁版嵁闀垮害涓 msgLen - 5 */ - - CM_RE_ASSERT(msgLen > 5u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2); - CM_RE_ASSERT(msgLen <= (Len - i - 2u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_3); - CM_RE_ASSERT(msgLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_4); + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 allLen = CM_LongFromChar(buf); /*澶栫綉杈撳嚭甯ф姤鏂囨婚暱搴*/ + CM_UINT32 i = 0u; /* 寰幆鍙橀噺 */ + CM_UINT16 msgLen = 0u; /* 澶栫綉杈撳嚭甯ч暱搴 */ + CM_UINT16 appLen = 0u; /* 搴旂敤閫氫俊鏁版嵁闀垮害 */ + CM_INT32 ccLen = 0; /* 杈撳嚭缁機C鐨勬姤鏂囬暱搴 */ + CM_UINT16 dstID = 0u; /* 鐩殑璁惧ID */ + CM_UINT16 logicID = 0u; /* 鐩殑閫昏緫ID */ + /* CM_UINT32 srcHlhtId = 0u; */ /* 婧愪簰鑱斾簰閫欼D */ + /* CM_UINT32 dstHlhtId = 0u; */ /* 鐩殑浜掕仈浜掗欼D */ + CM_UINT8 type = 0u; /* 鍗忚绫诲瀷 */ + CM_UINT32 crc = 0u; /* CRC */ + CM_UINT32 sysCount = SFM_2x2_GetSysCount(); /* 鍛ㄦ湡鍙 */ + ENUM_CM_RECCUSEB isSendExtendBoard = ENUM_CM_CC; /*鏄惁鍙戠粰鎵╁睍鏉*/ + ENUM_CM_RETURN isTransformOutFrame = ENUM_CM_FALSE; /*鏄惁闇瑕佹敼鍙樺抚鏍煎紡*/ + CM_UINT16 eAtsOutLen = 0; /* 鏀瑰彉鍚庣殑鐪熷疄闀垮害 */ + CM_UINT16 eTrueSrcID = 0; /* 鏀瑰彉鍚庣殑鐪熷疄婧愯澶囩被鍨婭D */ + CM_UINT16 eTrueDstID = 0; /* 鏀瑰彉鍚庣殑鐪熷疄鐩殑璁惧绫诲瀷ID */ + CM_UINT32 tx_sn = 0u; + CM_RE_ASSERT((allLen + 4u) == Len, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); + i = 4u; + /*- 寰幆閬嶅巻杈撳嚭闃熷垪 */ + while ((i + 7u) < Len) + { + /* + 鍗忚澶栫綉杈撳嚭甯уご + 2瀛楄妭 闀垮害 + 1瀛楄妭 鍗忚绫诲瀷 + 2瀛楄妭 鐩殑ID + 2瀛楄妭 閫昏緫ID + n瀛楄妭 鏁版嵁 + */ + /*- 瑙f瀽鍗忚澶栫綉杈撳嚭甯уご */ + msgLen = CM_ShortFromChar(&buf[i]); /*2瀛楄妭 甯ч暱搴*/ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + type = buf[i + 2u]; /*1瀛楄妭 鍗忚绫诲瀷*/ + dstID = CM_ShortFromChar(&buf[i + 3u]); /*2瀛楄妭 鐩殑璁惧ID*/ /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + logicID = CM_ShortFromChar(&buf[i + 5u]); /*2瀛楄妭 閫昏緫ID*/ + appLen = msgLen - 5u; /* 澶栫綉閫氫俊鏁版嵁闀垮害涓 msgLen - 5 */ + CM_RE_ASSERT(msgLen > 5u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT(msgLen <= (Len - i - 2u), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT(msgLen <= NET_20K_SIZE, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_4); /* TSL鏄熼摼 涓绘満-搴曞骇 鍗忚*/ @@ -1733,22 +1749,22 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) 4瀛楄妭 CRC */ CM_ShortToChar((CM_UINT16)(appLen + 19u), s_Prtcl_UDP_Cache); /* 闀垮害 */ - s_Prtcl_UDP_Cache[2] = 0u; /* 鍗忚鐗堟湰鍥哄畾涓0 */ + s_Prtcl_UDP_Cache[2] = 0u; /* 鍗忚鐗堟湰鍥哄畾涓0 */ #if 0 CM_ShortToChar(0u, s_Prtcl_UDP_Cache + 3); /* 婧愮洰鐨勮澶嘔D */ CM_ShortToChar(0u, s_Prtcl_UDP_Cache + 5); /* 婧愮洰鐨勯昏緫ID */ #else - CM_LongToChar(sysCount, s_Prtcl_UDP_Cache + 3); /* 搴忓垪鍙 */ + CM_LongToChar(sysCount, s_Prtcl_UDP_Cache + 3); /* 搴忓垪鍙 */ #endif - tx_sn = SFM_GetTxSn(); /* 鑾峰彇甯у簭鍙*/ - CM_LongToChar(tx_sn, s_Prtcl_UDP_Cache + 7); /* 甯у簭鍙 */ - CM_ShortToChar(dstID, s_Prtcl_UDP_Cache + 11); /* 鐩殑璁惧ID */ - CM_ShortToChar(logicID, s_Prtcl_UDP_Cache + 13); /* 鐩殑閫昏緫ID */ + tx_sn = SFM_GetTxSn(); /* 鑾峰彇甯у簭鍙*/ + CM_LongToChar(tx_sn, s_Prtcl_UDP_Cache + 7); /* 甯у簭鍙 */ + CM_ShortToChar(dstID, s_Prtcl_UDP_Cache + 11); /* 鐩殑璁惧ID */ + CM_ShortToChar(logicID, s_Prtcl_UDP_Cache + 13); /* 鐩殑閫昏緫ID */ - CM_ShortToChar((CM_UINT16)type, s_Prtcl_UDP_Cache + 15); /* 鍗忚绫诲瀷 */ + CM_ShortToChar((CM_UINT16)type, s_Prtcl_UDP_Cache + 15); /* 鍗忚绫诲瀷 */ /*- 搴旂敤鏄惁娉ㄥ唽ats杞溅杈撳嚭鍑芥暟 */ - if(NULL == p_Serial_OUT_ATSVOBC_Func) + if (NULL == p_Serial_OUT_ATSVOBC_Func) { /*- 鏃犲鐞 */ } @@ -1759,7 +1775,7 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) } /*- 搴旂敤鏄惁娉ㄥ唽杞覆鍙f墿灞曟澘鏁版嵁鍑芥暟 */ - if(NULL == p_Serial_Id_Func) + if (NULL == p_Serial_Id_Func) { /*- 鏃犲鐞 */ isSendExtendBoard = ENUM_CM_CC; @@ -1770,16 +1786,16 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) isSendExtendBoard = (*p_Serial_Id_Func)(dstID); } - if((ENUM_CM_FALSE == isTransformOutFrame)||/*鏃犲悗澶囬氶亾锛屽彂缁欓氭帶鎴栬呬覆鍙f澘*/ - (ENUM_CM_CCSEB == isSendExtendBoard))/*涓汇佸閫氶亾锛屽彂缁欓氭帶*/ + if ((ENUM_CM_FALSE == isTransformOutFrame) || /*鏃犲悗澶囬氶亾锛屽彂缁欓氭帶鎴栬呬覆鍙f澘*/ + (ENUM_CM_CCSEB == isSendExtendBoard)) /*涓汇佸閫氶亾锛屽彂缁欓氭帶*/ { /*- 濉啓閫氫俊鏁版嵁 */ - (void)CM_Memcpy((void*)(s_Prtcl_UDP_Cache + 17u), (CM_SIZE_T)(sizeof(s_Prtcl_UDP_Cache) - 17u), (void*)(buf + i + 7u), (CM_SIZE_T)appLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_Memcpy((void *)(s_Prtcl_UDP_Cache + 17u), (CM_SIZE_T)(sizeof(s_Prtcl_UDP_Cache) - 17u), (void *)(buf + i + 7u), (CM_SIZE_T)appLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ /* CRC */ - crc = CM_Crc32(s_Prtcl_UDP_Cache, appLen + 17u);//鎬婚暱搴︿负17 = 澶+闀垮害 + crc = CM_Crc32(s_Prtcl_UDP_Cache, appLen + 17u); // 鎬婚暱搴︿负17 = 澶+闀垮害 CM_LongToChar(crc, s_Prtcl_UDP_Cache + appLen + 17u); - ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)21u);/*鍙戠粰CC鐨刄DP鎶ユ枃闀垮害*/ + ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)21u); /*鍙戠粰CC鐨刄DP鎶ユ枃闀垮害*/ /*- 濡傛灉鏄彂閫佺粰涓插彛鎵╁睍鏉 */ if (ENUM_CM_SEB == isSendExtendBoard) { @@ -1788,7 +1804,7 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) /*- 鍚戠孩缃慡E鍙戦丼E澶栫綉甯 */ (void)CFM_OutnetSafe_Send(s_Prtcl_UDP_Cache, ccLen, ENUM_OUTNET_EXTEND_BLUE); } - else if((ENUM_CM_CC == isSendExtendBoard) || (ENUM_CM_CCSEB == isSendExtendBoard)) + else if ((ENUM_CM_CC == isSendExtendBoard) || (ENUM_CM_CCSEB == isSendExtendBoard)) { /*- 鍚戠孩缃慍C鍙戦丆C澶栫綉甯 */ (void)CFM_OutnetSafe_Send(s_Prtcl_UDP_Cache, ccLen, ENUM_OUTNET_RED); @@ -1805,25 +1821,25 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) /*鏃犲鐞*/ } /*- 濡傛灉鏄痑ts杞溅杈撳嚭鏁版嵁 */ - if(ENUM_CM_TRUE == isTransformOutFrame)/*鍚庡閫氶亾锛屽彂缁欎覆鍙f澘*/ + if (ENUM_CM_TRUE == isTransformOutFrame) /*鍚庡閫氶亾锛屽彂缁欎覆鍙f澘*/ { /*- 鎸夌収ats杞溅杈撳嚭鏁版嵁甯ф牸寮忚繘琛岀粍鍖 */ - CM_ShortToChar((CM_UINT16)(appLen + 33u), s_Prtcl_UDP_Cache); /* 闀垮害 涓嶅寘鍚嚜韬2瀛楄妭锛屼絾鍖呭惈CRC */ - CM_ShortToChar(eTrueDstID, s_Prtcl_UDP_Cache + 11u); /* 鐩殑璁惧ID */ - CM_ShortToChar(0u, s_Prtcl_UDP_Cache + 13u); /* 閫昏緫ID */ + CM_ShortToChar((CM_UINT16)(appLen + 33u), s_Prtcl_UDP_Cache); /* 闀垮害 涓嶅寘鍚嚜韬2瀛楄妭锛屼絾鍖呭惈CRC */ + CM_ShortToChar(eTrueDstID, s_Prtcl_UDP_Cache + 11u); /* 鐩殑璁惧ID */ + CM_ShortToChar(0u, s_Prtcl_UDP_Cache + 13u); /* 閫昏緫ID */ eAtsOutLen = appLen + 12u; - CM_ShortToChar(eAtsOutLen, s_Prtcl_UDP_Cache + 17u); /* ats瑙f瀽鏁版嵁鍖呴暱搴 */ - CM_LongToChar(sysCount, s_Prtcl_UDP_Cache + 19u); /* 鍛ㄦ湡鍙,ats鐢ㄦ潵鍘诲啑浣 */ - CM_ShortToChar(eTrueSrcID, s_Prtcl_UDP_Cache + 23u); /* 涓ゅ瓧鑺傜湡瀹炴簮璁惧ID */ - CM_ShortToChar(0, s_Prtcl_UDP_Cache + 25u); /* 涓ゅ瓧鑺0 */ - CM_ShortToChar(dstID, s_Prtcl_UDP_Cache + 27u); /* 涓ゅ瓧鑺傜洰鐨勮澶嘔D */ - CM_ShortToChar(logicID, s_Prtcl_UDP_Cache + 29u); /* 涓ゅ瓧鑺傜洰鐨勯昏緫id*/ + CM_ShortToChar(eAtsOutLen, s_Prtcl_UDP_Cache + 17u); /* ats瑙f瀽鏁版嵁鍖呴暱搴 */ + CM_LongToChar(sysCount, s_Prtcl_UDP_Cache + 19u); /* 鍛ㄦ湡鍙,ats鐢ㄦ潵鍘诲啑浣 */ + CM_ShortToChar(eTrueSrcID, s_Prtcl_UDP_Cache + 23u); /* 涓ゅ瓧鑺傜湡瀹炴簮璁惧ID */ + CM_ShortToChar(0, s_Prtcl_UDP_Cache + 25u); /* 涓ゅ瓧鑺0 */ + CM_ShortToChar(dstID, s_Prtcl_UDP_Cache + 27u); /* 涓ゅ瓧鑺傜洰鐨勮澶嘔D */ + CM_ShortToChar(logicID, s_Prtcl_UDP_Cache + 29u); /* 涓ゅ瓧鑺傜洰鐨勯昏緫id*/ /*- 濉啓閫氫俊鏁版嵁 */ - (void)CM_Memcpy((void*)(s_Prtcl_UDP_Cache + 31u), (CM_SIZE_T)(sizeof(s_Prtcl_UDP_Cache) - 31u), (void*)(buf + i + 7u), (CM_SIZE_T)appLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ + (void)CM_Memcpy((void *)(s_Prtcl_UDP_Cache + 31u), (CM_SIZE_T)(sizeof(s_Prtcl_UDP_Cache) - 31u), (void *)(buf + i + 7u), (CM_SIZE_T)appLen); /* parasoft-suppress MISRA2004-17_1 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ /* CRC */ crc = CM_Crc32(s_Prtcl_UDP_Cache, appLen + 31u); CM_LongToChar(crc, s_Prtcl_UDP_Cache + appLen + 31u); - ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)35u);/*鍙戠粰CC/SEB鐨刄DP鎶ユ枃闀垮害*/ + ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)35u); /*鍙戠粰CC/SEB鐨刄DP鎶ユ枃闀垮害*/ /*- 濡傛灉鏄彂閫佺粰涓插彛鎵╁睍鏉 */ if ((ENUM_CM_SEB == isSendExtendBoard) || (ENUM_CM_CCSEB == isSendExtendBoard)) { @@ -1841,317 +1857,315 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) { /*- 鏃犲鐞 */ } - - /*- 绱㈠紩鍋忕Щ鑷充笅涓杈撳嚭鎶ユ枃 */ - i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); - } + + /*- 绱㈠紩鍋忕Щ鑷充笅涓杈撳嚭鎶ユ枃 */ + i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); + } } void SFM_PrtclBufSwitch(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 len = 0u; - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT8 rslt = 0u; + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 len = 0u; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT8 rslt = 0u; - /*- 鏄惁寮鍚缃戝畨鍏ㄩ氫俊 */ - if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) - { - /*- 璇诲彇搴旂敤澶栫綉鍙戦佺紦鍐 */ - len = CM_QueueStatus(&s_Outnet_AppSendQ); - /*- 搴旂敤澶栫綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ - if (len > 0u) - { - /*- 浠庡簲鐢ㄥ缃戝彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ - ret = CM_QueueRead(len, s_TmpCache, &s_Outnet_AppSendQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); - rslt = QueueWrite(len, s_TmpCache, &s_OutnetPrtcl.OutputDataQueue); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); - } - else - { - /*- 鏃犲鐞*/ - } + /*- 鏄惁寮鍚缃戝畨鍏ㄩ氫俊 */ + if (0x55u == g_PFM_Cfg.M_OutnetSafe_Enable) + { + /*- 璇诲彇搴旂敤澶栫綉鍙戦佺紦鍐 */ + len = CM_QueueStatus(&s_Outnet_AppSendQ); + /*- 搴旂敤澶栫綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ + if (len > 0u) + { + /*- 浠庡簲鐢ㄥ缃戝彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ + ret = CM_QueueRead(len, s_TmpCache, &s_Outnet_AppSendQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + rslt = QueueWrite(len, s_TmpCache, &s_OutnetPrtcl.OutputDataQueue); + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); + } + else + { + /*- 鏃犲鐞*/ + } - /*- 娓呯┖搴旂敤澶栫綉鍙戦佺紦鍐插尯 */ - (void)CM_QueueClear(&s_Outnet_AppSendQ); + /*- 娓呯┖搴旂敤澶栫綉鍙戦佺紦鍐插尯 */ + (void)CM_QueueClear(&s_Outnet_AppSendQ); - /*- 娓呯┖搴旂敤澶栫綉鎺ユ敹缂撳啿鍖 */ - (void)CM_QueueClear(&s_Outnet_AppRecvQ); + /*- 娓呯┖搴旂敤澶栫綉鎺ユ敹缂撳啿鍖 */ + (void)CM_QueueClear(&s_Outnet_AppRecvQ); - /*- 鏌ヨ鍗忚灞傚缃戞帴鏀堕槦鍒 */ - len = QueueStatus(&s_OutnetPrtcl.DataToApp); - /*- 鏄惁鏈夊簲鐢ㄦ帴鏀舵暟鎹 */ - if (len > 0u) - { - /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ュ簲鐢ㄦ帴鏀剁紦鍐插尯*/ - rslt = QueueRead(len, s_TmpCache, &s_OutnetPrtcl.DataToApp); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); - ret = CM_QueueWrite(len, s_TmpCache, &s_Outnet_AppRecvQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_4); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + /*- 鏌ヨ鍗忚灞傚缃戞帴鏀堕槦鍒 */ + len = QueueStatus(&s_OutnetPrtcl.DataToApp); + /*- 鏄惁鏈夊簲鐢ㄦ帴鏀舵暟鎹 */ + if (len > 0u) + { + /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ュ簲鐢ㄦ帴鏀剁紦鍐插尯*/ + rslt = QueueRead(len, s_TmpCache, &s_OutnetPrtcl.DataToApp); + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); + ret = CM_QueueWrite(len, s_TmpCache, &s_Outnet_AppRecvQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_4); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } - /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ - if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) - { - /*- 璇诲彇搴旂敤鍐呯綉鍙戦佺紦鍐 */ - len = CM_QueueStatus(&s_Innet_AppSendQ); - /*- 搴旂敤鍐呯綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ - if (len > 0u) - { - /*- 浠庡簲鐢ㄥ彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ - ret = CM_QueueRead(len, s_TmpCache, &s_Innet_AppSendQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_5); - rslt = QueueWrite(len, s_TmpCache, &s_InnetPrtcl.OutputDataQueue); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_6); - } - else - { - /*- 鏃犲鐞*/ - } + /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ + if (0x55u == g_PFM_Cfg.M_InnetSafe_Enable) + { + /*- 璇诲彇搴旂敤鍐呯綉鍙戦佺紦鍐 */ + len = CM_QueueStatus(&s_Innet_AppSendQ); + /*- 搴旂敤鍐呯綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ + if (len > 0u) + { + /*- 浠庡簲鐢ㄥ彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ + ret = CM_QueueRead(len, s_TmpCache, &s_Innet_AppSendQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_5); + rslt = QueueWrite(len, s_TmpCache, &s_InnetPrtcl.OutputDataQueue); + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_6); + } + else + { + /*- 鏃犲鐞*/ + } - /*- 娓呯┖搴旂敤鍐呯綉鍙戦佺紦鍐插尯 */ - (void)CM_QueueClear(&s_Innet_AppSendQ); + /*- 娓呯┖搴旂敤鍐呯綉鍙戦佺紦鍐插尯 */ + (void)CM_QueueClear(&s_Innet_AppSendQ); - /*- 娓呯┖搴旂敤鍐呯綉鎺ユ敹缂撳啿鍖 */ - (void)CM_QueueClear(&s_Innet_AppRecvQ); + /*- 娓呯┖搴旂敤鍐呯綉鎺ユ敹缂撳啿鍖 */ + (void)CM_QueueClear(&s_Innet_AppRecvQ); - /*- 鏌ヨ鍗忚灞傚唴缃戞帴鏀堕槦鍒 */ - len = QueueStatus(&s_InnetPrtcl.DataToApp); - /*- 鏄惁鏈夊簲鐢ㄦ帴鏀舵暟鎹 */ - if (len > 0u) - { - /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ュ簲鐢ㄦ帴鏀剁紦鍐插尯*/ - rslt = QueueRead(len, s_TmpCache, &s_InnetPrtcl.DataToApp); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_7); - ret = CM_QueueWrite(len, s_TmpCache, &s_Innet_AppRecvQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_8); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + /*- 鏌ヨ鍗忚灞傚唴缃戞帴鏀堕槦鍒 */ + len = QueueStatus(&s_InnetPrtcl.DataToApp); + /*- 鏄惁鏈夊簲鐢ㄦ帴鏀舵暟鎹 */ + if (len > 0u) + { + /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ュ簲鐢ㄦ帴鏀剁紦鍐插尯*/ + rslt = QueueRead(len, s_TmpCache, &s_InnetPrtcl.DataToApp); + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_7); + ret = CM_QueueWrite(len, s_TmpCache, &s_Innet_AppRecvQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_8); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } /*- 鏄惁寮鍚繙绋嬮儴缃插唴缃戝畨鍏ㄩ氫俊 */ - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - /*- 璇诲彇杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐 */ - len = CM_QueueStatus(&s_Innet_RmSendQ); - /*- 搴旂敤鍐呯綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ - if (len > 0u) - { - /*- 浠庡簲鐢ㄥ彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ - ret = CM_QueueRead(len, s_TmpCache, &s_Innet_RmSendQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_9); - MSCP_LOG_MSG("SFM_PrtclBufSwitch : %d\n",len); - rslt = QueueWrite(len, s_TmpCache, &s_InnetPrtcl_RM.OutputDataQueue); + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { + /*- 璇诲彇杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐 */ + len = CM_QueueStatus(&s_Innet_RmSendQ); + /*- 搴旂敤鍐呯綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ + if (len > 0u) + { + /*- 浠庡簲鐢ㄥ彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ + ret = CM_QueueRead(len, s_TmpCache, &s_Innet_RmSendQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_9); + MSCP_LOG_MSG("SFM_PrtclBufSwitch : %d\n", len); + rslt = QueueWrite(len, s_TmpCache, &s_InnetPrtcl_RM.OutputDataQueue); - len = QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue); - MSCP_LOG_MSG("&s_InnetPrtcl_RM.OutputDataQueue len = %d\n",len); + len = QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue); + MSCP_LOG_MSG("&s_InnetPrtcl_RM.OutputDataQueue len = %d\n", len); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_10); - } - else - { - /*- 鏃犲鐞*/ - } + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_10); + } + else + { + /*- 鏃犲鐞*/ + } - /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐插尯 */ - (void)CM_QueueClear(&s_Innet_RmSendQ); + /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐插尯 */ + (void)CM_QueueClear(&s_Innet_RmSendQ); - /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐插尯 */ - (void)CM_QueueClear(&s_Innet_AppRmSendQ); + /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鍙戦佺紦鍐插尯 */ + (void)CM_QueueClear(&s_Innet_AppRmSendQ); - /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鎺ユ敹缂撳啿鍖 */ - (void)CM_QueueClear(&s_Innet_RmRecvQ); + /*- 娓呯┖杩滅▼閮ㄧ讲鍐呯綉鎺ユ敹缂撳啿鍖 */ + (void)CM_QueueClear(&s_Innet_RmRecvQ); - /*- 鏌ヨ鍗忚灞傚唴缃戞帴鏀堕槦鍒 */ - len = QueueStatus(&s_InnetPrtcl_RM.DataToApp); - MSCP_LOG_MSG("&s_InnetPrtcl_RM.DataToApp len = %d\n",len); - /*- 鏄惁杩滅▼閮ㄧ讲鍐呯綉鎺ユ敹鏁版嵁 */ - if (len > 0u) - { - /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ヨ繙绋嬮儴缃插唴缃戞帴鏀剁紦鍐插尯*/ - rslt = QueueRead(len, s_TmpCache, &s_InnetPrtcl_RM.DataToApp); - CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_11); - ret = CM_QueueWrite(len, s_TmpCache, &s_Innet_RmRecvQ); - CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_12); - } - else - { - /*- 鏃犲鐞*/ - } - } - else + /*- 鏌ヨ鍗忚灞傚唴缃戞帴鏀堕槦鍒 */ + len = QueueStatus(&s_InnetPrtcl_RM.DataToApp); + MSCP_LOG_MSG("&s_InnetPrtcl_RM.DataToApp len = %d\n", len); + /*- 鏄惁杩滅▼閮ㄧ讲鍐呯綉鎺ユ敹鏁版嵁 */ + if (len > 0u) + { + /*- 浠庡崗璁眰搴旂敤鎺ユ敹闃熷垪璇诲嚭鏁版嵁锛屽啓鍏ヨ繙绋嬮儴缃插唴缃戞帴鏀剁紦鍐插尯*/ + rslt = QueueRead(len, s_TmpCache, &s_InnetPrtcl_RM.DataToApp); + CM_RE_ASSERT(1u == rslt, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_11); + ret = CM_QueueWrite(len, s_TmpCache, &s_Innet_RmRecvQ); + CM_RE_ASSERT(ENUM_CM_TRUE == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_12); + } + else + { + /*- 鏃犲鐞*/ + } + } + else { /*- 鏃犲鐞*/ } } /** -* @brief 鑾峰彇閫傞厤灞傚崗璁(-1)璺熼殢鏁版嵁 -* @param Buf 杈撳嚭璺熼殢鏁版嵁鏁扮粍鎸囬拡 -* @param BufSize 杈撳嚭鏁扮粍绌洪棿澶у皬 -* @return 杈撳嚭璺熼殢鏁版嵁闀垮害 -*/ -CM_UINT32 SFM_GetPrtclFollowData(OUT CM_UINT8* Buf, IN CM_UINT32 BufSize) + * @brief 鑾峰彇閫傞厤灞傚崗璁(-1)璺熼殢鏁版嵁 + * @param Buf 杈撳嚭璺熼殢鏁版嵁鏁扮粍鎸囬拡 + * @param BufSize 杈撳嚭鏁扮粍绌洪棿澶у皬 + * @return 杈撳嚭璺熼殢鏁版嵁闀垮害 + */ +CM_UINT32 SFM_GetPrtclFollowData(OUT CM_UINT8 *Buf, IN CM_UINT32 BufSize) { - /*- 鑾峰彇鍗忚璺熼殢鏁版嵁闀垮害 */ - CM_UINT32 len = (CM_UINT32)CM_ShortFromChar(s_OutnetPrtcl.VarArray); - /*- 杈撳嚭璺熼殢鏁版嵁 */ - CM_RE_ASSERT((BufSize >= 2u) && (len <= (BufSize - 2u)), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); - (void)CM_Memcpy((void*)Buf, (CM_SIZE_T)BufSize, (void*)s_OutnetPrtcl.VarArray, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 2u)); + /*- 鑾峰彇鍗忚璺熼殢鏁版嵁闀垮害 */ + CM_UINT32 len = (CM_UINT32)CM_ShortFromChar(s_OutnetPrtcl.VarArray); + /*- 杈撳嚭璺熼殢鏁版嵁 */ + CM_RE_ASSERT((BufSize >= 2u) && (len <= (BufSize - 2u)), PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); + (void)CM_Memcpy((void *)Buf, (CM_SIZE_T)BufSize, (void *)s_OutnetPrtcl.VarArray, (CM_SIZE_T)CM_UNSIGNED_INT_EXP(len + 2u)); - /*- 杩斿洖鏁版嵁闀垮害 */ - return len + 2u; + /*- 杩斿洖鏁版嵁闀垮害 */ + return len + 2u; } /** -* @brief 鑾峰彇sfp璺熼殢鏁版嵁 -* @param Buf 杈撳嚭璺熼殢鏁版嵁鏁扮粍鎸囬拡 -* @param BufSize 杈撳嚭鏁扮粍绌洪棿澶у皬 -* @return 杈撳嚭璺熼殢鏁版嵁闀垮害 -*/ -CM_UINT32 SFM_GetSfpPrtclFollowData(OUT CM_UINT8* Buf, IN CM_UINT32 BufSize) + * @brief 鑾峰彇sfp璺熼殢鏁版嵁 + * @param Buf 杈撳嚭璺熼殢鏁版嵁鏁扮粍鎸囬拡 + * @param BufSize 杈撳嚭鏁扮粍绌洪棿澶у皬 + * @return 杈撳嚭璺熼殢鏁版嵁闀垮害 + */ +CM_UINT32 SFM_GetSfpPrtclFollowData(OUT CM_UINT8 *Buf, IN CM_UINT32 BufSize) { /*- 鍏ュ弬闃茬┖ */ CM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_2); - /*- 鑾峰彇鍗忚璺熼殢鏁版嵁闀垮害 */ - CM_UINT32 sfpTotalLen = CM_LongFromChar(&s_InnetPrtcl.PrtclSndBuff[0]); - CM_UINT32 sfpDataLen = CM_LongFromChar(&s_InnetPrtcl.PrtclSndBuff[4]); - CM_UINT32 sfpOffset = 4 + 4 + sfpDataLen; - CM_UINT32 sfpLinkLen = sfpTotalLen - sfpDataLen - 4; + /*- 鑾峰彇鍗忚璺熼殢鏁版嵁闀垮害 */ + CM_UINT32 sfpTotalLen = CM_LongFromChar(&s_InnetPrtcl.PrtclSndBuff[0]); + CM_UINT32 sfpDataLen = CM_LongFromChar(&s_InnetPrtcl.PrtclSndBuff[4]); + CM_UINT32 sfpOffset = 4 + 4 + sfpDataLen; + CM_UINT32 sfpLinkLen = sfpTotalLen - sfpDataLen - 4; - /*- 杈撳嚭璺熼殢鏁版嵁 */ - CM_RE_ASSERT(sfpLinkLen <= BufSize - 4, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); + /*- 杈撳嚭璺熼殢鏁版嵁 */ + CM_RE_ASSERT(sfpLinkLen <= BufSize - 4, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); - CM_LongToChar(sfpLinkLen, &Buf[0]); - (void)CM_Memcpy((void*)&Buf[4], (CM_SIZE_T)BufSize, (void*)(s_InnetPrtcl.PrtclSndBuff+sfpOffset), (CM_SIZE_T)sfpLinkLen); + CM_LongToChar(sfpLinkLen, &Buf[0]); + (void)CM_Memcpy((void *)&Buf[4], (CM_SIZE_T)BufSize, (void *)(s_InnetPrtcl.PrtclSndBuff + sfpOffset), (CM_SIZE_T)sfpLinkLen); - /*- 杩斿洖鏁版嵁闀垮害 */ - return sfpLinkLen + 4u; + /*- 杩斿洖鏁版嵁闀垮害 */ + return sfpLinkLen + 4u; } /** -* @brief 璁剧疆閫傞厤灞傚崗璁(-1)璺熼殢鏁版嵁 -* @param Buf 璺熼殢鏁版嵁鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -*/ -void SFM_SetPrtclFollowData(IN CM_UINT8* Buf) + * @brief 璁剧疆閫傞厤灞傚崗璁(-1)璺熼殢鏁版嵁 + * @param Buf 璺熼殢鏁版嵁鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + */ +void SFM_SetPrtclFollowData(IN CM_UINT8 *Buf) { - CM_UINT8 ret = 0u; + CM_UINT8 ret = 0u; /*- 鍏ュ弬闃茬┖ */ CM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_2); - /*- 璁剧疆璺熼殢鏁版嵁 */ - ret = ProtclReFreshFunc(Buf, &s_OutnetPrtcl); - CM_RE_ASSERT(1u == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_1); + /*- 璁剧疆璺熼殢鏁版嵁 */ + ret = ProtclReFreshFunc(Buf, &s_OutnetPrtcl); + CM_RE_ASSERT(1u == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_1); } /** -* @brief 璁剧疆sfp璺熼殢鏁版嵁 -* @param Len 璺熼殢鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffffffff -* @param Buf 璺熼殢鏁版嵁鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -*/ -void SFM_SetSfpPrtclFollowData(IN CM_UINT32 Len, IN CM_UINT8* Buf) + * @brief 璁剧疆sfp璺熼殢鏁版嵁 + * @param Len 璺熼殢鏁版嵁闀垮害 鍙栧艰寖鍥达細0~0xffffffff + * @param Buf 璺熼殢鏁版嵁鎸囬拡 鍙栧艰寖鍥达細闈炵┖ + */ +void SFM_SetSfpPrtclFollowData(IN CM_UINT32 Len, IN CM_UINT8 *Buf) { - CM_UINT8 ret = 0u; + CM_UINT8 ret = 0u; /*- 鍏ュ弬闃茬┖ */ CM_ASSERT(NULL != Buf, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_2); - /*- 璁剧疆璺熼殢鏁版嵁 */ - ret = ProtclFreshLnkMngr(Len, Buf, &s_InnetPrtcl); - CM_RE_ASSERT(1u == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_1); + /*- 璁剧疆璺熼殢鏁版嵁 */ + ret = ProtclFreshLnkMngr(Len, Buf, &s_InnetPrtcl); + CM_RE_ASSERT(1u == ret, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_1); } /** -* @brief 鏂紑鎸囧畾鐨勫缃戝畨鍏ㄩ氫俊閾炬帴 -* @param devID 璁惧ID -* @param logicID 閫昏緫ID -* @return 鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触 -*/ + * @brief 鏂紑鎸囧畾鐨勫缃戝畨鍏ㄩ氫俊閾炬帴 + * @param devID 璁惧ID + * @param logicID 閫昏緫ID + * @return 鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触 + */ CM_UINT8 SFM_OutnetDisconnect(IN CM_UINT16 devID, IN CM_UINT16 logicID) { - CM_UINT8 type = (CM_UINT8)(devID / 256u); - CM_UINT8 id = (CM_UINT8)(devID % 256u); - CM_UINT8 ret = 0u; - ret = ProtclDeleteLnkFunc(type, id, logicID, &s_OutnetPrtcl); - return ret; + CM_UINT8 type = (CM_UINT8)(devID / 256u); + CM_UINT8 id = (CM_UINT8)(devID % 256u); + CM_UINT8 ret = 0u; + ret = ProtclDeleteLnkFunc(type, id, logicID, &s_OutnetPrtcl); + return ret; } /** -* @brief -1瀹夊叏鍗忚鏃ュ織鎵撳嵃 -*/ + * @brief -1瀹夊叏鍗忚鏃ュ織鎵撳嵃 + */ void SFM_LogOutPrtcl(void) { /*- -1瀹夊叏鍗忚鏃ュ織鎵撳嵃 */ - CM_UINT16 len = CM_ShortFromChar(s_OutnetPrtcl.RecordArray); - MSCP_LOG_MSG("-1 SFM_LogOutPrtcl RecordArray len= %d\n",len); - MSCP_LOG_BIN(s_OutnetPrtcl.RecordArray, len); + CM_UINT16 len = CM_ShortFromChar(s_OutnetPrtcl.RecordArray); + MSCP_LOG_MSG("-1 SFM_LogOutPrtcl RecordArray len= %d\n", len); + MSCP_LOG_BIN(s_OutnetPrtcl.RecordArray, len); } /** -* @brief 鍐呯綉瀹夊叏鍗忚鏃ュ織鎵撳嵃 -*/ + * @brief 鍐呯綉瀹夊叏鍗忚鏃ュ織鎵撳嵃 + */ void SFM_LogInPrtcl(void) { - CM_UINT16 len = CM_ShortFromChar(s_InnetPrtcl.RecordArray); - MSCP_LOG_MSG("SFM_LogInPrtcl RecordArray len= %d\n",len); - MSCP_LOG_BIN(s_InnetPrtcl.RecordArray, len); + CM_UINT16 len = CM_ShortFromChar(s_InnetPrtcl.RecordArray); + MSCP_LOG_MSG("SFM_LogInPrtcl RecordArray len= %d\n", len); + MSCP_LOG_BIN(s_InnetPrtcl.RecordArray, len); } /** -* @brief 杩滅▼鍐呯綉瀹夊叏鍗忚鏃ュ織鎵撳嵃 -*/ + * @brief 杩滅▼鍐呯綉瀹夊叏鍗忚鏃ュ織鎵撳嵃 + */ void SFM_LogRmInPrtcl(void) { - CM_UINT16 len = CM_ShortFromChar(s_InnetPrtcl_RM.RecordArray); - MSCP_LOG_MSG("RM sfp SFM_LogInPrtcl RecordArray len= %d\n",len); - MSCP_LOG_BIN(s_InnetPrtcl_RM.RecordArray, len); + CM_UINT16 len = CM_ShortFromChar(s_InnetPrtcl_RM.RecordArray); + MSCP_LOG_MSG("RM sfp SFM_LogInPrtcl RecordArray len= %d\n", len); + MSCP_LOG_BIN(s_InnetPrtcl_RM.RecordArray, len); } - /** -* @brief 缁存姢妯″紡鍗忚灞傝В鏋愭敹鍒扮殑鏁版嵁(鏃犲畷鏈哄嚱鏁) -*/ + * @brief 缁存姢妯″紡鍗忚灞傝В鏋愭敹鍒扮殑鏁版嵁(鏃犲畷鏈哄嚱鏁) + */ void SFM_UnPrtclProc_Crash(void) { CM_UINT8 ret = 0; - /*- @alias 鍐呯綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - g_PFM_Check = PFM_CFC_PROC_NUM + 6; - CM_UINT32 QueuelenA = QueueStatus(&s_InnetPrtcl_RM.OutnetQueueA); - CM_UINT32 QueuelenB = QueueStatus(&s_InnetPrtcl_RM.OutnetQueueB); - MSCP_LOG_MSG("QueuelenA = %d, QueuelenB = %d\n",QueuelenA,QueuelenB); - g_PFM_Check = PFM_CFC_PROC_NUM + 7; - (void)QueueClear(&s_InnetPrtcl_RM.DataToApp); - s_InnetPrtcl_RM.RadamSN = SFM_2x2_GetSysCount(); - ret = ProtclReceive(&s_InnetPrtcl_RM); - MSCP_LOG_MSG("ProtclReceive ret = %d\n",ret); - (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueA); - (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueB); - g_PFM_Check = PFM_CFC_PROC_NUM + 8; - CM_UINT32 QueuelenDataToApp = QueueStatus(&s_InnetPrtcl_RM.DataToApp); - MSCP_LOG_MSG("s_InnetPrtcl.DataToApp = %d\n",QueuelenDataToApp); + /*- @alias 鍐呯綉瀹夊叏閫氫俊鍗忚瑙f瀽 */ + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { + g_PFM_Check = PFM_CFC_PROC_NUM + 6; + CM_UINT32 QueuelenA = QueueStatus(&s_InnetPrtcl_RM.OutnetQueueA); + CM_UINT32 QueuelenB = QueueStatus(&s_InnetPrtcl_RM.OutnetQueueB); + MSCP_LOG_MSG("QueuelenA = %d, QueuelenB = %d\n", QueuelenA, QueuelenB); + g_PFM_Check = PFM_CFC_PROC_NUM + 7; + (void)QueueClear(&s_InnetPrtcl_RM.DataToApp); + s_InnetPrtcl_RM.RadamSN = SFM_2x2_GetSysCount(); + ret = ProtclReceive(&s_InnetPrtcl_RM); + MSCP_LOG_MSG("ProtclReceive ret = %d\n", ret); + (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueA); + (void)QueueClear(&s_InnetPrtcl_RM.OutnetQueueB); + g_PFM_Check = PFM_CFC_PROC_NUM + 8; + CM_UINT32 QueuelenDataToApp = QueueStatus(&s_InnetPrtcl_RM.DataToApp); + MSCP_LOG_MSG("s_InnetPrtcl.DataToApp = %d\n", QueuelenDataToApp); - MSCP_LOG_MSG("s_InnetPrtcl.LocalType = %d, s_InnetPrtcl.LocalID = %d\n",s_InnetPrtcl.LocalType,s_InnetPrtcl.LocalID); - - } - else + MSCP_LOG_MSG("s_InnetPrtcl.LocalType = %d, s_InnetPrtcl.LocalID = %d\n", s_InnetPrtcl.LocalType, s_InnetPrtcl.LocalID); + } + else { /*- 鏃犲鐞*/ } @@ -2160,66 +2174,66 @@ void SFM_UnPrtclProc_Crash(void) } /** -* @brief 缁存姢妯″紡鍗忚灞傚皝瑁呭緟鍙戦佹暟鎹(鏃犲畷鏈哄嚱鏁) -*/ + * @brief 缁存姢妯″紡鍗忚灞傚皝瑁呭緟鍙戦佹暟鎹(鏃犲畷鏈哄嚱鏁) + */ void SFM_EnPrtclProc_Crash(void) { /*- 鍙橀噺鍒濆鍖 */ - CM_UINT16 local_len = 0u; - CM_UINT8 local_buf[1500u] = {0u}; - CM_UINT16 peer_len = 0u; - CM_UINT8 p_peer_buf[1500u] = {0u}; + CM_UINT16 local_len = 0u; + CM_UINT8 local_buf[1500u] = {0u}; + CM_UINT16 peer_len = 0u; + CM_UINT8 p_peer_buf[1500u] = {0u}; /*- 搴旂敤灏唖fp鍗忚鏁版嵁鍐欏埌鍗忚闃熷垪 */ SFM_AppToPrtclBuf_InnetSafeCrash(); - - /*- 鍐呯綉瀹夊叏鍗忚灏佽 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - MSCP_LOG_MSG("SFM_EnPrtclProc_Crash Queuelen1 = %d\n",QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue)); - CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff); - CM_LongToChar(0u, s_InnetPrtcl_RM.RecordArray); - (void)ProtclOutput(&s_InnetPrtcl_RM); - (void)QueueClear(&s_InnetPrtcl_RM.OutputDataQueue); - MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash len = %d, s_InnetPrtcl.LocalType = %d, s_InnetPrtcl.LocalID = %d\n",CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff),s_InnetPrtcl.LocalType,s_InnetPrtcl.LocalID); - /*- 鏄惁寮鍚2oo2鍔熻兘 */ + + /*- 鍐呯綉瀹夊叏鍗忚灏佽 */ + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) + { + MSCP_LOG_MSG("SFM_EnPrtclProc_Crash Queuelen1 = %d\n", QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue)); + CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff); + CM_LongToChar(0u, s_InnetPrtcl_RM.RecordArray); + (void)ProtclOutput(&s_InnetPrtcl_RM); + (void)QueueClear(&s_InnetPrtcl_RM.OutputDataQueue); + MSCP_LOG_MSG("SFM_ReadInnetCodedOutputCrash len = %d, s_InnetPrtcl.LocalType = %d, s_InnetPrtcl.LocalID = %d\n", CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff), s_InnetPrtcl.LocalType, s_InnetPrtcl.LocalID); + /*- 鏄惁寮鍚2oo2鍔熻兘 */ if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { /*- 鍙孋PU浜ゆ崲SVC */ - (void)SfpGetSwapData(local_buf,1500u,&s_InnetPrtcl_RM); + (void)SfpGetSwapData(local_buf, 1500u, &s_InnetPrtcl_RM); local_len = 2u + CM_ShortFromChar(local_buf); CM_ASSERT_MAINTAIN(local_len <= sizeof(local_buf)); peer_len = (CM_UINT16)SFM_2oo2_Exchange_FullDuplex_Crash(local_buf, (CM_INT32)local_len, p_peer_buf, sizeof(p_peer_buf), ENUM_2oo2_SHUTDOWNQUIT); - (void)SfpSetSwapData(p_peer_buf,&s_InnetPrtcl_RM); + (void)SfpSetSwapData(p_peer_buf, &s_InnetPrtcl_RM); } else { /*- 鏃犲鐞*/ } - } - else + } + else { /*- 鏃犲鐞*/ } } /** -* @brief 缁存姢妯″紡涓媠fp鍗忚鏁版嵁鍐欏叆搴旂敤闃熷垪(鏃犲畷鏈哄嚱鏁) -*/ + * @brief 缁存姢妯″紡涓媠fp鍗忚鏁版嵁鍐欏叆搴旂敤闃熷垪(鏃犲畷鏈哄嚱鏁) + */ void SFM_PrtclBufToApp_InnetSafeCrash(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 len = 0u; - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT8 rslt = 0u; - /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ - if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 len = 0u; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT8 rslt = 0u; + /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ + if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { /*- 娓呯┖搴旂敤鍐呯綉鎺ユ敹缂撳啿鍖 */ (void)CM_QueueClear(&s_Innet_RmRecvQ); /*- 鏌ヨ鍗忚灞傚唴缃戞帴鏀堕槦鍒 */ len = QueueStatus(&s_InnetPrtcl_RM.DataToApp); - MSCP_LOG_MSG("SFM_PrtclBufToApp_InnetSafeCrash len = %d\n",len); + MSCP_LOG_MSG("SFM_PrtclBufToApp_InnetSafeCrash len = %d\n", len); /*- 鏄惁鏈夊簲鐢ㄦ帴鏀舵暟鎹 */ if (len > 0u) { @@ -2240,31 +2254,31 @@ void SFM_PrtclBufToApp_InnetSafeCrash(void) } } /** -* @brief 缁存姢妯″紡涓嬪簲鐢ㄥ皢sfp鍗忚鏁版嵁鍐欏埌鍗忚闃熷垪(鏃犲畷鏈哄嚱鏁) -*/ + * @brief 缁存姢妯″紡涓嬪簲鐢ㄥ皢sfp鍗忚鏁版嵁鍐欏埌鍗忚闃熷垪(鏃犲畷鏈哄嚱鏁) + */ void SFM_AppToPrtclBuf_InnetSafeCrash(void) { - /*- 鍙橀噺鍒濆鍖 */ - CM_UINT32 len = 0u; - ENUM_CM_RETURN ret = ENUM_CM_FALSE; - CM_UINT8 rslt = 0u; - CM_UINT32 Queuelen = 0u; - /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + /*- 鍙橀噺鍒濆鍖 */ + CM_UINT32 len = 0u; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT8 rslt = 0u; + CM_UINT32 Queuelen = 0u; + /*- 鏄惁寮鍚唴缃戝畨鍏ㄩ氫俊 */ + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id)) { /*- 璇诲彇搴旂敤鍐呯綉鍙戦佺紦鍐 */ len = CM_QueueStatus(&s_Innet_RmSendQ); - MSCP_LOG_MSG("SFM_AppToPrtclBuf_InnetSafeCrash len1 = %d\n",len); + MSCP_LOG_MSG("SFM_AppToPrtclBuf_InnetSafeCrash len1 = %d\n", len); /*- 搴旂敤鍐呯綉鍙戦佺紦鍐叉槸鍚﹂潪绌 */ if (len > 0u) { /*- 浠庡簲鐢ㄥ彂閫佺紦鍐插尯璇诲嚭鏁版嵁锛屽啓鍏ュ崗璁簲鐢ㄥ彂閫侀槦鍒 */ ret = CM_QueueRead(len, s_TmpCache, &s_Innet_RmSendQ); CM_ASSERT_MAINTAIN(ENUM_CM_TRUE == ret); - MSCP_LOG_MSG("SFM_AppToPrtclBuf_InnetSafeCrash len2 = %d\n",len); + MSCP_LOG_MSG("SFM_AppToPrtclBuf_InnetSafeCrash len2 = %d\n", len); rslt = QueueWrite(len, s_TmpCache, &s_InnetPrtcl_RM.OutputDataQueue); Queuelen = QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue); - MSCP_LOG_MSG("Queuelen = %d\n",Queuelen); + MSCP_LOG_MSG("Queuelen = %d\n", Queuelen); #if 0 for(int i = 0 ; i < len; i++) { @@ -2288,47 +2302,46 @@ void SFM_AppToPrtclBuf_InnetSafeCrash(void) } } - /** -* @brief 鍘婚噸-1鍗忚鏁版嵁 -* @param data1 鍘婚噸闃熷垪a 鍙栧艰寖鍥:闈炵┖ -* @param data1Len 闃熷垪a闀垮害 鍙栧艰寖鍥:0~0xffffffff -* @param data2 鍘婚噸闃熷垪b 鍙栧艰寖鍥:闈炵┖ -* @param data2Len 闃熷垪b闀垮害 鍙栧艰寖鍥:0~0xffffffff -* @return 鎵ц缁撴灉 -* - 1 鎴愬姛 -* - 0 澶辫触 -* @details 灏嗕袱涓暟缁勪紶鍏ュ叾涓紝姣忎釜鏁扮粍鐨勬牸寮忛渶瑕佷负鎬婚暱搴 绾㈢綉鏁版嵁闀垮害 绾㈢綉鏁版嵁 绡綉鏁版嵁闀垮害 绡綉鏁版嵁 -* 涔嬪悗鐩稿悓鏁版嵁浼氬皢b鏁扮粍涓殑鏁版嵁鍘绘帀锛屼繚鐣檃鐨勬暟鎹. -*/ -CM_UINT8 SFM_OutProtclTwoRepeat(INOUT CM_UINT8* data1, IN CM_UINT32 data1Len,INOUT CM_UINT8* data2,INOUT CM_UINT32* data2Len) + * @brief 鍘婚噸-1鍗忚鏁版嵁 + * @param data1 鍘婚噸闃熷垪a 鍙栧艰寖鍥:闈炵┖ + * @param data1Len 闃熷垪a闀垮害 鍙栧艰寖鍥:0~0xffffffff + * @param data2 鍘婚噸闃熷垪b 鍙栧艰寖鍥:闈炵┖ + * @param data2Len 闃熷垪b闀垮害 鍙栧艰寖鍥:0~0xffffffff + * @return 鎵ц缁撴灉 + * - 1 鎴愬姛 + * - 0 澶辫触 + * @details 灏嗕袱涓暟缁勪紶鍏ュ叾涓紝姣忎釜鏁扮粍鐨勬牸寮忛渶瑕佷负鎬婚暱搴 绾㈢綉鏁版嵁闀垮害 绾㈢綉鏁版嵁 绡綉鏁版嵁闀垮害 绡綉鏁版嵁 + * 涔嬪悗鐩稿悓鏁版嵁浼氬皢b鏁扮粍涓殑鏁版嵁鍘绘帀锛屼繚鐣檃鐨勬暟鎹. + */ +CM_UINT8 SFM_OutProtclTwoRepeat(INOUT CM_UINT8 *data1, IN CM_UINT32 data1Len, INOUT CM_UINT8 *data2, INOUT CM_UINT32 *data2Len) { /*- 鍙橀噺鍒濆鍖 */ CM_UINT8 TempBuf[1024 * 300] = {0}; CM_UINT8 ret = 0; /*- 濡傛灉鍏ュ弬涓嶄负绌 */ - if((NULL != data1) && (NULL != data2) && (NULL != data2Len)) + if ((NULL != data1) && (NULL != data2) && (NULL != data2Len)) { - MSCP_LOG_MSG("before data1Len = %d\n", data1Len); - MSCP_LOG_MSG("before data2Len = %d\n\n", *data2Len); + MSCP_LOG_MSG("before data1Len = %d\n", data1Len); + MSCP_LOG_MSG("before data2Len = %d\n\n", *data2Len); /*- 鍘婚噸-1鍗忚鏁版嵁 */ - ret = ProtclTwoRepeat(&s_OutnetPrtcl, data1, data1Len, data2, data2Len, TempBuf, 1024 * 300); - MSCP_LOG_MSG("after data1Len = %d\n", data1Len); - MSCP_LOG_MSG("after data2Len = %d\n\n", *data2Len); + ret = ProtclTwoRepeat(&s_OutnetPrtcl, data1, data1Len, data2, data2Len, TempBuf, 1024 * 300); + MSCP_LOG_MSG("after data1Len = %d\n", data1Len); + MSCP_LOG_MSG("after data2Len = %d\n\n", *data2Len); - /*- 濡傛灉鍘婚噸澶辫触 */ - if(1 != ret) - { - /*- 灏嗛槦鍒楁暟鎹彂閫佽嚦缁存姢鏈 */ - MSCP_LOG_MSG("SFM_OutProtclTwoRepeat error ret = %d\n",ret); - MSCP_LOG_DATALEN(data1,data1Len,"data1"); - MSCP_LOG_DATALEN(data2,*data2Len,"data2"); - } - else - { - /*- 鏃犲鐞 */ - } + /*- 濡傛灉鍘婚噸澶辫触 */ + if (1 != ret) + { + /*- 灏嗛槦鍒楁暟鎹彂閫佽嚦缁存姢鏈 */ + MSCP_LOG_MSG("SFM_OutProtclTwoRepeat error ret = %d\n", ret); + MSCP_LOG_DATALEN(data1, data1Len, "data1"); + MSCP_LOG_DATALEN(data2, *data2Len, "data2"); + } + else + { + /*- 鏃犲鐞 */ + } } else { @@ -2338,48 +2351,47 @@ CM_UINT8 SFM_OutProtclTwoRepeat(INOUT CM_UINT8* data1, IN CM_UINT32 data1Len,INO } /*- 杩斿洖缁撴灉 */ - return ret; + return ret; } - /** -* @brief 鏌ヨ閾捐矾鐘舵 -* @param destType 瀵规柟璁惧绫诲瀷 鍙栧艰寖鍥达細0~0xff -* @param destId 瀵规柟璁惧ID 鍙栧艰寖鍥达細0~0xff -* @param logId 閫昏緫id(鑻ュ崱鏂煰鐨凜I涓嶸OBC閫氫俊锛岄渶瑕佸~鍐橵OBC鐨勭珯鍙板彿銆傚叾浠栫殑绯荤粺濉0銆) 鍙栧艰寖鍥达細0~0xff -* @return 瀹夊叏閫氶亾閾捐矾鐘舵 -* 0锛氫笉瀛樺湪璇ユ潯閾捐矾锛岃繑鍥為敊璇 -* 0x17锛氶摼璺湪鏁版嵁浼犺緭姝e父鐘舵 -* 0x2b锛氶摼璺湪閫氫俊涓柇鐘舵 -* 0x33锛氶摼璺湪鍑嗗寤虹珛閾炬帴鐘舵 -* 0x4e锛氶摼璺湪绛夊緟寤虹珛閾炬帴鐘舵 -* 0x01: 琛ㄧず鍒锋柊鏃犵敤鐨勯摼璺 -*/ -CM_UINT8 SFM_GetLnkStatus(CM_UINT8 destType,CM_UINT8 destId,CM_UINT16 logId) + * @brief 鏌ヨ閾捐矾鐘舵 + * @param destType 瀵规柟璁惧绫诲瀷 鍙栧艰寖鍥达細0~0xff + * @param destId 瀵规柟璁惧ID 鍙栧艰寖鍥达細0~0xff + * @param logId 閫昏緫id(鑻ュ崱鏂煰鐨凜I涓嶸OBC閫氫俊锛岄渶瑕佸~鍐橵OBC鐨勭珯鍙板彿銆傚叾浠栫殑绯荤粺濉0銆) 鍙栧艰寖鍥达細0~0xff + * @return 瀹夊叏閫氶亾閾捐矾鐘舵 + * 0锛氫笉瀛樺湪璇ユ潯閾捐矾锛岃繑鍥為敊璇 + * 0x17锛氶摼璺湪鏁版嵁浼犺緭姝e父鐘舵 + * 0x2b锛氶摼璺湪閫氫俊涓柇鐘舵 + * 0x33锛氶摼璺湪鍑嗗寤虹珛閾炬帴鐘舵 + * 0x4e锛氶摼璺湪绛夊緟寤虹珛閾炬帴鐘舵 + * 0x01: 琛ㄧず鍒锋柊鏃犵敤鐨勯摼璺 + */ +CM_UINT8 SFM_GetLnkStatus(CM_UINT8 destType, CM_UINT8 destId, CM_UINT16 logId) { /*- 鑾峰彇瀹夊叏閫氶亾閾捐矾鐘舵 */ return ProtclGetLnkStatus(destType, destId, logId, &s_OutnetPrtcl); } /** -* @brief 璁剧疆澶栫綉鏁版嵁鐨勫抚搴忓彿 -* @param sn 闇瑕佽缃殑搴忓彿锛0~0xffff -* @return 鏃 -*/ + * @brief 璁剧疆澶栫綉鏁版嵁鐨勫抚搴忓彿 + * @param sn 闇瑕佽缃殑搴忓彿锛0~0xffff + * @return 鏃 + */ void SFM_SetTxSn(CM_UINT32 sn) { s_txSn = sn; } /** -* @brief 鑾峰彇澶栫綉鏁版嵁鍙戦佸簭鍒楀彿 -* @param 鏃 -* @return 鑾峰彇鍒扮殑澶栫綉鏁版嵁搴忓垪鍙 -*/ + * @brief 鑾峰彇澶栫綉鏁版嵁鍙戦佸簭鍒楀彿 + * @param 鏃 + * @return 鑾峰彇鍒扮殑澶栫綉鏁版嵁搴忓垪鍙 + */ CM_UINT32 SFM_GetTxSn(void) { /*- 鍙橀噺鍒濆鍖*/ CM_UINT32 tmpsn = 0u; /*-缈昏浆闃叉姢*/ - (s_txSn == (CM_UINT32_MAX-1u))?(s_txSn = 1u):s_txSn; /* 棰勮璺149澶╀細缈昏浆涓娆,闇瑕侀槻鎶 */ + (s_txSn == (CM_UINT32_MAX - 1u)) ? (s_txSn = 1u) : s_txSn; /* 棰勮璺149澶╀細缈昏浆涓娆,闇瑕侀槻鎶 */ /*- 杩斿洖鍊艰祴鍊*/ tmpsn = s_txSn; /*- 鏇存柊sn鍙*/ @@ -2388,3 +2400,29 @@ CM_UINT32 SFM_GetTxSn(void) return tmpsn; } +/** + * @brief 澶栫綉鎺ユ敹鍚庣殑鍘婚噸鎿嶄綔 + * @param redData 绾㈢綉鏁版嵁鎸囬拡 + * @param redDataLen 绾㈢綉鏁版嵁闀垮害 + * @param blueData 钃濈綉鏁版嵁鎸囬拡 + * @param blueDataLen 钃濈綉鏁版嵁闀垮害 + */ +static CM_UINT8 s_Outnet_Recv_Dedup(CM_UINT8 *redData, CM_UINT32 redDataLen, CM_UINT8 *blueData, CM_UINT32 *blueDataLen) +{ + CM_UINT8 ret = 0u; + if((redData != NULL) && (blueData != NULL) && (blueDataLen != NULL)) + { + if ((redDataLen > 4u) && (*blueDataLen > 4u)) + { + MSCP_LOG_MSG("SFM_RxOutnetSafe redLen=%u, blueLen=%u\n", redDataLen, *blueDataLen); + ret = SFM_OutProtclTwoRepeat(redData, redDataLen, blueData, blueDataLen); + MSCP_LOG_MSG("SFM_RxOutnetSafe Two Repeat redLen=%u, blueLen=%u\n", redDataLen, *blueDataLen); + } + else + { + ret = 1u; /* 鏁版嵁闀垮害涓嶈冻锛屾棤闇鍘婚噸 */ + } + } + + return ret; +} \ No newline at end of file diff --git a/TSCP/src/MSCP/SFM/SFM_package.c b/TSCP/src/MSCP/SFM/SFM_package.c index b89746c..e4747d3 100644 --- a/TSCP/src/MSCP/SFM/SFM_package.c +++ b/TSCP/src/MSCP/SFM/SFM_package.c @@ -105,160 +105,3 @@ ENUM_CM_RETURN SFM_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, /*- 杈撳嚭杩斿洖鍊*/ return rt; } -/** -* @brief 2X鍒嗗抚鎺ユ敹 -* @param pCtrl 鎺у埗缁撴瀯浣 -* @param type 甯х被鍨 -* @param FrameNum 甯ф暟鐩 -* @param FrameIndex 甯у簭鍙 -* @param pFrameData 鍒嗗抚鏁版嵁鎶ユ枃鎸囬拡 -* @param FrameDataLen 鍒嗗抚鏁版嵁鎶ユ枃闀垮害 -* @param pRxBuf 鎺ユ敹缂撳啿鍖烘寚閽 -* @param pRxLen 鎺ユ敹鎶ユ枃鎬婚暱搴 -* @param RxSize 鎺ユ敹缂撳啿鍖哄ぇ灏 -* @return 澶勭悊缁撴灉 -* - ENUM_CM_FALSE 澶勭悊鍑洪敊 -* - ENUM_CM_TRUE 澶勭悊瀹屾垚锛堟敹榻愬畬鏁存姤鏂囷級 -* - ENUM_CM_NULL 澶勭悊涓紙鎺ユ敹鏈夋晥锛屼絾灏氭湭鏀堕綈瀹屾暣鎶ユ枃锛 -* @details 鏀堕綈瀹屾暣鎶ユ枃鍚庢墠浼氱疆浣嶆帴鏀舵姤鏂囨婚暱搴︼紝鍚﹀垯涓0 -*/ -ENUM_CM_RETURN SFM_2X_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize) -{ - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - /*- 鎸囬拡闃茬┖ */ - CM_ASSERT((NULL != pRxBuf) && (NULL != pFrameData) && (NULL != pCtrl), PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - /*- 鏄惁鏀跺埌鏂版姤鏂 */ - if (1u == FrameIndex) - { - /*- 鍒濆鍖栨帶鍒剁粨鏋勪綋 */ - pCtrl->type = type; - pCtrl->FrameNum = FrameNum; - pCtrl->FramIndex = 0u; - pCtrl->RxLen = 0; - /*- 鎺ユ敹鎶ユ枃鎬婚暱搴︾疆0 */ - *pRxLen = 0; - } - else - { - /*- 鏃犲鐞 */ - } - /*- 妫鏌ユ敹鍒扮殑鍒嗗抚甯уご淇℃伅鏄惁鍚堟硶 */ - if ((type == pCtrl->type) - && (FrameNum == pCtrl->FrameNum) - && (FrameIndex == (pCtrl->FramIndex + 1u))) - { - /*- 鏀跺埌鐨勫抚搴忓彿绱姞 */ - pCtrl->FramIndex++; - - /*- 淇濆瓨鏈抚鏁版嵁 */ - rt = CM_Memcpy((void*)(g_2x2oo2_Frame_TempBuf + pCtrl->RxLen), (CM_SIZE_T)CM_SIGNED_INT_EXP((CM_INT32)RxSize - pCtrl->RxLen), (const void*)pFrameData, (CM_SIZE_T)FrameDataLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_RE_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); - pCtrl->RxLen += FrameDataLen; - - /*- 鏄惁鏄渶鍚庝竴甯 */ - if (FrameIndex == FrameNum) - { - /*- 杈撳嚭鎶ユ枃鎬婚暱搴 */ - *pRxLen = pCtrl->RxLen; - rt = CM_Memcpy(pRxBuf,RxSize,g_2x2oo2_Frame_TempBuf,pCtrl->RxLen); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); - /*- 杩斿洖鍊肩疆ENUM_CM_TRUE */ - rt = ENUM_CM_TRUE; - } - else - { - /*- 杩斿洖鍊肩疆ENUM_CM_NULL */ - rt = ENUM_CM_NULL; - } - } - else - { - MSCP_LOG_MSG("SFM_2X_FrameSave error:\n type = %d, pCtrl->type = %d, FrameNum = %d, pCtrl->FrameNum = %d, FrameIndex = %d, pCtrl->FramIndex = %d\n",type,pCtrl->type,FrameNum,pCtrl->FrameNum,FrameIndex,pCtrl->FramIndex); - /*- 鍑洪敊鍚庡浣嶆帴鏀舵帶鍒 */ - pCtrl->type = 0u; - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_SFM_2X2FRAME,6u, - sizeof(CM_UINT8),type, - sizeof(CM_UINT8),pCtrl->type, - sizeof(CM_UINT16),FrameNum, - sizeof(CM_UINT16),pCtrl->FrameNum, - sizeof(CM_UINT16),FrameIndex, - sizeof(CM_UINT16),pCtrl->FramIndex); - } - /*- 杈撳嚭杩斿洖鍊*/ - return rt; -} -/** -* @brief 搴旂敤鍒嗗抚鎺ユ敹 -* @param pCtrl 鎺у埗缁撴瀯浣 鍙栧艰寖鍥达細闈炵┖ -* @param FrameNum 甯ф暟鐩 鍙栧艰寖鍥达細0~0xFFFF -* @param FrameIndex 甯у簭鍙 鍙栧艰寖鍥达細0~0xFFFF -* @param pFrameData 鍒嗗抚鏁版嵁鎶ユ枃鎸囬拡 鍙栧艰寖鍥达細闈炵┖ -* @param FrameDataLen 鍒嗗抚鏁版嵁鎶ユ枃闀垮害 鍙栧艰寖鍥达細0~0x7FFFFFFFF -* @param pRxBuf 鎺ユ敹缂撳啿鍖烘寚閽 鍙栧艰寖鍥达細闈炵┖ -* @param pRxLen 鎺ユ敹鎶ユ枃鎬婚暱搴 鍙栧艰寖鍥达細闈炵┖ -* @param RxSize 鎺ユ敹缂撳啿鍖哄ぇ灏 鍙栧艰寖鍥达細0~0xFFFFFFFFF -* @return 澶勭悊缁撴灉 -* - ENUM_CM_FALSE 澶勭悊鍑洪敊 -* - ENUM_CM_TRUE 澶勭悊瀹屾垚锛堟敹榻愬畬鏁存姤鏂囷級 -* - ENUM_CM_NULL 澶勭悊涓紙鎺ユ敹鏈夋晥锛屼絾灏氭湭鏀堕綈瀹屾暣鎶ユ枃锛 -* @details 鏀堕綈瀹屾暣鎶ユ枃鍚庢墠浼氱疆浣嶆帴鏀舵姤鏂囨婚暱搴︼紝鍚﹀垯涓0 -*/ -ENUM_CM_RETURN SFM_FrameSave_App(INOUT STRU_FrameCtrl_T *pCtrl, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize) -{ - /*- 鍙橀噺鍒濆鍖 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 鍑芥暟杩斿洖鍊 */ - /*- 鎸囬拡闃茬┖ */ - CM_ASSERT((NULL != pRxBuf) && (NULL != pFrameData) && (NULL != pCtrl), PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); - /*- 鏄惁鏀跺埌鏂版姤鏂 */ - if (1u == FrameIndex) - { - /*- 鍒濆鍖栨帶鍒剁粨鏋勪綋 */ - pCtrl->FrameNum = FrameNum; - pCtrl->FramIndex = 0u; - pCtrl->RxLen = 0; - /*- 鎺ユ敹鎶ユ枃鎬婚暱搴︾疆0 */ - *pRxLen = 0; - } - else - { - /*- 鏃犲鐞 */ - } - /*- 妫鏌ユ敹鍒扮殑鍒嗗抚甯уご淇℃伅鏄惁鍚堟硶 */ - if ((FrameNum == pCtrl->FrameNum) - && (FrameIndex == (pCtrl->FramIndex + 1u))) - { - /*- 鏀跺埌鐨勫抚搴忓彿绱姞 */ - pCtrl->FramIndex++; - - /*- 淇濆瓨鏈抚鏁版嵁 */ - rt = CM_Memcpy((void*)(pRxBuf + pCtrl->RxLen), (CM_SIZE_T)CM_SIGNED_INT_EXP((CM_INT32)RxSize - pCtrl->RxLen), (const void*)pFrameData, (CM_SIZE_T)FrameDataLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - CM_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); - pCtrl->RxLen += FrameDataLen; - - /*- 鏄惁鏄渶鍚庝竴甯 */ - if (FrameIndex == FrameNum) - { - /*- 杈撳嚭鎶ユ枃鎬婚暱搴 */ - *pRxLen = pCtrl->RxLen; - /*- 杩斿洖鍊肩疆ENUM_CM_TRUE */ - rt = ENUM_CM_TRUE; - } - else - { - /*- 杩斿洖鍊肩疆ENUM_CM_NULL */ - rt = ENUM_CM_NULL; - } - } - else - { - /*- 鍑洪敊鍚庡浣嶆帴鏀舵帶鍒 */ - pCtrl->type = 0u; - } - /*- 杈撳嚭杩斿洖鍊*/ - return rt; -} diff --git a/TSCP/src/MSCP/SFM/SFM_package.h b/TSCP/src/MSCP/SFM/SFM_package.h index 7f8f32c..dadb88a 100644 --- a/TSCP/src/MSCP/SFM/SFM_package.h +++ b/TSCP/src/MSCP/SFM/SFM_package.h @@ -30,18 +30,9 @@ typedef struct CM_UINT32 err_cyc; /** 涓㈠寘鍛ㄦ湡鍙*/ }STRU_FrameCtrl_T; -extern CM_UINT8 g_2x2oo2_Frame_TempBuf[SFM_OUTNETSAFE_BUFF_SIZE]; /* 鍒嗗抚鎺ユ敹 */ ENUM_CM_RETURN SFM_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); -/* 2x鍒嗗抚鎺ユ敹 */ -ENUM_CM_RETURN SFM_2X_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); -/* 搴旂敤鍒嗗抚鎺ユ敹 */ -ENUM_CM_RETURN SFM_FrameSave_App(INOUT STRU_FrameCtrl_T *pCtrl, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); #endif diff --git a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c index 10aab04..93628c1 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c @@ -346,6 +346,9 @@ UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 ro /*线路最大下坡坡度*/ g_pCbtcConfigDataStru->cbtcTrainInfo[i].WorstGrade = ShortFromChar(pData); pData += 2; + /*站台追踪时,列车间隔距离*/ + g_pCbtcConfigDataStru->cbtcTrainInfo[i].StationTrackDistance = ShortFromChar(pData); + pData += 2; } } @@ -1065,8 +1068,7 @@ UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UIN g_pCbtcConfigDataStru->cbtcConfigData.cAwakeCheckSpksSwitch = *pDataAddr; /*唤醒过程中检查SPKS状态开关*/ pDataAddr += 1U; - g_pCbtcConfigDataStru->cbtcConfigData.dwVobcCiackUpCommErrorTime = LongFromChar(pDataAddr); /*RC与IVOC后备通道通信故障判断时间*/ - pDataAddr += 4U; + g_pCbtcConfigDataStru->cbtcConfigData.dwVobcCiackUpCommErrorTime = 0U; /*DSN不支持后备通信*/ g_pCbtcConfigDataStru->cbtcConfigData.ProtocolVersionOfAxisToCI = ShortFromChar(pDataAddr); /*CI与计轴系统校验的协议版本号,add by lq 2023.11.16*/ pDataAddr += 2U; diff --git a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h index 82141d7..a8ced94 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h @@ -41,7 +41,8 @@ extern "C" { UINT8 TrainType; /*列车车型*/ UINT16 TrainLength; /*列车长度*/ UINT8 TrainMaxTracAcc; /*列车最大牵引加速度*/ - UINT16 WorstGrade; /*线路最大下坡坡度*/ + UINT16 WorstGrade; /*线路最大下坡坡度*/ + UINT16 StationTrackDistance; /*站台追踪时,列车间隔距离*/ } CBTC_TRAIN_INFO_STRU; @@ -76,7 +77,6 @@ extern "C" { UINT32 OcTslCommunicationErrorTime;/*OC-TSL通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/ - UINT16 StationTrackDistance; /*站台追踪时,列车间隔距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/ UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试 配置中 aa关闭 55打开*/ diff --git a/TSCP/src/dqu_common/dqu_dfs_common/dquCbtcType.h b/TSCP/src/dqu_common/dqu_dfs_common/dquCbtcType.h index ccc55a6..ceb45b0 100644 --- a/TSCP/src/dqu_common/dqu_dfs_common/dquCbtcType.h +++ b/TSCP/src/dqu_common/dqu_dfs_common/dquCbtcType.h @@ -30,7 +30,7 @@ extern "C" { typedef UINT8 (*DQU_QFUN_DATA_INIT)(UINT8*, UINT32, UINT16);/*数据初始化处理类型函数*/ -typedef UINT8 (*DQU_QFUN_DATA_CALC)(); /*数据计算处理类型函数*/ +typedef UINT8 (*DQU_QFUN_DATA_CALC)(void); /*数据计算处理类型函数*/ /*初始化任务结构体项*/ typedef struct struInitTaskTab @@ -80,7 +80,7 @@ UINT8 GetCbtcSysType(void); /*定义时间函数指针类型*/ -typedef UINT32 (*TIME_FUN_PTR)(); +typedef UINT32 (*TIME_FUN_PTR)(void); /*设置当前定时器*/ UINT8 dquSetUsedTimeFunPtr(TIME_FUN_PTR pTimeFun); diff --git a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h index 329932c..e668681 100644 --- a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h +++ b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h @@ -81,8 +81,8 @@ #define EMAP_LOGSEC_SPKS_BUTTON_ID 59 /*逻辑区段SPKS开关表*/ #define EMAP_NOP_60 60 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ #define EMAP_NOP_61 61 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ -#define EMAP_NOP_62 62 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ -#define EMAP_NOP_63 63 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ +#define EMAP_ECS_ID 62 /*ECS表*/ +#define EMAP_SPEED_LIMIT_SEC_ID 63U /*限速区段表单编号,Added By yx 2026.03.14*/ #define EMAP_NOP_64 64 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ #define EMAP_NOP_65 65 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ #define EMAP_NOP_66 66 /*为实现数据表与实际表数值一一对应,所以从0开始 补全数据 ID tqf*/ @@ -125,6 +125,7 @@ #define DSU_DATA_IP_ZCDSU_COMM_ID 4 /*ZCDSU通信关系配置表tableId*/ #define DSU_DATA_IP_GATEWAY_ID 5 /*hxq,设备网关表tableId*/ #define DSU_CI_ATS_DEVICE_IP_ADDR 6 /*CI_ATS网设备IP地址 add by qxt 20160811 */ +#define DSU_DATA_REDUNT_IP_ID 10 /*冗余设备ip配置表*/ /*ATP/ATO公共配置数据 宏定义*/ #define VOBC_CONFIGDATA_TYPE 0x50 /*ATP/ATO二级子系统公共配置数据*/ diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c index a199720..b9a0fd0 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c @@ -84,7 +84,7 @@ UINT32 dwOrgnLinkOfst; UINT32 dwTmnlLinkOfst; 终点所处link偏移量 UINT16 wMiddleLinkId[MIDDLE_LINK_MAX_NUM]; 计轴区段中间包含link编号 ************************************/ -static UINT8 AxleSgmtStru_CC(); +static UINT8 AxleSgmtStru_CC(void); /* 函数功能:删除数组中重复的数,内部使用函数 @@ -162,8 +162,8 @@ static INIT_TASK_TAB_STRU g_struInitTaskTab[]= {DQU_QFUN_TRUE, EMAP_LOGSEC_SPKS_BUTTON_ID, initLogSecSpksButton,5,1,0}, /*逻辑区段SPKS开关表*/ /*59*/ {DQU_QFUN_TRUE, EMAP_NOP_60, initNop, 5,1,0}, /*补全数据 ID sds */ /*60*/ {DQU_QFUN_TRUE, EMAP_NOP_61, initNop, 5,1,0}, /*补全数据 ID sds */ /*61*/ - {DQU_QFUN_TRUE, EMAP_NOP_62, initNop, 5,1,0}, /*补全数据 ID sds */ /*62*/ - {DQU_QFUN_TRUE, EMAP_NOP_63, initNop, 5,1,0}, /*补全数据 ID sds */ /*63*/ + {DQU_QFUN_TRUE, EMAP_ECS_ID, initEcs, 5,1,0}, /*补全数据 ID sds */ /*62*/ + {DQU_QFUN_TRUE, EMAP_SPEED_LIMIT_SEC_ID, initSpeedLimitSec, 5,1,0}, /*限速区段表 */ /*63*/ {DQU_QFUN_TRUE, EMAP_NOP_64, initNop, 5,1,0}, /*补全数据 ID sds */ /*64*/ {DQU_QFUN_TRUE, EMAP_NOP_65, initNop, 5,1,0}, /*补全数据 ID sds */ /*65*/ {DQU_QFUN_TRUE, EMAP_NOP_66, initNop, 5,1,0}, /*补全数据 ID sds */ /*66*/ @@ -217,7 +217,7 @@ static const UINT16 MAX_CALCTASK_COUNT=sizeof(g_struCalcTaskTab)/sizeof(CALC_TAS **2、修改不需要初始化的表格信息项 m by sds 2020-8-19 **3、增加车车初始化的表格信息 m by qw.liu 2022-2-22 */ -static UINT8 initConfigEmapTaskTab() +static UINT8 initConfigEmapTaskTab(void) { UINT8 loopIndex = 0U; UINT8 rtnValue = 0U; @@ -247,9 +247,13 @@ static UINT8 initConfigEmapTaskTab() { g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表56~58*/ } - for (loopIndex = EMAP_NOP_60; loopIndex <= EMAP_NOP_80; loopIndex++) + + g_struInitTaskTab[EMAP_NOP_60].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表60*/ + g_struInitTaskTab[EMAP_NOP_61].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表61*/ + + for (loopIndex = EMAP_NOP_64; loopIndex <= EMAP_NOP_80; loopIndex++) { - g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表60~80*/ + g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表63~80*/ } if (DQU_CBTC_CPK == cbtcVersionType)/*以前版本合库不需要处理的数据表*/ @@ -263,6 +267,8 @@ static UINT8 initConfigEmapTaskTab() g_struInitTaskTab[EMAP_CARSTOP_ID].bIsEffective = DQU_QFUN_FASLE;/*车档表*/ g_struInitTaskTab[EMAP_ADJTSTATION_ID].bIsEffective = DQU_QFUN_FASLE;/*临线停车区域ID*/ g_struInitTaskTab[EMAP_PSC_ID].bIsEffective = DQU_QFUN_FASLE;/*PSC表*/ + g_struInitTaskTab[EMAP_ECS_ID].bIsEffective = DQU_QFUN_FASLE;/*ECS表*/ + g_struInitTaskTab[EMAP_SPEED_LIMIT_SEC_ID].bIsEffective = DQU_QFUN_FASLE;/*限速区段表*/ /*g_struCalcTaskTab[MAX_CALCTASK_COUNT-2].bIsEffective=DQU_QFUN_FASLE;*//*不需要建立Link和其他设备间的映射关系*/ g_struCalcTaskTab[MAX_CALCTASK_COUNT-1].bIsEffective=DQU_QFUN_FASLE;/*不需要计算SPKS包含的Link序列*/ @@ -278,6 +284,8 @@ static UINT8 initConfigEmapTaskTab() g_struInitTaskTab[EMAP_CARSTOP_ID].bIsEffective = DQU_QFUN_FASLE;/*车档表*/ g_struInitTaskTab[EMAP_ADJTSTATION_ID].bIsEffective = DQU_QFUN_FASLE;/*临线停车区域ID*/ g_struInitTaskTab[EMAP_PSC_ID].bIsEffective = DQU_QFUN_FASLE;/*PSC表*/ + g_struInitTaskTab[EMAP_ECS_ID].bIsEffective = DQU_QFUN_FASLE;/*ECS表*/ + g_struInitTaskTab[EMAP_SPEED_LIMIT_SEC_ID].bIsEffective = DQU_QFUN_FASLE;/*限速区段表*/ g_struCalcTaskTab[MAX_CALCTASK_COUNT-3].bIsEffective=DQU_QFUN_FASLE;/*不需要建立Link和其他设备间的映射关系*/ g_struCalcTaskTab[MAX_CALCTASK_COUNT-2].bIsEffective=DQU_QFUN_FASLE;/*不需要建立Link与坡度索引间的映射关系*/ @@ -289,6 +297,8 @@ static UINT8 initConfigEmapTaskTab() g_struInitTaskTab[EMAP_ZC_DIVID_POINT_ID].bIsEffective = DQU_QFUN_FASLE;/*ZC分界点表*/ g_struInitTaskTab[EMAP_ZC_COM_ZONE_ID].bIsEffective = DQU_QFUN_FASLE;/*ZC共管区域表*/ g_struInitTaskTab[EMAP_MULTI_POINT_ID].bIsEffective = DQU_QFUN_FASLE;/*多开道岔表*/ + g_struInitTaskTab[EMAP_ECS_ID].bIsEffective = DQU_QFUN_FASLE;/*ECS表*/ + g_struInitTaskTab[EMAP_SPEED_LIMIT_SEC_ID].bIsEffective = DQU_QFUN_FASLE;/*限速区段表*/ rtnValue = 1; } else if (DQU_CBTC_DG == cbtcVersionType)/*单轨不需要处理的数据表*/ @@ -298,7 +308,9 @@ static UINT8 initConfigEmapTaskTab() g_struInitTaskTab[EMAP_CARSTOP_ID].bIsEffective = DQU_QFUN_FASLE;/*车档表*/ g_struInitTaskTab[EMAP_ADJTSTATION_ID].bIsEffective = DQU_QFUN_FASLE;/*临线停车区域ID*/ g_struInitTaskTab[EMAP_PSC_ID].bIsEffective = DQU_QFUN_FASLE;/*PSC表*/ - + g_struInitTaskTab[EMAP_ECS_ID].bIsEffective = DQU_QFUN_FASLE;/*ECS表*/ + g_struInitTaskTab[EMAP_SPEED_LIMIT_SEC_ID].bIsEffective = DQU_QFUN_FASLE;/*限速区段表*/ + /*g_struCalcTaskTab[MAX_CALCTASK_COUNT-1].bIsEffective = DQU_QFUN_FASLE;*//*不需要建立Link和其他设备间的映射关系*/ g_struCalcTaskTab[MAX_CALCTASK_COUNT-2].bIsEffective = DQU_QFUN_FASLE;/*不需要建立Link与坡度索引间的映射关系*/ g_struCalcTaskTab[MAX_CALCTASK_COUNT-1].bIsEffective = DQU_QFUN_FASLE;/*不需要计算SPKS包含的Link序列*/ @@ -2455,7 +2467,7 @@ UINT32 dwOrgnLinkOfst; UINT32 dwTmnlLinkOfst; 终点所处link偏移量 UINT16 wMiddleLinkId[MIDDLE_LINK_MAX_NUM]; 计轴区段中间包含link编号 ************************************/ -static UINT8 AxleSgmtStru_CC() +static UINT8 AxleSgmtStru_CC(void) { UINT16 linkId1 = 0U; /*记轴区段计算用到的临时变量*/ UINT16 linkId2 = 0U; @@ -6847,7 +6859,7 @@ UINT16 wObsID[8]; UINT16 wObsNeedLockStatus[8]; 障碍物需要联锁状态 备注:内部调用函数,合库、燕房、单轨使用 *********************************************/ -static UINT8 RouteStru_DFT() +static UINT8 RouteStru_DFT(void) { UINT16 i, j ,k; /*循环变量*/ DSU_ROUTE_STRU* pRouteStru=NULL; /*临时变量*/ @@ -7124,7 +7136,7 @@ UINT16 wObsNeedLockStatus[8]; 修改记录: 1、更新进路范围内CBTC接近区段的范围判断 使用宏值信息替代,防止遗忘更新,不修复编码规范问题 m by sds 2020-8-21 *********************************************/ -static UINT8 RouteStru_CC() +static UINT8 RouteStru_CC(void) { UINT16 i=0U; UINT16 j=0U; @@ -15736,7 +15748,7 @@ UINT8 InsertToLimitStcLinkIdx(UINT16 linkId,UINT16 limitStcSpdId) 返回值:1成功, 0失败 author:qxt 20160626 */ -UINT8 GetPhyiscalSwitches() +UINT8 GetPhyiscalSwitches(void) { UINT8 chReturnValue = 0; /*函数返回值*/ UINT16 i=0,j=0,k=0,m=0U; /*循环用变量*/ @@ -16859,5 +16871,385 @@ UINT8 initLogSecSpksButton(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount) rtnValue = 1; } } + return rtnValue; +} + +/********************************************** +* 函数功能:初始化[ECS表]:计算索引 +* 输入参数:pDataAddr 表数据首地址 +* dataSize 数据字节长度 +* rowCount 表数据行数 +* 输出参数:无 +* 返 回 值:2 处理中 +* 1 成功 +* 0 失败 +* Created By LQ 2026.01.24 +**********************************************/ +UINT8 initEcs(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 2U; + UINT8* pData = NULL; + UINT8 initFlag = 0U; + UINT8 checkFlag = 0U; + DSU_ECS_STRU* pCurrentStru = NULL; /*结构体临时指针变量*/ + DSU_ECS_STRU stru = { 0U }; /*结构体临时指针变量*/ + UINT16 j = 0U; + static UINT32 rowDataLen = 0U; + UINT16 wStruDataLen = 0U; + UINT16 wDataIndexLen = 0U; + + /*电子地图数据*/ + DSU_EMAP_INDEX_STRU* dsuEmapIndexStru = NULL; + DSU_STATIC_HEAD_STRU* dsuStaticHeadStru = NULL; + DSU_DATA_LEN_STRU* dsuDataLenStru = NULL; + + if ((NULL != pDataAddr) && (NULL != g_dsuEmapStru)) + { + dsuEmapIndexStru = g_dsuEmapStru->dsuEmapIndexStru; + dsuStaticHeadStru = g_dsuEmapStru->dsuStaticHeadStru; + dsuDataLenStru = g_dsuEmapStru->dsuDataLenStru; + } + else + { + /*电子地图数据指针为空,返回失败*/ + rtnValue = 0U; + } + + initFlag = EmapInitFunStepCtrl(0x01U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + dsuDataLenStru->wEcsLen = rowCount; + + if (0U == rowCount) + { + rtnValue = 1U; + } + else + { + rowDataLen = dataSize / rowCount; + + /*索引数组长度计算*/ + initFlag = ECS_STRU_init(pDataAddr + dataSize - rowDataLen, &stru); + if (0U != initFlag) + { + /*索引个数为最大ID + 1*/ + dsuEmapIndexStru->ECSINDEXNUM = stru.wEcsId; + } + else + { + /*init函数参数空指针*/ + rtnValue = 0U; + } + } + } + else + { + /*不处理*/ + } + + initFlag = EmapInitFunStepCtrl(0x02U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + if (0x01U == g_IsEmapAllocMemory) + { + /*动态申请索引空间*/ + dsuEmapIndexStru->dsuEcsIndex = (UINT16*)MyNew(sizeof(UINT16) * dsuEmapIndexStru->ECSINDEXNUM + 2U); + + /*动态申请空间失败*/ + if (NULL == dsuEmapIndexStru->dsuEcsIndex) + { + rtnValue = 0U; + } + else + { + /*初始化为0xFF*/ + CommonMemSet(dsuEmapIndexStru->dsuEcsIndex, (UINT32)(sizeof(UINT16) * dsuEmapIndexStru->ECSINDEXNUM + 2U), 0xFFU, (UINT32)(sizeof(UINT16) * dsuEmapIndexStru->ECSINDEXNUM + 2U)); + } + + if (2U == rtnValue) + { + /*动态申请空间*/ + dsuStaticHeadStru->pEcsStru = (DSU_ECS_STRU*)MyNew(sizeof(DSU_ECS_STRU) * dsuDataLenStru->wEcsLen); + + /*动态申请空间失败*/ + if (NULL == dsuStaticHeadStru->pEcsStru) + { + rtnValue = 0U; + } + else + { + /*初始化为0xFF*/ + CommonMemSet(dsuStaticHeadStru->pEcsStru, (UINT32)(sizeof(DSU_ECS_STRU) * dsuDataLenStru->wEcsLen), 0xFFU, (UINT32)(sizeof(DSU_ECS_STRU) * dsuDataLenStru->wEcsLen)); + } + } + else + { + /*不处理*/ + } + } + else/*内存空间是由外部产品来分配的*/ + { + /*检测电子地图对应数据项数组的个数是否超出内存分配范围*/ + checkFlag = dquGetEmapDataStruArrayLen(EMAP_ECS_ID, &wStruDataLen); + + if (((0U != wStruDataLen) && (dsuDataLenStru->wEcsLen >= wStruDataLen)) + || (0U == wStruDataLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*检测电子地图中对应索引数组的个数是否超出内存分配范围*/ + checkFlag = dquGetEmapDataIndexArrayLen(EMAP_ECS_ID, &wDataIndexLen); + if (((0U != wDataIndexLen) && (dsuEmapIndexStru->ECSINDEXNUM >= wDataIndexLen)) + || (0U == wDataIndexLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*不处理*/ + } + } + } + } + + initFlag = EmapInitFunStepCtrl(0x03U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + /*解析数据到 ECS 结构体数组 */ + for (j = g_struInitTaskTab[g_wCurInitStruProg].wCurInitPos; j < dsuDataLenStru->wEcsLen; j++) + { + pCurrentStru = dsuStaticHeadStru->pEcsStru + j; + + pData = pDataAddr + rowDataLen * j; + /*填充数据结构体*/ + initFlag = ECS_STRU_init(pData, pCurrentStru); + if (0U == initFlag) + { + rtnValue = 0U;/*init函数参数空指针*/ + } + else + { + /*完成对应填充索引*/ + dsuEmapIndexStru->dsuEcsIndex[pCurrentStru->wEcsId] = j; + initFlag = EmapInitLoopStepLenCtrl(j); + } + /*循环分步切割处理*/ + if ((0U == rtnValue) || (DQU_QFUN_TRUE == initFlag)) + { + break; + } + else + { + /*不处理*/ + } + } + + if ((0U != rtnValue) && (j == dsuDataLenStru->wEcsLen)) + { + rtnValue = 1U; + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } + + return rtnValue; +} + +/********************************************** +* 函数功能:初始化[限速区段表]:计算索引 +* 输入参数:pDataAddr 表数据首地址 +* dataSize 数据字节长度 +* rowCount 表数据行数 +* 输出参数:无 +* 返 回 值:2 处理中 +* 1 成功 +* 0 失败 +* Created By yx 2026.03.14 +**********************************************/ +UINT8 initSpeedLimitSec(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 2U; + UINT8* pData = NULL; + UINT8 initFlag = 0U; + UINT8 checkFlag = 0U; + DSU_SPEED_LIMIT_SEC_STRU* pCurrentStru = NULL; /*结构体临时指针变量*/ + DSU_SPEED_LIMIT_SEC_STRU stru = { 0U }; /*结构体临时指针变量*/ + UINT16 j = 0U; + static UINT32 rowDataLen = 0U; + UINT16 wStruDataLen = 0U; + UINT16 wDataIndexLen = 0U; + + /*电子地图数据*/ + DSU_EMAP_INDEX_STRU* dsuEmapIndexStru = NULL; + DSU_STATIC_HEAD_STRU* dsuStaticHeadStru = NULL; + DSU_DATA_LEN_STRU* dsuDataLenStru = NULL; + + if ((NULL != pDataAddr) && (NULL != g_dsuEmapStru)) + { + dsuEmapIndexStru = g_dsuEmapStru->dsuEmapIndexStru; + dsuStaticHeadStru = g_dsuEmapStru->dsuStaticHeadStru; + dsuDataLenStru = g_dsuEmapStru->dsuDataLenStru; + } + else + { + /*电子地图数据指针为空,返回失败*/ + rtnValue = 0U; + } + + initFlag = EmapInitFunStepCtrl(0x01U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + dsuDataLenStru->wSpeedLimitSecLen = rowCount; + + if (0U == rowCount) + { + rtnValue = 1U; + } + else + { + rowDataLen = dataSize / rowCount; + + /*索引数组长度计算*/ + initFlag = SLSEC_STRU_init(pDataAddr + dataSize - rowDataLen, &stru); + if (0U != initFlag) + { + /*索引个数为最大ID*/ + dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM = stru.wSLSecId; + } + else + { + /*init函数参数空指针*/ + rtnValue = 0U; + } + } + } + else + { + /*不处理*/ + } + + initFlag = EmapInitFunStepCtrl(0x02U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + if (0x01U == g_IsEmapAllocMemory) + { + /*动态申请索引空间*/ + dsuEmapIndexStru->dsuSpeedLimitSecIndex = (UINT16*)MyNew(sizeof(UINT16) * dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM + 2U); + + /*动态申请空间失败*/ + if (NULL == dsuEmapIndexStru->dsuSpeedLimitSecIndex) + { + rtnValue = 0U; + } + else + { + /*初始化为0xFF*/ + (void)CommonMemSet(dsuEmapIndexStru->dsuSpeedLimitSecIndex, (UINT32)(sizeof(UINT16) * dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM + 2U), 0xFFU, + (UINT32)(sizeof(UINT16) * dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM + 2U)); + } + + if (2U == rtnValue) + { + /*动态申请空间*/ + dsuStaticHeadStru->pSpeedLimitSecStru = (DSU_SPEED_LIMIT_SEC_STRU*)MyNew(sizeof(DSU_SPEED_LIMIT_SEC_STRU) * dsuDataLenStru->wSpeedLimitSecLen); + + /*动态申请空间失败*/ + if (NULL == dsuStaticHeadStru->pSpeedLimitSecStru) + { + rtnValue = 0U; + } + else + { + /*初始化为0xFF*/ + (void)CommonMemSet(dsuStaticHeadStru->pSpeedLimitSecStru, (UINT32)(sizeof(DSU_SPEED_LIMIT_SEC_STRU) * dsuDataLenStru->wSpeedLimitSecLen), 0xFFU, + (UINT32)(sizeof(DSU_SPEED_LIMIT_SEC_STRU) * dsuDataLenStru->wSpeedLimitSecLen)); + } + } + else + { + /*不处理*/ + } + } + else/*内存空间是由外部产品来分配的*/ + { + /*检测电子地图对应数据项数组的个数是否超出内存分配范围*/ + checkFlag = dquGetEmapDataStruArrayLen((UINT16)EMAP_SPEED_LIMIT_SEC_ID, &wStruDataLen); + + if (((0U != wStruDataLen) && (dsuDataLenStru->wSpeedLimitSecLen >= wStruDataLen)) + || (0U == wStruDataLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*检测电子地图中对应索引数组的个数是否超出内存分配范围*/ + checkFlag = dquGetEmapDataIndexArrayLen((UINT16)EMAP_SPEED_LIMIT_SEC_ID, &wDataIndexLen); + if (((0U != wDataIndexLen) && (dsuEmapIndexStru->SPEEDLIMITSECINDEXNUM >= wDataIndexLen)) + || (0U == wDataIndexLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*不处理*/ + } + } + } + } + + initFlag = EmapInitFunStepCtrl(0x03U); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + /*解析数据到限速区段结构体数组 */ + for (j = g_struInitTaskTab[g_wCurInitStruProg].wCurInitPos; j < dsuDataLenStru->wSpeedLimitSecLen; j++) + { + pCurrentStru = dsuStaticHeadStru->pSpeedLimitSecStru + j; + + pData = pDataAddr + rowDataLen * j; + /*填充数据结构体*/ + initFlag = SLSEC_STRU_init(pData, pCurrentStru); + if (0U == initFlag) + { + rtnValue = 0U;/*init函数参数空指针*/ + } + else + { + /*完成对应填充索引*/ + dsuEmapIndexStru->dsuSpeedLimitSecIndex[pCurrentStru->wSLSecId] = j; + initFlag = EmapInitLoopStepLenCtrl(j); + } + /*循环分步切割处理*/ + if ((0U == rtnValue) || (DQU_QFUN_TRUE == initFlag)) + { + break; + } + else + { + /*不处理*/ + } + } + + if ((0U != rtnValue) && (j == dsuDataLenStru->wSpeedLimitSecLen)) + { + rtnValue = 1U; + } + else + { + /*不处理*/ + } + } + else + { + /*不处理*/ + } + return rtnValue; } \ No newline at end of file diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h index 7bb7540..c328888 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h @@ -648,7 +648,7 @@ UINT8 InsertToLimitStcLinkIdx(UINT16 linkId,UINT16 limitStcSpdId); 返回值:1成功, 0失败 author:单轨项目 qxt 20170626 */ -UINT8 GetPhyiscalSwitches(); +UINT8 GetPhyiscalSwitches(void); /* 函数功能:建立Link和其他设备间的映射关系 @@ -696,6 +696,32 @@ UINT8 initEa(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); **********************************************/ UINT8 initLogSecSpksButton(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount); +/********************************************** +* 函数功能:初始化[ECS表]:计算索引 +* 输入参数:pDataAddr 表数据首地址 +* dataSize 数据字节长度 +* rowCount 表数据行数 +* 输出参数:无 +* 返 回 值:2 处理中 +* 1 成功 +* 0 失败 +* Created By LQ 2026.01.24 +**********************************************/ +UINT8 initEcs(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount); + +/********************************************** +* 函数功能:初始化[限速区段表]:计算索引 +* 输入参数:pDataAddr 表数据首地址 +* dataSize 数据字节长度 +* rowCount 表数据行数 +* 输出参数:无 +* 返 回 值:2 处理中 +* 1 成功 +* 0 失败 +* Created By yx 2026.03.14 +**********************************************/ +UINT8 initSpeedLimitSec(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquQuery.c b/TSCP/src/dqu_common/dqu_emap_common/dquQuery.c index 837276b..1967d38 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquQuery.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquQuery.c @@ -584,7 +584,7 @@ UINT8 TwoPointPathExp(DSU_EMAP_STRU* pDsuEmapStru, const LOD_STRU* pLODAStru, co if ((NULL != pDsuEmapStru) && (NULL != pLODAStru) && (NULL != pLODBStru) && (NULL != pLinkNum) && (NULL != szLinkId)) { - (void)CommonMemSet(szASameQueryDir, (UINT32)(sizeof(UINT8) * 25U), pLODAStru->Dir, (UINT32)(sizeof(UINT8) * 25U)); + (void)CommonMemSet((void*)szASameQueryDir, (UINT32)(sizeof(UINT8) * 25U), pLODAStru->Dir, (UINT32)(sizeof(UINT8) * 25U)); szSameDirPathA[0][0] = pLODAStru->Lnk; szPathASameDirLinkNum[0] = 1U; @@ -637,10 +637,10 @@ UINT8 TwoPointPathExp(DSU_EMAP_STRU* pDsuEmapStru, const LOD_STRU* pLODAStru, co { if (pLODBStru->Lnk == szSameDirPathA[ii][szPathASameDirLinkNum[ii] - 1U]) { - /*检查当前路径重点是否是数据中配置的终点*/ - for (jj = 0; jj < szPathASameDirLinkNum[ii]; jj++) + /*检查当前路径终点是否是数据中配置的终点*/ + for (jj = 0U; jj < szPathASameDirLinkNum[ii]; jj++) { - for (wSzLinkIndex == 0U; wSzLinkIndex < wAllPathLinkSum; wSzLinkIndex++) + for (wSzLinkIndex = 0U; wSzLinkIndex < wAllPathLinkSum; wSzLinkIndex++) { if (szSameDirPathA[ii][jj] == szTempLinkId[wSzLinkIndex]) { diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquQuery.h b/TSCP/src/dqu_common/dqu_emap_common/dquQuery.h index 7a96502..ee35dbe 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquQuery.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dquQuery.h @@ -21,6 +21,7 @@ #include "CommonTypes.h" #include "dsuStruct.h" #include "dquVobcCommonStru.h" +#include "CommonMemory.h" #define DSU_MAX_LINK_BETWEEN 400 diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquQueryExp.c b/TSCP/src/dqu_common/dqu_emap_common/dquQueryExp.c index f8588ff..03c8e95 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquQueryExp.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquQueryExp.c @@ -7566,7 +7566,7 @@ UINT8 dsuSwitInfoBtwLinkBaseLinkSeq(UINT16 linkA, UINT16 linkB, UINT8 chDir, IN else { /*初始化道岔信息*/ - CommonMemSet(pSwInfo, sizeof(LOGSEC_SWITCH_STRU), 0U, sizeof(LOGSEC_SWITCH_STRU)); + (void)CommonMemSet((void*)pSwInfo, (UINT32)sizeof(LOGSEC_SWITCH_STRU), 0U, (UINT32)sizeof(LOGSEC_SWITCH_STRU)); cTmpIndex = pLinkSeq->cLinkCnt - 1u; @@ -7639,7 +7639,7 @@ UINT8 dsuSwitInfoBtwLinkBaseLinkSeq(UINT16 linkA, UINT16 linkB, UINT8 chDir, IN else { /*查询不成功,清空*/ - CommonMemSet(pSwInfo, sizeof(LOGSEC_SWITCH_STRU), 0U, sizeof(LOGSEC_SWITCH_STRU)); + (void)CommonMemSet((void*)pSwInfo, (UINT32)sizeof(LOGSEC_SWITCH_STRU), 0U, (UINT32)sizeof(LOGSEC_SWITCH_STRU)); } } diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c index ff8880e..5639af8 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c @@ -442,6 +442,14 @@ static UINT8 LINK_STRU_init_CC(UINT8 * pDataAdd, DSU_LINK_STRU* pLinkStrc) pLinkStrc->cCbtcProperty = *pData; pData += 1; + /*CBTC联络线属性*/ + pLinkStrc->cDisneyConnectAttr = *pData; + pData += 1; + + /*台风限速属性*/ + pLinkStrc->cTyphoonTsrAttr = *pData; + pData += 1; + rtnValue = 1; } return rtnValue; @@ -4762,3 +4770,107 @@ UINT8 DSU_LOGSEC_SPKS_BUTTON_STRU_init(UINT8* pDataAdd, DSU_LOGSEC_SPKS_BUTTON_S } return rtnValue; } + +/************************************** +* 函数功能:逻辑区段SPKS结构体初始化函数 +* 参数说明:[in] UINT8* pDataAdd 数据地址(二进制文件) +* [out] DSU_ECS_STRU* pEcsStru 被初始化的结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +***************************/ +UINT8 ECS_STRU_init(UINT8* pDataAdd, DSU_ECS_STRU* pEcsStru) +{ + UINT8 rtnValue = 0U; + UINT8* pData = NULL; + + if ((NULL != pDataAdd) && (NULL != pEcsStru)) + { + pData = pDataAdd; + + /*ECS编号*/ + pEcsStru->wEcsId = ShortFromChar(pData); + pData += 2U; + + /*隧道起点所处link编号*/ + pEcsStru->wTunnelStartLinkId = ShortFromChar(pData); + pData += 2U; + + /*隧道起点所处link偏移量*/ + pEcsStru->dwTunnelStartLinkOff = LongFromChar(pData); + pData += 4U; + + /*隧道终点所处link编号*/ + pEcsStru->wTunnelEndLinkId = ShortFromChar(pData); + pData += 2U; + + /*隧道终点所处link偏移量*/ + pEcsStru->dwTunnelEndLinkOff = LongFromChar(pData); + pData += 4U; + + rtnValue = 1U; + } + else + { + /*入参非法,返回失败*/ + } + + return rtnValue; +} + +/************************************** +* 函数功能:限速区段结构体初始化函数 +* 参数说明:[in] UINT8* pDataAdd 数据地址(二进制文件) +* [out] DSU_SPEED_LIMIT_SEC_STRU* pSLSecStru 被初始化的结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By yx 2026.03.14 +***************************/ +UINT8 SLSEC_STRU_init(UINT8* pDataAdd, DSU_SPEED_LIMIT_SEC_STRU* pSLSecStru) +{ + UINT8 rtnValue = 0U; + UINT8* pData = NULL; + + if ((NULL != pDataAdd) && (NULL != pSLSecStru)) + { + pData = pDataAdd; + + /*限速区段编号*/ + pSLSecStru->wSLSecId = ShortFromChar(pData); + pData += 2U; + + if ((0U < pSLSecStru->wSLSecId) && (SPEED_LIMIT_SEC_SUM_MAX > pSLSecStru->wSLSecId)) + { + /*限速区段所处link编号*/ + pSLSecStru->wSecLinkId = ShortFromChar(pData); + pData += 2U; + + if (0U < pSLSecStru->wSecLinkId) + { + /*限速区段起点所处link偏移量*/ + pSLSecStru->dwSecStartLinkOff = LongFromChar(pData); + pData += 4U; + + /*限速区段终点所处link偏移量*/ + pSLSecStru->dwSecEndLinkOff = LongFromChar(pData); + pData += 4U; + + rtnValue = 1U; + } + else + { + rtnValue = 0U; + } + } + else + { + rtnValue = 0U; + } + } + else + { + /*入参非法,返回失败*/ + } + + return rtnValue; +} \ No newline at end of file diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h index b8f5a6b..77cf6ad 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h @@ -470,6 +470,26 @@ static UINT8 ROUTE_STRU_init_CC(UINT8* pDataAdd, DSU_ROUTE_STRU* pRouteStru); ***************************/ UINT8 DSU_LOGSEC_SPKS_BUTTON_STRU_init(UINT8* pDataAdd, DSU_LOGSEC_SPKS_BUTTON_STRU* pSpksButtonStru); +/************************************** +* 函数功能:逻辑区段SPKS结构体初始化函数 +* 参数说明:[in] UINT8* pDataAdd 数据地址(二进制文件) +* [out] DSU_ECS_STRU* pEcsStru 被初始化的结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By LQ 2026.01.24 +***************************/ +UINT8 ECS_STRU_init(UINT8* pDataAdd, DSU_ECS_STRU* pEcsStru); + +/************************************** +* 函数功能:限速区段结构体初始化函数 +* 参数说明:[in] UINT8* pDataAdd 数据地址(二进制文件) +* [out] DSU_SPEED_LIMIT_SEC_STRU* pSLSecStru 被初始化的结构体指针 +* 返 回 值:0 失败 +* 1 成功 +* Created By yx 2026.03.14 +***************************/ +UINT8 SLSEC_STRU_init(UINT8* pDataAdd, DSU_SPEED_LIMIT_SEC_STRU* pSLSecStru); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h b/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h index 8849269..8ab406c 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h @@ -98,6 +98,8 @@ #define MAX_EA_BOUNDARY_NUM 10U /*防护区域边界最大数量*/ +#define SPEED_LIMIT_SEC_SUM_MAX 2001U /*定义限速区段数量最大值*/ + #ifdef __cplusplus extern "C" { @@ -196,6 +198,8 @@ typedef struct DSU_Data_Len UINT16 wPSCLen; /*PSC表长度,依据互联互通数据结构V20.0.0添加,add by sds 2020-8-18*/ UINT16 wEaLen; /*防护区域表长度*/ UINT16 wLogSecSpksLen; /*逻辑区段SPKS表长度*/ + UINT16 wEcsLen; /*ECS表长度 add by lq 2026.01.24*/ + UINT16 wSpeedLimitSecLen; /*限速区段表长度,added by yx 2026.03.14*/ }DSU_DATA_LEN_STRU; /*静态数据库结构体*/ @@ -207,37 +211,39 @@ typedef struct DSU_LinkStruct { UINT16 wId; /*link编号*/ UINT32 dwLength; /*link长度(cm)*/ - UINT16 wLinkLine; /*Link所处线路的上下行信息*/ /*新增---严广学*/ - UINT16 wOrgnPointType; /*link起点端点类型*/ + UINT16 wLinkLine; /*Link所处线路的上下行信息*/ /*新增---严广学*/ + UINT16 wOrgnPointType; /*link起点端点类型*/ UINT16 wOrgnPointId; /*link起点端点编号*/ - UINT16 wOrgnJointMainLkId; /*link起点相连接的相邻正线link编号*/ - UINT16 wOrgnJointSideLkId; /*link起点相连接的相邻侧线link编号*/ - UINT16 wTmnlPointType; /*link终点端点类型*/ + UINT16 wOrgnJointMainLkId; /*link起点相连接的相邻正线link编号*/ + UINT16 wOrgnJointSideLkId; /*link起点相连接的相邻侧线link编号*/ + UINT16 wTmnlPointType; /*link终点端点类型*/ UINT16 wTmnlPointId; /*link终点端点编号*/ - UINT16 wTmnlJointMainLkId; /*link终点相连接的相邻正线link编号*/ - UINT16 wTmnlJointSideLkId; /*link终点相连接的相邻侧线link编号*/ - UINT16 wManageZC; /*所属ZC区域编号*/ - UINT16 wManageATS; /*所属ATS区域编号*/ /*合库、燕房该变量含义为“所属车站编号” 互联互通中该变量的含义为 所属ATS区域编号 add by qxt 20160811*/ - UINT16 wManageLogicCI; /*所属逻辑CI区域编号*/ - UINT16 wManagePhysicalCI; /*所属物理CI区域编号*/ /*----确定长度为2个字节---*/ + UINT16 wTmnlJointMainLkId; /*link终点相连接的相邻正线link编号*/ + UINT16 wTmnlJointSideLkId; /*link终点相连接的相邻侧线link编号*/ + UINT16 wManageZC; /*所属ZC区域编号*/ + UINT16 wManageATS; /*所属ATS区域编号*/ /*合库、燕房该变量含义为“所属车站编号” 互联互通中该变量的含义为 所属ATS区域编号 add by qxt 20160811*/ + UINT16 wManageLogicCI; /*所属逻辑CI区域编号*/ + UINT16 wManagePhysicalCI; /*所属物理CI区域编号*/ /*----确定长度为2个字节---*/ - UINT16 wLinkResSpeed; /*Link限速信息属性*/ - UINT16 wGrade; /*Link坡度信息属性*/ + UINT16 wLinkResSpeed; /*Link限速信息属性*/ + UINT16 wGrade; /*Link坡度信息属性*/ /* 以下项在数据代码分离项目中,从数据文件中删除,它的值需要动态计算---严广学 */ - UINT16 wLogicDir; /*link逻辑方向(16进制)(预留)(替换为wLinkLine)*/ + UINT16 wLogicDir; /*link逻辑方向(16进制)(预留)(替换为wLinkLine)*/ - UINT16 wManageStation; /*互联互通需求新增,该变量的含义为 所属车站编号 add by qxt 20160811*/ - UINT8 wLinkLogicDirUpAndDown; /*互联互通需求新增,系统定义逻辑方向与上下行方向的关系 add by qxt 20160811*/ + UINT16 wManageStation; /*互联互通需求新增,该变量的含义为 所属车站编号 add by qxt 20160811*/ + UINT8 wLinkLogicDirUpAndDown; /*互联互通需求新增,系统定义逻辑方向与上下行方向的关系 add by qxt 20160811*/ UINT8 wLogicDirChanged; - UINT8 wTunAttribute; /*Link隧道属性,依据互联互通数据结构V12.0.0添加,add by lmy 20180312*/ - UINT16 wManagePSCID; /*所属PSC区域编号*/ - UINT8 wKsDoorUnlock; /*客室门紧急解锁开门方式*/ - UINT16 wBelongVirtualCI; /*所属虚拟CI编号*/ - UINT8 wLinxian; /*Link临线属性*/ - UINT8 wLinkTG_EvacuateDir; /*脱轨及区间疏散防护线路上下行属性*/ - UINT8 cCbtcProperty; /*link CBTC区域属性,0x55:CBTC区域,0xAA:非CBTC区域*/ + UINT8 wTunAttribute; /*Link隧道属性,依据互联互通数据结构V12.0.0添加,add by lmy 20180312*/ + UINT16 wManagePSCID; /*所属PSC区域编号*/ + UINT8 wKsDoorUnlock; /*客室门紧急解锁开门方式*/ + UINT16 wBelongVirtualCI; /*所属虚拟CI编号*/ + UINT8 wLinxian; /*Link临线属性*/ + UINT8 wLinkTG_EvacuateDir; /*脱轨及区间疏散防护线路上下行属性*/ + UINT8 cCbtcProperty; /*link CBTC区域属性,0x55:CBTC区域,0xAA:非CBTC区域*/ + UINT8 cDisneyConnectAttr; /*link CBTC联络线属性(迪士尼),0x55:CBTC联络线区域,0xFF:非“CBTC联络线区域”*/ + UINT8 cTyphoonTsrAttr; /*link 台风限速属性(迪士尼),0x55:该Link是台风限速区域 0xAA:该Link不是台风限速区域*/ }DSU_LINK_STRU; @@ -939,6 +945,25 @@ typedef struct DSU_LogSecSpksButton UINT16 wPlatFormId; /*站台ID*/ }DSU_LOGSEC_SPKS_BUTTON_STRU; +/*ECS表*/ +typedef struct DSU_ECSStruct +{ + UINT16 wEcsId; /*ECS ID*/ + UINT16 wTunnelStartLinkId; /*隧道起点link ID*/ + UINT32 dwTunnelStartLinkOff; /*隧道起点link偏移量*/ + UINT16 wTunnelEndLinkId; /*隧道终点link ID*/ + UINT32 dwTunnelEndLinkOff; /*隧道终点link偏移量*/ +}DSU_ECS_STRU; + +/*限速区段表*/ +typedef struct DSU_SpeedLimitSecStruct +{ + UINT16 wSLSecId; /*限速区段ID*/ + UINT16 wSecLinkId; /*区段所处link ID*/ + UINT32 dwSecStartLinkOff; /*区段起点link偏移量*/ + UINT32 dwSecEndLinkOff; /*区段终点link偏移量*/ +}DSU_SPEED_LIMIT_SEC_STRU; + /*车库门*/ typedef struct DSU_DepotGate { @@ -1056,6 +1081,8 @@ typedef struct DSU_StaticHead/* DSU_PSC_STRU *pPSCStru; /*PSC信息结构体指针*/ DSU_EMAP_EA_STRU *pEaStru; /*防护区域结构体指针*/ DSU_LOGSEC_SPKS_BUTTON_STRU* pLogSecSpksButtonStru; /*逻辑区段SPKS开关表结构体指针*/ + DSU_ECS_STRU* pEcsStru;/*ECS信息结构体指针*/ + DSU_SPEED_LIMIT_SEC_STRU* pSpeedLimitSecStru; /*限速区段信息结构体指针,Added By yx 2026.03.14*/ }DSU_STATIC_HEAD_STRU; @@ -1268,6 +1295,12 @@ typedef struct DSU_EmapIndexStruct UINT16 LOGSECSPKSINDEXNUM; /*逻辑区段SPKS索引数组大小*/ UINT16* dsulogSecSpksIndex; /*逻辑区段SPKS索引数组*/ + + UINT16 ECSINDEXNUM; /*ECS索引数组空间大小*/ + UINT16* dsuEcsIndex; /*ECS信息索引数组*/ + + UINT16 SPEEDLIMITSECINDEXNUM; /*限速区段索引数组大小,added by yx 2026.03.14*/ + UINT16* dsuSpeedLimitSecIndex; /*限速区段索引数组*/ }DSU_EMAP_INDEX_STRU; /*包含电子地图全部结构的总结构体*/ diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c index dc80c43..ea78096 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c +++ b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c @@ -1300,7 +1300,7 @@ UINT8 dquQueryOutVobcDevId(UINT16 devIndex, UINT32 arOutDevIds[]) dquVobcDevIdArrayData = dquGetVobcDevIdArray(dataPos); if(NULL != dquVobcDevIdArrayData) { - memcpy(arOutDevIds, dquVobcDevIdArrayData, sizeof(UINT32)*2); + (void)memcpy(arOutDevIds, dquVobcDevIdArrayData, sizeof(UINT32)*2); if ((0!=arOutDevIds[0])||(0!=arOutDevIds[1])) { @@ -1389,7 +1389,7 @@ UINT8 dquQueryOutAOMDevId(UINT16 devIndex, UINT32 arOutDevIds[]) dquQueryOutAOMDevIdData = dquGetAOMDevIdArray(dataPos); if(NULL != dquQueryOutAOMDevIdData) { - memcpy(arOutDevIds, dquQueryOutAOMDevIdData, sizeof(UINT32)*2); + (void)memcpy(arOutDevIds, dquQueryOutAOMDevIdData, sizeof(UINT32)*2); if ((0!=arOutDevIds[0])||(0!=arOutDevIds[1])) { diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c index 07115f8..0e619ee 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c @@ -1,50 +1,50 @@ /************************************************************************ * -* 文件名 : FsfbMessageInfo.h -* 版权说明 : 北京交控科技有限公司 -* 版本号 : 1.0 -* 创建时间 : 2013.09.05 -* 作者 : 王佩佩 -* 功能描述 : FSFB/2协议中帧格式以及相关信息的宏定义 -* 使用注意 : 无 -* 修改记录 : -* 2014.05.14 王佩佩 -* 修改内容: 在ArrordLnkInfoCreateFrame()函数中加了发送BTD帧的ABT帧的分支:case Fsfb_SendBtm_BtdAbt: - 修改理由: 在CI收到BTD帧时,应该向LEU发送其确认帧ABT帧。 -* 2014.05.14 王佩佩 -* 修改内容: 在FsfbAnalysisBtdMsg()函数中在接收到BTD合法后,将发送状态置为 retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; -* 修改理由: 在CI收到BTD帧时,应该向LEU发送其确认帧ABT帧。 -* 2014.05.14 王佩佩 -* 修改内容: 在CreateBtmMsg()函数中在创建SBT帧时:取消对发送状态和接收状态的赋值 -* 修改理由: 在此函数只负责创建BTM模式下的帧,不负责链路状态的维护 -* 2014.05.22 刘巧瑞 -* 修改内容: 在ArrordLnkInfoCreateFrame()中,发送状态为Fsfb_SendBtm_Btc时 -* 若:发送SSR、BTC时则接收状态为:Fsfb_WaitBtm_Btcabt接收BTC的ABT -* 若:只发送BTC时则发送状态为:Fsfb_WaitBtm_AbtOrSse,接收LEU的SSE或BTC的ABT -* 两种情况下发送状态全部设为:停止发送 -* 修改理由: 若:发送SSR、BTC时则接收状态为:原为Fsfb_WaitBtm_Sseabt是错误的 -* 2014.05.22 刘巧瑞 -* 修改内容: 在FsfbAnalysisBtdMsg()函数中,在验证BTD帧合法后,需要将发送标志置为1 -* 为发送ABT帧做准备 -* 修改理由: 之前没有置发送标志 -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateTsdOrSbtMsg()函数中,在发送TSD帧时,接收状态应该置为等待SSE -* 修改理由: 之前为置 -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateSseMsg()函数中,发送SSE帧时接收状态:置为等待SSR,发送状态置为:不发送 -* 修改理由: 之前没有置发送状态,防止频繁发送SSE -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateSsrMsg()函数中,此SSR若为BTM模式下的,则发送状态为发送BTC,发送状态置为1 -* 修改理由: 之前没有将发送标志置为1 -* 2014.08.05 刘巧瑞 -* 修改内容: 在FsfbAnalysisSseMsg()函数中,增加了CRC校验 -* 修改理由: 之前漏做了一个检查CRC检查 -* 2014.08.05 刘巧瑞 -* 修改内容: 对BTD进行分析时,分析失败的分支修改返回值为0 -* 修改理由: 因为在上层调用函数中,如果分析失败的话不应该将此数据交付给应用。 -* 2014.08.14 刘巧瑞 -* 修改内容: 在AccordInfoCreateFrameData()函数中对帧的应用数据部分的长度进行防护,小于0则返回失败 -* 修改理由: 之前没有对此长度进行防护 +* 锟侥硷拷锟斤拷 锟斤拷 FsfbMessageInfo.h +* 锟斤拷权说锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷锟截科硷拷锟斤拷锟睫癸拷司 +* 锟芥本锟斤拷 锟斤拷 1.0 +* 锟斤拷锟斤拷时锟斤拷 锟斤拷 2013.09.05 +* 锟斤拷锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷 FSFB/2协锟斤拷锟斤拷帧锟斤拷式锟皆硷拷锟斤拷锟斤拷锟较拷暮甓拷锟 +* 使锟斤拷注锟斤拷 锟斤拷 锟斤拷 +* 锟睫改硷拷录 锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷ArrordLnkInfoCreateFrame锟斤拷锟斤拷锟斤拷锟斤拷锟叫硷拷锟剿凤拷锟斤拷BTD帧锟斤拷ABT帧锟侥凤拷支锟斤拷case Fsfb_SendBtm_BtdAbt: + 锟睫革拷锟斤拷锟缴o拷 锟斤拷CI锟秸碉拷BTD帧时锟斤拷应锟斤拷锟斤拷LEU锟斤拷锟斤拷锟斤拷确锟斤拷帧ABT帧锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷FsfbAnalysisBtdMsg锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节斤拷锟秸碉拷BTD锟较凤拷锟襟,斤拷锟斤拷锟斤拷状态锟斤拷为 retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; +* 锟睫革拷锟斤拷锟缴o拷 锟斤拷CI锟秸碉拷BTD帧时锟斤拷应锟斤拷锟斤拷LEU锟斤拷锟斤拷锟斤拷确锟斤拷帧ABT帧锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateBtmMsg锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷SBT帧时锟斤拷取锟斤拷锟皆凤拷锟斤拷状态锟酵斤拷锟斤拷状态锟侥革拷值 +* 锟睫革拷锟斤拷锟缴o拷 锟节此猴拷锟斤拷只锟斤拷锟金创斤拷BTM模式锟铰碉拷帧锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷路状态锟斤拷维锟斤拷 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷ArrordLnkInfoCreateFrame()锟叫o拷锟斤拷锟斤拷状态为Fsfb_SendBtm_Btc时 +* 锟斤拷锟斤拷锟斤拷锟斤拷SSR锟斤拷BTC时锟斤拷锟斤拷锟阶刺拷锟紽sfb_WaitBtm_Btcabt锟斤拷锟斤拷BTC锟斤拷ABT +* 锟斤拷锟斤拷只锟斤拷锟斤拷BTC时锟斤拷锟斤拷状态为锟斤拷Fsfb_WaitBtm_AbtOrSse锟斤拷锟斤拷锟斤拷LEU锟斤拷SSE锟斤拷BTC锟斤拷ABT +* 锟斤拷锟斤拷锟斤拷锟斤拷路锟斤拷锟阶刺拷锟斤拷锟轿拷锟酵V癸拷锟斤拷锟 +* 锟睫革拷锟斤拷锟缴o拷 锟斤拷锟斤拷锟斤拷锟斤拷SSR锟斤拷BTC时锟斤拷锟斤拷锟阶刺拷锟皆狥sfb_WaitBtm_Sseabt锟角达拷锟斤拷锟 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷FsfbAnalysisBtdMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷证BTD帧锟较凤拷锟斤拷锟斤拷要锟斤拷锟斤拷锟酵憋拷志锟斤拷为1 +* 为锟斤拷锟斤拷ABT帧锟斤拷准锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟斤拷锟矫凤拷锟酵憋拷志 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷CreateTsdOrSbtMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟节凤拷锟斤拷TSD帧时锟斤拷锟斤拷锟斤拷状态应锟斤拷锟斤拷为锟饺达拷SSE +* 锟睫革拷锟斤拷锟缴o拷 之前为锟斤拷 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateSseMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷SSE帧时锟斤拷锟斤拷状态锟斤拷锟斤拷为锟饺达拷SSR锟斤拷锟斤拷锟斤拷状态锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟斤拷锟矫凤拷锟斤拷状态锟斤拷锟斤拷止频锟斤拷锟斤拷锟斤拷SSE +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateSsrMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷SSR锟斤拷为BTM模式锟铰的o拷锟斤拷锟斤拷状态为锟斤拷锟斤拷BTC锟斤拷锟斤拷锟斤拷状态锟斤拷为1 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟叫斤拷锟斤拷锟酵憋拷志锟斤拷为1 +* 2014.08.05 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbAnalysisSseMsg()锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷锟斤拷CRC校锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 之前漏锟斤拷锟斤拷一锟斤拷锟斤拷锟紺RC锟斤拷锟 +* 2014.08.05 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷BTD锟斤拷锟叫凤拷锟斤拷时锟斤拷锟斤拷锟斤拷失锟杰的凤拷支锟睫改凤拷锟斤拷值为0 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷为锟斤拷锟较诧拷锟斤拷煤锟斤拷锟斤拷校锟斤拷锟斤拷锟斤拷锟斤拷失锟杰的伙拷锟斤拷应锟矫斤拷锟斤拷锟斤拷锟捷斤拷锟斤拷锟斤拷应锟矫★拷 +* 2014.08.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷AccordInfoCreateFrameData锟斤拷锟斤拷锟斤拷锟斤拷锟叫讹拷帧锟斤拷应锟斤拷锟斤拷锟捷诧拷锟街的筹拷锟饺斤拷锟叫凤拷锟斤拷锟斤拷小锟斤拷0锟津返伙拷失锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟叫对此筹拷锟饺斤拷锟叫凤拷锟斤拷 * ************************************************************************/ @@ -53,11 +53,11 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbMessageInfo.h" #include "FsfbLnkNodeMgr.h" /*-------------------------------------------------------------------- - * 报文创建模块内部函数声明 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 Start *--------------------------------------------------------------------*/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode); @@ -70,112 +70,112 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN /* test todo */ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff); /*-------------------------------------------------------------------- - * 报文创建模块内部函数声明 End + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * 报文创建模块外部函数接口 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟解部锟斤拷锟斤拷锟接匡拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** -* 方法名 : AccordInfoCreateFrameData -* 功能描述 : 根据应用数据确定创建SBT或TSD报文 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : AccordInfoCreateFrameData +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷确锟斤拷锟斤拷锟斤拷SBT锟斤拷TSD锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------------------- -* pAppData UINT8* IN 应用数据 -* DataLen UINT816 IN 数据长度 -* OutMsg UINT8* OUT 输出的报文 -* outPutDataLen UINT16* OUT 输出报文长度 -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 链路信息 -* pFsfbStru FSFB_INFO_STRU * INOUT 协议统一结构体 -* 返回值 : UINT8* :1:正常返回 1:错误返回 +* pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 +* DataLen UINT816 IN 锟斤拷锟捷筹拷锟斤拷 +* OutMsg UINT8* OUT 锟斤拷锟斤拷谋锟斤拷锟 +* outPutDataLen UINT16* OUT 锟斤拷锟斤拷锟斤拷某锟斤拷锟 +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷路锟斤拷息 +* pFsfbStru FSFB_INFO_STRU * INOUT 协锟斤拷统一锟结构锟斤拷 +* 锟斤拷锟斤拷值 : UINT8* :1:锟斤拷锟斤拷锟斤拷锟斤拷 1:锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, UINT8 *OutMsg,UINT16* outPutDataLen,Fsfb_Lnk_Info_Node_Stru** pPNode,FSFB_INFO_STRU *pFsfbStru) { UINT8 retVal =0; - UINT16 destDevName = 0;/* 对方设备名称 */ - UINT16 localDevName =0; /* 本方设备名称 */ + UINT16 destDevName = 0;/* 锟皆凤拷锟借备锟斤拷锟斤拷 */ + UINT16 localDevName =0; /* 锟斤拷锟斤拷锟借备锟斤拷锟斤拷 */ UINT8 applycat =0; UINT16 index=0; UINT16 msgLen =0; - UINT8 *RecordArray = pFsfbStru->RecordArray; /* 记录 */ - UINT16 RecordSize = pFsfbStru->RecordArraySize; /* 记录数组大小 */ - Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* 通信节点指针 */ - const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* 应用层队列保存对方类型的位置 */ - const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* 应用层队列保存对方ID的位置 */ - const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* 应用层队列保存对方ID的位置 */ - const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* 应用层队列保存应用数据的位置 */ + UINT8 *RecordArray = pFsfbStru->RecordArray; /* 锟斤拷录 */ + UINT16 RecordSize = pFsfbStru->RecordArraySize; /* 锟斤拷录锟斤拷锟斤拷锟叫 */ + Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* 通锟脚节碉拷指锟斤拷 */ + const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷锟斤拷锟酵碉拷位锟斤拷 */ + const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷ID锟斤拷位锟斤拷 */ + const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷ID锟斤拷位锟斤拷 */ + const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟接︼拷锟斤拷锟斤拷莸锟轿伙拷锟 */ ComTypeId2DevName(pFsfbStru->LocalType, pFsfbStru->LocalID, &localDevName); /* * ------------------------------------------------------------ - * 数据长度 | DestType | DestID | CommandType |应用数据 | - * 2字节 | 1字节 | 1字节 | 1字节 | n | + * 锟斤拷锟捷筹拷锟斤拷 | DestType | DestID | CommandType |应锟斤拷锟斤拷锟斤拷 | + * 2锟街斤拷 | 1锟街斤拷 | 1锟街斤拷 | 1锟街斤拷 | n | * ------------------------------------------------------------ */ - /*对方设备的名称 */ + /*锟皆凤拷锟借备锟斤拷锟斤拷锟斤拷 */ ComTypeId2DevName(pAppData[DEST_TYPE_APP_QUE_POS], pAppData[DEST_ID_APP_QUE_POS], &destDevName); msgLen = DataLen-DATA_APP_QUE_POS; -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordSize,"IN:\n"); PrintFiles(RecordArray,RecordSize,"LocalName:"); - PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* 本方设备 */ + PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* 锟斤拷锟斤拷锟借备 */ PrintFiles(RecordArray,RecordSize,"\tDestName:"); - PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* 对方设备 */ + PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* 锟皆凤拷锟借备 */ PrintFiles(RecordArray,RecordSize,"\tDataLen:"); - PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* 纯应用数据长度 */ + PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* 锟斤拷应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ PrintFiles(RecordArray,RecordSize,"\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* 一消息帧开始标识 */ - PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* 本方设备 */ - PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* 对方设备 */ - PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* 纯应用数据长度 */ - PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /*命令类型*/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* 一锟斤拷息帧锟斤拷始锟斤拷识 */ + PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* 锟斤拷锟斤拷锟借备 */ + PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* 锟皆凤拷锟借备 */ + PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* 锟斤拷应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ #endif if(msgLen < 0) - {/*帧数据长度不合法*/ + {/*帧锟斤拷锟捷筹拷锟饺诧拷锟较凤拷*/ retVal = 0; } else { - /* 命令类型 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ applycat =pAppData[DEST_APP_COMMAND_POS]; if((applycat== APPLCAT_TDM)||(applycat==APPLCAT_BTM)) { - /* 查询对应通信节点是否存在 */ + /* 锟斤拷询锟斤拷应通锟脚节碉拷锟角凤拷锟斤拷锟 */ pTmpNode = FsfbSearchNodeByName(destDevName,applycat,pFsfbStru); - if(NULL == pTmpNode) /* 通信节点不存在 */ + if(NULL == pTmpNode) /* 通锟脚节点不锟斤拷锟斤拷 */ { - /* 根据地址来区的覆盖节点,将节点覆盖 */ + /* 锟斤拷锟捷碉拷址锟斤拷锟斤拷锟侥革拷锟角节点,锟斤拷锟节点覆锟斤拷 */ retVal =FsfbOutputReplaceLnkNode(localDevName,destDevName,applycat,&pTmpNode,pFsfbStru); } - else /* 通信节点存在 */ + else /* 通锟脚节碉拷锟斤拷锟 */ { - /* 继续处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal =1; } if (retVal != 0) { - (*pPNode) = pTmpNode; /* 将通信节点指针保存到输出指针变量里 */ - /* 两个字节的长度 */ + (*pPNode) = pTmpNode; /* 锟斤拷通锟脚节碉拷指锟诫保锟芥到锟斤拷锟街革拷锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ /*ShortToChar(msgLen+2,&OutMsg[index]);*/ index = index+2; - /* 1个字节的设备类型*/ + /* 1锟斤拷锟街节碉拷锟借备锟斤拷锟斤拷*/ OutMsg[index++]=pAppData[DEST_TYPE_APP_QUE_POS]; - /* 1个字节的设备ID */ + /* 1锟斤拷锟街节碉拷锟借备ID */ OutMsg[index++]=pAppData[DEST_ID_APP_QUE_POS]; - /* 创建帧TSD或者SBT帧 */ + /* 锟斤拷锟斤拷帧TSD锟斤拷锟斤拷SBT帧 */ retVal=CreateTsdOrSbtMsg(&pAppData[DATA_APP_QUE_POS],msgLen,applycat,&OutMsg[index],outPutDataLen,pTmpNode); index+=(*outPutDataLen); *outPutDataLen +=4; - /* 两个字节的长度 */ + /* 锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ ShortToChar(index-2,OutMsg); } else @@ -185,27 +185,27 @@ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, } else { - PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* 一消息帧开始标识 */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* 一锟斤拷息帧锟斤拷始锟斤拷识 */ PrintRecArrayByte(RecordArray, RecordSize, applycat); retVal = 0; } } - /* 消息帧类型 */ + /* 锟斤拷息帧锟斤拷锟斤拷 */ return retVal; } /*********************************************************************** -* 方法名 : ArrordLnkInfoCreateFrame -* 功能描述 : 根据链路中发送节点的状态组建帧格式。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : ArrordLnkInfoCreateFrame +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷路锟叫凤拷锟酵节碉拷锟阶刺拷榻ㄖ★拷锟绞斤拷锟 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pFsfbStruct FSFB_INFO_STRU* IN 统一结构体 -* outMsg UINT8* OUT FSFD消息帧 -* datalen UINT16* OUT 输出消息长度 +* pFsfbStruct FSFB_INFO_STRU* IN 统一锟结构锟斤拷 +* outMsg UINT8* OUT FSFD锟斤拷息帧 +* datalen UINT16* OUT 锟斤拷锟斤拷锟较拷锟斤拷锟 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ /* todo */ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* datalen) @@ -214,7 +214,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* UINT16 index = 0; UINT16 msgLen =0; UINT8 startFlag = 0; - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*定义当前指针;*/ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*锟斤拷锟藉当前指锟斤拷;*/ CurFillLnk=pFsfbStruct->LnkHead; while(CurFillLnk != NULL) @@ -227,11 +227,11 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* { LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; - /* 创建SSR 帧 */ + /* 锟斤拷锟斤拷SSR 帧 */ retVal=CreateSsrMsg(APPLCAT_TDM,CurFillLnk,&outMsg[index]); index+=SSR_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_TDM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -247,7 +247,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* switch(CurFillLnk->FsfbLinInfo.SendLinkStatus) { case Fsfb_SendSSR: - /* 创建SSR 帧 */ + /* 锟斤拷锟斤拷SSR 帧 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSsrMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); @@ -255,7 +255,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* startFlag = 1; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -275,7 +275,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } LnkInfoBuildFrame(CurFillLnk->DestDevName,BTC_SIZE+2,&outMsg[index]); index+=4; - /* 组建应用数据 */ + /* 锟介建应锟斤拷锟斤拷锟斤拷 */ BuildBtcBody(pFsfbStruct->TmpDataBuff,&msgLen); retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,BTC_DF_SIZE,FSFB_BTC_MSG,&outMsg[index],CurFillLnk); index +=BTC_SIZE; @@ -290,7 +290,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,ABT_DF_SIZE,FSFB_ABT_MSG,&outMsg[index],CurFillLnk); index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -305,7 +305,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_Sbt; index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -318,25 +318,25 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,EBT_DF_SIZE,FSFB_EBT_MSG,&outMsg[index],CurFillLnk); index += EBT_SIZE; - CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< 设置接收数据状态为中断*/ - CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< 设置发送数据状态为中断*/ - CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< 清零无收数据周期数*/ - CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< 清零无发数据周期数*/ + CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< 锟斤拷锟矫斤拷锟斤拷锟斤拷锟斤拷状态为锟叫讹拷*/ + CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< 锟斤拷锟矫凤拷锟斤拷锟斤拷锟斤拷状态为锟叫讹拷*/ + CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ + CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< 锟斤拷锟斤拷锟睫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_EBT_MSG); break; case Fsfb_SendSSE: - /* 创建帧头 */ + /* 锟斤拷锟斤拷帧头 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSE_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSseMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); index +=SSE_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSE_MSG); @@ -354,7 +354,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* #if 0 if (CurFillLnk->FsfbLinInfo.RecvLinkStatus == Fsfb_SendBtm_Sbt) { - /* 发送SBT帧 */ + /* 锟斤拷锟斤拷SBT帧 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SBT_SIZE+2,&outMsg[index]); index+=4; retVal = CreateTsdOrSbtMsg(NULL,0,APPLCAT_BTM,&outMsg[index],&msgLen,CurFillLnk); @@ -380,42 +380,42 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } /*********************************************************************** -* 方法名 : BuildBtcBody -* 功能描述 :组建BTC帧的Body部分。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : BuildBtcBody +* 锟斤拷锟斤拷锟斤拷锟斤拷 :锟介建BTC帧锟斤拷Body锟斤拷锟街★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pOutDataBuff UINT8* OUT 输出数组 -* outDataLen UINT16* OUT 数据长度 -* 返回值 : 无 +* pOutDataBuff UINT8* OUT 锟斤拷锟斤拷锟斤拷锟 +* outDataLen UINT16* OUT 锟斤拷锟捷筹拷锟斤拷 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) { UINT8 index=0; #if 0 - /* 两个字节的Operation Type */ + /* 锟斤拷锟斤拷锟街节碉拷Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Buffer Type */ + /* 2锟斤拷锟街节碉拷Buffer Type */ ShortToChar(0x000A,&pOutDataBuff[index]); index+=2; - /* 2个字节的Sub_bufer Number Start */ + /* 2锟斤拷锟街节碉拷Sub_bufer Number Start */ ShortToChar(0x0001,&pOutDataBuff[index]); index+=2; - /* 2个字节的Number of Sub-buffer to Transmit */ + /* 2锟斤拷锟街节碉拷Number of Sub-buffer to Transmit */ ShortToChar(0xFFFF,&pOutDataBuff[index]); index+=2; #else - /* 两个字节的Operation Type */ + /* 锟斤拷锟斤拷锟街节碉拷Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Buffer Type */ + /* 2锟斤拷锟街节碉拷Buffer Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Sub_bufer Number Start */ + /* 2锟斤拷锟街节碉拷Sub_bufer Number Start */ ShortToChar(0,&pOutDataBuff[index]); index+=2; - /* 2个字节的Number of Sub-buffer to Transmit */ + /* 2锟斤拷锟街节碉拷Number of Sub-buffer to Transmit */ ShortToChar(0,&pOutDataBuff[index]); index+=2; #endif @@ -423,37 +423,37 @@ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) } /*********************************************************************** -* 方法名 : LnkInfoBuildFrame -* 功能描述 :组建输出给应用数据的帧头。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : LnkInfoBuildFrame +* 锟斤拷锟斤拷锟斤拷锟斤拷 :锟介建锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷莸锟街⊥凤拷锟 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* devName UINT16 IN 设备名称 -* msgLen UINT16 IN 数据长度 -* pOutDataBuff UINT8* OUT 输出数组 -* 返回值 : 无 +* devName UINT16 IN 锟借备锟斤拷锟斤拷 +* msgLen UINT16 IN 锟斤拷锟捷筹拷锟斤拷 +* pOutDataBuff UINT8* OUT 锟斤拷锟斤拷锟斤拷锟 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ void LnkInfoBuildFrame(UINT16 devName,UINT16 msgLen,UINT8* pOutDataBuff) { - /* 两个字节的帧头 */ + /* 锟斤拷锟斤拷锟街节碉拷帧头 */ ShortToChar(msgLen,pOutDataBuff); - /* 1个字节的设备类型, 1个字节的设备ID */ + /* 1锟斤拷锟街节碉拷锟借备锟斤拷锟斤拷, 1锟斤拷锟街节碉拷锟借备ID */ ComDevName2TypeId(devName,&pOutDataBuff[2],&pOutDataBuff[3]); } /*********************************************************************** - * 方法名 : FsfbAnalysisSseMsg - * 功能描述 : 本函数对收到的SSE消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisSseMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷SSE锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * FSFB_INFO_STRU *pFsfbStruct FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * FSFB_INFO_STRU *pFsfbStruct FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0:锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -466,7 +466,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 srcAddr =0; Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSE_SIZE-FSFB_CRC_16_LEN); crc16 = ShortFromCharLE(&pAppData[SSE_SIZE-FSFB_CRC_16_LEN]); if(calcCrc16 == crc16) @@ -474,46 +474,46 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO srcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); desAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat, pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(srcAddr,desAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoBySSE(pAppData,retLnkNodePtr); } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Node Not Exist.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } else { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -524,18 +524,18 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * 方法名 : FsfbAnalysisSsrMsg - * 功能描述 : 本函数对收到的SSR消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisSsrMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷SSR锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * pFsfbStruct FSFB_INFO_STRU* FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * pFsfbStruct FSFB_INFO_STRU* FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -546,67 +546,67 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 SrcAddr = 0; UINT16 DesAddr = 0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSR_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[SSR_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoBySsr(pAppData,applyCat,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -621,18 +621,18 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * 方法名 : FsfbAnalysisAbtMsg - * 功能描述 : 本函数对收到的ABT消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisAbtMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷ABT锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * pFsfbStruct FSFB_INFO_STRU* FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * pFsfbStruct FSFB_INFO_STRU* FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -644,13 +644,13 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,ABT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[ABT_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != ABT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -660,60 +660,60 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoByAbt(pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -724,18 +724,18 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * 方法名 : FsfbAnalysisEbtMsg - * 功能描述 : 本函数对收到的EBT消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisEbtMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷EBT锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName const UINT16 IN 设备名称 + * devName const UINT16 IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application Catory - * pAppData UINT8* IN 接收到的数据 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * pFsfbStruct FSFB_INFO_STRU * IN FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 锟斤拷锟秸碉拷锟斤拷锟斤拷锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * pFsfbStruct FSFB_INFO_STRU * IN FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -747,13 +747,13 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,EBT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[EBT_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != EBT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -763,58 +763,58 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoByEbt(devName,pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -825,25 +825,25 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * 方法名 : FsfbAnalysisBtdMsg - * 功能描述 : 本函数对收到的BTD消息进行解帧处理,取得相关信息, - 以及将数据按一定的格式输出。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisBtdMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷BTD锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较, + 锟皆硷拷锟斤拷锟斤拷锟捷帮拷一锟斤拷锟侥革拷式锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName const UINT16 IN 设备名称 + * devName const UINT16 IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application Catory - * pAppData UINT8* IN 接收到的数据 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * pFsfbStruct FSFB_INFO_STRU * IN FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 锟斤拷锟秸碉拷锟斤拷锟斤拷锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * pFsfbStruct FSFB_INFO_STRU * IN FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { UINT8 retVal = 0; - UINT16 calcCrc16=0; /* 存放计算的CRC值 */ - UINT16 crc16 =0; /* 接收数据中的CRC值 */ + UINT16 calcCrc16=0; /* 锟斤拷偶锟斤拷锟斤拷CRC值 */ + UINT16 crc16 =0; /* 锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷CRC值 */ Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; UINT16 SrcAddr = 0; UINT16 DesAddr = 0; @@ -852,17 +852,17 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO ComTypeId2DevName(pFsfbStruct->LocalType,pFsfbStruct->LocalID,&localDevName); - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,BTD_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[BTD_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != BTD_SDS)||(applyCat != APPLCAT_BTM)) { - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*输入BTD的长度错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*锟斤拷锟斤拷BTD锟侥筹拷锟饺达拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, tmpSds); PrintRecArrayByte(RecordArray, RecordArraySize, applyCat); @@ -872,44 +872,44 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 检查BTD信息是否合法 */ + /* 锟斤拷锟紹TD锟斤拷息锟角凤拷戏锟 */ retVal=FsfbCheckBtdMsg(pAppData,retLnkNodePtr,pFsfbStruct); if (retVal == 1) { - /* 将上次接收到报文本地时间更新为当前周期号 */ + /* 锟斤拷锟较次斤拷锟秸碉拷锟斤拷锟侥憋拷锟斤拷时锟斤拷锟斤拷锟轿拷锟角帮拷锟斤拷诤锟 */ retLnkNodePtr->FsfbLinInfo.TimeStmp.LastLocalRecTC =*pFsfbStruct->CycleNum; - /* 无数据周期设定为0 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借定为0 */ retLnkNodePtr->FsfbLinInfo.NoRecvDataCycleNum = 0; retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; retLnkNodePtr->IsSendFlag = 1; - /* 处理成功 */ + /* 锟斤拷锟斤拷锟缴癸拷 */ retVal =1; } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:BTD InVaild.\n"); #endif - /* 验证失败 */ + /* 锟斤拷证失锟斤拷 */ retVal =0; } } @@ -918,20 +918,20 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO { retVal = 0; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ - /* 记录通信节点不合法 */ + /* 锟斤拷录通锟脚节点不锟较凤拷 */ } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { retVal = 0; - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Tsd CRC Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -939,51 +939,51 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO return retVal; } /*-------------------------------------------------------------------- - * 报文创建模块外部接口函数 End + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟解部锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * 报文创建模块内部接口函数 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** -* 方法名 : CreateTsdOrSbtMsg -* 功能描述 : 根据应用数据 作成 TSD或SBT报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateTsdOrSbtMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 TSD锟斤拷SBT锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pAppData const UINT8* IN 应用层到Rssp层的输入队列队列节点 -* DataLen UINT8 IN 数组pAppData的数据长度 -* OutTsdOrSbtMsg UINT8* OUT FSFD消息帧 -* outPutDataLen UINT16* OUT 输出报文长度 -* pPNode Lnk_Info_Node_Stru_WL** OUT 更新对应节点的索引,如果不存在返回 -1 +* pAppData const UINT8* IN 应锟矫层到Rssp锟斤拷锟斤拷锟斤拷锟斤拷锟叫讹拷锟叫节碉拷 +* DataLen UINT8 IN 锟斤拷锟斤拷pAppData锟斤拷锟斤拷锟捷筹拷锟斤拷 +* OutTsdOrSbtMsg UINT8* OUT FSFD锟斤拷息帧 +* outPutDataLen UINT16* OUT 锟斤拷锟斤拷锟斤拷某锟斤拷锟 +* pPNode Lnk_Info_Node_Stru_WL** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFB消息CRC */ - UINT32 CRCM[2] ={0}; /* CRCM数组 */ + UINT16 CRC16 = 0; /* FSFB锟斤拷息CRC */ + UINT32 CRCM[2] ={0}; /* CRCM锟斤拷锟斤拷 */ pPNode->Applcat = applyCat; switch(applyCat) { case APPLCAT_BTM: *outPutDataLen = SBT_SIZE; - /* 链路状态设置 */ + /* 锟斤拷路状态锟斤拷锟斤拷 */ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_SbtAbt; - /* 设定SBT帧头 */ + /* 锟借定SBT帧头 */ SetFsfbMsgHead(applyCat,FSFB_SBT_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); ret=1; break; case APPLCAT_TDM: *outPutDataLen = TSD_SIZE; - /*链路状态设置*/ + /*锟斤拷路状态锟斤拷锟斤拷*/ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSse; - /* 设置TSD帧头 */ + /* 锟斤拷锟斤拷TSD帧头 */ SetFsfbMsgHead(applyCat,FSFB_TSD_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); - /*判断数据长度是否为TSD 的数据长度 */ + /*锟叫讹拷锟斤拷锟捷筹拷锟斤拷锟角凤拷为TSD 锟斤拷锟斤拷锟捷筹拷锟斤拷 */ if(DataLen != TSD_DF_SIZE) { ret =0; @@ -998,19 +998,19 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ret = 0; break; } - /* Body 设定 + /* Body 锟借定 * ------------------------------------------------------------------ - * 计数器 | SDS | 安全数据长度 | CRCM_1 | CRCM_2 | 应用数据 | - * 4字节 | 2字节 | 2字节 | 4字节 | 4字节 | 36字节 | + * 锟斤拷锟斤拷锟斤拷 | SDS | 锟斤拷全锟斤拷锟捷筹拷锟斤拷 | CRCM_1 | CRCM_2 | 应锟斤拷锟斤拷锟斤拷 | + * 4锟街斤拷 | 2锟街斤拷 | 2锟街斤拷 | 4锟街斤拷 | 4锟街斤拷 | 36锟街斤拷 | * ------------------------------------------------------------------ */ - /* 应用数据 */ - /* 从pAppData开始拷贝 MsgLen个应用数据到 报文里 */ + /* 应锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷pAppData锟斤拷始锟斤拷锟斤拷 MsgLen锟斤拷应锟斤拷锟斤拷锟捷碉拷 锟斤拷锟斤拷锟斤拷 */ if(ret != 0) { if(DataLen ==0) { - /* 组建SBT帧的body */ + /* 锟介建SBT帧锟斤拷body */ DataLen = SBT_DF_SIZE; BuildSbtFrameDf(pPNode,&OutTsdOrSbtMsg[FSFB_DATA_POS]); } @@ -1019,7 +1019,7 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ComMemCopy(pAppData, & OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen); } - /* 计算CRCM值,(肯定返回1 ) */ + /* 锟斤拷锟斤拷CRCM值,(锟较讹拷锟斤拷锟斤拷1 ) */ ret = ComCalcCRCM(&OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen, @@ -1027,21 +1027,21 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 计数器 设定 4字节 */ + /* 锟斤拷锟斤拷锟斤拷 锟借定 4锟街斤拷 */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutTsdOrSbtMsg[FSFB_TC_POS]); - /* 安全数据长度 应用数据+ 2个CRCM长度 2字节 */ + /* 锟斤拷全锟斤拷锟捷筹拷锟斤拷 应锟斤拷锟斤拷锟斤拷+ 2锟斤拷CRCM锟斤拷锟斤拷 2锟街斤拷 */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutTsdOrSbtMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 设定 4 字节 */ + /* CRCM[0] CRCM[1] 锟借定 4 锟街斤拷 */ LongToCharLE(CRCM[0],&OutTsdOrSbtMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutTsdOrSbtMsg[FSFB_CRCM_2_POS]); - /* 16位 CRC 设定 2 字节 */ + /* 16位 CRC 锟借定 2 锟街斤拷 */ CRC16 = ComComputeMsgCRC16(OutTsdOrSbtMsg,(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)); ShortToCharLE(CRC16,&OutTsdOrSbtMsg[(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)]); - /* 无发送应用数据置为 0 */ + /* 锟睫凤拷锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷为 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; ret = 1; } @@ -1055,87 +1055,87 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) UINT16 index =0; UINT32 crcValue =0; - /* 将数组初始化为 0 */ + /* 锟斤拷锟斤拷锟斤拷锟绞硷拷锟轿 0 */ ComMemSet(pMsgDataBuff,SBT_DF_SIZE,0); - /* 2个字节的源地址 */ + /* 2锟斤拷锟街节碉拷源锟斤拷址 */ ShortToCharLE(pNode->FsfbLinInfo.sendSrcAdd,pMsgDataBuff+index); index +=2; - /* 1个字节的 record Flag 1代表无记录 0代表有记录 */ + /* 1锟斤拷锟街节碉拷 record Flag 1锟斤拷锟斤拷锟睫硷拷录 0锟斤拷锟斤拷锟叫硷拷录 */ pMsgDataBuff[index]=0x01; index+=1; - /* 1个字节的预留 */ + /* 1锟斤拷锟街节碉拷预锟斤拷 */ index+=1; - /* 8个字节的Channel1&2 SID */ + /* 8锟斤拷锟街节碉拷Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[1],pMsgDataBuff+index); index +=4; - /* 8个字节的Channel1&2 SINIT */ + /* 8锟斤拷锟街节碉拷Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[1],pMsgDataBuff+index); index +=4; - /* 1个字节的最大生命周期 */ + /* 1锟斤拷锟街节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1个字节的Delta Time Counter max */ + /* 1锟斤拷锟街节碉拷Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2个字节预留 */ + /* 2锟斤拷锟街斤拷预锟斤拷 */ index +=2; - /* 8个字节的Channel1&2 DATAVER */ + /* 8锟斤拷锟街节碉拷Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 28个字节的预留 */ + /* 28锟斤拷锟街节碉拷预锟斤拷 */ index +=28; - /* 1个字节的 NUM_DATAVER */ + /* 1锟斤拷锟街节碉拷 NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3个字节预留 */ + /* 3锟斤拷锟街斤拷预锟斤拷 */ index +=3; - /* 1个字节的WorldFip Periodic variable Address */ + /* 1锟斤拷锟街节碉拷WorldFip Periodic variable Address */ pMsgDataBuff[index++]=0x01; - /* 1个字节 Segment */ + /* 1锟斤拷锟街斤拷 Segment */ index+=1; - /* 2个字节 FSFB2源地址 */ + /* 2锟斤拷锟街斤拷 FSFB2源锟斤拷址 */ ShortToCharLE(pNode->FsfbLinInfo.sendDestAdd,pMsgDataBuff+index); index +=2; - /* 8个字节的Channel1&2 SID */ + /* 8锟斤拷锟街节碉拷Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[1],pMsgDataBuff+index); index +=4; - /* 8个字节的Channel1&2 SINIT */ + /* 8锟斤拷锟街节碉拷Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[1],pMsgDataBuff+index); index +=4; - /* 1个字节预留 */ + /* 1锟斤拷锟街斤拷预锟斤拷 */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1个字节的Delta Time Counter max */ + /* 1锟斤拷锟街节碉拷Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2个字节预留 */ + /* 2锟斤拷锟街斤拷预锟斤拷 */ index +=2; - /* 8个字节的Channel1&2 DATAVER */ + /* 8锟斤拷锟街节碉拷Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 1个字节的 NUM_DATAVER */ + /* 1锟斤拷锟街节碉拷 NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3个字节预留 */ + /* 3锟斤拷锟街斤拷预锟斤拷 */ index +=3; - /* 8个字节的SYSCKW + /* 8锟斤拷锟街节碉拷SYSCKW D channel 1&2 */ LongToCharLE(COM_SYS_CHK_WD_1,pMsgDataBuff+index); index +=4; LongToCharLE(COM_SYS_CHK_WD_2,pMsgDataBuff+index); index +=4; - /* 4个字节的CRC_1 */ + /* 4锟斤拷锟街节碉拷CRC_1 */ crcValue =Crc32(pMsgDataBuff,index); LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; - /* 4个字节的CRC_2 */ + /* 4锟斤拷锟街节碉拷CRC_2 */ LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; if (index != SBT_DF_SIZE) @@ -1148,46 +1148,46 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) } /*********************************************************************** -* 方法名 : CreateSseMsg -* 功能描述 : 根据应用数据 作成SSE报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateSseMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷SSE锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 -* outSseMsg UINT8* OUT FSFD消息帧 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 +* outSseMsg UINT8* OUT FSFD锟斤拷息帧 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSseMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqEng=0;/* 临时保存SEQENQ */ - /* 通信状态信息设置 */ - /* 设置Application cat */ + UINT32 tmpSeqEng=0;/* 锟斤拷时锟斤拷锟斤拷SEQENQ */ + /* 通锟斤拷状态锟斤拷息锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷Application锟斤拷cat */ pLnkNodeInfo->Applcat = applyCate; - /* 设定接收节点为等待SSR*/ + /* 锟借定锟斤拷锟秸节碉拷为锟饺达拷SSR*/ pLnkNodeInfo->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSSR; pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; - /* 通信节点未接受数据设置为0 */ + /* 通锟脚节碉拷未锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为0 */ pLnkNodeInfo->FsfbLinInfo.NoRecvDataCycleNum =0; pLnkNodeInfo->IsSendFlag=0; - /* SSE 请求时间周期和对应的时间设置 */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* 对应计数器值,用来验证SSR报文里的计数器值 */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* 对应的时间戳,收到SSR时计算初始SINIT值 */ + /* SSE 锟斤拷锟斤拷时锟斤拷锟斤拷锟节和讹拷应锟斤拷时锟斤拷锟斤拷锟斤拷 */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* 锟斤拷应锟斤拷锟斤拷锟斤拷值锟斤拷锟斤拷锟斤拷锟斤拷证SSR锟斤拷锟斤拷锟斤拷募锟斤拷锟斤拷锟街 */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* 锟斤拷应锟斤拷时锟斤拷锟斤拷锟斤拷盏锟絊SR时锟斤拷锟斤拷锟绞糞INIT值 */ pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]=pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; - /* 帧头信息设定 */ + /* 帧头锟斤拷息锟借定 */ SetFsfbMsgHead(applyCate,FSFB_SSE_MSG,pLnkNodeInfo->FsfbLinInfo.sendSrcAdd,pLnkNodeInfo->FsfbLinInfo.sendDestAdd,outSseMsg); - /* Boby 设定 */ - /*计数器 4*/ + /* Boby 锟借定 */ + /*锟斤拷锟斤拷锟斤拷 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC,&outSseMsg[FSFB_TC_POS]); /* SEQENQ_1 4*/ @@ -1198,7 +1198,7 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, tmpSeqEng = pLnkNodeInfo->FsfbLinInfo.LocalNode.SIDr[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]; LongToCharLE(tmpSeqEng,&outSseMsg[FSFB_SSE_ENQ_2_POS]); - /* CRC 设定 */ + /* CRC 锟借定 */ crc16 = ComComputeMsgCRC16(outSseMsg,SSE_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSseMsg[SSE_SIZE-FSFB_CRC_16_LEN]); @@ -1208,25 +1208,25 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* 方法名 : CreateSsrMsg -* 功能描述 : 根据应用数据 作成 SSR报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateSsrMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 SSR锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 -* OutSsrMsg UINT8* OUT FSFD消息帧 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 +* OutSsrMsg UINT8* OUT FSFD锟斤拷息帧 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSsrMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqIni=0;/* 临时保存SEQIni */ - /* 通信状态信息设置 */ - /* 设置Application cat */ + UINT32 tmpSeqIni=0;/* 锟斤拷时锟斤拷锟斤拷SEQIni */ + /* 通锟斤拷状态锟斤拷息锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷Application锟斤拷cat */ pLnkNodeInfo->Applcat = applyCate; - /* 设定接收节点为等待SSR*/ + /* 锟借定锟斤拷锟秸节碉拷为锟饺达拷SSR*/ if (applyCate == APPLCAT_TDM) { pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; @@ -1238,14 +1238,14 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, pLnkNodeInfo->IsSendFlag=1; } - /* 帧头信息设定 */ + /* 帧头锟斤拷息锟借定 */ SetFsfbMsgHead(applyCate,FSFB_SSR_MSG,pLnkNodeInfo->FsfbLinInfo.rcvDestAdd,pLnkNodeInfo->FsfbLinInfo.rcvSrcAdd,outSsrMsg); - /* Boby 设定 */ - /*计数器 replier 4*/ + /* Boby 锟借定 */ + /*锟斤拷锟斤拷锟斤拷 replier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC,&outSsrMsg[FSFB_TC_POS]); - /*计数器 enqurier 4*/ + /*锟斤拷锟斤拷锟斤拷 enqurier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.RecvSseTCe,&outSsrMsg[FSFB_SSR_TCENQ_POS]); /* SEQENQ_1 4*/ @@ -1258,10 +1258,10 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, ^pLnkNodeInfo->FsfbLinInfo.LocalNode.DATAVER[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; LongToCharLE(tmpSeqIni,&outSsrMsg[FSFB_SSR_ENQ_2_POS]); - /* NUM_DATAVER 设定 两个信道一致 */ + /* NUM_DATAVER 锟借定 锟斤拷锟斤拷锟脚碉拷一锟斤拷 */ outSsrMsg[FSFB_SSR_NUM_POS]=pLnkNodeInfo->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* CRC 设定 */ + /* CRC 锟借定 */ crc16 = ComComputeMsgCRC16(outSsrMsg,SSR_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSsrMsg[SSR_SIZE-FSFB_CRC_16_LEN]); @@ -1271,45 +1271,45 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* 方法名 : CreateBtmMsg -* 功能描述 : 根据BTM的SBT格式作成报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateBtmMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷BTM锟斤拷SBT锟斤拷式锟斤拷锟缴憋拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* DataLen UINT16 IN 数据长度 -* userDataLen UINT16 IN 数据部分大小 -* OutBtmMsg UINT8* OUT FSFD消息帧 -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 +* DataLen UINT16 IN 锟斤拷锟捷筹拷锟斤拷 +* userDataLen UINT16 IN 锟斤拷锟捷诧拷锟街达拷小 +* OutBtmMsg UINT8* OUT FSFD锟斤拷息帧 +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 -* 关于节点问题需要进行考虑(Todo) -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟节节碉拷锟斤拷锟斤拷锟斤拷要锟斤拷锟叫匡拷锟角o拷Todo锟斤拷 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLen,UINT8 messType, UINT8 *OutBtmMsg, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFB消息CRC */ - UINT32 CRCM[2] ={0}; /* CRCM数组 */ /* 应用数据长度 */ + UINT16 CRC16 = 0; /* FSFB锟斤拷息CRC */ + UINT32 CRCM[2] ={0}; /* CRCM锟斤拷锟斤拷 */ /* 应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ if (pPNode != NULL) { - /* 帧头设定 */ + /* 帧头锟借定 */ SetFsfbMsgHead(APPLCAT_BTM,messType, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutBtmMsg); - /* Body 设定 + /* Body 锟借定 * ------------------------------------------------------------------ - * 计数器 | SDS | 安全数据长度 | CRCM_1 | CRCM_2 | 应用数据 | - * 4字节 | 2字节 | 2字节 | 4字节 | 4字节 | 36字节 | + * 锟斤拷锟斤拷锟斤拷 | SDS | 锟斤拷全锟斤拷锟捷筹拷锟斤拷 | CRCM_1 | CRCM_2 | 应锟斤拷锟斤拷锟斤拷 | + * 4锟街斤拷 | 2锟街斤拷 | 2锟街斤拷 | 4锟街斤拷 | 4锟街斤拷 | 36锟街斤拷 | * ------------------------------------------------------------------ */ - /* 应用数据 */ - /* 从pAppData开始拷贝 MsgLen个应用数据到 报文里 */ + /* 应锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷pAppData锟斤拷始锟斤拷锟斤拷 MsgLen锟斤拷应锟斤拷锟斤拷锟捷碉拷 锟斤拷锟斤拷锟斤拷 */ if(userDataLen == DataLen) { ComMemCopy(pAppData, &OutBtmMsg[FSFB_DATA_POS],DataLen); - /* 计算CRCM值,(肯定返回1 ) */ + /* 锟斤拷锟斤拷CRCM值,(锟较讹拷锟斤拷锟斤拷1 ) */ if((messType == FSFB_BTC_MSG)||(messType == FSFB_EBT_MSG)) { ComAddTimeStamp(&pPNode->FsfbLinInfo.TimeStmp); @@ -1320,21 +1320,21 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 计数器 设定 4字节 */ + /* 锟斤拷锟斤拷锟斤拷 锟借定 4锟街斤拷 */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutBtmMsg[FSFB_TC_POS]); - /* 安全数据长度 应用数据+ 2个CRCM长度 2字节 */ + /* 锟斤拷全锟斤拷锟捷筹拷锟斤拷 应锟斤拷锟斤拷锟斤拷+ 2锟斤拷CRCM锟斤拷锟斤拷 2锟街斤拷 */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutBtmMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 设定 4 字节 */ + /* CRCM[0] CRCM[1] 锟借定 4 锟街斤拷 */ LongToCharLE(CRCM[0],&OutBtmMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutBtmMsg[FSFB_CRCM_2_POS]); - /* 16位 CRC 设定 2 字节 */ + /* 16位 CRC 锟借定 2 锟街斤拷 */ CRC16 = ComComputeMsgCRC16(OutBtmMsg,(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)); ShortToCharLE(CRC16,&OutBtmMsg[(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)]); - /* 无发送应用数据置为 0 */ + /* 锟睫凤拷锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷为 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; pPNode->IsSendFlag=0; /*pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_AbtOrSse;*/ @@ -1343,7 +1343,7 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe } else { - /* 增加错误记录码 */ + /* 锟斤拷锟接达拷锟斤拷锟铰硷拷锟 */ ret = 0; } } @@ -1351,61 +1351,61 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe return ret; } /*********************************************************************** -* 方法名 : SetFsfbMsgHead -* 功能描述 : Fsfb消息帧头作成。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : SetFsfbMsgHead +* 锟斤拷锟斤拷锟斤拷锟斤拷 : Fsfb锟斤拷息帧头锟斤拷锟缴★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- -* applCat UINT8 IN 应用策略 -* MsgType UINT8 IN 消息类型 -* SrcAddr UINT16 IN 源地址 -* DestAddr UINT16 IN 目标地址 -* OutFsfbMsg UINT8* OUT Fsfb消息帧 -* 返回值 : 无 +* applCat UINT8 IN 应锟矫诧拷锟斤拷 +* MsgType UINT8 IN 锟斤拷息锟斤拷锟斤拷 +* SrcAddr UINT16 IN 源锟斤拷址 +* DestAddr UINT16 IN 目锟斤拷锟街 +* OutFsfbMsg UINT8* OUT Fsfb锟斤拷息帧 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ static void SetFsfbMsgHead(UINT8 applCat,UINT8 MsgType, UINT16 SrcAddr, UINT16 DestAddr, UINT8 *OutFsfbMsg) { OutFsfbMsg[FSFB_APP_CTGRY_POS] = applCat; /* signaling variables */ - OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* 消息类型设定 */ - ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* 设定源地址,LITTLE endian */ - ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* 设定源地址,LITTLE endian */ + OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* 锟斤拷息锟斤拷锟斤拷锟借定 */ + ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* 锟借定源锟斤拷址锟斤拷LITTLE endian */ + ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* 锟借定源锟斤拷址锟斤拷LITTLE endian */ } /*********************************************************************** - * 方法名 : FsfbCheckBtdMsg - * 功能描述 : 验证BTD报文的正确性。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbCheckBtdMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷证BTD锟斤拷锟侥碉拷锟斤拷确锟皆★拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pBsdMsg const UINT8 * IN Bsd报文 - * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB链路信息 - * pFsfbStruct FSFB_INFO_STRU * INOUT 协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pBsdMsg const UINT8 * IN Bsd锟斤拷锟斤拷 + * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB锟斤拷路锟斤拷息 + * pFsfbStruct FSFB_INFO_STRU * INOUT 协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkNode, FSFB_INFO_STRU *pFsfbStruct) { - UINT8 retVal = 1; /* 初始化为正常返回 */ + UINT8 retVal = 1; /* 锟斤拷始锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷 */ UINT8 tmpret = 0; - INT32 DelayTCr = 0; /* 丢包数 */ - INT32 Tout = 0; /* 距离上次收到报文的时间差 */ - UINT32 TCr = 0; /* 报文时钟 */ - UINT32 SidXorTn[2] = {0}; /* SID XOR TN :BSD报文计算出来 */ - ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* 时间戳结构体 */ - const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* 节点基本信息结构体 */ + INT32 DelayTCr = 0; /* 锟斤拷锟斤拷锟斤拷 */ + INT32 Tout = 0; /* 锟斤拷锟斤拷锟较达拷锟秸碉拷锟斤拷锟侥碉拷时锟斤拷锟 */ + UINT32 TCr = 0; /* 锟斤拷锟斤拷时锟斤拷 */ + UINT32 SidXorTn[2] = {0}; /* SID XOR TN 锟斤拷BSD锟斤拷锟侥硷拷锟斤拷锟斤拷锟 */ + ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* 时锟斤拷锟斤拷峁癸拷锟 */ + const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* 锟节碉拷锟斤拷锟斤拷锟较拷峁癸拷锟 */ UINT8 *RecordArray = pFsfbStruct->RecordArray; UINT16 RecordArraySize = pFsfbStruct->RecordArraySize; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*输入BTD收状态*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*锟斤拷锟斤拷BTD锟斤拷状态*/ PrintRecArrayByte(RecordArray, RecordArraySize, pLnkNode->FsfbLinInfo.RecvLinkStatus); - /* 通信节点接受状态为 接收数据状态 */ + /* 通锟脚节碉拷锟斤拷锟阶刺 锟斤拷锟斤拷锟斤拷锟斤拷状态 */ if( Fsfb_RecvData == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - /* 报文时钟 */ + /* 锟斤拷锟斤拷时锟斤拷 */ TCr = LongFromCharLE(&pBtdMsg[FSFB_TC_POS]); /* - * 如果和上次报文的时钟一致(即同一周期内同时受到BSD报文和SSR报文),则丢弃该报文 - * 否则 检查丢包数是否超时 + * 锟斤拷锟斤拷锟斤拷洗伪锟斤拷牡锟绞憋拷锟揭伙拷锟(锟斤拷同一锟斤拷锟斤拷锟斤拷同时锟杰碉拷BSD锟斤拷锟侥猴拷SSR锟斤拷锟斤拷)锟斤拷锟斤拷锟斤拷锟矫憋拷锟斤拷 + * 锟斤拷锟斤拷 锟斤拷槎拷锟斤拷锟斤拷欠锟绞 */ if( TCr != pTmStmp->NowRecvTCr) { @@ -1418,7 +1418,7 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN if(DelayTCr >= 0) { - /* 报文超时 检查 */ + /* 锟斤拷锟侥筹拷时 锟斤拷锟 */ if(pTmStmp->LastLocalRecTC != *pFsfbStruct->CycleNum) { Tout = ComCheckTimeStamp(*pFsfbStruct->CycleNum, @@ -1426,29 +1426,29 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { - /* 说明本周期已经收到一帧旧数据,不需要在做超时检查 */ + /* 说锟斤拷锟斤拷锟斤拷锟斤拷锟窖撅拷锟秸碉拷一帧锟斤拷锟斤拷锟捷o拷锟斤拷锟斤拷要锟斤拷锟斤拷锟斤拷时锟斤拷锟 */ Tout = 0; } - if (Tout >= 0) /* 合法时间内收到报文 */ + if (Tout >= 0) /* 锟较凤拷时锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 */ { - /* 从RSD报文里取得SID XOR TN :CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ + /* 锟斤拷RSD锟斤拷锟斤拷锟斤拷取锟斤拷SID XOR TN 锟斤拷CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ tmpret = ComGetSidXorTn(pBtdMsg, SidXorTn); - /* 检验CRCM的有效性 */ + /* 锟斤拷锟斤拷CRCM锟斤拷锟斤拷效锟斤拷 */ retVal = ComCheckCRCM(SidXorTn, pTmStmp->NowSINIT_ADD_SID_XOR_Tn, DelayTCr, pNodeParam->TSD_POST_RXDADA_K); - if ((1 == retVal) && (tmpret == 1)) /* 检查成功 则更新相应信息 */ + if ((1 == retVal) && (tmpret == 1)) /* 锟斤拷锟缴癸拷 锟斤拷锟斤拷锟斤拷锟接︼拷锟较 */ { - /* 更新时间戳结构体 : pTmStmpStru非空,返回值肯定为1 */ + /* 锟斤拷锟斤拷时锟斤拷锟斤拷峁癸拷锟 : pTmStmpStru锟角空o拷锟斤拷锟斤拷值锟较讹拷为1 */ retVal = ComUpdtTmStmpStru(SidXorTn, TCr, DelayTCr, pNodeParam->PREC_SINIT_K, pTmStmp); - retVal = 1; /* 正常处理 */ + retVal = 1; /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } else { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray, RecordArraySize, "W:CRCM Error.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*输入BTD的SVC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[0]); /*sidXorTn[0]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[1]); /*sidXorTn[1]*/ @@ -1456,20 +1456,20 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowSINIT_ADD_SID_XOR_Tn[1]); /*NowSINIT_ADD_SID_XOR_Tn[1]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ - PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*输入BTD的SVC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* 检查失败 错误返回 */ + /* 锟斤拷锟绞э拷锟 锟斤拷锟襟返伙拷 */ retVal = 0; } } - else /* 超时 */ + else /* 锟斤拷时 */ { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Time Out.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*输入BTD延迟超容忍*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*锟斤拷锟斤拷BTD锟接迟筹拷锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, *pFsfbStruct->CycleNum); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->LastLocalRecTC); /*NowRecvTCr*/ @@ -1481,30 +1481,30 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray, RecordArraySize, "DelayTCr > MaxLost\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*输入BTD丢失超容忍*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*锟斤拷锟斤拷BTD锟斤拷失锟斤拷锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* 丢包数超过 最大的丢包数 重发SSE进行同步 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷锟侥讹拷锟斤拷锟斤拷 锟截凤拷SSE锟斤拷锟斤拷同锟斤拷 */ pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; retVal = 0; } } else if( Fsfb_Halt == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* 状态设置为发送SBT */ + pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* 状态锟斤拷锟斤拷为锟斤拷锟斤拷SBT */ retVal = 0; } - else /* 其他状态丢弃数据 */ + else /* 锟斤拷锟斤拷状态锟斤拷锟斤拷锟斤拷锟斤拷 */ { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:RecvStatus() not RecvData or Halt.Discard Bsd Msg."); PrintFileHex(RecordArray,RecordArraySize,&pLnkNode->FsfbLinInfo.RecvLinkStatus,1); PrintFiles(RecordArray,RecordArraySize,"\n"); @@ -1515,5 +1515,5 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN return retVal; } /*-------------------------------------------------------------------- - * 报文创建模块内部接口函数 END + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟接口猴拷锟斤拷 END *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c index 484dd2f..ce6a5b4 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c @@ -1,55 +1,55 @@ /** ****************************************************** * -* 文件名 : FsfbProtcl.c -* 版权说明: 北京交控科技有限公司 -* 版本号 : 1.0 -* 创建时间: 2013.09.05 -* 作者 : 王佩佩 -* 功能描述: FSFB协议实现 -* 使用注意: +* 锟侥硷拷锟斤拷 锟斤拷 FsfbProtcl.c +* 锟斤拷权说锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟截科硷拷锟斤拷锟睫癸拷司 +* 锟芥本锟斤拷 锟斤拷 1.0 +* 锟斤拷锟斤拷时锟戒: 2013.09.05 +* 锟斤拷锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 FSFB协锟斤拷实锟斤拷 +* 使锟斤拷注锟解: * -* 修改记录: -* 2014.5.21 刘巧瑞 -* 修改内容:在FsfbProtclRefreshLnk()函数中增加了: tmpInput = ShortFromChar(pLnkStatusData); -* 修改理由:之前没有获取跟随数据的长度,造成无法实现跟随 +* 锟睫改硷拷录锟斤拷 +* 2014.5.21 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷锟斤拷FsfbProtclRefreshLnk锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟剿o拷 tmpInput = ShortFromChar(pLnkStatusData); +* 锟睫革拷锟斤拷锟缴o拷之前没锟叫伙拷取锟斤拷锟斤拷锟斤拷锟捷的筹拷锟饺o拷锟斤拷锟斤拷薹锟绞碉拷指锟斤拷锟 -* 2014.5.21 刘巧瑞 -* 修改内容:在FsfbProtclRefreshLnk()函数中, -* 调用FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); -* 改为FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); -* 之前由于刷新信息的索引一直为改变造成刷新不完全的情况 - 修改理由: 之前由于刷新信息的索引一直为改变造成刷新不完全的情况 +* 2014.5.21 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷锟斤拷FsfbProtclRefreshLnk锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷 +* 锟斤拷锟斤拷FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); +* 锟斤拷为FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); +* 之前锟斤拷锟斤拷刷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷一直为锟侥憋拷锟斤拷锟剿拷虏锟斤拷锟饺拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 之前锟斤拷锟斤拷刷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷一直为锟侥憋拷锟斤拷锟剿拷虏锟斤拷锟饺拷锟斤拷锟斤拷 -* 2014.5.30 刘巧瑞 - 修改内容: 在FsfbStructInit()中: pFsfbStruct->AppArray的长度字段初始化为0 - 修改理由: 长度为4个字节long +* 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbStructInit()锟斤拷: pFsfbStruct->AppArray锟侥筹拷锟斤拷锟街段筹拷始锟斤拷为0 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷锟斤拷为4锟斤拷锟街斤拷long 之前:ShortToChar(0, pFsfbStruct->AppArray); - 改为:LongToChar(0, pFsfbStruct->AppArray); + 锟斤拷为:LongToChar(0, pFsfbStruct->AppArray); - 2014.5.30 刘巧瑞 - 修改内容: 在FsfbStructInit()中添加了pFsfbStruct->VarArray的长度字段的初始化 - 修改理由: 初始化时长度应该被初始化 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbStructInit()锟斤拷锟斤拷锟斤拷锟斤拷pFsfbStruct->VarArray锟侥筹拷锟斤拷锟街段的筹拷始锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷始锟斤拷时锟斤拷锟斤拷应锟矫憋拷锟斤拷始锟斤拷 - 2014.5.30 刘巧瑞 - 修改内容:在FsfbStructInit()中的"分配链路管理表堆栈空间"模块 - 调用了堆栈初始化函数,来完成堆栈初始化 - 修改理由:这样会使代码更清晰和模块化 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷FsfbStructInit()锟叫碉拷"锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸硷拷"模锟斤拷 + 锟斤拷锟斤拷锟剿讹拷栈锟斤拷始锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷啥锟秸伙拷锟绞硷拷锟 + 锟睫革拷锟斤拷锟斤拷:锟斤拷锟斤拷锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥o拷榛 - 2014.5.30 刘巧瑞 - 修改内容:在FsfbStructInit()中的"临时报文缓存区"模块添加了 - 临时缓冲区内存空间的初始化 - 修改理由:新开辟的内存空间应该进行初始化 - 2014.8.05 刘巧瑞 - 修改内容:ReadQueueData()函数中,修改了BTD分支的返回值,如果BTD验证不通过, - 只是将其简单的丢弃,不会造成宕机。 - 修改理由:需求需要 - 2014.8.05 刘巧瑞 - 修改内容:ReadQueueData()函数中,当一帧数据长度:读出的数据长度+2大于输入的最大长度时, - 将此帧数据丢掉,继续执行 - 修改理由:之前未做此分支处理 - 2014.8.14 刘巧瑞 - 修改内容:FsfbProtclOutPut()中取出每一帧,对此帧数据长度进行验证不合法丢弃此数据帧 - 修改理由:之前只是对第一帧做了数据长度防护,没有对其他帧做数据长度防护且对不合法帧没有进行相应处理 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷FsfbStructInit()锟叫碉拷"锟斤拷时锟斤拷锟侥伙拷锟斤拷锟斤拷"模锟斤拷锟斤拷锟斤拷锟斤拷 + 锟斤拷时锟斤拷锟斤拷锟斤拷锟节达拷占锟侥筹拷始锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟铰匡拷锟劫碉拷锟节达拷占锟接︼拷媒锟斤拷谐锟绞硷拷锟 + 2014.8.05 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:ReadQueueData()锟斤拷锟斤拷锟叫o拷锟睫革拷锟斤拷BTD锟斤拷支锟侥凤拷锟斤拷值锟斤拷锟斤拷锟紹TD锟斤拷证锟斤拷通锟斤拷锟斤拷 + 只锟角斤拷锟斤拷虻サ亩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宕伙拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷锟斤拷锟斤拷要 + 2014.8.05 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:ReadQueueData()锟斤拷锟斤拷锟叫o拷锟斤拷一帧锟斤拷锟捷筹拷锟斤拷:锟斤拷锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷+2锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟襟长讹拷时锟斤拷 + 锟斤拷锟斤拷帧锟斤拷锟捷讹拷锟斤拷锟斤拷锟斤拷锟斤拷执锟斤拷 + 锟睫革拷锟斤拷锟斤拷:之前未锟斤拷锟剿凤拷支锟斤拷锟斤拷 + 2014.8.14 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟捷o拷FsfbProtclOutPut锟斤拷锟斤拷锟斤拷取锟斤拷每一帧锟斤拷锟皆达拷帧锟斤拷锟捷筹拷锟饺斤拷锟斤拷锟斤拷证锟斤拷锟较凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷帧 + 锟睫革拷锟斤拷锟缴o拷之前只锟角对碉拷一帧锟斤拷锟斤拷锟斤拷锟捷筹拷锟饺凤拷锟斤拷锟斤拷没锟叫讹拷锟斤拷锟斤拷帧锟斤拷锟斤拷锟捷筹拷锟饺凤拷锟斤拷锟揭对诧拷锟较凤拷帧没锟叫斤拷锟斤拷锟斤拷应锟斤拷锟斤拷 * ------------ ------ --------------- ********************************************************/ #include "string.h" @@ -58,14 +58,14 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbProtclCommon.h" #include "FsfbLnkNodeMgr.h" #include "FsfbMessageInfo.h" #include "RpHandleInterface.h" /*-------------------------------------------------------------------- - * FSFB协议内部函数申明 Start + * FSFB协锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 Start *--------------------------------------------------------------------*/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct); static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct); @@ -76,21 +76,21 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb); static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx); /*-------------------------------------------------------------------- - * FSFB协议内部函数申明 End + * FSFB协锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFB协议外部接口函数 Start + * FSFB协锟斤拷锟解部锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /****************************************************************************************** -* 功能描述 : 协议初始化函数 - 1. 在调用此函数之前,应用要将统一结构体中InputSize,OutputSize,MaxNumLink, - MaxNumPerCycle,OutnetQueueSize等变量赋值 -* 输入参数 : UINT8 * fileName 存放数据的文件名或地址 -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议统一结构体指针 -* 输出参数 : -* 全局变量 : -* 返回值 : 正常初始化返回1,否则返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 协锟斤拷锟绞硷拷锟斤拷锟斤拷锟 + 1. 锟节碉拷锟矫此猴拷锟斤拷之前锟斤拷应锟斤拷要锟斤拷统一锟结构锟斤拷锟斤拷InputSize锟斤拷OutputSize,MaxNumLink, + MaxNumPerCycle,OutnetQueueSize锟饺憋拷锟斤拷锟斤拷值 +* 锟斤拷锟斤拷锟斤拷锟 : UINT8 * fileName 锟斤拷锟斤拷锟斤拷莸锟斤拷募锟斤拷锟斤拷锟斤拷址 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷统一锟结构锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟斤拷锟斤拷锟斤拷始锟斤拷锟斤拷锟斤拷1锟斤拷锟斤拷锟津返伙拷0 *******************************************************************************************/ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) { @@ -102,31 +102,31 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) return retVal; } - /* 对DSU层查询函数进行初始化处理 */ + /* 锟斤拷DSU锟斤拷锟窖拷锟斤拷锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟斤拷锟 */ retVal = dsuFsFbInit(fileName); if( 0 == retVal ) { - /* DSU查询函数库初始化失败 */ + /* DSU锟斤拷询锟斤拷锟斤拷锟斤拷锟绞硷拷锟绞э拷锟 */ return retVal; } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* FSFB结构体初始化 */ + /* FSFB锟结构锟斤拷锟绞硷拷锟 */ retVal = FsfbStructInit(pFsfbStruct); if(0 == retVal) { - /* 记录 */ + /* 锟斤拷录 */ return retVal; } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 通信链路管理表初始化 */ + /* 通锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷始锟斤拷 */ if(!FsfbInitLnkMngr(pFsfbStruct)) { retVal =0; @@ -136,62 +136,62 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) retVal = InitFsfbRedunStruct(pFsfbStruct, &pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* 处理失败 什么不做 返回 */ + /* 锟斤拷锟斤拷失锟斤拷 什么锟斤拷锟斤拷 锟斤拷锟斤拷 */ return retVal; } else { - /*初始化成功*/ + /*锟斤拷始锟斤拷锟缴癸拷*/ } - /* 冗余初始化 */ + /* 锟斤拷锟斤拷锟绞硷拷锟 */ retVal = RpHandleInit(&pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* 初始化失败 */ + /* 锟斤拷始锟斤拷失锟斤拷 */ return retVal; } else { - /* 冗余层处理成功 */ + /* 锟斤拷锟斤拷愦︼拷锟斤拷晒锟 */ } return retVal; } /****************************************************************************************** -* 功能描述 : 协议输出单元的主函数,根据协议的规则,将应用传来的数据组帧, - 并为数据比较单元准备好必需的数据,同时维护链路管理表 -* 输入参数 : -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议统一结构体指针 : -* 返回值 : 正确返回1,错误返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 协锟斤拷锟斤拷锟斤拷锟皆拷锟斤拷锟斤拷锟斤拷锟,锟斤拷锟斤拷协锟斤拷墓锟斤拷锟,锟斤拷应锟矫达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷帧, + 锟斤拷为锟斤拷锟捷比较碉拷元准锟斤拷锟矫憋拷锟斤拷锟斤拷锟斤拷锟,同时维锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷统一锟结构锟斤拷指锟斤拷 : +* 锟斤拷锟斤拷值 : 锟斤拷确锟斤拷锟斤拷1锟斤拷锟斤拷锟襟返伙拷0 *******************************************************************************************/ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { - UINT8 retVal = 1;/*函数返回值*/ - UINT8 tmpRetVal = 1;/*临时函数返回值*/ + UINT8 retVal = 1;/*锟斤拷锟斤拷锟斤拷锟斤拷值*/ + UINT8 tmpRetVal = 1;/*锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷值*/ UINT32 index =0; - UINT16 msgLen = 0;/* 消息长度 */ - UINT16 outputDataLen =0; /* 输出一帧数据长度 */ - UINT16 maxMagLen = 0; /* 一帧数据的最大长度 */ - UINT8 tmpBuff[2]={0}; /* 作成报文的临时缓存区 */ - UINT16 fsfbVarLen = 0;/*FSFB协议中间变量长度*/ - UINT16 redunVarLen = 0;/*冗余层中间变量数据长度*/ - Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* 通信节点指针 */ - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*定义当前指针;*/ + UINT16 msgLen = 0;/* 锟斤拷息锟斤拷锟斤拷 */ + UINT16 outputDataLen =0; /* 锟斤拷锟揭恢★拷锟斤拷莩锟斤拷锟 */ + UINT16 maxMagLen = 0; /* 一帧锟斤拷锟捷碉拷锟斤拷蟪ざ锟 */ + UINT8 tmpBuff[2]={0}; /* 锟斤拷锟缴憋拷锟侥碉拷锟斤拷时锟斤拷锟斤拷锟斤拷 */ + UINT16 fsfbVarLen = 0;/*FSFB协锟斤拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟*/ + UINT16 redunVarLen = 0;/*锟斤拷锟斤拷锟斤拷屑锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷*/ + Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* 通锟脚节碉拷指锟斤拷 */ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*锟斤拷锟藉当前指锟斤拷;*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /*输出数据*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /*锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray4ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, QueueStatus(&pFsfbStruct->OutputDataQueue)); CurFillLnk=pFsfbStruct->LnkHead; - /* 无发送周期数累加 */ + /* 锟睫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟桔硷拷 */ while(CurFillLnk!= NULL) { CurFillLnk->FsfbLinInfo.NoAppDataCycleNum++; ComAddTimeStamp(&CurFillLnk->FsfbLinInfo.TimeStmp); - /* 如果是TDM帧*/ + /* 锟斤拷锟斤拷锟絋DM帧*/ CurFillLnk =CurFillLnk->NextNode; } @@ -200,27 +200,27 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) index =4; if(QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /*本周期有要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ while (QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /* 扫描两个字节的长度:一帧应用数据的长度 */ + /* 扫锟斤拷锟斤拷锟斤拷锟街节的筹拷锟斤拷:一帧应锟斤拷锟斤拷锟捷的筹拷锟斤拷 */ QueueScan(2,tmpBuff,&pFsfbStruct->OutputDataQueue); msgLen = ShortFromChar(tmpBuff); if(msgLen <= maxMagLen) - {/* 队列节点数据长度 小于等于 最大数据 */ + {/* 锟斤拷锟叫节碉拷锟斤拷锟捷筹拷锟斤拷 小锟节碉拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 */ - /*读取一帧数据 */ + /*锟斤拷取一帧锟斤拷锟斤拷 */ tmpRetVal = QueueRead((UINT32)(msgLen+2),pFsfbStruct->TmpDataBuff,&pFsfbStruct->OutputDataQueue); if (tmpRetVal == 1) { - /*根据相关信息创建不同的消息类型 */ + /*锟斤拷锟斤拷锟斤拷锟斤拷锟较拷锟斤拷锟斤拷锟酵拷锟斤拷锟较拷锟斤拷锟 */ tmpRetVal =AccordInfoCreateFrameData(pFsfbStruct->TmpDataBuff,(msgLen+2),pFsfbStruct->AppArray+index,&outputDataLen,&pNode,pFsfbStruct); index +=outputDataLen; } if (tmpRetVal == 0) { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*输出读应用数据错误*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷荽锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); LongToChar(0,pFsfbStruct->AppArray); @@ -229,23 +229,23 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } else { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*输出应用帧数据长度错误*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*锟斤拷锟接︼拷锟街★拷锟斤拷莩锟斤拷却锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, msgLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, maxMagLen); - QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*丢弃此帧数据*/ + QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷*/ } } } else { - /*本周期无要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); } - /* 根据链路信息创建相对应帧 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷锟斤拷锟接χ */ tmpRetVal = ArrordLnkInfoCreateFrame(pFsfbStruct,&pFsfbStruct->AppArray[index],&outputDataLen); index+=outputDataLen; @@ -257,32 +257,32 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { LongToChar(index-4,pFsfbStruct->AppArray); - /*写入中间变量*/ - /*数据结构*/ + /*写锟斤拷锟叫硷拷锟斤拷锟*/ + /*锟斤拷锟捷结构*/ /******************************************************* - 数据总长度 |FSFB协议中间变量 |冗余中间变量 - 2字节 | N | M + 锟斤拷锟斤拷锟杰筹拷锟斤拷 |FSFB协锟斤拷锟叫硷拷锟斤拷锟 |锟斤拷锟斤拷锟叫硷拷锟斤拷锟 + 2锟街斤拷 | N | M *******************************************************/ fsfbVarLen = FsfbWriteToVarArray(&pFsfbStruct->VarArray[2],pFsfbStruct); redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize); - /*从冗余处理结构体中的中间变量拷贝到FSFB协议中间变量中*/ + /*锟斤拷锟斤拷锟洁处锟斤拷锟结构锟斤拷锟叫碉拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟紽SFB协锟斤拷锟叫硷拷锟斤拷锟斤拷锟*/ ComMemCopy(pFsfbStruct->RpInfoStru.VarArray,&pFsfbStruct->VarArray[2+fsfbVarLen],redunVarLen); - /*写入中间变量总长度*/ + /*写锟斤拷锟叫硷拷锟斤拷锟斤拷艹锟斤拷锟*/ if(fsfbVarLen+redunVarLen <= 65535) { ShortToChar((UINT16)(fsfbVarLen+redunVarLen),pFsfbStruct->VarArray); } else { - /*本周期无要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); - /*数据越界,并且让应用层宕机*/ + /*锟斤拷锟斤拷越锟斤拷,锟斤拷锟斤拷锟斤拷应锟矫诧拷宕伙拷*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /*输出数据*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /*锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, redunVarLen); @@ -293,63 +293,63 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclReceiveData - * 功能描述 : 对红蓝网输入数据进行FSFB层的安全处理,将安全数据交付应用。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclReceiveData + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟皆猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟捷斤拷锟斤拷FSFB锟斤拷陌锟饺拷锟斤拷锟斤拷锟斤拷锟斤拷锟饺拷锟斤拷萁锟斤拷锟接︼拷谩锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 输入队列:pFsfbStruct->OutnetQueueA + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷锟斤拷校锟絧FsfbStruct->OutnetQueueA * pFsfbStruct->OutnetQueueB - * 输出队列:pFsfbStruct->DataToApp + * 锟斤拷锟斤拷锟斤拷校锟絧FsfbStruct->DataToApp * - * 返回值 : UINT8 1:正常返回 0:错误返回 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; - UINT16 MaxLen = 0; /* 一帧数据最大大小 */ - UINT8 *RecordArray = pFsfbStruct->RecordArray; /* 记录 */ - UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* 记录数组大小 */ - UINT32 inputQueLen = 0u; /*输入队列长度*/ + UINT16 MaxLen = 0; /* 一帧锟斤拷锟斤拷锟斤拷锟斤拷小 */ + UINT8 *RecordArray = pFsfbStruct->RecordArray; /* 锟斤拷录 */ + UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* 锟斤拷录锟斤拷锟斤拷锟叫 */ + UINT32 inputQueLen = 0u; /*锟斤拷锟斤拷锟斤拷谐锟斤拷锟*/ - /* 记录清零 */ + /* 锟斤拷录锟斤拷锟斤拷 */ ShortToChar(0,pFsfbStruct->RecordArray); -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordSize,"FSFB Receive:\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - /* RSR输入单元标识 */ - PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* 新周期开始:0xEE */ /* M_2010_05_10 */ - PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* 周期号 */ /*M_2010_05_10 */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* 本方类型 */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* 本方ID */ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + /* RSR锟斤拷锟诫单元锟斤拷识 */ + PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* 锟斤拷锟斤拷锟节匡拷始锟斤拷0xEE */ /* M_2010_05_10 */ + PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* 锟斤拷锟节猴拷 */ /*M_2010_05_10 */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* 锟斤拷锟斤拷ID */ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueR); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*红网长度*/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueB); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*蓝网长度*/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ #endif - QueueClear(&pFsfbStruct->DataToApp); /* 队列清空 */ + QueueClear(&pFsfbStruct->DataToApp); /* 锟斤拷锟斤拷锟斤拷锟 */ - /* 队列节点最大数据长度 = InputSize + FSFB消息固定长度 + 队列固定长度(4+ 2) */ + /* 锟斤拷锟叫节碉拷锟斤拷锟斤拷锟斤拷莩锟斤拷锟 = InputSize + FSFB锟斤拷息锟教讹拷锟斤拷锟斤拷 + 锟斤拷锟叫固讹拷锟斤拷锟斤拷(4+ 2) */ MaxLen = pFsfbStruct->InputSize + FSFB_FIXED_LEN + 6; ClearNetsRecvPkgNum(pFsfbStruct); - /* 对红网接收到的数据进行处理 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /*输入红网处理*/ + /* 锟皆猴拷锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟叫达拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueR, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 0, pFsfbStruct); - /* 对篮网接收到的数据进行处理 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /*输入蓝网处理*/ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟叫达拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueB, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 1, pFsfbStruct); - /* 将队列里面的报文 进行排序后 保存到临时报文链表里 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷谋锟斤拷锟 锟斤拷锟斤拷锟斤拷锟斤拷锟 锟斤拷锟芥到锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 */ - /* 接收状态管理 */ + /* 锟斤拷锟斤拷状态锟斤拷锟斤拷 */ retVal=FsfbRecvLnkStatusMng(pFsfbStruct); @@ -357,22 +357,22 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclDeleteLnk - * 功能描述 : 根据设备类型和设备ID删除链路。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclDeleteLnk + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟借备锟斤拷锟酵猴拷锟借备ID删锟斤拷锟斤拷路锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devType UINT8 IN 设备类型 - * devId UINT8 IN 设备ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * devType UINT8 IN 锟借备锟斤拷锟斤拷 + * devId UINT8 IN 锟借备ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *LastIndex; Fsfb_Lnk_Info_Node_Stru *CurIndex; - UINT16 destDevName;/*long型设备name*/ + UINT16 destDevName;/*long锟斤拷锟借备name*/ UINT8 ret = 0; if(pFsfbStruct == NULL) @@ -384,15 +384,15 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) ComTypeId2DevName(devType,devId,&destDevName); LastIndex = NULL; - /*当前指针从链表头指针开始*/ + /*锟斤拷前指锟斤拷锟斤拷锟斤拷锟酵分革拷肟*/ CurIndex = pFsfbStruct -> LnkHead; while(CurIndex != NULL) { - /*找到要删除节点*/ + /*锟揭碉拷要删锟斤拷锟节碉拷*/ if(destDevName == CurIndex->DestDevName) { - /*如果删除节点是头节点*/ + /*锟斤拷锟缴撅拷锟斤拷诘锟斤拷锟酵凤拷诘锟*/ if(LastIndex == NULL) { pFsfbStruct ->LnkHead = CurIndex->NextNode; @@ -403,10 +403,10 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - }/*if(上一个指针LastIndex == NULL)*/ - /*如果删除节点不是头节点*/ + }/*if(锟斤拷一锟斤拷指锟斤拷LastIndex == NULL)*/ + /*锟斤拷锟缴撅拷锟斤拷诘悴伙拷锟酵凤拷诘锟*/ else { LastIndex->NextNode = CurIndex->NextNode; @@ -417,45 +417,45 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } } } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - /*没有找到要删除节点,将上一个指针和当前指针都往后移一个节点*/ + /*没锟斤拷锟揭碉拷要删锟斤拷锟节点,锟斤拷锟斤拷一锟斤拷指锟斤拷偷锟角爸革拷攵硷拷锟斤拷锟斤拷锟揭伙拷锟斤拷诘锟*/ LastIndex = CurIndex; CurIndex = CurIndex->NextNode; }/*end while(CurIndex != NULL)*/ - /*删除冗余链路信息*/ + /*删锟斤拷锟斤拷锟斤拷锟斤拷路锟斤拷息*/ retVal = RpHandleLnkDelete(destDevName,&pFsfbStruct->RpInfoStru); return retVal; } /*********************************************************************** - * 方法名 : FsfbProtclGetLnkStatus - * 功能描述 : 根据设备类型和设备ID获取设备状态。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclGetLnkStatus + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟借备锟斤拷锟酵猴拷锟借备ID锟斤拷取锟借备状态锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devType UINT8 IN 设备类型 - * devId UINT8 IN 设备ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : 0:通信节点不存在 - 0x2b:通信中断 - 0x17:接受数据中 + * devType UINT8 IN 锟借备锟斤拷锟斤拷 + * devId UINT8 IN 锟借备ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : 0锟斤拷通锟脚节点不锟斤拷锟斤拷 + 0x2b:通锟斤拷锟叫讹拷 + 0x17:锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *pNode; - UINT16 destDevName =0;/*long型设备name*/ + UINT16 destDevName =0;/*long锟斤拷锟借备name*/ if(pFsfbStruct == NULL) { @@ -473,26 +473,26 @@ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStru } else if( pNode->FsfbLinInfo.RecvLinkStatus == Fsfb_RecvData) { - /* 接受数据中 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = 0x17; } else { - /* 通信状态不正常*/ + /* 通锟斤拷状态锟斤拷锟斤拷锟斤拷*/ retVal = 0x2b; } return retVal; } /*********************************************************************** - * 方法名 : FsfbProtclRefreshLnk - * 功能描述 : 根据输入的中间变量刷新链路状态。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclRefreshLnk + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷屑锟斤拷锟斤拷刷锟斤拷锟斤拷路状态锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pLnkStatusData UINT8* IN 中间变量数据 - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pLnkStatusData UINT8* IN 锟叫硷拷锟斤拷锟斤拷锟斤拷锟 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) { @@ -503,11 +503,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) UINT16 sLnksNums =0; INT16 tmpInput =0; UINT16 inputDataLnk =0; - UINT16 lnkStatusTotalLen = 0;/*链路状态总长度*/ - UINT16 redunStatusLen = 0;/*冗余链路信息长度*/ - UINT16 fsfbStatusLen = 0;/*FSFB协议链路信息长度*/ + UINT16 lnkStatusTotalLen = 0;/*锟斤拷路状态锟杰筹拷锟斤拷*/ + UINT16 redunStatusLen = 0;/*锟斤拷锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ + UINT16 fsfbStatusLen = 0;/*FSFB协锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ - UINT16 index = 0;/*数组偏移*/ + UINT16 index = 0;/*锟斤拷锟斤拷偏锟斤拷*/ if((pLnkStatusData == NULL)||(pFsfbStruct == NULL)) { @@ -527,11 +527,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) CurLnk = CurLnk->NextNode; } - /*2个字节的链路信息总长度*/ + /*2锟斤拷锟街节碉拷锟斤拷路锟斤拷息锟杰筹拷锟斤拷*/ lnkStatusTotalLen = ShortFromChar(pLnkStatusData); index += 2; - /*获取FSFB层链路信息长度*/ + /*锟斤拷取FSFB锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ fsfbStatusLen = ShortFromChar(&pLnkStatusData[index]); index += 2; tmpInput = fsfbStatusLen; @@ -541,9 +541,9 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) for( i = 0; i < sLnksNums; i++) { CurLnk = (Fsfb_Lnk_Info_Node_Stru *)ComPopStack(&pFsfbStruct->LnkStack); - if(CurLnk != 0) /*从堆栈中能够弹出可用的节点地址*/ + if(CurLnk != 0) /*锟接讹拷栈锟斤拷锟杰癸拷锟斤拷锟斤拷锟斤拷锟矫的节碉拷锟街*/ { - /*根据历史数据刷新链路基本信息*/ + /*锟斤拷锟斤拷锟斤拷史锟斤拷锟斤拷刷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息*/ FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[index+FSFB_VAR_NODE_LEN * i], CurLnk); if( i == 0) @@ -561,7 +561,7 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) tmpInput = tmpInput - FSFB_VAR_NODE_LEN; if( 0 == ( tmpInput % FSFB_VAR_NODE_LEN ) ) { - /* 不做处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } else { @@ -578,16 +578,16 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } index += (sLnksNums*FSFB_VAR_NODE_LEN); - /*获取冗余处理链路信息的长度*/ + /*锟斤拷取锟斤拷锟洁处锟斤拷锟斤拷路锟斤拷息锟侥筹拷锟斤拷*/ redunStatusLen = ShortFromChar(&pLnkStatusData[index]); if ((redunStatusLen+2) == (lnkStatusTotalLen-2-fsfbStatusLen)) { - /*刷新链路信息*/ + /*刷锟斤拷锟斤拷路锟斤拷息*/ retVal = RpHandleRefresh(redunStatusLen,&pLnkStatusData[index+2],&pFsfbStruct->RpInfoStru); } else { - /*链路信息错误*/ + /*锟斤拷路锟斤拷息锟斤拷锟斤拷*/ retVal = 0; } } @@ -600,13 +600,13 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclFreeSpace - * 功能描述 : 释放空间。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclFreeSpace + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟酵放空间。 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) { @@ -618,7 +618,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /* 不错处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } if(pFsfbStruct->AppArray != NULL) @@ -628,7 +628,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } if(pFsfbStruct->VarArray != NULL) @@ -638,7 +638,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } if(pFsfbStruct->RecordArray != NULL) @@ -648,9 +648,9 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - /*释放队列的空间*/ + /*锟酵放讹拷锟叫的空硷拷*/ QueueElementFree(&pFsfbStruct->OutnetQueueR); QueueElementFree(&pFsfbStruct->OutnetQueueB); QueueElementFree(&pFsfbStruct->OutputDataQueue); @@ -663,7 +663,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } retVal = RpHandleFreeSpace(&pFsfbStruct->RpInfoStru); @@ -672,19 +672,19 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } /*-------------------------------------------------------------------- - * FSFB协议外部接口函数 End + * FSFB协锟斤拷锟解部锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFB协议内部接口函数 Start + * FSFB协锟斤拷锟节诧拷锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** - * 方法名 : FsfbStructInit - * 功能描述 : 通过该函数,实现对RSR层的初始化函数。根据应用设定的基本值,计算各队列的大小。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbStructInit + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 通锟斤拷锟矫猴拷锟斤拷锟斤拷实锟街讹拷RSR锟斤拷某锟绞硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟接︼拷锟斤拷瓒拷幕锟斤拷锟街碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫的达拷小锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB层统一结构体,需进行初始值设置。 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB锟斤拷统一锟结构锟藉,锟斤拷锟斤拷谐锟绞贾碉拷锟斤拷谩锟 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) { @@ -697,15 +697,15 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) inputSize = pFsfbStruct->InputSize; outputSize = pFsfbStruct->OutputSize; - /* 最大报文数据 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟 */ maxMsg = pFsfbStruct->InputSize > pFsfbStruct->OutputSize? pFsfbStruct->InputSize:pFsfbStruct->OutputSize; - maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* 信号层队列固定长度(2+4) + RSSP层固定长度 + 32冗余 */ + maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* 锟脚号诧拷锟斤拷泄潭锟斤拷锟斤拷锟(2+4) + RSSP锟斤拷潭锟斤拷锟斤拷锟 + 32锟斤拷锟斤拷 */ - /* 队列数组初始化 */ - maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* 最大报文数 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟绞硷拷锟 */ + maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* 锟斤拷锟斤拷锟斤拷锟 */ - /* FSFB层输出模块输出数组 */ + /* FSFB锟斤拷锟斤拷锟侥o拷锟斤拷锟斤拷锟斤拷锟斤拷 */ pFsfbStruct->AppArraySize = (pFsfbStruct->OutputSize+11+26)*(pFsfbStruct->MaxNumPerCycle)*(pFsfbStruct->MaxNumLink)+2; pFsfbStruct->AppArray = (UINT8 *)malloc(pFsfbStruct->AppArraySize); if(pFsfbStruct->AppArray == NULL) @@ -718,12 +718,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) LongToChar(0, pFsfbStruct->AppArray); } - /* FSFB输出模块输出中间变量数组大小 */ + /* FSFB锟斤拷锟侥o拷锟斤拷锟斤拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟斤拷小 */ pFsfbStruct->VarArraySize = FSFB_VAR_NODE_LEN * pFsfbStruct->MaxNumLink+32; pFsfbStruct->VarArray = (UINT8*)malloc(pFsfbStruct->VarArraySize); if( NULL == pFsfbStruct->VarArray) { - /* 记录 */ + /* 锟斤拷录 */ retVal =0; return retVal; } @@ -732,8 +732,8 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ShortToChar(0, pFsfbStruct->VarArray); } - /* 协议输入给应用的数据队列长度 */ - pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* 协议输入给应用的数据队列长度 */ + /* 协锟斤拷锟斤拷锟斤拷锟接︼拷玫锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ + pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* 协锟斤拷锟斤拷锟斤拷锟接︼拷玫锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ retVal = QueueInitial(&pFsfbStruct->DataToApp,pFsfbStruct->DataToAppSize); if(0 == retVal) { @@ -741,10 +741,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 应用给协议输出的数据队列长度 */ + /* 应锟矫革拷协锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ pFsfbStruct->OutputDataQueueSize= (outputSize + 8 )*maxMsgNum; retVal = QueueInitial(&pFsfbStruct->OutputDataQueue,pFsfbStruct->OutputDataQueueSize); if(0 == retVal) @@ -753,12 +753,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 内网接受队列长度 */ + /* 锟斤拷锟斤拷锟斤拷锟杰讹拷锟叫筹拷锟斤拷 */ pFsfbStruct->OutnetQueueSize = (pFsfbStruct->InputSize + 2 + 11)*pFsfbStruct->MaxNumPerCycle*pFsfbStruct->MaxNumLink; - /* 红网队列 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueR,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -766,10 +766,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 蓝网队列 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueB,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -777,14 +777,14 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 记录数组 */ + /* 锟斤拷录锟斤拷锟斤拷 */ pFsfbStruct->RecordArray = (UINT8*)malloc(pFsfbStruct->RecordArraySize); if( NULL == pFsfbStruct->RecordArray) { - /* 记录 */ + /* 锟斤拷录 */ retVal =0; return retVal; } @@ -793,7 +793,7 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ComMemSet(pFsfbStruct->RecordArray ,pFsfbStruct->RecordArraySize,0x0); } - /* 分配链路管理表堆栈空间 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸硷拷 */ pFsfbStruct->LnkStack.maxNodeNum = pFsfbStruct->MaxNumLink; retVal = StackInitial(&pFsfbStruct->LnkStack.stack,pFsfbStruct->LnkStack.maxNodeNum); @@ -803,10 +803,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 不做处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } - /* 临时报文缓存区 */ + /* 锟斤拷时锟斤拷锟侥伙拷锟斤拷锟斤拷 */ pFsfbStruct->TmpDataBuff = (UINT8 *)malloc(maxMsg); if( NULL == pFsfbStruct->TmpDataBuff) { @@ -835,23 +835,23 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) /****************************************************************************************** -* 功能描述 : 初始化通信连路管理表空链表(这是一个指定头节点的一维链表) - 1. 动态分配链路管理表堆栈空间,并对其进行初始化; - 2. 把链路管理表的头指针置为空; -* 输入参数 : -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议使用的统一结构体指针 -* 输出参数 : -* 全局变量 : -* 返回值 : 成功返回1,失败返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷始锟斤拷通锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷(锟斤拷锟斤拷一锟斤拷指锟斤拷头锟节碉拷锟揭晃拷锟斤拷锟) + 1. 锟斤拷态锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸间,锟斤拷锟斤拷锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟 + 2. 锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷头指锟斤拷锟斤拷为锟秸o拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷使锟矫碉拷统一锟结构锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟缴癸拷锟斤拷锟斤拷1,失锟杰凤拷锟斤拷0 *******************************************************************************************/ -static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*链路管理表初始化函数*/ +static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷始锟斤拷锟斤拷锟斤拷*/ { UINT8 retVal =0; - /*分配最大链路节点数存储空间*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷锟铰凤拷诘锟斤拷锟斤拷娲拷占锟*/ if(!FsfbInitLnkMngrStack(&pFsfbStruct->LnkStack)) { - /*记录记录*/ + /*锟斤拷录锟斤拷录*/ retVal = 0; return retVal; } @@ -862,25 +862,25 @@ static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /* } /****************************************************************************************** -* 功能描述 : 初始化链路管理表堆栈 -* 初始化特定大小特定结构的堆栈,不同的结构体只需要采用压入不同的指针使用方式便可以做成不同的管理堆栈 -* 输入参数 : ComStackElement* s 堆栈的指针 -* 输入输出参数 : -* 输出参数 : -* 全局变量 : -* 返回值 : 成功返回1,失败返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷始锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈 +* 锟斤拷始锟斤拷锟截讹拷锟斤拷小锟截讹拷锟结构锟侥讹拷栈,锟斤拷同锟侥结构锟斤拷只锟斤拷要锟斤拷锟斤拷压锟诫不同锟斤拷指锟斤拷使锟矫凤拷式锟斤拷锟斤拷锟斤拷锟斤拷刹锟酵拷墓锟斤拷锟斤拷锟秸 +* 锟斤拷锟斤拷锟斤拷锟 : ComStackElement* s 锟斤拷栈锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟缴癸拷锟斤拷锟斤拷1,失锟杰凤拷锟斤拷0 *******************************************************************************************/ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ { - UINT16 i;/*循环变量*/ + UINT16 i;/*循锟斤拷锟斤拷锟斤拷*/ Fsfb_Lnk_Info_Node_Stru *pLnkMngrStack = NULL; UINT8 retVal =0; - StackClear(&s->stack); /* 永返回真*/ + StackClear(&s->stack); /* 锟斤拷锟斤拷锟斤拷锟斤拷*/ pLnkMngrStack = (Fsfb_Lnk_Info_Node_Stru *)malloc(sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum); if(pLnkMngrStack == NULL) { - /*打印打印*/ + /*锟斤拷印锟斤拷印*/ retVal = 0; return retVal; } @@ -889,11 +889,11 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ ComMemSet((UINT8*)pLnkMngrStack, sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum, 0x00); } for (i = 0;i < s->maxNodeNum;i++) - { /*压入totalsize个节点*/ + { /*压锟斤拷totalsize锟斤拷锟节碉拷*/ if(ComPushStack(s,(STACK_DATA_TYPE)&pLnkMngrStack[i]) != 1) { retVal = 0; - return retVal;/*压入节点失败*/ + return retVal;/*压锟斤拷诘锟绞э拷锟*/ } else { @@ -905,97 +905,97 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ } /*********************************************************************** - * 方法名 : ReadQueueData - * 功能描述 : 对接收到的数据进行相关处理。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : ReadQueueData + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟皆斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟斤拷锟斤拷卮锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pQueueData QueueStruct* IN 从应用接收到数据的队列 - * MaxLen UINT16 IN 最大数据 - * RecordArray UINT8* INOUT 记录数组 + * pQueueData QueueStruct* IN 锟斤拷应锟矫斤拷锟秸碉拷锟斤拷锟捷的讹拷锟斤拷 + * MaxLen UINT16 IN 锟斤拷锟斤拷锟斤拷锟 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 * RecordArraySize UINT16 - * pFsfbStruct FSFB_INFO_STRU * INOUT FSFB协议统一结构体 - * 返回值 : DataNode_WL* 临时报文链表表头 + * pFsfbStruct FSFB_INFO_STRU * INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : DataNode_WL* 锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷头 ***********************************************************************/ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordArray, UINT16 RecordSize, const UINT8 netIdx,FSFB_INFO_STRU *pFsfbStruct) { UINT8 retVal = 0; UINT8 flag =0; - UINT16 index = 0; /* 数据标志位 */ + UINT16 index = 0; /* 锟斤拷锟捷憋拷志位 */ UINT8 destDevType =0; UINT8 destDevId =0; UINT16 desDevName =0; - UINT16 MsgLen = 0; /* 消息长度 */ + UINT16 MsgLen = 0; /* 锟斤拷息锟斤拷锟斤拷 */ UINT8 applyCat = 0; - UINT8 messageType =0; /* 消息类型 */ + UINT8 messageType =0; /* 锟斤拷息锟斤拷锟斤拷 */ UINT8 tmpBtd[2]={0}; - UINT32 rcvBtdSn = 0;/*接收到BTD帧的序列号*/ - UINT32 rcvOtherSn = 0;/*接收到其它帧的序列号*/ - const UINT8 SENDER_TYPE_QUE_POS = 0; /* 保存发送方类型的位置 */ - const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* 保存发送方Id的位置 */ - const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* 保存预留字节*/ + UINT32 rcvBtdSn = 0;/*锟斤拷锟秸碉拷BTD帧锟斤拷锟斤拷锟叫猴拷*/ + UINT32 rcvOtherSn = 0;/*锟斤拷锟秸碉拷锟斤拷锟斤拷帧锟斤拷锟斤拷锟叫猴拷*/ + const UINT8 SENDER_TYPE_QUE_POS = 0; /* 锟斤拷锟芥发锟酵凤拷锟斤拷锟酵碉拷位锟斤拷 */ + const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* 锟斤拷锟芥发锟酵凤拷Id锟斤拷位锟斤拷 */ + const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* 锟斤拷锟斤拷预锟斤拷锟街斤拷*/ retVal =1; - /* 队列长度>2 */ + /* 锟斤拷锟叫筹拷锟斤拷>2 */ while(2 <= QueueStatus(pQueueData)) { - /* 队列节点格式 + /* 锟斤拷锟叫节碉拷锟绞 * ---------------------------------------------------------------------- - * 长度 | 发送方Type | 发送方ID | 预留字节| 具体消息的帧格式 - * 2字节| 1字节 | 1 字节 | 2bytes | + * 锟斤拷锟斤拷 | 锟斤拷锟酵凤拷Type | 锟斤拷锟酵凤拷ID | 预锟斤拷锟街斤拷| 锟斤拷锟斤拷锟斤拷息锟斤拷帧锟斤拷式 + * 2锟街斤拷| 1锟街斤拷 | 1 锟街斤拷 | 2bytes | * ----------------------------------------------------------------------- */ index=0; - QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* 扫描两个字节的长度 */ + QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* 扫锟斤拷锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ MsgLen = ShortFromChar(pFsfbStruct->TmpDataBuff); if((MsgLen+2) <= MaxLen) { - /* 读出一帧数据 */ + /* 锟斤拷锟斤拷一帧锟斤拷锟斤拷 */ retVal =QueueRead(MsgLen,pFsfbStruct->TmpDataBuff,pQueueData); if (retVal == 0) { - /* 读队列失败则队列剩下的数据大小小于MsgLen+2,则记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ - PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* 读队列失败 */ + /* 锟斤拷锟斤拷锟斤拷失锟斤拷锟斤拷锟斤拷锟绞o拷碌锟斤拷锟斤拷荽锟叫⌒★拷锟組sgLen+2锟斤拷锟斤拷锟铰 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ + PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* 锟斤拷锟斤拷锟斤拷失锟斤拷 */ #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*读取数据帧长度错误*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*输入数据帧长度错误*/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*锟斤拷取锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ #endif break; } - /* 设备的Type*/ + /* 锟借备锟斤拷Type*/ destDevType = pFsfbStruct->TmpDataBuff[SENDER_TYPE_QUE_POS]; - /* 设备的ID */ + /* 锟借备锟斤拷ID */ destDevId = pFsfbStruct->TmpDataBuff[SENDER_ID_QUE_POS]; ComTypeId2DevName(destDevType,destDevId,&desDevName); SetNetsRecvPkgNum(pFsfbStruct, desDevName, netIdx); - /* 预留字节占两个*/ + /* 预锟斤拷锟街斤拷占锟斤拷锟斤拷*/ index = SENDER_EMPTY_QUE_POS+2; while((MsgLen-index)>0) { - /* 1个字节的Application Catory */ + /* 1锟斤拷锟街节碉拷Application Catory */ applyCat = pFsfbStruct->TmpDataBuff[index+FSFB_APP_CTGRY_POS]; - /* 1个字节 消息类型 */ + /* 1锟斤拷锟街斤拷 锟斤拷息锟斤拷锟斤拷 */ messageType = pFsfbStruct->TmpDataBuff[index+FSFB_MSG_TYPE_POS]; - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*读取数据帧*/ - PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*帧种类*/ - PrintRecArrayByte(RecordArray, RecordSize, messageType); /*帧类型*/ - PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*设备类型ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*帧中源设备类型ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*帧中目的设备类型ID*/ - PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*帧序号*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*锟斤拷取锟斤拷锟斤拷帧*/ + PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*帧锟斤拷锟斤拷*/ + PrintRecArrayByte(RecordArray, RecordSize, messageType); /*帧锟斤拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*锟借备锟斤拷锟斤拷ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*帧锟斤拷源锟借备锟斤拷锟斤拷ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*帧锟斤拷目锟斤拷锟借备锟斤拷锟斤拷ID*/ + PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*帧锟斤拷锟*/ switch(messageType) { case FSFB_SSE_MSG: - /* 分析SSE帧 */ + /* 锟斤拷锟斤拷SSE帧 */ if(applyCat == APPLCAT_BTM) { rcvOtherSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); @@ -1017,11 +1017,11 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr retVal = FsfbAnalysisSsrMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=SSR_SIZE; - /* 对SSR帧开始分析 */ + /* 锟斤拷SSR帧锟斤拷始锟斤拷锟斤拷 */ break; case FSFB_TSD_MSG: - /* 不可能接收到 */ - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷锟杰斤拷锟秸碉拷 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=TSD_SIZE; break; case FSFB_ABT_MSG: @@ -1032,26 +1032,26 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr index +=ABT_SIZE; break; case FSFB_SBT_MSG: - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=SBT_SIZE; break; case FSFB_BTC_MSG: - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=BTC_SIZE; break; case FSFB_EBT_MSG: - /* 分析EBT数据 */ + /* 锟斤拷锟斤拷EBT锟斤拷锟斤拷 */ retVal =FsfbAnalysisEbtMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=EBT_SIZE; break; case FSFB_BTD_MSG: - /* 数据有效性检查*/ + /* 锟斤拷锟斤拷锟斤拷效锟皆硷拷锟*/ rcvBtdSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); retVal = ReadRpHandleQueueData(desDevName,rcvBtdSn,&pFsfbStruct->RpInfoStru); if(1 == retVal) { - /* 将数据数据,更新链路状态并将其输出 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟捷o拷锟斤拷锟斤拷锟斤拷路状态锟斤拷锟斤拷锟斤拷锟斤拷锟 */ retVal =FsfbAnalysisBtdMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); if(1 == retVal) { @@ -1066,12 +1066,12 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } else { - retVal=1;/*对于不合法BTD帧,只是将其丢弃,不会造成宕机*/ + retVal=1;/*锟斤拷锟节诧拷锟较凤拷BTD帧锟斤拷只锟角斤拷锟戒丢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉椿锟*/ } } else { - /* 丢弃该帧数据 */ + /* 锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷 */ retVal=1; } index +=BTD_SIZE; @@ -1087,36 +1087,36 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } } else - {/*将此帧数据丢掉*/ + {/*锟斤拷锟斤拷帧锟斤拷锟捷讹拷锟斤拷*/ QueueElementDiscard(MsgLen,pQueueData); - PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*输入数据帧长度错误*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*输入数据帧长度*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷*/ } } return retVal; } /*********************************************************************** - * 方法名 : InitRedunStruct - * 功能描述 : 对冗余统一结构体进行初始化处理。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : InitRedunStruct + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷统一锟结构锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct const FSFB_INFO_STRU* IN FSFB层统一结构体 - * pRedunInfoStru RPHANDLE_INFO_STRU * IN 冗余层统一结构体 + * pFsfbStruct const FSFB_INFO_STRU* IN FSFB锟斤拷统一锟结构锟斤拷 + * pRedunInfoStru RPHANDLE_INFO_STRU * IN 锟斤拷锟斤拷锟酵骋伙拷峁癸拷锟 * - * 返回值 : UINT8 0:错误返回 1:正常返回 + * 锟斤拷锟斤拷值 : UINT8 0锟斤拷锟斤拷锟襟返伙拷 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INFO_STRU *pRedunInfoStru) { - UINT8 ret = 0;/*函数返回值*/ + UINT8 ret = 0;/*锟斤拷锟斤拷锟斤拷锟斤拷值*/ - pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* 本方设备ID */ + pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* 锟斤拷锟斤拷锟借备ID */ - pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* 最大报文书 */ - pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* 最大记录数 */ + pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* 锟斤拷锟斤拷锟斤拷锟 */ + pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* 锟斤拷锟斤拷录锟斤拷 */ pRedunInfoStru->MaxNumLink = pFsfbStruct->MaxNumLink; @@ -1125,11 +1125,11 @@ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INF } /* -*功能描述: 清理各网收包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -*输入出参: 无 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷锟斤拷锟斤拷锟斤拷锟秸帮拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) { @@ -1145,29 +1145,29 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) } /* -*功能描述: 设置各网收包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -* const UINT32 dstDevName 目的设备名称 -* const UINT8 netIdx 网下标 -*输入出参: 无 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷锟矫革拷锟斤拷锟秸帮拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +* const UINT32 dstDevName 目锟斤拷锟借备锟斤拷锟斤拷 +* const UINT8 netIdx 锟斤拷锟铰憋拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx) { UINT16 i = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*参数检查*/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*锟斤拷锟斤拷锟斤拷锟*/ { for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*找到*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*锟揭碉拷*/ { fsfb->NetsRecvPkgNums[i].NetsPkgNum[netIdx]++; break; } } - if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*未找到,添加一设备*/ + if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*未锟揭碉拷,锟斤拷锟斤拷一锟借备*/ { fsfb->NetsRecvPkgNums[fsfb->NetsRecvPkgNumsLen].DstDevName = dstDevName; ComMemSet((UINT8*)fsfb->NetsRecvPkgNums[i].NetsPkgNum, 2 * sizeof(UINT16), 0u); @@ -1178,28 +1178,28 @@ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, con } /* -*功能描述: 获取FSFB各网收到包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -* const UINT8 dstType 目的设备类型 -* const UINT8 dstId 目的设备ID -*输入出参: UINT16* redRecvPkgNum 红网收到包数 -* UINT16* blueRecvPkgNum 篮网收到包数 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷取FSFB锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +* const UINT8 dstType 目锟斤拷锟借备锟斤拷锟斤拷 +* const UINT8 dstId 目锟斤拷锟借备ID +*锟斤拷锟斤拷锟斤拷锟: UINT16* redRecvPkgNum 锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +* UINT16* blueRecvPkgNum 锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, const UINT8 dstId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum) { UINT16 i = 0u; UINT16 dstDevName = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /*参数检查*/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /*锟斤拷锟斤拷锟斤拷锟*/ { (*redRecvPkgNum) = 0u; (*blueRecvPkgNum) = 0u; ComTypeId2DevName(dstType, dstId, &dstDevName); - for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /*遍历*/ + for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /*锟斤拷锟斤拷*/ { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*找到*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*锟揭碉拷*/ { (*redRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[0]; (*blueRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[1]; @@ -1210,5 +1210,5 @@ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, cons } /*-------------------------------------------------------------------- - * FSFB协议内部接口函数 End + * FSFB协锟斤拷锟节诧拷锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h index b22288c..0baffcd 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h @@ -1,15 +1,15 @@ /******************************************************** * -* 文件名 : FsfbRecordDelare.h -* 版权说明: 北京交控科技有限工司 -* 版本号 : 1.0 -* 创建时间: 2013.09.09 -* 作者 : 王佩佩 -* 功能描述: FSFB协议记录相关宏定义。 -* 使用注意: +* 锟侥硷拷锟斤拷 锟斤拷 FsfbRecordDelare.h +* 锟斤拷权说锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟截科硷拷锟斤拷锟睫癸拷司 +* 锟芥本锟斤拷 锟斤拷 1.0 +* 锟斤拷锟斤拷时锟戒: 2013.09.09 +* 锟斤拷锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 FSFB协锟斤拷锟铰硷拷锟截宏定锟藉。 +* 使锟斤拷注锟解: * -* 修改记录: -* 2010.05.10 修改 追加FSFB新周期开始标识。 +* 锟睫改硷拷录锟斤拷 +* 2010.05.10 锟睫革拷 追锟斤拷FSFB锟斤拷锟斤拷锟节匡拷始锟斤拷识锟斤拷 * ********************************************************/ @@ -19,93 +19,93 @@ /******************************************************************************** -宏定义 +锟疥定锟斤拷 ********************************************************************************/ -/* 各个标志位 */ -#define FSFB_CYCLE_TAG (0xF4FB) /* FSFB新周期开始标识 */ -#define IN_RED (0x01) /*输入红网处理*/ -#define IN_BLUE (0x02) /*输入蓝网处理*/ -#define IN_FRAME_LEN_ERR (0x03) /*输入数据帧长度错误*/ -#define IN_READ_FRAME_ERR (0x04) /*读取数据帧长度错误*/ -#define IN_READ_FRAME (0x05) /*读取数据帧*/ -#define IN_CRC_ERR (0x06) /*CRC错误*/ -#define IN_NO_LNK (0x07) /*无链路*/ -#define IN_CAT_ERR (0x08) /*输入帧种类错误*/ -#define IN_ADDR_ERR (0x09) /*输入帧种类错误*/ -#define IN_SSR_STATUS_ERR (0x0A) /*输入SSR收状态错误*/ -#define IN_SSR_SSE_TC_ERR (0x0B) /*输入SSR的SSE序号错误*/ -#define IN_ABT_STATUS (0x0C) /*输入ABT收状态*/ -#define IN_ABT_SVC_ERR (0x0D) /*输入ABT的SVC错误*/ -#define IN_ABT_OLD_ERR (0x0E) /*输入ABT旧序号错误*/ -#define IN_ABT_SSE_BTC (0x0F) /*输入ABT发SSE或BTC*/ -#define IN_BTD_LEN_ERR (0x10) /*输入BTD的长度错误*/ -#define IN_BTD_STATUS (0x11) /*输入BTD收状态*/ -#define IN_BTD_LOST_ERR (0x12) /*输入BTD丢失超容忍*/ -#define IN_BTD_DELAY_ERR (0x13) /*输入BTD延迟超容忍*/ -#define IN_BTD_SVC_ERR (0x14) /*输入BTD的SVC错误*/ -#define OUT_APP (0x15) /*输出数据*/ -#define OUT_FRAME_LEN_ERR (0x16) /*输出应用帧数据长度错误*/ -#define OUT_READ_ERR (0x17) /*输出读应用数据错误*/ -#define OUT_APP_FRAME (0x18) /*输出应用帧数据*/ -#define OUT_FRAME_TYPE_ERR (0x19) /*输出帧类型错误*/ -#define OUT_ADDR_ERR (0x1A) /*输出地址错误*/ -#define OUT_FIND_LNK_ERR (0x1B) /*输出查询链路错误*/ -#define OUT_INSERT_NODE_ERR (0x1C) /*输出插入节点错误*/ -#define OUT_INIT_NODE_ERR (0x1D) /*输出初始化节点错误*/ -#define OUT_DATA_TYPE (0x1E) /*输出数据类型*/ -#define OUT_LNK (0x1F) /*输出链路*/ -#define OUT_RP_LNK (0x20) /*输出RP链路*/ -#define OUT_ALL_LEN_ERR (0x21) /*输出数据总长度错误*/ +/* 锟斤拷锟斤拷锟斤拷志位 */ +#define FSFB_CYCLE_TAG (0xF4FB) /* FSFB锟斤拷锟斤拷锟节匡拷始锟斤拷识 */ +#define IN_RED (0x01) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ +#define IN_BLUE (0x02) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ +#define IN_FRAME_LEN_ERR (0x03) /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ +#define IN_READ_FRAME_ERR (0x04) /*锟斤拷取锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ +#define IN_READ_FRAME (0x05) /*锟斤拷取锟斤拷锟斤拷帧*/ +#define IN_CRC_ERR (0x06) /*CRC锟斤拷锟斤拷*/ +#define IN_NO_LNK (0x07) /*锟斤拷锟斤拷路*/ +#define IN_CAT_ERR (0x08) /*锟斤拷锟斤拷帧锟斤拷锟斤拷锟斤拷锟*/ +#define IN_ADDR_ERR (0x09) /*锟斤拷锟斤拷帧锟斤拷锟斤拷锟斤拷锟*/ +#define IN_SSR_STATUS_ERR (0x0A) /*锟斤拷锟斤拷SSR锟斤拷状态锟斤拷锟斤拷*/ +#define IN_SSR_SSE_TC_ERR (0x0B) /*锟斤拷锟斤拷SSR锟斤拷SSE锟斤拷糯锟斤拷锟*/ +#define IN_ABT_STATUS (0x0C) /*锟斤拷锟斤拷ABT锟斤拷状态*/ +#define IN_ABT_SVC_ERR (0x0D) /*锟斤拷锟斤拷ABT锟斤拷SVC锟斤拷锟斤拷*/ +#define IN_ABT_OLD_ERR (0x0E) /*锟斤拷锟斤拷ABT锟斤拷锟斤拷糯锟斤拷锟*/ +#define IN_ABT_SSE_BTC (0x0F) /*锟斤拷锟斤拷ABT锟斤拷SSE锟斤拷BTC*/ +#define IN_BTD_LEN_ERR (0x10) /*锟斤拷锟斤拷BTD锟侥筹拷锟饺达拷锟斤拷*/ +#define IN_BTD_STATUS (0x11) /*锟斤拷锟斤拷BTD锟斤拷状态*/ +#define IN_BTD_LOST_ERR (0x12) /*锟斤拷锟斤拷BTD锟斤拷失锟斤拷锟斤拷锟斤拷*/ +#define IN_BTD_DELAY_ERR (0x13) /*锟斤拷锟斤拷BTD锟接迟筹拷锟斤拷锟斤拷*/ +#define IN_BTD_SVC_ERR (0x14) /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ +#define OUT_APP (0x15) /*锟斤拷锟斤拷锟斤拷锟*/ +#define OUT_FRAME_LEN_ERR (0x16) /*锟斤拷锟接︼拷锟街★拷锟斤拷莩锟斤拷却锟斤拷锟*/ +#define OUT_READ_ERR (0x17) /*锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷荽锟斤拷锟*/ +#define OUT_APP_FRAME (0x18) /*锟斤拷锟接︼拷锟街★拷锟斤拷锟*/ +#define OUT_FRAME_TYPE_ERR (0x19) /*锟斤拷锟街★拷锟斤拷痛锟斤拷锟*/ +#define OUT_ADDR_ERR (0x1A) /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ +#define OUT_FIND_LNK_ERR (0x1B) /*锟斤拷锟斤拷锟窖拷锟铰凤拷锟斤拷锟*/ +#define OUT_INSERT_NODE_ERR (0x1C) /*锟斤拷锟斤拷锟斤拷锟节碉拷锟斤拷锟*/ +#define OUT_INIT_NODE_ERR (0x1D) /*锟斤拷锟斤拷锟绞硷拷锟斤拷诘锟斤拷锟斤拷*/ +#define OUT_DATA_TYPE (0x1E) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ +#define OUT_LNK (0x1F) /*锟斤拷锟斤拷锟铰*/ +#define OUT_RP_LNK (0x20) /*锟斤拷锟絉P锟斤拷路*/ +#define OUT_ALL_LEN_ERR (0x21) /*锟斤拷锟斤拷锟斤拷锟斤拷艹锟斤拷却锟斤拷锟*/ -#define FSFB_RCV_TAG 0xF4 /* FSFB输入单元标识 */ -#define FSFB_OUT_TAG 0xF5 /* FSFB输出单元标识 */ -#define FSFB_MSG_IN_TAG 0x04 /* FSFB输入一帧消息起始标识(B 0000 0100) */ -#define FSFB_MSG_OUT_TAG 0x08 /* FSFB输出一帧消息起始标识(B 0000 1000) */ -#define FSFB_NODE_OUT_TAG 0x0C /* FSFB输出一帧消息起始标识(B 0000 1100) */ -#define FSFB_OUT_E_TAG 0x0F /* FSFB输出单元结束标识(B 0000 1111) */ +#define FSFB_RCV_TAG 0xF4 /* FSFB锟斤拷锟诫单元锟斤拷识 */ +#define FSFB_OUT_TAG 0xF5 /* FSFB锟斤拷锟斤拷锟皆拷锟绞 */ +#define FSFB_MSG_IN_TAG 0x04 /* FSFB锟斤拷锟斤拷一帧锟斤拷息锟斤拷始锟斤拷识(B 0000 0100) */ +#define FSFB_MSG_OUT_TAG 0x08 /* FSFB锟斤拷锟揭恢★拷锟较拷锟绞硷拷锟绞(B 0000 1000) */ +#define FSFB_NODE_OUT_TAG 0x0C /* FSFB锟斤拷锟揭恢★拷锟较拷锟绞硷拷锟绞(B 0000 1100) */ +#define FSFB_OUT_E_TAG 0x0F /* FSFB锟斤拷锟斤拷锟皆拷锟斤拷锟斤拷锟绞(B 0000 1111) */ /************************************************************************ - * 错误码编码原则,协议错误码一共16bit - * D15~D12:保留 - * D11~D10:错误等级 - * D9~D8:模块位置 - * D7~D4:包括各个模块特有的错误,在模块不同时次4位代表的含义不同 - * 区别于队列链表等底层错误 - * D3~D0:函数出错处理,不论模块是否相同此4位代表的含义相同 + * 锟斤拷锟斤拷锟斤拷锟斤拷锟皆拷锟叫拷锟斤拷锟斤拷锟斤拷一锟斤拷16bit + * D15~D12锟斤拷锟斤拷锟斤拷 + * D11~D10锟斤拷锟斤拷锟斤拷燃锟 + * D9~D8锟斤拷模锟斤拷位锟斤拷 + * D7~D4锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷模锟斤拷锟斤拷锟叫的达拷锟斤拷锟斤拷模锟介不同时锟斤拷4位锟斤拷锟斤拷锟侥猴拷锟藉不同 + * 锟斤拷锟斤拷锟节讹拷锟斤拷锟斤拷锟斤拷锟饺底诧拷锟斤拷锟 + * D3~D0锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷模锟斤拷锟角凤拷锟斤拷同锟斤拷4位锟斤拷锟斤拷锟侥猴拷锟斤拷锟斤拷同 ************************************************************************/ -/* 错误等级 */ +/* 锟斤拷锟斤拷燃锟 */ #define FSFB_ERR 0x0800 #define FSFB_WARN 0x0400 -/* 模块位置 */ -#define FSFB_RECEIVE 0x0200 /* 输入模块 */ -#define FSFB_OUTPUT 0x0100 /* 输出模块 */ +/* 模锟斤拷位锟斤拷 */ +#define FSFB_RECEIVE 0x0200 /* 锟斤拷锟斤拷模锟斤拷 */ +#define FSFB_OUTPUT 0x0100 /* 锟斤拷锟侥o拷锟 */ -/* 各模块特有错误 */ +/* 锟斤拷模锟斤拷锟斤拷锟叫达拷锟斤拷 */ #define FSFB_ERROR_NULL 0x0000 -/* 输入 */ -#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* 不是FSFB消息 */ -#define FSFB_MSG_OLD_ERR 0x0020 /* 非最新报文 */ -#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* 临时报文删除失败 */ -#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* 报文信息与通信节点信息不一致 */ -#define FSFB_MSG_LEN_ERR 0x0050 /* 报文长度不正 */ -#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* 报文格式不对 */ -#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* 不是对应SSR报文信息 */ -#define FSFB_MSG_REPLACE_ERR 0x0080 /* 覆盖节点失败 */ -#define FSFB_MSG_NO_REPLACENODE 0x0090 /* 不存在覆盖节点 */ -#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD解码失败 */ +/* 锟斤拷锟斤拷 */ +#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* 锟斤拷锟斤拷FSFB锟斤拷息 */ +#define FSFB_MSG_OLD_ERR 0x0020 /* 锟斤拷锟斤拷锟铰憋拷锟斤拷 */ +#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* 锟斤拷时锟斤拷锟斤拷删锟斤拷失锟斤拷 */ +#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* 锟斤拷锟斤拷锟斤拷息锟斤拷通锟脚节碉拷锟斤拷息锟斤拷一锟斤拷 */ +#define FSFB_MSG_LEN_ERR 0x0050 /* 锟斤拷锟侥筹拷锟饺诧拷锟斤拷 */ +#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* 锟斤拷锟侥革拷式锟斤拷锟斤拷 */ +#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* 锟斤拷锟角讹拷应SSR锟斤拷锟斤拷锟斤拷息 */ +#define FSFB_MSG_REPLACE_ERR 0x0080 /* 锟斤拷锟角节碉拷失锟斤拷 */ +#define FSFB_MSG_NO_REPLACENODE 0x0090 /* 锟斤拷锟斤拷锟节革拷锟角节碉拷 */ +#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD锟斤拷锟斤拷失锟斤拷 */ #define FSFB_MSG_CRC_ERR 0x00B0 -/* 输出 */ -#define FSFB_DBGET_ERR 0x0050 /* 数据库查询错误 */ -/* 函数出错处理,底层处理错误 */ -#define FSFB_QUEUE_READ 0x0001 /* 队列读有错 */ -#define FSFB_QUEUE_WRITE 0x0002 /* 队列写有错 */ -#define FSFB_QUEUE_INTEGRITY 0x0003 /* 队列中数据不完整(包括scan有错,应用给出错误)*/ -#define FSFB_LNK_PUSH 0x0004 /* 链路管理表节点压栈错误 */ -#define FSFB_LNK_POP 0x0005 /* 序列号缓存链表节点出栈错误 */ +/* 锟斤拷锟 */ +#define FSFB_DBGET_ERR 0x0050 /* 锟斤拷锟捷匡拷锟窖拷锟斤拷锟 */ +/* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟阶层处锟斤拷锟斤拷锟斤拷 */ +#define FSFB_QUEUE_READ 0x0001 /* 锟斤拷锟叫讹拷锟叫达拷 */ +#define FSFB_QUEUE_WRITE 0x0002 /* 锟斤拷锟斤拷写锟叫达拷 */ +#define FSFB_QUEUE_INTEGRITY 0x0003 /* 锟斤拷锟斤拷锟斤拷锟斤拷锟捷诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷scan锟叫达拷锟斤拷应锟矫革拷锟斤拷锟斤拷锟斤拷*/ +#define FSFB_LNK_PUSH 0x0004 /* 锟斤拷路锟斤拷锟斤拷锟斤拷锟节碉拷压栈锟斤拷锟斤拷 */ +#define FSFB_LNK_POP 0x0005 /* 锟斤拷锟叫号伙拷锟斤拷锟斤拷锟斤拷锟节碉拷锟秸伙拷锟斤拷锟 */ diff --git a/鏁版嵁/鐮斿彂璋冭瘯鏁版嵁20260323-2.zip b/鏁版嵁/鐮斿彂璋冭瘯鏁版嵁20260323-2.zip new file mode 100644 index 0000000..59ca50d --- /dev/null +++ b/鏁版嵁/鐮斿彂璋冭瘯鏁版嵁20260323-2.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bca4f7338024dc0439da61fdfa7f09da941d01cc0766123f77ee7a32a2e3c2b9 +size 3307924