From b42b3a5edd708bdb1abc29575f5b9b358c5bef73 Mon Sep 17 00:00:00 2001 From: lh <3191213465@qq.com> Date: Fri, 22 May 2026 16:39:39 +0800 Subject: [PATCH] =?UTF-8?q?[9.3.101]=209.3.101=E9=A6=96=E7=89=88=E4=BA=8C?= =?UTF-8?q?=E5=9B=9E=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=9F=BA=E7=BA=BF=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据提交 --- .../ci_integrate_config.h | 2 +- .../APP/ciapp/2oo2/2oo2DataTransferManage.c | 312 +- .../APP/ciapp/2oo2/2oo2DataTransferManage.h | 2 + .../APP/ciapp/2oo2/2oo2InterfaceDataManage.c | 7 +- .../APP/ciapp/2oo2/2oo2InterfaceDataManage.h | 7 +- .../APP/ciapp/AxisAssert/AxisAssertDefine.h | 5 +- .../APP/ciapp/AxisAssert/AxisAssertManage.c | 51 +- .../APP/ciapp/AxisAssert/AxisAssertManage.h | 20 +- .../ciapp/AxisAssert/AxisAssertManageAPI.c | 987 ++-- .../ciapp/AxisAssert/AxisAssertManageAPI.h | 71 +- .../ConnectOverrideCfgDataMg.c | 177 + .../ConnectOverrideCfgDataMg.h | 101 + .../ConnectOverride/ConnectOverrideDataMg.c | 1145 ++++ .../ConnectOverride/ConnectOverrideDataMg.h | 91 + .../ConnectOverrideRelayDefine.h | 45 + .../APP/ciapp/DataManage/DeviceDataManage.c | 1648 ++++-- .../APP/ciapp/DataManage/DeviceDataManage.h | 185 +- .../src/APP/ciapp/DataManage/PlatDataManage.c | 101 +- .../src/APP/ciapp/DataManage/PlatDataManage.h | 13 +- TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.c | 386 ++ TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.h | 163 + TSCP/src/APP/ciapp/ECS/ECSDataManage.c | 1560 ++++++ TSCP/src/APP/ciapp/ECS/ECSDataManage.h | 293 + TSCP/src/APP/ciapp/ECS/ECSDefine.h | 31 + TSCP/src/APP/ciapp/ERROR/ErrorDataManage.c | 28 +- TSCP/src/APP/ciapp/ERROR/ErrorDataManage.h | 2 + TSCP/src/APP/ciapp/ERROR/ErrorDefine.h | 61 +- TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.c | 53 +- TSCP/src/APP/ciapp/ESB/ESBConfigDataManage.h | 36 +- TSCP/src/APP/ciapp/ESB/ESBDataManage.c | 382 +- TSCP/src/APP/ciapp/ESB/ESBDataManage.h | 79 +- TSCP/src/APP/ciapp/ESB/ESBDefine.h | 4 + .../EnvelopeManage/EnvelopeLogicProcess.c | 44 +- .../APP/ciapp/EnvelopeManage/EnvelopeScreen.c | 57 +- .../ciapp/EnvelopeManage/UCTEnvelopeTrack.c | 33 +- .../src/APP/ciapp/IO/DeviceRelayDataProcess.c | 1257 ++++- .../src/APP/ciapp/IO/DeviceRelayDataProcess.h | 80 + TSCP/src/APP/ciapp/IO/InputDataProcess.c | 1548 +++++- TSCP/src/APP/ciapp/IO/InputDataProcess.h | 16 + TSCP/src/APP/ciapp/IO/OutputDataProcess.c | 217 +- TSCP/src/APP/ciapp/IO/OutputDataProcess.h | 8 + .../Indicator/IndicatorConfigDataManage.c | 41 + .../Indicator/IndicatorConfigDataManage.h | 9 + .../src/APP/ciapp/Indicator/IndicatorDefine.h | 9 + .../APP/ciapp/Initial/ConfigDataReadManage.c | 391 +- .../APP/ciapp/Initial/ConfigDataReadManage.h | 27 +- TSCP/src/APP/ciapp/Initial/InitialProcess.c | 296 +- TSCP/src/APP/ciapp/Initial/InitialProcess.h | 37 + .../InvadeSectionConfigDataManage.c | 2 + TSCP/src/APP/ciapp/LogRecord/LogRecord.c | 375 +- TSCP/src/APP/ciapp/LogRecord/LogRecord.h | 4 + .../ciapp/LogicManage/InterlockCommonManage.c | 7 +- .../ciapp/LogicManage/InterlockLogicManage.c | 1194 ++++- .../ciapp/LogicManage/InterlockLogicManage.h | 55 + .../ciapp/LogicManage/RouteRecoverManage.c | 343 +- .../LogicManage/TradInterlockLogicManage.c | 2 +- .../ciapp/LogicProcess/InterlockLogicCheck.c | 1080 ++-- .../ciapp/LogicProcess/InterlockLogicCheck.h | 68 +- .../LogicProcess/InterlockLogicProcess.c | 997 +++- .../LogicProcess/InterlockLogicProcess.h | 19 +- .../LogicProcess/LogicalRouteLogicCheck.c | 57 +- .../LogicProcess/LogicalRouteLogicCheck.h | 2 +- TSCP/src/APP/ciapp/Main/MainApp.c | 2 +- TSCP/src/APP/ciapp/Mask/MaskDefine.h | 18 +- TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.c | 267 + TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.h | 123 + TSCP/src/APP/ciapp/OHL/OHLDataManage.c | 187 + TSCP/src/APP/ciapp/OHL/OHLDataManage.h | 113 + TSCP/src/APP/ciapp/OHL/OHLDefine.h | 29 + TSCP/src/APP/ciapp/PSD/PSDDataManage.c | 238 + TSCP/src/APP/ciapp/PSD/PSDDataManage.h | 90 +- TSCP/src/APP/ciapp/PSD/PSDDefine.h | 4 + .../APP/ciapp/ParsePack/CiInterfaceDefine.h | 25 + .../APP/ciapp/ParsePack/ParsePackAtsData.c | 109 + .../APP/ciapp/ParsePack/ParsePackAtsData.h | 20 + .../APP/ciapp/ParsePack/ParsePackAxleData.c | 229 + .../APP/ciapp/ParsePack/ParsePackAxleData.h | 37 + .../src/APP/ciapp/ParsePack/ParsePackCiData.c | 149 +- .../src/APP/ciapp/ParsePack/ParsePackCiData.h | 2 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.c | 413 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.h | 23 +- .../src/APP/ciapp/ParsePack/ParsePackDefine.h | 3 +- .../ciapp/ParsePack/ParsePackGateWayData.c | 2230 +++++++- .../ciapp/ParsePack/ParsePackGateWayData.h | 492 +- .../src/APP/ciapp/ParsePack/ParsePackManage.c | 19 +- .../src/APP/ciapp/ParsePack/ParsePackOcData.c | 67 +- .../src/APP/ciapp/ParsePack/ParsePackOcData.h | 18 - .../APP/ciapp/ParsePack/ParsePackPSCData.c | 3 - .../APP/ciapp/ParsePack/ParsePackTmcData.c | 878 ++- .../APP/ciapp/ParsePack/ParsePackTmcData.h | 62 +- .../APP/ciapp/ParsePack/ParsePackVobcData.c | 1221 +++-- .../APP/ciapp/ParsePack/ParsePackVobcData.h | 35 +- TSCP/src/APP/ciapp/QueryFiles/CiConfigData.h | 1 + TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c | 729 ++- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h | 114 +- .../src/APP/ciapp/QueryFiles/dquCIInterFace.c | 364 +- .../src/APP/ciapp/QueryFiles/dquCIInterFace.h | 61 +- .../ciapp/QueryFiles/dquCIJDQStruFrmChar.c | 336 +- .../ciapp/QueryFiles/dquCIJDQStruFrmChar.h | 44 + .../APP/ciapp/QueryFiles/dquCIJDQStruInit.c | 511 ++ .../APP/ciapp/QueryFiles/dquCIJDQStruInit.h | 52 +- TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h | 13 +- .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.c | 275 +- .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.h | 10 + .../APP/ciapp/QueryFiles/dquCILSStruInit.c | 103 + .../APP/ciapp/QueryFiles/dquCILSStruInit.h | 11 + TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c | 156 +- TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h | 11 +- TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h | 72 +- .../APP/ciapp/Relay/RelayConfigDataManage.c | 15 +- .../APP/ciapp/Relay/RelayConfigDataManage.h | 12 +- TSCP/src/APP/ciapp/Relay/RelayDefine.h | 42 +- TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c | 303 +- TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.h | 16 +- TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c | 18 +- .../ciapp/ReverseCut/ReverseCutDataManage.c | 6 + .../APP/ciapp/Route/RouteConfigDataManage.c | 404 ++ .../APP/ciapp/Route/RouteConfigDataManage.h | 120 +- TSCP/src/APP/ciapp/Route/RouteDataManage.c | 231 +- TSCP/src/APP/ciapp/Route/RouteDataManage.h | 236 +- TSCP/src/APP/ciapp/Route/RouteDefine.h | 9 + .../APP/ciapp/Section/LinkConfigDataManage.c | 120 +- .../APP/ciapp/Section/LinkConfigDataManage.h | 7 +- .../Section/LogicSectionConfigDataManage.c | 143 + .../Section/LogicSectionConfigDataManage.h | 65 +- .../ciapp/Section/LogicSectionDataManage.c | 172 +- .../ciapp/Section/LogicSectionDataManage.h | 48 + .../Section/PhysicalSectionConfigDataManage.c | 99 +- .../Section/PhysicalSectionConfigDataManage.h | 7 + .../ciapp/Section/PhysicalSectionDataManage.c | 750 ++- .../ciapp/Section/PhysicalSectionDataManage.h | 112 + TSCP/src/APP/ciapp/Section/SectionDefine.h | 54 +- .../Section/SpeedLimitSecConfigDataManage.c | 832 +++ .../Section/SpeedLimitSecConfigDataManage.h | 234 + .../ciapp/Section/SpeedLimitSecDataManage.c | 1020 ++++ .../ciapp/Section/SpeedLimitSecDataManage.h | 347 ++ .../APP/ciapp/Signal/SignalConfigDataManage.c | 142 + .../APP/ciapp/Signal/SignalConfigDataManage.h | 26 + TSCP/src/APP/ciapp/Signal/SignalDataManage.c | 118 +- TSCP/src/APP/ciapp/Signal/SignalDataManage.h | 19 + TSCP/src/APP/ciapp/Signal/SignalDefine.h | 18 + .../SsksLightRelayCfgDataManage.c | 82 + .../SsksLightRelayCfgDataManage.h | 70 + .../SsksLightRelay/SsksLightRelayDataManage.c | 196 + .../SsksLightRelay/SsksLightRelayDataManage.h | 100 + .../SsksLightRelay/SsksLightRelayDefine.h | 27 + .../APP/ciapp/Switch/SwitchConfigDataManage.c | 142 + .../APP/ciapp/Switch/SwitchConfigDataManage.h | 153 +- TSCP/src/APP/ciapp/Switch/SwitchDataManage.c | 335 +- TSCP/src/APP/ciapp/Switch/SwitchDataManage.h | 83 + TSCP/src/APP/ciapp/Switch/SwitchDefine.h | 12 + TSCP/src/APP/ciapp/System/CiSystemDefine.h | 132 +- .../src/APP/ciapp/System/SystemConfigDefine.h | 16 +- .../APP/ciapp/System/SystemParameterManage.c | 282 +- .../APP/ciapp/System/SystemParameterManage.h | 135 +- .../APP/ciapp/Train/EvacuationAreaManage.c | 1045 ++-- .../APP/ciapp/Train/EvacuationAreaManage.h | 41 +- TSCP/src/APP/ciapp/Train/TrainDataManage.c | 500 +- TSCP/src/APP/ciapp/Train/TrainDataManage.h | 98 +- TSCP/src/APP/ciapp/Train/TrainDefine.h | 11 + TSCP/src/DRV/imx8_drv_gpio.c | 779 +-- TSCP/src/DRV/imx8_drv_gpio.h | 163 - TSCP/src/MSCP/CFM/CFM_Net.c | 4762 ++++++++--------- TSCP/src/MSCP/CFM/CFM_Net.h | 948 ++-- TSCP/src/MSCP/CFM/CFM_Raw.c | 1050 ++-- TSCP/src/MSCP/CFM/CFM_Raw.h | 2 +- TSCP/src/MSCP/CM/CM_Com.c | 23 +- TSCP/src/MSCP/CM/CM_Time.c | 17 +- TSCP/src/MSCP/CM/CM_UDP.c | 46 +- TSCP/src/MSCP/CM/CM_UDP.h | 11 +- TSCP/src/MSCP/DFM/DFM_DRV.h | 3 - TSCP/src/MSCP/DFM/DFM_DRV_QNX.c | 30 +- TSCP/src/MSCP/MSCP_APP_API.c | 12 +- TSCP/src/MSCP/MSCP_main.c | 2 + TSCP/src/MSCP/PFM/PFM_Cfg.c | 48 +- TSCP/src/MSCP/PFM/PFM_Cfg.h | 2 + TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c | 2 + TSCP/src/MSCP/PFM/PFM_InputOutput.c | 1970 ++++--- TSCP/src/MSCP/PFM/PFM_InputOutput.h | 2 +- TSCP/src/MSCP/PFM/PFM_Log.c | 161 +- TSCP/src/MSCP/PFM/PFM_Log.h | 28 + TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c | 17 +- TSCP/src/MSCP/SFM/SFM_2oo2.c | 79 +- TSCP/src/MSCP/SFM/SFM_2x2.c | 170 +- TSCP/src/MSCP/SFM/SFM_2x2.h | 2 + TSCP/src/MSCP/SFM/SFM_Prtcl.c | 2976 +++++----- TSCP/src/MSCP/SFM/SFM_package.c | 157 - TSCP/src/MSCP/SFM/SFM_package.h | 9 - .../dqu_cbtc_common/dquCbtcConfigData.c | 6 +- .../dqu_cbtc_common/dquCbtcConfigData.h | 4 +- .../dqu_common/dqu_dfs_common/dquCbtcType.h | 4 +- .../dqu_dfs_common/dquDataTypeDefine.h | 5 +- .../dqu_common/dqu_emap_common/dquEmapInit.c | 414 +- .../dqu_common/dqu_emap_common/dquEmapInit.h | 28 +- .../src/dqu_common/dqu_emap_common/dquQuery.c | 8 +- .../src/dqu_common/dqu_emap_common/dquQuery.h | 1 + .../dqu_common/dqu_emap_common/dquQueryExp.c | 4 +- .../dqu_emap_common/dquStructInit.c | 112 + .../dqu_emap_common/dquStructInit.h | 20 + .../dqu_common/dqu_emap_common/dsuStruct.h | 79 +- .../dqu_idmap_common/dquIdmapQuery.c | 4 +- .../fsfb/common_fsfb/FsfbMessageInfo.c | 938 ++-- .../protocol/fsfb/common_fsfb/FsfbProtcl.c | 686 +-- .../fsfb/common_fsfb/FsfbRecordDelare.h | 164 +- 数据/研发调试数据20260323-2.zip | 3 + 205 files changed, 39055 insertions(+), 12393 deletions(-) create mode 100644 TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.c create mode 100644 TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideCfgDataMg.h create mode 100644 TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.c create mode 100644 TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideDataMg.h create mode 100644 TSCP/src/APP/ciapp/ConnectOverride/ConnectOverrideRelayDefine.h create mode 100644 TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.c create mode 100644 TSCP/src/APP/ciapp/ECS/ECSConfigDataManage.h create mode 100644 TSCP/src/APP/ciapp/ECS/ECSDataManage.c create mode 100644 TSCP/src/APP/ciapp/ECS/ECSDataManage.h create mode 100644 TSCP/src/APP/ciapp/ECS/ECSDefine.h create mode 100644 TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.c create mode 100644 TSCP/src/APP/ciapp/OHL/OHLConfigDataManage.h create mode 100644 TSCP/src/APP/ciapp/OHL/OHLDataManage.c create mode 100644 TSCP/src/APP/ciapp/OHL/OHLDataManage.h create mode 100644 TSCP/src/APP/ciapp/OHL/OHLDefine.h create mode 100644 TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.c create mode 100644 TSCP/src/APP/ciapp/Section/SpeedLimitSecConfigDataManage.h create mode 100644 TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.c create mode 100644 TSCP/src/APP/ciapp/Section/SpeedLimitSecDataManage.h create mode 100644 TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.c create mode 100644 TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayCfgDataManage.h create mode 100644 TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDataManage.c create mode 100644 TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDataManage.h create mode 100644 TSCP/src/APP/ciapp/SsksLightRelay/SsksLightRelayDefine.h create mode 100644 数据/研发调试数据20260323-2.zip 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); + /*ñϽCBTCARB,CBTCUT*/ + 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 - { - /*DZΣ*/ - } } - } - 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) - { - /*DZ߽Σ*/ - } - 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 - { - /*DZ߽Σδ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_AxisSecEnvelopeCheck0x%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 { - /*DZΣ*/ + /*Ҫõļ״̬Ϊ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_SUCCESSCTռãCI_ERRORCTռ*/ + 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) + { + /*ںΪǰںţ˵ǰDZ½ڵǰ߼εģ鲻ͨ*/ + 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++) + { + /*жϹIDIDǷһ*/ + if (wPhySecId == gConnectOverrideRelayCfgStr[i].RelPhySecId) + { + /*IDIDһ£·״̬*/ + 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ʱ + ˵·״̬ʱijĿǰѲ㣬 + ȡʱ·״̬Ա״̬*/ + 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; /*1ID*/ + /*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; /*2ID*/ /* */ 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);/*ȡ1ID*/ + 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Ӧعܣ̵ID0*/ @@ -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);/*ȡ2ID*/ 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);/*1ID*/ + 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);/*2ID*/ 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 phySecIdId +* 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 phySecIdId +* 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 wSwitchIdId +* ֵ +*/ +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 wSwitchIdId +* ֵ 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 phySecIdId +* UINT8 oper_src,Դ +* UINT8 sendLevelͼ +* ֵ CI_SUCCESS: ɹ +* CI_ERROR: ʧ +*/ +UINT8 GetDanCaoPhySecValidState(UINT16 phySecId, UINT8 oper_src, UINT8 sendLevel); + +/* +* ǿɶμ +* ˵ UINT16 phySecIdId +* UINT8 sendLevelͼ +* ֵ CI_SUCCESS: ɹ +* CI_ERROR: ʧ +*/ +UINT8 GetForcePhySecValidState(UINT16 phySecId, UINT8 sendLevel); + +/* +* ̬λü +* ˵ UINT16 wSwitchIdId +* ֵ +*/ +void CheckSwitchNomalPosProc(const UINT16 wSwitchId); + +/* +* ٻ +* ˵ const UINT16 wSwitchId, ID +* ֵ CI_SUCCESS: ɹ +* CI_ERROR: ʧ +*/ +UINT8 CheckSwitchDFMulValid(const UINT16 wSwitchId, const UINT8 chSwitchPos); + +/* +* ̬λü͵() +* ˵ UINT16 wSwitchIdId +* ֵ 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(); + /* 1AϵԴտϿ */ 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(); - /* 1BϵԴտϿ*/ + + /* 1BϵԴտϿ */ 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(); /* 1PUB Aɼ24VAԴ쳣24VBԴ쳣 2CPI 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(); /* 1PUB Bɼ24VAԴ쳣24VBԴ쳣 2CPI 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 ECSID +* ˵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 ECSlinkID +* ˵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 ECSlinkƫ +* ˵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 ECSID +* ˵const UINT16 EcslId ECS ID +* ֵNULL ȡʧ +* ECSID +* 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 ECSID +* ˵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 ECSlinkID +* ˵const UINT16 EcslId ECS ID +* ֵ0 ȡʧ +* linkID +* Created By LQ 2026.01.26 +*/ +UINT16 GetEcsStartLinkId(const UINT16 EcslId); + +/* +* ȡָID ECSlinkƫ +* ˵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 ECSID +* ˵const UINT16 EcslId ECS ID +* ֵNULL ȡʧ +* ECSID +* 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; /*ECSID*/ + 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 }; /*ECSID*/ + 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 + { + /*ռõ仯ҪжǷΪͨųͨжϵڵij*/ + dwTrainStopStartCycNum = GetEcsTrainStopStartCycNum(wEcsId); /*ȡгͣʼ*/ + if ((0U == cPreOccPhySecNum) && (0U != dwTrainStopStartCycNum)) + { + /*ռõΪ0Ҵͣʼڣ˵ͨųͣºͨжϵijʱҪάõͣڣʷ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; /*ECSID*/ + 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; /*ECSID*/ + 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) + { + /*˶εij*/ + 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 + { + /*һεij*/ + 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; /*ʻECSID*/ + UINT16 wEcsGoOutPhySecId = 0U; /*ʻECSID*/ + 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; /*ʻECSID*/ + UINT16 wEcsGoOutPhySecId = 0U; /*ʻECSID*/ + 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 + { + /*쳣֧ID0*/ + } + } + 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 IDlink +* ˵ 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 IDlink +* ˵ 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:δȫCESBCESB_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һϢDZڣʱж */ + 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; /* CRC32ATSϢ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 + { + ; /** DZϢ */ + } + 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:δȫCESBCESB_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)) - {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ + if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) && ((pPretemp->startPos.Lnk == wAgLink) || (pPretemp->endPos.Lnk == wAgLink))) + {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ 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)) - {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ + if ((FUNC_SWITCH_ON == chBgUtSwitch) && (LINK_REL_PHYSEC_BG == chBgAtt) && (wNextLinkId == wAgLink) && ((pBacktemp->startPos.Lnk == wAgLink) || (pBacktemp->endPos.Lnk == wAgLink))) + {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ 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_SUCCESSGJ CI_ERRORGJ +* +*/ +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_SUCCESSGJ CI_ERRORGJ +*/ +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_SUCCESSGJ CI_ERRORGJ*/ + UINT8 LogSecGJState = CI_ERROR; /*߼GJ״̬CI_SUCCESSGJ CI_ERRORGJҪ*/ + + 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; /*PSDID*/ 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); /*PSDPSDδ쳣*/ - } + /*豸η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̵Գ߸CESBCESB·*/ + 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) /*OCCI*/ 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Ϊ1ECS*/ + break; + case ATS_CMD_ECS_USE_STOP: + /*ECSԶͣ*/ + EcsAutoTrigCmdPro(1U, ECS_AUTOTRIG_NO); /*DSNǰһһECSĬIDΪ1ECS*/ + 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ڽ·ͱοijʶԹӰ졣 + 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) {/*returnRouteIdthroughRouteId0u˵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; /*ɼ̵ǰַIJɼֵ:*/ UINT8 PosValue_ForProcessOther = 0u; /*ɼ̵ϵַIJɼֵ:*/ - 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 + { + /*DZΣ*/ + } + } + } + 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һϢDZڣʱж */ + 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; /* CRC32ATSϢ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 + { + ; /** DZϢ */ + } + 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һϢDZڣʱж */ + 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; /* CRC32ATSϢ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 + { + ; /** DZϢ */ + } + 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һϢDZڣʱж */ + 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; /* CRC32ATSϢ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 + { + ; /** DZϢ */ + } + 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; /*ECSCI*/ + 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 + { + /*DZECS*/ + } + } +} \ 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ʧ -* NOTEbug 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ʧ +* NOTEbug 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ʧ * NOTEbug 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;/*dz̬λ߼ʱձ־*/ + 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)) { /*ȴ״̬*/ - ; + /*ʿ߽·ȴURRUCLλ*/ + } + 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); + + /*ʿURRUCL״ִ̬*/ + 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); /*ȡoverlapID*/ @@ -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) + { + /*ʼڱߵĽ·URRUCL*/ + 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) /**/ } + /*ʿURRUCL״ִ̬*/ + RouteReqRlsRelayKeepProc(routeId); +} + +/* +* ʿURRUCL״ִ̬ +* ˵ 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) + { + /*һΪΣ˵гѳ/ʽѽΣURRUCL*/ + 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); + } +} /* * ·ijҪ˽·ʱʱ߼ @@ -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; /*ECSCI*/ + + 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 + { + /*ĿECSECSDZ*/ + } + } + } + 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; /*dz̬λõ߼ID*/ + UINT8 logSecLockState = 0U; /*߼״̬*/ + UINT8 unusualLogSecFlag = 0U; /*dz̬λ߼ʱ־*/ + + 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);/*ȡdz̬λ߼״̬*/ + unusualLogSecFlag = GetSwitchUnusualLogSecFlag(switchId); + + if (LOG_SECTION_LOCK_DELAY == logSecLockState) + {/*dz̬λõ߼Ϊʱ*/ + /*õdz̬λ߼ʱ־Ч*/ + SetSwitchUnusualLogSecFlag(switchId, SWITCH_UNUSUAL_VALID); + } + else if (LOG_SECTION_LOCK_NO == logSecLockState) + {/*dz̬λõ߼δ*/ + if (SWITCH_UNUSUAL_VALID == unusualLogSecFlag) + {/*dz̬λ߼ʱ־Ч*/ + + /*е̬λõ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;/*ĬΪָؿ*/ - /*жϼΪSPKSDZźŻ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_ERRORCI_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ؿش򿪻رյ·ΪCBTCSPKSָԶؿ*/ + + /*Զؿ*/ + 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޳µ޳ijؿ*/ + {/*SPKS¡ȫη޳µ޳ijؿ*/ 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ؿش򿪻رյ·ΪCBTCSPKSָԶؿ*/ + /*Զؿ*/ + 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)) + { + /*ʿ߶ȡijʱ*/ + 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·ڵһ߼жгԴʱDZ۷ź*/ 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* switchIDIDUINT8* 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* switchIDIDUINT8* 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-ATSNRλ*/ +#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 /*Ӵֵ(֧2IDΪ)*/ +#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;*//*VOBCPSDرźŵĽ·*/ - /*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Ϊ1ECS*/ + + 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}; /*AxisCI֡ṹ*/ 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һϵͳͨŵij*/ + 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]; /*AxisCI֡ṹ*/ +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)) { ;/*·־dzɹʧҪ·*/ 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) /*ӿʼվֹ cgh4ֽ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 δԼSPKS1*/ + /*״̬λδ ԼSPKS1*/ 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 δԼATS1*/ + /*״̬λ(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-ATSNRλ*/ + :/*CI-ATSNRλ*/ + { + 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У,2CRC4*/ - 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У,2CRC4*/ - 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) /*ZCCIƶֵ*/ /*TIOC TMC*/ -#define TIOC_TO_TMC_DATA_LEN_MAX ((UINT16)3000) /*ZCֵ*/ +#define TIOC_TO_TMC_DATA_LEN_MAX ((UINT16)3000) /*RCTMCֵ*/ /*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 1ATSȡѹϢ +* @brief 1ATSȡг״̬쳣Ϣ * @param void * @return void */ @@ -1793,7 +3041,7 @@ void ClearAtsDaMsgFirst(void) } /** -* @brief 2ATSȡѹϢ +* @brief 2ATSȡг״̬쳣Ϣ * @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) + { + /*ڶATScesb״ȷϢ*/ + 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 1ATS/ȡȫηϢ +* @param void +* @return void +*/ +void ClearAtsAllFlockMsgFirst(void) +{ + (void)CommonMemSet((void*)&g_strAtsAllFlockMsgFst, (UINT32)sizeof(g_strAtsAllFlockMsgFst), (UINT8)0U, (UINT32)sizeof(g_strAtsAllFlockMsgFst)); +} + +/** +* @brief 2ATSȡȫηϢ +* @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 1ATSȡȫ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 2ATSȡȫ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) /*TIOCATSгϢ*/ #define MSG_TYPE_TRAIN_FLY_INFO ((UINT8)132u) /*TIOCATSͷɳ崻Ϣ*/ +#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 1ATSȡѹϢ +* @brief 1ATSȡг״̬쳣Ϣ * @param void * @return void */ void ClearAtsDaMsgFirst(void); /** -* @brief 2ATSȡѹϢ +* @brief 2ATSȡг״̬쳣Ϣ * @param void * @return void */ @@ -449,4 +610,265 @@ void ClearSndAtsWlbFstCfmMsg(void); */ void ClearSndAtsDaFstCfmMsg(void); +/** +* @brief 1ATS/ȡȫηϢ +* @param void +* @return void +* @note Created By fan 2025.12.13 +*/ +void ClearAtsAllFlockMsgFirst(void); + +/** +* @brief 2ATSȡȫηϢ +* @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 1ATSȡȫCESBϢ +* @param void +* @return void +* Created By fan 2026.02.04 +*/ +void ClearAtsCesbMsgFirst(void); + +/** +* @brief 2ATSȡȫ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 idci 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)/*OCCI״̬Ϣ 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; /*忨״̬0x550xaa*/ 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}; /*CIPSC֡*/ 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; /*ȱij֡ʧ*/ } 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)) - { - ; /* DZTIOC߼ */ - } - 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};/*CIZC֡*/ + UINT8 TiocToTmcDataBuffer[TIOC_TO_TMC_DATA_LEN_MAX] = {0u};/*RCTMC֡*/ 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; /*SPKSCI*/ + 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 + { + /*DZ*/ + } + } + 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; /*SPKSCI*/ + 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 + { + /*DZ*/ + } + } + 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) /*TIOCTMCȫͨųϢ*/ #define TMC_TO_TIOC_LINECT_MSG ((UINT16)0x010AU) /*TMCTIOCȫͨųϢ*/ +#define TIOC_TO_TMC_ACCEL_MSG ((UINT16)0x010BU) /*RCTMCǣٶϢ*/ +#define TMC_TO_TIOC_ACCEL_MSG ((UINT16)0x010CU) /*TMCRCǣٶϢ*/ + +#define TIOC_TO_TMC_BRAKE_MSG ((UINT16)0x010DU) /*RCTMCƶϢ*/ +#define TMC_TO_TIOC_BRAKE_MSG ((UINT16)0x010EU) /*TMCRCƶϢ*/ + #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); /* -* CiIvocѩƶϢ +* CiIvocƶϢ * ˵ UINT8* pDataBuf ݻ * UINT16 *pDataLength ݳ() * UINT16 wTrainId гID0x14 @@ -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); /* * CiVOBCͨźŻ״̬Ϣ @@ -571,7 +573,6 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength UINT8 cmdType = 0U; /*ſϢ0x550xAA*/ 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; /*PSDID*/ UINT16 appInfoType = 0u; /*ӦϢ*/ - UINT32 psdIdIntConnt = 0u; /*ͨPSDID*/ - 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; /*Źijվ·ʼźŻ*/ 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 };/*CIVOBC֡*/ 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 };/*CIVOBC֡*/ 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޸ijɶ: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޸ijɶ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޸ijɶ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޸ijɶ: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޸ijɶ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޸ijɶ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 } /* -* CiIvocѩƶϢ +* CiIvocƶϢ * ˵ UINT8* pDataBuf ݻ * UINT16 *pDataLength ݳ() * UINT16 wTrainId гID0x14 @@ -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 };/*CIVOBC֡*/ + 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;/*ij*/ + ShortToChar(CI_IVOC_INFO_TYPE_SPECIAL_CONTROL, &cszCiToIvocDataBuf[wDataIndex]); + wDataIndex += 2U;/*Ӧñ*/ + wDataIndex += 2U;/*Ԥֽ*/ + + /*ؿر*/ + cszCiToIvocDataBuf[wDataIndex++] = CI_IVOC_LOST_POSITION; + + /*Ӧòݵıij */ + 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 errordwCiEtcsId%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 };/*CIVOBC֡*/ - 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;/*ij*/ - ShortToChar(CI_IVOC_INFO_TYPE_SPECIAL_CONTROL, &cszCiToIvocDataBuf[wDataIndex]); - wDataIndex += 2U;/*Ӧñ*/ - wDataIndex += 2U;/*Ԥֽ*/ - - /*ؿر*/ - cszCiToIvocDataBuf[wDataIndex] = CI_IVOC_LOST_POSITION; - wDataIndex++; - - /*Ӧòݵıij */ - 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 errordwCiEtcsId%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; +} + +/* +* CiIvoc߼νֹ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; +} + +/* +* CiIvocǣٶȺƶϢ +* ˵ 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) /*CIIVOC Źر*/ #define CI_IVOC_PACKET_LENGTH_MAX ((UINT16)1400U) /*CIIVOC ֵ*/ #define TRAIN_TOPLATFORM_LOG_SUM ((UINT16)1000U) /*гվ̨߼*/ +#define CI_IVOC_FLOCK_LOG_SUM ((UINT16)1000U) /*CIIVOC߼*/ #define CI_IVOC_LOGSEC_JUMPLOCK_YES ((UINT8)0x55U) /*CIIVOC ߼Ծ*/ #define CI_IVOC_LOGSEC_JUMPLOCK_NO ((UINT8)0xaaU) /*CIIVOC ߼Ծδ*/ @@ -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); - /* * CiIvocԾظ * ˵ UINT8* dataBuf, ݻ @@ -714,6 +709,28 @@ void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId); * Create fan 20250725 */ UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); + +/* +* CiIvoc߼νֹ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); + +/* +* CiIvocǣٶȺƶϢ +* ˵ 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); +/********************************************* +*ܣݵӵͼźŻźŻն赲 +*˵pSgnlDSUźŻݽṹָ +* 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 /*linkCBTCԣ߼β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++) { /*߼εIJ*/ @@ -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; } +/********************************************* +*ܣݵӵͼźŻźŻն赲 +*˵pSgnlDSUźŻݽṹָ +* 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; /*ȳʼΪAGBG*/ 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; } +/********************************************* +*ܣӴ +*˵ciIdID 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); /********************************************* *ܣ *˵ciIdID 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); +/********************************************* +*ܣӴ +*˵ciIdID 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 ÿֽڵij +*˵pDataAddrݵַ pCesbStpStrͣť̵ݽṹָ realRowLen ÿֽڵij *ֵ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 һݵij @@ -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 һݵij @@ -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;/*ʵʱһеij*/ + 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; /*һеij*/ + 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; /*һеij*/ + 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; /*һеij*/ + 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; + + /*CBTCID*/ + 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; - - /*CBTCID*/ - 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; /*ʵʱݵһеij*/ + 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-ATSNRλ*/ + 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)) + { + /*00xFFFFЧλ*/ + 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Ϊ8CI_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·CBTCESB/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·ߡ·̵URRID +* ˵ 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·ߡ·ͷż̵UCLID +* ˵ 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·ߡ·ñ̵UARID +* ˵ 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·ߡɼ·̵URRID +* ˵ 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·ߡɼ·ͷż̵UCLID +* ˵ 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·ߡɼ·ñ̵UARID +* ˵ 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ԣ0x55CBTC0xAACBTC*/ - 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ԣ0x55CBTC0xAACBTC*/ + 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·CBTCESB/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·ߡ·̵URRID +* ˵ const UINT16 routeId, ·ID +* ֵ 0ȡʧ +* ̵ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteRequestRelayId(const UINT16 routeId); + +/* +* ȡָID·ߡ·ͷż̵UCLID +* ˵ const UINT16 routeId, ·ID +* ֵ 0ȡʧ +* ̵ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteReleaseRelayId(const UINT16 routeId); + +/* +* ȡָID·ߡ·ñ̵UARID +* ˵ const UINT16 routeId, ·ID +* ֵ 0ȡʧ +* ̵ID +* Create By wyd 20260316 +*/ +UINT16 GetDrvRouteAckRelayId(const UINT16 routeId); + +/* +* ȡָID·ߡɼ·̵URRID +* ˵ const UINT16 routeId, ·ID +* ֵ 0ȡʧ +* ̵ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteRequestRelayId(const UINT16 routeId); + +/* +* ȡָID·ߡɼ·ͷż̵UCLID +* ˵ const UINT16 routeId, ·ID +* ֵ 0ȡʧ +* ̵ID +* Create By wyd 20260316 +*/ +UINT16 GetCollRouteReleaseRelayId(const UINT16 routeId); + +/* +* ȡָID·ߡɼ·ñ̵UARID +* ˵ 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; /*·̵URRID*/ + UINT16 wRouteReleaseRelayId = 0u; /*·ͷż̵UCLID*/ + UINT16 wRouteAckRelayId = 0u; /*·ñ̵UARID*/ + 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) + { + /*ǰڱߵĽ·URRUCL*/ + 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; /*·Ҫؿ״̬ڴPSDSPKS۳ָؿź*/ - UINT8 TrainEnterRouteFlag; /*гʻ·־ڳ;۷ʹ*/ - UINT16 atsExptLkOverlapId; /*ATSֵյOverlapId*/ - UINT16 OtherCIRouteOvlpUTUnlockCount; /*·UTUT*/ - UINT16 OtherCIRouteOvlpCTUnlockCount; /*·CTCT*/ - 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; /*·Ҫؿ״̬ڴPSDSPKS۳ָؿź*/ + UINT8 TrainEnterRouteFlag; /*гʻ·־ڳ;۷ʹ*/ + UINT16 atsExptLkOverlapId; /*ATSֵյOverlapId*/ + UINT16 OtherCIRouteOvlpUTUnlockCount; /*·UTUT*/ + UINT16 OtherCIRouteOvlpCTUnlockCount; /*·CTCT*/ + 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; /*·ӽijҪг;۷ijID*/ - UINT32 dwRouteZhefanjiesuoCyc; /*·ӽijҪг;۷ں*/ + UINT16 wZhefanjiesuoTrainId; /*·ӽijҪг;۷ijID*/ + UINT32 dwRouteZhefanjiesuoCyc; /*·ӽijҪг;۷ں*/ - 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ԣlinkCBTCԣ*/ #define ROUTE_CBTC_PROPERTY_NO ((UINT8)0xaa) /*·CBTCԣlinkCBTCԣ*/ +#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/BG0x55 AG;0xAA BG;0xFF AGBG*/ + UINT8 chDsnConnectAttr; /*Link CBTCԣʿᣩ*/ UINT8 chExistRelCGFlag; /*LINKǷڹCG־*/ UINT16 wBGLinkRelAGLink; /*BGlinkAGlink*/ 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ԣ0x55CBTC0xaaCBTC*/ - 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Ƿ 0x550xAA*/ + 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һϢDZڣʱж */ + 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; /* CRC32ATSϢ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 + { + ; /** DZϢ */ + } + 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г־ 0xaaABLռ ÿڸ*/ 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ԣlinkCBTCԣ*/ #define LOGSEC_CBTC_PROPERTY_NO ((UINT8)0xaa) /*߼βCBTCԣlinkCBTCԣ*/ +/*߼*/ +#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ԣlinkCBTCԣ*/ #define AXIS_SEC_CBTC_PROPERTY_NO ((UINT8)0xaa) /*βCBTCԣlinkCBTCԣ*/ +/*߼νֹ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 Byhh 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 Byhh 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 Byhh 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; + + /*ڵIJ*/ + 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; + + /*յڵIJ*/ + 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뱾linklinkУƫΪ0μΪε*/ + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[0]; + } + else if ((pstrNextLinkStru->wTmnlJointMainLkId == wCurLinkId) || (pstrNextLinkStru->wTmnlJointSideLkId == wCurLinkId)) + { + /*linkյյ뱾linklinkУյƫΪlinkȵμΪε*/ + wRetVal = pstrLinkIncSRSecInfo->szLinkIncSRSecId[pstrLinkIncSRSecInfo->cLinkIncSRSecNum - 1U]; + } + else + { + wRetVal = MAX_LINE_SEC_NUM; /*쳣֧ʧ*/ + } + } + else + { + wRetVal = 0U; /*link0*/ + } + } + 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ƫΪ0linkĵһεе*/ + 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ʧ +* >0URCID +* Created Byhh 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 Byhh 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; /*IJID*/ + UINT16 wEndRelMainSRSecId; /*յID*/ + UINT16 wEndRelSideSRSecId; /*յIJID*/ + 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]; /*linkID*/ +}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 Byhh 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 Byhh 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: ȡʧ +* 0URCID +* Created Byhh 2026.03.14 +*/ +UINT8 GetSpdLmtSecRCID(const UINT16 spLtId); + +/* +* ȡָIDε̨ +*˵const UINT16 spLtId;ID +*ֵ +* SPEED_LIMIT_TYPHOON_TYPE_VALIDδ +* SPEED_LIMIT_TYPHOON_TYPE_INVALID +* Created Byhh 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 Byhh 2026.03.14 +*/ +SpeedLimitSecInfo* GetSpeedLimitSecInfo() +{ + return gSpeedLimitSecData; +} + +/* +* ȡָIDεʱ״̬ +*˵ const UINT16 spLtId;ID +*ֵ +* FLAG_SL +* FLAG_UNSLδ +* Created Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 Byhh 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 + { + /*DZ*/ + } + } +} + +/* +* ʼϢ +* ˵ void +* ֵ +* CI_SUCCESS,ʼɹ; +* CI_ERROR,ʼʧܡ +* Created Byhh 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 Byhh 2026.03.17 +*/ +UINT8 GetCacheAllSpeedState(void) +{ + return gCacheAllSpeedState; +} + +/* +* ûȫʱ״̬ +* ˵ 0x55: Ч 0xAA:Ч +* ֵ void +* Created Byhh 2026.03.17 +*/ +void SetCacheAllSpeedState(UINT8 cSetState) +{ + if ((FLAG_SL == cSetState) || (FLAG_UNSL == cSetState)) + { + gCacheAllSpeedState = cSetState; + } + else + { + ; /**/ + } +} + +/* +* ȡȫʱٶ +* ˵ void +* ֵ ȫʱֵ +* Created Byhh 2026.03.17 +*/ + +UINT8 GetCacheAllSpeedNum(void) +{ + return gCacheAllSpeedNum; +} + +/* +* ûȫʱٶ +* ˵ UINT8 cSpeed ٶֵ +* ֵ void +* Created Byhh 2026.03.17 +*/ +void SetCacheAllSpeedNum(UINT8 cSpeed) +{ + gCacheAllSpeedNum = cSpeed; +} + +/* +* TMCʱ +* ˵ UINT8 cTsrSum +* TsrTMCDataStruct* TsrData +* ֵ CI_ERRORʧ;CI_SUCCESS ɹ +* Created Byyx 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) + {/*յIJ*/ + + 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; /*յIJ*/ + } + } + } + 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) + {/*IJ*/ + + 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; /*IJ*/ + } + } + } + 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 Byhh 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 Byhh 2026.03.14 +*/ +UINT8 InitTSRSecInfo(void); +/* +* ȫ +*˵UINT8 state, ״̬ +* UINT8 speed ٶֵ +*ֵ void +* Created Byhh 2026.03.14 +*/ +void UpdateAllSpeed(UINT8 state, UINT8 speed); +/* +* ָIDεNRٶֵ +*˵ const UINT16 spLtId;ID +* const UINT8 state;NRֵ +*ֵ +* Created Byhh 2026.03.14 +*/ +void SetNRSRSetValue(const UINT16 spLtId, const UINT8 speed); +/* +* ȡָIDεNRٶֵ +*˵ const UINT16 spLtId;ID +*ֵ UINT8_MAX: ȡʧ +* ֵ +* Created Byhh 2026.03.14 +*/ +UINT8 GetNRSRSetValue(const UINT16 spLtId); +/* +* ָIDεʱٶֵ +*˵ const UINT16 spLtId;ID +* const UINT8 speed;ٶֵ +*ֵ: +* Created Byhh 2026.03.14 +*/ +void SetTSRSetValue(const UINT16 spLtId, const UINT8 speed); +/* +* ȡָIDεʱٶֵ +*˵ const UINT16 spLtId;ID +*ֵ UINT8_MAX: ȡʧ +* ֵ +* Created Byhh 2026.03.14 +*/ +UINT8 GetTSRSetValue(const UINT16 spLtId); +/* +* ָIDεȫٶֵ +*˵ const UINT16 spLtId;ID +* const UINT8 state;̨ٶֵ +*ֵ +* Created Byhh 2026.03.14 +*/ +void SetAllRSetValue(const UINT16 spLtId, const UINT8 Speed); +/* +* ȡָIDεȫٶֵ +*˵ const UINT16 spLtId;ID +*ֵ UINT8_MAX: ȡʧ +* ֵ +* Created Byhh 2026.03.14 +*/ +UINT8 GetAllSRSetValue(const UINT16 spLtId); +/* +* ָIDε̨ٶֵ +*˵ const UINT16 spLtId;ID +* const UINT8 state;̨ٶֵ +*ֵ +* Created Byhh 2026.03.14 +*/ +void SetTFSRSetValue(const UINT16 spLtId, const UINT8 Speed); +/* +* ȡָIDε̨ٶֵ +*˵ const UINT16 spLtId;ID +*ֵ UINT8_MAX: ȡʧ +* ֵ +* Created Byhh 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 Byhh 2026.03.14 +*/ +UINT8 GetTSRSetFlag(const UINT16 spLtId); +/* +* ָIDεȫ״̬ +*˵ const UINT16 spLtId; ID +* const UINT8 state; ״̬ +*ֵ +* Created Byhh 2026.03.14 +*/ +void SetAllSRSetFlag(const UINT16 spLtId, const UINT8 state); +/* +* ȡָIDεȫ״̬ +*˵ const UINT8 spLtId;ID +*ֵ +* 0Uʧ +* >0U״̬ +* Created Byhh 2026.03.14 +*/ +UINT8 GetAllSRSetFlag(const UINT16 spLtId); +/* +* ָIDε̨״̬ +*˵ const UINT16 spLtId; ID +* const UINT8 state; ̨״̬ +*ֵ +* Created Byhh 2026.03.14 +*/ +void SetTFSRSetFlag(const UINT16 spLtId, const UINT8 state); +/* +* ȡָIDε̨״̬ +*˵ const UINT16 spLtId;ID +*ֵ +* 0Uʧ +* >0U״̬ +* Created Byhh 2026.03.14 +*/ +UINT8 GetTFSRSetFlag(const UINT16 spLtId); +/* +* ȡָIDεNR״̬ +*˵const UINT16 spLtId;ID +*ֵ +* 0Uʧ +* >0U״̬ +* Created Byhh 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 Byhh 2026.03.14 +*/ +void UpdateAllSpeed(UINT8 state, UINT8 speed); + + +/* +* ȡȫʱ״̬ +* ˵ void +* ֵ 0x55: Ч 0xAA:Ч +* Created Byhh 2026.03.17 +*/ +UINT8 GetCacheAllSpeedState(void); + +/* +* ûȫʱ״̬ +* ˵ 0x55: Ч 0xAA:Ч +* ֵ void +* Created Byhh 2026.03.17 +*/ +void SetCacheAllSpeedState(UINT8 cSetState); + +/* +* ȡȫʱٶ +* ˵ void +* ֵ ȫʱֵ +* Created Byhh 2026.03.17 +*/ + +UINT8 GetCacheAllSpeedNum(void); + +/* +* ûȫʱٶ +* ˵ UINT8 cSpeed ٶֵ +* ֵ void +* Created Byhh 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 Byhh 2026.03.14 +*/ +void UpdateTFSRSetFlag(const UINT8 state, const UINT8 speed); +/* +* ȡζ̬ṹϢ +*˵ void +*ֵζ̬ṹϢָ +* Created Byhh 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ȵƼ̵*/ + +/* +* ȡָIDSSKSȵƼ̵ +* ˵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 + +/* +* ȡָIDSSKSȵƼ̵ +* ˵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; +} + +/* +* ȡָIDID +* ˵ 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λʹ̵RWMID +* ˵ const UINT16 switchId, ID +* ֵ 0: ȡʧ +* >0: λʹ̵RWMID +*/ +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 BypassID +* ˵ const UINT16 switchId, ID +* ֵ 0: ȡʧ +* >0: λʹ·زɼ̵Enable BypassID +*/ +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); + +/* +* ȡָIDID +* ˵ 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λʹ̵RWMID +* ˵ const UINT16 switchId, ID +* ֵ 0: ȡʧ +* >0: λʹ̵RWMID +*/ +UINT16 GetSwitchRwmRelayId(const UINT16 switchId); + +/* +* ȡָIDλʹ·زɼ̵Enable BypassID +* ˵ const UINT16 switchId, ID +* ֵ 0: ȡʧ +* >0: λʹ·زɼ̵Enable BypassID +*/ +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; /*dz̬λõ߼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; +} + +/* +* ָIDdz̬λ߼ʱ־ +* ˵ 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; /*dz̬λ߼ʱ־*/ + } + else + {/**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDdz̬λ߼ʱ־ +* ˵ 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; /*dz̬λ߼ʱձ־*/ + 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); + +/* +* ָIDdz̬λ߼ʱ־ +* ˵ const UINT16 switchId, ID +* ֵ +* +*/ +void SetSwitchUnusualLogSecFlag(const UINT16 switchId, const UINT8 flag); + +/* +* ȡָIDdz̬λ߼ʱ־ +* ˵ 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) /*dz̬λ߼ʱձ־Ч*/ +#define SWITCH_UNUSUAL_INVALID ((UINT8)0xAA) /*dz̬λ߼ʱձ־Ч*/ + +#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) /* ڹռãȴZCIVOCظ */ -#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) /* ڹռãȴZCIVOCظ */ +#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-1000xaaOC-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ල߻ѹгռѹܿ(0xAADB·俪 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 BuildBecause 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); /*Сȡ*/ - /*Dzվ̨*/ - 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 + { + ; + } + } + + /*Dzվ̨*/ + 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;/*ATSRCɢȡϢ*/ - AtsDaMsgStru* strDaMsgSnd = NULL;/*ATSRCѹȡϢ*/ + AtsDaMsgStru* strDaMsgSnd = NULL;/*ATSRCг״̬쳣ȡϢ*/ UINT8 chAtsMsgLine = 0U;/*ATSRCɢȡϢ·*/ 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ȡɢһϢDZڣʱж */ + {/* յATSȡг״̬쳣һϢDZڣʱж */ 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 { - /*CGDG+BGIJɼռ״̬*/ + /*CGDGIJɼռ״̬*/ 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*/ - /*================================================================================== *ܣʼгϢṹ塣 *úʵгϢṹijʼ @@ -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 /* δTIOCRRMȨ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); -} -/* 函数功能:发送双系硬通信信号。 - * 输入参数:MsgType:硬通信的信息:ABSynMsgType_0..ABSynMsgType_7 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:倒切方案由于硬件限制,发送频率不高于500Hz,最大使用ABSynMsgType_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; - } -} - - -/* 函数功能:输出PWM - * 输入参数:无。 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:放在定时器中断服务程序中,产生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); - - } - } - } -} - - - - -/* 函数功能:获取双系硬通信的反馈。 - * 输入参数:无。 - * 输出参数:pABSynMsgType *pMsgType, 采集到的type信息 - * 返回值 :UINT8, - * 0x00,正常。 - * 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 -- 外部存储变量地址 - * 返回值 :uint8_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; -} - - -/* 函数功能:获取对系双通道硬通信信号。 - * 输入参数:无。 - * 输出参数:pMsgType[0]:对方A系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]:对方B系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:收到对方A系发出的脉冲计数,如果此数为0,说明对方A系停止输出脉冲 - * pPulseCnt[1]:收到对方B系发出的脉冲计数,如果此数为0,说明对方B系停止输出脉冲 - * 返回值 :无。 - */ -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 - { - ; - } - -} - - -/* 函数功能:获取当前系间信号脉冲的最大误差值。 - * 输入参数:uint8_t index - * 输出参数:无 - * 返回值 :float -- 误差百分比。 - */ -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; -} - -/* 函数功能:获取双系硬切系信号的占空比及频率。 - * 输入参数:无。 - * 输出参数:Duty[0]:对系CPU1占空比,保留3位有效小数,如30%占空比表示为0.300 - * Period[0]:对系CPU1频率,单位为Hz - * Duty[1]:对系CPU2占空比,保留3位有效小数,如30%占空比表示为0.300 - * Period[1]:对系CPU2频率,单位为Hz - * 返回值 :无。 - * 使用注意:Period为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]); -} - - -/* 函数功能:PWM信号解析为双系MsgType。 - * 输入参数:Duty:采集到的PWM占空比 - * Period:采集到的PWM频率 - * 输出参数:无。 - * 返回值 :ABSynMsgType:双系通信的具体信息。 - * 使用注意:。 - */ -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//占空比无或不正常 - { - 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寄存器相关维护信息 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的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状态寄存器地址 */ - /*- 发送驱动控制命令获取PHY状态*/ - 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寄存器检查指定网卡链路状态 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态, -* 根据寄存器值的特定位判断链路是否正常。 -* -* @param[in] fecx 需要检查的网络接口名称(如"fec0","fec1") -* @return rtn 返回状态 -* - 0: 链路状态正常(PHY寄存器bit2为1) -* - -1: 链路异常或操作失败 -* -* @note 函数执行流程: -* 1. 创建UDP套接字 -* 2. 配置phycmd控制结构体: -* - ifd_name: 网络接口名称 -* - ifd_cmd: 使用READ_PHY_REG命令 -* - phy_id: PHY地址7 -* - phy_reg: 寄存器地址1(状态寄存器) -* 3. 通过devctl发送控制命令 -* 4. 解析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; /* 初始化数据域 */ - - /*- 发送驱动控制命令获取PHY状态*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - - close(sockfd); - - /*- 解析状态寄存器bit2(0x04)链路状态标志*/ - if(1U == ((phycmd.req.phy_data & 0x04U)>>2U)) - { - rtn = 0; /* 链路正常 */ - } - 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、未收到有效的PWM信号(包含:无PWM信号、信号参数不符合预设的范围) - ABSynMsgType_1,//0.5-200 固定为驱动程序检测到以下故障中的一种:a、发送端的MsgType不是规定的枚举类型; - ABSynMsgType_2,//0.5-300 固定为驱动程序检测到以下故障中的一种:a、双系PWM信号使能标志没有周期翻转(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); - -/* 函数功能:创建脉冲检测中断线程 - * 输入参数:void - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:板级初始化之后调用一次该函数启动功能。 - */ -int imx8_create_gpio_irq_pthread(void); -/* 函数功能:发送双系硬通信信号。 - * 输入参数:MsgType:硬通信的信息:ABSynMsgType_0..ABSynMsgType_7 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:倒切方案由于硬件限制,发送频率不高于500Hz,最大使用ABSynMsgType_4。 - */ -void drvSetABSynMsg(ABSynMsgType MsgType); -/* 函数功能:获取对系双通道硬通信信号。 - * 输入参数:无。 - * 输出参数:pMsgType[0]:对方A系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]:对方B系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:收到对方A系发出的脉冲计数,如果此数为0,说明对方A系停止输出脉冲 - * pPulseCnt[1]:收到对方B系发出的脉冲计数,如果此数为0,说明对方B系停止输出脉冲 - * 返回值 :无。 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt); -/* 函数功能:双系心跳信号功能开启。 - * 输入参数:无。 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:板级初始化之后调用一次该函数启动功能。 - */ -void drvStartABSynSwitch(void); - -/* 函数功能:双系心跳信号功能关闭 - * 输入参数:无。 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意: - */ -void drvStopABSynSwitch(void); - -/* 函数功能:获取双系硬通信的反馈。 - * 输入参数:无。 - * 输出参数:pABSynMsgType *pMsgType, 采集到的type信息 - * 返回值 :UINT8, - * 0x00,正常。 - * 0x81,命令与反馈不一致 - * 0x82,指针为空 - * 使用注意:发送与采集间隔至少为40ms。 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType); - -/* 函数功能:获取当前系间信号脉冲的最大误差值。 - * 输入参数:uint8_t index - * 输出参数:无 - * 返回值 :float -- 误差百分比。 - */ -float drvGetSyncSigErr(ABSynMsgType msgType); - -/* 函数功能:查询当前各通道收到的外部脉冲个数。 - * 输入参数:无。 - * 输出参数: uint8_t index -- 通道索引:0-自身反馈通道 1-对方A系通道 2-对方B系通道 - * uint32_t* pPulseCnt -- 外部存储变量地址 - * 返回值 :uint8_t 0-成功 1-失败:入参错误。 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt); - - -/************************************************************************/ -/* -* @brief 读取phy寄存器相关维护信息 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的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寄存器检查指定网卡链路状态 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态, -* 根据寄存器值的特定位判断链路是否正常。 -* -* @param[in] fecx 需要检查的网络接口名称(如"fec0","fec1") -* @return rtn 返回状态 -* - 0: 链路状态正常(PHY寄存器bit2为1) -* - -1: 链路异常或操作失败 -* -* @note 函数执行流程: -* 1. 创建UDP套接字 -* 2. 配置phycmd控制结构体: -* - ifd_name: 网络接口名称 -* - ifd_cmd: 使用READ_PHY_REG命令 -* - phy_id: PHY地址7 -* - phy_reg: 寄存器地址1(状态寄存器) -* 3. 通过devctl发送控制命令 -* 4. 解析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) /* 暗文日志大小,ZC要求是80000(78*1024)字节 */ -#define CFM_INNET_LOG_MSG_SIZE (5120u) /* 明文消息队列大小 */ +#define CFM_INNET_LOG_MSG_SIZE_DARK (1024u * 80u) /* 暗文日志大小,ZC要求是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和InfoQ */ - CM_MUTEX_T clear_mutex; /**< 互斥信号量,用来清空保护MsgQ和InfoQ */ - 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和InfoQ */ + CM_MUTEX_T clear_mutex; /**< 互斥信号量,用来清空保护MsgQ和InfoQ */ + 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和offset受互斥信号量mutex保护, - * 读写delay和offset时需要先取得互斥信号量 - */ - CM_MUTEX_T mutex; /* 互斥信号量 */ - ENUM_CM_RETURN isOK; /* 校时成功标志 */ - CM_INT64 delay; /* 延迟时间 */ - CM_INT64 offset; /* 偏移时间 */ + /* + * delay和offset受互斥信号量mutex保护, + * 读写delay和offset时需要先取得互斥信号量 + */ + 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; /** 通信层socket管理 */ 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状态切换socket */ + 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状态切换socket */ - 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; /**< 通信层socket管理 */ -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重传请求与应答ACK发送 -* @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重传请求与应答ACK发送 + * @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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收周期同步报文、并记录收到报文的精确时间 -* @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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收周期同步报文、并记录收到报文的精确时间 + * @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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收UDP报文并写入线程接收队列 -*/ -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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收UDP报文并写入线程接收队列 + */ +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,包括创建阻塞通信的socket -* 本线程将以非阻塞方式接收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,包括创建阻塞通信的socket + * 本线程将以非阻塞方式接收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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收UDP报文并写入线程接收队列 -*/ -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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收UDP报文并写入线程接收队列 + */ +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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收UDP报文并写入线程接收队列 -*/ -static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* arg); + * @brief 维护模式下UDP接收线程 + * @param arg 指向STRU_CFM_RECV_CTRL的指针 + * @details + * 创建本线程之前应先配置好STRU_CFM_RECV_CTRL,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收UDP报文并写入线程接收队列 + */ +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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收时钟同步报文并作出应答 -* 收到请求报文时立即给出应答 -* 收到应答报文时记录并计算延迟时间、偏移时间 -* @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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收时钟同步报文并作出应答 + * 收到请求报文时立即给出应答 + * 收到应答报文时记录并计算延迟时间、偏移时间 + * @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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收远程部署命令UDP报文,然后进行相关处理 -*/ -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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收远程部署命令UDP报文,然后进行相关处理 + */ +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取socket */ - 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取socket */ - 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取socket */ - 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取socket */ + 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取socket */ + 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取socket */ + 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取socket */ - 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时钟同步请求报文 -* 由双方的时钟同步线程完成一次NTP校时操作 -* 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 -* @see :: CFM_2oo2_TimeGet -* @see :: t_TimeThread -*/ + * @brief 发起一次2oo2时钟同步 + * @details + * 发送一个2oo2时钟同步请求报文 + * 由双方的时钟同步线程完成一次NTP校时操作 + * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 + * @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重传请求与应答ACK发送 -* @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重传请求与应答ACK发送 + * @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 接收报文长度 -* - 正整数 接收报文长度 -* - 0 接收失败 -*/ -CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 0 接收失败 -*/ -CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 0 接收失败 -*/ -CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2oo2数据接收(维护模式) + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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状态切换独立线程socket */ - 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状态切换独立线程socket */ + 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状态切换UDP通信通道向对系发送 */ - 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时钟同步请求报文 -* 由双方的时钟同步线程完成一次NTP校时操作 -* 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 -* @see :: CFM_2x2_TimeGet -* @see :: t_TimeThread -*/ + * @brief 发起一次2x2时钟同步 + * @details + * 发送一个2x2时钟同步请求报文 + * 由双方的时钟同步线程完成一次NTP校时操作 + * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 + * @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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收周期同步报文、并记录收到报文的精确时间 -* @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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收周期同步报文、并记录收到报文的精确时间 + * @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; /* 源IP */ - 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; /* 源IP */ + 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 接收报文长度 -* - 正整数 接收报文长度 -* - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 0或负数 接收失败 -*/ -CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2x2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 0或负数 接收失败 -*/ -CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) + * @brief 2x2串口数据接收 + * @param pBuf 接收报文指针(非空) + * @param BufLen 接收报文缓冲区大小(0~0xffffffff) + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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) { /*- 查询服务端IP、端口 */ 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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收UDP报文并写入线程接收队列 -*/ -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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收UDP报文并写入线程接收队列 + */ +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;/* 源IP */ - 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; /* 源IP */ + 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) - { - /*- 源IP端口是否合法 */ - 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) + { + /*- 源IP端口是否合法 */ + 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)) { /*解析时间戳等二取数据*/ - 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) { /*解析指针为空*/ /*- 保存通信数据 */ - 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,包括创建阻塞通信的socket -* 本线程将以非阻塞方式接收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,包括创建阻塞通信的socket + * 本线程将以非阻塞方式接收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) { /*- 正好是完整帧,将偏移量置为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代表主机板 */ + /*- 变量初始化 */ + 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代表主机板 */ (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,由上位机解析 */ - (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:info为字符串数据方式 -* 0xAA:info为十六进制数据方式 -* 0xFF:info为十进制数据方式 -* @param code 信息编码/信息类型 取值范围:0~0xffff -* @param infoLen 数据长度 取值范围:0~0xffff -* @param info 数据/信息 取值范围:任意类型指针 -* @return 发送结果 -* - ENUM_CM_TRUE 成功 -* - ENUM_CM_FALSE 失败 -*/ + * @brief 应用/平台暗文日志存储 + * @param infoType 数据类型 + * 取值范围:0x55:info为字符串数据方式 + * 0xAA:info为十六进制数据方式 + * 0xFF:info为十进制数据方式 + * @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:info为字符串数据方式 -* 0xAA:info为十六进制数据方式 -* 0xFF:info为十进制数据方式 -* @param code 信息编码/信息类型 取值范围:0~0xffff -* @param infoCut 数据个数 取值范围:0~0xff -* @param ... 可变参数/信息 取值范围:任意类型数据,但是需要与sizeof()成对使用。 -* @return 发送结果 -* - ENUM_CM_TRUE 成功 -* - ENUM_CM_FALSE 失败 -*/ + * @brief 应用/平台暗文日志多变量存储 + * @param infoType 数据类型 + * 取值范围:0x55:info为字符串数据方式 + * 0xAA:info为十六进制数据方式 + * 0xFF:info为十进制数据方式 + * @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) { /*- 源IP端口是否合法 */ - 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) { /*接收数据时间戳ms数记录*/ - 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 维护模式下UDP接收线程 -* @param arg 指向STRU_CFM_RECV_CTRL的指针 -* @details -* 创建本线程之前应先配置好STRU_CFM_RECV_CTRL,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收UDP报文并写入线程接收队列 -*/ -static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* arg) + * @brief 维护模式下UDP接收线程 + * @param arg 指向STRU_CFM_RECV_CTRL的指针 + * @details + * 创建本线程之前应先配置好STRU_CFM_RECV_CTRL,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收UDP报文并写入线程接收队列 + */ +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;/* 源IP */ - 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; /* 源IP */ + 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) { /*- 源IP端口是否合法 */ - 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 /*- 来自非预期IP端口的数据*/ 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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收时钟同步报文并作出应答 -* 收到请求报文时立即给出应答 -* 收到应答报文时记录并计算延迟时间、偏移时间 -* @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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收时钟同步报文并作出应答 + * 收到请求报文时立即给出应答 + * 收到应答报文时记录并计算延迟时间、偏移时间 + * @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; /* 源IP */ - 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; /* 源IP */ + 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) - { - /*- 解析请求报文 */ - 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) + { + /*- 解析请求报文 */ + 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) - { - /*- 解析应答报文 */ - 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) + { + /*- 解析应答报文 */ + 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,包括创建阻塞通信的socket -* 本线程将以阻塞方式接收远程部署命令UDP报文,然后进行相关处理 -*/ -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,包括创建阻塞通信的socket + * 本线程将以阻塞方式接收远程部署命令UDP报文,然后进行相关处理 + */ +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;/* 源IP */ - CM_UINT16 srcPort;/* 源端口 */ - CM_UINT32 rmtIP;/* 对方IP */ - CM_UINT16 rmtPort_safe;/* 对方sfp端口 */ - CM_UINT16 rmtPort_raw;/* 对方透传端口 */ - struct in_addr serveraddr;/* 源ip */ - CM_UINT8 Result = 0x0u;/* 请求处理结果 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 函数返回值 */ + CM_UINT8 rcvBuf[1024] = {0u}; /* 接收缓冲区 */ + CM_INT32 len; /* 报文长度 */ + CM_UINT32 srcIP; /* 源IP */ + CM_UINT16 srcPort; /* 源端口 */ + CM_UINT32 rmtIP; /* 对方IP */ + CM_UINT16 rmtPort_safe; /* 对方sfp端口 */ + CM_UINT16 rmtPort_raw; /* 对方透传端口 */ + struct in_addr serveraddr; /* 源ip */ + 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) { /*- 本机是否为CPU1 */ 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"); /*- 源IP端口是否合法 */ - 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 { /*- 来自非预期IP端口的数据*/ - (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 源IP -* @param pSrcPort 源端口 -* @return 接收报文长度 -* - 正整数 接收报文长度 -* - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) - { - /*- 保存源IP、端口和收到的报文 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - 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)) + { + /*- 保存源IP、端口和收到的报文 */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + 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 源IP -* @param pSrcPort 源端口 -* @return 接收报文长度 -* - 正整数 接收报文长度 -* - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) - { - /*- 保存源IP、端口和收到的报文 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - 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 源IP -* @param pSrcPort 源端口 -* @return 接收报文长度 -* - 正整数 接收报文长度 -* - 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)) { /*- 保存源IP、端口和收到的报文 */ - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) + { + /*- 保存源IP、端口和收到的报文 */ + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + 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 源IP -* @param pSrcPort 源端口 -* @return 接收报文长度 -* - 正整数 接收报文长度 -* - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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))) - { - /*- 保存源IP、端口和收到的报文 */ - len -= 6u; - *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 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)) - { - /*- 读取源IP和端口 */ - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 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)) - { - /*- 读取源IP和端口 */ - 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 接收报文长度 -* - 正整数 接收报文长度 -* - 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)) - { - /*- 读取源IP和端口 */ - 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); - } + /*- 保存源IP、端口和收到的报文 */ + len -= 6u; + *pSrcIP = CM_LongFromChar(s_CFM_UDP_Cache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + *pSrcPort = CM_ShortFromChar(s_CFM_UDP_Cache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ + 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) + { + /*- 读取源IP和端口 */ + 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) + { + /*- 读取源IP和端口 */ + 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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)) + { + /*- 读取源IP和端口 */ + 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协议栈单个UDP包最大65535字节(1024*64-1)*/ -#define NET_UDP_2OO2_BUF_SIZE ((1024*64)-(1)) /*2OO2UDP协议栈缓冲区大小(用于接收代码)*/ -#define NET_UDP_MAINTENANCE_BUF_SIZE ((1024*5)-(1)) /*2OO2UDP协议栈缓冲区大小(维护模式下用于接收代码)*/ -#define NET_UDP_2X2_BUF_SIZE ((1024*64)-(1)) /*2X2UDP协议栈缓冲区大小(用于接收代码)*/ -#define NET_UDP_BUF_SIZE ((1024*64)-(1)) /*UDPsocket消息队列缓冲区(用于接收代码)*/ -#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协议栈缓冲区大小(维护模式下用于接收代码)*/ +#define NET_UDP_2X2_BUF_SIZE ((1024 * 64) - (1)) /*2X2UDP协议栈缓冲区大小(用于接收代码)*/ +#define NET_UDP_BUF_SIZE ((1024 * 64) - (1)) /*UDPsocket消息队列缓冲区(用于接收代码)*/ +#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;/*-串口板A周期 */ - CM_UINT32 SEB_B_Count;/*-串口板B周期 */ - }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; /*-串口板A周期 */ + CM_UINT32 SEB_B_Count; /*-串口板B周期 */ + CM_UINT32 CCU_A_SN; /*-通控A序列号 */ + CM_UINT32 CCU_B_SN; /*-通控B序列号 */ + CM_UINT32 SEB_A_SN; /*-串口板A序列号 */ + CM_UINT32 SEB_B_SN; /*-串口板B序列号 */ + } 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时钟同步请求报文 - * 由双方的时钟同步线程完成一次NTP校时操作 - * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 - * @see :: CFM_2oo2_TimeGet - * @see :: t_TimeThread - */ + * @brief 发起一次2oo2时钟同步 + * @details + * 发送一个2oo2时钟同步请求报文 + * 由双方的时钟同步线程完成一次NTP校时操作 + * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 + * @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 接收报文长度 - * - 正整数 接收报文长度 - * - 0 接收失败 - */ - CM_INT32 CFM_2oo2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 0 接收失败 - */ - CM_INT32 CFM_2oo2_2xStateRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 0 接收失败 - */ - CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2数据接收(维护模式) + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 0 接收失败 - */ - CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2oo2数据接收(宕机状态) + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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时钟同步请求报文 - * 由双方的时钟同步线程完成一次NTP校时操作 - * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 - * @see :: CFM_2x2_TimeGet - * @see :: t_TimeThread - */ + * @brief 发起一次2x2时钟同步 + * @details + * 发送一个2x2时钟同步请求报文 + * 由双方的时钟同步线程完成一次NTP校时操作 + * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 + * @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 接收报文长度 - * - 正整数 接收报文长度 - * - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 0或负数 接收失败 - */ - CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2x2数据接收 + * @param pBuf 接收报文指针 + * @param BufLen 接收报文缓冲区大小 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 0或负数 接收失败 + */ + CM_INT32 CFM_2x2_DataRecv(OUT CM_UINT8 *pBuf, IN CM_UINT32 BufSize); /** - * @brief 2x2串口数据接收 - * @param pBuf 接收报文指针(非空) - * @param BufLen 接收报文缓冲区大小(0~0xffffffff) - * @return 接收报文长度 - * - 正整数 接收报文长度 - * - 0或负数 接收失败 - */ - CM_UINT16 CFM_2x2_UartDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + * @brief 2x2串口数据接收 + * @param pBuf 接收报文指针(非空) + * @param BufLen 接收报文缓冲区大小(0~0xffffffff) + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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:info为字符串数据方式 - * 0xAA:info为十六进制数据方式 - * 0xFF:info为十进制数据方式 - * @param code 信息编码/信息类型 取值范围:0~0xffff - * @param infoLen 数据长度 取值范围:0~0xffff - * @param info 数据/信息 取值范围:任意类型指针 - * @return 发送结果 - * - ENUM_CM_TRUE 成功 - * - ENUM_CM_FALSE 失败 - */ + * @brief 应用/平台暗文日志存储 + * @param infoType 数据类型 + * 取值范围:0x55:info为字符串数据方式 + * 0xAA:info为十六进制数据方式 + * 0xFF:info为十进制数据方式 + * @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:info为字符串数据方式 - * 0xAA:info为十六进制数据方式 - * 0xFF:info为十进制数据方式 - * @param code 信息编码/信息类型 取值范围:0~0xffff - * @param infoCut 数据个数 取值范围:0~0xff - * @param ... 可变参数/信息 取值范围:任意类型数据,但是需要与sizeof()成对使用。 - * @return 发送结果 - * - ENUM_CM_TRUE 成功 - * - ENUM_CM_FALSE 失败 - */ + * @brief 应用/平台暗文日志多变量存储 + * @param infoType 数据类型 + * 取值范围:0x55:info为字符串数据方式 + * 0xAA:info为十六进制数据方式 + * 0xFF:info为十进制数据方式 + * @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 源IP - * @param pSrcPort 源端口 - * @return 接收报文长度 - * - 正整数 接收报文长度 - * - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 源IP - * @param pSrcPort 源端口 - * @return 接收报文长度 - * - 正整数 接收报文长度 - * - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 源IP - * @param pSrcPort 源端口 - * @return 接收报文长度 - * - 正整数 接收报文长度 - * - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 源IP - * @param pSrcPort 源端口 - * @return 接收报文长度 - * - 正整数 接收报文长度 - * - 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 源IP + * @param pSrcPort 源端口 + * @return 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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 接收报文长度 - * - 正整数 接收报文长度 - * - 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 接收报文长度 + * - 正整数 接收报文长度 + * - 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; /* 源IP */ - 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; /* 源IP */ + 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 "指针运算提高代码执行效率" */ - /*- 是否读到了数据 */ - if (rxLen > 0u) - { - /*- 获取源ID */ - 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 "指针运算提高代码执行效率" */ + /*- 是否读到了数据 */ + if (rxLen > 0u) + { + /*- 获取源ID */ + 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字节 源ID - n字节 数据 - */ - /*- 填入接收队列 */ - CM_LongToChar((rxLen + PFM_RAW_DEVID_SIZE), buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - CM_ShortToChar(devID, buf + i + PFM_RAW_LEN_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - /* i += (rxLen + 4); */ - i = i + (rxLen + PFM_RAW_HEADER_SIZE); - } - else + count++; + + /* + 内网透传帧格式: + 4字节 长度(不含自身) + 2字节 源ID + n字节 数据 + */ + /*- 填入接收队列 */ + CM_LongToChar((rxLen + PFM_RAW_DEVID_SIZE), buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + CM_ShortToChar(devID, buf + i + PFM_RAW_LEN_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + /* 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; /* 源IP */ - 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; /* 源IP */ + CM_UINT16 src_port = 0u; /* 源端口 */ - CM_UINT16 dev_id = 0u; /* 源设备ID */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 临时变量 */ + CM_UINT16 dev_id = 0u; /* 源设备ID */ + 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); /*- 查找源设备ID */ 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); /*- 查找源设备ID */ 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; /* 源IP */ - 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; /* 源IP */ + CM_UINT16 srcPort = 0u; /* 源端口 */ + CM_UINT16 devID = 0u; /* 设备ID */ + CM_UINT8 DataType = 0u; /* 数据类型 */ + CM_UINT8 DataShift = 0u; /* 数据类型 */ STRU_PFM_INNET_CFG_T *pCom = NULL; /*通信配置信息*/ /*- 循环解析特征信息数据包 */ - 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 "后续在查询对应内网ID时进行非法值防护" */ + srcIP = CM_LongFromChar(RawFrontCache); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ srcPort = CM_ShortFromChar(RawFrontCache + 4); /* parasoft-suppress BD-PB-CHECKRET "后续在查询对应内网ID时进行非法值防护" */ /*- 获取设备类型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; } /*- 如果拷贝剩余图像正确*/ - 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; /*- 循环解析邻机特征信息数据包 */ - 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字节 数据 - */ - /*- 解析内网发送协议头 */ - msgLen = CM_ShortFromChar(Buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - dstID = CM_ShortFromChar(Buf + i + 2u); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + /*- 循环发送所有内网透传数据 */ + while ((i + 4u) < Len) + { + /* + 内网透传协议头: + 2字节 长度(不含自身) + 2字节 目的ID + n字节 数据 + */ + /*- 解析内网发送协议头 */ + msgLen = CM_ShortFromChar(Buf + i); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + dstID = CM_ShortFromChar(Buf + i + 2u); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - 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、端口是否成功 */ - 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、端口是否成功 */ + 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 "指针运算提高代码执行效率" */ - /*- @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 "指针运算提高代码执行效率" */ - } - 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 "指针运算提高代码执行效率" */ - } - 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 "指针运算提高代码执行效率" */ + } + 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 "指针运算提高代码执行效率" */ + } + 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 "指针运算提高代码执行效率" */ - /*- 是否读到了数据 */ - if (rxLen > 0u) - { - CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - 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 "指针运算提高代码执行效率" */ + /*- 是否读到了数据 */ + if (rxLen > 0u) + { + CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + 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 */ - /*- 解析透传发送头 */ - msgLen = CM_ShortFromChar(&Buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - /*- 填写帧序号*/ - 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); + /*- 解析透传发送头 */ + msgLen = CM_ShortFromChar(&Buf[i]); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + /*- 填写帧序号*/ + 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); /*- 向红网CC发送CC外网帧 */ (void)CFM_OutnetRaw_Send(&Buf[i], (CM_INT32)(msgLen + 2u), ENUM_OUTNET_RED); /*- 向蓝网CC发送CC外网帧 */ (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 "指针运算提高代码执行效率" */ - /*- 是否读到了数据 */ - if (rxLen > 0u) - { - CM_LongToChar((CM_UINT32)rxLen, &buf[i]); /*- parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - 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 "指针运算提高代码执行效率" */ + /*- 是否读到了数据 */ + 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 "指针运算提高代码执行效率" */ + 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 二取同步双cpu通信结果 */ - if(0x55u == g_PFM_Cfg.M_2oo2_Enable) + /*- @alias 二取同步双cpu通信结果 */ + 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 向aim汇报通信情况 */ - (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) { /*- 向所有外设发送心跳请求 ,是否区分CPU*/ - (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 { /*从串口接收数据*/ - 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) /**< 局域网下每条UDP消息大小 */ #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(); + /*- 初始化读取main 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); - /*检查配置文件ID与硬件ID是否一致*/ - 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通信端口,接收、发送 | 内网安全协议解析、封装 | 2oo2交换,2x2交换 | -* 内网透传通信 | UDP通信端口,接收、发送 | / | 2oo2交换,2x2交换 | -* 外网安全通信 | UDP通信端口,接收、发送 | 外网安全协议解析、封装 | 2oo2交换,2x2交换 | -* 外网透传通信 | UDP通信端口,接收、发送 | / | 2oo2交换,2x2交换 | -*/ + * 通信通道涉及的内容: + * CFM建立通信层通道,通信报文的接收、发送 + * CFM SFM PFM + * 内网安全通信 | UDP通信端口,接收、发送 | 内网安全协议解析、封装 | 2oo2交换,2x2交换 | + * 内网透传通信 | UDP通信端口,接收、发送 | / | 2oo2交换,2x2交换 | + * 外网安全通信 | UDP通信端口,接收、发送 | 外网安全协议解析、封装 | 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 "指针运算提高代码执行效率" */ - /*- 注册函数是否为空 */ - if(NULL == p_Status_Communication_Func) - { - /*- 无处理 */ - } - else - { - /*- 将数据给到应用,应用解包判断通信情况 */ - (*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 "指针运算提高代码执行效率" */ - 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 "指针运算提高代码执行效率" */ - if(NULL == p_Status_Communication_Func) - { - /*- 无处理 */ - } - else - { - /*- 将数据给到应用,应用解包判断通信情况 */ - (*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 "指针运算提高代码执行效率" */ + /*- 注册函数是否为空 */ + if (NULL == p_Status_Communication_Func) + { + /*- 无处理 */ + } + else + { + /*- 将数据给到应用,应用解包判断通信情况 */ + (*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 "指针运算提高代码执行效率" */ + 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 "指针运算提高代码执行效率" */ + if (NULL == p_Status_Communication_Func) + { + /*- 无处理 */ + } + else + { + /*- 将数据给到应用,应用解包判断通信情况 */ + (*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 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @return 收到的应用报文长度 -* @details -* 每次调用获得一条完整的应用报文 -* 每周期应持续调用本函数直到获得的报文长度 *pRxLen == 0 -*/ -CM_UINT32 PFM_OutnetRaw_AppRecv(OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize) + * @brief 接收外网透传报文 + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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); /*- 自己是否是CPU1 */ 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)); /*- 解锁接收通道 */ 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)); /*- 解锁接收通道 */ 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) { /*- 双网都取完了,返回true */ } - } 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)); /*- 解锁接收通道 */ 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)); /*- 解锁接收通道 */ 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 源设备ID -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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); - /*- 自己是否是CPU1 */ - 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 - { - /*- 双网都取完了,返回true */ - } - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - } - /*- 解锁接收通道 */ - 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); - } + /*- 自己是否是CPU1 */ + 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 + { + /*- 双网都取完了,返回true */ + } + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + } + /*- 解锁接收通道 */ + 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 源设备ID -* @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 源设备ID + * @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); - /*- 自己是否是CPU1 */ - 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 - { - /*- 双网都取完了,返回true */ - } - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - } - /*- 解锁接收通道 */ - 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); + /*- 自己是否是CPU1 */ + 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 + { + /*- 双网都取完了,返回true */ + } + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + } + /*- 解锁接收通道 */ + 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 源设备ID -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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; - } - /*- 解锁接收通道 */ - 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; + } + /*- 解锁接收通道 */ + 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);/*- 此处不需防护,offset初始值就是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); /*- 此处不需防护,offset初始值就是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 -* 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -*/ -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 + * 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + */ +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()) { - /*- 自己是否是CPU1 */ - 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)); - /*- 解锁接收通道 */ - 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)); - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - 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)); - /*- 解锁接收通道 */ - 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)); - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - 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); - } - } + /*- 自己是否是CPU1 */ + 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)); + /*- 解锁接收通道 */ + 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)); + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + 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)); + /*- 解锁接收通道 */ + 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)); + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + 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()) { - /*- 自己是否是CPU1 */ - 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)); - /*- 解锁接收通道 */ - 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)); - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - 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)); - /*- 解锁接收通道 */ - 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)); - /*- 解锁接收通道 */ - 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 - { - /*- 双网都取完了,返回true */ - 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); - } - } + /*- 自己是否是CPU1 */ + 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)); + /*- 解锁接收通道 */ + 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)); + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + 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)); + /*- 解锁接收通道 */ + 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)); + /*- 解锁接收通道 */ + 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 + { + /*- 双网都取完了,返回true */ + 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); /*- 关闭所有TCP连接 */ (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); /*- 关闭所有TCP连接 */ (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); } } /*- 如果所有文件名都存在,删除最旧的日志(crashlog_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: /*- 判断红串口是否通信中断 */ - 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: /*- 判断蓝串口是否通信中断 */ - 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 "指针运算提高代码执行效率" */ - + 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 "指针运算提高代码执行效率" */ 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); /* 源ID */ 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) { /*- 解析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; /* 四线通信状态,有三线正常即为ok*/ 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)) { /*- 检测到对系是备系,且允许AID切系, 主系降为备系*/ 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))) { - /*前两个周期是否存在中断-本周期串口是否正常-并且对系不是主系则升主*/ + /*在完全中断前,有三线通信正常则允许切系*/ if( /*与当前周期差3-5认为正常,超过阈值认为不同时断线,通信故障*/ (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) { /*- 接收应用跟随数据的CRC和长度*/ 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; /* 以zc举例:包数*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; /* 以zc举例:包数*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; /* 源IP */ - CM_UINT16 srcPort = 0u; /* 源ID */ - 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 "指针运算提高代码执行效率" */ - /*- 收到的数据长度是否大于0 */ - if (0 < rxLen) - { - /*- 根据源IP、Port确定源ID */ - 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; /* 源IP */ + CM_UINT16 srcPort = 0u; /* 源ID */ + 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 "指针运算提高代码执行效率" */ + /*- 收到的数据长度是否大于0 */ + if (0 < rxLen) + { + /*- 根据源IP、Port确定源ID */ + 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 "指针运算提高代码执行效率" */ + /*- 打包成内网输入帧 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - 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; /* 源IP */ - CM_UINT16 srcPort = 0u; /* 源ID */ - 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 "指针运算提高代码执行效率" */ - /*- 收到的数据长度是否大于0 */ - if (0 < rxLen) - { - /*- 根据源IP、Port确定源ID */ - 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; /* 源IP */ + CM_UINT16 srcPort = 0u; /* 源ID */ + 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 "指针运算提高代码执行效率" */ + /*- 收到的数据长度是否大于0 */ + if (0 < rxLen) + { + /*- 根据源IP、Port确定源ID */ + 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 "指针运算提高代码执行效率" */ + /*- 打包成内网输入帧 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - 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; /* 源IP */ - CM_UINT16 srcPort = 0u; /* 源ID */ - STRU_PFM_INNET_CFG_T* pCom = NULL; /* 内网通信配置 */ + /*- 变量初始化 */ + CM_INT32 rxLen = 0; /* 接收报文长度 */ + CM_INT32 i = 0; /* 循环变量 */ + CM_UINT32 srcIP = 0u; /* 源IP */ + CM_UINT16 srcPort = 0u; /* 源ID */ + 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 "指针运算提高代码执行效率" */ - /*- 收到的数据长度是否大于0 */ - if (0 < rxLen) - { - /*- 根据源IP、Port确定源ID */ - 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 "指针运算提高代码执行效率" */ + /*- 收到的数据长度是否大于0 */ + if (0 < rxLen) + { + /*- 根据源IP、Port确定源ID */ + pCom = PFM_INI_RmInnetIP2Addr(srcIP, srcPort); if (NULL != pCom) { - /*- 打包成内网输入帧 */ - CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - MSCP_LOG_MSG("SFM_RxInnetRemoteUpdate yes recv \n"); - i = i + rxLen + 2; + /*- 打包成内网输入帧 */ + CM_ShortToChar((CM_UINT16)(rxLen), &Buf[i]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + 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; 互联互通ID */ - 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; /* 蓝网报文总长 */ - /* 来在通控的非法数据test 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; 互联互通ID */ + 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; /* 蓝网报文总长 */ + /* 来在通控的非法数据test 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星链 主机-底座 用通信协议 */ /*- 根据外网帧报文头确定源ID */ /* @@ -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) /* 来在通控的非法数据test 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的包格式解数据 */ 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 "指针运算提高代码执行效率" */ - CM_ShortToChar(srcID, &buf[redLen + 6u]);/* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - CM_ShortToChar(logicID, &buf[redLen + 8u]);/* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - (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 "指针运算提高代码执行效率" */ + CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + CM_ShortToChar(srcID, &buf[redLen + 6u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + CM_ShortToChar(logicID, &buf[redLen + 8u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + (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 "指针运算提高代码执行效率" */ } else { /*- 解源设备逻辑id */ - CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]);/* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - CM_ShortToChar(srcID, &buf[redLen + 6u]);/* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - CM_ShortToChar(logicID, &buf[redLen + 8u]);/* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - (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 "指针运算提高代码执行效率" */ + CM_ShortToChar((CM_UINT16)(appLen + 4u), &buf[redLen + 4u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + CM_ShortToChar(srcID, &buf[redLen + 6u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + CM_ShortToChar(logicID, &buf[redLen + 8u]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + (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 "指针运算提高代码执行效率" */ } redLen += (CM_UINT32)appLen + 6u; } else { /*- 是否来自ats转车的输入数据 */ - if(ENUM_CM_TRUE == isTransformInFrame) + if (ENUM_CM_TRUE == isTransformInFrame) { /*- 根据ats的包格式解数据 */ 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 "指针运算提高代码执行效率" */ - (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 "指针运算提高代码执行效率" */ - /*- 返回外网接收帧总长度 */ - 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 "指针运算提高代码执行效率" */ + 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 "指针运算提高代码执行效率" */ + 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 "指针运算提高代码执行效率" */ + /*- 返回外网接收帧总长度 */ + 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 外网安全通信协议解析 */ - 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 外网安全通信协议解析 */ + 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 内网安全通信协议解析 */ - 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 内网安全通信协议解析 */ + 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 远程部署内网安全通信协议解析 */ - 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 源设备ID -* @param pSrcLogicID 源逻辑ID -* @param pLifeTime 报文剩余有效期 -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param pSrcLogicID 源逻辑ID + * @param pLifeTime 报文剩余有效期 + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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字节 源ID - * 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);/*源ID*/ - *pSrcName = CM_ShortFromChar(tmpBuf); + qStatus = CM_QueueStatus(&s_Outnet_AppRecvQ); + /*- 队列中是否有足够长的数据 */ + if (7u < qStatus) + { + /* + * 协议适配层头: + * 2字节 长度(不含自身) + * 2字节 源ID + * 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); /*源ID*/ + *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); } - /*- 解锁接收队列 */ - (void)CM_Mutex_Unlock(s_Outnet_AppRecv_M); + /*- 解锁接收队列 */ + (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; /*失败*/ + } - /*- 解锁发送队列 */ - (void)CM_Mutex_Unlock(s_Outnet_AppSend_M); + /*- 解锁发送队列 */ + (void)CM_Mutex_Unlock(s_Outnet_AppSend_M); - /*- 返回 */ - return rt; + /*- 返回 */ + return rt; } /** -* @brief 接收内网协议报文 -* @param pSrcName 源设备ID -* @param pLifeTime 报文剩余有效期 -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param pLifeTime 报文剩余有效期 + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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字节 源ID(小端) - 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字节 源ID(小端) + 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); } - /*- 解锁接收队列 */ - (void)CM_Mutex_Unlock(s_Innet_AppRecv_M); + /*- 解锁接收队列 */ + (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; /*失败*/ + } - /*- 解锁发送队列 */ - (void)CM_Mutex_Unlock(s_Innet_AppSend_M); + /*- 解锁发送队列 */ + (void)CM_Mutex_Unlock(s_Innet_AppSend_M); } else { /*无处理*/ } - /*- 返回 */ - return rt; + /*- 返回 */ + return rt; } /** -* @brief 接收远程部署内网协议报文(应用接收) -* @param pSrcName 源设备ID -* @param pLifeTime 报文剩余有效期 -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param pLifeTime 报文剩余有效期 + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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); /*- 解析通信协议,如果是重启或切系命令,执行重启或切系逻辑*/ - 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); - /*- 解锁接收队列 */ - (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); + } while (1); + /*- 解锁接收队列 */ + (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); } else { /*- 无处理*/ } - /*- 返回报文长度 */ - return rt_len; + /*- 返回报文长度 */ + return rt_len; } /** -* @brief 接收远程部署内网协议报文(平台退出运营后接收) -* @param pSrcName 源设备ID -* @param pLifeTime 报文剩余有效期 -* @param rxBuf 收到的应用报文数组 -* @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 -* @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 源设备ID + * @param pLifeTime 报文剩余有效期 + * @param rxBuf 收到的应用报文数组 + * @param rxSize 接收应用报文的缓冲区(rxBuf)大小,应不小于可能收到的最长应用报文长度 + * @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 { /*- 无处理*/ } - /*- 解锁接收队列 */ - (void)CM_Mutex_Unlock(s_Innet_RmRecv_M); + /*- 解锁接收队列 */ + (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; /*失败*/ } /*- 解锁发送队列 */ @@ -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); /*长度*/ - /*- 解锁发送队列 */ - (void)CM_Mutex_Unlock(s_Innet_AppRmSend_M); - - /* - 2字节 长度(不含自身) - 2字节 目的ID(小端) - n字节 数据 - */ - (void)CM_Mutex_Lock(s_Innet_RmSend_M); + /*- 解锁发送队列 */ + (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); - /*- 解锁发送队列 */ - (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; /*失败*/ + } + + /*- 解锁发送队列 */ + (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) - { - /*- 双CPU交换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) + { + /*- 双CPU交换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) - { - /*- 双CPU交换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) + { + /*- 双CPU交换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) - { - /*- 双CPU交换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) + { + /*- 双CPU交换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 …… 内网输出帧n | 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 …… 内网输出帧n | 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 …… 内网输出帧n | 4字节日志报文长度 | n字节日志报文 | - * 内网输出帧: 2字节帧长度 + 1字节协议类型 + 2字节目的ID(大端) + 2字节预留 + n字节数据 - */ - /*- 获取输出报文总长度 */ + /* + * 格式: + * 4字节总长度 | 4字节内网输出报文长度 | 内网输出帧1 | 内网输出帧2 …… 内网输出帧n | 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 …… 内网输出帧n | 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 …… 内网输出帧n | 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字节 数据 - */ - /*- 解析协议内网输出帧头 */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - /* Buf[i + 2u]; */ /* 1字节 协议类型 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2字节 (逻辑id) */ + i = 8u; + /*- 遍历输出队列 */ + while ((i + 7u) < dataEnd) + { + /* + 协议外网输出帧头 + 2字节 长度 + 1字节 协议类型 + 2字节 目的ID + 2字节 预留 + n字节 数据 + */ + /*- 解析协议内网输出帧头 */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + /* Buf[i + 2u]; */ /* 1字节 协议类型 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + (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) - { - /*- 本机是否为CPU1 */ - 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 "指针运算提高代码执行效率" */ - } - 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 "指针运算提高代码执行效率" */ - } - } - else - { - /*- 无处理*/ - } - i += (CM_UINT32)CM_UNSIGNED_SHORT_EXP(msgLen + 2u); - } + /*- 获取目的IP端口 */ + pCom = PFM_INI_InnetID2Addr(dstID); + /*- 是否获取成功 */ + if (NULL != pCom) + { + /*- 本机是否为CPU1 */ + 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 "指针运算提高代码执行效率" */ + } + 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 "指针运算提高代码执行效率" */ + } + } + 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字节 数据 */ /*- 解析协议内网输出帧头 */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - /* Buf[i + 2u]; */ /* 1字节 协议类型 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - (void)CM_ShortFromChar(&Buf[i + 5u]); /* 2字节 (逻辑id) */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + /* Buf[i + 2u]; */ /* 1字节 协议类型 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + (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 "指针运算提高代码执行效率" */ + ret = CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_G, pCom->Port_Safe_G); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ } else { /*- 从紫网通道发送 */ - 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 "指针运算提高代码执行效率" */ + ret = CFM_InnetRemoteUpdate_Send(&Buf[i + 7u], (CM_INT32)CM_UNSIGNED_SHORT_EXP(msgLen - 5u), pCom->IP_P, pCom->Port_Safe_P); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ } - MSCP_LOG_MSG("plafm send innetsafeRm data ret = %#x\n",ret); + 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字节 数据 - */ - /*- 解析协议内网输出帧头 */ - msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - /* Buf[i + 2u]; */ /* 1字节 协议类型 */ - dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - (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字节 数据 + */ + /*- 解析协议内网输出帧头 */ + msgLen = CM_ShortFromChar(&Buf[i]); /* 2字节 帧长度 */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + /* Buf[i + 2u]; */ /* 1字节 协议类型 */ + dstID = CM_ShortFromChar(&Buf[i + 3u]); /* 2字节 目的ID */ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + (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) { /*- 远程部署维护终端设备 */ - /*- 本机是否为CPU1 */ - 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 "指针运算提高代码执行效率" */ - } - 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 "指针运算提高代码执行效率" */ - } + /*- 本机是否为CPU1 */ + 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 "指针运算提高代码执行效率" */ + } + 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 "指针运算提高代码执行效率" */ + } } 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; /* 输出给CC的报文长度 */ - CM_UINT16 dstID = 0u; /* 目的设备ID */ - CM_UINT16 logicID = 0u; /* 目的逻辑ID */ - /* CM_UINT32 srcHlhtId = 0u; */ /* 源互联互通ID */ - /* CM_UINT32 dstHlhtId = 0u; */ /* 目的互联互通ID */ - 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; /* 改变后的真实源设备类型ID */ - 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字节 数据 - */ - /*- 解析协议外网输出帧头 */ - msgLen = CM_ShortFromChar(&buf[i]); /*2字节 帧长度*/ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - type = buf[i + 2u]; /*1字节 协议类型*/ - dstID = CM_ShortFromChar(&buf[i + 3u]); /*2字节 目的设备ID*/ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ - 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; /* 输出给CC的报文长度 */ + CM_UINT16 dstID = 0u; /* 目的设备ID */ + CM_UINT16 logicID = 0u; /* 目的逻辑ID */ + /* CM_UINT32 srcHlhtId = 0u; */ /* 源互联互通ID */ + /* CM_UINT32 dstHlhtId = 0u; */ /* 目的互联互通ID */ + 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; /* 改变后的真实源设备类型ID */ + 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字节 数据 + */ + /*- 解析协议外网输出帧头 */ + msgLen = CM_ShortFromChar(&buf[i]); /*2字节 帧长度*/ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + type = buf[i + 2u]; /*1字节 协议类型*/ + dstID = CM_ShortFromChar(&buf[i + 3u]); /*2字节 目的设备ID*/ /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ + 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); /* 源目的设备ID */ 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) } /*- 应用是否注册转串口扩展板数据函数 */ - 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)||/*无后备通道,发给通控或者串口板*/ - (ENUM_CM_CCSEB == isSendExtendBoard))/*主、备通道,发给通控*/ + if ((ENUM_CM_FALSE == isTransformOutFrame) || /*无后备通道,发给通控或者串口板*/ + (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 "指针运算提高代码执行效率" */ + (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 "指针运算提高代码执行效率" */ /* 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的UDP报文长度*/ + ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)21u); /*发给CC的UDP报文长度*/ /*- 如果是发送给串口扩展板 */ if (ENUM_CM_SEB == isSendExtendBoard) { @@ -1788,7 +1804,7 @@ void SFM_TxOutnetSafe(IN CM_UINT8 buf[], IN CM_UINT32 Len) /*- 向红网SE发送SE外网帧 */ (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)) { /*- 向红网CC发送CC外网帧 */ (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) /*无处理*/ } /*- 如果是ats转车输出数据 */ - if(ENUM_CM_TRUE == isTransformOutFrame)/*后备通道,发给串口板*/ + if (ENUM_CM_TRUE == isTransformOutFrame) /*后备通道,发给串口板*/ { /*- 按照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解析数据包长度 */ - 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); /* 两字节目的设备ID */ - CM_ShortToChar(logicID, s_Prtcl_UDP_Cache + 29u); /* 两字节目的逻辑id*/ + CM_ShortToChar(eAtsOutLen, s_Prtcl_UDP_Cache + 17u); /* ats解析数据包长度 */ + 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); /* 两字节目的设备ID */ + 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 "指针运算提高代码执行效率" */ + (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 "指针运算提高代码执行效率" */ /* 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的UDP报文长度*/ + ccLen = (CM_INT32)CM_UNSIGNED_SHORT_EXP(appLen + (CM_UINT16)35u); /*发给CC/SEB的UDP报文长度*/ /*- 如果是发送给串口扩展板 */ 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 内网安全通信协议解析 */ - 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 内网安全通信协议解析 */ + 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}; /*- 应用将sfp协议数据写到协议队列 */ 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) { /*- 双CPU交换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 维护模式下sfp协议数据写入应用队列(无宕机函数) -*/ + * @brief 维护模式下sfp协议数据写入应用队列(无宕机函数) + */ 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数组中的数据去掉,保留a的数据. -*/ -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数组中的数据去掉,保留a的数据. + */ +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(若卡斯柯的CI与VOBC通信,需要填写VOBC的站台号。其他的系统填0。) 取值范围:0~0xff -* @return 安全通道链路状态 -* 0:不存在该条链路,返回错误 -* 0x17:链路在数据传输正常状态 -* 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(若卡斯柯的CI与VOBC通信,需要填写VOBC的站台号。其他的系统填0。) 取值范围:0~0xff + * @return 安全通道链路状态 + * 0:不存在该条链路,返回错误 + * 0x17:链路在数据传输正常状态 + * 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 "指针运算提高代码执行效率" */ - 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 "指针运算提高代码执行效率" */ - 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); /*RCIVOCͨͨŹжʱ*/ - 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 yt202231գ䳵ϵͳ*/ UINT8 LinkLogicDirUpAndDown; /*ϵͳ߼зĹϵ,add by yt202231գ䳵ϵͳ*/ UINT16 OppositeTrackDistance; /*ʻ˫Сȫ루cm,add by yt202231գ䳵ϵͳ*/ - UINT16 StationTrackDistance; /*վ̨׷ʱг(cm),add by yt202231գ䳵ϵͳ*/ UINT32 MaxMALength; /*·½ƶ루λm,add by yt202231գ䳵ϵͳ*/ 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޸IJҪʼıϢ 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;/*ҪSPKSLink*/ @@ -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;/*ҪSPKSLink*/ @@ -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ԣ0x55CBTC0xAACBTC*/ + 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ԣ0x55CBTC0xAACBTC*/ + UINT8 cDisneyConnectAttr; /*link CBTCԣʿᣩ0x55CBTC0xFFǡCBTC*/ + UINT8 cTyphoonTsrAttr; /*link ̨ԣʿᣩ0x55Link̨ 0xAALink̨*/ }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ʱ -* SSRBTCʱ״̬ΪFsfb_WaitBtm_BtcabtBTCABT -* ֻBTCʱ״̬ΪFsfb_WaitBtm_AbtOrSseLEUSSEBTCABT -* ·״̬ȫΪֹͣ -* ޸ɣ SSRBTCʱ״̬ΪԭΪ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ж֡ӦݲֵijȽзС0򷵻ʧ -* ޸ɣ ֮ǰûжԴ˳Ƚз +* �ļ��� �� 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���������ж�֡��Ӧ�����ݲ��ֵij��Ƚ��з�����С��0�򷵻�ʧ�� +* �޸����ɣ� ֮ǰû�жԴ˳��Ƚ��з��� * ************************************************************************/ @@ -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 -* : ӦȷSBTTSD -* : -* +* ������ : AccordInfoCreateFrameData +* �������� : ����Ӧ������ȷ������SBT��TSD���� +* ������� : +* ������ ���� ������� ���� * -------------------------------------------------------------------------- -* pAppData UINT8* IN Ӧ -* DataLen UINT816 IN ݳ -* OutMsg UINT8* OUT ı -* outPutDataLen UINT16* OUT ij -* 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 ������ij��� +* 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; /* ͨŽڵָ뱣浽ָ */ - /* ֽڵij */ + (*pPNode) = pTmpNode; /* ��ͨ�Žڵ�ָ�뱣�浽���ָ������� */ + /* �����ֽڵij��� */ /*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]; - /* ֡TSDSBT֡ */ + /* ����֡TSD����SBT֡ */ retVal=CreateTsdOrSbtMsg(&pAppData[DATA_APP_QUE_POS],msgLen,applycat,&OutMsg[index],outPutDataLen,pTmpNode); index+=(*outPutDataLen); *outPutDataLen +=4; - /* ֽڵij */ + /* �����ֽڵij��� */ 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); /*BTDijȴ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*����BTD�ij��ȴ���*/ 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ϢǷϷ */ + /* ���BTD��Ϣ�Ƿ�Ϸ� */ 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 -* : Ӧ TSDSBTġ -* : -* +* ������ : CreateTsdOrSbtMsg +* �������� : ����Ӧ������ ���� TSD��SBT���ġ� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- -* pAppData const UINT8* IN Ӧò㵽Rsspжнڵ -* DataLen UINT8 IN pAppDataݳ -* OutTsdOrSbtMsg UINT8* OUT FSFDϢ֡ -* outPutDataLen UINT16* OUT ij -* pPNode Lnk_Info_Node_Stru_WL** OUT ¶Ӧڵڷ -1 +* pAppData const UINT8* IN Ӧ�ò㵽Rssp���������ж��нڵ� +* DataLen UINT8 IN ����pAppData�����ݳ��� +* OutTsdOrSbtMsg UINT8* OUT FSFD��Ϣ֡ +* outPutDataLen UINT16* OUT ������ij��� +* 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]); - /* ȫݳ Ӧ+ 2CRCM 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 */ - /* ͨ״̬Ϣ */ - /* Applicationcat */ + 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]; /* ��Ӧ��ʱ������յ�SSRʱ�����ʼSINITֵ */ 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 */ - /* ͨ״̬Ϣ */ - /* Applicationcat */ + 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 -* : BTMSBTʽɱġ -* : -* +* ������ : 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󷵻 +* ���ڽڵ�������Ҫ���п��ǣ�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]); - /* ȫݳ Ӧ+ 2CRCM 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) { - /* ijʱ */ + /* ���ij�ʱ ��� */ 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 { - /* ˵Ѿյһ֡ݣҪʱ */ + /* ˵���������Ѿ��յ�һ֡�����ݣ�����Ҫ������ʱ��� */ 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�ǿգ�����ֵ�϶�Ϊ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); /*BTDSVC*/ + 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); /*BTDSVC*/ + 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); -* ޸ɣ֮ǰûлȡݵijȣ޷ʵָ +* �޸ļ�¼�� +* 2014.5.21 ������ +* �޸����ݣ���FsfbProtclRefreshLnk���������������ˣ� tmpInput = ShortFromChar(pLnkStatusData); +* �޸����ɣ�֮ǰû�л�ȡ�������ݵij��ȣ�����޷�ʵ�ָ��� -* 2014.5.21 -* ޸ݣFsfbProtclRefreshLnkУ -* FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); -* ΪFsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); -* ֮ǰˢϢһֱΪıˢ²ȫ - ޸: ֮ǰˢϢһֱΪıˢ²ȫ +* 2014.5.21 ������ +* �޸����ݣ���FsfbProtclRefreshLnk���������У� +* ����FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); +* ��ΪFsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); +* ֮ǰ����ˢ����Ϣ������һֱΪ�ı����ˢ�²���ȫ����� + �޸�����: ֮ǰ����ˢ����Ϣ������һֱΪ�ı����ˢ�²���ȫ����� -* 2014.5.30 - ޸: FsfbStructInit(): pFsfbStruct->AppArrayijֶγʼΪ0 - ޸: Ϊ4ֽlong +* 2014.5.30 ������ + �޸�����: ��FsfbStructInit()��: pFsfbStruct->AppArray�ij����ֶγ�ʼ��Ϊ0 + �޸�����: ����Ϊ4���ֽ�long ֮ǰ:ShortToChar(0, pFsfbStruct->AppArray); - Ϊ:LongToChar(0, pFsfbStruct->AppArray); + ��Ϊ:LongToChar(0, pFsfbStruct->AppArray); - 2014.5.30 - ޸: FsfbStructInit()pFsfbStruct->VarArrayijֶεijʼ - ޸: ʼʱӦñʼ + 2014.5.30 ������ + �޸�����: ��FsfbStructInit()��������pFsfbStruct->VarArray�ij����ֶεij�ʼ�� + �޸�����: ��ʼ��ʱ����Ӧ�ñ���ʼ�� - 2014.5.30 - ޸:FsfbStructInit()е"·ջռ"ģ - ˶ջʼɶջʼ - ޸:ʹģ黯 + 2014.5.30 ������ + �޸�����:��FsfbStructInit()�е�"������·��������ջ�ռ�"ģ�� + �����˶�ջ��ʼ������������ɶ�ջ��ʼ�� + �޸�����:������ʹ�����������ģ�黯 - 2014.5.30 - ޸:FsfbStructInit()е"ʱĻ"ģ - ʱڴռijʼ - ޸:¿ٵڴռӦýгʼ - 2014.8.05 - ޸:ReadQueueData()У޸BTD֧ķֵBTD֤ͨ - ֻǽ򵥵Ķ崻 - ޸:Ҫ - 2014.8.05 - ޸:ReadQueueData()Уһ֡ݳ:ݳ+2󳤶ʱ - ֡ݶִ - ޸:֮ǰδ˷֧ - 2014.8.14 - ޸ݣFsfbProtclOutPutȡÿһ֡Դ֡ݳȽ֤Ϸ֡ - ޸ɣ֮ǰֻǶԵһ֡ݳȷûж֡ݳȷҶԲϷ֡ûнӦ + 2014.5.30 ������ + �޸�����:��FsfbStructInit()�е�"��ʱ���Ļ�����"ģ�������� + ��ʱ�������ڴ�ռ�ij�ʼ�� + �޸�����:�¿��ٵ��ڴ�ռ�Ӧ�ý��г�ʼ�� + 2014.8.05 ������ + �޸�����:ReadQueueData()�����У��޸���BTD��֧�ķ���ֵ�����BTD��֤��ͨ���� + ֻ�ǽ���򵥵Ķ������������崻��� + �޸�����:������Ҫ + 2014.8.05 ������ + �޸�����:ReadQueueData()�����У���һ֡���ݳ���:���������ݳ���+2�����������󳤶�ʱ�� + ����֡���ݶ���������ִ�� + �޸�����:֮ǰδ���˷�֧���� + 2014.8.14 ������ + �޸����ݣ�FsfbProtclOutPut������ȡ��ÿһ֡���Դ�֡���ݳ��Ƚ�����֤���Ϸ�����������֡ + �޸����ɣ�֮ǰֻ�ǶԵ�һ֡�������ݳ��ȷ�����û�ж�����֡�����ݳ��ȷ����ҶԲ��Ϸ�֡û�н�����Ӧ���� * ------------ ------ --------------- ********************************************************/ #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. ڵô˺֮ǰӦҪͳһṹInputSizeOutputSize,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֡*/ + /* �����TDM֡*/ 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) { - /* ɨֽڵij:һ֡Ӧݵij */ + /* ɨ�������ֽڵij���:һ֡Ӧ�����ݵij��� */ 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Эм*/ + /*�����ദ���ṹ���е��м����������FSFBЭ���м������*/ 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Э��ͳһ�ṹ�� + * ������У�pFsfbStruct->OutnetQueueA * pFsfbStruct->OutnetQueueB - * УpFsfbStruct->DataToApp + * ������У�pFsfbStruct->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); - /*ȡദ·Ϣij*/ + /*��ȡ���ദ����·��Ϣ�ij���*/ 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 - * : ͨúʵֶRSRijʼӦ趨ĻֵеĴС - * : - * + * ������ : FsfbStructInit + * �������� : ͨ���ú�����ʵ�ֶ�RSR��ij�ʼ������������Ӧ���趨�Ļ���ֵ����������еĴ�С�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * 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�����ģ��������� */ 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���ģ������м���������С */ 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. ����·��������ͷָ����Ϊ�գ� +* ������� : +* ����������� : 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); /* ɨֽڵij */ + QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* ɨ�������ֽڵij��� */ 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"); /* ʧ */ + /* ������ʧ�������ʣ�µ����ݴ�СС��MsgLen+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) { - /* ݣ·״̬ */ + /* ���������ݣ�������·״̬��������� */ 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) /*SSRSSEŴ*/ -#define IN_ABT_STATUS (0x0C) /*ABT״̬*/ -#define IN_ABT_SVC_ERR (0x0D) /*ABTSVC*/ -#define IN_ABT_OLD_ERR (0x0E) /*ABTŴ*/ -#define IN_ABT_SSE_BTC (0x0F) /*ABTSSEBTC*/ -#define IN_BTD_LEN_ERR (0x10) /*BTDijȴ*/ -#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) /*BTDSVC*/ -#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�ij��ȴ���*/ +#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_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 /* ���ģ�� */ -/* ģд */ +/* ��ģ�����д��� */ #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 /* ijȲ */ -#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 /* ���ij��Ȳ��� */ +#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