From bdc50a96a33921ca0e58992c6f3e8a6f68bba1bb Mon Sep 17 00:00:00 2001 From: lh <3191213465@qq.com> Date: Fri, 22 May 2026 15:15:15 +0800 Subject: [PATCH] =?UTF-8?q?[9.3]=209.3=E9=A6=96=E7=89=88=E9=A6=96=E8=BD=AE?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=9F=BA=E7=BA=BF=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TSCP/src/APP/APP_API.c | 5 +- .../ci_integrate_config.h | 2 +- .../APP/ciapp/2oo2/2oo2DataTransferManage.c | 207 +- .../APP/ciapp/2oo2/2oo2InterfaceDataManage.h | 2 +- .../APP/ciapp/AutoRoute/AutoRouteDataManage.c | 14 +- .../APP/ciapp/AutoRoute/AutoRouteDataManage.h | 8 +- .../APP/ciapp/AxisAssert/AxisAssertDefine.h | 1 + .../ciapp/AxisAssert/AxisAssertManageAPI.c | 364 ++- .../ciapp/AxisAssert/AxisAssertManageAPI.h | 20 + .../ciapp/CutoffPoint/CutoffPointDataManage.c | 369 +-- .../ciapp/CutoffPoint/CutoffPointDataManage.h | 17 + .../APP/ciapp/DataManage/DeviceDataManage.c | 294 ++- .../APP/ciapp/DataManage/DeviceDataManage.h | 86 +- .../src/APP/ciapp/DataManage/PlatDataManage.c | 101 +- .../src/APP/ciapp/DataManage/PlatDataManage.h | 13 +- TSCP/src/APP/ciapp/ERROR/ErrorDefine.h | 18 +- TSCP/src/APP/ciapp/ESB/ESBDataManage.c | 275 +++ TSCP/src/APP/ciapp/ESB/ESBDataManage.h | 97 + .../ciapp/EnvelopeManage/CTEnvelopeTrack.c | 244 +- .../EnvelopeManage/EnvelopeLogicProcess.c | 167 +- .../EnvelopeManage/EnvelopeLogicProcess.h | 18 + .../APP/ciapp/EnvelopeManage/EnvelopeScreen.c | 42 +- .../ciapp/EnvelopeManage/UCTEnvelopeTrack.c | 128 +- .../src/APP/ciapp/IO/DeviceRelayDataProcess.c | 2123 +++++++++++++---- .../src/APP/ciapp/IO/DeviceRelayDataProcess.h | 147 +- TSCP/src/APP/ciapp/IO/InputDataProcess.c | 538 ++++- TSCP/src/APP/ciapp/IO/InputDataProcess.h | 15 + TSCP/src/APP/ciapp/IO/OutputDataProcess.c | 41 +- .../Indicator/IndicatorConfigDataManage.c | 2 +- .../src/APP/ciapp/Indicator/IndicatorDefine.h | 2 +- .../APP/ciapp/Initial/ConfigDataReadManage.c | 62 +- .../APP/ciapp/Initial/ConfigDataReadManage.h | 10 + TSCP/src/APP/ciapp/Initial/InitialProcess.c | 54 +- .../ciapp/InvadeSection/InvadeSectionDefine.h | 2 +- TSCP/src/APP/ciapp/LogRecord/LogRecord.c | 52 +- .../ciapp/LogicManage/InterlockCommonManage.c | 5 + .../ciapp/LogicManage/InterlockCommonManage.h | 1 + .../ciapp/LogicManage/InterlockLogicManage.c | 906 +++++-- .../ciapp/LogicManage/InterlockLogicManage.h | 31 +- .../ciapp/LogicManage/RouteRecoverManage.c | 136 +- .../LogicManage/TradInterlockLogicManage.c | 267 ++- .../LogicManage/TradInterlockLogicManage.h | 5 +- .../ciapp/LogicProcess/InterlockLogicCheck.c | 1349 +++++++---- .../ciapp/LogicProcess/InterlockLogicCheck.h | 101 +- .../LogicProcess/InterlockLogicProcess.c | 244 +- .../LogicProcess/InterlockLogicProcess.h | 9 +- .../LogicProcess/TradInterlockLogicProcess.c | 49 +- TSCP/src/APP/ciapp/Mask/MaskDefine.h | 20 +- .../ciapp/Overlap/OverlapConfigDataManage.c | 50 + .../ciapp/Overlap/OverlapConfigDataManage.h | 19 +- .../src/APP/ciapp/Overlap/OverlapDataManage.c | 2 +- TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c | 24 + TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h | 11 + TSCP/src/APP/ciapp/PSD/PSDDataManage.c | 360 ++- TSCP/src/APP/ciapp/PSD/PSDDataManage.h | 138 +- TSCP/src/APP/ciapp/PSD/PSDDefine.h | 35 + .../APP/ciapp/ParsePack/CiInterfaceDefine.h | 23 +- .../APP/ciapp/ParsePack/ParsePackAtsData.c | 438 +++- .../APP/ciapp/ParsePack/ParsePackAtsData.h | 42 + .../APP/ciapp/ParsePack/ParsePackAxleData.c | 381 ++- .../APP/ciapp/ParsePack/ParsePackAxleData.h | 18 +- .../src/APP/ciapp/ParsePack/ParsePackCiData.c | 2048 ++++++++++++++-- .../src/APP/ciapp/ParsePack/ParsePackCiData.h | 126 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.c | 444 +++- .../src/APP/ciapp/ParsePack/ParsePackCommon.h | 10 +- .../src/APP/ciapp/ParsePack/ParsePackDefine.h | 3 +- .../ciapp/ParsePack/ParsePackGateWayData.c | 1434 ++++++++--- .../ciapp/ParsePack/ParsePackGateWayData.h | 63 +- .../APP/ciapp/ParsePack/ParsePackITEData.c | 26 +- .../src/APP/ciapp/ParsePack/ParsePackManage.c | 23 +- .../src/APP/ciapp/ParsePack/ParsePackOcData.c | 480 +++- .../src/APP/ciapp/ParsePack/ParsePackOcData.h | 78 + .../APP/ciapp/ParsePack/ParsePackTmcData.c | 222 +- .../APP/ciapp/ParsePack/ParsePackTmcData.h | 6 +- .../APP/ciapp/ParsePack/ParsePackVobcData.c | 570 ++++- .../APP/ciapp/ParsePack/ParsePackVobcData.h | 31 + .../src/APP/ciapp/ParsePack/ParsePackZcData.c | 275 ++- .../src/APP/ciapp/ParsePack/ParsePackZcData.h | 10 +- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c | 964 +++++--- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h | 10 +- .../src/APP/ciapp/QueryFiles/dquCIInterFace.c | 72 + .../src/APP/ciapp/QueryFiles/dquCIInterFace.h | 10 + .../ciapp/QueryFiles/dquCIJDQStruFrmChar.c | 60 +- .../APP/ciapp/QueryFiles/dquCIJDQStruInit.c | 102 +- TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h | 2 + .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.c | 8 + .../APP/ciapp/QueryFiles/dquCILSStruInit.c | 106 +- TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h | 2 + TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c | 1082 +++++++-- TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h | 44 +- TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h | 8 +- .../APP/ciapp/Relay/RelayConfigDataManage.c | 50 + .../APP/ciapp/Relay/RelayConfigDataManage.h | 19 + TSCP/src/APP/ciapp/Relay/RelayDataManage.c | 14 + TSCP/src/APP/ciapp/Relay/RelayDataManage.h | 20 + TSCP/src/APP/ciapp/Relay/RelayDefine.h | 13 + TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c | 3 +- TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c | 269 +-- TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h | 14 - .../APP/ciapp/ReverseCut/ReverseCutDefine.h | 2 +- .../APP/ciapp/Route/LogicalRouteDataManage.c | 210 +- .../APP/ciapp/Route/LogicalRouteDataManage.h | 9 + .../APP/ciapp/Route/RouteConfigDataManage.c | 100 +- .../APP/ciapp/Route/RouteConfigDataManage.h | 40 +- TSCP/src/APP/ciapp/Route/RouteDataManage.c | 264 +- TSCP/src/APP/ciapp/Route/RouteDataManage.h | 95 +- TSCP/src/APP/ciapp/Route/RouteDefine.h | 9 +- TSCP/src/APP/ciapp/SPKS/SpksDataManage.c | 59 +- TSCP/src/APP/ciapp/SPKS/SpksDataManage.h | 18 + TSCP/src/APP/ciapp/SPKS/SpksDefine.h | 2 +- .../Section/AxisSectionConfigDataManage.c | 26 + .../Section/AxisSectionConfigDataManage.h | 10 + .../APP/ciapp/Section/LinkConfigDataManage.c | 138 +- .../APP/ciapp/Section/LinkConfigDataManage.h | 40 + .../ciapp/Section/LogicSectionDataManage.c | 46 +- .../ciapp/Section/LogicSectionDataManage.h | 8 + .../Section/PhysicalSectionConfigDataManage.c | 45 + .../Section/PhysicalSectionConfigDataManage.h | 12 + .../ciapp/Section/PhysicalSectionDataManage.c | 238 +- .../ciapp/Section/PhysicalSectionDataManage.h | 72 +- TSCP/src/APP/ciapp/Section/SectionDefine.h | 14 +- TSCP/src/APP/ciapp/Signal/SignalDataManage.c | 597 ++++- TSCP/src/APP/ciapp/Signal/SignalDataManage.h | 154 ++ TSCP/src/APP/ciapp/Signal/SignalDefine.h | 18 +- TSCP/src/APP/ciapp/Switch/SwitchDataManage.c | 64 +- TSCP/src/APP/ciapp/Switch/SwitchDataManage.h | 9 + TSCP/src/APP/ciapp/Switch/SwitchDefine.h | 4 + TSCP/src/APP/ciapp/System/CiSystemDefine.h | 9 +- .../src/APP/ciapp/System/SystemConfigDefine.h | 26 +- .../APP/ciapp/System/SystemParameterManage.c | 70 +- .../APP/ciapp/System/SystemParameterManage.h | 46 +- .../APP/ciapp/Train/EvacuationAreaManage.c | 828 +++++-- .../APP/ciapp/Train/EvacuationAreaManage.h | 3 +- TSCP/src/APP/ciapp/Train/TrainDataManage.c | 926 ++++++- TSCP/src/APP/ciapp/Train/TrainDataManage.h | 150 +- TSCP/src/APP/ciapp/Train/TrainDefine.h | 7 +- TSCP/src/APP/ciapp/Transmit/TransmitDefine.h | 5 + .../ciapp/Transmit/TransmitStateDataManage.c | 17 +- .../src/APP/ciapp/WLBrake/WLBrakeDataManage.c | 22 +- .../APP/ciapp/WLScreen/WLScreenLogicProcess.c | 105 +- .../APP/ciapp/WLScreen/WLScreenLogicProcess.h | 9 + TSCP/src/DRV/imx8_drv_gpio.c | 779 +++++- TSCP/src/DRV/imx8_drv_gpio.h | 163 ++ TSCP/src/DRV/imx8_drv_i2c.c | 2 +- TSCP/src/MSCP/CFM/CFM_Net.c | 4 + TSCP/src/MSCP/MSCP_main.c | 8 + TSCP/src/MSCP/PFM/PFM_Cfg.c | 22 +- .../dqu_cbtc_common/dquCbtcConfigData.c | 107 +- .../dqu_cbtc_common/dquCbtcConfigData.h | 12 + .../dqu_dfs_common/dquDataTypeDefine.h | 1 + .../dqu_common/dqu_emap_common/dquEmapInit.c | 23 +- .../dqu_emap_common/dquStructInit.c | 487 ++-- .../dqu_emap_common/dquStructInit.h | 8 +- .../dqu_common/dqu_emap_common/dsuStruct.h | 31 +- .../protocol/fsfb/common_fsfb/FsfbConfig.h | 4 +- .../fsfb/common_fsfb/FsfbLnkNodeMgr.c | 190 +- .../fsfb/common_fsfb/FsfbMessageInfo.c | 176 +- .../protocol/fsfb/common_fsfb/FsfbProtcl.c | 44 +- .../fsfb/common_fsfb/FsfbRecordDelare.h | 38 +- .../fsfb/common_fsfb/RpHandleInterface.c | 10 +- .../fsfb/common_fsfb/RpHandlePlatform.h | 2 +- .../common_sfp_nr_config/sfpConfig.h | 30 +- 162 files changed, 21035 insertions(+), 4557 deletions(-) diff --git a/TSCP/src/APP/APP_API.c b/TSCP/src/APP/APP_API.c index 51961ee..bf7b5a3 100644 --- a/TSCP/src/APP/APP_API.c +++ b/TSCP/src/APP/APP_API.c @@ -4,7 +4,6 @@ */ #include "APP_API.h" #include "MSCP_APP_API.h" -#include "MSCP_APP_Interface.h" #include "2oo2InterfaceDataManage.h" #include "2oo2DataTransferManage.h" #include "commonQueryStruDef.h" @@ -239,8 +238,8 @@ void APP_API_Data_Init() .M_InnetSafe_Enable = 0x55, /**< 内网安全通信功能开关 */ .M_InnetRaw_Enable = 0xAA, /**< 内网透传通信功能开关 */ .M_OutnetSafe_Enable = 0x55,/**< 外网安全通信功能开关 */ - .M_OutnetRaw_Enable = 0x55, /**< 外网透传通信功能开关 */ - .M_CpuUsageGet_Enable = 0xAA,/**< 获取cpu使用率功能开关 */ + .M_OutnetRaw_Enable = 0xAA, /**< 外网透传通信功能开关 */ + .M_CpuUsageGet_Enable = 0x55,/**< 获取cpu使用率功能开关 */ .M_RemoteUpdate_Enable = 0x55,/**< 远程部署内网安全通信功能开关 */ .ID_Maintenance = DEVICE_TYPE_AIM, .Start_Path = "/emmc1", /**< 程序启动路径 */ 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 935cad1..a76b1d0 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 77 /*ɴ*/ +#define VER_INTE_TIME 101 /*ɴ*/ #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 1d4e480..48fc137 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c +++ b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c @@ -688,6 +688,9 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) UINT32 curIndex = 0u; /*¼ƶ±*/ UINT32 curResult = 0u; /*ṹЧid*/ UINT8 ii= 0u; + UINT32 crcIndex = 0u; /*ڼCRC±*/ + UINT32 crcLength = 0u; /*ڼCRCij*/ + UINT32 crcResult = 0u; /*ڴCRCֵ*/ if (NULL != pCiAppDataPointer) { @@ -728,10 +731,20 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, &g_AllSnowModel, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); + /*ȫʪ켶*/ + (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_AllSnowLevel), (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); + /*Ӧ̵̼Ч*/ (void)memcpy(pCiAppDataPointer + curIndex, &JkjRelayValidCycNum, sizeof(UINT32)); curIndex = curIndex + (UINT32)sizeof(UINT32); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 AllSignalBrightFlag-JkjRelayValidCycNum CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*ܸλ״̬Ч*/ (void)memcpy(pCiAppDataPointer + curIndex, &ZFWValidCycNum, sizeof(UINT32)); curIndex = curIndex + (UINT32)sizeof(UINT32); @@ -772,6 +785,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, &SendCiCmdDataStruCurSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 ZFWValidCycNum-SendCiCmdDataStruCurSum CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*ͨŵVobcĿ*/ (void)memcpy(pCiAppDataPointer + curIndex, &VobcToCiSum, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); @@ -817,6 +836,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)SwitchDataStru, SWITCH_SUM_MAX, (UINT16)sizeof(SwitchDataStruct)); curIndex = curIndex + curResult; + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 VobcToCiSum-SwitchDataStru CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*ݽṹ*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)AxisSectionDataStru, AXIS_SECTION_SUM_MAX, (UINT16)sizeof(AxisSectionDataStruct)); curIndex = curIndex + curResult; @@ -857,6 +882,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, NonRouteDataStruArr, NONROUTE_ID_NUM_MAX*sizeof(NonRouteDataStruct)); curIndex = curIndex + (UINT32)(NONROUTE_ID_NUM_MAX*sizeof(NonRouteDataStruct)); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 AxisSectionDataStru-NonRouteDataStruArr CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*ָʾݽṹ*/ (void)memcpy(pCiAppDataPointer + curIndex, IndicatorDataStru, (INDICATOR_SUM_MAX)*sizeof(IndicatorDataStruct)); curIndex = curIndex + (UINT32)((INDICATOR_SUM_MAX)*sizeof(IndicatorDataStruct)); @@ -908,6 +939,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, AllAutoReturnDataStru, (ALL_AUTO_RETURN_SUM_MAX)*sizeof(AllAutoReturnDataStruct)); curIndex = curIndex + (UINT32)((ALL_AUTO_RETURN_SUM_MAX)*sizeof(AllAutoReturnDataStruct)); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 IndicatorDataStru-AllAutoReturnDataStru CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*ݽṹ*/ (void)memcpy(pCiAppDataPointer + curIndex, GaragedoorDataStru, (GARAGE_DOOR_SUM_MAX)*sizeof(GaragedoorDataStruct)); curIndex = curIndex + (UINT32)((GARAGE_DOOR_SUM_MAX)*sizeof(GaragedoorDataStruct)); @@ -948,6 +985,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, ocHLHTHeadCtxs, (OC_SUM_MAX) * sizeof(HLHTHeadContextStru)); curIndex = curIndex + (UINT32)((OC_SUM_MAX) * sizeof(HLHTHeadContextStru)); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 GaragedoorDataStru-ocHLHTHeadCtxs CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*뱾CIͨŵTMCϵͳͨͷ*/ (void)memcpy(pCiAppDataPointer + curIndex, tmcHLHTHeadCtxs, (TMC_SUM_MAX) * sizeof(HLHTHeadContextStru)); curIndex = curIndex + (UINT32)((TMC_SUM_MAX) * sizeof(HLHTHeadContextStru)); @@ -989,6 +1032,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, m_Switches, m_SwitchNum * sizeof(OcDeviceStruct)); curIndex = curIndex + (UINT32)(m_SwitchNum * sizeof(OcDeviceStruct)); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 tmcHLHTHeadCtxs-m_Switches CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /*뱾CIͨŵOC DI*/ curIndex += CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)m_OcConvertedPtDataArr, (OC_SUM_MAX), (UINT16)sizeof(OcCollBoardDataStruct)); @@ -1026,6 +1075,12 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) (void)memcpy(pCiAppDataPointer + curIndex, &CiSendBackDataTempStruSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); + /*һCRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 m_OcConvertedPtDataArr-CiSendBackDataTempStruSum CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + /**/ for(ii = 0u;iienvelopeType) || (TYPE_UCT_ENVELOPE == pTempEnvelope->envelopeType)) && - (FLAG_SET == funRtn) && (0u == pTempEnvelope->tailTrainID)) + else { - /** óԶ */ - ret = AAM_GOOD_FAR_AWAY; + chNoSleepCheck = CI_SUCCESS; + for (ii = 0U; ii < pTempEnvelope->trianCnt; ii++) + { + cSleepState = GetTrainSleepState(pTempEnvelope->trainID[ii]); + if (TRAIN_SLEEP_YES == cSleepState) + { + chNoSleepCheck = CI_ERROR; + break; + } + } + + if (CI_ERROR == chNoSleepCheck) + { + /*ڼ߳*/ + ret = AAM_SLEEP_OCC; + } + else if (((TYPE_CT_ENVELOPE == pTempEnvelope->envelopeType) || (TYPE_UCT_ENVELOPE == pTempEnvelope->envelopeType)) && + (FLAG_SET == funRtn) && (0u == pTempEnvelope->tailTrainID)) + { + /** óԶ */ + ret = AAM_GOOD_FAR_AWAY; + } + else if (((TYPE_CT_ENVELOPE == pTempEnvelope->envelopeType) || (TYPE_UCT_ENVELOPE == pTempEnvelope->envelopeType)) && + (FLAG_UNSET == funRtn) && (0u == pTempEnvelope->headTrainID)) + { + /** óӽ */ + ret = AAM_GOOD_NEAR; + } + else + { + /** ӽ */ + ret = AAM_BAD_NEAR; + } } - else if (((TYPE_CT_ENVELOPE == pTempEnvelope->envelopeType) || (TYPE_UCT_ENVELOPE == pTempEnvelope->envelopeType)) && - (FLAG_UNSET == funRtn) && (0u == pTempEnvelope->headTrainID)) - { - /** óӽ */ - ret = AAM_GOOD_NEAR; - } - else - { - /** ӽ */ - ret = AAM_BAD_NEAR; - } + } } } @@ -156,8 +179,6 @@ UINT8 aam_SearchNearbyTrainType(UINT16 baseACID, UINT8 Dir, UINT8 acCnt, UINT16 UINT8 acStatus = ELM_AC_OCC; UINT16 tmpPhyid = 0u; UINT8 phyRelACCnt = 0u; - UINT8 i = 0U; - UINT16 wTrainId = 0U; const UINT16* phyRelACIDs = NULL; const EnvelopeStruct* pTempEnvelope = NULL; UINT8 acRelEnvelopeCnt = 0u; @@ -281,30 +302,23 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) UINT8 ret = CI_ERROR; UINT8 funRtn = CI_ERROR; UINT8 chNearbyCheck = CI_ERROR; - UINT8 acSameCnt = 0u; - UINT16 acSameID[AC_MAXCNT_IN_SWITCH] = { 0u }; - UINT8 acConvertCnt = 0u; - UINT16 acConvertID[AC_MAXCNT_IN_SWITCH] = { 0u }; - UINT32 errorCode = 0u; + UINT8 acSameCnt = 0U; + UINT16 acSameID[AC_MAXCNT_IN_SWITCH] = { 0U }; + UINT8 acConvertCnt = 0U; + UINT16 acConvertID[AC_MAXCNT_IN_SWITCH] = { 0U }; + UINT32 errorCode = 0U; UINT8 sameTrainType = AAM_BAD_NEAR; UINT8 convertTrainType = AAM_BAD_NEAR; - UINT8 tmpRedunTime = 0u; - UINT8 tmppassTrainType = 0u; + UINT8 tmpRedunTime = 0U; + UINT8 tmppassTrainType = 0U; UINT8 tmpACStatus = AAM_STATUS_OCC; UINT8 maxRedunTimes = 0u; - UINT8 chSwitch = 0u; + UINT8 chSwitch = 0U; UINT32 dwArbCheckDistance = 0U; /*RC16.0 ϵͳARB*/ UINT8 chRedunArbFlag = REDUN_OVER_ARB_NO; /*жʱɷARB־*/ - UINT8 dwCiAndAxleTransBadEnsureCnt = 0U; /*жͨж*/ - UINT32 dwCurAxleOccStartCycNum = 0U; /*ռʼ*/ - UINT8 ii = 0U; - UINT32 dwNearAxleOccStartCycNum = 0U; /*ڼռʼ*/ - UINT8 cAcRelEnvelopeCnt = 0U; - EnvelopeStruct strEnvelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; - UINT8 cOccCheckFlag = CI_ERROR; - UINT16 wCurRelPhySecId = 0U; - UINT16 wNearRelPhySecId = 0U; UINT8 cAxisCommBadArbFlag = AAM_COMM_BAD_ARB_NO; + UINT8 chPhyTrainCheck = CI_SUCCESS; + UINT8 cAcCbtcAttr = 0U; /*CBTC*/ chSwitch = aam_PrepareArbSwitch(); if (CI_SUCCESS == chSwitch) @@ -353,6 +367,32 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) /** 󷽼ᳵӽ */ convertTrainType = aam_SearchNearbyTrainType(acID, EMAP_CONVER_DIR, acConvertCnt, acConvertID); + /*޹ϳ*/ + chPhyTrainCheck = aam_CheckPhyTrain(acID); + cAcCbtcAttr = GetAxisSecCbtcProperty(acID); /*ȡCBTC*/ + + if ((CI_ERROR == chPhyTrainCheck) || (AXIS_SEC_CBTC_PROPERTY_YES != cAcCbtcAttr)) + { + /** йϳCBTC֮ǰʱλռ */ + funRtn = aam_ClearPassTrainFlag(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u); + + funRtn = aam_ClearRedunTime(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u); + + aam_SetAxisStatus(acIndex, AAM_STATUS_OCC); + AAM_LOG(AAM_LOG_FATAL, "info:AC%d set UT,Physec has UKT\n ", acID); + } + else if ((AAM_SLEEP_OCC == sameTrainType) || (AAM_SLEEP_OCC == convertTrainType)) + { + /** óͨ־UT */ + funRtn = aam_ClearPassTrainFlag(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u); + } + else + { + ; /**/ + } /** жڷΧڼỵռʱͨ */ if ((CI_ERROR == chNearbyCheck)) { @@ -409,90 +449,14 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) AAM_LOG(AAM_LOG_FATAL, "info:AC%d keep ARB Fail, NearByTrainCheck:%d.\n", acID, chNearbyCheck); } else - { - cOccCheckFlag = CI_SUCCESS; - dwCiAndAxleTransBadEnsureCnt = GetCiAndAxleTransBadEnsureCnt(); /*ȡжͨжϳʱ*/ - wCurRelPhySecId = GetAxisSecRelativePhySecId(acID); - if (0U != wCurRelPhySecId) - { - dwCurAxleOccStartCycNum = GetSecColOccupyStartCycNum(wCurRelPhySecId); - for (ii = 0U; ii < acSameCnt; ii++) - { - wNearRelPhySecId = GetAxisSecRelativePhySecId(acSameID[ii]); - if (0U != wNearRelPhySecId) - { - cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(acSameID[ii], strEnvelopeInfo); - dwNearAxleOccStartCycNum = GetSecColOccupyStartCycNum(wNearRelPhySecId); - if (((0U == cAcRelEnvelopeCnt) || (SECTION_REL_ENVELOPE_SUM_MAX == cAcRelEnvelopeCnt)) - && ((dwCurAxleOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwNearAxleOccStartCycNum)) - { - cOccCheckFlag = CI_ERROR; /*ڼްռʼʱ䳬ˡͨжϳʱжʱ䡱*/ - } - else - { - /*ڼռʼδͨжϳʱжʱ䡱*/ - } - } - else - { - cOccCheckFlag = CI_ERROR; - } + { + /*ARBͬڼռ*/ + funRtn = aam_ArbContinuousOccCheck(acID, acSameCnt, acSameID); - if (CI_ERROR == cOccCheckFlag) - { - break; - } - else - { - ; - } - } + /*ARBηڼռ*/ + funRtn &= aam_ArbContinuousOccCheck(acID, acConvertCnt, acConvertID); - if (CI_SUCCESS == cOccCheckFlag) - { - for (ii = 0U; ii < acConvertCnt; ii++) - { - wNearRelPhySecId = GetAxisSecRelativePhySecId(acConvertID[ii]); - if (0U != wNearRelPhySecId) - { - cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(acConvertID[ii], strEnvelopeInfo); - dwNearAxleOccStartCycNum = GetSecColOccupyStartCycNum(wNearRelPhySecId); - if (((0U == cAcRelEnvelopeCnt) || (SECTION_REL_ENVELOPE_SUM_MAX == cAcRelEnvelopeCnt)) - && ((dwCurAxleOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwNearAxleOccStartCycNum)) - { - cOccCheckFlag = CI_ERROR; /*ڼްռʼʱ䳬ˡͨжϳʱжʱ䡱*/ - } - else - { - /*ڼռʼδͨжϳʱжʱ䡱*/ - } - } - else - { - cOccCheckFlag = CI_ERROR; - } - - if (CI_ERROR == cOccCheckFlag) - { - break; - } - else - { - ; - } - } - } - else - { - /*ʧܣ*/ - } - } - else - { - cOccCheckFlag = CI_ERROR; - } - - if (CI_SUCCESS != cOccCheckFlag) + if (CI_SUCCESS != funRtn) { /** ֮ǰʱλ */ funRtn = aam_ClearPassTrainFlag(acIndex); @@ -502,7 +466,7 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00400000U); aam_SetAxisStatus(acIndex, AAM_STATUS_OCC); - AAM_LOG(AAM_LOG_FATAL, "info:AC%d Keep ARB Fail Because Of Near Sec Occ\n", acID); + AAM_LOG(AAM_LOG_FATAL, "info:AC%d Keep ARB Fail Because Of Near Sec Continuous Occ\n", acID); } else { @@ -887,9 +851,11 @@ void aam_MainProcess(void) /** ͷARB⴦*/ aam_InitEndLinePassFlag(); + /*ϵͳͨжARB⴦RC20.0װע͵ָʱBy LQ 2025.05.07*/ +#if 0 /*ϵͳͨжARB⴦*/ aam_AxisCommBadArbPro(); - +#endif for (cycle = 0u; cycle < acCnt; cycle++) { /** жϼǷڱOC */ @@ -2054,4 +2020,166 @@ UINT8 aam_GetAxisStatusAPI(UINT16 ACID) acIndex = aam_PrepareACIndex(ACID); reVal = aam_GetAxisStatus(acIndex); return reVal; +} + +/** +* ܣξ޹ϳ +* UINT16 ACID id +* ֵCI_SUCCESS ޹ϳ +* CI_ERROR ڹϳ +* Create By fan 2025.06 18 +*/ +UINT8 aam_CheckPhyTrain(UINT16 ACID) +{ + UINT8 reVal = CI_ERROR; + UINT16 wPhySecId = 0U; /**/ + UINT8 phyAcNum = 0u; /*ι*/ + UINT16* pACBuff = NULL; + UINT16 wAxisSecId = 0U; /*id*/ + UINT8 linkNum = 0U; /*ilnk*/ + UINT16* pLinkBuf = NULL; /*link*/ + UINT8 jj = 0U; + UINT8 ii = 0U; + UINT8 k = 0U; + TRAIN_SEQUANCE_s linkInctrainList[SIZE_MAX_TRAINOFAC] = { 0u }; /*linkϵг*/ + UINT8 cLinkIncTrainSum = 0u; /*linkг*/ + wPhySecId = aam_PrepareACBelongPhyid(ACID); + phyAcNum = GetPAxisSectionSum(wPhySecId); + pACBuff = GetPAxisSectionIdBuf(wPhySecId); + if ((0U != phyAcNum) && (NULL != pACBuff)) + { + reVal = CI_SUCCESS; + for (ii = 0; ii < phyAcNum; ii++) + { + /*linkس*/ + wAxisSecId = pACBuff[ii]; + linkNum = GetAxisLinkSum(wAxisSecId); + pLinkBuf = GetAxisLinkIdBuf(wAxisSecId); + if ((0U != linkNum) && (NULL != pLinkBuf)) + { + for (jj = 0; jj < linkNum; jj++) + { + cLinkIncTrainSum = as_GetLinkTrainList(pLinkBuf[jj], linkInctrainList, SIZE_MAX_TRAINOFAC); + for (k = 0U; k < cLinkIncTrainSum; k++) + { + + if (NAME_FAILUREAREA != linkInctrainList[k].u16TrainID) + { + ; /**/ + } + else + { + reVal = CI_ERROR; /*ڹϳֹͣ顣ʧ*/ + break; + } + } + if (CI_ERROR == reVal) + { + break; + } + } + } + else + { + /*ȡʧ */ + reVal = CI_ERROR; + } + if (CI_ERROR == reVal) + { + break; + } + } + } + else + { + reVal = CI_ERROR; + } + return reVal; +} + +/* +* ܣARBռü +* UINT16 wAcId ID +* UINT8 cNearAcNum ڼ +* UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH] ڼID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.08.07 +*/ +UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH]) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT16 wCurRelPhySecId = 0U; /*ID*/ + UINT8 dwCiAndAxleTransBadEnsureCnt = 0U; /*жͨж*/ + UINT32 dwCurAxleOccStartCycNum = 0U; /*ռʼ*/ + UINT8 ii = 0U; + UINT16 wNearRelPhySecId = 0U; /*ڼID*/ + UINT8 cAcRelEnvelopeCnt = 0U; + EnvelopeStruct strEnvelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; + UINT32 dwNearAxleOccStartCycNum = 0U; /*ڼռʼ*/ + UINT8 cRcId = 0U; + UINT8 cFunRtn = 0U; + UINT16 wNearAcIndex = 0U; + + wBufIndex = GetAxisSecConfigBufIndex(wAcId); /*ȡ±*/ + + if ((AXIS_SECTION_SUM_MAX > wBufIndex) && (AC_MAXCNT_IN_SWITCH > cNearAcNum) && (NULL != pNearAcId)) + { + wCurRelPhySecId = GetAxisSecRelativePhySecId(wAcId); + if (0U != wCurRelPhySecId) + { + cRetVal = CI_SUCCESS; + dwCiAndAxleTransBadEnsureCnt = GetCiAndAxleTransBadEnsureCnt(); /*ȡжͨжϳʱ*/ + dwCurAxleOccStartCycNum = GetSecColOccupyStartCycNum(wCurRelPhySecId); + for (ii = 0U; ii < cNearAcNum; ii++) + { + wNearRelPhySecId = GetAxisSecRelativePhySecId(pNearAcId[ii]); + if (0U != wNearRelPhySecId) + { + cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(pNearAcId[ii], strEnvelopeInfo); + dwNearAxleOccStartCycNum = GetSecColOccupyStartCycNum(wNearRelPhySecId); + if (((0U == cAcRelEnvelopeCnt) || (SECTION_REL_ENVELOPE_SUM_MAX == cAcRelEnvelopeCnt)) + && ((dwCurAxleOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwNearAxleOccStartCycNum)) + { + cRetVal = CI_ERROR; /*ڼްռʼʱ䳬ˡͨжϳʱжʱ䡱*/ + + cFunRtn = aam_PrepareACIsSelf(pNearAcId[ii], &cRcId); /*жǷΪ*/ + + if (ELM_BELONG_OWNER == cFunRtn) + { + wNearAcIndex = aam_PrepareACIndex(pNearAcId[ii]); + (void)aam_ClearPassTrainFlag(wNearAcIndex); /*óͨ־*/ + (void)aam_ClearRedunTime(wNearAcIndex); /*ʱ*/ + aam_SetAxisStatus(wNearAcIndex, AAM_STATUS_OCC); /*ռ*/ + + AAM_LOG(AAM_LOG_FATAL, "info:AC%d Set Occ Because Of Near Sec%d Keep Arb Fail\n", pNearAcId[ii], wAcId); + } + else + { + /*DZΣ*/ + } + } + else + { + /*ڼռʼδͨжϳʱжʱ䡱*/ + } + } + else + { + cRetVal = CI_ERROR; /*쳣ʧ*/ + } + } + } + else + { + cRetVal = CI_ERROR; /*쳣ʧ*/ + } + } + else + { + cRetVal = CI_ERROR; /*ηǷʧ*/ + } + + return cRetVal; } \ 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 7e4836e..47dbdd1 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.h @@ -213,4 +213,24 @@ void SetRcAxleArb(void); */ UINT8 aam_GetAxisStatusAPI(UINT16 ACID); +/** +* ܣξ޹ϳ +* UINT16 ACID id +* ֵCI_SUCCESS ޹ϳ +* CI_ERROR ڹϳ +* Create By fan 2025.06 18 +*/ +UINT8 aam_CheckPhyTrain(UINT16 ACID); + +/* +* ܣARBռü +* UINT16 wAcId ID +* UINT8 cNearAcNum ڼ +* UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH] ڼID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.08.07 +*/ +UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH]); + #endif /*AXIS_ASSERT_MANAGE_API_H_*/ diff --git a/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.c b/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.c index fdadd97..87a1b2c 100644 --- a/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.c +++ b/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.c @@ -370,27 +370,22 @@ void CutoffPointOutput(void) UINT16 wPhySecId = 0u; UINT8 chOccState = 0u; UINT8 cDir = 0u; - UINT8 cTrainDir = 0u; UINT8 cFunRetVal = CI_ERROR; - TRAIN_SEQUANCE_s strTmp = { 0u }; CfpTrainInfoStru tmpTrainInfo = { 0u }; - UINT16 wTrainId = 0u; - UINT32 dwDis = UINT32_MAX; - UINT32 dwDisTail = UINT32_MAX; - UINT32 dwDisHead = UINT32_MAX; - struct_PathPoint TrainPoint = { 0u }; - struct_PathPoint TrainHeadPoint = { 0u }; - struct_PathPoint TrainTailPoint = { 0u }; - struct_PathPoint CutoffPoint = { 0u }; - UINT8 cTrainTailDir = 0U; /*гȫβ*/ - UINT8 cTrainHeadDir = 0U; /*гȫͷ*/ - UINT32 dwFindLen = 0u; + struct_PathPoint LinkPoint = { 0u }; + UINT32 dwFindLen = 0u;/*źŻƷ*/ UINT8 chTrainNum = 0u; UINT8 cDirectionPointfirst = 0U; /*仯1*/ UINT8 cDirectionPointsecond = 0U; /*仯2*/ - + UINT16 wOtherCfpId = 0u; /*ֽID*/ + UINT8 chLocalId = 0u; /*id*/ + UINT8 chLinkCIId = 0u; /*linkid*/ + UINT8 chOtherFlag = FLAG_UNSET; + UINT8 chBreakFlag = FLAG_UNSET; + UINT32 dwLinkLen = 0U;/*Ѽֽ*/ dwFindLen = GetSystemParaValue(SIGNAL_LIGHTUP_SEC_LEN_ID); - dwFindLen *= 100u; + dwFindLen *= 100U; + chLocalId = GetSystemParaLocalCiId(); /* ȡ߽ */ wCutoffPointSum = GetCfpSum(); @@ -405,157 +400,122 @@ void CutoffPointOutput(void) cDir = GetCfpLocDir(wCutoffPointId); /* ߽ĵlink */ + (void)CommonMemSet(wszLinkIdBuf, (UINT32)(sizeof(UINT16)*MAX_CFG_LIGHTUPLINK_NUM), 0U, (UINT32)(sizeof(UINT16)*MAX_CFG_LIGHTUPLINK_NUM)); cFunRetVal = CalCutoffPointOccupyLinkSeq(wCutoffPointId, &wLinkSum, wszLinkIdBuf); - /* ȡ߽Ϣ */ - CutoffPoint.wLinkId = GetCfpLink(wCutoffPointId); - CutoffPoint.dwOffset = GetCfpOffset(wCutoffPointId); + /*üλ */ + LinkPoint.wLinkId =0U; + LinkPoint.dwOffset = 0U; - wTrainId = 0u; - TrainPoint.wLinkId = 0u; - TrainPoint.dwOffset = 0u; - - TrainTailPoint.wLinkId = 0U; - TrainTailPoint.dwOffset = 0U; - TrainHeadPoint.wLinkId = 0U; - TrainHeadPoint.dwOffset = 0U; - - if (CI_SUCCESS == cFunRetVal) + wOtherCfpId = 0U; + chOtherFlag = FLAG_UNSET; + chBreakFlag = FLAG_UNSET; + dwLinkLen = 0U; + if ((CI_SUCCESS == cFunRetVal)&&(MAX_CFG_LIGHTUPLINK_NUM>=wLinkSum)) { /* βҳɹ,鵽ϵг */ for (j = 0u;j < wLinkSum;j++) { wLinkId = wszLinkIdBuf[j]; - wPhySecId = GetLinkRelatedPhySec(wLinkId); - chOccState = GetPhySecCurOccupyState(wPhySecId); - chTrainNum = as_GetLinkTrainNum(wLinkId); - - if ((SECTION_OCCUPY_NO != chOccState) && (0u != chTrainNum)) + chLinkCIId = (UINT8)GetLinkManageTiocById(wLinkId); + if (chLinkCIId == chLocalId) { - /* ҵгռõ */ + wPhySecId = GetLinkRelatedPhySec(wLinkId); + chOccState = GetPhySecCurOccupyState(wPhySecId); + chTrainNum = as_GetLinkTrainNum(wLinkId); + + if ((SECTION_OCCUPY_NO != chOccState) && (0u != chTrainNum)) + { + /* ҵгռõ */ + chBreakFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + chOtherFlag = FLAG_SET; + } + if (j < wLinkSum) + { + /* ѾԶ޳λ*/ + LinkPoint.wLinkId = wLinkId; + if ((FLAG_SET == chOtherFlag)||(FLAG_SET == chBreakFlag)) + { + if (DIR_SAME == cDir) + { + LinkPoint.dwOffset = 0U; + } + else + { + LinkPoint.dwOffset = GetLinkLengthById(wLinkId); + } + } + else + { + if (DIR_SAME == cDir) + { + LinkPoint.dwOffset = GetLinkLengthById(wLinkId); + } + else + { + LinkPoint.dwOffset = 0U; + } + if (j < wLinkSum - 1U) + { /*Ƿз仯㣬˴飬ǰlinkѰȶ꣬һlinkʱмз仯㣬仯㣬һlinkı䷽*/ + cDirectionPointfirst = GetLinkLogicDirChangedById(wszLinkIdBuf[j]); + cDirectionPointsecond = GetLinkLogicDirChangedById(wszLinkIdBuf[(j + 1U)]); /*wLinkSumѼԽ*/ + if (((LINK_DIRCHANGE_BEGIN == cDirectionPointfirst) || (LINK_DIRCHANGE_END == cDirectionPointfirst)) + && (cDirectionPointsecond == cDirectionPointfirst)) + { + cDir = ConvertTrainDir(cDir); /*з仯㣬ת*/ + } + else + { + ; /*ûз任㣬DZ䷽*/ + } + } + dwLinkLen += GetLinkLengthById(wLinkId); /*δжϱ޳ڱѼlinkܳ*/ + } + } + else + { + ; /*һlink */ + } + + if ((dwFindLen <= dwLinkLen)|| (FLAG_SET == chOtherFlag) || (FLAG_SET == chBreakFlag)) + { + /*㹻 ҵRCҵռãֹͣ*/ break; } else { - ; - } - - /*Ƿз仯㣬˴飬ǰlinkѰȶ꣬һlinkʱмз仯㣬仯㣬һlinkı䷽*/ - if (j < (wLinkSum - 1U)) - { - cDirectionPointfirst = GetLinkLogicDirChangedById(wszLinkIdBuf[j]); - cDirectionPointsecond = GetLinkLogicDirChangedById(wszLinkIdBuf[(j + 1U)]); /*todoԽ*/ - if (((LINK_DIRCHANGE_BEGIN == cDirectionPointfirst) || (LINK_DIRCHANGE_END == cDirectionPointfirst)) - && (cDirectionPointsecond == cDirectionPointfirst)) - { - cDir = ConvertTrainDir(cDir); /*з仯㣬ת*/ - } - else - { - ; /*ûз任㣬DZ䷽*/ - } - } - else - { - ; /*һlinkҪǷ仯⣬ֹԽ*/ + ; /*޴*/ } } /* ȡгID ȡֽг*/ - if (j < wLinkSum) + if ((j < wLinkSum) && (dwFindLen > dwLinkLen)) { - if (DIR_SAME == cDir) + if (FLAG_UNSET == chOtherFlag) { - strTmp = as_GetLinkFirstTrain(wLinkId); + CfpTrainInfoCal(LinkPoint.wLinkId, LinkPoint.dwOffset, dwLinkLen, &tmpTrainInfo, cDir); } else { - strTmp = as_GetLinkLastTrain(wLinkId); + /*ҵڱlink ѰҶӦֽгϢ*/ + OtherCfpTrainInfoCal(LinkPoint.wLinkId, LinkPoint.dwOffset, dwLinkLen, &tmpTrainInfo); } - wTrainId = strTmp.u16TrainID; } else { - ; - } - - if (j == wLinkSum) - { - /* δҵгռ÷޳ */ + /* δҵгռ о㹻޳ */ tmpTrainInfo.wTrainId = 0u; tmpTrainInfo.chTrainLevel = 0u; tmpTrainInfo.dwDis = 0u; } - else - { - /* ռãжг */ - if (NAME_FAILUREAREA == strTmp.u16TrainID) - { - /* */ - tmpTrainInfo.wTrainId = SIZE_MAX_LINETRAIN; - tmpTrainInfo.chTrainLevel = 0u; - - /* ȡλ */ - TrainPoint.wLinkId = wLinkId; - - /*ѡȡlinkϾֽĵ*/ - if (DIR_SAME == cDir) - { - TrainPoint.dwOffset = 0u; - } - else - { - TrainPoint.dwOffset = GetLinkLengthById(wLinkId); - } - - /* ѯ */ - dwDis = DsuAPointToBPoint(&TrainPoint, &CutoffPoint, &cTrainDir); - } - else - { - /* */ - tmpTrainInfo.wTrainId = strTmp.u16TrainID; - tmpTrainInfo.chTrainLevel = GetTrainLevel(tmpTrainInfo.wTrainId); - - /*ȡȫβ*/ - TrainTailPoint.wLinkId = GetTrainSafeTailLink(wTrainId); - TrainTailPoint.dwOffset = GetTrainSafeTailOffset(wTrainId); - /*ȡȫͷ*/ - TrainHeadPoint.wLinkId = GetTrainSafeHeadLink(wTrainId); - TrainHeadPoint.dwOffset = GetTrainSafeHeadOffset(wTrainId); - - /*ȡβֽ*/ - dwDisTail = DsuAPointToBPoint(&TrainTailPoint, &CutoffPoint, &cTrainTailDir); - - /*ȡͷֽ*/ - dwDisHead = DsuAPointToBPoint(&TrainHeadPoint, &CutoffPoint, &cTrainHeadDir); - - if (dwDisTail < dwDisHead) - { - dwDis = dwDisTail; - } - else - { - dwDis = dwDisHead; - } - } - - if (UINT32_MAX == dwDis) - { - tmpTrainInfo.dwDis = 0u; - } - else if(dwFindLen >= dwDis) - { - tmpTrainInfo.dwDis = dwDis; - } - else - { - /* Χ޳ */ - tmpTrainInfo.wTrainId = 0u; - tmpTrainInfo.chTrainLevel = 0u; - tmpTrainInfo.dwDis = 0u; - } - } } else { @@ -1631,4 +1591,141 @@ void SetCfpSignalLightUpFlag(const UINT16 wCfpId, const UINT8 cLightUpFlag) { ; } +} +/* +* ֽϢ±ͷֽг +* ˵UINT16 wLinkId ֽlink ,UINT32 dwOffSetƫ, UINT32 dwLocalOffSet ѾҾ +* []: CfpTrainInfoStru* trainInfo г +* ֵ +* Created By fan 2025.05.26 +*/ +void OtherCfpTrainInfoCal(UINT16 wLinkId,UINT32 dwOffSet,UINT32 dwLocalOffSet, CfpTrainInfoStru* trainInfo) +{ + UINT16 wCfpId = 0U;/*ֽid*/ + UINT8 chTransmitStat = TRANSMIT_STATE_BAD; + CfpTrainInfoStru strCfpInfo = { 0u }; + UINT8 chLinkTiocId = 0U; + UINT32 dwDdLen = 0U;/*źŻƾ*/ + UINT32 dwLeftOffset = 0U;/*ʣ*/ + /*ݳʼ*/ + dwDdLen = GetSystemParaValue(SIGNAL_LIGHTUP_SEC_LEN_ID); + dwDdLen *= 100u; + wCfpId = GetCfpIdByPoint(wLinkId, dwOffSet); + if (NULL != trainInfo) + { + /*ʼΪڸ÷ֽڹϳ*/ + trainInfo->wTrainId = SIZE_MAX_LINETRAIN; + trainInfo->dwDis = dwLocalOffSet; + trainInfo->chTrainLevel = 0U; + if (dwDdLen > dwLocalOffSet) + { + dwLeftOffset = dwDdLen - dwLocalOffSet; + } + else + { + ;/*޴*/ + } + if (0U != wCfpId) + { + chLinkTiocId = (UINT8)GetLinkManageTiocById(wLinkId); + strCfpInfo = GetCfpOtherOcTrainInfo(wCfpId); + chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_CI, chLinkTiocId); + if ((TRANSMIT_STATE_GOOD != chTransmitStat) || (UINT16_MAX == strCfpInfo.wTrainId)) + { + ;/*ͨŲã߷ֽгϢȡʧ*/ + } + else if ((0u == strCfpInfo.wTrainId) || + ((UINT32_MAX != strCfpInfo.dwDis) && (dwLeftOffset < strCfpInfo.dwDis))) + { + /*Tioc޳ ֽʣҾ*/ + trainInfo->wTrainId = 0U; + trainInfo->dwDis = 0U; + trainInfo->chTrainLevel = 0U; + } + else + { + /*ݷֽϢ*/ + trainInfo->wTrainId = strCfpInfo.wTrainId; + trainInfo->dwDis = strCfpInfo.dwDis + dwLocalOffSet; + trainInfo->chTrainLevel = strCfpInfo.chTrainLevel; + } + } + else + { + ;/*ֽȡʧ*/ + } + } +} + +/* +* гݸ±ͷֽг +* ˵UINT16 wLinkId ֽlink ,UINT32 dwOffSetƫ, UINT32 dwLocalOffSet ѾҾ UINT8 cDir +* []: CfpTrainInfoStru* trainInfo г +* ֵ +* Created By fan 2025.06.04 +*/ +void CfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet, CfpTrainInfoStru* trainInfo,UINT8 cDir) +{ + TRAIN_SEQUANCE_s strTmp = { 0u }; + UINT16 wTrainId = 0u; + UINT32 dwDis = UINT32_MAX; + UINT32 dwDisTail = UINT32_MAX; + UINT32 dwDisHead = UINT32_MAX; + struct_PathPoint TrainHeadPoint = { 0u }; + struct_PathPoint TrainTailPoint = { 0u }; + struct_PathPoint LinkPoint = { 0u }; + UINT8 cTrainTailDir = 0U; /*гȫβ*/ + UINT8 cTrainHeadDir = 0U; /*гȫͷ*/ + if ((NULL != trainInfo)&&(0U!= wLinkId)) + { + LinkPoint.wLinkId = wLinkId; + LinkPoint.dwOffset = dwOffSet; + /*ռlinkڱ*/ + if (DIR_SAME == cDir) + { + strTmp = as_GetLinkFirstTrain(wLinkId); + } + else + { + strTmp = as_GetLinkLastTrain(wLinkId); + } + wTrainId = strTmp.u16TrainID; + /* ռãжг */ + if (NAME_FAILUREAREA == strTmp.u16TrainID) + { + /* */ + trainInfo->wTrainId = SIZE_MAX_LINETRAIN; + trainInfo->chTrainLevel = 0u; + trainInfo->dwDis = dwLocalOffSet; + } + else + { + /* */ + trainInfo->wTrainId = strTmp.u16TrainID; + trainInfo->chTrainLevel = GetTrainLevel(trainInfo->wTrainId); + + /*ȡȫβ*/ + TrainTailPoint.wLinkId = GetTrainSafeTailLink(wTrainId); + TrainTailPoint.dwOffset = GetTrainSafeTailOffset(wTrainId); + /*ȡȫͷ*/ + TrainHeadPoint.wLinkId = GetTrainSafeHeadLink(wTrainId); + TrainHeadPoint.dwOffset = GetTrainSafeHeadOffset(wTrainId); + + /*ȡβѼlinkԶ˾*/ + dwDisTail = DsuAPointToBPoint(&TrainTailPoint, &LinkPoint, &cTrainTailDir); + + /*ȡͷѼlinkԶ˾*/ + dwDisHead = DsuAPointToBPoint(&TrainHeadPoint, &LinkPoint, &cTrainHeadDir); + + if (dwDisTail < dwDisHead) + { + dwDis = dwDisTail; + } + else + { + dwDis = dwDisHead; + } + trainInfo->dwDis = dwLocalOffSet + dwDis; + } + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.h b/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.h index 3a46323..a083884 100644 --- a/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.h +++ b/TSCP/src/APP/ciapp/CutoffPoint/CutoffPointDataManage.h @@ -350,6 +350,23 @@ UINT8 GetCfpSignalLightUpFlag(const UINT16 wCfpId); */ void SetCfpSignalLightUpFlag(const UINT16 wCfpId, const UINT8 cLightUpFlag); +/* +* ֽϢ±ͷֽг +* ˵UINT16 wLinkId ֽlink ,UINT32 dwOffSetƫ, UINT32 dwLocalOffSet ѾҾ +* []: CfpTrainInfoStru* trainInfo г +* ֵ CI_ERRORг CI_SUCCESS޳ +* Created By fan 2025.05.26 +*/ +void OtherCfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet, CfpTrainInfoStru* trainInfo); +/* +* гݸ±ͷֽг +* ˵UINT16 wLinkId ֽlink ,UINT32 dwOffSetƫ, UINT32 dwLocalOffSet ѾҾ UINT8 cDir +* []: CfpTrainInfoStru* trainInfo г +* ֵ +* Created By fan 2025.06.04 +*/ +void CfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet, CfpTrainInfoStru* trainInfo, UINT8 cDir); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c index be10a07..df6f0db 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c +++ b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c @@ -44,7 +44,9 @@ UINT8 ciMode = CI_MODE_CI_LOCAL; /* UINT8 g_AllTsrFlag = CI_ALL_TSR_UNVALID; /* ʱٱ־ */ -UINT8 g_AllSnowModel = CI_ALL_SNOW_UNVALID; /*ȫѩģʽ*/ +UINT8 g_AllSnowModel = CI_ALL_SNOW_UNVALID; /*ȫѩģʽ0x55-Ч0xAA-Ч*/ + +UINT8 g_AllSnowLevel = CI_SNOW_LEVEL_DEFAULT; /*ȫʪ켶0-Ĭֵ1-һ2-*/ UINT8 g_IteLineCutState = CI_ITE_LINE_CUT_DEFAULT; /*ITEȫг״̬0x55гITE0xAAʹITE0xFFĬֵ*/ @@ -82,7 +84,7 @@ UINT8 SwitchBlockLinkState = RECOVER_SWITCH_BLOCK_LINK; /* CtrlPowerStruct ctrlpowerFlag[VIRTUAL_CI_MAX] = { 0u }; UINT8 LocalAreaSnowNum = 0U; /*ѩվ̨*/ -UINT32 szLocalAreaSnowId[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*ѩվ̨ID*/ +AreaSnowInfoStruct szLocalAreaSnow[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*ѩ*/ LineCommTrainStruct gStrLineCommTrain = { 0U }; /*ȫͨųṹ*/ @@ -90,6 +92,9 @@ UINT32 gFlyProtectOverCyc = 0U; /* UINT8 g_LocalSnowModel = CI_LOCAL_SNOW_UNVALID; /*ѩģʽ*/ +UINT8 gLocalAreaIteCutNum = 0U; /*ITEг*/ +UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX] = { 0U }; /*ITEгID顪Ҫ洢ZC͵ID*/ + /******************************־ݹ****************************/ @@ -1324,6 +1329,18 @@ UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoS RouteAssocSwitchStruct routeAssocSwitchStru = {0,0}; /**/ UINT8 routeProtectSwitchSum = 0u; /*Ŀ*/ RouteProtectSwitchStruct* pRouteProtectSwitchStru = NULL; /**/ + UINT8 chAutoCheck = 0U; + UINT8 chSendLevel = 0U; + chAutoCheck = AutoSignalOrRouteValid(routeId); + if (chAutoCheck == CI_SUCCESS) + { + /*Զ·ԶźŲATS*/ + chSendLevel = ESEND_LEVEL_ZERO; + } + else + { + chSendLevel = ESEND_LEVEL_ATS; + } if((0u == routeId) || (routeId >= ROUTE_SUM_MAX)) { @@ -1377,6 +1394,8 @@ UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoS else { RouteDrvInnerSwitch(routeId, SWITCH_NEED_DRIV_FALSE); + /*ӵλòͬ*/ + SetErrorData(EFUNC_ROUTE_LOCK_DRIVE_SWITCH,CI_DEVICE_TYPE_ROUTE,routeId, ETYPE_ROUTE_APPLY_SWITCH_MOVE,0U, chSendLevel); } if((CI_SUCCESS == assocSwitchRetVal) && (CI_SUCCESS == innerSwitchRetVal)) @@ -2148,6 +2167,8 @@ UINT8 DriveSignalClose(const UINT16 signalId) */ UINT8 GetSwitchMoveEarlyValidState(UINT16 switchId, UINT8 oper_src, UINT8 sendLevel) { + UINT8 reVal = CI_ERROR; +#if 0 /**/ UINT8 const functionId = EFUNC_CHECK_SWITCH_MOVE; @@ -2174,7 +2195,6 @@ UINT8 GetSwitchMoveEarlyValidState(UINT16 switchId, UINT8 oper_src, UINT8 sendLe UINT8 switch2ndSecOccuState = 0u; UINT8 switch2ndSecLockState = 0u; UINT8 switch2ndSecMerOccuState = 0u; - UINT8 reVal = CI_ERROR; UINT8 ARBMoveSwitchFlag = 0u; UINT8 switch2ndSecJumpLockState = 0u; UINT8 switch2ndSecFLockState = 0u;/*2η״̬*/ @@ -2513,8 +2533,9 @@ UINT8 GetSwitchMoveEarlyValidState(UINT16 switchId, UINT8 oper_src, UINT8 sendLe } } } - /*ɶ*/ +#endif + return reVal; } @@ -2577,9 +2598,9 @@ UINT8 GetSwitchMoveValidState(UINT16 switchId,UINT8 oper_src,UINT8 sendLevel) /*жǷù·*/ gdDLline = GetCiFunctionSwitchConfig(FUNC_CLD_GD_DIANLU_LINE); - if ((JkjRelayId > 0u) && (JKJ_REYLAY_VALID == JkjRelayValid) && (CI_TYPE_CLD == ciType)) + if ((JKJ_REYLAY_VALID == JkjRelayValid) && (CI_TYPE_CLD == ciType)) {/*Ӧ̵̼Ч״̬*/ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, JkjRelayId, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, ESEND_LEVEL_ATS); + SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, 0u, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, ESEND_LEVEL_ATS);/*OCӦعܣ̵ID0*/ reVal = CI_ERROR; } else @@ -5128,6 +5149,9 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c devState = 0u; } break; + case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*վ̨ţ쳣򿪣*/ + devState = GePsdExceptOpenState(devId); + break; case CI_DEVICE_TYPE_GARAGEDOOR: /**/ tmpDevState = GetGaragedoorState(devId); if (GARAGE_DOOR_STATE_OPEN == tmpDevState) @@ -5264,6 +5288,7 @@ UINT8 GetOtherCiCheckDevStateType(UINT16 const devType) retType = ETYPE_ESB_VALID; break; case CI_DEVICE_TYPE_PSD: /*վ̨*/ + case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*վ̨ţ쳣򿪣*/ retType = ETYPE_PSD_CLOSE_NO; break; case CI_DEVICE_TYPE_GARAGEDOOR: /**/ @@ -5381,7 +5406,6 @@ void SetAllTsrFlag(UINT8 setFlag) * ˵ void * ֵ 0x55: Ч 0xAA:Ч */ - UINT8 GetAllSnowModel(void) { return g_AllSnowModel; @@ -5404,6 +5428,37 @@ void SetAllSnowModel(UINT8 setmodle) } } +/* +* ȡȫʪȼ +* ˵ +* ֵ0 Ĭֵ +* 1 ʪһ +* 2 ʪ +* Created By LQ 2025.05.28 +*/ +UINT8 GetAllSnowLevel(void) +{ + return g_AllSnowLevel; +} + +/* +* ȫʪȼ +* ˵UINT8 cLevel ʪ켶 +* ֵ +* Created By LQ 2025.05.28 +*/ +void SetAllSnowLevel(UINT8 cLevel) +{ + if ((CI_SNOW_LEVEL_DEFAULT == cLevel) || (CI_SNOW_LEVEL_ONE == cLevel) || (CI_SNOW_LEVEL_TWO == cLevel)) + { + g_AllSnowLevel = cLevel; + } + else + { + /**/ + } +} + /* * ȡITEȫг״̬ * ˵void @@ -6166,6 +6221,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) UINT16 bufIndex = 0u; /*±*/ UINT8 logSecLockState = 0U; UINT8 logSecLockRouteNum = 0U; + UINT8 chFailStep = 0U; bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ /**±Ϸ*/ @@ -6182,7 +6238,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) logicCheck = LogicIntruSecVainCheck(logSectionId, &devId, &devState); /*߼޼*/ logSecLockState = GetLogSecLogLockState(logSectionId); logSecLockRouteNum = GetLogSecLockBelLogRouteSum(logSectionId); - + if (NULL == pLgcSecSwitchStru) { reVal = CI_ERROR; @@ -6197,6 +6253,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*·*/ reVal = CI_ERROR; + chFailStep = 1U; } } if (CI_SUCCESS == reVal) @@ -6205,6 +6262,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*߼δ߼·*/ reVal = CI_ERROR; + chFailStep = 2U; } } @@ -6224,6 +6282,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) || ((LOGICSECTION_OCCUPY_CT == curLogSecOccState) && (CI_ERROR == checkSulicTrain))) { reVal = CI_ERROR; + chFailStep =3U; break; } else @@ -6257,6 +6316,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*ʧ*/ reVal = CI_ERROR; + chFailStep = 4U; } else { @@ -6275,12 +6335,14 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) /*δڷ״̬(SPKSʵʩ)*/ reVal = CI_ERROR; + chFailStep = 5U; } if ((CI_SUCCESS == reVal) && (CI_ERROR == logicCheck)) { /*߼޼鲻ͨ*/ reVal = CI_ERROR; + chFailStep = 6U; } if ((CI_SUCCESS == reVal) && (0u < routeRlockId)) @@ -6294,8 +6356,8 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if ((CI_SUCCESS == routeTrainNear) && ((ROUTE_STATE_YUXIAN_OPEN == routeState) || (ROUTE_STATE_NEAR_OPEN == routeState))) { - reVal = CI_ERROR; + chFailStep = 7U; } } else @@ -6321,6 +6383,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if ((pLgcSecSwitchStru[ii].SwitchPosition != switchCurPosition) || (CI_ERROR == retFlag) || (SWITCH_LOCK_FENGSUO_YES == switchFLockState)) {/*жϵǰĵλǰλһͬijһȻЧ򣨵*/ reVal = CI_ERROR; + chFailStep = 8U; break; } else @@ -6351,6 +6414,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if (FLOOD_GATE_OPEN != floodState) { reVal = CI_ERROR; + chFailStep = 9U; break; } else @@ -6376,6 +6440,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) || ((LOGICSECTION_OCCUPY_CT == curLogSecOccState) && (CI_ERROR == checkSulicTrain))) { reVal = CI_ERROR; + chFailStep = 10U; } else { @@ -6395,6 +6460,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if (CI_ERROR == checkResult) { reVal = CI_ERROR; + chFailStep = 11U; } else { @@ -6406,11 +6472,30 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) /** */ } } + + if (CI_SUCCESS == reVal) + { + /* ߳*/ + checkResult = LogSecRelateNoSleepTrainCheck(logSectionId); + if (CI_ERROR == checkResult) + { + reVal = CI_ERROR; + chFailStep = 12U; + } + else + { + reVal = CI_SUCCESS; + } + } } else { reVal = CI_ERROR; } + if (CI_ERROR == reVal) + { + debug_infor_printf((const)"\nCheckLogJumpLockApply ! LogSecID: %d__Error Position Is [%d]\n", logSectionId, chFailStep); + } return reVal; } @@ -10616,10 +10701,10 @@ UINT8 GetDiaoCheRouteOpenState(const UINT16 wRouteId) /* * ñѩվ̨Ϣ * ˵const UINT8 cAreaSnowNum ѩ -* const UINT32 pAreaSnowIdBuf[] ѩID +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ * ֵ */ -void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[]) +void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]) { UINT8 ii = 0U; UINT8 jj = 0U; @@ -10632,20 +10717,20 @@ void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[ UINT8 cPhySecBelongCiId = 0U; /*SPKSε*/ UINT8 cLocalCiId = 0U; /*CI ID*/ - if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) && (NULL != pAreaSnowIdBuf)) + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) && (NULL != pAreaSnowBuf)) { /*ѩվ̨Ϣͷ͸ѩϢ*/ ClearCiSendAreaSnowInfo(); - (void)CommonMemSet(szLocalAreaSnowId, (UINT32)(sizeof(UINT32) * LOCAL_AREA_SNOW_SUM_MAX), 0U, (UINT32)(sizeof(UINT32) * LOCAL_AREA_SNOW_SUM_MAX)); + (void)CommonMemSet(szLocalAreaSnow, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX), 0U, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX)); LocalAreaSnowNum = cAreaSnowNum; for (ii = 0U; ii < cAreaSnowNum; ii++) { - szLocalAreaSnowId[ii] = pAreaSnowIdBuf[ii]; /*洢ѩ״̬Ϣ*/ + szLocalAreaSnow[ii] = pAreaSnowBuf[ii]; /*洢ѩ״̬Ϣ*/ - /*жǷҪͱѩվ̨*/ + /*жǷҪͱѩϢ*/ cLocalCiId = GetSystemParaLocalCiId(); - cPlatFormRelSpksNum = GetPlatFormRelSpksNum((UINT16)pAreaSnowIdBuf[ii], szPlatFormRelSpksId); /*ȡվ̨SPKS*/ + cPlatFormRelSpksNum = GetPlatFormRelSpksNum(pAreaSnowBuf[ii].wAreaId, szPlatFormRelSpksId); /*ȡվ̨SPKS*/ if (CI_ERROR != cPlatFormRelSpksNum) { @@ -10664,7 +10749,7 @@ void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[ if ((cLocalCiId != cPhySecBelongCiId) && (0U != cLocalCiId) && (0U != cPhySecBelongCiId)) { - AddCiSendAreaSnowInfo(cLocalCiId, cPhySecBelongCiId, pAreaSnowIdBuf[ii]); /*վ̨зDZΣCIվ̨ID*/ + AddCiSendAreaSnowInfo(cLocalCiId, cPhySecBelongCiId, pAreaSnowBuf[ii].wAreaId, pAreaSnowBuf[ii].cAreaSnowLevel); /*վ̨зDZΣCIվ̨ID*/ } else { @@ -10701,13 +10786,13 @@ UINT8 GetLocalAreaSnowNum(void) } /* -* ȡѩվ̨ID +* ȡѩϢ * ˵ -* ֵ ѩվ̨ID +* ֵ ѩϢ */ -UINT32* GetLocalAreaSnowId(void) +AreaSnowInfoStruct* GetLocalAreaSnow(void) { - return szLocalAreaSnowId; + return szLocalAreaSnow; } @@ -11114,4 +11199,171 @@ void DefaultCtrlPowerDeal(const UINT8 virtualCiId) { ; } +} + +/* +* ȡITEг +* ˵ +* ֵITEг +* Created By LQ 2025.04.15 +*/ +UINT8 GetLocalAreaIteCutNum(void) +{ + return gLocalAreaIteCutNum; +} + +/* +* ȡITEгID +* ˵ +* ֵITEгID +* Created By LQ 2025.04.15 +*/ +UINT16* GetLocalAreaIteCutId(void) +{ + return gSzLocalAreaIteCutId; +} + +/* +* ITEгϢ +* ˵ +* ֵ +* Created By LQ 2025.04.15 +*/ +void ClearLocalAreaIteCutInfo(void) +{ + gLocalAreaIteCutNum = 0U; + (void)CommonMemSet(gSzLocalAreaIteCutId, (UINT32)(sizeof(UINT16) * ALL_AREA_SNOW_SUM_MAX), 0U, (UINT32)(sizeof(UINT16) * ALL_AREA_SNOW_SUM_MAX)); +} + +/* +* ñITEгϢ +* ˵const UINT8 cAreaIteCutNum ITEг +* const UINT16 pAreaIteCutIdBuf[ALL_AREA_SNOW_SUM_MAX] ID +* ֵ +* Created By LQ 2025.04.15 +*/ +void SetLocalAreaIteCutInfo(const UINT8 cAreaIteCutNum, const UINT16 pAreaIteCutIdBuf[ALL_AREA_SNOW_SUM_MAX]) +{ + UINT8 ii = 0U; + UINT8 jj = 0U; + UINT16 kk = 0U; + UINT8 cPlatFormRelSpksNum = 0U; /*վ̨SPKS*/ + UINT16 szPlatFormRelSpksId[PLATFORM_REL_SPKS_NUM_MAX] = { 0U }; /*վ̨SPKS ID*/ + UINT16 wSpksIndex = 0U; + UINT16 wSpksRelPhySecNum = 0U; /*SPKS*/ + UINT16 wSpksRelPhySecId = 0U; /*SPKSID*/ + UINT8 cPhySecBelongCiId = 0U; /*SPKSε*/ + UINT8 cLocalCiId = 0U; /*CI ID*/ + UINT8 cPlatFormBelongCiId = 0U; /*վ̨LinkCI*/ + + if ((ALL_AREA_SNOW_SUM_MAX >= cAreaIteCutNum) && (NULL != pAreaIteCutIdBuf)) + { + /*ITEгϢ͸ITEгϢ*/ + ClearLocalAreaIteCutInfo(); + ClearCiSendAreaIteCutInfo(); + + /*ʼˢ±ITEгϢ*/ + gLocalAreaIteCutNum = cAreaIteCutNum; + for (ii = 0U; ii < cAreaIteCutNum; ii++) + { + gSzLocalAreaIteCutId[ii] = pAreaIteCutIdBuf[ii]; /*洢ID*/ + + /*жǷҪͱITEгϢ*/ + cLocalCiId = GetSystemParaLocalCiId(); + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(pAreaIteCutIdBuf[ii]); /*ȡ*/ + if ((cLocalCiId == cPlatFormBelongCiId) && (0U != cLocalCiId)) + { + cPlatFormRelSpksNum = GetPlatFormRelSpksNum(pAreaIteCutIdBuf[ii], szPlatFormRelSpksId); /*ȡվ̨SPKS*/ + + if (CI_ERROR != cPlatFormRelSpksNum) + { + /*վ̨SPKSжSPKSǷзDZ*/ + for (jj = 0U; jj < cPlatFormRelSpksNum; jj++) + { + wSpksIndex = GetSpksConfigBufIndex(szPlatFormRelSpksId[jj]); + if (SPKS_SUM_MAX > wSpksIndex) + { + wSpksRelPhySecNum = GetSpksPhySecSumByIndex(wSpksIndex); + + for (kk = 0U; kk < wSpksRelPhySecNum; kk++) + { + wSpksRelPhySecId = GetSpksPhySecId(szPlatFormRelSpksId[jj], kk); + cPhySecBelongCiId = GetPhySecBelongCiId(wSpksRelPhySecId); + + if ((cLocalCiId != cPhySecBelongCiId) && (0U != cLocalCiId) && (0U != cPhySecBelongCiId)) + { + AddCiSendAreaIteCutInfo(cLocalCiId, cPhySecBelongCiId, pAreaIteCutIdBuf[ii]); /*վ̨зDZΣCIվ̨ID*/ + } + else + { + /**/ + } + } + } + else + { + /*¸ѩ*/ + } + } + } + else + { + /*ȡվ̨SPKSʧܣ*/ + } + } + else + { + /*DZ䣬RC/CI*/ + } + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ȡ·ڵһյ߼ID +* ˵UINT16 wRouteId ·ID +* ֵ0 յ߼ +* >0 һյ߼ID +* Created By LQ 2025.05.08 +*/ +UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId) +{ + UINT16 wRetVal = 0U; + UINT16 wRouteLogSecNum = 0U; /*·߼*/ + UINT16* pRouteLogSecIdBuf = NULL; /*·߼ID*/ + UINT16 i = 0U; + UINT16 wLockBelongRouteId = 0U; /*·ID*/ + + /*ȡ·߼*/ + wRouteLogSecNum = GetRouteLogSectionSum(wRouteId); + pRouteLogSecIdBuf = GetRouteLogSectionIdBuf(wRouteId); + + if ((0U < wRouteLogSecNum) && (NULL != pRouteLogSecIdBuf)) + { + for (i = 0U; i < wRouteLogSecNum; i++) + { + wLockBelongRouteId = GetLogSecLockBelongRoute(pRouteLogSecIdBuf[i]); /*ȡ߼·*/ + + if (wLockBelongRouteId == wRouteId) + { + /*߼α·գ߼*/ + wRetVal = pRouteLogSecIdBuf[i]; + break; + } + else + { + /**/ + } + } + } + else + { + /*0*/ + } + + return wRetVal; } \ 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 2781843..1eafa3c 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h +++ b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.h @@ -15,6 +15,14 @@ #define _DEVICE_DATA_MANAGE_H_ #include "CommonTypes.h" + +/*ѩϢṹ*/ +typedef struct S_AreaSnowInfoStruct +{ + UINT16 wAreaId; /*ID*/ + UINT8 cAreaSnowLevel; /*ʪ켶*/ +} AreaSnowInfoStruct; + #include "../System/CiSystemDefine.h" #include "../error/ErrorDataManage.h" #include "../Transmit/TransmitStateDataManage.h" @@ -156,6 +164,7 @@ typedef struct S_LineCommTrainStruct UINT16 szCommTrainNumID[TRAIN_SUM_MAX]; /*ȫͨųID*/ }LineCommTrainStruct; + /*******************************ȫֱ*******************************/ extern UINT8 AllSignalBrightFlag; /*ȫվƱ־*/ @@ -181,6 +190,8 @@ extern UINT8 g_AllTsrFlag; /* extern UINT8 g_AllSnowModel; /*ȫѩģʽ*/ +extern UINT8 g_AllSnowLevel; /*ȫʪ켶0-Ĭֵ1-һ2-*/ + extern UINT8 g_IteLineCutState; /*ITEȫг״̬0x55гITE0xAAʹITE0xFFĬֵ*/ extern UINT8 g_AllLineTsrState; /*ȫʱ״̬*/ @@ -219,13 +230,16 @@ extern UINT8 SwitchBlockLinkState; /* extern CtrlPowerStruct ctrlpowerFlag[VIRTUAL_CI_MAX]; extern UINT8 LocalAreaSnowNum; /*ѩվ̨*/ -extern UINT32 szLocalAreaSnowId[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩվ̨ID*/ +extern AreaSnowInfoStruct szLocalAreaSnow[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩ*/ extern LineCommTrainStruct gStrLineCommTrain; /*ȫͨųṹ*/ extern UINT32 gFlyProtectOverCyc; /*ɳ崻ʼ*/ extern UINT8 g_LocalSnowModel; /*ѩģʽ*/ +extern UINT8 gLocalAreaIteCutNum; /*ITEг*/ +extern UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*ITEгID*/ + /******************************־ݹ****************************/ /* @@ -1367,6 +1381,24 @@ extern UINT8 GetAllSnowModel(void); */ extern void SetAllSnowModel(UINT8 setmodle); +/* +* ȡȫʪȼ +* ˵ +* ֵ0 Ĭֵ +* 1 ʪһ +* 2 ʪ +* Created By LQ 2025.05.28 +*/ +UINT8 GetAllSnowLevel(void); + +/* +* ȫʪȼ +* ˵UINT8 cLevel ʪ켶 +* ֵ +* Created By LQ 2025.05.28 +*/ +void SetAllSnowLevel(UINT8 cLevel); + /* * ȡITEȫг״̬ * ˵void @@ -1710,10 +1742,10 @@ UINT8 GetDiaoCheRouteOpenState(const UINT16 wRouteId); /* * ñѩվ̨Ϣ * ˵const UINT8 cAreaSnowNum ѩ -* const UINT32 pAreaSnowIdBuf[] ѩID +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ * ֵ */ -void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[]); +void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]); /* * ȡѩվ̨ @@ -1723,11 +1755,11 @@ void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[ UINT8 GetLocalAreaSnowNum(void); /* -* ȡѩվ̨ID +* ȡѩϢ * ˵ -* ֵ ѩվ̨ID +* ֵ ѩϢ */ -UINT32* GetLocalAreaSnowId(void); +AreaSnowInfoStruct* GetLocalAreaSnow(void); /* @@ -1824,4 +1856,46 @@ UINT8 GetSwitchUsingValidState(const UINT16 wSwitchId, const UINT8 chFunctionId, */ void DefaultCtrlPowerDeal(const UINT8 virtualCiId); +/* +* ȡITEг +* ˵ +* ֵITEг +* Created By LQ 2025.04.15 +*/ +UINT8 GetLocalAreaIteCutNum(void); + +/* +* ȡITEгID +* ˵ +* ֵITEгID +* Created By LQ 2025.04.15 +*/ +UINT16* GetLocalAreaIteCutId(void); + +/* +* ITEгϢ +* ˵ +* ֵ +* Created By LQ 2025.04.15 +*/ +void ClearLocalAreaIteCutInfo(void); + +/* +* ñITEгϢ +* ˵const UINT8 cAreaIteCutNum ITEг +* const UINT16 pAreaIteCutIdBuf[ALL_AREA_SNOW_SUM_MAX] ID +* ֵ +* Created By LQ 2025.04.15 +*/ +void SetLocalAreaIteCutInfo(const UINT8 cAreaIteCutNum, const UINT16 pAreaIteCutIdBuf[ALL_AREA_SNOW_SUM_MAX]); + +/* +* ȡ·ڵһյ߼ID +* ˵UINT16 wRouteId ·ID +* ֵ0 յ߼ +* >0 һյ߼ID +* Created By LQ 2025.05.08 +*/ +UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId); + #endif diff --git a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c index 239b672..815fd70 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,18 +427,36 @@ 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ϵԴ״̬*/ - retVal = CI_ERROR; + 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); + } } else { retVal = CI_SUCCESS; + gPlatDataGPIOTolercance.powerANode_TolCyc = 0U; } return retVal; } @@ -453,18 +471,36 @@ UINT8 CheckRCIBPowerFaultState(void) { UINT8 retVal = CI_ERROR; UINT8 cxBBreakFlag = 0U; /*BϵԴտϿ*/ - + UINT8 chCheckState = 0U; + UINT32 dwErrorStartCyc = 0U; + UINT32 dwCurCyc = 0U; cxBBreakFlag = GetPowerBNodeStatue(); - - /* 1BϵԴտϿ */ + dwErrorStartCyc = gPlatDataGPIOTolercance.powerBNode_TolCyc; + dwCurCyc = Get2oo2CurCycleNum(); + /* 1BϵԴտϿ*/ if (NODE_STATUS_BREAK == cxBBreakFlag) { /*BϵԴ״̬*/ - retVal = CI_ERROR; + 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); + } } else { retVal = CI_SUCCESS; + gPlatDataGPIOTolercance.powerBNode_TolCyc = 0U; } return retVal; } @@ -484,11 +520,16 @@ 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 */ @@ -496,11 +537,27 @@ UINT8 CheckRCIAPowerModeFaultState(void) if (((CHECK_VOLTAGE_ZERO == vol1Flag) || (CHECK_VOLTAGE_ZERO == vol3Flag)) && ((POWER_STATUS_ABNORMAL == powerAPUBAState) || (POWER_STATUS_ABNORMAL == powerBPUBAState))) { - retVal = CI_ERROR; + /**/ + 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); + } } else { retVal = CI_SUCCESS; + gPlatDataGPIOTolercance.powerAMode_TolCyc = 0U; } return retVal; @@ -520,25 +577,43 @@ 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))) { - retVal = CI_ERROR; + /**/ + 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); + } } 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 7395560..17b98fa 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,6 +60,8 @@ #define VOLTAGE_MAX_TO_0 ((UINT16)500U) /*ѹжΪ0ֵ*/ +#define IO_POWERSTATE_TOLERANCE ((UINT8)0x02) /*ƽ̨Դ3ڣ2ڱ*/ + /*ƽ̨֡Ϣṹ*/ typedef struct S_PlatHeartDataStruct { @@ -101,7 +103,14 @@ 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/ERROR/ErrorDefine.h b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h index 48a21ec..b687668 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h @@ -109,6 +109,7 @@ #define EFUNC_ROUTE_FIRST_LOG_UNLOCK ((UINT8)0x50) /*RouteFirstLogSecAutoUnlockProcess·һ߼Զ*/ #define EFUNC_SWITCHTESTLOGIC ((UINT8)0x80U) /*SetSwitchTestLogicManageλ*/ #define EFUNC_OVERLAP_VALIDMASK_CHECK ((UINT8)0x4A) /*OverlapValidMaskCheck 㱣Чλ*/ +#define EFUNC_ROUTE_LOCK_DRIVE_SWITCH ((UINT8)0xD2) /*RouteLockDriveSwitch յ*/ /*߼*/ #define EFUNC_SET_LEAD_ROUTE_CHECK ((UINT8)0x4B) /*·*/ @@ -135,7 +136,6 @@ #define EFUNC_CLD_CANCEL_D_TRAIN_ROUTE ((UINT8)0x66) /*ȡ·*/ #define EFUNC_CLD_CLOSE_GARAGEDOOR ((UINT8)0x67) /*رճ*/ #define EFUNC_CLD_CHECK_GARAGEDOOR_CLOSE ((UINT8)0xc9) /*Źر飨RCģʽ£*/ -#define EFUNC_CHECK_DIAOCHE_ROUTE_ZRJ ((UINT8)0x68) /* CheckDiaoCheRouteZRJFeasibility ·˽Ŀ*/ #define EFUNC_CHECK_OPEN_L_ERR_CLD ((UINT8)0x69) /*OpenLTrainRouteErrP*/ #define EFUNC_CHECK_OPEN_D_ERR_CLD ((UINT8)0x6a) #define EFUNC_KEEP_L_ERR_CLD ((UINT8)0x6b) @@ -178,6 +178,8 @@ #define EFUNC_LOGSEC_LAST_SECLOCK ((UINT8)0x92) /* CheckLogRouteLogSecLastSecLock */ #define EFUNC_ROUTE_ZHONGTUZHEFAN_UNLOCK ((UINT8)0x94) /* CheckRouteZhefanJiesuo */ +#define EFUNC_PART_ROUTE_CMD_PROC ((UINT8)0x95) /*RoutePartApplyLogicManage(/Գֽ߲·)*/ +#define EFUNC_PART_ROUTE_CMD_PROC_CLD ((UINT8)0x96) /*RoutePartApplyLogicManageCLDβֽ·*/ /*߼·ر*/ #define EFUNC_LogRouteOpenManage ((UINT8)0xC1) /*EFUNC_LogRouteOpenManage߼·źſŴ*/ @@ -210,6 +212,8 @@ #define EFUNC_FIRSTLEAVE_LOGSEC_CHECK ((UINT8)0xD1) /*ȥ߼μRouteLeaveLogSecCheck*/ +#define EFUNC_OVERLAP_ZHAOCHA_CHECK ((UINT8)0xD3) /*ղ*/ + /*************************************************ֽ******************************************************************************/ /*************************************************ֽ******************************************************************************/ @@ -230,6 +234,7 @@ #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_COMM_WITH_VOBC ((UINT8)0x11) /*VOBCͨ*/ @@ -313,6 +318,7 @@ #define ETYPE_CANCLE_ZHAOCHA ((UINT8)0x82) /*ȡղ̵*/ #define ETYPE_ZHAOCHA_ROUTE_OVERTIME ((UINT8)0x83) /*·ղ鳬ʱ*/ #define ETYPE_JKJ_WORK ((UINT8)0x84) /*ӦЧ*/ +#define ETYPE_ZHAOCHA_OVERLAP_OVERTIME ((UINT8)0x86) /*ղ鳬ʱ*/ /* عͱ (UINT8)0x91-(UINT8)0x9f */ /* 豸 @@ -379,6 +385,16 @@ #define ETYPE_LOGSEC_XIANSU_STATE ((UINT8)0xC5) /*߼*/ #define ETYPE_LOGSEC_FIRSTLOCK_STATE ((UINT8)0xC6) /*߼Ϊһμ*/ #define ETYPE_LOGSEC_CBTC_PROPERTY ((UINT8)0xC7) /*߼CBTCԼ*/ +#define ETYPE_LOGSEC_CONTINUOUS ((UINT8)0xC8) /*߼Լ*/ + +/*̬·*/ +#define ETYPE_PART_ROUTE_RES ((UINT8)0xD0) /*̬·Դ*/ +#define ETYPE_PART_ROUTE_MATCH_ROUTE ((UINT8)0xD1) /*̬·ƥ·*/ +#define ETYPE_PART_ROUTE_SCREEN ((UINT8)0xD2) /*̬·гɸѡ*/ +#define ETYPE_PART_ROUTE_REPEAT ((UINT8)0xD3) /*̬·ظ*/ +#define ETYPE_PART_ROUTE_SEC_ATTR ((UINT8)0xD4) /*̬·Լ*/ +#define ETYPE_PART_ROUTE_TRAIN_COMM ((UINT8)0xD5) /*̬·гͨ״̬*/ +#define ETYPE_PART_ROUTE_TRAIN_POS ((UINT8)0xD6) /*̬·гλü*/ /* ϵͳ */ /* 豸 EFUNC_LOGIC_MANAGE_SYETEM */ diff --git a/TSCP/src/APP/ciapp/ESB/ESBDataManage.c b/TSCP/src/APP/ciapp/ESB/ESBDataManage.c index 9e3a815..f621b22 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBDataManage.c +++ b/TSCP/src/APP/ciapp/ESB/ESBDataManage.c @@ -160,12 +160,17 @@ UINT8 EsbDataManageInit(void) EsbDataStru[esbId].CutStatus = ESB_CUT_NO; /*ESB·δ*/ EsbDataStru[esbId].EsbRelateRelayDriveState = ESB_PEPUP_ESSUP_INITION_STA; /*PEPESSЧ*/ EsbDataStru[esbId].EsbErrorFlag = ESB_ERROR_FLAG_NO; /*ԸʽESBδ*/ + EsbDataStru[esbId].EsbRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*رհťɼ̵״̬ʼΪͨ쳣*/ EsbDataStru[esbId].CancelEsbErrorFlag = ESB_ERROR_FLAG_NO; /*ԸʽȡESBδ*/ EsbDataStru[esbId].EsbPressCycNum = 0U; /*رհť*/ EsbDataStru[esbId].CancelEsbPressCycNum = 0U; /*ȡرհť*/ EsbDataStru[esbId].CancelEsbErrTriggerPressCycNum = 0U; /*ȡرհť󴥷*/ EsbDataStru[esbId].CancelEsbValidFlag = ESB_CANCEL_VALID_NO; /*ȡرհťЧ־*/ EsbDataStru[esbId].CancelEsbRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*ȡرհťɼ̵״̬ʼΪͨ쳣*/ + EsbDataStru[esbId].EsbCutPressCycNum = 0U; /*ر·ť*/ + EsbDataStru[esbId].EsbCutErrTriggerPressCycNum = 0U; /*ر·ť󴥷*/ + EsbDataStru[esbId].EsbCutErrorFlag = ESB_ERROR_FLAG_NO; /*ر·ťδ*/ + EsbDataStru[esbId].EsbCutRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*ر·ťɼ̵״̬ʼΪͨ쳣*/ } rtn = CI_SUCCESS; return rtn; @@ -796,5 +801,275 @@ UINT8 GetCancelEsbRelayDownState(const UINT16 esbId) ; /*±겻Ϸִ״̬*/ } + return reVal; +} + +/* +* ýر·ť +* const UINT16 esbId Esb ID +* const UINT32 startCycNum ں +* +* ֵ +* Cretaed By LQ 2025.03.28 +*/ +void SetEsbCutPressCycNum(const UINT16 esbId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + EsbDataStru[bufIndex].EsbCutPressCycNum = startCycNum; /*·ťʼ*/ + } + else + { + ; /**/ + } +} + +/* +* ȡر·ť +* const UINT16 esbId Esb ID +* +* ֵر·ť +* Cretaed By LQ 2025.03.28 +*/ +UINT32 GetEsbCutPressCycNum(const UINT16 esbId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 reVal = CI_ERROR; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + reVal = EsbDataStru[bufIndex].EsbCutPressCycNum; + } + else + { + /*±Ƿ0*/ + } + + return reVal; +} + +/* +* ýر·ť󴥷 +* const UINT16 esbId Esb ID +* const UINT32 startCycNum ں +* +* ֵ +* Cretaed By LQ 2025.03.28 +*/ +void SetEsbCutErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + EsbDataStru[bufIndex].EsbCutErrTriggerPressCycNum = startCycNum; /*·ť󴥷*/ + } + else + { + ; /**/ + } +} + +/* +* ȡر·ť󴥷 +* const UINT16 esbId Esb ID +* +* ֵر·ť󴥷 +* Cretaed By LQ 2025.03.28 +*/ +UINT32 GetEsbCutErrTrigPressCycNum(const UINT16 esbId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 reVal = CI_ERROR; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + reVal = EsbDataStru[bufIndex].EsbCutErrTriggerPressCycNum; + } + else + { + /*±Ƿ0*/ + } + + return reVal; +} + +/* +* ýر·ťɼ̵״̬ +* ˵const UINT16 esbId ͣťID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.03.28 +*/ +void SetEsbCutRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + if ((ESB_RELAY_ERROR_DOWN_NO == cRelayDownState) || (ESB_RELAY_ERROR_DOWN_YES == cRelayDownState)) + { + EsbDataStru[bufIndex].EsbCutRelayDownState = cRelayDownState; + } + else + { + ; /*״̬Ϸ״̬*/ + } + } + else + { + ; /*±겻Ϸִ״̬*/ + } +} + +/* +* ȡر·ťɼ̵״̬ +* ˵ const UINT16 esbId ͣťID +* ֵ 0: ȡʧ +* 0x55: +* 0xaa: ͨ쳣 +* Created By LQ 2025.03.28 +*/ +UINT8 GetEsbCutRelayDownState(const UINT16 esbId) +{ + UINT16 bufIndex = 0U; + UINT8 reVal = CI_ERROR; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + reVal = EsbDataStru[bufIndex].EsbCutRelayDownState; + } + else + { + ; /*±겻Ϸִ״̬*/ + } + + return reVal; +} + +/* +* ָIDر·ťϱ־ +* ˵const UINT16 esbId, رհťID +* const UINT8 cEsbCutErrFlag ر·ťϱ־ +* ֵ +* Created By LQ 2025.03.28 +*/ +void SetEsbCutErrFlag(const UINT16 esbId, const UINT8 cEsbCutErrFlag) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + if ((ESB_ERROR_FLAG_NO == cEsbCutErrFlag) || (ESB_ERROR_FLAG_YES == cEsbCutErrFlag)) + { + EsbDataStru[bufIndex].EsbCutErrorFlag = cEsbCutErrFlag; + } + else + { + ; /*״̬Ϸ״̬*/ + } + } + else + { + ; /*±겻Ϸִ״̬*/ + } +} + +/* +* ȡָIDر·ťϱ־ +* ˵ const UINT16 esbId, رհťID +* ֵ 0: ȡʧ +* 0x55: δ +* 0xaa: +* Created By LQ 2025.03.28 +*/ +UINT8 GetEsbCutErrFlag(const UINT16 esbId) +{ + UINT16 bufIndex = 0U; + UINT8 reVal = CI_ERROR; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (bufIndex < ESB_SUM_MAX) + { + reVal = EsbDataStru[bufIndex].EsbCutErrorFlag; + } + else + { + ; /*±겻Ϸִ״̬*/ + } + return reVal; +} + +/* +* ýͣťɼ̵״̬ +* ˵const UINT16 esbId ͣťID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.04.01 +*/ +void SetEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + if ((ESB_RELAY_ERROR_DOWN_NO == cRelayDownState) || (ESB_RELAY_ERROR_DOWN_YES == cRelayDownState)) + { + EsbDataStru[bufIndex].EsbRelayDownState = cRelayDownState; + } + else + { + ; /*״̬Ϸ״̬*/ + } + } + else + { + ; /*±겻Ϸִ״̬*/ + } +} + +/* +* ȡͣťɼ̵״̬ +* ˵ const UINT16 esbId, ͣťID +* ֵ 0: ȡʧ +* 0x55: +* 0xaa: ͨ쳣 +* Created By LQ 2025.04.01 +*/ +UINT8 GetEsbRelayDownState(const UINT16 esbId) +{ + UINT16 bufIndex = 0U; + UINT8 reVal = CI_ERROR; + + bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ + + if (ESB_SUM_MAX > bufIndex) + { + reVal = EsbDataStru[bufIndex].EsbRelayDownState; + } + else + { + ; /*±겻Ϸִ״̬*/ + } + return reVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ESB/ESBDataManage.h b/TSCP/src/APP/ciapp/ESB/ESBDataManage.h index 7495d3a..de4f733 100644 --- a/TSCP/src/APP/ciapp/ESB/ESBDataManage.h +++ b/TSCP/src/APP/ciapp/ESB/ESBDataManage.h @@ -38,12 +38,17 @@ typedef struct S_EsbDataStruct UINT8 EssSteadyState; /*ESSȵ״̬ATS--0x55 Ҫȵƣ0xaaҪȵ*/ UINT8 EssFlashState; /*ESS״̬ATS--0x55 Ҫƣ0xaaҪ*/ UINT8 EsbErrorFlag; /*Ըʽͣťϱ־0x55δϣ0xaa*/ + UINT8 EsbRelayDownState; /*رհťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ UINT8 CancelEsbErrorFlag; /*Ըʽȡͣťϱ־0x55δϣ0xaa*/ UINT32 EsbPressCycNum; /*رհť*/ UINT32 CancelEsbPressCycNum; /*ȡرհť*/ UINT32 CancelEsbErrTriggerPressCycNum; /*ȡرհť󴥷*/ UINT8 CancelEsbValidFlag; /*ȡرհťЧ־0x55Ч0xaaЧ*/ UINT8 CancelEsbRelayDownState; /*ȡرհťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ + UINT32 EsbCutPressCycNum; /*ر·ť*/ + UINT32 EsbCutErrTriggerPressCycNum; /*ر·ť󴥷*/ + UINT8 EsbCutErrorFlag; /*ر·ťϱ־0x55-δϣ0xaa-*/ + UINT8 EsbCutRelayDownState; /*ر·ťɼ̵״̬0x55-ɼ£0xaa-ͨ쳣*/ } EsbDataStruct; /*******************************ȫֱ*******************************/ @@ -310,6 +315,98 @@ void SetCancelEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState) */ UINT8 GetCancelEsbRelayDownState(const UINT16 esbId); +/* +* ýر·ť +* const UINT16 esbId Esb ID +* const UINT32 startCycNum ں +* +* ֵ +* Cretaed By LQ 2025.03.28 +*/ +void SetEsbCutPressCycNum(const UINT16 esbId, const UINT32 startCycNum); + +/* +* ȡر·ť +* const UINT16 esbId Esb ID +* +* ֵر·ť +* Cretaed By LQ 2025.03.28 +*/ +UINT32 GetEsbCutPressCycNum(const UINT16 esbId); + +/* +* ýر·ť󴥷 +* const UINT16 esbId Esb ID +* const UINT32 startCycNum ں +* +* ֵ +* Cretaed By LQ 2025.03.28 +*/ +void SetEsbCutErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum); + +/* +* ȡر·ť󴥷 +* const UINT16 esbId Esb ID +* +* ֵر·ť󴥷 +* Cretaed By LQ 2025.03.28 +*/ +UINT32 GetEsbCutErrTrigPressCycNum(const UINT16 esbId); + +/* +* ýر·ťɼ̵״̬ +* ˵const UINT16 esbId ͣťID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.03.28 +*/ +void SetEsbCutRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState); + +/* +* ȡر·ťɼ̵״̬ +* ˵ const UINT16 esbId ͣťID +* ֵ 0: ȡʧ +* 0x55: +* 0xaa: ͨ쳣 +* Created By LQ 2025.03.28 +*/ +UINT8 GetEsbCutRelayDownState(const UINT16 esbId); + +/* +* ָIDر·ťϱ־ +* ˵const UINT16 esbId, رհťID +* const UINT8 cEsbCutErrFlag ر·ťϱ־ +* ֵ +*/ +void SetEsbCutErrFlag(const UINT16 esbId, const UINT8 cEsbCutErrFlag); + +/* +* ȡָIDر·ťϱ־ +* ˵ const UINT16 esbId, رհťID +* ֵ 0: ȡʧ +* >0: ͣ·ťϱ־ +*/ +UINT8 GetEsbCutErrFlag(const UINT16 esbId); + +/* +* ýͣťɼ̵״̬ +* ˵const UINT16 esbId ͣťID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.04.01 +*/ +void SetEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState); + +/* +* ȡͣťɼ̵״̬ +* ˵ const UINT16 esbId, ͣťID +* ֵ 0: ȡʧ +* 0x55: +* 0xaa: ͨ쳣 +* Created By LQ 2025.04.01 +*/ +UINT8 GetEsbRelayDownState(const UINT16 esbId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/CTEnvelopeTrack.c b/TSCP/src/APP/ciapp/EnvelopeManage/CTEnvelopeTrack.c index 651c825..6166236 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/CTEnvelopeTrack.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/CTEnvelopeTrack.c @@ -1161,7 +1161,7 @@ void elm_CTEnvelopeTrack(void) } else if ((CI_SUCCESS == funRet) && (1u == relEnvelopeCnt)) { - /* ֻCTBUT׷ٹ*/ + /* ֻCT漰BUT׷ٹ*/ elm_DealNoCGFollowUt(relEnvelopeID[0u], trainID[cycle]); /** ά־--Լ*/ @@ -1277,16 +1277,9 @@ void elm_DealNoCGFollowUt(UINT16 wEnvelopeID,UINT16 wTrainId) const EnvelopeStruct* pEnvelop = NULL; UINT8 chNoCGFollowUtSwitch = 0U; ELM_TrainSafeLocStruct safeLoc = { 0U }; /*гȫλ*/ - UINT8 chLinkRelPhySecAGorBGAttr = 0U;/*LINKABD*/ - UINT8 chEnvelopLinkABGAttr = 0U;/*LINKABG*/ - UINT16 wLinkRelatedPhySec = 0U;/*LINK*/ - UINT8 chPhyLjkFlag = 0U;/*м*/ - UINT16 wTrainEnterLjkLinkId = 0U;/*гмLINK ID*/ - UINT32 dwCycNum = 0U;/*ǰں*/ UINT16 wTempTrainID = 0U;/*ʱ¼гID*/ UINT8 chTempVirHeadScreenFlag = 0U;/*ʱǰɸ־*/ UINT8 chTempVirTailScreenFlag = 0U;/*ʱɸ־*/ - UINT8 chAgLinkExistRelCgFlag = 0U;/*AGǷCG־*/ /** ȡг */ pEnvelop = elm_GetEnvelopeInfoPtr(wEnvelopeID); @@ -1323,58 +1316,10 @@ void elm_DealNoCGFollowUt(UINT16 wEnvelopeID,UINT16 wTrainId) { if (0U == errorCode) { - chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.endPos.Lnk); - chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->endPos.Lnk); - wLinkRelatedPhySec = GetLinkRelatedPhySec(pEnvelop->endPos.Lnk); - chPhyLjkFlag = GetPhySecLjkFlag(wLinkRelatedPhySec); - chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(safeLoc.endPos.Lnk); - - /*ˢںԴʱȻȫλýAGܻû*/ - if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->headTrainID) - && (LINK_REL_PHYSEC_DEFAULT == chEnvelopLinkABGAttr) && (PHYSICAL_SECTION_LJK_NO == chPhyLjkFlag) - && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) - { - /*гȫͷʻAGҵǰʻǰûǰ˿ҲǴBGijҲCGǰɸͨ־Ч*/ - SetTrainVirHeadScreenPassFlag(wTrainId,TRAIN_VIR_SCREEN_PASS_FLAG_VALID); - SetTrainEnterLjkLinkId(wTrainId, safeLoc.endPos.Lnk); - } - else - { - ; /*öӦ־ȫλúͰAGάԭı־*/ - } - - chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.startPos.Lnk); - chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->startPos.Lnk); - wLinkRelatedPhySec = GetLinkRelatedPhySec(pEnvelop->startPos.Lnk); - chPhyLjkFlag = GetPhySecLjkFlag(wLinkRelatedPhySec); - chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(safeLoc.startPos.Lnk); - - /*ˢںԴʱȻȫλýAGܻû*/ - if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->tailTrainID) - && (LINK_REL_PHYSEC_DEFAULT == chEnvelopLinkABGAttr) && (PHYSICAL_SECTION_LJK_NO == chPhyLjkFlag) - && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) - { - /*гȫβʻAGҵǰʻǰûк˿ҲǴBGijҲCGúɸͨ־Ч*/ - SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); - SetTrainEnterLjkLinkId(wTrainId, safeLoc.startPos.Lnk); - } - else - { - ; /*öӦ־ȫλúͰAGάԭı־*/ - } - - wTrainEnterLjkLinkId = GetTrainEnterLjkLinkId(wTrainId); - /*гȫAռõʱ䣬DּΣλͨD죩ɼռãǰɸͨʶɸͨʶЧ*/ - if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (safeLoc.startPos.Lnk == safeLoc.endPos.Lnk) - && (safeLoc.startPos.Lnk == wTrainEnterLjkLinkId) && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) - { - dwCycNum = Get2oo2CurCycleNum(); - SetTrainFullEnterLjkCycNum(wTrainId, dwCycNum); - } - else - { - ; - } + /*AGɸѡ־*/ + elm_DealAgVirScreenFlag(wEnvelopeID, wTrainId); + /*BGɸѡ־*/ + elm_DealBgVirScreenFlag(wEnvelopeID, wTrainId); } else { @@ -1571,4 +1516,183 @@ void elm_VirScreenPassMonitor(void) ; /*Ҫල*/ } } +} + +/** +* @brief AGɸѡ־ +* @param[in] UINT16 envelopeID г +* @param[in] UINT16 wTrainId гID +* @return +* @note by cgh 20250805 +*/ +void elm_DealAgVirScreenFlag(UINT16 wEnvelopeID, UINT16 wTrainId) +{ + UINT8 funRet = CI_ERROR; + const EnvelopeStruct* pEnvelop = NULL; + ELM_TrainSafeLocStruct safeLoc = { 0U }; /*гȫλ*/ + UINT8 chLinkRelPhySecAGorBGAttr = 0U;/*LINKABG*/ + UINT8 chEnvelopLinkABGAttr = 0U;/*LINKABG*/ + UINT16 wLinkRelatedPhySec = 0U;/*LINK*/ + UINT8 chPhyLjkFlag = 0U;/*м*/ + UINT16 wTrainEnterLjkLinkId = 0U;/*гмLINK ID*/ + UINT32 dwCycNum = 0U;/*ǰں*/ + UINT8 chAgLinkExistRelCgFlag = 0U;/*AGǷCG־*/ + + /** ȡг */ + pEnvelop = elm_GetEnvelopeInfoPtr(wEnvelopeID); + + /** ڲУ */ + if ((NULL != pEnvelop) && (0U < wTrainId) && (LINE_MAX_TRAIN > wTrainId)) + { + funRet = elm_PrepareTrainSafeLoc(wTrainId, &safeLoc); + + if (CI_SUCCESS == funRet) + { + chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.endPos.Lnk); + chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->endPos.Lnk); + wLinkRelatedPhySec = GetLinkRelatedPhySec(pEnvelop->endPos.Lnk); + chPhyLjkFlag = GetPhySecLjkFlag(wLinkRelatedPhySec); + chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(safeLoc.endPos.Lnk); + + /*ˢںԴʱȻȫλýAGܻû*/ + if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->headTrainID) + && (LINK_REL_PHYSEC_DEFAULT == chEnvelopLinkABGAttr) && (PHYSICAL_SECTION_LJK_NO == chPhyLjkFlag) + && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) + { + /*гȫͷʻAGҵǰʻǰûǰ˿ҲǴBGijҲCGǰɸͨ־Ч*/ + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + SetTrainEnterLjkLinkId(wTrainId, safeLoc.endPos.Lnk); + } + else + { + ; /*öӦ־ȫλúͰAGάԭı־*/ + } + + chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.startPos.Lnk); + chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->startPos.Lnk); + wLinkRelatedPhySec = GetLinkRelatedPhySec(pEnvelop->startPos.Lnk); + chPhyLjkFlag = GetPhySecLjkFlag(wLinkRelatedPhySec); + chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(safeLoc.startPos.Lnk); + + /*ˢںԴʱȻȫλýAGܻû*/ + if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->tailTrainID) + && (LINK_REL_PHYSEC_DEFAULT == chEnvelopLinkABGAttr) && (PHYSICAL_SECTION_LJK_NO == chPhyLjkFlag) + && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) + { + /*гȫβʻAGҵǰʻǰûк˿ҲǴBGijҲCGúɸͨ־Ч*/ + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + SetTrainEnterLjkLinkId(wTrainId, safeLoc.startPos.Lnk); + } + else + { + ; /*öӦ־ȫλúͰAGάԭı־*/ + } + + wTrainEnterLjkLinkId = GetTrainEnterLjkLinkId(wTrainId); + /*гȫAռõʱ䣬DּΣλͨD죩ɼռãǰɸͨʶɸͨʶЧ*/ + if ((LINK_REL_PHYSEC_AG == chLinkRelPhySecAGorBGAttr) && (safeLoc.startPos.Lnk == safeLoc.endPos.Lnk) + && (safeLoc.startPos.Lnk == wTrainEnterLjkLinkId) && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) + { + dwCycNum = Get2oo2CurCycleNum(); + SetTrainFullEnterLjkCycNum(wTrainId, dwCycNum); + } + else + { + ; + } + } + else + { + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + SetTrainEnterLjkLinkId(wTrainId, 0U); + } + } + else + { + ; + } +} + +/** +* @brief BGɸѡ־ +* @param[in] UINT16 envelopeID г +* @param[in] UINT16 wTrainId гID +* @return +* @note by cgh 20250805 +*/ +void elm_DealBgVirScreenFlag(UINT16 wEnvelopeID, UINT16 wTrainId) +{ + UINT8 funRet = CI_ERROR; + const EnvelopeStruct* pEnvelop = NULL; + ELM_TrainSafeLocStruct safeLoc = { 0U }; /*гȫλ*/ + UINT8 chLinkRelPhySecAGorBGAttr = 0U;/*LINKABG*/ + UINT8 chEnvelopLinkABGAttr = 0U;/*LINKABG*/ + UINT8 chAgLinkExistRelCgFlag = 0U;/*AGǷCG־*/ + + /** ȡг */ + pEnvelop = elm_GetEnvelopeInfoPtr(wEnvelopeID); + + /** ڲУ */ + if ((NULL != pEnvelop) && (0U < wTrainId) && (LINE_MAX_TRAIN > wTrainId)) + { + funRet = elm_PrepareTrainSafeLoc(wTrainId, &safeLoc); + + if (CI_SUCCESS == funRet) + { + chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.endPos.Lnk); + chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->endPos.Lnk); + chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(pEnvelop->endPos.Lnk); + + /*ˢںԴʱȻȫλýBGܻû*/ + if ((LINK_REL_PHYSEC_BG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->headTrainID) + && (LINK_REL_PHYSEC_AG == chEnvelopLinkABGAttr) && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) + { + /*гȫͷʻBGҵǰʻǰûǰ˿ǴAGijҲCGǰɸͨ־Ч*/ + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + SetTrainEnterLjkLinkId(wTrainId, 0U); + /*ãΪ߼һЩ*/ + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + SetTrainEnterLjkLinkId(wTrainId, safeLoc.endPos.Lnk); + } + else + { + ; /*öӦ־ȫλúͰBGάԭı־*/ + } + + chLinkRelPhySecAGorBGAttr = GetLinkRelPhySecAGorBGAttr(safeLoc.startPos.Lnk); + chEnvelopLinkABGAttr = GetLinkRelPhySecAGorBGAttr(pEnvelop->startPos.Lnk); + chAgLinkExistRelCgFlag = GetAgLinkExistRelCgFlag(pEnvelop->startPos.Lnk); + + /*ˢںԴʱȻȫλýBGܻû*/ + if ((LINK_REL_PHYSEC_BG == chLinkRelPhySecAGorBGAttr) && (0U == pEnvelop->tailTrainID) + && (LINK_REL_PHYSEC_AG == chEnvelopLinkABGAttr) && (AGLINK_EXIST_REL_CG_NO == chAgLinkExistRelCgFlag)) + { + /*гȫβʻBGҵǰʻǰûк˿ǴAGijҲCGúɸͨ־Ч*/ + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + SetTrainEnterLjkLinkId(wTrainId, 0U); + /*ãΪ߼һЩ*/ + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + SetTrainEnterLjkLinkId(wTrainId, safeLoc.startPos.Lnk); + } + else + { + ; /*öӦ־ȫλúͰAGάԭı־*/ + } + } + else + { + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + SetTrainEnterLjkLinkId(wTrainId, 0U); + } + } + else + { + ; + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c index a164862..8a3b1f6 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c @@ -106,7 +106,7 @@ static UINT8 elm_UKTAdjacentSwProtect(void) nearTrainType = aam_SearchNearbyTrainType(pACIdbuff[cycleAc], EMAP_SAME_DIR, acSameCnt, acSameID); } - if (AAM_BAD_NEAR == nearTrainType) + if ((AAM_BAD_NEAR == nearTrainType)|| (AAM_SLEEP_OCC == nearTrainType)) { elm_PrepareClearSwPassTrainFlag(pACIdbuff[cycleAc]); ELM_LOG(ELM_LOG_FATAL,"info:Switch Zone AC%d Clear CT pass flag by PreAC UT.\n",pACIdbuff[cycleAc]); @@ -116,7 +116,7 @@ static UINT8 elm_UKTAdjacentSwProtect(void) /** ѯǰӽ*/ nearTrainType = aam_SearchNearbyTrainType(pACIdbuff[cycleAc],EMAP_CONVER_DIR,acConvertCnt,acConvertID); - if (AAM_BAD_NEAR == nearTrainType) + if ((AAM_BAD_NEAR == nearTrainType) || (AAM_SLEEP_OCC == nearTrainType)) { elm_PrepareClearSwPassTrainFlag(pACIdbuff[cycleAc]); ELM_LOG(ELM_LOG_FATAL,"info:Switch Zone AC%d Clear CT pass flag by backAC UT.\n",pACIdbuff[cycleAc]); @@ -330,6 +330,12 @@ 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*/ @@ -344,7 +350,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); @@ -352,13 +358,23 @@ static void elm_FlyingProtect(void) { dwFlyStartCyc = GetTrainStartFlyProtectCycNum(wTrainId); chTimeCheck = SystemOverTimeCheck(dwFlyStartCyc, (UINT32)maxShutdownRedunTime); - if (CI_TIME_OUT== chTimeCheck) + + if (CI_TIME_OUT== chTimeCheck) { - SetFlyProtectOverCyc(dwCurCyc); /*ɳ־*/ + 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); /*ɳ־*/ + } } else { - ; /*δʱ*/ + ; /*δʱгͨж*/ } } } @@ -2036,6 +2052,8 @@ void elm_SafeProtectProcess(void) UINT8 workFlag = ELM_WORK_ERROR; UINT8 funRet = CI_ERROR; UINT32 errorCode = 0u; + UINT8 localCiType = 0U; + UINT8 ciTrainTestState = 0U; /** ģ־λ */ workFlag = elm_GetELMWorkFlag(); @@ -2055,8 +2073,17 @@ void elm_SafeProtectProcess(void) funRet = elm_UTLosingProtect(); ASSER_ERROR(CI_ERROR == funRet,errorCode,0x40000000u); - /** CT/UCTɳ--崻*/ - elm_FlyingProtect(); + localCiType = GetLocalCiType(); + ciTrainTestState = GetCiTrainTestStatus(); + if ((CI_TYPE_SCX == localCiType) && ((CI_TRAIN_TEST_OFF == ciTrainTestState) || (CI_TRAIN_TEST_STOP == ciTrainTestState))) + { + ScxClearFlyProtectInfo(); /*ԳδԳڼ䣬зɳ崻ͬʱ֮ǰķɳϢ޸CTʻԳߵ·ɳ崻*/ + } + else + { + /** CT/UCTɳ--崻*/ + elm_FlyingProtect(); + } /** OCΧڵļӳϷУ */ funRet = elm_ACRelEnvelopeCheck(); @@ -2595,6 +2622,7 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 UINT16 relEnvelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] = {0u}; /*гİ*/ const EnvelopeStruct *pEnvelopeInfo = NULL; const WLTrainStatusInfoStruct* pTemp = NULL; + UINT8 chTrainNvramPosFlag = 0U; /*гNVRAMλñʶ*/ /* ڵĵ״̬óڵ״̬ */ for (cycle = 1u; cycle < LINE_MAX_TRAIN; cycle++) @@ -2640,10 +2668,19 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 if ((NULL != pEnvelopeInfo) && ((TYPE_CT_ENVELOPE == pEnvelopeInfo->envelopeType) || (TYPE_UCT_ENVELOPE == pEnvelopeInfo->envelopeType))) { - headNeedScreen = LINE_MAX_TRAIN == pEnvelopeInfo->headTrainID ? NEED_SCREEN : UNNEED_SCREEN; - tailNeedScreen = LINE_MAX_TRAIN == pEnvelopeInfo->tailTrainID ? NEED_SCREEN : UNNEED_SCREEN; + chTrainNvramPosFlag = GetTrainNvramPosFlag(cycle); - wls_SetTrainControlStatus(cycle,IN_CONTROL_STATUS,headNeedScreen,tailNeedScreen); + if (TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramPosFlag) + { + headNeedScreen = LINE_MAX_TRAIN == pEnvelopeInfo->headTrainID ? NEED_SCREEN : UNNEED_SCREEN; + tailNeedScreen = LINE_MAX_TRAIN == pEnvelopeInfo->tailTrainID ? NEED_SCREEN : UNNEED_SCREEN; + + wls_SetTrainControlStatus(cycle, IN_CONTROL_STATUS, headNeedScreen, tailNeedScreen); + } + else + { + ELM_LOG(ELM_LOG_FATAL, " not Add In Control Train,Because UseNvram Pos\n"); + } } else { @@ -2764,25 +2801,24 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 * @return CI_ERROR ѯʧ CI_SUCCESS ѯɹ * @note - * by cgh 20240514 ĿǰֻRRM + * edit cgh 20250724 ĿǰֻRRM */ UINT8 elm_GetNearEnvelopRelSameTra(UINT16 envelopeId, OUT UINT16* preEnvelope, OUT UINT16* backEnvelope) { /*- ֲ */ UINT8 ret = CI_ERROR; UINT8 funRet = CI_ERROR; - UINT32 errorCode = 0u; /**/ + UINT32 errorCode = 0U; /**/ const EnvelopeStruct* pEnvelop = NULL; - UINT8 envelopeCnt = 0u; /* */ - UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] = { 0u }; /*ID*/ - UINT16 acCnt = 0u; /** ǰ*/ - UINT16 acID[AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH] = { 0u }; - UINT8 acStatus = ELM_AC_OCC; - UINT16 mergeACIndex = 0u; + UINT8 envelopeCnt = 0U; /* */ + UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] = { 0U }; /*ID*/ + UINT16 acCnt = 0U; /** ǰ*/ + UINT16 acID[AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH] = { 0U }; + UINT16 mergeACIndex = 0U; UINT16 mergeACCntMax = (SECTION_IN_ENVELOPE_SUM_MAX + 2U * AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH); - UINT16 mergeACID[SECTION_IN_ENVELOPE_SUM_MAX + 2U * AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH] = { 0u }; - UINT8 includeCnt = 0u; - UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] = { 0u }; /** غϵİid */ + UINT16 mergeACID[SECTION_IN_ENVELOPE_SUM_MAX + 2U * AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH] = { 0U }; + UINT8 includeCnt = 0U; + UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] = { 0U }; /** غϵİid */ /** ȡг */ pEnvelop = elm_GetEnvelopeInfoPtr(envelopeId); @@ -2791,63 +2827,36 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 if ((NULL == pEnvelop) || (NULL == preEnvelope) || (NULL == backEnvelope)) { /** ô*/ - ASSER_ERROR(CI_ERROR == funRet, errorCode, 0x08000000u); + ASSER_ERROR(CI_ERROR == funRet, errorCode, 0x80000000U); } else { - /** ȡβռ״̬ */ - acStatus = elm_PrepareACStatus(pEnvelop->ACID[0]); + /* ѯ󷽼*/ + acCnt = elm_GetEnvelopTailACIDs(pEnvelop, acID); - /** жϰβǷռãռãҪѯһ*/ - if (ELM_AC_OCC == acStatus) + /** ϲβ󷽵ļ */ + mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, acID, (AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH), acCnt); + + /** ϲļ */ + mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, pEnvelop->ACID, SECTION_IN_ENVELOPE_SUM_MAX, pEnvelop->ACCnt); + + /** ô*/ + ASSER_ERROR(mergeACIndex > mergeACCntMax, errorCode, 0x40000000U); + + if (0U == errorCode) { - /* ѯ󷽼ᣬβռãڵĿΪȷȻˣҪѯȫβڼ*/ - acCnt = elm_GetEnvelopTailACIDs(pEnvelop, acID); + (void)CommonMemSet(&acID, (UINT32)((AC_MAXCNT_IN_SWITCH*AC_MAXCNT_IN_SWITCH)*sizeof(UINT16)),0U, (UINT32)((AC_MAXCNT_IN_SWITCH*AC_MAXCNT_IN_SWITCH)*sizeof(UINT16)));/*ֹ*/ + /* ѯǰ*/ + acCnt = elm_GetEnvelopHeadACIDs(pEnvelop, acID); - /** ϲβ󷽵ļ */ + /** ϲͷǰļ */ mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, acID, (AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH), acCnt); - /** Ⱥϲļ */ - mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, pEnvelop->ACID, SECTION_IN_ENVELOPE_SUM_MAX, pEnvelop->ACCnt); - /** ô*/ - ASSER_ERROR(mergeACIndex > mergeACCntMax, errorCode, 0x04000000u); - - } - else - { - /** Ⱥϲļ */ - mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, pEnvelop->ACID, SECTION_IN_ENVELOPE_SUM_MAX, pEnvelop->ACCnt); - - /** ô*/ - ASSER_ERROR(mergeACIndex > mergeACCntMax, errorCode, 0x02000000u); - } - - if (0u == errorCode) - { - /** ȡͷռ״̬ */ - acStatus = elm_PrepareACStatus(pEnvelop->ACID[pEnvelop->ACCnt - 1U]); - - /** жϰͷǷռãռãҪѯһ */ - if (ELM_AC_OCC == acStatus) - { - /* ѯǰ,˴ѯĿڼʵһĴΪͷѹ˲ռãֱӽɾǴ˴һΪͳһƣһ*/ - acCnt = elm_GetEnvelopHeadACIDs(pEnvelop, acID); - - /** ϲͷǰļ */ - mergeACIndex = elm_PrepareMergeUINT16Array(mergeACID, mergeACCntMax, mergeACIndex, acID, (AC_MAXCNT_IN_SWITCH * AC_MAXCNT_IN_SWITCH), acCnt); - - /** ô*/ - ASSER_ERROR(mergeACIndex > mergeACCntMax, errorCode, 0x04000000u); - - } - else - { - /** 账*/ - } + ASSER_ERROR(mergeACIndex > mergeACCntMax, errorCode, 0x20000000U); /** жǷɹ */ - if (0u == errorCode) + if (0U == errorCode) { /** ȡǰİ */ envelopeCnt = elm_MergeEnvelope(mergeACID, (UINT8)mergeACIndex, arEnvelopID); @@ -2856,7 +2865,7 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 funRet = elm_FindNearSameTrainEnvelop(pEnvelop, arEnvelopID, envelopeCnt, preEnvelope, backEnvelope, &includeCnt, includeELMid); /** ô*/ - ASSER_ERROR(CI_SUCCESS != funRet, errorCode, 0x08000000u); + ASSER_ERROR(CI_SUCCESS != funRet, errorCode, 0x10000000U); } else { @@ -2870,7 +2879,7 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 } /** ÷ֵ*/ - ASSERT_SETRET(0u == errorCode, ret, CI_SUCCESS, CI_ERROR); + ASSERT_SETRET(0U == errorCode, ret, CI_SUCCESS, CI_ERROR); return ret; } @@ -3055,9 +3064,13 @@ 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++) { @@ -3104,7 +3117,17 @@ UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT1 chTimeCheck = SystemOverTimeCheck(dwFlyStartCyc, (UINT32)maxShutdownRedunTime); if (CI_TIME_OUT == chTimeCheck) { - elm_AddFlyingTrain(trainID[cycle], pEnvelop->id); + 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); + } } flyCheck++; } diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.h b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.h index 5f9623f..e03696a 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.h +++ b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.h @@ -486,4 +486,22 @@ void elm_FlyingProtect_UCT(void); */ void elm_DeleteUctPassFlag(UINT16 envelopeId); +/** +* @brief AGɸѡ־ +* @param[in] UINT16 envelopeID г +* @param[in] UINT16 wTrainId гID +* @return +* @note by cgh 20250805 +*/ +void elm_DealAgVirScreenFlag(UINT16 wEnvelopeID, UINT16 wTrainId); + +/** +* @brief BGɸѡ־ +* @param[in] UINT16 envelopeID г +* @param[in] UINT16 wTrainId гID +* @return +* @note by cgh 20250805 +*/ +void elm_DealBgVirScreenFlag(UINT16 wEnvelopeID, UINT16 wTrainId); + #endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c index e637825..04aad90 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeScreen.c @@ -634,6 +634,7 @@ void elm_WLScreenProcess(void) UINT8 relEnvelopeCnt= TRAIN_REL_ENVELOPE_SUM_MAX; /*гİ*/ UINT16 relEnvelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] = {0u}; /*гİ*/ const EnvelopeStruct *pEnvelopeInfo = NULL; + UINT8 chTrainNvramPosFlag = 0U; /*гNVRAMλñʶ*/ /** ȡȫɸ־ */ wlsFlag = wls_GetWLScreenPermitFlag(); @@ -653,26 +654,37 @@ void elm_WLScreenProcess(void) ((TYPE_CT_ENVELOPE == pEnvelopeInfo->envelopeType) || (TYPE_UCT_ENVELOPE == pEnvelopeInfo->envelopeType))) { ELM_LOG(ELM_LOG_FATAL,"info:ELM%d WLS Process,",pEnvelopeInfo->id); - if (LINE_MAX_TRAIN == pEnvelopeInfo->headTrainID) + chTrainNvramPosFlag = GetTrainNvramPosFlag(cycle); + + if (TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramPosFlag) { - ELM_LOG(ELM_LOG_FATAL," delete Head suspicious,"); - (void)elm_SetEnvelopeHeadTrainID(pEnvelopeInfo->id,0u); + if (LINE_MAX_TRAIN == pEnvelopeInfo->headTrainID) + { + ELM_LOG(ELM_LOG_FATAL, " delete Head suspicious,"); + (void)elm_SetEnvelopeHeadTrainID(pEnvelopeInfo->id, 0u); + } + else + { + /* */ + } + + if (LINE_MAX_TRAIN == pEnvelopeInfo->tailTrainID) + { + ELM_LOG(ELM_LOG_FATAL, " delete Tail suspicious,"); + (void)elm_SetEnvelopeTailTrainID(pEnvelopeInfo->id, 0u); + } + else + { + /* */ + } + } else { - /* */ + ELM_LOG(ELM_LOG_FATAL, " not finish suspicious,because use nvram pos"); } - - if (LINE_MAX_TRAIN == pEnvelopeInfo->tailTrainID) - { - ELM_LOG(ELM_LOG_FATAL," delete Tail suspicious,"); - (void)elm_SetEnvelopeTailTrainID(pEnvelopeInfo->id,0u); - } - else - { - /* */ - } - ELM_LOG(ELM_LOG_FATAL,"\n"); + + ELM_LOG(ELM_LOG_FATAL, "\n"); } } else diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c b/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c index 3bc3b34..99c2605 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/UCTEnvelopeTrack.c @@ -1990,16 +1990,15 @@ static UINT8 elm_UCTEnvelopeHeadHandle(UINT8 endlineFlag, IN const EnvelopeStruc /** ǰ˿ */ funRtn = elm_SetEnvelopeHeadTrainID(ptemp->id, pPretemp->headTrainID); ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00002000u); + /** ³ͷλ */ + funRtn = elm_SetUCTEnvelopeDot(ELM_HEAD, ptemp->ACID[ptemp->ACCnt - 1u], ptemp); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00000800u); } else { - funRtn = elm_SetEnvelopeHeadTrainID(ptemp->id, LINE_MAX_TRAIN); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00001000u); + funRtn = elm_DeleteCTOrUCTEnvelope(ptemp->id); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00000400u); } - - /** ³ͷλ */ - funRtn = elm_SetUCTEnvelopeDot(ELM_HEAD, ptemp->ACID[ptemp->ACCnt - 1u], ptemp); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00000800u); } ret = 0x55u; } @@ -2115,8 +2114,10 @@ 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))) - {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ + 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죬˳ */ ret = 0x55u; } else @@ -2271,7 +2272,8 @@ static UINT8 elm_UCTEnvelopeHeadMoving(const EnvelopeStruct *ptemp) UINT8 includeCnt = 0u; UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] = {0u}; /** غϵİid */ UINT8 cHeadDirChangeFlag = DIRECTIONPOINT_FLAG_INVALID; /*ͷ仯־*/ - + const EnvelopeStruct* pPretemp = NULL; + UINT16 wInputAcId = 0U; /** ڲУ */ ASSERT_RET_VALUE(NULL == ptemp,ret,0x80000000u); @@ -2383,7 +2385,30 @@ static UINT8 elm_UCTEnvelopeHeadMoving(const EnvelopeStruct *ptemp) if (0u == errorCode) { endLineFlag = (0u == acSameCnt) ? CI_SUCCESS : CI_ERROR; - funRtn = elm_UCTEnvelopeHeadHandle(endLineFlag,ptemp,acSameID[0u],preEnvelope, cHeadDirChangeFlag); + wInputAcId = acSameID[0U]; + pPretemp = elm_GetEnvelopeInfoPtr(preEnvelope); + if (NULL != pPretemp) + { + for (cycle = 0U; cycle < pPretemp->ACCnt; cycle++) + { + if (ptemp->ACID[ptemp->ACCnt - 1U] == pPretemp->ACID[cycle]) + { + wInputAcId = ptemp->ACID[ptemp->ACCnt - 1U]; + break; /*ǰ뱾յ㴦ͬһΣֹͣ*/ + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + /*ǰλڱյΣʹñյΪΣʹñյǰΪ*/ + funRtn = elm_UCTEnvelopeHeadHandle(endLineFlag,ptemp, wInputAcId,preEnvelope, cHeadDirChangeFlag); ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x00400000u); if (CI_ERROR != funRtn) @@ -2634,17 +2659,17 @@ static UINT8 elm_UCTEnvelopeTailHandle(UINT8 endlineFlag, const EnvelopeStruct * if (0x55u == funRtn) { - /** ǰ˿ */ + funRtn = elm_SetEnvelopeTailTrainID(ptemp->id, pBacktemp->tailTrainID); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00002000u); + /** ³βλ */ + funRtn = elm_SetUCTEnvelopeDot(ELM_TAIL, ptemp->ACID[0u], ptemp); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00001000u); } else { - funRtn = elm_SetEnvelopeTailTrainID(ptemp->id, LINE_MAX_TRAIN); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00002000u); + funRtn = elm_DeleteCTOrUCTEnvelope(ptemp->id); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00000800u); } - - /** ³βλ */ - funRtn = elm_SetUCTEnvelopeDot(ELM_TAIL, ptemp->ACID[0u], ptemp); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00001000u); } ret = 0x55u; } @@ -2761,8 +2786,10 @@ 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))) - {/* BUT׷ٿش򿪣UCTB죬A죬CTA죬˳ */ + 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죬˳ */ ret = 0x55u; } else @@ -2916,6 +2943,8 @@ static UINT8 elm_UCTEnvelopeTailMoving(const EnvelopeStruct *ptemp) UINT8 includeCnt = 0u; UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] = {0u}; /** غϵİid */ UINT8 cTailDirChangeFlag = DIRECTIONPOINT_FLAG_INVALID; /*β仯־*/ + const EnvelopeStruct* pBacktemp = NULL; + UINT16 wInputAcId = 0U; /** ڲУ */ ASSERT_RET_VALUE(NULL == ptemp,ret,0x80000000u); @@ -3028,8 +3057,32 @@ static UINT8 elm_UCTEnvelopeTailMoving(const EnvelopeStruct *ptemp) if (0u == errorCode) { endLineFlag = (0u == acConvertCnt) ? CI_SUCCESS : CI_ERROR; - funRtn = elm_UCTEnvelopeTailHandle(endLineFlag,ptemp,acConvertID[0u],backEnvelope, cTailDirChangeFlag); - ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x00400000u); + wInputAcId = acConvertID[0U]; + pBacktemp = elm_GetEnvelopeInfoPtr(backEnvelope); + if (NULL != pBacktemp) + { + for (cycle = 0U; cycle < pBacktemp->ACCnt; cycle++) + { + if (ptemp->ACID[0U] == pBacktemp->ACID[cycle]) + { + wInputAcId = ptemp->ACID[0U]; + break; /*󷽰뱾㴦ͬһΣֹͣ*/ + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + /*󷽰λڱΣʹñΪΣʹñ󷽼Ϊ*/ + funRtn = elm_UCTEnvelopeTailHandle(endLineFlag, ptemp, wInputAcId, backEnvelope, cTailDirChangeFlag); + + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00400000u); if (CI_ERROR != funRtn) { @@ -3242,10 +3295,11 @@ static UINT8 elm_UCTEnvelopeMoving(const EnvelopeStruct* ptemp) * @return CI_ERROR תʧ * CI_SUCCESS תɹ * @note CTתUCTʱҪ㣺 - 1ǰ˿ - 2ڰĵĿռã - 3Ϊ߳, - 4гС·С + 1ǰ˿ + 2ڰĵĿռã + 3Ϊ߳, + 4гС·С +* by cgh 20250915 */ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) { @@ -3256,6 +3310,8 @@ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) UINT8 chCanUct = FLAG_SET; UINT32 minTrainLength = 0U; UINT32 dwTempLength = 0U; + UINT8 chTrainNvramPosFlag = 0U; + UINT8 chTrainIsIsFollowUtFlag = 0U;/*ǷΪг׷UT*/ /** ڲУ */ ASSERT_RET_VALUE(NULL == ptemp,ret,0x80000000U); @@ -3296,6 +3352,28 @@ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) { ; /* תΪUCT */ } + + if (0U == errorCode) + { + /** ȡгǷʹNVRAMλ */ + chTrainNvramPosFlag = GetTrainNvramPosFlag(ptemp->trainID[0U]); + ASSER_ERROR(TRAIN_NVRAM_POS_FLAG_NO != chTrainNvramPosFlag, errorCode, 0x04000000U); + } + else + { + ; /* תΪ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 8734fe7..7579e4c 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c @@ -21,6 +21,7 @@ #include "../Section/PhysicalSectionConfigDataManage.h" #include "AxisAssertManage.h" #include "AxisAssertDataPrepare.h" +#include "dquCIInit.h" /*źŻ̵ʱʱ()*/ #define SIG_RELAY_DRV_DELAY_TIME ((UINT32)3) @@ -546,7 +547,6 @@ void OcSignalDeviceOutput(void) UINT32 signalDriCloseStartCyc = 0U;/*źŻرʼ*/ UINT32 signalDriCloseTimeCount = 0U;/*źŻرճʱ*/ UINT8 driveRetVal = 0U; - UINT32 jkjValidCycNum = 0u; UINT8 jkjRelayValidFlag = 0u; signalCurSum = GetSignalCurSum(); /*ȡźŻ*/ @@ -570,10 +570,9 @@ void OcSignalDeviceOutput(void) if (SIGNAL_DRIVECOLOUR_NULL == curDrvColor) {/*źŻЧ*/ jkjRelayValidFlag = GetCiJkjFlag(); - jkjValidCycNum = GetJkjRelayValidCycNum(); curShowColor = GetSignalCurColor(signalId); if (((SIGNAL_SHOWCOLOUR_REDYELLOW == curShowColor) || (SIGNAL_SHOWCOLOUR_RED_WHITE == curShowColor)) && - (JKJ_REYLAY_VALID == jkjRelayValidFlag) && (jkjValidCycNum > 0u)) + (JKJ_REYLAY_VALID == jkjRelayValidFlag)) { /*źſʱӦЧ֮˹źſţִ*/ } @@ -671,7 +670,10 @@ UINT8 GetOcSignalColor(UINT16 signalId) UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ UINT8 ciType = GetLocalCiType(); UINT8 signalState = 0U; - + UINT16 bufIndex = 0U; + UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*ƾתƹܿ*/ + UINT8 chBlueDsFlag = FLAG_UNSET; + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ belongOcId = (UINT8)GetSignalBelongOcId(signalId);/*ȡźŻOc id*/ if ((0u < belongOcId) && (OC_SUM_MAX> belongOcId)) @@ -715,15 +717,30 @@ UINT8 GetOcSignalColor(UINT16 signalId) { /*Ϣ*/ SetSignalBoardState(m_Signals[indexFind].DeviceId, OC_SIGNAL_BOARD_FAULT_NO); + + /*ɼƶ˿תΪƴ*/ + signalState = m_Signals[indexFind].DeviceState; + if ((OC_SIGNAL_SHOWCOLOR_BLUE_BREAK == signalState) && (CI_TYPE_CLD != ciType)) + { + signalState = OC_SIGNAL_SHOWCOLOR_BLUE; + chBlueDsFlag = FLAG_SET; + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + ; /**/ + } + /**/ - if (OC_SIGNAL_SHOWCOLOR_ALL_CLOSE == m_Signals[indexFind].DeviceState)/**/ + if (OC_SIGNAL_SHOWCOLOR_ALL_CLOSE == signalState)/**/ { /*ƣȡ֮ǰɫ*/ sigPreDriveColor = GetSignalPreDriveColor(m_Signals[indexFind].DeviceId); sigColorLevel = GetSignalColorLevel(sigPreDriveColor); - if ((SIGNAL_LIGHT_EXTICT_STATE_NO == sigColorLevel) && (FUNC_SWITCH_OFF == funSwitchGreenYellow)) + if ((SIGNAL_LIGHT_EXTICT_STATE_NO == sigColorLevel) && + ((FUNC_SWITCH_OFF == funSwitchGreenYellow)&&(FUNC_SWITCH_OFF == funSwitchALLCloseUseBlue))) { /*OCȫ̼ʱ*/ SetOcSignalStartCycNum(m_Signals[indexFind].DeviceId, 0); @@ -762,15 +779,20 @@ UINT8 GetOcSignalColor(UINT16 signalId) } #endif } - else if ((OC_SIGNAL_SHOWCOLOR_BLUE == m_Signals[indexFind].DeviceState) && (FUNC_SWITCH_ON == funSwitchGreenYellow) &&(CI_TYPE_CLD != ciType)) + else if ((OC_SIGNAL_SHOWCOLOR_BLUE == signalState) && + ((FUNC_SWITCH_ON == funSwitchGreenYellow)||(FUNC_SWITCH_ON == funSwitchALLCloseUseBlue)) &&(CI_TYPE_CLD != ciType)) { - /*人ش򿪣ȡ仯֮ǰɫ*/ + /*ɼ dz ʾ̻Ƶƻƾƿش򿪣ȡ仯֮ǰɫ*/ sigPreDriveColor = GetSignalPreDriveColor(m_Signals[indexFind].DeviceId); sigColorLevel = GetSignalColorLevel(sigPreDriveColor); /*OCȫ̼ʱ*/ SetOcSignalStartCycNum(m_Signals[indexFind].DeviceId, 0); - + if (FLAG_UNSET == chBlueDsFlag) + { + /*ڲɼ ƶ˿־*/ + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_NO; + } if (SIGNAL_LIGHT_EXTICT_STATE_NO == sigColorLevel) { /*źŻɫΪƲô*/ @@ -794,7 +816,6 @@ UINT8 GetOcSignalColor(UINT16 signalId) { /*OCȫ̼ʱ*/ SetOcSignalStartCycNum(m_Signals[indexFind].DeviceId, 0); - signalState = m_Signals[indexFind].DeviceState; sigPreDriveColor = GetSignalPreDriveColor(m_Signals[indexFind].DeviceId); sigCurShowColor = GetSignalCurColor(m_Signals[indexFind].DeviceId); switch (signalState) @@ -866,15 +887,8 @@ UINT8 GetOcSignalColor(UINT16 signalId) break; case OC_SIGNAL_SHOWCOLOR_BLUE_BREAK: /* ޸:by pfq 2022.03.28 ƶ˿źŻԵ⣬ƶ˿ת*/ - /*޸ 人Ϊ*/ - if (CI_TYPE_CLD != ciType) - { - rtnSigColor = SIGNAL_SHOWCOLOUR_BLUEBREAK; - } - else - { - rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; - } + /*תΪ*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; break; case OC_SIGNAL_SHOWCOLOR_YELLOW_2_BREAK: rtnSigColor = SIGNAL_SHOWCOLOUR_YELLOWBREAK; @@ -882,6 +896,12 @@ UINT8 GetOcSignalColor(UINT16 signalId) case OC_SIGNAL_SHOWCOLOR_GREEN_2_BREAK: rtnSigColor = SIGNAL_SHOWCOLOUR_GREENBREAK; break; + case OC_SIGNAL_SHOWCOLOR_DL_OVERLOAD: + case OC_SIGNAL_SHOWCOLOR_DY_OVERLOAD: + case OC_SIGNAL_SHOWCOLOR_DLDY_OVERLOAD: + case OC_SIGNAL_SHOWCOLOR_DY_ZERO: + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + break; default: /*by cgh 20230703 YF0083-772:OCrcźŻ״̬ΪǷֵbbrcźŻԸΪ*/ rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; @@ -906,7 +926,6 @@ UINT8 GetOcBoardFaultSignalColor(UINT16 signalId, UINT8 ocId) UINT8 rtnSigColor = 0u; UINT8 sigPreDriveColor = 0u; UINT8 sigMaintainState = 0u; - UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ transmitState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, ocId); /*ͨ*/ if(TRANSMIT_STATE_GOOD == transmitState) @@ -917,7 +936,7 @@ UINT8 GetOcBoardFaultSignalColor(UINT16 signalId, UINT8 ocId) /*CBTCģʽ&&źŻά޵״̬ Ӱʹ--WGY 20220705*/ sigMaintainState = GetSignalMaintainState(signalId); sigPreDriveColor = GetSignalPreDriveColor(signalId); - if((SIGNAL_LIGHT_EXTICT_STATE_NO == stateSignalOpen)&&(MAINTAIN_STATE_NO == sigMaintainState) && (FUNC_SWITCH_OFF == funSwitchGreenYellow)) + if((SIGNAL_LIGHT_EXTICT_STATE_NO == stateSignalOpen)&&(MAINTAIN_STATE_NO == sigMaintainState)) { /*ƣȡ֮ǰɫ*/ @@ -943,7 +962,7 @@ UINT8 GetOcBoardFaultSignalColor(UINT16 signalId, UINT8 ocId) /*ȡ*/ SetSignalBoardState(signalId,OC_SIGNAL_BOARD_FAULT_NO); /*ú*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + rtnSigColor = SIGNAL_SHOWCOLOUR_REDFAULT; } return rtnSigColor; @@ -959,90 +978,124 @@ UINT8 SetSignalColorOcAllOff(const UINT16 signalId) { /*ʼ*/ UINT8 signalCurColor = 0u; - UINT8 rtnSigColor = 0u; + UINT8 rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; UINT32 signalCycNum = 0u; UINT32 curCycNum = 0u; UINT8 checkCycOut = 0u; UINT8 preDriveColor = 0u; UINT32 signalRongrenNum = 0u; UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ - /*ȡǰɫΪźŻǰɫδ£ǻȡһɫ*/ - signalCurColor = GetSignalCurColor(signalId); - curCycNum = Get2oo2CurCycleNum(); + UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*ƾתƹܿ*/ + UINT16 bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + if (SIGNAL_SUM_MAX > bufIndex) + { + /*ȡǰɫΪźŻǰɫδ£ǻȡһɫ*/ + signalCurColor = GetSignalCurColor(signalId); + curCycNum = Get2oo2CurCycleNum(); - /*ʱõǰɫΪһɫ*/ - signalCycNum = GetOcSignalStartCycNum(signalId); - /*ȡϵͳõOCźŻȫʱ*/ - signalRongrenNum = GetSigCollectRongernCount(); - checkCycOut = SystemOverTimeCheck(signalCycNum,signalRongrenNum); - /*δʱ*/ - if(CI_TIME_NO == checkCycOut) - { - /*ɫ*/ - rtnSigColor = signalCurColor; - SetOcSignalStartCycNum(signalId,curCycNum); - } - /*ʱ*/ - else if(CI_TIME_OUT == checkCycOut) - { - /*ȡ֮ǰɫ*/ - preDriveColor = GetSignalPreDriveColor(signalId); - debug_infor_printf((const)"ALL CLOSE curCyc%d, SignalStartCycNum%d preDriveColor:%d \n.", curCycNum, signalCycNum, preDriveColor); - switch(preDriveColor) + /*ʱõǰɫΪһɫ*/ + signalCycNum = GetOcSignalStartCycNum(signalId); + /*ȡϵͳõOCźŻȫʱ*/ + signalRongrenNum = GetSigCollectRongernCount(); + checkCycOut = SystemOverTimeCheck(signalCycNum, signalRongrenNum); + /*δʱ*/ + if (CI_TIME_NO == checkCycOut) { - case SIGNAL_DRIVECOLOUR_RED: - /*ú*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; - break; - case SIGNAL_DRIVECOLOUR_YELLOW: - /*ûƶ*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_YELLOWBREAK; - break; - case SIGNAL_DRIVECOLOUR_DOUBLE_YELLOW: - case SIGNAL_DRIVECOLOUR_GREENYELLOW: - /*˫ ̻ ȫûƶ*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_YELLOWBREAK; - break; - case SIGNAL_DRIVECOLOUR_DOUBLE_GREEN: - /*˫ȫ̶*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_GREENBREAK; - break; - case SIGNAL_DRIVECOLOUR_GREEN: - /*̶*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_GREENBREAK; - break; - /*ơ*/ - case SIGNAL_DRIVECOLOUR_REDYELLOW: - case SIGNAL_DRIVECOLOUR_RED_WHITE: - /*ú*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; - break; - case SIGNAL_DRIVECOLOUR_WHITE: - /*ð׶*/ - rtnSigColor = SIGNAL_SHOWCOLOUR_WHITEBREAK; - break; - case SIGNAL_DRIVECOLOUR_GREENCLOSE: - case SIGNAL_DRIVECOLOUR_YELLOWCLOSE: - case SIGNAL_DRIVECOLOUR_GREENYELLOWCLOSE: - /*̻ȫûƶ*/ - if (FUNC_SWITCH_ON == funSwitchGreenYellow) - { - rtnSigColor = SIGNAL_SHOWCOLOUR_BLUEBREAK; - } - else + /*ɫ*/ + rtnSigColor = signalCurColor; + SetOcSignalStartCycNum(signalId, curCycNum); + } + /*ʱ*/ + else if (CI_TIME_OUT == checkCycOut) + { + /*ȡ֮ǰɫ*/ + preDriveColor = GetSignalPreDriveColor(signalId); + debug_infor_printf((const)"ALL CLOSE curCyc%d, SignalStartCycNum%d preDriveColor:%d \n.", curCycNum, signalCycNum, preDriveColor); + + switch (preDriveColor) { + case SIGNAL_DRIVECOLOUR_RED: + /*ú*/ rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + break; + case SIGNAL_DRIVECOLOUR_YELLOW: + /*ûƶ*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_YELLOWBREAK; + break; + case SIGNAL_DRIVECOLOUR_DOUBLE_YELLOW: + case SIGNAL_DRIVECOLOUR_GREENYELLOW: + /*˫ ̻ ȫûƶ*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_YELLOWBREAK; + break; + case SIGNAL_DRIVECOLOUR_DOUBLE_GREEN: + /*˫ȫ̶*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_GREENBREAK; + break; + case SIGNAL_DRIVECOLOUR_GREEN: + /*̶*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_GREENBREAK; + break; + /*ơ*/ + case SIGNAL_DRIVECOLOUR_REDYELLOW: + case SIGNAL_DRIVECOLOUR_RED_WHITE: + /*ú*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + break; + case SIGNAL_DRIVECOLOUR_WHITE: + /*ð׶*/ + rtnSigColor = SIGNAL_SHOWCOLOUR_WHITEBREAK; + break; + case SIGNAL_DRIVECOLOUR_GREENCLOSE: + case SIGNAL_DRIVECOLOUR_YELLOWCLOSE: + /*̻ȫ ̻Ƶƿش򿪻򺼵ʱ ȡ֮ǰɫ*/ + if ((FUNC_SWITCH_ON == funSwitchGreenYellow) || (FUNC_SWITCH_ON == funSwitchALLCloseUseBlue)) + { + rtnSigColor = preDriveColor; + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + } + break; + case SIGNAL_DRIVECOLOUR_GREENYELLOWCLOSE: + /*̻ȫ ̻Ƶƿشʱ*/ + if (FUNC_SWITCH_ON == funSwitchGreenYellow) + { + rtnSigColor = preDriveColor; + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + } + break; + case SIGNAL_DRIVECOLOUR_REDCLOSE: + /*¿شʱ*/ + if (FUNC_SWITCH_ON == funSwitchALLCloseUseBlue) + { + rtnSigColor = preDriveColor; + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; + } + break; + default: + /*״̬ ˴ɴ֧*/ + break; } - break; - default: - /*״̬ ˴ɴ֧*/ - break; + } + else + { + /*ɫ*/ + rtnSigColor = signalCurColor; } } else { - /*ɫ*/ - rtnSigColor = signalCurColor; + rtnSigColor = SIGNAL_SHOWCOLOUR_REDBREAK; /*źŻIDǷ*/ } return rtnSigColor; } @@ -1080,6 +1133,7 @@ void OcSignalDeviceInput(void) UINT8 addCiToCiCmdFlag = CI_ERROR; /*Ƿ*/ UINT32 signalDriveNewSigStartCyc = 0u; /*źŻźʼں*/ UINT32 signalDiffCyc = 0U; /*źſɫһ*/ + UINT8 cFuncRet = 0U; curCycNum= Get2oo2CurCycleNum(); signalCurSum = GetTotalSignalCurNum(); /*ȡźŻ*/ @@ -1114,6 +1168,16 @@ void OcSignalDeviceInput(void) { cheakdetain_1 = CheakDeatainState(detainCutRelayId, signalDetainRelayId); addCiToCiCmdFlag = CI_SUCCESS; + + cFuncRet = GetFstDetBtnCollTolerateRet(signalId); /*ȡ۳ť1ɼ̽*/ + if (CI_SUCCESS == cFuncRet) + { + cheakdetain_1 = CI_ERROR; /*δʱӰ۳Ч*/ + } + else + { + /*ʱ*/ + } } } else @@ -1127,6 +1191,16 @@ void OcSignalDeviceInput(void) /*Ӳ߿۳̵2 Ч*/ cheakdetain_2 = CheakDeatainState(detainCutRelayId_2, signalDetainRelayId_2); addCiToCiCmdFlag = CI_SUCCESS; + + cFuncRet = GetSndDetBtnCollTolerateRet(signalId); /*ȡ۳ť2ɼ̽*/ + if (CI_SUCCESS == cFuncRet) + { + cheakdetain_2 = CI_ERROR; /*δʱӰ۳Ч*/ + } + else + { + /*ʱ*/ + } } } else @@ -1139,6 +1213,7 @@ void OcSignalDeviceInput(void) { SignalZfsDetainBtnPro(signalId); SignalZfsCancelDetainBtnPro(signalId); + SignalZfsDetainCutBtnPro(signalId); signalDetainBtnActFlag = GetSignalDetainBtnActFlag(signalId); if (SIGNAL_ZFS_BTN_ACT_FLAG_NO != signalDetainBtnActFlag) { @@ -1613,8 +1688,6 @@ void DetZfsCancelBtnActFlagProc(const UINT16 wSignalId, const UINT16 wCancelDetB void SpksDisplayDrivOutput(void) { UINT16 spksCurSum = 0u; /*spksǰĿĬΪÿspksָʾ*/ - UINT16 spksCollId = 0u; /*spksɼ̵ ID*/ - UINT8 tmpCollRelayColState = 0u; /*spksɼ̵״̬*/ UINT8 tmpCutRelayColState = 0u; /*spks·̵״̬*/ UINT16 spksDisplayId = 0u; /*spksָʾƼ̵ID*/ UINT16 spksId = 0u; /*spks ID*/ @@ -1626,6 +1699,7 @@ void SpksDisplayDrivOutput(void) UINT32 spksflockStartNum = 0u; UINT32 dwSpksIndicDelayCount = 0u; UINT8 checkCycOut = 0u; + UINT8 cSpksState = 0U; spksCurSum = GetSpksSum(); /*ȡspksĬΪÿspksжӦָʾ*/ chLocalCiId = GetSystemParaLocalCiId(); /*ȡID*/ @@ -1644,9 +1718,6 @@ void SpksDisplayDrivOutput(void) for (ii = 0u; ii < spksCurSum; ii++) { spksId = GetSpksIdByIndex(ii); /*ȡspks ID*/ - - spksCollId = GetSpksColRelayId(spksId); /*ȡspksɼ̵ID*/ - tmpCollRelayColState = GetRelayCollState(spksCollId);/*ȡspksɼ̵״̬*/ spksDisplayId = GetSpksDisRelayId(spksId); /*spks IDȡspksָʾID*/ cutSpksId = GetSpksCutRelayId(spksId); /*ȡspks·ť̵ID*/ @@ -1666,26 +1737,24 @@ void SpksDisplayDrivOutput(void) { /*spksָʾ*/ if ((0u != spksDisplayId) && (UINT16_MAX != spksDisplayId)) - {/*spksָʾƼ̵Ч*/ - if (RELAY_STATE_DOWN == tmpCollRelayColState) + { + /*spksָʾƼ̵Ч*/ + cSpksState = GetSpksState(spksId); + if (SPKS_STATUS_YES == cSpksState) { /*SPKS̵ºʱ*/ spksflockStartNum = GetSpksflockStartNum(spksId);/*ȡSPKSʼ*/ dwSpksIndicDelayCount = GetSpksIndicDelayCount();/*ȡʱ*/ checkCycOut = SystemOverTimeCheck(spksflockStartNum,dwSpksIndicDelayCount); - if(CI_TIME_OUT == checkCycOut)/*ʱ*/ + if (CI_TIME_OUT == checkCycOut)/*ʱ*/ { - (void)SetRelayDriveState(spksDisplayId, RELAY_STATE_UP); /*ָʾ*/ - } + (void)SetRelayDriveState(spksDisplayId, RELAY_STATE_UP); /*ָʾ*/ + } else { (void)SetRelayDriveState(spksDisplayId,RELAY_STATE_DOWN); /*ָʾ*/ } } - else if (RELAY_STATE_UP == tmpCollRelayColState) - { - (void)SetRelayDriveState(spksDisplayId, RELAY_STATE_DOWN); /*ָʾ*/ - } else { (void)SetRelayDriveState(spksDisplayId, RELAY_STATE_DOWN); /*ָʾ*/ @@ -1950,45 +2019,43 @@ void EsbDisplayDrivOutput(void) /*ûESBվָ̨ʾƣ*/ } } + else if (FUNC_SWITCH_ESB_NINGXIANG_RAIL == funcswitchZfsBtn) + { + /*·ESBָʾƼ̵*/ + EsbNXRailDisplayDrivOutput(esbId); + } else { /*ԸʽesbָʾƼ̵*/ + esbState = GetEsbState(esbId); + /*ESBָʾ״̬*/ if ((0u != esbDisplayRelayId) && (UINT16_MAX != esbDisplayRelayId)) { - /*esbָʾƼ̵Ч*/ - if (RELAY_STATE_DOWN == tmpCollRelayColState) + if (ESB_STATE_VALID_YES == esbState) { - (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_UP); /*ָʾ*/ - } - else if (RELAY_STATE_UP == tmpCollRelayColState) - { - (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_DOWN); /*ָʾ*/ + (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_UP); /*ESBָʾ*/ } else { - (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_DOWN); /*ָʾ*/ + (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_DOWN); /*δESBָʾ*/ } } else { - /*esbťûָʾƼ̵*/ + /*ûESBָʾƣ*/ } - /*ESBվָ̨ʾ״̬̫ԭ1Ŀ*/ + /*ESBվָ̨ʾ״̬*/ if ((0u != esbPlatformDisRelayId) && (UINT16_MAX != esbPlatformDisRelayId)) { /*ESBָʾ״̬*/ - if (RELAY_STATE_DOWN == tmpCollRelayColState) + if (ESB_STATE_VALID_YES == esbState) { - (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_UP); /*ָʾ*/ - } - else if (RELAY_STATE_UP == tmpCollRelayColState) - { - (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_DOWN); /*ָʾ*/ + (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_UP); /*ESBվָ̨ʾ*/ } else { - (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_DOWN); /*ָʾ*/ + (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_DOWN); /*δESBվָ̨ʾ*/ } } else @@ -2090,7 +2157,7 @@ void DetainDisplayDrivOutput(void) else { /*Ըʽ۳ťʾƴ*/ - DriveZfsDetainBsRelay(signalId, signalDetainDisplayId); + DriveZfsDetainBsRelay(signalId, signalDetainDisplayId, cutDetainDisplayId); } } else @@ -2125,7 +2192,7 @@ void DetainDisplayDrivOutput(void) else { /*Ըʽ۳ťʾƴ*/ - DriveZfsDetainBsRelay(signalId, signalDetainDisplayId); + DriveZfsDetainBsRelay(signalId, signalDetainDisplayId, cutDetainDisplayId); } } } @@ -2150,6 +2217,8 @@ void DriveDetainBsRelay(const UINT16 signalId, const UINT16 signalCutDetainRelay UINT8 relayDetainValidFlag = 0u; UINT8 signalDetainFlag = 0u; /*źŻ۳־*/ UINT8 relayDrivState = 0u; /*̵״̬*/ + UINT16 wTempRelayId = 0U; + UINT8 cFuncRet = 0U; /*Ӳ߿۳·ťָʾƼ̵*/ if ((0u != signalCutDetainRelayId) && (UINT16_MAX != signalCutDetainRelayId) && (0u != cutDetainDisplayId) && (UINT16_MAX != cutDetainDisplayId)) @@ -2181,9 +2250,18 @@ void DriveDetainBsRelay(const UINT16 signalId, const UINT16 signalCutDetainRelay tmpCollRelayColState = GetRelayCollState(signalDetainRelayId);/*ȡ۳̵ɼ״̬*/ signalDetainFlag = GetSignalDetainFlag(signalId); /*ȡźŻ۳־*/ relayDrivState = GetRelayDriveState(signalDetainDisplayId); /*ȡ۳ָʾƼ̵״̬*/ - if (((UP_VALID == relayDetainValidFlag) && (RELAY_DRIVE_STATE_UP == tmpCollRelayColState)) - || ((DOWN_VALID == relayDetainValidFlag) && (RELAY_DRIVE_STATE_DOWN == tmpCollRelayColState))) /*̵,۳*/ + wTempRelayId = GetSignalDetainRelayId(signalId); + if (wTempRelayId == signalDetainRelayId) { + cFuncRet = GetFstDetBtnCollTolerateRet(signalId); /*ȡ۳ť1ɼ̽*/ + } + else + { + cFuncRet = GetSndDetBtnCollTolerateRet(signalId); /*ȡ۳ť2ɼ̽*/ + } + if (CI_SUCCESS != cFuncRet) + { + /*۳ť,۳*/ (void)SetRelayDriveState(signalDetainDisplayId, RELAY_STATE_UP); /*ָʾ*/ } else if (((UP_VALID == relayDetainValidFlag) && (RELAY_DRIVE_STATE_DOWN == tmpCollRelayColState)) @@ -2204,8 +2282,9 @@ void DriveDetainBsRelay(const UINT16 signalId, const UINT16 signalCutDetainRelay } } } - else /*̵״̬Ч۳*/ + else { + /*̵״̬Чδﵽɼʱ䣬жǷ*/ if ((SIGNAL_DETAIN_YES == signalDetainFlag) || (SIGNAL_DETAIN_XIANDI_ATSAUTO == signalDetainFlag) || (SIGNAL_DETAIN_ATS == signalDetainFlag) || (SIGNAL_DETAIN_ATS_AUTO == signalDetainFlag) || (SIGNAL_DETAIN_XIANDI == signalDetainFlag)) { /*۳ҲҪָʾ*/ @@ -2229,40 +2308,96 @@ void DriveDetainBsRelay(const UINT16 signalId, const UINT16 signalCutDetainRelay } /* -* Ըʽ۳ָʾ -* ˵const UINT16 signalId, źŻID -* const UINT16 signalDetainDisplayId, ۳ʾƼ̵1ID -* ֵ -* +* Ըʽ۳ָʾ +* ˵const UINT16 signalId źŻID +* const UINT16 signalDetDisRelayId ۳ʾƼ̵ID +* const UINT16 signalDetCutDisRelayId ۳·ʾƼ̵ +* ֵ +* Modified By LQ 2025.07.03 */ -void DriveZfsDetainBsRelay(const UINT16 signalId, const UINT16 signalDetainDisplayId) +void DriveZfsDetainBsRelay(const UINT16 signalId, const UINT16 signalDetDisRelayId, const UINT16 signalDetCutDisRelayId) { + UINT16 wSignalIdIndex = 0U; /*źŻID*/ + UINT16 wDetDisRelayIdIndex = 0U; /*̵ID*/ + UINT16 wDetCutDisRelayIdIndex = 0U; /*̵ID*/ UINT8 localCiId = 0U; /*ID*/ - UINT8 detainBsRelayBelongCi = 0u; /*۳ʾƼ̵CI*/ + UINT8 detBsRelayBelongCi = 0U; /*۳ʾƼ̵CI*/ UINT8 detainBtnActFlag = SIGNAL_ZFS_BTN_ACT_FLAG_NO; /*۳ť1־*/ + UINT8 cDetCutBsRelayBelongCi = 0U; /*۳·ťʾƼ̵CI*/ + UINT8 cDetCutBtnState = 0U; /*۳·ť״̬*/ - localCiId = GetSystemParaLocalCiId(); - detainBsRelayBelongCi = GetRelayBelongCiId(signalDetainDisplayId); + wSignalIdIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ - /*Ӳ߿۳ťָʾ1̵*/ - if ((0u != signalDetainDisplayId) && (UINT16_MAX != signalDetainDisplayId) && (0U != localCiId) && (localCiId == detainBsRelayBelongCi)) + if (SIGNAL_SUM_MAX > wSignalIdIndex) { - /*ȡԸʽ۳ť1־*/ - detainBtnActFlag = GetSignalDetainBtnActFlag(signalId); + localCiId = GetSystemParaLocalCiId(); - /*ÿ۳ָʾ1״̬*/ - if (SIGNAL_ZFS_BTN_ACT_FLAG_YES == detainBtnActFlag) - { - (void)SetRelayDriveState(signalDetainDisplayId, RELAY_STATE_UP); /*۳ť۳ָʾ*/ + /*۳ťʾ*/ + wDetDisRelayIdIndex = GetRelayConfigBufIndex(signalDetDisRelayId); /*ȡ۳ťʾƼ̵±*/ + if (RELAY_SUM_MAX > wDetDisRelayIdIndex) + { + detBsRelayBelongCi = GetRelayBelongCiId(signalDetDisRelayId); + + /*ÿ۳ťʾƼ̵״̬*/ + if ((0U != localCiId) && (localCiId == detBsRelayBelongCi)) + { + /*ȡԸʽ۳ť1־*/ + detainBtnActFlag = GetSignalDetainBtnActFlag(signalId); + + /*ÿ۳ָʾ״̬*/ + if (SIGNAL_ZFS_BTN_ACT_FLAG_YES == detainBtnActFlag) + { + (void)SetRelayDriveState(signalDetDisRelayId, RELAY_STATE_UP); /*۳ť۳ָʾ*/ + } + else + { + (void)SetRelayDriveState(signalDetDisRelayId, RELAY_STATE_DOWN); /*۳ťδ۳ָʾ*/ + } + } + else + { + /*DZ̵*/ + } } else { - (void)SetRelayDriveState(signalDetainDisplayId, RELAY_STATE_DOWN); /*۳ťδ۳ָʾ*/ + /**/ + } + + /*۳·ťʾ*/ + wDetCutDisRelayIdIndex = GetRelayConfigBufIndex(signalDetCutDisRelayId); /*ȡ۳·ťʾƼ̵±*/ + if (RELAY_SUM_MAX > wDetCutDisRelayIdIndex) + { + cDetCutBsRelayBelongCi = GetRelayBelongCiId(signalDetCutDisRelayId); + /*ÿ۳·ťʾƼ̵״̬*/ + if ((0U != localCiId) && (localCiId == cDetCutBsRelayBelongCi)) + { + /*ȡԸʽ۳·ť״̬*/ + cDetCutBtnState = GetDetCutBtnState(signalId); + + /*ÿ۳·ťָʾ״̬*/ + if (SIGNAL_DETAIN_CUT_VALID_YES == cDetCutBtnState) + { + (void)SetRelayDriveState(signalDetCutDisRelayId, RELAY_STATE_UP); /*۳·ťЧ۳ָʾ*/ + } + else + { + (void)SetRelayDriveState(signalDetCutDisRelayId, RELAY_STATE_DOWN); /*۳·ťЧ۳ָʾ*/ + } + } + else + { + /*DZ̵*/ + } + } + else + { + /**/ } } else { - /*źŻûп۳ťָʾƣ*/ + /**/ } } @@ -2638,7 +2773,6 @@ void SignalDeviceToRelayStateProc(void) UINT16 replxRelayId = 0u; /*ʾгźż̵ID*/ UINT16 ddRelayId = 0u; /*Ƽ̵ID*/ - UINT32 jkjValidCycNum = 0u; UINT8 jkjRelayValidFlag = 0u; UINT8 checkRes = CI_TIME_OUT; UINT32 sigCycle = 0u; @@ -2658,30 +2792,23 @@ void SignalDeviceToRelayStateProc(void) signalCurSum = GetTotalSignalCurNum(); /*ȡźŻ*/ localCiId = GetSystemParaLocalCiId(); /*ȡID*/ - - firDsRelayId = GetSignalFirstDsRelayId(signalId); /*ȡźŻ1˿̵ID*/ - secDsRelayId = GetSignalSecondDsRelayId(signalId); /*ȡźŻ2˿̵ID*/ - lxRelayId = GetSignalLxRelayId(signalId); /*ȡźŻгźż̵ID*/ - zxRelayId = GetSignalZxRelayId(signalId); /*ȡźŻźż̵ID*/ - yxRelayId = GetSignalYxRelayId(signalId); /*ȡźŻźż̵ID*/ - dxRelayId = GetSignalDxRelayId(signalId); /*ȡźŻźż̵ID*/ - yellowRelayId = GetSignalYellowRelayId(signalId); /*ƵƼ̵ID*/ - greenRelayId = GetSignalGreenRelayId(signalId); /*̵Ƽ̵ID*/ - blueRelayId = GetSignalBlueRelayId(signalId); /*Ƽ̵ID*/ - replxRelayId = GetSignalRepLxRelayId(signalId); /*ʾг̵ID*/ - ddRelayId = GetSignalDdRelayId(signalId); /*ȡźŻƼ̵ID*/ - /*źŻ*/ for (ii = 0u; ii < signalCurSum; ii++) { - signalId = 0u; /*źŻID*/ - signalBelongCi = 0u; /*źŻID*/ - curDrvColor = 0u; /*źŻǰɫ*/ - signalId = GetSignalId(ii); /*ȡźŻID*/ signalBelongCi = GetSignalBelongCiId(signalId); /*ȡźŻID*/ signalVirtualAttr = GetSignalVirtualAttr(signalId);/*ȡźŻ*/ - + firDsRelayId = GetSignalFirstDsRelayId(signalId); /*ȡźŻ1˿̵ID*/ + secDsRelayId = GetSignalSecondDsRelayId(signalId); /*ȡźŻ2˿̵ID*/ + lxRelayId = GetSignalLxRelayId(signalId); /*ȡźŻгźż̵ID*/ + zxRelayId = GetSignalZxRelayId(signalId); /*ȡźŻźż̵ID*/ + yxRelayId = GetSignalYxRelayId(signalId); /*ȡźŻźż̵ID*/ + dxRelayId = GetSignalDxRelayId(signalId); /*ȡźŻźż̵ID*/ + yellowRelayId = GetSignalYellowRelayId(signalId); /*ƵƼ̵ID*/ + greenRelayId = GetSignalGreenRelayId(signalId); /*̵Ƽ̵ID*/ + blueRelayId = GetSignalBlueRelayId(signalId); /*Ƽ̵ID*/ + replxRelayId = GetSignalRepLxRelayId(signalId); /*ʾг̵ID*/ + ddRelayId = GetSignalDdRelayId(signalId); /*ȡźŻƼ̵ID*/ if ((0u == signalId) || (signalId > SIGNAL_SUM_MAX) || (localCiId == 0u)) { /*źŻidϷ߱IDΪ0u,*/ @@ -2693,10 +2820,9 @@ void SignalDeviceToRelayStateProc(void) if (SIGNAL_DRIVECOLOUR_NULL == curDrvColor) {/*źŻЧ*/ jkjRelayValidFlag = GetCiJkjFlag(); - jkjValidCycNum = GetJkjRelayValidCycNum(); curShowColor = GetSignalCurColor(signalId); if (((SIGNAL_SHOWCOLOUR_REDYELLOW == curShowColor) || (SIGNAL_SHOWCOLOUR_RED_WHITE == curShowColor)) && - (JKJ_REYLAY_VALID == jkjRelayValidFlag) && (jkjValidCycNum > 0u) ) + (JKJ_REYLAY_VALID == jkjRelayValidFlag)) { /*źſʱӦЧ֮˹źſţִźŹر߼崻*/ } @@ -5944,8 +6070,9 @@ void PhySecResetToRelayStateProc(void) UINT8 occupyState = 0u; /*ռ״̬*/ UINT32 startCycNum = 0u; /*ʼں*/ UINT8 resetType = 0u; /*Ḵλ*/ - UINT8 preResetState = 0u; /*Ԥλ״̬*/ UINT8 overTimeCheck = 0u; + UINT16 wPhySecFwRelayId = 0U;/*θλ̵ID*/ + UINT32 dwPhyResetCount = 0U; /*Ḵλʱ*/ localCi = GetSystemParaLocalCiId(); relayZFWId = GetZFWRelayId(localCi); /*ܸλ̵ID*/ @@ -6077,13 +6204,15 @@ void PhySecResetToRelayStateProc(void) phySecId = GetPhySecId(ii);/*ȡID*/ startCycNum = GetPhySecResetStartCycNum(phySecId); + wPhySecFwRelayId = GetPhySecFWRelayId(phySecId); + if (startCycNum > 0u) /*Ḵλ*/ { occupyState = GetPhySecCurOccupyState(phySecId); if (SECTION_OCCUPY_NO == occupyState) /*ɼ*/ { SetPhySecResetStartCycNum(phySecId, 0u);/*޸ļḴλʼں*/ - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_DOWN);/*üḴλ̵*/ } else /*ɼռ*/ { @@ -6091,17 +6220,18 @@ void PhySecResetToRelayStateProc(void) if (LOGICSECTION_OCCUPY_TX == occupyState) /*ͨųռ*/ { SetPhySecResetStartCycNum(phySecId, 0u);/*޸ļḴλʼں*/ - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_DOWN);/*üḴλ̵*/ SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, ETYPE_PS_NO_UT_CT_OCU_STATE, occupyState, ESEND_LEVEL_ATS); } else { - overTimeCheck = SystemOverTimeCheck(GetPhySecResetStartCycNum(phySecId), GetSystemParaSectionResetCount()); + dwPhyResetCount = GetSystemParaSectionResetCount(); + overTimeCheck = SystemOverTimeCheck(startCycNum, dwPhyResetCount); if (CI_TIME_OUT == overTimeCheck) {/*μḴλʱ*/ SetPhySecResetStartCycNum(phySecId, 0u);/*޸ļḴλʼں*/ - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_DOWN);/*üḴλ̵*/ #if 0 SetCiSendCmdBackInfoData(CI_BACK_PSEC_RESET_ERROR, CI_DEVICE_TYPE_PHYSEC, phySecId, 0u, 0u);/*Ḵλʧ*/ #endif @@ -6113,32 +6243,21 @@ void PhySecResetToRelayStateProc(void) if (CI_SUCCESS == retValid) /*ЧִмḴλ*/ { resetType = GetPhySecSectionResetType(phySecId); - if (PHYSICAL_SECTION_PRE_RESET_NO == resetType) /*ֱӸλ*/ + + if ((PHYSICAL_SECTION_PRE_RESET_NO == resetType) || (PHYSICAL_SECTION_PRE_RESET_YES == resetType)) /*ֱӸλԤλ*/ { - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_UP);/*üḴλ̵*/ - } - else if (PHYSICAL_SECTION_PRE_RESET_YES == resetType) /*Ԥλ*/ - { - preResetState = GetPhySecPreResetState(phySecId); - if (PHYSICAL_SECTION_PRE_RESET_NO == preResetState) /*Ԥλδɹ*/ - { - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_UP);/*üḴλ̵*/ - } - else /*Ԥλɹ*/ - { - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ - } + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_UP);/*üḴλ̵ʱ̵*/ } else /**/ { SetPhySecResetStartCycNum(phySecId, 0u);/*޸ļḴλʼں*/ - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_DOWN);/*üḴλ̵*/ } } else /*Ч*/ { SetPhySecResetStartCycNum(phySecId, 0u);/*޸ļḴλʼں*/ - (void)SetRelayDriveState(GetPhySecFWRelayId(phySecId), RELAY_STATE_DOWN);/*üḴλ̵*/ + (void)SetRelayDriveState(wPhySecFwRelayId, RELAY_STATE_DOWN);/*üḴλ̵*/ SetCiSendCmdBackInfoData(CI_BACK_PSEC_RESET_ZFW_ERROR, CI_DEVICE_TYPE_PHYSEC, phySecId, 0u, 0u);/*Ḵλʧܣܸλ̵*/ } } @@ -6443,11 +6562,10 @@ void PsdRelayToDeviceStateProc(void) UINT8 buttonState = 0u; UINT32 buttonPressCycNum = 0U; UINT32 curCycNum = 0U; - UINT8 chPsdVirtualState = 0U; UINT32 dwCycNum = 0U; UINT8 chDsnLinSwitch = 0U; - + UINT8 cFuncRet = 0U; chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); @@ -6656,21 +6774,16 @@ void PsdRelayToDeviceStateProc(void) if (psdDoorRelayId > 0u) { if (FUNC_SWITCH_ON != chDsnLinSwitch) - {/*ſ״̬*/ - chPsdCloseState = GetRelayCollState(psdDoorRelayId); - if (RELAY_STATE_UP == chPsdCloseState) + { + /*ſ״̬*/ + cFuncRet = GetPsdRelayCollTolerateRet(psdId); /*ȡPSDſ̵ɼ̽*/ + if (CI_SUCCESS == cFuncRet) { reVal = SetPsdState(psdId, PSD_STATE_CLOSE); - - } - else if (RELAY_STATE_DOWN == chPsdCloseState) - { - reVal = SetPsdState(psdId, PSD_STATE_OPEN); - } else { - reVal = CI_ERROR; + reVal = SetPsdState(psdId, PSD_STATE_OPEN); } } else @@ -7834,6 +7947,14 @@ UINT8 EsbRelayToDeviceStateProc(void) EsbZfsBtnProc(esbId); EsbZfsCancelBtnProc(esbId); } + else if (FUNC_SWITCH_ESB_NINGXIANG_RAIL == funcswitchZfsBtn) + { + /*·ͣťΪͨťȡťͽ·ťΪԸʽť*/ + /*1.رհť*/ + EsbNXRailBtnProc(esbId); + /*2.رȡť*/ + EsbNXRailCancelBtnProc(esbId); + } else { /*ȡԸʽESBǰõ״̬*/ @@ -7858,23 +7979,32 @@ UINT8 EsbRelayToDeviceStateProc(void) reVal = SetEsbState(esbId, ESB_STATE_VALID_YES); } } - /*·״̬*/ - esbCutRelayId = GetEsbCutRelayId(esbId); - if (0u != esbCutRelayId) - { /*û·ťʱ*/ - chEsbCutRelayState = GetRelayCollState(esbCutRelayId); - if (RELAY_STATE_DOWN == chEsbCutRelayState) - { - SetEsbCutState(esbId, ESB_CUT_NO); - } - else if (RELAY_STATE_UP == chEsbCutRelayState) - { - SetEsbCutState(esbId, ESB_CUT_YES); - } - else - { - SetEsbCutState(esbId, ESB_CUT_NO); - reVal = CI_ERROR; + + if (FUNC_SWITCH_ESB_NINGXIANG_RAIL == funcswitchZfsBtn) + { + /*·ر·ť*/ + EsbNXRailCutBtnProc(esbId); + } + else + { + /*··״̬*/ + esbCutRelayId = GetEsbCutRelayId(esbId); + if (0u != esbCutRelayId) + { /*û·ťʱ*/ + chEsbCutRelayState = GetRelayCollState(esbCutRelayId); + if (RELAY_STATE_DOWN == chEsbCutRelayState) + { + SetEsbCutState(esbId, ESB_CUT_NO); + } + else if (RELAY_STATE_UP == chEsbCutRelayState) + { + SetEsbCutState(esbId, ESB_CUT_YES); + } + else + { + SetEsbCutState(esbId, ESB_CUT_NO); + reVal = CI_ERROR; + } } } } @@ -7944,8 +8074,9 @@ UINT8 SpksRelayToDeviceStateProc(void) UINT8 execRes = 0u; UINT32 curCycNum = Get2oo2CurCycleNum(); UINT8 spksVirAttribute = 0U; - UINT8 spksRetVlaue = 0U; UINT8 chStartFlock = CI_START_FLOCK_YES; + UINT8 cFunRet = 0U; + tmpSpksSum = GetTotalSpksCurNum();/*SPKS*/ for (ii = 0u; ii < tmpSpksSum; ii++) { @@ -7959,31 +8090,24 @@ UINT8 SpksRelayToDeviceStateProc(void) spksRelayId = GetSpksColRelayId(spksId); if (spksRelayId > 0u) { - spksBelongCi = GetSpksBelongCiId(spksId); if (spksBelongCi == localCi) { - relaySta = GetRelayCollState(spksRelayId); - if (RELAY_STATE_DOWN == relaySta) + cFunRet = GetSpksBtnCollTolerateRet(spksId); /*ȡSPKSťɼ̽*/ + + if (CI_SUCCESS == cFunRet) { - spksRetVlaue = SetSpksState(spksId,SPKS_STATUS_YES); - if(CI_ERROR == spksRetVlaue) - { - } - SetSpksflockStartNum(spksId,curCycNum); - } - else if (RELAY_STATE_UP == relaySta) - { - spksRetVlaue = SetSpksState(spksId,SPKS_STATUS_NO); - if(CI_ERROR == spksRetVlaue) - { - } - SetSpksflockStartNum(spksId,0U); + (void)SetSpksState(spksId, SPKS_STATUS_NO); + + SetSpksflockStartNum(spksId, 0U); } else { - ret = CI_ERROR; + (void)SetSpksState(spksId, SPKS_STATUS_YES); + + SetSpksflockStartNum(spksId, curCycNum); } + /*·״̬*/ spksCutRelayId = GetSpksCutRelayId(spksId); if (0U != spksCutRelayId) @@ -10201,122 +10325,109 @@ UINT8 GetNoDDJSignalColor(const UINT16 signalId) * ½·ĵͬ߼״̬ * ˵ void * ֵ void +* BY CGH 20250523 */ void RouteDCTYRelayToDeviceStateProc(void) { - UINT16 ii = 0u; /*α*/ - UINT16 routeCurSum = 0u; /*·*/ - UINT16 routeId = 0u; /*·ID*/ - UINT8 localCi = 0u; - UINT8 belongCi = 0u; - + UINT16 ii = 0U; /*α*/ + UINT16 routeCurSum = 0U; /*·*/ + UINT16 routeId = 0U; /*·ID*/ + UINT8 localCi = 0U; + UINT8 belongCi = 0U; UINT8 tmpExecRes = CI_ERROR;/*ʱִн*/ UINT8 reVal = CI_ERROR;/*ֵ*/ - - - UINT16 routeDCTYId = 0u;/*̵ͬid*/ - UINT16 routeDCQJId = 0u; /*̵id*/ - - - UINT8 relayCollState = 0u;/*̵ɼ״̬*/ + UINT16 routeDCTYId = 0U;/*̵ͬid*/ + UINT8 relayCollState = 0U;/*̵ɼ״̬*/ + UINT8 chRouteType = 0U; /*·*/ + UINT32 dwDcAgreeBtnPressCycNum = 0U;/*ͬⰴťʼ*/ + UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*ǰں*/ + UINT32 dwZfsBtnFaultCycNum = 0U; /*Ըʽťж*/ + UINT32 dwZfsBtnRelayCollCycNum = 0U; /*Ըʽť̵ɼ*/ + UINT8 chOverTimeCheckFlag = 0U;/*ʱ־*/ + UINT8 chDcAgreeButtonErrState = 0U;/*ͬⰴť״̬*/ routeCurSum = GetRouteCurSum(); localCi = GetSystemParaLocalCiId();/**/ - for (ii = 0u; ii < routeCurSum; ii++) + + for (ii = 0U; ii < routeCurSum; ii++) { routeId = GetRouteId(ii); - /*֤·id벻Ϊ0u*/ - if (0u == routeId) + if((0U < routeId) && (ROUTE_SUM_MAX > routeId)) { - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - - if (CI_SUCCESS == reVal) - {/*֤·Ϊ*/ + /*֤·Ϊ*/ belongCi = GetRouteBelongCiId(routeId); if (belongCi == localCi) { - reVal = CI_SUCCESS; + routeDCTYId = GetRouteDCTAJId(routeId);/*ȡ·̵ͬid*/ + chRouteType = GetRouteType(routeId); + + if((0U < routeDCTYId) && (ROUTE_TYPE_DIAOCHE == chRouteType)) + { + relayCollState = GetRelayCollState(routeDCTYId); + if (RELAY_STATE_UP == relayCollState) + { + dwDcAgreeBtnPressCycNum = GetRouteDcAgreeBtnPressCycNum(routeId); + + if (0U == dwDcAgreeBtnPressCycNum) + { + SetRouteDcAgreeBtnPressCycNum(routeId, dwCurCycleNum); + } + else + { + ; + } + + } + else + { + SetRouteDcAgreeBtnPressCycNum(routeId, 0U); + } + + dwDcAgreeBtnPressCycNum = GetRouteDcAgreeBtnPressCycNum(routeId); + dwZfsBtnFaultCycNum = GetSelfButErrCount(); + chOverTimeCheckFlag = SystemOverTimeCheck(dwDcAgreeBtnPressCycNum, dwZfsBtnFaultCycNum); + + if (CI_TIME_OUT == chOverTimeCheckFlag) + { + /*ť´ڹʱ䣬ù*/ + SetRouteDcAgreeButtonErrState(routeId, ROUTE_DC_AGREE_BUTTON_ERR); + } + else + { + SetRouteDcAgreeButtonErrState(routeId, ROUTE_DC_AGREE_BUTTON_OK); + } + + dwZfsBtnRelayCollCycNum = GetSelfButCollCount(); + chOverTimeCheckFlag = SystemOverOrEqualTimeCheck(dwDcAgreeBtnPressCycNum, dwZfsBtnRelayCollCycNum); + chDcAgreeButtonErrState = GetRouteDcAgreeButtonErrState(routeId); + + + /*ťʱڵжϲɼЧʱδϣõͬⰴťЧ*/ + if ((CI_TIME_OUT == chOverTimeCheckFlag) && (ROUTE_DC_AGREE_BUTTON_OK == chDcAgreeButtonErrState)) + { + SetRouteDCTYState(routeId, ROUTE_DCT_AGREE); + } + else + { + /**/ + } + + } + else + { + ; /*ûǵ·*/ + } } else { - reVal = CI_ERROR; + ; /*DZ·*/ } } - - - if (CI_SUCCESS == reVal) + else { - routeDCQJId = GetRouteDCQJId(routeId);/*ȡ·̵id*/ - - if (routeDCQJId > 0u) - { - relayCollState = GetRelayCollState(routeDCQJId); - if (RELAY_STATE_UP == relayCollState) - { - tmpExecRes = SetRouteDCQState(routeId, ROUTE_DCQ_REQUEST);/*е*/ - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - else if (RELAY_STATE_DOWN == relayCollState) - { - tmpExecRes = SetRouteDCQState(routeId, ROUTE_DCQ_NOT_REQUEST);/*£ûе*/ - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - else - { - /*Ƿֵ*/ - tmpExecRes = SetRouteDCQState(routeId, ROUTE_DCQ_NOT_REQUEST);/*Ƿֵ´ûе*/ - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - } - - routeDCTYId = GetRouteDCTAJId(routeId);/*ȡ·̵ͬid*/ - - if (routeDCTYId > 0u) - { - relayCollState = GetRelayCollState(routeDCTYId); - if (RELAY_STATE_UP == relayCollState) - { - tmpExecRes = SetRouteDCTYState(routeId, ROUTE_DCT_AGREE);/*𣬵ͬ*/ - - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - else if (RELAY_STATE_DOWN == relayCollState) - { - tmpExecRes = SetRouteDCTYState(routeId, ROUTE_DCT_NOT_AGREE);/*£ͬ*/ - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - else - { - /*Ƿֵ*/ - tmpExecRes = SetRouteDCTYState(routeId, ROUTE_DCT_NOT_AGREE);/*£ͬ*/ - if (CI_ERROR == tmpExecRes) - { - /**/ - } - } - } + ; /**/ } } } @@ -10329,82 +10440,67 @@ void RouteDCTYRelayToDeviceStateProc(void) */ void RouteDCTYToRelayStateProc(void) { - UINT16 ii = 0u; /* α */ - UINT16 routeSum = 0u; /* · */ - UINT16 routeId = 0u; /* ID */ - UINT8 routeType = 0u;/*·*/ - UINT16 routeDCQRelayId = 0u; - UINT8 routeDCQState = 0u; + UINT16 ii = 0U; /* α */ + UINT16 routeSum = 0U; /* · */ + UINT16 routeId = 0U; /* ID */ + UINT8 chRouteType = 0U;/*·*/ + UINT16 routeDCQRelayId = 0U; + UINT16 routeDCQRelayTwoId = 0U; + UINT8 routeDCQState = 0U; + UINT8 localCi = 0U; + UINT8 belongCi = 0U; - UINT8 localCi = 0u; - UINT8 belongCi = 0u; - - UINT8 reVal = CI_ERROR; - - localCi = GetSystemParaLocalCiId();/**/ routeSum = GetRouteCurSum(); + localCi = GetSystemParaLocalCiId();/**/ - for (ii = 0u; ii < routeSum; ii++) + for (ii = 0U; ii < routeSum; ii++) { routeId = GetRouteId(ii); - /*֤·id벻Ϊ0*/ - if (0u == routeId) + if ((0U < routeId) && (ROUTE_SUM_MAX > routeId)) { - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - - if (CI_SUCCESS == reVal) - {/*֤·Ϊ*/ + /*֤·Ϊ*/ belongCi = GetRouteBelongCiId(routeId); if (belongCi == localCi) { - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - } - } + routeDCQRelayId = GetRouteDCQJId(routeId); + routeDCQRelayTwoId = GetRouteDCQJTwoId(routeId); + chRouteType = GetRouteType(routeId); - if (CI_SUCCESS == reVal) - {/*·Ϊ·*/ - routeType = GetRouteType(routeId); - if (ROUTE_TYPE_DIAOCHE == routeType) - { - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - } - } + if ((0U < routeDCQRelayId) && (0U < routeDCQRelayTwoId) && (ROUTE_TYPE_DIAOCHE == chRouteType)) + { + routeDCQState = GetRouteDCQState(routeId); - if (CI_SUCCESS == reVal) - { - routeDCQState = GetRouteDCQState(routeId); - - routeDCQRelayId = GetRouteDCQJId(routeId); - - if (routeDCQRelayId > 0u) - {/*·̵id0u*/ - if (ROUTE_DCQ_REQUEST == routeDCQState) - {/*еõ̵Ϊ*/ - (void)SetRelayDriveState(routeDCQRelayId, RELAY_DRIVE_STATE_UP); + if (ROUTE_DCQ_REQUEST == routeDCQState) + { + /*еõ̵Ϊ*/ + (void)SetRelayDriveState(routeDCQRelayId, RELAY_DRIVE_STATE_UP); + (void)SetRelayDriveState(routeDCQRelayTwoId, RELAY_DRIVE_STATE_UP); + } + else + { + /*޵õ̵Ϊ*/ + (void)SetRelayDriveState(routeDCQRelayId, RELAY_DRIVE_STATE_DOWN); + (void)SetRelayDriveState(routeDCQRelayTwoId, RELAY_DRIVE_STATE_DOWN); + } } else - {/*޵õ̵Ϊ*/ - (void)SetRelayDriveState(routeDCQRelayId, RELAY_DRIVE_STATE_DOWN); + { + ; /*ûǵ·*/ } } + else + { + ; /*DZ·*/ + } + } + else + { + ; /**/ } - } + } /* @@ -11859,10 +11955,11 @@ UINT8 GetEsbCurNeedSetState(UINT16 esbId) UINT8 resultVal = CI_ERROR;/*ֵ*/ UINT8 curEsbDriveState = 0u; /*ǰesbؼ̵״̬*/ UINT16 bufIndex = 0U; /*±*/ + UINT8 cFuncRet = 0U; bufIndex = GetEsbConfigBufIndex(esbId); /*ȡ±*/ if (bufIndex < ESB_SUM_MAX) - { + { esbRelayId = GetEsbRelayId(esbId); esbRelayState = GetRelayCollState(esbRelayId); ESSRelayId = GetESSRelayId(esbId); @@ -11894,17 +11991,14 @@ UINT8 GetEsbCurNeedSetState(UINT16 esbId) else { /*ͣؼ̵ʱesb״ֻ̬esbɼ̵״̬*/ - if (RELAY_STATE_DOWN == esbRelayState) + cFuncRet = GetEsbCollTolerateRet(esbId); /*ȡESBɼ̽*/ + if (CI_SUCCESS == cFuncRet) { - resultVal = ESB_STATE_VALID_YES; /*esbɼ̵ʱЧ*/ - } - else if (RELAY_STATE_UP == esbRelayState) - { - resultVal = ESB_STATE_VALID_NO; /*esbɼ̵ʱЧ*/ + resultVal = ESB_STATE_VALID_NO; /*esbɼ̵δʱ䣬ؽЧ*/ } else { - resultVal = CI_ERROR; /*ڵֵʧܲesb״̬*/ + resultVal = ESB_STATE_VALID_YES; /*esbɼ̵ҳʱ󣬷ؽЧ*/ } } } @@ -11955,9 +12049,10 @@ void EsbRelateDelayDriveOutputProc(void) /*ESBDZ*/ if (localCiId == devBlongCiId) { - if (FUNC_SWITCH_ON == funcswitchZfsBtn) /*ԸʽESB̵*/ + if (FUNC_SWITCH_ON == funcswitchZfsBtn) { - /*ԸʽESB̵״̬*/ + /***** Ըʽ/·ESB̵ *****/ + /*1.ԸʽESB̵״̬*/ esbBuzzRelayId = GetEsbBuzzRelayId(esbId); if ((0u < esbBuzzRelayId) && (UINT16_MAX > esbBuzzRelayId)) { @@ -11978,7 +12073,7 @@ void EsbRelateDelayDriveOutputProc(void) } } - /*ԸʽESBг̵״̬*/ + /*2.ԸʽESBг̵״̬*/ esbCutoffBuzzRelayId = GetEsbCutoffBuzzRelayId(esbId); if ((0U < esbCutoffBuzzRelayId) && (UINT16_MAX > esbCutoffBuzzRelayId)) { @@ -11999,7 +12094,7 @@ void EsbRelateDelayDriveOutputProc(void) } } } - else /*ԸʽESB̵*/ + else /*ԸʽESBESB̵*/ { /*ȡ·ť״̬ESB״̬*/ esbCutState = GetEsbCutState(esbId); @@ -15016,7 +15111,6 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId) UINT8 switchCurPosition = 0u; UINT8 faultFlag = GetSwitchFaultState(switchId); /*ȡǷ忨*/ UINT16 switch2ndId = GetDSwitchOtherId(switchId); /*˫*/ - UINT32 TolerateCycNum = 0U; /*־ӡʹ*/ curCycNum = Get2oo2CurCycleNum(); chSwitchColPos = GetSwitchCollPos(switchId); @@ -15053,6 +15147,8 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId) /*ֹͣ*/ SetSwitchCollTolerateCycNum(switchId, 0u); } + switchCollTolerateCycNum = GetSwitchCollTolerateCycNum(switchId); + debug_infor_printf((const)"\n SwitchCollTolerate Sikai_Switch ID:%d, TolerateCycNumNum%d \n.", switchId, switchCollTolerateCycNum); } else { @@ -15065,8 +15161,6 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId) /*λã*/ SetSwitchCollTolerateCycNum(switchId, 0u); } - TolerateCycNum = GetSwitchCollTolerateCycNum(switchId); - debug_infor_printf((const)"\n SwitchCollTolerate Switch ID:%d, TolerateCycNumNum%d \n.", switchId, TolerateCycNum); switchCollTolerateCycNum = GetSwitchCollTolerateCycNum(switchId); timeState = SystemOverTimeCheck(switchCollTolerateCycNum, COLLTOLERATE_CYCNUM);/*2*/ if (CI_TIME_NO == timeState) /*δʱ*/ @@ -15080,6 +15174,7 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId) else { retPos = chSwitchColPos;/*ʱ*/ + SetSwitchCollTolerateCycNum(switchId, 0u); } return retPos; } @@ -15097,14 +15192,41 @@ UINT8 CheckSwitchCollTolerateState(UINT16 switchId) UINT8 phySecLockState = 0u; /*״̬*/ UINT8 switchLockStatus = 0u; /*״̬*/ UINT8 phySecJumpLockState = 0u; /*Ծ״̬*/ + UINT16 switchLogSum = 0U; /*߼*/ + UINT16* logSecBuf = NULL; + UINT8 chLogSecState = 0U; /*߼״̬*/ + UINT16 i = 0U; + UINT8 chSwithLogRouteLockCheck = CI_ERROR; /*߼Ƿ߼·*/ if((0U != switchId) && (switchId < SWITCH_SUM_MAX)) { switchPhySecId = GetSwitchPhySectionId(switchId); phySecLockState = GetPhySecLockState(switchPhySecId); phySecJumpLockState = GetPhySecJumpLockState(switchPhySecId); - switchLockStatus = GetSwitchLockStatus(switchId); - + switchLogSum = GetSwitchLogSecSum(switchId); + logSecBuf = GetSwitchLogSecBuf(switchId); + /*߼״̬*/ + if ((0U != switchLogSum)&&(NULL != logSecBuf)) + { + for (i = 0u; i < switchLogSum; i++) + { + /*߼߼״̬*/ + chLogSecState = GetLogSecLogLockState(logSecBuf[i]); + if (LOG_SECTION_LOGLOCK_NORMAL == chLogSecState) + { + chSwithLogRouteLockCheck = CI_SUCCESS; /*߼Ϊ߼*/ + break; + } + else + { + ; /**/ + } + } + } + else + { + chSwithLogRouteLockCheck = CI_ERROR; + } if ((PHYSICAL_SECTION_LOCK_NORMAL == phySecLockState) || (PHYSICAL_SECTION_LOCK_PROTECT == phySecLockState) @@ -15112,7 +15234,7 @@ UINT8 CheckSwitchCollTolerateState(UINT16 switchId) || (PHYSICAL_SECTION_JUMP_LOCK_YES == phySecJumpLockState) || (SWITCH_LOCK_STATUS_PROTECT == switchLockStatus) || (SWITCH_LOCK_STATUS_DAP == switchLockStatus) - ) + || (CI_SUCCESS == chSwithLogRouteLockCheck)) { /*||||ʱ||Ծ||*/ chRet = CI_SUCCESS; } @@ -15127,4 +15249,1197 @@ UINT8 CheckSwitchCollTolerateState(UINT16 switchId) } return chRet; +} + +/* +* ·ͣť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.28 +*/ +void EsbNXRailBtnProc(UINT16 esbId) +{ + UINT8 localCiId = 0U; /*ID*/ + UINT16 esbRelayId = 0u; /*esb̵ID*/ + UINT8 esbRelayBelongCiId = 0U; /*esbɼ̵CI*/ + UINT8 esbRelayCollState = 0U; /*esbťɼ̵״̬*/ + UINT16 bufIndex = 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ϵ忨״̬*/ + + bufIndex = GetEsbConfigBufIndex(esbId); + + if (bufIndex < ESB_SUM_MAX) + { + localCiId = GetSystemParaLocalCiId(); + esbRelayId = GetEsbRelayId(esbId); + esbRelayBelongCiId = GetRelayBelongCiId(esbRelayId); + if ((0U != localCiId) && (esbRelayBelongCiId == localCiId)) + { + esbRelayCollState = GetRelayCollState(esbRelayId); /*ȡESB̵ɼ״̬*/ + if (RELAY_STATE_UP == esbRelayCollState) + { + /*ESBδ¡ɼ̵άֵǰ״̬*/ + } + else + { + (void)SetEsbState(esbId, ESB_STATE_VALID_YES); /*ESBɼ̵£ť»忨ϻOCͨжϵµ£Ч*/ + + /** ̵£½رհťɼ̵״̬ **/ + wRelayBelongOcId = GetRelayBelongOCId(esbRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(esbRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(esbRelayId); /*ȡBϵ忨״̬*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*OCͨһϵ忨״̬ü̵*/ + SetEsbRelayDownState(esbId, ESB_RELAY_ERROR_DOWN_NO); + } + else + { + /*OCͨ쳣ϵ忨״̬ϣü̵ͨ쳣*/ + SetEsbRelayDownState(esbId, ESB_RELAY_ERROR_DOWN_YES); + } + } + } + else + { + /*̵ID/DZ*/ + } + } + else + { + /*󣬲*/ + } +} + +/* +* ·ͣȡť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.28 +*/ +void EsbNXRailCancelBtnProc(UINT16 esbId) +{ + UINT16 wEsbIdIndex = 0U; /*ESB±*/ + UINT16 cancelEsbRelayId = 0u; /*ȡesb̵ID*/ + UINT8 localCiId = 0U; /*ID*/ + UINT8 cancelEsbRelayBelongCiId = 0U; /*ȡesbɼ̵1CI*/ + UINT32 zfsBtnRelayCollCycNum = 0U; /*Ըʽť̵жϲɼЧ*/ + UINT32 zfsBtnRelayFaultCycNum = 0U; /*Ըʽť̵жϹ*/ + UINT32 zfsBtnRelayErrTriggerCycNum = 0U; /*Ըʽť̵ж󴥷*/ + UINT32 cancelEsbPressCycNum = 0U; /*ȡرհť*/ + UINT32 cancelEsbErrTriggerPressCycNum = 0U; /*ȡرհť󴥷*/ + UINT8 cancelEsbValidFlag = ESB_CANCEL_VALID_NO; /*ȡرհťЧ־*/ + UINT8 btnPressValidTime = CI_TIME_NO; /*ťʱǷﵽЧʱ*/ + UINT8 btnPressFaultTime = CI_TIME_NO; /*ťʱǷﵽʱ*/ + UINT8 btnPressErrTriggerTime = CI_TIME_NO; /*ťʱǷﵽ󴥷ʱ*/ + UINT16 wEsbRelayId = 0U; /*ESBɼ̵ID*/ + UINT8 cEsbRelayCollState = 0U; /*ESBɼ̵״̬*/ + UINT16 wEsbRelayBelongOcId = 0U; /*esbɼ̵OC*/ + UINT8 cEsbRelayDownState = ESB_RELAY_ERROR_DOWN_NO; /*رհť̵״̬*/ + + wEsbIdIndex = GetEsbConfigBufIndex(esbId); + + if (wEsbIdIndex < ESB_SUM_MAX) + { + cancelEsbRelayId = GetCancelEsbRelayId(esbId); + cancelEsbRelayBelongCiId = GetRelayBelongCiId(cancelEsbRelayId); + localCiId = GetSystemParaLocalCiId(); + + if ((0U != localCiId) && (localCiId == cancelEsbRelayBelongCiId)) + { + /***** 1.رȡť/󴥷ںͲɼ̵״̬ *****/ + EsbZfsCancelBtnPressStateProc(esbId, cancelEsbRelayId); + + /***** 2.رȡťЧ־ *****/ + EsbNXRailCancelBtnValidFlagProc(esbId, cancelEsbRelayId); + + /***** 3.״̬رȡťЧ־ *****/ + cancelEsbValidFlag = GetCancelEsbValidFlag(esbId); + cancelEsbPressCycNum = GetCancelEsbPressCycNum(esbId); + zfsBtnRelayCollCycNum = GetSelfButCollCount(); + btnPressValidTime = SystemOverTimeCheck(cancelEsbPressCycNum, zfsBtnRelayCollCycNum); + zfsBtnRelayFaultCycNum = GetSelfCancelButErrCount(); + btnPressFaultTime = SystemOverTimeCheck(cancelEsbPressCycNum, zfsBtnRelayFaultCycNum); + wEsbRelayId = GetEsbRelayId(esbId); + cEsbRelayCollState = GetRelayCollState(wEsbRelayId); /*ȡESB̵ɼ״̬*/ + wEsbRelayBelongOcId = GetRelayBelongOCId(wEsbRelayId); + cEsbRelayDownState = GetEsbRelayDownState(esbId); /*ȡťɼ̵״̬*/ + + if ((ESB_CANCEL_VALID_YES == cancelEsbValidFlag) && (CI_TIME_OUT == btnPressValidTime) && (CI_TIME_OUT != btnPressFaultTime)) + { + /*ȡرհťЧҰťʱﵽжϲɼЧʱδﵽжʱ䣬ýرЧȡرհťЧ*/ + (void)SetEsbState(esbId, ESB_STATE_VALID_NO); + SetCancelEsbValidFlag(esbId, ESB_CANCEL_VALID_NO); + } + else if ((RELAY_STATE_UP == cEsbRelayCollState) && (ESB_RELAY_ERROR_DOWN_YES == cEsbRelayDownState)) + { + /*OCʼͨŵڻ̵˫ϵ忨ָڣرհťýرЧ*/ + (void)SetEsbState(esbId, ESB_STATE_VALID_NO); + } + else + { + /**/ + } + + /***** 4.رȡťϱ־ *****/ + cancelEsbErrTriggerPressCycNum = GetCancelEsbErrTrigPressCycNum(esbId); /*ȡȡť󴥷*/ + zfsBtnRelayErrTriggerCycNum = GetSelfCancelButErrTriggerCount(); /*ȡԸʽȡť󴥷жʱ*/ + btnPressErrTriggerTime = SystemOverTimeCheck(cancelEsbErrTriggerPressCycNum, zfsBtnRelayErrTriggerCycNum); + + if ((CI_TIME_OUT == btnPressFaultTime) || (CI_TIME_OUT == btnPressErrTriggerTime)) + { + /*ȡťʱﵽжʱ󴥷ʱﵽ󴥷жʱ䣬ȡͣťϱ־*/ + SetCancelEsbErrFlag(esbId, ESB_ERROR_FLAG_YES); + } + else + { + SetCancelEsbErrFlag(esbId, ESB_ERROR_FLAG_NO); + } + } + else + { + /*̵ID/DZ*/ + } + } + else + { + /*󣬲*/ + } +} + +/* +* ·ͣȡťЧ־ +* ˵const UINT16 wEsbId ESB ID +* const UINT16 wCancelEsbRelayId ESBȡťɼ̵ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCancelBtnValidFlagProc(const UINT16 wEsbId, const UINT16 wCancelEsbRelayId) +{ + UINT16 wEsbIdIndex = 0U; /*ESB±*/ + UINT16 wRelayIdIndex = 0U; /*̵±*/ + UINT8 cEsbState = ESB_STATE_VALID_NO; /*ر״̬*/ + UINT16 wEsbRelayId = 0U; /*ESBɼ̵ID*/ + UINT8 cEsbRelayCollState = 0U; /*ESBɼ̵״̬*/ + UINT8 cCancelEsbRelayCollState = 0U; /*ESBȡťɼ̵״̬*/ + UINT8 cCancelEsbRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*ESBȡť̵״̬*/ + + wEsbIdIndex = GetEsbConfigBufIndex(wEsbId); + wRelayIdIndex = GetRelayConfigBufIndex(wCancelEsbRelayId); + + if ((wEsbIdIndex < ESB_SUM_MAX) && (wRelayIdIndex < RELAY_SUM_MAX)) + { + cEsbState = GetEsbState(wEsbId); /*ȡESB״̬*/ + wEsbRelayId = GetEsbRelayId(wEsbId); + cEsbRelayCollState = GetRelayCollState(wEsbRelayId); /*ȡESB̵ɼ״̬*/ + cCancelEsbRelayCollState = GetRelayCollState(wCancelEsbRelayId); /*ȡESBȡť̵ɼ״̬*/ + cCancelEsbRelayDownState = GetCancelEsbRelayDownState(wEsbId); /*ȡESBȡťɼ̵״̬*/ + + if ((ESB_STATE_VALID_YES == cEsbState) && (RELAY_STATE_UP == cEsbRelayCollState) + && (RELAY_STATE_DOWN == cCancelEsbRelayCollState) && (ESB_RELAY_ERROR_DOWN_NO == cCancelEsbRelayDownState)) + { + /*رЧҽرհťɼ̵ȡرհťɼ̵Ϊ£ȡرհťЧ*/ + SetCancelEsbValidFlag(wEsbId, ESB_CANCEL_VALID_YES); + } + else if ((RELAY_STATE_UP != cEsbRelayCollState) || (ESB_RELAY_ERROR_DOWN_NO != cCancelEsbRelayDownState)) + { + /*رհťɼ̵δȡťɼ̵״̬£ȡرհťЧ*/ + SetCancelEsbValidFlag(wEsbId, ESB_CANCEL_VALID_NO); + } + else + { + /**/ + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ·ͣ·ť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCutBtnProc(UINT16 esbId) +{ + UINT16 wEsbIdIndex = 0U; /*ESB±*/ + UINT16 wEsbCutRelayId = 0u; /*ر·ťɼ̵ID*/ + UINT8 localCiId = 0U; /*ID*/ + UINT8 EsbCutRelayBelongCiId = 0U; /*ر·ťɼ̵CI*/ + UINT8 cEsbState = ESB_STATE_VALID_NO; /*ر״̬*/ + UINT32 zfsBtnRelayCollCycNum = 0U; /*Ըʽť̵жϲɼЧ*/ + UINT32 zfsBtnRelayFaultCycNum = 0U; /*Ըʽť̵жϹ*/ + UINT32 zfsBtnRelayErrTriggerCycNum = 0U; /*Ըʽť̵ж󴥷*/ + UINT32 dwEsbCutPressCycNum = 0U; /*ر·ť*/ + UINT32 dwEsbCutErrTriggerPressCycNum = 0U; /*ر·ť󴥷*/ + UINT8 btnPressValidTime = CI_TIME_NO; /*ťʱǷﵽЧʱ*/ + UINT8 btnPressFaultTime = CI_TIME_NO; /*ťʱǷﵽʱ*/ + UINT8 btnPressErrTriggerTime = CI_TIME_NO; /*ťʱǷﵽ󴥷ʱ*/ + + wEsbIdIndex = GetEsbConfigBufIndex(esbId); + + if (wEsbIdIndex < ESB_SUM_MAX) + { + wEsbCutRelayId = GetEsbCutRelayId(esbId); + EsbCutRelayBelongCiId = GetRelayBelongCiId(wEsbCutRelayId); + localCiId = GetSystemParaLocalCiId(); + if ((0U != localCiId) && (localCiId == EsbCutRelayBelongCiId)) + { + /***** 1.ر·ť/󴥷ںͲɼ̵״̬ *****/ + EsbNXRailCutBtnPressStateProc(esbId, wEsbCutRelayId); + + /***** 2.ر·ť·״̬ *****/ + cEsbState = GetEsbState(esbId); /*ȡESB״̬*/ + dwEsbCutPressCycNum = GetEsbCutPressCycNum(esbId); + zfsBtnRelayCollCycNum = GetSelfButCollCount(); + btnPressValidTime = SystemOverTimeCheck(dwEsbCutPressCycNum, zfsBtnRelayCollCycNum); + zfsBtnRelayFaultCycNum = GetSelfCancelButErrCount(); + btnPressFaultTime = SystemOverTimeCheck(dwEsbCutPressCycNum, zfsBtnRelayFaultCycNum); + + if ((ESB_STATE_VALID_YES == cEsbState) && (CI_TIME_OUT == btnPressValidTime) && (CI_TIME_OUT != btnPressFaultTime)) + { + /*Чҽر·ťʱﵽжϲɼЧʱδﵽжʱ䣬·Ч*/ + SetEsbCutState(esbId, ESB_CUT_YES); + } + else + { + SetEsbCutState(esbId, ESB_CUT_NO); /*·Ч*/ + } + + /***** 3.ر·ťϱ־ *****/ + dwEsbCutErrTriggerPressCycNum = GetEsbCutErrTrigPressCycNum(esbId); /*ȡ·ť󴥷*/ + zfsBtnRelayErrTriggerCycNum = GetSelfCancelButErrTriggerCount(); /*ȡԸʽȡť󴥷жʱ*/ + btnPressErrTriggerTime = SystemOverTimeCheck(dwEsbCutErrTriggerPressCycNum, zfsBtnRelayErrTriggerCycNum); + + if ((CI_TIME_OUT == btnPressFaultTime) || (CI_TIME_OUT == btnPressErrTriggerTime)) + { + /*·ťʱﵽжʱ󴥷ʱﵽ󴥷жʱ䣬ýر·ťϱ־Ч*/ + SetEsbCutErrFlag(esbId, ESB_ERROR_FLAG_YES); + } + else + { + SetEsbCutErrFlag(esbId, ESB_ERROR_FLAG_NO); + } + } + else + { + /*̵ID/DZ*/ + } + } + else + { + /*󣬲*/ + } +} + +/* +* ·ͣ·ť״̬ +* ˵const UINT16 wEsbId ESB ID +* const UINT16 wCutEsbRelayId ·ťɼ̵ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCutBtnPressStateProc(const UINT16 wEsbId, const UINT16 wCutEsbRelayId) +{ + UINT16 wEsbIdIndex = 0U; /*ESB±*/ + UINT16 wRelayIdIndex = 0U; /*̵±*/ + UINT8 cCutRelayCollState = 0U; /*·ťɼ̵״̬*/ + UINT8 cEsbState = ESB_STATE_VALID_NO; /*ر״̬*/ + UINT8 cCutRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*ر·ť̵״̬*/ + UINT32 dwCutBtnPressCycNum = 0U; /*ر·ť*/ + UINT32 dwBtnErrTrigPressCycNum = 0U; /*ť󴥷*/ + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + + wEsbIdIndex = GetEsbConfigBufIndex(wEsbId); + wRelayIdIndex = GetRelayConfigBufIndex(wCutEsbRelayId); + + if ((wEsbIdIndex < ESB_SUM_MAX) && (wRelayIdIndex < RELAY_SUM_MAX)) + { + cCutRelayCollState = GetRelayCollState(wCutEsbRelayId); /*ȡ·ť̵ɼ״̬*/ + + if (RELAY_STATE_UP == cCutRelayCollState) + { + /** ̵𣬸½ر·ť/󴥷 **/ + cEsbState = GetEsbState(wEsbId); /*ȡESB״̬*/ + cCutRelayDownState = GetEsbCutRelayDownState(wEsbId); /*ȡ·ťɼ̵״̬*/ + dwCutBtnPressCycNum = GetEsbCutPressCycNum(wEsbId); /*ȡ·ť*/ + dwBtnErrTrigPressCycNum = GetEsbCutErrTrigPressCycNum(wEsbId); /*ȡ·ť󴥷*/ + dwCurCycNum = Get2oo2CurCycleNum(); + + if ((ESB_STATE_VALID_YES == cEsbState) && (ESB_RELAY_ERROR_DOWN_NO == cCutRelayDownState)) + { + /*Ч֮ǰر·ťɼ̵״̬OCͨҰ忨״̬½ر·ť*/ + if ((0U == dwCutBtnPressCycNum) && (0U == dwBtnErrTrigPressCycNum)) + { + SetEsbCutPressCycNum(wEsbId, dwCurCycNum); /*º󴥷²ͬʱ*/ + } + else + { + /**/ + } + } + else + { + /*Ч֮ǰر·ťɼ̵δ״̬OCͨжϻ˫ϵ忨״̬쳣½ر·ť󴥷*/ + if ((0U == dwCutBtnPressCycNum) && (0U == dwBtnErrTrigPressCycNum)) + { + SetEsbCutErrTrigPressCycNum(wEsbId, dwCurCycNum); /*º󴥷²ͬʱ*/ + } + else + { + /**/ + } + } + } + else + { + /** ̵£½ر·ťɼ̵״̬ **/ + wRelayBelongOcId = GetRelayBelongOCId(wCutEsbRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCutEsbRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCutEsbRelayId); /*ȡBϵ忨״̬*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*OCͨһϵ忨״̬ü̵*/ + SetEsbCutRelayDownState(wEsbId, ESB_RELAY_ERROR_DOWN_NO); + } + else + { + /*OCͨ쳣ϵ忨״̬ϣü̵ͨ쳣*/ + SetEsbCutRelayDownState(wEsbId, ESB_RELAY_ERROR_DOWN_YES); + } + + /** ̵£ر·ťں󴥷 **/ + SetEsbCutPressCycNum(wEsbId, 0U); + SetEsbCutErrTrigPressCycNum(wEsbId, 0U); + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ·ESBָʾƺESB·ָʾ +* ˵const UINT16 wEsbId ESB ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailDisplayDrivOutput(const UINT16 wEsbId) +{ + UINT16 esbDisplayRelayId = 0U; /*esbָʾƼ̵ID*/ + UINT16 esbPlatformDisRelayId = 0U; /*esbվָ̨ʾƼ̵ID*/ + UINT16 cutEsbDisplayId = 0U; /*esb·ָʾƼ̵ID*/ + UINT8 chLocalCiId = 0U; /*ID*/ + UINT8 devBlongCiId = 0U; /*豸ID*/ + UINT8 esbState = ESB_STATE_VALID_NO; /*ر״̬*/ + UINT16 bufIndex = 0U; /*±*/ + UINT8 cEsbCutState = 0U; /*ESB·״̬*/ + + chLocalCiId = GetSystemParaLocalCiId(); /*ȡID*/ + devBlongCiId = GetEsbBelongCiId(wEsbId); /*ȡ豸ID*/ + + if ((0U != chLocalCiId) && (chLocalCiId == devBlongCiId)) + { + esbState = GetEsbState(wEsbId); + cEsbCutState = GetEsbCutState(wEsbId); + /*ESBָʾ״̬*/ + esbDisplayRelayId = GetEsbDisRelayId(wEsbId); /*esb IDȡesbָʾID*/ + bufIndex = GetRelayConfigBufIndex(esbDisplayRelayId); /*ȡ̵±*/ + if (RELAY_SUM_MAX > bufIndex) + { + if ((ESB_STATE_VALID_YES == esbState) && (ESB_CUT_NO == cEsbCutState)) + { + (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_UP); /*·ЧESBָʾ*/ + } + else + { + (void)SetRelayDriveState(esbDisplayRelayId, RELAY_STATE_DOWN); /*δ·ЧESBָʾ*/ + } + } + else + { + /*ûESBָʾƣ*/ + } + + /*ESBվָ̨ʾ״̬*/ + esbPlatformDisRelayId = GetEsbPlatformDisRelayId(wEsbId); /*esb IDȡesbվָ̨ʾƼ̵ID*/ + bufIndex = GetRelayConfigBufIndex(esbPlatformDisRelayId); /*ȡ̵±*/ + if (RELAY_SUM_MAX > bufIndex) + { + /*ESBָʾ״̬*/ + if ((ESB_STATE_VALID_YES == esbState) && (ESB_CUT_NO == cEsbCutState)) + { + (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_UP); /*·ЧESBվָ̨ʾ*/ + } + else + { + (void)SetRelayDriveState(esbPlatformDisRelayId, RELAY_STATE_DOWN); /*δ·ЧESBվָ̨ʾ*/ + } + } + else + { + /*ûESBվָ̨ʾƣ*/ + } + + cutEsbDisplayId = GetEsbCutDisRelayId(wEsbId); /*esb IDȡesb·ָʾID*/ + bufIndex = GetRelayConfigBufIndex(cutEsbDisplayId); /*ȡ̵±*/ + if (RELAY_SUM_MAX > bufIndex) + { + if (ESB_CUT_YES == cEsbCutState) + { + (void)SetRelayDriveState(cutEsbDisplayId, RELAY_STATE_UP); /*·Чָʾ*/ + } + else + { + (void)SetRelayDriveState(cutEsbDisplayId, RELAY_STATE_DOWN); /*·Чָʾ*/ + } + } + else + { + /*û·ťָʾƼ̵*/ + } + } + else + { + /*DZ豸*/ + } +} + +/* +* 쳣򿪴 +* ˵ +* ֵ +* Created By LQ 2025.05.23 +*/ +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; /*վ̨ںռ״̬*/ + + wPsdCurNum = GetPsdSum(); + for (ii = 0U; ii < wPsdCurNum; ii++) + { + wPsdId = GetPsdId(ii); + cPsdVirtualAttr = GetPsdVirtualAttribute(wPsdId); /*ȡPSD*/ + if (PSD_VIRTUAL_ATTR_NO == cPsdVirtualAttr) + { + 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쳣*/ + } + else + { + SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*PSDδ쳣*/ + } + } + else + { + SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*PSDδ쳣*/ + } + } + else + { + SetPsdExceptOpenState(wPsdId, PSD_EXCEPT_OPEN_NO); /*PSDPSDδ쳣*/ + } + } +} + +/* +* Ըʽ۳·ť +* ˵const UINT16 signalId źŻID +* ֵ +* Created By LQ 2025.06.20 +*/ +void SignalZfsDetainCutBtnPro(const UINT16 signalId) +{ + UINT16 wSignalIdIndex = 0U; /*źŻ±*/ + UINT16 wDetCutBtnRelayId = 0U; /*۳·ťɼ̵ID*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cDetCutRelayBelongCiId = 0U; /*۳·ťɼ̵CI*/ + UINT32 dwDetCutBtnPressCycNum = 0U; /*۳·ť*/ + UINT32 dwZfsCutBtnFaultCycNum = 0U; /*Ըʽ۳·ťж*/ + UINT8 cBtnFaultTimeFlag = CI_TIME_NO; /*ťʱǷﵽʱ*/ + UINT32 dwDetCutErrTrigPressCycNum = 0U; /*۳·ť󴥷*/ + UINT32 dwZfsCutBtnErrTrigCycNum = 0U; /*Ըʽ۳·ť󴥷ж*/ + UINT8 cBtnErrTrigTimeFlag = CI_TIME_NO; /*ťʱǷﵽ󴥷ʱ*/ + UINT8 cDetCutBtnState = 0U; /*۳·ť״̬*/ + + wSignalIdIndex = GetSignalConfigBufIndex(signalId); + + if (SIGNAL_SUM_MAX > wSignalIdIndex) + { + wDetCutBtnRelayId = GetSignalDetainCutRelayId(signalId); + cDetCutRelayBelongCiId = GetRelayBelongCiId(wDetCutBtnRelayId); + cLocalCiId = GetSystemParaLocalCiId(); + + if ((cLocalCiId == cDetCutRelayBelongCiId) && (0U != cLocalCiId)) + { + /***** 1.۳·ť/󴥷ںͲɼ̵״̬ *****/ + ZfsDetCutBtnPressStateProc(signalId, wDetCutBtnRelayId); + + /***** 2.۳·ťϱ־ *****/ + dwDetCutBtnPressCycNum = GetDetCutBtnPressCycNum(signalId); + dwZfsCutBtnFaultCycNum = GetSelfCancelButErrCount(); + cBtnFaultTimeFlag = SystemOverTimeCheck(dwDetCutBtnPressCycNum, dwZfsCutBtnFaultCycNum); /*жϿ۳·ťʱǷﵽʱ*/ + dwDetCutErrTrigPressCycNum = GetDetCutBtnErrTrigPressCycNum(signalId); + dwZfsCutBtnErrTrigCycNum = GetSelfCancelButErrTriggerCount(); + cBtnErrTrigTimeFlag = SystemOverTimeCheck(dwDetCutErrTrigPressCycNum, dwZfsCutBtnErrTrigCycNum); /*жϿ۳·ť󴥷ʱǷﵽ󴥷ʱ*/ + + if ((CI_TIME_OUT == cBtnFaultTimeFlag) || (CI_TIME_OUT == cBtnErrTrigTimeFlag)) + { + /*۳·ʱﵽжϹЧʱ۳·ť󴥷ʱﵽж󴥷Чʱ䣬ÿ۳·ťϱ־Ч*/ + SetSignalDetCutBtnErrFlag(signalId, SIGNAL_ZFS_BTN_ERR_FLAG_YES); + } + else + { + SetSignalDetCutBtnErrFlag(signalId, SIGNAL_ZFS_BTN_ERR_FLAG_NO); /*ÿ۳·ťϱ־Ч*/ + } + + /***** 3.۳·ťЧ״̬ *****/ + ZfsDetCutBtnValidStateProc(signalId, wDetCutBtnRelayId); + + /***** 4.·ť״̬ˢ¿۳ť־ *****/ + cDetCutBtnState = GetDetCutBtnState(signalId); + if (SIGNAL_DETAIN_CUT_VALID_YES == cDetCutBtnState) + { + /*۳·ťЧÿ۳ť־Ч*/ + SetSignalDetainBtnActFlag(signalId, SIGNAL_ZFS_BTN_ACT_FLAG_NO); + } + else + { + /*۳·ťЧ*/ + } + } + else + { + /*DZ*/ + } + } + else + { + /*ηǷ*/ + } +} + +/* +* Ըʽ۳·ť״̬ +* ˵const UINT16 wSignalId źŻID +* const UINT16 wDetCutBtnRelayId ۳·ťɼ̵ID +* ֵ +* Created By LQ 2025.06.20 +*/ +void ZfsDetCutBtnPressStateProc(const UINT16 wSignalId, const UINT16 wDetCutBtnRelayId) +{ + UINT16 wSignalIdIndex = 0U; /*źŻ±*/ + UINT16 wRelayIdIndex = 0U; /*̵±*/ + UINT8 cDetCutRelayCollState = 0U; /*۳·ťɼ̵״̬*/ + UINT8 cDetainBtnActFlag = SIGNAL_ZFS_BTN_ACT_FLAG_NO; /*۳ť־*/ + UINT8 cDetButErrorFlag = 0U; /*۳ťϱ־*/ + UINT8 cDetCancelBtnErrorFlag = 0U; /*۳ȡťϱ־*/ + UINT8 cDetCutRelayDownState = SIGNAL_RELAY_ERROR_DOWN_YES; /*۳·ťɼ̵״̬*/ + UINT32 dwDetCutBtnPressCycNum = 0U; /*۳·ť*/ + UINT32 dwDetCutErrTrigPressCycNum = 0U; /*۳·ť󴥷*/ + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + + wSignalIdIndex = GetSignalConfigBufIndex(wSignalId); + wRelayIdIndex = GetRelayConfigBufIndex(wDetCutBtnRelayId); + + if ((SIGNAL_SUM_MAX > wSignalIdIndex) && (RELAY_SUM_MAX > wRelayIdIndex)) + { + cDetCutRelayCollState = GetRelayCollState(wDetCutBtnRelayId); /*ȡ۳·ť̵ɼ״̬*/ + + if (RELAY_STATE_UP == cDetCutRelayCollState) + { + /** ̵𣬸¿۳·ť/󴥷 **/ + cDetainBtnActFlag = GetSignalDetainBtnActFlag(wSignalId); + cDetButErrorFlag = GetSignalDetainBtnErrFlag(wSignalId); /*ȡ۳ťϱ־*/ + cDetCancelBtnErrorFlag = GetSignalCancelDetainBtnErrFlag(wSignalId); /*ȡ۳ȡťϱ־*/ + cDetCutRelayDownState = GetDetCutBtnRelayDownState(wSignalId); /*ȡ۳·ťɼ̵״̬*/ + dwDetCutBtnPressCycNum = GetDetCutBtnPressCycNum(wSignalId); /*ȡ۳·ťʱ*/ + dwDetCutErrTrigPressCycNum = GetDetCutBtnErrTrigPressCycNum(wSignalId); /*ȡ۳·ť󴥷ʱ*/ + dwCurCycNum = Get2oo2CurCycleNum(); + + if ((SIGNAL_ZFS_BTN_ACT_FLAG_YES == cDetainBtnActFlag) && ((SIGNAL_ZFS_BTN_ERR_FLAG_YES == cDetButErrorFlag) || (SIGNAL_ZFS_BTN_ERR_FLAG_YES == cDetCancelBtnErrorFlag)) + && (SIGNAL_RELAY_ERROR_DOWN_NO == cDetCutRelayDownState)) + { + /** ۳ť־Чң۳ťϻ۳ȡťϣڿ۳·ťɼ̵״̬Ϊ£OCͨҴһϵ忨״̬¿۳·ťʱ **/ + if ((0U == dwDetCutBtnPressCycNum) && (0U == dwDetCutErrTrigPressCycNum)) + { + SetDetCutBtnPressCycNum(wSignalId, dwCurCycNum); /*ÿ۳·ťʱΪڣ󴥷²ͬʱڣ*/ + } + else + { + /**/ + } + } + else + { + /** ۳ť־Чڿ۳·ťɼ̵״̬£OCͨжϻϵ忨״̬ϣ¿۳·ť󴥷ʱ **/ + if ((0U == dwDetCutBtnPressCycNum) && (0U == dwDetCutErrTrigPressCycNum)) + { + SetDetCutBtnErrTrigPressCycNum(wSignalId, dwCurCycNum); /*ÿ۳·ť󴥷ʱΪڣ󴥷²ͬʱڣ*/ + } + else + { + /**/ + } + } + } + else + { + /** ̵£¿۳·ťɼ̵״̬ **/ + wRelayBelongOcId = GetRelayBelongOCId(wDetCutBtnRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wDetCutBtnRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wDetCutBtnRelayId); /*ȡBϵ忨״̬*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState))) + { + /*OCͨһϵ忨״̬ü̵*/ + SetDetCutBtnRelayDownState(wSignalId, SIGNAL_RELAY_ERROR_DOWN_NO); + } + else + { + /*OCͨ쳣ϵ忨״̬ϣü̵ͨ쳣*/ + SetDetCutBtnRelayDownState(wSignalId, SIGNAL_RELAY_ERROR_DOWN_YES); + } + + /** ̵£۳·ťں󴥷 **/ + SetDetCutBtnPressCycNum(wSignalId, 0U); + SetDetCutBtnErrTrigPressCycNum(wSignalId, 0U); + } + } + else + { + /*ηǷ*/ + } +} + +/* +* Ըʽ۳·ťЧ״̬ +* ˵const UINT16 wSignalId źŻID +* const UINT16 wDetCutBtnRelayId ۳·ťɼ̵ID +* ֵ +* Created By LQ 2025.06.20 +*/ +void ZfsDetCutBtnValidStateProc(const UINT16 wSignalId, const UINT16 wDetCutBtnRelayId) +{ + UINT16 wSignalIdIndex = 0U; /*źŻ±*/ + UINT16 wRelayIdIndex = 0U; /*̵±*/ + UINT32 dwCycNum = 0U; + UINT32 dwDetCutBtnPressCycNum = 0U; /*۳·ť*/ + UINT32 dwZfsBtnValidCycNum = 0U; /*ԸʽťЧж*/ + UINT8 cDetainBtnActFlag = SIGNAL_ZFS_BTN_ACT_FLAG_NO; /*۳ť־*/ + UINT8 cDetButErrorFlag = 0U; /*۳ťϱ־*/ + UINT8 cDetCancelBtnErrorFlag = 0U; /*۳ȡťϱ־*/ + UINT32 dwDetBtnPressCycNum = 0U; /*۳ť*/ + UINT8 cDetCutRelayDownState = SIGNAL_RELAY_ERROR_DOWN_YES; /*۳·ťɼ̵״̬*/ + UINT8 cDetCutBtnErrorFlag = SIGNAL_ZFS_BTN_ERR_FLAG_NO; /*۳·ťϱ־*/ + + wSignalIdIndex = GetSignalConfigBufIndex(wSignalId); + wRelayIdIndex = GetRelayConfigBufIndex(wDetCutBtnRelayId); + + if ((SIGNAL_SUM_MAX > wSignalIdIndex) && (RELAY_SUM_MAX > wRelayIdIndex)) + { + /**** 1.۳·ťЧ״̬ж ****/ + dwCycNum = Get2oo2CurCycleNum(); + dwDetCutBtnPressCycNum = GetDetCutBtnPressCycNum(wSignalId); + dwZfsBtnValidCycNum = GetSelfButCollCount(); + + if ((0U < dwDetCutBtnPressCycNum) && ((dwCycNum - dwDetCutBtnPressCycNum) == (dwZfsBtnValidCycNum + 1U))) + { + /*³ʱڣÿ۳·ťЧΪ֤·Чڴ˲áʱðťЧķ*/ + SetDetCutBtnState(wSignalId, SIGNAL_DETAIN_CUT_VALID_YES); + } + else + { + /**/ + } + + /**** 2.۳·ťЧ״̬ж ****/ + cDetainBtnActFlag = GetSignalDetainBtnActFlag(wSignalId); /*ȡ۳ť־*/ + cDetButErrorFlag = GetSignalDetainBtnErrFlag(wSignalId); /*ȡ۳ťϱ־*/ + cDetCancelBtnErrorFlag = GetSignalCancelDetainBtnErrFlag(wSignalId); /*ȡ۳ȡťϱ־*/ + dwDetBtnPressCycNum = GetDetainBtnPressCycNum(wSignalId); /*ȡ۳ťʼ*/ + cDetCutRelayDownState = GetDetCutBtnRelayDownState(wSignalId); /*ȡ۳·ťɼ̵״̬*/ + cDetCutBtnErrorFlag = GetSignalDetCutBtnErrFlag(wSignalId); /*ȡ۳·ťϱ־*/ + + if (((SIGNAL_ZFS_BTN_ACT_FLAG_YES != cDetainBtnActFlag) && (SIGNAL_ZFS_BTN_ERR_FLAG_YES != cDetButErrorFlag) && (SIGNAL_ZFS_BTN_ERR_FLAG_YES != cDetCancelBtnErrorFlag)) + || ((0U < dwDetCutBtnPressCycNum) && (dwDetBtnPressCycNum >= dwDetCutBtnPressCycNum)) + || (SIGNAL_RELAY_ERROR_DOWN_NO != cDetCutRelayDownState) + || (SIGNAL_ZFS_BTN_ERR_FLAG_NO != cDetCutBtnErrorFlag)) + { + /* ۳ťδң۳ťͿ۳ȡťδϣ + ۳ťڴڵ·ť + ·ťɼ̵ + ·ť + ÿ۳·ťЧ*/ + SetDetCutBtnState(wSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } + else + { + /**/ + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ȡSPKSťɼ̽ +* ˵const UINT16 wSpksId SPKS +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetSpksBtnCollTolerateRet(const UINT16 wSpksId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wDevIdIndex = 0U; /*ID*/ + UINT16 wCollRelayId = 0U; /*ɼ̵ID*/ + UINT8 cCollState = 0U; /*̵ɼ״̬*/ + UINT32 dwSpksBtnPressCycNum = 0U; /*SPKSťʼ*/ + UINT32 dwTempOcCollTolerateCount = 0U; + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + UINT8 cBoardType = 0U; /*̵忨*/ + UINT8 cTimeCheckFlag = 0U; + + wDevIdIndex = GetSpksConfigBufIndex(wSpksId); + + if (SPKS_SUM_MAX > wDevIdIndex) + { + wCollRelayId = GetSpksColRelayId(wSpksId); /*ȡSPKSɼ̵ID*/ + cCollState = GetRelayCollState(wCollRelayId); /*ȡSPKSɼ̵״̬*/ + if (RELAY_STATE_UP == cCollState) + { + /*SPKSɼ̵SPKSťʼΪ0*/ + SetSpksPressCycNum(wSpksId, 0U); + cRetVal = CI_SUCCESS; + } + else + { + dwSpksBtnPressCycNum = GetSpksPressCycNum(wSpksId); /*ȡSPKSťʼں*/ + if (0U == dwSpksBtnPressCycNum) + { + dwCurCycNum = Get2oo2CurCycleNum(); + SetSpksPressCycNum(wSpksId, dwCurCycNum); /*õǰΪSPKSťʼں*/ + } + else + { + /*SPKSťʼںţ*/ + } + + wRelayBelongOcId = GetRelayBelongOCId(wCollRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCollRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCollRelayId); /*ȡBϵ忨״̬*/ + cBoardType = GetRelayBoardType(wCollRelayId); /*ȡ̵忨*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState)) && (RELAY_SI_BOARD == cBoardType)) + { + /*OCͨһϵ忨״̬Ϊɢ壬жǷ񳬹ʱ*/ + dwSpksBtnPressCycNum = GetSpksPressCycNum(wSpksId); /*ȡSPKSťʼں*/ + dwTempOcCollTolerateCount = GetOcCollTolerateCount(); + cTimeCheckFlag = SystemOverOrEqualTimeCheck(dwSpksBtnPressCycNum, dwTempOcCollTolerateCount); /*жSPKSťʱǷﵽʱ*/ + if (CI_TIME_OUT != cTimeCheckFlag) + { + cRetVal = CI_SUCCESS; /*δʱҪ*/ + } + else + { + cRetVal = CI_ERROR; /*ʱҪ*/ + } + } + else + { + /*OCͨ쳣ϵ忨״̬ϻ̵ɢ壬0*/ + cRetVal = CI_ERROR; + } + } + } + else + { + cRetVal = CI_ERROR; /*ηǷ0*/ + } + + return cRetVal; +} + +/* +* ȡPsdſ̵ɼ̽ +* ˵const UINT16 wPsdId PSD +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetPsdRelayCollTolerateRet(const UINT16 wPsdId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wDevIdIndex = 0U; /*ID*/ + UINT16 wCollRelayId = 0U; /*ɼ̵ID*/ + UINT8 cCollState = 0U; /*̵ɼ״̬*/ + UINT32 dwRelayDownCycNum = 0U; /*PSDſ̵ʼ*/ + UINT32 dwTempOcCollTolerateCount; + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + UINT8 cBoardType = 0U; /*̵忨*/ + UINT8 cTimeCheckFlag = 0U; + + wDevIdIndex = GetPsdConfigBufIndex(wPsdId); + + if (PSD_SUM_MAX > wDevIdIndex) + { + wCollRelayId = GetPsdStateRelayId(wPsdId); /*ȡPSDſ̵ID*/ + cCollState = GetRelayCollState(wCollRelayId); /*ȡPSDſ̵״̬*/ + if (RELAY_STATE_UP == cCollState) + { + /*PSDſ̵PSDſ̵ʼΪ0*/ + SetPsdRelayDownCycNum(wPsdId, 0U); + cRetVal = CI_SUCCESS; + } + else + { + dwRelayDownCycNum = GetPsdRelayDownCycNum(wPsdId); /*ȡPSDſ̵ʼں*/ + if (0U == dwRelayDownCycNum) + { + dwCurCycNum = Get2oo2CurCycleNum(); + SetPsdRelayDownCycNum(wPsdId, dwCurCycNum); /*õǰΪPSDſ̵ʼں*/ + } + else + { + /*PSDſ̵ʼںţ*/ + } + + wRelayBelongOcId = GetRelayBelongOCId(wCollRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCollRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCollRelayId); /*ȡBϵ忨״̬*/ + cBoardType = GetRelayBoardType(wCollRelayId); /*ȡ̵忨*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState)) && (RELAY_SI_BOARD == cBoardType)) + { + /*OCͨһϵ忨״̬Ϊɢ壬жǷ񳬹ʱ*/ + dwRelayDownCycNum = GetPsdRelayDownCycNum(wPsdId); /*ȡPSDſ̵ʼں*/ + dwTempOcCollTolerateCount = GetOcCollTolerateCount(); + cTimeCheckFlag = SystemOverOrEqualTimeCheck(dwRelayDownCycNum, dwTempOcCollTolerateCount); /*жPSDſ̵ʱǷﵽʱ*/ + if (CI_TIME_OUT != cTimeCheckFlag) + { + cRetVal = CI_SUCCESS; /*δʱҪ*/ + } + else + { + cRetVal = CI_ERROR; /*ʱҪ*/ + } + } + else + { + /*OCͨ쳣ϵ忨״̬ϻ̵ɢ壬0*/ + cRetVal = CI_ERROR; + } + } + } + else + { + cRetVal = CI_ERROR; /*ηǷ0*/ + } + + return cRetVal; +} + +/* +* ȡEsbɼ̽ +* ˵const UINT16 wEsbId ESB +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetEsbCollTolerateRet(const UINT16 wEsbId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wDevIdIndex = 0U; /*ID*/ + UINT16 wCollRelayId = 0U; /*ɼ̵ID*/ + UINT8 cCollState = 0U; /*̵ɼ״̬*/ + UINT32 dwEsbPressCycNum = 0U; /*ESBʼ*/ + UINT32 dwTempOcCollTolerateCount = 0U; + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + UINT8 cBoardType = 0U; /*̵忨*/ + UINT8 cTimeCheckFlag = 0U; + + wDevIdIndex = GetEsbConfigBufIndex(wEsbId); + + if (ESB_SUM_MAX > wDevIdIndex) + { + wCollRelayId = GetEsbRelayId(wEsbId); /*ȡESBɼ̵ID*/ + cCollState = GetRelayCollState(wCollRelayId); /*ȡESBɼ̵״̬*/ + if (RELAY_STATE_UP == cCollState) + { + /*ESBɼ̵ESBʼΪ0*/ + SetEsbPressCycNum(wEsbId, 0U); + cRetVal = CI_SUCCESS; + } + else + { + dwEsbPressCycNum = GetEsbPressCycNum(wEsbId); /*ȡESBʼں*/ + if (0U == dwEsbPressCycNum) + { + dwCurCycNum = Get2oo2CurCycleNum(); + SetEsbPressCycNum(wEsbId, dwCurCycNum); /*õǰΪESBʼں*/ + } + else + { + /*ESBʼںţ*/ + } + + wRelayBelongOcId = GetRelayBelongOCId(wCollRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCollRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCollRelayId); /*ȡBϵ忨״̬*/ + cBoardType = GetRelayBoardType(wCollRelayId); /*ȡ̵忨*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState)) && (RELAY_SI_BOARD == cBoardType)) + { + /*OCͨһϵ忨״̬Ϊɢ壬жǷ񳬹ʱ*/ + dwEsbPressCycNum = GetEsbPressCycNum(wEsbId); /*ȡESBʼں*/ + dwTempOcCollTolerateCount = GetOcCollTolerateCount(); + cTimeCheckFlag = SystemOverOrEqualTimeCheck(dwEsbPressCycNum, dwTempOcCollTolerateCount); /*жESBʱǷﵽʱ*/ + if (CI_TIME_OUT != cTimeCheckFlag) + { + cRetVal = CI_SUCCESS; /*δʱҪ*/ + } + else + { + cRetVal = CI_ERROR; /*ʱҪ*/ + } + } + else + { + /*OCͨ쳣ϵ忨״̬ϻ̵ɢ壬0*/ + cRetVal = CI_ERROR; + } + } + } + else + { + cRetVal = CI_ERROR; /*ηǷ0*/ + } + + return cRetVal; +} + +/* +* ȡ۳ť1ɼ̽ +* ˵const UINT16 wSignalId źŻ +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetFstDetBtnCollTolerateRet(const UINT16 wSignalId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wDevIdIndex = 0U; /*ID*/ + UINT16 wCollRelayId = 0U; /*ɼ̵ID*/ + UINT8 cCollState = 0U; /*̵ɼ״̬*/ + UINT8 cDetValidFlag = 0U; + UINT32 dwDetBtnPressCycNum = 0U; /*۳ťʼ*/ + UINT32 dwTempOcCollTolerateCount = 0U; + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + UINT8 cBoardType = 0U; /*̵忨*/ + UINT8 cTimeCheckFlag = 0U; + + wDevIdIndex = GetSignalConfigBufIndex(wSignalId); + + if (SIGNAL_SUM_MAX > wDevIdIndex) + { + wCollRelayId = GetSignalDetainRelayId(wSignalId); /*ȡ۳ťɼ̵ID*/ + cCollState = GetRelayCollState(wCollRelayId); /*ȡ۳ťɼ̵״̬*/ + cDetValidFlag = GetCiFunctionSwitchConfig(FUNC_RELAY_DETAIN_VALID_FLAG); /*ȡӲ߿۳Ч־*/ + + if (((UP_VALID == cDetValidFlag) && (RELAY_STATE_DOWN == cCollState)) || ((DOWN_VALID == cDetValidFlag) && (RELAY_STATE_UP == cCollState))) + { + /*۳ţ̌ÿ۳ťʼΪ0*/ + SetDetainBtnPressCycNum(wSignalId, 0U); + cRetVal = CI_SUCCESS; + } + else + { + dwDetBtnPressCycNum = GetDetainBtnPressCycNum(wSignalId); /*ȡ۳ťʼں*/ + if (0U == dwDetBtnPressCycNum) + { + dwCurCycNum = Get2oo2CurCycleNum(); + SetDetainBtnPressCycNum(wSignalId, dwCurCycNum); /*õǰΪ۳ťʼں*/ + } + else + { + /*ÿ۳ťʼںţ*/ + } + + wRelayBelongOcId = GetRelayBelongOCId(wCollRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCollRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCollRelayId); /*ȡBϵ忨״̬*/ + cBoardType = GetRelayBoardType(wCollRelayId); /*ȡ̵忨*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState)) && (RELAY_SI_BOARD == cBoardType)) + { + /*OCͨһϵ忨״̬Ϊɢ壬жǷ񳬹ʱ*/ + dwDetBtnPressCycNum = GetDetainBtnPressCycNum(wSignalId); /*ȡ۳ťʼں*/ + dwTempOcCollTolerateCount = GetOcCollTolerateCount(); + cTimeCheckFlag = SystemOverOrEqualTimeCheck(dwDetBtnPressCycNum, dwTempOcCollTolerateCount); /*жϿ۳ťʱǷﵽʱ*/ + if (CI_TIME_OUT != cTimeCheckFlag) + { + cRetVal = CI_SUCCESS; /*δʱҪ*/ + } + else + { + cRetVal = CI_ERROR; /*ʱҪ*/ + } + } + else + { + /*OCͨ쳣ϵ忨״̬ϻ̵ɢ壬0*/ + cRetVal = CI_ERROR; + } + } + } + else + { + cRetVal = CI_ERROR; /*ηǷ0*/ + } + + return cRetVal; +} + +/* +* ȡ۳ť2ɼ̽ +* ˵const UINT16 wSignalId źŻ +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wDevIdIndex = 0U; /*ID*/ + UINT16 wCollRelayId = 0U; /*ɼ̵ID*/ + UINT8 cCollState = 0U; /*̵ɼ״̬*/ + UINT8 cDetValidFlag = 0U; + UINT32 dwDetBtnPressCycNum = 0U; /*۳ťʼ*/ + UINT32 dwTempOcCollTolerateCount = 0U; + UINT32 dwCurCycNum = 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ϵ忨״̬*/ + UINT8 cBoardType = 0U; /*̵忨*/ + UINT8 cTimeCheckFlag = 0U; + + wDevIdIndex = GetSignalConfigBufIndex(wSignalId); + + if (SIGNAL_SUM_MAX > wDevIdIndex) + { + wCollRelayId = GetSignalDetainRelayId_2(wSignalId); /*ȡ۳ťɼ̵ID*/ + cCollState = GetRelayCollState(wCollRelayId); /*ȡ۳ťɼ̵״̬*/ + cDetValidFlag = GetCiFunctionSwitchConfig(FUNC_RELAY_DETAIN_VALID_FLAG); /*ȡӲ߿۳Ч־*/ + + if (((UP_VALID == cDetValidFlag) && (RELAY_STATE_DOWN == cCollState)) || ((DOWN_VALID == cDetValidFlag) && (RELAY_STATE_UP == cCollState))) + { + /*۳ţ̌ÿ۳ťʼΪ0*/ + SetDetainSndBtnPressCycNum(wSignalId, 0U); + cRetVal = CI_SUCCESS; + } + else + { + dwDetBtnPressCycNum = GetDetainSndBtnPressCycNum(wSignalId); /*ȡ۳ťʼں*/ + if (0U == dwDetBtnPressCycNum) + { + dwCurCycNum = Get2oo2CurCycleNum(); + SetDetainSndBtnPressCycNum(wSignalId, dwCurCycNum); /*õǰΪ۳ťʼں*/ + } + else + { + /*ÿ۳ťʼںţ*/ + } + + wRelayBelongOcId = GetRelayBelongOCId(wCollRelayId); + cOcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, (UINT8)wRelayBelongOcId); /*ȡOCͨ״̬*/ + cABoardState = GetRelayACollBoardState(wCollRelayId); /*ȡAϵ忨״̬*/ + cBBoardState = GetRelayBCollBoardState(wCollRelayId); /*ȡBϵ忨״̬*/ + cBoardType = GetRelayBoardType(wCollRelayId); /*ȡ̵忨*/ + + if ((TRANSMIT_STATE_GOOD == cOcCommState) && ((RELAY_BOARD_FAULT_NO == cABoardState) || (RELAY_BOARD_FAULT_NO == cBBoardState)) && (RELAY_SI_BOARD == cBoardType)) + { + /*OCͨһϵ忨״̬Ϊɢ壬жǷ񳬹ʱ*/ + dwDetBtnPressCycNum = GetDetainSndBtnPressCycNum(wSignalId); /*ȡ۳ťʼں*/ + dwTempOcCollTolerateCount = GetOcCollTolerateCount(); + cTimeCheckFlag = SystemOverOrEqualTimeCheck(dwDetBtnPressCycNum, dwTempOcCollTolerateCount); /*жϿ۳ťʱǷﵽʱ*/ + if (CI_TIME_OUT != cTimeCheckFlag) + { + cRetVal = CI_SUCCESS; /*δʱҪ*/ + } + else + { + cRetVal = CI_ERROR; /*ʱҪ*/ + } + } + else + { + /*OCͨ쳣ϵ忨״̬ϻ̵ɢ壬0*/ + cRetVal = CI_ERROR; + } + } + } + else + { + cRetVal = CI_ERROR; /*ηǷ0*/ + } + + return cRetVal; } \ 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 8602f09..a0d2621 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h @@ -95,8 +95,8 @@ UINT8 GetSignalShowColor(const UINT16 signalId); /* * źŻ˫ϵ忨ϣźŻǰɫ * ˵ - UINT16 signalIdźŻid - UINT8 ocId OC ID +UINT16 signalIdźŻid +UINT8 ocId OC ID * ֵ źŻɫ */ UINT8 GetOcBoardFaultSignalColor(UINT16 signalId, UINT8 ocId); @@ -269,6 +269,7 @@ void FloodGateDeviceToRelayStateProc(void); * ½·ĵͬ߼״̬ * ˵ void * ֵ void +* BY CGH 20250523 */ void RouteDCTYRelayToDeviceStateProc(void); @@ -682,13 +683,14 @@ void DetZfsCancelBtnPressStateProc(const UINT16 wSignalId, const UINT16 wCancelD void DetZfsCancelBtnActFlagProc(const UINT16 wSignalId, const UINT16 wCancelDetBtnRelayId); /* -* Ըʽ۳ָʾ -* ˵const UINT16 signalId, źŻID -* const UINT16 signalDetainDisplayId, ۳ʾƼ̵1ID -* ֵ -* +* Ըʽ۳ָʾ +* ˵const UINT16 signalId źŻID +* const UINT16 signalDetDisRelayId ۳ʾƼ̵ID +* const UINT16 signalDetCutDisRelayId ۳·ʾƼ̵ +* ֵ +* Modified By LQ 2025.07.03 */ -void DriveZfsDetainBsRelay(const UINT16 signalId, const UINT16 signalDetainDisplayId); +void DriveZfsDetainBsRelay(const UINT16 signalId, const UINT16 signalDetDisRelayId, const UINT16 signalDetCutDisRelayId); /* * Ըʽͣť @@ -853,6 +855,135 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId); */ UINT8 CheckSwitchCollTolerateState(UINT16 switchId); +/* +* ·ͣť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.28 +*/ +void EsbNXRailBtnProc(UINT16 esbId); + +/* +* ·ͣȡť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.28 +*/ +void EsbNXRailCancelBtnProc(UINT16 esbId); + +/* +* ·ͣȡťЧ־ +* ˵const UINT16 wEsbId ESB ID +* const UINT16 wCancelEsbRelayId ESBȡťɼ̵ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCancelBtnValidFlagProc(const UINT16 wEsbId, const UINT16 wCancelEsbRelayId); + +/* +* ·ͣ·ť +* ˵UINT16 esbId ESB ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCutBtnProc(UINT16 esbId); + +/* +* ·ͣ·ť״̬ +* ˵const UINT16 wEsbId ESB ID +* const UINT16 wCutEsbRelayId ·ťɼ̵ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailCutBtnPressStateProc(const UINT16 wEsbId, const UINT16 wCutEsbRelayId); + +/* +* ·ESBָʾƺESB·ָʾ +* ˵const UINT16 wEsbId ESB ID +* ֵ +* Created By LQ 2025.03.30 +*/ +void EsbNXRailDisplayDrivOutput(const UINT16 wEsbId); + +/* +* 쳣򿪴 +* ˵ +* ֵ +* Created By LQ 2025.05.23 +*/ +void PsdExceptOpenProc(void); + +/* +* Ըʽ۳·ť +* ˵const UINT16 signalId źŻID +* ֵ +* Created By LQ 2025.06.20 +*/ +void SignalZfsDetainCutBtnPro(const UINT16 signalId); + +/* +* Ըʽ۳·ť״̬ +* ˵const UINT16 wSignalId źŻID +* const UINT16 wDetCutBtnRelayId ۳·ťɼ̵ID +* ֵ +* Created By LQ 2025.06.20 +*/ +void ZfsDetCutBtnPressStateProc(const UINT16 wSignalId, const UINT16 wDetCutBtnRelayId); + +/* +* Ըʽ۳·ťЧ״̬ +* ˵const UINT16 wSignalId źŻID +* const UINT16 wDetCutBtnRelayId ۳·ťɼ̵ID +* ֵ +* Created By LQ 2025.06.20 +*/ +void ZfsDetCutBtnValidStateProc(const UINT16 wSignalId, const UINT16 wDetCutBtnRelayId); + +/* +* ȡSPKSťɼ̽ +* ˵const UINT16 wSpksId SPKS +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetSpksBtnCollTolerateRet(const UINT16 wSpksId); + +/* +* ȡPsdſ̵ɼ̽ +* ˵const UINT16 wPsdId PSD +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetPsdRelayCollTolerateRet(const UINT16 wPsdId); + +/* +* ȡEsbɼ̽ +* ˵const UINT16 wEsbId ESB +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetEsbCollTolerateRet(const UINT16 wEsbId); + +/* +* ȡ۳ť1ɼ̽ +* ˵const UINT16 wSignalId źŻ +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetFstDetBtnCollTolerateRet(const UINT16 wSignalId); + +/* +* ȡ۳ť2ɼ̽ +* ˵const UINT16 wSignalId źŻ +* ֵCI_ERROR 0 ̽ +* CI_SUCCESS 1 +* Created By LQ 2025.06.26 +*/ +UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.c b/TSCP/src/APP/ciapp/IO/InputDataProcess.c index f2f9167..493ded8 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.c @@ -264,6 +264,8 @@ void InputDataProcess(void) { /*OC*/ (void)ProcessOcToCiRelayData(); + /*ɼһµĵλ*/ + ProcessOcToCiRelayDiffData(); debug_infor_printf((const)"\nprocess oc_relay end\n"); } else @@ -332,6 +334,9 @@ void InputDataProcess(void) /*PSCϵͳ*/ ProcessPscToCiData(); + /*OC-PSCһ廯*/ + ProcessOCToCiPsdData(); + /*豸״̬*/ ProcessDeviceLogicState(); @@ -405,6 +410,9 @@ void InputDataProcess(void) /*ˢźŻʪ־*/ UpdateHumidRailFlag(); + /*PSD쳣򿪴Ҫȸں״̬ٽPSD쳣жϣ*/ + PsdExceptOpenProc(); + /*ATS*/ if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType)) { @@ -633,17 +641,106 @@ void ProcessAxleToCiData(void) if (AXIS_TYPE_KEANDA == acFty) { if (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].PreResetRst) - {/*Ԥλ̵*/ + { + /*Ԥλ̵*/ SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_YES); /*üԤλ״̬Ч*/ } else if (RELAY_STATE_DOWN == axisToCiDataStru[axisSysId].axisDataStr[jj].PreResetRst) - {/*Ԥλ̵*/ + { + /*Ԥλ̵*/ SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ } else - {/*̵ɼ״̬Ϊ쳣ֵ*/ + { + /*쳣ֵ*/ SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ } + + /*ưֱӸλ״̬ӿڣΪ˼ḴλͳһóЧ*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_NO); /*üֱӸλ״̬Ч*/ + } + else if (AXIS_TYPE_FUHAOSHENG == acFty) + { + if ((RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].PreResetRst) + && (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].chDirectResetRst)) + { + /*ԤλλͬʱЧ쳣*/ + SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_NO); /*üֱӸλ״̬Ч*/ + SetPhySecPreResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + SetPhySecDirectResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + } + else + { + if (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].PreResetRst) + { + /*Ԥλ̵*/ + SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_YES); /*üԤλ״̬Ч*/ + } + else if (RELAY_STATE_DOWN == axisToCiDataStru[axisSysId].axisDataStr[jj].PreResetRst) + { + /*Ԥλ̵*/ + SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ + } + else + { + /*쳣ֵ*/ + SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ + } + + if (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].chPreResetBack) + { + /*Ԥλ-յ*/ + SetPhySecPreResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + } + else if (RELAY_STATE_DOWN == axisToCiDataStru[axisSysId].axisDataStr[jj].chPreResetBack) + { + /**Ԥλ-δյ*/ + SetPhySecPreResetBack(secId, PHY_RESET_BACK_RECIVE_NO); + } + else + { + /*쳣ֵ*/ + SetPhySecPreResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + } + + if (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].chDirectResetRst) + { + /*ֱӸλ̵*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_YES); /*üֱӸλ״̬Ч*/ + } + else if (RELAY_STATE_DOWN == axisToCiDataStru[axisSysId].axisDataStr[jj].chDirectResetRst) + { + /*ֱӸλ̵*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_NO); /*üֱӸλ״̬Ч*/ + } + else + { + /*쳣ֵ*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_NO); /*üֱӸλ״̬Ч*/ + } + + if (RELAY_STATE_UP == axisToCiDataStru[axisSysId].axisDataStr[jj].chDirectResetBack) + { + /*ֱӸλ-յ*/ + SetPhySecDirectResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + } + else if (RELAY_STATE_DOWN == axisToCiDataStru[axisSysId].axisDataStr[jj].chDirectResetBack) + { + /**ֱӸλ-δյ*/ + SetPhySecDirectResetBack(secId, PHY_RESET_BACK_RECIVE_NO); + } + else + { + /*쳣ֵ*/ + SetPhySecDirectResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + } + } + + } + else + { + ; /*ӿڲ*/ } } } @@ -660,6 +757,9 @@ void ProcessAxleToCiData(void) (void)SetPhySecCurAxisGdOccupyState(secId, SECTION_OCCUPY_FAULT); SetPhySecPreResetState(secId, PHYSICAL_SECTION_PRE_RESET_NO); /*üԤλ״̬Ч*/ + SetPhySecDirectResetState(secId, PHYSICAL_DIRECT_RESET_NO); /*üֱӸλ״̬Ч*/ + SetPhySecPreResetBack(secId, PHY_RESET_BACK_RECIVE_YES); + SetPhySecDirectResetBack(secId, PHY_RESET_BACK_RECIVE_YES); if (dwCurCycNum == (dwLastRecvAxisDataCycNum + dwCommBadEnsureCount + 1U)) { @@ -768,6 +868,11 @@ void ProcessOcToCiData(void) if (m_Signals[jj].OcId == pTempOc->OcId) { m_Signals[jj].DeviceState = OC_SIGNAL_SHOWCOLOR_RED_BREAK;/**/ + /*źŻ忨Ϊ*/ + for (j = 0U; j < 2U; j++) + { + m_Signals[jj].BoardState[j] = 0xffU; + } } } /*תĵ״̬*/ @@ -821,6 +926,11 @@ void ProcessOcToCiData(void) } /*OCͨжϣȷPCBť״̬*/ SetAllCleFarePCBButKeepSta(pTempOc->OcId,QK_PSD_BUTTON_STATE_UP); + + /*OCͨжϣϢ*/ + + SetOcToCiDefaultDataStru(ii); + } else { @@ -1414,7 +1524,7 @@ void ProcessZcToCiData(void) { /* ѩģʽ */ SetAllSnowModel(pZcToCiDataStru->cSnowValidFlag); - SetLocalAreaSnowInfo(pZcToCiDataStru->cAreaSnowPlatFormNum, pZcToCiDataStru->szAreaSnowPlatFormId); /*±ѩ״̬Ϣ*/ + SetLocalAreaSnowInfo(pZcToCiDataStru->cAreaSnowPlatFormNum, pZcToCiDataStru->szAreaSnowInfo); /*±ѩ״̬Ϣ*/ SetLocalSnowModel(pZcToCiDataStru->chLocalSnowValidFlag); } } @@ -1436,6 +1546,8 @@ void ProcessZcToCiData(void) { /* ITEȫг״̬ */ SetIteLineCutState(pZcToCiDataStru->cIteLineCutState); + /* ITEгϢ */ + SetLocalAreaIteCutInfo(pZcToCiDataStru->cAreaIteCutNum, pZcToCiDataStru->szAreaIteCutId); } else { @@ -1535,7 +1647,8 @@ void ProcessTmcToTiocData(void) { /* ѩģʽ */ SetAllSnowModel(pTmcInputData->cSnowValidFlag); - SetLocalAreaSnowInfo(pTmcInputData->cAreaSnowPlatFormNum, pTmcInputData->szAreaSnowPlatFormId); /*±ѩ״̬Ϣ*/ + SetAllSnowLevel(pTmcInputData->cSnowLevel); + SetLocalAreaSnowInfo(pTmcInputData->cAreaSnowPlatFormNum, pTmcInputData->szAreaSnowInfo); /*±ѩ״̬Ϣ*/ } } } @@ -1547,6 +1660,8 @@ void ProcessTmcToTiocData(void) { /* ITEȫг״̬ */ SetIteLineCutState(pTmcInputData->cIteLineCutState); + /* ITEгϢ */ + SetLocalAreaIteCutInfo(pTmcInputData->cAreaIteCutNum, pTmcInputData->szAreaIteCutId); } else { @@ -2249,7 +2364,7 @@ void UpdateAtsPscPlFlagData(UINT8 pscId) for(i = 0u; i < pscToCiDataStru[pscId].psdSum; i++) { /*ȡȷϱ־*/ - getPscPlFlag = GetPsdPscPlFlag(pscToCiDataStru[pscId].psdDataStr[i].psdId); + getPscPlFlag = GetPsdPlFlag(pscToCiDataStru[pscId].psdDataStr[i].psdId); psdVirArr = GetPsdVirtualAttribute(pscToCiDataStru[pscId].psdDataStr[i].psdId); if(CI_PSC_PL_CONFIRM_YES == getPscPlFlag) { @@ -2732,8 +2847,8 @@ UINT8 ProcessAtsOrXianDiToCiData(void) /*δȡ*/ ClearCiRevCmdData();/*CIݶ*/ + } } - } else {/**/ for (ii = 0u; ii < AtsOrXianDiToCiCmdSum; ii++) @@ -2821,7 +2936,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void) OrderCheckReVal = CheckOrderWhetherDoing(virCiID,belongVirCIid,cmdType,CmdDeviceId); if(CI_SUCCESS == OrderCheckReVal) { - SetCommonRouteLogicManage(CmdDeviceId); + SetCommonRouteLogicManage(CmdDeviceId, ESEND_LEVEL_ATS); } } else @@ -3503,7 +3618,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void) { checkRetVal = AFFIRM_SUCCESS; /*˹*/ - (void)LaborUnlockOverlapProc((UINT8)CmdDeviceId); + (void)LaborUnlockOverlapProc(CmdDeviceId); } else { @@ -4052,8 +4167,45 @@ UINT8 ProcessAtsOrXianDiToCiData(void) } break; } + /*OC-P·һ*/ + case ATS_CMD_OC_P_PL_ONE: + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, AFFIRM_SUCCESS, virCiID); + break; + /*OC-P·*/ + case ATS_CMD_OC_P_PL_TWO: + checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID); + if (CI_SUCCESS == checkRetVal) + { + /*OC-P·ȷϱ־*/ + SetOcPscPlConfirmFlag(OC_PSC_PL_CONFIRM_YES, CmdDeviceId); + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, AFFIRM_SUCCESS, virCiID); + } + else + { + /*һȷID*/ + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, AFFIRM_FAIL, virCiID); + } + break; - + /*ȡOC-P·һ*/ + case ATS_CMD_QUXIAO_OC_P_PL_ONE: + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, AFFIRM_SUCCESS, virCiID); + break; + /*ȡOC-P·*/ + case ATS_CMD_QUXIAO_OC_P_PL_TWO: + checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID); + if (CI_SUCCESS == checkRetVal) + { + /*PSC·ȡ־*/ + SetOcPscPlConfirmFlag(OC_PSC_PL_CONFIRM_NO, CmdDeviceId); + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, AFFIRM_SUCCESS, virCiID); + } + else + { + /*һȷID*/ + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, AFFIRM_FAIL, virCiID); + } + break; default: cFunRetVal = VirtualDevCmdProc(CmdDeviceId, AtsOrXianDiToCiCmdStru[ii].CommandType);/*Գ豸״̬*/ @@ -4099,7 +4251,6 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) UINT16 terminalId = 0u; /*նid*/ UINT16 ii = 0u; /*α*/ UINT8 checkRetVal = CI_FALSE; - UINT16 jkjRelayId = GetJkjRelayId(); UINT8 jkjRelayValidFlag = 0u; UINT8 localCiId = 0u; /*ID*/ @@ -4143,7 +4294,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) jkjRelayValidFlag = GetCiJkjFlag(); /*Ӧ̵̼Ч״̬*/ - if ((jkjRelayId > 0u) && (JKJ_REYLAY_VALID == jkjRelayValidFlag)) + if (JKJ_REYLAY_VALID == jkjRelayValidFlag) { for (ii = 0u; ii < AtsToCiCmdSum; ii++) { @@ -4160,7 +4311,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) SetCiSendCmdBackData_OrderBack(commandId,CmdDeviceId,cmdDevType,terminalId,AtsToCiCmdStru[ii].CommandType,0u,0u,virCiID); /*¼*/ - SetErrorData(EFUNC_PARSE_ATS2CI_DATA,CI_DEVICE_TYPE_RELAY,jkjRelayId,ETYPE_JKJ_WORK,RELAY_STATE_DOWN,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_ATS2CI_DATA, CI_DEVICE_TYPE_RELAY, 0u, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, ESEND_LEVEL_ATS);/*OCӦعܣ̵ID0*/ /*CIݶ*/ ClearCiRevCmdData(); @@ -4496,7 +4647,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) if(ATS_ROUTE_SET_PROCESS_MAX >= routeCmdSum) { /*ͨ·*/ - SetCommonRouteLogicManage(CmdDeviceId); + SetCommonRouteLogicManage(CmdDeviceId, ESEND_LEVEL_ATS); } else { @@ -4854,7 +5005,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) { checkRetVal = AFFIRM_SUCCESS; /*˹*/ - (void)LaborUnlockOverlapProc((UINT8)CmdDeviceId); + (void)LaborUnlockOverlapProc(CmdDeviceId); } else { @@ -5572,7 +5723,7 @@ void ProcessDeviceLogicState(void) /**/ } - if ((m_GdNum > 0u)|| ((AXIS_TYPE_YONGLIE==acFty)|| (AXIS_TYPE_KEANDA == acFty))) /*йӿ*/ + if ((m_GdNum > 0u)|| ((AXIS_TYPE_YONGLIE==acFty)|| (AXIS_TYPE_KEANDA == acFty) || (AXIS_TYPE_FUHAOSHENG == acFty))) /*йӿ*/ { /*¹βɼ״̬*/ OcPhyStateToDeviceStatePro(); @@ -6198,7 +6349,7 @@ void UpdatePhySectionMergeLogicState(void) UINT8 phySecOccuChangeTimeState = CI_TIME_OUT; /*CTUTռ״̬Ϊ(UT)ռ״̬*/ UINT8 curUtOrCtOccFlag = LOGICSECTION_OCCUPY_UT; - UINT8 utOrCtOccFlag = LOGICSECTION_OCCUPY_UT; + UINT8 chPreUtOrCtOccFlag = LOGICSECTION_OCCUPY_UT; UINT32 secOccupy2IdleTimeReal = 0u; UINT32 secOccupy2IdleTimeSysPara = 0u; @@ -6609,13 +6760,20 @@ void UpdatePhySectionMergeLogicState(void) if(SECTION_OCCUPY_YES == phySecCurOccuState) { curUtOrCtOccFlag = GetPhySecCurCtOrUtOccupyState(phySectionId); /*ȡεǰCTUTռ״̬*/ - utOrCtOccFlag = GetPhySecPreOccState(phySectionId); /*ȡ֮ǰCTUTռ״̬*/ + chPreUtOrCtOccFlag = GetPhySecPreOccState(phySectionId); /*ȡ֮ǰCTUTռ״̬*/ dwSecUtOrCtOccuCyc = GetSecUtOrCtOccuStartCycNum(phySectionId); /*ʱУγռ״̬仯ҽѿʼʱ*/ - if((utOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) + if((chPreUtOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) { - /*UTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(phySectionId, dwSystemCyc); + if (LOGICSECTION_OCCUPY_NO != curUtOrCtOccFlag) + { + /*UTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(phySectionId, dwSystemCyc); + } + else + { + /*߼ξУδںϿУݲ*/ + } } else if (LOGICSECTION_OCCUPY_UT == curUtOrCtOccFlag) { @@ -6851,10 +7009,10 @@ void UpdatePhySectionMergeLogicState(void) if(SECTION_OCCUPY_YES == phySecCurOccuState) { curUtOrCtOccFlag = GetPhySecCurCtOrUtOccupyState(phySectionId); /*ȡεǰCTUTռ״̬*/ - utOrCtOccFlag = GetPhySecPreOccState(phySectionId); /*ȡ֮ǰCTUTռ״̬*/ + chPreUtOrCtOccFlag = GetPhySecPreOccState(phySectionId); /*ȡ֮ǰCTUTռ״̬*/ dwSecUtOrCtOccuCyc = GetSecUtOrCtOccuStartCycNum(phySectionId); /*ʱУγռ״̬仯ҽѿʼʱ*/ - if((utOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) + if((chPreUtOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) { /*UTCTռÿʼʱ*/ SetSecUtOrCtOccuStartCycNum(phySectionId, dwSystemCyc); @@ -7720,14 +7878,11 @@ 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; - UINT8 nextRouteDirection = 0u; - UINT8 haveDirChangeAfterRoute = 0u; - UINT8 haveDirChangeInRoute = 0u; - + UINT16 wEndSignalId = 0U;/*۷·նźŻ*/ + UINT16 wStartSignalId = 0U;/*źؿ·ʼźŻ*/ if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX)) { retVal = CI_ERROR; @@ -7751,6 +7906,8 @@ 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); @@ -7778,32 +7935,9 @@ static UINT8 RouteReturnToThroughCondCheck(const UINT16 signalId,UINT8* toCiId) /*һ·һ*/ if (PHYSICAL_SECTION_LOCK_NORMAL == nextRouteLockPhy) { - /*ȡս·*/ - 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(wEndSignalId == wStartSignalId) { if(0u != throughRouteId) {/*returnRouteIdthroughRouteId0u˵returnRouteIdȷʵ۷·throughRouteIdͨ·Ҵʱ۷δͨ·*/ @@ -7857,18 +7991,16 @@ 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 }; @@ -7895,6 +8027,8 @@ 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); @@ -7922,34 +8056,11 @@ static UINT8 RouteReturnToThroughCmdProc(const UINT16 signalId,const UINT8 fromC { /*ȡս·*/ lockPhyBelongRoute = GetPhySecRLockBelongRouteId(signalInSecId); - nextRouteDirection = GetRouteDirection(lockPhyBelongRoute); - returnRouteDirection = GetRouteDirection(returnRouteId); + saveReRouteDir = 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(nextRouteDirection == returnRouteDirection) + /*źŻһ*/ + if(wEndSignalId == wStartSignalId) { /*۷·*/ returnRouteState = GetRouteState(returnRouteId); @@ -8677,7 +8788,7 @@ static void ProcessTctCiCmd(void) case CI_CMD_UNLOCK_OVERLAP_CMD:/*͵Ľ*/ deviceId = CiRecvCiCmdStru[ii].Param1;/* id*/ /*˹*/ - (void)LaborUnlockOverlapProc((UINT8)deviceId); + (void)LaborUnlockOverlapProc(deviceId); break; #if 0 @@ -9467,6 +9578,18 @@ UINT8 CheckIsGeneralOrder(UINT8 OrderType) case ATS_CMD_SWITCH_FANWEI_TEST_TWO: reVal = CI_ERROR; break; + case ATS_CMD_OC_P_PL_ONE: + reVal = CI_ERROR; + break; + case ATS_CMD_OC_P_PL_TWO: + reVal = CI_ERROR; + break; + case ATS_CMD_QUXIAO_OC_P_PL_ONE: + reVal = CI_ERROR; + break; + case ATS_CMD_QUXIAO_OC_P_PL_TWO: + reVal = CI_ERROR; + break; default: reVal = CI_SUCCESS; break; @@ -10006,7 +10129,9 @@ static void IvocInputRefreshTrain(const VobcToCiDataStruct stIvocToCiData) SetHeadITEResult(wTrainId, stIvocToCiData.wHeadITEResult); SetTailAxisId(wTrainId, stIvocToCiData.wTailAxisId); SetTailITEResult(wTrainId, stIvocToCiData.wTailITEResult); - } + SetTrainJumpBackApplyState(wTrainId, stIvocToCiData.chJumpBackApply); + SetTrainJumpBackApplySN(wTrainId, stIvocToCiData.dwJumpBackSn); + } else { /*δյгݣˢгϢ*/ @@ -10520,6 +10645,8 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) /*ɢ*/ SetTrainEaCmdState(wTrainId, TRAIN_EA_CMD_STATE_INVALID); } + + #if 0 /**Ծܿش򿪣ͬһζ߼Ծմ*/ if (FUNC_SWITCH_ON == funcSwitchJumpLockDriveSwitch) @@ -10579,6 +10706,7 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) UINT8 chLjkExistDBSwitch = 0U; UINT8 chVirHeadScreenPassFlag = 0U;/*ǰɸ־*/ UINT8 chVirTailScreenPassFlag = 0U;/*ɸ־*/ + UINT8 chTrainPosMonitorState = 0U; /*гλüල־*/ #if 0 UINT32 dwRecvIvocCount = 0U; @@ -10622,10 +10750,12 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) /*DB·ͨɸѡ־пɿԼ򳵻ATSԭɸѡ*/ chVirHeadScreenPassFlag = GetTrainVirHeadScreenPassFlag(wTrainId); chVirTailScreenPassFlag = GetTrainVirTailScreenPassFlag(wTrainId); + chTrainPosMonitorState = GetTrainPosMonitorState(wTrainId); if ((FUNC_SWITCH_OFF == chLjkExistDBSwitch) || (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirHeadScreenPassFlag) - || (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirTailScreenPassFlag)) + || (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirTailScreenPassFlag) + || (TRAIN_POS_MONITOR_VALID != chTrainPosMonitorState)) { /*DBһɸѡ־Ч˵ɸѡ*/ SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); @@ -10643,6 +10773,12 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) SetTrainDerailment(wTrainId, TRAIN_DERAIL_NO); /*ͨжɢ״̬ΪЧ*/ SetTrainEaCmdState(wTrainId, TRAIN_EA_CMD_STATE_INVALID); + + /*ͨжԾδкΪ0*/ + SetTrainJumpBackApplyState(wTrainId, TRAIN_JUMP_BACK_STATE_INVALID); + SetTrainJumpBackApplySN(wTrainId, 0U); + + SetTrainFlyProStartCycNum(wTrainId, 0U); /*ͨжϺɳʼں*/ } } @@ -11642,7 +11778,7 @@ void UpdateHumidRailFlag(void) UINT16 wPhySecId = 0U; UINT8 cAllHumidRailState = CI_ALL_SNOW_UNVALID; /*ʪ״̬*/ UINT8 cAreaHumidRailNum = 0U; /*ʪ*/ - UINT32* pAreaHumidRailId = NULL; + AreaSnowInfoStruct* pAreaHumidRailData = NULL; ToCiAreaSnowStruct* pRecvCiAreaHumidRail = NULL; /*͵ʪϢ*/ UINT16 wCurSignalNum = 0U; UINT16 wSignalId = 0U; @@ -11679,13 +11815,13 @@ void UpdateHumidRailFlag(void) { /*** ʪ ***/ cAreaHumidRailNum = GetLocalAreaSnowNum(); - pAreaHumidRailId = GetLocalAreaSnowId(); - if ((0U != cAreaHumidRailNum) && (LOCAL_AREA_SNOW_SUM_MAX >= cAreaHumidRailNum) && (NULL != pAreaHumidRailId)) + pAreaHumidRailData = GetLocalAreaSnow(); + if ((0U != cAreaHumidRailNum) && (LOCAL_AREA_SNOW_SUM_MAX >= cAreaHumidRailNum) && (NULL != pAreaHumidRailData)) { /*ʪ죬ڱʪ־ΪЧ*/ for (jj = 0U; jj < cAreaHumidRailNum; jj++) { - SetPlatFormRelPSHumidRailFlag(pAreaHumidRailId[jj]); + SetPlatFormRelPSHumidRailFlag(pAreaHumidRailData[jj].wAreaId); } } else @@ -11702,7 +11838,7 @@ void UpdateHumidRailFlag(void) /*ڿʪ츲бΣڱʪ־ΪЧ*/ for (jj = 0U; jj < pRecvCiAreaHumidRail[ii].cPlatFormNum; jj++) { - SetPlatFormRelPSHumidRailFlag(pRecvCiAreaHumidRail[ii].dwPlatFormId[jj]); + SetPlatFormRelPSHumidRailFlag(pRecvCiAreaHumidRail[ii].szPlatFormInfo[jj].wAreaId); } } } @@ -12199,4 +12335,222 @@ void OtherPartRouteCleanLogRouteProc(const UINT16 wCurRouteId) { /*ηǷ*/ } +} + +/* +* OC->CIPSD +* ˵ void +* ֵ void +*/ +void ProcessOCToCiPsdData(void) +{ + UINT8 deviceOcSum = 0u;/*ͨoc*/ + UINT8* deviceIdBuf = NULL;/*ͨ豸ID*/ + UINT8 ocId = 0u; + UINT8 deviceSum = 0u;/*ocpsd豸*/ + UINT16 ocToCiPsdId = 0u;/*psd id*/ + UINT16 ii = 0u; + UINT16 jj = 0u; + UINT16 kk = 0u; + UINT8 findOcFlag = 0u; + + deviceOcSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸*/ + deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸ID*/ + + for (ii = 0u; ii < deviceOcSum; ii++) + {/*ҵOC id*/ + findOcFlag = 0u; + ocId = deviceIdBuf[ii]; + if ((0u < ocId) && (OC_SUM_MAX > ocId)) + { + for (kk = 0u; kk < m_OcToCiOrginDataNum; kk++) + { + /*ҵOC idӦ±kk*/ + if (m_OcToCiOrginDataArr[kk].OcId == ocId) + { + findOcFlag = 1u; + break; + } + } + if (1u == findOcFlag) + { + deviceSum = m_OcToCiOrginDataArr[kk].OCPsdNum; /*ȡOCPSD豸*/ + for (jj = 0u; jj < deviceSum; jj++) + { + ocToCiPsdId = m_OcToCiOrginDataArr[kk].PsdInfo[jj].wPsdId; /*psd id*/ + if (0u < ocToCiPsdId) + { + /*ſ״̬*/ + if (PSD_STATE_CLOSE_VIETNAM == m_OcToCiOrginDataArr[kk].PsdInfo[jj].OpenOrCloseState) + { + /**/ + (void)SetPsdState(ocToCiPsdId, PSD_STATE_CLOSE); + } + else if (PSD_STATE_OPEN_VIETNAM == m_OcToCiOrginDataArr[kk].PsdInfo[jj].OpenOrCloseState) + { + /**/ + (void)SetPsdState(ocToCiPsdId, PSD_STATE_OPEN); + } + else + {/*ſ״̬ĬϿ*/ + (void)SetPsdState(ocToCiPsdId, PSD_STATE_OPEN); + } + + /*״̬*/ + if (PSD_MUTUALLOCK_REMOVE_YES == m_OcToCiOrginDataArr[kk].PsdInfo[jj].InterlockRelState) + { + /**/ + (void)SetPsdMutualLockRemoveState(ocToCiPsdId, PSD_MUTUALLOCK_REMOVE_YES); + } + else if (PSD_MUTUALLOCK_REMOVE_NO == m_OcToCiOrginDataArr[kk].PsdInfo[jj].InterlockRelState) + { + /*δ*/ + (void)SetPsdMutualLockRemoveState(ocToCiPsdId, PSD_MUTUALLOCK_REMOVE_NO); + } + else + { + (void)SetPsdMutualLockRemoveState(ocToCiPsdId, PSD_MUTUALLOCK_REMOVE_NO); + } + + /*Ź״̬*/ + SetOpenErrState(ocToCiPsdId, m_OcToCiOrginDataArr[kk].PsdInfo[jj].OpenErrState); + + /*Ź״̬*/ + SetCloseErrState(ocToCiPsdId, m_OcToCiOrginDataArr[kk].PsdInfo[jj].CloseErrState); + + /*ŹϸϢ*/ + SetPsdFaultQState(ocToCiPsdId, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdFaultQStataOne, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdFaultQStataTwo); + + /*ſ״̬*/ + SetPsdDoorState(ocToCiPsdId, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdDoorsStateOne, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdDoorsStateTwo); + + /*űϢ*/ + SetPsdDoorIState(ocToCiPsdId, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdDoorIStateOne, m_OcToCiOrginDataArr[kk].PsdInfo[jj].psdDoorIStateTwo); + + /*ϰﱨ״̬Ԥ*/ + } + else + { + /*psd idЧ*/ + } + } + } + } + else + { + /*oc idЧ*/ + } + } + +} + + +/* +* OCCIIJһ¼̵ +* ˵ void +* ֵ 0:ʧ +* 1:ɹ +*/ +void ProcessOcToCiRelayDiffData(void) +{ + UINT8 i = 0u; + UINT8 j = 0u; + UINT8 k = 0u; + UINT16 ocId = 0u; + CollBoardData* pTempCollBoardData_ForProcess = NULL; + UINT8 BoardAddress_ForProcess = 0u; /*忨ַ*/ + UINT8 BoardAddress_ForProcessOther = 0u; /*ϵ忨ַ*/ + UINT8 cBoardState = RELAY_BOARD_FAULT_YES; /*忨״̬ʼΪ*/ + 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; + + pTempIODiffData = GetIODiffData(); + if (NULL != pTempIODiffData) + { + for (i = 0u; i < OC_SUM_MAX; i++) /*ָID̵ID*/ + { + if (LocalOcIds[i] > 0u)/*oc id Ч*/ + { + ocId = LocalOcIds[i]; + if (OC_SUM_MAX > ocId) + { + pTempCollBoardData_ForProcess = m_OcConvertedPtDataArr[ocId].BoardDatas; + for (j = 0u; j < m_OcConvertedPtDataArr[ocId].OcBoardNum; j += 2u)/*еOC忨*/ + { + BoardAddress_ForProcess = pTempCollBoardData_ForProcess[j].BoardAddress;/*忨ַ*/ + BoardAddress_ForProcessOther = pTempCollBoardData_ForProcess[j + 1u].BoardAddress;/*ϵ忨ַ*/ + + cBoardState = pTempCollBoardData_ForProcess[j].BoardState; /*忨״̬*/ + cBoardStateOther = pTempCollBoardData_ForProcess[j + 1u].BoardState; /*ϵ忨״̬*/ + + if ((RELAY_BOARD_FAULT_NO == cBoardState)&&(RELAY_BOARD_FAULT_NO == cBoardStateOther)) + { + /*忨ǹ*/ + for (k = 0u; k < (UINT8)OC_COLL_BOARD_POS_NUM; k++) + { + PosValue_ForProcess = pTempCollBoardData_ForProcess[j].PosValueBuf[k];/*ֵ*/ + PosValue_ForProcessOther = pTempCollBoardData_ForProcess[j + 1u].PosValueBuf[k];/*ϵ忨ĵֵ*/ + + 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); + } + } + } + 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++; + } + } + } + } + } + else + {/**/ + } + } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.h b/TSCP/src/APP/ciapp/IO/InputDataProcess.h index f8f28ad..2854c29 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.h @@ -451,6 +451,21 @@ void LogRouteCleanOldPhySecLockProc(const UINT16 wPreRouteId); */ void OtherPartRouteCleanLogRouteProc(const UINT16 wCurRouteId); +/* +* OC->CIPSD +* ˵ void +* ֵ void +*/ +void ProcessOCToCiPsdData(void); + +/* +* OCCIIJһ¼̵ +* ˵ void +* ֵ 0:ʧ +* 1:ɹ +*/ +void ProcessOcToCiRelayDiffData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c index 4354cee..03d62b2 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c @@ -387,6 +387,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co returnValue = CI_BACK_ROUTE_XUANPAI_OVERTIME;/*·ѡųʱ*/ break; + case ETYPE_ROUTE_APPLY_SWITCH_MOVE: + returnValue = CI_BACK_SWT_MOVE; /*а·*/ + break; + /*źŻϷ*/ case ETYPE_SIG_START_OPEN_STATE: if (SIGNAL_OPEN==deviceState ) @@ -898,6 +902,33 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co case ETYPE_OTHER_DOWNWASH_NOT_ALLOW_PASS: returnValue = CI_BACK_WASH_PASS_ALLOW_NOT; /*ϴ/δͬͨ*/ break; + case ETYPE_LOGSEC_CONTINUOUS: + returnValue = CI_BACK_DYM_ROUTE_CONTINUOUS; + break; + case ETYPE_PART_ROUTE_RES: + returnValue = CI_BACK_DYM_ROUTE_RES; + break; + case ETYPE_PART_ROUTE_MATCH_ROUTE: + returnValue = CI_BACK_DYM_ROUTE_MATCH_ROUTE; + break; + case ETYPE_PART_ROUTE_SCREEN: + returnValue = CI_BACK_DYM_ROUTE_SCREEN; + break; + case ETYPE_LOGSEC_CBTC_PROPERTY: + returnValue = CI_BACK_DYM_ROUTE_SEC_CBTC; + break; + case ETYPE_PART_ROUTE_REPEAT: + returnValue = CI_BACK_DYM_ROUTE_REPEAT; + break; + case ETYPE_PART_ROUTE_SEC_ATTR: + returnValue = CI_BACK_DYM_ROUTE_SEC_ATTR; + break; + case ETYPE_PART_ROUTE_TRAIN_COMM: + returnValue = CI_BACK_DYM_ROUTE_TRAIN_COMM; + break; + case ETYPE_PART_ROUTE_TRAIN_POS: + returnValue = CI_BACK_DYM_ROUTE_TRAIN_POS; + break; default:/*ݴ*/ returnValue = 0U; break; @@ -916,14 +947,18 @@ CI_SUCCESS */ UINT8 CiToAtsBackInfoFunctionJudge(const UINT8 functionId,const UINT8 deviceType) { - if ((functionId > 0u) && (deviceType>0u) ) + UINT8 cRetVal = CI_ERROR; + + if ((functionId > 0U) && (deviceType>0U)) { - return CI_SUCCESS; + cRetVal = CI_SUCCESS; } else { - return CI_ERROR; + cRetVal = CI_ERROR; } + + return cRetVal; } diff --git a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c index 78b6264..8c79fb2 100644 --- a/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Indicator/IndicatorConfigDataManage.c @@ -18,7 +18,7 @@ UINT16 LocalCiIndicatorIdBuf[INDICATOR_SUM_MAX] = {0u};/* INT16 IndicatorCurSum = 0; /*ָʾǰ*/ OCStationIndicConfigDataStru g_OCStationIndicConfigDataStru[INDICATOR_SUM_MAX] = { 0u }; -UINT16 g_OCStationIndicatorCurSum = 0; /*OCվվͷǼվָʾ,漰棬ȡֵΧ0-1000*/ +UINT16 g_OCStationIndicatorCurSum = 0; /*OCվվͷǼվָʾ,漰棬ȡֵΧ [0,2000) ʹ*/ diff --git a/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h b/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h index 2e422db..a96dc8c 100644 --- a/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h +++ b/TSCP/src/APP/ciapp/Indicator/IndicatorDefine.h @@ -14,7 +14,7 @@ /*ֵ*/ -#define INDICATOR_SUM_MAX ((UINT16)1000) /*ָʾ,ÿ40ָʾƣܹ20 */ +#define INDICATOR_SUM_MAX ((UINT16)2000) /*ָʾ,ÿ40ָʾƣܹ20 */ #define INDICATOR_RELAY_SUM_MAX ((UINT16)5) /*ָʾؼ̵*/ #define RTNINDICATOR_SUM_MAX ((UINT8)2U) /*һ۷*/ diff --git a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c index b3ce226..0006cfe 100644 --- a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c +++ b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.c @@ -919,7 +919,7 @@ UINT8 ReadConfigureData(void) g_ret = ReadEaConfigData(g_szEaConfig); if (-1 == g_ret) { - rtnVal = 37u; + rtnVal = 40u; debug_infor_printf((const)"ReadEaConfigData errcode =%d, ReadEaConfigData", rtnVal); } else @@ -1041,7 +1041,26 @@ UINT8 ReadConfigureData(void) if (0 == g_ret) { debug_infor_printf((const)"PhySectionNearConfigDataManage Error\n"); - rtnVal = 37u; + rtnVal = 41u; + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } + + if (0U == rtnVal) + { + /*ȡڼе*/ + g_ret = (INT16)ReadPhySecIndexInAxle(LocalCiId, PhysicalSectionConfigDataStru); + if (0 == g_ret) + { + debug_infor_printf((const)"ReadPhySecIndexInAxle Error\n"); + rtnVal = 42u; } else { @@ -1280,7 +1299,8 @@ UINT8 SetautoRouteOpposedRoute(UINT16 autoRouteRouteId,UINT8 routeType) autoRouteSum = GetAutoRouteRouteCurSum();/*Զ·Ŀ*/ autoReturnSum = GetAutoReturnRouteCurSum();/*Զ۷·Ŀ*/ allAutoReturnSum = GetAllAutoReturnRouteCurSum();/*ȫԶ۷·Ŀ*/ - if ((autoRouteSum >= AUTO_ROUTE_SUM_MAX) || (autoReturnSum >= AUTO_RETURN_SUM_MAX)) + if ((AUTO_ROUTE_SUM_MAX <= autoRouteSum) || (AUTO_RETURN_SUM_MAX<=autoReturnSum ) + ||(ALL_AUTO_RETURN_SUM_MAX <= allAutoReturnSum)) {/**/ returnValue = CI_ERROR; } @@ -3426,4 +3446,40 @@ UINT16 GetTiocDeviceConfigData(UINT32* pConfigDataAddrBuf,UINT16* pConfigDataLen return wRetSum; +} + +/********************************************* +*ܣȡָCIָ豸ͨŹϵ +*˵const UINT8 chCiId ID +* const UINT8 chSystemType 豸 +* UINT8 szDeviceIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX] 豸ID +*ֵͨŹϵ +* by cgh 20250605 +*********************************************/ +UINT8 ReadCiTransmitSpecifyDevData(const UINT8 chCiId, const UINT8 chSystemType, UINT8 szDeviceIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX]) +{ + UINT16 ii = 0U; + UINT8 chReval = 0U; + + if ((0U != chCiId) && (NULL != szDeviceIdBuf)) + { + for (ii = 0U; ii < dquCICfgDtStr.TrsmtRlsDtStrLen; ii++) + { + if ((chCiId == dquCICfgDtStr.TrsmtRlsDtStr[ii].CiId) && (chSystemType == dquCICfgDtStr.TrsmtRlsDtStr[ii].SystemType)) + { + chReval = dquCICfgDtStr.TrsmtRlsDtStr[ii].DeviceSum; + (void)CommonMemCpy((void*)(szDeviceIdBuf), (UINT32)(sizeof(UINT8) * TRANSMIT_OBJECT_DEVICE_SUM_MAX), (const void*)(dquCICfgDtStr.TrsmtRlsDtStr[ii].DeviceIdBuf), (UINT32)(sizeof(UINT8) * TRANSMIT_OBJECT_DEVICE_SUM_MAX)); + } + else + { + ; + } + } + } + else + { + chReval = UINT8_MAX; + } + + return chReval; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h index 76ac73b..a818386 100644 --- a/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h +++ b/TSCP/src/APP/ciapp/Initial/ConfigDataReadManage.h @@ -160,6 +160,16 @@ INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, Phys *ֵ̬ *********************************************/ UINT16 GetTiocDeviceConfigData(UINT32* pConfigDataAddrBuf, UINT16* pConfigDataLenBuf, UINT16 wBufMaxLen); + +/********************************************* +*ܣȡָCIָ豸ͨŹϵ +*˵const UINT8 chCiId ID +* const UINT8 chSystemType 豸 +* UINT8 szDeviceIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX] 豸ID +*ֵͨŹϵ +* 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 94075f3..3a41f23 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.c +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.c @@ -586,6 +586,7 @@ UINT8 InitialSignalData(void) SignalDataStru[signalId].DetainBtnErrFlag = SIGNAL_ZFS_BTN_ERR_FLAG_NO; /*۳ťϱ־*/ SignalDataStru[signalId].CancelDetainBtnErrFlag = SIGNAL_ZFS_BTN_ERR_FLAG_NO; /*ȡ۳ťϱ־*/ SignalDataStru[signalId].DetainBtnPressCycNum = 0U; /*۳ť1*/ + SignalDataStru[signalId].DetainSndBtnPressCycNum = 0U; /*۳ť2*/ SignalDataStru[signalId].CancelDetainBtnPressCycNum = 0U; /*ȡ۳ť*/ SignalDataStru[signalId].CancelDetainErrTrigPressCycNum = 0U; /*ȡ۳ť󴥷*/ SignalDataStru[signalId].CancelDetainBtnValidFlag = SIGNAL_CANCEL_DETAIN_VALID_NO; /*ȡ۳ťЧ־*/ @@ -594,7 +595,11 @@ UINT8 InitialSignalData(void) SignalDataStru[signalId].VobcCroSigInPhyOccSta = SECTION_OCCUPY_NO; /*ʼźŻڷһΪУռѹٸZCȷϢ*/ SignalDataStru[signalId].cSleepTrainLightUpFlag = SIGNAL_SLEEP_TRAIN_LIGHTUP_NO; /*ʼ߳źŻ־Ч*/ SignalDataStru[signalId].cInHumidRailFlag = SIGNAL_IN_HUMID_RAIL_NO; - + SignalDataStru[signalId].cDetCutBtnState = SIGNAL_DETAIN_CUT_VALID_NO; /*۳·ť״̬*/ + SignalDataStru[signalId].DetCutBtnPressCycNum = 0U; /*۳·ť*/ + SignalDataStru[signalId].DetCutBtnErrTrigPressCycNum = 0U; /*۳·ť󴥷*/ + SignalDataStru[signalId].cDetCutBtnErrFlag = SIGNAL_ZFS_BTN_ERR_FLAG_NO; /*۳·ťϱ־*/ + SignalDataStru[signalId].cDetCutBtnRelayDownState = SIGNAL_RELAY_ERROR_DOWN_YES; /*۳·ťɼ̵״̬ʼΪ쳣*/ /*ʼźŻʱ״̬Ч*/ SignalDataStru[signalId].LinShiXianSuSetFlag = SIGNAL_LINSHIXIANSUSET_STATE_YES;/*ʱЧ*/ @@ -858,6 +863,9 @@ UINT8 InitialPhySectionData(void) PhysicalSectionDataStru[ii].UtOrCtOccFlag = SECTION_OCCUPY_YES; PhysicalSectionDataStru[ii].UtOrCtOccuStartCycNum = 0u; PhysicalSectionDataStru[ii].PhySecPreResetState = PHYSICAL_SECTION_PRE_RESET_NO; + PhysicalSectionDataStru[ii].chPreResetBack = PHY_RESET_BACK_RECIVE_YES; + PhysicalSectionDataStru[ii].chDirectResetRst = PHYSICAL_DIRECT_RESET_NO; + PhysicalSectionDataStru[ii].chDirectResetBack = PHY_RESET_BACK_RECIVE_YES; PhysicalSectionDataStru[ii].JumpLockStateToZC = PHYSICAL_SECTION_JUMP_LOCK_NO; PhysicalSectionDataStru[ii].wPhyErrUnlockTime = 0U; PhysicalSectionDataStru[ii].cAreaUrgentBrakeState = PHYSEC_AREA_URGENT_NO; @@ -1363,6 +1371,19 @@ UINT8 InitialPsdData(void) /*Ƶ״̬ʼΪЧгID0*/ PsdDataStru[psdId].chVideoQkDriveState = VIDEO_QK_DRIVE_STATE_INVALID; PsdDataStru[psdId].wVideoQkRelateVobcId = 0U; + + /*Źϸ롢롢״̬Ź״̬Ϣʼ*/ + PsdDataStru[psdId].psdFaultQStataOne = UINT32_MAX; + PsdDataStru[psdId].psdFaultQStataTwo = UINT32_MAX; + PsdDataStru[psdId].psdDoorIStateOne = UINT32_MAX; + PsdDataStru[psdId].psdDoorIStateTwo = UINT32_MAX; + PsdDataStru[psdId].psdDoorsStateOne = UINT32_MAX; + PsdDataStru[psdId].psdDoorsStateTwo = UINT32_MAX; + PsdDataStru[psdId].psdOpenErrState = PSD_OPEN_CLOSE_ERROR; + PsdDataStru[psdId].psdCloseErrState = PSD_OPEN_CLOSE_ERROR; + + PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*ʼΪPSD쳣*/ + PsdDataStru[psdId].dwPsdRelayDownCycNum = 0U; /*PSDŹؼ̵ʼ*/ } reVal = CI_SUCCESS; return reVal; @@ -1541,6 +1562,8 @@ UINT8 InitialRouteData(void) RouteDataStru[routeId].NeedOpenNotTrueRepeatStartCount = 0u;/*迪Ųʱؿʼ*/ RouteDataStru[routeId].DCQState = ROUTE_DCQ_NOT_REQUEST;/*޵*/ RouteDataStru[routeId].DCTYState = ROUTE_DCT_NOT_AGREE; /*޵ͬ*/ + RouteDataStru[routeId].dwDcAgreeBtnPressCycNum = 0U; /*ͬⰴťʼ*/ + RouteDataStru[routeId].chDcAgreeButtonErrState = ROUTE_DC_AGREE_BUTTON_OK; /*ͬⰴťδ*/ RouteDataStru[routeId].CancleDelayflag = ROUTE_ZQX_DELAY_NO; /*ȡ·ʱ*/ RouteDataStru[routeId].AutoSigCancleState = AUTO_ROUTE_CANCLE_NO; /*Զźȡ״̬ΪЧ*/ RouteDataStru[routeId].CancleAutoSigCmd = AUTO_ROUTE_CANCLE_CMD_NO; /*ԶźȡЧ*/ @@ -1568,6 +1591,11 @@ UINT8 InitialRouteData(void) RouteDataStru[routeId].cRouteDrivedSGBJFlag = ROUTE_HAS_DRIVED_SGBJ_INVALID; /*ʼ·δⱨ*/ RouteDataStru[routeId].chRouteNearSecSearchState = ROUTE_NEAR_SEC_HAVE_UT; /*ʼ·ӽβѯ״̬Ϊйϳ*/ RouteDataStru[routeId].chRouteApplySwitchCheckFlag = ROUTE_APPLY_SWITCH_CHECK_DEF; /*ʼ·ڿ־*/ + RouteDataStru[routeId].OtherCiRecordDevID = 0U; + RouteDataStru[routeId].OtherCiRecordDevState = 0U; + RouteDataStru[routeId].OtherCiRecordDevType = 0U; + RouteDataStru[routeId].OtherCiRecordErrorType = 0U; + RouteDataStru[routeId].cRouteToLeadFlag = ROUTE_TO_LEAD_FLAG_NO; /*ʼͨ·ת·־ΪЧ*/ } } @@ -2111,6 +2139,11 @@ void ResetDynamicState(const UINT8 ciId) PhysicalSectionDataStru[ii].FLockType = PHY_SEC_FLOCK_TYPE_NONE; PhysicalSectionDataStru[ii].JumpLockStateToZC = PHYSICAL_SECTION_JUMP_LOCK_NO; PhysicalSectionDataStru[ii].wPhyErrUnlockTime = 0U; + + PhysicalSectionDataStru[ii].PhySecPreResetState = PHYSICAL_SECTION_PRE_RESET_NO; + PhysicalSectionDataStru[ii].chPreResetBack = PHY_RESET_BACK_RECIVE_YES; + PhysicalSectionDataStru[ii].chDirectResetRst = PHYSICAL_DIRECT_RESET_NO; + PhysicalSectionDataStru[ii].chDirectResetBack = PHY_RESET_BACK_RECIVE_YES; } else { @@ -2223,6 +2256,7 @@ void ResetDynamicState(const UINT8 ciId) SetSignalDetainBtnActFlag(devId, SIGNAL_ZFS_BTN_ACT_FLAG_YES); /*źŻ۳ťЧ״̬*/ /*ڻͨжϱεЧԣԼCICIжϡΪ˱֤ĶСԶڷǻͨźŻ䱣ЧһֱΪЧӰ߼*/ SetSignalProSecValid(devId,SIGNAL_PRO_SEC_VALID); + SetDetCutBtnState(devId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -2245,6 +2279,7 @@ void ResetDynamicState(const UINT8 ciId) PsdDataStru[devId].PsdState = PSD_STATE_CLOSE; } PsdDataStru[devId].MutualLockRemoveState = PSD_MUTUALLOCK_REMOVE_NO; + PsdDataStru[devId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*ΪPSD쳣*/ } } @@ -2284,6 +2319,7 @@ void ResetDynamicState(const UINT8 ciId) * ޸ģڽ·е״̬¡ͨжҪ·óɰȫ״̬ * ޸20160511ԶԶ쳣ֽ·״̬ðȫ̬ ·״̬ΪԶԶ쳣ðȫ̬󣬽·ı޷ + * ޸ģ·״̬н·󣬱ʼźŻΪնźŻ۷·״̬Ƿ */ throughRtId = GetRouteThroughRouteId(devId); OverlapLockedId = GetRouteOverlapLockedId(devId); @@ -2302,6 +2338,7 @@ void ResetDynamicState(const UINT8 ciId) { (void)memset(&RouteDataStru[ii], 0, devLen); RouteDataStru[devId].RouteId = devId; + RouteDataStru[devId].RouteState = devState; RouteDataStru[devId].ThroughRouteId = throughRtId; RouteDataStru[devId].OverlapLockedId = OverlapLockedId; } @@ -2655,6 +2692,7 @@ void ResetDynamicStateHlht(const UINT8 ciId) UINT16 ii = 0u; UINT16 devId = 0u;/*IdId豸IdΪ豸ԻڣIdΪ̬ԣһΪ0Ͳܸ*/ UINT16 devLen = 0u; + UINT8 belongCiId = 0U; /*÷DZ̬*/ for (ii = 1u; ii < SWITCH_SUM_MAX; ii++) @@ -2671,6 +2709,7 @@ void ResetDynamicStateHlht(const UINT8 ciId) /*õǰλ */ SwitchDataStru[devId].SwitchCurPosition = SWITCH_POSITION_JICHA; /*ǰλ*/ SwitchDataStru[devId].SingleSwitchCurPosition = SWITCH_POSITION_JICHA; /*ǰλ*/ + SwitchDataStru[devId].LockStatus = SWITCH_LOCK_STATUS_NO; } } @@ -2692,6 +2731,7 @@ void ResetDynamicStateHlht(const UINT8 ciId) PhysicalSectionDataStru[ii].CurAndMergeOccupyState = SECTION_OCCUPY_YES; PhysicalSectionDataStru[ii].PreOccupyState = SECTION_OCCUPY_YES; PhysicalSectionDataStru[ii].CurOccupyState = SECTION_OCCUPY_YES; + PhysicalSectionDataStru[ii].PhySecPreResetState = PHYSICAL_SECTION_PRE_RESET_NO; } } @@ -2775,6 +2815,17 @@ void ResetDynamicStateHlht(const UINT8 ciId) spksDataBuff[devId].cutStatus = SPKS_CUT_NO; /*SPKS·״̬δ*/ } } + + for (ii = 1u; ii < AUTO_ROUTE_SUM_MAX; ii++) + { + devId = ii; + belongCiId = GetAutoRouteBelongCiId(devId); + if (belongCiId == ciId) + { + /*DZ״̬*/ + AutoRouteDataStru[devId].AutoRouteSetFlag = AUTO_ROUTE_SET_NO; /*Զ·δ*/ + } + } } /* @@ -2799,6 +2850,7 @@ void InitOcData(void) for (k = 0U; k < OC_COLL_BOARD_POS_NUM; k++) { m_OcConvertedPtDataArr[i].BoardDatas[j].PosValueBuf[k] = 0u; + m_OcConvertedPtDataArr[i].BoardDatas[j].TolerateCycNum[k] = 0u; } } diff --git a/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionDefine.h b/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionDefine.h index 71be56f..fe9bee3 100644 --- a/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionDefine.h +++ b/TSCP/src/APP/ciapp/InvadeSection/InvadeSectionDefine.h @@ -14,7 +14,7 @@ #ifndef __INVADESECTION_DEFINE_H_ #define __INVADESECTION_DEFINE_H_ -#define INVA_SECT_N_COND_SWIT_SUM_MAX ((UINT16)300) /*Ŀ*/ +#define INVA_SECT_N_COND_SWIT_SUM_MAX ((UINT16)400) /*Ŀ*/ #define COND_SWITCH_SUM_MAX ((UINT16)16) /*һĿ,*/ diff --git a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c index c10e128..6157ce7 100644 --- a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c +++ b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c @@ -526,6 +526,13 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newPhysicalSectionData[deviceId].CurMergeOccupyState;/*ǰںռ״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].PreAndMergeOccupyState;/*֮ǰռںռ״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].CurAndMergeOccupyState;/*ǰռںռ״̬*/ + outString[outStringLength++] = newPhysicalSectionData[deviceId].SectionResetType;/*μḴλ*/ + LongToChar(newPhysicalSectionData[deviceId].SectionResetStartCycNum, &outString[outStringLength]);/*μḴλʼ*/ + outStringLength += 4u; + outString[outStringLength++] = newPhysicalSectionData[deviceId].PhySecPreResetState;/*Ԥλ״̬*/ + outString[outStringLength++] = newPhysicalSectionData[deviceId].chPreResetBack;/*Ԥλ*/ + outString[outStringLength++] = newPhysicalSectionData[deviceId].chDirectResetRst;/*ֱӸλ*/ + outString[outStringLength++] = newPhysicalSectionData[deviceId].chDirectResetBack;/*ֱӸλ*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].StopSteadyFlag;/*ͣ״̬Ϣ*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].ArbState;/*ARB״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].ProtectSecLockDelayTimeFlag;/*ʱ־(ֶ̬)*/ @@ -544,8 +551,6 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 4u; LongToChar(newPhysicalSectionData[deviceId].FaultUnlockStartCycNum,&outString[outStringLength]);/*ʽʱʼ*/ outStringLength += 4u; - LongToChar(newPhysicalSectionData[deviceId].SectionResetStartCycNum,&outString[outStringLength]);/*μḴλʼ*/ - outStringLength += 4u; outString[outStringLength++] = newPhysicalSectionData[deviceId].FLockType; /*ηԭ,SPKSԭ*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].UtOrCtOccFlag; /*ȡռñ־*/ ShortToChar(newPhysicalSectionData[deviceId].SecProUseBelongRouteId,&outString[outStringLength]);/*·ID*/ @@ -558,6 +563,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newPhysicalSectionData[deviceId].chABLTrainFlag; /*ABLгռ״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].chPreABLTrainFlag; /*֮ǰABLгռ״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].cPhySecInHumidRailFlag; /*ʪ־0x55 Ч0xAA Ч*/ + LongToChar(newPhysicalSectionData[deviceId].UtOrCtOccuStartCycNum, &outString[outStringLength]);/*UTCTռʼں*/ + outStringLength += 4u; } } } @@ -652,6 +659,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newSignalData[deviceId].GreenDsBreakFlag;/*̵˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].YellowDsBreakFlag;/*Ƶ˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].WhiteDsBreakFlag;/*׵˿˿־״̬*/ + outString[outStringLength++] = newSignalData[deviceId].BlueDsBreakFlag;/*˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].RedYellowDsBreakFlag;/*Ƶ˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].RedWhiteDsBreakFlag;/*׵˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].GreenYellowDsBreakFlag;/*̻Ƶ˿˿־״̬*/ @@ -683,8 +691,10 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newSignalData[deviceId].CancelDetainBtnErrFlag; /*ȡ۳ťϱ־*/ outString[outStringLength++] = newSignalData[deviceId].CancelDetainBtnValidFlag; /*ȡ۳ťЧ־*/ outString[outStringLength++] = newSignalData[deviceId].CancelDetainRelayDownState; /*ȡ۳ťɼ̵״̬*/ - LongToChar(newSignalData[deviceId].DetainBtnPressCycNum, &outString[outStringLength]); /*۳ť*/ + LongToChar(newSignalData[deviceId].DetainBtnPressCycNum, &outString[outStringLength]); /*۳ť1*/ outStringLength += 4u; + LongToChar(newSignalData[deviceId].DetainSndBtnPressCycNum, &outString[outStringLength]); /*۳ť2*/ + outStringLength += 4U; LongToChar(newSignalData[deviceId].CancelDetainBtnPressCycNum, &outString[outStringLength]); /*ȡ۳ť*/ outStringLength += 4u; LongToChar(newSignalData[deviceId].CancelDetainErrTrigPressCycNum, &outString[outStringLength]); /*ȡ۳ť󴥷*/ @@ -693,6 +703,16 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 2u; outString[outStringLength++] = newSignalData[deviceId].cSleepTrainLightUpFlag; /*߳źŻ־0x55 Ч0xAA Ч*/ outString[outStringLength++] = newSignalData[deviceId].cInHumidRailFlag; /*źŻʪ־0x55 Ч0xAA Ч*/ + outString[outStringLength] = newSignalData[deviceId].cDetCutBtnState; /*۳·ť״̬0x55-Ч0xAA-Ч*/ + outStringLength++; + LongToChar(newSignalData[deviceId].DetCutBtnPressCycNum, &outString[outStringLength]); /*۳·ť*/ + outStringLength += 4U; + LongToChar(newSignalData[deviceId].DetCutBtnErrTrigPressCycNum, &outString[outStringLength]); /*۳·ť󴥷*/ + outStringLength += 4U; + outString[outStringLength] = newSignalData[deviceId].cDetCutBtnErrFlag; /*۳·ťϱ־0x55δϣ0xaa*/ + outStringLength++; + outString[outStringLength] = newSignalData[deviceId].cDetCutBtnRelayDownState; /*۳·ťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ + outStringLength++; } } else @@ -762,6 +782,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = pNewEsbData[deviceId].EssSteadyState;/*ESSȵ״̬ATS--0x55 Ҫȵƣ0xaaҪȵ*/ outString[outStringLength++] = pNewEsbData[deviceId].EssFlashState;/*ESS״̬ATS--0x55 Ҫƣ0xaaҪ*/ outString[outStringLength++] = pNewEsbData[deviceId].EsbErrorFlag;/*Ըʽͣťϱ־0x55δϣ0xaa*/ + outString[outStringLength++] = pNewEsbData[deviceId].EsbRelayDownState;/*رհťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ outString[outStringLength++] = pNewEsbData[deviceId].CancelEsbErrorFlag;/*Ըʽȡͣťϱ־0x55δϣ0xaa*/ outString[outStringLength++] = pNewEsbData[deviceId].CancelEsbValidFlag;/*ȡرհťЧ־0x55Ч0xaaЧ*/ outString[outStringLength++] = pNewEsbData[deviceId].CancelEsbRelayDownState;/*ȡرհťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ @@ -770,7 +791,13 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) LongToChar(pNewEsbData[deviceId].CancelEsbPressCycNum, &outString[outStringLength]);/*ȡرհť*/ outStringLength += 4u; LongToChar(pNewEsbData[deviceId].CancelEsbErrTriggerPressCycNum, &outString[outStringLength]);/*ȡرհť󴥷*/ - outStringLength += 4U; + outStringLength += 4U; + outString[outStringLength++] = pNewEsbData[deviceId].EsbCutErrorFlag; /*ر·ťϱ־0x55δϣ0xaa*/ + outString[outStringLength++] = pNewEsbData[deviceId].EsbCutRelayDownState; /*ر·ťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ + LongToChar(pNewEsbData[deviceId].EsbCutPressCycNum, &outString[outStringLength]); /*ر·ť*/ + outStringLength += 4u; + LongToChar(pNewEsbData[deviceId].EsbCutErrTriggerPressCycNum, &outString[outStringLength]); /*ر·ť󴥷*/ + outStringLength += 4U; } } else @@ -994,7 +1021,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 4u; outString[outStringLength++] = newRouteData[deviceId].DCQState;/*״̬*/ outString[outStringLength++] = newRouteData[deviceId].DCTYState;/*ͬ״̬*/ - + LongToChar(newRouteData[deviceId].dwDcAgreeBtnPressCycNum, &outString[outStringLength]);/*ͬⰴťʼ*/ + outStringLength += 4u; + outString[outStringLength++] = newRouteData[deviceId].chDcAgreeButtonErrState;/*ͬⰴť״̬*/ outString[outStringLength++] = newRouteData[deviceId].DCTYNotSatisfySignalReOpenFlag;/*ͬⲻ-źؿ־*/ LongToChar(newRouteData[deviceId].DCTYNotSatisfyStartCount,&outString[outStringLength]);/*ͬⲻ-ʼ*/ outStringLength += 4u; @@ -1528,8 +1557,11 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newPsdData[deviceId].chVideoQkDriveState; /*Ƶ״̬*/ ShortToChar(newPsdData[deviceId].wVideoQkRelateVobcId, &outString[outStringLength]);/*ƵͶӦгID*/ outStringLength += 2u; + outString[outStringLength] = newPsdData[deviceId].cPsdExceptOpenState; /*쳣״̬0x55-쳣򿪣0xAA-δ쳣*/ + outStringLength++; + LongToChar(newPsdData[deviceId].dwPsdRelayDownCycNum, &outString[outStringLength]); /*PSDŹؼ̵ʼ*/ + outStringLength += 4U; } - } else { @@ -1997,7 +2029,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) LongToChar(pNewSpksData[deviceId].flockStartNum, &outString[outStringLength]); outStringLength += 4U; outString[outStringLength++] = pNewSpksData[deviceId].TotalSpksDriveOutDis; - + LongToChar(pNewSpksData[deviceId].dwSpksBtnPressCycNum, &outString[outStringLength]); /*SPKSťʼں*/ + outStringLength += 4U; } } else @@ -2015,7 +2048,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) else { #ifdef PLATFORM_2OO2 - debug_infor_printf((const)"\nSpksData:%d\spksId(2)-status-cutStatus-flockStartNum(4)-TotalSpksDriveOutDis:%d", (UINT16)sizeof(SpksDataStruct), outStringLength); + debug_infor_printf((const)"\nSpksData:%d\nspksId(2)-status-cutStatus-flockStartNum(4)-TotalSpksDriveOutDis:%d", (UINT16)sizeof(SpksDataStruct), outStringLength); debug_out_array(0xAA, outString, outStringLength); #endif @@ -2115,6 +2148,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) LongToChar(pNewTrainInfoData[deviceId].dwDelayTime, &outString[outStringLength]);/*Ϣӳʱ*/ outStringLength += 4u; + LongToChar(pNewTrainInfoData[deviceId].dwStartFlyCycNum, &outString[outStringLength]);/*гɳʼں*/ + outStringLength += 4U; + ShortToChar(pNewTrainInfoData[deviceId].wGroupOtherTrainId, &outString[outStringLength]);/* һгID*/ outStringLength += 2u; diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c index e01dbc0..1e8963a 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c @@ -1379,6 +1379,7 @@ void RouteRecoverOpenProc(const UINT16 routeId) UINT8 recoverState = ROUTE_RECOVER_STA_STAY;/*ǰָؿ״̬*/ UINT8 errType = CI_ERROR; UINT8 localCiType = GetLocalCiType();/**/ + UINT16 wStartSignalId = 0U; /*·ʼźŻID*/ routeState = GetRouteState(routeId); recoverState = GetRouteRecoverOpenFlag(routeId); @@ -1396,6 +1397,7 @@ void RouteRecoverOpenProc(const UINT16 routeId) errType = RecoverOpenRouteCheckCLD(routeId); } + wStartSignalId = GetRouteStartSignalId(routeId); /*ȡ·ʼźŻID*/ if (errType == CI_SUCCESS) { SetRouteOpenSigStartCycNum(routeId, Get2oo2CurCycleNum()); @@ -1410,6 +1412,9 @@ void RouteRecoverOpenProc(const UINT16 routeId) else { SetRouteRecoverState(routeId, ROUTE_RECOVER_STA_STAY);/*һPSDSPKS۳㣬·ָ״̬Ϊɻָ*/ + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wStartSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.h b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.h index c00d0e6..c0b82de 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.h +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.h @@ -41,6 +41,7 @@ #include "../LogicManage/TradInterlockLogicManage.h" #include "../Train/TrainDefine.h" #include "LogicalRouteDataManage.h" +#include "../EnvelopeManage/EnvelopeManageAPI.h" #ifdef SCADE_MODE #include "../LogicManage/General/LogicManageScadeInterface.h" diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c index f8338e6..2cce109 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c @@ -199,6 +199,9 @@ void InterlockLogicMainProc(void) /*·߼*/ RouteLogicManage(); + /*ղ̵¹*/ + OverlapZhaoChaRelayUpDateManage(); + /*·гͷŽ߼*/ RouteTrainResUnlockManage(); @@ -601,7 +604,6 @@ void RouteLogicManage(void) RouteStateFlagManage(routeId); } - if (RC_WORK_MODE_TIOC == cRcWorkMode) { /*гȡԴʱ wei ȱݣԴȡ*/ @@ -609,10 +611,17 @@ void RouteLogicManage(void) } RouteRecoverOpenProc(routeId); + /*ȡԶź*/ CancleAutoSigCmdProcc(routeId); + + /*·ͬ߼*/ + RouteDCTYLogic(routeId); + /*cgh-ϲCID-2341-5ݽ·״̬ر־*/ ClearSomeFlagDependRouteState(routeId); + + /*cgh-ϲCID-2349-5*/ SetErrorDataBelongVirCiId(recordErrorNum, virCIid);/*ErrorCodeID*/ @@ -843,7 +852,7 @@ void RouteAutoManage(const UINT16 routeId) /*·ѡ*/ RouteFirstXuanPaiManage(routeId); #else - SetCommonRouteLogicManage(routeId); + SetCommonRouteLogicManage(routeId, ESEND_LEVEL_ATS); #endif } } @@ -1217,6 +1226,9 @@ void RouteFirstLockManage(const UINT16 routeId) SetErrorData(EFUNC_LOCK_BLOC_T_ROUTE, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_OVERLAP_UNLOCK, ROUTE_OVERLAP_SET_NO, ESEND_LEVEL_ATS); SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCKERR); /*-->ó쳣*/ + /*ʧܣź޷ţöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + returnValue = CI_ERROR; } else @@ -1239,9 +1251,16 @@ void RouteFirstLockManage(const UINT16 routeId) SetErrorData(EFUNC_LOCK_BLOC_T_ROUTE, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_OVERLAP_UNLOCK, ROUTE_OVERLAP_SET_NO, ESEND_LEVEL_ATS); debug_infor_printf((const)"\nRoute %d ovlerlap OccTimeOut.\n", routeId); SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCKERR); /*-->ó쳣*/ + + /*ʧܣź޷ţöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } + else + { + ; + } } } @@ -1283,8 +1302,10 @@ void RouteFirstLockManage(const UINT16 routeId) else { /*ʧ*/ - SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCKERR); /*-->ó쳣*/ + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -1302,8 +1323,9 @@ void RouteFirstLockErrManage(const UINT16 routeId) { UINT16 startSignalId = 0u; /*·ʼźŻID*/ UINT8 openCloseState = 0u; /*źŻŹر״̬*/ - + UINT8 dctyReOpenFlag = ROUTE_DCTY_REOPEN_NO;/*ͬؿ־*/ UINT8 needOpenNotTrueRepeatFlag = ROUTE_NEEDOPEN_REOPEN_NO;/*迪Ųʱؿ־*/ + UINT8 cFuncRetVal = CI_ERROR; /*ȡ·ֶ̬*/ startSignalId = GetRouteStartSignalId(routeId); /*ȡ·ʼźŻID*/ @@ -1325,7 +1347,11 @@ void RouteFirstLockErrManage(const UINT16 routeId) else { needOpenNotTrueRepeatFlag = GetRouteNeedOpenReopenFlag(routeId); - if (ROUTE_NEEDOPEN_REOPEN_YES == needOpenNotTrueRepeatFlag) + /*ȡͬؿ־*/ + dctyReOpenFlag = GetRouteDCTYNotSatisfySignalReOpenFlag(routeId); + + if ((ROUTE_NEEDOPEN_REOPEN_YES == needOpenNotTrueRepeatFlag) + || (ROUTE_DCTY_REOPEN == dctyReOpenFlag)) { #if 0 SetRouteNeedOpenReopenFlag(routeId,ROUTE_NEEDOPEN_REOPEN_NO); @@ -1357,16 +1383,38 @@ void RouteFirstLockErrManage(const UINT16 routeId) if (((CI_SUCCESS == AutoSignalOrRouteValid(routeId)) && (SIGNAL_DS_BREAK_NO == GetSignalDsBreakFlag(startSignalId))) || (ROUTE_REPEATOPEN_SET_YES == GetRouteRepeatOpenFlag(routeId))) { - /*ؿźźŴ*/ - (void)OpenRouteSignalProc(routeId); + /*ؿźŴ*/ + cFuncRetVal = OpenRouteSignalProc(routeId); + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } else { /* ֽ·쳣״̬*/ needOpenNotTrueRepeatFlag = GetRouteNeedOpenReopenFlag(routeId); - if (ROUTE_NEEDOPEN_REOPEN_YES == needOpenNotTrueRepeatFlag) - {/*迪㣬迪ؿ־Чʱ*/ - (void)OpenRouteSignalProc(routeId); + /*ȡͬؿ־*/ + dctyReOpenFlag = GetRouteDCTYNotSatisfySignalReOpenFlag(routeId); + + if ((ROUTE_NEEDOPEN_REOPEN_YES == needOpenNotTrueRepeatFlag) + || (ROUTE_DCTY_REOPEN == dctyReOpenFlag)) + {/*迪Ų㣬迪ؿ־Ч/ͬؿ־Чʱ*/ + cFuncRetVal = OpenRouteSignalProc(routeId); + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } } } @@ -1384,7 +1432,7 @@ void RouteYuXianLockManage(const UINT16 routeId) UINT8 openCloseState = 0u; /*·ʼźŻ״̬*/ UINT8 startSignalCurColor = 0u; /*ʼźŻǰɫ*/ UINT8 startSignalPreDrvColor = 0u; /*ʼźŻɫ*/ - + UINT8 cFuncRetVal = CI_ERROR; /*ȡ·ֶ̬*/ startSignalId = GetRouteStartSignalId(routeId); /*ȡ·ʼźŻID*/ @@ -1454,7 +1502,16 @@ void RouteYuXianLockManage(const UINT16 routeId) /*Զ·źЧ||źؿЧ*/ /*Ž·źŴ*/ - (void)OpenRouteSignalProc(routeId); + cFuncRetVal = OpenRouteSignalProc(routeId); + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } else { @@ -1478,6 +1535,8 @@ void RouteYuXianOpenManage(const UINT16 routeId) UINT8 sigState = 0u; UINT8 funcId = EFUNC_RouteYuXianOpenManage;/*ID*/ UINT8 checkResult = 0u; + UINT8 dctyReOpenFlag = ROUTE_DCTY_REOPEN_NO; + /*ȡ·ֶ̬*/ startSignalId = GetRouteStartSignalId(routeId); /*ȡ·ʼźŻID*/ @@ -1493,6 +1552,18 @@ void RouteYuXianOpenManage(const UINT16 routeId) SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); } + + dctyReOpenFlag = GetRouteDCTYNotSatisfySignalReOpenFlag(routeId); + if (ROUTE_DCTY_REOPEN == dctyReOpenFlag) + { + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0U); + } + else + { + ; + } + /*ֿŽ·źŴ*/ checkResult = KeepOpenRouteSignalProc(routeId); if (CI_SUCCESS == checkResult) @@ -1526,6 +1597,9 @@ void RouteYuXianOpenManage(const UINT16 routeId) /*޳ӽ*/ SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_LOCK); /*-->Ԥ*/ } + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -1545,6 +1619,9 @@ void RouteYuXianOpenManage(const UINT16 routeId) /*źŻϹرձ*/ SetErrorData(funcId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, sigState, ESEND_LEVEL_ATS); + + /*ֿڼź쳣رգöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -1568,6 +1645,8 @@ void RouteNearLockErrManage(const UINT16 routeId) UINT8 startSignalDsStat = 0U; UINT8 routeRepeatStat = 0U; UINT8 routeTrainNear = 0U; + UINT8 cFuncRetVal = CI_ERROR; + /*ȡ·ʼźŻID*/ startSignalId = GetRouteStartSignalId(routeId); sigInfirPhySecId = GetSignalInFirstPhySecId(startSignalId, routeId); @@ -1647,7 +1726,17 @@ void RouteNearLockErrManage(const UINT16 routeId) /*Զ·źЧ||źؿЧ*/ /*Ž·źŴ*/ - (void)OpenRouteSignalProc(routeId); + cFuncRetVal = OpenRouteSignalProc(routeId); + + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } else { @@ -1774,6 +1863,9 @@ void RouteNearOpenManage(const UINT16 routeId) { SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCKERR); /*-->ýӽ쳣*/ } + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -1783,6 +1875,9 @@ void RouteNearOpenManage(const UINT16 routeId) /*źŻϹرձ*/ SetErrorData(funcId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, sigState, ESEND_LEVEL_ATS); + + /*ֿڼź쳣رգöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -1909,6 +2004,7 @@ void RouteNearLockManage(const UINT16 routeId) UINT16 validReturnSigId = 0U; /*Ч۷źŻ*/ UINT16 returnSecId = 0U; /*۷*/ UINT8 localCiType = 0U;/**/ + UINT8 cFuncRetVal = CI_ERROR; localCiType = GetLocalCiType(); /*ȡ·ʼźŻID*/ @@ -1990,7 +2086,17 @@ void RouteNearLockManage(const UINT16 routeId) { if (SIGNAL_DS_BREAK_NO == GetSignalDsBreakFlag(startSignalId)) { - (void)OpenRouteSignalProc(routeId); + cFuncRetVal = OpenRouteSignalProc(routeId); + + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } else { @@ -2000,7 +2106,17 @@ void RouteNearLockManage(const UINT16 routeId) else if (ROUTE_REPEATOPEN_SET_YES == GetRouteRepeatOpenFlag(routeId)) { /*(ROUTE_REPEATOPEN_SET_YES == GetRouteRepeatOpenFlag(routeId))޸ڣ20170209ա޸ԭֽ֧ӽ쳣ʱӦźؿ*/ - (void)OpenRouteSignalProc(routeId); + cFuncRetVal = OpenRouteSignalProc(routeId); + + if (CI_SUCCESS == cFuncRetVal) + { + /*ųɹȴ*/ + } + else + { + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); + } } else { @@ -2595,6 +2711,8 @@ void RouteLeadLockManage(const UINT16 routeId) { /*ʧ*/ SetRouteStateManage(routeId, ROUTE_STATE_LEAD_LOCKERR); /*-->쳣*/ + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -2730,6 +2848,9 @@ void RouteLeadOpenManage(const UINT16 routeId) SetRouteLeadFaultOpenStartCyc(routeId, 0u); /*ʱʱ*/ SetRouteStateDeal(routeId, ROUTE_STATE_LEAD_LOCKERR); /*-->쳣*/ + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -2739,6 +2860,9 @@ void RouteLeadOpenManage(const UINT16 routeId) SetRouteStateManage(routeId, ROUTE_STATE_LEAD_LOCKERR); /*-->쳣*/ /*źŻϹرձadd by yt 2022422*/ SetErrorData(EFUNC_CLD_OPEN_LEAD_ROUTE, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, SIGNAL_CLOSE, ESEND_LEVEL_ATS); + + /*ֿڼź쳣رգöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -3338,6 +3462,7 @@ UINT8 LockRouteOverlapProc(const UINT16 routeId) SetOverlapXuanPaiStartCycNum(overlapIdBuf[ii], 0u); /*ճɹѡʼ*/ SetOverlapProSwtCheckStartFlag(overlapIdBuf[ii], PROSWITCH_CHECK_START_INVALID); /*ճɹ÷鿪ʼ־Ϊֹͣ*/ SetOverlapProSwtCheckResultFlag(overlapIdBuf[ii], PROSWITCH_CHECK_RESULT_DEFAULT); /*ճɹ־ΪĬֵ*/ + SetOverlaplockSucessStartCycNum(overlapIdBuf[ii], dwCurCycNum);/*ʼ*/ cKeepWorkFlag = CI_ERROR; /*ֹͣ*/ returnValue = CI_SUCCESS; } @@ -3520,6 +3645,8 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) UINT32 dwDelayOpenCycNum = 0U; /*ⱨʱ*/ UINT8 cRouteCanOpenFlag = CI_ERROR; /*·ɿű־*/ UINT32 dwRouteSigOpenStartCyc = 0U; /*·źſʼ*/ + UINT8 dctyReOpenFlag = ROUTE_DCTY_REOPEN_NO;/*ͬؿ־*/ + UINT32 dctyStartCount = 0u;/*ͬʼ*/ routeType = GetRouteType(routeId); /*ȡ·*/ routeLevel = GetRouteLevel(routeId); /*ȡ·ල*/ @@ -3604,6 +3731,8 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*ʱУ*/ } + dctyReOpenFlag = GetRouteDCTYNotSatisfySignalReOpenFlag(routeId);/*ȡͬؿ־*/ + /*ݿźŷֵ*/ if (CI_SUCCESS == returnValue) { /*ɹ*/ @@ -3627,7 +3756,20 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*忪δؿ־δŲؿʼʱ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); + + + if (ROUTE_DCTY_REOPEN == dctyReOpenFlag) + { + SetErrorData(EFUNC_CLD_OpenCommRouteSigProc,CI_DEVICE_TYPE_ROUTE, routeId,ETYPE_DCTY_REOPEN_TIMING_BREAK, dctyReOpenFlag, ESEND_LEVEL_ATS); + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0U); + } + else + { + ; + } + returnValue = CI_SUCCESS; } else if (RETURN_OPEN_ERR_NEEDOPEN == returnValue) @@ -3646,7 +3788,7 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) else { SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } } else if (ROUTE_STATE_FIRST_LOCKERR == routeState/*쳣*/) @@ -3664,12 +3806,12 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) if (CI_TIME_OUT == routeTimeState)/*ʱ*/ { SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } else if (CI_TIME_NO == routeTimeState)/*δʱ*/ { SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } else if (CI_TIME_IN == routeTimeState)/*ʱ*/ { @@ -3679,12 +3821,12 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) { /*Ƿ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } /*Ϊڿ迪ŲʱԶؿУԣźԶؿ־ظ*/ SetRouteRepeatOpenFlag(routeId, ROUTE_REPEATOPEN_SET_NO); /*·źؿ־*/ SetRouteXianSuConfirmStt(routeId, ROUTE_XIANSU_CONFIRM_NO); - SetRouteOpenSigStartCycNum(routeId, 0); /*źſʱ*/ + SetRouteOpenSigStartCycNum(routeId, 0U); /*źſʱ*/ } else { @@ -3698,7 +3840,7 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*忪δؿ־δŲؿʼʱ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } } else @@ -3713,10 +3855,79 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*忪δؿ־δŲؿʼʱ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } + + if (ROUTE_DCTY_REOPEN == dctyReOpenFlag) + { + SetErrorData(EFUNC_CLD_OpenCommRouteSigProc, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_DCTY_REOPEN_TIMING_BREAK, dctyReOpenFlag, ESEND_LEVEL_ATS); + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0U); + } + else + { + ; + } + returnValue = CI_ERROR; } + else if ((ROUTE_TYPE_DIAOCHE == routeType) && (RETURN_DCTY_NOT_SATISIFY == returnValue)/*ͬⲻ*/) + { + (void)DriveSignalClose(startSignalId);/*źŹر*/ + + if (ROUTE_STATE_FIRST_LOCK == routeState/**/) + { + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN); + SetRouteDCTYNotSatisfyStartCnt(routeId, curCycle); + } + else if (ROUTE_STATE_FIRST_LOCKERR == routeState/*쳣*/) + { + sysparaRepeatCount = 0u; + /*鳬ʱ*/ + dctyStartCount = GetRouteDCTYNotSatisfyStartCnt(routeId);/*ȡͬⲻʼ*/ + sysparaRepeatCount = GetSysParaDCTYWaitSigOpenCnt();/*ȡϵͳͬȴźؿʱʱ*/ + + if ((ROUTE_DCTY_REOPEN == dctyReOpenFlag) && (dctyStartCount > 0u)) + { + /*鳬ʱʱ־*/ + /* źʱ״̬*/ + routeTimeState = SystemOverTimeCheck(dctyStartCount, sysparaRepeatCount); + if (CI_TIME_OUT == routeTimeState)/*ʱ*/ + { + SetErrorData(EFUNC_CLD_OpenCommRouteSigProc, + CI_DEVICE_TYPE_ROUTE, routeId, + ETYPE_DCTY_REOPEN_TIMEOUT, dctyReOpenFlag, ESEND_LEVEL_ATS); + + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0u); + } + else if (CI_TIME_NO == routeTimeState)/*δʱ*/ + { + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0u); + } + else if (CI_TIME_IN == routeTimeState)/*ʱ*/ + { + /*ؿ*/ + } + else + { + /*Ƿ*/ + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0u); + } + } + } + else + { + /**/ + } + /*Ϊڿ迪ŲʱԶؿУԣźԶؿ־ظ*/ + SetRouteRepeatOpenFlag(routeId, ROUTE_REPEATOPEN_SET_NO); /*·źؿ־*/ + SetRouteOpenSigStartCycNum(routeId, 0u); /*źſʱ*/ + + returnValue = CI_ERROR; + } else if (RELAY_STATE_WAITE == returnValue) { /*忪δؿ־δŲؿʼʱ*/ @@ -3737,7 +3948,18 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*忪δؿ־δŲؿʼʱ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); + + if (ROUTE_DCTY_REOPEN == dctyReOpenFlag) + { + SetErrorData(EFUNC_CLD_OpenCommRouteSigProc, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_DCTY_REOPEN_TIMING_BREAK, dctyReOpenFlag, ESEND_LEVEL_ATS); + SetRouteDCTYNotSatisfySignalReOpenFlag(routeId, ROUTE_DCTY_REOPEN_NO); + SetRouteDCTYNotSatisfyStartCnt(routeId, 0U); + } + else + { + ; + } if (CI_ROUTE_RECOVER_ERR == errType) { @@ -3971,7 +4193,8 @@ void RouteZongQuXiaoProc(const UINT16 routeId) (ROUTE_STATE_LEAD_OPEN == routeState) || (ROUTE_STATE_LEAD_XUANPAI == routeState)) { - /*·ȡϢ*/ + /*·ȡϢ*/ + SetCiSendCmdBackInfoData(CI_BACK_LEAD_ROUTE_CANCEL, CI_DEVICE_TYPE_ROUTE, routeId, 0u, 0u); } else if (ROUTE_STATE_IDLE == routeState) { @@ -4437,7 +4660,7 @@ UINT8 UnlockRouteOverlapProc(const UINT16 routeId) { ret = UnlockRouteOverlapLogicProcess(routeId, &unlockOverlapId, &wTrainId); /*·Overlap*/ - if (CI_SUCCESS == ret) + if ((CI_SUCCESS == ret) || (CI_OVERLAP_OCC_UNLOCK == ret)) { /*Խ*/ SetOverlapLockState(unlockOverlapId, PHYSICAL_SECTION_LOCK_NO, routeId); /*Overlapδ*/ return CI_SUCCESS; @@ -5319,9 +5542,11 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI /* * ͨ·߼ * ˵ const UINT16 routeId, ·ID +* const UINT8 chSendLevel ͵ȼ * ֵ void +* BY cgh 20250828 */ -void SetCommonRouteLogicManage(const UINT16 routeId) +void SetCommonRouteLogicManage(const UINT16 routeId,const UINT8 chSendLevel) { UINT8 localCiId = 0u; /*ID*/ UINT8 belongCiId = 0u; /*·ID*/ @@ -5343,7 +5568,12 @@ void SetCommonRouteLogicManage(const UINT16 routeId) UINT8 firstLogicOccuState = 0u; UINT8 chLocalCiType = 0U;/**/ UINT8 chSignalReOpenFunc = 0U; - + UINT8 chReadyEnterRouteTrainSum = 0U; + UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; + UINT8 chFunRet = CI_ERROR; + UINT8 chHitSoftWallSwitch = 0U;/*ײǽ*/ + + chHitSoftWallSwitch = GetHitSoftWallSwitch(); /*·ź쳣رգյ·ִźؿ 0xaaִ 0x55ִ*/ chSignalReOpenFunc = GetCiFunctionSwitchConfig(FUNC_ROUTELOCK_OPEN_SIGNAL); @@ -5526,11 +5756,47 @@ void SetCommonRouteLogicManage(const UINT16 routeId) } else if (ROUTE_STATE_NEAR_LOCK == routeState) { - /*ӽٴΰ··״̬Ϊ·ATS·ʱֱԴͬ㿪ź*/ - /*ɾӦ½·*/ - DeleteSetRouteErrorData(); + if (FUNC_HITSOFTWALL_OFF == chHitSoftWallSwitch) + { + chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId); + if (CI_SUCCESS == chFunRet) + { + if (0U == chReadyEnterRouteTrainSum) + { + /*гȫʻ·*/ + /*ӽٴΰ··״̬Ϊ·ATS·ʱֱԴͬ㿪ź*/ + /*ɾӦ½·*/ + DeleteSetRouteErrorData(); - SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCK); /*-->ý·*/ + SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCK); /*-->ý·*/ + } + else + { + /*гδȫʻ·ı·״̬,;Ƿ񱨾*/ + if (ESEND_LEVEL_ATS == chSendLevel) + { + /*Ҫ*/ + } + else + { + /*ɾӦ½·*/ + DeleteSetRouteErrorData(); + } + } + } + else + { + ; /**/ + } + } + else + { + /*ӽٴΰ··״̬Ϊ·ATS·ʱֱԴͬ㿪ź*/ + /*ɾӦ½·*/ + DeleteSetRouteErrorData(); + + SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCK); /*-->ý·*/ + } } else { @@ -6378,9 +6644,15 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) UINT8 chFunRet = CI_ERROR; UINT8 signalBrightFlag = 0u; /*ά޵*/ UINT8 cRcWorkMode = 0U; /*ϵͳģʽ */ + UINT8 chSignalCurColor = 0U;/*źŻɫ*/ + UINT32 dwFaultOpenStartCyc = 0U;/*Ͽʼ*/ + UINT32 dwLeadFaultOpenCyc = 0U; /*·Ͽų*/ + UINT16 wInFirstPhySecId = 0U; /*ڷһID*/ + UINT32 dwCurCycleNum = 0U;/*ǰں*/ /* ȡϵͳģʽ */ cRcWorkMode = GetLocalRcWorkMode(); + dwCurCycleNum = Get2oo2CurCycleNum(); if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX)) { @@ -6393,7 +6665,8 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) if (CI_SUCCESS == chKeepWork) { - routeId = GetPhySecRLockBelongRouteId(GetSignalInFirstLockedPhySecId(signalId)); + wInFirstPhySecId = GetSignalInFirstLockedPhySecId(signalId); + routeId = GetPhySecRLockBelongRouteId(wInFirstPhySecId); signalBrightFlag = GetSignalMaintainState(signalId); chRouteLevel = GetRouteLevel(routeId); /* ʽCBTCCIģʽȫվƱ־Ч*/ @@ -6448,8 +6721,12 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) if (CI_SUCCESS == chKeepWork) { routeState = GetRouteState(routeId); - chSignalOpenCloseState = GetSignalOpenCloseState(GetSignalCurColor(signalId)); - chTimeState = SystemOverTimeCheck(GetRouteLeadFaultOpenStartCyc(routeId), GetSystemParaLeadFaultOpenCyc()); + chSignalCurColor = GetSignalCurColor(signalId); + chSignalOpenCloseState = GetSignalOpenCloseState(chSignalCurColor); + dwFaultOpenStartCyc = GetRouteLeadFaultOpenStartCyc(routeId); + dwLeadFaultOpenCyc = GetSystemParaLeadFaultOpenCyc(); + chTimeState = SystemOverTimeCheck(dwFaultOpenStartCyc,dwLeadFaultOpenCyc); + if ((ROUTE_STATE_LEAD_LOCKERR == routeState) && (SIGNAL_CLOSE == chSignalOpenCloseState)) { @@ -6465,20 +6742,21 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) /*źŰť*/ /*ÿʱ*/ - SetRouteLeadFaultOpenStartCyc(routeId, Get2oo2CurCycleNum()); + SetRouteLeadFaultOpenStartCyc(routeId, dwCurCycleNum); } else if ((ROUTE_STATE_FIRST_LOCKERR == routeState) || (ROUTE_STATE_YUXIAN_LOCK == routeState) || (ROUTE_STATE_NEAR_LOCK == routeState) || (ROUTE_STATE_NEAR_LOCKERR == routeState)) { - /*ת·*/ - + /*ת·-Ҫźſʼڣ鳬ʱ*/ + SetRouteOpenSigStartCycNum(routeId, dwCurCycleNum); /*·쳣 Ԥա ӽ ӽ쳣*/ - chFunRet = LockLeadRouteLogicProcess(routeId); + SetRouteToLeadFlag(routeId, ROUTE_TO_LEAD_FLAG_YES); /*·ת־Чʱ·*/ + chFunRet = OpenLeadRouteLogicProcess(routeId); if (CI_SUCCESS == chFunRet) { /*ճɹ*/ @@ -6490,8 +6768,12 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) /*ʧ*/ /*ԭ·״̬*/ - + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(signalId, SIGNAL_DETAIN_CUT_VALID_NO); } + + SetRouteToLeadFlag(routeId, ROUTE_TO_LEAD_FLAG_NO); /*·ɺ·ת־ΪЧ*/ } else { @@ -7427,8 +7709,7 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState) */ void UpdateZhaoChaStateManage(const UINT16 routeId, UINT8 routeState) { - UINT16 wSelfRealyId = 0U;/*ǰģʽղ̵ID*/ - UINT16 wOtherRealyId = 0U;/*һģʽղ̵ID*/ + UINT16 wSelfRealyId = 0U;/*ղ̵ID*/ UINT8 relauDrvState = 0U; UINT16 realyIdInterface = 0u; UINT8 relauDrvStateInterface = 0u; @@ -7442,27 +7723,10 @@ void UpdateZhaoChaStateManage(const UINT16 routeId, UINT8 routeState) UINT16 endSignalId = 0u; UINT8 funcSwitchSupportRelayInterface = 0u; UINT8 confirmRelayInterfaceFlag = 0u; - UINT8 chRouteLevel = 0U; - /*·ලȷ*/ - chRouteLevel = GetRouteLevel(routeId); + wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ղ̵ID*/ - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - wOtherRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId); /*CBTCģʽղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - wSelfRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId); /*CBTCģʽղ̵ID*/ - wOtherRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - - /*ȡ̵ӿڱղID*/ +/*ȡ̵ӿڱղID*/ realyIdInterface = GetRouteRelayBenDuanZcIdOnRelay(routeId); relauDrvStateInterface = GetRelayDriveState(realyIdInterface); localCi = GetSystemParaLocalCiId(); /*ȡID*/ @@ -7474,56 +7738,30 @@ void UpdateZhaoChaStateManage(const UINT16 routeId, UINT8 routeState) routeLockCycNum = GetRouteLockStartCycNum(routeId); timeOutCycCount = GetSystemParaSignalCloseCyc(); - /*ӿڱ˼̵*/ - if ((ROUTE_STATE_IDLE == routeState) || - (ROUTE_STATE_FIRST_XUANPAI == routeState) || - (ROUTE_STATE_XUANPAI == routeState) || - (ROUTE_STATE_LEAD_FIRST_XUANPAI == routeState) || - (ROUTE_STATE_LEAD_XUANPAI == routeState)) + if (0U < wSelfRealyId) { - /*· ģʽղ鶼*/ - - if (0U < wSelfRealyId) + /*ӿڱ˼̵*/ + if ((ROUTE_STATE_IDLE == routeState) || + (ROUTE_STATE_FIRST_XUANPAI == routeState) || + (ROUTE_STATE_XUANPAI == routeState) || + (ROUTE_STATE_LEAD_FIRST_XUANPAI == routeState) || + (ROUTE_STATE_LEAD_XUANPAI == routeState)) { relauDrvState = GetRelayDriveState(wSelfRealyId); if (RELAY_DRIVE_STATE_NULL == relauDrvState) { (void)SetRelayDriveState(wSelfRealyId, RELAY_STATE_UP); - SetRelayDriveStartCyc(wSelfRealyId); } } - if (0U < wOtherRealyId) - { - relauDrvState = GetRelayDriveState(wOtherRealyId); - if (RELAY_DRIVE_STATE_NULL == relauDrvState) - { - (void)SetRelayDriveState(wOtherRealyId, RELAY_STATE_UP); - SetRelayDriveStartCyc(wOtherRealyId); - } - } - - } - else - { - /*· ģʽӦղ¡һģʽղ*/ - if (0U < wOtherRealyId) - { - relauDrvState = GetRelayDriveState(wOtherRealyId); - if (RELAY_DRIVE_STATE_NULL == relauDrvState) - { - (void)SetRelayDriveState(wOtherRealyId, RELAY_STATE_UP); - SetRelayDriveStartCyc(wOtherRealyId); - } - } - if (0U < wSelfRealyId) + else { (void)SetRelayDriveState(wSelfRealyId, RELAY_STATE_DOWN); - SetRelayDriveStartCyc(wSelfRealyId); realyIdState = GetRelayCollState(wSelfRealyId); + if (RELAY_STATE_DOWN != realyIdState) { - overTimeCheck = CheckRelayDriveOutTime(wSelfRealyId, timeOutCycCount); - if (CI_ERROR == overTimeCheck) + overTimeCheck = SystemOverTimeCheck(routeLockCycNum, timeOutCycCount); + if (CI_TIME_OUT == overTimeCheck) { SetPlatOverFlag(); /*ƽ̨崻*/ SetErrorData(EFUNC_PLAT_OVER, CI_DEVICE_TYPE_RELAY, wSelfRealyId, ETYPE_ZHAOCHA_ROUTE_OVERTIME, RELAY_STATE_UP, ESEND_LEVEL_ZERO);/*¼崻*/ @@ -8138,20 +8376,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 }; @@ -8174,6 +8410,8 @@ 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*/ @@ -8198,35 +8436,11 @@ void SetThroughRouteManage(const UINT16 signalId) { /*ȡս·*/ lockPhyBelongRoute = GetPhySecRLockBelongRouteId(signalInSecId); - nextRouteDirection = GetRouteDirection(lockPhyBelongRoute); - returnRouteDirection = GetRouteDirection(returnRouteId); + saveReRouteDir = 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 (nextRouteDirection == returnRouteDirection) + if (wEndSignalId == wStartSignalId) { if ((localCiId == returnRouteIdBelongCiId) && (localCiId == throughRouteIdBelongCiId)) {/*۷·ͨ·ڱ۷·кͨ·Զ*/ @@ -8245,16 +8459,12 @@ 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); @@ -9058,7 +9268,7 @@ void AllAutoReturnManage(const UINT16 routeId) /*·ѡ*/ RouteFirstXuanPaiManage(routeId); #else - SetCommonRouteLogicManage(routeId); + SetCommonRouteLogicManage(routeId, ESEND_LEVEL_ATS); #endif } } @@ -11141,6 +11351,9 @@ void JumpLockManage(void) { /*߼Ծڼͨжϴ*/ CheckLogSecJumpLockManage(); + + /*Ծ봦*/ + TrainJumpBackApplyProc(); } else if (RC_WORK_MODE_CI == chRCMode) { @@ -11837,7 +12050,7 @@ void SetCiPscPlConfirmFlag(UINT8 setFlag, const UINT16 pscId) if (TRANSMIT_STATE_GOOD != transmitState) { /*öӦPSCϵͳӦPSD·״̬*/ - SetPsdPscConfirmFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId, setFlag); + SetPsdConfirmFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId, setFlag); } else { @@ -11869,11 +12082,11 @@ void SetCiPscPlConfirmFlag(UINT8 setFlag, const UINT16 pscId) { localCiPsdNum++; /*ȡATSȷ·־*/ - psdAtsConfirmFlag = GetPsdPscPlFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId); + psdAtsConfirmFlag = GetPsdPlFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId); if (CI_PSC_PL_CONFIRM_YES == psdAtsConfirmFlag) { /*ȡȷϱ־*/ - SetPsdPscConfirmFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId, CI_PSC_PL_CONFIRM_NO); + SetPsdConfirmFlag(pscToCiDataStru[pscSystemId].psdDataStr[j].psdId, CI_PSC_PL_CONFIRM_NO); } else { @@ -12693,7 +12906,7 @@ void RouteApplyLogicManage(const UINT16 routeId, const UINT16 trainId) if ((ROUTE_STATE_YUXIAN_OPEN != routeCurState) && (ROUTE_STATE_NEAR_OPEN != routeCurState)) { /** ͨ·߼*/ - SetCommonRouteLogicManage(routeId); + SetCommonRouteLogicManage(routeId, ESEND_LEVEL_ZERO); } else { @@ -12796,6 +13009,9 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, UINT16 wUsableLogicRouteId = 0U; /*õС߼·ID*/ UINT8 cCiType = 0U; /**/ UINT8 cCommStateWithTrain = CI_ERROR; /*복ͨ״̬*/ + UINT8 cFunRet = CI_ERROR; + UINT8 cFunctionId = EFUNC_PART_ROUTE_CMD_PROC; + UINT8 cSendLevel = ESEND_LEVEL_ATS; cLocalCiId = GetSystemParaLocalCiId(); @@ -12815,12 +13031,20 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, /*һ߼Ƿ*/ keepWork = LogSecSeqIsContinuousCheck(cLogSecSeqDir, cLogSecSum, pLogSecIdBuff, szQueryDir); cCheckStep++; + if (CI_ERROR == keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_LOGSEC_CONTINUOUS, 0U, cSendLevel); + } + else + { + /**/ + } } if (CI_SUCCESS == keepWork) { /*ڶгԴǷȫзǷATS·зƥ*/ - keepWork = TrainResAndDirCheck(wTrainId, szQueryDir[0U], cLogSecSum, pLogSecIdBuff, &cHalfRouteSwitchMoveFlag, &wVBTCOccLogSecSum, wVBTCOccLogSecID); + keepWork = TrainResAndDirCheck(wTrainId, szQueryDir[0U], cLogSecSum, pLogSecIdBuff, &cHalfRouteSwitchMoveFlag, &wVBTCOccLogSecSum, wVBTCOccLogSecID, cFunctionId, cSendLevel); cCheckStep++; } @@ -12912,11 +13136,16 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, /*߼ǷԽ*/ keepWork &= SeqNumAndIncLogSecNumCheck(cEndSignalSum, cSplitLogSecSumBuff); keepWork &= SeqNumAndIncLogSecNumCheck(cLogicRouteNum, szLrIncLogSecNum); - + if (CI_ERROR == keepWork) { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); break; /*ʧܣֹͣ*/ } + else + { + /**/ + } } cCheckStep++; @@ -12948,7 +13177,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, szLrStartSignalId[cLogicRouteNum] = 0U; /*׸е߼·ʼźŻĬΪ0*/ cLogicRouteNum++; - keepWork = LogSecIsSwitchAndStopAreaCheck(szLrIncLogSecId[cLogicRouteNum - 1U][szLrIncLogSecNum[cLogicRouteNum - 1U] - 1U]); /*һ߼εͣ*/ + keepWork &= LogSecIsSwitchAndStopAreaCheck(szLrIncLogSecId[cLogicRouteNum - 1U][szLrIncLogSecNum[cLogicRouteNum - 1U] - 1U]); /*һ߼εͣ*/ keepWork &= SeqNumAndIncLogSecNumCheck(cLogicRouteNum, szLrIncLogSecNum); /*У߼·߼Ƿ*/ /*ƥ·дڵ߼·Ϣ*/ @@ -12970,6 +13199,15 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, cSplitLogSecSumBuff[k + 1U] = 0U; } } + + if (CI_ERROR == keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + } + else + { + /**/ + } } cCheckStep++; @@ -12979,6 +13217,15 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, { /*岽ͨųûǰ˿*/ keepWork = CtTrainHeadSuspCheck(wTrainId, cLogSecSeqDir, pLogSecIdBuff[0U]); + + if (CI_ERROR == keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } @@ -13040,15 +13287,23 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { - SetRouteStateManage(wMatchedRouteIdBuff[i], ROUTE_STATE_IDLE); /*ʧܣý·*/ + debug_infor_printf((const)"HalfRoutePhySecUseLogicProcess Err!\n"); } } - else if ((cLocalCiId != cRouteBelongCiId) && (0U != cLocalCiId) && (CI_TYPE_CLD != cCiType)) + else if ((cLocalCiId != cRouteBelongCiId) && (0U != cLocalCiId)) { - /*ӵ͸dz̬·ṹ*/ - cFirstLogSecDir = ConvertLogicDirToRun(szQueryDir[tempIndex]); - AddCiSendToCiDrCmdHalfInfo(wTrainId, (UINT8)wVBTCOccLogSecSum, wVBTCOccLogSecID, cHalfRouteSwitchMoveFlag, 0U); - AddCiSendToCiDrCmdLogSecInfo(CICI_DR_CMD_HALF, cFirstLogSecDir, cSplitLogSecSumBuff[i], wSplitLogSecIdBuff[i], cRouteBelongCiId); + cFunRet = RouteCldAttrCheck(wMatchedRouteIdBuff[i]); /*·Լ*/ + if (CI_SUCCESS == cFunRet) + { + /*dzλΪγ/ν·ӵ͸̬·ṹ*/ + cFirstLogSecDir = ConvertLogicDirToRun(szQueryDir[tempIndex]); + AddCiSendToCiDrCmdHalfInfo(wTrainId, (UINT8)wVBTCOccLogSecSum, wVBTCOccLogSecID, cHalfRouteSwitchMoveFlag, 0U); + AddCiSendToCiDrCmdLogSecInfo(CICI_DR_CMD_HALF, cFirstLogSecDir, cSplitLogSecSumBuff[i], wSplitLogSecIdBuff[i], cRouteBelongCiId); + } + else + { + /**/ + } } else { @@ -13076,9 +13331,9 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, wDrSubIdBuff[cDrSubSum] = wMatchedRouteIdBuff[i]; cDrSubSum++; } - else if ((cLocalCiId != cRouteBelongCiId) && (0U != cLocalCiId)) + else if ((cLocalCiId != cRouteBelongCiId) && (0U != cLocalCiId) && (CI_TYPE_CLD != cCiType)) { - /*ӵ͸̬·ṹ*/ + /*ԷdzΣӵ͸̬·ṹ*/ cFirstLogSecDir = ConvertLogicDirToRun(szQueryDir[tempIndex]); AddCiSendToCiDrCmdHalfInfo(wTrainId, (UINT8)wVBTCOccLogSecSum, wVBTCOccLogSecID, cHalfRouteSwitchMoveFlag, 0U); AddCiSendToCiDrCmdLogSecInfo(CICI_DR_CMD_FULL, cFirstLogSecDir, cSplitLogSecSumBuff[i], wSplitLogSecIdBuff[i], cRouteBelongCiId); @@ -13163,6 +13418,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_REPEAT, 0U, cSendLevel); debug_infor_printf((const)"Dynamic Logic Route Set Is Error: LogicRoute Repeat Set!\n"); /*߼·ظͣ*/ } } @@ -13186,6 +13442,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_LOGSEC_CBTC_PROPERTY, 0U, cSendLevel); debug_infor_printf((const)"Dynamic Logic Route Set Is Error: LogSec Is Not CBTC Property!\n"); /*߼·ʧܣ߼ηCBTC*/ } } @@ -13970,7 +14227,7 @@ UINT8 CheckPhysecFlockReasonSpksId(const UINT16 phySectionId, UINT16* spksId, UI * *޸ģmpt 202239 ӱ˹߼ */ -UINT8 LaborUnlockOverlapProc(const UINT8 overlapId) +UINT8 LaborUnlockOverlapProc(const UINT16 overlapId) { /*ʼ*/ UINT8 overlapBelongCi = 0u; @@ -14696,7 +14953,7 @@ void SetRoutePartApplyFromCi(ToCiDrCmdDataStruct* pCiRecvCiDrCmdStru) UINT16 wUsableLogicRouteId = 0U; /*õС߼·ID*/ UINT8 cCheckStep = 0U; /*¼еλãڴ*/ UINT8 szQueryDir[UINT8_MAX] = { 0U }; /*߼ζӦIJѯ߼*/ - UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cLocalCiId = 0U; /*ID*/ /*μ*/ if (NULL == pCiRecvCiDrCmdStru) @@ -15461,6 +15718,8 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain UINT8 cRouteBelongCiId = 0U; UINT16 wMatchedRouteId = 0U; /*ƥĽ·*/ UINT8 cCheckStep = 0U; /*¼еλãڴ*/ + UINT8 cFunctionId = EFUNC_PART_ROUTE_CMD_PROC_CLD; + UINT8 cSendLevel = ESEND_LEVEL_ATS; /*μ*/ wTrainIndex = GetTrainBufIndex(wTrainId); @@ -15477,7 +15736,7 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain if (CI_SUCCESS == keepWork) { /*һ߼мгλã߼Ϊ߻ѹΨһδաгȫλ߻ѹ*/ - keepWork = LogSecSeqAndTrainPosCheckCLD(cLogSecSum, pLogSecIdBuff, wTrainId); + keepWork = LogSecSeqAndTrainPosCheckCLD(cLogSecSum, pLogSecIdBuff, wTrainId, cFunctionId, cSendLevel); cCheckStep++; } else @@ -15489,6 +15748,15 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain { /*ڶ߼Уƥг·*/ keepWork = LogSecSeqAndRouteMatchCheckCLD(cLogSecSeqDir, pLogSecIdBuff[0], &wMatchedRouteId); + + if (CI_SUCCESS != keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } else @@ -15500,6 +15768,15 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain { /*ͨųûǰ˼˿*/ keepWork = CtTrainSuspCheck(wTrainId); + + if (CI_SUCCESS != keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } else @@ -15597,6 +15874,10 @@ void RouteOtherCiSwitchManage(void) 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*/ @@ -15635,7 +15916,7 @@ void RouteOtherCiSwitchManage(void) if (CI_SUCCESS == chResult) { SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_YES); - chResult = RouteRelAllSwitchPosCheck(wRouteId); + chResult = RouteRelAllSwitchPosCheck(wRouteId, &devId, &devState); if (CI_SUCCESS == chResult) { ; /*λȷسɹ*/ @@ -15651,6 +15932,7 @@ void RouteOtherCiSwitchManage(void) { /*·Ҫڹ涨λã*/ SetRouteApplySwitchCheckFlag(wRouteId, ROUTE_APPLY_SWITCH_CHECK_NO); + SetRouteApplySwitchCheckErrorData(wRouteId, devId, CI_DEVICE_TYPE_SWITCH, devState, ETYPE_SWT_POSTION_STATE); } } @@ -15658,6 +15940,7 @@ 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 @@ -15667,6 +15950,10 @@ 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); } } @@ -15931,4 +16218,319 @@ void LeadRouteFirstXuanPaiManage(const UINT16 routeId) /*ý·*/ SetRouteStateManage(routeId, ROUTE_STATE_IDLE); } +} + +/* +* OC-P·״̬ȷϱ־ +* ˵ UINT8 setFlag,ñ־ +* UINT16 pscId PSC豸ID +* ֵ +*/ +void SetOcPscPlConfirmFlag(UINT8 setFlag, const UINT16 ocPId) +{ + /*ʼ*/ + UINT8 i = 0u; + UINT8 j = 0u; + UINT8 kk = 0u; + UINT8 localCiId = 0u; + UINT8 deviceSum = 0u;/*ͨ豸*/ + UINT8* pDeviceIdBuf = NULL;/*ͨ豸ID*/ + UINT16 saveOcPId = 0u; + UINT8 lowByteOcPId = 0u; + UINT8 ocPSystemId = 0u; + UINT8 transmitReval = CI_ERROR; + UINT8 transmitState = 0u; + UINT8 ocPscConfirmFlag = 0u; + UINT8 findOcFlag = 0u; + + /*Աֵ*/ + saveOcPId = ocPId; + lowByteOcPId = (UINT8)(saveOcPId & 0x00FFU); + + deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸*/ + pDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸ID*/ + localCiId = GetSystemParaLocalCiId();/*ȡCI ID*/ + + for (i = 0u; i < deviceSum; i++) + { + findOcFlag = 0u; + /*ƥOC-P ID*/ + if (lowByteOcPId == pDeviceIdBuf[i]) + { + ocPSystemId = pDeviceIdBuf[i]; + /*OC-PϵͳIDϷ*/ + if (OC_SUM_MAX > ocPSystemId) + { + /*CIͨ״̬*/ + transmitReval = UpdateCiTransmitState(localCiId, CI_SYSTEM_TYPE_OC, ocPSystemId); + if (CI_SUCCESS == transmitReval) + { + transmitState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, ocPSystemId); + } + + /*ҵIDӦ*/ + for (kk = 0u; kk < m_OcToCiOrginDataNum; kk++) + { + /*ҵOC idӦ±kk*/ + if (m_OcToCiOrginDataArr[kk].OcId == ocPSystemId) + { + findOcFlag = 1u; + break; + } + } + + if (1u == findOcFlag) + { + /*ҵˣ·*/ + if (OC_PSC_PL_CONFIRM_YES == setFlag) + { + for (j = 0u; j < m_OcToCiOrginDataArr[kk].OCPsdNum; j++) + { + /*ͨ쳣*/ + if (TRANSMIT_STATE_GOOD != transmitState) + { + /*OC-PϵͳӦPSD·״̬*/ + SetPsdConfirmFlag(m_OcToCiOrginDataArr[kk].PsdInfo[j].wPsdId, setFlag); + } + else + { + /**/ + } + } + } + else + { + for (j = 0u; j < m_OcToCiOrginDataArr[kk].OCPsdNum; j++) + { + /*ȡOC-Pȷ·־*/ + ocPscConfirmFlag = GetPsdPlFlag(m_OcToCiOrginDataArr[kk].PsdInfo[j].wPsdId); + if (OC_PSC_PL_CONFIRM_YES == ocPscConfirmFlag) + { + /*ȡȷϱ־*/ + SetPsdConfirmFlag(m_OcToCiOrginDataArr[kk].PsdInfo[j].wPsdId, OC_PSC_PL_CONFIRM_NO); + } + else + { + /*·״̬*/ + } + } + } + } + + } + else + { + /*OC-P IDϷ*/ + } + + /*ҵѭ*/ + break; + } + + } +} + +/* +* ղ +* ˵ const UINT16 wRouteId ·ID +* ֵ +* by cgh 20250617 +*/ +void OverlapZhaoChaRelayUpDateManage(void) +{ + UINT16 wOverlapCurSum = 0U;/*εǰ*/ + UINT16 ii = 0U; + UINT16 wOverlapId = 0U;/*ID*/ + UINT8 chOverlapBelCiId = 0U;/*ID*/ + UINT8 chLocalCiId = 0U;/*ID*/ + UINT16 wThisZhaoChaRelayId = 0U; /*ղ̵ID*/ + UINT32 dwOverlapLockStartCycNum = 0U;/*ʼں*/ + UINT8 chRelayDriveState = 0U; /*̵״̬*/ + UINT8 chRelayCollState = 0U; /*̵ɼ״̬*/ + UINT8 chTimeCheckFlag = 0U;/*ʱ*/ + UINT32 dwSigalCloseCyc = 0U; /*źŻرճ*/ + + wOverlapCurSum = GetOverlapCurSum(); + chLocalCiId = GetSystemParaLocalCiId(); + + for (ii = 0U; ii < wOverlapCurSum; ii++) + { + wOverlapId = GetOverlapId(ii); + chOverlapBelCiId = GetOverlapBelongCiId(wOverlapId); + + if ((chLocalCiId == chOverlapBelCiId) && (0U != chLocalCiId)) + { + wThisZhaoChaRelayId = GetOverlapThisZhaoChaRelayId(wOverlapId); /*ղ̵ID*/ + + if (0U < wThisZhaoChaRelayId) + { + dwOverlapLockStartCycNum = GetOverlaplockSucessStartCycNum(wOverlapId); + /*ӿڱ˼̵*/ + if (0U == dwOverlapLockStartCycNum) + { + chRelayDriveState = GetRelayDriveState(wThisZhaoChaRelayId); + + if (RELAY_DRIVE_STATE_NULL == chRelayDriveState) + { + (void)SetRelayDriveState(wThisZhaoChaRelayId, RELAY_DRIVE_STATE_UP); + } + } + else + { + (void)SetRelayDriveState(wThisZhaoChaRelayId, RELAY_DRIVE_STATE_DOWN); + chRelayCollState = GetRelayCollState(wThisZhaoChaRelayId); + + if (RELAY_STATE_DOWN != chRelayCollState) + { + dwSigalCloseCyc = GetSystemParaSignalCloseCyc(); + chTimeCheckFlag = SystemOverTimeCheck(dwOverlapLockStartCycNum, dwSigalCloseCyc); + + if (CI_TIME_OUT == chTimeCheckFlag) + { + SetPlatOverFlag(); /*ƽ̨崻*/ + SetErrorData(EFUNC_PLAT_OVER, CI_DEVICE_TYPE_RELAY, wThisZhaoChaRelayId, ETYPE_ZHAOCHA_OVERLAP_OVERTIME, RELAY_STATE_UP, ESEND_LEVEL_ZERO);/*¼崻*/ + } + } + } + } + else + { + ; /*ޱղ̵*/ + } + } + else + { + ; /*ڱ*/ + } + } +} + +/* +* гԾ״̬ +* ˵ +* ֵ +* Create: fan 20250725 +*/ +void TrainJumpBackApplyProc(void) +{ + UINT8 chTrainIndex = 0U; + UINT16 wTrainId = 0U; /*гID*/ + UINT16 wMaxTailLink = 0u; /*link*/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT8 chJumpBackApplyState = 0U;/*г״̬*/ + UINT8 chAcBelongCiId = 0U; /**/ + UINT8 chLocalCiId = 0U;/*ID*/ + UINT8 chDir = 0U; /*з*/ + UINT8 linkNum = 0U;/*link*/ + TRAIN_SEQUANCE_s linkInctrainList[SIZE_MAX_TRAINOFAC] = { 0u }; /*linkϵг*/ + UINT8 k = 0U; + UINT8 cLinkIncTrainSum = 0U; /*linkг*/ + UINT8 chFindBaseTrain = CI_ERROR; + UINT8 chBackTrain = CI_ERROR; + UINT16 chElmTrainID = 0U; + EnvelopeStruct* strTrainEnvelope = NULL; /*гϢ*/ + + chLocalCiId = GetSystemParaLocalCiId(); + /* г */ + for (chTrainIndex = 0u; chTrainIndex < TRAIN_SUM_MAX; chTrainIndex++) + { + wTrainId = GetTrainId(chTrainIndex); + chElmTrainID = (wTrainId & 0x00ff); + chJumpBackApplyState = GetTrainJumpBackApplyState(wTrainId); + wMaxTailLink = GetTrainMaxTailLink(wTrainId); + wAxisSecId = GetLinkBelongAcId(wMaxTailLink); + chAcBelongCiId = (UINT8)GetAxisBelongTiocAllLine(wAxisSecId); + if (TRAIN_JUMP_BACK_STATE_VALID != chJumpBackApplyState) + { + /*δ,Ĭ״̬ 0*/ + SetTrainJumpBackReplyState(wTrainId, TRAIN_JUMP_BACK_STATE_NONE); + } + else + { + /*ò*/ + SetTrainJumpBackReplyState(wTrainId, TRAIN_JUMP_BACK_STATE_INVALID); + linkNum = GetAxisLinkSum(wAxisSecId); + if (chLocalCiId == chAcBelongCiId) + { + strTrainEnvelope = elm_GetEnvelopeInfoByTrainID(chElmTrainID); + if ((1U == linkNum) && (NULL != strTrainEnvelope)) + { + if (0U == strTrainEnvelope->tailTrainID) + { + chDir = GetTrainDir_MaxTail(wTrainId); + cLinkIncTrainSum = as_GetLinkTrainList(wMaxTailLink, linkInctrainList, SIZE_MAX_TRAINOFAC); + chFindBaseTrain = CI_ERROR; + chBackTrain = CI_SUCCESS; + if (DIR_CONVERT == chDir) + { + for (k = 0U; k < cLinkIncTrainSum; k++) + { + if (chElmTrainID == linkInctrainList[k].u16TrainID) + { + chFindBaseTrain = CI_SUCCESS; + } + else + { + if (CI_SUCCESS == chFindBaseTrain) + { + /*г*/ + chBackTrain = CI_ERROR; + break; + } + else + { + ; /*ǰг */ + } + } + } + } + else if (DIR_SAME == chDir) + { + for (k = cLinkIncTrainSum; 0U < k; k--) + { + if (chElmTrainID == linkInctrainList[k - 1].u16TrainID) + { + chFindBaseTrain = CI_SUCCESS; + } + else + { + if (CI_SUCCESS == chFindBaseTrain) + { + /*г*/ + chBackTrain = CI_ERROR; + break; + } + else + { + ; /*ǰг */ + } + } + } + } + else + { + /**/ + chBackTrain = CI_ERROR; + } + if (CI_SUCCESS == chBackTrain) + { + SetTrainJumpBackReplyState(wTrainId, TRAIN_JUMP_BACK_STATE_VALID); + } + } + 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 d27a910..1f51a2d 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.h @@ -365,9 +365,11 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI /* * ͨ·߼ * ˵ const UINT16 routeId, ·ID -* ֵ void +* const UINT8 chSendLevel ͵ȼ +* ֵ void +* BY cgh 20250828 */ -void SetCommonRouteLogicManage(const UINT16 routeId); +void SetCommonRouteLogicManage(const UINT16 routeId, const UINT8 chSendLevel); /* * ·߼ @@ -947,7 +949,7 @@ UINT8 CheckPhysecFlockReasonSpksId(const UINT16 phySectionId, UINT16* spksId, UI * *޸ģmpt 202239 ӱ˹߼ */ -UINT8 LaborUnlockOverlapProc(const UINT8 overlapId); +UINT8 LaborUnlockOverlapProc(const UINT16 overlapId); /* * ձα־ * ˵ const UINT16 routeId, ·ID @@ -1131,6 +1133,29 @@ void RouteTrainResUnlockManage(void); */ void LeadRouteFirstXuanPaiManage(const UINT16 routeId); +/* +* OC-P·״̬ȷϱ־ +* ˵ UINT8 setFlag,ñ־ +* UINT16 pscId PSC豸ID +* ֵ +*/ +void SetOcPscPlConfirmFlag(UINT8 setFlag, const UINT16 ocPId); + +/* +* ղ +* ˵ const UINT16 wRouteId ·ID +* ֵ +* by cgh 20250617 +*/ +void OverlapZhaoChaRelayUpDateManage(void); +/* +* гԾ״̬ +* ˵ +* ֵ +* Create: fan 20250725 +*/ +void TrainJumpBackApplyProc(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c index 4431120..3223da4 100644 --- a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c @@ -3011,10 +3011,9 @@ UINT8 RecoverOpenRouteCheckCLD(const UINT16 routeId) UINT8 routeType = 0u; /*·*/ UINT8 errType = CI_ERROR;/*ʧʱĴ*/ UINT8 jkjRelayValidFlag = 0u; /*ʼӦ̵̼Ч״̬*/ - UINT16 jkjRelayId = GetJkjRelayId(); jkjRelayValidFlag = GetCiJkjFlag(); routeType = GetRouteType(routeId); /*ȡ·*/ - if ((jkjRelayId > 0u) && (JKJ_REYLAY_VALID == jkjRelayValidFlag)) + if (JKJ_REYLAY_VALID == jkjRelayValidFlag) {/*Ӧ̵̼Ч״̬,źؿ*/ errType = CI_ERROR; } @@ -3796,6 +3795,23 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId) reResult = checkResult; } } + + + /*ղ̵״̬*/ + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + checkResult = OverlapZhaoChaRelayCheck(overlapId, ESEND_LEVEL_ZERO); + + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + else + { + + ; + } + } } else @@ -4639,26 +4655,23 @@ static UINT8 RouteIntruSecVainSPKSErrCheck(const UINT16 routeId) */ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) { -/* ֲʼ */ - UINT16 relayId = 0U; - UINT8 relayState = 0U; - UINT8 zcPhySecSum = 0U; /*ղĿ*/ - UINT16* pZcPhySecIdBuf = NULL; /*ղID*/ - UINT8 ii = 0U; + /* ֲʼ */ + UINT16 relayId = 0U; + UINT8 relayState = 0U; + UINT8 zcPhySecSum = 0U; /*ղĿ*/ + UINT16* pZcPhySecIdBuf = NULL; /*ղID*/ + UINT8 ii = 0U; UINT16 thisRealyId = 0U; - UINT8 thisRelayState = 0U; + UINT8 thisRelayState = 0U; UINT8 routeState = 0U; UINT8 retVal = CI_ERROR; /*ֵ*/ UINT16 pDevId = 0U; UINT8 pDevState = 0U; - UINT8 chRouteLevel = 0U; UINT8 chErrTemp = 0U; - /* Զղ */ - zcPhySecSum = GetRouteThatZhaoChaPhySecSum(routeId); /*ȡղĿ*/ + /* Զղ */ + zcPhySecSum = GetRouteThatZhaoChaPhySecSum(routeId); /*ȡղĿ*/ pZcPhySecIdBuf = GetRouteThatZhaoChaPhySecIdBuf(routeId); /*ȡղID*/ - /*·ලȷ*/ - chRouteLevel = GetRouteLevel(routeId); if (NULL == pZcPhySecIdBuf) { @@ -4668,14 +4681,14 @@ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) { retVal = CI_SUCCESS; - for (ii = 0u; ii < zcPhySecSum; ii++) - { - retVal = RoutePhySecZhaoChaErrCheck(routeId,pZcPhySecIdBuf[ii]); - if (CI_ERROR == retVal) + for (ii = 0u; ii < zcPhySecSum; ii++) + { + retVal = RoutePhySecZhaoChaErrCheck(routeId, pZcPhySecIdBuf[ii]); + if (CI_ERROR == retVal) { break; } - else if(CI_ROUTE_RECOVER_ERR == retVal) /*YF00083-1013,һֹΣһǰ飬һδں鸲ǵretValֵ*/ + else if (CI_ROUTE_RECOVER_ERR == retVal) /*YF00083-1013,һֹΣһǰ飬һδں鸲ǵretValֵ*/ { chErrTemp++; /*һSPKSͼһ*/ } @@ -4688,24 +4701,13 @@ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) { retVal = CI_ROUTE_RECOVER_ERR; /*ֹһSPKS͸ֵֵΪSPKS*/ } - } - } + } + } - if ((CI_SUCCESS == retVal) || (CI_ROUTE_RECOVER_ERR == retVal)) + if ((CI_SUCCESS == retVal) || (CI_ROUTE_RECOVER_ERR == retVal)) {/*ղμͨ,鱾ղ̵*/ - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - thisRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - thisRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId);/*CBTCģʽղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + thisRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ղ̵ID*/ thisRelayState = GetRelayCollState(thisRealyId); /*ȡָID̵״̬*/ routeState = GetRouteState(routeId); /*ȡ·״̬*/ @@ -4713,25 +4715,32 @@ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) {/*ڱղ̵*/ if ((ROUTE_STATE_FIRST_LOCKERR == routeState) || (ROUTE_STATE_YUXIAN_LOCK == routeState) || - (ROUTE_STATE_NEAR_LOCKERR == routeState) || + (ROUTE_STATE_YUXIAN_OPEN == routeState) || (ROUTE_STATE_NEAR_OPEN == routeState) || - (ROUTE_STATE_YUXIAN_OPEN == routeState)) + (ROUTE_STATE_NEAR_LOCK == routeState) || + (ROUTE_STATE_NEAR_LOCKERR == routeState) || + (ROUTE_STATE_DELAY_UNLOCK == routeState) || + (ROUTE_STATE_AUTO_UNLOCK == routeState) || + (ROUTE_STATE_AUTO_UNLOCKERR == routeState) || + (ROUTE_STATE_HALF_UNLOCKDELAY == routeState) || + (ROUTE_STATE_LEAD_LOCKERR == routeState) || + (ROUTE_STATE_LEAD_OPEN == routeState)) { - /*·״̬쳣Ԥգӽ쳣ӽţԤȿţ - жϱղ״̬*/ - if(RELAY_STATE_UP == thisRelayState) + /*жϱղ״̬*/ + if (RELAY_STATE_UP == thisRelayState) { retVal = CI_ERROR; } } - else if (ROUTE_STATE_FIRST_LOCK == routeState) + else if ((ROUTE_STATE_FIRST_LOCK == routeState) || + (ROUTE_STATE_LEAD_LOCK == routeState)) { - if(RELAY_STATE_UP == thisRelayState) + if (RELAY_STATE_UP == thisRelayState) { /*ȴصȴ־*/ retVal = RELAY_STATE_WAITE; } - } + } else { /*·״̬Ϊֵʱ*/ @@ -4740,40 +4749,29 @@ static UINT8 RouteRelayZhaoChaErrCheck(UINT16 const routeId) } - if ((CI_SUCCESS == retVal) || (CI_ROUTE_RECOVER_ERR == retVal)) + if ((CI_SUCCESS == retVal) || (CI_ROUTE_RECOVER_ERR == retVal)) {/*ղ̵ͨԶղ̵*/ - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - relayId = GetRouteThatZhaoChaRelayId(routeId); /*ģʽԶղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - relayId = GetRouteCbtcThatZhaoChaRelayId(routeId);/*CBTCģʽԶղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - if(0u != relayId) - {/*ڶԶղ̵*/ + relayId = GetRouteThatZhaoChaRelayId(routeId); /*Զղ̵ID*/ - relayState = GetRelayCollState(relayId); + if (0u != relayId) + {/*ڶԶղ̵*/ - /* ղ*/ - if (RELAY_STATE_UP == relayState) - { - /*ͨ*/ - } - else - { - retVal = CI_ERROR; - } - } + relayState = GetRelayCollState(relayId); + + /* ղ*/ + if (RELAY_STATE_UP == relayState) + { + /*ͨ*/ + } + else + { + retVal = CI_ERROR; + } + } } return retVal; - } /* diff --git a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c index 54a4d7f..17c137d 100644 --- a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.c @@ -50,58 +50,116 @@ void JKJRelayLogicProcess(void) { UINT16 wJkjRelayId = 0u; UINT8 JkjRelayState = CI_ERROR; - UINT32 JkjRelayCycNum = 0u; - UINT32 JkjValidCycNum = 0u; + UINT32 yjValidCycNum = 0u; UINT32 curCycNum = 0u; UINT8 checkRes = CI_TIME_OUT; - UINT8 tmpRet =CI_ERROR; + UINT8 ii = 0u; + UINT8 haveYjkBreakFlag = 0u; + UINT8 ocYjkBreakFlag = 0u; wJkjRelayId = GetJkjRelayId(); JkjRelayState = GetRelayCollState(wJkjRelayId); /*JKJӦ̵̼ɼ״̬*/ - JkjRelayCycNum = GetRelayStateUpdateCycNum(wJkjRelayId); /*JKJӦ̵̼״̬*/ - JkjValidCycNum = GetJkjRelayValidCycNum(); /*JKJӦ״̬Ч*/ - - - - if ((wJkjRelayId > 0u) && (RELAY_STATE_DOWN == JkjRelayState)) + yjValidCycNum = GetJkjRelayValidCycNum(); /*JKJӦ״̬Ч*/ + curCycNum = Get2oo2CurCycleNum(); + + for (ii = 0u; ii < m_OcToCiOrginDataNum; ii++) { - curCycNum = Get2oo2CurCycleNum(); - if (0u == JkjRelayCycNum) - {/*δʱʼ*/ - tmpRet = SetRelayStateUpdateCycNum(wJkjRelayId,curCycNum); - if (CI_ERROR == tmpRet) - { - /**/ - } + if (OC_HAVE_YJK == m_OcToCiOrginDataArr[ii].chHaveYjk) + {/*һOC߱Ӧ*/ + haveYjkBreakFlag = 1u; + break; } - checkRes = SystemOverTimeCheck(JkjRelayCycNum,JKJ_REYLAY_VALID_CYCLE_NUM); - if (CI_TIME_OUT == checkRes) - { /*ӦЧ*/ - SetCiJkjFlag(JKJ_REYLAY_VALID); /*JKJӦЧ־ΪЧ*/ - if (0u == JkjValidCycNum) /*֮ǰûӦЧʼ*/ - { - SetJkjRelayValidCycNum(curCycNum); /*JKJӦЧ*/ - } + else + { + ; /**/ } } - else if ((wJkjRelayId > 0u) && (RELAY_STATE_UP == JkjRelayState)) - { - tmpRet = SetRelayStateUpdateCycNum(wJkjRelayId, 0u); /*JKJ̵Чʼں*/ - if (CI_ERROR == tmpRet) - { - /**/ - } - /*ӦЧ*/ - SetCiJkjFlag(JKJ_REYLAY_INVALID); /*JKJӦ̵̼Ч־ΪЧ*/ - SetJkjRelayValidCycNum(0u); /*JKJӦЧ*/ + for (ii = 0u; ii < m_OcToCiOrginDataNum; ii++) + { + if (OC_CTLMODE_YJK == m_OcToCiOrginDataArr[ii].chControlMode) + {/*һOCӦ*/ + ocYjkBreakFlag = 1u; + break; + } + else + { + ; /**/ + } + } + + if (wJkjRelayId > 0u) + { + /*˼̵*/ + if (RELAY_STATE_DOWN == JkjRelayState) + {/**/ + if (0u == yjValidCycNum) + {/*δʱ*/ + SetJkjRelayValidCycNum(curCycNum); /*ӦЧ*/ + } + else + { + ; /**/ + } + checkRes = SystemOverTimeCheck(yjValidCycNum, JKJ_REYLAY_VALID_CYCLE_NUM); + if (CI_TIME_OUT == checkRes) + { /*ӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_VALID); /*ӦЧ־ΪЧ*/ + } + else + { + ; /**/ + } + } + else if (RELAY_STATE_UP == JkjRelayState) + {/**/ + /*ӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_INVALID); /*ӦЧ־ΪЧ*/ + SetJkjRelayValidCycNum(0u); /*ӦЧ*/ + } + else + { + /*ӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_VALID); /*ӦЧ־ΪЧ*/ + SetJkjRelayValidCycNum(curCycNum); /*ӦЧ*/ + } + } + else if(1u == haveYjkBreakFlag) + { + /*OC߱Ӧ*/ + if (1u == ocYjkBreakFlag) + {/*һOCӦ,ӦЧ*/ + if (0u == yjValidCycNum) + {/*δʱ*/ + SetJkjRelayValidCycNum(curCycNum); /*ӦЧ*/ + } + else + { + ; /**/ + } + checkRes = SystemOverTimeCheck(yjValidCycNum, JKJ_REYLAY_VALID_CYCLE_NUM); + if (CI_TIME_OUT == checkRes) + { /*ӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_VALID); /*ӦЧ־ΪЧ*/ + } + else + { + ; /**/ + } + } + else + {/*ӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_INVALID); /*ӦЧ־ΪЧ*/ + SetJkjRelayValidCycNum(0u); /*ӦЧ*/ + } } else { - /*ӦЧ*/ - SetCiJkjFlag(JKJ_REYLAY_INVALID); /*JKJӦ̵̼Ч־ΪЧ*/ - SetJkjRelayValidCycNum(0u); /*JKJӦ̵̼Ч*/ + /*JKJδãOCӦعܣӦЧ*/ + SetCiJkjFlag(JKJ_REYLAY_INVALID); /*ӦЧ־ΪЧ*/ + SetJkjRelayValidCycNum(0u); /*ӦЧ*/ } + } /* @@ -815,9 +873,6 @@ void RouteLogicProcess(void) /*۳SPKSPSDźŹرؿ*/ RouteRecoverOpenProc(routeId); - /*·ͬ߼*/ - RouteDCTYLogicM(routeId); - /*ݽ·״̬ر־*/ ClearSomeFlagDependRouteState(routeId); /*cgh-ϲCID-2349-5*/ @@ -4360,37 +4415,22 @@ void NonRouteCancelDeal(UINT8 nonRouteId) void UpdateZhaoChaDeal(const UINT16 routeId, const UINT8 routeState) { UINT16 wSelfRealyId = 0U; /*ģʽղID*/ - UINT16 wOtherRealyId = 0U; /*ģʽղID*/ UINT8 relauDrvState = 0U; - UINT8 chRouteLevel = GetRouteLevel(routeId); UINT8 chOverTimeCheck = 0U; UINT32 dwTimeOutCycCount = 0U; + UINT32 dwRouteLockStartCycNum = 0U; - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - wOtherRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId); /*CBTCģʽղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - wSelfRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId); /*CBTCģʽղ̵ID*/ - wOtherRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - + wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ղ̵ID*/ + dwRouteLockStartCycNum = GetRouteLockStartCycNum(routeId); dwTimeOutCycCount = GetSystemParaSignalCloseCyc(); - if ((routeState == ROUTE_STATE_IDLE) || - (routeState == ROUTE_STATE_FIRST_XUANPAI) || - (routeState == ROUTE_STATE_XUANPAI) || - (routeState == ROUTE_STATE_LEAD_FIRST_XUANPAI) || - (routeState == ROUTE_STATE_LEAD_XUANPAI)) + if (0U < wSelfRealyId) { - /*· ģʽղ鶼*/ - if (0U < wSelfRealyId) + if ((routeState == ROUTE_STATE_IDLE) || + (routeState == ROUTE_STATE_FIRST_XUANPAI) || + (routeState == ROUTE_STATE_XUANPAI) || + (routeState == ROUTE_STATE_LEAD_FIRST_XUANPAI) || + (routeState == ROUTE_STATE_LEAD_XUANPAI)) { relauDrvState = GetRelayDriveState(wSelfRealyId); if (RELAY_DRIVE_STATE_NULL == relauDrvState) @@ -4398,34 +4438,15 @@ void UpdateZhaoChaDeal(const UINT16 routeId, const UINT8 routeState) (void)SetRelayDriveState(wSelfRealyId, RELAY_STATE_UP); } } - if (0U < wOtherRealyId) - { - relauDrvState = GetRelayDriveState(wOtherRealyId); - if (RELAY_DRIVE_STATE_NULL == relauDrvState) - { - (void)SetRelayDriveState(wOtherRealyId, RELAY_STATE_UP); - } - } - } - else - { - /*· ģʽղ£һģʽղ*/ - if (0U < wOtherRealyId) - { - relauDrvState = GetRelayDriveState(wOtherRealyId); - if (RELAY_DRIVE_STATE_NULL == relauDrvState) - { - (void)SetRelayDriveState(wOtherRealyId, RELAY_STATE_UP); - } - } - if (0U < wSelfRealyId) + else { (void)SetRelayDriveState(wSelfRealyId, RELAY_STATE_DOWN); relauDrvState = GetRelayCollState(wSelfRealyId); + if (RELAY_STATE_DOWN != relauDrvState) { /*ղ̵δ*/ - chOverTimeCheck = CheckRelayDriveOutTime(wSelfRealyId, dwTimeOutCycCount); - if (CI_ERROR == chOverTimeCheck) + chOverTimeCheck = SystemOverTimeCheck(dwRouteLockStartCycNum, dwTimeOutCycCount); + if (CI_TIME_OUT == chOverTimeCheck) {/*ղ鳬ʱʱ*/ /*xxxxx崻*/ @@ -6124,16 +6145,16 @@ UINT16 GetReturnId(const UINT16 routeId) { /*ǰ״̬ǽӽ쳣*/ - /* Dzгʻ·ͬʱ֮ǰ״̬Ϊӽгѹ룬źŹرգ + /* Dzгʻ·ͬʱ֮ǰ״̬Ϊӽտ * Ϊͬһг;۷ */ - if((ROUTE_STATE_NEAR_LOCK == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == GetTrainEnterRouteFlag(routeId))) + if((ROUTE_STATE_NEAR_OPEN == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == GetTrainEnterRouteFlag(routeId))) { returnSigId = GetRouteChaZhiSignalId(routeId); /*ȡźŻID*/ } else { - returnSigId = 0u; + returnSigId = 0U; } } } @@ -6166,6 +6187,8 @@ void DTrainReturnUnlockRouteAllLockP(const UINT16 routeId) UINT8 chLockBelRouteType = 0U;/*··*/ UINT8 chTrainEnterRouteFlag = 0U;/*гʻ·־*/ UINT8 chRouteInOutSecOccupy = 0U;/*·ⷽͬʱռѹ־*/ + UINT32 dwRoutLockCycNum = 0U; + UINT32 dwReturnRoutLockCycNum = 0U; routeState = GetRouteState(routeId); /*ȡ·״̬*/ routeType = GetRouteType(routeId); @@ -6207,14 +6230,16 @@ void DTrainReturnUnlockRouteAllLockP(const UINT16 routeId) wLockRouteStartSigId = GetRouteStartSignalId(lockBelongRouteId);/*ȡ·ʼźŻID*/ chTrainEnterRouteFlag = CheckTrainEnterRoute(lockBelongRouteId);/*ȡгʻ·־*/ chRouteInOutSecOccupy = RouteInOutSecOccupy(lockBelongRouteId);/*·ⷽͬʱռñ־*/ + dwRoutLockCycNum = GetRouteLockStartCycNum(routeId); /*ȡ·ʼ*/ + dwReturnRoutLockCycNum = GetRouteLockStartCycNum(lockBelongRouteId);/*ȡ۳·ʼ*/ if ((ROUTE_STATE_NEAR_OPEN == chLockBelRouteState) && (ROUTE_TYPE_DIAOCHE == chLockBelRouteType) && - (returnSigId == wLockRouteStartSigId) && + (returnSigId == wLockRouteStartSigId) && (dwReturnRoutLockCycNum > dwRoutLockCycNum) && ((CI_SUCCESS == chTrainEnterRouteFlag) || ((CI_SUCCESS == chRouteInOutSecOccupy) && (ROUTE_TYPE_LIECHE == routeType)))) { /*۳·ǵ·&&״̬ǽӽ&&۳·ʼźŻDZ·۷źŻ &&гʻ ·Ϊг·۳·ʱⷽͬʱռѹ*/ - + /*by cgh 20250414۳·ʱ;·*/ /*ɹ*/ SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_NO); /*ý·δ*/ @@ -6224,10 +6249,10 @@ void DTrainReturnUnlockRouteAllLockP(const UINT16 routeId) SetRouteStateDeal(routeId, ROUTE_STATE_IDLE); /*ý·״̬Ϊ*/ } if ((ROUTE_TYPE_LIECHE == chLockBelRouteType) && (ROUTE_STATE_NEAR_LOCK == chLockBelRouteState) - && (returnSigId == wLockRouteStartSigId)) + && (returnSigId == wLockRouteStartSigId) && (dwReturnRoutLockCycNum > dwRoutLockCycNum)) { /*۳·г· ·״̬ǽӽ ۳·ʼźŻDZ·۷źŻ*/ - + /*by cgh 20250414۳·ʱ;·*/ /*ɹ*/ SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_NO); /*ý·δ*/ /*ý·߼: δ*/ @@ -6265,6 +6290,8 @@ void DTrainRtnUnlockRemoteRAllLockP(const UINT16 routeId) UINT8 chLockBelRouteType = 0U;/*··*/ UINT8 chTrainEnterRouteFlag = 0U;/*гʻ·־*/ UINT8 chRouteInOutSecOccupy = 0U;/*·ⷽͬʱռѹ־*/ + UINT32 dwRoutLockCycNum = 0U; + UINT32 dwReturnRoutLockCycNum = 0U; routeState = GetRouteState(routeId); /*ȡ·״̬*/ routeType = GetRouteType(routeId); @@ -6312,13 +6339,16 @@ void DTrainRtnUnlockRemoteRAllLockP(const UINT16 routeId) wLockRouteStartSigId = GetRouteStartSignalId(lockBelongRouteId);/*ȡ·ʼźŻID*/ chTrainEnterRouteFlag = CheckTrainEnterRoute(lockBelongRouteId);/*ȡгʻ·־*/ chRouteInOutSecOccupy = RouteInOutSecOccupy(lockBelongRouteId);/*·ⷽͬʱռñ־*/ + dwRoutLockCycNum = GetRouteLockStartCycNum(routeId); /*ȡ·ʼ*/ + dwReturnRoutLockCycNum = GetRouteLockStartCycNum(lockBelongRouteId);/*ȡ۳·ʼ*/ if ((ROUTE_STATE_NEAR_OPEN == chLockBelRouteState) && (ROUTE_TYPE_DIAOCHE == chLockBelRouteType) && - (returnSigId == wLockRouteStartSigId) && + (returnSigId == wLockRouteStartSigId) && (dwReturnRoutLockCycNum > dwRoutLockCycNum) && ((CI_SUCCESS == chTrainEnterRouteFlag) || ((CI_SUCCESS == chRouteInOutSecOccupy) && (ROUTE_TYPE_LIECHE== routeType)))) { /*۳·ǵ·&&״̬ǽӽ&&۳·ʼźŻDZ·۷źŻ &&гʻ ·Ϊг·۳·ʱⷽͬʱռѹ*/ + /*by cgh 20250414۳·ʱ;·*/ /*ɹ*/ SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_NO); /*ý·δ*/ /*ý·߼: δ*/ @@ -6326,9 +6356,10 @@ void DTrainRtnUnlockRemoteRAllLockP(const UINT16 routeId) SetRouteStateDeal(routeId, ROUTE_STATE_IDLE); /*ý·״̬Ϊ*/ } if ((ROUTE_TYPE_LIECHE== chLockBelRouteType) && (ROUTE_STATE_NEAR_LOCK == chLockBelRouteState) - && (returnSigId == wLockRouteStartSigId)) + && (returnSigId == wLockRouteStartSigId) && (dwReturnRoutLockCycNum > dwRoutLockCycNum)) { /*۳·г· ·״̬ǽӽ ۳·ʼźŻDZ·۷źŻ*/ + /*by cgh 20250414۳·ʱ;·*/ /*ɹ*/ SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_NO); /*ý·δ*/ /*ý·߼: δ*/ @@ -7089,38 +7120,48 @@ void CancelWashWorkLogicM(void) /* * ·ͬ߼ * ˵ void -* ֵ void +* ֵ void +* by cgh 20250523 */ -void RouteDCTYLogicM(UINT16 routeId) +void RouteDCTYLogic(UINT16 routeId) { - UINT8 routeType = 0u; - UINT8 routeState = 0u; - UINT16 routeDCQJId = 0u; + UINT8 routeType = 0U; + UINT8 routeState = 0U; + UINT16 routeDCQJId = 0U; + UINT16 routeDCQJTwoId = 0U; + routeType = GetRouteType(routeId);/*·*/ routeState = GetRouteState(routeId);/*·״̬*/ routeDCQJId = GetRouteDCQJId(routeId); - if ((routeDCQJId >0u) && (ROUTE_TYPE_DIAOCHE == routeType)) + routeDCQJTwoId = GetRouteDCQJTwoId(routeId); + + if ((0U < routeDCQJId) && (0U < routeDCQJTwoId) && (ROUTE_TYPE_DIAOCHE == routeType)) {/*̵IDڣǵ·*/ if((ROUTE_STATE_FIRST_LOCK == routeState) || (ROUTE_STATE_FIRST_LOCKERR == routeState) || (ROUTE_STATE_YUXIAN_LOCK == routeState) || (ROUTE_STATE_YUXIAN_OPEN == routeState) || (ROUTE_STATE_NEAR_OPEN == routeState) || + (ROUTE_STATE_NEAR_LOCK == routeState) || (ROUTE_STATE_NEAR_LOCKERR == routeState)|| - (ROUTE_STATE_LEAD_LOCK == routeState) || - (ROUTE_STATE_LEAD_LOCKERR == routeState) || - (ROUTE_STATE_LEAD_OPEN == routeState) || - (ROUTE_STATE_DELAY_UNLOCK == routeState) || - (ROUTE_STATE_NEAR_LOCK == routeState)) - {/*·:··쳣ԤաԤȿšӽšӽ쳣ӽ - ա쳣šʱ*/ - (void)SetRouteDCQState(routeId,ROUTE_DCQ_REQUEST);/*ý·״̬Ϊ*/ + (ROUTE_STATE_AUTO_UNLOCK == routeState) || + (ROUTE_STATE_AUTO_UNLOCKERR == routeState) || + (ROUTE_STATE_DELAY_UNLOCK == routeState)) + { + /*·:··쳣ԤաԤȿšӽšӽ쳣ӽʱԶԶ쳣*/ + SetRouteDCQState(routeId,ROUTE_DCQ_REQUEST);/*ý·״̬Ч*/ } else - {/*ý·״̬Ϊǵ*/ - (void)SetRouteDCQState(routeId,ROUTE_DCQ_NOT_REQUEST); + { + /*ý·״̬ΪЧ;ͬ״̬Ч*/ + SetRouteDCQState(routeId,ROUTE_DCQ_NOT_REQUEST); + SetRouteDCTYState(routeId, ROUTE_DCT_NOT_AGREE); } } + else + { + ; /**/ + } } /* diff --git a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.h b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.h index ab9fa9b..b1b02cf 100644 --- a/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.h +++ b/TSCP/src/APP/ciapp/LogicManage/TradInterlockLogicManage.h @@ -775,9 +775,10 @@ void CancelWashWorkLogicM(void); /* * ·ͬ߼ * ˵ void -* ֵ void +* ֵ void +* by cgh 20250523 */ -void RouteDCTYLogicM(UINT16 routeId); +void RouteDCTYLogic(UINT16 routeId); /* * ·ͬ diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c index 3e92915..360db1c 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c @@ -645,75 +645,58 @@ UINT8 RoutePhySecZhaoChaCheck(UINT16 const checkRouteId ,UINT16 const zcPhySecId * RELAY_STATE_WAITE ·ղ̵--ȴ * RES_CHECK_STATE_WAITE Դ鱾ղ̵--ȴ */ -UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLevel) +UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId, UINT8 functionId, UINT8 sendLevel) { -/* ֲʼ */ - UINT16 relayId = 0u; - UINT8 relayState = 0u; - UINT8 zcPhySecSum = 0u; /*ղĿ*/ - UINT16* pZcPhySecIdBuf = NULL; /*ղID*/ - UINT8 ii = 0u; + /* ֲʼ */ + UINT16 relayId = 0u; + UINT8 relayState = 0u; + UINT8 zcPhySecSum = 0u; /*ղĿ*/ + UINT16* pZcPhySecIdBuf = NULL; /*ղID*/ + UINT8 ii = 0u; UINT16 thisRealyId = 0u; - UINT8 thisRelayState = 0u; + UINT8 thisRelayState = 0u; UINT8 routeState = 0u; UINT8 retVal = CI_ERROR; /*ֵ*/ UINT16 pDevId = 0u; - UINT8 pDevState = 0u; + UINT8 pDevState = 0u; UINT8 funcSwitchSupportRelayInterface = 0u; UINT8 confirmRelayInterfaceFlag = 0u; UINT16 endSignalId = 0u; UINT8 commState = 0u;/*ͨ״̬*/ UINT8 endSignalBelongCi = 0u; UINT8 localCi = 0u; - UINT8 chRouteLevel = 0U; localCi = GetSystemParaLocalCiId(); /*ȡID*/ - /* Զղ */ - zcPhySecSum = GetRouteThatZhaoChaPhySecSum(routeId); /*ȡղĿ*/ + /* Զղ */ + zcPhySecSum = GetRouteThatZhaoChaPhySecSum(routeId); /*ȡղĿ*/ pZcPhySecIdBuf = GetRouteThatZhaoChaPhySecIdBuf(routeId); /*ȡղID*/ - + endSignalId = GetRouteEndSignalId(routeId);/*·նźŻ*/ endSignalBelongCi = GetSignalBelongCiId(endSignalId); funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI); confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*̵ӿȷ״̬*/ - if(endSignalBelongCi != localCi) + if (endSignalBelongCi != localCi) { /*ȡͨ״̬*/ commState = GetLocalCiAndOtherCiTransSta(endSignalBelongCi); } /*̵ӿȷ*/ - if((localCi != endSignalBelongCi) && (TRANSMIT_STATE_BAD == commState) - && (CICI_RELAY_INTERFACE_CONFIRM_YES == confirmRelayInterfaceFlag) + if ((localCi != endSignalBelongCi) && (TRANSMIT_STATE_BAD == commState) + && (CICI_RELAY_INTERFACE_CONFIRM_YES == confirmRelayInterfaceFlag) && (FUNC_SWITCH_ON == funcSwitchSupportRelayInterface)) { /*ȡ̵ӿڱղID*/ thisRealyId = GetRouteRelayBenDuanZcIdOnRelay(routeId); /*ȡ̵ӿڶԶղID*/ - relayId = GetRouteRelayDuiDuanZcIdOnRelay(routeId); + relayId = GetRouteRelayDuiDuanZcIdOnRelay(routeId); } else { - /*·ලȷ*/ - chRouteLevel = GetRouteLevel(routeId); - - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - thisRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - relayId = GetRouteThatZhaoChaRelayId(routeId); /*ģʽԶղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - thisRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId);/*CBTCģʽղ̵ID*/ - relayId = GetRouteCbtcThatZhaoChaRelayId(routeId); /*CBTCģʽԶղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - + thisRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ղ̵ID*/ + relayId = GetRouteThatZhaoChaRelayId(routeId); /*Զղ̵ID*/ } if (NULL == pZcPhySecIdBuf) @@ -724,20 +707,20 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev { retVal = CI_SUCCESS; - for (ii = 0u; ii < zcPhySecSum; ii++) - { - retVal = RoutePhySecZhaoChaCheck(routeId,pZcPhySecIdBuf[ii],&pDevId,&pDevState); - if(CI_ERROR == retVal) + for (ii = 0u; ii < zcPhySecSum; ii++) + { + retVal = RoutePhySecZhaoChaCheck(routeId, pZcPhySecIdBuf[ii], &pDevId, &pDevState); + if (CI_ERROR == retVal) { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,pDevId,ETYPE_PS_ZHAOCHA_CHECK,pDevState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, pDevId, ETYPE_PS_ZHAOCHA_CHECK, pDevState, sendLevel); break; } - } - } + } + } - if(CI_SUCCESS == retVal) + if (CI_SUCCESS == retVal) {/*ղμͨ,鱾ղ̵*/ routeState = GetRouteState(routeId); /*ȡ·״̬*/ @@ -746,10 +729,18 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev thisRelayState = GetRelayCollState(thisRealyId); /*ȡָID̵״̬*/ if ((ROUTE_STATE_FIRST_LOCKERR == routeState) || (ROUTE_STATE_YUXIAN_LOCK == routeState) || - (ROUTE_STATE_NEAR_LOCKERR == routeState)) + (ROUTE_STATE_YUXIAN_OPEN == routeState) || + (ROUTE_STATE_NEAR_OPEN == routeState) || + (ROUTE_STATE_NEAR_LOCK == routeState) || + (ROUTE_STATE_NEAR_LOCKERR == routeState) || + (ROUTE_STATE_DELAY_UNLOCK == routeState) || + (ROUTE_STATE_AUTO_UNLOCK == routeState) || + (ROUTE_STATE_AUTO_UNLOCKERR == routeState) || + (ROUTE_STATE_HALF_UNLOCKDELAY == routeState) || + (ROUTE_STATE_LEAD_LOCKERR == routeState) || + (ROUTE_STATE_LEAD_OPEN == routeState)) { - /*·״̬쳣Ԥգӽ쳣 - жϱղ״̬*/ + /*жϱղ״̬*/ if (RELAY_STATE_UP == thisRelayState) { /* ¼ */ @@ -757,19 +748,6 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev retVal = CI_ERROR; } } - else if ((ROUTE_STATE_NEAR_OPEN == routeState) || - (ROUTE_STATE_YUXIAN_OPEN == routeState)) - { - /*Żʱ - 1·״̬ΪӽţԤȿ,·תΪģʽʱõıղ̵δ*/ - retVal = KeepSignalRelayZhaoChaCheck(routeId); - if (CI_ERROR == retVal) - { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, thisRealyId, ETYPE_THIS_ZHAOCHA, RELAY_STATE_UP, sendLevel); - - } - } else if (ROUTE_STATE_HALF_UNLOCK == routeState) { /*Żʱ @@ -782,9 +760,10 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev } } - else if (ROUTE_STATE_FIRST_LOCK == routeState) + else if ((ROUTE_STATE_FIRST_LOCK == routeState) || + (ROUTE_STATE_LEAD_LOCK == routeState)) { - if(RELAY_STATE_UP == thisRelayState) + if (RELAY_STATE_UP == thisRelayState) { /* ¼ */ SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, thisRealyId, ETYPE_THIS_ZHAOCHA, RELAY_STATE_UP, ESEND_LEVEL_ZERO); @@ -792,20 +771,6 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev retVal = RELAY_STATE_WAITE; } - } - /* ԶԶ쳣ʱҲղ*/ - else if ((ROUTE_STATE_DELAY_UNLOCK == routeState) - || (ROUTE_STATE_AUTO_UNLOCK == routeState) - || (ROUTE_STATE_AUTO_UNLOCKERR == routeState) - || (ROUTE_STATE_HALF_UNLOCKDELAY == routeState)) - { - if (RELAY_STATE_UP == thisRelayState) - { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, thisRealyId, ETYPE_THIS_ZHAOCHA, RELAY_STATE_UP, sendLevel); - retVal = CI_ERROR; - } - } else { @@ -815,31 +780,30 @@ UINT8 RouteRelayZhaoChaCheck(UINT16 const routeId,UINT8 functionId,UINT8 sendLev } - - if((CI_SUCCESS == retVal) || (RELAY_STATE_WAITE == retVal) || (RES_CHECK_STATE_WAITE == retVal)) + + if ((CI_SUCCESS == retVal) || (RELAY_STATE_WAITE == retVal) || (RES_CHECK_STATE_WAITE == retVal)) {/*ղ̵ͨ/ȴԶղ̵*/ - if(0u != relayId) - {/*ڶԶղ̵*/ + if (0u != relayId) + {/*ڶԶղ̵*/ - relayState = GetRelayCollState(relayId); + relayState = GetRelayCollState(relayId); - /* ղ*/ - if (RELAY_STATE_UP == relayState) - { - /*ͨ*/ - } - else - { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_RELAY,relayId,ETYPE_THAT_ZHAOCHA,relayState,sendLevel); + /* ղ*/ + if (RELAY_STATE_UP == relayState) + { + /*ͨ*/ + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, relayId, ETYPE_THAT_ZHAOCHA, relayState, sendLevel); - retVal = CI_ERROR; - } - } + retVal = CI_ERROR; + } + } } return retVal; - } @@ -2085,7 +2049,10 @@ 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) { /*޼*/ @@ -2147,7 +2114,11 @@ UINT8 RouteSwitchPosAndMoveValidCheck(UINT16 const routeId,UINT8 sendLevel) else { reVal = CI_ERROR; - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_APPLY_SWITCH_CHECK, chRouteApplySwitchCheckFlag, ESEND_LEVEL_ZERO); + chDevId = GetRouteApplySwitchCheckErrorData(routeId, &chDevType, &chDevState, &chDevErrorType); + if (0U != chDevId) + { + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, chDevType, chDevId, chDevErrorType, chDevState, sendLevel); + } } } } @@ -2895,6 +2866,10 @@ 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) { @@ -2957,7 +2932,11 @@ UINT8 RouteRelProSwiPosAndMovValCheck(UINT16 const routeId,UINT8 sendLevel) else { reVal = CI_ERROR; - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_APPLY_SWITCH_CHECK, chRouteApplySwitchCheckFlag, ESEND_LEVEL_ZERO); + chDevId = GetRouteApplySwitchCheckErrorData(routeId, &chDevType, &chDevState, &chDevErrorType); + if (0U != chDevId) + { + SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, chDevType, chDevId, chDevErrorType, chDevState, sendLevel); + } } } } @@ -7099,39 +7078,38 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId) /**/ UINT8 const functionId = EFUNC_CHECK_LEAD_ROUTE_ZRJ; /* ·*/ - UINT8 const checkSum = GetRoutePhysicalSectionSum(routeId); - RoutePhysicalSectionStruct* const dataIdBuf = GetRouteSectionData(routeId); - + UINT8 const checkSum = GetRoutePhysicalSectionSum(routeId); + RoutePhysicalSectionStruct* const dataIdBuf = GetRouteSectionData(routeId); + /* ֲʼ */ - UINT16 i = 0u; /* ѭ */ - UINT16 devId = 0u; - UINT8 devState = 0u; + UINT16 i = 0u; /* ѭ */ + UINT16 devId = 0u; + UINT8 devState = 0u; UINT8 result = CI_SUCCESS; UINT16 cancleZhaoChaRelayId = 0u; /*ȡղ̵ID*/ UINT8 relayState = 0u; /*̵ɼ״̬*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ - UINT8 chRouteLevel = 0U;/*·ලȷ*/ /* ռü */ - if (0u == checkSum) - { - /*ݴ*/ - result = CI_ERROR; - } + if (0u == checkSum) + { + /*ݴ*/ + result = CI_ERROR; + } else { } - - if(CI_SUCCESS == result) + + if (CI_SUCCESS == result) { /*ʼ*/ - for (i = 0u; i<(checkSum-1u); i++) + for (i = 0u; i < (UINT16)(checkSum - 1u); i++) { devId = dataIdBuf[i].PhysicalSectionId; devState = GetPhySecCurMergeState(devId); - if (SECTION_OCCUPY_YES ==devState) + if (SECTION_OCCUPY_YES == devState) { /*״̬һ·ع״̬*/ /* ¼ */ @@ -7145,29 +7123,17 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId) } } - if(CI_SUCCESS == result) + if (CI_SUCCESS == result) { - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ - if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) + if ((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ relayState = GetRelayCollState(cancleZhaoChaRelayId);/*ȡȡ̵ɼ״̬*/ devId = cancleZhaoChaRelayId; devState = relayState; - if(RELAY_STATE_UP == relayState) + if (RELAY_STATE_UP == relayState) { /* ͨ */ result = CI_SUCCESS; @@ -7176,7 +7142,7 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId) else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_RELAY,devId,ETYPE_CANCLE_ZHAOCHA,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel); /* ʧܷ */ result = CI_ERROR_QXZC; } @@ -7189,9 +7155,10 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId) } else { + } - - return result; + + return result; } /* * ȫԶ۷·ǷеִԶ·Ѱ @@ -7606,7 +7573,9 @@ UINT8 OtherCiDevStatusCheck(UINT16 const routeId,const RouteOtherCheckStruct *pO UINT8 logSwichSum = 0U; /*߼ΰĵ*/ UINT8 logBelogAxisNum = 0u; UINT16* logBelogAxisBuff = NULL; - + UINT8 cFuncSwitchFloodGate = FUNC_SWITCH_ON; /*·Ƿſ*/ + UINT8 cFuncSwitchEsb = FUNC_SWITCH_ON; /*·ǷESB*/ + UINT8 cRouteToLeadFlag = 0U; /*·ת·־*/ devState = GetOtherCiDevStatus(devType,devId,chkDevStatus); @@ -7617,14 +7586,20 @@ UINT8 OtherCiDevStatusCheck(UINT16 const routeId,const RouteOtherCheckStruct *pO { routeLeadProperty = GetRouteLeadProperty(routeId);/*ȡ·*/ routeState = GetRouteState(routeId);/*ȡ·״̬*/ + cRouteToLeadFlag = GetRouteToLeadFlag(routeId); /*ȡ·ת־*/ if (((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty)) - && ((ROUTE_STATE_LEAD_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCKERR == routeState) - || (ROUTE_STATE_LEAD_OPEN == routeState))) - { /*·ֻ·żεռ״̬,ߵ*/ - if ((CI_DEVICE_TYPE_AXISSEC == devType) || (CI_DEVICE_TYPE_CONNECT_SWITCH == devType) - || (CI_DEVICE_TYPE_SWITCH == devType) || (CI_DEVICE_TYPE_FLOODGATE == devType)) - { + && (((ROUTE_STATE_LEAD_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCKERR == routeState) || (ROUTE_STATE_LEAD_OPEN == routeState)) || (ROUTE_TO_LEAD_FLAG_YES == cRouteToLeadFlag))) + { + /*·ֻ·ⷽεռ״̬ߵ(ݡ·Ƿ״̬ȷǷ) + ESB(ݡ·ǷESB״̬ȷǷ)*/ + cFuncSwitchFloodGate = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + cFuncSwitchEsb = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_ESB_CHECK); + + if ((CI_DEVICE_TYPE_AXISSEC == devType) || (CI_DEVICE_TYPE_CONNECT_SWITCH == devType) || (CI_DEVICE_TYPE_SWITCH == devType) + || ((CI_DEVICE_TYPE_FLOODGATE == devType) && (FUNC_SWITCH_OFF != cFuncSwitchFloodGate)) + || ((CI_DEVICE_TYPE_ESB == devType) && (FUNC_SWITCH_OFF != cFuncSwitchEsb))) + { ret = CI_ERROR; } else @@ -7749,6 +7724,7 @@ static UINT8 CheckRelationSignalOnSameOpen(UINT16 const routeId,UINT16 const rel UINT8 ret = CI_SUCCESS; UINT8 routeType = 0u; /*·*/ UINT8 relationSignalOpenColor = GetSignalCurColor(relationSignalId); + UINT8 cRouteStartSigOpenColor = 0U; /*·ʼźŻɫ*/ routeState = GetRouteState(routeId); routeLeadProperty = GetRouteLeadProperty(routeId);/*ȡ·*/ @@ -7787,6 +7763,7 @@ static UINT8 CheckRelationSignalOnSameOpen(UINT16 const routeId,UINT16 const rel } break; case SIGNAL_SHOWCOLOUR_YELLOW: + case SIGNAL_SHOWCOLOUR_GREEN: if (OTHER_CI_SIGNAL_STATUS_OPEN == devStatus) { /* Էгźţɰ·г·ܰ·(0x55)*/ @@ -7803,11 +7780,12 @@ static UINT8 CheckRelationSignalOnSameOpen(UINT16 const routeId,UINT16 const rel { if (ROUTE_TYPE_LIECHE == routeType) { - if (((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty)) - && ((ROUTE_STATE_LEAD_LOCK == routeState) - || (ROUTE_STATE_LEAD_LOCKERR == routeState) - || (ROUTE_STATE_LEAD_OPEN == routeState))) - {/* ·Ϊҽ·״̬Ϊ<><쳣><> ,·, */ + cRouteStartSigOpenColor = GetRouteSignalOpenColor(routeId); /*ȡ·ʼźŻɫ*/ + if ((((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty)) + && ((ROUTE_STATE_LEAD_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCKERR == routeState) || (ROUTE_STATE_LEAD_OPEN == routeState))) + || (cRouteStartSigOpenColor != relationSignalOpenColor)) + { + /* ·г·ɫһ£ʧ */ ret = CI_ERROR; } else @@ -7855,7 +7833,6 @@ UINT8 DriveGarageDoorOpenCheck(const UINT16 garageDoorId) UINT8 faultFlag = GetGaragedoorFaultState(garageDoorId); UINT8 doorState = GetGaragedoorState(garageDoorId); UINT8 pangluState = GetGaragedoorPangLuState(garageDoorId); - UINT16 jkjRelayId = GetJkjRelayId(); /**/ UINT8 const functionId = EFUNC_CLD_CLOSE_GARAGEDOOR; @@ -7867,9 +7844,9 @@ UINT8 DriveGarageDoorOpenCheck(const UINT16 garageDoorId) { retVal = CI_SUCCESS; /* ¼ */ - if ((jkjRelayId > 0u) && (JKJ_REYLAY_VALID == jkjRelayValidFlag)) - {/*Ӧ̵̼Ч״̬*/ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, jkjRelayId, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, sendLevel); + if (JKJ_REYLAY_VALID == jkjRelayValidFlag) + {/*Ӧ̵̼Ч״̬*/ + SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, 0u, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, sendLevel);/*OCӦعܣ̵ID0*/ retVal = CI_ERROR; } else if (GARAGE_DOOR_STATE_MODE_LOCAL == modeFlag) @@ -7931,7 +7908,6 @@ UINT8 DriveGarageDoorCloseCheck(const UINT16 garageDoorId) UINT8 phyState = SECTION_OCCUPY_YES; UINT8 phyFLockState = PHYSICAL_SECTION_FLOCK_YES; UINT8 phyLockState = PHYSICAL_SECTION_LOCK_NORMAL;/*״̬*/ - UINT16 jkjRelayId = GetJkjRelayId(); UINT16 jj = 0u; UINT32 responseZCStartCyc = 0U;/*ȴZCʼ*/ UINT32 responseIVOCStartCyc = 0U;/*ȴIVOCʼ*/ @@ -7952,9 +7928,9 @@ UINT8 DriveGarageDoorCloseCheck(const UINT16 garageDoorId) { retVal = CI_SUCCESS; /* ¼ */ - if ((jkjRelayId > 0u) && (JKJ_REYLAY_VALID == jkjRelayValidFlag)) + if (JKJ_REYLAY_VALID == jkjRelayValidFlag) {/*Ӧ̵̼Ч״̬*/ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, jkjRelayId, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, 0u, ETYPE_JKJ_WORK, RELAY_STATE_DOWN, sendLevel);/*OCӦعܣ̵ID0*/ retVal = CI_ERROR; } else if (GARAGE_DOOR_STATE_MODE_LOCAL == modeFlag) @@ -10067,7 +10043,6 @@ UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId) UINT8 routeBelongCi = 0u; UINT8 otherCiId = 0u;/*ID*/ UINT8 execRes = 0u;/*ִн*/ - UINT8 chRouteLevel = 0U; /*ȡϢ*/ phySecLockBelongRouteId = GetPhySecRLockBelongRouteId(phySectionId); @@ -10125,20 +10100,7 @@ UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId) /*ȡղ̵Ϊ*/ if (CI_SUCCESS == reResult) { - chRouteLevel = GetRouteLevel(phySecLockBelongRouteId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(phySecLockBelongRouteId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(phySecLockBelongRouteId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(phySecLockBelongRouteId); /*ȡղ̵ID*/ commState = GetLocalCiAndOtherCiTransSta(routeBelongCi);/*ͨͨ״̬*/ if ((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { @@ -10261,7 +10223,6 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId) UINT8 sectionSum = 0u;/*·*/ /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ UINT16 secIdx = 0u;/*·ڰα*/ - UINT8 chRouteLevel = 0U; /**/ /* ·״̬ա*/ @@ -10369,19 +10330,8 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId) if (CI_SUCCESS == reResult) { - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if ((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -10414,142 +10364,6 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId) return reResult; } -/* -* ·˽ĿԡֻҪ·һοֱӽ̹Ϊ˽Сע·˽ⲻɵøú -* ˵ const UINT16 routeId, ·ID -* ֵ UINT8 -CI_SUCCESS:˽ִ -CI_ERROR:˽ⲻִ -*/ -UINT8 CheckDiaoCheRouteZRJFeasibility(const UINT16 routeId) -{ - /**/ - UINT8 const functionId = EFUNC_CHECK_DIAOCHE_ROUTE_ZRJ; - /* ֲʼ */ - UINT8 reResult = CI_ERROR; /*ֵ*/ - UINT8 checkResult = CI_ERROR; /**/ - UINT16 devId = 0u; /*豸ID*/ - UINT8 devState = 0u; /*豸״̬*/ - UINT16 cancleZhaoChaRelayId = 0u; /*ȡղ̵ID*/ - UINT8 relayState = 0u; /*̵ɼ״̬*/ - UINT8 trainEnterFlag = 0u; /*·гʻ־*/ - UINT16 inPhySecId = 0u; /*źŻڷһID*/ - RoutePhysicalSectionStruct *pRouteSecStru = NULL; /**/ - UINT8 sectionSum;/*·*/ - UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ - UINT8 chRouteLevel = 0U; - - /* ·״̬ա*/ - devId = 0u; - devState = 0u; - checkResult = RouteAllSecLockStateCheck(routeId, PHYSICAL_SECTION_LOCK_NORMAL, &devId, &devState); - if (CI_SUCCESS==checkResult) - { - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_LOCK_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } - - - if (CI_SUCCESS == reResult) - { - trainEnterFlag = GetRouteTrainEnterFlag(routeId);/*ȡ·гʻ־*/ - - if (ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterFlag) - {/*гûʻ*/ - reResult = CI_SUCCESS; - } - else - { - sectionSum = GetRoutePhysicalSectionSum(routeId); /*ý·Ŀ*/ - pRouteSecStru = GetRouteSectionData(routeId); /*·*/ - - if ((NULL == pRouteSecStru) || (0u == sectionSum)) - { - reResult = CI_ERROR; - } - else - { - inPhySecId = pRouteSecStru[0].PhysicalSectionId; - - if (((ROUTE_STOPCHECK_SET_YES == GetRouteStopCheckFlag(routeId)) && - (PHYSICAL_SECTION_LJK_YES == GetPhySecLjkFlag(inPhySecId)) && - (PHYSICAL_STOPCHECK_SET_YES == GetPhySectionStopCheckFlag(inPhySecId))) - || (ROUTE_PHYSICALSECTION_CHECK_NO == pRouteSecStru[0].CheckProperty)) - { /*ֹͣЧΪмֹͣЧ,*/ - reResult = CI_SUCCESS; - } - else - { - devState = GetPhySecCurMergeState(inPhySecId); - - if (SECTION_OCCUPY_NO == devState) - { - reResult = CI_SUCCESS; - } - else - { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); - reResult = CI_ERROR; - } - } - } - } - } - else - { - } - - if (CI_SUCCESS == reResult) - { - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - if ((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) - { - /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ - relayState = GetRelayCollState(cancleZhaoChaRelayId);/*ȡȡ̵ɼ״̬*/ - devId = cancleZhaoChaRelayId; - devState = relayState; - if (RELAY_STATE_UP == relayState) - { - /* ͨ */ - reResult = CI_SUCCESS; - - } - else - { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } - - } - } - else - { - } - - return reResult; -} /* ձ @@ -12394,8 +12208,9 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) * UINT16 RouteId, · * UINT8 functionId, ú * UINT8 sendLevel, 뷢ͼ -* ֵ CI_ERROR -* CI_SUCCESS +* ֵ CI_ERROR ʧ +* CI_SUCCESS ɹ +* RELAY_STATE_WAITE ȴղ̵ */ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) { @@ -12712,6 +12527,22 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) reResult = CI_ERROR; } } + + /*ղ̵״̬*/ + if (CI_SUCCESS == reResult) + { + checkResult = OverlapZhaoChaRelayCheck(overlapId, ESEND_LEVEL_ATS); + + if (CI_SUCCESS == checkResult) + { + reResult = CI_SUCCESS; + } + else + { + /*ȴղ̵»Զ˼鲻ؼ*/ + reResult = checkResult; + } + } } else { @@ -15147,67 +14978,33 @@ UINT8 AxisSecAllSwitchPosCheck(UINT16 const axisSecId,UINT16 *pDevId,UINT8 *pDev * ˵ UINT16 const routeId, · * ֵ CI_ERROR * CI_SUCCESS +* qw.liu ޸ ·ⷽһελü鲻ʹýӽΣΪֱӲ߼ */ UINT8 RouteOutfirstPhySecSwiPosCheck(UINT16 const routeId) { UINT8 reVal = CI_ERROR; - RouteNearPhySectionStruct* pRouteNearPSSecStru = NULL; /*ӽνṹ*/ UINT16 outPhySecId = 0u; /*źŻⷽһID*/ + UINT16 signalId = 0u; + UINT16 signalOutFirstLogSecId = 0U; - UINT8 nearPhySecSum = 0u; - UINT16 i = 0u; /* ѭ */ - UINT16 j = 0u; /* ѭ */ - UINT16 signalId =0u; - UINT8 secConditionSum =0u; - UINT8 flag = 0u; - secConditionSum = GetRouteBlocNearSecConditionSum(routeId);/*ȡָID·ʽӽĿ*/ - pRouteNearPSSecStru = GetRouteBlocNearPhySectionStru(routeId);/*ӽνṹ*/ signalId = GetRouteStartSignalId(routeId);/*·ʼźŻ*/ outPhySecId = GetSignalOutFirstPhySecId(signalId); /*źŻⷽһID*/ + signalOutFirstLogSecId = GetSignalOutFirstLogSec(signalId); - if(0u != outPhySecId) + if (0u != outPhySecId) { - if((ROUTE_NEARSEC_CONDITION_SUM_MAX >= secConditionSum)&&(NULL != pRouteNearPSSecStru)) - { - for(i=0u;i= nearPhySecSum) - { - if(0u == flag) - { - for(j=0u;j wTrainIndex)) + if ((1U == cLogSecSum) && (NULL != pLogSecIdBuff) && ((ESEND_LEVEL_ATS == cSendLevel) || (ESEND_LEVEL_ZERO == cSendLevel))) { /****** ֽ·߼Ψһ߼Ƿδ ******/ cLogSecLockState = GetLogSecLockState(pLogSecIdBuff[0]); @@ -24924,43 +24762,46 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec if (TRAIN_COMM_STATE_GOOD == cTrainCommState) /*ͨųǰɸ*/ { - wTrainMaxHeadLink = GetTrainMaxHeadLink(wTrainId); /*ȡгλ*/ - wTrainMinHeadLink = GetTrainMinHeadLink(wTrainId); - wTrainMaxTailLink = GetTrainMaxTailLink(wTrainId); - wTrainMinTailLink = GetTrainMinTailLink(wTrainId); + cRetVal = TrainOccSameSecCheck(wLogSecRelPhySecId, wTrainId); - if ((pLogSecIncLinkId[0] == wTrainMaxHeadLink) && (wTrainMaxHeadLink == wTrainMinHeadLink) - && (wTrainMinHeadLink == wTrainMaxTailLink) && (wTrainMaxTailLink == wTrainMinTailLink)) + if (CI_SUCCESS != cRetVal) { - cRetVal = CI_SUCCESS; + 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 { - debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] Position Is Error\n", wTrainId); /*гδȫ߻ѹ죬ʧ*/ + /*ͨ*/ + ; } } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_TRAIN_COMM, 0U, cSendLevel); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] CommState Is Error\n", wTrainId); /*гͨ쳣ʧ*/ } } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: LogSec Check Error: LogSec[%d] Attr Is Error\n", pLogSecIdBuff[0]); /*ֽ·߼η߻ѹ/Σʧ*/ } } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); /*ȡ߼ΰlinkʧܣʧ*/ } } else { + SetErrorData(cFunctionId, CI_DEVICE_TYPE_LOGICSEC, pLogSecIdBuff[0], ETYPE_LOGSEC_LOCK_STATE, cLogSecLockState, cSendLevel); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: LogSec Check Error: LogSec[%d] State Is Error\n", pLogSecIdBuff[0]); /*߼գʧ*/ } } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); /*μʧܣʧ*/ } @@ -25501,8 +25342,8 @@ UINT8 CheckSwitchPosAndMoveValid(const UINT16 wSwitchId,const UINT8 chSwitchPos, else { /*λòȷ ɶ*/ - /* ¼ */ - SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel); + /* GetSwitchMoveValidStateѾ¼ */ + /*SetErrorData(EFUNC_CHECK_SWITCHPOS_MOVEVALID, CI_DEVICE_TYPE_SWITCH, wSwitchId, ETYPE_SWT_POSTION_STATE, chDevState, sendLevel);*/ chRetVal = CI_ERROR; } } @@ -25548,7 +25389,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_ATS); + reVal = CheckSwitchPosAndMoveValid(pRouteSwIdBuf[ii].SwitchId, pRouteSwIdBuf[ii].SwitchPosition, ESEND_LEVEL_ZERO); if (CI_ERROR == reVal) { break; @@ -25572,7 +25413,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_ATS); + reVal = CheckSwitchPosAndMoveValid(pRouteProSwIdBuf[ii].ProtectSwitchId, pRouteProSwIdBuf[ii].ProtectPosition, ESEND_LEVEL_ZERO); if (CI_ERROR == reVal) { break; @@ -25822,9 +25663,10 @@ 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) +UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* chSwitchState) { /* · */ UINT8 chRouteSwSum = GetRouteSwitchSum(routeId); @@ -25853,6 +25695,8 @@ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId) { /*λòȷ*/ reVal = CI_ERROR; + *switchID = szRouteSwDataBuf[ii].SwitchId; + *chSwitchState = chSwState; break; } } @@ -25871,6 +25715,8 @@ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId) { /*λòȷ*/ reVal = CI_ERROR; + *switchID = szRouteSwDataBuf[ii].SwitchId; + *chSwitchState = chSwState; break; } } @@ -25887,4 +25733,477 @@ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId) /*ȫͨ*/ return reVal; -} \ No newline at end of file +} + +/* +*ܣղ̵ +*˵const UINT16 wOverlapIdID +* UINT8 chSendLevel, 뷢ͼ +*ֵCI_ERROR ʧ +* CI_SUCCESS ɹ +* RELAY_STATE_WAITE ղ̵--ȴ +* by cgh 20250617 +*/ +UINT8 OverlapZhaoChaRelayCheck(const UINT16 wOverlapId, UINT8 chSendLevel) +{ + UINT8 chReval = CI_ERROR; + UINT16 wThisZhaoChaRelayId = 0U;/*ղ̵ID*/ + UINT8 chRelayCollState = 0U; /*̵ɼ״̬*/ + UINT8 chFunctionId = EFUNC_OVERLAP_ZHAOCHA_CHECK; /**/ + UINT16 wThatZhaoChaRelayId = 0U;/*ղ̵ID*/ + + if ((0U < wOverlapId) && (OVERLAP_SUM_MAX > wOverlapId)) + { + chReval = CI_SUCCESS; + + wThisZhaoChaRelayId = GetOverlapThisZhaoChaRelayId(wOverlapId); + + if (0U < wThisZhaoChaRelayId) + { + chRelayCollState = GetRelayCollState(wThisZhaoChaRelayId); + + if (RELAY_STATE_UP == chRelayCollState) + { + /* ¼ */ + SetErrorData(chFunctionId, CI_DEVICE_TYPE_RELAY, wThisZhaoChaRelayId, ETYPE_THIS_ZHAOCHA, RELAY_STATE_UP, ESEND_LEVEL_ZERO); + /*ȴصȴ־*/ + chReval = RELAY_STATE_WAITE; + } + else + { + ; /*سɹ*/ + } + } + else + { + ; /*һسɹ*/ + } + + /*Զղ̵*/ + wThatZhaoChaRelayId = GetOverlapThatZhaoChaRelayId(wOverlapId); + + if (0U < wThatZhaoChaRelayId) + { + chRelayCollState = GetRelayCollState(wThatZhaoChaRelayId); + + if (RELAY_STATE_UP == chRelayCollState) + { + /*ͨ*/ + } + else + { + /* ¼ */ + SetErrorData(chFunctionId, CI_DEVICE_TYPE_RELAY, wThatZhaoChaRelayId, ETYPE_THAT_ZHAOCHA, chRelayCollState, chSendLevel); + /*ȴصȴ־*/ + chReval = CI_ERROR; + } + } + else + { + ; /*һرղ*/ + } + + } + else + { + ; /*ʧ*/ + } + + return chReval; +} + +/* +* ·ȫռ +* ˵ UINT16 routeId, · +* ֵ CI_ERROR +* CI_SUCCESS ״̬Ϊ +* by fan 20250724 +*/ +UINT8 RouteAllSecProtectLockCheck(UINT16 const routeId) +{ + /* ·*/ + UINT8 const checkSum = GetRoutePhysicalSectionSum(routeId); + RoutePhysicalSectionStruct* const dataIdBuf = GetRouteSectionData(routeId); + + /* ֲʼ */ + UINT8 i = 0u; /* ѭ */ + UINT16 devId = 0u; + UINT8 devState = 0u; + UINT8 reVal = CI_ERROR; + + /* ռü */ + if ((0u == checkSum)||(NULL == dataIdBuf)) + { + /*ݴ*/ + reVal = CI_ERROR; + } + else + { + reVal = CI_SUCCESS; + /*ʼ*/ + for (i = 0u; i wIdIndex) + { + cRouteBelongCiId = GetRouteBelongCiId(wRouteId); + cCiType = GetCiType(cRouteBelongCiId); + + if ((CI_TYPE_SCX == cCiType) || (CI_TYPE_ZX == cCiType)) + { + cRetVal = CI_SUCCESS; /*dzΣسɹ*/ + } + else if (CI_TYPE_CLD == cCiType) + { + /*·ڳΣ·Ƿڷdzε*/ + cRouteIncPhySecNum = GetRoutePhysicalSectionSum(wRouteId); /*ȡ·Ϣ*/ + pstrRouteIncPhySecData = GetRouteSectionData(wRouteId); + + if ((0U < cRouteIncPhySecNum) && (NULL != pstrRouteIncPhySecData)) + { + for (ii = 0U; ii < cRouteIncPhySecNum; ii++) + { + cPhySecBelongCiId = GetPhySecBelongCiId(pstrRouteIncPhySecData[ii].PhysicalSectionId); + cCiType = GetCiType(cPhySecBelongCiId); + + if (CI_TYPE_ZX == cCiType) + { + break; /*ηdzΣֹͣ*/ + } + else + { + /**/ + } + } + + if (ii != cRouteIncPhySecNum) + { + cRetVal = CI_SUCCESS; /*ηdzΣΪ/·سɹ*/ + } + else + { + cRetVal = CI_ERROR; /*ʧ*/ + } + } + else + { + /*ȡϢʧܣʧ*/ + } + } + else + { + /*ʧ*/ + } + } + else + { + /*ηǷʧ*/ + } + + return cRetVal; +} + +/* +* ռý +* ˵UINT16 overlapId ID +* UINT8 functionId ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.08.18 +*/ +UINT8 OverlapOccuUnlockCheck(UINT16 overlapId, UINT8 functionId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT16 wOlapBelongRouteId = 0U; /*η·ID*/ + UINT8 cRouteState = 0U; /*·״̬*/ + UINT16 wRouteLatsPhySecId = 0U; /*·һID*/ + UINT8 cPhySecLockState = 0U; /*״̬*/ + UINT8 cOlapIncLogSecNum = 0U; /*ΰ߼*/ + UINT16* pOlapIncLogSecId = NULL; /*ΰ߼ID*/ + UINT8 ii = 0U; + UINT8 cLogSecLockState = 0U; /*߼ν·״̬*/ + UINT8 cLogSecLogLockState = 0U; /*߼߼·״̬*/ + UINT8 cSendLevel = ESEND_LEVEL_ZERO; + + wBufIndex = GetOverlapConfigBufIndex(overlapId); + if (OVERLAP_SUM_MAX > wBufIndex) + { + wOlapBelongRouteId = GetOverlapBelongRouteId(overlapId); + cRouteState = GetRouteState(wOlapBelongRouteId); + if (ROUTE_STATE_IDLE == cRouteState) + { + wRouteLatsPhySecId = GetRouteLastPhySectionId(wOlapBelongRouteId); + cPhySecLockState = GetPhySecLockState(wRouteLatsPhySecId); /*ȡ·һε״̬*/ + if (PHYSICAL_SECTION_LOCK_NO == cPhySecLockState) + { + cOlapIncLogSecNum = GetOverlapLogicSectionSum(overlapId); /*ȡΰ߼Ϣ*/ + pOlapIncLogSecId = GetOverlapLogicSectionBuf(overlapId); + if ((0U != cOlapIncLogSecNum) && (NULL != pOlapIncLogSecId)) + { + for (ii = 0U; ii < cOlapIncLogSecNum; ii++) + { + cLogSecLockState = GetLogSecLockState(pOlapIncLogSecId[ii]); + cLogSecLogLockState = GetLogSecLogLockState(pOlapIncLogSecId[ii]); + if ((LOG_SECTION_LOCK_NORMAL == cLogSecLockState) || (LOG_SECTION_LOGLOCK_NORMAL == cLogSecLogLockState)) + { + /**/ + } + else + { + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, pOlapIncLogSecId[ii], ETYPE_LOGSEC_LOCK_STATE, cLogSecLockState, cSendLevel); + cRetVal = CI_ERROR; /*ΰ߼δգʧ*/ + break; + } + } + + if (ii == cOlapIncLogSecNum) + { + cRetVal = CI_SUCCESS; /*ΰ߼ȫգسɹ*/ + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + cRetVal = CI_ERROR; /*ȡ߼Ϣʧܣ쳣֧ʧ*/ + } + } + else + { + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, wRouteLatsPhySecId, ETYPE_PS_LOCK_STATE, cPhySecLockState, cSendLevel); + cRetVal = CI_ERROR; /*·һգʧ*/ + } + } + else + { + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wOlapBelongRouteId, ETYPE_ROUTE_STATE, cRouteState, cSendLevel); + cRetVal = CI_ERROR; /*·δУʧ*/ + } + } + else + { + cRetVal = CI_ERROR; /*ηǷʧ*/ + } + + return cRetVal; +} + +/* +* гռȫָμ +* const UINT16 wPhySecId ID +* const UINT16 wTrainId гID +* +* ֵ CI_ERROR 0 ȫ +* CI_SUCCESS 1 ȫ +* by cgh 20251017 +*/ +UINT8 TrainOccSameSecCheck(const UINT16 wPhySecId, const UINT16 wTrainId) +{ + /*ֲʼ*/ + 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)) + { + chPhySecCurOccState = GetPhySecCurMergeState(wPhySecId); + + if (SECTION_OCCUPY_YES == chPhySecCurOccState) + { + /*ȡг͵λ*/ + 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 + { + /*гһλָ*/ + ; + } + } + else + { + /*ռ*/ + + } + } + else + { + /*ϷУ鲻ͨ*/ + ; + } + + return chRetVal; +} + +/* +* ռǷͬһμ +* const UINT16 wBasePhySecId ׼ID +* const UINT16 wCheckPhySecId ID +* +* ֵ CI_ERROR 0 +* CI_SUCCESS 1 +* by cgh 20251017 +*/ +UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId) +{ + /*ֲʼ*/ + UINT8 chRetVal = CI_ERROR; /*ֵ*/ + UINT8 chPhySecCurOccState = 0U; /*εǰռ״̬*/ + + if ((0U < wBasePhySecId) && (PHYSICAL_SECTION_SUM_MAX > wBasePhySecId) && (0U < wCheckPhySecId) && (PHYSICAL_SECTION_SUM_MAX > wCheckPhySecId)) + { + if (wBasePhySecId == wCheckPhySecId) + { + /*ռͬһ*/ + chRetVal = CI_SUCCESS; + } + else + { + /*ǰڵǰռãΪгռòȫָ*/ + chPhySecCurOccState = GetPhySecCurMergeState(wCheckPhySecId); + + if (SECTION_OCCUPY_NO != chPhySecCurOccState) + { + /*ռòͬһ*/ + chRetVal = CI_ERROR; + } + else + { + /*ռͬһ*/ + chRetVal = CI_SUCCESS; + } + } + } + else + { + /*ϷУ鲻ͨ*/ + chRetVal = CI_ERROR; + } + + return chRetVal; +} diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h index 636ec6a..09a3552 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h @@ -1021,14 +1021,6 @@ CI_ERROR: */ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId); -/* -* ·˽ĿԡֻҪ·һοֱӽ̹Ϊ˽Сע·˽ⲻɵøú -* ˵ const UINT16 routeId, ·ID -* ֵ UINT8 -CI_SUCCESS:˽ִ -CI_ERROR:˽ⲻִ -*/ -UINT8 CheckDiaoCheRouteZRJFeasibility(const UINT16 routeId); /* ձ @@ -1497,6 +1489,7 @@ UINT8 AxisSecAllSwitchPosCheck(UINT16 const axisSecId,UINT16 *pDevId,UINT8 *pDev * ˵ UINT16 const routeId, · * ֵ CI_ERROR * CI_SUCCESS +* qw.liu ޸ ·ⷽһελü鲻ʹýӽΣΪֱӲ߼ */ UINT8 RouteOutfirstPhySecSwiPosCheck(UINT16 const routeId); /* @@ -2294,7 +2287,7 @@ UINT16 SearchNonMainRoute(UINT8 cRouteSum, UINT16 wRouteIdBuff[]); UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* pLogState); /* -* źűֿʱ·ղ +* ·ղ * ˵ UINT16 const routeId, · * ֵ CI_ERROR ʧ * CI_SUCCESS ɹ @@ -2614,13 +2607,15 @@ UINT8 CtTrainHeadSuspCheck(const UINT16 wTrainId, const UINT8 cLogSecSeqDir, con * βֽ·߼кгλü * const UINT8 cLogSecSum ߼ * const UINT16* pLogSecIdBuff ߼ -* const UINT16 wTrainId +* const UINT16 wTrainId гID +* const UINT8 cFunctionId ID +* const UINT8 cSendLevel ͼ * * ֵ CI_ERROR 0 ʧ * CI_SUCCESS 1 ɹ -* Created By LQ 2024.09.05 +* Edit By cgh 2025.10.17 */ -UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSecIdBuff, const UINT16 wTrainId); +UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSecIdBuff, const UINT16 wTrainId, const UINT8 cFunctionId, const UINT8 cSendLevel); /* * βֽ·߼·ƥ @@ -2711,13 +2706,83 @@ UINT8 OtherCiOvlpRelProSwMovValCheck(const UINT16 wOverlapId); UINT8 OverlapProSwUsingCheck(const UINT16 wOverlapId, UINT16* pDevId, UINT8* pDevState, UINT8* pAlarmType); /* -* ·еλȷ -* ˵ UINT16 const routeId, ·ţ -* ֵ CI_ERROR -* CI_SUCCESS -* BY CGH 20250224 +* ȡָ·ڿ־ +* ˵ const UINT16 routeId ·ID +* ֵ ·ڿ־ +* UINT16* switchIDIDUINT8* chSwitchState״̬ +* by cgh 20241202 */ -UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId); +UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId, UINT16* switchID, UINT8* chSwitchState); + +/* +*ܣղ̵ +*˵const UINT16 wOverlapIdID +* UINT8 chSendLevel, 뷢ͼ +*ֵCI_ERROR ʧ +* CI_SUCCESS ɹ +* RELAY_STATE_WAITE ղ̵--ȴ +* by cgh 20250617 +*/ +UINT8 OverlapZhaoChaRelayCheck(const UINT16 wOverlapId, UINT8 chSendLevel); + +/* +* ·ȫռ +* ˵ UINT16 routeId, · +* ֵ CI_ERROR +* CI_SUCCESS ״̬Ϊ +* by fan 20250724 +*/ +UINT8 RouteAllSecProtectLockCheck(UINT16 const routeId); + +/* +* ߼ι߳ +* ˵ UINT16 logSectionId, ߼ID +* ֵ CI_ERROR ߳ +* CI_SUCCESS ͨ +* by fan 20250728 +*/ +UINT8 LogSecRelateNoSleepTrainCheck(UINT16 const logSectionId); + +/* +* Уָ·Ƿdzν·Ϊγ/ν· +* ˵UINT16 wRouteId ·ID +* ֵCI_ERROR · +* CI_SUCCESS dzν·Ϊγ/ν· +* Created By LQ 2025.08.05 +*/ +UINT8 RouteCldAttrCheck(UINT16 wRouteId); + +/* +* ռý +* ˵UINT16 overlapId ID +* UINT8 functionId ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.08.18 +*/ +UINT8 OverlapOccuUnlockCheck(UINT16 overlapId, UINT8 functionId); + +/* +* гռȫָμ +* const UINT16 wPhySecId ID +* const UINT16 wTrainId гID +* +* ֵ CI_ERROR 0 ȫ +* CI_SUCCESS 1 ȫ +* by cgh 20251017 +*/ +UINT8 TrainOccSameSecCheck(const UINT16 wPhySecId, const UINT16 wTrainId); + +/* +* ռǷͬһμ +* const UINT16 wBasePhySecId ׼ID +* const UINT16 wCheckPhySecId ID +* +* ֵ CI_ERROR 0 +* CI_SUCCESS 1 +* by cgh 20251017 +*/ +UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId); #endif diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c index 269c600..1e221ff 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c @@ -1127,6 +1127,7 @@ UINT8 LockLeadRouteLogicProcess(UINT16 const routeId) /*Ϸͼ*/ UINT8 sendLevel = 0u; + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) @@ -1160,19 +1161,9 @@ UINT8 LockLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊ - ѡš - ·쳣 - Ԥա - ӽ - ӽ쳣 - */ + /* ·״̬Ϊѡš*/ devState = GetRouteState(routeId); - if ((devState == ROUTE_STATE_LEAD_XUANPAI) || - (devState == ROUTE_STATE_FIRST_LOCKERR) || - (devState == ROUTE_STATE_YUXIAN_LOCK) || - (devState == ROUTE_STATE_NEAR_LOCK) || - (devState == ROUTE_STATE_NEAR_LOCKERR)) + if (devState == ROUTE_STATE_LEAD_XUANPAI) { /* ͨ */ reResult = CI_SUCCESS; @@ -1259,7 +1250,18 @@ UINT8 LockLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /**/ - checkResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + + if (FUNC_SWITCH_OFF == cFuncSwitch) + { + /*·ղ״̬*/ + } + else + { + /*·ռ״̬*/ + checkResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + } + if (CI_SUCCESS == checkResult) { reResult = CI_SUCCESS; @@ -2403,6 +2405,21 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, } } + /*ղ*/ + if (CI_SUCCESS == reResult) + { + checkResult = OverlapZhaoChaRelayCheck(overlapId, sendLevel); + + if (CI_ERROR == checkResult) + { + reResult = CI_ERROR; + } + else + { + ; /*֮ǰʱȲ鱾Ƿ*/ + } + } + /* μηΡδá*/ if (CI_SUCCESS == reResult) { @@ -3064,7 +3081,7 @@ UINT8 OpenBlocLTrainRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -3663,7 +3680,7 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -4240,7 +4257,7 @@ UINT8 OpenBlocReturnRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -4796,7 +4813,7 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -5238,6 +5255,7 @@ UINT8 OpenLeadRouteLogicProcess(UINT16 const routeId) /* ȡ־ */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ /* ȡ۳Ƿرźű־ */ @@ -5273,9 +5291,13 @@ UINT8 OpenLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊա*/ + /* ·״̬Ϊա򡾽·쳣Ԥա򡾽ӽ򡾽ӽ쳣*/ devState = GetRouteState(routeId); - if (devState == ROUTE_STATE_LEAD_LOCK) + if ((ROUTE_STATE_LEAD_LOCK == devState) || + (ROUTE_STATE_FIRST_LOCKERR == devState) || + (ROUTE_STATE_YUXIAN_LOCK == devState) || + (ROUTE_STATE_NEAR_LOCK == devState) || + (ROUTE_STATE_NEAR_LOCKERR == devState)) { /* ͨ */ reResult = CI_SUCCESS; @@ -5411,7 +5433,18 @@ UINT8 OpenLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /**/ - checkResult = BlocRouteFloodGateCheck(routeId,functionId,sendLevel); + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + + if (FUNC_SWITCH_OFF == cFuncSwitch) + { + /*·Ų״̬*/ + } + else + { + /*·ż״̬*/ + checkResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + } + if (CI_SUCCESS == checkResult) { reResult = CI_SUCCESS; @@ -5489,9 +5522,7 @@ UINT8 KeepLeadRouteLogicProcess(UINT16 const routeId) /* ȡ־ */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); - /* ӷ */ - - + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ /*źſʱ״̬*/ UINT8 const leadSinalOpenState = SystemOverTimeCheck(GetRouteLeadFaultOpenStartCyc(routeId), @@ -5725,7 +5756,18 @@ UINT8 KeepLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /**/ - checkResult = BlocRouteFloodGateCheck(routeId,functionId,sendLevel); + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + + if (FUNC_SWITCH_OFF == cFuncSwitch) + { + /*·ֿŲ״̬*/ + } + else + { + /*·ֿż״̬*/ + checkResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + } + if (CI_SUCCESS == checkResult) { reResult = CI_SUCCESS; @@ -5822,7 +5864,6 @@ UINT8 RouteFirstSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId) UINT16 belongRouteID = 0U; /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; /*ATS*/ - UINT8 chRouteLevel = 0U; /*һڵǰ·ġա*/ nlockSectionId = GetRouteFirstNormalLockSection(routeId); @@ -5844,7 +5885,6 @@ UINT8 RouteFirstSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId) returnRouteLockTime = GetRouteLockStartCycNum(routeId); /*۳·ʱ*/ backRouteLockTime = GetRouteLockStartCycNum(belongRouteID); - chRouteLevel = GetRouteLevel(routeId); if(CI_SUCCESS == reResult) { @@ -5916,18 +5956,8 @@ UINT8 RouteFirstSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId) /*·ڷһռñʱẈ̂ȡղ̵()״̬*/ if(CI_SUCCESS == reResult) { - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -6010,18 +6040,8 @@ UINT8 RouteFirstSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId) /*·ڷһռñʱẈ̂ȡղ̵()״̬*/ if(CI_SUCCESS == reResult) { - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -6433,9 +6453,10 @@ UINT8 PhySectionDelayUnlockProcess(UINT16 const routeId, UINT16* phySectionId) /* * ·overlap߼ * ˵ const UINT16 routeId · -* ֵ CI_ERROR -* CI_SUCCESS -* CI_UNLOCK_OVERLAP_REQURE ZC +* ֵ CI_ERROR 0x00 ʧ +* CI_SUCCESS 0x01 ɹ +* CI_UNLOCK_OVERLAP_REQURE 0x02 ZC/ +* CI_OVERLAP_OCC_UNLOCK 0x06 ִռ * ϱ룺 EFUNC_UNLOCK_OVER_LAP */ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UINT16* pTrainId) @@ -6473,8 +6494,8 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN UINT8 sendLevel = ESEND_LEVEL_ZERO; /*ATS*/ UINT8 cIvocUnlockOverlapFlag = 0U; /*гͬα־*/ UINT8 cRcWorkMode = 0U; - UINT8 phySecSum = 0U; UINT8 chABLFlag = 0U; /*ABLռñ־*/ + UINT8 chProtectCheck = 0U; localCiId = GetSystemParaLocalCiId(); @@ -6510,12 +6531,21 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_MERGY_OCU_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - *overlapId = overlapLockedId; - + /*ռ*/ + checkResult = OverlapOccuUnlockCheck(overlapLockedId, functionId); + if (CI_SUCCESS == checkResult) + { + reResult = CI_OVERLAP_OCC_UNLOCK; + *overlapId = overlapLockedId; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + *overlapId = overlapLockedId; + } } } @@ -6543,7 +6573,10 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN if (CI_SUCCESS == reResult) { - /*·״̬Сҽ·һΡδա*/ + /*·һΡδա + շ෴ + ռãӳٽͣȽ + δռãҽ·ξա*/ devId = GetRouteLastPhySectionId(routeId); devState = GetPhySecLockState(devId); @@ -6750,9 +6783,10 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN } else { - phySecSum = GetRoutePhysicalSectionSum(routeId); - /*·ֻһΣҸαǰһ· Խ*/ - if ((PHYSICAL_SECTION_LOCK_PROTECT == devState)&&(1U== phySecSum)) + /*·״̬Ϊգɽ*/ + chProtectCheck = RouteAllSecProtectLockCheck(routeId); + + if (CI_SUCCESS == chProtectCheck) { reResult = CI_SUCCESS; *overlapId = overlapLockedId; @@ -6837,7 +6871,6 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId) UINT8 relayState = 0u; /*̵ɼ״̬*/ /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ - UINT8 chRouteLevel = 0U; UINT8 cRouteType = 0U; /*·*/ /**/ @@ -6910,19 +6943,8 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId) if(CI_SUCCESS == reResult) { - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -9285,6 +9307,7 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT8 routeState = 0u; UINT8 chDsnFuncSwitch = 0U; /* ֱռùܿ */ UINT8 chXianSuFuncSwitch = 0U; /*ģʽźſǷʱٿ*/ + UINT8 cCrossState = 0U; /*źŻѹ״̬*/ chDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH); chXianSuFuncSwitch = GetCiFunctionSwitchConfig(FUNC_XIANSU_SWITCH); @@ -9323,7 +9346,8 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) } else { - if ((SIGNAL_CROSS_STATE_NO == GetSignalCrossState(startSignalId)) && (CI_SUCCESS == checkResult)) + cCrossState = GetSignalCrossState(startSignalId); + if ((SIGNAL_CROSS_STATE_NO == cCrossState) && (CI_SUCCESS == checkResult)) { /* ͨ */ reResult = CI_SUCCESS; @@ -9333,7 +9357,17 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) if (FUNC_SWITCH_ON != chDsnFuncSwitch) { /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, cPhySecCurMergeState, sendLevel); + if (CI_SUCCESS == checkResult) + { + /*ѹδռã¼ѹ*/ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_CROSS, cCrossState, sendLevel); + } + else + { + /*ռã¼ռñ*/ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, cPhySecCurMergeState, sendLevel); + } + /* ʧܷ */ reResult = CI_ERROR; } @@ -10557,7 +10591,6 @@ UINT8 RouteLogSecAutoUnlockProcess(UINT16 const routeId, UINT16* logSectionId) UINT8 leavePhyCurOccState = 0u; UINT8 reResult = CI_ERROR; /*ֵ*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; /*ATS*/ - UINT8 chRouteLevel = 0U; /*һڵǰ·߼*/ nlockLogId = GetRouteFirstNormalLockLogId(routeId); @@ -10591,19 +10624,8 @@ UINT8 RouteLogSecAutoUnlockProcess(UINT16 const routeId, UINT16* logSectionId) /*·ڷһռñʱẈ̂ȡղ̵()״̬*/ if(CI_SUCCESS == reResult) { - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -10896,10 +10918,8 @@ void RouteLgcSecResUnlockProcess(const UINT16 wRouteId) UINT8 chRelayState = 0U; UINT16 routeLogNum = 0u; UINT16 wTrainId = 0U; - UINT8 chLogicTrainRetrunStt = 0U; UINT16* routeLogIdBuf = NULL; UINT8 cRouteState = 0U; - UINT8 chRouteLevel = 0U; UINT8 chTrainLevel = 0U; UINT8 chThreePointCheck = CI_ERROR; UINT8 chLocalCi = 0U; @@ -10914,19 +10934,8 @@ void RouteLgcSecResUnlockProcess(const UINT16 wRouteId) if ((0u < routeLogNum) && (MAX_ROUTE_IN_LT_NUM > routeLogNum)) { - chRouteLevel = GetRouteLevel(wRouteId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - wRelayZhaoCId = GetRouteCancleZhaoChaRelayId(wRouteId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - wRelayZhaoCId = GetRouteCbtcCancelZhaochaRelay(wRouteId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + wRelayZhaoCId = GetRouteCancleZhaoChaRelayId(wRouteId); /*ȡղ̵ID*/ + if ((0u != wRelayZhaoCId) && (0xFFFFU != wRelayZhaoCId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -11000,7 +11009,6 @@ void RouteLgcSecResUnlockProcess(const UINT16 wRouteId) chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId); wTrainId = GetLogSecTrainIdByIndex(wUnlockLgcSecId, 0); - chLogicTrainRetrunStt = GetLogSecTrainReturnState(wUnlockLgcSecId, wTrainId); } else { @@ -11016,21 +11024,6 @@ void RouteLgcSecResUnlockProcess(const UINT16 wRouteId) else { } -#if 0 - if (CI_SUCCESS == chKeepWork) - { - if (LOGIC_SECTION_TRAIN_RETURN_NO != chLogicTrainRetrunStt) - { - chKeepWork = CI_ERROR; - } - else - { - } - } - else - { - } -#endif if (CI_SUCCESS == chKeepWork) { chLocalCi = GetSystemParaLocalCiId(); @@ -12440,7 +12433,6 @@ void OtherCiOlpProSwUseCancelPro(const UINT16 wSwitchId, const UINT16 wOverlapId UINT16 wOverlapIndex = 0U; UINT8 cLocalCiId = 0U; /*ID*/ UINT8 cOverlapBelongCiId = 0U; /*ID*/ - UINT8 ii = 0U; UINT8 cSwitchBelongCiId = 0U; /*ID*/ UINT16 wUsingBelongOverlapId = 0U; /*ID*/ UINT8 cSwitchUsingState = 0U; /*״̬*/ diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h index 13d5dda..51cd2ed 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.h @@ -325,10 +325,11 @@ UINT8 PhySectionDelayUnlockProcess(const UINT16 routeId, UINT16* phySectionId); /* C25_·overlap߼ */ /* * ·overlap߼ -* ˵ const UINT16 routeId -* ֵ CI_ERROR -* CI_SUCCESS -* CI_UNLOCK_OVERLAP_REQURE ZC +* ˵ const UINT16 routeId · +* ֵ CI_ERROR 0x00 ʧ +* CI_SUCCESS 0x01 ɹ +* CI_UNLOCK_OVERLAP_REQURE 0x02 ZC/ +* CI_OVERLAP_OCC_UNLOCK 0x06 ִռ * ϱ룺 EFUNC_UNLOCK_OVER_LAP */ UINT8 UnlockRouteOverlapLogicProcess(const UINT16 routeId, UINT16* overlapId, UINT16* pTrainId); diff --git a/TSCP/src/APP/ciapp/LogicProcess/TradInterlockLogicProcess.c b/TSCP/src/APP/ciapp/LogicProcess/TradInterlockLogicProcess.c index da8bfff..c906723 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/TradInterlockLogicProcess.c +++ b/TSCP/src/APP/ciapp/LogicProcess/TradInterlockLogicProcess.c @@ -181,6 +181,7 @@ UINT8 SetLeadRouteP(const UINT16 routeId) UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ UINT8 reResult = CI_SUCCESS; /*ֵ*/ + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ /* */ devId = routeId; @@ -226,8 +227,17 @@ UINT8 SetLeadRouteP(const UINT16 routeId) if (CI_SUCCESS == reResult) { /**/ - reResult = BlocRouteFloodGateCheck(routeId,functionId,sendLevel); - + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + + if (FUNC_SWITCH_OFF == cFuncSwitch) + { + /*·״̬*/ + } + else + { + /*·״̬*/ + reResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + } } return reResult; @@ -1995,9 +2005,7 @@ UINT8 CancelDTrainRouteP(const UINT16 routeId) UINT8 devState = 0u; /*豸״̬*/ UINT16 cancleZhaoChaRelayId = 0u; /*ȡղ̵ID*/ UINT8 relayState = 0u; /*̵ɼ״̬*/ - UINT8 chRouteLevel = 0U; - - + /* */ /*·*/ checkResult = RouteAllSecLockStateCheck(routeId,PHYSICAL_SECTION_LOCK_NORMAL,&devId,&devState); @@ -2034,19 +2042,8 @@ UINT8 CancelDTrainRouteP(const UINT16 routeId) } if (CI_SUCCESS == reResult) {/*ȡղ̵״̬Ƿ*/ - chRouteLevel = GetRouteLevel(routeId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - cancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(routeId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } + cancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(routeId); /*ȡղ̵ID*/ + if((0u != cancleZhaoChaRelayId) && (0xFFFFu != cancleZhaoChaRelayId)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -2528,7 +2525,7 @@ UINT8 SetLTrainRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLeve } else { - reResultP = CI_ERROR; + /*ǽ·ȴ״̬,ȲǷȫλãȴ*/ } if (CI_ERROR == reResultP) @@ -4115,6 +4112,7 @@ UINT8 SetLeadRouteCheck(const UINT16 routeId) UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ UINT8 reResult = CI_ERROR; /*ֵ*/ + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ /* */ devId = routeId; @@ -4214,7 +4212,18 @@ UINT8 SetLeadRouteCheck(const UINT16 routeId) /**/ if (CI_SUCCESS == reResult) { - reResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_LEADROUTE_FLOODGATE_CHECK); + + if (FUNC_SWITCH_OFF == cFuncSwitch) + { + /*·ղ״̬*/ + } + else + { + /*·ռ״̬*/ + reResult = BlocRouteFloodGateCheck(routeId, functionId, sendLevel); + } + if (CI_ERROR == reResult) { /* ʧܷ */ diff --git a/TSCP/src/APP/ciapp/Mask/MaskDefine.h b/TSCP/src/APP/ciapp/Mask/MaskDefine.h index 71ebeb1..dda38d5 100644 --- a/TSCP/src/APP/ciapp/Mask/MaskDefine.h +++ b/TSCP/src/APP/ciapp/Mask/MaskDefine.h @@ -49,6 +49,7 @@ #define MASK_TYPE_SWITCH_BYPASS ((UINT8)0x0D) /*·λ*/ #define MASK_TYPE_SWITCH_OPEN_CAP ((UINT8)0x0E) /*ڰ忨״̬*/ #define MASK_TYPE_SWITCH_SUDDEN_JICHA ((UINT8)0x0F) /*̬λ*/ +#define MASK_TYPE_SWITCH_JICHA ((UINT8)0x10) /*λ28.0.0.14ݽṹʹ*/ /*_λ*/ /* zt ɾش 2022-02-15 */ @@ -62,11 +63,12 @@ #define MASK_TYPE_SIGNAL_REDCLOSE ((UINT8)0x15) /*źŻλ*/ #define MASK_TYPE_SIGNAL_GREENCLOSE ((UINT8)0x16) /*źŻλ*/ #define MASK_TYPE_SIGNAL_YELLOWCLOSE ((UINT8)0x17) /*źŻλ*/ -#define MASK_TYPE_SIGNAL_REDBREAK ((UINT8)0x18) /*źŻλ*/ +#define MASK_TYPE_SIGNAL_REDBREAK ((UINT8)0x18) /*źŻλ--ʹ*/ #define MASK_TYPE_SIGNAL_GREENBREAK ((UINT8)0x19) /*źŻ̶λ*/ #define MASK_TYPE_SIGNAL_YELLOWBREAK ((UINT8)0x1a) /*źŻƶλ*/ #define MASK_TYPE_SIGNAL_WHITEBREAK ((UINT8)0x1b) /*źŻ׶λ*/ -#define MASK_TYPE_SIGNAL_BREAK ((UINT8)0x1c) /*źŻ˿λ*/ +#define MASK_TYPE_SIGNAL_BLUEBREAK ((UINT8)0x25) /*źŻλ*/ +#define MASK_TYPE_SIGNAL_BREAK ((UINT8)0x1c) /*źŻ˿λ ȫ=ƶ˿*/ #define MASK_TYPE_SIGNAL_FENGSUO ((UINT8)0x1d) /*źŻλ*/ #define MASK_TYPE_SIGNAL_OPENSTATE ((UINT8)0x1e) /*źŻ״̬λ*/ @@ -90,6 +92,9 @@ #define MASK_TYPE_SIGNAL_DET_ERR ((UINT8)0x5c) /*źŻ۳ť״̬λ*/ #define MASK_TYPE_SIGNAL_AUTO_DERAIN ((UINT8)0x5e) /*źŻԶ۳λ*/ +#define MASK_TYPE_SIGNAL_DET_CUT_VALID ((UINT8)0xA6) /*źŻ۳·ťЧ״̬λ*/ +#define MASK_TYPE_SIGNAL_DET_CUT_ERR ((UINT8)0xA7) /*źŻ۳·ť״̬λ*/ + #define MASK_ZC_CI_SIG_ENGINEERV_NEAR ((UINT8)0x97) /*źŻ̳ӽλ*/ #define MASK_CI_ZC_SIG_ENGINCROSS_STE ((UINT8)0x98) /*źŻ̳صλ*/ @@ -112,7 +117,12 @@ #define MASK_TYPE_PHYSECTION_HEAD_XTD ((UINT8)0x31) /*з״̬λ*/ #define MASK_TYPE_PHYSECTION_HEAD_STD ((UINT8)0x32) /*з״̬λ*/ #define MASK_TYPE_LIECHE_STOPSTATE ((UINT8)0x3a) /*гͣϢ״̬λ*/ - +#define MASK_TYPE_PHYSEC_CENTERDETAIN_UP ((UINT8)0x3d) /*CI-ATSп۳״̬״̬λ (28.0.0.14ʹ)*/ +#define MASK_TYPE_PHYSEC_CENTERDETAIN_DOWN ((UINT8)0x3e) /*CI-ATSп۳״̬״̬λ (28.0.0.14ʹ)*/ +#define MASK_TYPE_PHYSEC_STATIONDETAIN_UP ((UINT8)0x3f) /*CI-ATSվп۳״̬״̬λ (28.0.0.14ʹ)*/ +#define MASK_TYPE_PHYSEC_STATIONDETAIN_DOWN ((UINT8)0x40) /*CI-ATSվп۳״̬״̬λ (28.0.0.14ʹ)*/ +#define MASK_TYPE_AXISSECTION_DETAIN_UP ((UINT8)0x41) /*CI-ZCп۳״̬״̬λ (28.0.0.14ʹ)*/ +#define MASK_TYPE_AXISSECTION_DETAIN_DOWN ((UINT8)0x42) /*CI-ZCп۳״̬״̬λ (28.0.0.14ʹ)*/ /*߼λ*/ #define MASK_TYPE_LOGICSECTION_UTOCCUPY ((UINT8)0x33) /*߼ηͨųռλ*/ @@ -156,6 +166,7 @@ #define MASK_TYPE_ROUTE_DC_QINGQIU ((UINT8)0x51) /*·״̬λ(CI-ATS)*/ #define MASK_TYPE_ROUTE_DC_AGREE ((UINT8)0x52) /*·ͬ״̬λ(CI-ATS)*/ #define MASK_TYPE_ROUTE_AUTO_TRIGGER ((UINT8)0x53) /*·Զλ(CI-ATS)*/ +#define MASK_TYPE_ROUTE_DC_AGREE_ERR ((UINT8)0x54) /*·ͬⰴť״̬λ(CI-ATS)*/ /*վ̨λ*/ @@ -169,6 +180,8 @@ #define MASK_TYPE_ESP_FLASH_STATE ((UINT8)0x9b) /*ESSƵ״̬λ*/ #define MASK_TYPE_CANCEL_ESP_FAULT ((UINT8)0x9c) /*ȡرհťλ*/ #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_PSD_STATE ((UINT8)0x60) /*վ̨ȫ״̬λ-ZC,LEU*/ @@ -186,6 +199,7 @@ #define MASK_TYPE_PSD_PDB_FLASH_STATE ((UINT8)0xA0) /*ȷPDBťָʾ״̬λ*/ #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_GARAGEDOOR_OPEN_STATE ((UINT8)0x62) /*峵ſ״̬λCI->ATS*/ diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c index 4a5e981..c9e74a3 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c @@ -872,4 +872,54 @@ UINT8 GetOverlapProSwitchPos(const UINT16 wOverlapId, const UINT16 wProSwitchId) } return cRetVal; +} + +/* +* ȡָIDαղ̵ID +* ˵ const UINT16 overlapId, ID +* ֵ ղ̵ID +* by cgh 20250617 +*/ +UINT16 GetOverlapThisZhaoChaRelayId(const UINT16 overlapId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 reVal = CI_ERROR; + + bufIndex = GetOverlapConfigBufIndex(overlapId); /*ȡ±*/ + + if (bufIndex < OVERLAP_SUM_MAX) + { + reVal = OverlapConfigDataStru[bufIndex].wOverlapThisZhaoChaRelayId; + } + else + { + ; + } + + return reVal; +} + +/* +* ȡָIDζԶղ̵ID +* ˵ const UINT16 overlapId, ID +* ֵ Զղ̵ID +* by cgh 20250617 +*/ +UINT16 GetOverlapThatZhaoChaRelayId(const UINT16 overlapId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 reVal = CI_ERROR; + + bufIndex = GetOverlapConfigBufIndex(overlapId); /*ȡ±*/ + + if (bufIndex < OVERLAP_SUM_MAX) + { + reVal = OverlapConfigDataStru[bufIndex].wOverlapThatZhaoChaRelayId; + } + else + { + ; + } + + return reVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h index ff1eace..5586361 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h @@ -72,7 +72,8 @@ typedef struct S_OverlapConfigDataStruct UINT16 OverlapRouteSum; /*ν·*/ UINT16 OverlapRouteIdBuf[OVERLAP_ROUTE_SUM_MAX]; /*ν·*/ UINT16 AxisSecFarId; /*Զ˼ID*/ - + UINT16 wOverlapThisZhaoChaRelayId; /*αղ̵ID*/ + UINT16 wOverlapThatZhaoChaRelayId; /*ζԶղ̵ID*/ } OverlapConfigDataStruct; extern OverlapConfigDataStruct OverlapConfigDataStru[OVERLAP_SUM_MAX]; /*OVERLAPýṹ,cgh-ϲCID-2539-1˴гʼͳһŵInitAllStaticDataStrнгʼΪں˹*/ @@ -373,6 +374,22 @@ UINT8 CheckOtherCiOlpHaveLocalCiPSw(const UINT16 wOverlapId); */ UINT8 GetOverlapProSwitchPos(const UINT16 wOverlapId, const UINT16 wProSwitchId); +/* +* ȡָIDαղ̵ID +* ˵ const UINT16 overlapId, ID +* ֵ ղ̵ID +* by cgh 20250617 +*/ +UINT16 GetOverlapThisZhaoChaRelayId(const UINT16 overlapId); + +/* +* ȡָIDζԶղ̵ID +* ˵ const UINT16 overlapId, ID +* ֵ Զղ̵ID +* by cgh 20250617 +*/ +UINT16 GetOverlapThatZhaoChaRelayId(const UINT16 overlapId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c index f636446..abe6a90 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c +++ b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c @@ -51,7 +51,7 @@ UINT16 GetOverlapBelongRouteId(const UINT16 overlapId) /* -* ָIDʼں +* ָID· * ˵ const UINT16 overlapId, ID * const UINT16 belongRouteId, · * ֵ diff --git a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c index 06913d6..a66976d 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c +++ b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c @@ -1040,5 +1040,29 @@ UINT8 CheckPsdBelSendRange(const UINT16 wCheckPsdId) ; /**/ } + return retVal; +} + +/* +* ȡָIDſ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 ͣ0x55 OC-P 0xAA RCIƣ +*/ +UINT8 GetPsdControlType(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = PSD_CONTROL_TYPE_RCI; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdConfigDataStru[bufIndex].chPsdControlType; + } + else + { + retVal = PSD_CONTROL_TYPE_RCI; + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h index aca7c84..2cadc96 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h +++ b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h @@ -64,6 +64,10 @@ typedef struct S_PsdConfigDataStruct UINT16 wPcbIndicatorRelayId; /*ٹŰťָʾƼ̵*/ UINT16 wVideoQkLight1RelayId; /*ͰťƵָʾ1̵̣*/ UINT16 wVideoQkLight2RelayId; /*ͰťƵָʾ2죩̵*/ + UINT16 wPsdFstProLinkId; /*ŷlink1ID*/ + UINT16 wPsdSndProLinkId; /*ŷlink2ID*/ + UINT16 wPsdTrdProLinkId; /*ŷlink3ID*/ + UINT8 chPsdControlType; /*ſ*/ } PsdConfigDataStruct; @@ -411,6 +415,13 @@ UINT16 GetPsdVideoQkLight2RelayId(const UINT16 wDoorId); */ UINT8 CheckPsdBelSendRange(const UINT16 wCheckPsdId); +/* +* ȡָIDſ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 ͣ0x55 OC-P 0xAA RCIƣ +*/ +UINT8 GetPsdControlType(const UINT16 doorId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c index b15470a..8fa6cb6 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c @@ -1443,14 +1443,14 @@ UINT8 SetPsdCmdCyclePsc(const UINT16 doorId, const UINT32 doorCycle) } /* -* ָIDȷPSC־ +* ָID·־ * ˵ const UINT16 doorId, ID * const UINT8 setFlag, ·״̬ * ֵ * */ -void SetPsdPscConfirmFlag(const UINT16 doorId,const UINT8 setFlag) +void SetPsdConfirmFlag(const UINT16 doorId,const UINT8 setFlag) { /*ʼ*/ UINT16 bufIndex = 0u; @@ -1467,13 +1467,13 @@ void SetPsdPscConfirmFlag(const UINT16 doorId,const UINT8 setFlag) } /* -* ȡָIDȷPSC·־ +* ȡָID·־ * ˵ const UINT16 doorId, ID * * ֵ 0: ȡʧ * >0: ȡɹ */ -UINT8 GetPsdPscPlFlag(const UINT16 doorId) +UINT8 GetPsdPlFlag(const UINT16 doorId) { /*ʼ*/ UINT16 bufIndex = 0u; /*±*/ @@ -1532,7 +1532,7 @@ void SetNearCiPscPlFlag(const UINT16 psdId,const UINT16 pscId,const UINT8 setFla if(psdCiId == localCiId) { /*PSCӦPSD·*/ - SetPsdPscConfirmFlag(psdId, setFlag); + SetPsdConfirmFlag(psdId, setFlag); } } else @@ -1544,12 +1544,12 @@ void SetNearCiPscPlFlag(const UINT16 psdId,const UINT16 pscId,const UINT8 setFla else { /*ȡPSD·־*/ - pscPlFlag = GetPsdPscPlFlag(psdId); + pscPlFlag = GetPsdPlFlag(psdId); if(psdCiId == localCiId) { if(CI_PSC_PL_CONFIRM_YES == pscPlFlag) { - SetPsdPscConfirmFlag(psdId, CI_PSC_PL_CONFIRM_NO); + SetPsdConfirmFlag(psdId, CI_PSC_PL_CONFIRM_NO); } else { @@ -2509,4 +2509,350 @@ UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId) retVal = CI_ERROR; } return retVal; +} + +/* +* ָID쳣״̬ +* ˵const UINT16 wPsdId ID +* const UINT8 cExceptOpenState 쳣״̬ +* ֵ +* Created By LQ 2025.05.22 +*/ +void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState) +{ + UINT16 bufIndex = 0U; + + bufIndex = GetPsdConfigBufIndex(wPsdId); /*ȡ±*/ + + if ((PSD_SUM_MAX > bufIndex) && ((PSD_EXCEPT_OPEN_YES == cExceptOpenState) || (PSD_EXCEPT_OPEN_NO == cExceptOpenState))) + { + PsdDataStru[bufIndex].cPsdExceptOpenState = cExceptOpenState; /*쳣״̬*/ + } + else + { + ; /**/ + } +} + +/* +* ȡָID쳣״̬ +* ˵const UINT16 wPsdId ID +* ֵ0x55 쳣 +* 0xAA δ쳣 +* Created By LQ 2025.05.22 +*/ +UINT8 GePsdExceptOpenState(const UINT16 wPsdId) +{ + UINT16 bufIndex = 0U; + UINT8 cRetVal = PSD_EXCEPT_OPEN_YES; + + bufIndex = GetPsdConfigBufIndex(wPsdId); /*ȡ±*/ + + if (PSD_SUM_MAX > bufIndex) + { + cRetVal = PsdDataStru[bufIndex].cPsdExceptOpenState; + } + else + { + /*쳣*/ + } + + return cRetVal; +} + +/* +* ָIDŹϸϢ +* ˵ const UINT16 doorId, ID +* const UINT32 faultQStateOne, ϸϢֽ +* * const UINT32 faultQStateTwo, ϸϢֽ +* ֵ +*/ +void SetPsdFaultQState(const UINT16 doorId, const UINT32 faultQStateOne, const UINT32 faultQStateTwo) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + PsdDataStru[bufIndex].psdFaultQStataOne = faultQStateOne; + PsdDataStru[bufIndex].psdFaultQStataTwo = faultQStateTwo; + } + else + { + /**/ + } +} + +/* +* ȡָIDŹϸϢ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: ŹϸϢ +*/ +UINT32 GetPsdFaultQState(const UINT16 doorId, UINT8 psdFlag) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 retVal = UINT32_MAX; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if ((PSD_SUM_MAX > bufIndex) && (HIGH_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdFaultQStataOne;/*ֽ*/ + } + else if ((PSD_SUM_MAX > bufIndex) && (LOW_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdFaultQStataTwo;/*ֽ*/ + } + else + { + retVal = UINT32_MAX; + } + return retVal; +} + +/* +* ָIDűϢ +* ˵ const UINT16 doorId, ID +* const UINT32 doorsIStateOne, Ϣֽ +* * const UINT32 doorsIStateTwo, Ϣֽ +* ֵ +*/ +void SetPsdDoorIState(const UINT16 doorId, const UINT32 doorsIStateOne, const UINT32 doorsIStateTwo) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + PsdDataStru[bufIndex].psdDoorIStateOne = doorsIStateOne; + PsdDataStru[bufIndex].psdDoorIStateTwo = doorsIStateTwo; + } + else + { + /**/ + } + +} + +/* +* ȡָIDűϢ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: űϢ +*/ +UINT32 GetPsdDoorIState(const UINT16 doorId, UINT8 psdFlag) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 retVal = UINT32_MAX; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if ((PSD_SUM_MAX > bufIndex) && (HIGH_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdDoorIStateOne;/*ֽ*/ + } + else if ((PSD_SUM_MAX > bufIndex) && (LOW_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdDoorIStateTwo;/*ֽ*/ + } + else + { + retVal = UINT32_MAX; + } + return retVal; +} + +/* +* ָIDţſ״̬ +* ˵ const UINT16 doorId, ID +* const UINT32 doorStateOne, ſ״ֽ̬ +* * const UINT32 doorStateTwo, ſ״ֽ̬ +* ֵ +*/ +void SetPsdDoorState(const UINT16 doorId, const UINT32 doorStateOne, const UINT32 doorStateTwo) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + PsdDataStru[bufIndex].psdDoorsStateOne = doorStateOne; + PsdDataStru[bufIndex].psdDoorsStateTwo = doorStateTwo; + } + else + { + /**/ + } + +} + +/* +* ȡָID,ſ״̬ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: ŵſ״̬ +*/ +UINT32 GetPsdDoorState(const UINT16 doorId, UINT8 psdFlag) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 retVal = UINT32_MAX; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if ((PSD_SUM_MAX > bufIndex) && (HIGH_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdDoorsStateOne;/*ֽ*/ + } + else if ((PSD_SUM_MAX > bufIndex) && (LOW_FOUR_CHAR == psdFlag)) + { + retVal = PsdDataStru[bufIndex].psdDoorsStateTwo;/*ֽ*/ + } + else + { + retVal = UINT32_MAX; + } + return retVal; +} + + +/* +* ָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* const UINT8 openErrState,Ź״̬ +* ֵ +*/ +void SetOpenErrState(const UINT16 doorId, const UINT8 openErrState) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + if ((PSD_OPEN_CLOSE_NORMAL == openErrState) || (PSD_OPEN_CLOSE_ERROR == openErrState)) + { + PsdDataStru[bufIndex].psdOpenErrState = openErrState; + } + else + {/**/ + } + } +} + +/* +* ָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* const UINT8 closeErrState,Ź״̬ +* ֵ +*/ +void SetCloseErrState(const UINT16 doorId, const UINT8 closeErrState) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + if ((PSD_OPEN_CLOSE_NORMAL == closeErrState) || (PSD_OPEN_CLOSE_ERROR == closeErrState)) + { + PsdDataStru[bufIndex].psdCloseErrState = closeErrState; + } + else + {/**/ + } + } +} + +/* +* ȡָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 Ź״̬ +*/ +UINT8 GetOpenErrState(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = PSD_OPEN_CLOSE_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdDataStru[bufIndex].psdOpenErrState; + } + else + {/**/ + } + + return retVal; +} + +/* +* ȡָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 Ź״̬ +*/ +UINT8 GetCloseErrState(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = PSD_OPEN_CLOSE_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdDataStru[bufIndex].psdCloseErrState; + } + else + {/**/ + } + + return retVal; +} + +/* +* ȡָIDŹؼ̵ʼں +* ˵const UINT16 doorId ID +* ֵſ̵ʼں +* Created By LQ 2025.06.26 +*/ +UINT32 GetPsdRelayDownCycNum(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStru[bufIndex].dwPsdRelayDownCycNum; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָIDŹؼ̵ʼں +* ˵const UINT16 doorId ID +* const UINT32 startCycNum ʼں +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetPsdRelayDownCycNum(const UINT16 doorId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + PsdDataStru[bufIndex].dwPsdRelayDownCycNum = startCycNum; + } + else + { + /**/ + } } \ 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 8012e33..e7c5e0d 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.h @@ -81,6 +81,16 @@ typedef struct S_PsdDataStruct UINT8 chCleFarePDBFlaLigFlag; /*ȷPDBťָʾƱ־*//*by cgh 20230529*/ UINT8 chVideoQkDriveState; /*Ƶ״̬ by cgh 20231214*/ UINT16 wVideoQkRelateVobcId; /*ƵͶӦгID by cgh 20231214*/ + UINT32 psdFaultQStataOne; /*ŹϸϢǰĸֽ*/ + UINT32 psdFaultQStataTwo; /*ŹϸϢĸֽ*/ + UINT32 psdDoorIStateOne; /*űϢǰֽ*/ + UINT32 psdDoorIStateTwo; /*űϢֽ*/ + UINT32 psdDoorsStateOne; /*ÿŵĿ״̬ǰĸֽ*/ + UINT32 psdDoorsStateTwo; /*ÿŵĿ״̬ĸֽ*/ + UINT8 psdOpenErrState; /*Ź״̬*/ + UINT8 psdCloseErrState; /*Ź״̬*/ + UINT8 cPsdExceptOpenState; /*쳣״̬0x55-쳣򿪣0xAA-δ쳣*/ + UINT32 dwPsdRelayDownCycNum; /*PSDŹؼ̵ʼ*/ } PsdDataStruct; extern PsdDataStruct PsdDataStru[PSD_SUM_MAX]; /*ݽṹ*/ @@ -518,23 +528,23 @@ UINT32 GetPsdCmdCyclePsc(const UINT16 doorId); UINT8 SetPsdCmdCyclePsc(const UINT16 doorId, const UINT32 doorCycle); /* -* ָIDȷPSC־ +* ָID·־ * ˵ const UINT16 doorId, ID * const UINT8 setFlag, ·״̬ * ֵ * */ -void SetPsdPscConfirmFlag(const UINT16 doorId,const UINT8 setFlag); +void SetPsdConfirmFlag(const UINT16 doorId,const UINT8 setFlag); /* -* ȡָIDȷPSC·־ +* ȡָID·־ * ˵ const UINT16 doorId, ID * * ֵ 0: ȡʧ * >0: ȡɹ */ -UINT8 GetPsdPscPlFlag(const UINT16 doorId); +UINT8 GetPsdPlFlag(const UINT16 doorId); /* * PSCͬʱһͨʱPSC· @@ -872,6 +882,126 @@ void SetPsdVideoQkRelateVobcId(const UINT16 wPsdId, const UINT16 wVobcId); */ UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId); +/* +* ָID쳣״̬ +* ˵const UINT16 wPsdId ID +* const UINT8 cExceptOpenState 쳣״̬ +* ֵ +* Created By LQ 2025.05.22 +*/ +void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState); + +/* +* ȡָID쳣״̬ +* ˵const UINT16 wPsdId ID +* ֵ0x55 쳣 +* 0xAA δ쳣 +* Created By LQ 2025.05.22 +*/ +UINT8 GePsdExceptOpenState(const UINT16 wPsdId); + +/* +* ָIDŹϸϢ +* ˵ const UINT16 doorId, ID +* const UINT32 faultQStateOne, ϸϢֽ +* * const UINT32 faultQStateTwo, ϸϢֽ +* ֵ +*/ +void SetPsdFaultQState(const UINT16 doorId, const UINT32 faultQStateOne, const UINT32 faultQStateTwo); + +/* +* ȡָIDŹϸϢ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: ŹϸϢ +*/ +UINT32 GetPsdFaultQState(const UINT16 doorId, UINT8 psdFlag); + +/* +* ָIDűϢ +* ˵ const UINT16 doorId, ID +* const UINT32 doorsIStateOne, Ϣֽ +* * const UINT32 doorsIStateTwo, Ϣֽ +* ֵ +*/ +void SetPsdDoorIState(const UINT16 doorId, const UINT32 doorsIStateOne, const UINT32 doorsIStateTwo); + +/* +* ȡָIDűϢ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: űϢ +*/ +UINT32 GetPsdDoorIState(const UINT16 doorId, UINT8 psdFlag); + +/* +* ָIDţſ״̬ +* ˵ const UINT16 doorId, ID +* const UINT32 doorStateOne, ſ״ֽ̬ +* * const UINT32 doorStateTwo, ſ״ֽ̬ +* ֵ +*/ +void SetPsdDoorState(const UINT16 doorId, const UINT32 doorStateOne, const UINT32 doorStateTwo); + +/* +* ȡָID,ſ״̬ +* ˵ const UINT16 doorId, ID +* UINT8 psdFlag,ǰĸֽڻǺĸֽ(0uΪĸֽڣ1uΪĸֽ) +* ֵ 0: ȡʧ +* >0: ŵſ״̬ +*/ +UINT32 GetPsdDoorState(const UINT16 doorId, UINT8 psdFlag); + + +/* +* ָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* const UINT8 openErrState,Ź״̬ +* ֵ +*/ +void SetOpenErrState(const UINT16 doorId, const UINT8 openErrState); + +/* +* ָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* const UINT8 closeErrState,Ź״̬ +* ֵ +*/ +void SetCloseErrState(const UINT16 doorId, const UINT8 closeErrState); + +/* +* ȡָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 Ź״̬ +*/ +UINT8 GetOpenErrState(const UINT16 doorId); + +/* +* ȡָIDŹ״̬ +* ˵ const UINT16 doorId, ID +* ֵ UINT8 Ź״̬ +*/ +UINT8 GetCloseErrState(const UINT16 doorId); + +/* +* ȡָIDŹؼ̵ʼں +* ˵const UINT16 doorId ID +* ֵſ̵ʼں +* Created By LQ 2025.06.26 +*/ +UINT32 GetPsdRelayDownCycNum(const UINT16 doorId); + +/* +* ָIDŹؼ̵ʼں +* ˵const UINT16 doorId ID +* const UINT32 startCycNum ʼں +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetPsdRelayDownCycNum(const UINT16 doorId, const UINT32 startCycNum); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/PSD/PSDDefine.h b/TSCP/src/APP/ciapp/PSD/PSDDefine.h index 6ba3aaa..e4fa439 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDefine.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDefine.h @@ -67,6 +67,25 @@ #define PSD_FAULT_ISOLATION_SCX ((UINT8)0x81U) /*ԳùϸϢ18Ÿ*/ #define PSD_OPEN_STATE_SCX ((UINT32)0xFFFFFF7EU) /*Գ߹ϸʱŴ״̬18⣬ȫ*/ +/*Դ״̬*/ +#define PSD_DRIVE_POWER_NORMAL ((UINT8)0x55U) /*Դ״̬*/ +#define PSD_DRIVE_POWER_ERROR ((UINT8)0xAAU) /*Դ״̬*/ + +/*ſƵԴ״̬*/ +#define PSD_CONTROL_POWER_NORMAL ((UINT8)0x55U) /*ƵԴ״̬*/ +#define PSD_CONTROL_POWER_ERROR ((UINT8)0xAAU) /*ƵԴ״̬*/ + +/*űԵ״̬*/ +#define PSD_EDGE_CONTROLLER_NORMAL ((UINT8)0x55U) /*Ե״̬*/ +#define PSD_EDGE_CONTROLLER_ERROR ((UINT8)0xAAU) /*Ե״̬*/ + +/*ϰﱨ״̬*/ +#define PSD_ALARM_OBS_NO ((UINT8)0xAAU) /*޹*/ +#define PSD_ALARM_OBS_YES ((UINT8)0x55U) /*й*/ + +/*ſŹ״̬*/ +#define PSD_OPEN_CLOSE_NORMAL ((UINT8)0x55U) /*Ź״̬Ϊ*/ +#define PSD_OPEN_CLOSE_ERROR ((UINT8)0xAAU) /*Ź״̬Ϊ*/ /*෿FAOϢ*/ #define PSD_FOUR_EDIT_GROUP_FAO_YF ((UINT8)0x01U) /*ı*/ @@ -87,6 +106,10 @@ #define PSD_VIRTUAL_ATTR_YES ((UINT8)0x55U) /**/ #define PSD_VIRTUAL_ATTR_NO ((UINT8)0xaaU) /**/ +/*ſ*/ +#define PSD_CONTROL_TYPE_OC_P ((UINT8)0x55u) /*OC-P*/ +#define PSD_CONTROL_TYPE_RCI ((UINT8)0xAAu) /*RCI*/ + /*ϰϢ*/ #define PSD_REMORA_YES ((UINT8)0xAAU) /*ϰ*/ #define PSD_REMORA_NO ((UINT8)0x55U) /*Ѽϰ*/ @@ -172,4 +195,16 @@ #define VIDEO_QK_DRIVE_STATE_TESTING ((UINT8)0xccU) /*Ƶ״̬*/ #define VIDEO_QK_DRIVE_STATE_INVALID ((UINT8)0xffU) /*Ƶ״̬Ч*/ +/*쳣״̬*/ +#define PSD_EXCEPT_OPEN_NO ((UINT8)0xAAU) /*δ쳣*/ +#define PSD_EXCEPT_OPEN_YES ((UINT8)0x55U) /*쳣*/ + +/*OC-P·״̬ȷ*/ +#define OC_PSC_PL_CONFIRM_YES ((UINT8)0xaaU) /*OC-P·״̬ȷ*/ +#define OC_PSC_PL_CONFIRM_NO ((UINT8)0x55U) /*OC-P·״̬δȷ*/ + +/*ȡϢ*/ +#define HIGH_FOUR_CHAR ((UINT8)0U) /*ֽ*/ +#define LOW_FOUR_CHAR ((UINT8)1U) /*ֽ*/ + #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h index fe2683b..ddc1d3b 100644 --- a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h +++ b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h @@ -147,7 +147,10 @@ #define ATS_CMD_OPEN_XIANSU_SIGNAL_SECOND ((UINT8)0x9e) /*źŶ*/ #define ATS_CMD_OPEN_XIANSU_SIGNAL_SPECIAL ((UINT8)0xa6) /*ź⿪*/ - +#define ATS_CMD_OC_P_PL_ONE ((UINT8)0xa8) /*OC-P·һ*/ +#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_GET_CTRL_POWER ((UINT8)0x81) /* ȡȨ*/ #define ATS_CMD_RELEASE_CTRL_POWER ((UINT8)0x82) /* ͷȨ*/ @@ -213,7 +216,7 @@ #define VOBCTOCI_COMMAND_TYPE_PSDCHECK ((UINT8)0x00) /*ѯPSD*/ #define VOBCTOCI_COMMAND_TYPE_PSDOPEN ((UINT8)0x55) /*PSD*/ #define VOBCTOCI_COMMAND_TYPE_PSDCLOSE ((UINT8)0xAA) /*رPSD*/ -#define VOBCTOCI_COMMAND_TYPE_PSDCHECK_FAOHLHT ((UINT8)0xFF) /*ѯPSD(»߲ѯ)*/ +#define VOBCTOCI_COMMAND_TYPE_PSDCHECK_FAOHLHT ((UINT8)0xFF) /*ѯPSD(»߲ѯ)PSDĬֵ*/ /****ATSϢ궨****/ /*Ϣ*/ @@ -245,6 +248,7 @@ #define CI_BACK_GROUP_AUTO_ROUTE_SET_ERR ((UINT8)0x7e) /*Զ·Զʧ*/ #define CI_BACK_AUTO_TRIGGER_SET_ERR (UINT8)0x85 /*·Զ־ʧ*/ +#define CI_BACK_LEAD_ROUTE_CANCEL ((UINT8)0xA4) /*·޷ʹȡ*/ /*źŻϷ*/ #define CI_BACK_SIG_START_OPEN ((UINT8)0x11) /*·ʼźŻ*/ @@ -298,7 +302,8 @@ #define CI_BACK_SWT_POS_ERROR ((UINT8)0x37) /*λô*/ #define CI_BACK_SWT_MOVE_VALID ((UINT8)0x00) /*ɶ*/ #define CI_BACK_SWT_MOVE_OT ((UINT8)0x39) /*ʱ*/ -#define CI_BACK_SWT_BYPASS_CANCEL_NO ((UINT8)0x93) /*ߵ·δʱȡ*/ +#define CI_BACK_SWT_BYPASS_CANCEL_NO ((UINT8)0x93) /*ߵ·δʱȡ*/ +#define CI_BACK_SWT_MOVE ((UINT8)0xA3) /*ת*/ /* zt ɾش 2022-02-15 */ #define CI_BACK_SWT_USING ((UINT8)0x3f) /**/ #define CI_BACK_SWT_MOVE_ERR ((UINT8)0x84) /*ᶯʧ*/ @@ -404,8 +409,16 @@ #define CI_BACK_SEC_UPDATA_ERROR ((UINT8)0x00) /* θʧ */ #define CI_BACK_SWT_UPDATA_ERROR ((UINT8)0x00) /* ʧ */ - - +/*̬·*/ +#define CI_BACK_DYM_ROUTE_CONTINUOUS ((UINT8)0xA5) /*̬·㣺߼β*/ +#define CI_BACK_DYM_ROUTE_RES ((UINT8)0xA6) /*̬·㣺гռѹ߼ԴȫΨһ*/ +#define CI_BACK_DYM_ROUTE_MATCH_ROUTE ((UINT8)0xA7) /*̬·㣺߼δƥ䵽·*/ +#define CI_BACK_DYM_ROUTE_SCREEN ((UINT8)0xA8) /*̬·㣺гδɸѡ*/ +#define CI_BACK_DYM_ROUTE_SEC_CBTC ((UINT8)0xA9) /*̬·㣺߼ηCBTC*/ +#define CI_BACK_DYM_ROUTE_REPEAT ((UINT8)0xAA) /*̬·㣺ظ*/ +#define CI_BACK_DYM_ROUTE_SEC_ATTR ((UINT8)0xAB) /*̬·㣺ν֧߻ѹһεĶ̬·*/ +#define CI_BACK_DYM_ROUTE_TRAIN_COMM ((UINT8)0xAC) /*̬·㣺RCгͨж*/ +#define CI_BACK_DYM_ROUTE_TRAIN_POS ((UINT8)0xAD) /*̬·㣺гȫ߻ѹ*/ #define CI_BACK_DATA_INFO_TYPE_ERR ((UINT8)0xf1) /* CIϵͳݽӿϢʹ */ #define CI_BACK_DATA_SEND_FLAG_ERR ((UINT8)0xf2) /* CIϵͳݷͷʶϢ */ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c index 5e63b4d..d597b62 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c @@ -122,6 +122,41 @@ static UINT8 TransCiToAtsPSCState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 Psc */ static UINT8 TransCiToAtsPSCtypeState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PscStatetype, UINT8 PscState, UINT8 BitValY, UINT8 BitValN); +/* +* תCiATSPSD Դ״̬Ϣ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdԴ״̬Ϣ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsDrvWorkState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState); + +/* +* תCiATSPSD ƵԴ״̬Ϣ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdƵԴ״̬Ϣ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsCtlWorkState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState); + +/* +* תCiATSPSD Ե״̬ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdԵ״̬ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsPSDEdgeState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState); /* * ֡ @@ -925,6 +960,13 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c } } + /*OC-PSCһ廯*/ + PackOcPscDataToAts(ciToXianDiDataBuffer, &ii); + + /*PSD*/ + PackPsdDataToAts(ciToXianDiDataBuffer, &ii); + + ocDeviceSum = (UINT16)GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸*/ pOcDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸ID*/ @@ -1037,6 +1079,7 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c { } +#if 0 /*PSC豸ŷPSDϢATS*/ if (NULL == pDeviceIdBuf) { @@ -1103,6 +1146,7 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c /*дPSD*/ ciToXianDiDataBuffer[ii - (psdSum * 28U) - 1U] = psdSum; } +#endif /*RCOCI豸״̬ Դ/Դģ״̬2ֽ*/ @@ -1149,6 +1193,9 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c /**/ } + /*ͨϢ*/ + PackCiDataToAts(ciToXianDiDataBuffer, &ii); + /*Ԥ40ֽ*/ ii += 40u; } @@ -1367,6 +1414,8 @@ void SetCiSendCmdBackData_OrderBack( const UINT32 commandId,const UINT16 deviceI } } } + /*ݴһ󣬽ЧΪЧ YF0083-Bug-148*/ + ClearCiSendBackDataTempStruData(); if (CiSendCmdStruCurSum < CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX) { @@ -1702,7 +1751,7 @@ UINT8 GetPscConfirmFlag(UINT8 pscId) if(psdCiId == localCiId) { /*ȡPSCӦPSDĻȷϱ־*/ - pscPsdFlag = GetPsdPscPlFlag(pscToCiDataStru[pscId].psdDataStr[i].psdId); + pscPsdFlag = GetPsdPlFlag(pscToCiDataStru[pscId].psdDataStr[i].psdId); if(CI_PSC_PL_CONFIRM_YES == pscPsdFlag) { retVal = CI_PSC_PL_CONFIRM_YES; @@ -1847,6 +1896,12 @@ UINT8 FindFirstOrder(UINT8 SecondOrder) case ATS_CMD_SWITCH_FANWEI_TEST_TWO: reVal = ATS_CMD_SWITCH_FANWEI_TEST_ONE; /*λһ*/ break; + case ATS_CMD_OC_P_PL_TWO: + reVal = ATS_CMD_OC_P_PL_ONE; /*OC-P·һ*/ + break; + case ATS_CMD_QUXIAO_OC_P_PL_TWO: + reVal = ATS_CMD_QUXIAO_OC_P_PL_ONE; /*ȡOC-P·һ*/ + break; default: reVal = 0u; break; @@ -2542,6 +2597,7 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U UINT8 jj = 0U;/*Ӧת޻*/ UINT8 mm = 0U;/*״̬ĿʱжǷ쳣ѭ*/ UINT8 chSwitchDriveFlag = 0U;/*־*/ + UINT8 chSingleSwitchCurPosition = 0u;/*ǰλ*/ if ((NULL != ciSendAtsSwitchZzjData) && (NULL != wDataLength)) @@ -2611,18 +2667,26 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U } else { - chSwitchDriveFlag = GetSwitchDrivedFlag(m_OcToCiOrginDataArr[kk].OcDevices[ii].DeviceId); - if (SWITCH_DRIVED_FLAG_YES == chSwitchDriveFlag) + chSingleSwitchCurPosition = GetSingleSwitchCurPosition(m_OcToCiOrginDataArr[kk].OcDevices[ii].DeviceId); + if (SWITCH_POSITION_JICHA == chSingleSwitchCurPosition) { - /*ȡת޻״̬Ϊ*/ - ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_NORMAL; + /*ǰת޻жΪ*/ + ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_ALARM; } else { - /*ûĿת޻״̬Ϊ*/ - ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_ALARM; + chSwitchDriveFlag = GetSwitchDrivedFlag(m_OcToCiOrginDataArr[kk].OcDevices[ii].DeviceId); + if (SWITCH_DRIVED_FLAG_YES == chSwitchDriveFlag) + { + /*ȡת޻״̬Ϊ*/ + ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_NORMAL; + } + else + { + /*ûĿת޻״̬Ϊ*/ + ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_ALARM; + } } - } } } @@ -2670,4 +2734,362 @@ static UINT8 TransCiToAtsPowerModeState(UINT8 ciToXianDiData, UINT8 MoveNum, UIN } return TransCiSendData; +} + +/* +* תCiATSPSD Դ״̬Ϣ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdԴ״̬Ϣ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsDrvWorkState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState) +{ + UINT8 TransCiSendData = 0u; + + if (PSD_DRIVE_POWER_NORMAL == PsdState) + {/*PSD Դ״̬*/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000011B << MoveNum)); + } + else if (PSD_DRIVE_POWER_ERROR == PsdState) + {/**/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + else + { + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + + return TransCiSendData; +} + +/* +* תCiATSPSD ƵԴ״̬Ϣ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdƵԴ״̬Ϣ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsCtlWorkState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState) +{ + UINT8 TransCiSendData = 0u; + + if (PSD_CONTROL_POWER_NORMAL == PsdState) + {/*PSD ƵԴ״̬*/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000011B << MoveNum)); + } + else if (PSD_CONTROL_POWER_ERROR == PsdState) + {/**/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + else + { + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + + return TransCiSendData; +} + +/* +* תCiATSPSD Ե״̬ +* ˵ +* UINT8 ciToXianDiData, CIֵϢ +* UINT8 MoveNum λ +* UINT8 PsdState psdԵ״̬ +* +* +* ֵ ת +*/ +static UINT8 TransCiToAtsPSDEdgeState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 PsdState) +{ + UINT8 TransCiSendData = 0u; + + if (PSD_EDGE_CONTROLLER_NORMAL == PsdState) + {/*PSD Ե*/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000001B << MoveNum)); + } + else if (PSD_EDGE_CONTROLLER_ERROR == PsdState) + {/*Ե*/ + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + else + { + TransCiSendData = ciToXianDiData | ((UINT8)(BIT_VAL_00000000B << MoveNum)); + } + + return TransCiSendData; +} + + +/* +* OC-PϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackOcPscDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 ocPscNum = 0u; + UINT16 ocId = 0u; /*psd id*/ + UINT8 ocPscConfirmFlag = 0u; + UINT16 jj = 0u; /*α*/ + UINT16 index = 0u; + UINT16 temp_index = 0u; + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + index = *ii; + + /*OCһ,Ȳ飬psdNum*/ + temp_index = index; + index += 2u; + + for (jj = 0u; jj < m_OcToCiOrginDataNum; jj++) + { + if (0u < m_OcToCiOrginDataArr[jj].OCPsdNum) + {/*PSD*/ + ocPscNum++; + + ShortToChar(m_OcToCiOrginDataArr[jj].OcId, &ciToXianDiDataBuffer[index]); + index += 2u; + + /*OC-PԴ״̬*/ + ciToXianDiDataBuffer[index] = TransCiToAtsDrvWorkState(ciToXianDiDataBuffer[index], 6u, m_OcToCiOrginDataArr[jj].DrvPowerState); + /*OC-PƵԴ״̬*/ + ciToXianDiDataBuffer[index] = TransCiToAtsCtlWorkState(ciToXianDiDataBuffer[index], 4u, m_OcToCiOrginDataArr[jj].CtlPowerState); + /*Ե1״̬*/ + ciToXianDiDataBuffer[index] = TransCiToAtsPSDEdgeState(ciToXianDiDataBuffer[index], 2u, m_OcToCiOrginDataArr[jj].EdgeCtllerState1); + /*Ե2״̬*/ + ciToXianDiDataBuffer[index] = TransCiToAtsPSDEdgeState(ciToXianDiDataBuffer[index], 0u, m_OcToCiOrginDataArr[jj].EdgeCtllerState2); + index++; + + ocPscConfirmFlag = GetOcPscConfirmFlag(jj); + + /*·״̬ת*/ + ciToXianDiDataBuffer[index] = TransCiToAtsPSCtypeState(ciToXianDiDataBuffer[index], 0u, ocPscConfirmFlag, + OC_PSC_PL_CONFIRM_YES, BIT_VAL_00000000B, BIT_VAL_00000001B); + + index++; + } + else + { + /**/ + } + } + + /*OC-P*/ + ShortToChar(ocPscNum, &ciToXianDiDataBuffer[temp_index]); + *ii = index; + } + else + {/**/ + } + +} + + +/* +* PSDϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackPsdDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT8 psdDeviceSum = 0u;/*PSD豸*/ + UINT16 jj = 0u; /*α*/ + UINT16 psdId = 0u;/*psd id*/ + UINT16 index = 0u; + UINT16 index_psd = 0u;/*ڼ¼PSDƫ*/ + UINT32 tempPack = 0u; + UINT8 psdConType = PSD_CONTROL_TYPE_RCI; + UINT8 OcPsdSum = 0u; /*OC-PPSD*/ + + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + index = *ii; + + psdDeviceSum = GetPsdSum();/*PSD*/ + + index_psd = index; + ciToXianDiDataBuffer[index] = 0u; /*PSD0*/ + index += 1u; + + for (jj = 0u; jj < psdDeviceSum; jj++) /*еPSD*/ + { + psdId = GetPsdId(jj);/*PSD id*/ + psdConType = GetPsdControlType(psdId); + + if ((0u != psdId) && (PSD_CONTROL_TYPE_OC_P == psdConType)) + { + OcPsdSum++; + + ShortToChar(0u, &ciToXianDiDataBuffer[index]); /*psd id*/ + index += 2u; + ShortToChar(psdId, &ciToXianDiDataBuffer[index]); + index += 2u; + + tempPack = GetPsdFaultQState(psdId, HIGH_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*Ϣ*/ + index += 4u; + tempPack = GetPsdFaultQState(psdId, LOW_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*Ϣ*/ + index += 4u; + + tempPack = GetPsdDoorIState(psdId, HIGH_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*Ϣ*/ + index += 4u; + tempPack = GetPsdDoorIState(psdId, LOW_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*Ϣ*/ + index += 4u; + + tempPack = GetPsdDoorState(psdId, HIGH_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*ÿŵĿ״̬*/ + index += 4u; + tempPack = GetPsdDoorState(psdId, LOW_FOUR_CHAR); + LongToChar(tempPack, &ciToXianDiDataBuffer[index]);/*ÿŵĿ״̬*/ + index += 4u; + + tempPack = GetOpenErrState(psdId); + ciToXianDiDataBuffer[index++] = tempPack; /*Ź״̬*/ + + tempPack = GetCloseErrState(psdId); + ciToXianDiDataBuffer[index++] = tempPack; /*Ź״̬*/ + } + else + { + /**/ + } + } + debug_infor_printf("psd control type:%x\n", psdConType); + ciToXianDiDataBuffer[index_psd] = OcPsdSum; /*PSD*/ + + *ii = index; + } + else + {/**/ + } +} + +/* +* ȡȷOC-P·״̬ +* ˵ UINT8 index, OC-PϵͳӦ± +* +* ֵ 0x55 ·״̬ȷ +* 0xaa ·״̬δȷ +*/ +UINT8 GetOcPscConfirmFlag(UINT8 index) +{ + UINT8 retVal = OC_PSC_PL_CONFIRM_NO; + UINT8 i = 0u; + UINT8 ocPscPsdFlag = 0u; + + /**/ + if (OC_SUM_MAX > index) + { + for (i = 0u; i < m_OcToCiOrginDataArr[index].OCPsdNum; i++) + { + /*ȡOC-PӦPSD·״̬*/ + ocPscPsdFlag = GetPsdPlFlag(m_OcToCiOrginDataArr[index].PsdInfo[i].wPsdId); + if (OC_PSC_PL_CONFIRM_YES == ocPscPsdFlag) + { + retVal = OC_PSC_PL_CONFIRM_YES; + break; + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + return retVal; +} + +/* +* ͨϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 index = 0u; + UINT8 transCiSum = 0u; + UINT8* pCiDeviceIdBuf = NULL; /*OC豸ID*/ + UINT8 jj = 0u; + UINT8 ciAndCiCommState = 0u;/*ciciͨ״̬*/ + UINT8 ciToAtsTransState = 0u; + UINT8 ciId = 0u; + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + index = *ii; + + transCiSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); + pCiDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + + ciToXianDiDataBuffer[index++] = transCiSum;/*ͨŵ*/ + if (NULL != pCiDeviceIdBuf) + { + for (jj = 0u; jj < transCiSum; jj++) + { + ciId = pCiDeviceIdBuf[jj];/*CI ID*/ + ciAndCiCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI, (UINT8)jj);/*ͨ״̬*/ + + ciToXianDiDataBuffer[index++] = 0x00u; + ciToXianDiDataBuffer[index++] = ciId; /*ID*/ + + if (TRANSMIT_2OO2_STATE_GOOD == ciAndCiCommState) + {/*˫ͨ*/ + ciToAtsTransState = TRANSMIT_CI_STATE_GOOD; + } + else if (TRANSMIT_2OO2_STATE_LINK == ciAndCiCommState) + {/*ͨŹ*/ + ciToAtsTransState = TRANSMIT_CI_STATE_LINK; + } + else if (TRANSMIT_2OO2_STATE_BAD == ciAndCiCommState) + {/*˫ͨŹ*/ + ciToAtsTransState = TRANSMIT_CI_STATE_BAD; + } + else + { + ciToAtsTransState = TRANSMIT_CI_STATE_BAD; + } + + ciToXianDiDataBuffer[index++] = ciToAtsTransState; + + } + } + else + { + /**/ + } + + *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 f610676..d8b589c 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h @@ -366,6 +366,48 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U */ static UINT8 TransCiToAtsPowerModeState(UINT8 ciToXianDiData, UINT8 MoveNum, UINT8 powerState, UINT8 BitValY, UINT8 BitValN); +/* +* OC-PϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackOcPscDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii); + +/* +* PSDϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackPsdDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii); + +/* +* ȡȷOC-P·״̬ +* ˵ UINT8 index, OC-PϵͳӦ± +* +* ֵ 0x55 ·״̬ȷ +* 0xaa ·״̬δȷ +*/ +UINT8 GetOcPscConfirmFlag(UINT8 index); + +/* +* ͨϢATS +* ˵ +* UINT8* ciToXianDiDataBuffer Ϣbuffer +* UINT16* ii ƫ +* +* +* ֵ +*/ +void PackCiDataToAts(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 61adf37..d07fbdb 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c @@ -137,7 +137,6 @@ UINT8 InitAxleToCiDataStru(void) UINT8 belongAxleSysId = 0u; /*ID*/ UINT16 axlePhySecSum = 0u; /*ϵͳĿ*/ UINT8 pyhIsThisLine = 0u; - UINT8 cPrtclVerBtwCiAndAxle = 0U; /*ͼЭУ汾*/ ciId = GetSystemParaLocalCiId(); ciName = (CI_SYSTEM_TYPE_CI) * 256U + ciId; @@ -153,22 +152,13 @@ UINT8 InitAxleToCiDataStru(void) { axleId = deviceIdBuf[i]; axleName = (CI_SYSTEM_TYPE_AXIS) * 256u + axleId; - cPrtclVerBtwCiAndAxle = GetCiAndAxisPrtclCheckVer(); /*ȡЭУ汾*/ - if (20U <= cPrtclVerBtwCiAndAxle) - { - rtn = dquDevName2HlhtId(axleName, 0U, &axieEtcsId); /*ȡụͨID*/ - rtn &= dquDevName2HlhtId(ciName, 0U, &ciEtcsId); /*ȡCIͨID*/ - } - else - { - /*ʹ豸IDΪͨID*/ - rtn = GetRsspiAddr(axleName, ciName, &axieEtcsId, &ciEtcsId); - } + rtn = dquDevName2HlhtId(axleName, 0U, &axieEtcsId); /*ȡụͨID*/ + rtn &= dquDevName2HlhtId(ciName, 0U, &ciEtcsId); /*ȡCIͨID*/ if (CI_SUCCESS == rtn) /*GAL㻥ͨIDȡɹ*/ { - if(axleId>=AXIS_TO_CI_SUM_MAX) + if (axleId >= AXIS_TO_CI_SUM_MAX) { break;/*룬ֹԽ*/ } @@ -184,7 +174,7 @@ UINT8 InitAxleToCiDataStru(void) belongCiId = GetPhySecBelongCiId(phySecId); belongAxleSysId = GetPhySecBelongAxisSysId(phySecId); pyhIsThisLine = GetPhyIsThisLineState(phySecId); /*Ƿ·*/ - if ((0U < phySecId) && (phySecId < PHYSICAL_SECTION_SUM_MAX) && (belongCiId == ciId) + if ((0U < phySecId) && (phySecId < PHYSICAL_SECTION_SUM_MAX) && (belongCiId == ciId) && (belongAxleSysId == axleId) && (DEV_IS_THIS_LINE_YES == pyhIsThisLine)) { axlePhySecSum = axisToCiDataStru[axleId].SectionSum; @@ -196,6 +186,9 @@ UINT8 InitAxleToCiDataStru(void) axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].faultInfo = 0u; axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].showAndReplyInfo = 0u; axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].PreResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].chPreResetBack = RELAY_STATE_UP; + axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].chDirectResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].chDirectResetBack = RELAY_STATE_UP; axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].State = RELAY_STATE_DOWN; axisToCiDataStru[axleId].PhySecIdx[phySecId] = (UINT8)(axlePhySecSum); @@ -255,7 +248,9 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons UINT32 galAxisDataVer = 0u; /*ϵͳݰ汾*/ UINT32 ciAndAxisTimeOutCout = 0u; /*ͨж*/ UINT32 ciCurappCycleTime = 0u; /*ǰ*/ - UINT16 axisDevName = 0u; /*ƣ+ID*/ + UINT16 axisDevName = 0U; /*ƣ+ID*/ + UINT16 wPhySecCurSum = 0U; /*Ŀ*/ + UINT16 wIndexInAxle = 0U; /*ε*/ deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸*/ deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸ID*/ @@ -273,6 +268,9 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons axisToCiDataStru[systemId].axisDataStr[jj].faultInfo = 0u; axisToCiDataStru[systemId].axisDataStr[jj].showAndReplyInfo = 0u; axisToCiDataStru[systemId].axisDataStr[jj].PreResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[systemId].axisDataStr[jj].chPreResetBack = RELAY_STATE_UP; + axisToCiDataStru[systemId].axisDataStr[jj].chDirectResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[systemId].axisDataStr[jj].chDirectResetBack = RELAY_STATE_UP; axisToCiDataStru[systemId].axisDataStr[jj].State = RELAY_STATE_DOWN; } @@ -450,6 +448,163 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons retVal = CI_ERROR; } } + else if (AXIS_TYPE_FUHAOSHENG == acFty) + { + phySecNum = dataBuf[ii++]; /*ȡ*/ + wPhySecCurSum = axisToCiDataStru[systemId].SectionSum; + + if ((AXIS_TO_CI_SECTION_SUM_MAX > phySecNum) && (wPhySecCurSum == phySecNum)) + { + /*豸״ֻ̬*/ + ii++; + for (jj = 0u; jj < phySecNum; jj++) + { + wIndexInAxle += 1U; + retVal = GetInAxlePhySecIdx(systemId, wIndexInAxle, &axisDataStrIdx); + + if (CI_SUCCESS == retVal) + { + if (0x02U == (dataBuf[ii] & 0x03U)) + { + /*10B:ο*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].gdRelayState = RELAY_STATE_UP; + } + else if((0x00U == (dataBuf[ii] & 0x03U)) || (0x01U == (dataBuf[ii] & 0x03U))) + { /*01B:ռ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].gdRelayState = RELAY_STATE_DOWN; + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"\nwIndexInAxle:%d OccState ERROR\n", wIndexInAxle); + + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 2U) & 0x01U)) + { + /**/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].State = RELAY_STATE_DOWN; + } + else + { + /*Ĭ״̬*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].State = RELAY_STATE_UP; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 3U) & 0x01U)) + { + /*δܵλ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chDirectResetBack = RELAY_STATE_DOWN; + } + else + { + /*ܵλ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chDirectResetBack = RELAY_STATE_UP; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 4U) & 0x01U)) + { + /*λɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chDirectResetRst = RELAY_STATE_UP; + } + else + { + /*λδִлִδɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chDirectResetRst = RELAY_STATE_DOWN; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 5U) & 0x01U)) + { + /*δܵԤλ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chPreResetBack = RELAY_STATE_DOWN; + } + else + { + /*ܵԤλ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chPreResetBack = RELAY_STATE_UP; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 6U) & 0x01U)) + { + /*Ԥλɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].PreResetRst = RELAY_STATE_UP; + } + else + { + /*Ԥλδִлִδɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].PreResetRst = RELAY_STATE_DOWN; + } + } + else + { + ; + } + + /*״̬*/ + ii++; + + if (CI_SUCCESS != retVal) + { + retVal = CI_ERROR; + break; /*ʧܣֹͣʧ*/ + } + else + { + /**/ + } + } + + if (CI_SUCCESS == retVal) + { + /*ļͷ*/ + ii++; + } + else + { + ; + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"\nAxis phySecNum:%d ERROR,RC wPhySecCurSum::%d\n", phySecNum, wPhySecCurSum); + } + } else { retVal = CI_ERROR; @@ -515,6 +670,9 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons axisToCiDataStru[systemId].axisDataStr[jj].faultInfo = 0u; axisToCiDataStru[systemId].axisDataStr[jj].showAndReplyInfo = 0u; axisToCiDataStru[systemId].axisDataStr[jj].PreResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[systemId].axisDataStr[jj].chPreResetBack = RELAY_STATE_UP; + axisToCiDataStru[systemId].axisDataStr[jj].chDirectResetRst = RELAY_STATE_DOWN; + axisToCiDataStru[systemId].axisDataStr[jj].chDirectResetBack = RELAY_STATE_UP; axisToCiDataStru[systemId].axisDataStr[jj].State = RELAY_STATE_DOWN; } @@ -592,6 +750,12 @@ UINT8 PackCiToAxisData(UINT8 axisSysId) UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; UINT16 axisDevName = 0u; /*ƣ+ID*/ + UINT8* pDataByteIndex = NULL; /*ݱλַ*/ + UINT8 chDataCurPos = 0U;/*ݵǰλ*/ + UINT8 chOffset = 0U;/*ƫ*/ + UINT8 chSecResetBackState = 0U;/*θλ״̬*/ + UINT16 wIndexInAxle = 0U; /*ε*/ + axisDevName = (CI_SYSTEM_TYPE_AXIS) * 256U + axisSysId; if (AXIS_TO_CI_SUM_MAX > axisSysId) { @@ -742,6 +906,154 @@ UINT8 PackCiToAxisData(UINT8 axisSysId) { } } + else if (AXIS_TYPE_FUHAOSHENG == acFty) + { + phyCount = axisToCiDataStru[axisSysId].SectionSum; + CiToAxisDataBuffer[ii] = (UINT8)(phyCount); + ii++; + + for (jj = 0U; jj < phyCount; jj++) + { + /*ȴֱӸλ*/ + /*ÿһֽڴ洢4θλ*/ + chDataCurPos = jj % SEC_NUM_PER_BYTE; + + if (0U == chDataCurPos) + { + pDataByteIndex = &CiToAxisDataBuffer[ii]; + ii++; + } + else + { + /*ûһֽڣȴ*/ + ; + } + + chOffset = chDataCurPos * BIT_NUM_PER_SEC; + + wIndexInAxle += 1U; + phySecId = GetPhyIdByIndexInAxle(axisSysId, wIndexInAxle); /*ID*/ + fwCycle = GetPhySecResetStartCycNum(phySecId); + + if (0U < fwCycle) + { + resetType = GetPhySecSectionResetType(phySecId); + if (PHYSICAL_SECTION_PRE_RESET_NO == resetType) + { + /*ֱӸλ*/ + chSecResetBackState = GetPhySecDirectResetBack(phySecId); + if (PHY_RESET_BACK_RECIVE_NO == chSecResetBackState) + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X02U << chOffset)); + } + else + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + } + else if (PHYSICAL_SECTION_PRE_RESET_YES == resetType) + { + /*Ԥλȴ*/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + else + { + retVal = CI_ERROR; + } + } + else + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + + if (CI_ERROR == retVal) + { + break; + } + else + { + ; /**/ + } + } + + if (CI_SUCCESS == retVal) + { + wIndexInAxle = 0U; + for (jj = 0U; jj < phyCount; jj++) + { + /*Ԥλ*/ + /*ÿһֽڴ洢4θλ*/ + chDataCurPos = jj % SEC_NUM_PER_BYTE; + + if (0U == chDataCurPos) + { + pDataByteIndex = &CiToAxisDataBuffer[ii]; + ii++; + } + else + { + /*ûһֽڣȴ*/ + ; + } + + chOffset = chDataCurPos * BIT_NUM_PER_SEC; + + wIndexInAxle += 1U; + phySecId = GetPhyIdByIndexInAxle(axisSysId, wIndexInAxle); /*ID*/ + fwCycle = GetPhySecResetStartCycNum(phySecId); + + if (0U < fwCycle) + { + resetType = GetPhySecSectionResetType(phySecId); + if (PHYSICAL_SECTION_PRE_RESET_NO == resetType) + { + /*ֱӸλȴ*/ + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + else if (PHYSICAL_SECTION_PRE_RESET_YES == resetType) + { + chSecResetBackState = GetPhySecPreResetBack(phySecId); + if (PHY_RESET_BACK_RECIVE_NO == chSecResetBackState) + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X02U << chOffset)); + } + else + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + } + else + { + retVal = CI_ERROR; + } + } + else + { + /**/ + *pDataByteIndex = *pDataByteIndex | ((UINT8)(0X00U << chOffset)); + } + + if (CI_ERROR == retVal) + { + break; + } + else + { + ; /**/ + } + } + } + else + { + ; /**/ + } + } else { retVal = CI_ERROR; @@ -951,6 +1263,45 @@ static UINT8 GetPhySecIdxInAxisDataStr(const UINT8 axleId, const UINT16 phySecId return rtn; } +/* +* ڼϵͳе± +* ˵ const UINT8 chAxleId, ϵͳID +* const UINT16 wIndexInAxle, ϵͳε +* UINT8* pAxleDataStrIdx, ϵͳID± +* ֵ CI_ERROR: ȡʧ +* CI_SUCCESS: ȡɹ +* by cgh 20250415 +*/ +UINT8 GetInAxlePhySecIdx(const UINT8 chAxleId, const UINT16 wIndexInAxle, UINT8* pAxleDataStrIdx) +{ + UINT8 ret = CI_ERROR; /*ֵ*/ + UINT16 wTempPhyId = 0U; /*ʱ¼ID*/ + if ((NULL != pAxleDataStrIdx) && (AXIS_TO_CI_SUM_MAX > chAxleId)) + { + wTempPhyId = GetPhyIdByIndexInAxle(chAxleId, wIndexInAxle); /*ȡϵͳŶӦID*/ + if ((0U < wTempPhyId) && (PHYSICAL_SECTION_SUM_MAX > wTempPhyId)) + { + *pAxleDataStrIdx = axisToCiDataStru[chAxleId].PhySecIdx[wTempPhyId];/*AxisDataStrID±*/ + } + else + { + *pAxleDataStrIdx = AXISDATASTR_IDX; + } + if (AXISDATASTR_IDX != (*pAxleDataStrIdx)) + { + ret = CI_SUCCESS; + } + else + { + /*error*/ + } + } + else + { + /*error*/ + } + return ret; +} \ 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 84f4624..f2b7401 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.h @@ -41,7 +41,8 @@ #include "../LogRecord/LogRecord.h" #endif - +#define SEC_NUM_PER_BYTE ((UINT8)4) /*ÿһֽڰĿ*/ +#define BIT_NUM_PER_SEC ((UINT8)(8 / SEC_NUM_PER_BYTE)) /*ÿһռλĿ*/ /*ͨŵϢ*/ typedef struct S_AxisDataStruct @@ -50,8 +51,10 @@ typedef struct S_AxisDataStruct UINT8 gdRelayState; /*ɵ̵״̬£0x550xaa*/ UINT8 showAndReplyInfo; /*bit0bit1㷴bit2bit3Ԥbit4bit7ʾϢֶ̬Σ*/ UINT8 faultInfo; /*Ϣbit0ιϡbit1忨ϡbit2ϵ硢bit3ͨŹϡbit4ϡbit5ͷϡbit6Ԥbit7ϵ(ֶ̬)*/ - UINT8 PreResetRst; /*Ԥλ*/ + UINT8 chPreResetBack; /*Ԥλ*/ + UINT8 chDirectResetRst; /*ֱӸλ*/ + UINT8 chDirectResetBack; /*ֱӸλ*/ UINT8 State; /*״̬*/ } AxisCollDataStruct; @@ -126,6 +129,17 @@ UINT8 PackCiToAxisData( UINT8 axisSysId); */ UINT8 InitAxleToCiDataStru(void); +/* +* ڼϵͳе± +* ˵ const UINT8 chAxleId, ϵͳID +* const UINT16 wIndexInAxle, ϵͳε +* UINT8* pAxleDataStrIdx, ϵͳID± +* ֵ CI_ERROR: ȡʧ +* CI_SUCCESS: ȡɹ +* by cgh 20250415 +*/ +UINT8 GetInAxlePhySecIdx(const UINT8 chAxleId, const UINT16 wIndexInAxle, UINT8* pAxleDataStrIdx); + #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c index 310dc67..2d30347 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c @@ -17,7 +17,7 @@ #include "../CutoffPoint/CutoffPointDataManage.h" #include "ELMDataPrepare.h" -#define CI_CI_DEFAULT_DEV_SUM_BUF_LEN 39U /*CI䲻Ҫ豸״̬ʱֻʱӦ豸ռĻλҪд0ÿ豸2ֽڣѩ1ֽڣ39ֽ*/ +#define CI_CI_DEFAULT_DEV_SUM_BUF_LEN 40U /*CI䲻Ҫ豸״̬ʱֻʱӦ豸ռĻλҪд0ÿ豸2ֽڣѩITEг1ֽڣ40ֽ*/ /*ʹ*/ ToCiCommandDataStruct RecvCiCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX] = {0u}; /*CIṹ*/ @@ -47,6 +47,10 @@ ToCiAreaSnowStruct szRecvCiAreaSnow[CI_COM_CI_MAX_NUM] = { 0U }; /* ToCiAreaSnowStruct szSendCiAreaSnow[CI_COM_CI_MAX_NUM] = { 0U }; /*͸ѩվ̨Ϣ*/ +ToCiAreaIteCutStruct szRecvCiAreaIteCut[CI_COM_CI_MAX_NUM] = { 0U }; /*ITEгϢ*/ + +ToCiAreaIteCutStruct szSendCiAreaIteCut[CI_COM_CI_MAX_NUM] = { 0U }; /*͸ITEгϢ*/ + #define CI_TO_CI_INTERFACE (0x0606) #define INTERFACE_INFO_TYPE_LEN (2U) /*ӿֽڳ*/ @@ -428,30 +432,6 @@ CI_SUCCESS, static UINT8 PackCityDefPacket(UINT8* pInputData, UINT16* pItemLen); -/* -: -Զݰ -: -const UINT8 *pInputData ָ -: -UINT16 *pItemLen еij -ֵ: -CI_SUCCESS,ɹ;CI_ERROR,ʧ. -*/ -static UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen); - -/* -: -Զݰ -: -UINT8 *pInputData ָ -: -UINT16 *pItemLen еij -ֵ: -CI_SUCCESS,ɹ;CI_ERROR,ʧ. -*/ -static UINT8 PackManufacDefPacket(UINT8* pInputData, UINT16* pItemLen); - /* : 컥ͨӦ @@ -590,8 +570,8 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT * 2Bm+ m * (12B) + * 2Bn+ n * (14B) + * 2B (߼p) + p * (4B) + - * 2B (źŻa) + a * (8B) + - * 2B (b) + b * (4B) + + * 2B (źŻa) + a * (11B) + + * 2B (b) + b * (5B) + * 2B (ESBc) + c * (3B) + * 2B (·d) + d * (8B) + * 2B (״̬e) + e * (10B) + @@ -608,14 +588,14 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT * = 10 + 2 + m*(7) * ߼ = 10 + 2 + m*(7) + 2 + n*(14) * źŻ = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) - * = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) - * ESB = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) - * · = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) - * ״̬ = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) + 2 + d*(8) - * spks = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) - * ̵ = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) - * = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) + 2 + g*(3) - * Զͨ· = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(8) + 2 + b*(2) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) + 2 + g*(3)+2+h*(6) + * = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + * ESB = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + * · = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + * ״̬ = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + 2 + d*(8) + * spks = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + * ̵ = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) + * = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) + 2 + g*(3) + * Զͨ· = 10 + 2 + m*(7) + 2 + n*(14) + 2 + p*(4) + 2 + a*(10) + 2 + b*(5) + 2 + c*(3) + 2 + d*(8) + 2 + e*(10) + 2 + f*(4) + 2 + g*(3)+2+h*(6) * Уվ * Уܳ @@ -677,6 +657,8 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT UINT8 cPLockRouteNum = 0U; UINT8 cPLockOverlapNum = 0U; UINT16 wProSwInfoLen = 0U; + UINT16 wAreaIteCutIndex = 0U; + UINT8 cAreaIteCutNum = 0U; /*ָ*/ if (NULL == errNo) @@ -1046,14 +1028,31 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT { cAreaSnowNum = dataBuf[wAreaSnowIndex]; wAreaSnowIndex++; /*ѩ*/ - wAreaSnowIndex += cAreaSnowNum * 4U; /*ѩվ̨ͨID*/ + wAreaSnowIndex += cAreaSnowNum * 3U; /*ID+ʪȼ*/ } } + /*УITEг*/ + if (CI_SUCCESS == reVal) + { + wAreaIteCutIndex = wAreaSnowIndex; + if (totalLength < wAreaIteCutIndex + 1U) + { + reVal = CI_ERROR; + *errNo = 27U; + } + else + { + cAreaIteCutNum = dataBuf[wAreaIteCutIndex]; + wAreaIteCutIndex++; /*ITEг*/ + wAreaIteCutIndex += cAreaIteCutNum * 2U; /*ID*/ + } + } + /*Уȥ߼γ*/ if (CI_SUCCESS == reVal) { - wLeaveLogIndex = wAreaSnowIndex; + wLeaveLogIndex = wAreaIteCutIndex; if (totalLength < wLeaveLogIndex + 2U) { reVal = CI_ERROR; @@ -1080,9 +1079,9 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT else { wNeedCheckSwStaRouteSum = ShortFromChar(&dataBuf[wNeedCheckSwStaRouteIndex]);/*ȥ*/ - wNeedCheckSwStaRouteIndex += 2U;/*ȥ*/ + wNeedCheckSwStaRouteIndex += 2U;/*·*/ - wNeedCheckSwStaRouteIndex += wNeedCheckSwStaRouteSum * 3U; /*ȥID*/ + wNeedCheckSwStaRouteIndex += wNeedCheckSwStaRouteSum * 8U; /*·*/ } } @@ -1146,8 +1145,8 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT 2u + (routeNum * CICI_ONE_ROUTE_LEN) + 2u + (physecLockStateNum * CICI_ONE_PHYSEC_LOCKSTATE_LEN) + 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 * 4U + - 2U + cLeaveLogNum * 3U + 2U + wNeedCheckSwStaRouteSum * 3U + 2U + wNeedCheckProSwStaOlpNum * 3U + 2U + wProSwInfoLen; + 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; if (stationLen == tmpStationLen) { reVal = CI_SUCCESS; @@ -1292,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; @@ -1300,7 +1299,7 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT16 routeId = 0u; /*CTUTռ״̬Ϊ(UT)ռ״̬*/ UINT8 curUtOrCtOccFlag = LOGICSECTION_OCCUPY_UT; /*ǰCTUTռñ־*/ - UINT8 utOrCtOccFlag = LOGICSECTION_OCCUPY_UT; + UINT8 chPreUtOrCtOccFlag = LOGICSECTION_OCCUPY_UT; UINT16 bufIndex = 0u; /*±*/ UINT32 sourceCurCycleNo = 0u;/*ǰϢԴں*/ @@ -1379,7 +1378,8 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*߼߼״̬*/ UINT8 cLogSecLogicLockDir = CI_SYSTEM_DIRECTION_NONE; /*߼߼շ*/ UINT8 cCiRecvAreaSnowNum = 0U; /*͵ѩ*/ - UINT32 dwPlatFormHlhtId = 0U; /*͵ѩվ̨ͨID*/ + UINT16 wAreaId = 0U; /*͵ID*/ + UINT8 cAreaSnowLevel = 0U; /*ʪ켶*/ UINT8 cCmdRecvFlag = 0U; ToCiCommandDataStruct strTempCiRecvCmd = { 0U }; ToCiDrCmdDataStruct strTempCiRecvDrCmd = { 0U }; @@ -1418,6 +1418,7 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT16 wProSwSecUseRouteId = 0U;/*·ID*/ UINT8 cPhySecOccState = 0U; UINT8 cLogLockBelLogRouteSum = 0U; + UINT8 cCiRecvAreaIteCutNum = 0U; /*͵ITEг*/ localCiId = GetSystemParaLocalCiId(); dwCurCycNum = Get2oo2CurCycleNum(); @@ -1792,13 +1793,20 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) phySecCurMergeState = GetPhySecCurMergeState(deviceId); if (SECTION_OCCUPY_YES == phySecCurMergeState) { - utOrCtOccFlag = GetPhySecPreOccState(deviceId); /*ȡ֮ǰCTUTռ״̬*/ + chPreUtOrCtOccFlag = GetPhySecPreOccState(deviceId); /*ȡ֮ǰCTUTռ״̬*/ dwSecUtOrCtOccuCyc = GetSecUtOrCtOccuStartCycNum(deviceId); - /*ʱУγռ״̬仯ҽѿʼʱ*/ - if ((utOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) - { - /*UTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); + /*ʱУγռ״̬仯ҽѿʼʱ֮ǰʱ*/ + if ((chPreUtOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) + { + if (LOGICSECTION_OCCUPY_NO != curUtOrCtOccFlag) + { + /*UTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); + } + else + { + /*߼ξУδںϿУݲ*/ + } } else if (LOGICSECTION_OCCUPY_UT == curUtOrCtOccFlag) { @@ -1916,6 +1924,11 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) SetSignalRelayDetainFlag(deviceId, dataBuf[ii++]); /*źŻά޵״̬*/ SetSignalMaintainState(deviceId, dataBuf[ii++]); + /*źŻӦ˿־*/ + SetNearCISignalCurDsFlag(deviceId, dataBuf[ii++]); + /*źŻ۳·ť״̬*/ + SetDetCutBtnState(deviceId, dataBuf[ii]); + ii++; } } } @@ -1941,6 +1954,10 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) (void)SetPsdState(deviceId, dataBuf[ii++]); /*ſ״̬״̬*/ (void)SetPsdMutualLockRemoveState(deviceId,dataBuf[ii++]); /*Ż״̬״̬*/ + + deviceInfo = dataBuf[ii]; /*PSD쳣״̬*/ + ii++; + SetPsdExceptOpenState(deviceId, deviceInfo); } } } @@ -2849,10 +2866,38 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) ClearCiRecvAreaSnowInfo((UINT8)sourceId); /*͸ѩϢ*/ for (kk = 0U; kk < cCiRecvAreaSnowNum; kk++) { - dwPlatFormHlhtId = LongFromChar(&dataBuf[ii]); /*վ̨ͨID*/ - ii += 4U; + wAreaId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + cAreaSnowLevel = dataBuf[ii]; /*ʪ켶*/ + ii++; - AddCiRecvAreaSnowInfo((UINT8)sourceId, localCiId, dwPlatFormHlhtId); /*洢DZѩվ̨ID*/ + AddCiRecvAreaSnowInfo((UINT8)sourceId, localCiId, wAreaId, cAreaSnowLevel); /*洢DZѩϢ*/ + } + } + else + { + reVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*ITEг*/ + if (CI_SUCCESS == reVal) + { + cCiRecvAreaIteCutNum = dataBuf[ii]; + ii++; + if (CI_TO_CI_AREA_SNOW_SUM_MAX >= cCiRecvAreaIteCutNum) + { + ClearCiRecvAreaIteCutInfo((UINT8)sourceId); /*͸ITEгϢ*/ + for (kk = 0U; kk < cCiRecvAreaIteCutNum; kk++) + { + wAreaId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + AddCiRecvAreaIteCutInfo((UINT8)sourceId, localCiId, wAreaId); /*洢DZID*/ } } else @@ -2897,30 +2942,36 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) ii += 2U; for (jj = 0u; jj < deviceSum; jj++) { - deviceId = ShortFromChar(&dataBuf[ii]); - belongCiId = GetRouteBelongCiId(deviceId); + routeId = ShortFromChar(&dataBuf[ii]); + belongCiId = GetRouteBelongCiId(routeId); if (belongCiId == localCiId) { ii += 2U; - chRouteState = GetRouteState(deviceId); - chRouteStateFlag = GetRouteStateFlag(deviceId); + chRouteState = GetRouteState(routeId); + chRouteStateFlag = GetRouteStateFlag(routeId); 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(deviceId, dataBuf[ii++]); + 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); } else { - ii++; + ii+=6U; } } else { - ii += 3U;/*ڱĽ·*/ + ii += 8U;/*ڱĽ·*/ } } } @@ -3835,6 +3886,12 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt UINT16 wSwPLockOverlapIndex = 0U; UINT8 cSwPLockOverlapNum = 0U; UINT8 cLogLockBelLogRouteSum = 0U; + UINT16 wCiSendAreaIteCutIndex = 0U; + ToCiAreaIteCutStruct* pCiSendAreaIteCut = NULL; + UINT8 cCiSendAreaIteCutNum = 0U; /*͸ITEг*/ + UINT8 devType = 0U; /*豸*/ + UINT8 devState = 0U; /*豸״̬*/ + UINT8 chErrorType = 0U;/*ʧ*/ localCi = GetSystemParaLocalCiId(); startLockFlag = GetStartLockFlag(); @@ -4020,7 +4077,6 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt belongCiId = GetSignalBelongCiId(deviceId); if (localCi == belongCiId) {/*ڱ*/ - ShortToChar(deviceId, &dataFrame[ii]);/*źŻID*/ ii += 2u; dataFrame[ii++] = GetSignalFLockState(deviceId);/*źŻ״̬*/ @@ -4030,6 +4086,10 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt dataFrame[ii++] = GetSignalSoftDetainFlag(deviceId);/*źŻ۳״̬*/ dataFrame[ii++] = GetSignalRelayDetainFlag(deviceId);/*źŻӲ߿۳״̬*/ dataFrame[ii++] = GetSignalMaintainState(deviceId);/*źŻά޵״̬*/ + dataFrame[ii++] = GetSignalCurBreakFlag(deviceId); /*źŻ˿״̬*/ + deviceState = GetDetCutBtnState(deviceId); /*źŻ۳·ť״̬*/ + dataFrame[ii] = deviceState; + ii++; deviceSum++; } else @@ -4049,12 +4109,16 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt deviceId = pTmpCiTransInfo->psdIdBuf[jj];/*ȡID*/ belongCiId = GetPsdBelongCiId(deviceId); if (localCi == belongCiId) - {/*ڱ*/ - + { + /*ڱ*/ ShortToChar(deviceId, &dataFrame[ii]);/*ID*/ ii += 2u; dataFrame[ii++] = GetPsdState(deviceId);/*״̬*/ dataFrame[ii++] = GetPsdMutualLockRemoveState(deviceId);/*Ż״̬*/ + + deviceState = GePsdExceptOpenState(deviceId); /*PSD쳣״̬*/ + dataFrame[ii] = deviceState; + ii++; deviceSum++; } else @@ -4236,13 +4300,13 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt deviceSum = 0u;/*SPKS*/ deviceSumIndex = ii;/*SPKSαλ*/ ii += 2u; - for (jj = 0u;jj < pTmpCiTransInfo->spksNum;jj++) + for (jj = 0u; jj < pTmpCiTransInfo->spksNum; jj++) { deviceId = pTmpCiTransInfo->spksIdBuff[jj]; - belongCiId = GetSpksBelongCiId(deviceId); + belongCiId = GetSpksBelongCiId(deviceId); if (localCi == belongCiId) {/*ڱ*/ - ShortToChar(deviceId,&dataFrame[ii]); + ShortToChar(deviceId, &dataFrame[ii]); ii += 2u; dataFrame[ii++] = GetSpksState(deviceId); dataFrame[ii++] = GetSpksCutState(deviceId); @@ -4635,8 +4699,11 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt { for (m = 0U; m < pCiSendAreaSnow->cPlatFormNum; m++) { - LongToChar(pCiSendAreaSnow->dwPlatFormId[m], &dataFrame[ii]); /*վ̨ͨID*/ - ii += 4U; + ShortToChar(pCiSendAreaSnow->szPlatFormInfo[m].wAreaId, &dataFrame[ii]); /*ID*/ + ii +=2U; + dataFrame[ii] = pCiSendAreaSnow->szPlatFormInfo[m].cAreaSnowLevel; /*ʪ켶*/ + ii++; + cCiSendAreaSnowNum++; } } @@ -4646,6 +4713,25 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt } dataFrame[cCiSendAreaSnowIndex] = cCiSendAreaSnowNum; /*ѩ*/ + /*ITEгϢ*/ + wCiSendAreaIteCutIndex = ii; /*ITEг*/ + ii++; + pCiSendAreaIteCut = GetCiSendAreaIteCutInfo(dstCiId); + if (NULL != pCiSendAreaIteCut) + { + for (m = 0U; m < pCiSendAreaIteCut->cAreaIteCutNum; m++) + { + ShortToChar(pCiSendAreaIteCut->wAreaIteCutId[m], &dataFrame[ii]); /*ID*/ + ii += 2U; + cCiSendAreaIteCutNum++; + } + } + else + { + cCiSendAreaIteCutNum = 0U; /*δ鵽ĿITEгϢITEгΪ0*/ + } + dataFrame[wCiSendAreaIteCutIndex] = cCiSendAreaIteCutNum; /*ITEг*/ + /*·һȥ߼ABLгϢ*/ deviceSum = 0u;/*ȥ߼*/ deviceSumIndex = ii;/*ȥαλ*/ @@ -4685,12 +4771,19 @@ 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 @@ -5075,6 +5168,8 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI UINT8 startLockState = 0u; UINT8 chTransmitRecvDataCycResult = 0U;/*ͨ״̬½*/ UINT8 ch2oo2SheBeiType = 0U;/*豸*/ + UINT32 dwBadEnsureTime = 0U; /*ͨжж*/ + UINT32 dwAppCycleTime = 0U; /*CIӦ*/ srcCiName = (CI_SYSTEM_TYPE_CI) * 256U + systemId; localCiName = (CI_SYSTEM_TYPE_CI) * 256U + localCiId; @@ -5109,7 +5204,9 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI if (HLHT_HEAD_SUCCESS == headRet) { /*ϢʱЧ*/ - vobcInfoRemainValidiy = HLHTCommonMsgRemainingValidity(GetCiAndVobcTransBadEnsureTime(), curntCycleNo, GetSystemParaAppCycleTime(), hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod); + dwBadEnsureTime = GetCiAndCiTransmitBadEnsureTime(); + dwAppCycleTime = GetSystemParaAppCycleTime(); + vobcInfoRemainValidiy = HLHTCommonMsgRemainingValidity(dwBadEnsureTime, curntCycleNo, dwAppCycleTime, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod); if (vobcInfoRemainValidiy > 0) { @@ -5155,6 +5252,7 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI } else { + debug_infor_printf((const)"\nParseCiToCiDataFrameHLHT: Msg Validity Error"); retVal = CI_ERROR; } } @@ -8190,36 +8288,6 @@ static UINT8 PackCityDefPacket(UINT8 *pInputData, UINT16 *pItemLen) return CI_SUCCESS; } -/* -: -Զݰ -: -const UINT8 *pInputData ָ -: -UINT16 *pItemLen еij -ֵ: -CI_SUCCESS,ɹ;CI_ERROR,ʧ. -*/ -static UINT8 ParseManufacDefPacket(const UINT8 *pInputData, UINT16 *pItemLen) -{ - return CI_SUCCESS; -} - -/* -: -Զݰ -: -UINT8 *pInputData ָ -: -UINT16 *pItemLen еij -ֵ: -CI_SUCCESS,ɹ;CI_ERROR,ʧ. -*/ -static UINT8 PackManufacDefPacket(UINT8 *pInputData, UINT16 *pItemLen) -{ - return CI_SUCCESS; -} - /* : 컥ͨӦ @@ -8250,7 +8318,6 @@ static UINT8 PackCiPacketCont(UINT8 *pInputData, UINT16 *pOverallLen, const UINT if ((NULL == pTmpCiTransInfo) || (NULL == pInputData) || (NULL == pOverallLen)) { retVal = CI_ERROR; - *pOverallLen = 0u; } else { @@ -8369,7 +8436,7 @@ static UINT8 PackCiPacketCont(UINT8 *pInputData, UINT16 *pOverallLen, const UINT dataIsAvail = CI_FALSE; break; case MANUFAC_DEF_STATUS_PACKET: - dataIsAvail = CI_FALSE; + dataIsAvail = CI_TRUE; break; default: dataIsAvail = CI_FALSE; @@ -8433,6 +8500,8 @@ static UINT8 PackCiPacketCont(UINT8 *pInputData, UINT16 *pOverallLen, const UINT case CITY_DEF_STATUS_PACKET: break; case MANUFAC_DEF_STATUS_PACKET: + retVal &= PackManufacDefPacket(pInputData + packedLen, &itemLen, dstCiId); /*鳧Զ֡*/ + packedLen += itemLen; break; default: /*ɴ֧*/ @@ -8560,7 +8629,7 @@ static UINT8 ParseCiPacketCont(const UINT8 *pInputData, const UINT16 overallLen, parsedLen += itemLen; break; case MANUFAC_DEF_STATUS_PACKET: - cRetVal &= ParseManufacDefPacket(pInputData + parsedLen, &itemLen); + cRetVal &= ParseManufacDefPacket(pInputData + parsedLen, &itemLen, srcId); parsedLen += itemLen; break; default: @@ -9011,14 +9080,6 @@ static UINT16 PackCiToCiDataFrameEa(UINT8 dstCiId, UINT8* dataFrame) /* ɢг */ dwMidLine = EaGetMidLine(chEaIndex); - if (UINT32_MAX == dwMidLine) - { - chPackFlag = CI_ERROR; - } - else - { - ; - } /* ־ */ chEaBuidFlag = GetEaBuildedFlag(chEaIndex); @@ -9710,6 +9771,16 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) } } + /*ITEгУ*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckCiToCiAreaIteCutData(dataBuf, &ii); + if (CI_ERROR == reVal) + { + *errNo = 27U; + } + } + /*·ȥ߼У*/ if (CI_SUCCESS == reVal) { @@ -10847,8 +10918,11 @@ UINT8 CheckCiToCiSignalData(const UINT8* dataBuf, UINT16* index) UINT8 chSignalDetainFlag = 0U;/*źŻ۳״̬*/ UINT8 chSignalRelayDetainFlag = 0U;/*źŻӲ߿۳״̬*/ UINT8 chSignalMaintainState = 0U;/*źŻά޵״̬*/ + UINT8 chSignalDsState = 0U;/*źŻ˿״̬*/ + UINT8 chDsState = 0U; /*źŻ˿λУ*/ UINT8 chSignalVBLNearFlag = 0U; /*źŻVBLгӽ־*/ UINT8 chCheckSigCurColorResult = CI_ERROR;/*źŻǰʾɫϷԼ*/ + UINT8 cCutBtnState = 0U; /*·ť״̬*/ chLocalCiId = GetSystemParaLocalCiId(); @@ -10973,6 +11047,60 @@ UINT8 CheckCiToCiSignalData(const UINT8* dataBuf, UINT16* index) debug_infor_printf((const)"CheckCiToCiSignalData wSignalId %d Is Error: chSignalMaintainState Is %d\n", wSignalId, chSignalMaintainState); } } + if (CI_SUCCESS == retVal) + { + /*źŻ˿״̬*/ + chSignalDsState = dataBuf[ii++]; + /*bit7~bit6 10 01 11ͬʱ 00޶˿ ΪϷֵУ*/ + chDsState = (chSignalDsState & SIGNAL_DS_BREAK_GREEN); + if ((SIGNAL_DS_BREAK_GREEN == chDsState) || (0U == chDsState)) + { + chDsState = (chSignalDsState & SIGNAL_DS_BREAK_YELLOW); + if ((SIGNAL_DS_BREAK_YELLOW == chDsState) || (0U == chDsState)) + { + chDsState = (chSignalDsState & SIGNAL_DS_BREAK_WHITE); + if ((SIGNAL_DS_BREAK_WHITE == chDsState) || (0U == chDsState)) + { + retVal = CI_SUCCESS; /**/ + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"CheckCiToCiSignalData wSignalId %d Is Error: chSignalWhiteDsState Is %d\n", wSignalId, chSignalDsState); + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"CheckCiToCiSignalData wSignalId %d Is Error: chSignalYellowDsState Is %d\n", wSignalId, chSignalDsState); + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"CheckCiToCiSignalData wSignalId %d Is Error: chSignalGreenDsState Is %d\n", wSignalId, chSignalDsState); + } + } + + if (CI_SUCCESS == retVal) + { + /*źŻ۳·ť״̬*/ + cCutBtnState = dataBuf[ii]; + ii++; + if ((SIGNAL_DETAIN_CUT_VALID_NO == cCutBtnState) || (SIGNAL_DETAIN_CUT_VALID_YES == cCutBtnState)) + { + retVal = CI_SUCCESS; /**/ + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"CheckCiToCiSignalData wSignalId %d Is Error: SignalDetCutBtnState Is %d\n", wSignalId, cCutBtnState); + } + } + else + { + /**/ + } } } else @@ -13278,15 +13406,7 @@ UINT8 CheckCiToCiEaData(const UINT8* dataBuf, UINT16* index) { strEaTmp.dwMidLine = LongFromChar(&dataBuf[ii]); ii += 4U; - if (UINT32_MAX > strEaTmp.dwMidLine) - { - /*У*/ - } - else - { - debug_infor_printf((const)"CheckCiToCiEaData BuildEaIndex[%d] Is Error: EaMidLine Is %d\n", jj, strEaTmp.dwMidLine); - retVal = CI_ERROR; - } + } else { @@ -13810,6 +13930,8 @@ UINT8 CheckCiToCiPsdData(const UINT8* dataBuf, UINT16* index) UINT16 psdId = 0u; /*Psd豸ID*/ UINT8 doorState = 0u; /*״̬*/ UINT8 mutualLockState = 0u; /*Ż״̬*/ + UINT8 cPsdExceptOpenState = 0U; /*쳣״̬*/ + localCiId = GetSystemParaLocalCiId(); if ((NULL != dataBuf) && (NULL != index)) @@ -13865,6 +13987,19 @@ UINT8 CheckCiToCiPsdData(const UINT8* dataBuf, UINT16* index) retVal = CI_ERROR; } } + + /*쳣״̬*/ + cPsdExceptOpenState = dataBuf[ii]; + ii++; + if ((PSD_EXCEPT_OPEN_YES == cPsdExceptOpenState) || (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState)) + { + ;/*Уͨ*/ + } + else + { + debug_infor_printf((const)"CheckCiToCiPsdData PsdId %d Is Error: PsdExceptOpenState Is %d\n", psdId, cPsdExceptOpenState); + retVal = CI_ERROR; + } } } else @@ -14627,16 +14762,18 @@ UINT8 CiToCiEnvelopeCheck(const UINT8* dataBuf, UINT16* index) * ͸ѩϢ * ˵ UINT8 cSrcCiId ͷCI * UINT8 cDstCiId շCI -* UINT32 dwAreaSnowId ѩվ̨ID -* ֵ -* Created By LQ 2023.11.16 +* UINT16 wAreaSnowId ID +* UINT8 cAreaSnowLevel ʪ켶 +* ֵ +* Modified By LQ 2025.5.28 */ -void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) +void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaSnowId, UINT8 cAreaSnowLevel) { UINT16 ii = 0U; UINT8 cKeepWork = CI_ERROR; - if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != dwAreaSnowId)) + if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != wAreaSnowId) + && ((CI_SNOW_LEVEL_DEFAULT == cAreaSnowLevel) || (CI_SNOW_LEVEL_ONE == cAreaSnowLevel) || (CI_SNOW_LEVEL_TWO == cAreaSnowLevel))) { for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) { @@ -14672,7 +14809,8 @@ void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) /*ѩϢ*/ szRecvCiAreaSnow[ii].cSourceCiId = cSrcCiId; szRecvCiAreaSnow[ii].cTargetCiId = cDstCiId; - szRecvCiAreaSnow[ii].dwPlatFormId[szRecvCiAreaSnow[ii].cPlatFormNum] = dwAreaSnowId; + szRecvCiAreaSnow[ii].szPlatFormInfo[szRecvCiAreaSnow[ii].cPlatFormNum].wAreaId = wAreaSnowId; + szRecvCiAreaSnow[ii].szPlatFormInfo[szRecvCiAreaSnow[ii].cPlatFormNum].cAreaSnowLevel = cAreaSnowLevel; szRecvCiAreaSnow[ii].cPlatFormNum++; } else @@ -14695,16 +14833,19 @@ void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) * ӱ͸ָIDѩϢ * ˵ UINT8 cSrcCiId ͷCI * UINT8 cDstCiId շCI -* UINT32 dwAreaSnowId ѩվ̨ID -* ֵ +* UINT16 wAreaId ID +* UINT8 cAreaSnowLevel ʪȼ +* ֵ +* Modified By LQ 2025.05.28 */ -void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) +void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId, UINT8 cAreaSnowLevel) { UINT16 ii = 0U; UINT8 cKeepWork = CI_ERROR; UINT8 jj = 0U; - if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != dwAreaSnowId)) + if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != wAreaId) + && ((CI_SNOW_LEVEL_DEFAULT == cAreaSnowLevel) || (CI_SNOW_LEVEL_ONE == cAreaSnowLevel) || (CI_SNOW_LEVEL_TWO == cAreaSnowLevel))) { for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) { @@ -14740,7 +14881,7 @@ void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) /*by cgh ȥ*/ for (jj = 0U; jj < szSendCiAreaSnow[ii].cPlatFormNum; jj++) { - if (szSendCiAreaSnow[ii].dwPlatFormId[jj] == dwAreaSnowId) + if (szSendCiAreaSnow[ii].szPlatFormInfo[jj].wAreaId == wAreaId) { break; } @@ -14755,7 +14896,8 @@ void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId) /*ѩϢ*/ szSendCiAreaSnow[ii].cSourceCiId = cSrcCiId; szSendCiAreaSnow[ii].cTargetCiId = cDstCiId; - szSendCiAreaSnow[ii].dwPlatFormId[szSendCiAreaSnow[ii].cPlatFormNum] = dwAreaSnowId; + szSendCiAreaSnow[ii].szPlatFormInfo[szSendCiAreaSnow[ii].cPlatFormNum].wAreaId = wAreaId; + szSendCiAreaSnow[ii].szPlatFormInfo[szSendCiAreaSnow[ii].cPlatFormNum].cAreaSnowLevel = cAreaSnowLevel; szSendCiAreaSnow[ii].cPlatFormNum++; } else @@ -14879,9 +15021,10 @@ UINT8 CheckCiToCiAreaSnowData(const UINT8* dataBuf, UINT16* index) UINT16 ii = 0U; UINT8 jj = 0U; UINT8 cAreaSnowNum = 0U; /**/ - UINT32 dwPlatFormId = 0U; /*ѩվ̨ID*/ + UINT16 wPlatFormId = 0U; /*ѩվ̨ID*/ UINT8 cPlatFormBelongCiId = 0U; /*վ̨*/ UINT8 localCiId = 0U; /*ID*/ + UINT8 cAreaSnowLevel = 0U; /*ʪȼ*/ if ((NULL != dataBuf) && (NULL != index)) { @@ -14895,13 +15038,13 @@ UINT8 CheckCiToCiAreaSnowData(const UINT8* dataBuf, UINT16* index) { for (jj = 0U; jj < cAreaSnowNum; jj++) { - /*Уѩվ̨ID*/ - dwPlatFormId = LongFromChar(&dataBuf[ii]); - ii += 4U; + /*УID*/ + wPlatFormId = ShortFromChar(&dataBuf[ii]); + ii += 2U; - if ((0U != dwPlatFormId) && (UINT32_MAX > dwPlatFormId)) + if ((0U < wPlatFormId) && (UINT16_MAX > wPlatFormId)) { - cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId((UINT16)dwPlatFormId); /*ȡѩվ̨*/ + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(wPlatFormId); /*ȡѩվ̨*/ if ((localCiId != cPlatFormBelongCiId) && (0U != cPlatFormBelongCiId) && (0U != localCiId)) { @@ -14916,10 +15059,30 @@ UINT8 CheckCiToCiAreaSnowData(const UINT8* dataBuf, UINT16* index) } else { - debug_infor_printf((const)"CheckCiToCiAreaSnowData Is Error: dwPlatFormId Is %d\n", dwPlatFormId); + debug_infor_printf((const)"CheckCiToCiAreaSnowData Is Error: wPlatFormId Is %d\n", wPlatFormId); retVal = CI_ERROR; } + if (CI_SUCCESS == retVal) + { + cAreaSnowLevel = dataBuf[ii]; /*ʪȼ*/ + ii++; + + if ((CI_SNOW_LEVEL_DEFAULT == cAreaSnowLevel) || (CI_SNOW_LEVEL_ONE == cAreaSnowLevel) || (CI_SNOW_LEVEL_TWO == cAreaSnowLevel)) + { + /*Уͨ*/ + } + else + { + debug_infor_printf((const)"CheckCiToCiAreaSnowData Is Error: AreaSnowLevel Is %d\n", cAreaSnowLevel); + retVal = CI_ERROR; + } + } + else + { + /*ѽʧܣ*/ + } + if (CI_SUCCESS != retVal) { break; @@ -15507,6 +15670,10 @@ 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)) { @@ -15529,12 +15696,99 @@ 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)"CheckCiToCiLeaveLogSecData Is Error: chRouteApplySwitchCheckFlag Is %d\n", chRouteApplySwitchCheckFlag); + debug_infor_printf((const)"CheckCiToCiNeedCheckSwRouteData Is Error: chRouteApplySwitchCheckFlag Is %d\n", chRouteApplySwitchCheckFlag); retVal = CI_ERROR; } } @@ -16080,5 +16334,1519 @@ UINT8 InitNeedOlapUsingOtherCiProSw(void) } } + return cRetVal; +} + +/* +* ͸ITEгϢ +* ˵const UINT8 cSrcCiId ͷCI +* ֵ +* Created By LQ 2025.04.14 +*/ +void ClearCiRecvAreaIteCutInfo(const UINT8 cSrcCiId) +{ + UINT16 ii = 0U; + + if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId)) + { + for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) + { + if (szRecvCiAreaIteCut[ii].cSourceCiId == cSrcCiId) + { + (void)CommonMemSet(&szRecvCiAreaIteCut[ii], (UINT32)sizeof(ToCiAreaIteCutStruct), 0U, (UINT32)sizeof(ToCiAreaIteCutStruct)); + break; + } + else + { + /**/ + } + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ͸ITEгϢ +* ˵ +* ֵ +* Created By LQ 2025.04.14 +*/ +void ClearCiSendAreaIteCutInfo(void) +{ + (void)CommonMemSet(szSendCiAreaIteCut, (UINT32)(CI_COM_CI_MAX_NUM * sizeof(ToCiAreaIteCutStruct)), 0U, (UINT32)(CI_COM_CI_MAX_NUM * sizeof(ToCiAreaIteCutStruct))); +} + +/* +* ȡ͸ITEгϢ +* ˵ +* ֵ ITEгϢ +* Created By LQ 2025.04.14 +*/ +ToCiAreaIteCutStruct* GetCiRecvAreaIteCutInfo(void) +{ + return szRecvCiAreaIteCut; +} + +/* +* ȡ͸ָIDITEгϢ +* ˵const UINT8 cTargetCiId Ŀ +* ֵ͸ITEгϢ +* Created By LQ 2023.11.16 +*/ +ToCiAreaIteCutStruct* GetCiSendAreaIteCutInfo(const UINT8 cTargetCiId) +{ + ToCiAreaIteCutStruct* retVal = NULL; + UINT16 ii = 0U; + + if ((0U != cTargetCiId) && (CI_SUM_MAX > cTargetCiId)) + { + for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) + { + if (szSendCiAreaIteCut[ii].cTargetCiId == cTargetCiId) + { + retVal = &szSendCiAreaIteCut[ii]; + } + else + { + /**/ + } + } + } + else + { + /*ηǷNULL*/ + } + + return retVal; +} + +/* +* ͸ITEгϢ +* ˵UINT8 cSrcCiId ͷCI +* UINT8 cDstCiId շCI +* UINT16 wAreaId ID +* ֵ +* Created By LQ 2025.04.14 +*/ +void AddCiRecvAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId) +{ + UINT16 ii = 0U; + UINT8 cKeepWork = CI_ERROR; + UINT8 cLocalAreaIteCutNum = 0U; + UINT16* pLocalAreaIteCutId = NULL; + UINT8 jj = 0U; + UINT8 cAddFlag = CI_SUCCESS; + + if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != wAreaId) && (UINT16_MAX > wAreaId)) + { + /*IDǷѰڱ*/ + cLocalAreaIteCutNum = GetLocalAreaIteCutNum(); + pLocalAreaIteCutId = GetLocalAreaIteCutId(); + + if ((0U < cLocalAreaIteCutNum) && (NULL != pLocalAreaIteCutId)) + { + for (jj = 0U; jj < cLocalAreaIteCutNum; jj++) + { + if (wAreaId == pLocalAreaIteCutId[jj]) + { + cAddFlag = CI_ERROR; + break; + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + if (CI_SUCCESS == cAddFlag) + { + for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) + { + /*ѰĿCI*/ + if ((cSrcCiId == szRecvCiAreaIteCut[ii].cSourceCiId) && (cDstCiId == szRecvCiAreaIteCut[ii].cTargetCiId)) + { + cKeepWork = CI_SUCCESS; + } + else if ((0U == szRecvCiAreaIteCut[ii].cSourceCiId) && (0U == szRecvCiAreaIteCut[ii].cTargetCiId)) + { + cKeepWork = CI_SUCCESS; + } + else + { + /*ĿCI*/ + } + + if (CI_SUCCESS == cKeepWork) + { + + break; + } + else + { + /**/ + } + } + + if (CI_SUCCESS == cKeepWork) + { + if (CI_TO_CI_AREA_SNOW_SUM_MAX > szRecvCiAreaIteCut[ii].cAreaIteCutNum) + { + /*ITEгϢ*/ + szRecvCiAreaIteCut[ii].cSourceCiId = cSrcCiId; + szRecvCiAreaIteCut[ii].cTargetCiId = cDstCiId; + szRecvCiAreaIteCut[ii].wAreaIteCutId[szRecvCiAreaIteCut[ii].cAreaIteCutNum] = wAreaId; + szRecvCiAreaIteCut[ii].cAreaIteCutNum++; + } + else + { + debug_infor_printf((const)"AddCiRecvAreaIteCutInfo Error: Area Num Exceed Max %d!\n", CI_TO_CI_AREA_SNOW_SUM_MAX); + } + } + else + { + debug_infor_printf((const)"AddCiRecvAreaIteCutInfo Error: No TargetCi!\n"); + } + } + else + { + /**/ + } + } + else + { + debug_infor_printf((const)"AddCiRecvAreaIteCutInfo Error: Input Data Error!\n"); + } +} + +/* +* ӱ͸ָIDITEгϢ +* ˵UINT8 cSrcCiId ͷCI +* UINT8 cDstCiId շCI +* UINT16 wAreaId ID +* ֵ +* Created By LQ 2025.04.14 +*/ +void AddCiSendAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId) +{ + UINT16 ii = 0U; + UINT8 cKeepWork = CI_ERROR; + UINT8 jj = 0U; + UINT8 cCommCiNum = 0U; + UINT8* pCommCiId = NULL; + UINT8 cAddFlag = CI_ERROR; + + if ((0U != cSrcCiId) && (CI_SUM_MAX > cSrcCiId) && (0U != cDstCiId) && (CI_SUM_MAX > cDstCiId) && (0U != wAreaId) && (UINT16_MAX > wAreaId)) + { + cCommCiNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); /*ȡͨCI豸*/ + pCommCiId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); /*ȡͨCI豸ID*/ + + if ((0U < cCommCiNum) && (NULL != pCommCiId)) + { + for (jj = 0U; jj < cCommCiNum; jj++) + { + if (cDstCiId == pCommCiId[jj]) + { + cAddFlag = CI_SUCCESS; + break; + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + if (CI_SUCCESS == cAddFlag) + { + for (ii = 0U; ii < CI_COM_CI_MAX_NUM; ii++) + { + /*ѰĿCI*/ + if ((cSrcCiId == szSendCiAreaIteCut[ii].cSourceCiId) && (cDstCiId == szSendCiAreaIteCut[ii].cTargetCiId)) + { + cKeepWork = CI_SUCCESS; + } + else if ((0U == szSendCiAreaIteCut[ii].cSourceCiId) && (0U == szSendCiAreaIteCut[ii].cTargetCiId)) + { + cKeepWork = CI_SUCCESS; + } + else + { + /*ĿCI*/ + } + + if (CI_SUCCESS == cKeepWork) + { + + break; + } + else + { + /**/ + } + } + + if (CI_SUCCESS == cKeepWork) + { + if (CI_TO_CI_AREA_SNOW_SUM_MAX > szSendCiAreaIteCut[ii].cAreaIteCutNum) + { + for (jj = 0U; jj < szSendCiAreaIteCut[ii].cAreaIteCutNum; jj++) + { + /*ȥش*/ + if (szSendCiAreaIteCut[ii].wAreaIteCutId[jj] == wAreaId) + { + break; + } + else + { + ; /**/ + } + } + + if (szSendCiAreaIteCut[ii].cAreaIteCutNum == jj) + { + /*ITEгϢ*/ + szSendCiAreaIteCut[ii].cSourceCiId = cSrcCiId; + szSendCiAreaIteCut[ii].cTargetCiId = cDstCiId; + szSendCiAreaIteCut[ii].wAreaIteCutId[szSendCiAreaIteCut[ii].cAreaIteCutNum] = wAreaId; + szSendCiAreaIteCut[ii].cAreaIteCutNum++; + } + else + { + ; /*ظ*/ + } + } + else + { + debug_infor_printf((const)"AddCiSendAreaIteCutInfo Error: Area Num Exceed Max %d!\n", CI_TO_CI_AREA_SNOW_SUM_MAX); + } + } + else + { + debug_infor_printf((const)"AddCiSendAreaIteCutInfo Error: No TargetCi!\n"); + } + } + else + { + /*ĿRC/CIͨŹϵ*/ + } + } + else + { + debug_infor_printf((const)"AddCiSendAreaIteCutInfo Error: Input Data Error!\n"); + } +} + +/* +* УCI͵ĴITEг +* ˵const UINT8* dataBuf ݣ +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2024.04.15 +*/ +UINT8 CheckCiToCiAreaIteCutData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 cAreaIteCutNum = 0U; /*ITEг*/ + UINT16 wAreaId = 0U; /*ID*/ + UINT8 cAreaBelongCiId = 0U; /**/ + UINT8 localCiId = 0U; /*ID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + retVal = CI_SUCCESS; + ii = *index; + localCiId = GetSystemParaLocalCiId(); + + cAreaIteCutNum = dataBuf[ii]; /*ITEг*/ + ii++; + if (CI_TO_CI_AREA_SNOW_SUM_MAX >= cAreaIteCutNum) + { + for (jj = 0U; jj < cAreaIteCutNum; jj++) + { + /*УID*/ + wAreaId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + + if ((0U != wAreaId) && (UINT16_MAX > wAreaId)) + { + cAreaBelongCiId = GetAreaSnowPlatFormBelongCiId(wAreaId); /*ȡ*/ + + if ((localCiId != cAreaBelongCiId) && (0U != cAreaBelongCiId) && (0U != localCiId)) + { + /*Уͨ*/ + } + else + { + /*Ϊʧ*/ + debug_infor_printf((const)"CheckCiToCiAreaIteCutData Is Error: cAreaBelongCiId Is %d\n", cAreaBelongCiId); + retVal = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"CheckCiToCiAreaIteCutData Is Error: wAreaId Is %d\n", wAreaId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS != retVal) + { + break; + } + else + { + /**/ + } + } + } + else + { + /*ޣʧ*/ + debug_infor_printf((const)"CheckCiToCiAreaIteCutData Is Error: cAreaIteCutNum Is %d\n", cAreaIteCutNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* 黥ͨԶ֡ +* ˵UINT8 *pInputData ָ +* UINT16 *pItemLen еijȣΣ +* const UINT8 dstCiId ĿID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.05.23 +*/ +UINT8 PackManufacDefPacket(UINT8* pInputBuf, UINT16* pItemLen, const UINT8 dstCiId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wPackedInfoNum = 0U; /*Ϣ*/ + UINT16 wDeviceId = 0U; /*豸ID*/ + UINT8 cDeviceState = 0U; /*豸״̬*/ + UINT16 ii = 0U; + UINT8 cTempCounter = 0U; /*ѭ*/ + UINT8 cBitOffset = 0U; /*λƫ*/ + UINT16 wPackedLen = 0U; + CiTransmitStruct* pTmpCiTransInfo = NULL; + UINT16 wSwitchRelPhySecId = 0U; /*ID*/ + UINT16 wLockedRouteId = 0U; /*·ID*/ + + pTmpCiTransInfo = GetDstCiTransInfo(dstCiId); + + if ((NULL != pInputBuf) && (NULL != pItemLen) && (NULL != pTmpCiTransInfo)) + { + /*鳧ԶϢ汾΢Ĭ0x01*/ + *(pInputBuf + wPackedLen) = MANUFAC_DEF_INFO_VER_WL; + wPackedLen++; + + /*Զ·*/ + for (ii = 0U; ii < pTmpCiTransInfo->autoRouteNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->autoRouteIdBuf[ii]; + cDeviceState = GetAutoRouteSetFlag(wDeviceId); /*ȡԶ·־*/ + if (AUTO_ROUTE_SET_YES == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*Զ·*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*δԶ·*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*ʱ*/ + for (ii = 0U; ii < pTmpCiTransInfo->logicSecNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ʱٹԤĬ鲻ڽʱ*/ + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*״̬*/ + for (ii = 0U; ii < pTmpCiTransInfo->switchNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->switchIdBuf[ii]; + cDeviceState = GetSwitchLockStatus(wDeviceId); /*ȡ״̬*/ + if ((SWITCH_LOCK_STATUS_PROTECT == cDeviceState) || (SWITCH_LOCK_STATUS_DAP == cDeviceState)) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*з*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*޷*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*״̬*/ + for (ii = 0U; ii < pTmpCiTransInfo->switchNum; ii++) + { + /*CTռ״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->switchIdBuf[ii]; + wSwitchRelPhySecId = GetSwitchPhySectionId(wDeviceId); /*ȡID*/ + cDeviceState = GetPhySecPreOccState(wSwitchRelPhySecId); /*ȡCT/UTռ״̬*/ + if ((LOGICSECTION_OCCUPY_UT == cDeviceState) || (LOGICSECTION_OCCUPY_NO == cDeviceState)) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /**/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*CTռ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + + /*UTռ״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + cDeviceState = GetPhySecPreOccState(wSwitchRelPhySecId); /*ȡCT/UTռ״̬*/ + if ((LOGICSECTION_OCCUPY_CT == cDeviceState) || (LOGICSECTION_OCCUPY_NO == cDeviceState)) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /**/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*UTռ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + + /*ν·״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + cDeviceState = GetPhySecLockState(wSwitchRelPhySecId); /*ȡ״̬*/ + wLockedRouteId = GetPhySecRLockBelongRouteId(wSwitchRelPhySecId); /*ȡν··ID*/ + if (((PHYSICAL_SECTION_LOCK_NORMAL == cDeviceState) || (PHYSICAL_SECTION_LOCK_DELAY == cDeviceState)) && (0U != wLockedRouteId)) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ڽ·*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*ڽ·*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + + /*η״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + cDeviceState = GetPhySecFLockState(wSwitchRelPhySecId); /*ȡη״̬*/ + if (PHYSICAL_SECTION_FLOCK_NO == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*δ*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + + /*쳣״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + cDeviceState = GetPhySecLockState(wSwitchRelPhySecId); /*ȡ״̬*/ + wLockedRouteId = GetPhySecRLockBelongRouteId(wSwitchRelPhySecId); /*ȡν··ID*/ + if ((PHYSICAL_SECTION_LOCK_EXCEPT == cDeviceState) && (0U != wLockedRouteId)) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ڹ*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*ڹ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*ͣ׼ͣ״̬*/ + for (ii = 0U; ii < pTmpCiTransInfo->phySecNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->phySecIdBuf[ii]; + cDeviceState = GetPhySecStopSteadyFlag(wDeviceId); /*ȡͣ׼ͣ״̬*/ + + if (PHYSICAL_SECTION_STOPSTEADY_YES == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ͣ׼ͣ*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*δͣ׼ͣ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*μԤλ״̬Ϊλ*/ + for (ii = 0U; ii < pTmpCiTransInfo->phySecNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->phySecIdBuf[ii]; + cDeviceState = GetPhySecPreResetState(wDeviceId); /*ȡμԤλ״̬*/ + + if (PHYSICAL_SECTION_PRE_RESET_YES == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*Ԥλ״̵̬*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*Ԥλ״̵̬*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*źŻƶ˿״̬*/ + for (ii = 0U; ii < pTmpCiTransInfo->signalNum; ii++) + { + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->signalIdBuf[ii]; + cDeviceState = GetSignalBlueDsBreakFlag(wDeviceId); /*ȡźŻƶ˿״̬*/ + + if (SIGNAL_DS_BREAK_NO == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*δ˿*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*ƶ˿*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + /*źŻ۳״̬Ŀ۳ͳվ۳*/ + for (ii = 0U; ii < pTmpCiTransInfo->signalNum; ii++) + { + /*źŻĿ۳״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDeviceId = pTmpCiTransInfo->signalIdBuf[ii]; + cDeviceState = GetSignalATSDetainFlag(wDeviceId); /*ȡźŻĿ۳״̬*/ + if (SIGNAL_ATS_DETAIN_NO == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ڿ۳*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*ڿ۳*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + + /*źŻվ۳״̬*/ + cTempCounter = (UINT8)(wPackedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽڿɴ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + cDeviceState = GetSignalLocalDetainFlag(wDeviceId); /*ȡźŻվ۳״̬*/ + if (SIGNAL_XIANDI_DETAIN_NO == cDeviceState) + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000010B << cBitOffset); /*ڿ۳*/ + } + else + { + *(pInputBuf + wPackedLen) = *(pInputBuf + wPackedLen) | (BIT_VAL_00000001B << cBitOffset); /*ڿ۳*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wPackedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wPackedInfoNum++; /*һϢ1*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) != cTempCounter) + { + wPackedLen++; /*һֽδ4ϢҪ1*/ + } + else + { + /**/ + } + + *pItemLen = wPackedLen; + cRetVal = CI_SUCCESS; + } + else + { + cRetVal = CI_ERROR; /*ηǷʧ*/ + } + + return cRetVal; +} + +/* +* ͨԶ֡ +* ˵const UINT8 *pInputData ָ +* UINT16 *pItemLen еij +* const UINT8 srcCiId ԴID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.05.26 +*/ +UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen, const UINT8 srcCiId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cLocalCiId = 0U; + const CiTransmitStruct* pCiRecptStru = NULL; + AutoRouteDataStruct* pstrAutoRouteData = NULL; /*Զ·̬ݽṹָ*/ + LogicSectionDataStruct* pstrLogSecData = NULL; /*߼ζ̬ݽṹָ*/ + SwitchDataStruct* pstrSwitchData = NULL; /*̬ݽṹָ*/ + PhysicalSectionDataStruct* pstrPhySecData = NULL; /*ζ̬ݽṹָ*/ + SignalDataStruct* pstrSignalData = NULL; /*źŻ̬ݽṹָ*/ + UINT8 cInfoVer = 0U; /*Ϣ汾*/ + UINT16 wParsedLen = 0U; /*ָƫ*/ + UINT16 ii = 0U; + UINT16 wParsedInfoNum = 0U; /*ѽϢ*/ + UINT8 cTempCounter = 0U; /*ѭ*/ + UINT8 cBitOffset = 0U; /*λƫ*/ + UINT16 wDevId = 0U; /*豸ID*/ + UINT8 cDevBelongCiId = 0U; /*豸*/ + UINT16 wDevIndex = 0U; /*豸ID*/ + UINT8 cDevInfo = 0U; /*豸Ϣ*/ + UINT8 cDevState = 0U; /*豸״̬*/ + UINT8 cPhySecCtOcc = 0U; /*CTռ״̬*/ + UINT8 cPhySecUtOcc = 0U; /*UTռ״̬*/ + UINT8 cPhySecCtOrUtOcc = 0U; /*CT/UTռ״̬*/ + UINT8 cPhySecRouteLockState = 0U; /*ν·״̬*/ + UINT8 cPhySecExceptLockState = 0U; /*ι״̬*/ + UINT8 cPhySecLockState = 0U; /*״̬*/ + UINT8 cPhySecFLockState = 0U; /*η״̬*/ + UINT16 wPhySecId = 0U; /*ID*/ + UINT8 cSignalAtsDetainFlag = 0U; /*źŻĿ۳־*/ + UINT8 cSignalXiandiDetainFlag = 0U; /*źŻվ۳־*/ + + cLocalCiId = GetSystemParaLocalCiId(); + pCiRecptStru = GetSrcCiTransInfo(srcCiId); /*ȡԴӦĽṹ*/ + pstrAutoRouteData = GetAutoRouteDataStr(); /*ȡԶ·̬ݽṹ*/ + pstrLogSecData = GetLogicSecData(); /*ȡ߼ζ̬ݽṹ*/ + pstrSwitchData = GetSwitchData(); /*ȡ̬ݽṹ*/ + pstrPhySecData = GetPhySecData(); /*ȡζ̬ݽṹ*/ + pstrSignalData = GetSignalData(); /*ȡźŻ̬ݽṹ*/ + + if ((NULL !=pInputData) && (NULL != pItemLen) && (NULL != pCiRecptStru) && (0U != cLocalCiId) && (NULL != pstrAutoRouteData) + && (NULL != pstrLogSecData) && (NULL != pstrSwitchData) && (NULL != pstrPhySecData) && (NULL != pstrSignalData)) + { + cInfoVer = *(pInputData + wParsedLen); + wParsedLen++; + + if (MANUFAC_DEF_INFO_VER_WL == cInfoVer) + { + cRetVal = CI_SUCCESS; + + /*Զ·Ϣ*/ + for (ii = 0U; ii < pCiRecptStru->autoRouteNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->autoRouteIdBuf[ii]; + cDevBelongCiId = GetAutoRouteBelongCiId(wDevId); /*ȡԶ·*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetAutoRouteBufIndex(wDevId); + pstrAutoRouteData[wDevIndex].AutoRouteId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢Զ·Ϣ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + SetAutoRouteSetFlag(wDevId, AUTO_ROUTE_SET_YES); /*Զ·Ѱ*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + SetAutoRouteSetFlag(wDevId, AUTO_ROUTE_SET_NO); /*Զ·δ*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: AutoRoute Id[%d] State Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + + /*ʱϢ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->logicSecNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->logicSecIdBuf[ii]; + cDevBelongCiId = GetLogSecBelongCiId(wDevId); /*ȡ߼*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetlogSectionBufIndex(wDevId); + pstrLogSecData[wDevIndex].LogicSectionId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢߼νʱϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + /*TODO: ʱٹܾ߱*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + /*TODO: ʱٹܾ߱*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: LogSec Id[%d] Urgent Tsr Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + /*Ϣ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->switchNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->switchIdBuf[ii]; + cDevBelongCiId = GetSwitchBelongCiId(wDevId); /*ȡ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetSwitchConfigBufIndex(wDevId); + pstrSwitchData[wDevIndex].SwitchId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000001B == cDevState) + { + SetHlhtCiSwitchPlockStatus(wDevId, SWITCH_LOCK_STATUS_PROTECT); /*õз*/ + } + else if (BIT_VAL_00000010B == cDevState) + { + SetHlhtCiSwitchPlockStatus(wDevId, SWITCH_LOCK_STATUS_NO); /*õ޷*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] PLock Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + /*״̬Ϣ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->switchNum; ii++) + { + /*ȷCTռ״̬*/ + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + cPhySecCtOcc = LOGICSECTION_OCCUPY_NO; /**/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cPhySecCtOcc = LOGICSECTION_OCCUPY_CT; /*CTռ*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] CT Occ Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + /*ȷUTռ״̬*/ + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + cPhySecUtOcc = LOGICSECTION_OCCUPY_NO; /**/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cPhySecUtOcc = LOGICSECTION_OCCUPY_UT; /*UTռ*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] UT Occ Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + /*ȷν·״̬*/ + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + cPhySecRouteLockState = PHYSICAL_SECTION_LOCK_NORMAL; /*·*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cPhySecRouteLockState = PHYSICAL_SECTION_LOCK_NO; /*δ·*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] RouteLock Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + /*ȷη״̬*/ + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + cPhySecFLockState = PHYSICAL_SECTION_FLOCK_NO; /*δ*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cPhySecFLockState = PHYSICAL_SECTION_FLOCK_YES; /**/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] Flock Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + /*ȷι״̬*/ + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ĵϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + cPhySecExceptLockState = PHYSICAL_SECTION_LOCK_EXCEPT; /*쳣*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cPhySecExceptLockState = PHYSICAL_SECTION_LOCK_NO; /*δ쳣*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] ExceptLock Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + /*ȷCT/UTռ״̬*/ + if ((LOGICSECTION_OCCUPY_NO == cPhySecCtOcc) && (LOGICSECTION_OCCUPY_NO == cPhySecUtOcc)) + { + cPhySecCtOrUtOcc = LOGICSECTION_OCCUPY_NO; /*CT/UTУ*/ + } + else if ((LOGICSECTION_OCCUPY_CT == cPhySecCtOcc) && (LOGICSECTION_OCCUPY_NO == cPhySecUtOcc)) + { + cPhySecCtOrUtOcc = LOGICSECTION_OCCUPY_CT; /*CTռãUTУCTռ*/ + } + else if ((LOGICSECTION_OCCUPY_NO == cPhySecCtOcc) && (LOGICSECTION_OCCUPY_UT == cPhySecUtOcc)) + { + cPhySecCtOrUtOcc = LOGICSECTION_OCCUPY_UT; /*CTУUTռãUTռ*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] CT And UT Diff", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + /*ȷ״̬*/ + if ((PHYSICAL_SECTION_LOCK_NO == cPhySecRouteLockState) && (PHYSICAL_SECTION_LOCK_NO == cPhySecExceptLockState)) + { + cPhySecLockState = PHYSICAL_SECTION_LOCK_NO; /*·պ͹վδգδ*/ + } + else if ((PHYSICAL_SECTION_LOCK_NORMAL == cPhySecRouteLockState) && (PHYSICAL_SECTION_LOCK_NO == cPhySecExceptLockState)) + { + cPhySecLockState = PHYSICAL_SECTION_LOCK_NORMAL; /*·ΪգΪδգ*/ + } + else if ((PHYSICAL_SECTION_LOCK_NO == cPhySecRouteLockState) && (PHYSICAL_SECTION_LOCK_EXCEPT == cPhySecExceptLockState)) + { + cPhySecLockState = PHYSICAL_SECTION_LOCK_EXCEPT; /*·ΪδգΪ쳣գ쳣*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Switch Id[%d] Lock Diff Error", srcCiId, pCiRecptStru->switchIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if (CI_SUCCESS == cRetVal) + { + wDevId = pCiRecptStru->switchIdBuf[ii]; + wPhySecId = GetSwitchPhySectionId(wDevId); + cDevBelongCiId = GetPhySecBelongCiId(wPhySecId); /*ȡ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetPhySecConfigBufIndex(wDevId); + pstrPhySecData[wDevIndex].PhysicalSectionId = wPhySecId; + + /*ʱԤ*/ +#if 0 + SetPhySecLockStateHlht(wPhySecId, cPhySecLockState); /*״̬*/ + SetPhySecFLockState(wPhySecId, cPhySecFLockState); /*η״̬*/ + SetHlhtPhySecCtOrUtOccState(wPhySecId, cPhySecCtOrUtOcc); /*CT/UTռ״̬*/ +#endif + } + else + { + /**/ + } + } + else + { + cRetVal = CI_ERROR; + break; + } + } + } + else + { + cRetVal = CI_ERROR; + } + + /*ͣ׼ͣϢ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->phySecNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->phySecIdBuf[ii]; + cDevBelongCiId = GetPhySecBelongCiId(wDevId); /*ȡ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetPhySecConfigBufIndex(wDevId); + pstrPhySecData[wDevIndex].PhysicalSectionId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢ͣ׼ͣϢ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + SetPhySecStopSteadyFlag(wDevId, PHYSICAL_SECTION_STOPSTEADY_YES); /*ͣ׼ͣ*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + SetPhySecStopSteadyFlag(wDevId, PHYSICAL_SECTION_STOPSTEADY_NO); /*δͣ׼ͣ*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: PhySec Id[%d] Stop Steady Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + /*μԤλ״̬Ϣ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->phySecNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->phySecIdBuf[ii]; + cDevBelongCiId = GetPhySecBelongCiId(wDevId); /*ȡ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetPhySecConfigBufIndex(wDevId); + pstrPhySecData[wDevIndex].PhysicalSectionId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢μԤλ״̬Ϣ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + SetPhySecPreResetState(wDevId, PHYSICAL_SECTION_PRE_RESET_YES); /*μԤλ״̬Ч*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + SetPhySecPreResetState(wDevId, PHYSICAL_SECTION_PRE_RESET_NO); /*μԤλ״̬Ч*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: PhySec Id[%d] PreReset Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + /*źŻƶ˿Ϣ*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->signalNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + + wDevId = pCiRecptStru->signalIdBuf[ii]; + cDevBelongCiId = GetSignalBelongCiId(wDevId); /*ȡźŻ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetSignalConfigBufIndex(wDevId); + pstrSignalData[wDevIndex].SignalId = wDevId; + + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢źŻƶ˿Ϣ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + if (BIT_VAL_00000010B == cDevState) + { + SetHlhtCiSignalBlueDsBreakFlag(wDevId, SIGNAL_DS_BREAK_NO); /*źŻδƶ˿*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + SetHlhtCiSignalBlueDsBreakFlag(wDevId, SIGNAL_DS_BREAK_YES); /*źŻƶ˿*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Signal Id[%d] BlueDengsi Error", srcCiId, wDevId); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + break; + } + } + else + { + /**/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + } + } + else + { + cRetVal = CI_ERROR; + } + + /*źŻ۳ϢĿ۳ͳվ۳*/ + if (CI_SUCCESS == cRetVal) + { + for (ii = 0U; ii < pCiRecptStru->signalNum; ii++) + { + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢źŻ۳Ϣ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + + /*ȷĿ۳״̬*/ + if (BIT_VAL_00000010B == cDevState) + { + cSignalAtsDetainFlag = SIGNAL_DETAIN_ATS_NO; /*Ŀ۳*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cSignalAtsDetainFlag = SIGNAL_DETAIN_ATS; /*Ŀ۳*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Signal Id[%d] Ats Detain Error", srcCiId, pCiRecptStru->signalIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + cTempCounter = (UINT8)(wParsedInfoNum % DEV_NUM_PER_BYTE); /*ÿ2λһϢһֽ4Ϣ*/ + cBitOffset = cTempCounter * BIT_NUM_PER_DEV; + cDevInfo = *(pInputData + wParsedLen); /*ֽڴ洢źŻ۳Ϣ*/ + cDevState = (cDevInfo >> cBitOffset) & BIT_MASK_00000011B; + + /*ȷվ۳״̬*/ + if (BIT_VAL_00000010B == cDevState) + { + cSignalXiandiDetainFlag = SIGNAL_DETAIN_XIANDI_NO; /*ڳվ۳*/ + } + else if (BIT_VAL_00000001B == cDevState) + { + cSignalXiandiDetainFlag = SIGNAL_DETAIN_XIANDI; /*ڳվ۳*/ + } + else + { + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse ManufacDef Error: Signal Id[%d] Xiandi Detain Error", srcCiId, pCiRecptStru->signalIdBuf[ii]); + cRetVal = CI_ERROR; /*Ϣ쳣ʧ*/ + } + + if ((DEV_NUM_PER_BYTE - 1U) == cTempCounter) + { + wParsedLen++; /*һֽڣȼ1*/ + } + else + { + /**/ + } + wParsedInfoNum++; /*һϢ1*/ + + if (CI_SUCCESS == cRetVal) + { + wDevId = pCiRecptStru->signalIdBuf[ii]; + cDevBelongCiId = GetSignalBelongCiId(wDevId); /*ȡźŻ*/ + if ((cLocalCiId != cDevBelongCiId) && (0U != cDevBelongCiId)) + { + /*洢DZ豸״̬*/ + wDevIndex = GetSignalConfigBufIndex(wDevId); + pstrSignalData[wDevIndex].SignalId = wDevId; + SetSignalDetainFlag(wDevId, cSignalAtsDetainFlag); /*źŻĿ۳*/ + SetSignalDetainFlag(wDevId, cSignalXiandiDetainFlag); /*źŻĿ۳*/ + } + else + { + /**/ + } + } + else + { + cRetVal = CI_ERROR; + break; + } + } + } + else + { + cRetVal = CI_ERROR; + } + + if (CI_SUCCESS == cRetVal) + { + if ((DEV_NUM_PER_BYTE - 1U) != cTempCounter) + { + wParsedLen++; /*һֽδ4ϢҪ1*/ + } + else + { + /**/ + } + + *pItemLen = wParsedLen; + } + else + { + cRetVal = CI_ERROR; + } + } + else + { + /*ԶϢ汾һ£ʧ*/ + cRetVal = CI_ERROR; + debug_infor_printf((const)"\nHlht Ci Id[%d] Parse Error: ManufacDef Info Ver Is Diff.", srcCiId); + } + } + else + { + cRetVal = CI_ERROR; /*ηǷȡʧܣʧ*/ + } + return cRetVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h index c19955d..929eb1b 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.h @@ -58,6 +58,8 @@ #define MANUFAC_DEF_STATUS_PACKET ((UINT16)0x020c) /*ԶϢ*/ +#define MANUFAC_DEF_INFO_VER_WL ((UINT8)0x01) /*ԶϢ汾΢*/ + #define PSD_NUM_PER_BYTE ((UINT8)2) /*PSDֽڳ*/ #define BIT_NUM_PER_PSD ((UINT8)(8U / PSD_NUM_PER_BYTE)) /*PSDֽڳ*/ #define ESB_NUM_PER_BYTE ((UINT8)4) /*ͣťֽڳ*/ @@ -69,6 +71,9 @@ #define TSR_NUM_PER_BYTE ((UINT8)4) /*TSRťֽڳ*/ #define BIT_NUM_PER_TSR ((UINT8)(8U / TSR_NUM_PER_BYTE)) /*TSRֽڳ*/ +#define DEV_NUM_PER_BYTE ((UINT8)4U) /*ÿһֽڰ豸Ŀ*/ +#define BIT_NUM_PER_DEV ((UINT8)(8U / DEV_NUM_PER_BYTE)) /*ÿһ豸ռλĿ*/ + #define PACKET_LENGTH_LEN ((UINT8)2) /*ܳ*/ #define PACKET_TYPE_LEN ((UINT8)2) /*ͳ*/ @@ -95,13 +100,13 @@ #define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*ȡ*/ #define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*Ĭֵ*/ -#define CICI_VERSION ((UINT16)23) /*ciciӿڰ汾ţÿ޸ĽӿҪ汾šLast Modified On 2025.03.10*/ +#define CICI_VERSION ((UINT16)29) /*ciciӿڰ汾ţÿ޸ĽӿҪ汾šLast Modified On 2025.09.22*/ #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)/*һݳ*/ #define CICI_ONE_LOGSEC_LEN ((UINT16)10)/*һ߼ݳ*/ -#define CICI_ONE_SIGNAL_LEN ((UINT16)9)/*һźŻݳ*/ -#define CICI_ONE_PSD_LEN ((UINT16)4)/*һݳ*/ +#define CICI_ONE_SIGNAL_LEN ((UINT16)11)/*һźŻݳ*/ +#define CICI_ONE_PSD_LEN ((UINT16)5)/*һݳ*/ #define CICI_ONE_ESB_LEN ((UINT16)4)/*һESBݳ*/ #define CICI_ONE_ROUTE_LEN ((UINT16)12)/*һ·ݳ*/ #define CICI_ONE_PHYSEC_LOCKSTATE_LEN ((UINT16)10)/*һ״̬ݳ*/ @@ -233,9 +238,18 @@ extern "C" { UINT8 cSourceCiId; /*ͷID*/ UINT8 cTargetCiId; /*շID*/ UINT8 cPlatFormNum; /*ѩվ̨*/ - UINT32 dwPlatFormId[CI_TO_CI_AREA_SNOW_SUM_MAX]; /*ѩվ̨ͨID*/ + AreaSnowInfoStruct szPlatFormInfo[CI_TO_CI_AREA_SNOW_SUM_MAX]; /*ѩϢ*/ } ToCiAreaSnowStruct; + /*RCITEгϢ*/ + typedef struct S_ToCiAreaIteCutStruct + { + UINT8 cSourceCiId; /*ͷID*/ + UINT8 cTargetCiId; /*շID*/ + UINT8 cAreaIteCutNum; /*ITEг*/ + UINT16 wAreaIteCutId[CI_TO_CI_AREA_SNOW_SUM_MAX]; /*ID*/ + } ToCiAreaIteCutStruct; + /*******************************ȫֱ*******************************/ extern ToCiCommandDataStruct RecvCiCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX]; extern UINT16 RecvCiCmdDataStruCurSum; @@ -252,6 +266,8 @@ extern "C" { extern UINT8 SendCiDrCmdSum; extern ToCiAreaSnowStruct szRecvCiAreaSnow[CI_COM_CI_MAX_NUM]; extern ToCiAreaSnowStruct szSendCiAreaSnow[CI_COM_CI_MAX_NUM]; + extern ToCiAreaIteCutStruct szRecvCiAreaIteCut[CI_COM_CI_MAX_NUM]; + extern ToCiAreaIteCutStruct szSendCiAreaIteCut[CI_COM_CI_MAX_NUM]; /* * CI @@ -721,21 +737,23 @@ UINT8 CiToCiEnvelopeCheck(const UINT8* dataBuf, UINT16* index); * ͸ѩϢ * ˵ UINT8 cSrcCiId ͷCI * UINT8 cDstCiId շCI -* UINT32 dwAreaSnowId ѩվ̨ID -* ֵ -* Created By LQ 2023.11.16 +* UINT16 wAreaSnowId ID +* UINT8 cAreaSnowLevel ʪ켶 +* ֵ +* Modified By LQ 2025.5.28 */ -void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId); +void AddCiRecvAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaSnowId, UINT8 cAreaSnowLevel); /* * ӱ͸ָIDѩϢ * ˵ UINT8 cSrcCiId ͷCI * UINT8 cDstCiId շCI -* UINT32 dwAreaSnowId ѩվ̨ID -* ֵ -* Created By LQ 2023.11.16 +* UINT16 wAreaId ID +* UINT8 cAreaSnowLevel ʪȼ +* ֵ +* Modified By LQ 2025.05.28 */ -void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT32 dwAreaSnowId); +void AddCiSendAreaSnowInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId, UINT8 cAreaSnowLevel); /* * ȡ͸ѩϢ @@ -909,6 +927,90 @@ UINT8 PackHlhtPacketHeadPha1(UINT8 dstCiId, UINT8 * pInputData, UINT16 * pHeadDa */ UINT8 InitNeedOlapUsingOtherCiProSw(void); +/* +* ͸ITEгϢ +* ˵const UINT8 cSrcCiId ͷCI +* ֵ +* Created By LQ 2025.04.14 +*/ +void ClearCiRecvAreaIteCutInfo(const UINT8 cSrcCiId); + +/* +* ͸ITEгϢ +* ˵ +* ֵ +* Created By LQ 2025.04.14 +*/ +void ClearCiSendAreaIteCutInfo(void); + +/* +* ȡ͸ITEгϢ +* ˵ +* ֵ ITEгϢ +* Created By LQ 2025.04.14 +*/ +ToCiAreaIteCutStruct* GetCiRecvAreaIteCutInfo(void); + +/* +* ȡ͸ָIDITEгϢ +* ˵const UINT8 cTargetCiId Ŀ +* ֵ͸ITEгϢ +* Created By LQ 2023.11.16 +*/ +ToCiAreaIteCutStruct* GetCiSendAreaIteCutInfo(const UINT8 cTargetCiId); + +/* +* ͸ITEгϢ +* ˵UINT8 cSrcCiId ͷCI +* UINT8 cDstCiId շCI +* UINT16 wAreaId ID +* ֵ +* Created By LQ 2025.04.14 +*/ +void AddCiRecvAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId); + +/* +* ӱ͸ָIDITEгϢ +* ˵UINT8 cSrcCiId ͷCI +* UINT8 cDstCiId շCI +* UINT16 wAreaId ID +* ֵ +* Created By LQ 2025.04.14 +*/ +void AddCiSendAreaIteCutInfo(UINT8 cSrcCiId, UINT8 cDstCiId, UINT16 wAreaId); + +/* +* УCI͵ĴITEг +* ˵const UINT8* dataBuf ݣ +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2024.04.15 +*/ +UINT8 CheckCiToCiAreaIteCutData(const UINT8* dataBuf, UINT16* index); + +/* +* 黥ͨԶ֡ +* ˵UINT8 *pInputData ָ +* UINT16 *pItemLen еijȣΣ +* const UINT8 dstCiId ĿID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.05.23 +*/ +UINT8 PackManufacDefPacket(UINT8* pInputBuf, UINT16* pItemLen, const UINT8 dstCiId); + +/* +* ͨԶ֡ +* ˵const UINT8 *pInputData ָ +* UINT16 *pItemLen еij +* const UINT8 srcCiId ԴID +* ֵCI_SUCCESS 1 ɹ +* CI_ERROR 0 ʧ +* Created By LQ 2025.05.26 +*/ +UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen, const UINT8 srcCiId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c index 7d9949c..0b4c017 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c @@ -31,6 +31,7 @@ PlatHeartDataStruct RecvHeartDataStru = { 0U }; /*ƽ̨֡ݽṹ*/ PlatGPIODataStruct RecvPlatDataStruGPIO = { 0U };/*ƽ̨0x2D֡ݽṹ GPIOɼ״̬*/ +PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance = { 0U };/*ƽ̨Ӳɼ̼¼*/ /* * źŻλ @@ -61,7 +62,13 @@ UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da UINT8 detainBtnErrFlag = SIGNAL_ZFS_BTN_ERR_FLAG_NO; /*۳ťϱ־*/ UINT8 SignalCrossState = 0U; UINT8 SigVobcCrossInPhyOccSta = 0U; + UINT8 chDsFlag = SIGNAL_DS_BREAK_YES; + UINT8 CiPattern = 0u; + UINT8 chDsnLinSwitch = 0U; + UINT8 cDevState = 0U; + chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); + CiPattern = GetLocalCiPattern(); switch (MaskType) { case MASK_TYPE_SIGNAL_RED:/*λ*/ @@ -280,9 +287,70 @@ UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da } break; case MASK_TYPE_SIGNAL_BREAK:/*źŻ˿λ*/ - if (SIGNAL_SHOWCOLOUR_REDBREAK == GetSignalCurColor(DeviceId)) + if ((CI_PATTERN_FULL_ELECTRONIC == CiPattern) && (FUNC_SWITCH_OFF == chDsnLinSwitch))/*ȫ*/ { - + 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); + if (SIGNAL_SHOWCOLOUR_REDBREAK == getState) + { + ; /*0˿*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } + } + break; + case MASK_TYPE_SIGNAL_GREENBREAK:/*źŻ˿λ*/ + chDsFlag = GetSignalGreenDsBreakFlag(DeviceId); + if (SIGNAL_DS_BREAK_YES== chDsFlag) + { + ; /*0Ϊ˿*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_SIGNAL_YELLOWBREAK:/*źŻ˿λ*/ + chDsFlag = GetSignalYellowDsBreakFlag(DeviceId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + ; /*0Ϊ˿*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_SIGNAL_WHITEBREAK:/*źŻ˿λ*/ + chDsFlag = GetSignalWhiteDsBreakFlag(DeviceId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + ; /*0Ϊ˿*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } + break; + case MASK_TYPE_SIGNAL_BLUEBREAK:/*źŻ˿λ*/ + chDsFlag = GetSignalBlueDsBreakFlag(DeviceId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + ; /*0Ϊ˿*/ } else { @@ -402,6 +470,28 @@ UINT8 SignalMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da /*λֵ0*/ } break; + case MASK_TYPE_SIGNAL_DET_CUT_VALID: + cDevState = GetDetCutBtnState(DeviceId); + if (SIGNAL_DETAIN_CUT_VALID_YES == cDevState) + { + SetMaskValue(MaskId, dataBuf); /*۳·ťЧλֵ1*/ + } + else + { + /*۳·ťЧλֵ0*/ + } + break; + case MASK_TYPE_SIGNAL_DET_CUT_ERR: + cDevState = GetSignalDetCutBtnErrFlag(DeviceId); + if (SIGNAL_ZFS_BTN_ERR_FLAG_YES == cDevState) + { + SetMaskValue(MaskId, dataBuf); /*۳·ťϣλֵ1*/ + } + else + { + /*۳·ťδϣλֵ0*/ + } + break; default: returnValue = CI_ERROR; break; @@ -648,6 +738,18 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da SetMaskValue(MaskId, dataBuf); } break; + case MASK_TYPE_SWITCH_JICHA: + /*̬̬λ: 28.0.0.14ݽṹʹ*/ + switchCurPosition = GetSwitchJichaState(DeviceId); + if ((SWITCH_POSITION_SUDDEN_JICHA == switchCurPosition)|| (SWITCH_POSITION_DYNAMIC_JICHA == switchCurPosition)) + { + ; /*ЧֵΪ0*/ + } + else + { + SetMaskValue(MaskId, dataBuf); + } + break; default: returnValue = CI_ERROR; break; @@ -1456,6 +1558,7 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat UINT8 firstLogicOccuState = GetLogSecCurOccupyState(GetRouteInFirstLogSecId(DeviceId)); UINT8 dcQState = GetRouteDCQState(DeviceId);/*·״̬*/ UINT8 dcTState = GetRouteDCTYState(DeviceId);/*·ͬ״̬*/ + UINT8 chDCAgreeBtnErrState = GetRouteDcAgreeButtonErrState(DeviceId);/*·ͬⰴť״̬*/ UINT8 RouteCiId = 0u; /*·*/ UINT8 CiTypeOfRoute = 0u; /*ǰ·*/ UINT8 ciTrainTestState = 0u; /*Գ״̬*/ @@ -1656,6 +1759,20 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat } break; + case MASK_TYPE_ROUTE_DC_AGREE_ERR:/*ͬⰴťλ*/ + { + if (ROUTE_DC_AGREE_BUTTON_OK == chDCAgreeBtnErrState) + { + /*ͬⰴťδϣ1*/ + SetMaskValue(MaskId, dataBuf); + } + else + { + /*ͬⰴťϣ0*/ + } + } + break; + case MASK_TYPE_AUTOROUTE_STATE:/*Զͨ·״̬λ*/ if (AUTO_ROUTE_SET_YES == GetAutoRouteSetFlag(DeviceId)) {/*Զͨ·־*/ @@ -1761,6 +1878,9 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data UINT8 chPsdVideoQkDriveState = 0U;/*ȷƵ״̬*/ UINT8 chRtnIndicatorDevId = 0U;/*۷豸ID*/ UINT8 chNonRrnAdhesionState = 0U;/*۷ťճ״̬*/ + UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*ر·ťϱ־*/ + UINT16 wEsbCollRelayId = 0U; /*ESBɼ̵ID*/ + UINT8 cPsdExceptOpenState = 0U; /*쳣״̬*/ chRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId); virtualZDZFBelongCiId = GetVirtualZDZFBelongCiId(); @@ -1872,6 +1992,29 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data /*λֵ0*/ } break; + case MASK_TYPE_CUT_ESP_FAULT: + cEsbCutErrFlag = GetEsbCutErrFlag(DeviceId); + if (ESB_ERROR_FLAG_YES == cEsbCutErrFlag) + { + SetMaskValue(MaskId, dataBuf); + } + else + { + /*λֵ0*/ + } + break; + case MASK_TYPE_ESP_PRESS_STATE: + 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_PSD_STATE_ATS:/*վ̨״̬λ;ATS*/ /*ȡŻ״̬״̬*/ mutualLockState = GetPsdMutualLockRemoveState(DeviceId); @@ -2089,6 +2232,17 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data /*Ƶ״̬Ϊ˻ЧλЧ*/ } break; + case MASK_TYPE_PSD_EXCEPT_OPEN: /*վ̨쳣״̬λ-ZC/ATS*/ + cPsdExceptOpenState = GePsdExceptOpenState(DeviceId); + if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState) + { + SetMaskValue(MaskId, dataBuf); /*PSDδ쳣򿪣λ1*/ + } + else + { + /*PSD쳣򿪣λ0*/ + } + break; default: returnValue = CI_ERROR; break; @@ -2638,10 +2792,10 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) /*߼һ£ռѹ*/ || (SECTION_OCCUPY_YES == GetPhySecCurMergeState(overlapContainPhySecIdBuf[ii]))) -#endif - { - returnValue = CI_ERROR; - break; +#endif + { + returnValue = CI_ERROR; + break; } } @@ -2745,6 +2899,22 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) returnValue = CI_ERROR; } } + + /*ղ̵״̬*/ + if (CI_SUCCESS == returnValue) + { + returnValue = OverlapZhaoChaRelayCheck(rtOverlapLockedId, ESEND_LEVEL_ZERO); + + if (CI_SUCCESS == returnValue) + { + returnValue = CI_SUCCESS; + } + else + { + /*ȴղ̵»Զ˼鲻ʧ*/ + returnValue = CI_ERROR; + } + } } else { @@ -2764,18 +2934,29 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) void PackCiToCimCommData(void) { /*ʼ*/ - UINT16 i = 0u; - UINT8 j = 0u; - UINT8 ciToCimDataBuffer[CI_TO_CIM_DATA_LEN_MAX] = { 0u }; + UINT16 i = 0U; + UINT8 j = 0U; + UINT8 ciToCimDataBuffer[CI_TO_CIM_DATA_LEN_MAX] = { 0U }; UINT8 deviceSum = 0u; /*ͨ豸*/ UINT8* pDeviceIdBuf = NULL; /*豸ID*/ UINT8 transmitState = 0u; /*ͨ״̬*/ UINT8 transmitDevSum = 0U; UINT16 transmitDevIndex = 0U; + UINT8 cLocalWorkMode = 0U; /*ģʽ*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT32 dwCurCycNum = 0U; /*ǰں*/ + UINT32 dwRecvCycNum = 0U; /*յԷʱں*/ + UINT16 wTempCommVobcNumIndex = 0U; /*ͨųλ*/ + UINT8 cCommVobcNum = 0U; /*ͨų*/ + UINT8 cVobcToCiDataSum = 0U; + VobcToCiDataStruct* pstrVobcToCiData = NULL; + UINT32 dwCommBadCycCount = 0U; - - ciToCimDataBuffer[i++] = GetLocalRcWorkMode(); - ciToCimDataBuffer[i++] =GetSystemParaLocalCiId (); + cLocalWorkMode = GetLocalRcWorkMode(); + cLocalCiId = GetSystemParaLocalCiId(); + dwCurCycNum = Get2oo2CurCycleNum(); + ciToCimDataBuffer[i++] = cLocalWorkMode; + ciToCimDataBuffer[i++] = cLocalCiId; transmitDevIndex = i; i++; @@ -2788,7 +2969,19 @@ void PackCiToCimCommData(void) transmitState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_ZC, 0U); ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_ZC; ciToCimDataBuffer[i++] = pDeviceIdBuf[0]; - ciToCimDataBuffer[i++] = 0U; + + /*ZCͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_ZC, pDeviceIdBuf[0]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2813,7 +3006,19 @@ void PackCiToCimCommData(void) transmitDevSum++; ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_TMC; ciToCimDataBuffer[i++] = pDeviceIdBuf[0]; - ciToCimDataBuffer[i++] = 0U; + + /*TMCͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_TMC, pDeviceIdBuf[0]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2840,8 +3045,19 @@ void PackCiToCimCommData(void) transmitDevSum++; ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_OC; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - /*ͨ*/ - ciToCimDataBuffer[i++] = 0U; + + /*OCͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_OC, pDeviceIdBuf[j]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2873,8 +3089,19 @@ void PackCiToCimCommData(void) ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_PSC; /*ID*/ ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - /*ͨ*/ - ciToCimDataBuffer[i++] = 0U; + + /*PSCͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_PSC, pDeviceIdBuf[j]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2905,8 +3132,19 @@ void PackCiToCimCommData(void) transmitDevSum++; ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_AXIS; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - /*ͨ*/ - ciToCimDataBuffer[i++] = 0U; + + /*ͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_AXIS, pDeviceIdBuf[j]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2939,8 +3177,18 @@ void PackCiToCimCommData(void) ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_CI; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - ciToCimDataBuffer[i++] = 0U; - /*ͨ*/ + /*RC/CIͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_CI, pDeviceIdBuf[j]); + if ((0U != dwRecvCycNum) && (UINT8_MAX > (dwCurCycNum - dwRecvCycNum))) + { + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - dwRecvCycNum); /*ͨ豸*/ + } + else + { + ciToCimDataBuffer[i] = (UINT8)UINT8_MAX; /*ͨ豸*/ + } + i++; + if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { ciToCimDataBuffer[i++] = CI_AND_OTHER_TRANSMIT_GOOD; @@ -2971,7 +3219,7 @@ void PackCiToCimCommData(void) ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_XIANDI; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - ciToCimDataBuffer[i++] = 0U; + ciToCimDataBuffer[i++] = (UINT8)UINT8_MAX; /*ͨ*/ if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { @@ -3004,7 +3252,7 @@ void PackCiToCimCommData(void) ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_ATS; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - ciToCimDataBuffer[i++] = 0U; + ciToCimDataBuffer[i++] = (UINT8)UINT8_MAX; /*ͨ*/ if (TRANSMIT_2OO2_STATE_GOOD == transmitState) { @@ -3023,6 +3271,42 @@ void PackCiToCimCommData(void) } ciToCimDataBuffer[transmitDevIndex] =transmitDevSum; + + /*ͨųͨ*/ + wTempCommVobcNumIndex = i; /*ͨųλ*/ + i++; + + cVobcToCiDataSum = GetVobcToCiSum(); + pstrVobcToCiData = GetVobcToCiDataStru(); + + if ((0U < cVobcToCiDataSum) && (VOBC_TO_CI_SUM_MAX > cVobcToCiDataSum) && (NULL != pstrVobcToCiData)) + { + dwCommBadCycCount = GetCiAndVobcTransBadEnsureCnt(); + for (j = 0U; j < cVobcToCiDataSum; j++) + { + if (dwCommBadCycCount >= (dwCurCycNum - pstrVobcToCiData[j].ComStartCycle)) + { + ciToCimDataBuffer[i] = (UINT8)pstrVobcToCiData[j].VobcId; /*ͨųID*/ + i++; + ciToCimDataBuffer[i] = (UINT8)(dwCurCycNum - pstrVobcToCiData[j].ComStartCycle); /*ͨų*/ + i++; + cCommVobcNum++; + } + else + { + /*ͨųʱһгͨ*/ + } + } + } + else + { + cCommVobcNum = 0U; + } + + ciToCimDataBuffer[wTempCommVobcNumIndex] = cCommVobcNum; /*ͨų*/ + + debug_infor_printf((const)"\nCIM_SEND_COMM:%d", i); + debug_out_array(0xAA, ciToCimDataBuffer, i); /*CIM*/ (void)DarkInfoPack(CIM_INFO_COMM_STATE, ciToCimDataBuffer, i); @@ -3623,13 +3907,13 @@ void PackCiToCimVerData(void) ciToCimDataBuffer[i++] = (UINT8)((pTiocFsVersion[2] << 4U) + pTiocFsVersion[3]); /*汾*/ ciToCimDataBuffer[i++] = VER_SOFT_PRODUCT; - ciToCimDataBuffer[i++] = VER_SOFT_MODUAL_APP >> 2U; - ciToCimDataBuffer[i++] = (VER_SOFT_MODUAL_APP << 6U) + (VER_SOFT_MIANVERSION & (UINT8)0x3F); + ciToCimDataBuffer[i++] = VER_SOFT_MODUAL_APP; + ciToCimDataBuffer[i++] = VER_SOFT_MIANVERSION; ciToCimDataBuffer[i++] = VER_SOFT_SUBVERSION; /*鼯ɰ汾*/ ciToCimDataBuffer[i++] = VER_INTE_PROJECT; ciToCimDataBuffer[i++] = VER_INTE_PRODUCT; - ciToCimDataBuffer[i++] = (UINT8)((UINT8)VER_INTE_EXE << 1U) + ((UINT8)VER_INTE_TIME >> 7U); + ciToCimDataBuffer[i++] = VER_INTE_EXE; ciToCimDataBuffer[i++] = VER_INTE_TIME; /*CIM*/ (void)DarkInfoPack(CIM_INFO_VER_INFO, ciToCimDataBuffer, i); @@ -3662,11 +3946,15 @@ void PackCiToCimDeviceData(void) FloodGateDataStruct* pFloodGateData = NULL; UINT8 cRcWorkMode = GetLocalRcWorkMode(); UINT8 chSwitchJichaState = 0U; + UINT8 chSwitchCurPos = 0U; + UINT32 switchCollTolerateCycNum = 0U; + UINT8 chSwitchBDState = SEND_CIM_COLLTOLERATE_NO; + UINT8 chSignalDsState = 0xFFU; /*͵*/ pSwitchData = GetSwitchData(); deviceNum = GetSwitchCurSum(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/**/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++)/*͸ĵĿ*/ { @@ -3680,8 +3968,8 @@ void PackCiToCimDeviceData(void) ShortToChar(pSwitchData[deviceId].SwitchId, &ciToCimDataBuffer[ii]);/*ID*/ ii += 2u; - chSwitchJichaState = GetSwitchJichaState(deviceId); + chSwitchCurPos = GetSingleSwitchCurPosition(pSwitchData[deviceId].SwitchId);/*״̬*/ if (SWITCH_POSITION_DYNAMIC_JICHA == chSwitchJichaState) { ciToCimDataBuffer[ii++] = 0x20U;/*̬*/ @@ -3693,7 +3981,7 @@ void PackCiToCimDeviceData(void) } else { - ciToCimDataBuffer[ii++] = pSwitchData[deviceId].SingleSwitchCurPosition;/*ǰλ*/ + ciToCimDataBuffer[ii++] = chSwitchCurPos;/*ǰλ*/ } @@ -3702,13 +3990,35 @@ void PackCiToCimDeviceData(void) ciToCimDataBuffer[ii++] = pSwitchData[deviceId].SwitchByPassState; /*·״̬*/ ciToCimDataBuffer[ii++] = pSwitchData[deviceId].ConnetSwitchDsState; /*ߵ״̬*/ + + switchCollTolerateCycNum = GetSwitchCollTolerateCycNum(pSwitchData[deviceId].SwitchId); + if (0u < switchCollTolerateCycNum) + { + if (SWITCH_POSITION_DINGWEI == chSwitchCurPos) + { + chSwitchBDState = SEND_CIM_COLLTOLERATE_DW;/*̺λ*/ + } + else if (SWITCH_POSITION_FANWEI == chSwitchCurPos) + { + chSwitchBDState = SEND_CIM_COLLTOLERATE_FW;/*̺λ*/ + } + else + { + chSwitchBDState = SEND_CIM_COLLTOLERATE_NO; + } + } + else + { + chSwitchBDState = SEND_CIM_COLLTOLERATE_NO;/*޲*/ + } + ciToCimDataBuffer[ii++] = chSwitchBDState; /*״̬*/ } /*źŻ*/ deviceNum = GetSignalCurSum(); pSignalData = GetSignalData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*źŻ*/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++)/*͸źŻĿ*/ { @@ -3722,14 +4032,15 @@ void PackCiToCimDeviceData(void) ciToCimDataBuffer[ii++] = pSignalData[deviceId].CancelDetainBtnErrFlag;/*ȡ۳ťϱ־*/ ciToCimDataBuffer[ii++] = pSignalData[deviceId].DetainBtnErrFlag;/*۳ťϱ־*/ ciToCimDataBuffer[ii++] = pSignalData[deviceId].RealyDetainFlag;/*Ӳ߿۳־*/ - ciToCimDataBuffer[ii++] = pSignalData[deviceId].DsBreakFlag;/*˿˿־״̬*/ + chSignalDsState = GetSignalCurBreakFlag(pSignalData[deviceId].SignalId);/*˿˿־״̬*/ + ciToCimDataBuffer[ii++] = chSignalDsState; } /*************************************PSD״̬********************************************/ /*״̬*/ deviceNum = GetPsdSum(); pPsdData = GetPsdData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD*/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++)/*͸PsdĿ*/ { @@ -3766,13 +4077,15 @@ void PackCiToCimDeviceData(void) ciToCimDataBuffer[ii++] = pPsdData[deviceId].chVideoQkDriveState; /*Ƶ״̬*/ ShortToChar(pPsdData[deviceId].wVideoQkRelateVobcId, &ciToCimDataBuffer[ii]);/*ƵͶӦгID*/ ii += 2u; + ciToCimDataBuffer[ii] = pPsdData[deviceId].cPsdExceptOpenState; /*쳣״̬0x55-쳣򿪣0xAA-δ쳣*/ + ii++; } /*״̬*/ deviceNum = GetEsbSum(); pEsbData = GetEsbData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*ESB*/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++)/*͸PsdĿ*/ { @@ -3796,7 +4109,7 @@ void PackCiToCimDeviceData(void) /*״̬*/ deviceNum = GetSpksSum(); pSpksData = GetSpksData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*SPKS*/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++)/*͸PsdĿ*/ { @@ -3840,7 +4153,7 @@ void PackCiToCimDeviceData(void) /*ӡϴ*/ pWashMachineData = GetWashMachineData(); deviceNum = GetWashMachineSum(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*ϴ*/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++) { @@ -3881,7 +4194,7 @@ void PackCiToCimDeviceData(void) /*ӡ*/ deviceNum = GetGaragedoorSum(); pGrageDoorData = GetGaragedoorData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/**/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++) { @@ -3914,7 +4227,7 @@ void PackCiToCimDeviceData(void) /*ӡ*/ deviceNum = GetFloodGateCurSum(); pFloodGateData = GetFloodGateData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/**/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++) { @@ -3948,6 +4261,8 @@ void PackCiToCimDeviceData(void) } /*CIM*/ + debug_infor_printf((const)"\nCIM_SEND_DEVSTATE:%d", ii); + debug_out_array(0xAA, ciToCimDataBuffer, ii); (void)DarkInfoPack(CIM_INFO_DEVICE_STATE, ciToCimDataBuffer, ii); } @@ -4774,3 +5089,56 @@ void PackCiToCimFlyProtectData(void) } +/* +* CIM˫ϵIOɼһϢ +* ˵ void +* ֵ +*/ +void PackCiToCimCollDiffData(void) +{ + /*ʼ*/ + UINT8 ciToCimDataBuffer[CI_TO_CIM_DATA_LEN_MAX] = { 0U }; + UINT16 ii = 0u; + UINT8 jj = 0u; + UINT8 kk = 0u; + UINT8 diffPointSum = 0u;/*ÿOCIJһµλ*/ + IODiffDataStruct* tempDiffData = NULL; + + tempDiffData = GetIODiffData();/*ȡȽϲһµ*/ + + ciToCimDataBuffer[ii++] = gDiffDataOcNum; + + if (NULL != tempDiffData) + { + for (jj = 0u; jj < OC_SUM_MAX; jj++) + {/*ÿOC*/ + diffPointSum = tempDiffData[jj].DiffPointNum;/*һµĵλ*/ + if (0u < diffPointSum) + { + ciToCimDataBuffer[ii++] = tempDiffData[jj].OcId;/*OC id*/ + + ciToCimDataBuffer[ii++] = diffPointSum; + + for (kk = 0u; kk < diffPointSum; kk++) + {/*һµĵλ*/ + ciToCimDataBuffer[ii++] = tempDiffData[jj].LocalBoardAdd[kk]; /*һµλӦİ忨ַ*/ + ciToCimDataBuffer[ii++] = tempDiffData[jj].OtherBoardAdd[kk]; /*ϵİ忨ַ*/ + ciToCimDataBuffer[ii++] = tempDiffData[jj].TheDiffPoint[kk]; /*λ*/ + } + } + else + {/*ûвһµλ*/ + } + + } + } + else + {/**/ + } + + 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); +} \ 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 db381a3..1d00ae4 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h @@ -45,7 +45,6 @@ #include "../DataManage/PlatDataManage.h" #include "../IO/DeviceRelayDataProcess.h" - #ifdef __cplusplus extern "C" { #endif @@ -61,7 +60,7 @@ extern "C" { extern PlatHeartDataStruct RecvHeartDataStru; extern PlatGPIODataStruct RecvPlatDataStruGPIO; - + extern PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance; /* * źŻλ * ˵ UINT8 MaskType, λ @@ -380,6 +379,13 @@ void ParasePlantIOData(UINT8* dataBuf); */ void PackCiToCimFlyProtectData(void); +/* +* CIM˫ϵIOɼһϢ +* ˵ void +* ֵ +*/ +void PackCiToCimCollDiffData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h index 645a2b0..0e21919 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackDefine.h @@ -38,7 +38,7 @@ /*CI CI*/ #define RECVCI_CMD_DATA_STRU_SUM_MAX ((UINT16)100) /*CIݽṹֵ*/ #define SENDCI_CMD_DATA_STRU_SUM_MAX ((UINT16)100) /*CI͵ݽṹֵ*/ -#define CI_TO_CI_DATA_LEN_MAX ((UINT16)5000) /*CIֵ*/ +#define CI_TO_CI_DATA_LEN_MAX ((UINT16)5700) /*CIֵ*/ #define CI_TO_CI_AREA_SNOW_SUM_MAX ((UINT8)4) /*RC䷢͵ѩֵ*/ #define CI_TO_CI_LEAVE_LOGSEC_ROUTE_NUM ((UINT16)100) /*RC䷢͵ȥ߼μֵ*/ @@ -103,6 +103,7 @@ #define CIM_INFO_SIGNAL_DRIVOUT ((UINT16)0x2010) /*CIMźŻʱϢ*/ #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 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 5379e6d..a9fadef 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.c @@ -26,6 +26,11 @@ AtsMsgCfmStru g_strAtsDaCfmFst = { 0u }; /*ȡ AtsDaMsgStru g_strAtsDaMsgSnd = { 0u }; /*ȡѹٴϢ*/ AtsMsgCfmStru g_strAtsDaCfmSnd = { 0u }; /*ȡѹٴȷ*/ +AtsMsgCfmStru g_strSndAtsCfmFst = { 0U }; /*ڶATSԶɸѡ״ȷ*/ +AtsMsgCfmStru g_strSndAtsEaCfmFst = { 0U }; /*ڶATSȡɢ״ȷ*/ +AtsMsgCfmStru g_strSndAtsWlbCfmFst = { 0U }; /*ڶATS/ȡȫгƶ״ȷ*/ +AtsMsgCfmStru g_strSndAtsDaCfmFst = { 0U }; /*ڶATSȡѹ״ȷ*/ + /** * @brief ֡ * @param const UINT8* dataBuf, ݻ @@ -40,12 +45,27 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) UINT32 dwPrtclMsg = 0u; UINT8 chMsgId = 0u; UINT16 ii = 0u; + UINT16 jj = 0U; UINT32 dwDataVerLocal = 0u; UINT8 chMsgIndex = 0u; UINT8 chLocalId = 0u; UINT8 chTrainIndex = 0u; UINT16 wMsgLen = 0U; UINT16 wMsgLenCount = 0U; + UINT8 cAtsId = 0U; + UINT8 cStation = 0U; + UINT16 wIndex = 0U; + UINT8 cAtsSendRcId = 0U; + UINT32 dwTime = 0U; + UINT8 cTrainNum = 0U; + AtsScreenTrainInfoStru strTrainInfo[TRAIN_SUM_MAX] = { 0U }; + UINT32 dwTrainHlhtId = 0U; /*гͨID*/ + UINT8 cCmdType = 0U; /**/ + UINT8 cLineAttr = 0U; /*·*/ + UINT8 cDevType = 0U; /*豸*/ + UINT8 cDevNum = 0U; + UINT16 wDevId = 0U; + UINT8 szCrcTmp[1024] = { 0U }; if ((NULL != dataBuf) && (0u < dataLength)) { @@ -105,22 +125,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) { case MSG_TYPE_REQUEST_FIRST:/* Զɸѡ״Ϣ */ { - g_strAtsMsgFst.dwCycle = Get2oo2CurCycleNum(); - g_strAtsMsgFst.chAtsId = dataBuf[ii++]; - if (0U < g_strAtsMsgFst.chAtsId) + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsMsgFst.chFlag) || (g_strAtsMsgFst.wIndex == wIndex)) { - ; - } - else - { - chRtn = CI_ERROR; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsMsgFst.chStation = dataBuf[ii++]; - g_strAtsMsgFst.chIndex = dataBuf[ii++]; - if (0U < g_strAtsMsgFst.chIndex) + /*δյظյͬһATSһʱһATS·Զɸѡ״Ϣ*/ + g_strAtsMsgFst.dwCycle = Get2oo2CurCycleNum(); + g_strAtsMsgFst.chAtsId = dataBuf[ii++]; + if (0U < g_strAtsMsgFst.chAtsId) { ; } @@ -128,97 +139,228 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) { chRtn = CI_ERROR; } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsMsgFst.chTiocId = dataBuf[ii++]; - if (g_strAtsMsgFst.chTiocId == chLocalId) - { - ; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsMsgFst.dwTime = LongFromChar(&dataBuf[ii]); - ii += 4u; - g_strAtsMsgFst.chTrainNum = dataBuf[ii++]; - if ((0U < g_strAtsMsgFst.chTrainNum) && (ATS_GATEWAY_CI_TRAIN_MAX > g_strAtsMsgFst.chTrainNum)) + if (CI_SUCCESS == chRtn) { - for (chTrainIndex = 0u; chTrainIndex < g_strAtsMsgFst.chTrainNum; chTrainIndex++) + g_strAtsMsgFst.chStation = dataBuf[ii++]; + g_strAtsMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); + ii += 2U; + if (0U < g_strAtsMsgFst.wIndex) { - g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId = LongFromChar(&dataBuf[ii]); - ii += 4u; - if ((0U == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId) - || (UINT32_MAX == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId)) - { - chRtn = CI_ERROR; - } - g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - if ((0U == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId) - || (UINT32_MAX == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId)) - { - chRtn = CI_ERROR; - } - else - { - ; /*DO NOTHING*/ - } - - if ((0U == g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId) - || (UINT16_MAX == g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId)) - { - chRtn = CI_ERROR; - } - else - { - ; /*DO NOTHING*/ - } - - if (CI_SUCCESS == chRtn) - { - ; /**/ - } - else - { - break; - } + ; + } + else + { + chRtn = CI_ERROR; } } else { - chRtn = CI_ERROR; + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsMsgFst.chTiocId = dataBuf[ii++]; + if (g_strAtsMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsMsgFst.dwTime = LongFromChar(&dataBuf[ii]); + ii += 4u; + + g_strAtsMsgFst.chTrainNum = dataBuf[ii++]; + if ((0U < g_strAtsMsgFst.chTrainNum) && (ATS_GATEWAY_CI_TRAIN_MAX > g_strAtsMsgFst.chTrainNum)) + { + for (chTrainIndex = 0u; chTrainIndex < g_strAtsMsgFst.chTrainNum; chTrainIndex++) + { + g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId = LongFromChar(&dataBuf[ii]); + ii += 4u; + if ((0U == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId) + || (UINT32_MAX == g_strAtsMsgFst.strTrainInfo[chTrainIndex].dwTrainId)) + { + chRtn = CI_ERROR; + } + else + { + ; /*DO NOTHING*/ + } + + g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + if ((0U == g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId) + || (UINT16_MAX == g_strAtsMsgFst.strTrainInfo[chTrainIndex].wLgcId)) + { + chRtn = CI_ERROR; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + ; /**/ + } + else + { + break; + } + } + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsMsgFst.chFlag = FLAG_SET; + } + else + { + ; /*DO NOTHING*/ } } else { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsMsgFst.chFlag = FLAG_SET; - } - else - { - ; /*DO NOTHING*/ + /*ڶATS·Զɸѡ״Ϣ*/ + cAtsId = dataBuf[ii]; /*ATS ID*/ + ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /*վ*/ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /*б*/ + ii += 2U; + + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /*RC ID*/ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTime = LongFromChar(&dataBuf[ii]); /*һʱ*/ + ii += 4U; + + cTrainNum = dataBuf[ii]; + ii++; + if ((0U < cTrainNum) && (ATS_GATEWAY_CI_TRAIN_MAX > cTrainNum)) + { + for (chTrainIndex = 0U; chTrainIndex < cTrainNum; chTrainIndex++) + { + strTrainInfo[chTrainIndex].dwTrainId = LongFromChar(&dataBuf[ii]); + ii += 4U; + if ((0U == strTrainInfo[chTrainIndex].dwTrainId) + || (UINT32_MAX == strTrainInfo[chTrainIndex].dwTrainId)) + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Train Id[%d] Error\n", MSG_TYPE_REQUEST_FIRST, strTrainInfo[chTrainIndex].dwTrainId); + chRtn = CI_ERROR; + } + else + { + ; /*DO NOTHING*/ + } + + strTrainInfo[chTrainIndex].wLgcId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + + if ((0U == strTrainInfo[chTrainIndex].wLgcId) + || (UINT16_MAX == strTrainInfo[chTrainIndex].wLgcId)) + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse LogSec Id[%d] Error\n", MSG_TYPE_REQUEST_FIRST, strTrainInfo[chTrainIndex].wLgcId); + chRtn = CI_ERROR; + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + ; /**/ + } + else + { + break; + } + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Train Num[%d] Error\n", MSG_TYPE_REQUEST_FIRST, cTrainNum); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_REQUEST_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_REQUEST_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_REQUEST_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strSndAtsCfmFst.chFlag = FLAG_SET; + g_strSndAtsCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsCfmFst.chStation = cStation; + g_strSndAtsCfmFst.wIndex = wIndex; + g_strSndAtsCfmFst.dwTime = dwTime; + g_strSndAtsCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*վվ*/ + + /*CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + LongToChar(dwTime, &szCrcTmp[jj]); + jj += 4U; + szCrcTmp[jj] = cTrainNum; + jj++; + for (chTrainIndex = 0U; chTrainIndex < cTrainNum; chTrainIndex++) + { + LongToChar(strTrainInfo[chTrainIndex].dwTrainId, &szCrcTmp[jj]); + jj += 4U; + ShortToChar(strTrainInfo[chTrainIndex].wLgcId, &szCrcTmp[jj]); + jj += 2U; + } + g_strSndAtsCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; /*DO NOTHING*/ + } } break; } case MSG_TYPE_REQUEST_SECOND:/* ԶɸѡϢ */ { + g_strAtsMsgSnd.dwCycle = Get2oo2CurCycleNum(); g_strAtsMsgSnd.chAtsId = dataBuf[ii++]; if (0U < g_strAtsMsgSnd.chAtsId) @@ -233,8 +375,9 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) if (CI_SUCCESS==chRtn) { g_strAtsMsgSnd.chStation = dataBuf[ii++]; - g_strAtsMsgSnd.chIndex = dataBuf[ii++]; - if (0U < g_strAtsMsgSnd.chIndex) + g_strAtsMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); + ii += 2U; + if (0U < g_strAtsMsgSnd.wIndex) { ; } @@ -330,55 +473,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } case MSG_TYPE_EA_CANCLE_FIRST:/* ɢȡ״Ϣ */ { - g_strAtsEaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȡɢϢں */ - g_strAtsEaMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ - if (0U < g_strAtsEaMsgFst.chAtsId) + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsEaMsgFst.chFlag) || (g_strAtsEaMsgFst.wIndex == wIndex)) { - ; - } - else - { - chRtn = CI_ERROR; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsEaMsgFst.chStation = dataBuf[ii++]; /* վ */ - g_strAtsEaMsgFst.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsEaMsgFst.chIndex) - { - ; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsEaMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ - if (g_strAtsEaMsgFst.chTiocId == chLocalId) - { - ; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsEaMsgFst.dwEaTrainId = LongFromChar(&dataBuf[ii]); /* ɢгͨ */ - ii += 4u; - if ((0u < g_strAtsEaMsgFst.dwEaTrainId) && (UINT32_MAX > g_strAtsEaMsgFst.dwEaTrainId)) + /*δյظյͬһATSһʱһATS·ȡɢ״Ϣ*/ + g_strAtsEaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȡɢϢں */ + g_strAtsEaMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ + if (0U < g_strAtsEaMsgFst.chAtsId) { ; } @@ -387,52 +488,201 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) chRtn = CI_ERROR; } + if (CI_SUCCESS == chRtn) + { + g_strAtsEaMsgFst.chStation = dataBuf[ii++]; /* վ */ + g_strAtsEaMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsEaMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsEaMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ + if (g_strAtsEaMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsEaMsgFst.dwEaTrainId = LongFromChar(&dataBuf[ii]); /* ɢгͨ */ + ii += 4u; + if ((0u < g_strAtsEaMsgFst.dwEaTrainId) && (UINT32_MAX > g_strAtsEaMsgFst.dwEaTrainId)) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsEaMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4u; + + g_strAtsEaMsgFst.chType = dataBuf[ii];/* */ + ii++; + + if (ATS_EA_CMD_TYPE_CANCEL == g_strAtsEaMsgFst.chType) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsEaMsgFst.chLine = dataBuf[ii];/* */ + ii++; + if ((EA_AREA_ALL == g_strAtsEaMsgFst.chLine) || (EA_AREA_UP == g_strAtsEaMsgFst.chLine) || (EA_AREA_DOWN == g_strAtsEaMsgFst.chLine)) + { + g_strAtsEaMsgFst.chFlag = FLAG_SET; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; + } } else { - ; /*DO NOTHING*/ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsEaMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ - ii += 4u; - - g_strAtsEaMsgFst.chType = dataBuf[ii];/* */ + /*ڶATS·ȡɢ״Ϣ*/ + cAtsId = dataBuf[ii]; /* ATS */ ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* վ */ + ii++; - if (ATS_EA_CMD_TYPE_CANCEL == g_strAtsEaMsgFst.chType) + wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC */ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTrainHlhtId = LongFromChar(&dataBuf[ii]); /* ɢгͨ */ + ii += 4U; + if ((0U < dwTrainHlhtId) && (UINT32_MAX > dwTrainHlhtId)) + { + dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4U; + + cCmdType = dataBuf[ii]; /* */ + ii++; + if (ATS_EA_CMD_TYPE_CANCEL == cCmdType) + { + cLineAttr = dataBuf[ii];/* · */ + ii++; + if ((EA_AREA_ALL == cLineAttr) || (EA_AREA_UP == cLineAttr) || (EA_AREA_DOWN == cLineAttr)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Line Attr[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, cLineAttr); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Cmd Type[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, cCmdType); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Train Id[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, dwTrainHlhtId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_EA_CANCLE_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strSndAtsEaCfmFst.chFlag = FLAG_SET; + g_strSndAtsEaCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsEaCfmFst.chStation = cStation; + g_strSndAtsEaCfmFst.wIndex = wIndex; + g_strSndAtsEaCfmFst.dwTime = dwTime; + g_strSndAtsEaCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*վվ*/ + + /*CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]); + jj += 2U; + LongToChar(dwTrainHlhtId, &szCrcTmp[jj]); + jj += 4U; + LongToChar(dwTime, &szCrcTmp[jj]); + jj += 4U; + szCrcTmp[jj] = cCmdType; + jj++; + szCrcTmp[jj] = cLineAttr; + jj++; + g_strSndAtsEaCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else { ; } - else - { - chRtn = CI_ERROR; - } } - else - { - ; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsEaMsgFst.chLine = dataBuf[ii];/* */ - ii++; - if ((EA_AREA_ALL == g_strAtsEaMsgFst.chLine) || (EA_AREA_UP == g_strAtsEaMsgFst.chLine) || (EA_AREA_DOWN == g_strAtsEaMsgFst.chLine)) - { - g_strAtsEaMsgFst.chFlag = FLAG_SET; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; - } - break; } case MSG_TYPE_EA_CANCLE_SECOND:/* ɢȡϢ */ @@ -451,8 +701,9 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) if (CI_SUCCESS == chRtn) { g_strAtsEaMsgSnd.chStation = dataBuf[ii++]; /* վ */ - g_strAtsEaMsgSnd.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsEaMsgSnd.chIndex) + g_strAtsEaMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsEaMsgSnd.wIndex) { ; } @@ -555,22 +806,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } case MSG_TYPE_WLB_SET_FIRST: /* ȫгƶһ */ { - g_strAtsWlbMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȫгƶں */ - g_strAtsWlbMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ - if (0U < g_strAtsWlbMsgFst.chAtsId) + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsWlbMsgFst.chFlag) || (g_strAtsWlbMsgFst.wIndex == wIndex)) { - ; - } - else - { - chRtn = CI_ERROR; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.chStation = dataBuf[ii++]; /* վ */ - g_strAtsWlbMsgFst.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsWlbMsgFst.chIndex) + /*δյظյͬһATSһʱһATS·ȫ߽ƶ״Ϣ*/ + g_strAtsWlbMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȫгƶں */ + g_strAtsWlbMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ + if (0U < g_strAtsWlbMsgFst.chAtsId) { ; } @@ -578,96 +820,226 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) { chRtn = CI_ERROR; } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ - if (g_strAtsWlbMsgFst.chTiocId == chLocalId) + + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.chStation = dataBuf[ii++]; /* վ */ + g_strAtsWlbMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsWlbMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ + if (g_strAtsWlbMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.chBrakeType = dataBuf[ii++]; /* ƶͣƶƶ */ + if ((WLB_TYPE_RC == g_strAtsWlbMsgFst.chBrakeType) || (WLB_TYPE_PHYSEC == g_strAtsWlbMsgFst.chBrakeType)) + { + ; /* ƶͺϷ */ + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /* DO NOTHING */ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.chBrakeCount = dataBuf[ii++]; /* */ + if (1u == g_strAtsWlbMsgFst.chBrakeCount) + { + ; /* Ϸ,Ϊ1 */ + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /* DO NOTHING */ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.wBrakeIndex = ShortFromChar(&dataBuf[ii]); /* ID */ + ii += 2u; + + chRtn = WlbUrgentIdCheck(g_strAtsWlbMsgFst.chBrakeType, g_strAtsWlbMsgFst.wBrakeIndex); /*УIDǷϷ*/ + } + else + { + ; /* DO NOTHING */ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsWlbMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4u; + + g_strAtsWlbMsgFst.chType = dataBuf[ii];/* */ + ii++; + + if ((MSG_TYPE_WLB_SET == g_strAtsWlbMsgFst.chType) || (MSG_TYPE_WLB_CANCEL == g_strAtsWlbMsgFst.chType)) + { + g_strAtsWlbMsgFst.chFlag = FLAG_SET; + } + else + { + chRtn = CI_ERROR; + } + } + else { ; } - else - { - chRtn = CI_ERROR; - } } else { - ; /*DO NOTHING*/ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.chBrakeType = dataBuf[ii++]; /* ƶͣƶƶ */ - if ((WLB_TYPE_RC == g_strAtsWlbMsgFst.chBrakeType) || (WLB_TYPE_PHYSEC == g_strAtsWlbMsgFst.chBrakeType)) - { - ; /* ƶͺϷ */ - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /* DO NOTHING */ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.chBrakeCount = dataBuf[ii++]; /* */ - if (1u == g_strAtsWlbMsgFst.chBrakeCount) - { - ; /* Ϸ,Ϊ1 */ - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /* DO NOTHING */ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.wBrakeIndex = ShortFromChar(&dataBuf[ii]); /* ID */ - ii += 2u; - - chRtn = WlbUrgentIdCheck(g_strAtsWlbMsgFst.chBrakeType, g_strAtsWlbMsgFst.wBrakeIndex); /*УIDǷϷ*/ - } - else - { - ; /* DO NOTHING */ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsWlbMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ - ii += 4u; - - g_strAtsWlbMsgFst.chType = dataBuf[ii];/* */ + /*ڶATS·ȫ߽ƶ״Ϣ*/ + cAtsId = dataBuf[ii]; /* ATS */ ii++; - - if ((MSG_TYPE_WLB_SET == g_strAtsWlbMsgFst.chType) || (MSG_TYPE_WLB_CANCEL == g_strAtsWlbMsgFst.chType)) + if (0U < cAtsId) { - g_strAtsWlbMsgFst.chFlag = FLAG_SET; + cStation = dataBuf[ii]; /* վ */ + ii++; + + wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC */ + ii++; + if (cAtsSendRcId == chLocalId) + { + cDevType = dataBuf[ii]; /* ƶͣƶƶ */ + ii++; + if ((WLB_TYPE_RC == cDevType) || (WLB_TYPE_PHYSEC == cDevType)) + { + cDevNum = dataBuf[ii]; /* */ + ii++; + if (1U == cDevNum) + { + wDevId = ShortFromChar(&dataBuf[ii]); /* ID */ + ii += 2U; + + chRtn = WlbUrgentIdCheck(cDevType, wDevId); /*УIDǷϷ*/ + if (CI_SUCCESS == chRtn) + { + dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4U; + + cCmdType = dataBuf[ii]; /* */ + ii++; + if ((MSG_TYPE_WLB_SET == cCmdType) || (MSG_TYPE_WLB_CANCEL == cCmdType)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Cmd Type[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, cCmdType); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Dev Id[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, wDevId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Dev Num[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, cDevNum); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Dev Type[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, cDevType); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, wIndex); + chRtn = CI_ERROR; + } } else { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_WLB_SET_FIRST, cAtsId); chRtn = CI_ERROR; } - } - else - { - ; - } + if (CI_SUCCESS == chRtn) + { + g_strSndAtsWlbCfmFst.chFlag = FLAG_SET; + g_strSndAtsWlbCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsWlbCfmFst.chStation = cStation; + g_strSndAtsWlbCfmFst.wIndex = wIndex; + g_strSndAtsWlbCfmFst.dwTime = dwTime; + g_strSndAtsWlbCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*վվ*/ + + /*CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]); + jj += 2U; + szCrcTmp[jj] = cDevType; + jj++; + szCrcTmp[jj] = cDevNum; + jj++; + ShortToChar(wDevId, &szCrcTmp[jj]); + jj += 2U; + LongToChar(dwTime, &szCrcTmp[jj]); + jj += 4U; + szCrcTmp[jj] = cCmdType; + jj++; + g_strSndAtsWlbCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else + { + ; + } + } break; } case MSG_TYPE_WLB_SET_SECOND: /* ȫгƶ */ @@ -686,8 +1058,9 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) if (CI_SUCCESS == chRtn) { g_strAtsWlbMsgSnd.chStation = dataBuf[ii++]; /* վ */ - g_strAtsWlbMsgSnd.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsWlbMsgSnd.chIndex) + g_strAtsWlbMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsWlbMsgSnd.wIndex) { ; } @@ -801,55 +1174,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) } case MSG_TYPE_DA_CANCLE_FIRST:/* ѹȡ״Ϣ */ { - g_strAtsDaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȡѹϢں */ - g_strAtsDaMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ - if (0U < g_strAtsDaMsgFst.chAtsId) + wIndex = ShortFromChar(&dataBuf[ii + 2U]); + if ((FLAG_SET != g_strAtsDaMsgFst.chFlag) || (g_strAtsDaMsgFst.wIndex == wIndex)) { - ; - } - else - { - chRtn = CI_ERROR; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsDaMsgFst.chStation = dataBuf[ii++]; /* վ */ - g_strAtsDaMsgFst.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsDaMsgFst.chIndex) - { - ; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsDaMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ - if (g_strAtsDaMsgFst.chTiocId == chLocalId) - { - ; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; /*DO NOTHING*/ - } - if (CI_SUCCESS == chRtn) - { - g_strAtsDaMsgFst.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* ѹгͨ */ - ii += 4u; - if ((0u < g_strAtsDaMsgFst.dwDaTrainId) && (UINT32_MAX > g_strAtsDaMsgFst.dwDaTrainId)) + /*δյظյͬһATSһʱһATS·ȡѹ״Ϣ*/ + g_strAtsDaMsgFst.dwCycle = Get2oo2CurCycleNum(); /* յȡѹϢں */ + g_strAtsDaMsgFst.chAtsId = dataBuf[ii++]; /* ATS */ + if (0U < g_strAtsDaMsgFst.chAtsId) { ; } @@ -858,52 +1189,201 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) chRtn = CI_ERROR; } + if (CI_SUCCESS == chRtn) + { + g_strAtsDaMsgFst.chStation = dataBuf[ii++]; /* վ */ + g_strAtsDaMsgFst.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsDaMsgFst.wIndex) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsDaMsgFst.chTiocId = dataBuf[ii++]; /* TIOC */ + if (g_strAtsDaMsgFst.chTiocId == chLocalId) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; /*DO NOTHING*/ + } + if (CI_SUCCESS == chRtn) + { + g_strAtsDaMsgFst.dwDaTrainId = LongFromChar(&dataBuf[ii]); /* ѹгͨ */ + ii += 4u; + if ((0u < g_strAtsDaMsgFst.dwDaTrainId) && (UINT32_MAX > g_strAtsDaMsgFst.dwDaTrainId)) + { + ; + } + else + { + chRtn = CI_ERROR; + } + + } + else + { + ; /*DO NOTHING*/ + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsDaMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4u; + + g_strAtsDaMsgFst.chType = dataBuf[ii];/* */ + ii++; + + if (ATS_DA_CMD_TYPE_CANCEL == g_strAtsDaMsgFst.chType) + { + ; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; + } + + if (CI_SUCCESS == chRtn) + { + g_strAtsDaMsgFst.chLine = dataBuf[ii];/* */ + ii++; + if ((DA_AREA_ALL == g_strAtsDaMsgFst.chLine) || (DA_AREA_UP == g_strAtsDaMsgFst.chLine) || (DA_AREA_DOWN == g_strAtsDaMsgFst.chLine)) + { + g_strAtsDaMsgFst.chFlag = FLAG_SET; + } + else + { + chRtn = CI_ERROR; + } + } + else + { + ; + } } else { - ; /*DO NOTHING*/ - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsDaMsgFst.dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ - ii += 4u; - - g_strAtsDaMsgFst.chType = dataBuf[ii];/* */ + /*ڶATS·ȡѹ״Ϣ*/ + cAtsId = dataBuf[ii]; /* ATS */ ii++; + if (0U < cAtsId) + { + cStation = dataBuf[ii]; /* վ */ + ii++; - if (ATS_DA_CMD_TYPE_CANCEL == g_strAtsDaMsgFst.chType) + wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < wIndex) + { + cAtsSendRcId = dataBuf[ii]; /* TIOC */ + ii++; + if (cAtsSendRcId == chLocalId) + { + dwTrainHlhtId = LongFromChar(&dataBuf[ii]); /* ѹгͨ */ + ii += 4U; + if ((0U < dwTrainHlhtId) && (UINT32_MAX > dwTrainHlhtId)) + { + dwTime = LongFromChar(&dataBuf[ii]); /* ·Ϣʱ */ + ii += 4U; + + cCmdType = dataBuf[ii]; /* */ + ii++; + if (ATS_DA_CMD_TYPE_CANCEL == cCmdType) + { + cLineAttr = dataBuf[ii]; /* · */ + ii++; + if ((DA_AREA_ALL == cLineAttr) || (DA_AREA_UP == cLineAttr) || (DA_AREA_DOWN == cLineAttr)) + { + ; + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Line Attr[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, cLineAttr); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Cmd Type[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, cCmdType); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Train Id[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, dwTrainHlhtId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Rc Id[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, cAtsSendRcId); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse WorkStation Id[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, wIndex); + chRtn = CI_ERROR; + } + } + else + { + debug_infor_printf((const)"ParseGateWayToCiDataFrame: Cmd Id[%d] Parse Ats Id[%d] Error\n", MSG_TYPE_DA_CANCLE_FIRST, cAtsId); + chRtn = CI_ERROR; + } + + if (CI_SUCCESS == chRtn) + { + g_strSndAtsDaCfmFst.chFlag = FLAG_SET; + g_strSndAtsDaCfmFst.chTiocId = cAtsSendRcId; + g_strSndAtsDaCfmFst.chStation = cStation; + g_strSndAtsDaCfmFst.wIndex = wIndex; + g_strSndAtsDaCfmFst.dwTime = dwTime; + g_strSndAtsDaCfmFst.chOpStatus = CONFIRM_FIRST_OTHER_DEV_OP; /*վվ*/ + + /*CRC*/ + szCrcTmp[jj] = cAtsId; + jj++; + szCrcTmp[jj] = cStation; + jj++; + ShortToChar(wIndex, &szCrcTmp[jj]); + jj += 2U; + LongToChar(dwTrainHlhtId, &szCrcTmp[jj]); + jj += 4U; + LongToChar(dwTime, &szCrcTmp[jj]); + jj += 4U; + szCrcTmp[jj] = cCmdType; + jj++; + szCrcTmp[jj] = cLineAttr; + jj++; + g_strSndAtsDaCfmFst.dwCrc32 = Tioc_CommonCrc32(szCrcTmp, jj); + } + else { ; } - else - { - chRtn = CI_ERROR; - } } - else - { - ; - } - - if (CI_SUCCESS == chRtn) - { - g_strAtsDaMsgFst.chLine = dataBuf[ii];/* */ - ii++; - if ((DA_AREA_ALL == g_strAtsDaMsgFst.chLine) || (DA_AREA_UP == g_strAtsDaMsgFst.chLine) || (DA_AREA_DOWN == g_strAtsDaMsgFst.chLine)) - { - g_strAtsDaMsgFst.chFlag = FLAG_SET; - } - else - { - chRtn = CI_ERROR; - } - } - else - { - ; - } - break; } case MSG_TYPE_DA_CANCLE_SECOND:/* ѹȡϢ */ @@ -922,8 +1402,9 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) if (CI_SUCCESS == chRtn) { g_strAtsDaMsgSnd.chStation = dataBuf[ii++]; /* վ */ - g_strAtsDaMsgSnd.chIndex = dataBuf[ii++]; /* վ */ - if (0U < g_strAtsDaMsgSnd.chIndex) + g_strAtsDaMsgSnd.wIndex = ShortFromChar(&dataBuf[ii]); /* վ */ + ii += 2U; + if (0U < g_strAtsDaMsgSnd.wIndex) { ; } @@ -1072,7 +1553,12 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) ClearAtsWlbMsgSecond(); ClearAtsDaMsgFirst(); ClearAtsDaMsgSecond(); + ClearSndAtsScreenFstCfmMsg(); + ClearSndAtsEaFstCfmMsg(); + ClearSndAtsWlbFstCfmMsg(); + ClearSndAtsDaFstCfmMsg(); } + return chRtn; } @@ -1460,7 +1946,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_CONFIRM_FIRST; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsCfmFst.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsCfmFst.chIndex; /* վ */ + ShortToChar(g_strAtsCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsCfmFst.chOpStatus; /* ȷϽ */ @@ -1481,6 +1968,46 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ; } + if (CI_SUCCESS == chRtn) + { + /*ڶATSԶɸѡ״ȷϢ*/ + if (FLAG_SET == g_strSndAtsCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_CONFIRM_FIRST; /* ֡ */ + ii++; + wMsgLenIndex = ii; /* ¼֡ȴ± */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsCfmFst.chStation; /* վ */ + ii++; + ShortToChar(g_strSndAtsCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; + LongToChar(g_strSndAtsCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsCfmFst.chOpStatus; /* ȷϽ */ + ii++; + LongToChar(g_strSndAtsCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* ֡ */ + chMsgNum++; /* Ϣ */ + + /*ڶATSȷϢ*/ + ClearSndAtsScreenFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + if (CI_SUCCESS == chRtn) { if (FLAG_SET == g_strAtsCfmSnd.chFlag) @@ -1491,7 +2018,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_CONFIRM_SECOND; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsCfmSnd.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsCfmSnd.chIndex; /* վ */ + ShortToChar(g_strAtsCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsCfmSnd.chOpStatus; /* ȷϽ */ @@ -1601,7 +2129,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_EA_CONFIRM_FIRST; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsEaCfmFst.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsEaCfmFst.chIndex; /* վ */ + ShortToChar(g_strAtsEaCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsEaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsEaCfmFst.chOpStatus; /* ȷϽ */ @@ -1622,6 +2151,46 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ; } + if (CI_SUCCESS == chRtn) + { + /*ڶATSȡɢ״ȷϢ*/ + if (FLAG_SET == g_strSndAtsEaCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_EA_CONFIRM_FIRST; /* ֡ */ + ii++; + wMsgLenIndex = ii; /* ¼֡ȴ± */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_EA_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsEaCfmFst.chStation; /* վ */ + ii++; + ShortToChar(g_strSndAtsEaCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; + LongToChar(g_strSndAtsEaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsEaCfmFst.chOpStatus; /* ȷϽ */ + ii++; + LongToChar(g_strSndAtsEaCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* ֡ */ + chMsgNum++; /* Ϣ */ + + /*ڶATSȷϢ*/ + ClearSndAtsEaFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + if (CI_SUCCESS == chRtn) { if (FLAG_SET == g_strAtsEaCfmSnd.chFlag) @@ -1632,7 +2201,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_EA_CONFIRM_SECOND; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsEaCfmSnd.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsEaCfmSnd.chIndex; /* վ */ + ShortToChar(g_strAtsEaCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsEaCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsEaCfmSnd.chOpStatus; /* ȷϽ */ @@ -1720,8 +2290,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_WLB_CONFIRM_FIRST; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsWlbCfmFst.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsWlbCfmFst.chIndex; /* վ */ - + ShortToChar(g_strAtsWlbCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsWlbCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsWlbCfmFst.chOpStatus; /* ȷϽ */ @@ -1742,6 +2312,46 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ; } + if (CI_SUCCESS == chRtn) + { + /*ڶATSȫ߽ƶ״ȷϢ*/ + if (FLAG_SET == g_strSndAtsWlbCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_WLB_CONFIRM_FIRST; /* ֡ */ + ii++; + wMsgLenIndex = ii; /* ¼֡ȴ± */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_WLB_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsWlbCfmFst.chStation; /* վ */ + ii++; + ShortToChar(g_strSndAtsWlbCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; + LongToChar(g_strSndAtsWlbCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsWlbCfmFst.chOpStatus; /* ȷϽ */ + ii++; + LongToChar(g_strSndAtsWlbCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* ֡ */ + chMsgNum++; /* Ϣ */ + + /*ڶATSȷϢ*/ + ClearSndAtsWlbFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + if (CI_SUCCESS == chRtn) { if (FLAG_SET == g_strAtsWlbCfmSnd.chFlag) @@ -1752,8 +2362,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_WLB_CONFIRM_SECOND; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsWlbCfmSnd.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsWlbCfmSnd.chIndex; /* վ */ - + ShortToChar(g_strAtsWlbCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsWlbCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsWlbCfmSnd.chOpStatus; /* ȷϽ */ @@ -1859,7 +2469,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_DA_CONFIRM_FIRST; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsDaCfmFst.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsDaCfmFst.chIndex; /* վ */ + ShortToChar(g_strAtsDaCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsDaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsDaCfmFst.chOpStatus; /* ȷϽ */ @@ -1880,6 +2491,46 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) ; } + if (CI_SUCCESS == chRtn) + { + /*ڶATSȡ״ȷϢ*/ + if (FLAG_SET == g_strSndAtsDaCfmFst.chFlag) + { + szToGateWayDataBuf[ii] = MSG_TYPE_DA_CONFIRM_FIRST; /* ֡ */ + ii++; + wMsgLenIndex = ii; /* ¼֡ȴ± */ + ii += 2U; + szToGateWayDataBuf[ii] = MSG_TYPE_DA_CONFIRM_FIRST; + ii++; + szToGateWayDataBuf[ii] = chLocalId; /* TIOC */ + ii++; + szToGateWayDataBuf[ii] = g_strSndAtsDaCfmFst.chStation; /* վ */ + ii++; + ShortToChar(g_strSndAtsDaCfmFst.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; + LongToChar(g_strSndAtsDaCfmFst.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ + ii += 4U; + szToGateWayDataBuf[ii] = g_strSndAtsDaCfmFst.chOpStatus; /* ȷϽ */ + ii++; + LongToChar(g_strSndAtsDaCfmFst.dwCrc32, &szToGateWayDataBuf[ii]); /* CRC */ + ii += 4U; + wMsgLen = (ii - wMsgLenIndex - 2U); + ShortToChar(wMsgLen, &szToGateWayDataBuf[wMsgLenIndex]); /* ֡ */ + chMsgNum++; /* Ϣ */ + + /*ڶATSȷϢ*/ + ClearSndAtsDaFstCfmMsg(); + } + else + { + ; + } + } + else + { + ; + } + if (CI_SUCCESS == chRtn) { if (FLAG_SET == g_strAtsDaCfmSnd.chFlag) @@ -1890,7 +2541,8 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) szToGateWayDataBuf[ii++] = MSG_TYPE_DA_CONFIRM_SECOND; szToGateWayDataBuf[ii++] = chLocalId; /* TIOC */ szToGateWayDataBuf[ii++] = g_strAtsDaCfmSnd.chStation; /* վ */ - szToGateWayDataBuf[ii++] = g_strAtsDaCfmSnd.chIndex; /* վ */ + ShortToChar(g_strAtsDaCfmSnd.wIndex, &szToGateWayDataBuf[ii]); /* վ */ + ii += 2U; LongToChar(g_strAtsDaCfmSnd.dwTime, &szToGateWayDataBuf[ii]); /* ʱ */ ii += 4u; szToGateWayDataBuf[ii++] = g_strAtsDaCfmSnd.chOpStatus; /* ȷϽ */ @@ -2081,4 +2733,48 @@ UINT8 WlbUrgentIdCheck(const UINT8 cDeviceType, const UINT16 wDeviceId) } return retVal; +} + +/** +* @brief ڶATSԶɸѡһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsScreenFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); +} + +/** +* @brief ڶATSȡɢһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsEaFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsEaCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); +} + +/** +* @brief ڶATSȫ߽ƶһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsWlbFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsWlbCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); +} + +/** +* @brief ڶATSȡѹһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsDaFstCfmMsg(void) +{ + (void)CommonMemSet((void*)&g_strSndAtsDaCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru)); } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h index 4825614..3ab0acb 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackGateWayData.h @@ -33,22 +33,24 @@ #define CONFIRM_FIRST_REPEAT ((UINT8)2u) /*ظȷ*/ #define CONFIRM_FIRST_TRAINID ((UINT8)3u) /*ˢг*/ #define CONFIRM_FIRST_LGCID ((UINT8)4u) /*ȷ߼*/ +#define CONFIRM_FIRST_OTHER_DEV_OP ((UINT8)14U) /*վڲ*/ #define CONFIRM_SECOND_SUCCESS ((UINT8)1u) /*ȷϳɹ*/ -#define CONFIRM_SECOND_CRC ((UINT8)2u) /*CRCУʧ*/ +#define CONFIRM_SECOND_CRC ((UINT8)2u) /*Ϣ֡Уʧ*/ #define CONFIRM_SECOND_TRAINID ((UINT8)3u) /*ˢг*/ #define CONFIRM_SECOND_LGCID ((UINT8)4u) /*ȷ߼*/ #define CONFIRM_SECOND_FIRST ((UINT8)5u) /*״ɸѡȷʧ*/ #define CONFIRM_SECOND_DIFF ((UINT8)6u) /*Ϣһβһ*/ #define CONFIRM_FIRST_NOT_EA ((UINT8)7u) /*гδɢ*/ -#define CONFIRM_FIRST_EING ((UINT8)9u) /*гɢ*/ +#define CONFIRM_TRAIN_IN_EA ((UINT8)9u) /*гɢ*/ -#define CONFIRM_EA_SECOND_CRC ((UINT8)3u) /*CRCʧ*/ +#define CONFIRM_EA_SECOND_CRC ((UINT8)3u) /*Ϣ֡Уʧ*/ #define CONFIRM_EA_SECOND_FIRST ((UINT8)4u) /*δִһ*/ #define CONFIRM_SECOND_NOT_EA ((UINT8)5u) /*гδɢ*/ #define CONFIRM_SECOND_EA_TRAINID ((UINT8)8u) /*״гŲһ*/ #define CONFIRM_SECOND_TIOC ((UINT8)10u) /*ڿͨж*/ #define CONFIRM_EALINE_DIFFERENT ((UINT8)11U) /*ȡѽԲһ*/ +#define CONFIRM_EA_SND_LINE_DIFF ((UINT8)11U) /*ȡɢһ·Բһ*/ #define MSG_TYPE_WLB_SET ((UINT8)0xaau) /*ȫгƶ*/ #define MSG_TYPE_WLB_CANCEL ((UINT8)0x55u) /*ȫгƶȡ*/ @@ -63,8 +65,9 @@ #define CONFIRM_WLB_SND_UNKNOWN ((UINT8)0u) /*λظδ֪*/ #define CONFIRM_WLB_SND_SUCCESS ((UINT8)1u) /*λظɹ*/ -#define CONFIRM_WLB_SND_CRC ((UINT8)3u) /*λظCRCʧ*/ +#define CONFIRM_WLB_SND_CRC ((UINT8)3u) /*Ϣ֡Уʧ*/ #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) /*ȡѹ״λظɹ*/ @@ -73,10 +76,11 @@ #define CONFIRM_DA_SND_UNKNOWN ((UINT8)0u) /*ȡѹٴλظδ֪*/ #define CONFIRM_DA_SND_SUCCESS ((UINT8)1u) /*ȡѹٴλظɹ*/ -#define CONFIRM_DA_SND_CRC ((UINT8)3u) /*ȡѹٴλظCRCʧ*/ +#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 DA_AREA_UP ((UINT8)0x55u) /* */ #define DA_AREA_DOWN ((UINT8)0xaau) /* */ @@ -110,7 +114,7 @@ typedef struct UINT32 dwCycle; /*״Ϣں*/ UINT8 chAtsId; /*ATS*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT8 chTiocId; /*TIOC*/ UINT32 dwTime; /*ʱ*/ UINT8 chTrainNum; /*г*/ @@ -123,7 +127,7 @@ typedef struct UINT8 chFlag; /*ϢЧ*/ UINT8 chTiocId; /*TIOC*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT32 dwTime; /*ʱ*/ UINT8 chOpStatus; /**/ UINT32 dwCrc32; /*CRC*/ @@ -136,7 +140,7 @@ typedef struct UINT32 dwCycle; /*״Ϣں*/ UINT8 chAtsId; /*ATS*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT8 chTiocId; /*TIOC*/ UINT32 dwTime; /*ʱ*/ UINT8 chTrainNum; /*г*/ @@ -151,7 +155,7 @@ typedef struct UINT32 dwCycle; /*Ϣں*/ UINT8 chAtsId; /*ATS*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT8 chTiocId; /*TIOC*/ UINT32 dwEaTrainId; /*гͨ*/ UINT32 dwTime; /*ʱ*/ @@ -167,7 +171,7 @@ typedef struct UINT32 dwCycle; /*Ϣں*/ UINT8 chAtsId; /*ATS*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT8 chTiocId; /*TIOC*/ UINT32 dwTime; /*ʱ*/ UINT8 chType; /*/ȡ*/ @@ -184,7 +188,7 @@ typedef struct UINT32 dwCycle; /*Ϣں*/ UINT8 chAtsId; /*ATS*/ UINT8 chStation; /*վ*/ - UINT8 chIndex; /*վ*/ + UINT16 wIndex; /*վ*/ UINT8 chTiocId; /*TIOC*/ UINT32 dwDaTrainId; /*гͨ*/ UINT32 dwTime; /*ʱ*/ @@ -214,6 +218,11 @@ extern AtsMsgCfmStru g_strAtsDaCfmFst; extern AtsDaMsgStru g_strAtsDaMsgSnd; extern AtsMsgCfmStru g_strAtsDaCfmSnd; +extern AtsMsgCfmStru g_strSndAtsCfmFst; /*ڶATSԶɸѡ״ȷ*/ +extern AtsMsgCfmStru g_strSndAtsEaCfmFst; /*ڶATSȡɢ״ȷ*/ +extern AtsMsgCfmStru g_strSndAtsWlbCfmFst; /*ڶATS/ȡȫгƶ״ȷ*/ +extern AtsMsgCfmStru g_strSndAtsDaCfmFst; /*ڶATSȡѹ״ȷ*/ + /** * @brief ȡԶɸѡATS״Ϣ @@ -408,4 +417,36 @@ void ClearAtsDaMsgSecond(void); */ UINT8 WlbUrgentIdCheck(const UINT8 cDeviceType, const UINT16 wDeviceId); +/** +* @brief ڶATSԶɸѡһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsScreenFstCfmMsg(void); + +/** +* @brief ڶATSȡɢһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsEaFstCfmMsg(void); + +/** +* @brief ڶATSȫ߽ƶһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsWlbFstCfmMsg(void); + +/** +* @brief ڶATSȡѹһȷϢ +* @param +* @return +* @note Created By LQ 2025.05.29 +*/ +void ClearSndAtsDaFstCfmMsg(void); + #endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackITEData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackITEData.c index de46f75..cccfbee 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackITEData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackITEData.c @@ -68,24 +68,24 @@ UINT8 ParseIteToCiData(const UINT8* dataBuf, const UINT16 dataLength, const UINT UINT8 ii = 0U; UINT8 retVal = CI_ERROR; UINT8 cGalHeadSavedFlag = CI_ERROR; + IteToCiDataStruct parseCheckIte = { 0 }; + UINT8 chFind = CI_ERROR; if (IteToCiSum < ITE_TO_CI_SUM_MAX) { - (void)CommonMemSet(&(IteToCiDataStru[IteToCiSum]), (UINT32)sizeof(IteToCiDataStruct), 0U, (UINT32)sizeof(IteToCiDataStruct)); /*ڴ棬ֹ*/ - - retVal = ParseIteToCiDataFrame(dataBuf, dataLength, systemId, &(IteToCiDataStru[IteToCiSum]), &cGalHeadSavedFlag, logId); + retVal = ParseIteToCiDataFrame(dataBuf, dataLength, systemId, &parseCheckIte, &cGalHeadSavedFlag, logId); if (CI_SUCCESS == retVal) { - IteToCiSum++; /*ͨŵITEITEͨŽṹǷѴڵǰITE*/ - for (ii = 0u; ii < (IteToCiSum - 1U); ii++) + for (ii = 0u; ii < IteToCiSum; ii++) { - if ((IteToCiDataStru[ii].wIteId == IteToCiDataStru[IteToCiSum - 1U].wIteId) && (IteToCiDataStru[ii].wIteLogId == IteToCiDataStru[IteToCiSum - 1U].wIteLogId)) + if ((IteToCiDataStru[ii].wIteId == parseCheckIte.wIteId) && (IteToCiDataStru[ii].wIteLogId == parseCheckIte.wIteLogId)) { /*ĿITEѴͨŽṹУݿ֮ǰ洢ĵַ*/ - (void)CommonMemCpy(&(IteToCiDataStru[ii]), (UINT32)sizeof(IteToCiDataStruct), &(IteToCiDataStru[IteToCiSum - 1U]), (UINT32)sizeof(IteToCiDataStruct)); - IteToCiSum--; + (void)CommonMemSet(&(IteToCiDataStru[ii]), (UINT32)sizeof(IteToCiDataStruct), 0U, (UINT32)sizeof(IteToCiDataStruct)); /*ڴ棬ֹ*/ + (void)CommonMemCpy(&(IteToCiDataStru[ii]), (UINT32)sizeof(IteToCiDataStruct), &parseCheckIte, (UINT32)sizeof(IteToCiDataStruct)); + chFind = CI_SUCCESS; break; } else @@ -93,6 +93,16 @@ UINT8 ParseIteToCiData(const UINT8* dataBuf, const UINT16 dataLength, const UINT /**/ } } + if (CI_ERROR == chFind) + { + /*δҵ ½ͨ д洢*/ + (void)CommonMemCpy(&(IteToCiDataStru[IteToCiSum]), (UINT32)sizeof(IteToCiDataStruct), &parseCheckIte, (UINT32)sizeof(IteToCiDataStruct)); + IteToCiSum++; + } + else + { + ; /*Ѵڲ*/ + } } else { diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c index 828e6b0..64c9048 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c @@ -237,11 +237,7 @@ UINT8 ParseOtherSysToCiData(void) if (ocId == chLocalCiId)/*oc idci idΪid*/ { oc2ciParseResult = ParseOcToCiDataFrame(data, (UINT16)dataLen, devId); - if (CI_ERROR == oc2ciParseResult) - { - /*OCݴѾ10ڣͨжϣȫ*/ - } - else if (CI_CHECK_LEN_ERROR == oc2ciParseResult) + if (CI_CHECK_LEN_ERROR == oc2ciParseResult) { /*УѴOCԭʼ豸״̬ȫ*/ /* Уʧܴ @@ -261,7 +257,11 @@ 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 @@ -1008,11 +1008,18 @@ UINT8 PackCiToOtherSysData(void) ; /*do nothing*/ } } + else + { + /**/ + } + + /*ɳؿر*/ + PackCiToVobcFlyProtectData(); + #ifdef APPCI_MAINTAIN_DEBUG #ifdef PLATFORM_2OO2 /*cgh-ϲCID-2349-1*/ /*͸ά豸ͨ״̬*/ - debug_infor_printf((const)"\nCIM_SEND_COMM\n"); PackCiToCimCommData(); /*͸άźŻ˿״̬*/ debug_infor_printf((const)"\nCIM_SEND_DS\n"); @@ -1031,6 +1038,8 @@ UINT8 PackCiToOtherSysData(void) PackCiToCimDeviceData(); /*άɳ*/ PackCiToCimFlyProtectData(); + /*άIO˫ϵɼһ±*/ + PackCiToCimCollDiffData(); /*͸AIM˳ӪϢ*/ AIMOutput(); /*͸άִеԪϢ*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c index cc2ff0d..e9a37f7 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.c @@ -93,6 +93,7 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor UINT16 retDrvCmd = 0u; UINT8 ocHasBlue = 0u; UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ + UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*ƾתƹܿ*/ UINT8 ciType = GetLocalCiType(); switch (drvColor) { @@ -118,7 +119,7 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor retDrvCmd = OC_SIGNAL_DRIVECOLOR_GREEN; break; case SIGNAL_DRIVECOLOUR_YELLOWCLOSE:/**/ - if (FUNC_SWITCH_ON == funSwitchGreenYellow) + if ((FUNC_SWITCH_ON == funSwitchGreenYellow)||(FUNC_SWITCH_ON == funSwitchALLCloseUseBlue)) { retDrvCmd = OC_SIGNAL_DRIVECOLOR_BLUE; } @@ -128,10 +129,17 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor } break; case SIGNAL_DRIVECOLOUR_REDCLOSE:/**/ - retDrvCmd = OC_SIGNAL_DRIVECOLOR_CLOSE; + if (FUNC_SWITCH_ON == funSwitchALLCloseUseBlue) + { + retDrvCmd = OC_SIGNAL_DRIVECOLOR_BLUE;/*º*/ + } + else + { + retDrvCmd = OC_SIGNAL_DRIVECOLOR_CLOSE; + } break; case SIGNAL_DRIVECOLOUR_GREENCLOSE:/**/ - if (FUNC_SWITCH_ON == funSwitchGreenYellow) + if ((FUNC_SWITCH_ON == funSwitchGreenYellow) || (FUNC_SWITCH_ON == funSwitchALLCloseUseBlue)) { retDrvCmd = OC_SIGNAL_DRIVECOLOR_BLUE; } @@ -240,6 +248,8 @@ UINT8 PackCiToOcData( UINT8 deviceId) UINT16 OcDevName = 0U; /*OCƣ+ID*/ UINT8 chSwitch = GetCiFunctionSwitchConfig(FUNC_OC_100_OR_200); UINT8 chLocalOcType = GetLocalOcPattern(); /*OC*/ + UINT16 deviceSum = 0u; + UINT16 kqChangeCommand = 0u;/*Ȩл*/ #if 0 QueueClear(CiToOcDataQueue); /**/ #endif @@ -293,7 +303,16 @@ UINT8 PackCiToOcData( UINT8 deviceId) ii += 2u; ii += 2u;/*Ԥ2ֽ*/ - ShortToChar(pOcData->OcDeviceNum, &Ci2OcDataBuffer[ii]);/*豸*/ + if (OC_HAVE_YJK == pOcData->chHaveYjk) + { + deviceSum = pOcData->OcDeviceNum + 1u; /*豸+Ȩл*/ + } + else + { + deviceSum = pOcData->OcDeviceNum; + } + + ShortToChar(deviceSum, &Ci2OcDataBuffer[ii]);/*豸*/ ii += 2u; for (kk = 0u; kk < pOcData->OcDeviceNum; kk++)/*豸*/ { @@ -336,6 +355,21 @@ UINT8 PackCiToOcData( UINT8 deviceId) } } }/*Ϊoc豸*/ + + if (OC_HAVE_YJK == pOcData->chHaveYjk) + { + Ci2OcDataBuffer[ii++] = CI_SYSTEM_TYPE_OC;/*Ȩл*/ + ShortToChar(pOcData->OcId, &Ci2OcDataBuffer[ii]);/*豸ID*/ + ii += 2u; + + kqChangeCommand = GetKqChangeCommand(); + ShortToChar(kqChangeCommand, &Ci2OcDataBuffer[ii]);/*Ȩл*/ + ii += 2u; + } + else + {/**/ + } + pBoardNumStartIndex = ii;/*ֵ*/ ii += 2u;/*ֵ*/ @@ -578,7 +612,7 @@ UINT8 PackCiToOcData( UINT8 deviceId) (void)CommonMemCpy(&Ci2OcDataBuffer[ii], OC_TO_CI_DATA_LEN_MAX-ii, ciSiToOc, ciSiToOcIdx); ii += ciSiToOcIdx; - if ((FUNC_SWITCH_ON == chSwitch)&&(OC_DATA_TYPE_NEW == chLocalOcType)) + if ((FUNC_SWITCH_ON == chSwitch)&&(DATA_TYPE_NEW == chLocalOcType)) { /*OC200 ݽṹ25ϲ֧SOR*/ Ci2OcDataBuffer[ii] = sorBoardNum; @@ -605,7 +639,7 @@ UINT8 PackCiToOcData( UINT8 deviceId) } #endif /*OC100OCݽṹ24 ӿڱԤ20ֽ*/ - if ((FUNC_SWITCH_OFF == chSwitch) || (OC_DATA_TYPE_OLD == chLocalOcType)) + if ((FUNC_SWITCH_OFF == chSwitch) || (DATA_TYPE_OLD == chLocalOcType)) { Ci2OcDataBuffer[ii++] = 0xffu; Ci2OcDataBuffer[ii++] = 0xffu; @@ -696,6 +730,7 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) UINT8 sorBoardNumber = 0u;/*SOR忨*/ UINT16 SwapBoardNumber = 0U;/*ϵ忨*/ UINT8 chPbNumber = 0u; /*ִе*/ + UINT8 chPsdNumber = 0u; /**/ UINT16 upToGDNumber = 0u; UINT16 upToDIBoardNumber = 0u; @@ -705,8 +740,10 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) UINT16 upToSORBoardNumber = 0u; UINT16 upToPbNumer = 0u;/*ִеݸ*/ UINT16 upToSwapSysBoardNumber = 0U; + UINT16 upToPsdNumber = 0U; UINT16 tmpTotalLen = 0u;/*ʱܳ*/ UINT8 chSwitch = 0u; + UINT8 ocInterfaceFlag = 0u;/*OCӿڱʶ*/ UINT8 ii = 0U;/*豸ѭ*/ UINT16 wDevInfoIndex = LEN_OC_UP_TO_DEV_NO-1U;/*ת޻ oc200ʹ*/ UINT16 wZzjStateNumber = 0U;/*ת޻״̬ռֽ*/ @@ -717,6 +754,7 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) { retVal = CI_SUCCESS; chSwitch = GetCiFunctionSwitchConfig(FUNC_OC_100_OR_200); + ocInterfaceFlag = GetCiFunctionSwitchConfig(FUNC_OC_INTERFACE_CONF); if (totalLength < LEN_OC_UP_TO_DEV_NO) {/*УOCݴӿʼ豸ֹ豸*/ retVal = CI_CHECK_LEN_ERROR; @@ -734,7 +772,7 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) if (CI_SUCCESS == retVal) {/*УOCݴӿͷݽֹ*/ - if (OC_DATA_TYPE_NEW == chLocalOcType) + if (DATA_TYPE_NEW == chLocalOcType) { /*ݳ*/ switchNum = dataBuf[LEN_OC_UP_TO_DEV_NO - 2U]; @@ -759,8 +797,8 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) for (ii = 0U; ii < devNumber; ii++) { wSwitchIncludeZzjIndex += 4U; - wZzjStateNumber = wZzjStateNumber + (dataBuf[wSwitchIncludeZzjIndex] * 1U); - wSwitchIncludeZzjIndex += 1U + dataBuf[wSwitchIncludeZzjIndex] * 1U + 4U; + wZzjStateNumber = wZzjStateNumber +(UINT16)(dataBuf[wSwitchIncludeZzjIndex] * 1U); + wSwitchIncludeZzjIndex += 1U + (UINT16)(dataBuf[wSwitchIncludeZzjIndex] * 1U) + 4U; } upToGDNumber = LEN_OC_UP_TO_GD_NO_200_2(devNumber, wZzjStateNumber); wDevInfoIndex = upToGDNumber; @@ -832,7 +870,7 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) soBoardNumber = ShortFromChar(&dataBuf[upToSOBoardNumber - 2U]); } } - if (OC_DATA_TYPE_NEW == chLocalOcType) + if (DATA_TYPE_NEW == chLocalOcType) { wOffSet = 0U; if (CI_SUCCESS == retVal) @@ -872,7 +910,7 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) if (CI_SUCCESS == retVal) {/*УOCݴӿͷϵ忨ݽֹϵ忨*/ - upToSwapSysBoardNumber = LEN_OC_UP_TO_SWAPSYSBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, chPbNumber); + upToSwapSysBoardNumber = LEN_OC_UP_TO_SWAPSYSBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, (UINT16)chPbNumber); upToSwapSysBoardNumber -= wOffSet; if (totalLength < upToSwapSysBoardNumber) { @@ -886,18 +924,87 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) } if (CI_SUCCESS == retVal) - {/*Уݳ*/ - tmpTotalLen = LEN_OC_UP_TO_END_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, chPbNumber, SwapBoardNumber); - tmpTotalLen -= wOffSet; - if (totalLength == tmpTotalLen) - { - retVal = CI_SUCCESS; - } - else + {/*УOCݴӿͷݽ*/ + upToPsdNumber = LEN_OC_UP_TO_END_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, (UINT16)chPbNumber, SwapBoardNumber); + upToPsdNumber -= wOffSet; + if (totalLength < upToPsdNumber) { retVal = CI_CHECK_LEN_ERROR; } + else if (totalLength == upToPsdNumber) + {/*Ѿȣû*/ + if (CI_SUCCESS == retVal) + {/*Уݳ*/ + tmpTotalLen = LEN_OC_UP_TO_END_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, (UINT16)chPbNumber, SwapBoardNumber); + tmpTotalLen -= wOffSet; + if (totalLength == tmpTotalLen) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_CHECK_LEN_ERROR; + } + } + } + else + { + /*滹ݣOC-200 3.3OC-300 1.0.1*/ + if (OC200_VER3_2_AFTER == ocInterfaceFlag) + {/*OC-200 3.2֮İ汾Ӧ*/ + if (OC_HAVE_YJK == dataBuf[upToPsdNumber]) + {/*߱Ӧ*/ + tmpTotalLen = upToPsdNumber + 3u; + } + else + {/*߱Ӧ*/ + tmpTotalLen = upToPsdNumber + 1u; + } + + if (totalLength == tmpTotalLen) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_CHECK_LEN_ERROR; + } + } + else if (OC300_VER1_0_1_ANDAFTER == ocInterfaceFlag) + {/*OC-300 1.0.1֮İ汾ݺӦ*/ + chPsdNumber = dataBuf[upToPsdNumber]; + + if (CI_SUCCESS == retVal) + {/*Уݳ*/ + tmpTotalLen = LEN_OC_UP_TO_END_300(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, (UINT16)chPbNumber, SwapBoardNumber, (UINT16)chPsdNumber); + tmpTotalLen -= wOffSet; + + /*Ӧһ*/ + if (OC_HAVE_YJK == dataBuf[tmpTotalLen]) + {/*߱Ӧ*/ + tmpTotalLen += 3u; + } + else + {/*߱Ӧ*/ + tmpTotalLen += 1u; + } + + if (totalLength == tmpTotalLen) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_CHECK_LEN_ERROR; + } + } + } + else + { + } + } } + } else if (FUNC_SWITCH_OFF == chSwitch) { @@ -1085,6 +1192,24 @@ void ResetOcOriginalState(const UINT8 ocId) pDIBoard->BoardCollData[jj] = 0xaau;/*SOR忨̵ȫ*/ } } + + 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); } } @@ -1132,11 +1257,17 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U UINT16 tmpGdId = 0u;/*ʱʱId*/ UINT16 curBoardNum = 0u; /*ǰ*/ UINT16 curBoardSwapSysNum = 0U;/*ϵ忨*/ + UINT8 curPsdNum = 0u; /*PSD*/ + UINT32 psdId = 0u; /*PSD */ + UINT16 psdIndexId = 0u; /*PSD ID*/ + UINT8 funcRet = 0u; /*PSDŲѯidֵ*/ + UINT32 galOcDataVer = 0U; UINT8 chPbIndex = 0u; UINT8 chSwitch = 0u; UINT8 chZzjStateIndex = 0u;/*Ӧת޻״̬*/ UINT8 chOcType = GetLocalOcPattern(); /*ȡOCݽṹ*/ + UINT8 ocInterfaceFlag = 0u; /*OCӿڱʶ*/ for (j=0u;jOcId = 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 ת޻״̬ӿ*/ /*fan 20241120 4ǣ OC3.0 ӿ ֧OCݽṹнݽṹ*/ - if ((FUNC_SWITCH_ON == chSwitch)&&(OC_DATA_TYPE_NEW == chOcType)) + if ((FUNC_SWITCH_ON == chSwitch)&&(DATA_TYPE_NEW == chOcType)) { /*************豸[]***********/ tmpDeviceType = CI_DEVICE_TYPE_SWITCH; @@ -1568,7 +1696,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U } /*************SOR忨 OC-200ҽOC***********/ - if ((CI_SUCCESS == retVal) && (FUNC_SWITCH_ON == chSwitch)&& (OC_DATA_TYPE_NEW == chOcType)) + if ((CI_SUCCESS == retVal) && (FUNC_SWITCH_ON == chSwitch)&& (DATA_TYPE_NEW == chOcType)) { pTmpOcToCiData->OcSORBoardNum = dataBuf[ii++];/*Sor忨*/ if (MAX_OC_SOR_BOARD_NUM >= pTmpOcToCiData->OcSORBoardNum) @@ -1659,6 +1787,121 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U debug_infor_printf((const)"OcSwapSysBoardNum'index %d exceed macro %d.\n", curBoardSwapSysNum, MAX_OC_DEVICE_NUM); } } + + if (OC200_VER3_2 == ocInterfaceFlag) + {/*OC200 3.2,Ӧ*/ + /**/ + } + else if (OC200_VER3_2_AFTER == ocInterfaceFlag) + {/*OC200 3.2֮İ汾ֻӦ*/ + /*************OCӦ״̬Ϣ***********/ + if (CI_SUCCESS == retVal) + { + pTmpOcToCiData->chHaveYjk = dataBuf[ii++]; + if (OC_HAVE_YJK == pTmpOcToCiData->chHaveYjk) + {/*߱Ӧ*/ + pTmpOcToCiData->chControlMode = dataBuf[ii++]; + pTmpOcToCiData->chOcYjpComm = dataBuf[ii++]; + } + else + {/*߱Ӧ*/ + } + } + } + else if (OC300_VER1_0_1_ANDAFTER == ocInterfaceFlag) + {/*OC300 1.0.1֮İ汾źӦ*/ + if (CI_SUCCESS == retVal) + { + /*************Ϣ***********/ + /**/ + pTmpOcToCiData->OCPsdNum = dataBuf[ii++]; + curPsdNum = pTmpOcToCiData->OCPsdNum; + if (0u != curPsdNum) + { + /*Դ״̬*/ + pTmpOcToCiData->DrvPowerState = dataBuf[ii++]; + /*ƵԴ״̬*/ + pTmpOcToCiData->CtlPowerState = dataBuf[ii++]; + /*Ե1״̬*/ + pTmpOcToCiData->EdgeCtllerState1 = dataBuf[ii++]; + /*Ե2״̬*/ + pTmpOcToCiData->EdgeCtllerState2 = dataBuf[ii++]; + + + + if (PSD_SUM_MAX >= curPsdNum) + { + for (j = 0u; j < curPsdNum; j++) + { + psdId = LongFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 4u; + /*PSD*/ + funcRet = dquQueryInDevIndex(QFUN_IDMAP_PSD_ID, psdId, &psdIndexId); + if (CI_SUCCESS == funcRet) + { + pTmpOcToCiData->PsdInfo[j].wPsdId = psdIndexId; + /*Ź״̬*/ + pTmpOcToCiData->PsdInfo[j].OpenErrState = dataBuf[ii++]; + /*Ź״̬*/ + pTmpOcToCiData->PsdInfo[j].CloseErrState = dataBuf[ii++]; + /*״̬*/ + pTmpOcToCiData->PsdInfo[j].OpenOrCloseState = dataBuf[ii++]; + /*״̬*/ + pTmpOcToCiData->PsdInfo[j].InterlockRelState = dataBuf[ii++]; + /*ŹϸϢλ*/ + pTmpOcToCiData->PsdInfo[j].psdFaultQStataOne = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*ŹϸϢλ*/ + pTmpOcToCiData->PsdInfo[j].psdFaultQStataTwo = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*ſ״̬λ*/ + pTmpOcToCiData->PsdInfo[j].psdDoorsStateOne = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*ſ״̬λ*/ + pTmpOcToCiData->PsdInfo[j].psdDoorsStateTwo = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*űϢλ*/ + pTmpOcToCiData->PsdInfo[j].psdDoorIStateOne = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*űϢλ*/ + pTmpOcToCiData->PsdInfo[j].psdDoorIStateTwo = LongFromChar(&dataBuf[ii]); + ii += 4u; + /*ϰﱨ״̬*/ + pTmpOcToCiData->PsdInfo[j].psdAlarmState = dataBuf[ii++]; + } + else + { + /*Ž*/ + ii += 29u; + retVal = CI_ERROR; + break; + } + } + } + else + { + /*ԾϢ*/ + retVal = CI_ERROR; + debug_infor_printf((const)"OcPscNum'index %d exceed macro %d.\n", curPsdNum, PSD_SUM_MAX); + } + } + + } + /*************OCӦ״̬Ϣ***********/ + if (CI_SUCCESS == retVal) + { + pTmpOcToCiData->chHaveYjk = dataBuf[ii++]; + if (OC_HAVE_YJK == pTmpOcToCiData->chHaveYjk) + {/*߱Ӧ*/ + pTmpOcToCiData->chControlMode = dataBuf[ii++]; + pTmpOcToCiData->chOcYjpComm = dataBuf[ii++]; + } + else + {/*߱Ӧ*/ + } + } + } + #endif #if 0 (void)memcpy(pTmpOcToCiData->OcSystemState,&dataBuf[ii],16);/*OCϵͳ״̬*/ @@ -1686,6 +1929,10 @@ 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*/ { @@ -2278,6 +2525,16 @@ UINT8 InitOcsBoardsIsScatter(void) UINT16 boardId = 0u; /*忨ID*/ UINT16 ocId = 0u; /*OC ID*/ UINT8 boardType = 0u; /*忨*/ + UINT16 jj = 0U; + UINT8 cLocalCiId = 0U; + UINT8 cOcBelongCiId = 0U; + UINT16 wRelayCurSum = 0U; + UINT16 wRelayId = 0U; + UINT16 wRelayBelongOCId = 0U; + UINT16 wRelayAForeBoardId = 0U; /*Aϵǰɰ忨ID*/ + UINT16 wRelayABackBoardId = 0U; /*Aϵɰ忨ID*/ + UINT16 wRelayBForeBoardId = 0U; /*Aϵǰɰ忨ID*/ + UINT16 wRelayBBackBoardId = 0U; /*Aϵɰ忨ID*/ readRtn = dquGetConfigData((const)DataPath, OC_DATA_TYPE, OC_IN_OUT_TYPE_ID, &pData, &dataLen); if (1u == readRtn) /*ȡɹ*/ @@ -2287,6 +2544,8 @@ UINT8 InitOcsBoardsIsScatter(void) rowNum = dataLen / OC_IN_OUT_TYPE_LEN; /*ݵĸ*/ if ((BOARD_SUM_MAX*OC_SUM_MAX) >= rowNum) { + cLocalCiId = GetSystemParaLocalCiId(); + wRelayCurSum = GetRelayCurSum(); for (i = 0u; i < rowNum; i++) { boardId = ShortFromChar(&pData[offset]); /*忨ID*/ @@ -2312,6 +2571,40 @@ UINT8 InitOcsBoardsIsScatter(void) { rtn = 0U; } + + cOcBelongCiId = (UINT8)GetCiIdByOcId(ocId); + + if (cOcBelongCiId == cLocalCiId) + { + for (jj = 0U; jj < wRelayCurSum; jj++) + { + wRelayId = GetRelayId(jj); + wRelayBelongOCId = GetRelayBelongOCId(wRelayId); + if (wRelayBelongOCId == ocId) + { + wRelayAForeBoardId = GetRelayForeNodeCollAddrA(wRelayId); + wRelayABackBoardId = GetRelayBackNodeCollAddrA(wRelayId); + wRelayBForeBoardId = GetRelayForeNodeCollAddrB(wRelayId); + wRelayBBackBoardId = GetRelayBackNodeCollAddrB(wRelayId); + if ((boardId == wRelayAForeBoardId) || (boardId == wRelayABackBoardId) || (boardId == wRelayBForeBoardId) || (boardId == wRelayBBackBoardId)) + { + SetRelayBoardType(wRelayId, boardType); + } + else + { + /**/ + } + } + else + { + /**/ + } + } + } + else + { + /**/ + } } if (offset == dataLen) /*ȷ*/ { @@ -2325,6 +2618,130 @@ UINT8 InitOcsBoardsIsScatter(void) } +/* +* ΪָOC->CIĽṹȱʡֵ(ȫֵ) +* ˵ index , OC idӦ± +* ֵ +*/ +void SetOcToCiDefaultDataStru(UINT8 index) +{ + UINT8 curPsdNum = 0U;/*OC->CI*/ + UINT8 j = 0u; + + if (OC_SUM_MAX <= index) + { + /**/ + } + else + { + curPsdNum = m_OcToCiOrginDataArr[index].OCPsdNum; + m_OcToCiOrginDataArr[index].DrvPowerState = PSD_DRIVE_POWER_ERROR;/*Դ״̬*/ + m_OcToCiOrginDataArr[index].CtlPowerState = PSD_CONTROL_POWER_ERROR;/*ƵԴ״̬*/ + m_OcToCiOrginDataArr[index].EdgeCtllerState1 = PSD_EDGE_CONTROLLER_ERROR;/*Ե1״̬*/ + m_OcToCiOrginDataArr[index].EdgeCtllerState2 = PSD_EDGE_CONTROLLER_ERROR;/*Ե2״̬*/ + for (j = 0U; j < curPsdNum; j++) + { + m_OcToCiOrginDataArr[index].PsdInfo[j].OpenErrState = PSD_OPEN_CLOSE_ERROR;/*Ź״̬*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].CloseErrState = PSD_OPEN_CLOSE_ERROR;/*Ź״̬*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].OpenOrCloseState = PSD_STATE_OPEN_VIETNAM;/*״̬*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].InterlockRelState = PSD_MUTUALLOCK_REMOVE_NO;/*״̬*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].psdFaultQStataOne = UINT32_MAX;/*ŹϸϢ*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].psdFaultQStataTwo = UINT32_MAX; + m_OcToCiOrginDataArr[index].PsdInfo[j].psdDoorsStateOne = UINT32_MAX;/*ſ״̬*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].psdDoorsStateTwo = UINT32_MAX; + m_OcToCiOrginDataArr[index].PsdInfo[j].psdDoorIStateOne = UINT32_MAX;/*űϢ*/ + m_OcToCiOrginDataArr[index].PsdInfo[j].psdDoorIStateTwo = UINT32_MAX; + m_OcToCiOrginDataArr[index].PsdInfo[j].psdAlarmState = PSD_ALARM_OBS_YES;/*ϰﱨ״̬*/ + } + } + +} + +/* +* ȡҪ͸OCĿȨл +* ˵ +* ֵ Ȩл +*/ +UINT16 GetKqChangeCommand(void) +{ + UINT16 ii = 0u; + UINT16 command = CHANGE_NO_COMMAND; + + for (ii = 0u; ii < m_OcToCiOrginDataNum; ii++) + { + if (OC_CTLMODE_YJK == m_OcToCiOrginDataArr[ii].chControlMode) + { + /*ӦصOC*/ + if (CI_AND_OTHER_TRANSMIT_BAD == m_OcToCiOrginDataArr[ii].chOcYjpComm) + { + /*OCӦͨж*/ + } + else + { + break; + } + } + else + { + /*ǻ,*/ + } + } + + if((0 != ii)&& (ii == m_OcToCiOrginDataNum)) + {/*дӦصOCӦжϣOCǻ*/ + command = CHANGE_JK_COMMAND; + } + else + { + /**/ + } + + return command; +} + + +/* +* ȡλɼʼ +* ˵ 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 + {/**/ + } +} + + @@ -2334,19 +2751,6 @@ UINT8 InitOcsBoardsIsScatter(void) - - - - - - - - - - - - - diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h index b2fbffc..a63cf8d 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h @@ -69,6 +69,15 @@ #define OC_BOARD_STATE_NORMAL ((UINT8)0) /*oc忨״̬*/ +#define OC_HAVE_YJK ((UINT8)0x55) /*OC߱Ӧ*/ +#define OC_NOT_YJK ((UINT8)0xAA) /*OC߱Ӧ*/ + +#define OC_CTLMODE_YJK ((UINT8)0x55) /*OC״̬Ӧ*/ +#define OC_CTLMODE_JK ((UINT8)0xAA) /*OC״̬ǻ*/ + +#define CHANGE_JK_COMMAND ((UINT16)0x00AA) /*л*/ +#define CHANGE_NO_COMMAND ((UINT16)0x00FF) /*л*/ + typedef struct s_OcDevState { UINT16 OcId;/*oc id*/ @@ -117,6 +126,23 @@ typedef struct s_PlusBox UINT8 chAsState; /*տ״̬ λʾ1տ״̬λʾ2տ״̬0x50xaϣźŻ䣬ֻһտλЧת޻ߡλЧ*/ }OcPlusBox; +typedef struct s_PsdInfo +{ + UINT16 wPsdId; /**/ + UINT8 OpenErrState; /*Ź״̬*/ + UINT8 CloseErrState; /*Ź״̬*/ + UINT8 OpenOrCloseState; /*״̬*/ + UINT8 InterlockRelState; /*״̬*/ + UINT32 psdFaultQStataOne; /*ϸϢĸֽ*/ + UINT32 psdFaultQStataTwo; /*ϸϢĸֽ*/ + UINT32 psdDoorsStateOne; /*ÿŵĿ״̬ĸֽ*/ + UINT32 psdDoorsStateTwo; /*ÿŵĿ״̬ĸֽ*/ + UINT32 psdDoorIStateOne; /*ÿŵıϢĸֽ*/ + UINT32 psdDoorIStateTwo; /*ÿŵıϢĸֽ*/ + UINT8 psdAlarmState; /*ϰﱨ״̬*/ + +}OcToCiPsdInfo; + typedef struct S_OcToCiDataStruct { UINT16 OcId; /*OC*/ @@ -147,6 +173,17 @@ typedef struct S_OcToCiDataStruct UINT16 OCBoardSwapSysNum;/*OCϵ忨*/ UINT8 SwapSysBoardId[MAX_OC_DEVICE_NUM];/*OCϵ忨ID*/ + UINT8 OCPsdNum;/**/ + UINT8 DrvPowerState;/*Դ״̬*/ + UINT8 CtlPowerState;/*ƵԴ״̬*/ + UINT8 EdgeCtllerState1;/*Ե1״̬*/ + UINT8 EdgeCtllerState2;/*Ե2״̬*/ + OcToCiPsdInfo PsdInfo[PSD_SUM_MAX];/*Ϣ*/ + + UINT8 chHaveYjk; /*Ƿ߱Ӧ*/ + UINT8 chControlMode; /*״̬*/ + UINT8 chOcYjpComm; /*OCYJPͨ״̬*/ + UINT32 ComStartCycle; /*ͨſʼڣʹøжOCCIж*/ UINT16 RecvErrorDevTypeCycle; /*յ豸*/ @@ -159,6 +196,7 @@ 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 @@ -266,6 +304,14 @@ extern OcFaultStateStruct m_OcFaultState[OC_SUM_MAX];/*CI #define LEN_OC_UP_TO_END_200(startIndex,gdBoardNo,diBoardNo,doBoardNo,siBoardNo,soBoardNo,sorBoardNo,pbNo,swapSysBoardNo) LEN_OC_UP_TO_SWAPSYSBOARD_NO_200((startIndex),(gdBoardNo),(diBoardNo),(doBoardNo),(siBoardNo),(soBoardNo),(sorBoardNo),(pbNo))+(swapSysBoardNo) +/*OC-300ӿʹ*/ +/*OCӿʼdevNo:豸gdBoardNo, diBoardNodi doBoardNodo siBoardNo:si soBoardNo:so sorBoardNo:sor pbNo:ִе swapSysBoardNo:ϵ忨*/ +#define LEN_OC_UP_TO_PSD_NO_300(startIndex,gdBoardNo,diBoardNo,doBoardNo,siBoardNo,soBoardNo, sorBoardNo,pbNo, swapSysBoardNo) LEN_OC_UP_TO_SWAPSYSBOARD_NO_200((startIndex),(gdBoardNo),(diBoardNo),(doBoardNo),(siBoardNo),(soBoardNo),(sorBoardNo), (pbNo))+(swapSysBoardNo)+1U + +/*OCӿʼdevNo:豸gdBoardNo, diBoardNodi doBoardNodo siBoardNo:si soBoardNo:so sorBoardNo:sor pbNo:ִе swapSysBoardNo:ϵ忨 psdNo:*/ +#define LEN_OC_UP_TO_END_300(startIndex,gdBoardNo,diBoardNo,doBoardNo,siBoardNo,soBoardNo,sorBoardNo,pbNo,swapSysBoardNo, psdNo) LEN_OC_UP_TO_PSD_NO_300((startIndex),(gdBoardNo),(diBoardNo),(doBoardNo),(siBoardNo),(soBoardNo),(sorBoardNo),(pbNo), swapSysBoardNo)+33*(psdNo) + (0u == psdNo?0u:4u) + + #ifdef __cplusplus extern "C" { @@ -400,6 +446,38 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength); */ void ResetOcOriginalState(const UINT8 ocId); +/* +* ΪָOC->CIĽṹȱʡֵ(ȫֵ) +* ˵ index:OC idӦ± +* ֵ 0:ʧ +* 1:ɹ +*/ +void SetOcToCiDefaultDataStru(UINT8 index); + +/* +* ȡҪ͸OCĿȨл +* ˵ +* ֵ Ȩл +*/ +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/ParsePackTmcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c index 5e54dc7..3a2896b 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c @@ -75,23 +75,23 @@ static UINT8 ParseSnowData(UINT8* dataBuf, UINT16 dataLen); static UINT8 ParseWLSData(UINT8* dataBuf, UINT16 dataLen); /* -* ITEȫгϢ +* ITEгϢ * ˵const UINT8* dataBuf, ݻ * const UINT16 dataLength, ݳ * ֵCI_ERROR 0 ݽʧ * CI_SUCCESS 1 ݽɹ * Created By LQ 2024.07.12 */ -static UINT8 ParseIteLineCutData(UINT8* dataBuf, UINT16 dataLen); +static UINT8 ParseIteCutData(UINT8* dataBuf, UINT16 dataLen); /* -* ITEȫгϢ +* ITEгϢ * ˵UINT8* TiocToTmcDataBuffer ݵַ * ֵ0 ʧ * ݳ * Created By LQ 2024.07.12 */ -static UINT16 PackToTmcIteLineCutData(UINT8* TiocToTmcDataBuffer); +static UINT16 PackToTmcIteCutData(UINT8* TiocToTmcDataBuffer); /* * ȫͨųϢ @@ -253,9 +253,9 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) break; case TMC_TO_TIOC_ITELINECUT_MSG: /* ITEȫгϢ */ - retVal = ParseIteLineCutData(&dataBuf[ii], wMsgCheckLen); + retVal = ParseIteCutData(&dataBuf[ii], wMsgCheckLen); dwParseStep |= 0x00010U; - debug_infor_printf((const)"\n ParseIteLineCutData:%d", retVal); + debug_infor_printf((const)"\n ParseIteCutData:%d", retVal); break; case TMC_TO_TIOC_LINECT_MSG: /* ȫͨųϢ */ @@ -652,11 +652,12 @@ static UINT8 ParseSnowData(UINT8* dataBuf, UINT16 dataLen) UINT8 cRetVal = CI_ERROR; UINT16 ii = 0u; UINT8 jj = 0U; - UINT32 dwPlatFormId = 0U; /*վ̨ͨID*/ + UINT16 wPlatFormId = 0U; /*վ̨ͨID*/ UINT8 cPlatFormNum = 0U; /*վ̨*/ UINT8 cTmepNum = 0U; UINT8 cPlatFormBelongCiId = 0U; /*վ̨LinkCI*/ UINT8 cLocalCiId = 0U; + UINT8 cSnowLevel = 0U; /*ʪȼ*/ if (NULL == dataBuf) { @@ -667,14 +668,23 @@ static UINT8 ParseSnowData(UINT8* dataBuf, UINT16 dataLen) cRetVal = CI_SUCCESS; } - /*ȫѩģʽЧ־λ */ + /*ȫѩ/ʪϢ*/ if (CI_SUCCESS == cRetVal) { - g_TmcToTiocDataStru.cSnowValidFlag = dataBuf[ii]; + g_TmcToTiocDataStru.cSnowValidFlag = dataBuf[ii]; /*ȫѩ/ʪģʽ*/ ii++; if ((CI_ALL_SNOW_VALID == g_TmcToTiocDataStru.cSnowValidFlag) || (CI_ALL_SNOW_UNVALID == g_TmcToTiocDataStru.cSnowValidFlag)) { - cRetVal = CI_SUCCESS; + cSnowLevel = dataBuf[ii]; /*ȫʪȼ*/ + ii++; + if ((CI_SNOW_LEVEL_DEFAULT == cSnowLevel) || (CI_SNOW_LEVEL_ONE == cSnowLevel) || (CI_SNOW_LEVEL_TWO == cSnowLevel)) + { + g_TmcToTiocDataStru.cSnowLevel = cSnowLevel; + } + else + { + cRetVal = CI_ERROR; + } } else { @@ -693,17 +703,21 @@ static UINT8 ParseSnowData(UINT8* dataBuf, UINT16 dataLen) cLocalCiId = GetSystemParaLocalCiId(); for (jj = 0U; jj < cPlatFormNum; jj++) { - dwPlatFormId = LongFromChar(&dataBuf[ii]); /*ѩվ̨ID*/ - ii += 4U; + wPlatFormId = ShortFromChar(&dataBuf[ii]); /*ѩվ̨ID*/ + ii += 2U; + cSnowLevel = dataBuf[ii]; /*ʪȼ*/ + ii++; - cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId((UINT16)dwPlatFormId); /*ȡѩվ̨*/ - if (0U < dwPlatFormId) + if ((0U < wPlatFormId) && (UINT16_MAX > wPlatFormId) + && (CI_SNOW_LEVEL_DEFAULT == cSnowLevel) || (CI_SNOW_LEVEL_ONE == cSnowLevel) || (CI_SNOW_LEVEL_TWO == cSnowLevel)) { + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(wPlatFormId); /*ȡѩվ̨*/ if ((cLocalCiId == cPlatFormBelongCiId) && (0U != cLocalCiId)) { if (LOCAL_AREA_SNOW_SUM_MAX > cTmepNum) { - g_TmcToTiocDataStru.szAreaSnowPlatFormId[cTmepNum] = dwPlatFormId; + g_TmcToTiocDataStru.szAreaSnowInfo[cTmepNum].wAreaId = wPlatFormId; + g_TmcToTiocDataStru.szAreaSnowInfo[cTmepNum].cAreaSnowLevel = cSnowLevel; cTmepNum++; } else @@ -719,7 +733,7 @@ static UINT8 ParseSnowData(UINT8* dataBuf, UINT16 dataLen) } else { - /*ѩģʽIDǷ*/ + /*ѩģʽIDǷʪȼǷʧ*/ cRetVal = CI_ERROR; } } @@ -908,7 +922,7 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) wMagLen = PackToTmcWLScreenData(&TiocToTmcDataBuffer[ii]); break; case 3u: - wMagLen = PackToTmcIteLineCutData(&TiocToTmcDataBuffer[ii]); + wMagLen = PackToTmcIteCutData(&TiocToTmcDataBuffer[ii]); break; case 4U: wMagLen = PackToTmcLineCTData(&TiocToTmcDataBuffer[ii]); @@ -1169,7 +1183,8 @@ static UINT16 PackToTmcSnowData(UINT8* TiocToTmcDataBuffer) UINT8 snowModelFlag = 0u; /*ȫѩģʽ־*/ UINT8 cFunRetVal = CI_ERROR; UINT8 cAreaSnowNum = 0U; /*ѩվ̨*/ - UINT32* pAreaSnowId = NULL; /*ѩվ̨ID*/ + AreaSnowInfoStruct* pAreaSnowData = NULL; /*ѩϢ*/ + UINT8 cSnowLevel = 0U; /*ʪ켶*/ snowModelFlag = GetAllSnowModel(); @@ -1191,14 +1206,30 @@ static UINT16 PackToTmcSnowData(UINT8* TiocToTmcDataBuffer) { TiocToTmcDataBuffer[ii++] = 0x55u; /* ȫѩģʽЧ */ } - else + else if (CI_ALL_SNOW_UNVALID == snowModelFlag) { TiocToTmcDataBuffer[ii++] = 0xAAu; /* ȫѩģʽЧ */ } + else + { + cFunRetVal = CI_ERROR; /*ȫʪ״̬󣬷ʧ*/ + } + + cSnowLevel = GetAllSnowLevel(); + if ((CI_SNOW_LEVEL_DEFAULT == cSnowLevel) || (CI_SNOW_LEVEL_ONE == cSnowLevel)|| (CI_SNOW_LEVEL_TWO == cSnowLevel)) + { + TiocToTmcDataBuffer[ii] = cSnowLevel; /*ȫʪ켶*/ + ii++; + } + else + { + cFunRetVal = CI_ERROR; /*ȫʪ켶󣬷ʧ*/ + } + /*ѩ״̬Ϣ*/ cAreaSnowNum = GetLocalAreaSnowNum(); - pAreaSnowId = GetLocalAreaSnowId(); + pAreaSnowData = GetLocalAreaSnow(); if (LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) { @@ -1207,8 +1238,19 @@ static UINT16 PackToTmcSnowData(UINT8* TiocToTmcDataBuffer) for (jj = 0U; jj < cAreaSnowNum; jj++) { - LongToChar(pAreaSnowId[jj], &TiocToTmcDataBuffer[ii]); /*ѩվ̨ID*/ - ii += 4U; + if ((0U < pAreaSnowData[jj].wAreaId) && (UINT16_MAX > pAreaSnowData[jj].wAreaId) + && ((CI_SNOW_LEVEL_DEFAULT == pAreaSnowData[jj].cAreaSnowLevel) || (CI_SNOW_LEVEL_ONE == pAreaSnowData[jj].cAreaSnowLevel) || (CI_SNOW_LEVEL_TWO == pAreaSnowData[jj].cAreaSnowLevel))) + { + ShortToChar(pAreaSnowData[jj].wAreaId, &TiocToTmcDataBuffer[ii]); /*ID*/ + ii += 2U; + TiocToTmcDataBuffer[ii] = pAreaSnowData[jj].cAreaSnowLevel; /*ʪ켶*/ + ii++; + } + else + { + cFunRetVal = CI_ERROR; /*ϢǷʧ*/ + break; + } } } else @@ -1328,21 +1370,28 @@ static UINT16 PackToTmcWLScreenData(UINT8* TiocToTmcDataBuffer) } /* -* ITEȫгϢ +* ITEгϢ * ˵const UINT8* dataBuf, ݻ * const UINT16 dataLength, ݳ * ֵCI_ERROR 0 ݽʧ * CI_SUCCESS 1 ݽɹ * Created By LQ 2024.07.12 */ -static UINT8 ParseIteLineCutData(UINT8* dataBuf, UINT16 dataLen) +static UINT8 ParseIteCutData(UINT8* dataBuf, UINT16 dataLen) { UINT8 cRetVal = CI_ERROR; UINT8 cIteLineCutState = 0U; /*ITEȫг״̬*/ - UINT16 ii = 0u; + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT16 wPlatFormId = 0U; /*վ̨ID*/ + UINT8 cPlatFormNum = 0U; /*վ̨*/ + UINT8 cTmepNum = 0U; + UINT8 cPlatFormBelongCiId = 0U; /*վ̨LinkCI*/ + UINT8 cLocalCiId = 0U; if (NULL != dataBuf) { + cRetVal = CI_SUCCESS; cIteLineCutState = dataBuf[ii]; ii++; @@ -1350,20 +1399,83 @@ static UINT8 ParseIteLineCutData(UINT8* dataBuf, UINT16 dataLen) { g_TmcToTiocDataStru.cIteLineCutState = cIteLineCutState; /*洢ITEȫг״̬*/ - if (dataLen == ii) - { - cRetVal = CI_SUCCESS; + /*ITEгϢ*/ + cPlatFormNum = dataBuf[ii]; /*ITEг*/ + ii++; + + if (ALL_AREA_SNOW_SUM_MAX >= cPlatFormNum) + { + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < cPlatFormNum; jj++) + { + wPlatFormId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + if ((0U < wPlatFormId) && (UINT16_MAX > wPlatFormId)) + { + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(wPlatFormId); /*ȡ*/ + if ((cLocalCiId == cPlatFormBelongCiId) && (0U != cLocalCiId)) + { + if (LOCAL_AREA_SNOW_SUM_MAX > cTmepNum) + { + g_TmcToTiocDataStru.szAreaIteCutId[cTmepNum] = wPlatFormId; + cTmepNum++; + } + else + { + debug_infor_printf((const)"ParseIteCutData: Local AreaIteCutNum Exceed Max\n"); + cRetVal = CI_ERROR; /*ITEгޣֹͣʧ*/ + } + } + else + { + /*DZ*/ + } + } + else + { + debug_infor_printf((const)"ParseIteCutData: Area Id Error\n"); + cRetVal = CI_ERROR; /*IDǷ*/ + } + + if (CI_SUCCESS != cRetVal) + { + break; /*ʧܣֹͣ*/ + } + else + { + /**/ + } + } + + g_TmcToTiocDataStru.cAreaIteCutNum = cTmepNum; + + if (CI_SUCCESS == cRetVal) + { + if (dataLen == ii) + { + /*ɹ*/ + } + else + { + debug_infor_printf((const)"ParseIteCutData: MsgLen Is Error\n"); + cRetVal = CI_ERROR; /*Ȳһ£ʧ*/ + } + } + else + { + /**/ + } } else { - debug_infor_printf((const)"ParseIteLineCutData Error: MsgLen Is Error\n"); - cRetVal = CI_ERROR; /*Ȳһ£ʧ*/ + debug_infor_printf((const)"ParseIteCutData: TMC AreaIteCutNum Exceed Max\n"); + cRetVal = CI_ERROR; /*ITEгޣʧ*/ } } else { cRetVal = CI_ERROR; /*״̬Ƿʧ*/ - debug_infor_printf((const)"ParseIteLineCutData Error: IteLineCutState[0x%2x] Is Invalid\n", cIteLineCutState); + debug_infor_printf((const)"ParseIteCutData: IteLineCutState[0x%2x] Is Invalid\n", cIteLineCutState); } } else @@ -1375,22 +1487,27 @@ static UINT8 ParseIteLineCutData(UINT8* dataBuf, UINT16 dataLen) } /* -* ITEȫгϢ +* ITEгϢ * ˵UINT8* TiocToTmcDataBuffer ݵַ * ֵ0 ʧ * ݳ * Created By LQ 2024.07.12 */ -static UINT16 PackToTmcIteLineCutData(UINT8* TiocToTmcDataBuffer) +static UINT16 PackToTmcIteCutData(UINT8* TiocToTmcDataBuffer) { UINT16 ii = 0U; UINT16 wMagLen = 0U; UINT16 wMagLenIndex = 0U; UINT16 wRetVal = 0U; UINT8 cIteLineCutState = 0U; /*ITEȫг״̬*/ + UINT8 cAreaIteCutNum = 0U; /*ITEг*/ + UINT16* pAreaIteCutId = NULL; /*ITEгID*/ + UINT8 jj = 0U; + UINT8 cFunRetVal = CI_ERROR; if (NULL != TiocToTmcDataBuffer) { + cFunRetVal = CI_SUCCESS; wMagLenIndex = ii; ii += 2U; @@ -1410,15 +1527,42 @@ static UINT16 PackToTmcIteLineCutData(UINT8* TiocToTmcDataBuffer) { TiocToTmcDataBuffer[ii] = CI_ITE_LINE_CUT_DEFAULT; /* Ĭֵ */ } - ii++; - /* дݳ */ - wMagLen = ii - wMagLenIndex; - wRetVal = wMagLen; - wMagLen -= 2U; + /*ITEгϢ*/ + cAreaIteCutNum = GetLocalAreaIteCutNum(); + pAreaIteCutId = GetLocalAreaIteCutId(); - ShortToChar(wMagLen, &TiocToTmcDataBuffer[wMagLenIndex]); + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaIteCutNum) && (NULL != pAreaIteCutId)) + { + TiocToTmcDataBuffer[ii] = cAreaIteCutNum; /*ITEг*/ + ii++; + + for (jj = 0U; jj < cAreaIteCutNum; jj++) + { + ShortToChar(pAreaIteCutId[jj], &TiocToTmcDataBuffer[ii]); /*ID*/ + ii += 2U; + } + } + else + { + debug_infor_printf((const)"PackToTmcIteCutData: Local AreaIteCutNum Exceed Max\n"); + cFunRetVal = CI_ERROR; /*ITEгޣʧ*/ + } + + if (CI_SUCCESS == cFunRetVal) + { + /* дݳ */ + wMagLen = ii - wMagLenIndex; + wRetVal = wMagLen; + wMagLen -= 2U; + + ShortToChar(wMagLen, &TiocToTmcDataBuffer[wMagLenIndex]); + } + else + { + /*ʧܣ0*/ + } } else { diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h index b6ba84f..a4d3244 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.h @@ -57,15 +57,17 @@ typedef struct S_TsrInputInfoStruct TsrDataStruct szTsrInfo[TSR_MAX_SUM]; /* Ϣ */ } TsrInputInfoStruct; - /*TMC->TIOC*/ typedef struct S_TmcToTiocDataStruct { TsrInputInfoStruct tsrInputInfoStru;/* ʱϢ */ UINT8 cSnowValidFlag; /* ȫѩģʽЧ־ */ + UINT8 cSnowLevel; /*ȫʪȼ*/ UINT8 cAreaSnowPlatFormNum; /*ѩվ̨*/ - UINT32 szAreaSnowPlatFormId[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩվ̨ID*/ + AreaSnowInfoStruct szAreaSnowInfo[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩ*/ UINT8 cIteLineCutState; /* ITEȫг״̬ */ + UINT8 cAreaIteCutNum; /*ITEг*/ + UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*ITEгID*/ UINT8 cLineCtNum; /*ȫͨų*/ UINT16 szLineCtId[TRAIN_SUM_MAX]; /*ȫͨųID*/ } TmcToTiocDataStruct; diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c index 3b17ad6..89734f9 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c @@ -382,14 +382,14 @@ static UINT8 PackCiToVobcSigInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wT static UINT8 PackCiToVobcBackUpStateData(UINT8* pDataBuf, UINT16* wDataLength, VobcToCiDataStruct* pstVobcToCiDataStru); /* -* CiIvocITEȫг״̬ +* CiIvocITEг״̬ * ˵const UINT8* dataBuf ݻΣ * const UINT16 *dataLength ݳȣΣ * ֵCI_ERROR 0 ʧ * CI_SUCCESS 1 ɹ * Created By LQ 2024.07.12 */ -static UINT8 PackCiToIvocIteLineCutInfo(UINT8* pDataBuf, UINT16* wDataLength); +static UINT8 PackCiToIvocIteCutInfo(UINT8* pDataBuf, UINT16* wDataLength); /* @@ -449,7 +449,8 @@ UINT8 ParseVobcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons UINT8 retVal = CI_SUCCESS; UINT8 lineIdentity = 0u; /*·ʶ*/ UINT8 galHeadSaved = 0u; - + VobcToCiDataStruct parseCheckVobcStruc = { 0 }; + UINT8 chFind = CI_ERROR; lineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*ȡ·ʶ*/ /*ܴVOBCж*/ if (VobcToCiSum >= VOBC_TO_CI_SUM_MAX) @@ -459,23 +460,21 @@ UINT8 ParseVobcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons if (CI_SUCCESS==retVal) { - (void)memset(&(VobcToCiDataStru[VobcToCiSum]),0,sizeof(VobcToCiDataStruct));/*ڴ棬ֹ*/ - if (LINE_HLHT == lineIdentity)/*ͨ·*/ { - retVal = ParseVobcToCiDataFrameHLHT(dataBuf, dataLength, systemId, &(VobcToCiDataStru[VobcToCiSum]), &galHeadSaved,logId); + retVal = ParseVobcToCiDataFrameHLHT(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved,logId); } else if (LINE_FAO == lineIdentity)/*FAO·*/ { - retVal = ParseVobcToCiDataFrameFAO(dataBuf,dataLength,systemId,&(VobcToCiDataStru[VobcToCiSum])); + retVal = ParseVobcToCiDataFrameFAO(dataBuf,dataLength,systemId,&parseCheckVobcStruc); } else if ((LINE_FAOHLHT == lineIdentity) || (LINE_FAOHLHT_ONESELF == lineIdentity)||(LINE_FAOHLHT_ONESELFSECOND == lineIdentity))/*FAO+HLHT·*/ { - retVal = ParseVobcToCiDataFrameFAOHLHT(dataBuf, dataLength, systemId, &(VobcToCiDataStru[VobcToCiSum]), &galHeadSaved,logId); + retVal = ParseVobcToCiDataFrameFAOHLHT(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved,logId); } else if (LINE_CC == lineIdentity)/*·*/ { - retVal = ParseIvocToCiDataFrameCC(dataBuf, dataLength, systemId, &(VobcToCiDataStru[VobcToCiSum]), &galHeadSaved, logId); + retVal = ParseIvocToCiDataFrameCC(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved, logId); } else { @@ -484,21 +483,25 @@ UINT8 ParseVobcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons if(CI_SUCCESS == retVal) { - VobcToCiSum++; /*ȥ*/ for (ii = 0u; ii < VobcToCiSum; ii++) { - /*һ*/ - if (ii == VobcToCiSum - 1u) - { + if (VobcToCiDataStru[ii].VobcId == parseCheckVobcStruc.VobcId) + {/*гӵгһ*/ + CopyVobcToCiMsg(&parseCheckVobcStruc,&(VobcToCiDataStru[ii])); + chFind = CI_SUCCESS; break; } - - if (VobcToCiDataStru[ii].VobcId == VobcToCiDataStru[VobcToCiSum - 1U].VobcId) - {/*гӵгһ*/ - CopyVobcToCiMsg(&(VobcToCiDataStru[VobcToCiSum-1U]),&(VobcToCiDataStru[ii])); - VobcToCiSum--; - } + } + if (CI_ERROR == chFind) + { + (void)CommonMemSet(&(VobcToCiDataStru[VobcToCiSum]), (UINT32)sizeof(VobcToCiDataStruct), 0U, (UINT32)sizeof(VobcToCiDataStruct));/*ڴ棬ֹ*/ + CopyVobcToCiMsg(&parseCheckVobcStruc, &(VobcToCiDataStru[VobcToCiSum])); + VobcToCiSum++; + } + else + { + ; /*Ѵڲ*/ } } else @@ -1410,11 +1413,7 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL INT32 vobcInfoRemainValidiy = 0; UINT8 headRet = HLHT_HEAD_ERROR;/*ͨ*/ UINT8 cTempPsdCmdCode = 0U; -#if 0 UINT32 signalId = 0u; /*VOBC->CIźŻID*/ - - -#endif UINT8 ci_vobcPrtclVersion = 0u; ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); @@ -1562,7 +1561,7 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL cmdType = dataBuf[ii];/*ȡ*/ ii += 1u; - if ((VOBCTOCI_COMMAND_TYPE_PSDOPEN == cmdType) || (VOBCTOCI_COMMAND_TYPE_PSDCLOSE == cmdType) || (VOBCTOCI_COMMAND_TYPE_PSDCHECK == cmdType)) /*ȱYF0083-6822023-07-03*/ + if ((VOBCTOCI_COMMAND_TYPE_PSDOPEN == cmdType) || (VOBCTOCI_COMMAND_TYPE_PSDCLOSE == cmdType) || (VOBCTOCI_COMMAND_TYPE_PSDCHECK_FAOHLHT == cmdType)) /*ȱYF0083-6822023-07-03*/ { vobcToCiDataStru->PsdData[jj].CmdType = cmdType; @@ -1578,16 +1577,13 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL ii++; } } - - /*޸20180111޸ԭ򣺻ͨVOBC-CIӿڻˣVOBCCI4ֽźŻIDӦԽ*/ -#if 0 /*µĽӿڣźŻID1~0xFFFFFFFF,0ΪĬֵVOBCȫǰǰгзͬźŻ*/ signalId = LongFromChar(&dataBuf[ii]); /*ȡźŻID*/ ii += 4u; vobcToCiDataStru->signalID = signalId; /*źŻID浽ṹ*/ -#endif + } else { @@ -1912,22 +1908,23 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) UINT32 ciEtcsId = 0u; UINT32 vobcEtcsId = 0u; UINT32 emapCheckVer = 0u; - UINT16 trackIdRelatePhySecId = 0u;/*ιID*/ - UINT8 outStationSignalSum = 0u;/*վźŻĿ*/ +#if 0 UINT8 sigIdx = 0u;/*źŻ*/ UINT8 sigDir = 0u;/*źŻӪ*/ + UINT16 trackIdRelatePhySecId = 0u;/*ιID*/ UINT8 outStationSignalAllowOrNotUp = CI_VOBC_SIGNAL_DEFAULT; /*źŻֹ״̬*/ UINT8 outStationSignalAllowOrNotDown = CI_VOBC_SIGNAL_DEFAULT; /*źŻֹ״̬*/ + UINT8 outStationSignalSum = 0u;/*վźŻĿ*/ +#endif UINT8 ci_vobcPrtclVersion = 0u; UINT8 mutualLockState = 0u; UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; UINT8 chPsdBelongCiId = 0U; - ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); -#if 0 UINT8 outStationSignalAllowOrNot = CI_VOBC_SIGNAL_DEFAULT; /*źŻֹ״̬*/ UINT32 signalIdInterConn = 0u; /*ͨ4ֽźŻID*/ -#endif + ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); + /*ȻȡʱϢȡɹбҪ*/ if ((CI_SUCCESS == dquDevName2HlhtId((CI_SYSTEM_TYPE_CI*256U) + localCiId,0U,&ciEtcsId)) && (CI_SUCCESS == dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC*256U) + (UINT8)(vobcToCiDataStru->VobcId),vobcToCiDataStru->vobcLogId,&vobcEtcsId)) && (CI_SUCCESS == GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC))) @@ -2027,7 +2024,7 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) }/*for (kk = 0; kk < vobcToCiDataStru->PsdSum; kk++)*/ /*޸20180111޸ԭ򣺻ͨVOBC-CIӿڻˣVOBCCI4ֽźŻIDCIҲظźŻIDӦԽ*/ -#if 0 + signalIdInterConn = vobcToCiDataStru->signalID; /*ͨ4ֽźŻID*/ /*ظյźŻID,CI-VOBCV3.0ӿĵ޸*/ LongToChar(signalIdInterConn,&CiToVobcDataBuffer[ii]); @@ -2037,7 +2034,7 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) if (CI_SUCCESS == retVal) { - startSigColour = GetSignalShowColor(sigId);/*ȡźŻǰʾɫ*/ + startSigColour = GetSignalCurColor(sigId);/*ȡźŻǰʾɫ*/ if (SIGNAL_OPEN == GetSignalOpenCloseState(startSigColour))/*ȡʼźŻ״̬*/ {/*źſ*/ @@ -2051,8 +2048,8 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) /*CIյVOBC͵źŻID״̬*/ CiToVobcDataBuffer[ii++] = outStationSignalAllowOrNot; /*CI->VOBCźŻ״̬*/ -#endif +#if 0 /*ȲҹζӦΣȡԴΪⷽһεźŻĿ֮*/ trackIdRelatePhySecId = GetTrackToPhySectionId(vobcToCiDataStru->trackSecID); outStationSignalSum = GetPhySecAsOutFirstPhySecSigSum(trackIdRelatePhySecId);/*ȡԱΪⷽһεźŻĿ*/ @@ -2093,7 +2090,7 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) /*CI->VOBCкгվźŻ״̬*/ CiToVobcDataBuffer[ii++] = outStationSignalAllowOrNotUp; /*CI_VOBCгվźŻ״̬*/ CiToVobcDataBuffer[ii++] = outStationSignalAllowOrNotDown; /*CI_VOBCгվźŻ״̬*/ - +#endif ShortToChar(CI_VOBC_INFO_TYPE_PSD_STATE,&CiToVobcDataBuffer[33]);/*ſƱֽͣ*/ } else if ((VOBC_CI_INFO_TYPE_HEART_FRAME == vobcToCiDataStru->appInfoType) && (curCycleNum == vobcToCiDataStru->ComStartCycle)) @@ -3327,6 +3324,8 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe UINT16 wHeadTrainId = 0U;/*ǰID*/ UINT16 wTrainRelLgcId = 0U;/*гʹö*/ UINT16 wHeadSignalId = 0U;/*ǰźŻID*/ + UINT8 chJumpBackState = 0U;/*Ծ*/ + UINT32 dwJumpBackSN = 0U;/*Ծк*/ vobcName = (CI_SYSTEM_TYPE_VOBC) * 256U + systemId; ciName = (CI_SYSTEM_TYPE_CI) * 256U + localCiId; @@ -4384,6 +4383,39 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe /*󲻼*/ } + /*Ծ*/ + if (CI_SUCCESS == chRetVal) + { + chJumpBackState = pDataBuf[ii]; + ii++; + if ((TRAIN_JUMP_BACK_STATE_VALID == chJumpBackState) + || (TRAIN_JUMP_BACK_STATE_INVALID == chJumpBackState)) + { + /*ͨ*/ + pstVobcToCiDataStru->chJumpBackApply = chJumpBackState; + dwJumpBackSN = LongFromChar(&pDataBuf[ii]); + ii += 4u; + if (((0U == dwJumpBackSN) && (TRAIN_JUMP_BACK_STATE_INVALID == chJumpBackState)) + || ((0U < dwJumpBackSN) && (TRAIN_JUMP_BACK_STATE_VALID == chJumpBackState))) + { + /*ͨ*/ + pstVobcToCiDataStru->dwJumpBackSn = dwJumpBackSN; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + ; /*󲻼*/ + } + /*гϢ*/ if (CI_SUCCESS == chRetVal) { @@ -5056,10 +5088,10 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToVobcSigInfo Error \n", pstVobcToCiDataStru->VobcId); } - /*ͨIVOCITEȫг״̬*/ + /*ͨIVOCITEг״̬*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocIteLineCutInfo(cszCiToIvocDataBuf, &ii); + chRetVal = PackCiToIvocIteCutInfo(cszCiToIvocDataBuf, &ii); } else { @@ -5075,9 +5107,8 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocIteLineCutInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocIteCutInfo Error \n", pstVobcToCiDataStru->VobcId); } - /*ͨIVOCгλüල״̬*/ if (CI_SUCCESS == chRetVal) { @@ -5089,9 +5120,10 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocFarNoOccuLogInfo Error \n", pstVobcToCiDataStru->VobcId); } + /*ͨIVOCԾظϢ*/ if (CI_SUCCESS == chRetVal) { - /*ɹ*/ + chRetVal = PackCiToIvocJumpBackReply(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); } else { @@ -5099,8 +5131,18 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocPosMonitorInfo Error \n", pstVobcToCiDataStru->VobcId); } + if (CI_SUCCESS == chRetVal) + { + /*ɹ*/ + } + else + { + /**/ + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocJumpBackReply Error \n", pstVobcToCiDataStru->VobcId); + } + /*Ԥ10ֽ*/ - ii += 10U; + ii += 5U; } else if ((IVOC_CI_INFO_TYPE_LOGOUT_ASK == pstVobcToCiDataStru->appInfoType) && (curCycleNum == pstVobcToCiDataStru->ComStartCycle)) {/*עظ֡*/ @@ -5426,7 +5468,7 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC /*鱸ͨITEȫгϢ*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocIteLineCutInfo(cszCiToIvocDataBuf, &ii); + chRetVal = PackCiToIvocIteCutInfo(cszCiToIvocDataBuf, &ii); } else { @@ -5442,7 +5484,7 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC else { /**/ - debug_infor_printf((const)"\n VOBC_BACKUP: %d PackCiToIvocIteLineCutInfo Error \n", pstVobcBackUpToCiDataStru->VobcId); + debug_infor_printf((const)"\n VOBC_BACKUP: %d PackCiToIvocIteCutInfo Error \n", pstVobcBackUpToCiDataStru->VobcId); } @@ -5456,7 +5498,7 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC debug_infor_printf((const)"\n VOBC_BACKUP: %d PackCiToIvocFarNoOccuLogInfo Error \n", pstVobcBackUpToCiDataStru->VobcId); } - /*Ԥ10ֽ*/ + /*Ԥ8ֽ*/ ii += 8U; } else @@ -6473,6 +6515,7 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) UINT8 cAllLineTsrState = CI_ALL_LINE_TSR_UNVALID;/* ȫʱ */ UINT8 cAllLineTsrSpeed = 0U;/* ѩģʽ־ */ UINT8 chSecFLockType = 0U;/*η*/ + UINT8 cSnowLevel = 0U; /*ʪȼ*/ if ((NULL == pDataBuf) || (NULL == wDataLength)) @@ -6512,10 +6555,23 @@ static UINT8 PackCiToIvocFLockInfo(UINT8* pDataBuf, UINT16 *wDataLength) /* ѩģʽ */ cSnowModel = GetAllSnowModel(); + cSnowLevel = GetAllSnowLevel(); + if (CI_ALL_SNOW_VALID == cSnowModel) { /* ѩ */ - pDataBuf[ii] = CI_ALL_SNOW_VALID; + 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 { @@ -6635,6 +6691,8 @@ static UINT8 PackCiToIvocCommTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) UINT8 chLinkLogicDirUpAndDown = 0u; UINT8 chTrainVirHeadScreenFlag = 0U;/*ǰɸ־*/ UINT8 chTrainVirTailScreenFlag = 0U;/*ɸ־*/ + UINT8 chTrainNvramFlag = 0U;/*гNVRAM־*/ + UINT8 chTrainReportState = 0U;/*г㱨״̬*/ if ((NULL == pDataBuf) || (NULL == wDataLength)) @@ -6770,8 +6828,18 @@ static UINT8 PackCiToIvocCommTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) } ii += 1U; /*гϢһֽƫ*/ + chTrainNvramFlag = GetTrainNvramPosFlag(wTrainId); + chTrainReportState = GetTrainReportState(wTrainId); /*״̬Ƿֱֵӷ*/ + if (TRAIN_NVRAM_POS_FLAG_YES == chTrainNvramFlag) + { + chTrainReportState = (UINT8)(chTrainReportState | 0X40U); + } + else + { + chTrainReportState = (UINT8)(chTrainReportState | 0X00U); + } - pDataBuf[ii] = GetTrainReportState(wTrainId); /*״̬Ƿֱֵӷ*/ + pDataBuf[ii] = chTrainReportState; ii += 1U; } @@ -9758,7 +9826,7 @@ static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, UINT16 kk = 0U; UINT8 cAreaSnowTotalNum = 0U; /*ѩվ̨*/ UINT16 wAreaSnowNumIndex = 0U; - UINT32* pAreaSnowId = NULL; /*ѩվ̨ID*/ + AreaSnowInfoStruct* pAreaSnowData = NULL; /*ѩϢ*/ ToCiAreaSnowStruct* pRecvCiAreaSnow = NULL; /*͵ѩϢ*/ UINT8 cWlbState = 0U; /*ȫ߽ƶ״̬*/ UINT8 cUrgentReason = 0U; /*ԭ*/ @@ -9766,6 +9834,8 @@ static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, 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)) { @@ -9776,14 +9846,26 @@ static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, wAreaSnowNumIndex = ii; /*ѩվ̨*/ ii++; cAreaSnowTotalNum = GetLocalAreaSnowNum(); - pAreaSnowId = GetLocalAreaSnowId(); + pAreaSnowData = GetLocalAreaSnow(); if (LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowTotalNum) { for (jj = 0U; jj < cAreaSnowTotalNum; jj++) { - LongToChar(pAreaSnowId[jj], &pDataBuf[ii]); /*ѩվ̨ID*/ - ii += 4U; + 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 @@ -9802,9 +9884,21 @@ static UINT8 PackCiToIvocSnowAndUrgentInfo(UINT8* pDataBuf, UINT16* pDataLength, { if (LOCAL_AREA_SNOW_SUM_MAX > cAreaSnowTotalNum) { - LongToChar(pRecvCiAreaSnow[kk].dwPlatFormId[jj], &pDataBuf[ii]); /*ѩվ̨ID*/ - ii += 4U; - 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 { @@ -10795,14 +10889,14 @@ static UINT8 PackCiToIvocBackUpReqStateInfo(UINT8* pDataBuf, UINT16* wDataLength UINT16 kk = 0U; UINT8 chAreaSnowTotalNum = 0U; /*ѩվ̨*/ UINT16 wAreaSnowNumIndex = 0U; - UINT32* pAreaSnowId = NULL; /*ѩվ̨ID*/ + AreaSnowInfoStruct* pAreaSnowData = NULL; /*ѩϢ*/ ToCiAreaSnowStruct* pRecvCiAreaSnow = NULL; /*͵ѩϢ*/ UINT8 chTsrSureFlag = GetTsrSureFlag();/* ȷϱ־λ */ UINT8 chAllLineTsrState = 0U;/*ȫʱٱ־*/ UINT8 chAllLineTsrSpeed = 0U;/*ȫʱֵ*/ UINT8 chWlbState = 0U; /*ȫ߽ƶ״̬*/ UINT8 chSnowModel = 0U; /* ѩģʽ */ - + UINT16 wSnowPlatId = 0U; if ((NULL == pDataBuf) || (NULL == wDataLength)) { @@ -10880,14 +10974,22 @@ static UINT8 PackCiToIvocBackUpReqStateInfo(UINT8* pDataBuf, UINT16* wDataLength wAreaSnowNumIndex = ii; /*ѩվ̨*/ ii++; chAreaSnowTotalNum = GetLocalAreaSnowNum(); - pAreaSnowId = GetLocalAreaSnowId(); + pAreaSnowData = GetLocalAreaSnow(); if (ALL_AREA_SNOW_SUM_MAX >= chAreaSnowTotalNum) { for (jj = 0U; jj < chAreaSnowTotalNum; jj++) { - LongToChar(pAreaSnowId[jj], &pDataBuf[ii]); /*ѩվ̨ID*/ - ii += 4U; + wSnowPlatId = pAreaSnowData[jj].wAreaId; + if ((0UwSnowPlatId)) + { + ShortToChar(wSnowPlatId, &pDataBuf[ii]); /*ѩվ̨ID*/ + ii += 2U; + } + else + { + chRetVal = CI_ERROR; /*ѩվ̨IDǷʧ*/ + } } } else @@ -10906,9 +11008,17 @@ static UINT8 PackCiToIvocBackUpReqStateInfo(UINT8* pDataBuf, UINT16* wDataLength { if (ALL_AREA_SNOW_SUM_MAX > chAreaSnowTotalNum) { - LongToChar(pRecvCiAreaSnow[kk].dwPlatFormId[jj], &pDataBuf[ii]); /*ѩվ̨ID*/ - ii += 4U; - chAreaSnowTotalNum++; + wSnowPlatId = pRecvCiAreaSnow[kk].szPlatFormInfo[jj].wAreaId; + if ((0U < wSnowPlatId) && (UINT16_MAX > wSnowPlatId)) + { + ShortToChar(wSnowPlatId, &pDataBuf[ii]); /*ѩվ̨ID*/ + ii += 2U; + chAreaSnowTotalNum++; + } + else + { + chRetVal = CI_ERROR; /*ѩվ̨IdǷʧ*/ + } } else { @@ -12057,7 +12167,7 @@ static UINT8 PackCiToVobcBackUpStateData(UINT8* pDataBuf, UINT16* wDataLength,Vo /*鱸ͨITEȫгϢ*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocIteLineCutInfo(pDataBuf, &ii); + chRetVal = PackCiToIvocIteCutInfo(pDataBuf, &ii); } else { @@ -12073,7 +12183,7 @@ static UINT8 PackCiToVobcBackUpStateData(UINT8* pDataBuf, UINT16* wDataLength,Vo else { /**/ - debug_infor_printf((const)"\n FAOHLHTVOBC_BACKUP: %d PackCiToIvocIteLineCutInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n FAOHLHTVOBC_BACKUP: %d PackCiToIvocIteCutInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -12101,21 +12211,28 @@ static UINT8 PackCiToVobcBackUpStateData(UINT8* pDataBuf, UINT16* wDataLength,Vo } /* -* CiIvocITEȫг״̬ +* CiIvocITEг״̬ * ˵const UINT8* dataBuf ݻΣ * const UINT16 *dataLength ݳȣΣ * ֵCI_ERROR 0 ʧ * CI_SUCCESS 1 ɹ -* Created By LQ 2024.07.12 +* Modified By LQ 2025.04.15 */ -static UINT8 PackCiToIvocIteLineCutInfo(UINT8* pDataBuf, UINT16* wDataLength) +static UINT8 PackCiToIvocIteCutInfo(UINT8* pDataBuf, UINT16* wDataLength) { UINT8 chRetVal = CI_ERROR; UINT16 ii = 0U; UINT8 cIteLineCutState = CI_ITE_LINE_CUT_INVALID;/* ITEȫг״̬ */ + UINT16 wAreaIteCutNumIndex = 0U; + UINT8 cAreaIteCutNum = 0U; /*ITEг*/ + UINT16* pAreaIteCutId = NULL; /*ITEгID*/ + UINT8 jj = 0U; + ToCiAreaIteCutStruct* pRecvCiAreaIteCut = NULL; /*͵ITEгϢ*/ + UINT16 kk = 0U; if ((NULL != pDataBuf) && (NULL != wDataLength)) { + chRetVal = CI_SUCCESS; ii = *wDataLength; /* ITEȫг״̬ */ @@ -12128,11 +12245,82 @@ static UINT8 PackCiToIvocIteLineCutInfo(UINT8* pDataBuf, UINT16* wDataLength) { pDataBuf[ii] = CI_ITE_LINE_CUT_DEFAULT; /* Ĭֵ */ } - ii++; - *wDataLength = ii; /*ݳ*/ - chRetVal = CI_SUCCESS; + /*鱾ITEгϢ*/ + wAreaIteCutNumIndex = ii; /*ITEг*/ + ii++; + cAreaIteCutNum = GetLocalAreaIteCutNum(); + pAreaIteCutId = GetLocalAreaIteCutId(); + + if ((ALL_AREA_SNOW_SUM_MAX >= cAreaIteCutNum) && (NULL != pAreaIteCutId)) + { + for (jj = 0U; jj < cAreaIteCutNum; jj++) + { + ShortToChar(pAreaIteCutId[jj], &pDataBuf[ii]); /*ID*/ + ii += 2U; + } + } + else + { + chRetVal = CI_ERROR; /*ITEгޣʧ*/ + debug_infor_printf((const)"\n PackCiToIvocIteCutInfo: LocalAreaIteCutInfo Error\n"); + } + + /*͵ITEгϢ*/ + pRecvCiAreaIteCut = GetCiRecvAreaIteCutInfo(); + if (NULL != pRecvCiAreaIteCut) + { + for (kk = 0U; kk < CI_COM_CI_MAX_NUM; kk++) + { + if (0U != pRecvCiAreaIteCut[kk].cAreaIteCutNum) + { + for (jj = 0U; jj < pRecvCiAreaIteCut[kk].cAreaIteCutNum; jj++) + { + if (ALL_AREA_SNOW_SUM_MAX > cAreaIteCutNum) + { + ShortToChar(pRecvCiAreaIteCut[kk].wAreaIteCutId[jj], &pDataBuf[ii]); /*ID*/ + ii += 2U; + cAreaIteCutNum++; + } + else + { + debug_infor_printf((const)"\n PackCiToIvocIteCutInfo: LocalAreaIteCutNum Error\n"); + chRetVal = CI_ERROR; /*ITEгޣʧ*/ + break; + } + } + } + else + { + /**/ + } + + if (CI_SUCCESS != chRetVal) + { + break; /*ʧܣֹͣ*/ + } + else + { + /**/ + } + } + } + else + { + debug_infor_printf((const)"\n PackCiToIvocIteCutInfo: CiRecvAreaIteCutInfo Error\n"); + chRetVal = CI_ERROR; /*ȡʧܣʧ*/ + } + + if (CI_SUCCESS == chRetVal) + { + pDataBuf[wAreaIteCutNumIndex] = cAreaIteCutNum; /*ITEг*/ + *wDataLength = ii; /*ݳ*/ + } + else + { + chRetVal = CI_ERROR; /*ʧܣʧ*/ + } } else { @@ -12249,4 +12437,244 @@ static UINT8 PackCiToIvocPosMonitorInfo(UINT8* pDataBuf, UINT16* wDataLength, co } return chRetVal; +} + +/* +* طɳ崻 +* ˵ +* ֵ +* by cgh 20250630 +*/ +void PackCiToVobcFlyProtectData(void) +{ + UINT8 jj = 0U; + UINT8 chLineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); + UINT8 chFlyProtectTrainNum = GetFlyProtectNum(); /*ɳ崻Ŀ*/ + TrainFlyProtectStru* pFlyData = NULL; /*ɳ崻*/ + UINT8 cNvramFlyProtectNum = 0U; /*ʹNVRAMλüලЧķɳ*/ + UINT16* pNvramFlyProtectId = NULL; /*ʹNVRAMλüලЧķɳID*/ + + cNvramFlyProtectNum = GetNvramFlyProtectNum(); /*ȡʹNVRAMλüලЧķɳ*/ + pNvramFlyProtectId = GetNvramFlyProtectId(); /*ȡʹNVRAMλüලЧķɳID*/ + if ((LINE_CC == chLineIdentity) + && (SHUT_DOWN_TRAIN_NUMMAX > chFlyProtectTrainNum) + && (SHUT_DOWN_TRAIN_NUMMAX > cNvramFlyProtectNum) && (NULL != pNvramFlyProtectId)) + { + /*ɳ崻ķɳؿر*/ + for (jj = 0U; jj < chFlyProtectTrainNum; jj++) + { + pFlyData = GetFlyProtectData(jj); + if (NULL != pFlyData) + { + PackCiToVobcFlyProtectInfo(pFlyData->wTrainId); + } + 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 + { + ; /*ӿ޴֡*/ + } + +} + +/* +* CiIvocԾظ +* ˵ UINT8* dataBuf, ݻ +* UINT16 *dataLength, ݳ +* UINT16 wTrainId гID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Create fan 20250725 +*/ +UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 ii = 0U; + UINT8 chJumpBackReplyState = 0U; + UINT32 dwJumpBackSn = 0U; + + if ((NULL == pDataBuf) || (NULL == wDataLength)) + { + chRetVal = CI_ERROR; + } + else + { + + ii = *wDataLength; + chRetVal = CI_SUCCESS; + + + chJumpBackReplyState = GetTrainJumpBackReplyState(wTrainId); + if ((TRAIN_JUMP_BACK_STATE_NONE == chJumpBackReplyState) + || (TRAIN_JUMP_BACK_STATE_VALID == chJumpBackReplyState) || (TRAIN_JUMP_BACK_STATE_INVALID == chJumpBackReplyState)) + { + pDataBuf[ii] = chJumpBackReplyState; + ii++; + + if (TRAIN_JUMP_BACK_STATE_NONE == chJumpBackReplyState) + { + LongToChar(0U, &pDataBuf[ii]); + ii += 4U; + } + else + { + /*ظк*/ + dwJumpBackSn = GetTrainJumpBackApplySN(wTrainId); + LongToChar(dwJumpBackSn, &pDataBuf[ii]); + ii += 4U; + } + } + else + { + chRetVal = CI_ERROR; + } + } + + if (CI_SUCCESS == chRetVal) + { + *wDataLength = ii; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; + } \ 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 124cb4e..f554a8e 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h @@ -102,6 +102,7 @@ #define CI_IVOC_INFO_TYPE_LOGOUT_ACK ((UINT16)0x0204U) /*OC->IVOCעظ֡*/ #define IVOC_CI_INFO_TYPE_HEART_FRAME ((UINT16)0x0205U) /*IVOC->OC֡*/ #define CI_IVOC_INFO_TYPE_HEART_FRAME ((UINT16)0x0206U) /*OC->IVOC֡*/ +#define CI_IVOC_INFO_TYPE_SPECIAL_CONTROL ((UINT16)0x0208U) /*rc->IVOCؿر֡*/ #define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBCЭ汾*/ #define CI_IVOC_BACKUP_PRTCL_VER ((UINT8)0x066) /*CI_VOBCͨЭ汾*/ @@ -222,6 +223,8 @@ #define CI_VOBC_BACKUP_SEND_ROUTE_SUM ((UINT8)5U) /*CIغͨ·ֵ*/ +#define CI_IVOC_LOST_POSITION ((UINT8)0x55U) /*CIؿر λ*/ + #ifdef __cplusplus extern "C" { #endif @@ -353,6 +356,8 @@ typedef struct S_VobcToCiDataStruct UINT8 chNvramPosFlag; /*NVNAMλñʶ 0x55гʹNVRAMλ 0xaaгδʹNVRAMλ*/ UINT16 wHeadSigId; /*ǰźŻID*/ UINT16 wHeadVobcId; /*ǰID*/ + UINT8 chJumpBackApply; /*Ծ*/ + UINT32 dwJumpBackSn; /*Ծк*/ } VobcToCiDataStruct; /*ʹúģʽͨŵVobcϢ*/ @@ -683,6 +688,32 @@ UINT8 ParseFAOHLHTOtherTypeData(const UINT16 appInfoType, UINT8* dataBuf, UINT16 */ UINT8 ParseFAOHLHTBackUpControlData(UINT8* dataBuf, UINT16 dataLen, VobcToCiDataStruct* vobcToCiDataStru); +/* +* طɳ崻 +* ˵ +* ֵ +* by cgh 20250630 +*/ +void PackCiToVobcFlyProtectData(void); + +/* +* RCطɳ崻Ϣ +* ˵const UINT16 wTrainId гID +* ֵ +* Created By LQ 2025.09.15 +*/ +void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId); + +/* +* CiIvocԾظ +* ˵ UINT8* dataBuf, ݻ +* UINT16 *dataLength, ݳ +* UINT16 wTrainId гID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Create fan 20250725 +*/ +UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c index bed6509..f7bec68 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c @@ -58,6 +58,9 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) UINT16 wMsgLen = 0u; /*ӦϢȼ¼*/ UINT16 wMsgType = 0u; /*ӦϢ*/ UINT16 wMsgCheckLen = 0u; /* ڽУݳ */ + UINT8 funRet = 0U; + UINT32 dwCurCyc = 0U; + UINT8 chDataType = 0U; lineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*ȡ·ʶ*/ @@ -66,7 +69,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) zcName = (CI_SYSTEM_TYPE_ZC)*256U + systemId; ciName = (CI_SYSTEM_TYPE_CI)*256U + localCiId; curntCycleNo = Get2oo2CurCycleNum(); - + chDataType = GetLocalPublicDataType(); /*28.0.0.14·zcӿ*/ if ((NULL != dataBuf) && (dataLength > 0u)) { sourceId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_ZC);/*ȡ뱾ͨŵZCIDĿǰһֻһZCͨ*/ @@ -128,102 +131,121 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) /*Ч*/ retVal = CI_SUCCESS; { - while (wTmpDataLen < hlhtGalHead.totalDataLen) + if (DATA_TYPE_NEW == chDataType) { - /* һӦݳ */ - wMsgLen = ShortFromChar(&dataBuf[ii]); + while (wTmpDataLen < hlhtGalHead.totalDataLen) + { + /* һӦݳ */ + wMsgLen = ShortFromChar(&dataBuf[ii]); - ii += 2u; - wTmpDataLen += 2U; - wTmpDataLen += wMsgLen; - - if (0u == wMsgLen) - { - ; /* ޴һ */ - } - else if (5u > wMsgLen) - { - /* Ȳ */ - retVal = CI_ERROR; - debug_infor_printf((const)"ParseZcToCiDataFrame_Error wMsgLen\n"); - } - else - { - /* ȡ */ - wMsgType = ShortFromChar(&dataBuf[ii]); ii += 2u; + wTmpDataLen += 2U; + wTmpDataLen += wMsgLen; - /* Ԥ */ - ii += 2u; - - wMsgCheckLen = wMsgLen - 4u;/*ӦñĽȣɾԤ22ֽ*/ - switch (wMsgType) + if (0u == wMsgLen) { - case ZC_TO_TIOC_MASK_MSG: - /* ZC-CIλϢ */ - retVal = ParseMaskData(&dataBuf[ii], wMsgCheckLen); - dwStep |= 0x10000U; - break; - case ZC_TO_TIOC_TSR_MSG: - /* ʱϢ */ - retVal = ParseZcTsrData(&dataBuf[ii], wMsgCheckLen); - dwStep |= 0x01000U; - break; - case ZC_TO_TIOC_WLB_MSG: - /* ƶϢ */ - retVal = ParseZcEbData(&dataBuf[ii], wMsgCheckLen); - dwStep |= 0x00100U; - break; - case ZC_TO_TIOC_SNOW_MSG: - /*ZC-CIѩģʽϢ*/ - retVal = ParseZcSnowData(&dataBuf[ii], wMsgCheckLen); - dwStep |= 0x00010U; - break; - case ZC_TO_TIOC_ITELINECUT_MSG: - /*ZC-CIITEгϢ*/ - retVal = ParseZcIteLineCutData(&dataBuf[ii], wMsgCheckLen); - dwStep |= 0x00001U; - break; - default: - retVal = CI_ERROR; - break; + ; /* ޴һ */ } - - if (CI_SUCCESS == retVal) + else if (5u > wMsgLen) { - /* ɹݰ */ - ii += wMsgCheckLen; + /* Ȳ */ + retVal = CI_ERROR; + debug_infor_printf((const)"ParseZcToCiDataFrame_Error wMsgLen\n"); } else { - debug_infor_printf((const)"ParseZcToCiDataFrame_Error Step: 0x%5x\n", dwStep); - ClearZcData(); /*ⲽûͨ*/ + /* ȡ */ + wMsgType = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /* Ԥ */ + ii += 2u; + + wMsgCheckLen = wMsgLen - 4u;/*ӦñĽȣɾԤ22ֽ*/ + switch (wMsgType) + { + case ZC_TO_TIOC_MASK_MSG: + /* ZC-CIλϢ */ + retVal = ParseMaskData(&dataBuf[ii], wMsgCheckLen); + dwStep |= 0x10000U; + break; + case ZC_TO_TIOC_TSR_MSG: + /* ʱϢ */ + retVal = ParseZcTsrData(&dataBuf[ii], wMsgCheckLen); + dwStep |= 0x01000U; + break; + case ZC_TO_TIOC_WLB_MSG: + /* ƶϢ */ + retVal = ParseZcEbData(&dataBuf[ii], wMsgCheckLen); + dwStep |= 0x00100U; + break; + case ZC_TO_TIOC_SNOW_MSG: + /*ZC-CIѩģʽϢ*/ + retVal = ParseZcSnowData(&dataBuf[ii], wMsgCheckLen); + dwStep |= 0x00010U; + break; + case ZC_TO_TIOC_ITELINECUT_MSG: + /*ZC-CIITEгϢ*/ + retVal = ParseZcIteCutData(&dataBuf[ii], wMsgCheckLen); + dwStep |= 0x00001U; + break; + default: + retVal = CI_ERROR; + break; + } + + if (CI_SUCCESS == retVal) + { + /* ɹݰ */ + ii += wMsgCheckLen; + } + else + { + debug_infor_printf((const)"ParseZcToCiDataFrame_Error Step: 0x%5x\n", dwStep); + ClearZcData(); /*ⲽûͨ*/ + } + } + + if (CI_ERROR == retVal) /*ʧ*/ + { + break; + } + else + { + ; /*do nothing*/ } } - - if (CI_ERROR == retVal) /*ʧ*/ + if (CI_SUCCESS == retVal) { - break; + /*Уݳ*/ + if (ii > dataLength) + { + retVal = CI_ERROR; + } + } + } + else + { + /*ޱ͡ͳȺԤ߱λ0201*/ + wMsgCheckLen = hlhtGalHead.totalDataLen; + retVal = ParseMaskData(&dataBuf[ii], wMsgCheckLen); + if (CI_ERROR == retVal) + { + debug_infor_printf((const)"\nParseZcToCiDataFrame_Error MaskOnly\n"); + ClearZcData(); /*ûͨ*/ } else { - ; /*do nothing*/ - } - } - - if (CI_SUCCESS == retVal) - { - /*Уݳ*/ - if (ii > dataLength) - { - retVal = CI_ERROR; + ; /**/ } } if (CI_SUCCESS == retVal) { /*ͨ*/ - if (SetCiTransmitRecvDataCycNum(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_ZC, sourceId[0], Get2oo2CurCycleNum()) == CI_ERROR) + dwCurCyc = Get2oo2CurCycleNum(); + funRet = SetCiTransmitRecvDataCycNum(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0], dwCurCyc); + if (CI_ERROR == funRet) {/*ʧ*/ } @@ -231,7 +253,8 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) {/*ڳɹ*/ /*ZCͨ״̬жZCǷͨж*/ - if (UpdateCiTransmitState(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_ZC, sourceId[0]) == CI_ERROR) + funRet = UpdateCiTransmitState(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0]); + if (CI_ERROR == funRet) { /*ͨ״̬ʧ*/ } @@ -888,12 +911,13 @@ UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen) UINT8 cRetVal = CI_ERROR; UINT16 ii = 0u; UINT8 jj = 0U; - UINT16 dwPlatFormId = 0U; /*վ̨ͨID*/ + UINT16 wPlatFormId = 0U; /*վ̨ͨID*/ UINT8 cPlatFormNum = 0U; /*ZCѩվ̨*/ UINT8 cTmepNum = 0U;/*ѩվ̨*/ UINT8 cPlatFormBelongCiId = 0U; /*վ̨LinkCI*/ UINT8 cLocalCiId = 0U; UINT8 chLocalSnowValidFlag = 0U; /*ѩЧ־*/ + UINT8 cAllLineSnowLevel = 0U; /*ȫʪ켶*/ if (NULL == dataBuf) { @@ -940,17 +964,18 @@ UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen) cLocalCiId = GetSystemParaLocalCiId(); for (jj = 0U; jj < cPlatFormNum; jj++) { - dwPlatFormId = ShortFromChar(&dataBuf[ii]); /*ѩվ̨ID*/ + wPlatFormId = ShortFromChar(&dataBuf[ii]); /*ѩվ̨ID*/ ii += 2U; - cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(dwPlatFormId); /*ȡѩվ̨*/ - if (0U != dwPlatFormId) + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(wPlatFormId); /*ȡѩվ̨*/ + if ((0U < wPlatFormId)&& (UINT16_MAX > wPlatFormId)) { if (cLocalCiId == cPlatFormBelongCiId) { /*վ̨ڱ*/ if (LOCAL_AREA_SNOW_SUM_MAX > cTmepNum) { - ZcToCiDataStru.szAreaSnowPlatFormId[cTmepNum] = (UINT32)dwPlatFormId; + ZcToCiDataStru.szAreaSnowInfo[cTmepNum].wAreaId = wPlatFormId; + ZcToCiDataStru.szAreaSnowInfo[cTmepNum].cAreaSnowLevel = CI_SNOW_LEVEL_DEFAULT; /*CIģʽʪȼΪĬֵ(TMC)*/ cTmepNum++; } else @@ -968,7 +993,7 @@ UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen) else { cRetVal = CI_ERROR; /*ѩվ̨IdǷʧ*/ - debug_infor_printf((const)"ParseZcToCiSNOW_Error dwPlatFormId\n"); + debug_infor_printf((const)"ParseZcToCiSNOW_Error wPlatFormId\n"); } } @@ -1043,6 +1068,7 @@ UINT8 PackCiToZcData( UINT8 deviceId) UINT32 dwHlhtHSrcSN = 0u; UINT32 dwHlhtHRcvSN = 0u; UINT16 totallenIndex = 0U; + UINT8 chDataType = 0U; localCi = GetSystemParaLocalCiId(); /*ȡID*/ ci_zcPrtclVersion = GetVersionOfZCToCI(); @@ -1052,6 +1078,7 @@ UINT8 PackCiToZcData( UINT8 deviceId) dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_ZC, deviceId); dwHlhtHRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_ZC, deviceId); CiEmapCheckVer = GetCiEmapCheckVer(localCi, &emapCheckVer, CI_SYSTEM_TYPE_ZC); + chDataType = GetLocalPublicDataType(); if ((CI_SUCCESS == CIName2HlhtId) && (CI_SUCCESS == ZCName2HlhtId) && (CI_SUCCESS == CiEmapCheckVer)) { retVal = CI_SUCCESS; @@ -1120,13 +1147,19 @@ UINT8 PackCiToZcData( UINT8 deviceId) totallenIndex = ii; ii += 2u;/*ͨñͷеӦò㱨ܳ*/ + if (DATA_TYPE_NEW == chDataType) + { + ii += 2u;/*ͨñͷеӦò㱨ij(0x202ij)*/ - ii += 2u;/*ͨñͷеӦò㱨ij(0x202ij)*/ + ShortToChar(TIOC_TO_ZC_MASK_MSG, &CiToZcDataBuffer[ii]);/*ӿϢ*/ + ii += 2u; - ShortToChar(TIOC_TO_ZC_MASK_MSG, &CiToZcDataBuffer[ii]);/*ӿϢ*/ - ii += 2u; - - ii += 2u; /*Ԥ*/ + ii += 2u; /*Ԥ*/ + } + else + { + ;/*·0x202ijȡͼԤ*/ + } /*λϢ*/ (void)MaskPack(CI_SYSTEM_TYPE_ZC,&CiToZcDataBuffer[ii]); @@ -1134,11 +1167,12 @@ UINT8 PackCiToZcData( UINT8 deviceId) /*ͨñͷӦò㱨ܳ*/ ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]); - - /*ͨӦò㱨ܳ*/ - totallenIndex += 2U; - ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]); - + if (DATA_TYPE_NEW == chDataType) + { + /*ͨӦò㱨ij(0x202ij)*/ + totallenIndex += 2U; + ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]); + } /*ZC*/ ClearZcData(); @@ -1322,21 +1356,25 @@ ZcToCiDataStruct* GetZcToCiDataStru(void) } /* -* ZCCIITEȫг״̬ +* ZCCIITEг״̬ * ˵INT8* dataBuf ݻ * UINT16 dataLength ݳ * ֵCI_ERROR 0 ݽʧ * CI_SUCCESS 1 ݽɹ -* Created By LQ 2024.07.12 +* Edit By LQ 2025.04.15 */ -UINT8 ParseZcIteLineCutData(UINT8* dataBuf, UINT16 dataLen) +UINT8 ParseZcIteCutData(UINT8* dataBuf, UINT16 dataLen) { UINT8 cRetVal = CI_ERROR; UINT8 cIteLineCutState = CI_ITE_LINE_CUT_INVALID; /*ZC͵ITEȫг״̬*/ UINT16 ii = 0U; + UINT8 jj = 0U; + UINT16 wPlatFormId = 0U; /*վ̨ID*/ + UINT8 cPlatFormNum = 0U; /*ZCITEг*/ if (NULL != dataBuf) { + cRetVal = CI_SUCCESS; /*ZC͵ITEȫг״̬*/ cIteLineCutState = dataBuf[ii]; ii++; @@ -1345,19 +1383,56 @@ UINT8 ParseZcIteLineCutData(UINT8* dataBuf, UINT16 dataLen) { ZcToCiDataStru.cIteLineCutState = cIteLineCutState; - if (dataLen == ii) + cPlatFormNum = dataBuf[ii]; /*ITEг*/ + ii++; + + if (ALL_AREA_SNOW_SUM_MAX >= cPlatFormNum) { - cRetVal = CI_SUCCESS; + ZcToCiDataStru.cAreaIteCutNum = cPlatFormNum; + + for (jj = 0U; jj < cPlatFormNum; jj++) + { + wPlatFormId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + if ((0U < wPlatFormId) && (UINT16_MAX > wPlatFormId)) + { + ZcToCiDataStru.szAreaIteCutId[jj] = wPlatFormId; + } + else + { + debug_infor_printf((const)"ParseZcIteCutData: PlatFormId Error\n"); + cRetVal = CI_ERROR; /*IDǷʧ*/ + break; + } + } + + if (CI_SUCCESS == cRetVal) + { + if (dataLen != ii) + { + debug_infor_printf((const)"ParseZcIteCutData: Msg Len Error\n"); + cRetVal = CI_ERROR; + } + else + { + /**/ + } + } + else + { + /**/ + } } else { - debug_infor_printf((const)"ParseZcIteLineCutData Error: MsgLen Is Error\n"); - cRetVal = CI_ERROR; /*Ȳһ£ʧ*/ + debug_infor_printf((const)"ParseZcIteCutData: ZC AreaIteCutNum Error\n"); + cRetVal = CI_ERROR; /*ZCITEгޣʧ*/ } } else { - debug_infor_printf((const)"ParseZcIteLineCutData Error: IteLineCutState Is Invalid\n"); + debug_infor_printf((const)"ParseZcIteCutData Error: IteLineCutState Error\n"); cRetVal = CI_ERROR; /*״̬Ƿʧ*/ } } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h index 6bec290..ff0f396 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h @@ -33,7 +33,7 @@ #define ZC_TO_TIOC_TSR_MSG ((UINT16)0x0203u) /*ZCTIOCʱϢ*/ #define ZC_TO_TIOC_WLB_MSG ((UINT16)0x0204u) /*ZCTIOCƶϢ*/ #define ZC_TO_TIOC_SNOW_MSG ((UINT16)0x0205u) /*ZCTIOCѩģʽϢ*/ -#define ZC_TO_TIOC_ITELINECUT_MSG ((UINT16)0x0206U) /*ZCTIOCITEг״̬Ϣ*/ +#define ZC_TO_TIOC_ITELINECUT_MSG ((UINT16)0x0206U) /*ZCTIOCȫITEг״̬Ϣ*/ #define ZC_TSR_VALID ((UINT8)0x55U) /*ZCʱЧ*/ #ifdef __cplusplus @@ -59,9 +59,11 @@ typedef struct S_ZcToCiDataStruct EbInputInfoStruct esbInputInfoStruct; /*ƶϢ*/ UINT8 cSnowValidFlag; /* ȫѩģʽЧ־ */ UINT8 cAreaSnowPlatFormNum; /*ѩվ̨*/ - UINT32 szAreaSnowPlatFormId[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩվ̨ID*/ + AreaSnowInfoStruct szAreaSnowInfo[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩ*/ UINT8 chLocalSnowValidFlag; /* ѩģʽЧ־ */ UINT8 cIteLineCutState; /* ITEȫг״̬ */ + UINT8 cAreaIteCutNum; /*ITEг*/ + UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*ITEгID*/ } ZcToCiDataStruct; /*ͨųλϢ*/ @@ -196,14 +198,14 @@ UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen); ZcToCiDataStruct* GetZcToCiDataStru(void); /* -* ZCCIITEȫг״̬ +* ZCCIITEг״̬ * ˵INT8* dataBuf ݻ * UINT16 dataLength ݳ * ֵCI_ERROR 0 ݽʧ * CI_SUCCESS 1 ݽɹ * Created By LQ 2024.07.12 */ -UINT8 ParseZcIteLineCutData(UINT8* dataBuf, UINT16 dataLen); +UINT8 ParseZcIteCutData(UINT8* dataBuf, UINT16 dataLen); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c index cb49b3a..8cb8ad0 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c @@ -102,6 +102,16 @@ static UINT8 NonAutoReturnStructInit(CHAR* FSName); *********************************************/ static UINT8 NonReturnStruFromDquStr(DSU_AR_STRU* pNonReturn, NonAutoReturnConfigDataStruct* pNonReturnCfgDtStr); +/* +*: ʼLINK +*: CHAR * FSName ļָ +*: +*ֵ: 0 ʧ +* 1 ɹ +* by cgh 20250818 +*/ +static UINT8 LinkSpecialEaDataInit(CHAR* FSName); + /********************************************* *ܣʼ̵еĽṹ壬ʼϵͳݡͨݣ * ʼվźŻ߼/ݡʼ豸̵ݡʼ/߼ݡ @@ -155,7 +165,7 @@ UINT8 RelayInit(CHAR* FSName) if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) { /*ʼOC ñ*/ - if (OC_DATA_TYPE_OLD == chLocalOc) + if (DATA_TYPE_OLD == chLocalOc) { funcRtn *= OCSwitchConfigDataStructInit_OLD(FSName); } @@ -476,6 +486,15 @@ UINT8 RelayInit(CHAR* FSName) { debug_infor_printf((const)"GroupAutoRouteCfgDtStructInit fail.\r\n"); } + + /*ʼLINK----ṹ*/ + funcRtn *= LinkSpecialEaDataInit(FSName); + + if (0u == funcRtn) + { + debug_infor_printf((const)"LinkSpecialEaDataInit fail.\r\n"); + } + return funcRtn; } @@ -1002,15 +1021,30 @@ UINT8 AxisSectionConfigDataStructInit(CHAR * FSName) dquCICfgDtStr.AxisSctCfgDtStrLen = dsuDataLenStru.wAxleSgmtLen; for(i=0u;i= AXIS_SECTION_SUM_MAX) + if (AXIS_SECTION_SUM_MAX > i) + { + rtnvalue = AxisSecCfgDtStruFromDquSgmtStr(dsuStaticHeadStru.pAxleSgmtStru + i, &dquCICfgDtStr.AxisSctCfgDtStr[i]); + } + else + { + rtnvalue = 0U; + } + + if (0U == rtnvalue) { - rtnvalue = 0u; break; } - (void)AxisSecCfgDtStruFromDquSgmtStr(dsuStaticHeadStru.pAxleSgmtStru+i,&dquCICfgDtStr.AxisSctCfgDtStr[i]); + else + { + ; /*ִ*/ + } } } - + else + { + ; + } + return rtnvalue; } @@ -2006,7 +2040,7 @@ UINT8 PhySgmtCfgDtStruFromDquSgmtStr(DSU_PHYSICAL_SGMT_STRU* pPhysicalSgmt, Phys { } } - if ((0u < dquCICfgDtStr.OCPhySecCfgStrLen) || ((AXIS_TYPE_YONGLIE == acFty) || (AXIS_TYPE_KEANDA == acFty))) + if ((0u < dquCICfgDtStr.OCPhySecCfgStrLen) || (AXIS_TYPE_YONGLIE == acFty) || (AXIS_TYPE_KEANDA == acFty) || (AXIS_TYPE_FUHAOSHENG == acFty)) { rtnvalue = 1u; /*ȫӼܸλ*/ @@ -2236,6 +2270,8 @@ UINT8 AxisSecCfgDtStruFromDquSgmtStr(DSU_AXLE_SGMT_STRU* pAxleSgmt, AxisSectionC UINT16 wlinkNum = 0u; UINT16 szLinkIdBuf[100u] = { 0u }; UINT32 dwLen = UINT32_MAX; + DSU_LINK_STRU* pAcIncLinkStru = NULL; /*ΰlinkṹ*/ + UINT8 kk = 0U; /*ڲ*/ if ((NULL == pAxleSgmt) || (NULL == pAxScCfgDtStr)) @@ -2290,6 +2326,30 @@ UINT8 AxisSecCfgDtStruFromDquSgmtStr(DSU_AXLE_SGMT_STRU* pAxleSgmt, AxisSectionC pAxScCfgDtStr->dwAxisTotalLen = dwLen; } + pAxScCfgDtStr->cAcCbtcAttr = AXIS_SEC_CBTC_PROPERTY_NO; /*ʼβCBTC*/ + + /*ΰlinkȷεCBTC*/ + for (kk = 0U; kk < pAxScCfgDtStr->chLinkNum; kk++) + { + pAcIncLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pAxScCfgDtStr->szLinkIdBuff[kk]]; + if (0x55U != pAcIncLinkStru->cCbtcProperty) + { + break; /*linkCBTCԣֹͣ*/ + } + else + { + /*linkCBTCԣ*/ + } + } + + if ((kk == pAxScCfgDtStr->chLinkNum) && (0U != kk)) + { + pAxScCfgDtStr->cAcCbtcAttr = AXIS_SEC_CBTC_PROPERTY_YES; /*linkCBTCԣξCBTC*/ + } + else + { + /*linkCBTCԣβCBTC*/ + } /*ԭΪߵļᣬlinkؽߵģֻҪȡһlinkУԼ*/ @@ -3165,6 +3225,8 @@ UINT8 OverlapCfgDtStruFromDquStr(DSU_PROTECT_LINK_STRU * pProtectLink, OverlapCo pOvlpCfgDtStr->InvOppOverlapSum = 0u; pOvlpCfgDtStr->FloodGateIdSum = 0u; pOvlpCfgDtStr->AxisSecFarId = 0u; + pOvlpCfgDtStr->wOverlapThisZhaoChaRelayId = 0U; + pOvlpCfgDtStr->wOverlapThatZhaoChaRelayId = 0U; for(k = 0u; k < LSDataLen.LSOverlapLockCondStruLen; k++) { @@ -3236,6 +3298,10 @@ UINT8 OverlapCfgDtStruFromDquStr(DSU_PROTECT_LINK_STRU * pProtectLink, OverlapCo pOvlpCfgDtStr->FloodGateIdSum++; } } + + pOvlpCfgDtStr->wOverlapThisZhaoChaRelayId = LSData.pLSOverlapLockCondStru[k].wOverlapThisZhaoChaRelayId; + pOvlpCfgDtStr->wOverlapThatZhaoChaRelayId = LSData.pLSOverlapLockCondStru[k].wOverlapThatZhaoChaRelayId; + break; } @@ -3529,97 +3595,114 @@ UINT8 PsdCfgDtStruFromDquEmergStr(DSU_SCREEN_STRU * pScreen,PsdConfigDataStruct* if((NULL == pScreen) || (NULL == pPsdCfgDtStr)) { /*ʧ*/ - return 0u; + rtnvalue = 0U; } - - pPsdCfgDtStr->PsdId = pScreen->wId; - rtnvalue = GetDsuLinkIndexNum(pScreen->wRelatLkId,&linkindex); - if(CI_SUCCESS == rtnvalue) + else { - pPsdCfgDtStr->BelongCiId = (UINT8)dsuStaticHeadStru.pLinkStru[linkindex].wManagePhysicalCI; - pPsdCfgDtStr->BelongVirCIid = (UINT8)dsuStaticHeadStru.pLinkStru[linkindex].wBelongVirtualCI; - if ((UINT16_MAX != pScreen->wLocalPlatformId) && (0U != pScreen->wLocalPlatformId)) + pPsdCfgDtStr->PsdId = pScreen->wId; + rtnvalue = GetDsuLinkIndexNum(pScreen->wRelatLkId, &linkindex); + if (CI_SUCCESS == rtnvalue) { - stationId = dsuStaticHeadStru.pStationStru[dsuStationIndex[pScreen->wLocalPlatformId]].wStationID; - pPsdCfgDtStr->BelongStationId = (UINT8)(stationId & 0x00FFu);/*ǵվŲᳬ255Ϊ˺PSDϵͳIDͳһֻȡֽ*/ - } - else - { - pPsdCfgDtStr->BelongStationId = 0U; - } - pPsdCfgDtStr->RelatedOutStationRouteSum = 0u; - (void)memset(pPsdCfgDtStr->RelatedOutStationRouteIdBuf,0,sizeof(UINT16) * RALATED_OUT_STATION_ROUTE_SUM_MAX); - for (i = 0u; i < dsuDataLenStru.wStationLen; i++) - { - for (j = 0u; j < 2u; j++) + pPsdCfgDtStr->BelongCiId = (UINT8)dsuStaticHeadStru.pLinkStru[linkindex].wManagePhysicalCI; + pPsdCfgDtStr->BelongVirCIid = (UINT8)dsuStaticHeadStru.pLinkStru[linkindex].wBelongVirtualCI; + pPsdCfgDtStr->wPsdFstProLinkId = pScreen->wFstProLinkId; + pPsdCfgDtStr->wPsdSndProLinkId = pScreen->wSndProLinkId; + pPsdCfgDtStr->wPsdTrdProLinkId = pScreen->wTrdProLinkId; + + /*Ƚ̵ʼΪ0Ϊ豸*/ + pPsdCfgDtStr->CloseDriveRelayId = 0u; + pPsdCfgDtStr->DoorStateRelayId = 0u; + pPsdCfgDtStr->MutualLockRelayId = 0u; + pPsdCfgDtStr->OpenFourEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->OpenSixEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->OpenEightEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->wRelayDoorButtonId = 0u; + pPsdCfgDtStr->doorReopenRelayId = 0u; + pPsdCfgDtStr->departureConfirmRelayId = 0u; + pPsdCfgDtStr->detectStartRelayId = 0u; + pPsdCfgDtStr->detectStopRelayId = 0u; + pPsdCfgDtStr->obstacleRelayId = 0u; + pPsdCfgDtStr->gapDetMuLockRelayId = 0u; + pPsdCfgDtStr->closeStateRelayId = 0u; + pPsdCfgDtStr->ClearPasseSteadyLightRelayId = 0u; + pPsdCfgDtStr->ClearPasseFlashLightRelayId = 0u; + pPsdCfgDtStr->ClearPassengerButtonRelayId = 0u; + pPsdCfgDtStr->wCleFarePCBButtonRelayId = 0U; + pPsdCfgDtStr->wCleFarePDBFlaLigRelayId = 0U; + pPsdCfgDtStr->wPobIndicatorRelayId = 0U; + pPsdCfgDtStr->wPcbIndicatorRelayId = 0U; + pPsdCfgDtStr->VirtualAttribute = PSD_VIRTUAL_ATTR_YES; /*ʼΪ*/ + pPsdCfgDtStr->chPsdControlType = PSD_CONTROL_TYPE_RCI; /*ʼΪRCI*/ + + if ((UINT16_MAX != pScreen->wLocalPlatformId) && (0U != pScreen->wLocalPlatformId)) { - if (pPsdCfgDtStr->PsdId == (dsuStaticHeadStru.pStationStru + i)->wScreenId[j]) + stationId = dsuStaticHeadStru.pStationStru[dsuStationIndex[pScreen->wLocalPlatformId]].wStationID; + pPsdCfgDtStr->BelongStationId = (UINT8)(stationId & 0x00FFu);/*ǵվŲᳬ255Ϊ˺PSDϵͳIDͳһֻȡֽ*/ + } + else + { + pPsdCfgDtStr->BelongStationId = 0U; + } + + pPsdCfgDtStr->RelatedOutStationRouteSum = 0u; + (void)memset(pPsdCfgDtStr->RelatedOutStationRouteIdBuf, 0, sizeof(UINT16) * RALATED_OUT_STATION_ROUTE_SUM_MAX); + for (i = 0u; i < dsuDataLenStru.wStationLen; i++) + { + for (j = 0u; j < 2u; j++) { - pPsdCfgDtStr->BelongPlatformId = (dsuStaticHeadStru.pStationStru + i)->wATSStationId; - break; + if (pPsdCfgDtStr->PsdId == (dsuStaticHeadStru.pStationStru + i)->wScreenId[j]) + { + pPsdCfgDtStr->BelongPlatformId = (dsuStaticHeadStru.pStationStru + i)->wATSStationId; + break; + } + } + } + + for (i = 0u; i < RelayDataLen.RelayScreenStrLen; i++) + { + if (pScreen->wId == (RelayData.pRelayScreenStr + i)->wScreenId) + { + pPsdCfgDtStr->CloseDriveRelayId = (RelayData.pRelayScreenStr + i)->wRelayCloseDoorId; + pPsdCfgDtStr->DoorStateRelayId = (RelayData.pRelayScreenStr + i)->wRelayDoorClosedId; + pPsdCfgDtStr->wDoorStateRelayId2 = (RelayData.pRelayScreenStr + i)->wRelayDoorClosedId2; + pPsdCfgDtStr->MutualLockRelayId = (RelayData.pRelayScreenStr + i)->wRelayRelatedId; + pPsdCfgDtStr->wMutualLockRelayId2 = (RelayData.pRelayScreenStr + i)->wRelayRelatedId2; + pPsdCfgDtStr->OpenFourEditGroupDriveRelayId = (RelayData.pRelayScreenStr + i)->wRelayFourEditGroupOpenDoorId; + pPsdCfgDtStr->OpenSixEditGroupDriveRelayId = (RelayData.pRelayScreenStr + i)->wRelaySixEditGroupOpenDoorId; + pPsdCfgDtStr->OpenEightEditGroupDriveRelayId = (RelayData.pRelayScreenStr + i)->wRelayEightEditGroupOpenDoorId; + pPsdCfgDtStr->wRelayDoorButtonId = (RelayData.pRelayScreenStr + i)->wRelayDoorButtonId; + pPsdCfgDtStr->doorReopenRelayId = (RelayData.pRelayScreenStr + i)->doorReopenRelayId; + pPsdCfgDtStr->departureConfirmRelayId = (RelayData.pRelayScreenStr + i)->departureConfirmRelayId; + pPsdCfgDtStr->detectStartRelayId = (RelayData.pRelayScreenStr + i)->detectStartRelayId; + pPsdCfgDtStr->detectStopRelayId = (RelayData.pRelayScreenStr + i)->detectStopRelayId; + pPsdCfgDtStr->obstacleRelayId = (RelayData.pRelayScreenStr + i)->obstacleRelayId; + pPsdCfgDtStr->gapDetMuLockRelayId = (RelayData.pRelayScreenStr + i)->gapDetMuLockRelayId; + pPsdCfgDtStr->closeStateRelayId = (RelayData.pRelayScreenStr + i)->closeStateRelayId; + pPsdCfgDtStr->ClearPasseSteadyLightRelayId = (RelayData.pRelayScreenStr + i)->wClearPasseSteadyLightRelayId; + pPsdCfgDtStr->ClearPasseFlashLightRelayId = (RelayData.pRelayScreenStr + i)->wClearPasseFlashLightRelayId; + pPsdCfgDtStr->ClearPassengerButtonRelayId = (RelayData.pRelayScreenStr + i)->wClearPassengerButtonRelayId; + pPsdCfgDtStr->wCleFarePCBButtonRelayId = (RelayData.pRelayScreenStr + i)->wCleFarePCBButtonRelayId; + pPsdCfgDtStr->wCleFarePDBFlaLigRelayId = (RelayData.pRelayScreenStr + i)->wCleFarePDBFlaLigRelayId; + pPsdCfgDtStr->wPobIndicatorRelayId = (RelayData.pRelayScreenStr + i)->wPobBsdRelayId; + pPsdCfgDtStr->wPcbIndicatorRelayId = (RelayData.pRelayScreenStr + i)->wPcbBsdRelayId; + pPsdCfgDtStr->wVideoQkLight1RelayId = (RelayData.pRelayScreenStr + i)->wVideoQkLight1RelayId; + pPsdCfgDtStr->wVideoQkLight2RelayId = (RelayData.pRelayScreenStr + i)->wVideoQkLight2RelayId; + pPsdCfgDtStr->VirtualAttribute = PSD_VIRTUAL_ATTR_NO;/*ʼΪ*/ + pPsdCfgDtStr->chPsdControlType = (RelayData.pRelayScreenStr + i)->chControlType; + break; /*ż̵ҵţֹͣ*/ + } + else + { + /*ʼ*/ } } } - for(i=0u;iwId == (RelayData.pRelayScreenStr+i)->wScreenId) - { - pPsdCfgDtStr->CloseDriveRelayId = (RelayData.pRelayScreenStr+i)->wRelayCloseDoorId; - pPsdCfgDtStr->DoorStateRelayId = (RelayData.pRelayScreenStr+i)->wRelayDoorClosedId; - pPsdCfgDtStr->wDoorStateRelayId2 = (RelayData.pRelayScreenStr + i)->wRelayDoorClosedId2; - pPsdCfgDtStr->MutualLockRelayId = (RelayData.pRelayScreenStr+i)->wRelayRelatedId; - pPsdCfgDtStr->wMutualLockRelayId2 = (RelayData.pRelayScreenStr + i)->wRelayRelatedId2; - pPsdCfgDtStr->OpenFourEditGroupDriveRelayId = (RelayData.pRelayScreenStr+i)->wRelayFourEditGroupOpenDoorId; - pPsdCfgDtStr->OpenSixEditGroupDriveRelayId = (RelayData.pRelayScreenStr+i)->wRelaySixEditGroupOpenDoorId; - pPsdCfgDtStr->OpenEightEditGroupDriveRelayId = (RelayData.pRelayScreenStr+i)->wRelayEightEditGroupOpenDoorId; - pPsdCfgDtStr->wRelayDoorButtonId = (RelayData.pRelayScreenStr+i)->wRelayDoorButtonId; - pPsdCfgDtStr->doorReopenRelayId = (RelayData.pRelayScreenStr+i)->doorReopenRelayId; - pPsdCfgDtStr->departureConfirmRelayId = (RelayData.pRelayScreenStr+i)->departureConfirmRelayId; - pPsdCfgDtStr->detectStartRelayId = (RelayData.pRelayScreenStr+i)->detectStartRelayId; - pPsdCfgDtStr->detectStopRelayId = (RelayData.pRelayScreenStr+i)->detectStopRelayId; - pPsdCfgDtStr->obstacleRelayId = (RelayData.pRelayScreenStr+i)->obstacleRelayId; - pPsdCfgDtStr->gapDetMuLockRelayId = (RelayData.pRelayScreenStr+i)->gapDetMuLockRelayId; - pPsdCfgDtStr->closeStateRelayId = (RelayData.pRelayScreenStr+i)->closeStateRelayId; - pPsdCfgDtStr->ClearPasseSteadyLightRelayId = (RelayData.pRelayScreenStr + i)->wClearPasseSteadyLightRelayId; - pPsdCfgDtStr->ClearPasseFlashLightRelayId = (RelayData.pRelayScreenStr + i)->wClearPasseFlashLightRelayId; - pPsdCfgDtStr->ClearPassengerButtonRelayId = (RelayData.pRelayScreenStr + i)->wClearPassengerButtonRelayId; - pPsdCfgDtStr->wCleFarePCBButtonRelayId = (RelayData.pRelayScreenStr + i)->wCleFarePCBButtonRelayId; - pPsdCfgDtStr->wCleFarePDBFlaLigRelayId = (RelayData.pRelayScreenStr + i)->wCleFarePDBFlaLigRelayId; - pPsdCfgDtStr->wPobIndicatorRelayId = (RelayData.pRelayScreenStr + i)->wPobBsdRelayId; - pPsdCfgDtStr->wPcbIndicatorRelayId = (RelayData.pRelayScreenStr + i)->wPcbBsdRelayId; - pPsdCfgDtStr->wVideoQkLight1RelayId = (RelayData.pRelayScreenStr + i)->wVideoQkLight1RelayId; - pPsdCfgDtStr->wVideoQkLight2RelayId = (RelayData.pRelayScreenStr + i)->wVideoQkLight2RelayId; - pPsdCfgDtStr->VirtualAttribute = PSD_VIRTUAL_ATTR_NO;/*ʼΪ*/ - rtnvalue = 1u; - return rtnvalue; - - } + else + { + rtnvalue = 0U; /*PSDlinkЧ0ʧ*/ } } - - pPsdCfgDtStr->CloseDriveRelayId = 0u; - pPsdCfgDtStr->DoorStateRelayId = 0u; - pPsdCfgDtStr->MutualLockRelayId = 0u; - pPsdCfgDtStr->OpenFourEditGroupDriveRelayId = 0u; - pPsdCfgDtStr->OpenSixEditGroupDriveRelayId = 0u; - pPsdCfgDtStr->OpenEightEditGroupDriveRelayId = 0u; - pPsdCfgDtStr->wRelayDoorButtonId = 0u; - pPsdCfgDtStr->doorReopenRelayId = 0u; - pPsdCfgDtStr->departureConfirmRelayId = 0u; - pPsdCfgDtStr->detectStartRelayId = 0u; - pPsdCfgDtStr->detectStopRelayId = 0u; - pPsdCfgDtStr->obstacleRelayId = 0u; - pPsdCfgDtStr->gapDetMuLockRelayId = 0u; - pPsdCfgDtStr->closeStateRelayId = 0u; - pPsdCfgDtStr->ClearPasseSteadyLightRelayId = 0u; - pPsdCfgDtStr->ClearPasseFlashLightRelayId = 0u; - pPsdCfgDtStr->ClearPassengerButtonRelayId = 0u; - pPsdCfgDtStr->wCleFarePCBButtonRelayId = 0U; - pPsdCfgDtStr->wCleFarePDBFlaLigRelayId = 0U; - pPsdCfgDtStr->wPobIndicatorRelayId = 0U; - pPsdCfgDtStr->wPcbIndicatorRelayId = 0U; - pPsdCfgDtStr->VirtualAttribute = PSD_VIRTUAL_ATTR_NO;/*ʼΪ*/ - rtnvalue = 0u; + return rtnvalue; } @@ -3631,7 +3714,6 @@ UINT8 PsdCfgDtStruFromDquEmergStr(DSU_SCREEN_STRU * pScreen,PsdConfigDataStruct* *********************************************/ UINT8 PsdConfigDataStructInit(CHAR * FSName) { - UINT8 rtnvalue = 0u; UINT8 callFun = 0u; UINT16 i = 0u; @@ -3641,7 +3723,6 @@ UINT8 PsdConfigDataStructInit(CHAR * FSName) UINT16 startAxisSectionWId = 0u; /*ʼ˼link*/ UINT16 endAxisSectionWId = 0u; /*ն˼link*/ UINT16 linkId = 0u; - UINT8 flagBreak = 0u;/*жѭ־*/ callFun = dfsEmapInit (FSName); callFun *= InitRelay_ScreenStru (FSName); @@ -3654,10 +3735,7 @@ UINT8 PsdConfigDataStructInit(CHAR * FSName) else { rtnvalue = 1u; - } - - if (1u == rtnvalue) - { + dquCICfgDtStr.PsdCfgDtStrLen =dsuDataLenStru.wScreenLen; for(i=0u;i= PSD_SUM_MAX) { rtnvalue = 0u; - break; } - (void)PsdCfgDtStruFromDquEmergStr(dsuStaticHeadStru.pScreenStru+i,&dquCICfgDtStr.PsdCfgDtStr[i]); - for(j = 0u;j < dsuDataLenStru.wRouteLen;j++) - {/*н·*/ - flagBreak = 0u; - startSignalId = dsuStaticHeadStru.pRouteStru[j].wStartSignalId;/*ȡ·ʼźŻID*/ - linkId = (dsuStaticHeadStru.pSignalStru + dsuSignalIndex[startSignalId])->wLkId;/*ȡʼźŻLinkID*/ - - if(linkId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId) - {/*ʼźŻLinkID == LinkID*/ - sumTemp = dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum; - dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteIdBuf[sumTemp] = dsuStaticHeadStru.pRouteStru[j].wId; - dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum++; - - if(dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum >= RALATED_OUT_STATION_ROUTE_SUM_MAX) - { - flagBreak = 1u; - break; - } - } - } - if (1u== flagBreak) + else { - rtnvalue =0u; - break; - } - if (1u == rtnvalue) - { - for(j = 0u;j < dsuDataLenStru.wAxleSgmtLen; j++ ) - {/*мĿ*/ - startAxisSectionWId = dsuStaticHeadStru.pAxleSgmtStru[j].wOrgnLkId; /*ȡʼlink*/ - endAxisSectionWId = dsuStaticHeadStru.pAxleSgmtStru[j].wTmnlLkId; /*ȡնlink*/ - /*ʼ˼LinkID == ն˼LinkID*/ - if((startAxisSectionWId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId) && (endAxisSectionWId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId)) - { - /*ҵεID*/ - dquCICfgDtStr.PsdCfgDtStr[i].PsdRelationPhySecId = dsuStaticHeadStru.pAxleSgmtStru[j].wRelatePhysicalSgmtId; - break; + rtnvalue = PsdCfgDtStruFromDquEmergStr(dsuStaticHeadStru.pScreenStru + i, &dquCICfgDtStr.PsdCfgDtStr[i]); + if (1U == rtnvalue) + { + for (j = 0u; j < dsuDataLenStru.wRouteLen; j++) + {/*н·*/ + startSignalId = dsuStaticHeadStru.pRouteStru[j].wStartSignalId;/*ȡ·ʼźŻID*/ + linkId = (dsuStaticHeadStru.pSignalStru + dsuSignalIndex[startSignalId])->wLkId;/*ȡʼźŻLinkID*/ + + if (linkId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId) + {/*ʼźŻLinkID == LinkID*/ + sumTemp = dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum; + dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteIdBuf[sumTemp] = dsuStaticHeadStru.pRouteStru[j].wId; + dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum++; + + if (dquCICfgDtStr.PsdCfgDtStr[i].RelatedOutStationRouteSum >= RALATED_OUT_STATION_ROUTE_SUM_MAX) + { + rtnvalue = 0u; + break; + } + } } + if (1u == rtnvalue) + { + for (j = 0u; j < dsuDataLenStru.wAxleSgmtLen; j++) + {/*мĿ*/ + startAxisSectionWId = dsuStaticHeadStru.pAxleSgmtStru[j].wOrgnLkId; /*ȡʼlink*/ + endAxisSectionWId = dsuStaticHeadStru.pAxleSgmtStru[j].wTmnlLkId; /*ȡնlink*/ + /*ʼ˼LinkID == ն˼LinkID*/ + if ((startAxisSectionWId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId) && (endAxisSectionWId == dsuStaticHeadStru.pScreenStru[i].wRelatLkId)) + { + /*ҵεID*/ + dquCICfgDtStr.PsdCfgDtStr[i].PsdRelationPhySecId = dsuStaticHeadStru.pAxleSgmtStru[j].wRelatePhysicalSgmtId; + break; + } + + } + } } } if ((0u == rtnvalue) || (j == dsuDataLenStru.wAxleSgmtLen)) { break; } - } if(1u==rtnvalue) { @@ -4665,6 +4742,8 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS UINT8 chCheckLogIdSameFlag = 0U; UINT8 isEachInvFlag = 0U; UINT16 wLgcSecIndex = 0U; /*߼*/ + UINT8 chLocalCiPattern = 0u; /*CIģʽ*/ + lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*??????:0x55:????;0xAA:????*/ /*ڲ*/ @@ -5792,9 +5871,6 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS pRouteCfgDtStr->RelayBenDuanZcIdOnRelayIntrf = RelayData.pRelayZhaoChaStr[i].wRelayBenDuanZcIdOnRelayInterface; pRouteCfgDtStr->RelayDuiDuanZcIdOnRelayIntrf = RelayData.pRelayZhaoChaStr[i].wRelayDuiDuanZcIdOnRelayInterface; - pRouteCfgDtStr->wCbtcThatZhaoChaRelayId = RelayData.pRelayZhaoChaStr[i].wCbtcRelayDuiDuanZcId; - pRouteCfgDtStr->wCbtcThisZhaoChaRelayId = RelayData.pRelayZhaoChaStr[i].wCbtcRelayBenDuanZcId; - pRouteCfgDtStr->wCbtccancelZhaochaRelayId = RelayData.pRelayZhaoChaStr[i].wCbtcCancelRelayId; /*ͳЧղID*/ zhaoChaPhySecNum = 0u; @@ -6378,24 +6454,94 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS pRouteCfgDtStr->RouteNeedDelayUnlock = pLSRouteStr->wNeedDelayUnlock; /*̵ͬID (ֶ)*/ + pRouteCfgDtStr->DCRouteDCQJId = 0U; + pRouteCfgDtStr->DCRouteDCQJTwoId = 0U; + pRouteCfgDtStr->DCRouteTAJId = 0U; + for(i=0u;iDCRouteDCQJId = 0u; - pRouteCfgDtStr->DCRouteTAJId = 0u; - if(RelayData.pRelayDCAgreeStr[i].wRouteId == pLSRouteStr->wRouteId) { pRouteCfgDtStr->DCRouteDCQJId = RelayData.pRelayDCAgreeStr[i].DCRouteDCQJId; pRouteCfgDtStr->DCRouteTAJId = RelayData.pRelayDCAgreeStr[i].DCRouteTAJId; + pRouteCfgDtStr->DCRouteDCQJTwoId = RelayData.pRelayDCAgreeStr[i].DCRouteDCQJTwoId; break; } else { } } + + chLocalCiPattern = GetLocalCiPattern(); + + if (CI_PATTERN_FULL_ELECTRONIC == chLocalCiPattern) + { + if (0U != pRouteCfgDtStr->DCRouteDCQJId) + { + if ((0U == pRouteCfgDtStr->DCRouteTAJId) || (0U == pRouteCfgDtStr->DCRouteDCQJTwoId)) + { + /*˵̵1Чδõͬ⼰̵2ݳʼʧ*/ + rtnvalue = CI_ERROR; + debug_infor_printf((const)"error: pRouteCfgDtStr->DCRouteTAJId is 0 or pRouteCfgDtStr->DCRouteDCQJTwoId is 0"); + } + else + { + + } + } + else + { + if ((0U != pRouteCfgDtStr->DCRouteTAJId) || (0U != pRouteCfgDtStr->DCRouteDCQJTwoId)) + { + /*˵̵ЧõͬЧݳʼʧ*/ + rtnvalue = CI_ERROR; + debug_infor_printf((const)"error: pRouteCfgDtStr->DCRouteDCQJId is 0"); + } + else + { + + } + } + } + else if (CI_PATTERN_TRADITIONAL == chLocalCiPattern) + { + /*̵ûе̵2*/ + if (0U != pRouteCfgDtStr->DCRouteDCQJId) + { + if (0U == pRouteCfgDtStr->DCRouteTAJId) + { + /*˵̵ЧδõͬЧݳʼʧ*/ + rtnvalue = CI_ERROR; + debug_infor_printf((const)"error: pRouteCfgDtStr->DCRouteTAJId is 0"); + } + else + { + + } + } + else + { + if (0U != pRouteCfgDtStr->DCRouteTAJId) + { + /*˵̵ЧõͬЧݳʼʧ*/ + rtnvalue = CI_ERROR; + debug_infor_printf((const)"error: pRouteCfgDtStr->DCRouteDCQJId is 0"); + } + else + { + + } + } + } + else + { + rtnvalue = CI_ERROR; + } + } else { + } if(CI_SUCCESS == rtnvalue) { @@ -6800,11 +6946,8 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) UINT8 callFun = 0u; UINT16 i=0u; UINT8 execRet = 0u; - - UINT8 lineIdentity = CI_TRADITION_RAILWAY; - - lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*??????:0x55:????;0xAA:????*/ - + UINT8 chDataType = DATA_TYPE_NEW; + chDataType = GetLocalPublicDataType();/*28.0.0.14߼ι·ʼ*/ callFun = dfsEmapInit(FSName); callFun *= InitLS_RouteStruct(FSName); callFun *= InitLS_AutoRtnRouteStru(FSName); @@ -6892,7 +7035,7 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) {/*úʧܣ0*/ rtnvalue = 0u; } - + if (1U == rtnvalue) { @@ -6977,22 +7120,31 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) /*߼ι·*/ if (1u == rtnvalue) { - for (i = 0u; i < dquCICfgDtStr.lgcSctCfgDtStrLen; i++) + if (DATA_TYPE_NEW == chDataType) { - execRet = LogRelateRouteDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*߼ι·*/ - execRet *= LogRelateProSwDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*߼ι*/ - if (execRet > 0u) + for (i = 0u; i < dquCICfgDtStr.lgcSctCfgDtStrLen; i++) { + execRet = LogRelateRouteDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*߼ι·*/ + execRet *= LogRelateProSwDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*߼ι*/ + if (execRet > 0u) + { + } + else + {/*úʧܣ0*/ + rtnvalue = 0u; + } + if (1U != rtnvalue) + { + break; + } } - else - {/*úʧܣ0*/ - rtnvalue = 0u; - } - if (1U != rtnvalue) - { - break; - } + } + else + { + /*28.0.0.14ݽṹݲ֧߼ι·*/ + /*Ӱ칦ܣ߼· ֽ· ߼Դ*/ + rtnvalue = 1U; } } @@ -7230,58 +7382,80 @@ UINT8 TransmitRelationDataStructInit(CHAR* FSName) UINT8 RouteOpposedConfigDataInite(RouteConfigDataStruct * RouteCfgDtStr,RouteConfigDataStruct * pRouteCfgDtStr) { UINT16 i=0u,j=0u,k=0u,n=0u; - UINT8 index=0u; + UINT8 index=0u;/*еִ·*/ UINT8 rtnvalue = 1u; UINT8 Flag = 0u; + UINT8 chRouteCitype = 0U; + chRouteCitype = (UINT8)(dsuStaticHeadStru.pCIStruStru[dsuCIIndex[pRouteCfgDtStr->BelongCiId]].wType); /*·*/ /*ִ·ID (ֶ)*/ pRouteCfgDtStr->OpposedRouteSum = 0u; - for(i=0u; iRoutePhySecSum; i++) - {/*·*/ + if ((CI_TYPE_CLD != chRouteCitype)&&(CI_TYPE_TCC != chRouteCitype)) + { + for (i = 0u; i < pRouteCfgDtStr->RoutePhySecSum; i++) + {/*·*/ - for(j=0u; jRouteId == RouteCfgDtStr[j].RouteId) - { - /*ȥ·*/ - } - else - { - for (k = 0u; k < RouteCfgDtStr[j].RoutePhySecSum; k++) - {/*ý·*/ - - if (pRouteCfgDtStr->RoutePhySectionStru[i].PhysicalSectionId == RouteCfgDtStr[j].RoutePhySectionStru[k].PhysicalSectionId) - {/*ͬ*/ - - Flag = 0u; - for (n = 0u; n < ROUTE_OPPOSED_ROUTE_SUM_MAX; n++) - {/*ִ·飬ǷѾӸõִ·*/ - - if (pRouteCfgDtStr->OpposedRouteIdBuf[n] == RouteCfgDtStr[j].RouteId) - { - Flag = 1u; - break; - /*Ѿ*/ - } - } - if (Flag == 1u) - { - /*Ѿڣ*/ - } - else - { - /*ӵִ·*/ - pRouteCfgDtStr->OpposedRouteIdBuf[index] = RouteCfgDtStr[j].RouteId;/*ִ*/ - index++; - } - } + for (j = 0u; j < LSDataLen.LSRouteStrLen; j++) + {/*н·*/ + if (pRouteCfgDtStr->RouteId == RouteCfgDtStr[j].RouteId) + { + /*ȥ·*/ } + else + { + for (k = 0u; k < RouteCfgDtStr[j].RoutePhySecSum; k++) + {/*ý·*/ + if (pRouteCfgDtStr->RoutePhySectionStru[i].PhysicalSectionId == RouteCfgDtStr[j].RoutePhySectionStru[k].PhysicalSectionId) + {/*ͬ*/ + + Flag = 0u; + for (n = 0u; n < index; n++) + {/*ִ·飬ǷѾӸõִ·*/ + + if (pRouteCfgDtStr->OpposedRouteIdBuf[n] == RouteCfgDtStr[j].RouteId) + { + Flag = 1u; + break; + /*Ѿ*/ + } + } + if (Flag == 1u) + { + /*Ѿڣ*/ + } + else + { + if (ROUTE_OPPOSED_ROUTE_SUM_MAX > index) + { + /*ӵִ·*/ + pRouteCfgDtStr->OpposedRouteIdBuf[index] = RouteCfgDtStr[j].RouteId;/*ִ*/ + index++; + } + else + { + rtnvalue = 0U; + break; + } + } + + } + } + if (0U == rtnvalue) + { + break; + } + } } } - } - pRouteCfgDtStr->OpposedRouteSum = index; + pRouteCfgDtStr->OpposedRouteSum = index; + } + else + { + /*ԶԽ·*/ + rtnvalue = 1u; + } return rtnvalue; } @@ -8338,103 +8512,151 @@ UINT8 ReadDquCiTransmitInfoToConfig(DquCiTransmitStruct *pDquCiTransmitStr) switch (pDquCiTransmitStr->devType) { case CI_DEVICE_TYPE_SWITCH: /* */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SWITCH_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SWITCH_SUM_MAX) && (pTmpCiTransConfig->switchNum < SWITCH_SUM_MAX)) { pTmpCiTransConfig->switchIdBuf[pTmpCiTransConfig->switchNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->switchNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Switch Error\n"); + } break; case CI_DEVICE_TYPE_SIGNAL: /* źŻ */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SIGNAL_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SIGNAL_SUM_MAX) && (pTmpCiTransConfig->signalNum < SIGNAL_SUM_MAX)) { pTmpCiTransConfig->signalIdBuf[pTmpCiTransConfig->signalNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->signalNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Signal Error\n"); + } break; case CI_DEVICE_TYPE_PHYSEC: /* */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < PHYSICAL_SECTION_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < PHYSICAL_SECTION_SUM_MAX) && (pTmpCiTransConfig->phySecNum < PHYSICAL_SECTION_SUM_MAX)) { pTmpCiTransConfig->phySecIdBuf[pTmpCiTransConfig->phySecNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->phySecIdLockDirFlag[pTmpCiTransConfig->phySecNum] = pDquCiTransmitStr->phyLockDirOppOrNot;/*շǷȡ־*/ pTmpCiTransConfig->phySecNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read PhySec Error\n"); + } break; case CI_DEVICE_TYPE_LOGICSEC: /* ߼ */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < LOGIC_SECTION_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < LOGIC_SECTION_SUM_MAX) && (pTmpCiTransConfig->logicSecNum < LOGIC_SECTION_SUM_MAX)) { pTmpCiTransConfig->logicSecIdBuf[pTmpCiTransConfig->logicSecNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->logicSecNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read LogSec Error\n"); + } break; case CI_DEVICE_TYPE_ESB: /* ESB */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < ESB_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < ESB_SUM_MAX) && (pTmpCiTransConfig->esbNum < ESB_SUM_MAX)) { pTmpCiTransConfig->esbIdBuf[pTmpCiTransConfig->esbNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->esbNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read ESB Error\n"); + } break; case CI_DEVICE_TYPE_PSD: /* PSD */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < PSD_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < PSD_SUM_MAX) && (pTmpCiTransConfig->psdNum < PSD_SUM_MAX)) { pTmpCiTransConfig->psdIdBuf[pTmpCiTransConfig->psdNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->psdNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read PSD Error\n"); + } break; case CI_DEVICE_TYPE_ROUTE: /* · */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < ROUTE_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < ROUTE_SUM_MAX) && (pTmpCiTransConfig->routeNum < ROUTE_SUM_MAX)) { pTmpCiTransConfig->routeIdBuf[pTmpCiTransConfig->routeNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->routeNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Route Error\n"); + } break; case CI_DEVICE_TYPE_OVERLAP: /* */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < OVERLAP_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < OVERLAP_SUM_MAX) && (pTmpCiTransConfig->overlapNum < OVERLAP_SUM_MAX)) { pTmpCiTransConfig->overlapIdBuf[pTmpCiTransConfig->overlapNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->overlapNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Overlap Error\n"); + } break; case CI_DEVICE_TYPE_SPKS: /* SPKS */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SPKS_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < SPKS_SUM_MAX) && (pTmpCiTransConfig->spksNum < SPKS_SUM_MAX)) { pTmpCiTransConfig->spksIdBuff[pTmpCiTransConfig->spksNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->spksNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read SPKS Error\n"); + } break; case CI_DEVICE_TYPE_FLOODGATE:/**/ { - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < FLOOD_GATE_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < FLOOD_GATE_SUM_MAX) && (pTmpCiTransConfig->floodGateNum < FLOOD_GATE_SUM_MAX)) { pTmpCiTransConfig->floodGateIdBuf[pTmpCiTransConfig->floodGateNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->floodGateNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read FloodGate Error\n"); + } } break; case CI_DEVICE_TYPE_RELAY: /* ղ̵ */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < RELAY_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < RELAY_SUM_MAX) && (pTmpCiTransConfig->zcjNum < ZCJ_SUM_MAX)) { pTmpCiTransConfig->zcjIdBuf[pTmpCiTransConfig->zcjNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->zcjNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Zcj Error\n"); + } break; case CI_DEVICE_TYPE_CUTOFF_POINT: /* ֽ */ - if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < RELAY_SUM_MAX)) + if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < CUTOFF_POINT_SUM_MAX) && (pTmpCiTransConfig->wCutoffPointNum < CUTOFF_POINT_SUM_MAX)) { pTmpCiTransConfig->wCutoffPointBuf[pTmpCiTransConfig->wCutoffPointNum] = pDquCiTransmitStr->devId; pTmpCiTransConfig->wCutoffPointNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read Cfp Error\n"); + } break; case CI_DEVICE_TYPE_AUTOROUTE:/* cgh-ϲCID-2539-7Զͨ */ if ((pDquCiTransmitStr->devId > 0u) && (pDquCiTransmitStr->devId < AUTO_ROUTE_SUM_MAX) && @@ -8444,6 +8666,10 @@ UINT8 ReadDquCiTransmitInfoToConfig(DquCiTransmitStruct *pDquCiTransmitStr) pTmpCiTransConfig->autoRouteNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read AutoRoute Error\n"); + } break; default: rtnValue = 0u; @@ -10357,6 +10583,7 @@ UINT8 LinkCfgDtStruFromDquLinkStr(DSU_LINK_STRU* pLink, LinkDataConfigStru* pLin pLinkScCfgDtStr->chLogicLineRelation = pLink->wLinkLogicDirUpAndDown; pLinkScCfgDtStr->chLogicDirChanged = pLink->wLogicDirChanged; pLinkScCfgDtStr->chRelPhySecIsAGorBG = LINK_REL_PHYSEC_IS_DEFAULT; /*ȳʼΪAGBG*/ + pLinkScCfgDtStr->wLinkSpecialEa = 0U; /*LINK*/ for (i = 0u; i < dsuDataLenStru.wStationLen; i++) { @@ -11142,13 +11369,14 @@ UINT8 RouteMainProConfigDataInit(RouteConfigDataStruct* RouteCfgDtStr, RouteConf UINT16 wMaybeSubIdBuf[ROUTE_SUB_INCLUDE_SUM_MAX] = { 0U };/*·ӽ·ID*/ UINT8 chMaybeSubIdIndex = 0U;/*·ӽ·ID*/ UINT8 chMainIncSubIndex = 0U;/*·ӽ·ID*/ - UINT16 wMaybeMainIdBuf[ROUTE_SUB_INCLUDE_SUM_MAX] = { 0U };/*ӽ··ID*/ + UINT16 wMaybeMainIdBuf[ROUTE_MAYBE_BELONG_SUM_MAX] = { 0U };/*ӽ··ID*/ UINT8 chMaybeMainIdIndex = 0U;/*ӽ··ID*/ UINT8 chSubBelMainIndex = 0U;/*ӽ··ID*/ LOD_STRU strCurRouteSigPoint = { 0U };/*ǰ·ڷһLINK*/ LOD_STRU strFindRouteSigPoint = { 0U };/*·ڷһLINK*/ UINT8 chDirChangeNum = 0U;/*·ڷһLINK͵ǰ·ڷһLINK֮䷽仯Ŀ*/ DSU_ROUTE_STRU* pDsuRouteStr = NULL; + UINT8 chMaxCheckFail = CI_SUCCESS; /*·ӽ·Ŀӽ··ĿʼΪ0*/ pRouteCfgDtStr->MainOrSubData.RouteBelMainSum = 0U; @@ -11194,13 +11422,27 @@ UINT8 RouteMainProConfigDataInit(RouteConfigDataStruct* RouteCfgDtStr, RouteConf շһµ·ڷڷ仯㣨2·ڷһLINK֮䷽仯ĿΪ1ųǷֶν·ϵ*/ if ((pRouteCfgDtStr->RouteInLogTrackSum) > (RouteCfgDtStr[i].RouteInLogTrackSum)) {/*ǰ··߼Σǰ·Ϊ·ԣһҪһֱͨ۷*/ - wMaybeSubIdBuf[chMaybeSubIdIndex] = RouteCfgDtStr[i].RouteId; - chMaybeSubIdIndex++; + if (ROUTE_SUB_INCLUDE_SUM_MAX > chMaybeSubIdIndex) + { + wMaybeSubIdBuf[chMaybeSubIdIndex] = RouteCfgDtStr[i].RouteId; + chMaybeSubIdIndex++; + } + else + { + chMaxCheckFail = CI_ERROR;/*ֹͣ ֹ*/ + } } else if ((pRouteCfgDtStr->RouteInLogTrackSum) < (RouteCfgDtStr[i].RouteInLogTrackSum)) - {/*ǰ·߼αĽ·ǰ·Ϊӽ·ԣһҪһֱͨ۷*/ - wMaybeMainIdBuf[chMaybeMainIdIndex] = RouteCfgDtStr[i].RouteId; - chMaybeMainIdIndex++; + {/*ǰ·߼αĽ·ǰ·Ϊӽ·ԣһҪһֱͨ۷*/ + if (ROUTE_MAYBE_BELONG_SUM_MAX > chMaybeMainIdIndex) + { + wMaybeMainIdBuf[chMaybeMainIdIndex] = RouteCfgDtStr[i].RouteId; + chMaybeMainIdIndex++; + } + else + { + chMaxCheckFail = CI_ERROR;/*ֹͣ ֹ*/ + } } else { @@ -11214,99 +11456,149 @@ UINT8 RouteMainProConfigDataInit(RouteConfigDataStruct* RouteCfgDtStr, RouteConf } chMainIncSubLogSum = 0U; } - - /*۵ǰ··ӽ·ʼźŻһǷֶ*/ - for (i = 0U; i < chMaybeSubIdIndex; i++) + if (CI_SUCCESS == chMaxCheckFail) { - /*ӿ·ӽ·ɸѡӽ·*/ - if (pRouteCfgDtStr->StartSignalId == RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId) + /*۵ǰ··ӽ·ʼźŻһǷֶ*/ + for (i = 0U; i < chMaybeSubIdIndex; i++) { - /*·Ӧĵһӽ·ʼźŻͬ*/ - if (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].EndSignalId]].signalFenDuanAttr) + /*ӿ·ӽ·ɸѡӽ·*/ + if (pRouteCfgDtStr->StartSignalId == RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId) { - /*һӽ·նźŻΪֶ*/ - pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; - chMainIncSubIndex++; - } + /*·Ӧĵһӽ·ʼźŻͬ*/ + if (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].EndSignalId]].signalFenDuanAttr) + { + if (ROUTE_SUB_INCLUDE_SUM_MAX > chMainIncSubIndex) + { + /*һӽ·նźŻΪֶ*/ + pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; + chMainIncSubIndex++; + } + else + { + chMaxCheckFail = CI_ERROR; + } + } + else + { + ; /**/ + } + } + else if (pRouteCfgDtStr->EndSignalId != RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].EndSignalId) + { + /*·Ӧķһӽ·:ӽ·նźŻ·նźŻһ*/ + if (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId]].signalFenDuanAttr) + { + if (ROUTE_SUB_INCLUDE_SUM_MAX > chMainIncSubIndex) + { + /*ȷӽ·ʼźŻΪֶԣΪ·ȷһӽ·*/ + pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; + chMainIncSubIndex++; + } + else + { + chMaxCheckFail = CI_ERROR; + } + } + else + { + ; /**/ + } + } else { - ; /**/ + /*·Ӧһӽ·:ӽ·նźŻ·նźŻһ*/ + /*ȷӽ·ʺ··һ Ҵȷӽ·ʼźűΪֶԼΪյӽ·*/ + if ((pRouteCfgDtStr->ConfigRouteType == RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].ConfigRouteType) + && (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId]].signalFenDuanAttr)) + { + if (ROUTE_SUB_INCLUDE_SUM_MAX > chMainIncSubIndex) + { + pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; + chMainIncSubIndex++; + } + else + { + chMaxCheckFail = CI_ERROR; + } + } + else + { + ; /*·Ҳͬʵӽ·*/ + } + } + if (0U < chMainIncSubIndex) + { + pRouteCfgDtStr->MainOrSubData.MainRouteProperty = ROUTE_MAIN_PROPERTY; + } + if (CI_ERROR == chMaxCheckFail) + { + break; } } - else if (pRouteCfgDtStr->EndSignalId != RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].EndSignalId) + + for (i = 0U; i < chMaybeMainIdIndex; i++) { - /*·Ӧķһӽ·:ӽ·նźŻ·նźŻһ*/ - if (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId]].signalFenDuanAttr) + if ((SIGNAL_FENDUAN_NO == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].StartSignalId]].signalFenDuanAttr) + && (SIGNAL_FENDUAN_NO == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].EndSignalId]].signalFenDuanAttr) + && ((SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[pRouteCfgDtStr->StartSignalId]].signalFenDuanAttr) + || (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[pRouteCfgDtStr->EndSignalId]].signalFenDuanAttr))) { - /*ȷӽ·ʼźŻΪֶԣΪ·ȷһӽ·*/ - pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; - chMainIncSubIndex++; + /*·ʼնźŻֶ߱ԣӿӽ··ɸѡ·*/ + if (pRouteCfgDtStr->EndSignalId != RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].EndSignalId) + {/*ȷ·նźŻӽ·նźŻһ£Ϊӽ·ȷһ·*/ + if (ROUTE_MAIN_BELONG_SUM_MAX > chSubBelMainIndex) + { + pRouteCfgDtStr->MainOrSubData.RouteBelMainIdBuf[chSubBelMainIndex] = wMaybeMainIdBuf[i]; + chSubBelMainIndex++; + } + else + { + chMaxCheckFail = CI_ERROR; + } + } + else + {/*ȷ·նźŻӽ·նźŻһ£ӽ··ѡ·һµĴȷ·Ϊյ·*/ + if (RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].ConfigRouteType == pRouteCfgDtStr->ConfigRouteType) + { + if (ROUTE_MAIN_BELONG_SUM_MAX > chSubBelMainIndex) + { + pRouteCfgDtStr->MainOrSubData.RouteBelMainIdBuf[chSubBelMainIndex] = wMaybeMainIdBuf[i]; + chSubBelMainIndex++; + } + else + { + chMaxCheckFail = CI_ERROR; + } + } + } } - else + if (0U < chSubBelMainIndex) { - ; /**/ + pRouteCfgDtStr->MainOrSubData.MainRouteProperty = ROUTE_SUB_PROPERTY; } + if (CI_ERROR == chMaxCheckFail) + { + break; + } + } + + if (CI_ERROR == chMaxCheckFail) + { + rtnvalue = 0U; + debug_infor_printf((const)"\n RouteMainProConfigDataInit Error: Routeid:%d Sub or Main Route Over Max \n", pRouteCfgDtStr->RouteId); } else { - /*·Ӧһӽ·:ӽ·նźŻ·նźŻһ*/ - /*ȷӽ·ʺ··һ Ҵȷӽ·ʼźűΪֶԼΪյӽ·*/ - if ((pRouteCfgDtStr->ConfigRouteType == RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].ConfigRouteType) - && (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeSubIdBuf[i]]].StartSignalId]].signalFenDuanAttr)) - { - pRouteCfgDtStr->MainOrSubData.RouteSubIdBuf[chMainIncSubIndex] = wMaybeSubIdBuf[i]; - chMainIncSubIndex++; - } - else - { - ; /*·Ҳͬʵӽ·*/ - } + pRouteCfgDtStr->MainOrSubData.RouteSubSum = chMainIncSubIndex; + pRouteCfgDtStr->MainOrSubData.RouteBelMainSum = chSubBelMainIndex; + rtnvalue = 1U; } - if (0U < chMainIncSubIndex) - { - pRouteCfgDtStr->MainOrSubData.MainRouteProperty = ROUTE_MAIN_PROPERTY; - } - } - - for (i = 0U; i < chMaybeMainIdIndex; i++) - { - if ((SIGNAL_FENDUAN_NO == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].StartSignalId]].signalFenDuanAttr) - && (SIGNAL_FENDUAN_NO == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].EndSignalId]].signalFenDuanAttr) - && ((SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[pRouteCfgDtStr->StartSignalId]].signalFenDuanAttr) - || (SIGNAL_FENDUAN_YES == dquCICfgDtStr.SgnlCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuSignalIndex[pRouteCfgDtStr->EndSignalId]].signalFenDuanAttr))) - { - /*·ʼնźŻֶ߱ԣӿӽ··ɸѡ·*/ - if (pRouteCfgDtStr->EndSignalId != RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].EndSignalId) - {/*ȷ·նźŻӽ·նźŻһ£Ϊӽ·ȷһ·*/ - pRouteCfgDtStr->MainOrSubData.RouteBelMainIdBuf[chSubBelMainIndex] = wMaybeMainIdBuf[i]; - chSubBelMainIndex++; - } - else - {/*ȷ·նźŻӽ·նźŻһ£ӽ··ѡ·һµĴȷ·Ϊյ·*/ - if (RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[wMaybeMainIdBuf[i]]].ConfigRouteType == pRouteCfgDtStr->ConfigRouteType) - { - pRouteCfgDtStr->MainOrSubData.RouteBelMainIdBuf[chSubBelMainIndex] = wMaybeMainIdBuf[i]; - chSubBelMainIndex++; - } - } - } - if (0U < chSubBelMainIndex) - { - pRouteCfgDtStr->MainOrSubData.MainRouteProperty = ROUTE_SUB_PROPERTY; - } - } - - if ((ROUTE_SUB_INCLUDE_SUM_MAX < chMainIncSubIndex) && (ROUTE_SUB_INCLUDE_SUM_MAX < chSubBelMainIndex)) - { - rtnvalue = 0U; } else { - pRouteCfgDtStr->MainOrSubData.RouteSubSum = chMainIncSubIndex; - pRouteCfgDtStr->MainOrSubData.RouteBelMainSum = chSubBelMainIndex; - rtnvalue = 1U; + rtnvalue = 0U; + debug_infor_printf((const)"\n RouteMainProConfigDataInit Error: Routeid:%d _Maybe Sub or Main Route Over Max \n", pRouteCfgDtStr->RouteId); } - return rtnvalue; } @@ -11320,6 +11612,7 @@ UINT8 LogRelateRouteDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC UINT16 i = 0U; UINT16 j = 0U; UINT8 rtnvalue = 0U; + UINT8 chMaxCheck = CI_SUCCESS; /*߼ΰ·ĿʼΪ0*/ pLogCfgDtStr->chRelateRouteSum = 0U; @@ -11329,19 +11622,34 @@ UINT8 LogRelateRouteDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC { if (RouteCfgDtStr[i].RouteInLogTrackIdBuf[j] == pLogCfgDtStr->LogicSectionId) { - pLogCfgDtStr->wRelateRouteId[pLogCfgDtStr->chRelateRouteSum] = RouteCfgDtStr[i].RouteId; - (pLogCfgDtStr->chRelateRouteSum)++; + if (LOGSEC_RELATE_ROUTE_SUM_MAX > pLogCfgDtStr->chRelateRouteSum) + { + pLogCfgDtStr->wRelateRouteId[pLogCfgDtStr->chRelateRouteSum] = RouteCfgDtStr[i].RouteId; + (pLogCfgDtStr->chRelateRouteSum)++; + } + else + { + chMaxCheck = CI_ERROR; + } + break; + } + if (CI_ERROR == chMaxCheck) + { break; } } + if (CI_ERROR == chMaxCheck) + { + break; + } } - if (LOGSEC_RELATE_ROUTE_SUM_MAX >= pLogCfgDtStr->chRelateRouteSum) + if (CI_ERROR == chMaxCheck) { - rtnvalue = 1U; + rtnvalue = 0U; } else { - rtnvalue = 0U; + rtnvalue = 1U; } return rtnvalue; } @@ -11362,7 +11670,7 @@ UINT8 LogRelateProSwDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC UINT16 wProtectSwSum = 0U;/*߼ι*/ UINT16 wProtectSwId = 0U;/*߼ιIDɱ*/ UINT8 chProtectSwFlag = 0U;/*߼ιȥر־*/ - + UINT8 chMaxCheck = CI_SUCCESS; /*߼ι*/ pLgScCfgDtStr->chRelateProSwSum = 0U; for (ii = 0; ii < pLgScCfgDtStr->chLogsecSwitchSum; ii++) @@ -11389,20 +11697,43 @@ UINT8 LogRelateProSwDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC } if (1U != chProtectSwFlag) {/*ǰвIDŽ*/ - pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchId = dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectSwitchId; - pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchPosition = dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectPosition; - (pLgScCfgDtStr->chRelateProSwSum)++; + if (LOGSEC_RELATE_PRO_SW_SUM_MAX > pLgScCfgDtStr->chRelateProSwSum) + { + pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchId = dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectSwitchId; + pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchPosition = dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectPosition; + (pLgScCfgDtStr->chRelateProSwSum)++; + } + else + { + chMaxCheck = CI_ERROR; + } break; } } } + if (CI_ERROR == chMaxCheck) + { + break; + } + } + if (CI_ERROR == chMaxCheck) + { + break; } } + if (CI_ERROR == chMaxCheck) + { + break; + } } - if (LOGSEC_RELATE_PRO_SW_SUM_MAX < pLgScCfgDtStr->chRelateProSwSum) + if (CI_ERROR == chMaxCheck) { rtnvalue = 0U; } + else + { + rtnvalue = 1U; + } return rtnvalue; } @@ -12384,4 +12715,41 @@ static UINT8 NonReturnStruFromDquStr(DSU_AR_STRU* pNonReturn, NonAutoReturnConfi return rtnvalue; -} \ No newline at end of file +} + +/* +*: ʼLINK +*: CHAR * FSName ļָ +*: +*ֵ: 0 ʧ +* 1 ɹ +* by cgh 20250818 +*/ +static UINT8 LinkSpecialEaDataInit(CHAR* FSName) +{ + UINT16 ii = 0U; + UINT8 retVal = 0U; /*ֵ*/ + UINT16 jj = 0U; + + retVal = dquCbtcConfigDataInit(FSName); /*ʼϵͳ*/ + + if (0U != retVal) + { + for (ii = 0U; ii < cbtcConfigDataStru.BoundarySpecialEaInfoLen; ii++) + { + for (jj = 0U; jj < cbtcConfigDataStru.cbtcSpecialEaInfo[ii].wLinkSum; jj++) + { + dquCICfgDtStr.LinkCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[cbtcConfigDataStru.cbtcSpecialEaInfo[ii].szLinkId[jj]]].wLinkSpecialEa = cbtcConfigDataStru.cbtcSpecialEaInfo[ii].wIndex; + dquCICfgDtStr.LinkCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[cbtcConfigDataStru.cbtcSpecialEaInfo[ii].szLinkId[jj]]].dwFrontDis = cbtcConfigDataStru.cbtcSpecialEaInfo[ii].dwFrontDis; + dquCICfgDtStr.LinkCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuLinkIndex[cbtcConfigDataStru.cbtcSpecialEaInfo[ii].szLinkId[jj]]].dwBehindDis = cbtcConfigDataStru.cbtcSpecialEaInfo[ii].dwBehindDis; + } + } + } + else + { + /*ϵͳݳʼʧܣ0*/ + } + + return retVal; +} + diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h index 08a6680..8ed5e4f 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h @@ -32,6 +32,7 @@ #include "NonAutoReturnConfigDataManage.h" #include "../SGBJ/SGBJConfigDataManage.h" #include "../Section/AxisSectionConfigDataManage.h" +#include "../System/SystemParameterManage.h" #define ORIGIN_TO_TERMINAL ((UINT8)0x55) /*㵽յ*/ #define TERMINAL_TO_ORIGIN ((UINT8)0xAA) /*յ㵽*/ @@ -58,8 +59,9 @@ /*dquCICfgDtStr.OCPhySecCfgStrгԱ*/ #define OC_PHYSEC_CFG_STR_MEMBER_NUM ((UINT8)6) -#define AXIS_TYPE_YONGLIE ((UINT8)(0x01)) /**/ -#define AXIS_TYPE_KEANDA ((UINT8)(0x02)) /*ư*/ +#define AXIS_TYPE_YONGLIE ((UINT8)(0x01)) /**/ +#define AXIS_TYPE_KEANDA ((UINT8)(0x02)) /*ư*/ +#define AXIS_TYPE_FUHAOSHENG ((UINT8)(0x03)) /*ʢ*/ #define INDICATOR_MAX_SIZE ((UINT16)2000) /*С*/ @@ -82,6 +84,10 @@ #define LINK_LINXIAN_YES ((UINT8)0x55) /*Link*/ #define LINK_LINXIAN_NO ((UINT8)0xFF) /*Link*/ +/**/ +#define LINK_SPECOAL_EA_YES ((UINT8)0x55) /*Link*/ +#define LINK_SPECOAL_EA_NO ((UINT8)0xAA) /*Link*/ + typedef struct { RelayConfigDataStruct RelayCfgDtStr[RELAY_SUM_MAX]; /*̵*/ diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c index d3be220..4a09db6 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c @@ -4560,3 +4560,75 @@ UINT8 EnsureNearAxleStorageLineAtrr(const UINT16 wAxleId) return cRetVal; } +/* +* ȡڼе +* ˵const UINT8 chLocalCiId ID +* PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru νṹ +* ֵ CI_SUCCESS,ɹ +* CI_ERROR,ʧ +* BY CGH 20250418 +*/ +UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru) +{ + UINT8 chReval = CI_ERROR; + UINT8 chDevSum = 0U; /*豸Ŀ*/ + UINT8* szDevIdBuf = NULL; /*豸ID*/ + UINT8 ii = 0U; + UINT16 jj = 0U; + UINT16 wIndexInAxle = 0U; /*ڼϵͳе*/ + + if ((0U != chLocalCiId) && (NULL != pPhysicalSectionConfigDataStru)) + { + chReval = CI_SUCCESS; + chDevSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); + szDevIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); + + for (ii = 0U; ii < chDevSum; ii++) + { + wIndexInAxle = 1U; + for (jj = 0U; jj < dquCICfgDtStr.PsclSgmtCfgDtStrLen; jj++) + { + if (dquCICfgDtStr.PsclSgmtCfgDtStr[jj].PhysicalSectionId < PHYSICAL_SECTION_SUM_MAX) + { + if (chLocalCiId == dquCICfgDtStr.PsclSgmtCfgDtStr[jj].BelongCiId) + { + if (szDevIdBuf[ii] == (UINT8)dquCICfgDtStr.PsclSgmtCfgDtStr[jj].BelongAxleSysID) + { + pPhysicalSectionConfigDataStru[dquCICfgDtStr.PsclSgmtCfgDtStr[jj].PhysicalSectionId].wIndexInAxle = wIndexInAxle; + wIndexInAxle++; + } + else + { + ; + } + } + else + { + ; + } + } + else + { + chReval = CI_ERROR; + break; + } + } + + if (CI_ERROR == chReval) + { + break; + } + else + { + ; + } + } + } + else + { + ; + } + + return chReval; +} + diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h index 2a5813f..ed33cc7 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h @@ -497,6 +497,16 @@ UINT8 EnsureAxleBorderAtrr(const UINT16 wAxleId); *********************************************/ UINT8 EnsureNearAxleStorageLineAtrr(const UINT16 wAxleId); +/* +* ȡڼе +* ˵const UINT8 chLocalCiId ID +* PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru νṹ +* ֵ CI_SUCCESS,ɹ +* CI_ERROR,ʧ +* BY CGH 20250418 +*/ +UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c index 967b32c..d53fe61 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c @@ -280,6 +280,16 @@ UINT8 R_ScreenStructFromChar(UINT8 * pDataAddr,Relay_ScreenStruct* pScrnStr, UIN pData += 2U; } + if (54U < rowLen) + { + pScrnStr->chControlType = *pData; /*ſ*/ + pData += 1U; + } + else + {/*ûһ*/ + pScrnStr->chControlType = PSD_CONTROL_TYPE_RCI; /*RCI*/ + } + rtnvalue = 1u; } @@ -629,25 +639,11 @@ UINT8 R_ZhaoChaStruFromChar(UINT8 * pDataAddr,Relay_ZhaoChaStruct* pZCStr,UINT16 index += 2u; } } - else if (CI_PATTERN_FULL_ELECTRONIC == chLocalCiPattern) - { - if ((index + 6U) <= realRowLen) - { - pZCStr->wCbtcRelayBenDuanZcId = dquCiShortFromChar(pData); /*CBTC˼̵ID*/ - pData += 2U; - index += 2U; - pZCStr->wCbtcRelayDuiDuanZcId = dquCiShortFromChar(pData); /*CBTCԶ˼̵ID*/ - pData += 2U; - index += 2U; - pZCStr->wCbtcCancelRelayId = dquCiShortFromChar(pData); /*CBTCȡղ̵ID*/ - pData += 2U; - index += 2U; - } - } else { ; /*Ƿֵ*/ } + rtnvalue = 1U; return rtnvalue; @@ -969,23 +965,37 @@ UINT8 R_FloodGateStructFromChar(UINT8 * pDataAddr,Relay_FloodGateStruct* pFloodG UINT8 R_DCAgreeStructFromChar(UINT8 * pDataAddr,Relay_DCAgreeStruct * pDCAgreeStr) { UINT8 * pData = pDataAddr; - UINT8 rtnvalue = 1u; + UINT8 rtnvalue = 0U; + UINT8 chLocalCiPattern = 0u; /*CIģʽ*/ if ((NULL == pDataAddr) || (NULL == pDCAgreeStr)) { - rtnvalue = 0u; + ; } - if(1u == rtnvalue) + else { - pDCAgreeStr->wRouteId = dquCiShortFromChar(pData); /*·ID*/ - pData += 2u; - pDCAgreeStr->DCRouteDCQJId = dquCiShortFromChar(pData); /*ͬ-̵ID*/ - pData += 2u; - pDCAgreeStr->DCRouteTAJId = dquCiShortFromChar(pData); /*ͬ-ͬⰴť̵ID*/ - pData += 2u; + chLocalCiPattern = GetLocalCiPattern(); - rtnvalue = 1u; + pDCAgreeStr->wRouteId = dquCiShortFromChar(pData); /*·ID*/ + pData += 2U; + pDCAgreeStr->DCRouteDCQJId = dquCiShortFromChar(pData); /*ͬ-̵ID*/ + pData += 2U; + + if (CI_PATTERN_FULL_ELECTRONIC == chLocalCiPattern) + { + pDCAgreeStr->DCRouteDCQJTwoId = dquCiShortFromChar(pData); /*ͬ-̵2ID*/ + pData += 2U; + } + else + { + pDCAgreeStr->DCRouteDCQJTwoId = 0U; + } + + pDCAgreeStr->DCRouteTAJId = dquCiShortFromChar(pData); /*ͬ-ͬⰴť̵ID*/ + pData += 2U; + + rtnvalue = 1U; } return rtnvalue; diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c index 1def5dd..987333b 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c @@ -1464,76 +1464,100 @@ UINT8 InitRelay_FloodGateStru(CHAR* CIDataName) *********************************************/ UINT8 InitRelay_DCAgreeStru(CHAR* CIDataName) { - UINT8 funcRtn = 0u; + UINT8 funcRtn = 0U; Relay_DCAgreeStruct* pDCAgreeStr = NULL; /*̵ͬ*/ - UINT8* pDataAddr; /*ݵַ*/ - UINT32 DataSize; /*ݴСֽ*/ - UINT16 j; - UINT8 rtnValue = 0u; + 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; /**/ + localCiPattern = GetLocalCiPattern(); - /*Ѿʼˣǵִй ȫӲóʼű*/ - if((NULL != RelayData.pRelayDCAgreeStr)||(CI_PATTERN_FULL_ELECTRONIC == localCiPattern)) + /*Ѿʼˣǵִй*/ + if(NULL != RelayData.pRelayDCAgreeStr) { - rtnValue = 1u; + rtnValue = 1U; } else { - /*ȡ·̵ͬݱ*/ - funcRtn = dquGetConfigData(CIDataName,CI_DATA_TYPE, RELAY_DCAGREE_ID,&pDataAddr,&DataSize); - if(0u == funcRtn) + if (CI_PATTERN_TRADITIONAL == localCiPattern) { - /*ʧ*/ - rtnValue = 0u; + dwExcelId = CI_DATA_TYPE; + dwSheetId = RELAY_DCAGREE_ID; } else { + dwExcelId = OC_DATA_TYPE; + dwSheetId = OC_RELAY_DCAGREE_ID; + } - if(0u != (DataSize%LEN_RELAY_DCAGREE_ID)) - { /*øΪݴ*/ - debug_infor_printf((const)"\nCI_RELAY_DATA,RELAY_DCAGREE len %d not equal to fs",LEN_RELAY_DCAGREE_ID); - DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software,CI_DEVICE_TYPE_FS_TABLE,((UINT32)CI_DATA_TYPE<<8u)+RELAY_DCAGREE_ID,PRINT_ONCE); - rtnValue = 0u; - } - else + /*ȡ·̵ͬݱ*/ + funcRtn = dquGetConfigDataNew(CIDataName, dwExcelId, dwSheetId,&pDataAddr,&DataSize, &wRealRowCount); + if(0U == funcRtn) + { + /*ûбʼɹ*/ + rtnValue = 1U; + debug_infor_printf((const)"\nOC_DCAgree_RELAY_ID NO IN FS\n"); + } + else + { + rtnValue = 1U; + + if ((0U != DataSize) && (0U != wRealRowCount)) { - RelayDataLen.RelayDCAgreeStrLen = (UINT16)(DataSize / LEN_RELAY_DCAGREE_ID);/*ṹ*/ - - if(LEN_RELAY_DCAGREE_ID >DataSize ) - {/*һ*/ - RelayData.pRelayDCAgreeStr = (Relay_DCAgreeStruct *) MyNew ((UINT32)sizeof(Relay_DCAgreeStruct) ); - rtnValue = 1u; + if (0U != (DataSize % wRealRowCount)) + { + /*øΪݴ*/ + debug_infor_printf((const)"\nCI_RELAY_DATA,RELAY_DCAGREE 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.RelayDCAgreeStrLen = wRealRowCount;/*ṹ*/ + dwRowLen = DataSize / wRealRowCount; /*̬ռ*/ - RelayData.pRelayDCAgreeStr = (Relay_DCAgreeStruct *) MyNew ((UINT32)(sizeof(Relay_DCAgreeStruct) * RelayDataLen.RelayDCAgreeStrLen)); + RelayData.pRelayDCAgreeStr = (Relay_DCAgreeStruct*)MyNew((UINT32)(sizeof(Relay_DCAgreeStruct) * RelayDataLen.RelayDCAgreeStrLen)); - if(NULL == RelayData.pRelayDCAgreeStr) + if (NULL == RelayData.pRelayDCAgreeStr) {/*̬ռʧ*/ - RelayDataLen.RelayDCAgreeStrLen = 0u; - rtnValue = 0u; + RelayDataLen.RelayDCAgreeStrLen = 0U; + rtnValue = 0U; } else { /*ڴΪЧ*/ - (void)memset(RelayData.pRelayDCAgreeStr, 0x00,sizeof(Relay_DCAgreeStruct) * RelayDataLen.RelayDCAgreeStrLen); - /*ݵ Ĭг ṹ */ - rtnValue = 1u; - for(j = 0u;j < RelayDataLen.RelayDCAgreeStrLen;j++) + (void)memset(RelayData.pRelayDCAgreeStr, 0x00, sizeof(Relay_DCAgreeStruct) * RelayDataLen.RelayDCAgreeStrLen); + /*ݵ Ĭг ṹ */ + + for (j = 0u; j < RelayDataLen.RelayDCAgreeStrLen; j++) { - pDCAgreeStr = RelayData.pRelayDCAgreeStr + j; - - /*ݽṹ*/ - rtnValue &= R_DCAgreeStructFromChar(pDataAddr,pDCAgreeStr); - pDataAddr += LEN_RELAY_DCAGREE_ID; + if (1U == rtnValue) + { + pDCAgreeStr = RelayData.pRelayDCAgreeStr + j; + /*ݽṹ*/ + rtnValue &= R_DCAgreeStructFromChar(pDataAddr, pDCAgreeStr); + pDataAddr += dwRowLen; + } + else + { + break; + } } } } } + else + { + ; + } } } return rtnValue; diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h index b81d3e7..04de5c8 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h @@ -331,6 +331,8 @@ typedef struct S_OverlapLockCondStruct UINT16 szIncludeInvOppOverlapId[OVLP_LOCK_COND_MAX_INCL_INV_OPP_OVLP_NUM]; /*޵жԱ*/ UINT16 overlapLocProSwitchGroupID; /*շID*/ UINT16 szIncludeFloodGateId[ROUTE_MAX_FLOOD_GATE_NUM]; /*ID*/ + UINT16 wOverlapThisZhaoChaRelayId; /*αղ̵ID*/ + UINT16 wOverlapThatZhaoChaRelayId; /*ζԶղ̵ID*/ } LS_OveralpLockCondStru; /*·ڶ࿪ݽṹ*/ diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c index beab3d9..f56bea8 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c @@ -733,6 +733,14 @@ UINT8 LS_OverlapLockCondStruFromChar(UINT8 * pDataAddr, LS_OveralpLockCondStru * pData += LS_DATA_DUAL_BYTE_ELEM_LEN; } + /*αղ̵ID*/ + pOverlapLockCondStru->wOverlapThisZhaoChaRelayId = dquCiShortFromChar(pData); + pData += LS_DATA_DUAL_BYTE_ELEM_LEN; + + /*ζԶղ̵ID*/ + pOverlapLockCondStru->wOverlapThatZhaoChaRelayId = dquCiShortFromChar(pData); + pData += LS_DATA_DUAL_BYTE_ELEM_LEN; + rtnvalue = 1u; } return rtnvalue; diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c index 04600fa..2725968 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c @@ -1547,6 +1547,8 @@ UINT8 InitLS_OverlapLockCondStru(CHAR *LSDataName) LS_OveralpLockCondStru* pTempLSProtSecLockCondStru = NULL; /*ʱ·*/ UINT8* pDataAddr = NULL; /*ݵַ*/ UINT32 DataSize = 0u; /*ݴСֽ*/ + UINT32 rowLen = 0u; /**/ + UINT16 realRowLen = 0U; /*ʵʱһеij*/ UINT16 j = 0u; UINT8 rtnValue = 0u; @@ -1558,7 +1560,7 @@ UINT8 InitLS_OverlapLockCondStru(CHAR *LSDataName) else { /*ȡ*/ - funcRtn = dquGetConfigData(LSDataName, LS_DATA_TYPE, OVERLAP_LOCK_COND_DATA_ID, &pDataAddr, &DataSize); + funcRtn = dquGetConfigDataNew(LSDataName, LS_DATA_TYPE, OVERLAP_LOCK_COND_DATA_ID, &pDataAddr, &DataSize, &rowLen); if(funcRtn == 0u) { @@ -1568,55 +1570,61 @@ UINT8 InitLS_OverlapLockCondStru(CHAR *LSDataName) else { /*ø*/ - if((DataSize % OVERLAP_LOCK_COND_DATA_LEN) != 0u) - { - debug_infor_printf((const)"\nCI_LS_DATA,OVERLAP_LOCK_COND len %d not equal to fs",PHYSICAL_INTRU_DATA_LEN); - DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software,CI_DEVICE_TYPE_FS_TABLE,(LS_DATA_TYPE<<8)+OVERLAP_LOCK_COND_DATA_ID,PRINT_ONCE); - rtnValue = 0u; + if ((0U != DataSize) && (0U != rowLen)) + { + if (0U != DataSize % rowLen) + { + debug_infor_printf((const)"\nCI_LS_DATA,OVERLAP_LOCK_COND len %d not equal to fs", PHYSICAL_INTRU_DATA_LEN); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (LS_DATA_TYPE << 8) + OVERLAP_LOCK_COND_DATA_ID, PRINT_ONCE); + rtnValue = 0u; + } + else + { + realRowLen = (UINT16)(DataSize / rowLen); + LSDataLen.LSOverlapLockCondStruLen = (UINT16)rowLen; + + if (DataSize < realRowLen) + { + rtnValue = 0U; + } + else + { + /*̬ռ*/ + LSData.pLSOverlapLockCondStru = (LS_OveralpLockCondStru*)MyNew((UINT32)(sizeof(LS_OveralpLockCondStru) * LSDataLen.LSOverlapLockCondStruLen)); + /*̬ռʧ*/ + if (NULL == LSData.pLSOverlapLockCondStru) + { + /*鳤0Խ*/ + LSDataLen.LSOverlapLockCondStruLen = 0u; + + rtnValue = 0u; + } + else + { + /*ڴΪЧ*/ + (void)memset(LSData.pLSOverlapLockCondStru, 0x00, sizeof(LS_OveralpLockCondStru) * LSDataLen.LSOverlapLockCondStruLen); + + /*ݵ Ĭг ṹ */ + rtnValue = 1u; + for (j = 0u; j < LSDataLen.LSOverlapLockCondStruLen; j++) + { + pTempLSProtSecLockCondStru = LSData.pLSOverlapLockCondStru + j; + + /*ݽṹ*/ + rtnValue &= LS_OverlapLockCondStruFromChar(pDataAddr, pTempLSProtSecLockCondStru); + + pDataAddr += realRowLen; + } + + } + } + } } else { - - /*ȡĿ*/ - LSDataLen.LSOverlapLockCondStruLen = (UINT16)(DataSize/OVERLAP_LOCK_COND_DATA_LEN); - - if(DataSize < OVERLAP_LOCK_COND_DATA_LEN) - { - LSData.pLSOverlapLockCondStru = (LS_OveralpLockCondStru *) MyNew ((UINT32)sizeof(LS_OveralpLockCondStru)); - rtnValue = 1u; - } - else - { - /*̬ռ*/ - LSData.pLSOverlapLockCondStru = (LS_OveralpLockCondStru *) MyNew ((UINT32)(sizeof(LS_OveralpLockCondStru) * LSDataLen.LSOverlapLockCondStruLen)); - /*̬ռʧ*/ - if(NULL == LSData.pLSOverlapLockCondStru) - { - /*鳤0Խ*/ - LSDataLen.LSOverlapLockCondStruLen = 0u; - - rtnValue = 0u; - } - else - { - /*ڴΪЧ*/ - (void)memset(LSData.pLSOverlapLockCondStru, 0x00, sizeof(LS_OveralpLockCondStru) * LSDataLen.LSOverlapLockCondStruLen); - - /*ݵ Ĭг ṹ */ - rtnValue = 1u; - for(j=0u; j < LSDataLen.LSOverlapLockCondStruLen; j++) - { - pTempLSProtSecLockCondStru = LSData.pLSOverlapLockCondStru + j; - - /*ݽṹ*/ - rtnValue &=LS_OverlapLockCondStruFromChar(pDataAddr, pTempLSProtSecLockCondStru); - - pDataAddr += OVERLAP_LOCK_COND_DATA_LEN; - } - - } - } - } + rtnValue = 1U; + } + } } @@ -2035,7 +2043,7 @@ UINT8 InitLS_LogSecIntruStru_Each(CHAR* LSDataName) if (0u != (DataSize % realRowCount)) { debug_infor_printf((const)"\nTIOC_LS_DATA,nLGC_EACHOTHER_INTRU_TABLE 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, (LS_DATA_TYPE << 8) + GROUP_AUTO_ROUTE_DATA_ID, PRINT_ONCE); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (LS_DATA_TYPE << 8) + LOGIC_SEC_EACHINTRU_DATA_ID, PRINT_ONCE); rtnValue = 0u; } else @@ -2072,7 +2080,7 @@ UINT8 InitLS_LogSecIntruStru_Each(CHAR* LSDataName) } else { - debug_infor_printf((const)"\nGROUP_AUTO_ROUTE_DATA_ERR DataSize %d realRowCount %d\n ", DataSize, realRowCount); + debug_infor_printf((const)"\nLGC_EACHOTHER_INTRU_TABLE DataSize %d realRowCount %d\n ", DataSize, realRowCount); } } diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h index 50331e3..885f82c 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h @@ -59,5 +59,7 @@ #define CI_SYSTEM_SIGWITHFUSHISIG_ID ((UINT8)0x0b) /*źŻ븴ʾźŻϵ*/ #define CI_SYSTEM_SIGWITHFUSHISIG_LEN ((UINT8)12) /*źŻ븴ʾźŻϵ*/ +#define CI_SYSTEM_VERGE_KILL_ID ((UINT8)0x0F) /*ӦߵĹת*/ + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c index 71bb91a..6d1ad36 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c @@ -172,15 +172,15 @@ UINT8 MaskCfgDtStruFrmCIATSSignalMask(UINT8 * FSDataName) UINT16 residue = 0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ UINT8 reVal = CI_ERROR; - UINT8 rowLenth = 0u;/*г*/ - + UINT8 rowLenth = 0u;/*г*/ UINT8 MaskType[] = { 0u,MASK_TYPE_SIGNAL_RED,MASK_TYPE_SIGNAL_YELLOW,MASK_TYPE_SIGNAL_GREEN,MASK_TYPE_SIGNAL_WHITE, - MASK_TYPE_SIGNAL_REDYELLOW,MASK_TYPE_SIGNAL_LIGHTSTATE,MASK_TYPE_SIGNAL_BREAK,MASK_TYPE_SIGNAL_FENGSUO,MASK_TYPE_SIGNAL_CENTER_DETAIN, - MASK_TYPE_SIGNAL_LOCAL_DETAIN,MASK_TYPE_SIGNAL_LINSHIXIANSU_SET,MASK_TYPE_SIGNAL_DOUBLE_GREEN,MASK_TYPE_SIGNAL_DOUBLE_YELLOW, - 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, - 0u }; - UINT16 BuChang = 0u; + MASK_TYPE_SIGNAL_REDYELLOW,MASK_TYPE_SIGNAL_LIGHTSTATE,MASK_TYPE_SIGNAL_BREAK,MASK_TYPE_SIGNAL_FENGSUO,MASK_TYPE_SIGNAL_CENTER_DETAIN, + MASK_TYPE_SIGNAL_LOCAL_DETAIN,MASK_TYPE_SIGNAL_LINSHIXIANSU_SET,MASK_TYPE_SIGNAL_DOUBLE_GREEN,MASK_TYPE_SIGNAL_DOUBLE_YELLOW, + 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 }; + UINT16 BuChang = 0u; #if 0 funcRtn = dquGetConfigData(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_SIGNAL_MASK_ID,&pDataAddr,&DataSize); #endif @@ -294,39 +294,41 @@ UINT8 MaskCfgDtStruFrmCIATSPsdMask(UINT8* FSDataName) UINT16 DeviceID = 0u; UINT16 residue = 0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ - UINT32 realRow = 0u; - UINT8 rowLen = 0u; + UINT16 realRow = 0u; + UINT16 rowLen = 0u; #if 1 - UINT8 MaskType[] = { 0u,MASK_TYPE_PSD_STATE_ATS,MASK_TYPE_MUTUALLOCK_STATE,MASK_TYPE_REMORA_STATE, + 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,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,0U }; + MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN,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 UINT16 BuChang = 0u; - funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_PSD_MASK_ID, &pDataAddr, &DataSize, &realRow); - rowLen = (UINT8)(DataSize / realRow); + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_PSD_MASK_ID, &pDataAddr, &DataSize, &realRow); if (funcRtn == 0u) { funcRtn = 0u; return funcRtn; } - - if (DataSize % rowLen != 0u) - { - funcRtn = 0u; - return funcRtn; - } - if (DataSize == 0u) + if (0u == DataSize) { /**/ funcRtn = 1u; return funcRtn; } + if(0u != DataSize % realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLen = (UINT16)(DataSize / realRow); + } for (; DataSize > 0u; DataSize -= 2u) { residue = BuChang % (rowLen / 2u); @@ -401,32 +403,34 @@ UINT8 MaskCfgDtStruFrmCIATSEsbMask(UINT8* FSDataName) UINT16 DeviceID = 0u; UINT16 residue = 0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ - UINT32 realRow = 0u; - UINT8 rowLen = 0u; + UINT16 realRow = 0u; + 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, 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 }; UINT16 BuChang = 0u; funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_ESB_MASK_ID, &pDataAddr, &DataSize, &realRow); - rowLen = (UINT8)(DataSize / realRow); if (funcRtn == 0u) { funcRtn = 0u; return funcRtn; } - - if (DataSize % rowLen != 0u) - { - funcRtn = 0u; - return funcRtn; - } - if (DataSize == 0u) + if (0u == DataSize) { /**/ funcRtn = 1u; return funcRtn; } + if (0u != DataSize % realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLen = (UINT16)(DataSize / realRow); + } for (; DataSize > 0U; DataSize -= 2u) { residue = BuChang % (rowLen / 2u); @@ -580,38 +584,39 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName) } } - else if(residue < rowLenth/2u-1u) + else if(residue < (UINT16)((rowLenth/2u)-1u)) { /*ȡλID*/ tempMaskId = ShortFromChar(pDataAddr); - /*00xFFFFЧλ*/ - if((CI_SUM_MAX > MaskRow)&&(CI_TO_ATS_MASK_SUM_MAX > tempMaskId)&&(0u ConfigCiToAtsMaskIdMax[MaskRow]) + /*00xFFFFЧλ*/ + if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*ǷΪЧλֵ*/ { - ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; + 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 { - /*do nothing*/ + funcRtn = CI_ERROR; + break; } - - ConfigCiToAtsMaskCurSum[MaskRow]++; - } - else - { -#if 0 /* TODO */ - funcRtn = CI_ERROR; - break; -#endif } pDataAddr+=2u; @@ -715,93 +720,117 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName) *********************************************/ UINT8 MaskCfgDtStruFrmCIATSRouteMask(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 realRowCount = 0u; /*ʵʱݵ*/ - UINT16 rowDataLen = 0u; /*һݵֽڳ*/ - - UINT8 MaskType[] = { 1u,MASK_TYPE_ROUTE_ALLLOCK, MASK_TYPE_ROUTE_XUANPAI, MASK_TYPE_ROUTE_DELAYUNLOCK, + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr = NULL; + UINT8* pDataLin = NULL; + UINT32 DataSize = 0U; + UINT16 MaskRow = 0U; + UINT16 DeviceID = 0U; + UINT16 residue = 0U; + UINT16 tempMaskId = 0U; /*λIDʱ*/ + UINT16 realRowCount = 0U; /*ʵʱݵ*/ + UINT16 rowDataLen = 0U; /*һݵֽڳ*/ + UINT8 MaskType[] = { 1U,MASK_TYPE_ROUTE_ALLLOCK, MASK_TYPE_ROUTE_XUANPAI, MASK_TYPE_ROUTE_DELAYUNLOCK, MASK_TYPE_ROUTE_EXISTENCE, MASK_TYPE_ROUTE_NEARLOCK, MASK_TYPE_ROUTE_YINDAOLOCK, - MASK_TYPE_ROUTE_DC_QINGQIU, MASK_TYPE_ROUTE_DC_AGREE, MASK_TYPE_ROUTE_AUTO_TRIGGER, 1u }; - UINT16 BuChang = 0u; + MASK_TYPE_ROUTE_DC_QINGQIU, MASK_TYPE_ROUTE_DC_AGREE, MASK_TYPE_ROUTE_AUTO_TRIGGER,MASK_TYPE_ROUTE_DC_AGREE_ERR,1U }; + UINT16 BuChang = 0U; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_ROUTE_MASK_ID, &pDataAddr, &DataSize, &realRowCount); - if (funcRtn == 0u) + if (0U == funcRtn) { - funcRtn = 0u; - return funcRtn; + funcRtn = CI_ERROR; } - rowDataLen = (UINT16)(DataSize / realRowCount); /*һݵij*/ - if (DataSize % rowDataLen != 0u) + else { - funcRtn = 0u; - return funcRtn; - } - if (DataSize == 0u) - { - /**/ - funcRtn = 1u; - return funcRtn; - } - for (; DataSize > 0u; DataSize -= 2u) - { - residue = BuChang % (rowDataLen / 2u); - if (0u == residue) + funcRtn = CI_SUCCESS; + if ((0U < DataSize) && (0U < realRowCount)) { - DeviceID = ShortFromChar(pDataAddr); - pDataLin = pDataAddr + rowDataLen - 2u; - MaskRow = ShortFromChar(pDataLin); - - /*鲻Խ磬Խֱӷʧ*/ - if (MaskRow >= CI_SUM_MAX) + if (0U == DataSize % realRowCount) { - funcRtn = 0u; - return funcRtn; + rowDataLen = (UINT16)(DataSize / realRowCount); /*һݵij*/ + + for (; DataSize > 0U; DataSize -= 2U) + { + residue = BuChang % (rowDataLen / 2U); + if (0U == residue) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowDataLen - 2U; + MaskRow = ShortFromChar(pDataLin); + + /*鲻Խ磬Խֱӷʧ*/ + if (MaskRow < CI_SUM_MAX) + { + pDataAddr += 2U; + BuChang++; + } + else + { + funcRtn = CI_ERROR; + break; + } + } + else if ((residue > 0U) && (residue < ((rowDataLen / 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_ROUTE; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % (rowDataLen / 2U)]); + + + /*ͳЧλ*/ + if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow]) + { + ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToAtsMaskCurSum[MaskRow]++; + } + else + { + funcRtn = CI_ERROR; + break; + } + } + else + { + + + } + + pDataAddr += 2U; + BuChang++; + } + else + { + pDataAddr += 2U; + BuChang++; + } + } } - - pDataAddr += 2u; - BuChang++; - } - else if ((residue > 0u) && (residue < ((rowDataLen / 2u) - 1u))) - { - /*ȡλID*/ - tempMaskId = ShortFromChar(pDataAddr); - - /*00xFFFFЧλ*/ - if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + else { - ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; - ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; - ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; - ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % (rowDataLen / 2u)]); - - - /*ͳЧλ*/ - if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow]) - { - ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; - } - else - { - /*do nothing*/ - } - - ConfigCiToAtsMaskCurSum[MaskRow]++; + funcRtn = CI_ERROR; } - pDataAddr += 2u; - BuChang++; } else { - pDataAddr += 2u; - BuChang++; + ; } } - funcRtn = 1u; + return funcRtn; } /********************************************* @@ -1640,7 +1669,6 @@ UINT8 MaskCfgDtStruFrmCIZCSwitchMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -1750,7 +1778,6 @@ UINT8 MaskCfgDtStruFrmCIZCSignalMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -1895,6 +1922,230 @@ UINT8 MaskCfgDtStruFrmZCCISignalMask(UINT8 * FSDataName) } /*вzc-ciλ*/ else + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + pSignalCconfigData = NULL; + + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_SIGNAL; + ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % (CI_ZC_SIGNAL_MASK_LEN / 2u)]); + + for (ii = 0u; iiConfigZcCiSignalCrossMask = SIGNAL_CONFIG_CROSS_MASK_YES; + break; + } + + } + } + + /*ͳЧλ*/ + if (ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[MaskRow]) + { + ConfigZcToCiMaskIdMax[MaskRow] = ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigZcToCiMaskCurSum[MaskRow]++; + } + + pDataAddr += 2u; + BuChang++; + } + } + + funcRtn = 1u; + return funcRtn; +} + +/* zt ɾش 2022-02-15 */ +/********************************************* +*ܣCI-ZCźŻλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIZCSignalMask2(UINT8 * FSDataName) +{ + UINT8 funcRtn = 0u; + UINT8* pDataAddr,*pDataLin; + UINT32 DataSize = 0u; + UINT16 MaskRow=0u; + UINT16 DeviceID=0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + UINT8 MaskType[] = { 1u,MASK_TYPE_SIGNAL_OPENSTATE,MASK_ZC_CI_TYPE_SIGNAL_OCCUPYED,MASK_TYPE_SIGNAL_LIGHTSTATE,MASK_ZC_CI_SIG_ENGINEERV_NEAR,MASK_CI_ZC_SIG_ENGINCROSS_STE,MASK_CI_ZC_SIGNAL_OCCUPYED_REC,1u }; + UINT16 BuChang = 0u; + UINT16 residue = 0u; + UINT16 realRow = 0U; + UINT16 rowLenth = 0U; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_SIGNAL_MASK_ID, &pDataAddr, &DataSize, &realRow); + if(funcRtn==0u) + { + funcRtn = 0u; + return funcRtn; + } + if(DataSize == 0u) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + if (DataSize%realRow != 0u) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize / realRow); + } + for(;DataSize>0u;DataSize-=2u) + { + residue = (BuChang % (rowLenth / 2u)); + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth -2u; + BuChang++; + MaskRow = ShortFromChar(pDataLin); + pDataAddr+=2u; + /*鲻Խ磬Խֱӷʧ*/ + if(MaskRow >= CI_SUM_MAX) + { + funcRtn = 0u; + return funcRtn; + } + + } + /*345 zc-ci λ ,ID,ȱ֤ */ + else if (((1u != residue) + && (5u != residue) + && (6u != residue)) + ||(residue == (rowLenth / 2u-1u )) + ) + { + pDataAddr += 2u; + BuChang++; + } + else + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if((0xFFFFu != tempMaskId)&&(0u != tempMaskId)) + { + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_SIGNAL; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang%(rowLenth /2u)]); + + + /*ͳЧλ*/ + if(ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToZcMaskIdMax[MaskRow]) + { + ConfigCiToZcMaskIdMax[MaskRow] = ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToZcMaskCurSum[MaskRow]++; + } + + pDataAddr+=2u; + BuChang++; + } + } + funcRtn = 1u; + return funcRtn; +} + +/********************************************* +*ܣZC-CIźŻλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmZCCISignalMask2(UINT8 * FSDataName) +{ + UINT8 funcRtn = 0u; + UINT8* pDataAddr,*pDataLin; + UINT32 DataSize = 0u; + UINT16 ii =0u; + UINT16 MaskRow=0u; + UINT16 DeviceID=0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + + SignalConfigDataStruct *pSignalCconfigData = NULL; + + UINT8 MaskType[] = { 1u,MASK_TYPE_SIGNAL_OPENSTATE,MASK_ZC_CI_TYPE_SIGNAL_OCCUPYED,MASK_TYPE_SIGNAL_LIGHTSTATE,MASK_ZC_CI_SIG_ENGINEERV_NEAR,MASK_CI_ZC_SIG_ENGINCROSS_STE,MASK_CI_ZC_SIGNAL_OCCUPYED_REC,1u }; + UINT16 BuChang = 0u; + UINT16 realRow = 0U; + UINT16 rowLenth = 0U; + UINT16 residue = 0U; + funcRtn = dquGetConfigDataNew(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_SIGNAL_MASK_ID,&pDataAddr,&DataSize, &realRow); + if(funcRtn==0u) + { + funcRtn = 0u; + return funcRtn; + } + if (DataSize == 0u) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + if (0U != DataSize%realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize / realRow); + } + for(;DataSize>0u;DataSize-=2u) + { + residue =BuChang % (rowLenth / 2u); + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth -2u; + BuChang++; + MaskRow = ShortFromChar(pDataLin); + pDataAddr+=2u; + /*鲻Խ磬Խֱӷʧ*/ + if(MaskRow >= CI_SUM_MAX) + { + funcRtn = 0u; + return funcRtn; + } + } + /*ֻ3 4 5 */ + else if ((2U != residue)&& (3u != residue)&& (4u != residue)) + { + pDataAddr += 2u; + BuChang++; + } + /*Сzc-ciλ*/ + else { /*ȡλID*/ tempMaskId = ShortFromChar(pDataAddr); @@ -1908,7 +2159,7 @@ UINT8 MaskCfgDtStruFrmZCCISignalMask(UINT8 * FSDataName) ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_SIGNAL; ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; - ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang%(CI_ZC_SIGNAL_MASK_LEN/2u)]); + ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang%(rowLenth /2u)]); for(ii=0u;ii0U;DataSize-=2u) { - if(BuChang%(CI_ZC_PSD_MASK_LEN/2u) == 0u) + wTempCount = BuChang % (CI_ZC_PSD_MASK_LEN / 2U); + if(0U == wTempCount) { DeviceID = ShortFromChar(pDataAddr); pDataLin = pDataAddr + CI_ZC_PSD_MASK_LEN -2u; @@ -1999,7 +2251,7 @@ UINT8 MaskCfgDtStruFrmCIZCPsdMask(UINT8 * FSDataName) } } - else if(BuChang%(CI_ZC_PSD_MASK_LEN/2u) == 1u) + else if ((1U == wTempCount) || (2U == wTempCount)) { /*ȡλID*/ tempMaskId = ShortFromChar(pDataAddr); @@ -2050,7 +2302,6 @@ UINT8 MaskCfgDtStruFrmCIZCEsbMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -2141,13 +2392,12 @@ UINT8 MaskCfgDtStruFrmCI2ZCLogSgmt(UINT8 * FSDataName) UINT8 funcRtn = 1u; UINT8* pDataAddr,*pDataLin; UINT32 dataSize = 0u; - UINT16 i =0u; UINT16 maskRow=0u; UINT16 deviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ const UINT8 MaskType[]={1u,MASK_TYPE_LOGICSECTION_CTOCCUPY,MASK_TYPE_LOGICSECTION_UTOCCUPY,MASK_TYPE_LOGICSECTION_TXOCCUPY,MASK_TYPE_LOGICSECTION_LINSHIXIANSU_SET, - MASK_TYPE_LOGICSECTION_LOCK,MASK_TYPE_LOGICSECTION_DIR_UP,MASK_TYPE_LOGICSECTION_DIR_DOWN,1u}; + MASK_TYPE_LOGICSECTION_LOCK,MASK_TYPE_LOGICSECTION_DIR_DOWN,MASK_TYPE_LOGICSECTION_DIR_UP,1u}; UINT16 buChang = 0u; funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_LOGIC_SGMT_MASK_ID,&pDataAddr,&dataSize); if (funcRtn == 1u) @@ -2231,13 +2481,12 @@ UINT8 MaskCfgStruFrmZCCILogSgmtMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ UINT8 MaskType[]={1u,MASK_TYPE_LOGICSECTION_CTOCCUPY,MASK_TYPE_LOGICSECTION_UTOCCUPY,MASK_TYPE_LOGICSECTION_TXOCCUPY,MASK_TYPE_LOGICSECTION_LINSHIXIANSU_SET, - MASK_TYPE_LOGICSECTION_LOCK,MASK_TYPE_LOGICSECTION_DIR_UP,MASK_TYPE_LOGICSECTION_DIR_DOWN,1u}; + MASK_TYPE_LOGICSECTION_LOCK,MASK_TYPE_LOGICSECTION_DIR_DOWN,MASK_TYPE_LOGICSECTION_DIR_UP,1u}; UINT16 BuChang = 0u; funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize); if(0u == funcRtn) @@ -2335,7 +2584,6 @@ UINT8 MaskCfgDtStruFrmZC2CiRouteMask(UINT8 * FSDataName) UINT8 funcRtn = 1u; UINT8* pDataAddr,*pDataLin; UINT32 dataSize = 0u; - UINT16 i =0u; UINT16 maskRow=0u; UINT16 deviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -2424,7 +2672,6 @@ UINT8 MaskCfgStruFrmCIZCRouteMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -2532,7 +2779,6 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName) UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 residue = 0u; - UINT16 wPhysicId = 0u; UINT16 axleId = 0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -2648,6 +2894,125 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName) return funcRtn; } +/********************************************* +*ܣCI-ZCλ Σ-ݽṹ28.0.0.14 +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgStruFrmCIZCAxleSgmtMask2(UINT8 * FSDataName) +{ + UINT8 funcRtn = 0u; + UINT8* pDataAddr, *pDataLin; + UINT32 DataSize = 0u; + UINT16 i = 0u; + UINT16 MaskRow = 0u; + UINT16 DeviceID = 0u; + UINT16 residue = 0u; + UINT16 axleId = 0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + + UINT8 MaskType[] = { 1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY, + MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_DETAIN_UP,MASK_TYPE_AXISSECTION_DETAIN_DOWN, + MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE, + MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY, + MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u }; + UINT16 BuChang = 0u; + UINT16 realRow = 0U; + UINT16 rowLenth = 0U; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_AXLE_SGMT_MASK_ID, &pDataAddr, &DataSize, &realRow); + if (0u == funcRtn) + { + funcRtn = 0u; + return funcRtn; + } + if (0u == DataSize) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + if (0u != DataSize%realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize / realRow); + } + for (; DataSize>0u; DataSize -= 2u) + { + residue = BuChang % (rowLenth / 2u); + + if (BuChang % (rowLenth / 2u) == 0u) + { + DeviceID = ShortFromChar(pDataAddr); + axleId = DeviceID; + pDataLin = pDataAddr + rowLenth - 2u; + BuChang++; + MaskRow = ShortFromChar(pDataLin); + pDataAddr += 2u; + /*鲻Խ磬Խֱӷʧ*/ + if (MaskRow >= CI_SUM_MAX) + { + funcRtn = 0u; + return funcRtn; + } + for (i = 0u; i ConfigCiToZcMaskIdMax[MaskRow]) + { + ConfigCiToZcMaskIdMax[MaskRow] = ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToZcMaskCurSum[MaskRow]++; + } + + pDataAddr += 2u; + BuChang++; + + } + else + { + pDataAddr += 2u; + BuChang++; + } + } + funcRtn = 1u; + return funcRtn; +} + /********************************************* *ܣZC-CIλ *˵FSNameļָ @@ -2792,7 +3157,6 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName) } - /********************************************* *ܣCI-ZCλ *˵FSNameļָ @@ -2803,7 +3167,6 @@ UINT8 MaskCfgStruFrmCIZCOverLapMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -2918,7 +3281,6 @@ UINT8 MaskCfgStruFrmCIZCReturnMask(UINT8 * FSDataName) UINT8 MaskType[]={1u,MASK_TYPE_PLAT_AUTORETURNSIG_FLASH,MASK_TYPE_PLAT_AUTORETURNSIG_STEADY,MASK_TYPE_PLAT_AUTORETURNSIG_BUTTONSTAT,1u}; UINT16 BuChang = 0u; - UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); UINT8 findFlag = 0u; funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_RETURN_MASK_ID,&pDataAddr,&DataSize); if(funcRtn==0u) @@ -3045,7 +3407,6 @@ UINT8 MaskCfgStruFrmZCCIRtnMask(UINT8 * FSDataName) UINT8 MaskType[]={1u,MASK_TYPE_PLAT_AUTORETURNSIG_FLASH,MASK_TYPE_PLAT_AUTORETURNSIG_STEADY,MASK_TYPE_PLAT_AUTORETURNSIG_BUTTONSTAT,1u}; UINT16 BuChang = 0u; - UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_RETURN_MASK_ID,&pDataAddr,&DataSize); if(funcRtn==0u) { @@ -3370,7 +3731,6 @@ UINT8 MaskCfgDtStruFrmCILEUPsdMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -3460,7 +3820,6 @@ UINT8 MaskCfgDtStruFrmCILEURouteMask(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8* pDataAddr, *pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -3785,11 +4144,25 @@ UINT8 MaskInit(UINT8 * FSDataName) UINT8 funcRtn = 0u; UINT8 ciPattern = 0U; UINT16 i = 0U; + UINT8 chPulicData = GetLocalPublicDataType(); /***** ******CIATSλ ********/ /*CI-ATSλ*/ - funcRtn = MaskCfgDtStruFrmCIATSSwitchMask(FSDataName); + if (DATA_TYPE_NEW == chPulicData) + { + /*CI-ATSλ*/ + funcRtn = MaskCfgDtStruFrmCIATSSwitchMask(FSDataName); + /*CI-ATSλ*/ + funcRtn *= MaskCfgDtStruFrmCIATSPhySecMask(FSDataName); + } + else + { + /*CI-ATSλ*/ + funcRtn = MaskCfgDtStruFrmCIATSSwitchMask2(FSDataName); + /*CI-ATSλ*/ + funcRtn *= MaskCfgDtStruFrmCIATSPhySecMask2(FSDataName); + } /*CI-ATSźŻλ*/ funcRtn *= MaskCfgDtStruFrmCIATSSignalMask(FSDataName); /*CI-ATSλ*/ @@ -3802,8 +4175,6 @@ UINT8 MaskInit(UINT8 * FSDataName) funcRtn *= MaskCfgDtStruFrmCIATSRouteMask( FSDataName); /*ci-atsԶ۷λ*/ funcRtn *= MaskCfgDtStruFrmCIATSARRtMask(FSDataName); - /*CI-ATSλ*/ - funcRtn *= MaskCfgDtStruFrmCIATSPhySecMask( FSDataName); /*CI-ATSԶͨ·λ*/ funcRtn *= MaskCfgDtStruFrmCIATSARtMask(FSDataName); /*ci-atsȫԶ۷λ*/ @@ -3836,30 +4207,43 @@ UINT8 MaskInit(UINT8 * FSDataName) { /*CI-ZCλ*/ funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask( FSDataName); - /* zt ɾش 2022-02-15 */ - /*CI-ZCźŻλ*/ - funcRtn *= MaskCfgDtStruFrmCIZCSignalMask( FSDataName); + if (DATA_TYPE_NEW == chPulicData) + { + /*CI-ZCźŻλ*/ + funcRtn *= MaskCfgDtStruFrmCIZCSignalMask(FSDataName); + /*ZC-CIźŻλ*/ + funcRtn *= MaskCfgDtStruFrmZCCISignalMask(FSDataName); + /*CI-ZCλ*/ + funcRtn *= MaskCfgStruFrmCIZCAxleSgmtMask(FSDataName); + /*ZC-CIλ*/ + funcRtn *= MaskCfgStruFrmZCCIAxleSgmtMask(FSDataName); + } + else + { + /*CI-ZCźŻλ*/ + funcRtn *= MaskCfgDtStruFrmCIZCSignalMask2(FSDataName); + /*ZC-CIźŻλ*/ + funcRtn *= MaskCfgDtStruFrmZCCISignalMask2(FSDataName); + /*CI-ZCλ*/ + funcRtn *= MaskCfgStruFrmCIZCAxleSgmtMask2(FSDataName); + /*ZC-CIλ*/ + funcRtn *= MaskCfgStruFrmZCCIAxleSgmtMask2(FSDataName); + } /*CI-ZCλ*/ funcRtn *= MaskCfgDtStruFrmCIZCPsdMask( FSDataName); /*CI-ZCͣťλ*/ funcRtn *= MaskCfgDtStruFrmCIZCEsbMask( FSDataName); - /*CI-ZC߼λ*/ - funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName); /*ZC-CI߼λ*/ + funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName); + /*CI-ZC߼λ*/ funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName); /*CI-ZC·λ*/ funcRtn *= MaskCfgStruFrmCIZCRouteMask( FSDataName); funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName); - /*CI-ZCλ*/ - funcRtn *= MaskCfgStruFrmCIZCAxleSgmtMask( FSDataName); /*CI-ZCλ*/ funcRtn *= MaskCfgStruFrmCIZCOverLapMask( FSDataName); /*CI-ZC۷λ*/ funcRtn *= MaskCfgStruFrmCIZCReturnMask( FSDataName); - /*ZC-CIźŻλ*/ - funcRtn *= MaskCfgDtStruFrmZCCISignalMask(FSDataName); - /*ZC-CIλ*/ - funcRtn *= MaskCfgStruFrmZCCIAxleSgmtMask( FSDataName); /*ZC-CI۷λ*/ funcRtn *= MaskCfgStruFrmZCCIRtnMask(FSDataName); /*CI_ZC·λ*/ @@ -4036,7 +4420,6 @@ UINT8 MaskCfgStruFrmCIZCGaragedoor(UINT8 * FSDataName) UINT8 funcRtn = 1u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -4397,7 +4780,6 @@ UINT8 MaskCfgStruFrmZCCIGaragedoor(UINT8 * FSDataName) UINT8 funcRtn = 1u; UINT8* pDataAddr,*pDataLin; UINT32 DataSize = 0u; - UINT16 i =0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ @@ -4486,3 +4868,377 @@ UINT8 MaskCfgStruFrmZCCIGaragedoor(UINT8 * FSDataName) return funcRtn; } + +/********************************************* +*ܣCIATSλ 28.0.0.14 +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSSwitchMask2(UINT8 * FSDataName) +{ + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr, *pDataLin; + UINT32 DataSize = 0u; + UINT16 MaskRow = 0u; /*λ*/ + UINT16 DeviceID = 0u; /*豸ID*/ + UINT16 residue = 0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + UINT16 rowCount = 0u; + UINT8 rowLenth = 0u;/*ֽ*/ + + /*Ӧÿһ*/ + UINT8 MaskType[] = { 0u,MASK_TYPE_SWITCH_DINGWEI,MASK_TYPE_SWITCH_FANWEI,MASK_TYPE_SWITCH_SIKAI,MASK_TYPE_SWITCH_JICHA, + MASK_TYPE_SWITCH_MOVING,MASK_TYPE_SWITCH_DANSUO,MASK_TYPE_SWITCH_FENGSUO,MASK_TYPE_SWITCH_YINDAOSUO,MASK_TYPE_SWITCH_PROTECTLOCK,MASK_TYPE_SWITCH_BYPASS, + MASK_TYPE_SWITCH_OPEN_CAP,0u }; + UINT16 BuChang = 0u;/**/ + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_SWITCH_MASK_ID, &pDataAddr, &DataSize, &rowCount); + if (funcRtn == 0u) + { + /**/ + } + 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 % (rowLenth / 2u)); + /*һеģһһid*/ + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + + pDataLin = pDataAddr + rowLenth - 2u; + MaskRow = ShortFromChar(pDataLin); + + /*鲻Խ磬Խֱӷʧ*/ + if (MaskRow < CI_SUM_MAX) + { + pDataAddr += 2u; + BuChang++; + } + else + { + funcRtn = CI_ERROR; + break; + } + } + /*ڶλֵ*/ + else if ((0u < residue) && (residue < ((rowLenth / 2u) - 1u))) + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u ConfigCiToAtsMaskIdMax[MaskRow]) + { + ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToAtsMaskCurSum[MaskRow]++; + } + else + { + funcRtn = CI_ERROR; + break; + } + } + + pDataAddr += 2u; + BuChang++; + } + else + { + pDataAddr += 2u; + BuChang++; + } + } + } + else + { + funcRtn = CI_ERROR; + } + } + else + { + funcRtn = CI_SUCCESS; + } + } + return funcRtn; +} + +/********************************************* +*ܣCI-ATSλ 28.0.0.14ݽṹ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSPhySecMask2(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; + UINT16 rowLenth = 0u;/*ֽ*/ + UINT8 MaskType[] = { + 1u, + MASK_TYPE_PHYSECTION_STARTLOCK, + MASK_TYPE_PHYSECTION_FLOCK, + MASK_TYPE_PHYSECTION_PRERESET, + MASK_TYPE_PHYSEC_CENTERDETAIN_UP, + MASK_TYPE_PHYSEC_CENTERDETAIN_DOWN, + MASK_TYPE_PHYSEC_STATIONDETAIN_UP, + MASK_TYPE_PHYSEC_STATIONDETAIN_DOWN, + MASK_TYPE_PHYSEC_FLOCK_SPKS + }; + + UINT16 BuChang = 0u; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_PHYSEC_MASK_ID, &pDataAddr, &DataSize, &rowCount); + if (0u == funcRtn) + { + funcRtn = 0u; + return funcRtn; + } + else + { + } + + if (0u == DataSize) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + + if (0u != DataSize%rowCount) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize/rowCount); + } + for (; DataSize>0u; DataSize -= CI_ATS_DATA_ELEMENT_LEN) + { + residue = BuChang % (rowLenth / CI_ATS_DATA_ELEMENT_LEN); + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - CI_ATS_DATA_ELEMENT_LEN; + MaskRow = ShortFromChar(pDataLin); + + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX <= MaskRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + } + + pDataAddr += CI_ATS_DATA_ELEMENT_LEN; + BuChang++; + } + else if (residue < ((rowLenth / CI_ATS_DATA_ELEMENT_LEN) - 1u)) + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_PHYSEC; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % (rowLenth / CI_ATS_DATA_ELEMENT_LEN)]); + + + /*ͳЧλ*/ + if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow]) + { + ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToAtsMaskCurSum[MaskRow]++; + } + else + { + } + + pDataAddr += CI_ATS_DATA_ELEMENT_LEN; + BuChang++; + } + else + { + pDataAddr += CI_ATS_DATA_ELEMENT_LEN; + BuChang++; + } + } + funcRtn = 1u; + return funcRtn; +} + +/********************************************* +*ܣZC-CIλ-ݽṹ28.0.0.14 +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgStruFrmZCCIAxleSgmtMask2(UINT8 * FSDataName) +{ + UINT8 funcRtn = 0u; + UINT8* pDataAddr, *pDataLin; + UINT32 DataSize = 0u; + UINT16 i = 0u; + UINT16 MaskRow = 0u; + UINT16 DeviceID = 0u; + UINT16 residue = 0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + + UINT16 wPhysicId = 0u; + UINT8 MaskType[] = { 1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY, + MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_DETAIN_UP,MASK_TYPE_AXISSECTION_DETAIN_DOWN, + MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE, + MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY, + MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u }; + UINT16 BuChang = 0u; + UINT16 realRow = 0U; + UINT16 rowLenth = 0U; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_AXLE_SGMT_MASK_ID, &pDataAddr, &DataSize, &realRow); + if (0U == funcRtn) + { + funcRtn = 0u; + return funcRtn; + } + if (DataSize == 0u) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + if (0U != DataSize%realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize / realRow); + } + for (; DataSize>0u; DataSize -= 2u) + { + residue = BuChang % (rowLenth / 2u); + + if (residue == 0u) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + BuChang++; + MaskRow = ShortFromChar(pDataLin); + pDataAddr += 2u; + /*鲻Խ磬Խֱӷʧ*/ + if (MaskRow >= CI_SUM_MAX) + { + funcRtn = 0u; + return funcRtn; + } + + for (i = 0u; i ConfigZcToCiMaskIdMax[MaskRow]) + { + ConfigZcToCiMaskIdMax[MaskRow] = ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigZcToCiMaskCurSum[MaskRow]++; + } + pDataAddr += 2u; + BuChang++; + } + else + { + /* */ + pDataAddr += 2u; + BuChang++; + } + } + + funcRtn = 1u; + return funcRtn; + +} diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h index 61c2818..4d83842 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h @@ -41,7 +41,7 @@ #define CI_ZC_SIGNAL_MASK_LEN ((UINT32)16) /*CI-ZCźŻλֽڳ--1г*/ #define CI_ZC_PSD_MASK_ID ((UINT32)3) /*CI-ZCλ*/ -#define CI_ZC_PSD_MASK_LEN ((UINT32)6) /*CI-ZCλֽڳ--1г*/ +#define CI_ZC_PSD_MASK_LEN ((UINT32)8) /*CI-ZCλֽڳ--1г*/ #define CI_ZC_ESB_MASK_ID ((UINT32)4) /*CI-ZCͣťλ*/ #define CI_ZC_ESB_MASK_LEN ((UINT32)6) /*CI-ZCͣťλֽڳ--1г*/ @@ -263,6 +263,21 @@ UINT8 MaskCfgDtStruFrmCIZCSignalMask(UINT8 * FSDataName); *********************************************/ UINT8 MaskCfgDtStruFrmZCCISignalMask(UINT8 * FSDataName); +/* 20150531-ݽṹ28.0.0.14ʵ */ +/********************************************* +*ܣCI-ZCźŻλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIZCSignalMask2(UINT8 * FSDataName); + +/* 20150531-ݽṹ28.0.0.14ʵ */ +/********************************************* +*ܣZC-CIźŻλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmZCCISignalMask2(UINT8 * FSDataName); /********************************************* *ܣCI-ZCλ @@ -407,4 +422,31 @@ UINT8 MaskInit(UINT8 * FSDataName); *********************************************/ UINT8 MaskCfgStruFrmCILEUSignalMask(UINT8 * FSDataName); +/********************************************* +*ܣCIATSλ 28.0.0.14 +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSSwitchMask2(UINT8 * FSDataName); + +/********************************************* +*ܣCI-ATSλ 28.0.0.14ݽṹ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSPhySecMask2(UINT8 * FSDataName); + +/********************************************* +*ܣZC-CIλ-ݽṹ28.0.0.14 +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgStruFrmZCCIAxleSgmtMask2(UINT8 * FSDataName); +/********************************************* +*ܣCI-ZCλ Σ-ݽṹ28.0.0.14 +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgStruFrmCIZCAxleSgmtMask2(UINT8 * FSDataName); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h index 69f1b50..05afa28 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h @@ -191,6 +191,9 @@ #define OC_RELAY_REVERSE_CUT_ID ((UINT8)30) #define OC_LEN_REVERSE_CUT ((UINT8)2) +/*̵ͬID*/ +#define OC_RELAY_DCAGREE_ID ((UINT8)36) + /*ͣť̵ṹ*/ typedef struct S_Relay_EmegencyStopStruct { @@ -241,6 +244,7 @@ typedef struct S_Relay_ScreenStruct UINT16 wPcbBsdRelayId; /*ٹŰťָʾƼ̵*/ UINT16 wVideoQkLight1RelayId; /*ͰťƵָʾ1̵̣*/ UINT16 wVideoQkLight2RelayId; /*ͰťƵָʾ2죩̵*/ + UINT8 chControlType; /*ſ*/ } Relay_ScreenStruct; /*μ̵ṹ*/ @@ -339,9 +343,6 @@ typedef struct S_Relay_ZhaoChaStruct UINT16 wCancelRelayIdOnRelayInterface; /*̵ӿȡղ̵ID */ UINT16 wRelayBenDuanZcIdOnRelayInterface; /*̵ӿڱղ̵ID*/ UINT16 wRelayDuiDuanZcIdOnRelayInterface; /*̵ӿڶԶղ̵ID*/ - UINT16 wCbtcRelayBenDuanZcId; /*CBTCղ̵ID*/ - UINT16 wCbtcRelayDuiDuanZcId; /*CBTCԶղ̵ID*/ - UINT16 wCbtcCancelRelayId; /*CBTC-ȡղ̵ID */ } Relay_ZhaoChaStruct; /*ʾƼ̵ṹ*/ @@ -448,6 +449,7 @@ typedef struct S_Relay_DCAgreeStruct { UINT16 wRouteId; /*·ID*/ UINT16 DCRouteDCQJId;/*·̵ID*/ + UINT16 DCRouteDCQJTwoId;/*·2̵ID*/ UINT16 DCRouteTAJId;/*·ͬⰴť̵ID*/ }Relay_DCAgreeStruct; diff --git a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c index 433f2b2..5215b5f 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.c @@ -1656,5 +1656,55 @@ UINT16 GetRelayBelongOCId(const UINT16 relayId) { retVal = CI_ERROR; } + return retVal; +} + +/* +* ָID̵忨 +* ˵const UINT16 relayId ̵ID +* const UINT8 cBoardType 忨 +* ֵ +* Created By LQ 2025.07.03 +*/ +void SetRelayBoardType(const UINT16 relayId, const UINT8 cBoardType) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetRelayConfigBufIndex(relayId); /*ȡ̵±*/ + + if ((bufIndex < RELAY_SUM_MAX) && ((RELAY_DO_BOARD == cBoardType) || (RELAY_DO_RELAY_BOARD == cBoardType) || (RELAY_SO_BOARD == cBoardType) + || (RELAY_THIRTY_SIX_DI_BOARD == cBoardType) || (RELAY_THIRTY_TWO_DI_BOARD == cBoardType) || (RELAY_SI_BOARD == cBoardType))) + { + RelayConfigDataStru[bufIndex].BoardType = cBoardType; + } + else + { + /**/ + } +} + +/* +* ȡָID̵忨 +* ˵const UINT16 relayId ̵ID +* ֵ0: ȡʧ +* >0: ̵忨 +* Created By LQ 2025.07.03 +*/ +UINT8 GetRelayBoardType(const UINT16 relayId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetRelayConfigBufIndex(relayId); /*ȡ̵±*/ + + if (bufIndex < RELAY_SUM_MAX) + { + retVal = RelayConfigDataStru[bufIndex].BoardType; + } + else + { + retVal = CI_ERROR; + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h index 6c3d8d5..4d62390 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Relay/RelayConfigDataManage.h @@ -54,6 +54,7 @@ typedef struct S_RelayConfigDataStruct UINT8 VirtualAttribute; /*̵*/ UINT16 LockExceptPhySecNum; /*ղ̵ĹID*/ UINT16 LockExceptPhySecIdBuf[MAX_LOCK_EXCEPT_SECTION_NUM]; /*ղ̵ĹID*/ + UINT8 BoardType; /*忨(ʼ̵)*/ } RelayConfigDataStruct; /*ղ̵ݽṹ*/ @@ -479,6 +480,24 @@ UINT16 GetOcConnetDataDevNum(void); */ UINT16 GetRelayBelongOCId(const UINT16 relayId); +/* +* ָID̵忨 +* ˵const UINT16 relayId ̵ID +* const UINT8 cBoardType 忨 +* ֵ +* Created By LQ 2025.07.03 +*/ +void SetRelayBoardType(const UINT16 relayId, const UINT8 cBoardType); + +/* +* ȡָID̵忨 +* ˵const UINT16 relayId ̵ID +* ֵ0: ȡʧ +* >0: ̵忨 +* Created By LQ 2025.07.03 +*/ +UINT8 GetRelayBoardType(const UINT16 relayId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Relay/RelayDataManage.c b/TSCP/src/APP/ciapp/Relay/RelayDataManage.c index 51e7fdd..821c4aa 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayDataManage.c +++ b/TSCP/src/APP/ciapp/Relay/RelayDataManage.c @@ -16,6 +16,9 @@ RelayDataStruct RelayDataStru[RELAY_SUM_MAX]; /*̵ݽṹ*/ +IODiffDataStruct IODiffDataStru[OC_SUM_MAX]; /*IO˫ϵɼһϢ*/ +UINT8 gDiffDataOcNum = 0u; /*IO˫ϵɼһӦOC*/ + /* * ȡָID̵ * ˵ @@ -916,4 +919,15 @@ UINT8 GetRelayBCollBoardState(const UINT16 wRelayId) } return retVal; +} + +/* +* ȡIO˫ϵɼһ +* ˵ +* ֵ + RelayDataStruct* +*/ +IODiffDataStruct* GetIODiffData(void) +{ + return IODiffDataStru; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Relay/RelayDataManage.h b/TSCP/src/APP/ciapp/Relay/RelayDataManage.h index d885fa3..d419c41 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayDataManage.h +++ b/TSCP/src/APP/ciapp/Relay/RelayDataManage.h @@ -47,6 +47,18 @@ typedef struct S_RelayDataStruct extern RelayDataStruct RelayDataStru[RELAY_SUM_MAX]; /*̵ݽṹ*/ +typedef struct S_IODiffDataStruct +{ + UINT8 OcId; /*OC ID*/ + UINT8 DiffPointNum; /*һµĵλ*/ + UINT8 LocalBoardAdd[IO_COLL_DIFF_MAX];/*λӦİ忨ַ*/ + UINT8 OtherBoardAdd[IO_COLL_DIFF_MAX];/*ϵ忨ַ*/ + UINT8 TheDiffPoint[IO_COLL_DIFF_MAX];/*һµλ*/ +}IODiffDataStruct; + +extern IODiffDataStruct IODiffDataStru[OC_SUM_MAX]; /*IO˫ϵɼһϢ*/ +extern UINT8 gDiffDataOcNum; /*IO˫ϵɼһӦOC*/ + /* * ȡָID̵ * ˵ @@ -288,6 +300,14 @@ void SetRelayBCollBoardState(const UINT16 wRelayId, const UINT8 cBoardState); */ UINT8 GetRelayBCollBoardState(const UINT16 wRelayId); +/* +* ȡIO˫ϵɼһ +* ˵ +* ֵ + RelayDataStruct* +*/ +IODiffDataStruct* GetIODiffData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Relay/RelayDefine.h b/TSCP/src/APP/ciapp/Relay/RelayDefine.h index ef3d093..eac7507 100644 --- a/TSCP/src/APP/ciapp/Relay/RelayDefine.h +++ b/TSCP/src/APP/ciapp/Relay/RelayDefine.h @@ -32,6 +32,9 @@ #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˫ϵɼһ*/ + /************************OC*************************/ #define OC_BOARD_SUM_MAX ((UINT8)44) /*һOCӦ44*/ #define OC_COLL_BOARD_POS_NUM ((UINT16)40) /*һOC·ɼĿֵ*/ @@ -106,5 +109,15 @@ #define RELAY_BOARD_FAULT_NO ((UINT8)0x55) /*忨״̬δ*/ #define RELAY_BOARD_FAULT_YES ((UINT8)0xaa) /*忨״̬*/ +/*̵忨*/ +#define RELAY_DO_BOARD ((UINT8)0x5a) /*ȫ*/ +#define RELAY_DO_RELAY_BOARD ((UINT8)0xc8) /*ȫ̵*/ +#define RELAY_SO_BOARD ((UINT8)0x3c) /*ɢ*/ +#define RELAY_THIRTY_SIX_DI_BOARD ((UINT8)0xcc) /*36·ȫ*/ +#define RELAY_THIRTY_TWO_DI_BOARD ((UINT8)0x5c) /*32·ȫ*/ +#define RELAY_SI_BOARD ((UINT8)0xc3) /*ɢ*/ + + + #endif diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c index ae4bbcc..4f6f56c 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMDataPrepare.c @@ -799,7 +799,8 @@ void rrm_PrepareACLockStatAndDir(UINT16 ACID,UINT8 flag,OUT UINT8* pLockStat,OUT LockDir = ConvertDirectionToLogic(tmpDir); if (((0u == RLockBelongRouteId) && (0u == PLockBelongRouteId)) || (DIR_INVALID == LockDir) - || ((PHYSICAL_SECTION_LOCK_NORMAL != LockStatus) && (PHYSICAL_SECTION_LOCK_PROTECT != LockStatus))) + || ((PHYSICAL_SECTION_LOCK_NORMAL != LockStatus) && (PHYSICAL_SECTION_LOCK_PROTECT != LockStatus) + && (PHYSICAL_SECTION_LOCK_DELAY != LockStatus))) { (*pLockStat) = SEC_LOCK_ERROR; (*pLockDir) = 0u; diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c index 1a26b59..4f18693 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c @@ -34,7 +34,14 @@ static void rrm_ProcessTrainRRMRequst(UINT16 trainID); /* */ static UINT8 rrm_CheckTrainHeadInFreeSta(UINT16 trainID, IN const EnvelopeStruct* pTemp, OUT UINT16* pNextSta); - +/** + * @brief ·״̬Ƿ + * @param[in] UINT16 wRouteId ·ID + * @return CI_ERROR + CI_SUCCESS + * @note BY CGH 20250807 + */ +static UINT8 rrm_CheckRouteState(UINT16 wRouteId); /** * @brief ӼϢRRM· @@ -356,50 +363,64 @@ static UINT8 rrm_CheckSecStatus(UINT8 funValid,UINT16 trainID,IN const RRMPathOf static UINT8 rrm_CheckSignalStatus(UINT8 funValid,UINT16 trainID,IN const RRMPathOfACSeqStruct* pACSeq,OUT UINT8* rrmReason) { UINT8 ret = CI_ERROR; - UINT32 errorCode = 0u; - UINT16 cycle = 0u; - UINT16 headOfRoute = 0u; - UINT16 tempofRoute = 0u; + UINT32 errorCode = 0U; + UINT16 cycle = 0U; + UINT16 headOfRoute = 0U; /*ͷڽ·ID*/ + UINT16 tempofRoute = 0U; UINT8 sigOfRoutePass = CI_ERROR; - UINT8 flag = 0u; + UINT8 cCheckFlag = FLAG_UNSET; + UINT8 chTempCheckFlag = 0U; /*ʱ־*/ + UINT8 chLocalCiId = 0U; + UINT8 chRouteBelongCiId = 0U; /** ڲУ */ - ASSERT_RET_VALUE(NULL == pACSeq,ret,0x80000000u); - ASSERT_RET_VALUE(NULL == rrmReason,ret,0x40000000u); + ASSERT_RET_VALUE(NULL == pACSeq, ret, 0x80000000U); + ASSERT_RET_VALUE(NULL == rrmReason, ret, 0x40000000U); if (RRM_CHECK_UNVALID == funValid) { - ret = 0xffu; + ret = 0xffU; } else { - for (cycle = 0u; cycle < pACSeq->acCnt;cycle++) + for (cycle = 0U; cycle < pACSeq->acCnt; cycle++) { - if (((0u == flag) && (TYPE_OF_PATH_A == pACSeq->pathType[cycle])) || - (TYPE_OF_PATH_C == pACSeq->pathType[cycle])) + if (TYPE_OF_PATH_A == pACSeq->pathType[cycle]) { - /** 账*/ - } - else if ((0u != cycle) && (TYPE_OF_PATH_B == pACSeq->pathType[cycle])) - { - if (0u == flag) + /*dzΣ³ɳͷһ·*/ + headOfRoute = rrm_PrepareAcofRoute(pACSeq->ACID[cycle]); + if (0U == headOfRoute) { - /** ѯͷռѹĽ·*/ - headOfRoute = rrm_PrepareAcofRoute(pACSeq->ACID[cycle - 1u]); - flag = 0xffu; + errorCode += 0x10000000U; + cCheckFlag = FLAG_SET; /** ν·δô϶δ */ } else { - /** 账*/ + chTempCheckFlag = rrm_CheckRouteState(headOfRoute); + if (CI_SUCCESS == chTempCheckFlag) + { + ; + } + else + { + errorCode += 0x08000000U; + cCheckFlag = FLAG_SET; + } } - + } + else if (TYPE_OF_PATH_C == pACSeq->pathType[cycle]) + { + /** 账*/ + } + else if (TYPE_OF_PATH_B == pACSeq->pathType[cycle]) + { /** ѯǰѰ· */ tempofRoute = rrm_PrepareAcofRoute(pACSeq->ACID[cycle]); - if ((0u == headOfRoute) || (0u == tempofRoute)) + if (0U == tempofRoute) { - /** ν·δô϶δ */ - break; + errorCode += 0x04000000U; + cCheckFlag = FLAG_SET; /** ν·δô϶δ */ } else if (tempofRoute == headOfRoute) { @@ -416,15 +437,37 @@ static UINT8 rrm_CheckSignalStatus(UINT8 funValid,UINT16 trainID,IN const RRMPat } else { - break; + chLocalCiId = GetSystemParaLocalCiId(); + chRouteBelongCiId = GetRouteBelongCiId(tempofRoute); + chTempCheckFlag = rrm_CheckRouteState(tempofRoute); + + if ((chLocalCiId != chRouteBelongCiId) && (0U != chRouteBelongCiId) && (0U != chLocalCiId) + && (CI_SUCCESS == chTempCheckFlag)) + { + /*DZڵźرգ*/ + } + else + { + errorCode += 0x02000000U; + cCheckFlag = FLAG_SET; + } } } } else { - /** ·*/ + errorCode += 0x01000000U; + cCheckFlag = FLAG_SET; /** ·󣬼ʧ*/ + } + + if (FLAG_SET == cCheckFlag) + { break; } + else + { + ; /**/ + } } if (cycle == pACSeq->acCnt) @@ -435,11 +478,11 @@ static UINT8 rrm_CheckSignalStatus(UINT8 funValid,UINT16 trainID,IN const RRMPat { *rrmReason = TRAIN_RRM_RESON_05; errorCode += 0x20000000u; - ret = CI_ERROR; + ret = CI_ERROR; } } - ASSER_DEBUG(0u != errorCode,RRM_LOG_LOC(RRM_LOG_ERROR,"errno:0x%08x info:Train%d not allow RRM by route%d signal not open.",errorCode,trainID,tempofRoute)); + ASSER_DEBUG(0u != errorCode,RRM_LOG_LOC(RRM_LOG_ERROR,"errno:0x%08x info:Train%d not allow RRM by tempofRoute%d or headOfRoute%d signal not open.",errorCode,trainID,tempofRoute, headOfRoute)); return ret; } @@ -1141,6 +1184,7 @@ static void rrm_ProcessTrainRRMRequst(UINT16 trainID) if (RRM_CHECK_VALID == funValid) { rrm_SetRRMResult(trainID, TRAIN_RRM_YES, TRAIN_RRM_RESON_FF, 0U); + RRM_LOG_LOC(RRM_LOG_ERROR, "Train%d allow RRM.",trainID); } else { @@ -1185,6 +1229,7 @@ static void rrm_ProcessTrainRRMRequst(UINT16 trainID) if (TRAIN_RRM_OTHERCI_ALLOW == chRrmDstAllowed) { rrm_SetRRMResult(trainID, TRAIN_RRM_YES, TRAIN_RRM_RESON_FF, NextTIOC); + RRM_LOG_LOC(RRM_LOG_ERROR, "Train%d allow RRM.", trainID); } else { @@ -1370,7 +1415,7 @@ UINT8 rrm_OtherCiConditionsCheck(const UINT16 wTrainID, const UINT16 wTrainNextS ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x01000000U); /** ֽһվվ̨ն֮źŻ״̬Ϊ */ - funRtn = rrm_CheckOtherCiSigStatus(funValid, wTrainID, &ACSeq, &rrmReason); + funRtn = rrm_CheckSignalStatus(funValid, wTrainID, &ACSeq, &rrmReason); ASSERT_SETRET(CI_SUCCESS == funRtn, funValid, funValid, RRM_CHECK_UNVALID); ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000U); @@ -1837,132 +1882,6 @@ UINT8 rrm_CheckOtherCiNextStation(UINT8 funValid,UINT16 trainID, const UINT16 wT return ret; } -/** - * @brief гͷǰһվվ̨ն֮źŻ״̬Ϊ - * @param[in] UINT8 funValid Ա־ - * @param[in] UINT16 trainID гID - * @param[in] RRMPathOfACSeqStruct* pACSeq RRM·ļ - * @param[out] UINT8* rrmReason - * @return UINT8 - CI_ERROR ʧ - CI_SUCCESS ɹ - 0xFF δ - * @note BY CGH 20240222 - */ -UINT8 rrm_CheckOtherCiSigStatus(UINT8 funValid, UINT16 trainID, IN const RRMPathOfACSeqStruct* pACSeq, OUT UINT8* rrmReason) -{ - UINT8 ret = CI_ERROR; - UINT32 errorCode = 0U; - UINT16 cycle = 0U; - UINT16 headOfRoute = 0U; /*ͷڽ·ID*/ - UINT16 tempofRoute = 0U; - UINT8 sigOfRoutePass = CI_ERROR; - UINT8 cCheckFlag = FLAG_UNSET; - UINT8 cLocalCiId = 0U; - UINT8 cRouteBelongCiId = 0U; - UINT8 cRouteState = 0U; - - /** ڲУ */ - ASSERT_RET_VALUE(NULL == pACSeq, ret, 0x80000000U); - ASSERT_RET_VALUE(NULL == rrmReason, ret, 0x40000000U); - - if (RRM_CHECK_UNVALID == funValid) - { - ret = 0xffU; - } - else - { - for (cycle = 0U; cycle < pACSeq->acCnt; cycle++) - { - if (TYPE_OF_PATH_A == pACSeq->pathType[cycle]) - { - /*dzΣ³ɳͷһ·*/ - headOfRoute = rrm_PrepareAcofRoute(pACSeq->ACID[cycle]); - if (0U == headOfRoute) - { - cCheckFlag = FLAG_SET; /** ν·δô϶δ */ - } - else - { - ; - } - } - else if (TYPE_OF_PATH_C == pACSeq->pathType[cycle]) - { - /** 账*/ - } - else if (TYPE_OF_PATH_B == pACSeq->pathType[cycle]) - { - /** ѯǰѰ· */ - tempofRoute = rrm_PrepareAcofRoute(pACSeq->ACID[cycle]); - - if (0U == tempofRoute) - { - cCheckFlag = FLAG_SET; /** ν·δô϶δ */ - } - else if (tempofRoute == headOfRoute) - { - /** жϸý·ʼźŻ״̬*/ - } - else - { - /** жϸý·ʼźŻ״̬Ƿ񿪷 */ - sigOfRoutePass = rrm_PrepareOriginSigStatOfRoute(tempofRoute); - - if (CI_SUCCESS == sigOfRoutePass) - { - /** źſţ*/ - } - else - { - cLocalCiId = GetSystemParaLocalCiId(); - cRouteBelongCiId = GetRouteBelongCiId(tempofRoute); - cRouteState = GetRouteState(tempofRoute); - - if ((cLocalCiId != cRouteBelongCiId) && (0U != cRouteBelongCiId) && (0U != cLocalCiId) - && ((ROUTE_STATE_NEAR_LOCK == cRouteState) || (ROUTE_STATE_AUTO_UNLOCK == cRouteState) - || (ROUTE_STATE_DELAY_UNLOCK == cRouteState) || (ROUTE_STATE_HALF_UNLOCK == cRouteState))) - { - /*DZڵźرգ*/ - } - else - { - cCheckFlag = FLAG_SET; /*ڵźŹرգʧ*/ - } - } - } - } - else - { - cCheckFlag = FLAG_SET; /** ·󣬼ʧ*/ - } - - if (FLAG_SET == cCheckFlag) - { - break; - } - else - { - ; /**/ - } - } - - if (cycle == pACSeq->acCnt) - { - ret = CI_SUCCESS; - } - else - { - *rrmReason = TRAIN_RRM_RESON_05; - errorCode += 0x20000000u; - ret = CI_ERROR; - } - } - - ASSER_DEBUG(0U != errorCode, RRM_LOG_LOC(RRM_LOG_ERROR, "errno:0x%08x info:Train%d rrm_CheckOtherCiSigStatus error:not allow RRM by route%d signal not open.", errorCode, trainID, tempofRoute)); - return ret; -} - /** * @brief ǷгͷĿվ̨ռѹδ * @param[in] UINT16 trainID гID @@ -2030,3 +1949,41 @@ static UINT8 rrm_CheckTrainHeadInFreeSta(UINT16 trainID, IN const EnvelopeStruct return ret; } +/** + * @brief ·״̬Ƿ + * @param[in] UINT16 wRouteId ·ID + * @return CI_ERROR + CI_SUCCESS + * @note BY CGH 20250807 + */ +static UINT8 rrm_CheckRouteState(UINT16 wRouteId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chRouteState = 0U;/*·״̬*/ + + if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId)) + { + chRouteState = GetRouteState(wRouteId); + + if ((ROUTE_STATE_YUXIAN_OPEN == chRouteState) + || (ROUTE_STATE_NEAR_LOCK == chRouteState) + || (ROUTE_STATE_NEAR_OPEN == chRouteState) + || (ROUTE_STATE_AUTO_UNLOCK == chRouteState) + || (ROUTE_STATE_HALF_UNLOCK == chRouteState) + ) + { + chReval = CI_SUCCESS; + } + else + { + ; + } + } + else + { + ; + } + + return chReval; +} + diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h index 1c89d66..85e19c8 100644 --- a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h +++ b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h @@ -86,18 +86,4 @@ UINT8 rrm_CheckOtherCiRRMPathAndSw(UINT8 funValid, UINT16 trainID, UINT16 wAtsLg */ UINT8 rrm_CheckOtherCiNextStation(UINT8 funValid, UINT16 trainID, const UINT16 wTrainNextStaId, const UINT16 searchNextStaID, OUT UINT8* rrmReason); -/** - * @brief гͷǰһվվ̨ն֮źŻ״̬Ϊ - * @param[in] UINT8 funValid Ա־ - * @param[in] UINT16 trainID гID - * @param[in] RRMPathOfACSeqStruct* pACSeq RRM·ļ - * @param[out] UINT8* rrmReason - * @return UINT8 - CI_ERROR ʧ - CI_SUCCESS ɹ - 0xFF δ - * @note BY CGH 20240222 - */ -UINT8 rrm_CheckOtherCiSigStatus(UINT8 funValid, UINT16 trainID, IN const RRMPathOfACSeqStruct* pACSeq, OUT UINT8* rrmReason); - #endif \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDefine.h b/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDefine.h index 325b0d7..0d4b91c 100644 --- a/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDefine.h +++ b/TSCP/src/APP/ciapp/ReverseCut/ReverseCutDefine.h @@ -25,7 +25,7 @@ /*ģʽ*/ #define REVERSE_MODE_MAIN ((UINT8)0x55) /*ģʽ ģʽ*/ -#define REVERSE_MODE_SHADOW ((UINT8)0xAA) /*ģʽ ģʽ*/ +#define REVERSE_MODE_SHADOW ((UINT8)0xAA) /*ģʽ Ӱģʽ*/ /*ɵԭ*/ #define REVERSE_REASON_OC_COMM_ERR ((UINT8)0x01) /*ɵԭ OCͨŹ*/ diff --git a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c index 35d15f3..1e44f42 100644 --- a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c +++ b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c @@ -1826,11 +1826,17 @@ void LogRouteLockProc(const UINT16 wLogRouteId) /*ѹźŻ*/ /*߼·״̬Ϊȴ*/ SetLogRouteStateManage(wLogRouteId, ROUTE_LOGICAL_STATE_UNLOCKWAIT); + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wLogSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } else { /*żʧܣ߼·쳣*/ SetLogRouteStateManage(wLogRouteId, ROUTE_LOGICAL_STATE_LOCKERR); + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wLogSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -1883,12 +1889,18 @@ void LogRouteLockErrManage(const UINT16 wLogRouteId) /*ѹźŻ*/ /*߼·״̬Ϊȴ*/ SetLogRouteStateManage(wLogRouteId, ROUTE_LOGICAL_STATE_UNLOCKWAIT); + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wLogSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } else { /*żʧܣ߼·쳣*/ /*쳣رյı־*/ SetLogRouteSignalErrCloseFlag(wLogSignalId, LOG_ROUTE_SIGNAL_CLOSE_ERR); + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wLogSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -2199,15 +2211,10 @@ void SetLogRouteSectionUsingState(const UINT16 logRouteId,const UINT8 useState) void LogRouteLgcSecResUnlockManage(const UINT16 logRouteId) { /*ʼ*/ - UINT8 chRouteState = 0u; - UINT8 chRouteRepeatOpenFlag = 0U; UINT16 routeLogNum = 0u; UINT16 wTrainId = 0U; UINT16 ii = 0U; UINT16* routeLogSecId = NULL; - UINT16 wStartSignalId = 0U; - UINT8 chStartSignalCurColor = 0U; - UINT8 chOpenCloseState = 0U; UINT16 wUnlockLgcSecId = 0U; /*߼ID*/ UINT16 wPreUnlockLgcSecId = 0U; /*·߼һ߼*/ UINT8 chLgcLockState = 0U;/*߼״̬*/ @@ -2215,95 +2222,65 @@ void LogRouteLgcSecResUnlockManage(const UINT16 logRouteId) UINT8 chPreLgcLogRouteId = 0U;/*һ߼߼·*/ UINT8 checkFlag = 0U; - /*ȡ·Ϣ*/ - chRouteState = GetLogicalRouteState(logRouteId);/*߼·״̬*/ - wStartSignalId = GetLogicalRouteRelateBeginSigId(logRouteId);/*·ʼźŻ*/ - if (0U != wStartSignalId) + /*ȡ߼·߼*/ + routeLogNum = GetLogicalRouteInLogSecSum(logRouteId); + routeLogSecId = GetLogicalRouteInLogSecId(logRouteId);/*߼ID*/ + if ((0u < routeLogNum) + && (MAX_ROUTE_IN_LT_NUM > routeLogNum)) { - /*ʼźŻ*/ - chStartSignalCurColor = GetSignalCurColor(wStartSignalId); - chOpenCloseState = GetSignalOpenCloseState(chStartSignalCurColor);/*ʼźŻ״̬*/ - } - else - { - ; /**/ - } - chRouteRepeatOpenFlag = GetLogicalRouteRecoverOpenState(logRouteId);/*ؿ־*/ - - if ((0U != wStartSignalId)&&(SIGNAL_OPEN == chOpenCloseState)) - {/*ʼźŻҿ򲻽*/ - - } - /*ʼźŻرջûʼźŻ*/ - else if ((ROUTE_REPEATOPEN_SET_YES != chRouteRepeatOpenFlag) - && (ROUTE_LOGICAL_STATE_UNLOCKWAIT == chRouteState)) /*״̬ж*/ - { - /*ȡ߼·߼*/ - routeLogNum = GetLogicalRouteInLogSecSum(logRouteId); - routeLogSecId= GetLogicalRouteInLogSecId(logRouteId);/*߼ID*/ - if ((0u < routeLogNum) - && (MAX_ROUTE_IN_LT_NUM > routeLogNum)) + /*ÿڻȡһû߼*/ + for (ii = 0U; ii < routeLogNum; ii++) { - /*ȡղ Ԥ*/ - /*ÿڻȡһû߼*/ - for (ii = 0U; ii < routeLogNum; ii++) + wPreUnlockLgcSecId = wUnlockLgcSecId;/*һ߼ID*/ + wUnlockLgcSecId = routeLogSecId[ii];/*ȡǰ߼ID*/ + /*ij߼ζԸ߼·Ľ*/ + /*ÿڼһյ߼*/ + checkFlag = CheckLogRouteIdBelLogSec(wUnlockLgcSecId, logRouteId); /*жϴ߼Ƿ񱻱߼·*/ + if (CI_SUCCESS == checkFlag) { - - wPreUnlockLgcSecId = wUnlockLgcSecId;/*һ߼ID*/ - wUnlockLgcSecId = routeLogSecId[ii];/*ȡǰ߼ID*/ - /*ij߼ζԸ߼·Ľ*/ - /*ÿڼһյ߼*/ - checkFlag = CheckLogRouteIdBelLogSec(wUnlockLgcSecId, logRouteId); /*жϴ߼Ƿ񱻱߼·*/ - if (CI_SUCCESS == checkFlag) + chLgcLockState = GetLogSecLogLockState(wUnlockLgcSecId); + if ((LOG_SECTION_LOGLOCK_EXCEPT == chLgcLockState)) { - chLgcLockState = GetLogSecLogLockState(wUnlockLgcSecId); - if ((LOG_SECTION_LOGLOCK_EXCEPT == chLgcLockState)) + break; /*״̬*/ + } + if (LOG_SECTION_LOGLOCK_NORMAL == chLgcLockState) + { + checkFlag = CheckLogRouteLgcSecResUnlock(wUnlockLgcSecId, wPreUnlockLgcSecId, logRouteId); + if (CI_SUCCESS == checkFlag) { - break; /*״̬*/ - } - if (LOG_SECTION_LOGLOCK_NORMAL == chLgcLockState) - { - checkFlag = CheckLogRouteLgcSecResUnlock(wUnlockLgcSecId, wPreUnlockLgcSecId, logRouteId); - if (CI_SUCCESS == checkFlag) - { - LgcSecLogicalUnlockProc(logRouteId, wUnlockLgcSecId, wPreUnlockLgcSecId); /*ӵǰ߼ɾ߼·߼߼·--*/ - } - else - { - break; /*ڲ*/ - } + LgcSecLogicalUnlockProc(logRouteId, wUnlockLgcSecId, wPreUnlockLgcSecId); /*ӵǰ߼ɾ߼·߼߼·--*/ } else { - ; /**/ + break; /*ڲ*/ } } else { - /*DZ߼·յ߼Σִн*/ + ; /**/ } - } - /*ij·߼ȫ*/ - checkFlag = LogRouteLogSecReleaseCheck(logRouteId); - if (CI_SUCCESS == checkFlag) - { - /*ȫ*/ - SetLogRouteProSwLockState(logRouteId, SWITCH_LOCK_PROTECT_CANCEL); - /*ÿ*/ - (void)SetLogicalRouteState(logRouteId, ROUTE_LOGICAL_STATE_IDLE); } else { - ;/* ʱ״̬*/ + /*DZ߼·յ߼Σִн*/ } } + /*ij·߼ȫ*/ + checkFlag = LogRouteLogSecReleaseCheck(logRouteId); + if (CI_SUCCESS == checkFlag) + { + /*ȫ*/ + SetLogRouteProSwLockState(logRouteId, SWITCH_LOCK_PROTECT_CANCEL); + /*ÿ*/ + (void)SetLogicalRouteState(logRouteId, ROUTE_LOGICAL_STATE_IDLE); + } else { - ; /**/ + ;/* ʱ״̬*/ } } - else /*ֻͷԴ*/ + else { ; /**/ } @@ -2522,11 +2499,16 @@ void LogRouteOpenManage(const UINT16 wLogRouteId) /*߼·״̬Ϊȴ*/ SetLogRouteStateManage(wLogRouteId, ROUTE_LOGICAL_STATE_UNLOCKWAIT); + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } else { /*ʧ,߼·״̬Ϊ߼쳣*/ SetLogRouteStateManage(wLogRouteId, ROUTE_LOGICAL_STATE_LOCKERR); + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -2536,6 +2518,9 @@ void LogRouteOpenManage(const UINT16 wLogRouteId) /*źŻϹرձ*/ SetErrorData(funcId, CI_DEVICE_TYPE_SIGNAL, wSignalId, ETYPE_SIG_START_OPEN_STATE, sigState, ESEND_LEVEL_ATS); + + /*ֿڼź쳣رգöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } @@ -2726,6 +2711,7 @@ void LogRouteUnlockDelayManage(const UINT16 wLogicalRouteId) UINT8 chCheckTimeState = 0U; /*ʱ*/ UINT16 wFirstNormalLockLogId = 0U; /*߼·һյ߼ID*/ UINT16 wRelativePhySecId = 0U; /*߼ιID*/ + UINT8 chPhySecCurMergeState = 0U;/*εǰں״̬*/ /*ʱʱ临˽ʱ*/ dwDelayTotalCycSum = GetSystemParaBlocRouteDelayCyc(); /*ȡʽ·ʱ*/ @@ -2738,16 +2724,35 @@ void LogRouteUnlockDelayManage(const UINT16 wLogicalRouteId) wFirstNormalLockLogId = GetLogRouteFirNormalLockLogId(wLogicalRouteId); wRelativePhySecId = GetLgcSecRelativePhySecId(wFirstNormalLockLogId); - SetLogRouFirDelayErLockStaCyc(wLogicalRouteId,0U); - /*ڱ߼·յ߼߼쳣*/ - SetPhyIncLogSecLogLockState(wRelativePhySecId, LOG_SECTION_LOGLOCK_EXCEPT, wLogicalRouteId); - /*߼·ʽʱںΪ0*/ - SetLogSecLogRDelayErrLockCyc(wFirstNormalLockLogId,0U); + chPhySecCurMergeState = GetPhySecCurMergeState(wRelativePhySecId); + if (SECTION_OCCUPY_NO == chPhySecCurMergeState) + { + SetLogRouFirDelayErLockStaCyc(wLogicalRouteId, 0U); + /*ڱ߼·յ߼߼쳣*/ + SetPhyIncLogSecLogLockState(wRelativePhySecId, LOG_SECTION_LOGLOCK_EXCEPT, wLogicalRouteId); + /*߼·ʽʱںΪ0*/ + SetLogSecLogRDelayErrLockCyc(wFirstNormalLockLogId, 0U); + } + else + { + ; /*ռüȴ*/ + } } else { ; /*ʱ䲻ȴ*/ } + + dwDelayStartCycNum = GetLogRouteDelayErrLockStartCyc(wLogicalRouteId); /*ȡ߼·Ͻʼ*/ + if (0U == dwDelayStartCycNum) + { + /*߼·Ѿйʽ⣬һռãʽʱ޷ݣʹ߼·״̬ʱ쳣*/ + LogRouteExpLockContinue(wLogicalRouteId); + } + else + { + ; + } } /* @@ -4390,4 +4395,57 @@ UINT8 LogSecLockInLogRouteProcess(const UINT16 wLogRouteId,const UINT16 wLogSecI } return funcRet; +} + +/* +* ҵ߼·ڵһ߼յ߼ +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ = 0 Ч +* > 0 ߼ID +* by cgh 20250529 +*/ +UINT16 GetLogRouteFirLogLockLogId(const UINT16 wLogRouteId) +{ + UINT16 wLogRouteLogSecNum = 0U;/*߼·߼*/ + UINT16* pLogRouteLogSecIdBuf = NULL;/*߼·߼ID*/ + UINT16 ii = 0U; + UINT16 wReVal = CI_ERROR; + UINT8 chCheckFlag = 0U;/*־*/ + UINT8 chLogSecLogLockSta = 0U;/*߼߼״̬*/ + + if (ROUTE_LOGICAL_SUM_MAX > wLogRouteId) + { + /*ȡ߼·߼*/ + wLogRouteLogSecNum = GetLogicalRouteInLogSecSum(wLogRouteId); + pLogRouteLogSecIdBuf = GetLogicalRouteInLogSecId(wLogRouteId); + + if (NULL != pLogRouteLogSecIdBuf) + { + for (ii = 0U; ii < wLogRouteLogSecNum; ii++) + { + chCheckFlag = CheckLogSecLockBelLogRoute(pLogRouteLogSecIdBuf[ii], wLogRouteId); + if (CI_SUCCESS == chCheckFlag) + { + wReVal = pLogRouteLogSecIdBuf[ii]; + break; + } + else + { + ;/*һ*/ + } + } + } + else + { + ; /*ִ*/ + } + } + else + { + ; /*ִ*/ + } + + + return wReVal; + } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h index 8addcd1..2ccb251 100644 --- a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h +++ b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h @@ -792,6 +792,15 @@ void ErrLockFaultUnLockLogRoute(const UINT16 wLogSecId, const UINT16 wLogRouteId */ UINT8 LogSecLockInLogRouteProcess(const UINT16 wLogRouteId, const UINT16 wLogSecId); +/* +* ҵ߼·ڵһ߼յ߼ +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ = 0 Ч +* > 0 ߼ID +* by cgh 20250529 +*/ +UINT16 GetLogRouteFirLogLockLogId(const UINT16 wLogRouteId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c index 92d85ee..020cebd 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c @@ -2314,6 +2314,31 @@ UINT16 GetRouteDCQJId(const UINT16 routeId) return retVal; } +/* +* ȡָID·̵2ID +* ˵ const UINT16 routeId, ·ID +* ֵ >0: ̵2ID +* 0: û +* by cgh 20250603 +*/ +UINT16 GetRouteDCQJTwoId(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT16 retVal = 0u; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + retVal = RouteConfigDataStru[bufIndex].DCRouteDCQJTwoId; + } + else + { + retVal = 0U; + } + return retVal; +} + /* * ȡָID·״̬/쳣/Ԥʱ * ˵ const UINT16 routeId, ·ID @@ -3117,81 +3142,6 @@ UINT16* GetMainRouteBuff(const UINT16 subrouteId) return retVal; } -/* -* ȡָID·CBTCղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcThisZhaoChaRelayId(const UINT16 routeId) -{ - UINT16 bufIndex = 0u; /*±*/ - UINT16 retVal = CI_ERROR; - - bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ - - if (bufIndex < ROUTE_SUM_MAX) - { - retVal = RouteConfigDataStru[bufIndex].wCbtcThisZhaoChaRelayId; - } - else - { - retVal = CI_ERROR; - } - return retVal; -} - -/* -* ȡָID·CBTCԶղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcThatZhaoChaRelayId(const UINT16 routeId) -{ - UINT16 bufIndex = 0u; /*±*/ - UINT16 retVal = CI_ERROR; - - bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ - - if (bufIndex < ROUTE_SUM_MAX) - { - retVal = RouteConfigDataStru[bufIndex].wCbtcThatZhaoChaRelayId; - } - else - { - retVal = CI_ERROR; - } - return retVal; -} - -/* -* ȡָID·CBTCȡղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcCancelZhaochaRelay(const UINT16 routeId) -{ - UINT16 bufIndex = 0u; /*±*/ - UINT16 retVal = CI_ERROR; - - bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ - - if (bufIndex < ROUTE_SUM_MAX) - { - retVal = RouteConfigDataStru[bufIndex].wCbtccancelZhaochaRelayId; - } - else - { - retVal = CI_ERROR; - } - return retVal; -} - /* * ȡָID·ⱨźſʱ־ * ˵ const UINT16 routeId ·ID diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h index e2e4598..3f413e7 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h @@ -199,9 +199,6 @@ typedef struct S_RouteConfigDataStruct UINT16 ThisZhaoChaRelayId; /*ղ̵ID (ֶ)*/ UINT16 ThatZhaoChaRelayId; /*Զղ̵ID (ֶ)*/ UINT16 cancelZhaochaRelayId; /* ȡղ̵ID(ֶ) ̵ */ - UINT16 wCbtcThisZhaoChaRelayId; /*ղ̵ID (ֶ)*/ - UINT16 wCbtcThatZhaoChaRelayId; /*Զղ̵ID (ֶ)*/ - UINT16 wCbtccancelZhaochaRelayId; /* ȡղ̵ID(ֶ) ̵ */ UINT8 RouteInitFSStatus; /*·ʼ״̬*/ UINT8 RouteFSSignalSum; /*·طźŻĿ (ֶ)*/ @@ -250,6 +247,7 @@ typedef struct S_RouteConfigDataStruct RouteTriggerLogicSectionStruct CbtcTriggerLogSecStru[1]; /*CBTC·߼νṹ (ֶ)Ԥ*/ UINT16 DCRouteDCQJId;/*·̵ID*/ + UINT16 DCRouteDCQJTwoId;/*·̵2ID*/ UINT16 DCRouteTAJId;/*·ͬⰴť̵ID*/ UINT8 RouteNeedDelayUnlock; /* ·״̬/쳣/Ԥգȡ˽ҪʱֶΣ*/ @@ -987,6 +985,15 @@ UINT8 GetRouteInitFSStatus(const UINT16 routeId); */ UINT16 GetRouteDCQJId(const UINT16 routeId); +/* +* ȡָID·̵2ID +* ˵ const UINT16 routeId, ·ID +* ֵ >0: ̵2ID +* 0: û +* by cgh 20250603 +*/ +UINT16 GetRouteDCQJTwoId(const UINT16 routeId); + /* * ȡָID·ͬⰴť̵ID * ˵ const UINT16 routeId, ·ID @@ -1245,33 +1252,6 @@ UINT8 GetMainRouteSum(const UINT16 subrouteId); */ UINT16* GetMainRouteBuff(const UINT16 subrouteId); -/* -* ȡָID·CBTCղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcThisZhaoChaRelayId(const UINT16 routeId); - -/* -* ȡָID·CBTCԶղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcThatZhaoChaRelayId(const UINT16 routeId); - -/* -* ȡָID·CBTCȡղ̵ID -* ˵ const UINT16 routeId, ·ID -* ֵ 0: ȡʧ -* >0: ղ̵ID -* by cgh 20230728 ֺ󱸼CBTCղ -*/ -UINT16 GetRouteCbtcCancelZhaochaRelay(const UINT16 routeId); - /* * ȡָID·ⱨźſʱ־ * ˵ const UINT16 routeId ·ID diff --git a/TSCP/src/APP/ciapp/Route/RouteDataManage.c b/TSCP/src/APP/ciapp/Route/RouteDataManage.c index a11d4a7..43ad57e 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteDataManage.c @@ -2449,14 +2449,13 @@ void SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(const UINT16 routeId, const /* * ָ·ĵ״̬ * ˵ const UINT16 routeId, ·ID -* const UINT32 dcqState, ״̬ -* ֵ 0: ʧ -* 1: ݳɹ +* const UINT8 dcqState, ״̬ +* ֵ +* by cgh 20250523 */ -UINT8 SetRouteDCQState(const UINT16 routeId, const UINT8 dcqState) +void SetRouteDCQState(const UINT16 routeId, const UINT8 dcqState) { UINT16 bufIndex = 0u; /*±*/ - UINT8 retVal = CI_ERROR; bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ @@ -2465,19 +2464,16 @@ UINT8 SetRouteDCQState(const UINT16 routeId, const UINT8 dcqState) if ((ROUTE_DCQ_REQUEST == dcqState) || (ROUTE_DCQ_NOT_REQUEST == dcqState) ) { RouteDataStru[bufIndex].DCQState = dcqState; - - retVal = CI_SUCCESS; } else { - retVal = CI_ERROR; + ; } } else { - retVal = CI_ERROR; + ; } - return retVal; } /* @@ -2507,14 +2503,13 @@ UINT8 GetRouteDCQState(const UINT16 routeId) /* * ָ·ĵͬ״̬ * ˵ const UINT16 routeId, ·ID -* const UINT32 dcTyState, ״̬ -* ֵ 0: ʧ -* 1: ݳɹ +* const UINT8 dcTyState, ״̬ +* ֵ +* by cgh 20250523 */ -UINT8 SetRouteDCTYState(const UINT16 routeId, const UINT8 dcTyState) +void SetRouteDCTYState(const UINT16 routeId, const UINT8 dcTyState) { UINT16 bufIndex = 0u; /*±*/ - UINT8 retVal = CI_ERROR; bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ @@ -2523,19 +2518,16 @@ UINT8 SetRouteDCTYState(const UINT16 routeId, const UINT8 dcTyState) if ((ROUTE_DCT_AGREE == dcTyState) || (ROUTE_DCT_NOT_AGREE == dcTyState) ) { RouteDataStru[bufIndex].DCTYState = dcTyState; - - retVal = CI_SUCCESS; } else { - retVal = CI_ERROR; + ; } } else { - retVal = CI_ERROR; + ; } - return retVal; } /* @@ -5130,7 +5122,7 @@ UINT8 GetRouteNearSecFitSwIndex(const UINT16 routeId,const UINT8 nearSecIndex) } /* -* ɾ·ڱгԴ +* ɾ·гԴ * ˵ const UINT16 routeId, ·ID * const UINT16 trainId, гID * ֵ @@ -5139,23 +5131,16 @@ void RemoveRouteInCiRes(const UINT16 routeId,const UINT16 trainId) { UINT16 bufIndex = 0u; /*±*/ UINT8 jj = 0U; - UINT8 localCiId = 0U; - UINT8 logBelongCiId = 0U; UINT16 wRouteInLgcSecSum = 0U; UINT16 *pRouteInLgcSecBuf = NULL; wRouteInLgcSecSum = GetRouteLogSectionSum(routeId); pRouteInLgcSecBuf = GetRouteLogSectionIdBuf(routeId); - localCiId = GetSystemParaLocalCiId(); if (0U != wRouteInLgcSecSum) { for (jj = 0U; jj < wRouteInLgcSecSum; jj++) { - logBelongCiId = GetLogSecBelongCiId(pRouteInLgcSecBuf[jj]); - if ((logBelongCiId == localCiId) && (0U != localCiId)) - { - RemoveLogSecTrainInfoById(pRouteInLgcSecBuf[jj], trainId); - } + RemoveLogSecTrainInfoById(pRouteInLgcSecBuf[jj], trainId); } } } @@ -5711,6 +5696,15 @@ 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 { @@ -5746,4 +5740,216 @@ UINT8 GetRouteApplySwitchCheckFlag(const UINT16 routeId) } return reVal; +} + +/* +* ָ·ĵͬⰴť״̬ +* ˵ const UINT16 routeId, ·ID +* const UINT8 chDcAgreeButtonErrState, ͬⰴť״̬ +* ֵ +* by cgh 20250523 +*/ +void SetRouteDcAgreeButtonErrState(const UINT16 routeId, const UINT8 chDcAgreeButtonErrState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + if ((ROUTE_DC_AGREE_BUTTON_ERR == chDcAgreeButtonErrState) || (ROUTE_DC_AGREE_BUTTON_OK == chDcAgreeButtonErrState)) + { + RouteDataStru[bufIndex].chDcAgreeButtonErrState = chDcAgreeButtonErrState; + + } + else + { + ; + } + } + else + { + ; + } +} + +/* +* ȡָ·ĵͬⰴť״̬ +* ˵ const UINT16 routeId, ·ID +* ֵ ͬⰴť״̬ +* by cgh 20250523 +*/ +UINT8 GetRouteDcAgreeButtonErrState(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = ROUTE_DC_AGREE_BUTTON_ERR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + retVal = RouteDataStru[bufIndex].chDcAgreeButtonErrState; + } + else + { + ; + } + return retVal; +} + +/* +* ָ·ĵͬⰴťʼ +* ˵ const UINT16 routeId, ·ID +* const UINT32 dwDcAgreeBtnPressCycNum, ͬⰴťʼ +* ֵ +* by cgh 20250523 +*/ +void SetRouteDcAgreeBtnPressCycNum(const UINT16 routeId, const UINT32 dwDcAgreeBtnPressCycNum) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + RouteDataStru[bufIndex].dwDcAgreeBtnPressCycNum = dwDcAgreeBtnPressCycNum; + } + else + { + ; + } +} + +/* +* ȡָ·ĵͬⰴťʼ +* ˵ const UINT16 routeId, ·ID +* ֵ ͬⰴťʼ +* by cgh 20250523 +*/ +UINT32 GetRouteDcAgreeBtnPressCycNum(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT32 retVal = 0U; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + retVal = RouteDataStru[bufIndex].dwDcAgreeBtnPressCycNum; + } + else + { + ; + } + return retVal; +} + +/* +* ָ·ת·־ +* ˵UINT16 routeId õĽ·ID +* UINT8 setFlag ñ־ +* ֵ +* Created By LQ 2025.08.04 +*/ +void SetRouteToLeadFlag(UINT16 routeId, UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + if ((ROUTE_TO_LEAD_FLAG_NO == setFlag) || (ROUTE_TO_LEAD_FLAG_YES == setFlag)) + { + RouteDataStru[bufIndex].cRouteToLeadFlag = setFlag; + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } +} + +/* +* ȡָ·ת·־ +* ˵const UINT16 routeId ·ID +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.08.04 +*/ +UINT8 GetRouteToLeadFlag(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = ROUTE_TO_LEAD_FLAG_NO; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + reVal = RouteDataStru[bufIndex].cRouteToLeadFlag; + } + else + { + ; /**/ + } + + return reVal; +} + +/* +* ָ·ڿ¼ +* ˵UINT16 routeId õĽ·ID +* UINT16 devID 豸ID UINT8 devType 豸ͣUINT8 devState 豸״̬ UINT8 errorType +* ֵ +* by fan 20250922 +*/ +void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devType, UINT8 devState, UINT8 errorType) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + RouteDataStru[bufIndex].OtherCiRecordDevID = devID; + RouteDataStru[bufIndex].OtherCiRecordDevState = devState; + RouteDataStru[bufIndex].OtherCiRecordDevType = devType; + RouteDataStru[bufIndex].OtherCiRecordErrorType = errorType; + } + else + { + ; /**/ + } +} + +/* +* ȡָ·ڿ¼ +* ˵UINT16 routeId ·ID +* ֵUINT16 豸ID +* UINT8 *devType豸, UINT8* devState豸״̬UINT8* errorType +* by fan 20250922 +*/ +UINT16 GetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT8 *devType, UINT8* devState, UINT8* errorType) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 rtnDevId = 0U; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + rtnDevId = RouteDataStru[bufIndex].OtherCiRecordDevID; + *devType = RouteDataStru[bufIndex].OtherCiRecordDevType; + *devState = RouteDataStru[bufIndex].OtherCiRecordDevState; + *errorType = RouteDataStru[bufIndex].OtherCiRecordErrorType; + } + else + { + ; /**/ + } + return rtnDevId; } \ 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 1ae84d4..2d52fa6 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteDataManage.h @@ -84,7 +84,8 @@ typedef struct S_RouteDataStruct UINT32 NeedOpenNotTrueRepeatStartCount; /*迪Ųʱؿʼ*/ UINT8 DCQState; /*״̬*/ UINT8 DCTYState; /*ͬ״̬*/ - + UINT32 dwDcAgreeBtnPressCycNum; /*ͬⰴťʼ*/ + UINT8 chDcAgreeButtonErrState; /*ͬⰴť״̬*/ UINT8 DCTYNotSatisfySignalReOpenFlag; /*ͬⲻ-źؿ־*/ UINT32 DCTYNotSatisfyStartCount; /*ͬⲻ-ʼ*/ UINT8 CancleDelayflag; /*ȡ·ʱ־*/ @@ -123,6 +124,11 @@ typedef struct S_RouteDataStruct UINT8 cRouteDrivedSGBJFlag; /*·ⱨ־0x55 δ0xAA */ UINT8 chRouteNearSecSearchState; /*·ӽ״̬*/ UINT8 chRouteApplySwitchCheckFlag; /*·ڿ־*/ + UINT16 OtherCiRecordDevID; /*ʧ豸ID*/ + UINT8 OtherCiRecordDevType; /*ʧ豸*/ + UINT8 OtherCiRecordDevState; /*ʧ豸״̬*/ + UINT8 OtherCiRecordErrorType; /*ʧܱ*/ + UINT8 cRouteToLeadFlag; /*ͨ·ת·־0x55-Ч0xAA-Чӡ־*/ } RouteDataStruct; @@ -799,11 +805,11 @@ void SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(const UINT16 routeId, const /* * ָ·ĵ״̬ * ˵ const UINT16 routeId, ·ID -* const UINT32 dcqState, ״̬ -* ֵ 0: ʧ -* 1: ݳɹ +* const UINT8 dcqState, ״̬ +* ֵ +* by cgh 20250523 */ -UINT8 SetRouteDCQState(const UINT16 routeId, const UINT8 dcqState); +void SetRouteDCQState(const UINT16 routeId, const UINT8 dcqState); /* * ȡָ·ĵ״̬ @@ -816,11 +822,11 @@ UINT8 GetRouteDCQState(const UINT16 routeId); /* * ָ·ĵͬ״̬ * ˵ const UINT16 routeId, ·ID -* const UINT32 dcTyState, ״̬ -* ֵ 0: ʧ -* 1: ݳɹ +* const UINT8 dcTyState, ״̬ +* ֵ +* by cgh 20250523 */ -UINT8 SetRouteDCTYState(const UINT16 routeId, const UINT8 dcTyState); +void SetRouteDCTYState(const UINT16 routeId, const UINT8 dcTyState); /* * ȡָ·ĵͬ״̬ @@ -1635,6 +1641,77 @@ void SetRouteApplySwitchCheckFlag(UINT16 routeId, UINT8 setFlag); */ UINT8 GetRouteApplySwitchCheckFlag(const UINT16 routeId); +/* +* ָ·ĵͬⰴť״̬ +* ˵ const UINT16 routeId, ·ID +* const UINT8 chDcAgreeButtonErrState, ͬⰴť״̬ +* ֵ +* by cgh 20250523 +*/ +void SetRouteDcAgreeButtonErrState(const UINT16 routeId, const UINT8 chDcAgreeButtonErrState); + +/* +* ȡָ·ĵͬⰴť״̬ +* ˵ const UINT16 routeId, ·ID +* ֵ ͬⰴť״̬ +* by cgh 20250523 +*/ +UINT8 GetRouteDcAgreeButtonErrState(const UINT16 routeId); + +/* +* ָ·ĵͬⰴťʼ +* ˵ const UINT16 routeId, ·ID +* const UINT32 dwDcAgreeBtnPressCycNum, ͬⰴťʼ +* ֵ +* by cgh 20250523 +*/ +void SetRouteDcAgreeBtnPressCycNum(const UINT16 routeId, const UINT32 dwDcAgreeBtnPressCycNum); + +/* +* ȡָ·ĵͬⰴťʼ +* ˵ const UINT16 routeId, ·ID +* ֵ ͬⰴťʼ +* by cgh 20250523 +*/ +UINT32 GetRouteDcAgreeBtnPressCycNum(const UINT16 routeId); + +/* +* ָ·ת·־ +* ˵UINT16 routeId õĽ·ID +* UINT8 setFlag ñ־ +* ֵ +* Created By LQ 2025.08.04 +*/ +void SetRouteToLeadFlag(UINT16 routeId, UINT8 setFlag); + +/* +* ȡָ·ת·־ +* ˵const UINT16 routeId ·ID +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.08.04 +*/ +UINT8 GetRouteToLeadFlag(const UINT16 routeId); + +/* +* ָ·ڿ¼ +* ˵UINT16 routeId õĽ·ID +* UINT16 devID 豸ID UINT8 devType 豸ͣUINT8 devState 豸״̬,UINT8 errorType +* ֵ +* by fan 20250922 +*/ +void SetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT16 devID, UINT8 devType, UINT8 devState, UINT8 errorType); + +/* +* ȡָ·ڿ¼ +* ˵UINT16 routeId ·ID +* ֵUINT16 豸ID +* UINT8 *devType豸, UINT8* devState豸״̬UINT8* errorType +* by fan 20250922 +*/ +UINT16 GetRouteApplySwitchCheckErrorData(UINT16 routeId, UINT8 *devType, UINT8* devState, UINT8* errorType); + + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteDefine.h b/TSCP/src/APP/ciapp/Route/RouteDefine.h index 26883bb..16e7a42 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDefine.h +++ b/TSCP/src/APP/ciapp/Route/RouteDefine.h @@ -46,7 +46,7 @@ #define ROUTE_ESB_SUM_MAX ((UINT16)4) /*վ̨ͣťֵ*/ #define ROUTE_PSD_SUM_MAX ((UINT16)4) /*վֵ̨*/ #define ROUTE_THATZC_PHYSEC_SUM_MAX ((UINT16)4) /*Զղֵ*/ -#define ROUTE_OPPOSED_ROUTE_SUM_MAX ((UINT16)540) /*ִ·ֵ*/ +#define ROUTE_OPPOSED_ROUTE_SUM_MAX ((UINT8)255) /*ִ·ֵ*/ #define ROUTE_SIGNAL_OPPOSED_ROUTE_SUM_MAX ((UINT16)100) /*Ա·ʼźŻΪնźŻ۷·Ŀ*/ #define ROUTE_FLOOD_GATE_SUM_MAX ((UINT16)2) /* ·Ÿ */ #define ROUTE_OHTER_CHECK_SUM_MAX ((UINT16)10) /* · */ @@ -290,6 +290,9 @@ #define ROUTE_DCT_AGREE ((UINT8)0xaa) /*ͬ*/ #define ROUTE_DCT_NOT_AGREE ((UINT8)0x55) /*޵ͬ*/ +#define ROUTE_DC_AGREE_BUTTON_ERR ((UINT8)0xaa) /*ͬⰴť*/ +#define ROUTE_DC_AGREE_BUTTON_OK ((UINT8)0x55) /*ͬⰴťδ*/ + #define ROUTE_DCTY_REOPEN ((UINT8)0xaa) /*ͬؿ*/ #define ROUTE_DCTY_REOPEN_NO ((UINT8)0x55) /*ͬⲻؿ*/ @@ -340,6 +343,7 @@ #define ROUTE_SUB_INCLUDE_SUM_MAX ((UINT16)10) /*·ӽ·Ŀֵ*/ #define ROUTE_MAIN_BELONG_SUM_MAX ((UINT16)10) /*ӽ··Ŀֵ*/ +#define ROUTE_MAYBE_BELONG_SUM_MAX ((UINT16)100) /*ӽ··ֵ*/ #define ROUTE_TRAIN_LOC_MAX_LGC_SUM ((UINT16)10) /*г߼*/ @@ -379,5 +383,8 @@ #define ROUTE_APPLY_SWITCH_CHECK_YES ((UINT8)0xaa) /*·־_ͨ*/ #define ROUTE_APPLY_SWITCH_CHECK_DEF ((UINT8)0xFF) /*·־_Ĭ*/ +#define ROUTE_TO_LEAD_FLAG_NO ((UINT8)0x55) /*ͨ·ת·־Ч*/ +#define ROUTE_TO_LEAD_FLAG_YES ((UINT8)0xaa) /*ͨ·ת·־Ч*/ + #endif diff --git a/TSCP/src/APP/ciapp/SPKS/SpksDataManage.c b/TSCP/src/APP/ciapp/SPKS/SpksDataManage.c index 5228bb3..0b7425e 100644 --- a/TSCP/src/APP/ciapp/SPKS/SpksDataManage.c +++ b/TSCP/src/APP/ciapp/SPKS/SpksDataManage.c @@ -144,12 +144,12 @@ void SetSpksCutState(const UINT16 spksId, const UINT8 spksCutState) UINT8 SpksDataManageInit(void) { UINT8 ret = CI_ERROR; - UINT16 tmpSpksSum = 0u; - UINT16 ii = 0u; - UINT16 spksId = 0u; + UINT16 tmpSpksSum = 0U; + UINT16 ii = 0U; + UINT16 spksId = 0U; tmpSpksSum = GetTotalSpksCurNum();/*͸ԼSPKSĿ,ڵSPKS_SUM_MAX0*/ - for (ii = 0u; ii < tmpSpksSum; ii++) + for (ii = 0U; ii < tmpSpksSum; ii++) { spksId = GetSpksIdByIndex(ii); spksDataBuff[spksId].spksId = spksId; /*spks ID*/ @@ -162,8 +162,9 @@ UINT8 SpksDataManageInit(void) spksDataBuff[spksId].status = SPKS_STATUS_YES; } spksDataBuff[spksId].cutStatus = SPKS_CUT_NO; /*spks·δ*/ - spksDataBuff[spksId].flockStartNum = 0u; + spksDataBuff[spksId].flockStartNum = 0U; spksDataBuff[spksId].TotalSpksDriveOutDis = TOTALSPKSDRIVE_INVALID;/*Ч*/ + spksDataBuff[spksId].dwSpksBtnPressCycNum = 0U; } ret = CI_SUCCESS; @@ -267,4 +268,52 @@ UINT8 GetDriveOutDisFlag(const UINT16 spksId) /**/ } return ret; +} + +/* +* ȡSPKSťʼ +* ˵const UINT16 spksId SPKS +* ֵSPKSťʼ +* Created By LQ 2025.06.26 +*/ +UINT32 GetSpksPressCycNum(const UINT16 spksId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 dwRetVal = 0U; + + bufIndex = GetSpksConfigBufIndex(spksId); /*ȡ±*/ + + if (bufIndex < SPKS_SUM_MAX) + { + dwRetVal = spksDataBuff[bufIndex].dwSpksBtnPressCycNum; + } + else + { + /**/ + } + + return dwRetVal; +} + +/* +* SPKSťʼ +* ˵const UINT16 spksId SPKS +* const UINT32 dwCycNum ں +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetSpksPressCycNum(const UINT16 spksId, const UINT32 dwCycNum) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetSpksConfigBufIndex(spksId); /*ȡ±*/ + + if (bufIndex < SPKS_SUM_MAX) + { + spksDataBuff[bufIndex].dwSpksBtnPressCycNum = dwCycNum; + } + else + { + /**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/SPKS/SpksDataManage.h b/TSCP/src/APP/ciapp/SPKS/SpksDataManage.h index af743dc..49efdde 100644 --- a/TSCP/src/APP/ciapp/SPKS/SpksDataManage.h +++ b/TSCP/src/APP/ciapp/SPKS/SpksDataManage.h @@ -23,6 +23,7 @@ typedef struct UINT8 cutStatus; /* spks·״̬ */ UINT32 flockStartNum; /*ʼ*/ UINT8 TotalSpksDriveOutDis; /*SKPKSSPKSָʾƱ־*/ + UINT32 dwSpksBtnPressCycNum; /*SPKSťʼں*/ } SpksDataStruct; extern SpksDataStruct spksDataBuff[SPKS_SUM_MAX]; /* */ @@ -113,6 +114,23 @@ extern "C" { */ UINT8 GetDriveOutDisFlag(const UINT16 spksId); +/* +* ȡSPKSťʼ +* ˵const UINT16 spksId SPKS +* ֵSPKSťʼ +* Created By LQ 2025.06.26 +*/ +UINT32 GetSpksPressCycNum(const UINT16 spksId); + +/* +* SPKSťʼ +* ˵const UINT16 spksId SPKS +* const UINT32 dwCycNum ں +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetSpksPressCycNum(const UINT16 spksId, const UINT32 dwCycNum); + #ifdef __cplusplus }; #endif diff --git a/TSCP/src/APP/ciapp/SPKS/SpksDefine.h b/TSCP/src/APP/ciapp/SPKS/SpksDefine.h index 9b53341..ceecbf1 100644 --- a/TSCP/src/APP/ciapp/SPKS/SpksDefine.h +++ b/TSCP/src/APP/ciapp/SPKS/SpksDefine.h @@ -17,7 +17,7 @@ /* SPKSֵ */ #define SPKS_SUM_MAX ((UINT16)500) /* SPKSֵ */ -#define SPKS_MAX_SEC_NUM ((UINT16)100) /* SPKSťӦ */ +#define SPKS_MAX_SEC_NUM ((UINT16)150) /* SPKSťӦ */ #define MJ_MAX_SPKSNUM ((UINT16)15) /* һŽɹSPKS */ #define SPKS_MAX_MJNUM ((UINT16)15) /* һSPKSɹŽ */ #define MJ_SUM_MAX ((UINT16)500) /* Ž̵ֵ */ diff --git a/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.c b/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.c index 9b09620..cbf9f51 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.c @@ -1123,5 +1123,31 @@ UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId) retVal = CI_ERROR; } + return retVal; +} + +/* +* ȡָIDεCBTC +* ˵const UINT16 axisSectionId ID +* ֵ0x55 CBTC +* 0xAA CBTC +* Created By LQ 2025.08.05 +*/ +UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = AXIS_SEC_CBTC_PROPERTY_NO; + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (bufIndex < AXIS_SECTION_SUM_MAX) + { + retVal = AxisSectionConfigDataStru[bufIndex].cAcCbtcAttr; + } + else + { + /**/ + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.h b/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.h index 19bc44f..7511d5e 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/AxisSectionConfigDataManage.h @@ -52,6 +52,7 @@ typedef struct S_AxisSectionConfigDataStruct UINT8 cBorderAttr; /*߽*/ UINT8 chAxisLinXian; /*-ǷΪ·-ӵͼLink*/ UINT32 dwAxisTotalLen; /*linkܳ*/ + UINT8 cAcCbtcAttr; /*CBTCԣ0x55-CBTCԣ0xaa-CBTC*/ } AxisSectionConfigDataStruct; extern AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*ݽṹ,cgh-ϲCID-2539-1˴гʼͳһŵInitAllStaticDataStrнгʼΪں˹*/ @@ -311,6 +312,15 @@ UINT32 GetAxisSecTotalLen(const UINT16 axisSectionId); */ UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId); +/* +* ȡָIDεCBTC +* ˵const UINT16 axisSectionId ID +* ֵ0x55 CBTC +* 0xAA CBTC +* Created By LQ 2025.08.05 +*/ +UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c index d102c02..7a82247 100644 --- a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c @@ -2033,7 +2033,7 @@ UINT8 GetAxisSeqFromLinkSeq(UINT16* linkId, UINT16 LinkNum, UINT16 *AxleSgmtId, UINT8 chLoopIndex = 0U; UINT16 szLoopLinkId[AXIS_INCLUDE_LINK_SUM_MAX] = { 0U }; AxisSwitchStruct szLoopSwitchInfo[AXIS_INCLUDE_SWITCH_SUM_MAX] = { 0U }; - + UINT8 cFuncSwitch = 0U; /*μ*/ if ((NULL == linkId) || (0U == LinkNum) || (NULL == AxleSgmtId) || (NULL == AxleSgmtNum) || (acNum >= maxSize)) @@ -2214,11 +2214,18 @@ UINT8 GetAxisSeqFromLinkSeq(UINT16* linkId, UINT16 LinkNum, UINT16 *AxleSgmtId, { /** ˷֧execValidһóɳɹ*/ execValid = CI_ERROR; - + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY); for (cycleAC = 0U; cycleAC < tmpSameLinkOfACCnt; cycleAC++) { /** Ҫ */ - chCheckStart = FLAG_UNSET; + if (FUNC_SWITCH_ON == cFuncSwitch) + { + chCheckStart = FLAG_UNSET; /*޸ȱYF0083-2106*/ + } + else + { + chCheckStart = FLAG_SET; + } /** ȡϵĵϢ*/ tmpSwCntInAC = GetAxisSwitchSum(tmpSameLinkOfACID[cycleAC]); @@ -4293,4 +4300,129 @@ UINT8 GetAgLinkExistRelCgFlag(const UINT16 wLinkId) } return chRtnValue; +} + +/* +* @brief ȡlink +* @param wLinkId +* @return 0 ߱ +* >0 +* by cgh 20250818 +*/ +UINT16 GetLinkSpecialEaAttr(const UINT16 wLinkId) +{ + UINT16 wRtnValue = 0U; + UINT16 wIndex = 0U; + + wIndex = GetLinkIndexById(wLinkId); + + if ((0U < wIndex) && (LINK_SUM_MAX > wIndex)) + { + wRtnValue = g_szLinkConfigData[wIndex].wLinkSpecialEa; + } + else + { + ; /*δ󣬷Ĭֵ*/ + } + + return wRtnValue; +} + +/* +* @brief ȡlinkͷǰ +* @param wLinkId +* @return 0 ʧ +* >0 ͷǰ +* by cgh 20250818 +*/ +UINT32 GetLinkSpecialEaFrontDis(const UINT16 wLinkId) +{ + UINT32 dwRtnValue = 0U; + UINT16 wIndex = 0U; + + wIndex = GetLinkIndexById(wLinkId); + + if ((0U < wIndex) && (LINK_SUM_MAX > wIndex)) + { + dwRtnValue = g_szLinkConfigData[wIndex].dwFrontDis; + } + else + { + ; /*δ󣬷Ĭֵ*/ + } + + return dwRtnValue; +} + +/* +* @brief ȡlinkβ +* @param wLinkId +* @return 0 ʧ +* >0 β +* by cgh 20250818 +*/ +UINT32 GetLinkSpecialEaBehindDis(const UINT16 wLinkId) +{ + UINT32 dwRtnValue = 0U; + UINT16 wIndex = 0U; + + wIndex = GetLinkIndexById(wLinkId); + + if ((0U < wIndex) && (LINK_SUM_MAX > wIndex)) + { + dwRtnValue = g_szLinkConfigData[wIndex].dwBehindDis; + } + else + { + ; /*δ󣬷Ĭֵ*/ + } + + return dwRtnValue; +} + +/** +* @brief ݲѯȡlinkʣƫ +* @param struct_PathPoint pPoint LINKϢ +* @param UINT8 chDir ѯ +* @return UINT32_MAX ȡʧ +* ȡֵ linkʣƫ +* by cgh 20250819 +*/ +UINT32 GetRelDirLinkOffset(struct_PathPoint pPoint, UINT8 chDir) +{ + UINT32 dwRtn = UINT32_MAX; + + if ((DIR_SAME == chDir) || (DIR_CONVERT == chDir)) + { + dwRtn = GetLinkLengthById(pPoint.wLinkId); + if (UINT32_MAX != dwRtn) + { + if (((0U == pPoint.dwOffset) && (DIR_SAME == chDir)) + || ((dwRtn == pPoint.dwOffset) && (DIR_CONVERT == chDir))) + { + ; /*LINK*/ + } + else + { + if (DIR_SAME == chDir) + { + dwRtn -= pPoint.dwOffset; + } + else + { + dwRtn = pPoint.dwOffset; + } + } + } + else + { + ; + } + } + else + { + ; /*ʧ*/ + } + + return dwRtn; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h index 0583327..65efb29 100644 --- a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.h @@ -88,6 +88,9 @@ typedef struct UINT8 chRelPhySecIsAGorBG; /*LinkΪAG/BG0x55 AG;0xAA BG;0xFF AGBG*/ UINT8 chExistRelCGFlag; /*LINKǷڹCG־*/ UINT16 wBGLinkRelAGLink; /*BGlinkAGlink*/ + UINT16 wLinkSpecialEa; /*LINK*/ + UINT32 dwFrontDis; /*LINKͷǰ*/ + UINT32 dwBehindDis; /*LINKβ*/ }LinkDataConfigStru; typedef struct @@ -728,6 +731,43 @@ UINT8 GetLinkTmlAxleSecOccSta(const UINT16 wLinkId); */ UINT8 GetAgLinkExistRelCgFlag(const UINT16 wLinkId); +/* +* @brief ȡlink +* @param wLinkId +* @return 0 ߱ +* >0 +* by cgh 20250818 +*/ +UINT16 GetLinkSpecialEaAttr(const UINT16 wLinkId); + +/* +* @brief ȡlinkͷǰ +* @param wLinkId +* @return 0 ʧ +* >0 ͷǰ +* by cgh 20250818 +*/ +UINT32 GetLinkSpecialEaFrontDis(const UINT16 wLinkId); + +/* +* @brief ȡlinkβ +* @param wLinkId +* @return 0 ʧ +* >0 β +* by cgh 20250818 +*/ +UINT32 GetLinkSpecialEaBehindDis(const UINT16 wLinkId); + +/** +* @brief ݲѯȡlinkʣƫ +* @param struct_PathPoint pPoint LINKϢ +* @param UINT8 chDir ѯ +* @return UINT32_MAX ȡʧ +* ȡֵ linkʣƫ +* by cgh 20250819 +*/ +UINT32 GetRelDirLinkOffset(struct_PathPoint pPoint, UINT8 chDir); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c index 5dbedea..0f5bed2 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c @@ -4967,14 +4967,15 @@ void SetLogSecLogLockState(const UINT16 wLogSectionId, const UINT8 chLogLockStat LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; } else if (LOG_SECTION_LOGLOCK_EXCEPT == chLogLockState) - { /**/ + { LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + + SetLogSecRelAllLogRouteState(wLogSectionId); } else { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + ; /*ɴ֧*/ } } else @@ -5730,4 +5731,43 @@ void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId) { /**/ } +} + +/* +* ߼ι߼·״̬ +* ˵ const UINT16 wLogSectionId, ߼ID +* ֵ VOID +* by cgh 20250416 +*/ +void SetLogSecRelAllLogRouteState(const UINT16 wLogSectionId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 ii = 0U; + UINT8 chLogSecLockBelLogRouteSum = 0U;/*߼߼·*/ + LogSecLockBelLogRouteStruct* szLogSecLockBelLogRouteData = NULL;/*߼߼·*/ + + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*ȡ±*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + /*ȡ߼߼·*/ + chLogSecLockBelLogRouteSum = GetLogSecLockBelLogRouteSum(wLogSectionId); + szLogSecLockBelLogRouteData = GetLogSecLockBelLogRouteData(wLogSectionId); + if (NULL != szLogSecLockBelLogRouteData) + { + for (ii = 0U; ii < chLogSecLockBelLogRouteSum; ii++) + { + (void)SetLogicalRouteState(szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId, ROUTE_LOGICAL_STATE_UNLOCKDELAY); + /*߼·״̬ʱʼںţʱȻΪ0˴ͬ*/ + SetLogRouteDelayErrLockStartCyc(szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId, 0U); + } + } + else + { + ; /*ִ*/ + } + } + else + { + + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h index f76d995..9402c7a 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h @@ -1294,6 +1294,14 @@ void SetLogSecPLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId); */ void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId); +/* +* ߼ι߼·״̬ +* ˵ const UINT16 wLogSectionId, ߼ID +* ֵ VOID +* by cgh 20250416 +*/ +void SetLogSecRelAllLogRouteState(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 1358e09..c0ec92e 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c @@ -1565,4 +1565,49 @@ void SetPhyPossibleArbTag(const UINT16 wPhySecId, UINT8 chArbTag) { PhysicalSectionConfigDataStru[bufIndex].chArbPossibleTag = chArbTag; } +} + +/* +* ͨϵͳŻȡID +* ˵ const UINT8 chAxleId ϵͳID +* ˵ const UINT16 wIndexInAxle, ϵͳ +* ֵ 0:ʧ +* >0:ID +* by cgh 20250415 +*/ +UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle) +{ + UINT16 wPhyCurNum = 0U; /*ǰ*/ + UINT16 ii = 0U; + UINT16 wCurPhyId = 0U; /*ǰID*/ + UINT16 wPhyIndex = 0U; /**/ + UINT16 wReval = 0U; /*صID*/ + + if (AXIS_TO_CI_SECTION_SUM_MAX > wIndexInAxle) + { + wPhyCurNum = GetPhySecCurSum(); /**/ + + for (ii = 0U; ii < wPhyCurNum; ii++) + { + wCurPhyId = GetPhySecId(ii); + wPhyIndex = GetPhySecConfigBufIndex(wCurPhyId);/*±*/ + + if ((PhysicalSectionConfigDataStru[wPhyIndex].wIndexInAxle == wIndexInAxle) + && (PhysicalSectionConfigDataStru[wPhyIndex].BelongAxleSysID == chAxleId)) + { + wReval = wCurPhyId; + break; + } + else + { + /**/ + } + } + } + else + { + /**/ + } + + return wReval; } \ 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 c60f321..fdb6af5 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.h @@ -72,6 +72,7 @@ typedef struct S_PhysicalSectionConfigData UINT16 AdjacentPhySecBuf[PHYSEC_ADJACENT_SEC_SUM_MAX]; /*ֱ*/ UINT16 IndirectNearPhySecBuf[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX]; /*λڼڽ*/ UINT8 chArbPossibleTag; /*ǷArb*/ + UINT16 wIndexInAxle; /*ڼϵͳе*/ } PhysicalSectionConfigDataStruct; @@ -500,6 +501,17 @@ UINT8 GetPhyPossibleArbTag(const UINT16 wPhySecId); * Create fan 20240822 */ void SetPhyPossibleArbTag(const UINT16 wPhySecId, UINT8 chArbTag); + +/* +* ͨϵͳŻȡID +* ˵ const UINT8 chAxleId ϵͳID +* ˵ const UINT16 wIndexInAxle, ϵͳ +* ֵ 0:ʧ +* >0:ID +* by cgh 20250415 +*/ +UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c index 5e17407..6ac7be5 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c @@ -2665,7 +2665,7 @@ UINT16 GetZFWRelayId_UseVirCI(const UINT16 ciId,UINT8 virCIid) * ȡָIDεǰCTUTռ״̬ * ˵ const UINT16 phySecId, ID * ֵ 0: ȡʧ -* >0: ǰռ״̬ +* 0x55 ޳ռ 0xaaUT 0xbbCT */ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId) { @@ -2678,6 +2678,7 @@ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId) UINT16 ii = 0u; /*α*/ UINT16 kk = 0u; /*α*/ UINT8 retVal = CI_ERROR; + UINT8 chFindOccupy = CI_ERROR; axisSecSum = GetPAxisSectionSum(phySecId); /*ȡΰļĿ*/ axisSecIdBuf = GetPAxisSectionIdBuf(phySecId); /*ȡΰļ*/ @@ -2695,11 +2696,13 @@ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId) if (LOGICSECTION_OCCUPY_CT == occupyState) { retVal = LOGICSECTION_OCCUPY_CT; + chFindOccupy = CI_SUCCESS; break; } else if(LOGICSECTION_OCCUPY_UT == occupyState) { retVal = LOGICSECTION_OCCUPY_UT; + chFindOccupy = CI_SUCCESS; } else { @@ -2712,7 +2715,15 @@ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId) break; } } - + if (CI_ERROR == chFindOccupy) + { + /*м߼ξռ*/ + retVal = LOGICSECTION_OCCUPY_NO; + } + else + { + ;/*ctutռ*/ + } return retVal; } @@ -2897,6 +2908,176 @@ UINT8 GetPhySecPreResetState(const UINT16 phySecId) return retVal; } +/* +* ָIDεǰֱӸλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chResetState, ֱӸλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecDirectResetState(const UINT16 wPhySectionId, const UINT8 chResetState) +{ + UINT16 wBufIndex = 0U; /*±*/ + + wBufIndex = GetPhySecConfigBufIndex(wPhySectionId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((PHYSICAL_DIRECT_RESET_YES == chResetState) || (PHYSICAL_DIRECT_RESET_NO == chResetState)) + { + /*ֱӸλ״̬*/ + PhysicalSectionDataStru[wBufIndex].chDirectResetRst = chResetState; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDμֱӸλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰֱӸλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecDirectResetState(const UINT16 wPhySecId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chRetVal = CI_ERROR; + + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + chRetVal = PhysicalSectionDataStru[wBufIndex].chDirectResetRst; /*ȡμֱӸλ״̬*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָIDεǰԤλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chPreResetBack, Ԥλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecPreResetBack(const UINT16 wPhySectionId, const UINT8 chPreResetBack) +{ + UINT16 wBufIndex = 0U; /*±*/ + + wBufIndex = GetPhySecConfigBufIndex(wPhySectionId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((PHY_RESET_BACK_RECIVE_YES == chPreResetBack) || (PHY_RESET_BACK_RECIVE_NO == chPreResetBack)) + { + PhysicalSectionDataStru[wBufIndex].chPreResetBack = chPreResetBack; /*Ԥλ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDμԤλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰԤλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecPreResetBack(const UINT16 wPhySecId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chRetVal = CI_ERROR; + + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + chRetVal = PhysicalSectionDataStru[wBufIndex].chPreResetBack; /*ȡμԤλ״̬*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָIDεǰֱӸλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chResetBack, ֱӸλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecDirectResetBack(const UINT16 wPhySectionId, const UINT8 chResetBack) +{ + UINT16 wBufIndex = 0U; /*±*/ + + wBufIndex = GetPhySecConfigBufIndex(wPhySectionId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((PHY_RESET_BACK_RECIVE_YES == chResetBack) || (PHY_RESET_BACK_RECIVE_NO == chResetBack)) + { + /*ֱӸλ״̬*/ + PhysicalSectionDataStru[wBufIndex].chDirectResetBack = chResetBack; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDμֱӸλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰֱӸλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecDirectResetBack(const UINT16 wPhySecId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chRetVal = CI_ERROR; + + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + chRetVal = PhysicalSectionDataStru[wBufIndex].chDirectResetBack; /*ȡμֱӸλ״̬*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + /**********JumpLockStateToZC******/ /* @@ -3849,11 +4030,11 @@ void SetPhySecInHumidRailFlag(const UINT16 phySectionId, const UINT8 cInHumidRai /* * ʪʪ־ -* ˵const UINT32 dwAreaHumidRailId ʪID +* ˵const UINT16 wAreaHumidRailId ʪID * ֵ * Created By LQ 2024.09.20 */ -void SetPlatFormRelPSHumidRailFlag(const UINT32 dwAreaHumidRailId) +void SetPlatFormRelPSHumidRailFlag(const UINT16 wAreaHumidRailId) { UINT8 ii = 0U; UINT16 jj = 0U; @@ -3867,10 +4048,10 @@ void SetPlatFormRelPSHumidRailFlag(const UINT32 dwAreaHumidRailId) UINT8 cPhySecBelongCiId = 0U; /*SPKSε*/ UINT8 cLocalCiId = 0U; /*CI ID*/ - if (0U != dwAreaHumidRailId) + if (0U != wAreaHumidRailId) { cLocalCiId = GetSystemParaLocalCiId(); - cPlatFormRelSpksNum = GetPlatFormRelSpksNum((UINT16)dwAreaHumidRailId, szPlatFormRelSpksId); /*ȡվ̨SPKS*/ + cPlatFormRelSpksNum = GetPlatFormRelSpksNum(wAreaHumidRailId, szPlatFormRelSpksId); /*ȡվ̨SPKS*/ if (CI_ERROR != cPlatFormRelSpksNum) { @@ -4007,4 +4188,49 @@ void SetSecColOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCyc { /**/ } +} + +/* +* ûͨCIָIDCT/UTռ״̬ +* ˵const UINT16 phySecId, ID + const UINT8 flag ֮ǰCTUTռ״̬ +* ֵ +* Created By LQ 2025.05.28 +*/ +void SetHlhtPhySecCtOrUtOccState(const UINT16 phySecId, const UINT8 flag) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 dwCurCycNum = 0U; + + bufIndex = GetPhySecConfigBufIndex(phySecId); /*ȡ±*/ + + if ((bufIndex < PHYSICAL_SECTION_SUM_MAX) && ((LOGICSECTION_OCCUPY_UT == flag) || (LOGICSECTION_OCCUPY_CT == flag) || (LOGICSECTION_OCCUPY_NO == flag))) + { + /*CT/UTռʼ*/ + if (LOGICSECTION_OCCUPY_NO == flag) + { + PhysicalSectionDataStru[bufIndex].UtOrCtOccuStartCycNum = 0U; /*УCT/UTռʼ*/ + } + else + { + if ((PhysicalSectionDataStru[bufIndex].UtOrCtOccFlag != flag) + && ((PHYSICAL_SECTION_LOCK_NORMAL == PhysicalSectionDataStru[bufIndex].LockState) || (PHYSICAL_SECTION_LOCK_EXCEPT == PhysicalSectionDataStru[bufIndex].LockState))) + { + dwCurCycNum = Get2oo2CurCycleNum(); + PhysicalSectionDataStru[bufIndex].UtOrCtOccuStartCycNum = dwCurCycNum; /*CT/UTռʼ*/ + } + else + { + /**/ + } + } + + /*CT/UTռ״̬*/ + PhysicalSectionDataStru[bufIndex].UtOrCtOccFlag = flag; + + } + else + { + /**/ + } } \ 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 9ed0d12..e9eaa03 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h @@ -70,6 +70,9 @@ typedef struct S_PhysicalSectionDataStruct UINT8 StopCheckFlag; /*ֹͣ־(δ/) (ֶ̬)*/ UINT8 JumpLockState; /*Ծ״̬ (ֶ̬)*/ UINT8 PhySecPreResetState; /*Ԥλ״̬ (ֶ̬)*/ + UINT8 chPreResetBack; /*Ԥλ*/ + UINT8 chDirectResetRst; /*ֱӸλ*/ + UINT8 chDirectResetBack; /*ֱӸλ*/ UINT32 SecJumpDelayUnlockStartCycNum; /*Ծʱʼ (ֶ̬)*/ UINT8 JumpLockDelayUnlockFlag; /*Ծʱñ־ֶ̬Σ*/ UINT32 LockDelayStartCycNum; /* ʱʼں(ֶ̬) */ @@ -677,7 +680,7 @@ UINT32 GetSecUtOrCtOccuStartCycNum(const UINT16 phySectionId); * ȡָIDεǰCTUTռ״̬ * ˵ const UINT16 phySecId, ID * ֵ 0: ȡʧ -* >0: ǰռ״̬ +* 0x55 ޳ռ 0xaaUT 0xbbCT */ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId); @@ -723,6 +726,60 @@ void SetPhySecPreResetState(const UINT16 phySectionId, const UINT8 preResetState */ UINT8 GetPhySecPreResetState(const UINT16 phySecId); +/* +* ָIDεǰֱӸλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chResetState, ֱӸλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecDirectResetState(const UINT16 wPhySectionId, const UINT8 chResetState); + +/* +* ȡָIDμֱӸλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰֱӸλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecDirectResetState(const UINT16 wPhySecId); + +/* +* ָIDεǰԤλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chPreResetBack, Ԥλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecPreResetBack(const UINT16 wPhySectionId, const UINT8 chPreResetBack); + +/* +* ȡָIDμԤλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰԤλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecPreResetBack(const UINT16 wPhySecId); + +/* +* ָIDεǰֱӸλ״̬ +* ˵ const UINT16 wPhySectionId, ID +* const UINT8 chResetBack, ֱӸλ״̬ +* ֵ +* by cgh 20250326 +*/ +void SetPhySecDirectResetBack(const UINT16 wPhySectionId, const UINT8 chResetBack); + +/* +* ȡָIDμֱӸλ״̬ +* ˵ const UINT16 wPhySecId, ID +* ֵ 0: ȡʧ +* >0: ǰֱӸλ״̬ +* by cgh 20250326 +*/ +UINT8 GetPhySecDirectResetBack(const UINT16 wPhySecId); + /* * ȡָIDθZCԾ״̬ @@ -983,11 +1040,11 @@ void SetPhySecInHumidRailFlag(const UINT16 phySectionId, const UINT8 cInHumidRai /* * ʪʪ־ -* ˵const UINT32 dwAreaHumidRailId ʪID +* ˵const UINT16 dwAreaHumidRailId ʪID * ֵ * Created By LQ 2024.09.20 */ -void SetPlatFormRelPSHumidRailFlag(const UINT32 dwAreaHumidRailId); +void SetPlatFormRelPSHumidRailFlag(const UINT16 dwAreaHumidRailId); /* * ȡָIDιǷ߱ARB״̬ @@ -1013,6 +1070,15 @@ UINT32 GetSecColOccupyStartCycNum(const UINT16 phySectionId); */ void SetSecColOccupyStartCycNum(const UINT16 phySectionId, const UINT32 startCycNum); +/* +* ûͨCIָIDCT/UTռ״̬ +* ˵const UINT16 phySecId, ID + const UINT8 flag ֮ǰCTUTռ״̬ +* ֵ +* Created By LQ 2025.05.28 +*/ +void SetHlhtPhySecCtOrUtOccState(const UINT16 phySecId, const UINT8 flag); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/SectionDefine.h b/TSCP/src/APP/ciapp/Section/SectionDefine.h index 93f8746..6c113cf 100644 --- a/TSCP/src/APP/ciapp/Section/SectionDefine.h +++ b/TSCP/src/APP/ciapp/Section/SectionDefine.h @@ -24,7 +24,7 @@ #define AXIS_INCLUDE_LINK_SUM_MAX ((UINT16)5) /*ΰLINKֵ*/ #define LOGSEC_INCLUDE_LINK_SUM_MAX ((UINT16)8) /*߼ΰLINKֵ*/ #define PHYSICAL_INCLUDE_SWITCH_SUM_MAX ((UINT16)10) /*ΰĵֵ*/ -#define SEC_INVASECT_N_CONDSWIT_SUM_MAX ((UINT16)12) /*ΰֵ*/ +#define SEC_INVASECT_N_CONDSWIT_SUM_MAX ((UINT16)20) /*ΰֵ*/ #define LOGSEC_INV_N_CONDSWIT_SUM_MAX ((UINT16)8) /*߼ΰֵ*/ #define LINK_SUM_MAX ((UINT16)1300) /*LINKֵ*//* add 2022.02.28 */ #define LOGSEC_INCLUDE_AXIS_SUM_MAX ((UINT16)8) /*߼ΰļֵ*//* add 20220919 TIOC5.0*/ @@ -204,6 +204,10 @@ #define PHYSICAL_SECTION_PRE_RESET_YES ((UINT8)0x55) /*Ԥλ*/ #define PHYSICAL_SECTION_PRE_RESET_NO ((UINT8)0xaa) /*δԤλ*/ +/*λ״̬*/ +#define PHYSICAL_DIRECT_RESET_YES ((UINT8)0x55U) /*ֱӸλ*/ +#define PHYSICAL_DIRECT_RESET_NO ((UINT8)0xaaU) /*δֱӸλ*/ + #define AXIS_SECTION_JUMPLOCK_APPLY_NO ((UINT8)0x55) /*Ծ*/ #define AXIS_SECTION_JUMPLOCK_APPLY_YES ((UINT8)0xAA) /*Ծ*/ @@ -352,4 +356,12 @@ #define PHY_SECTION_ARB_NO ((UINT8)0x55) /*δARB*/ #define PHY_SECTION_ARB_YES ((UINT8)0xaa) /*ARB*/ +/*Ḵλ*/ +#define PHY_RESET_BACK_RECIVE_YES ((UINT8)0x55U) /*յḴλ*/ +#define PHY_RESET_BACK_RECIVE_NO ((UINT8)0xaaU) /*δյḴλ*/ + +/*CBTC*/ +#define AXIS_SEC_CBTC_PROPERTY_YES ((UINT8)0x55) /*ξCBTCԣlinkCBTCԣ*/ +#define AXIS_SEC_CBTC_PROPERTY_NO ((UINT8)0xaa) /*βCBTCԣlinkCBTCԣ*/ + #endif diff --git a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c index a9072a4..8f50e36 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c +++ b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c @@ -1574,12 +1574,13 @@ UINT8 SetNearCISignalCurColor(const UINT16 signalId, const UINT8 curColor) { UINT16 bufIndex = 0u; /*±*/ UINT8 localCi = 0u;/*ID*/ - UINT8 belongCiId = 0u;/*·ID*/ + UINT8 belongCiId = 0u;/*źŻID*/ UINT8 reVal = CI_ERROR; - - bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ localCi = GetSystemParaLocalCiId();/*ID*/ belongCiId = GetSignalBelongCiId(signalId);/*ȡźŻ*/ + if(localCi !=belongCiId) { if (bufIndex < SIGNAL_SUM_MAX) @@ -1590,7 +1591,7 @@ UINT8 SetNearCISignalCurColor(const UINT16 signalId, const UINT8 curColor) } else { - reVal = CI_ERROR; + reVal = CI_ERROR; } } else @@ -1599,6 +1600,7 @@ UINT8 SetNearCISignalCurColor(const UINT16 signalId, const UINT8 curColor) } return reVal; } + /* * ȡָIDźŻ֮ǰʾɫ * ˵ const UINT16 signalId, źŻID @@ -1684,12 +1686,10 @@ void SetSignalCurDriveColor(const UINT16 signalId, const UINT8 driveColor) UINT8 localCiPattern = CI_PATTERN_TRADITIONAL; UINT8 chDriveColor = SIGNAL_DRIVECOLOUR_RED; UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ - bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ curDrvColor = GetSignalCurDriveColor(signalId);/*ȡǰɫ*/ sigDrvEnable = GetSignalDrvEnable(signalId);/*ȡźŻǷ־*/ sigVirtAttr = GetSignalVirtualAttr(signalId);/*ȡźŻ*/ - localCiPattern = GetLocalCiPattern(); if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) { @@ -1788,6 +1788,8 @@ void SetSignalCurDriveColor(const UINT16 signalId, const UINT8 driveColor) {/*źɫIJҸɫЧʱ,ɫʼں,±֮ǰɫ.δΪ˽̻ʱ,ڼֻƵƵ*/ SignalDataStru[bufIndex].DriveNewSigStartCycNum = Get2oo2CurCycleNum(); SignalDataStru[bufIndex].OldDriveColor = SignalDataStru[bufIndex].PreDriveColor; + /*OCɼȫ ɼȫʼں*/ + SetOcSignalStartCycNum(signalId, 0U); } else { @@ -1882,6 +1884,26 @@ UINT8 GetSignalWhiteDsBreakFlag(const UINT16 signalId) return reVal; } +/* +* ȡָIDźŻ˿˿־ +* ˵ const UINT16 signalId, źŻID +* ֵ 0: ȡʧ +* >0: ˿־ +*/ +UINT8 GetSignalBlueDsBreakFlag(const UINT16 signalId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (SIGNAL_SUM_MAX > bufIndex) + { + reVal = SignalDataStru[bufIndex].BlueDsBreakFlag; + } + return reVal; +} + /* * ȡָIDźŻƵ˿˿־ * ˵ const UINT16 signalId, źŻID @@ -3594,7 +3616,7 @@ UINT8 RefreshSignalLightUpState(void) chFlag = GetSignalShine(wSignalId); if ((UINT16_MAX == wSignalId) - || (UINT16_MAX == wSignalLightUpLinkIdSum) + || (MAX_SIGNAL_LIGHTUPLINK_NUM < wSignalLightUpLinkIdSum) || (NULL == pSignalLightUpLinkIdBuff) || ((DIR_SAME != chDir) && (DIR_CONVERT != chDir))) { @@ -3622,6 +3644,7 @@ UINT8 RefreshSignalLightUpState(void) ; /*ûз任㣬DZ䷽*/ } } + else { ; /*linkⷽһlinkҪת*/ } @@ -3727,7 +3750,7 @@ UINT8 RefreshSignalLightUpState(void) chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_CI, chLinkOcId); dwLeftLen = dwDdLen - dwUsedLen; - if ((TRANSMIT_STATE_GOOD != chTransmitStat) || ((UINT32_MAX != strCfpOther.dwDis) && (dwLeftLen < strCfpOther.dwDis))) + if ((TRANSMIT_STATE_GOOD != chTransmitStat) || ((UINT32_MAX != strCfpOther.dwDis) && (dwLeftLen <= strCfpOther.dwDis))) { ; /*ͨŲãTIOCгռãѳƾ룬õνӽгID*/ } @@ -3779,7 +3802,7 @@ UINT8 RefreshSignalLightUpState(void) (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); } - else if ((UINT32_MAX != strCfpOther.dwDis) && (dwLeftLen < strCfpOther.dwDis)) + else if ((UINT32_MAX != strCfpOther.dwDis) && (dwLeftLen <= strCfpOther.dwDis)) {/* TIOCгռãΪVBTCѳƾ룬 */ SetSignalLightUpTrainId(wSignalId, 0U); if (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE != chFlag) /*RCгռãΪVBTCѳƾ룬źŻΪ̬ʱ߼*/ @@ -4027,21 +4050,20 @@ UINT16 GetEnginVehicCroCloBelongRoute(const UINT16 signalId) void OcSetSignalCurColor(const UINT16 signalId, const UINT8 curColor) { UINT16 bufIndex = 0u; /*±*/ - UINT8 signalColorValid = 0u; UINT8 signalState = 0u; - UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*ʾ̻ƹܿǷ*/ bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ if(SIGNAL_SUM_MAX > bufIndex) { /*źŻǰɫ*/ - SignalDataStru[bufIndex].CurColor = curColor; - signalColorValid = CheckSignalShowColorValid(curColor); - /*ɫЧ*/ - if(CI_SUCCESS == signalColorValid) + if (SIGNAL_SHOWCOLOUR_REDFAULT == curColor) { - SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_NO;/*δ˿־*/ + SignalDataStru[bufIndex].CurColor = SIGNAL_SHOWCOLOUR_REDBREAK; + } + else + { + SignalDataStru[bufIndex].CurColor = curColor; } /*Բͬɫö˿״̬*/ switch(curColor) @@ -4083,14 +4105,7 @@ void OcSetSignalCurColor(const UINT16 signalId, const UINT8 curColor) case SIGNAL_SHOWCOLOUR_GREENCLOSE: case SIGNAL_SHOWCOLOUR_GREENYELLOWCLOSE: case SIGNAL_SHOWCOLOUR_YELLOWCLOSE: - if (FUNC_SWITCH_ON == funSwitchGreenYellow) - { - SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_NO;/*δ˿־*/ - } - else - { - ; /**/ - } + /*ϴGetOcSignalColor*/ break; /*ƶ*/ case SIGNAL_SHOWCOLOUR_YELLOWBREAK: @@ -4104,13 +4119,13 @@ void OcSetSignalCurColor(const UINT16 signalId, const UINT8 curColor) case SIGNAL_SHOWCOLOUR_REDBREAK: SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_YES;/*ö˿־*/ break; + case SIGNAL_SHOWCOLOUR_REDFAULT: + /*ͨжϲ־*/ + break; /*׶*/ case SIGNAL_SHOWCOLOUR_WHITEBREAK: SignalDataStru[bufIndex].WhiteDsBreakFlag = SIGNAL_DS_BREAK_YES;/*ö˿־*/ break; - case SIGNAL_SHOWCOLOUR_BLUEBREAK: - SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES;/*ö˿־*/ - break; default: /*ɴ֧*/ break; @@ -5088,4 +5103,532 @@ void SetSignalInHumidRailFlag(const UINT16 signalId, const UINT8 cInHumidRailFla { /*μʧܣ*/ } +} + +/* +* ָIDźŻǰ˿־ +* ˵ const UINT16 signalId, źŻID +* ֵ +bit71ʾںƶ˿0δ˿ +bit61ʾƶ˿0δ˿ +bit5~bit411ʾ̵ƶ˿00δ˿Ƿ +bit3~bit211ʾڻƵƶ˿00δ˿Ƿ +bit1~bit911ʾڰ׵ƶ˿00δ˿Ƿ +* Created By fan 2025.05.06 +*/ +UINT8 GetSignalCurBreakFlag(const UINT16 signalId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 reVal = 0U; + UINT8 chDsFlag = 0U; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + /*ȡƶ˿־*/ + chDsFlag = GetSignalDsBreakFlag(signalId); + if (SIGNAL_DS_BREAK_YES== chDsFlag) + { + reVal |= SIGNAL_DS_BREAK_RED; + } + else + { + ; /**/ + } + /*ȡƶ˿־*/ + chDsFlag = GetSignalBlueDsBreakFlag(signalId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + reVal |= SIGNAL_DS_BREAK_BLUE; + } + else + { + ; /**/ + } + /*ȡ̵ƶ˿־*/ + chDsFlag = GetSignalGreenDsBreakFlag(signalId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + reVal |= SIGNAL_DS_BREAK_GREEN; + } + else + { + ; /**/ + } + /*ȡƵƶ˿־*/ + chDsFlag = GetSignalYellowDsBreakFlag(signalId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + reVal |= SIGNAL_DS_BREAK_YELLOW; + } + else + { + ; /**/ + } + /*ȡ׵ƶ˿־*/ + chDsFlag = GetSignalWhiteDsBreakFlag(signalId); + if (SIGNAL_DS_BREAK_YES == chDsFlag) + { + reVal |= SIGNAL_DS_BREAK_WHITE; + } + else + { + ; /**/ + } + } + else + { + reVal = 0xFFU; + } + return reVal; +} + +/* +* ָIDźŻǰ˿־ +* ˵ const UINT16 signalId, źŻID +* const UINT8 curDsFlag, Ͷ˿־ +* ֵ +* Created By fan 2025.05.06 +*/ +void SetNearCISignalCurDsFlag(const UINT16 signalId, const UINT8 curDsFlag) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 localCi = 0u;/*ID*/ + UINT8 belongCiId = 0u;/*źŻID*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + localCi = GetSystemParaLocalCiId();/*ID*/ + belongCiId = GetSignalBelongCiId(signalId);/*ȡźŻ*/ + + if (localCi != belongCiId) + { + if (bufIndex < SIGNAL_SUM_MAX) + { + if (SIGNAL_DS_BREAK_RED == (curDsFlag & SIGNAL_DS_BREAK_RED)) + { + /*ںϱ־*/ + SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + /*ϱ־*/ + SignalDataStru[bufIndex].DsBreakFlag = SIGNAL_DS_BREAK_NO; + } + + if (SIGNAL_DS_BREAK_BLUE == (curDsFlag & SIGNAL_DS_BREAK_BLUE)) + { + /*ϱ־*/ + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + /*ϱ־*/ + SignalDataStru[bufIndex].BlueDsBreakFlag = SIGNAL_DS_BREAK_NO; + } + + if (SIGNAL_DS_BREAK_GREEN == (curDsFlag & SIGNAL_DS_BREAK_GREEN)) + { + /*̶ϱ־*/ + SignalDataStru[bufIndex].GreenDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + /*̶ϱ־*/ + SignalDataStru[bufIndex].GreenDsBreakFlag = SIGNAL_DS_BREAK_NO; + } + + if (SIGNAL_DS_BREAK_YELLOW == (curDsFlag & SIGNAL_DS_BREAK_YELLOW)) + { + /*ڻƶϱ־*/ + SignalDataStru[bufIndex].YellowDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + /*ƶϱ־*/ + SignalDataStru[bufIndex].YellowDsBreakFlag = SIGNAL_DS_BREAK_NO; + } + + if (SIGNAL_DS_BREAK_WHITE == (curDsFlag & SIGNAL_DS_BREAK_WHITE)) + { + /*ڰ׶ϱ־*/ + SignalDataStru[bufIndex].WhiteDsBreakFlag = SIGNAL_DS_BREAK_YES; + } + else + { + /*׶ϱ־*/ + SignalDataStru[bufIndex].WhiteDsBreakFlag = SIGNAL_DS_BREAK_NO; + } + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } +} + +/* +* ûͨCIָIDźŻƶ˿־ +* ˵const UINT16 wSignalId źŻID +* const UINT8 cFlag ˿־ +* ֵ +* Created By LQ 2025.05.31 +*/ +void SetHlhtCiSignalBlueDsBreakFlag(const UINT16 wSignalId, const UINT8 cFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(wSignalId); /*ȡ±*/ + + if ((SIGNAL_SUM_MAX > bufIndex) && ((SIGNAL_DS_BREAK_NO == cFlag) || (SIGNAL_DS_BREAK_YES == cFlag))) + { + SignalDataStru[bufIndex].BlueDsBreakFlag = cFlag; /*ƶ˿־*/ + } + else + { + /**/ + } +} + +/* +* źŻ۳·ť״̬ +* ˵const UINT16 signalId, źŻID +* const UINT8 cFlag ·ť״̬ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnState(const UINT16 signalId, const UINT8 cState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_DETAIN_CUT_VALID_NO == cState) || (SIGNAL_DETAIN_CUT_VALID_YES == cState)) + { + SignalDataStru[bufIndex].cDetCutBtnState = cState; /*·ť״̬*/ + } + else + { + /**/ + } + } + else + { + /*±󣬲*/ + } +} + +/* +* ȡźŻ۳·ť״̬ +* ˵const UINT16 signalId źŻID +* ֵ0: ȡʧ +* >0: ȡɹ +* Created By LQ 2025.06.19 +*/ +UINT8 GetDetCutBtnState(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_DETAIN_CUT_VALID_NO == SignalDataStru[bufIndex].cDetCutBtnState) + || (SIGNAL_DETAIN_CUT_VALID_YES == SignalDataStru[bufIndex].cDetCutBtnState)) + { + reVal = SignalDataStru[bufIndex].cDetCutBtnState; + } + else + { + /**/ + } + } + else + { + /*±󣬲*/ + } + + return reVal; +} + +/* +* źŻ۳·ť +* ˵const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnPressCycNum(const UINT16 signalId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + SignalDataStru[bufIndex].DetCutBtnPressCycNum = startCycNum; + } + else + { + /**/ + } +} + +/* +* ȡźŻ۳·ť +* ˵const UINT16 signalId źŻID +* ֵ źŻ۳·ť +* Created By LQ 2025.06.19 +*/ +UINT32 GetDetCutBtnPressCycNum(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT32 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + reVal = SignalDataStru[bufIndex].DetCutBtnPressCycNum; + } + else + { + /**/ + } + + return reVal; +} + +/* +* źŻ۳·ť󴥷 +* ˵const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnErrTrigPressCycNum(const UINT16 signalId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + SignalDataStru[bufIndex].DetCutBtnErrTrigPressCycNum = startCycNum; + } + else + { + /*δ󣬲*/ + } +} + +/* +* ȡźŻ۳·ť󴥷 +* const UINT16 signalId źŻID +* +* ֵ źŻ۳·ť󴥷 +* Created By LQ 2025.06.19 +*/ +UINT32 GetDetCutBtnErrTrigPressCycNum(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT32 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + reVal = SignalDataStru[bufIndex].DetCutBtnErrTrigPressCycNum; + } + else + { + /*δ󣬷ʧ*/ + } + + return reVal; +} + +/* +* źŻ۳·ťϱ־ +* ˵const UINT16 signalId źŻID +* const UINT8 cBtnErrFlag źŻ۳·ťϱ־ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetSignalDetCutBtnErrFlag(const UINT16 signalId, const UINT8 cBtnErrFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_ZFS_BTN_ERR_FLAG_NO == cBtnErrFlag) || (SIGNAL_ZFS_BTN_ERR_FLAG_YES == cBtnErrFlag)) + { + SignalDataStru[bufIndex].cDetCutBtnErrFlag = cBtnErrFlag; /*źŻ۳·ťϱ־*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡźŻ۳·ťϱ־ +* ˵const UINT16 signalId źŻID +* ֵ0: ȡʧ +* >0: ȡɹ +* Created By LQ 2025.06.19 +*/ +UINT8 GetSignalDetCutBtnErrFlag(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_ZFS_BTN_ERR_FLAG_NO == SignalDataStru[bufIndex].cDetCutBtnErrFlag) || (SIGNAL_ZFS_BTN_ERR_FLAG_YES == SignalDataStru[bufIndex].cDetCutBtnErrFlag)) + { + reVal = SignalDataStru[bufIndex].cDetCutBtnErrFlag; + } + else + { + /**/ + } + } + else + { + /**/ + } + + return reVal; +} + +/* +* źŻ۳·ťɼ̵״̬ +* ˵const UINT16 signalId źŻID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnRelayDownState(const UINT16 signalId, const UINT8 cRelayDownState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_RELAY_ERROR_DOWN_NO == cRelayDownState) || (SIGNAL_RELAY_ERROR_DOWN_YES == cRelayDownState)) + { + SignalDataStru[bufIndex].cDetCutBtnRelayDownState = cRelayDownState; /*ÿ۳·ťɼ̵״̬*/ + } + else + { + /*״̬󣬲*/ + } + } + else + { + /*±󣬲*/ + } +} + +/* +* ȡźŻ۳·ťɼ̵״̬ +* ˵const UINT16 signalId źŻID +* ֵ 0 ȡʧ +* 0x55 +* 0xaa ͨ쳣 +* Created By LQ 2025.06.19 +*/ +UINT8 GetDetCutBtnRelayDownState(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_RELAY_ERROR_DOWN_NO == SignalDataStru[bufIndex].cDetCutBtnRelayDownState) + || (SIGNAL_RELAY_ERROR_DOWN_YES == SignalDataStru[bufIndex].cDetCutBtnRelayDownState)) + { + reVal = SignalDataStru[bufIndex].cDetCutBtnRelayDownState; + } + else + { + /*״̬󣬷0ʧ*/ + } + } + else + { + /*±󣬷0ʧ*/ + } + + return reVal; +} + +/* +* źŻ۳ť2 +* const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetDetainSndBtnPressCycNum(const UINT16 signalId, const UINT32 startCycNum) +{ + UINT16 bufIndex = 0u; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + SignalDataStru[bufIndex].DetainSndBtnPressCycNum = startCycNum; + } + else + { + /**/ + } +} + +/* +* ȡźŻ۳ť2 +* const UINT16 signalId źŻID +* +* ֵźŻ۳ť2 +* Created By LQ 2025.06.26 +*/ +UINT32 GetDetainSndBtnPressCycNum(const UINT16 signalId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT32 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡźŻ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + reVal = SignalDataStru[bufIndex].DetainSndBtnPressCycNum; + } + else + { + /**/ + } + + 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 1e667d4..774c07c 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDataManage.h +++ b/TSCP/src/APP/ciapp/Signal/SignalDataManage.h @@ -72,6 +72,7 @@ typedef struct S_SignalDataStruct UINT8 DetainBtnErrFlag; /*۳ť1ϱ־0x55δϣ0xaa*/ UINT8 CancelDetainBtnErrFlag; /*ȡ۳ť1ϱ־0x55δϣ0xaa*/ UINT32 DetainBtnPressCycNum; /*۳ť1*/ + UINT32 DetainSndBtnPressCycNum; /*۳ť2*/ UINT32 CancelDetainBtnPressCycNum; /*ȡ۳ť*/ UINT32 CancelDetainErrTrigPressCycNum; /*ȡ۳ť󴥷*/ UINT8 CancelDetainBtnValidFlag; /*ȡ۳ťЧ־0x55Ч0xaaЧ*/ @@ -96,6 +97,11 @@ typedef struct S_SignalDataStruct UINT8 VobcCroSigInPhyOccSta; /*гѹźŻڷһռѹ״̬*/ UINT8 cSleepTrainLightUpFlag; /*߳źŻ־0x55 Ч0xAA Ч*/ UINT8 cInHumidRailFlag; /*źŻʪ־0x55 Ч0xAA Ч*/ + UINT8 cDetCutBtnState; /*۳·ť״̬0x55 Ч0xAA Ч*/ + UINT32 DetCutBtnPressCycNum; /*۳·ť*/ + UINT32 DetCutBtnErrTrigPressCycNum; /*۳·ť󴥷*/ + UINT8 cDetCutBtnErrFlag; /*۳·ťϱ־0x55δϣ0xaa*/ + UINT8 cDetCutBtnRelayDownState; /*۳·ťɼ̵״̬0x55ɼ£0xaaͨ쳣*/ } SignalDataStruct; extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*źŻݽṹ*/ @@ -248,6 +254,14 @@ UINT8 GetSignalYellowDsBreakFlag(const UINT16 signalId); */ UINT8 GetSignalWhiteDsBreakFlag(const UINT16 signalId); +/* +* ȡָIDźŻ˿˿־ +* ˵ const UINT16 signalId, źŻID +* ֵ 0: ȡʧ +* >0: ˿־ +*/ +UINT8 GetSignalBlueDsBreakFlag(const UINT16 signalId); + /* * ȡָIDźŻƵ˿˿־ * ˵ const UINT16 signalId, źŻID @@ -1028,6 +1042,146 @@ UINT8 GetSignalInHumidRailFlag(const UINT16 signalId); */ void SetSignalInHumidRailFlag(const UINT16 signalId, const UINT8 cInHumidRailFlag); +/* +* ָIDźŻǰ˿־ +* ˵ const UINT16 signalId, źŻID +* ֵ +bit71ʾںƶ˿0δ˿ +bit61ʾƶ˿0δ˿ +bit5~bit411ʾ̵ƶ˿00δ˿Ƿ +bit3~bit211ʾڻƵƶ˿00δ˿Ƿ +bit1~bit911ʾڰ׵ƶ˿00δ˿Ƿ +* Created By fan 2025.05.06 +*/ +UINT8 GetSignalCurBreakFlag(const UINT16 signalId); + +/* +* ָIDźŻǰ˿־ +* ˵ const UINT16 signalId, źŻID +* const UINT8 curDsFlag, Ͷ˿־ +* ֵ +* Created By fan 2025.05.06 +*/ +void SetNearCISignalCurDsFlag(const UINT16 signalId, const UINT8 curDsFlag); + +/* +* ûͨCIָIDźŻƶ˿־ +* ˵const UINT16 wSignalId źŻID +* const UINT8 cFlag ˿־ +* ֵ +* Created By LQ 2025.05.31 +*/ +void SetHlhtCiSignalBlueDsBreakFlag(const UINT16 wSignalId, const UINT8 cFlag); + +/* +* źŻ۳·ť״̬ +* ˵const UINT16 signalId, źŻID +* const UINT8 cFlag ·ť״̬ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnState(const UINT16 signalId, const UINT8 cState); + +/* +* ȡźŻ۳·ť״̬ +* ˵const UINT16 signalId źŻID +* ֵ0: ȡʧ +* >0: ȡɹ +* Created By LQ 2025.06.19 +*/ +UINT8 GetDetCutBtnState(const UINT16 signalId); + +/* +* źŻ۳·ť +* ˵const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnPressCycNum(const UINT16 signalId, const UINT32 startCycNum); + +/* +* ȡźŻ۳·ť +* ˵const UINT16 signalId źŻID +* ֵ źŻ۳·ť +* Created By LQ 2025.06.19 +*/ +UINT32 GetDetCutBtnPressCycNum(const UINT16 signalId); + +/* +* źŻ۳·ť󴥷 +* ˵const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnErrTrigPressCycNum(const UINT16 signalId, const UINT32 startCycNum); + +/* +* ȡźŻ۳·ť󴥷 +* const UINT16 signalId źŻID +* +* ֵ źŻ۳·ť󴥷 +* Created By LQ 2025.06.19 +*/ +UINT32 GetDetCutBtnErrTrigPressCycNum(const UINT16 signalId); + +/* +* źŻ۳·ťϱ־ +* ˵const UINT16 signalId źŻID +* const UINT8 cBtnErrFlag źŻ۳·ťϱ־ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetSignalDetCutBtnErrFlag(const UINT16 signalId, const UINT8 cBtnErrFlag); + +/* +* ȡźŻ۳·ťϱ־ +* ˵const UINT16 signalId źŻID +* ֵ0: ȡʧ +* >0: ȡɹ +* Created By LQ 2025.06.19 +*/ +UINT8 GetSignalDetCutBtnErrFlag(const UINT16 signalId); + +/* +* źŻ۳·ťɼ̵״̬ +* ˵const UINT16 signalId źŻID +* const UINT8 cRelayDownState ̵״̬ +* ֵ +* Created By LQ 2025.06.19 +*/ +void SetDetCutBtnRelayDownState(const UINT16 signalId, const UINT8 cRelayDownState); + +/* +* ȡźŻ۳·ťɼ̵״̬ +* ˵const UINT16 signalId źŻID +* ֵ 0 ȡʧ +* 0x55 +* 0xaa ͨ쳣 +* Created By LQ 2025.06.19 +*/ +UINT8 GetDetCutBtnRelayDownState(const UINT16 signalId); + +/* +* źŻ۳ť2 +* const UINT16 signalId źŻID +* const UINT32 startCycNum ں +* +* ֵ +* Created By LQ 2025.06.26 +*/ +void SetDetainSndBtnPressCycNum(const UINT16 signalId, const UINT32 startCycNum); + +/* +* ȡźŻ۳ť2 +* const UINT16 signalId źŻID +* +* ֵźŻ۳ť2 +* Created By LQ 2025.06.26 +*/ +UINT32 GetDetainSndBtnPressCycNum(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 234299a..a325c28 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDefine.h +++ b/TSCP/src/APP/ciapp/Signal/SignalDefine.h @@ -85,6 +85,7 @@ #define SIGNAL_SHOWCOLOUR_WHITE ((UINT8)0x08) /*׵*/ #define SIGNAL_SHOWCOLOUR_RED_WHITE ((UINT8)0x09) /*ףɫƹİλ*/ #define SIGNAL_SHOWCOLOUR_REDBREAK ((UINT8)0x40) /**/ +#define SIGNAL_SHOWCOLOUR_REDFAULT ((UINT8)0x60) /*ͨк*/ #define SIGNAL_SHOWCOLOUR_BLUEBREAK ((UINT8)0x50) /**/ #define SIGNAL_SHOWCOLOUR_GREENBREAK ((UINT8)0x10) /*̶*/ #define SIGNAL_SHOWCOLOUR_YELLOWBREAK ((UINT8)0x20) /*ƶ*/ @@ -123,6 +124,12 @@ #define SIGNAL_DS_BREAK_NO ((UINT8)0x55) /*δ˿*/ #define SIGNAL_DS_BREAK_YES ((UINT8)0xaa) /*˿*/ +/*źŻ˿־*/ +#define SIGNAL_DS_BREAK_RED ((UINT8)0x80) /*ƶ˿*/ +#define SIGNAL_DS_BREAK_BLUE ((UINT8)0x40) /*Ƶƶ˿*/ +#define SIGNAL_DS_BREAK_GREEN ((UINT8)0x30) /*̵ƶ˿*/ +#define SIGNAL_DS_BREAK_YELLOW ((UINT8)0x0C) /*Ƶƶ˿*/ +#define SIGNAL_DS_BREAK_WHITE ((UINT8)0x03) /*׵ƶ˿*/ /*źŻŹر״̬*/ #define SIGNAL_CLOSE ((UINT8)0x55) /*ر*/ @@ -172,8 +179,11 @@ #define SIGNAL_CANCEL_DETAIN_VALID_NO ((UINT8)0x55) /*źŻԸʽȡ۳ťЧ*/ #define SIGNAL_CANCEL_DETAIN_VALID_YES ((UINT8)0xaa) /*źŻԸʽȡ۳ťЧ*/ -#define SIGNAL_RELAY_ERROR_DOWN_NO ((UINT8)0x55) /*ȡ۳ť̵*/ -#define SIGNAL_RELAY_ERROR_DOWN_YES ((UINT8)0xaa) /*ȡ۳ť̵ͨ쳣*/ +#define SIGNAL_DETAIN_CUT_VALID_NO ((UINT8)0x55) /*źŻ·ťЧ*/ +#define SIGNAL_DETAIN_CUT_VALID_YES ((UINT8)0xaa) /*źŻ·ťЧ*/ + +#define SIGNAL_RELAY_ERROR_DOWN_NO ((UINT8)0x55) /*۳ť̵*/ +#define SIGNAL_RELAY_ERROR_DOWN_YES ((UINT8)0xaa) /*۳ť̵ͨ쳣*/ #define SIGNAL_RELAY_ACTION_TIMEMAX ((UINT8)0x0a) /*źŻ̵*/ #define SIGNAL_OPEN_TO_CLOSE_TIME_DELAY ((UINT8)0x07) /*źŻرն*/ @@ -250,6 +260,10 @@ #define OC_SIGNAL_SHOWCOLOR_BLUE_BREAK ((UINT8)0xff) /*ƶ˿*/ #define OC_SIGNAL_SHOWCOLOR_YELLOW_2_BREAK ((UINT8)0x3a) /*Ƶ2˿*/ #define OC_SIGNAL_SHOWCOLOR_GREEN_2_BREAK ((UINT8)0xac) /*̵2˿*/ +#define OC_SIGNAL_SHOWCOLOR_DL_OVERLOAD ((UINT8)0x96) /**/ +#define OC_SIGNAL_SHOWCOLOR_DY_OVERLOAD ((UINT8)0x69) /*ѹ*/ +#define OC_SIGNAL_SHOWCOLOR_DLDY_OVERLOAD ((UINT8)0xf5) /*ѹ*/ +#define OC_SIGNAL_SHOWCOLOR_DY_ZERO ((UINT8)0x5f) /*޵ѹ*/ #define OC_SIGNAL_SHOWCOLOR_UNKNOWN ((UINT8)0x00) /*״̬δ֪ ݰն˿*/ #define OC_SIGNAL_DRIVECOLOR_RED ((UINT16)0x00aa) /*oc*/ diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c index e9760f2..4a53cbc 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c @@ -960,6 +960,15 @@ void SetSingleSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) if (bufIndex < SWITCH_SUM_MAX) { + if (0U < SwitchDataStru[bufIndex].SwitDriveStartCycNum) + { + /*־*/ + SetSwitchDrivedFlag(switchId, SWITCH_DRIVED_FLAG_YES); + } + else + { + ; /**/ + } if ((SWITCH_POSITION_DINGWEI == curPosition) || (SWITCH_POSITION_FANWEI == curPosition)) {/* zt ɾش 2022-02-15 */ @@ -969,21 +978,20 @@ void SetSingleSwitchCurPosition(const UINT16 switchId, const UINT8 curPosition) /*ʼʱ*/ SetSwitchMoveStartCycNum(switchId,0u); - SetSwitchDrivedFlag(switchId, SWITCH_DRIVED_FLAG_NO); + if(((SWITCH_POSITION_DINGWEI == curPosition) && (SWITCH_DRIVE_POS_DINGWEI == SwitchDataStru[bufIndex].switchLastValidDrvPos)) + || ((SWITCH_POSITION_FANWEI == curPosition) && (SWITCH_DRIVE_POS_FANWEI == SwitchDataStru[bufIndex].switchLastValidDrvPos))) + { + /*һλú͵ǰλͬΪ*/ + SetSwitchDrivedFlag(switchId, SWITCH_DRIVED_FLAG_NO); + } + else + { + ; + } } else if ((SWITCH_POSITION_SIKAI == curPosition) || (SWITCH_POSITION_MOVE == curPosition)) { - if (0U < SwitchDataStru[bufIndex].SwitDriveStartCycNum) - { - /*־*/ - SetSwitchDrivedFlag(switchId,SWITCH_DRIVED_FLAG_YES); - } - else - { - ; /**/ - } - moveTimeState = SystemOverTimeCheck(GetSwitchMoveStartCycNum(switchId), GetSystemParaSwitchMoveCyc()); if (moveTimeState == CI_TIME_NO) { @@ -2739,7 +2747,7 @@ UINT32 GetSwitchCollTolerateCycNum(const UINT16 switchId) { retVal = SwitchDataStru[bufIndex].SwitchCollTolerateCycNum; } - return(retVal); + return retVal; } /* @@ -2774,5 +2782,35 @@ UINT8 GetSwitchCollPos(const UINT16 switchId) { retVal = SwitchDataStru[bufIndex].SwitchColPosition; } - return(retVal); + return retVal; +} + +/* +* ûͨCIָIDķ״̬ +* ˵const UINT16 switchId ID +* const UINT8 lockStatus ״̬ +* ֵ +* Created By LQ 2025.05.27 +*/ +void SetHlhtCiSwitchPlockStatus(const UINT16 switchId, const UINT8 lockStatus) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + + if (SWITCH_SUM_MAX > bufIndex) + { + if ((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_NO == lockStatus)) + { + SwitchDataStru[bufIndex].LockStatus = lockStatus; + } + else + { + /*״̬Ƿ*/ + } + } + else + { + /*IDǷ*/ + } } diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h index 94c8c69..7010824 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h @@ -679,6 +679,15 @@ void SetSwitchCollPos(const UINT16 switchId, const UINT8 chSwitchColpos); */ UINT8 GetSwitchCollPos(const UINT16 switchId); +/* +* ûͨCIָIDķ״̬ +* ˵const UINT16 switchId ID +* const UINT8 lockStatus ״̬ +* ֵ +* Created By LQ 2025.05.27 +*/ +void SetHlhtCiSwitchPlockStatus(const UINT16 switchId, const UINT8 lockStatus); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h index 1db219f..26e5d10 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h @@ -141,5 +141,9 @@ #define COLLTOLERATE_CYCNUM 2U /*ɼ*/ +#define SEND_CIM_COLLTOLERATE_DW 0x55u /*λ*/ +#define SEND_CIM_COLLTOLERATE_FW 0xAAu /*λ*/ +#define SEND_CIM_COLLTOLERATE_NO 0xffu /*޲*/ + #endif diff --git a/TSCP/src/APP/ciapp/System/CiSystemDefine.h b/TSCP/src/APP/ciapp/System/CiSystemDefine.h index 24b43d8..674c207 100644 --- a/TSCP/src/APP/ciapp/System/CiSystemDefine.h +++ b/TSCP/src/APP/ciapp/System/CiSystemDefine.h @@ -90,6 +90,7 @@ #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) /*̵*/ @@ -151,6 +152,7 @@ #define CI_UNLOCK_OVERLAP_REQURE ((UINT8)0x02) /*CTʱ뱣ν*/ #define CI_CHECK_LEN_ERROR ((UINT8)0x4) /*У*/ #define CI_ERROR_QXZC ((UINT8)0x05) /*˽·ʱȡղ̵µµRouteExceptLastSecOccuClearCheckʧ*/ +#define CI_OVERLAP_OCC_UNLOCK ((UINT8)0x06) /*ռִ*/ /*----------Common----------*/ #define CI_TRUE ((UINT8)0x55) /*سɹ*/ @@ -220,6 +222,11 @@ #define CI_ALL_SNOW_VALID ((UINT8)0x55) /*ȫѩģʽЧ*/ #define CI_ALL_SNOW_UNVALID ((UINT8)0xAA) /*ȫѩģʽЧ*/ +/*ʪģʽȼ*/ +#define CI_SNOW_LEVEL_DEFAULT ((UINT8)0x00) /*Ĭֵʪ/ѩģʽΪѩģʽ*/ +#define CI_SNOW_LEVEL_ONE ((UINT8)0x01) /*ʪһ*/ +#define CI_SNOW_LEVEL_TWO ((UINT8)0x02) /*ʪ*/ + /*ȫѩģʽ*/ #define CI_ITE_LINE_CUT_VALID ((UINT8)0x55) /*гITE*/ #define CI_ITE_LINE_CUT_INVALID ((UINT8)0xAA) /*ʹITE*/ @@ -244,7 +251,7 @@ #define COMM_TRAIN_TEST_DEV_STATE_VALID ((UINT8)0x55) /*豸״̬Ч*/ #define COMM_TRAIN_TEST_DEV_STATE_INVALID ((UINT8)0xAA) /*豸״̬Ч*/ -#define VOBC_SUM_MAX 100U /*豸IDΪ1ֽڣĿǰVOBC100*/ +#define VOBC_SUM_MAX 255U /*豸IDΪ1ֽڣУidС255*/ #define VOBC_BACKUP_SUM_MAX 256U /*ĿǰͨVOBC255*/ #define ITE_SUM_MAX ((UINT8)VOBC_SUM_MAX) /*ITEֵ*/ diff --git a/TSCP/src/APP/ciapp/System/SystemConfigDefine.h b/TSCP/src/APP/ciapp/System/SystemConfigDefine.h index a71feb5..127c74b 100644 --- a/TSCP/src/APP/ciapp/System/SystemConfigDefine.h +++ b/TSCP/src/APP/ciapp/System/SystemConfigDefine.h @@ -59,10 +59,10 @@ /*V13.0汾ݽṹ 2018.8.3*/ /*汾*/ -#define VER_MAIN_SUBCI_CI_CID ((UINT8)19) /*ϵͳ汾*/ +#define VER_MAIN_SUBCI_CI_CID ((UINT8)22) /*ϵͳ汾*/ #define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*ϵͳӰ汾*/ -#define VER_BRUNCH_CI_CID ((UINT8)0) /*֧汾..........0....֧1 2 */ -#define VER_RETURN_SUBCI_CI_CID ((UINT8)2) /*ϵͳع汾*/ +#define VER_BRUNCH_CI_CID ((UINT8)2) /*֧汾..........0....֧1 2 */ +#define VER_RETURN_SUBCI_CI_CID ((UINT8)1) /*ϵͳع汾*/ #ifdef SCADE_MODE /*SCADE汾*/ @@ -75,14 +75,14 @@ /*д汾*/ #define VER_SOFT_PRODUCT ((UINT8)40) /*Ʒ*/ #define VER_SOFT_MODUAL_APP ((UINT8)1) /*ģ*/ -#define VER_SOFT_MIANVERSION ((UINT8)19) /*汾*/ -#define VER_SOFT_SUBVERSION ((UINT8)3) /*Ӱ汾*/ +#define VER_SOFT_MIANVERSION ((UINT8)22) /*汾*/ +#define VER_SOFT_SUBVERSION ((UINT8)8) /*Ӱ汾*/ #endif /*ɼݵĹݽṹ汾*/ #define VER_1_PUBLIC_FS_1 ((UINT8)30) -#define VER_1_PUBLIC_FS_2 ((UINT8)14) +#define VER_1_PUBLIC_FS_2 ((UINT8)21) #define VER_1_PUBLIC_FS_3 ((UINT8)0) #define VER_1_PUBLIC_FS_4 ((UINT8)0) @@ -91,15 +91,15 @@ #define VER_2_PUBLIC_FS_3 ((UINT8)0) #define VER_2_PUBLIC_FS_4 ((UINT8)0) -#define VER_3_PUBLIC_FS_1 ((UINT8)0xFF) -#define VER_3_PUBLIC_FS_2 ((UINT8)0xFF) -#define VER_3_PUBLIC_FS_3 ((UINT8)0xFF) -#define VER_3_PUBLIC_FS_4 ((UINT8)0xFF) +#define VER_3_PUBLIC_FS_1 ((UINT8)28) +#define VER_3_PUBLIC_FS_2 ((UINT8)0) +#define VER_3_PUBLIC_FS_3 ((UINT8)0) +#define VER_3_PUBLIC_FS_4 ((UINT8)14) /*ɼݵ˽ݽṹ汾*/ -#define VER_1_PRIVATE_FS_1 ((UINT8)39) -#define VER_1_PRIVATE_FS_2 ((UINT8)0) +#define VER_1_PRIVATE_FS_1 ((UINT8)44) +#define VER_1_PRIVATE_FS_2 ((UINT8)1) #define VER_2_PRIVATE_FS_1 ((UINT8)0xFF) #define VER_2_PRIVATE_FS_2 ((UINT8)0xFF) @@ -108,7 +108,7 @@ #define VER_3_PRIVATE_FS_2 ((UINT8)0xFF) /*ɼOCݽṹ汾*/ -#define VER_1_OCDATA_FS_1 ((UINT8)27) /*oc 3.0 ݰ汾*/ +#define VER_1_OCDATA_FS_1 ((UINT8)29) /*oc 3.0 ݰ汾*/ #define VER_1_OCDATA_FS_2 ((UINT8)0) #define VER_2_OCDATA_FS_1 ((UINT8)24) /*oc 2.1.6*/ diff --git a/TSCP/src/APP/ciapp/System/SystemParameterManage.c b/TSCP/src/APP/ciapp/System/SystemParameterManage.c index 0f93563..7e96388 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.c +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.c @@ -28,6 +28,7 @@ static UINT8 LocalRcWorkMode = 0u; /* RC static UINT8 gLocalRcLinkLineAttr = 0u; /* RC */ UINT8 gLocalOcType = 0u; /*OCݽṹ*/ +UINT8 gLocalPublicDataType = 0u; /*ͣ28.0.0.11¹ݽṹʹã*/ SystemParameterStructNew SystemParameterStruNew;/*ϵͳ*/ @@ -108,6 +109,7 @@ UINT32 dwSelfCancelButErrTriggerCount = 0U; /* UINT16 wArbNearSecProtectDistance = 0U; /*ARB*/ UINT32 dwArbNearSecNoUtCount = 0U; /*ARBʱ*/ UINT32 dwNonReturnBtnErrEnsureTime = 0U;/*۷ťж*/ +UINT32 dwOcCollTolerateCount = 0U; /*OCɼ*/ UINT8 gCTFlyingRedunCount = 0u; UINT16 StationTrackDistance = 0U; /*-վ̨׷ʱг루cm*/ UINT32 LineMinTrainLength = 0U; /*-·С*/ @@ -326,6 +328,9 @@ void SystemParaTimeToCycleCount(void) 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*/ } /* @@ -1335,7 +1340,9 @@ UINT8 CheckTiocPublicFsVersion(UINT8* pSrcFsVersion) if (NULL != pSrcFsVersion) { - /*ѯݽṹ汾Ƿڿɼݵİ汾*/ + SetLocalPublicDataType(DATA_TYPE_NEW); + /*ѯݽṹ汾Ƿڿɼݵİ汾 + 28.0.0.14汾ֻ֧õݽṹ VER_3_PUBLIC*/ if ((VER_1_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_1_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_1_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_1_PUBLIC_FS_4 == pSrcFsVersion[3])) { retVal = CI_SUCCESS; @@ -1346,6 +1353,7 @@ UINT8 CheckTiocPublicFsVersion(UINT8* pSrcFsVersion) } else if ((VER_3_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_3_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_3_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_3_PUBLIC_FS_4 == pSrcFsVersion[3])) { + SetLocalPublicDataType(DATA_TYPE_OLD); retVal = CI_SUCCESS; } else @@ -1413,11 +1421,11 @@ UINT8 CheckTiocOcFsVersion(UINT8* pSrcFsVersion) /*ѯOCݽṹ汾Ƿڿɼݵİ汾*/ if ((VER_1_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_1_OCDATA_FS_2 == pSrcFsVersion[1])) { - retVal = SetLocalOcPattern(OC_DATA_TYPE_NEW); + retVal = SetLocalOcPattern(DATA_TYPE_NEW); } else if ((VER_2_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_2_OCDATA_FS_2 == pSrcFsVersion[1])) { - retVal = SetLocalOcPattern(OC_DATA_TYPE_OLD); + retVal = SetLocalOcPattern(DATA_TYPE_OLD); } else { @@ -2347,6 +2355,20 @@ UINT16 GetTiocSystemParameterData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDa { ;/* ޴ */ } + + /* OCɼ */ + wTmpLen = 1U + wTmpConfigDataSum; + if (wBufMaxLen >= wTmpLen) + { + pConfigDataAdderBuf[wTmpConfigDataSum] = &dwOcCollTolerateCount; + pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32); + wTmpConfigDataSum++; + } + else + { + ;/* ޴ */ + } + /* ci-ocϵ */ wTmpLen = 1u + wTmpConfigDataSum; if (wBufMaxLen >= wTmpLen) @@ -2782,7 +2804,7 @@ OtherCiParaStruct GetOtherCiPara(const UINT8 chOtherCiId) } /* -* ȡCվBUTǿ׷ٹܿ +* ȡCվBUTʱ׷ٹܿ * ˵ * ֵaaر 55 * by cgh 20240815 @@ -2835,7 +2857,7 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern) { UINT8 rtn = CI_ERROR; /*ֵ*/ - if ((OC_DATA_TYPE_NEW == localOcPattern) || (OC_DATA_TYPE_OLD == localOcPattern)) + if ((DATA_TYPE_NEW == localOcPattern) || (DATA_TYPE_OLD == localOcPattern)) { gLocalOcType = localOcPattern; rtn = CI_SUCCESS; @@ -2850,7 +2872,7 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern) * ֵ0x55 °汾 0xaa Ͼɰ汾 * Create: fan 20250210 */ -UINT8 GetLocalOcPattern() +UINT8 GetLocalOcPattern(void) { return gLocalOcType; } @@ -2886,4 +2908,40 @@ UINT8 SetLocalRcLinkLineAttr(UINT8 cLinkLineAttr) UINT8 GetLocalRcLinkLineAttr(void) { return gLocalRcLinkLineAttr; +} + +/* +* õǰݰ汾 +* ˵ݰ汾 +* ֵɹ CI_SUCCESS ʧCI_ERROR +* Create: fan 20250521 +*/ +void SetLocalPublicDataType(UINT8 localPublicData) +{ + if ((DATA_TYPE_NEW == localPublicData) || (DATA_TYPE_OLD == localPublicData)) + { + gLocalPublicDataType = localPublicData; + } +} + +/* +* ȡǰݰ汾 +* ˵ +* ֵ0x55 °汾 0xaa Ͼɰ汾 +* Create: fan 20250521 +*/ +UINT8 GetLocalPublicDataType(void) +{ + return gLocalPublicDataType; +} + +/* +* ȡOCɼ +* ˵void +* ֵOCɼ +* Created By LQ 2025.06.30 +*/ +UINT32 GetOcCollTolerateCount(void) +{ + return dwOcCollTolerateCount; } \ 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 822edb1..92f6d4b 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.h +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.h @@ -34,6 +34,7 @@ extern "C" { #define CHECK_SWITCH_LOCKING_BEFORE_LOCKING_SWITCH_CONF ((UINT8)3) /*ʱ*/ #define CHECK_SWITCH_DANLOCK_FLOCKING_SWITCH_CONF ((UINT8)4) /*ʱ*/ #define VOBC_INTERFACE_IDENTITY ((UINT8)5) /*VOBCӿͱʶ1ΪFAO2Ϊͨ*/ +#define FUNC_OC_INTERFACE_CONF ((UINT8)7) /*OCӿڱʶ1ΪOC200-2.1.92ΪOC200-3.23ΪOC200-3.2֮汾4ΪOC300-1.0.1֮汾*/ #define SCX_CLD_INTERFACE_TYPE ((UINT8)8) /*Գ복νӿͱʶ0x55Ϊ̵ӿڣ0xAAΪͨŽӿ*/ #define LINE_RAILWAY_TYPE_CONF ((UINT8)9) /*·ͱʶ0x55Ϊǹ콻ͨ0xAAΪ콻ͨ*/ #define DISTRIBUTED_IO_ENABLE_INDEX ((UINT8)10) /*ܿ10Ƿ÷ֲʽIO*/ @@ -92,6 +93,10 @@ extern "C" { #define FUNC_ZQX_CHECK_HUMID_RAIL ((UINT8)63) /*ȡǷ·ʼźŻʪ췶Χ(0xAAȡʪģʽ״̬ 0x55أȡʪģʽ״̬)*/ #define FUNC_AXIS_COMM_BAD_KEEP_CBTC ((UINT8)64) /*ϵͳͨжϺǷܹάCBTC(0xAAǣ 0x55)*/ #define FUNC_INIT_XIANDI_HAVE_POWER ((UINT8)65) /*ϵʼֵǷȨ(0x55:޿Ȩ;0xAA:пȨ)*/ +#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)/*ʵվ */ @@ -166,10 +171,12 @@ extern "C" { #define ARB_CHECK_ALXE_SEC_LEN (70U) /*ARBμ᳤(M)*/ #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 FUNC_SWITCH_ON ((UINT8)0xAA) /*ÿش*/ #define FUNC_SWITCH_OFF ((UINT8)0x55) /*ÿعر*/ #define FUNC_SWITCH_UNDEF ((UINT8)0xFF) /*ÿδ*/ +#define FUNC_SWITCH_ESB_NINGXIANG_RAIL ((UINT8)0x5A) /*ESB·*/ #define LINE_FAO ((UINT8)0x01) /*·ΪFAO*/ #define LINE_HLHT ((UINT8)0x02) /*·Ϊͨ*/ #define LINE_FAOHLHT ((UINT8)0x03) /*·ΪFAO+ͨ»*/ @@ -181,6 +188,7 @@ extern "C" { #define SCX_CLD_SERIAL_PORT_COMM ((UINT8)0x5A) /*Գ복βôڽӿ*/ #define SCX_NONELOCAL_MODE ((UINT8)0xA5) /*Գ*/ + #define UP_VALID ((UINT8)0x55) /*۳̵Ч*/ #define DOWN_VALID ((UINT8)0xaa) /*۳̵Ч*/ @@ -208,8 +216,13 @@ extern "C" { #define FUNC_OVERLAP_LOCK_BY_ATS ((UINT8)0x01) /*ATSձ*/ #define FUNC_OVERLAP_LOCK_BY_CI ((UINT8)0x02) /*ձ*/ -#define OC_DATA_TYPE_NEW ((UINT8)0x55u) /*OCݽṹ__OC3.0 ݽṹ26.0*/ -#define OC_DATA_TYPE_OLD ((UINT8)0xAAu) /*ݵOCݽṹ_OC2.1.6 ݽṹ24.0*/ +#define DATA_TYPE_NEW ((UINT8)0x55u) /*ݽṹ__OC3.2 ݽṹ¹ݽṹ30.X*/ +#define DATA_TYPE_OLD ((UINT8)0xAAu) /*ݵOCݽṹ_򺼵ݽṹ28.0.0.X*/ + +#define OC200_VER2_1_9 ((UINT8)0x01u)/*ܿ7Ϊ1OC200 2.1.9ӿ*/ +#define OC200_VER3_2 ((UINT8)0x02u)/*ܿ7Ϊ2OC200 3.2ӿ*/ +#define OC200_VER3_2_AFTER ((UINT8)0x03u)/*ܿ7Ϊ3OC200 3.2汾Ժӿ*/ +#define OC300_VER1_0_1_ANDAFTER ((UINT8)0x04u)/*ܿ7Ϊ4OC300 1.0.1汾Ժӿ*/ #define RC_LINK_LINE_YES ((UINT8)0x55U) /*߱*/ #define RC_LINK_LINE_NO ((UINT8)0xAAU) /*߱*/ @@ -387,6 +400,8 @@ typedef struct S_CI_OC_Relation extern UINT8 LocalCiId; /*ID*/ extern SystemParameterStructNew SystemParameterStruNew;/*ϵͳ*/ extern DquCiFuncSwitchStructNew CiFuncSwitConfStruNew[CI_FUNCTION_SWITCH_SUM_MAX];/*ܿؽṹ*/ +extern UINT8 gLocalOcType; /*OCݽṹ*/ +extern UINT8 gLocalPublicDataType; /*ͣ28.0.0.11¹ݽṹʹã*/ extern UINT32 StartUnlockCount; /*ϵ (ʼֶ)*/ extern UINT32 RouteXuanPaiCount; /*·ѡų (ʼֶ)*/ extern UINT32 RouteLockCount; /*·ճ (ʼֶ)*/ @@ -460,6 +475,7 @@ extern UINT32 dwSelfCancelButErrTriggerCount; /* extern UINT16 wArbNearSecProtectDistance; /*ARB*/ extern UINT32 dwArbNearSecNoUtCount; /*ARBʱ*/ extern UINT32 dwNonReturnBtnErrEnsureTime; /*۷ťж*/ +extern UINT32 dwOcCollTolerateCount; /*OCɼ*/ extern UINT8 gCTFlyingRedunCount; extern CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci ocϵ*/ @@ -1360,7 +1376,7 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern); * ֵ0x55 °汾 0xaa Ͼɰ汾 * Create: fan 20250210 */ -UINT8 GetLocalOcPattern(); +UINT8 GetLocalOcPattern(void); /* * ܣRC @@ -1377,6 +1393,30 @@ UINT8 SetLocalRcLinkLineAttr(UINT8 cLinkLineAttr); */ UINT8 GetLocalRcLinkLineAttr(void); +/* +* õǰݰ汾 +* ˵ݰ汾 +* ֵɹ CI_SUCCESS ʧCI_ERROR +* Create: fan 20250521 +*/ +void SetLocalPublicDataType(UINT8 localPublicData); + +/* +* ȡǰݰ汾 +* ˵ +* ֵ0x55 °汾 0xaa Ͼɰ汾 +* Create: fan 20250521 +*/ +UINT8 GetLocalPublicDataType(void); + +/* +* ȡOCɼ +* ˵void +* ֵOCɼ +* Created By LQ 2025.06.30 +*/ +UINT32 GetOcCollTolerateCount(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c index fc79fc2..e8e28c9 100644 --- a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c +++ b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c @@ -25,10 +25,36 @@ static void EaCmdProc(void); /** * @brief ɢ * @param chIndex +* @param chType * @return CI_ERRORʧܣCI_SUCCESSɹ +* edit cgh 20250527 */ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType); +/** +* @brief ӷ +* @param chEaIndex +* @param wAxisSecId ID +* @param chType +* @param wTrainId ɢгID +* @param chEaconfigId +* @return CI_ERROR ʧ +* CI_SUCCESS ɹ +* BY CGH 20250527 +*/ +static UINT8 AddEaAxisSec(UINT8 chEaIndex, UINT16 wAxisSecId, UINT8 chType, UINT16 wTrainId, UINT8 chEaconfigId); + +/** +* @brief Ƿ +* @param const UINT16 wAcId α +* @param const UINT16 wSpecialEaId +* @return UINT8_MAX 쳣 +* CI_ERROR ڲ +* CI_SUCCESS Ҫڲ +* by cgh 20250818 +*/ +static UINT8 CheckAddSpecialEaAxis(const UINT16 wAcId, const UINT16 wSpecialEaId); + /** * @brief ȡͨųijһɢгǷͬ⽨ * @param wEaTrainId ɢгID @@ -38,13 +64,17 @@ static UINT8 GetAllCtTrainAgreeSetEva(UINT16 wEaTrainId); /** * @brief ɢгߡɢԵ +* @param chType * @param wTrainId ɢгID * @param pMidLine ɢг߹ * @param pMinEdge ɢС * @param pMaxEdge ɢ +* @param pEaconfigId ɢ +* @param wSpecialEaId * @return CI_ERROR ʧ CI_SUCCESS ɹ +* edit cgh 20250310 */ -static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UINT8 * pEaOut, UINT32 * pMidLine, UINT32 * pMinEdge, UINT32 * pMaxEdge, UINT8* pEaconfigId); +static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UINT8* pEaOut, UINT32* pMidLine, UINT32* pMinEdge, UINT32* pMaxEdge, UINT8* pEaconfigId, UINT16* wSpecialEaId); /** * @brief ѯվһ䲻վ̨ķڵվ̨ @@ -158,6 +188,33 @@ static UINT8 EaIsLinkSeqAllLocal(UINT8 chEaIndex); */ static UINT8 PaGetIndex(const UINT16 wTrainId, const UINT8 chType); +/** +* @brief Ƿȫ +* @param wTrainId ɢгID +* @param UINT16* wSpecialEaId ID +* @return CI_ERROR ȫ CI_SUCCESS ȫ +* edit cgh 20250818 +*/ +static UINT8 CalcSpecialEa(const UINT16 wTrainId, UINT16* wSpecialEaId); + +/** +* @brief ѯǰlinklinkĿǰڳжϣ +* @param struct_PathPoint pPoint ǰlinkϢ +* @param UINT8 chDirection ѯ +* @param UINT32 dwSearchLen ѯ +* @return CI_SUCCESS ͨ CI_ERROR ʧ +* BY CGH 20250818 +*/ +static UINT8 EaFindLinkAdjacentLinkID(struct_PathPoint pPoint, UINT8 chDirection, UINT32 dwSearchLen); + +/** +* @brief ȡ +* @param const UINT16 wAcId α +* @return +* by cgh 20250826 +*/ +static UINT16 GetAxisSpecialEaId(const UINT16 wAcId); + /** * @brief ʼ * @param @@ -314,7 +371,7 @@ UINT8 EaConfigInit(void) if (CI_SUCCESS == chRtn) { chStationFlag = IsLinkPlatform(wAdjacentLinkId); - if (CI_SUCCESS == chStationFlag) + if ((CI_SUCCESS == chStationFlag) && (EA_BD_LINK_SUM_MAX > g_szEaConfig[wIndex].chStartStationLinkSum)) { /*ڣµLINK*/ g_szEaConfig[wIndex].wSzStartStationLinkId[g_szEaConfig[wIndex].chStartStationLinkSum] = wAdjacentLinkId; @@ -354,7 +411,7 @@ UINT8 EaConfigInit(void) if (CI_SUCCESS == chRtn) { chStationFlag = IsLinkPlatform(wAdjacentLinkId); - if (CI_SUCCESS == chStationFlag) + 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++; @@ -711,6 +768,7 @@ static void EaCmdProc(void) * @param chIndex * @param chType * @return CI_ERRORʧܣCI_SUCCESSɹ +* edit cgh 20250527 */ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) { @@ -737,25 +795,22 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) UINT8 chPlatformFlag = 0u; UINT16 wLinkTioc = 0u; UINT8 chLocalId = 0u; - UINT8 chAcBelongCiId = 0; /*ID*/ - UINT8 chAcBelongCiType = 0; /**/ - UINT16 wEaMode = 0u; UINT32 dwKmTmpMin = 0u; UINT32 dwKmTmpMax = 0u; UINT8 dwEaConfigId = 0u; - UINT8 chAxisSecAddFlag = CI_ERROR;/*Ƿ־*/ UINT16 wAxisBelLinkId = 0U;/*LINK ID*/ UINT16 wEaConfigIndex = 0U;/**/ + UINT8 chAxisBelCiIdCheck = 0U; /**/ + UINT8 chAcBelongCiId = 0U; /*ID*/ + UINT8 chAxisSecAddFlag = CI_ERROR;/*Ƿ־*/ + UINT16 wSpecialEaId = 0U;/**/ chLocalId = GetSystemParaLocalCiId(); /* ȡID */ wTrainId = GetEvacuatingTrainIdByIndex(chEaIndex); /* ȡӦɢгID */ /* ߡ߽繫 */ - rtnValue = EaGetMidLineAndEdgeKm(chType, wTrainId, &chEaOut, &dwKmTemp, &dwKm2, &dwKm1, &dwEaConfigId); - - /* ȡɢ */ - wEaMode = GetSystemParaValue(EA_MODE_ID); + rtnValue = EaGetMidLineAndEdgeKm(chType, wTrainId, &chEaOut, &dwKmTemp, &dwKm2, &dwKm1, &dwEaConfigId,&wSpecialEaId); if (CI_SUCCESS == rtnValue) { @@ -898,6 +953,11 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) } } + else if (EA_OUT_SEVEN == chEaOut) + { + /*ʵʴ*/ + ; + } else { chCalFlag = FLAG_UNSET; @@ -905,38 +965,12 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) if (FLAG_SET == chCalFlag) { - /*ȥ*/ - for (chIndex = 0u; chIndex < g_szEaData[chEaIndex].strAcInfo.chObjNum; chIndex++) - { - /*ǷѾ¼*/ - if (g_szEaData[chEaIndex].strAcInfo.szObjId[chIndex] == g_szEaAcConfig[wAcIndex].AxisSectionId) - { - break; - } - else - { - ; - } - } - /*ûм¼*/ - if (g_szEaData[chEaIndex].strAcInfo.chObjNum == chIndex) - { - /*жϸüǷԳ*/ - chAcBelongCiId = (UINT8)GetAxisBelongTiocAllLine(g_szEaAcConfig[wAcIndex].AxisSectionId); - chAcBelongCiType = GetCiType(chAcBelongCiId);/*ȡǰ*/ - /*ҪݹܿжǷн*/ - chAxisSecAddFlag = AxisSecAddProAreaCheck(g_szEaAcConfig[wAcIndex].AxisSectionId, chType, wTrainId); + /*ӹ귶Χڵļ*/ + rtnValue = AddEaAxisSec(chEaIndex, g_szEaAcConfig[wAcIndex].AxisSectionId, chType, wTrainId, dwEaConfigId); - if (((CI_TYPE_ZX == chAcBelongCiType) || (CI_TYPE_SCX == chAcBelongCiType)) && (CI_SUCCESS == chAxisSecAddFlag)) - { - g_szEaData[chEaIndex].strAcInfo.szObjId[g_szEaData[chEaIndex].strAcInfo.chObjNum] = g_szEaAcConfig[wAcIndex].AxisSectionId; - g_szEaData[chEaIndex].strAcInfo.chObjNum++; - g_szEaData[chEaIndex].chEaConfigId = dwEaConfigId; - } - else - { - /*߻ԳӼ*/ - } + if (CI_ERROR == rtnValue) + { + break; } else { @@ -949,13 +983,67 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) } } - if (EA_SECTION_MAX_NUM < g_szEaData[chEaIndex].strAcInfo.chObjNum) + + } + + if (CI_SUCCESS == rtnValue) + { + if (0U == wSpecialEaId) { - rtnValue = CI_ERROR; + /*ȫߣҪ佨*/ + /* ļ */ + for (chEaAcIndex = 0u; chEaAcIndex < g_szEaData[chEaIndex].strAcInfo.chObjNum; chEaAcIndex++) + { + wSpecialEaId = GetAxisSpecialEaId(g_szEaData[chEaIndex].strAcInfo.szObjId[chEaAcIndex]); + + if (0U != wSpecialEaId) + { + break; + } + else + { + ; /**/ + } + } } else { - ; + ; /*ѾID*/ + } + + if (0U != wSpecialEaId) + { + /*߱ԲпΪ*/ + for (wAcIndex = 0U; wAcIndex < g_eaAcConfigNum; wAcIndex++) + { + chAxisSecAddFlag = CheckAddSpecialEaAxis(g_szEaAcConfig[wAcIndex].AxisSectionId, wSpecialEaId); + + if (CI_SUCCESS == chAxisSecAddFlag) + { + rtnValue = AddEaAxisSec(chEaIndex, g_szEaAcConfig[wAcIndex].AxisSectionId, chType, wTrainId, dwEaConfigId); + } + else if (CI_ERROR == chAxisSecAddFlag) + { + ; /**/ + } + else + { + rtnValue = CI_ERROR; /*쳣*/ + } + + if (CI_ERROR == rtnValue) + { + break; + } + else + { + ; + } + } + } + else + { + ; /*Ӳ*/ } } @@ -1079,7 +1167,7 @@ static UINT8 EvacuationAreaCalcu(UINT8 chEaIndex, const UINT8 chType) { debug_infor_printf((const)"Train:%x PaType = %x\n", wTrainId, g_szEaData[chEaIndex].chPaType); - debug_infor_printf((const)"Train:%x pMidLine = %d pMinEdge = %d pMaxEdge = %d\n", wTrainId,dwKmTemp,dwKm2,dwKm1); + debug_infor_printf((const)"Train:%x pMidLine = %u pMinEdge = %u pMaxEdge = %u\n", wTrainId,dwKmTemp,dwKm2,dwKm1); debug_infor_printf((const)"Train:%x PaAcSeq:num = %d\n", wTrainId, g_szEaData[chEaIndex].strAcInfo.chObjNum); for (chEaAcIndex = 0U; chEaAcIndex < g_szEaData[chEaIndex].strAcInfo.chObjNum; chEaAcIndex++) @@ -1320,10 +1408,12 @@ static UINT8 GetAllCtTrainAgreeSetEva(UINT16 wEaTrainId) * @param pMidLine ɢг߹ * @param pMinEdge ɢС * @param pMaxEdge ɢ +* @param pEaconfigId ɢ +* @param wSpecialEaId * @return CI_ERROR ʧ CI_SUCCESS ɹ * edit cgh 20250310 */ -static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UINT8 * pEaOut, UINT32 * pMidLine, UINT32 * pMinEdge, UINT32 * pMaxEdge, UINT8 * pEaconfigId) +static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UINT8 * pEaOut, UINT32 * pMidLine, UINT32 * pMinEdge, UINT32 * pMaxEdge, UINT8 * pEaconfigId, UINT16* wSpecialEaId) { UINT16 wMaxHeadLink = 0u; UINT32 dwMaxHeadOff = 0u; @@ -1335,7 +1425,7 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI UINT16 wEaMode = 0u; UINT16 wEaStationMode = 0u; UINT8 chTrainDir_Maxhead = 0u; /*гǰΪ׼*/ - UINT8 chTrainDir_outTail = 0u; /*βķ򣬴ǰȡ*/ + UINT8 chTrainDir_outTail = 0u; /*βķСȡ*/ UINT32 dwFrontDis = 0u; UINT32 dwBehindDis = 0u; UINT32 dwKm1 = 0u; /*ͷɢԵ*/ @@ -1355,13 +1445,15 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI UINT32 wMinTailLinkTmnlPointKm = 0u; /*βյ㹫*/ UINT16 wBasicLinkId = 0U;/*׼LINK ID*/ UINT8 chConfigLinkIndex = 0U;/*LINK*/ - + UINT8 chCalcSpecialEa = 0U;/**/ + /* ȡгλ */ wMaxHeadLink = GetTrainMaxHeadLink(wTrainId); dwMaxHeadOff = GetTrainMaxHeadOffset(wTrainId); wMinTailLink = GetTrainMinTailLink(wTrainId); dwMinTailOff = GetTrainMinTailOffset(wTrainId); chTrainDir_Maxhead = GetTrainDir_MaxHead(wTrainId); + chTrainDir_outTail = GetTrainDir(wTrainId); wACOfMaxSafeHeadLoc = elm_PrepareACOfMaxSafeHeadLoc(wTrainId); /*ȡID*/ wACOfMinSafeTailLoc = elm_PrepareACOfMinSafeTailLoc(wTrainId); @@ -1411,56 +1503,65 @@ static UINT8 EaGetMidLineAndEdgeKm(const UINT8 chType, const UINT16 wTrainId, UI 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))) { - /* ȡɢΧ */ - dwFrontDis = GetEaFrontDis(); - dwBehindDis = GetEaBehindDis(); - chTrainDir_outTail = ConvertTrainDir(chTrainDir_Maxhead); /*ǰȡ*/ - - /*ͷ*/ - if (DIR_SAME == chTrainDir_Maxhead) - {/*ͷشǰۼ*/ - dwKm1 = dwMaxHeadKm + dwFrontDis; - } - else if (DIR_CONVERT == chTrainDir_Maxhead) - {/*ͷشǰۼ*/ - if (dwMaxHeadKm >= dwFrontDis) - { - dwKm1 = dwMaxHeadKm - dwFrontDis; - } - else - { - dwKm1 = 0u; - } + chCalcSpecialEa = CalcSpecialEa(wTrainId,wSpecialEaId); + if (CI_SUCCESS == chCalcSpecialEa) + { + *pEaOut = EA_OUT_SEVEN; + *pMidLine = UINT32_MAX; } else { - chRtn = CI_ERROR; - } + /* ȡɢΧ */ + dwFrontDis = GetEaFrontDis(); + dwBehindDis = GetEaBehindDis(); + chTrainDir_outTail = ConvertTrainDir(chTrainDir_outTail); /*Сȡ*/ - /*β*/ - if (DIR_SAME == chTrainDir_outTail) - {/*βسβⷽۼ*/ - dwKm2 = dwMinTailKm + dwBehindDis; - } - else if (DIR_CONVERT == chTrainDir_outTail) - {/*βسβⷽۼ*/ - if (dwMinTailKm >= dwBehindDis) - { - dwKm2 = dwMinTailKm - dwBehindDis; + /*ͷ*/ + if (DIR_SAME == chTrainDir_Maxhead) + {/*ͷشǰۼ*/ + dwKm1 = dwMaxHeadKm + dwFrontDis; + } + else if (DIR_CONVERT == chTrainDir_Maxhead) + {/*ͷشǰۼ*/ + if (dwMaxHeadKm >= dwFrontDis) + { + dwKm1 = dwMaxHeadKm - dwFrontDis; + } + else + { + dwKm1 = 0u; + } } else { - dwKm2 = 0u; + chRtn = CI_ERROR; } - } - else - { - chRtn = CI_ERROR; - } - *pMinEdge = (dwKm1 < dwKm2) ? dwKm1 : dwKm2; - *pMaxEdge = (dwKm1 < dwKm2) ? dwKm2 : dwKm1; - *pEaOut = EA_OUT_ONE; + /*β*/ + 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)) { @@ -2036,7 +2137,7 @@ static void EaAtsCancleFst(void) strCfmFst->chFlag = FLAG_SET; strCfmFst->chTiocId = chLocalId; strCfmFst->chStation = strMsgFst->chStation; - strCfmFst->chIndex = strMsgFst->chIndex; + strCfmFst->wIndex = strMsgFst->wIndex; strCfmFst->dwTime = dwCycle; chRtn = dquHlhtId2VobcName(strMsgFst->dwEaTrainId, &wTrainId, &wTrainLgcId); @@ -2059,7 +2160,7 @@ static void EaAtsCancleFst(void) if (TRAIN_EA_CMD_STATE_INVALID != chEaCmdState) { /* гǰɢ״̬ */ - strCfmFst->chOpStatus = CONFIRM_FIRST_EING; + strCfmFst->chOpStatus = CONFIRM_TRAIN_IN_EA; } else { @@ -2081,8 +2182,8 @@ static void EaAtsCancleFst(void) ii++; szCrcTmp[ii] = strMsgFst->chStation; ii++; - szCrcTmp[ii] = strMsgFst->chIndex; - ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; LongToChar(strMsgFst->dwEaTrainId, &szCrcTmp[ii]); ii += 4u; LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); @@ -2153,7 +2254,7 @@ static void EaAtsCancleSnd(void) strCfmSnd->chFlag = FLAG_SET; strCfmSnd->chTiocId = chLocalId; strCfmSnd->chStation = strMsgSnd->chStation; - strCfmSnd->chIndex = strMsgSnd->chIndex; + strCfmSnd->wIndex = strMsgSnd->wIndex; strCfmSnd->dwTime = dwCycle; if (FLAG_SET != strMsgFst->chFlag) @@ -2168,20 +2269,45 @@ static void EaAtsCancleSnd(void) } else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) || (strMsgSnd->chStation != strMsgFst->chStation) - || (strMsgSnd->chIndex != strMsgFst->chIndex) - || (strMsgSnd->chType != strMsgFst->chType) - || (strMsgSnd->chLine != strMsgFst->chLine)) + || (strMsgSnd->wIndex != strMsgFst->wIndex) + || (strMsgSnd->chType != strMsgFst->chType)) { /* ATS벻һ£δ֪ */ strCfmSnd->chOpStatus = CONFIRM_UNKNOWN; chFlag = FLAG_SET; } + else if (strMsgSnd->chLine != strMsgFst->chLine) + { + /* ·Բһ */ + strCfmSnd->chOpStatus = CONFIRM_EA_SND_LINE_DIFF; + chFlag = FLAG_SET; + } else { /**/ ; } + if (FLAG_UNSET == chFlag) + { + chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwEaTrainId, &wTrainId, &wTrainLgcId); + chEaCmdState = GetTrainEaCmdState(wTrainId); + if (TRAIN_EA_CMD_STATE_INVALID != chEaCmdState) + { + /* гǰɢ״̬ */ + strCfmSnd->chOpStatus = CONFIRM_TRAIN_IN_EA; + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + if (FLAG_UNSET == chFlag) { szCrcTmp[ii] = strMsgSnd->chTiocId; @@ -2209,30 +2335,11 @@ static void EaAtsCancleSnd(void) ; } - if (FLAG_UNSET == chFlag) - { - chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwEaTrainId, &wTrainId, &wTrainLgcId); - chEaCmdState = GetTrainEaCmdState(wTrainId); - if (TRAIN_EA_CMD_STATE_INVALID != chEaCmdState) - { - /* гǰɢ״̬ */ - strCfmSnd->chOpStatus = CONFIRM_FIRST_EING; - chFlag = FLAG_SET; - } - else - { - ; - } - } - else - { - ; - } - ii = 0u; szCrcTmp[ii++] = strMsgSnd->chAtsId; szCrcTmp[ii++] = strMsgSnd->chStation; - szCrcTmp[ii++] = strMsgSnd->chIndex; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; LongToChar(strMsgSnd->dwEaTrainId, &szCrcTmp[ii]); ii += 4u; LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); @@ -2242,6 +2349,7 @@ static void EaAtsCancleSnd(void) szCrcTmp[ii++] = strMsgSnd->chType; szCrcTmp[ii++] = strMsgSnd->chLine; strCfmSnd->dwCrc32 = Tioc_CommonCrc32(szCrcTmp, ii); + if (FLAG_UNSET == chFlag) {/* ͨȷϳɹ */ chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwEaTrainId, &wTrainId, &wTrainLgcId); @@ -2992,7 +3100,7 @@ void DaAtsCancleFst(void) strCfmFst->chFlag = FLAG_SET; strCfmFst->chTiocId = chLocalId; strCfmFst->chStation = strMsgFst->chStation; - strCfmFst->chIndex = strMsgFst->chIndex; + strCfmFst->wIndex = strMsgFst->wIndex; strCfmFst->dwTime = dwCycle; chRtn = dquHlhtId2VobcName(strMsgFst->dwDaTrainId, &wTrainId, &wTrainLgcId); @@ -3036,8 +3144,8 @@ void DaAtsCancleFst(void) ii++; szCrcTmp[ii] = strMsgFst->chStation; ii++; - szCrcTmp[ii] = strMsgFst->chIndex; - ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; LongToChar(strMsgFst->dwDaTrainId, &szCrcTmp[ii]); ii += 4u; LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); @@ -3109,7 +3217,7 @@ void DaAtsCancleSnd(void) strCfmSnd->chFlag = FLAG_SET; strCfmSnd->chTiocId = chLocalId; strCfmSnd->chStation = strMsgSnd->chStation; - strCfmSnd->chIndex = strMsgSnd->chIndex; + strCfmSnd->wIndex = strMsgSnd->wIndex; strCfmSnd->dwTime = dwCycle; if (FLAG_SET != strMsgFst->chFlag) @@ -3124,20 +3232,44 @@ void DaAtsCancleSnd(void) } else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) || (strMsgSnd->chStation != strMsgFst->chStation) - || (strMsgSnd->chIndex != strMsgFst->chIndex) - || (strMsgSnd->chType != strMsgFst->chType) - || (strMsgSnd->chLine != strMsgFst->chLine) - ) + || (strMsgSnd->wIndex != strMsgFst->wIndex) + || (strMsgSnd->chType != strMsgFst->chType)) {/* ATS벻һ£δ֪ */ strCfmSnd->chOpStatus = CONFIRM_DA_SND_UNKNOWN; chFlag = FLAG_SET; } + else if (strMsgSnd->chLine != strMsgFst->chLine) + { + /* ·Բһ */ + strCfmSnd->chOpStatus = CONFIRM_DA_SND_LINE_DIFF; + chFlag = FLAG_SET; + } else { /**/ ; } + if (FLAG_UNSET == chFlag) + { + chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwDaTrainId, &wTrainId, &wTrainLgcId); + chDerailment = GetTrainDerailment(wTrainId); + if (TRAIN_DERAIL_NO != chDerailment) + { + /* гǰѹ״̬ */ + strCfmSnd->chOpStatus = CONFIRM_DA_SND_DERAIL; + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + if (FLAG_UNSET == chFlag) { szCrcTmp[ii] = strMsgSnd->chTiocId; @@ -3165,30 +3297,11 @@ void DaAtsCancleSnd(void) ; } - if (FLAG_UNSET == chFlag) - { - chFunRtn = dquHlhtId2VobcName(strMsgSnd->dwDaTrainId, &wTrainId, &wTrainLgcId); - chDerailment = GetTrainDerailment(wTrainId); - if (TRAIN_DERAIL_NO != chDerailment) - { - /* гǰѹ״̬ */ - strCfmSnd->chOpStatus = CONFIRM_DA_SND_DERAIL; - chFlag = FLAG_SET; - } - else - { - ; - } - } - else - { - ; - } - ii = 0u; szCrcTmp[ii++] = strMsgSnd->chAtsId; szCrcTmp[ii++] = strMsgSnd->chStation; - szCrcTmp[ii++] = strMsgSnd->chIndex; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; LongToChar(strMsgSnd->dwDaTrainId, &szCrcTmp[ii]); ii += 4u; LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); @@ -3812,4 +3925,423 @@ UINT16 GetEaIndex(const UINT16 wEaId) return wReval; } +/** +* @brief ӷ +* @param chEaIndex +* @param wAxisSecId ID +* @param chType +* @param wTrainId ɢгID +* @param chEaconfigId +* @return CI_ERROR ʧ +* CI_SUCCESS ɹ +* BY CGH 20250527 +*/ +static UINT8 AddEaAxisSec(UINT8 chEaIndex, UINT16 wAxisSecId, UINT8 chType, UINT16 wTrainId, UINT8 chEaconfigId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chIndex = 0U; + UINT8 chAcBelongCiId = 0; /*ID*/ + UINT8 chAcBelongCiType = 0; /**/ + UINT8 chAxisSecAddFlag = CI_ERROR;/*Ƿ־*/ + + if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId)) + { + chReval = CI_SUCCESS; + /*ȥ*/ + for (chIndex = 0u; chIndex < g_szEaData[chEaIndex].strAcInfo.chObjNum; chIndex++) + { + /*ǷѾ¼*/ + if (g_szEaData[chEaIndex].strAcInfo.szObjId[chIndex] == wAxisSecId) + { + break; + } + else + { + ; + } + } + /*ûм¼*/ + if (g_szEaData[chEaIndex].strAcInfo.chObjNum == chIndex) + { + /*жϸüǷԳ*/ + chAcBelongCiId = (UINT8)GetAxisBelongTiocAllLine(wAxisSecId); + chAcBelongCiType = GetCiType(chAcBelongCiId);/*ȡǰ*/ + /*ҪݹܿжǷн*/ + chAxisSecAddFlag = AxisSecAddProAreaCheck(wAxisSecId, chType, wTrainId); + + if (((CI_TYPE_ZX == chAcBelongCiType) || (CI_TYPE_SCX == chAcBelongCiType)) + && (CI_SUCCESS == chAxisSecAddFlag)) + { + + if (EA_SECTION_MAX_NUM > g_szEaData[chEaIndex].strAcInfo.chObjNum) + { + g_szEaData[chEaIndex].strAcInfo.szObjId[g_szEaData[chEaIndex].strAcInfo.chObjNum] = wAxisSecId; + g_szEaData[chEaIndex].strAcInfo.chObjNum++; + g_szEaData[chEaIndex].chEaConfigId = chEaconfigId; + } + else + { + chReval = CI_ERROR; + } + } + else + { + /*߻ԳӼ*/ + } + } + else + { + ; + } + + + } + else + { + ; + } + + return chReval; +} + +/** +* @brief Ƿ +* @param const UINT16 wAcId α +* @param const UINT16 wSpecialEaId +* @return UINT8_MAX 쳣 +* CI_ERROR ڲ +* CI_SUCCESS Ҫڲ +* by cgh 20250818 +*/ +static UINT8 CheckAddSpecialEaAxis(const UINT16 wAcId,const UINT16 wSpecialEaId) +{ + UINT8 chRtn = CI_ERROR; + UINT8 chLinkNum = 0U; + UINT16* pLinkIdBuff = NULL; + UINT8 ii = 0U; + UINT16 wLinkSpecialEa = 0U; /**/ + + if ((0U < wAcId) && (AXIS_SECTION_SUM_MAX > wAcId) && (0U < wSpecialEaId)) + { + chLinkNum = EaGetAcLinkNum(wAcId); + pLinkIdBuff = EaGetAcLinkId(wAcId); + + if (NULL != pLinkIdBuff) + { + for (ii = 0U; ii < chLinkNum; ii++) + { + wLinkSpecialEa = GetLinkSpecialEaAttr(pLinkIdBuff[ii]); + + if (wSpecialEaId == wLinkSpecialEa) + { + chRtn = CI_SUCCESS; + break; + } + else + { + ; + } + } + } + else + { + chRtn = UINT8_MAX; /*쳣*/ + } + } + else + { + chRtn = UINT8_MAX; /*쳣*/ + } + + return chRtn; +} + +/** +* @brief Ƿȫ +* @param wTrainId ɢгID +* @param UINT16* wSpecialEaId ID +* @return CI_ERROR ȫ CI_SUCCESS ȫ +* edit cgh 20250818 +*/ +static UINT8 CalcSpecialEa(const UINT16 wTrainId, UINT16* wSpecialEaId) +{ + UINT8 chRtn = CI_ERROR; + UINT16 wMaxHeadLinkId = 0U; /*ǰLINK ID*/ + UINT16 wMinTailLinkId = 0U; /*СLINK ID*/ + UINT8 chTrainDir_Maxhead = 0u; /*гǰΪ׼*/ + UINT8 chTrainDir_outTail = 0u; /*βķСȡ*/ + UINT16 wMaxHeadLinkSpecialEa = 0U; /*ǰ*/ + UINT16 wMinTailLinkSpecialEa = 0U; /*С*/ + UINT16 wMaxHeadLinkBelCiId = 0U; /*ǰLINKID*/ + UINT16 wMinTailLinkBelCiId = 0U; /*СLINKID*/ + UINT8 chMaxHeadLinkBelCiType = 0U; /*ǰLINK*/ + UINT8 chMinTailLinkBelCiType = 0U; /*СLINK*/ + UINT32 dwSearchLen = 0U;/*ѯ*/ + UINT32 errorCode = 0U; + struct_PathPoint pPoint = { 0U }; /*λϢ*/ + + wMaxHeadLinkId = GetTrainMaxHeadLink(wTrainId); + wMinTailLinkId = GetTrainMinTailLink(wTrainId); + + if ((0U < wMaxHeadLinkId) && (LINK_SUM_MAX > wMaxHeadLinkId) && (0U < wMinTailLinkId) && (LINK_SUM_MAX > wMinTailLinkId) && (NULL != wSpecialEaId)) + { + wMaxHeadLinkSpecialEa = GetLinkSpecialEaAttr(wMaxHeadLinkId); + wMinTailLinkSpecialEa = GetLinkSpecialEaAttr(wMinTailLinkId); + wMaxHeadLinkBelCiId = GetLinkManageTiocById(wMaxHeadLinkId); + wMinTailLinkBelCiId = GetLinkManageTiocById(wMinTailLinkId); + chMaxHeadLinkBelCiType = GetCiType(wMaxHeadLinkBelCiId); + chMinTailLinkBelCiType = GetCiType(wMinTailLinkBelCiId); + + if (((0U != wMaxHeadLinkSpecialEa) || (CI_TYPE_CLD == chMaxHeadLinkBelCiType)) + && ((0U != wMinTailLinkSpecialEa) || (CI_TYPE_CLD == chMinTailLinkBelCiType))) + { + /*ǰСڳڳΪҲ*/ + + /*ڷֻҪ򣬾ΪгյķΪӦ*/ + chRtn = CI_SUCCESS; + + if (0U != wMaxHeadLinkSpecialEa) + { + *wSpecialEaId = wMaxHeadLinkSpecialEa; + chTrainDir_Maxhead = GetTrainDir_MaxHead(wTrainId); + dwSearchLen = GetLinkSpecialEaFrontDis(wMaxHeadLinkId); + pPoint.wLinkId = wMaxHeadLinkId; + pPoint.dwOffset = GetTrainMaxHeadOffset(wTrainId); + chRtn = EaFindLinkAdjacentLinkID(pPoint, chTrainDir_Maxhead, dwSearchLen); + } + else + { + + } + + if (CI_SUCCESS == chRtn) + { + if (0U != wMinTailLinkSpecialEa) + { + *wSpecialEaId = wMinTailLinkSpecialEa; + chTrainDir_outTail = GetTrainDir(wTrainId); + chTrainDir_outTail = ConvertTrainDir(chTrainDir_outTail); /*Сȡ*/ + dwSearchLen = GetLinkSpecialEaBehindDis(wMinTailLinkId); + pPoint.wLinkId = wMinTailLinkId; + pPoint.dwOffset = GetTrainMinTailOffset(wTrainId); + chRtn = EaFindLinkAdjacentLinkID(pPoint, chTrainDir_outTail, dwSearchLen); + } + else + { + ; + } + + if (CI_SUCCESS != chRtn) + { + errorCode += 0x04000000U; + } + else + { + ; + } + } + else + { + errorCode += 0x08000000U; + } + } + else + { + if (0U != wMaxHeadLinkSpecialEa) + { + *wSpecialEaId = wMaxHeadLinkSpecialEa; + errorCode += 0x40000000U; + } + else + { + if (0U != wMinTailLinkSpecialEa) + { + *wSpecialEaId = wMinTailLinkSpecialEa; + errorCode += 0x20000000U; + } + else + { + errorCode += 0x10000000U; + } + } + } + } + else + { + errorCode += 0x80000000U; + } + + debug_infor_printf((const)"\CalcSpecialEa Error errorCode:0x%08x\n", errorCode); + return chRtn; +} + +/** +* @brief ѯǰlinklinkĿǰڳжϣ +* @param struct_PathPoint pPoint ǰlinkϢ +* @param UINT8 chDirection ѯ +* @param UINT32 dwSearchLen ѯ +* @return CI_SUCCESS ͨ CI_ERROR ʧ +* BY CGH 20250818 +*/ +static UINT8 EaFindLinkAdjacentLinkID(struct_PathPoint pPoint, UINT8 chDirection, UINT32 dwSearchLen) +{ + UINT16 wFindLinkId = 0U;/*ֵ*/ + UINT8 chReturn = CI_ERROR; + LinkPointDataStru pathTreeTemp = { 0U };/*˵Ϣ*/ + UINT8 chDirectionPointfirst = 0U; /*仯1*/ + UINT8 chDirectionPointsecond = 0U; /*仯2*/ + UINT8 chTempDir = 0U; /*ʱ*/ + UINT32 dwAddSearchLen = 0U;/*ۼӳ*/ + UINT16 wLinkBelCiId = 0U; /*LINKID*/ + UINT8 chLinkBelCiType = 0U; /*LINK*/ + UINT16 wLinkSpecialEa = 0U; /**/ + UINT8 chCheckFinishFlag = CI_FALSE; /*־*/ + UINT16 wCurrentLinkId = 0U; + + if ((DIR_SAME == chDirection) || (DIR_CONVERT == chDirection)) + { + chReturn = CI_SUCCESS; + chTempDir = chDirection; + dwAddSearchLen = GetRelDirLinkOffset(pPoint, chTempDir); + wCurrentLinkId = pPoint.wLinkId; + while ((dwAddSearchLen < dwSearchLen) && (CI_FALSE == chCheckFinishFlag)) + { + /*ѯlink˵Ϣ*/ + chReturn = GetLinkPointInfo(chTempDir, wCurrentLinkId, &pathTreeTemp); + if (CI_SUCCESS != chReturn) + { + /*زѯʧ*/ + chReturn = CI_ERROR; + chCheckFinishFlag = CI_TRUE; + } + else + { + if (UINT16_MAX == pathTreeTemp.wMainLinkId) + { + /*linkѯʧ*/ + chReturn = CI_ERROR; + chCheckFinishFlag = CI_TRUE; + } + else + { + if (EMAP_AXLE_DOT == pathTreeTemp.wPointType) + { + /* ȡһlinkID*/ + wFindLinkId = pathTreeTemp.wMainLinkId; + dwAddSearchLen += GetLinkLengthById(wFindLinkId); + wLinkSpecialEa = GetLinkSpecialEaAttr(wFindLinkId); + wLinkBelCiId = GetLinkManageTiocById(wFindLinkId); + chLinkBelCiType = GetCiType(wLinkBelCiId); + + if (CI_TYPE_CLD == chLinkBelCiType) + { + chCheckFinishFlag = CI_TRUE; + } + else if(0U != wLinkSpecialEa) + { + /*˵Ϊ㣬ѯlinkһlinkIDǷз仯㣬link仯ΪԶ㣬ֱӷlinkID仯Ϣ*/ + chDirectionPointfirst = GetLinkLogicDirChangedById(wCurrentLinkId); + chDirectionPointsecond = GetLinkLogicDirChangedById(wFindLinkId); + if (((LINK_DIRCHANGE_BEGIN == chDirectionPointfirst) || (LINK_DIRCHANGE_END == chDirectionPointfirst)) + && (chDirectionPointsecond == chDirectionPointfirst)) + { + chTempDir = ConvertTrainDir(chTempDir); + } + else + { + ; /*û仯㣬*/ + } + + wCurrentLinkId = wFindLinkId; + } + else + { + /*dzҲ߱ԣ˵*/ + chReturn = CI_ERROR; + chCheckFinishFlag = CI_TRUE; + } + + + } + else if (EMAP_POINT_DOT == pathTreeTemp.wPointType) + { + wFindLinkId = pathTreeTemp.wMainLinkId; + dwAddSearchLen += GetLinkLengthById(wFindLinkId); + wLinkBelCiId = GetLinkManageTiocById(wFindLinkId); + chLinkBelCiType = GetCiType(wLinkBelCiId); + if (CI_TYPE_CLD == chLinkBelCiType) + { + chCheckFinishFlag = CI_TRUE; + } + else + { + /*ҵеLINKDzdzεģ˵*/ + chReturn = CI_ERROR; + chCheckFinishFlag = CI_TRUE; + } + } + else + { + /*linkѯʧ*/ + chReturn = CI_ERROR; + chCheckFinishFlag = CI_TRUE; + } + } + } + } + } + else + { + ; + } + + return chReturn; +} + +/** +* @brief ȡ +* @param const UINT16 wAcId α +* @return +* by cgh 20250826 +*/ +static UINT16 GetAxisSpecialEaId(const UINT16 wAcId) +{ + UINT16 wRtn = CI_ERROR; + UINT8 chLinkNum = 0U; + UINT16* pLinkIdBuff = NULL; + UINT8 ii = 0U; + + if ((0U < wAcId) && (AXIS_SECTION_SUM_MAX > wAcId)) + { + chLinkNum = EaGetAcLinkNum(wAcId); + pLinkIdBuff = EaGetAcLinkId(wAcId); + + if (NULL != pLinkIdBuff) + { + for (ii = 0U; ii < chLinkNum; ii++) + { + wRtn = GetLinkSpecialEaAttr(pLinkIdBuff[ii]); + + if (0U != wRtn) + { + break; + } + else + { + ; + } + } + } + else + { + ; + } + } + else + { + ; + } + + return wRtn; +} diff --git a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h index 6579ff8..10310d5 100644 --- a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h +++ b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.h @@ -4,7 +4,7 @@ #include "TrainDefine.h" #define EA_CFG_SUM_MAX 50u /* */ -#define EA_BD_LINK_SUM_MAX 5u /* յ߽ */ +#define EA_BD_LINK_SUM_MAX 10u /* յ߽ */ #define EA_MODE_DIS 0x55u /* ʽ */ #define EA_MODE_SEC 0xAAu /* ʽվһ䲻վ̨ */ #define EA_MODE_PLATION 0x33u /* ʽվһ京վ̨ */ @@ -17,6 +17,7 @@ #define EA_OUT_FOUR 4u /* վһҪյվ̨ */ #define EA_OUT_FIVE 5u /* վһ䲻Ҫվ̨ */ #define EA_OUT_SIX 6u /* վһҪ估վ̨ */ +#define EA_OUT_SEVEN 7u /* */ #define EA_DST_ALLOWED_YES 0x55u /* ʱĿTIOC */ #define EA_DST_ALLOWED_NO 0xaau /* ʱĿTIOC */ diff --git a/TSCP/src/APP/ciapp/Train/TrainDataManage.c b/TSCP/src/APP/ciapp/Train/TrainDataManage.c index d35b492..b8161de 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDataManage.c +++ b/TSCP/src/APP/ciapp/Train/TrainDataManage.c @@ -27,8 +27,10 @@ UINT8 gAtsScreenNum = 0u; TrainAtsScreenStru gszAtsScreenInfo[TRAIN_SUM_MAX] = { 0u }; UINT8 gFlyTrainCnt = 0U; /*ɳ崻г*/ -TrainFlyProtectStru gFlyTrainData[SHUT_DOWN_TRAIN_NUMMAX] = { 0 };/*ɳ崻г*/ +TrainFlyProtectStru gFlyTrainData[SHUT_DOWN_TRAIN_NUMMAX] = { 0U };/*ɳ崻г*/ +UINT8 gNvramFlyTrainCnt = 0U; /*ʹNVRAMλüලЧķɳг*/ +UINT16 gNvramFlyTrainId[SHUT_DOWN_TRAIN_NUMMAX] = { 0U }; /*ʹNVRAMλüලЧķɳгID*/ /** * @brief гǰȫϢгȫλú @@ -309,6 +311,9 @@ UINT8 TrainDataModuleInit(void) gstTrainInfo[chCycle].wTrainPosMonitorInLink = 0U; /*гλüලЧʱlinkΪ0*/ gstTrainInfo[chCycle].dwStartFlyCycNum = 0U; /*ɳ¼ڳʼ*/ gstTrainInfo[chCycle].chEaCmdState = TRAIN_EA_CMD_STATE_INVALID; /*гɢʼΪЧ*/ + gstTrainInfo[chCycle].strJumpBackData.chJumpBackApplyState = TRAIN_JUMP_BACK_STATE_INVALID;/*ʼδ*/ + gstTrainInfo[chCycle].strJumpBackData.chJumpBackReplyState = TRAIN_JUMP_BACK_STATE_NONE;/*ʼĬֵ*/ + gstTrainInfo[chCycle].strJumpBackData.dwJumpBackApplySn = 0U;/*ʼĬк*/ gszTrainId[gTrainSum] = gstTrainInfo[chCycle].wTrainId; gTrainSum++; @@ -2264,7 +2269,6 @@ static void CalHeadTrainSafePosFromUnSafe(UINT16 wTrainId, UINT32 dwHeadDistance pMaxHead.Off = dwTrainHeadOffset; wAcId = GetLinkBelongAcId(wSleepLink); - chSleepStt = GetTrainSleepState(wTrainId); if ((TRAIN_SLEEP_YES == chSleepStt) && (wSleepLink == Temp_TrainSafeLoc.wHeadLink)) { chTempCheckFlag = elm_PrepareACLoc(wAcId, chDir, &tmpACLoc); @@ -2296,7 +2300,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); @@ -2310,6 +2314,7 @@ static void CalHeadTrainSafePosFromUnSafe(UINT16 wTrainId, UINT32 dwHeadDistance { (void)SetTrainSafeHeadLink(wTrainId, 0U); (void)SetTrainSafeHeadOffset(wTrainId, UINT32_MAX); + ClearTrainSafeHeadDir(wTrainId); SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); SetTrainFullEnterLjkCycNum(wTrainId, 0U); @@ -2346,6 +2351,7 @@ static void CalHeadTrainSafePosFromUnSafe(UINT16 wTrainId, UINT32 dwHeadDistance /*ȫλڲѯʧ*/ (void)SetTrainSafeHeadLink(wTrainId, 0U); (void)SetTrainSafeHeadOffset(wTrainId, UINT32_MAX); + ClearTrainSafeHeadDir(wTrainId); } } (void)SetTrainSafeHeadFlag(wTrainId); @@ -2425,7 +2431,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); @@ -2439,6 +2445,7 @@ static void CalTailTrainSafePosFromUnSafe(UINT16 trainID, UINT32 tailDistance, { (void)SetTrainSafeTailLink(trainID, 0U); (void)SetTrainSafeTailOffset(trainID, UINT32_MAX); + ClearTrainSafeTailDir(trainID); SetTrainVirHeadScreenPassFlag(trainID, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); SetTrainVirTailScreenPassFlag(trainID, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); @@ -2476,6 +2483,7 @@ static void CalTailTrainSafePosFromUnSafe(UINT16 trainID, UINT32 tailDistance, { (void)SetTrainSafeTailLink(trainID, 0U); (void)SetTrainSafeTailOffset(trainID, UINT32_MAX); + ClearTrainSafeTailDir(trainID); } } } @@ -2512,6 +2520,7 @@ static void CalTrainSafePosition(void) UINT8 chSss = 0u; UINT8 chResult = CI_ERROR; UINT32 dwTailDistance = 0U;/*о*/ + UINT8 chTrainIsSwTrackFlag = CI_ERROR;/*г߻ѹ־*/ wTailDis = GetBackProtectMaxLen(); @@ -2549,11 +2558,11 @@ static void CalTrainSafePosition(void) gradeAcc = (FLOAT64)strTrainInfo.WorstGrade / 10.0; chSss = GetTrainStopSteadyState(wTrainId); - chSleepState = GetTrainSleepState(wTrainId); + chTrainIsSwTrackFlag = CheckTrainIsSwTrack(wTrainId); - if ((TRAIN_SS_YES == chSss) && (TRAIN_SLEEP_YES == chSleepState)) + if ((TRAIN_SS_YES == chSss) && (CI_SUCCESS == chTrainIsSwTrackFlag)) { - /*߳ͣ׼ͣȣͨʱͷǰΪ0*/ + /*г߻ѹͣ׼ͣȺ󣬳ͷǰΪ0*/ dwHeadDistance = 0; } else @@ -2637,6 +2646,8 @@ static void CalTrainSafePosition(void) else { /*аȫͨгķǰȫλü*/ + ClearTrainSafeHeadDir(wTrainId); + ClearTrainSafeTailDir(wTrainId); chResult = SetTrainSafeHeadLink(wTrainId, 0u); chResult &= SetTrainSafeHeadOffset(wTrainId, UINT32_MAX); chResult &= SetTrainSafeTailLink(wTrainId, 0u); @@ -2782,6 +2793,9 @@ void ClearTrainInfo(UINT16 wTrainId) gstTrainInfo[wBufIndex].dwStartFlyCycNum = 0U; gstTrainInfo[wBufIndex].chEaCmdState = TRAIN_EA_CMD_STATE_INVALID; /*гɢЧ*/ + gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackApplyState = TRAIN_JUMP_BACK_STATE_INVALID;/*ʼδ*/ + gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackReplyState = TRAIN_JUMP_BACK_STATE_NONE;/*ʼĬֵ*/ + gstTrainInfo[wBufIndex].strJumpBackData.dwJumpBackApplySn = 0U;/*ʼĬк*/ } else { @@ -5095,6 +5109,15 @@ static void TrainScreenProc(void) SetTrainEnterLjkLinkId(wTrainId, wMaxHeadLink); SetTrainVirHeadScreenPassFlag(wTrainId,TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + if (0U == pElmTemp->tailTrainID) + { + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + } + else + { + ; + } + /*ɸѡͨгλüලЧ*/ SetTrainPosMonitorState(wTrainId, TRAIN_POS_MONITOR_VALID); SetTrainPosMonitorInLink(wTrainId, wMaxHeadLink); @@ -5137,6 +5160,15 @@ static void TrainScreenProc(void) /*ɸ־ЧIVOC޿*/ SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + if (0U == pElmTemp->headTrainID) + { + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_VALID); + } + else + { + ; + } + /*ɸѡͨгλüලЧ*/ SetTrainPosMonitorState(wTrainId, TRAIN_POS_MONITOR_VALID); SetTrainPosMonitorInLink(wTrainId, wMaxHeadLink); @@ -5227,7 +5259,7 @@ static void TrainAtsScreenFst(void) strCfmFst->chFlag = FLAG_SET; strCfmFst->chTiocId = chLocalId; strCfmFst->chStation = strMsgFst->chStation; - strCfmFst->chIndex = strMsgFst->chIndex; + strCfmFst->wIndex = strMsgFst->wIndex; strCfmFst->dwTime = dwCycle; for (chAtsIndex = 0u; chAtsIndex < strMsgFst->chTrainNum; chAtsIndex++) @@ -5325,7 +5357,7 @@ static UINT8 IsAtsFstSndSame(void) if ((strMsgFst->chAtsId == strMsgSnd->chAtsId) && (strMsgFst->chStation == strMsgSnd->chStation) - && (strMsgFst->chIndex == strMsgSnd->chIndex) + && (strMsgFst->wIndex == strMsgSnd->wIndex) && (strMsgFst->chTrainNum == strMsgSnd->chTrainNum)) {/* ATS/վ/վ/гһ */ chRtn = CI_SUCCESS; @@ -5410,7 +5442,7 @@ static void TrainAtsScreenSnd(void) strCfmSnd->chFlag = FLAG_SET; strCfmSnd->chTiocId = chLocalId; strCfmSnd->chStation = strMsgSnd->chStation; - strCfmSnd->chIndex = strMsgSnd->chIndex; + strCfmSnd->wIndex = strMsgSnd->wIndex; strCfmSnd->dwTime = dwCycle; for (chAtsIndex = 0u; chAtsIndex < strMsgSnd->chTrainNum; chAtsIndex++) { @@ -5455,36 +5487,6 @@ static void TrainAtsScreenSnd(void) } } - if (FLAG_UNSET == chFlag) - { - ii = 0u; - szCrcTmp[ii++] = strMsgSnd->chTiocId; - LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); - ii += 4u; - szCrcTmp[ii++] = strMsgSnd->chTrainNum; - for (chAtsIndex = 0u; chAtsIndex < strMsgSnd->chTrainNum; chAtsIndex++) - { - LongToChar(strMsgSnd->strTrainInfo[chAtsIndex].dwTrainId, &szCrcTmp[ii]); - ii += 4u; - ShortToChar(strMsgSnd->strTrainInfo[chAtsIndex].wLgcId, &szCrcTmp[ii]); - ii += 2u; - } - dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); - if (dwCrc != strMsgSnd->dwCrc32) - {/* CRC32ATSϢCRC32һ */ - strCfmSnd->chOpStatus = CONFIRM_SECOND_CRC; - chFlag = FLAG_SET; - } - else - { - ; - } - } - else - { - ; - } - if (FLAG_UNSET == chFlag) { if (FLAG_SET != strMsgFst->chFlag) @@ -5520,6 +5522,36 @@ static void TrainAtsScreenSnd(void) ; } + if (FLAG_UNSET == chFlag) + { + ii = 0u; + szCrcTmp[ii++] = strMsgSnd->chTiocId; + LongToChar(strCfmFst->dwTime, &szCrcTmp[ii]); + ii += 4u; + szCrcTmp[ii++] = strMsgSnd->chTrainNum; + for (chAtsIndex = 0u; chAtsIndex < strMsgSnd->chTrainNum; chAtsIndex++) + { + LongToChar(strMsgSnd->strTrainInfo[chAtsIndex].dwTrainId, &szCrcTmp[ii]); + ii += 4u; + ShortToChar(strMsgSnd->strTrainInfo[chAtsIndex].wLgcId, &szCrcTmp[ii]); + ii += 2u; + } + dwCrc = Tioc_CommonCrc32(szCrcTmp, ii); + if (dwCrc != strMsgSnd->dwCrc32) + {/* CRC32ATSϢCRC32һ */ + strCfmSnd->chOpStatus = CONFIRM_SECOND_CRC; + chFlag = FLAG_SET; + } + else + { + ; + } + } + else + { + ; + } + ii = 0u; szCrcTmp[ii++] = strMsgFst->chAtsId; LongToChar(strMsgFst->dwTime, &szCrcTmp[ii]); @@ -5539,7 +5571,6 @@ static void TrainAtsScreenSnd(void) {/* ͨȷϳɹ */ strCfmSnd->chOpStatus = CONFIRM_FIRST_SUCCESS; - SetTrainAtsScreenProc(); } else @@ -6820,13 +6851,16 @@ UINT16 GetTrainTailITEScreen(const UINT16 wTrainId, UINT8* devState) * const UINT8 cQueryDir ߼ζӦIJѯ߼ * const UINT8 cLogSecSum ߼ * const UINT16 pLogSecIdBuff[] ߼ID +* const UINT8 cFunctionId ID +* const UINT8 cSendLevel ͼ * UINT8* pHalfRouteSwitchMoveFlag ؽ·ɶ־ * UINT16 *pTrainOccLogSecSum г߼ * UINT16 pTrainOccLogSecID[] г߼ID * ֵ CI_SUCCESSͨ CI_ERROR: 鲻ͨ */ -UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[], UINT8* pHalfRouteSwitchMoveFlag, UINT16* pTrainOccLogSecSum, UINT16 pTrainOccLogSecID[]) +UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[], + UINT8* pHalfRouteSwitchMoveFlag, UINT16* pTrainOccLogSecSum, UINT16 pTrainOccLogSecID[], const UINT8 cFunctionId, const UINT8 cSendLevel) { /*ֲʼ*/ UINT8 retVal = CI_ERROR; @@ -6865,16 +6899,24 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI UINT8 cLogSecLockState = LOG_SECTION_LOCK_NO; /*߼ν·״̬*/ UINT8 cLogSecLogLockState = LOG_SECTION_LOGLOCK_NO; /*߼߼״̬*/ UINT16 wOutLogSecNum = 0U; /*г*/ + UINT8 jj = 0U; + UINT8 kk = 0U; + UINT16 wLockBelongRouteId = 0U; /*߼ν··ID*/ + UINT16 wFstLockedLogSecId = 0U; /*·һյ߼ID*/ + UINT8 chLogSecLockBelLogRouteSum = 0U;/*߼߼·*/ + LogSecLockBelLogRouteStruct* szLogSecLockBelLogRouteData = NULL;/*߼߼·*/ + UINT16 wFstLogLockedLogSecId = 0U; /*·һ߼յ߼ID*/ + UINT8 mm = 0U; /*μ飨гIDݲ飩*/ - if (((DIR_SAME == cQueryDir) || (DIR_CONVERT == cQueryDir)) && (0U != cLogSecSum) && (NULL != pLogSecIdBuff)) + if (((DIR_SAME == cQueryDir) || (DIR_CONVERT == cQueryDir)) && (0U != cLogSecSum) && (NULL != pLogSecIdBuff) && ((ESEND_LEVEL_ATS == cSendLevel) || (ESEND_LEVEL_ZERO == cSendLevel))) { retVal = CI_SUCCESS; cCommStateWithTrain = GetTrainTransitmitStat(wTrainId); if (TRAIN_COMM_STATE_GOOD == cCommStateWithTrain) /*гIDϷж*/ { cTrainMaxTailDir = GetTrainDir_MaxTail(wTrainId); - + if ((DIR_SAME == cTrainMaxTailDir) || (DIR_CONVERT == cTrainMaxTailDir)) { /*ȡгλ*/ @@ -6885,7 +6927,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI strMinTailPoint.wLinkId = GetTrainMinTailLink(wTrainId); strMinTailPoint.dwOffset = GetTrainMinTailOffset(wTrainId); - dwCrossDis = (UINT32)GetSigCrossMaxLen(); + dwCrossDis = (UINT32)GetSigCrossMaxLen(); dwCrossDis = dwCrossDis * 100U; /*ѹתcm*/ cFuncResult = dsuNewLocAndObsByOffsetDis(strMaxTailPoint, dwCrossDis, cTrainMaxTailDir, &strMaxTailCrossPoint, &wSwitchId); /*гλãͷһѹ*/ @@ -6903,7 +6945,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI { cErrStep = 2U; retVal = CI_ERROR; /*쳣0ʧ*/ - } + } if (CI_SUCCESS == retVal) { @@ -6928,12 +6970,12 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI retVal = CI_ERROR; /*г߼Ƿ0ʧ*/ } } - else if((0U != cLocalCiId) && (0U != cMaxHeadBelongCiId) && (0U != cMinTailBelongCiId) + else if ((0U != cLocalCiId) && (0U != cMaxHeadBelongCiId) && (0U != cMinTailBelongCiId) && (cLocalCiId != cMaxHeadBelongCiId) && (cLocalCiId != cMinTailBelongCiId)) { cTrianAllInOtherRcFlag = FLAG_SET; /*гȫڱִ*/ } - else + else { cErrStep = 3U; retVal = CI_ERROR; /*ȡʧܣ0ʧ*/ @@ -6951,7 +6993,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI wMaxTailLinkId = GetTrainMaxTailLink(wTrainId); cLogSecIncLinkNum = GetSecIntrudeLinkSum(pLogSecIdBuff[0]); pLogSecIncLinkId = GetSecIntrudeLinkIdBuf(pLogSecIdBuff[0]); - + if ((CI_ERROR != wMaxTailLinkId) && (NULL != pLogSecIncLinkId) && (0U < cLogSecIncLinkNum) && (LOGSEC_INCLUDE_LINK_SUM_MAX >= cLogSecIncLinkNum)) { strCurPoint.Lnk = pLogSecIncLinkId[0U]; @@ -6999,7 +7041,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI if (CI_SUCCESS == retVal) { cHrSwitchMoveFlag = ROUTE_HALF_SWITCH_MOVE_VALID; - retVal = CI_SUCCESS; + retVal = CI_SUCCESS; } else @@ -7048,6 +7090,146 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI { /*ʧ*/ } + + if (CI_SUCCESS == retVal) + { + /*߼εĽ··ĵһ߼Ƿ*/ + for (jj = 0U; jj < cLogSecSum; jj++) + { + wLockBelongRouteId = GetLogSecLockBelongRoute(pLogSecIdBuff[jj]); + wFstLockedLogSecId = GetRouteFirstLockedLogSecId(wLockBelongRouteId); /*ȡ·ڷһյ߼ID*/ + if (0U != wFstLockedLogSecId) + { + for (kk = 0U; kk < cLogSecSum; kk++) + { + /*߼Ƿ*/ + if (wFstLockedLogSecId == pLogSecIdBuff[kk]) + { + break; + } + else + { + /**/ + } + } + + if (kk == cLogSecSum) + { + retVal = CI_ERROR; + break; /*δ·ڷһյ߼Σֹͣʧ*/ + } + else + { + /**/ + } + } + else + { + /*գ*/ + } + } + + if (CI_SUCCESS == retVal) + { + /*ͨ*/ + } + else + { + cLogSecLockState = GetLogSecLockState(wFstLockedLogSecId); + SetErrorData(cFunctionId, CI_DEVICE_TYPE_LOGICSEC, wFstLockedLogSecId, ETYPE_LOGSEC_LOCK_STATE, cLogSecLockState, cSendLevel); + cErrStep = 6U; + retVal = CI_ERROR; /*ʧ*/ + } + } + else + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_RES, 0U, cSendLevel); + /**/ + } + + if (CI_SUCCESS == retVal) + { + /*߼εĽ·߼·ĵһ߼Ƿ*/ + for (jj = 0U; jj < cLogSecSum; jj++) + { + chLogSecLockBelLogRouteSum = GetLogSecLockBelLogRouteSum(pLogSecIdBuff[jj]); + szLogSecLockBelLogRouteData = GetLogSecLockBelLogRouteData(pLogSecIdBuff[jj]); + + if (NULL != szLogSecLockBelLogRouteData) + { + for (mm = 0U; mm < chLogSecLockBelLogRouteSum; mm++) + { + wFstLogLockedLogSecId = GetLogRouteFirLogLockLogId(szLogSecLockBelLogRouteData[mm].wLogSecLockBelLogRouteId); + if (0U != wFstLogLockedLogSecId) + { + for (kk = 0U; kk < cLogSecSum; kk++) + { + /*߼Ƿ*/ + if (wFstLogLockedLogSecId == pLogSecIdBuff[kk]) + { + break; + } + else + { + /**/ + } + } + + if (kk == cLogSecSum) + { + retVal = CI_ERROR; + break; /*δ߼·ڷһյ߼Σֹͣʧ*/ + } + else + { + /**/ + } + } + else + { + /*գ*/ + } + + if (CI_ERROR == retVal) + { + break; + } + else + { + ; /**/ + } + } + } + else + { + retVal = CI_ERROR; + } + if (CI_ERROR == retVal) + { + break; + } + else + { + ; /**/ + } + } + + if (CI_SUCCESS == retVal) + { + /*ͨ*/ + } + else + { + cLogSecLogLockState = GetLogSecLogLockState(wFstLogLockedLogSecId); + SetErrorData(cFunctionId, CI_DEVICE_TYPE_LOGICSEC, wFstLogLockedLogSecId, ETYPE_LOGSEC_LOCK_STATE, cLogSecLogLockState, cSendLevel); + cErrStep = 7U; + retVal = CI_ERROR; /*ʧ*/ + } + } + else + { + /**/ + } } else if (CI_ERROR != cCommStateWithTrain) { @@ -7055,7 +7237,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI } else { - /*Чֱӷسɹ*/ + /*Чֱӷسɹ*/ } } else @@ -7069,7 +7251,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI *pHalfRouteSwitchMoveFlag = cHrSwitchMoveFlag; if (ROUTE_HALF_SWITCH_MOVE_VALID == cHrSwitchMoveFlag) { - /*ɶ¼г߼*/ + /*ɶ¼г߼*/ debug_infor_printf((const)"Dynamic Route TrainOccLogSecID["); for (i = 0U; i < wTrainMinTMaxHLogNum; i++) { @@ -7097,7 +7279,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI } else { - /*1-ηǷ2-гʧܣ3-ȡг߼ʧܣ4-ȡгlinkʧܣ5-߼згƥ*/ + /*1-ηǷ2-гʧܣ3-ȡг߼ʧܣ4-ȡгlinkʧܣ5-߼згƥ䣻6-δ߼·ĵһյ߼*/ debug_infor_printf((const)"Dynamic Route TrainResAndDirCheck ErrStep[%d]\n", cErrStep); } @@ -7124,13 +7306,18 @@ void TrainResRecycle(void) UINT8 trainOTStat = 0U; UINT16 routeInTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT8 chTrainSleepState = 0U;/*г״̬*/ - + UINT16 wStartSigID = 0U; + UINT16 wLightUpTrainID = 0U;/*гID*/ + UINT8 chLocalCiType = 0U; /**/ + UINT8 chDelete = 0U; + UINT8 chRouteState = 0U; localCiId = GetSystemParaLocalCiId(); routeCurSum = GetRouteCurSum(); /*ȡ·*/ - /*·*/ + chLocalCiType = GetLocalCiType(); + /*·*/ for (ii = 0u; ii < routeCurSum; ii++) { - + routeId = GetRouteId(ii); /*ȡ·ID*/ routeBelongCiId = GetRouteBelongCiId(routeId); /*ȡ·ID*/ @@ -7140,27 +7327,62 @@ void TrainResRecycle(void) funcRetval = RouteAllLockCheck(routeId); /*ȡҪ·гϢ*/ funcRetval &= GetRouteReadyEnterTrainInfo(routeId, &routeInTrainNum, routeInTrainId); - + wStartSigID = GetRouteStartSignalId(routeId); + chRouteState = GetRouteState(routeId); + if (0U < wStartSigID) + { + wLightUpTrainID = GetSignalLightUpTrainId(wStartSigID); + } + else + { + wLightUpTrainID = 0U; + } if (CI_SUCCESS == funcRetval) { for (trainIndex = 0U; trainIndex < routeInTrainNum; trainIndex++) { - trainOTStat=GetTrainResRecycleOTStat(routeInTrainId[trainIndex]); + chDelete = CI_SUCCESS; + trainOTStat = GetTrainResRecycleOTStat(routeInTrainId[trainIndex]); chTrainSleepState = GetTrainSleepState(routeInTrainId[trainIndex]); - if ((CI_SUCCESS == trainOTStat) && (TRAIN_SLEEP_YES !=chTrainSleepState)) + if ((0U < wLightUpTrainID) + &&((ROUTE_STATE_YUXIAN_OPEN == chRouteState) ||(ROUTE_STATE_NEAR_OPEN == chRouteState))) + { + if (((routeInTrainId[trainIndex] & 0x00ffU) != wLightUpTrainID)&&(CI_TYPE_CLD == chLocalCiType)) + { + /*ڽӽɾηӽԴ*/ + chDelete = CI_ERROR; + } + else + { + ; /**/ + } + } + if ((CI_SUCCESS == chDelete)&&(CI_SUCCESS == trainOTStat) && (TRAIN_SLEEP_YES !=chTrainSleepState)) { /*ȡ·ӽǷпг*/ funcRetval = GetRouteSuspiciousInNearSec(routeId); if (CI_SUCCESS == funcRetval) { /*ԴȡʱʱҲΪ߳ŻԴ߳Դ*/ - RemoveRouteInCiRes(routeId, routeInTrainId[trainIndex]); /*ɾг·Դ*/ + chDelete = CI_ERROR; } else { ; } } + else + { + ; /*Դ*/ + } + if (CI_ERROR == chDelete) + { + RemoveRouteInCiRes(routeId, routeInTrainId[trainIndex]); /*ɾг·Դ*/ + } + else + { + ; /*Դ*/ + } } } else @@ -7378,7 +7600,7 @@ UINT8 CheckTrainDirToOtherPointDir(LOD_STRU pMaxHead,LOD_STRU pMinHead,LOD_STRU dwlen_tomaxtail = dsuLenByPoint_GetDir(&pMinTail, &pMaxTail, &linknum_MaxTail, linkID_maxtail, &dirToMaxTail, &changerPNumtoMaxTail); if ((UINT32_MAX != dwlen_tomaxhead) && (UINT32_MAX != dwlen_tominhead) && (UINT32_MAX != dwlen_tomaxtail) - && (dwlen_tomaxhead > dwlen_tominhead) && (dwlen_tominhead > dwlen_tomaxtail)) + && (dwlen_tomaxhead > dwlen_tominhead) && (dwlen_tomaxhead > dwlen_tomaxtail)) { if ((0u != linknum_MaxHead) && (0u != linknum_MinHead) && (0u != linknum_MaxTail) @@ -7389,14 +7611,17 @@ UINT8 CheckTrainDirToOtherPointDir(LOD_STRU pMaxHead,LOD_STRU pMinHead,LOD_STRU } else { + debug_infor_printf((const)"\nCheckTrainDirToOtherPointDir ERR\n"); chRetVal = CI_ERROR; } } else { + debug_infor_printf((const)"\nCheckTrainDirToOtherPointDir ERR\n"); chRetVal = CI_ERROR; } } + return chRetVal; } @@ -9555,6 +9780,8 @@ void TrainPosMonitorProc(void) UINT16* pPhySecIncAxleSecId = NULL; /*ΰļ*/ 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++) { @@ -9608,9 +9835,10 @@ void TrainPosMonitorProc(void) { /*δгID*/ } - + chNvramFlag = GetTrainNvramPosFlag(wTrainId); /*2.гλüල־*/ - if ((TRAIN_POS_MONITOR_DIFF == cMonitorFailState) || (TRAIN_POS_MONITOR_DIFF == cPreMonitorState)) + if (((TRAIN_POS_MONITOR_DIFF == cMonitorFailState) || (TRAIN_POS_MONITOR_DIFF == cPreMonitorState)) + && (TRAIN_NVRAM_POS_FLAG_NO != chNvramFlag)) { SetTrainPosMonitorState(wTrainId, TRAIN_POS_MONITOR_DIFF); /*гȫڼලlinkһڼල״̬λòһ£üලλòһ*/ } @@ -9624,11 +9852,20 @@ void TrainPosMonitorProc(void) /*3.гǰɸѡ־*/ if (TRAIN_POS_MONITOR_VALID == cPreMonitorState) { - /*гλüල״̬ЧЧгǰɸѡ־*/ - SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); - SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); - SetTrainEnterLjkLinkId(wTrainId, 0U); - SetTrainFullEnterLjkCycNum(wTrainId, 0U); + chAgTrainLeaveAgCheck = AgTrainLeaveAgCheck(wTrainPosMonitorInLink); + if (CI_ERROR == chAgTrainLeaveAgCheck) + { + /*гλüල״̬ЧЧгǰɸѡ־*/ + SetTrainVirHeadScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainVirTailScreenPassFlag(wTrainId, TRAIN_VIR_SCREEN_PASS_FLAG_INVALID); + SetTrainEnterLjkLinkId(wTrainId, 0U); + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + } + else + { + /*гAGʻֻںţɸѡ־*/ + SetTrainFullEnterLjkCycNum(wTrainId, 0U); + } } else { @@ -10172,6 +10409,9 @@ 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)) @@ -10217,17 +10457,29 @@ UINT8 AGTrainPosMonitorOccCheck(const UINT16 wAGLinkId) } else { - /*CGDGIJɼռ״̬*/ + /*CGDG+BGIJɼռ״̬*/ wDGAxleSecId = GetLinkBelongAcId(wDGLinkId); cDGAxleSecOccState = GetAxisOccupyState(wDGAxleSecId); /*ȡDGβɼռ״̬*/ if (AXIS_SECTION_OCCUPY_NO == cDGAxleSecOccState) { - cRetVal = CI_SUCCESS; /*DG޲ɼռãسɹ*/ + /*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޲ɼռãسɹ*/ + } } else { cRetVal = CI_ERROR; /*DGڲɼռãʧ*/ } + } } else @@ -10847,3 +11099,537 @@ UINT8 GetTrainEaCmdState(const UINT16 wTrainId) return cRetVal; } + +/* +* Գ߷ԳڼɳϢ +* ˵ +* ֵ +* Created By LQ 2025.04.02 +*/ +void ScxClearFlyProtectInfo(void) +{ + UINT8 ii = 0U; + + /*гɳʼ*/ + for (ii = 1U; ii < TRAIN_SUM_MAX; ii++) + { + gstTrainInfo[ii].dwStartFlyCycNum = 0U; + } + + /*ɳ崻гϢ*/ + gFlyTrainCnt = 0U; + (void)CommonMemSet(&gFlyTrainData, (UINT32)(SHUT_DOWN_TRAIN_NUMMAX * sizeof(TrainFlyProtectStru)), 0U, (UINT32)(SHUT_DOWN_TRAIN_NUMMAX * sizeof(TrainFlyProtectStru))); + + /*ɳ崻ʼ*/ + gFlyProtectOverCyc = 0U; +} + +/* +* AGгʻAG +* ˵const UINT16 wLinkId link ID +* ֵCI_ERROR AGгʻAG +* CI_SUCCESS AGгʻAG +* BY CGH 202050718 +*/ +UINT8 AgTrainLeaveAgCheck(const UINT16 wLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT8 chAGorBGAttr = 0U;/*ABG*/ + UINT16 wAGRelBGLinkId = 0U; /*AGLinkBGlink*/ + UINT16 wAGRelOrgLinkId = 0U; /*AGlink*/ + UINT16 wAGRelTmlLinkId = 0U; /*AGյlink*/ + UINT8 chOrgLinkAttr = LINK_REL_PHYSEC_DEFAULT; + UINT8 chTmlLinkAttr = LINK_REL_PHYSEC_DEFAULT; + UINT16 wAGAxleSecId = 0U; /*AGID*/ + UINT16 wDGLinkId = 0U; /*DGlink*/ + UINT16 wDGAxleSecId = 0U;/*DGID*/ + UINT16 wBGAxleSecId = 0U;/*BGID*/ + UINT8 chSecRelEnvelopeCnt = 0U; /*ιĿ*/ + UINT16 szSecEnvelopeIds[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*ι*/ + const EnvelopeStruct* pTempDgEnvelope = NULL; /*DG*/ + UINT8 chAgRelEnvelopeCnt = 0U; /*AGĿ*/ + UINT16 szAgEnvelopeIds[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; /*AG*/ + const EnvelopeStruct* pTempAgEnvelope = NULL; /*AG*/ + UINT8 chVirHeadScreenPassFlag = 0U; /*ǰɸ־*/ + UINT8 chVirTailScreenPassFlag = 0U; /*ɸ־*/ + UINT8 ii = 0U; + UINT32 errorCode = 0U; + + chAGorBGAttr = GetLinkRelPhySecAGorBGAttr(wLinkId); /*ȡAG/BG*/ + + if (LINK_REL_PHYSEC_AG == chAGorBGAttr) + { + wAGAxleSecId = GetLinkBelongAcId(wLinkId); + wAGRelOrgLinkId = GetLinkOrgnJointMainLkIdById(wLinkId); + wAGRelTmlLinkId = GetLinkTmnlJointMainLkById(wLinkId); + chOrgLinkAttr = GetLinkRelPhySecAGorBGAttr(wAGRelOrgLinkId); + chTmlLinkAttr = GetLinkRelPhySecAGorBGAttr(wAGRelTmlLinkId); + + if (LINK_REL_PHYSEC_BG == chOrgLinkAttr) + { + wAGRelBGLinkId = wAGRelOrgLinkId; + wDGLinkId = wAGRelTmlLinkId; + } + else if (LINK_REL_PHYSEC_BG == chTmlLinkAttr) + { + wAGRelBGLinkId = wAGRelTmlLinkId; + wDGLinkId = wAGRelOrgLinkId; + } + else + { + /*AGBGδֱCG*/ + } + + if (0U != wAGRelBGLinkId) + { + /*CG*/ + chAgRelEnvelopeCnt = elm_GetEnvelopeIDsInAC(wAGAxleSecId, szAgEnvelopeIds); + if (1U == chAgRelEnvelopeCnt) + { + pTempDgEnvelope = elm_GetEnvelopeInfoByID(szAgEnvelopeIds[0]); + + if (NULL != pTempDgEnvelope) + { + wDGAxleSecId = GetLinkBelongAcId(wDGLinkId); + wBGAxleSecId = GetLinkBelongAcId(wAGRelBGLinkId); + + for (ii = 0U; ii < pTempDgEnvelope->ACCnt; ii++) + { + if (wBGAxleSecId == pTempDgEnvelope->ACID[ii]) + { + /*ǰ쵽BG*/ + break; + } + else + { + ; /**/ + } + } + + if (ii == pTempDgEnvelope->ACCnt) + { + /* ȡDGİ */ + chSecRelEnvelopeCnt = elm_GetEnvelopeIDsInAC(wDGAxleSecId, szSecEnvelopeIds); + } + else + { + /* ȡBGİ */ + chSecRelEnvelopeCnt = elm_GetEnvelopeIDsInAC(wBGAxleSecId, szSecEnvelopeIds); + } + + + if ((1U == chSecRelEnvelopeCnt) && (szSecEnvelopeIds[0] == szAgEnvelopeIds[0])) + { + chVirHeadScreenPassFlag = GetTrainVirHeadScreenPassFlag(pTempDgEnvelope->trainID[0]); + chVirTailScreenPassFlag = GetTrainVirTailScreenPassFlag(pTempDgEnvelope->trainID[0]); + + if (((0U == pTempDgEnvelope->headTrainID) || ((pTempDgEnvelope->endPos.Lnk == wLinkId) && (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirHeadScreenPassFlag))) && + ((0U == pTempDgEnvelope->tailTrainID) || ((pTempDgEnvelope->startPos.Lnk == wLinkId) && (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirTailScreenPassFlag)))) + { + /*޿ɣʻ + ųɸѡ־λüල֮󣬵DGͬʱռãCTӿɵʱɸѡ־ЧģΪ޿ɣ*/ + chRetVal = CI_SUCCESS; + } + else + { + errorCode += 0x04000000U; + } + } + else + { + /*طAGгʻ*/ + errorCode += 0x08000000U; + } + } + else + { + /*طAGгʻ*/ + errorCode += 0x10000000U; + } + } + else + { + /*طAGгʻ*/ + errorCode += 0x20000000U; + } + } + else + { + errorCode += 0x40000000U; + } + } + else + { + /*AG*/ + errorCode += 0x80000000U; + } + + debug_infor_printf((const)"\nAgTrainLeaveAgCheck Error errorCode:0x%08x\n", errorCode); + + return chRetVal; +} + +/* +* ָгԾ״̬ +* ˵const UINT16 wTrainId гID +* const UINT8 chJumpBackReplyState Ծ״̬ +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackReplyState(const UINT16 wTrainId, const UINT8 chJumpBackReplyState) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_JUMP_BACK_STATE_VALID == chJumpBackReplyState) || (TRAIN_JUMP_BACK_STATE_INVALID == chJumpBackReplyState) + || (TRAIN_JUMP_BACK_STATE_NONE == chJumpBackReplyState)) + { + gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackReplyState = chJumpBackReplyState; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָгԾ״̬ +* ˵const UINT16 wTrainId гID +* ֵ0x55 0xAA 0x00 /Ĭֵ +* by fan 20250725 +*/ +UINT8 GetTrainJumpBackReplyState(const UINT16 wTrainId) +{ + UINT8 cRetVal = TRAIN_JUMP_BACK_STATE_NONE; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + cRetVal = gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackReplyState; + } + else + { + /*Ĭֵ*/ + } + + return cRetVal; +} +/* +* ָгԾ״̬ +* ˵const UINT16 wTrainId гID +* const UINT8 chJumpBackApplyState Ծ״̬ +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackApplyState(const UINT16 wTrainId, const UINT8 chJumpBackApplyState) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_JUMP_BACK_STATE_VALID == chJumpBackApplyState) || (TRAIN_JUMP_BACK_STATE_INVALID == chJumpBackApplyState)) + { + gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackApplyState = chJumpBackApplyState; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָгԾ״̬ +* ˵const UINT16 wTrainId гID +* ֵ0x55 0xAA δ +* by fan 20250725 +*/ +UINT8 GetTrainJumpBackApplyState(const UINT16 wTrainId) +{ + UINT8 cRetVal = TRAIN_JUMP_BACK_STATE_INVALID; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + cRetVal = gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackApplyState; + } + else + { + /*Ĭֵ*/ + } + + return cRetVal; +} +/* +* ָгԾк +* ˵const UINT16 wTrainId гID +* const UINT32 dwJumpBackSNԾк +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackApplySN(const UINT16 wTrainId, const UINT32 dwJumpBackSN) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + gstTrainInfo[wBufIndex].strJumpBackData.dwJumpBackApplySn = dwJumpBackSN; + } + else + { + /**/ + } +} + +/* +* ȡָгԾк +* ˵const UINT16 wTrainId гID +* ֵUINT32 к +* by fan 20250725 +*/ +UINT32 GetTrainJumpBackApplySN(const UINT16 wTrainId) +{ + UINT32 dwRetVal = 0U; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + + if (TRAIN_SUM_MAX > wBufIndex) + { + dwRetVal = gstTrainInfo[wBufIndex].strJumpBackData.dwJumpBackApplySn; + } + else + { + /*Ĭֵ*/ + } + + return dwRetVal; +} + +/* +* гȫͷ +* ˵ const UINT16 wTrainId, гID +* ֵ void +* by cgh 20250818 +*/ +void ClearTrainSafeHeadDir(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gstTrainInfo[wBufIndex].strSafeLoc.chHeadDir = 0U; + } + else + { + ; + } +} + +/* +* гȫβ +* ˵ const UINT16 wTrainId, гID +* ֵ void +* by cgh 20250818 +*/ +void ClearTrainSafeTailDir(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gstTrainInfo[wBufIndex].strSafeLoc.chTailDir = 0U; + } + else + { + ; + } +} + +/* +* гǷȫͬһ߻ѹ +* ˵ const UINT16 wTrainId, гID +* ֵ CI_ERROR: гȫͬһ߻ѹ +* CI_SUCCESS: гȫͬһ߻ѹ +* by cgh 20250915 +*/ +UINT8 CheckTrainIsSwTrack(const UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + 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 + { + ; /*ȫͬһ߻ѹ*/ + } + } + else + { + ; + } + + return chRetVal; +} + +/* +* гǷΪ׷UT +* ˵ const UINT16 wEnvelopeID, ID +* ֵ CI_ERROR: +* CI_SUCCESS: +* by cgh 20250915 +*/ +UINT8 CheckTrainIsFollowUt(const UINT16 wEnvelopeID) +{ + UINT8 chRetVal = CI_ERROR; + UINT8 chNoCGFollowUtSwitch = 0U; + const EnvelopeStruct* pEnvelop = NULL; + UINT8 chTrainHeadRelAbgAttr = 0U; /*гͷACG*/ + UINT8 chTrainTailRelAbgAttr = 0U; /*гβACG*/ + + chNoCGFollowUtSwitch = GetNoCGFollowUtSwitch(); + if (FUNC_SWITCH_ON == chNoCGFollowUtSwitch) + { + 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 + { + + } + } + 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 bd74db8..ec183b6 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDataManage.h +++ b/TSCP/src/APP/ciapp/Train/TrainDataManage.h @@ -184,6 +184,14 @@ typedef struct S_TrainIteDataStruct UINT16 wBackOffset; /*λcm*/ } TrainIteDataStruct; +/*ԾϢṹ*/ +typedef struct S_JumpBackInfoStru +{ + UINT8 chJumpBackApplyState; /*Ծ״̬*/ + UINT8 chJumpBackReplyState; /*Ծظ״̬*/ + UINT32 dwJumpBackApplySn; /*Ծк*/ +}JumpBackInfoStru; + /*гϢṹ*/ typedef struct S_TrainInfoStru { @@ -267,6 +275,7 @@ typedef struct S_TrainInfoStru UINT16 wTrainPosMonitorInLink; /*гλüලЧʱlink*/ UINT32 dwStartFlyCycNum; /*гɳʼں*/ UINT8 chEaCmdState; /*ɢ״̬*/ + JumpBackInfoStru strJumpBackData; /*гԾ*/ }TrainInfoStru; /*̬Խṹ*/ @@ -302,6 +311,9 @@ 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ʼ @@ -1475,13 +1487,16 @@ extern UINT8 IsTrainPosValid(const UINT16 wTrainId); * const UINT8 cQueryDir ߼ζӦIJѯ߼ * const UINT8 cLogSecSum ߼ * const UINT16 pLogSecIdBuff[] ߼ID +* const UINT8 cFunctionId ID +* const UINT8 cSendLevel ͼ * UINT8* pHalfRouteSwitchMoveFlag ؽ·ɶ־ * UINT16 *pTrainOccLogSecSum г߼ * UINT16 pTrainOccLogSecID[] г߼ID * ֵ CI_SUCCESSͨ CI_ERROR: 鲻ͨ */ -UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[], UINT8* pHalfRouteSwitchMoveFlag, UINT16* pTrainOccLogSecSum, UINT16 pTrainOccLogSecID[]); +UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UINT8 cLogSecSum, const UINT16 pLogSecIdBuff[], + UINT8* pHalfRouteSwitchMoveFlag, UINT16* pTrainOccLogSecSum, UINT16 pTrainOccLogSecID[], const UINT8 cFunctionId, const UINT8 cSendLevel); /* * гԴ @@ -2448,6 +2463,139 @@ void SetTrainEaCmdState(const UINT16 wTrainId, const UINT8 chEaCmdState); */ UINT8 GetTrainEaCmdState(const UINT16 wTrainId); +/* +* Գ߷ԳڼɳϢ +* ˵ +* ֵ +* Created By LQ 2025.04.02 +*/ +void ScxClearFlyProtectInfo(void); + +/* +* AGгʻAG +* ˵const UINT16 wLinkId link ID +* ֵCI_ERROR AGгʻAG +* CI_SUCCESS AGгʻAG +* BY CGH 202050718 +*/ +UINT8 AgTrainLeaveAgCheck(const UINT16 wLinkId); +/* +* ָгԾ״̬ +* ˵const UINT16 wTrainId гID +* const UINT8 chJumpBackReplyState Ծ״̬ +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackReplyState(const UINT16 wTrainId, const UINT8 chJumpBackReplyState); + +/* +* ȡָгԾ״̬ +* ˵const UINT16 wTrainId гID +* ֵ0x55 0xAA 0x00 /Ĭֵ +* by fan 20250725 +*/ +UINT8 GetTrainJumpBackReplyState(const UINT16 wTrainId); + +/* +* ָгԾ״̬ +* ˵const UINT16 wTrainId гID +* const UINT8 chJumpBackApplyState Ծ״̬ +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackApplyState(const UINT16 wTrainId, const UINT8 chJumpBackApplyState); + +/* +* ȡָгԾ״̬ +* ˵const UINT16 wTrainId гID +* ֵ0x55 0xAA δ +* by fan 20250725 +*/ +UINT8 GetTrainJumpBackApplyState(const UINT16 wTrainId); + +/* +* ָгԾк +* ˵const UINT16 wTrainId гID +* const UINT32 dwJumpBackSNԾк +* ֵ +* by fan 20250725 +*/ +void SetTrainJumpBackApplySN(const UINT16 wTrainId, const UINT32 dwJumpBackSN); + +/* +* ȡָгԾк +* ˵const UINT16 wTrainId гID +* ֵUINT32 к +* by fan 20250725 +*/ +UINT32 GetTrainJumpBackApplySN(const UINT16 wTrainId); + +/* +* гȫͷ +* ˵ const UINT16 wTrainId, гID +* ֵ void +* by cgh 20250818 +*/ +void ClearTrainSafeHeadDir(const UINT16 wTrainId); + +/* +* гȫβ +* ˵ const UINT16 wTrainId, гID +* ֵ void +* by cgh 20250818 +*/ +void ClearTrainSafeTailDir(const UINT16 wTrainId); + +/* +* гǷȫͬһ߻ѹ +* ˵ const UINT16 wTrainId, гID +* ֵ CI_ERROR: гȫͬһ߻ѹ +* CI_SUCCESS: гȫͬһ߻ѹ +* by cgh 20250915 +*/ +UINT8 CheckTrainIsSwTrack(const UINT16 wTrainId); + +/* +* гǷΪ׷UT +* ˵ const UINT16 wEnvelopeID, ID +* ֵ CI_ERROR: +* CI_SUCCESS: +* by cgh 20250915 +*/ +UINT8 CheckTrainIsFollowUt(const UINT16 wEnvelopeID); + +/* +* ȡʹNVRAMλüලЧķɳID +* ˵UINT8 chIndex +* ֵUINT16* gNvramFlyTrainId ʹNVRAMλüලЧķɳID +* Created By LQ 2025.09.15 +*/ +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); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/TrainDefine.h b/TSCP/src/APP/ciapp/Train/TrainDefine.h index bdb35cb..9780b84 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDefine.h +++ b/TSCP/src/APP/ciapp/Train/TrainDefine.h @@ -231,13 +231,18 @@ #define TRAIN_DEL_SLEEP_ENV_INVALID (UINT8)0xAAU /*ɾ߳־Ч*/ -#define TRAIN_FLYALARM_SECNUM_MAX (UINT8)5U /*гɳ*/ +#define TRAIN_FLYALARM_SECNUM_MAX (UINT8)10U /*гɳ*/ #define SHUT_DOWN_TRAIN_NUMMAX (UINT8)253u /*ɳ崻гĿ*/ /*гɢ״̬*/ #define TRAIN_EA_CMD_STATE_VALID (UINT8)0x55U /*гɢЧ*/ #define TRAIN_EA_CMD_STATE_INVALID (UINT8)0xAAU /*гɢЧ*/ +/*гԾ״̬*/ +#define TRAIN_JUMP_BACK_STATE_VALID (UINT8)0x55U /*гԾ RCԾ*/ +#define TRAIN_JUMP_BACK_STATE_INVALID (UINT8)0xAAU /*гδԾ RCԾ*/ +#define TRAIN_JUMP_BACK_STATE_NONE (UINT8)0x00U /*RCԾظĬֵ*/ + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Transmit/TransmitDefine.h b/TSCP/src/APP/ciapp/Transmit/TransmitDefine.h index 7aa6ddc..4ae1999 100644 --- a/TSCP/src/APP/ciapp/Transmit/TransmitDefine.h +++ b/TSCP/src/APP/ciapp/Transmit/TransmitDefine.h @@ -36,6 +36,11 @@ #define TRANSMIT_2OO2_STATE_LINK ((UINT8)0x02) /*ά*/ #define TRANSMIT_2OO2_STATE_BAD ((UINT8)0x03) /*ͨж*/ +/*ͨ״̬(ڷATS豸״̬֡ͨϢ)*/ +#define TRANSMIT_CI_STATE_GOOD ((UINT8)0x55) /*ͨ*/ +#define TRANSMIT_CI_STATE_LINK ((UINT8)0xAA) /*ά*/ +#define TRANSMIT_CI_STATE_BAD ((UINT8)0xFF) /*ͨж*/ + /*ͨŹж*/ #define COM_ERROR_FSIO_MAXCYCLENUM ((UINT16)5) /*IOͨŹж*/ #define COM_ERROR_LEU_MAXCYCLENUM ((UINT32)100) /*LEUͨŹж*/ diff --git a/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c b/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c index f27b840..8e4cb2b 100644 --- a/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c +++ b/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c @@ -164,8 +164,8 @@ UINT32 GetCiTransmitRecvDataCycNum(const UINT8 localCiId, const UINT8 DeviceType { if ((CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_ZC == DeviceType) || - (CI_SYSTEM_TYPE_XIANDI == DeviceType) - ) + (CI_SYSTEM_TYPE_XIANDI == DeviceType) || + (CI_SYSTEM_TYPE_TMC == DeviceType)) { for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { @@ -329,6 +329,7 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const UINT32 dwRedBadComCycNum = 0U; UINT32 dwBlueBadComCycNum = 0U; UINT32 badEnsureCount = 0u; + if ((0u == localCiId) || (CI_SUM_MAX < localCiId)) { retVal = CI_ERROR; @@ -620,14 +621,14 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const /*ͨ*/ badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; badEnsureCount = GetCiAndOcTransmitBadEnsureCnt(); - if (badComCycNum > badEnsureCount) + if ((badComCycNum > badEnsureCount)||(0U == TransmitStateDataStru[ii].RecvDataCycNum)) { /*ͨųʱ*/ TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; } else { - /*ͨ*/ + /*ͨ*/ TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } @@ -635,12 +636,14 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const TransmitStateDataStru[ii].RecvDataBlueCycNum = gBlueTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataBlueCycNum : gBlueTransmitObjRcvCyc[ii]; dwRedBadComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataRedCycNum; dwBlueBadComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataBlueCycNum; - if ((dwRedBadComCycNum <= badEnsureCount) && (dwBlueBadComCycNum <= badEnsureCount)) + if ((dwRedBadComCycNum <= badEnsureCount) && (dwBlueBadComCycNum <= badEnsureCount)&& + (0U != TransmitStateDataStru[ii].RecvDataRedCycNum) && (0U !=TransmitStateDataStru[ii].RecvDataBlueCycNum)) { /*˫*/ TransmitStateDataStru[ii].redundantTransmitState = TRANSMIT_2OO2_STATE_GOOD; } - else if ((dwRedBadComCycNum <= badEnsureCount) || (dwBlueBadComCycNum <= badEnsureCount)) + else if (((dwRedBadComCycNum <= badEnsureCount)&&(0U != TransmitStateDataStru[ii].RecvDataRedCycNum)) + || (dwBlueBadComCycNum <= badEnsureCount)&& (0U != TransmitStateDataStru[ii].RecvDataBlueCycNum)) { /*ͨ*/ TransmitStateDataStru[ii].redundantTransmitState = TRANSMIT_2OO2_STATE_LINK; @@ -1024,4 +1027,4 @@ UINT16 GetATSInterfaceTypeId(void) } return retVal; -} +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/WLBrake/WLBrakeDataManage.c b/TSCP/src/APP/ciapp/WLBrake/WLBrakeDataManage.c index fb1b656..2fbd136 100644 --- a/TSCP/src/APP/ciapp/WLBrake/WLBrakeDataManage.c +++ b/TSCP/src/APP/ciapp/WLBrake/WLBrakeDataManage.c @@ -118,7 +118,7 @@ static void WlbAtsCmdFst(void) strCfmFst->chFlag = FLAG_SET; strCfmFst->chTiocId = chLocalId; strCfmFst->chStation = strMsgFst->chStation; - strCfmFst->chIndex = strMsgFst->chIndex; + strCfmFst->wIndex = strMsgFst->wIndex; strCfmFst->dwTime = dwCycle; switch (strMsgFst->chBrakeType) @@ -188,8 +188,8 @@ static void WlbAtsCmdFst(void) ii++; szCrcTmp[ii] = strMsgFst->chStation; ii++; - szCrcTmp[ii] = strMsgFst->chIndex; - ii++; + ShortToChar(strMsgFst->wIndex, &szCrcTmp[ii]); + ii += 2U; szCrcTmp[ii] = strMsgFst->chBrakeType; ii++; szCrcTmp[ii] = strMsgFst->chBrakeCount; @@ -260,7 +260,7 @@ static void WlbAtsCmdSnd(void) strCfmSnd->chFlag = FLAG_SET; strCfmSnd->chTiocId = chLocalId; strCfmSnd->chStation = strMsgSnd->chStation; - strCfmSnd->chIndex = strMsgSnd->chIndex; + strCfmSnd->wIndex = strMsgSnd->wIndex; strCfmSnd->dwTime = dwCycle; if (FLAG_SET != strMsgFst->chFlag) @@ -270,11 +270,14 @@ static void WlbAtsCmdSnd(void) } else if ((strMsgSnd->chAtsId != strMsgFst->chAtsId) || (strMsgSnd->chStation != strMsgFst->chStation) - || (strMsgSnd->chIndex != strMsgFst->chIndex) - || (strMsgSnd->chBrakeType != strMsgFst->chBrakeType) - || (strMsgSnd->wBrakeIndex != strMsgFst->wBrakeIndex)) + || (strMsgSnd->wIndex != strMsgFst->wIndex)) { - strCfmSnd->chOpStatus = CONFIRM_WLB_SND_UNKNOWN; /* ATSһ벻һ£δ֪ */ + strCfmSnd->chOpStatus = CONFIRM_WLB_SND_UNKNOWN; /* ATSһ֡ͷ벻һ£δ֪ */ + chFlag = FLAG_SET; + } + else if ((strMsgSnd->chBrakeType != strMsgFst->chBrakeType) || (strMsgSnd->wBrakeIndex != strMsgFst->wBrakeIndex)) + { + strCfmSnd->chOpStatus = CONFIRM_WLB_SND_INFO_DIFF; /* ATSһ벻һ£Ϣһ */ chFlag = FLAG_SET; } else @@ -317,7 +320,8 @@ static void WlbAtsCmdSnd(void) ii = 0u; szCrcTmp[ii++] = strMsgSnd->chAtsId; szCrcTmp[ii++] = strMsgSnd->chStation; - szCrcTmp[ii++] = strMsgSnd->chIndex; + ShortToChar(strMsgSnd->wIndex, &szCrcTmp[ii]); + ii += 2U; szCrcTmp[ii] = strMsgSnd->chBrakeType; ii++; szCrcTmp[ii] = strMsgSnd->chBrakeCount; diff --git a/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.c b/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.c index 91f4d51..2626b0a 100644 --- a/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.c +++ b/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.c @@ -1,6 +1,7 @@ #include "WLScreenLogicProcess.h" #include "WLScreenDataManage.h" #include "WLScreenDataPrepare.h" +#include "EnvelopeManage.h" /* ================================̬==============================*/ @@ -195,6 +196,7 @@ void wls_JudgeWLScreenSeqChange(void) UINT8 reFreshSeq = CI_ERROR; UINT8 cFunRetVal = CI_ERROR; const WLSreenInfoStruct *pTemp = NULL; + UINT8 chTrainNvramPosCheck = 0U; /*гNVRAMλñʶ*/ pTemp = wls_GetWholeLineScreeInfo(); @@ -243,28 +245,38 @@ void wls_JudgeWLScreenSeqChange(void) /** ȡг״̬Ƿı䣨гǰسޱСܿسӻ߼٣*/ isStatusChange = wls_JudgeStatusChangeAndSus(); - if ((NEED_REFRESH_NOW == isStatusChange) || (NEED_REFRESH_NOW == isHaveUT)) - { - reFreshSeq = CI_SUCCESS; - cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_EXIST); - } - else if (((NEED_REFRESH == isStatusChange) || (NEED_REFRESH == isHaveUT)) && - ((NULL != pTemp) && (UNKNOWN_TRAIN_EXIST != pTemp->UTFlag))) - { - /** ˷֧Ϊȫ֧ܳӦ޷ */ - reFreshSeq = CI_SUCCESS; - cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_EXIST); - } - else if ((UNNEED_REFRESH == isStatusChange) && (UNNEED_REFRESH == isHaveUT) && - (NULL != pTemp) && (UNKNOWN_TRAIN_EXIST == pTemp->UTFlag)) - { - cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_UNEXIST); - } - else - { - /** ά֮ǰ״̬ */ - } + chTrainNvramPosCheck = CheckInControlTrainNvramPos(); + if (CI_ERROR == chTrainNvramPosCheck) + { + ELM_LOG(ELM_LOG_FATAL, " wls_SetUTFlag,because use nvram pos"); + reFreshSeq = CI_SUCCESS; + cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_EXIST); + } + else + { + if ((NEED_REFRESH_NOW == isStatusChange) || (NEED_REFRESH_NOW == isHaveUT)) + { + reFreshSeq = CI_SUCCESS; + cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_EXIST); + } + else if (((NEED_REFRESH == isStatusChange) || (NEED_REFRESH == isHaveUT)) && + ((NULL != pTemp) && (UNKNOWN_TRAIN_EXIST != pTemp->UTFlag))) + { + /** ˷֧Ϊȫ֧ܳӦ޷ */ + reFreshSeq = CI_SUCCESS; + cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_EXIST); + } + else if ((UNNEED_REFRESH == isStatusChange) && (UNNEED_REFRESH == isHaveUT) && + (NULL != pTemp) && (UNKNOWN_TRAIN_EXIST == pTemp->UTFlag)) + { + cFunRetVal = wls_SetUTFlag(UNKNOWN_TRAIN_UNEXIST); + } + else + { + /** ά֮ǰ״̬ */ + } + } /** ɸк */ if (CI_SUCCESS == reFreshSeq) @@ -321,4 +333,55 @@ void wls_JudgeWLScreenPermit(void) wls_SetRedunTime(0u,redunTime); wls_SetWLScreenProcessFlag(WHOLE_LINE_SCREEN_UNVAILD); } +} + +/** + * @brief ܿسNVRAMλñʶ + * @param[in] + * @param[out] + * @return CI_ERROR гʹNVRAMλ + * CI_SUCCESS гδʹNVRAMλ + * @note by cgh 20250704 + */ +UINT8 CheckInControlTrainNvramPos(void) +{ + UINT8 chReval = CI_ERROR; + UINT16 wCycle = 0U; + UINT8 chTrainNvramPosFlag = 0U; /*гNVRAMλñʶ*/ + UINT8 relEnvelopeCnt = TRAIN_REL_ENVELOPE_SUM_MAX; /*гİ*/ + UINT16 relEnvelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] = { 0u }; /*гİ*/ + const EnvelopeStruct* pEnvelopeInfo = NULL; + + for (wCycle = 1U; wCycle < LINE_MAX_TRAIN; wCycle++) + { + chReval = CI_SUCCESS; + relEnvelopeCnt = elm_GetRelELIdByTrainID(wCycle, relEnvelopeID); + + if (1U == relEnvelopeCnt) + { + pEnvelopeInfo = elm_GetEnvelopeInfoPtr(relEnvelopeID[0u]); + + if ((NULL != pEnvelopeInfo) && + ((TYPE_CT_ENVELOPE == pEnvelopeInfo->envelopeType) || (TYPE_UCT_ENVELOPE == pEnvelopeInfo->envelopeType))) + { + chTrainNvramPosFlag = GetTrainNvramPosFlag(wCycle); + + if (TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramPosFlag) + { + ; /*ʹNVRAMλü*/ + } + else + { + chReval = CI_ERROR; + break; + } + } + } + else + { + /* 账 */ + } + } + + return chReval; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.h b/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.h index a50ed78..56ce592 100644 --- a/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.h +++ b/TSCP/src/APP/ciapp/WLScreen/WLScreenLogicProcess.h @@ -31,5 +31,14 @@ void wls_JudgeWLScreenSeqChange(void); */ void wls_JudgeWLScreenPermit(void); +/** + * @brief ܿسNVRAMλñʶ + * @param[in] + * @param[out] + * @return CI_ERROR гʹNVRAMλ + * CI_SUCCESS гδʹNVRAMλ + * @note by cgh 20250704 + */ +UINT8 CheckInControlTrainNvramPos(void); #endif \ No newline at end of file diff --git a/TSCP/src/DRV/imx8_drv_gpio.c b/TSCP/src/DRV/imx8_drv_gpio.c index 43cfcd7..73cb1c9 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.c +++ b/TSCP/src/DRV/imx8_drv_gpio.c @@ -9,20 +9,51 @@ static volatile uintptr_t gpio_base_4; static volatile uintptr_t gpio_base_5; static uintptr_t tbase; -static volatile unsigned int cnt; +static volatile unsigned int cnt = 0; 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; -char drv_vsr[4] = {93u, 8u, 0u, 9u}; +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}; /*GPIO init*/ int imx8_gpio_init(void) { int ret = 0; - gpio_base_0 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO0_BASE); + gpio_base_0 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO0_BASE); if(gpio_base_0 == MAP_DEVICE_FAILED) { perror("Can't map device base 0 I/O"); @@ -33,7 +64,7 @@ int imx8_gpio_init(void) } - gpio_base_1 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO1_BASE); + gpio_base_1 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO1_BASE); if(gpio_base_1 == MAP_DEVICE_FAILED) { perror("Can't map device base 1 I/O"); @@ -44,7 +75,7 @@ int imx8_gpio_init(void) } - gpio_base_2 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO2_BASE); + gpio_base_2 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO2_BASE); if(gpio_base_2 == MAP_DEVICE_FAILED) { perror("Can't map device base 2 I/O"); @@ -55,7 +86,7 @@ int imx8_gpio_init(void) } - gpio_base_3 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO3_BASE); + gpio_base_3 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO3_BASE); if(gpio_base_3 == MAP_DEVICE_FAILED) { perror("Can't map device base 3 I/O"); @@ -66,7 +97,7 @@ int imx8_gpio_init(void) } - gpio_base_4 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO4_BASE); + gpio_base_4 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO4_BASE); if(gpio_base_4 == MAP_DEVICE_FAILED) { perror("Can't map device base 4 I/O"); @@ -77,7 +108,7 @@ int imx8_gpio_init(void) } - gpio_base_5 = mmap_device_io((size_t)0x10, (uint64_t)IMX_GPIO5_BASE); + gpio_base_5 = mmap_device_io((size_t)IMX_GPIO_SIZE, (uint64_t)IMX_GPIO5_BASE); if(gpio_base_5 == MAP_DEVICE_FAILED) { perror("Can't map device base 5 I/O"); @@ -653,7 +684,6 @@ 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); @@ -679,6 +709,9 @@ void* timer( void * arg) ret = InterruptWait(0, 0); ret = InterruptUnmask(IMX_GPT0_IRQ, val); } + + /*you will never reach here*/ + return NULL; } /*create 8khz timer*/ @@ -706,11 +739,21 @@ 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*/ + } + if((cnt%(uint32_t)4) == (uint32_t)0) { out32(gpio_base_0 + IMX_GPIO_DR, (in32(gpio_base_0 + IMX_GPIO_DR) | (1UL << 4))); @@ -763,6 +806,9 @@ void* timer_25( void * arg) ret = InterruptUnmask(IMX_GPT0_IRQ, val); } + /*you will never reach here*/ + ret = NULL; + return ret; } @@ -788,7 +834,6 @@ int imx8_create_timer_pthread_25(void) } /************************************************************************/ - int imx8_gpio_release(void) { int ret = 0; @@ -860,3 +905,715 @@ 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 a430781..744dc67 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.h +++ b/TSCP/src/DRV/imx8_drv_gpio.h @@ -17,6 +17,51 @@ #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 @@ -29,8 +74,18 @@ #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 @@ -83,3 +138,111 @@ 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/DRV/imx8_drv_i2c.c b/TSCP/src/DRV/imx8_drv_i2c.c index 8896d93..633374b 100644 --- a/TSCP/src/DRV/imx8_drv_i2c.c +++ b/TSCP/src/DRV/imx8_drv_i2c.c @@ -84,7 +84,7 @@ int eeprom_read_data(int fd, uint32_t regaddr, uint8_t rx_buf[],uint32_t len,uin if(ret > 0) { - perror("eeprom read i2c error "); + } else { diff --git a/TSCP/src/MSCP/CFM/CFM_Net.c b/TSCP/src/MSCP/CFM/CFM_Net.c index a663b6c..34cff21 100644 --- a/TSCP/src/MSCP/CFM/CFM_Net.c +++ b/TSCP/src/MSCP/CFM/CFM_Net.c @@ -2491,6 +2491,10 @@ void CFM_LogCiphertextSend(void) { appType = 7u; } + else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "YJP")) + { + appType = 8u; + } else { appType = 0u; diff --git a/TSCP/src/MSCP/MSCP_main.c b/TSCP/src/MSCP/MSCP_main.c index 9b87c60..b5f36d0 100644 --- a/TSCP/src/MSCP/MSCP_main.c +++ b/TSCP/src/MSCP/MSCP_main.c @@ -117,6 +117,7 @@ static void SelfCheckInit(void); static void selfCheckSemWait(void); static void selfCheckSemPost(void); + /** * @brief 主程序入口 * @details 调用初始化入口和周期循环入口 @@ -915,3 +916,10 @@ static void s_LogicProc(ENUM_CM_RETURN(*pAppfunc)(void)) /*- 无处理 */ } } + + + + + + + diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.c b/TSCP/src/MSCP/PFM/PFM_Cfg.c index 02c8204..73a7fab 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.c +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.c @@ -40,7 +40,7 @@ CM_CHAR FS_FILE_PATH[100]; /** 平台软件版本号 */ -const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 52u }; +const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 53u }; /** 驱动软件版本号 */ CM_UINT8 MSCP_DRV_VERION[4] = {0}; /** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */ @@ -648,6 +648,10 @@ void PFM_CFG_IfconfigIp(void) sprintf(str, "ifconfig %s %s", "wm0", "192.168.145.101"); /*- 跳出 */ break; + case 0x03U: + sprintf(str, "ifconfig %s %s", "wm0", "192.168.147.101"); + /*- 跳出 */ + break; /*1-2*/ case 0x55U: sprintf(str, "ifconfig %s %s", "wm0", "192.168.16.102"); @@ -661,6 +665,10 @@ void PFM_CFG_IfconfigIp(void) sprintf(str, "ifconfig %s %s", "wm0", "192.168.17.102"); /*- 跳出 */ break; + case 0x05U: + sprintf(str, "ifconfig %s %s", "wm0", "192.168.19.102"); + /*- 跳出 */ + break; /*2-1*/ case 0xA6U: sprintf(str, "ifconfig %s %s", "wm0", "192.168.144.103"); @@ -674,6 +682,10 @@ void PFM_CFG_IfconfigIp(void) sprintf(str, "ifconfig %s %s", "wm0", "192.168.145.103"); /*- 跳出 */ break; + case 0xF6U: + sprintf(str, "ifconfig %s %s", "wm0", "192.168.147.103"); + /*- 跳出 */ + break; /*2-2*/ case 0xAAU: sprintf(str, "ifconfig %s %s", "wm0", "192.168.16.104"); @@ -687,6 +699,10 @@ void PFM_CFG_IfconfigIp(void) sprintf(str, "ifconfig %s %s", "wm0", "192.168.17.104"); /*- 跳出 */ break; + case 0xFAU: + sprintf(str, "ifconfig %s %s", "wm0", "192.168.19.104"); + /*- 跳出 */ + break; default: MSCP_LOG_MSG("drv_boardidErr:0x%x,ini:0x%x,0x%x\r\n",DrvBoard_ID,g_PFM_Cfg.BOARD_ID,g_PFM_Cfg.CPU_ID); /*- 跳出 */ @@ -758,6 +774,7 @@ static void PFM_CFG_Check_BoardID(void) case 0x53U: case 0x33U: case 0x63U: + case 0x03U: CM_NM_ASSERT(((CM_UINT8)1U == g_PFM_Cfg.BOARD_ID) && ((CM_UINT8)1U == g_PFM_Cfg.CPU_ID), CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); /*- 跳出 */ break; @@ -765,6 +782,7 @@ static void PFM_CFG_Check_BoardID(void) case 0x55U: case 0x35U: case 0x65U: + case 0x05U: CM_NM_ASSERT(((CM_UINT8)1U == g_PFM_Cfg.BOARD_ID) && ((CM_UINT8)2U == g_PFM_Cfg.CPU_ID), CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); /*- 跳出 */ break; @@ -772,6 +790,7 @@ static void PFM_CFG_Check_BoardID(void) case 0xA6U: case 0xC6U: case 0x96U: + case 0xF6U: CM_NM_ASSERT(((CM_UINT8)2U == g_PFM_Cfg.BOARD_ID) && ((CM_UINT8)1U == g_PFM_Cfg.CPU_ID), CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); /*- 跳出 */ break; @@ -779,6 +798,7 @@ static void PFM_CFG_Check_BoardID(void) case 0xAAU: case 0xCAU: case 0x9AU: + case 0xFAU: CM_NM_ASSERT(((CM_UINT8)2U == g_PFM_Cfg.BOARD_ID) && ((CM_UINT8)2U == g_PFM_Cfg.CPU_ID), CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); /*- 跳出 */ break; diff --git a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c index e27d6f6..10aab04 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c @@ -50,6 +50,8 @@ UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UIN UINT8 dfsInitTrainDepotConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); /* ߽ݽṹ */ UINT8 dfsInitBoundaryAxleConfigData(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount); +/*ʼ[ѹ]*/ +UINT8 dfsInitSpecialEaConfigData(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount); /*ݰ汾ݴ̺*/ static UINT8 initConfigCbtcInfoTaskTab(void); @@ -68,6 +70,7 @@ static INIT_TASK_TAB_STRU g_struInitTaskTab[]= {DQU_QFUN_TRUE, CBTC_CONFIG_DEPOT_ID, dfsInitTrainDepotConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_CC, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_BOUNDARY_AXLE_ID,dfsInitBoundaryAxleConfigData, 5,1,0}, + {DQU_QFUN_TRUE, CBTC_SPECIAL_EA_ID, dfsInitSpecialEaConfigData, 5,1,0}, }; /*ʼǼDZĿ*/ static const UINT16 MAX_INITTASK_COUNT=sizeof(g_struInitTaskTab)/sizeof(INIT_TASK_TAB_STRU); @@ -119,24 +122,27 @@ static UINT8 initConfigCbtcInfoTaskTab(void) g_struInitTaskTab[6].bIsEffective=DQU_QFUN_FASLE;/*ϿĬϲִУ*/ g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ*/ g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ߽*/ - rtnValue = 1; + g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУѹ*/ + rtnValue = 1U; } else if (DQU_CBTC_FAO == cbtcVersionType) /*FAO*/ { g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*FAOĬϲִУϵͳýṹ3-CPK*/ g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*FAOĬϲִУϵͳýṹ3-HLT*/ g_struInitTaskTab[5].bIsEffective=DQU_QFUN_FASLE;/*FAOĬϲִУϵͳýṹ3-DG*/ - g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ*/ - g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ߽*/ - rtnValue = 1; + g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*FAOĬϲִУ*/ + g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*FAOĬϲִУ߽*/ + g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*FAOĬϲִУѹ*/ + rtnValue = 1U; } else if(DQU_CBTC_HLT == cbtcVersionType) /*ͨ*/ { g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*ͨĬϲִУϵͳýṹ3-CPK*/ g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*ͨĬϲִУϵͳýṹ3-FAO*/ g_struInitTaskTab[5].bIsEffective=DQU_QFUN_FASLE;/*ͨĬϲִУϵͳýṹ3-DG*/ - g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ*/ - g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ߽*/ + g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*ͨĬϲִУ*/ + g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*ͨĬϲִУ߽*/ + g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*ͨĬϲִУѹ*/ rtnValue = 1; } else if(DQU_CBTC_DG == cbtcVersionType)/*칦*/ @@ -144,9 +150,10 @@ static UINT8 initConfigCbtcInfoTaskTab(void) g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*DGĬϲִУϵͳýṹ3-CPK*/ g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*DGĬϲִУϵͳýṹ3-FAO*/ g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*DGĬϲִУϵͳýṹ3-HLT*/ - g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ*/ - g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*ϿĬϲִУ߽*/ - rtnValue = 1; + g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*DGĬϲִУ*/ + g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*DGĬϲִУ߽*/ + g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*DGĬϲִУѹ*/ + rtnValue = 1U; } else if (DQU_CBTC_CC == cbtcVersionType)/**/ { @@ -154,7 +161,7 @@ static UINT8 initConfigCbtcInfoTaskTab(void) g_struInitTaskTab[3].bIsEffective = DQU_QFUN_FASLE;/*ĬϲִУϵͳýṹ3-FAO*/ g_struInitTaskTab[4].bIsEffective = DQU_QFUN_FASLE;/*ĬϲִУϵͳýṹ3-HLT*/ g_struInitTaskTab[5].bIsEffective = DQU_QFUN_FASLE;/*ĬϲִУϵͳýṹ3-DG*/ - rtnValue = 1; + rtnValue = 1U; } else /*δֵð汾ֵδñ־λ*/ { @@ -1339,5 +1346,85 @@ UINT8 dfsInitBoundaryAxleConfigData(UINT8* pDataAddr, UINT32 dataSize, UINT16 ro rtnValue = 0U; /*׵ַָΪգ0*/ } + return rtnValue; +} + +/********************************************** +* ܣʼ[ѹ]-CC +* pDataAddr: ׵ַ +* dataSize: ֽڳ +* rowCount: +* +* ֵ:1: ɹ, +* 0: ʧ +* BY cgh 20250818 +**********************************************/ +UINT8 dfsInitSpecialEaConfigData(UINT8* pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 0U; + UINT16 ii = 0U; + UINT32 rowDataLen = 0U; + UINT8* pData = pDataAddr; + UINT16 jj = 0U; + + if (NULL != pDataAddr) + { + rtnValue = 1U; + + if ((0U < rowCount) && (5U >= rowCount) && (0U != dataSize)) + { + g_pCbtcConfigDataStru->BoundarySpecialEaInfoLen = rowCount; + rowDataLen = dataSize / rowCount; + + for (ii = 0U; ii < rowCount; ii++) + { + pData = pDataAddr + rowDataLen * ii; + + /**/ + g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].wIndex = ShortFromChar(pData); + pData += 2U; + + /*ͷǰ*/ + g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].dwFrontDis = LongFromChar(pData); + pData += 4U; + + /*β*/ + g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].dwBehindDis = LongFromChar(pData); + pData += 4U; + + /*link*/ + g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].wLinkSum = ShortFromChar(pData); + pData += 2U; + + if ((0U < g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].wLinkSum) && (21U > g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].wLinkSum)) + { + for (jj = 0U; jj < g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].wLinkSum; jj++) + { + g_pCbtcConfigDataStru->cbtcSpecialEaInfo[ii].szLinkId[jj] = ShortFromChar(pData); + pData += 2U; + } + } + else + { + rtnValue = 0U; + break; + } + + } + } + else if ((0U == rowCount) || (0U == dataSize)) + { + g_pCbtcConfigDataStru->BoundarySpecialEaInfoLen = 0U; /*Ϊ0ȡ*/ + } + else + { + rtnValue = 0U; /*ޣ0*/ + } + } + else + { + rtnValue = 0U; /*׵ַָΪգ0*/ + } + return rtnValue; } \ No newline at end of file diff --git a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h index fb05b52..82141d7 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h @@ -145,6 +145,15 @@ extern "C" { UINT8 cStorageLineType; /*泵*/ } CBTC_BOUNDARY_AXLE_CONFIG_STRU; + /*ѹṹ*/ + typedef struct { + UINT16 wIndex; /**/ + UINT32 dwFrontDis; /*ͷǰ*/ + UINT32 dwBehindDis; /*β*/ + UINT16 wLinkSum; /*LINKĿ*/ + UINT16 szLinkId[20]; /*LINK*/ + } CBTC_SPECIAL_EA_CONFIG_STRU; + /*CBTCϢ*/ typedef struct CBTC_ConfigDataStruct { @@ -161,6 +170,9 @@ extern "C" { CBTC_BOUNDARY_AXLE_CONFIG_STRU cbtcBoundaryAxleInfo[100]; /*߽Ϣṹ飬ʼ*/ UINT16 BoundaryAxleInfoLen; /*鳤*/ + + CBTC_SPECIAL_EA_CONFIG_STRU cbtcSpecialEaInfo[5]; /*ѹ򣬳ʼ*/ + UINT16 BoundarySpecialEaInfoLen; /*鳤*/ }CBTC_CFG_DATA_STRU; /********************************************* diff --git a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h index ea3c7b4..329932c 100644 --- a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h +++ b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h @@ -108,6 +108,7 @@ #define CBTC_CONFIG_DATA_ID 3 /*ϵͳID*/ #define CBTC_CONFIG_DEPOT_ID 4 /*ϢID*/ #define CBTC_CONFIG_BOUNDARY_AXLE_ID 5 /*߽ñID*/ +#define CBTC_SPECIAL_EA_ID 6 /*ѹID*/ /*Э 궨*/ #define DSU_DATA_PROTCL_TYPE 0x30 /*ЭbookId*/ diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c index 35e6951..a199720 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c @@ -2576,6 +2576,7 @@ static UINT8 AxleSgmtStru_CC() /*ʼlinkĩlinkڣwMiddleLinkIdΪ0xFFFF*/ if (pTempAxleSgmtStru->wTmnlLkId == linkId1) { + /*мlink*/ pTempAxleSgmtStru->wMiddleLinkId[0] = UINT16_MAX; } else @@ -2593,10 +2594,10 @@ static UINT8 AxleSgmtStru_CC() } if (0U != rtnValue) - { - /*мlinkΪlinkId1*/ + { if (pTempAxleSgmtStru->wTmnlLkId == linkId2) { + /*мlinkΪlinkId1*/ pTempAxleSgmtStru->wMiddleLinkId[0] = linkId1; } else @@ -2614,10 +2615,10 @@ static UINT8 AxleSgmtStru_CC() } if (0U != rtnValue) - { - /*мlinkΪlinkId1*/ + { if (pTempAxleSgmtStru->wTmnlLkId == linkId3) { + /*мlinkΪlinkId1+linkId2*/ pTempAxleSgmtStru->wMiddleLinkId[0] = linkId1; pTempAxleSgmtStru->wMiddleLinkId[1] = linkId2; } @@ -2636,17 +2637,17 @@ static UINT8 AxleSgmtStru_CC() } if (0U != rtnValue) - { - /*мlinkΪlinkId1*/ + { if (pTempAxleSgmtStru->wTmnlLkId == linkId4) { + /*мlinkΪlinkId1+linkId2+linkId3*/ pTempAxleSgmtStru->wMiddleLinkId[0] = linkId1; pTempAxleSgmtStru->wMiddleLinkId[1] = linkId2; pTempAxleSgmtStru->wMiddleLinkId[2] = linkId3; } else { - /*γ5link,ܳ*/ + /*γ5link,ܳ*/ rtnValue = 0U; } } @@ -9157,7 +9158,7 @@ UINT8 initScreen(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) rowDataLen = dataSize/rowCount; /*鳤ȼ*/ - initFlag = SCREEN_STRU_init(pDataAddr + dataSize - rowDataLen, &stru); + initFlag = SCREEN_STRU_init(pDataAddr + dataSize - rowDataLen, &stru,(UINT16)rowDataLen); /*ΪID + 1*/ dsuEmapIndexStru->SCREENINDEXNUM = stru.wId; @@ -9233,7 +9234,7 @@ UINT8 initScreen(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) pData = pDataAddr + rowDataLen*j; /*ݽṹ*/ - initFlag = SCREEN_STRU_init(pData, pCurrentStru); + initFlag = SCREEN_STRU_init(pData, pCurrentStru, (UINT16)rowDataLen); if (0U == initFlag) { /*initָ*/ @@ -16618,7 +16619,7 @@ UINT8 initEa(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) if (2U == rtnValue) { /*̬ռ*/ - dsuStaticHeadStru->pEaStru = (DSU_LINK_STRU *)MyNew(sizeof(DSU_LINK_STRU) * dsuDataLenStru->wEaLen); + dsuStaticHeadStru->pEaStru = (DSU_EMAP_EA_STRU *)MyNew(sizeof(DSU_EMAP_EA_STRU) * dsuDataLenStru->wEaLen); /*̬ռʧ*/ if (NULL == dsuStaticHeadStru->pEaStru) @@ -16628,7 +16629,7 @@ UINT8 initEa(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) else { /*ڴΪЧ*/ - memset(dsuStaticHeadStru->pEaStru, 0xFF, sizeof(DSU_LINK_STRU) * dsuDataLenStru->wEaLen); + memset(dsuStaticHeadStru->pEaStru, 0xFF, sizeof(DSU_EMAP_EA_STRU) * dsuDataLenStru->wEaLen); } } } diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c index 8baba03..ff8880e 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c @@ -921,54 +921,54 @@ UINT8 AXLE_STRU_init(UINT8 *pDataAdd,DSU_AXLE_STRU *pAxleStru) if ((NULL != pDataAdd) && (NULL != pAxleStru)) { UINT8 *pData = pDataAdd; - UINT8 i = 0; + UINT8 i = 0U; /**/ pAxleStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; /**/ - for (i = 0; i<16; i++) + for (i = 0U; i<16U; i++) { pAxleStru->szCaption[i] = *pData; - pData += 1; + pData += 1U; } /*Ϣ*/ pAxleStru->wType = ShortFromChar(pData); - pData += 2; + pData += 2U; /**/ pAxleStru->dwAxleKilo = LongFromChar(pData); - pData += 4; + pData += 4U; /*link*/ pAxleStru->wLkId = ShortFromChar(pData); - pData += 2; + pData += 2U; /*linkƫ(cm)*/ pAxleStru->dwLkOfst = LongFromChar(pData); - pData += 4; + pData += 4U; /*ű־*/ pAxleStru->dwAxleKiloPlueMinusSign = *pData; - pData += 1; + pData += 1U; - rtnValue = 1; + rtnValue = 1U; } return rtnValue; } /************************************** ܣȫݽṹʼ -˵[in] pDataAdd ݵַļ +˵[in] pDataAdd ݵַļ UINT16 rowlen [out] pScreenStru ʼĽṹָ ֵ0ʧܣ1ɹ עṹ UINT16 wManageLogicCI; ߼CI **ݽṹ ɾͣ mod by qw.liu 2022-02-22 ***************************/ -UINT8 SCREEN_STRU_init(UINT8 * pDataAdd,DSU_SCREEN_STRU * pScreenStru) +UINT8 SCREEN_STRU_init(UINT8 * pDataAdd, DSU_SCREEN_STRU * pScreenStru, UINT16 rowlen) { UINT8 rtnValue = 0U; /*ָ*/ @@ -976,20 +976,32 @@ UINT8 SCREEN_STRU_init(UINT8 * pDataAdd,DSU_SCREEN_STRU * pScreenStru) { UINT8 * pData = pDataAdd; pScreenStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; #if 0 pScreenStru->wLocalPlatformId = ShortFromChar(pData); pData += 2; #endif pScreenStru->wRelatLkId = ShortFromChar(pData); - pData += 2; + pData += 2U; pScreenStru->wwRelatLkOrient = ShortFromChar(pData); - pData += 2; + pData += 2U; pScreenStru->wVobcCiID = ShortFromChar(pData); - pData += 2; + pData += 2U; + + if (8U < rowlen) + { + pScreenStru->wFstProLinkId = ShortFromChar(pData); + pData += 2U; + + pScreenStru->wSndProLinkId = ShortFromChar(pData); + pData += 2U; + + pScreenStru->wTrdProLinkId = ShortFromChar(pData); + pData += 2U; + } rtnValue = 1; } @@ -1577,68 +1589,106 @@ UINT8 STOPPOINT_STRU_init(UINT8 * pDataAdd,DSU_STOPPOINT_STRU * pStoppointStru,U UINT8 AXLE_SGMT_STRU_init(UINT8 * pDataAdd, DSU_AXLE_SGMT_STRU * pAxleSgmtStru) { UINT8 rtnValue = 0U; + UINT8 * pData = pDataAdd; + UINT16 i= 0U; + UINT8 chSwitchFind = 0U; + UINT16 wLength = 0U; + UINT8 chDataType = gLocalPublicDataType; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pAxleSgmtStru)) { - UINT8 * pData = pDataAdd; - UINT8 i = 0; + rtnValue = 1U; + /**/ pAxleSgmtStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; + + if (0x55 == chDataType)/*°*/ + { + wLength = 16U; + } + else + { + wLength = 32U; + } /**/ - for (i = 0; i<16; i++) + for (i = 0U; iszCaption[i] = *pData; - pData += 1; + pData += 1U; } /**/ pAxleSgmtStru->wOrgnAxleId = ShortFromChar(pData); - pData += 2; + pData += 2U; /*յ*/ pAxleSgmtStru->wTmnlAxleId = ShortFromChar(pData); - pData += 2; + pData += 2U; /*link*/ pAxleSgmtStru->wOrgnLkId = ShortFromChar(pData); - pData += 2; + pData += 2U; /*յlink*/ pAxleSgmtStru->wTmnlLkId = ShortFromChar(pData); - pData += 2; + pData += 2U; /*ΰ߼εĸ*/ pAxleSgmtStru->wIncludeLogicSgmtNum = ShortFromChar(pData); - pData += 2; - - /*ΰ߼εı*/ - for (i = 0; i<50; i++) + pData += 2U; + if (MAX_ALEX_HAVE_LG_NUM >= pAxleSgmtStru->wIncludeLogicSgmtNum) { - pAxleSgmtStru->wLogicSgmtId[i] = ShortFromChar(pData); - pData += 2; + /*߼θϷ ΰ߼εı*/ + for (i = 0U; iwIncludeLogicSgmtNum; i++) + { + pAxleSgmtStru->wLogicSgmtId[i] = ShortFromChar(pData); + pData += 2U; + } + for (i = 0U; i < (MAX_ALEX_HAVE_LG_NUM - pAxleSgmtStru->wIncludeLogicSgmtNum) +1U; i++) + { + /*Ŀ*/ + pAxleSgmtStru->wRelatPointNum = ShortFromChar(pData); + pData += 2U; + if ((DSU_NULL_16 != pAxleSgmtStru->wRelatPointNum)&&( 4U >= pAxleSgmtStru->wRelatPointNum)) + { + chSwitchFind = 1U; + break; + } + else + { + ;/*ȡЧֵ*/ + } + } } - - /*Ŀ*/ - pAxleSgmtStru->wRelatPointNum = ShortFromChar(pData); - pData += 2; - - for (i = 0; i<4; i++) + else { - /**/ - pAxleSgmtStru->wRelatPointId[i] = ShortFromChar(pData); - pData += 2; - /*״̬*/ - pAxleSgmtStru->wRelatPointStatus[i] = ShortFromChar(pData); - pData += 2; + rtnValue = 0U; + debug_infor_printf("AXLE_SGMT_STRU_init fail,ALEX%d log num%d, MAX: \n", pAxleSgmtStru->wId, pAxleSgmtStru->wIncludeLogicSgmtNum, MAX_ALEX_HAVE_LG_NUM); } + if ((0U != rtnValue) &&(0U != chSwitchFind)) + { + for (i = 0U; i < 4U; i++) + { + /**/ + pAxleSgmtStru->wRelatPointId[i] = ShortFromChar(pData); + pData += 2U; + /*״̬*/ + pAxleSgmtStru->wRelatPointStatus[i] = ShortFromChar(pData); + pData += 2U; + } - /*Id*/ - pAxleSgmtStru->wRelatePhysicalSgmtId = ShortFromChar(pData); - pData += 2; + /*Id*/ + pAxleSgmtStru->wRelatePhysicalSgmtId = ShortFromChar(pData); + pData += 2U; - rtnValue = 1; + rtnValue = 1U; + } + else + { + rtnValue = 0U; + } } return rtnValue; } @@ -2497,6 +2547,8 @@ UINT8 ROUTE_STRU_init(UINT8 *pDataAdd,DSU_ROUTE_STRU *pRouteStru) UINT8 LOGIC_SGMT_STRU_init(UINT8 * pDataAdd, DSU_LOGIC_SGMT_STRU * pLogicSgmtStru) { UINT8 rtnValue = 0U; + UINT16 wLength = 0U; + UINT8 chDataType = gLocalPublicDataType; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pLogicSgmtStru)) { @@ -2506,7 +2558,16 @@ UINT8 LOGIC_SGMT_STRU_init(UINT8 * pDataAdd, DSU_LOGIC_SGMT_STRU * pLogicSgmtStr pLogicSgmtStru->wId = ShortFromChar(pData); pData += 2; - for (i = 0; i<16; i++) + if (0x55 == chDataType)/*°*/ + { + wLength = 16U; + } + else + { + wLength = 32U; + } + + for (i = 0U; iszCaption[i] = *pData; @@ -2604,11 +2665,11 @@ UINT8 CBTC_ACCESS_LINK_STRU_init(UINT8 *pDataAdd, DSU_CBTC_ACCESS_LINK_STRU *pCB pCBTCAccessLinkStru->wId = ShortFromChar(pData); pData += 2; - /*ļĿ*/ + /*߼Ŀ*/ pCBTCAccessLinkStru->wIncludeLogicSgmtNum = ShortFromChar(pData); pData += 2; - /*ļα*/ + /*߼α*/ for (i = 0; i<(pCBTCAccessLinkStru->wIncludeLogicSgmtNum); i++) { pCBTCAccessLinkStru->wIncludeLogicSgmtId[i] = ShortFromChar(pData); @@ -3297,12 +3358,12 @@ UINT32 dwVersionOfCIToTMC static UINT8 CI_STRU_init_CC(UINT8 * pDataAdd, DSU_CI_STRU * pCIStru) { UINT8 rtnValue = 0U; + UINT8 chDataType = gLocalPublicDataType; + UINT8 * pData = pDataAdd; + UINT16 i = 0; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pCIStru)) { - UINT8 * pData = pDataAdd; - UINT16 i = 0; - /**/ pCIStru->wIndex = ShortFromChar(pData); pData += 2; @@ -3378,11 +3439,16 @@ static UINT8 CI_STRU_init_CC(UINT8 * pDataAdd, DSU_CI_STRU * pCIStru) pCIStru->RCIEntraceType = *pData; pData += 1; #endif - - /*ȫɸ*/ - pCIStru->cWLScreenType = *pData; - pData += 1; - + if (0x55 == chDataType)/*°*/ + { + /*ȫɸ*/ + pCIStru->cWLScreenType = *pData; + pData += 1; + } + else + { + ; + } rtnValue = 1; } return rtnValue; @@ -3601,17 +3667,29 @@ UINT8 CONGRADE_STRU_init(UINT8 * pDataAdd, DSU_CONGRADE_STRU * pConGradeStru) UINT8 PHYSICAL_SGMT_STRU_init(UINT8 * pDataAdd, DSU_PHYSICAL_SGMT_STRU * pPhysicalSgmtStru) { UINT8 rtnValue = 0U; + UINT8 chDataType = gLocalPublicDataType; + UINT8 * pData = pDataAdd; + UINT16 i = 0; + UINT16 wLength = 0U; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pPhysicalSgmtStru)) { - UINT8 * pData = pDataAdd; - UINT16 i = 0; + /*ID*/ + + if (0x55 == chDataType)/*°*/ + { + wLength = 16U; + } + else + { + wLength = 32U; + } pPhysicalSgmtStru->wId = ShortFromChar(pData); pData += 2; /**/ - for (i = 0; i<16; i++) + for (i = 0; iszName[i] = *pData; pData++; @@ -3640,26 +3718,33 @@ UINT8 PHYSICAL_SGMT_STRU_init(UINT8 * pDataAdd, DSU_PHYSICAL_SGMT_STRU * pPhysic UINT8 DSU_BLOC_TRG_AREA_STRU_init(UINT8 * pDataAdd, DSU_BLOC_TRG_AREA_STRU * pBlocTrgAreaStru) { UINT8 rtnValue = 0U; + UINT8 *pData = pDataAdd; + UINT16 i = 0U; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pBlocTrgAreaStru)) { - UINT8 *pData = pDataAdd; - UINT16 i = 0; - /*ID*/ pBlocTrgAreaStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; pBlocTrgAreaStru->wAxleSgmtNum = ShortFromChar(pData); - pData += 2; + pData += 2U; - /*Ϣ*/ - for (i = 0; i<(pBlocTrgAreaStru->wAxleSgmtNum); i++) + if (MAX_BLOC_TRG_INCLUDE_SEC_NUM < pBlocTrgAreaStru->wAxleSgmtNum) { - pBlocTrgAreaStru->wAxleSgmtId[i] = ShortFromChar(pData); - pData += 2; + rtnValue = 0U; + /**/ + } + else + { + /*Ϣ*/ + for (i = 0U; i < (pBlocTrgAreaStru->wAxleSgmtNum); i++) + { + pBlocTrgAreaStru->wAxleSgmtId[i] = ShortFromChar(pData); + pData += 2U; + } + rtnValue = 1U; } - rtnValue = 1; } return rtnValue; } @@ -3674,26 +3759,32 @@ UINT8 DSU_BLOC_TRG_AREA_STRU_init(UINT8 * pDataAdd, DSU_BLOC_TRG_AREA_STRU * pBl UINT8 DSU_CBTC_TRG_AREA_STRU_init(UINT8 * pDataAdd, DSU_CBTC_TRG_AREA_STRU * pCbtcTrgAreaStru) { UINT8 rtnValue = 0U; + UINT8 * pData = pDataAdd; + UINT16 i = 0U; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pCbtcTrgAreaStru)) { - UINT8 * pData = pDataAdd; - UINT16 i = 0; - /*ID*/ pCbtcTrgAreaStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; pCbtcTrgAreaStru->wLogicSgmtNum = ShortFromChar(pData); - pData += 2; - - /*Ϣ*/ - for (i = 0; i<(pCbtcTrgAreaStru->wLogicSgmtNum); i++) + pData += 2U; + if (MAX_CBTC_TRG_INCLUDE_SEC_NUM < pCbtcTrgAreaStru->wLogicSgmtNum) { - pCbtcTrgAreaStru->wLogicSgmtId[i] = ShortFromChar(pData); - pData += 2; + rtnValue = 0U; + /**/ + } + else + { + /*Ϣ*/ + for (i = 0U; i < (pCbtcTrgAreaStru->wLogicSgmtNum); i++) + { + pCbtcTrgAreaStru->wLogicSgmtId[i] = ShortFromChar(pData); + pData += 2U; + } + rtnValue = 1U; } - rtnValue = 1; } return rtnValue; } @@ -4053,37 +4144,65 @@ UINT8 DSU_SPKS_BUTTON_STRU_init(UINT8 *pDataAdd, DSU_SPKS_BUTTON_STRU *pSpksButt { UINT8 rtnValue = 0U; /*ָ*/ + UINT8 *pData = pDataAdd; + UINT16 i = 0U; + UINT16 wTempValue = 0U; + UINT8 chFindFlag = 0U; if ((NULL != pDataAdd) && (NULL != pSpksButtonStru)) { - UINT8 *pData = pDataAdd; - UINT16 i = 0; - /**/ pSpksButtonStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; pSpksButtonStru->wPhysicalSgmtNum = ShortFromChar(pData); - pData += 2; + pData += 2U; - /*ID*/ - for (i = 0; iwPhysicalSgmtNum) { - pSpksButtonStru->wRelatePhysicalSgmtId[i] = ShortFromChar(pData); - pData += 2; + rtnValue = 0U; } + else + { + /*ID*/ + for (i = 0U; iwPhysicalSgmtNum; i++) + { + pSpksButtonStru->wRelatePhysicalSgmtId[i] = ShortFromChar(pData); + pData += 2U; + } + /*Ч*/ + for (i = 0U; i<(DSU_SPKS_STRU_PHYID-pSpksButtonStru->wPhysicalSgmtNum)+1U; i++) + { + wTempValue = ShortFromChar(pData); + pData += 2U; + if ((DSU_NULL_16 != wTempValue) && (DSU_NULL_8 >= wTempValue)) + { + /*Ч*/ + pSpksButtonStru->wManageCI = wTempValue; + chFindFlag = 1U; + break; + } + else + { + ; /**/ + } + } - /*CI*/ - pSpksButtonStru->wManageCI = ShortFromChar(pData); - pData += 2; - /*CI*/ - pSpksButtonStru->wManageVirCI = ShortFromChar(pData); - pData += 2; + if (0U == chFindFlag) + { + /*CI*/ + pSpksButtonStru->wManageCI = ShortFromChar(pData); + pData += 2U; + } + /*CI*/ + pSpksButtonStru->wManageVirCI = ShortFromChar(pData); + pData += 2U; - /*ѩվ̨ID*/ - pSpksButtonStru->wPlatFormId = ShortFromChar(pData); - pData += 2; + /*ѩվ̨ID*/ + pSpksButtonStru->wPlatFormId = ShortFromChar(pData); + pData += 2U; - rtnValue = 1; + rtnValue = 1U; + } } return rtnValue; } @@ -4476,6 +4595,11 @@ UINT8 PSC_STRU_init(UINT8 *pDataAdd, DSU_PSC_STRU *pPSCStru) UINT8 EA_STRU_init(UINT8 * pDataAdd, DSU_EMAP_EA_STRU* pEaStrc) { UINT8 rtnValue = 0U; + static UINT8 chRunCount = 0U; /*ִиúĴ жǷΪһν*/ + static UINT8 chMaxEaStartLinkNum = MAX_EA_BOUNDARY_NUM; /*߽Ŀ*/ + UINT16 wTempValue = 0U; /*ʱ2ֽڳнӱ*/ + UINT8 chTempValue = 0U; /*ʱ1ֽڳнӱ*/ + /*ָ*/ if ((NULL != pDataAdd) && (NULL != pEaStrc)) { @@ -4486,36 +4610,103 @@ UINT8 EA_STRU_init(UINT8 * pDataAdd, DSU_EMAP_EA_STRU* pEaStrc) pEaStrc->wId = ShortFromChar(pData); pData += 2U; - /*߽*/ - pEaStrc->chStartLinkNum = *pData; - pData++; - - for (chIndex = 0U; chIndex < 5u; chIndex++) + if (0U == chRunCount) { - /* ߽link */ - pEaStrc->szStartLinkId[chIndex] = ShortFromChar(pData); - pData += 2U; - - /* ߽ѯյ߽߼ */ - pEaStrc->szStartLinkDir[chIndex] = *pData; + /*߽*/ + chMaxEaStartLinkNum = *pData; pData++; + + if (MAX_EA_BOUNDARY_NUM >= chMaxEaStartLinkNum) + { + + for (chIndex = 0U; chIndex < chMaxEaStartLinkNum; chIndex++) + { + pData += 3U; + } + + for (chIndex = 0U; chIndex < MAX_EA_BOUNDARY_NUM; chIndex++) + { + wTempValue = ShortFromChar(pData); + pData += 2U; + + chTempValue = *pData; + pData++; + + /* ϶ȡݣЧֱֵȡȷֵʱ˳ */ + if ((wTempValue != DSU_NULL_16) && (chTempValue != DSU_NULL_8)) + { + break; + } + else + { + /*߽+1*/ + chMaxEaStartLinkNum++; + } + } + rtnValue = 1U; + } + else + { + ; /*ʧ*/ + } + + chRunCount++; } - - /*յ߽*/ - pEaStrc->chEndLinkNum = *pData; - pData++; - - for (chIndex = 0U; chIndex < 5u; chIndex++) + else { - /* յ߽link */ - pEaStrc->szEndLinkId[chIndex] = ShortFromChar(pData); - pData += 2U; + if (MAX_EA_BOUNDARY_NUM < chMaxEaStartLinkNum) + { + ; /*ʧ*/ + } + else + { + /*߽*/ + pEaStrc->chStartLinkNum = *pData; + pData++; - /* յ߽ѯ߽߼ */ - pEaStrc->szEndLinkDir[chIndex] = *pData; - pData++; - } - rtnValue = 1; + if (MAX_EA_BOUNDARY_NUM >= pEaStrc->chStartLinkNum) + { + for (chIndex = 0U; chIndex < chMaxEaStartLinkNum; chIndex++) + { + /* ߽link */ + pEaStrc->szStartLinkId[chIndex] = ShortFromChar(pData); + pData += 2U; + + /* ߽ѯյ߽߼ */ + pEaStrc->szStartLinkDir[chIndex] = *pData; + pData++; + } + + /*յ߽*/ + pEaStrc->chEndLinkNum = *pData; + pData++; + + if (MAX_EA_BOUNDARY_NUM >= pEaStrc->chEndLinkNum) + { + for (chIndex = 0U; chIndex < pEaStrc->chEndLinkNum; chIndex++) + { + /* յ߽link */ + pEaStrc->szEndLinkId[chIndex] = ShortFromChar(pData); + pData += 2U; + + /* յ߽ѯ߽߼ */ + pEaStrc->szEndLinkDir[chIndex] = *pData; + pData++; + } + + rtnValue = 1U; + } + else + { + ; /*ʧ*/ + } + } + else + { + ; /*ʧ*/ + } + } + } } return rtnValue; } @@ -4530,38 +4721,44 @@ UINT8 EA_STRU_init(UINT8 * pDataAdd, DSU_EMAP_EA_STRU* pEaStrc) UINT8 DSU_LOGSEC_SPKS_BUTTON_STRU_init(UINT8* pDataAdd, DSU_LOGSEC_SPKS_BUTTON_STRU* pSpksButtonStru) { UINT8 rtnValue = 0U; + UINT8* pData = pDataAdd; + UINT16 i = 0U; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pSpksButtonStru)) { - UINT8* pData = pDataAdd; - UINT16 i = 0; - /**/ pSpksButtonStru->wId = ShortFromChar(pData); - pData += 2; + pData += 2U; pSpksButtonStru->wLogSecNum = ShortFromChar(pData); - pData += 2; + pData += 2U; - /*߼ID*/ - for (i = 0; i < DSU_SPKS_STRU_LOGSECID; i++) + if (DSU_SPKS_STRU_LOGSECID < pSpksButtonStru->wLogSecNum) { - pSpksButtonStru->wRelateLogSecId[i] = ShortFromChar(pData); - pData += 2; + rtnValue = 0U; } + else + { + /*߼ID*/ + for (i = 0; i < DSU_SPKS_STRU_LOGSECID; i++) + { + pSpksButtonStru->wRelateLogSecId[i] = ShortFromChar(pData); + pData += 2U; + } - /*CI*/ - pSpksButtonStru->wManageCI = ShortFromChar(pData); - pData += 2; - /*CI*/ - pSpksButtonStru->wManageVirCI = ShortFromChar(pData); - pData += 2; + /*CI*/ + pSpksButtonStru->wManageCI = ShortFromChar(pData); + pData += 2U; + /*CI*/ + pSpksButtonStru->wManageVirCI = ShortFromChar(pData); + pData += 2U; - /*ѩվ̨ID*/ - pSpksButtonStru->wPlatFormId = ShortFromChar(pData); - pData += 2; + /*ѩվ̨ID*/ + pSpksButtonStru->wPlatFormId = ShortFromChar(pData); + pData += 2U; - rtnValue = 1; + rtnValue = 1U; + } } return rtnValue; } diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h index a89686e..b8f5a6b 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.h @@ -16,10 +16,12 @@ #ifndef DQU_STRUCT_INIT_H #define DQU_STRUCT_INIT_H - #ifdef __cplusplus extern "C" { #endif + +extern UINT8 gLocalPublicDataType; /*ݰ汾*/ + /************************************** ܣlinkṹʼ ˵[in] pDataAdd ݵַļ @@ -79,13 +81,13 @@ UINT8 AXLE_STRU_init(UINT8 *pDataAdd,DSU_AXLE_STRU *pAxleStru); /************************************** ܣȫݽṹʼ -˵[in] pDataAdd ݵַļ +˵[in] pDataAdd ݵַļUINT16 rowlen [out] pScreenStru ʼĽṹָ ֵ0=ʧܣ1=ɹ עṹ UINT16 wManageLogicCI; ߼CI ***************************/ -UINT8 SCREEN_STRU_init(UINT8 *pDataAdd,DSU_SCREEN_STRU *pScreenStru); +UINT8 SCREEN_STRU_init(UINT8 * pDataAdd, DSU_SCREEN_STRU * pScreenStru, UINT16 rowlen); /************************************** diff --git a/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h b/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h index d8c0393..8849269 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h @@ -80,12 +80,14 @@ #define MAX_BLOC_TRG_AREA_NUM 30U /*ʽ*/ #define MAX_CBTC_TRG_AREA_NUM 30U /*CBTC*/ #define MAX_ALEX_HAVE_LG_NUM 50U /*߼*/ +#define MAX_BLOC_TRG_INCLUDE_SEC_NUM 40U /*ʽΰθ*/ +#define MAX_CBTC_TRG_INCLUDE_SEC_NUM 40U /*CBTCΰθ*/ #define DSU_ROUTE_STRU_SWITCH ((UINT8)16) #define DSU_ROUTE_STRU_wLinkId ((UINT8)50) /*·linkֵ*/ #define DSU_ROUTE_STRU_AxleSgmtId ((UINT8)30) -#define DSU_SPKS_STRU_PHYID ((UINT8)100) /*SPKSӰ*/ +#define DSU_SPKS_STRU_PHYID ((UINT8)150) /*SPKSӰ*/ #define DSU_SPKS_STRU_LOGSECID ((UINT8)200) /*SPKSӰ߼*/ #define AXISSEC_NEXT_AXISSEC_MAX_NUM 16 /*by cgh 20230724 ڼĿ*/ @@ -94,6 +96,8 @@ #define MAX_PROTECT_AXIS_NUM ((UINT8)100U) /*Ź*/ #define MAX_ACCESS_AXIS_NUM ((UINT8)100U) /*Źӽ*/ +#define MAX_EA_BOUNDARY_NUM 10U /*߽*/ + #ifdef __cplusplus extern "C" { @@ -330,8 +334,6 @@ typedef struct DSU_AxleStruct UINT16 wLkId; /*link*/ UINT32 dwLkOfst; /*linkƫ(cm)*/ UINT8 dwAxleKiloPlueMinusSign; /*ű־*/ - - }DSU_AXLE_STRU; @@ -343,8 +345,9 @@ typedef struct DSU_ScreenStruct UINT16 wRelatLkId; /*Źlink*/ UINT16 wwRelatLkOrient; /*Թlink߼ķλ()*/ UINT16 wVobcCiID; /*VOBC-CIλ*/ - - + UINT16 wFstProLinkId; /*ŷlink1*/ + UINT16 wSndProLinkId; /*ŷlink2*/ + UINT16 wTrdProLinkId; /*ŷlink3*/ /* ݴĿУļɾֵҪ̬---Ϲѧ */ UINT16 wManageLogicCI; /*߼CI*/ @@ -430,7 +433,7 @@ typedef struct DSU_AxleSgmtStruct { UINT16 wId; /**/ - CHAR szCaption [16]; /**/ + CHAR szCaption [32]; /**/ UINT16 wOrgnAxleId; /**/ UINT16 wTmnlAxleId; /*յ*/ UINT16 wOrgnLkId; /*link*/ @@ -465,7 +468,7 @@ typedef struct DSU_AxleSgmtStruct typedef struct DSU_LogicSgmtStruct { UINT16 wId; /**/ - CHAR szCaption [16]; /*߼*/ + CHAR szCaption [32]; /*߼*/ UINT16 wOrgnLkId; /*link*/ UINT32 dwOrgnLkOfst; /*linkƫ(cm)*/ UINT16 wTmnlLkId; /*յlink*/ @@ -854,7 +857,7 @@ typedef struct DSU_ConGrade/**/ typedef struct DSU_PhysicalSgmt/**/ { UINT16 wId; /**/ - CHAR szName[16]; /**/ + CHAR szName[32]; /**/ UINT8 Type; /**/ UINT8 LjkFlag; /*м־*/ UINT16 BelongAxleSysID; /*ϵͳID*/ @@ -864,14 +867,14 @@ typedef struct DSU_BlocTrgAera/* { UINT16 wId; /**/ UINT16 wAxleSgmtNum; /*θ*/ - UINT16 wAxleSgmtId[40]; /* 40̬ ݻͨݽṹV13.0.0 by sds 2018-6-7*/ + UINT16 wAxleSgmtId[MAX_BLOC_TRG_INCLUDE_SEC_NUM]; /* 40̬ ݻͨݽṹV13.0.0 by sds 2018-6-7*/ }DSU_BLOC_TRG_AREA_STRU; typedef struct DSU_CbtcTrgAera/*CBTC*/ { UINT16 wId; /**/ UINT16 wLogicSgmtNum; /*߼θ*/ - UINT16 wLogicSgmtId[40]; /*߼ 40̬ ݻͨݽṹV13.0.0 by sds 2018-6-7*/ + UINT16 wLogicSgmtId[MAX_CBTC_TRG_INCLUDE_SEC_NUM]; /*߼ 40̬ ݻͨݽṹV13.0.0 by sds 2018-6-7*/ }DSU_CBTC_TRG_AREA_STRU; /*վ̨*/ @@ -992,11 +995,11 @@ typedef struct DSU_EmapEa { UINT16 wId; /* ӵͼñ */ UINT8 chStartLinkNum; /* ߽ */ - UINT16 szStartLinkId[5]; /* ߽link */ - UINT8 szStartLinkDir[5]; /* ߽ѯյ߼ */ + UINT16 szStartLinkId[MAX_EA_BOUNDARY_NUM]; /* ߽link */ + UINT8 szStartLinkDir[MAX_EA_BOUNDARY_NUM]; /* ߽ѯյ߼ */ UINT8 chEndLinkNum; /* յ߽ */ - UINT16 szEndLinkId[5]; /* յ߽link */ - UINT8 szEndLinkDir[5]; /* յ߽ѯ߼ */ + UINT16 szEndLinkId[MAX_EA_BOUNDARY_NUM]; /* յ߽link */ + UINT8 szEndLinkDir[MAX_EA_BOUNDARY_NUM]; /* յ߽ѯ߼ */ }DSU_EMAP_EA_STRU; typedef struct DSU_StaticHead/*ž̬ݸݽṹͷָ*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbConfig.h b/TSCP/src/protocol/fsfb/common_fsfb/FsfbConfig.h index 0c8d7cd..b7accbb 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbConfig.h +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbConfig.h @@ -15,9 +15,7 @@ #define _FSFB_CONFIG_H_ /* ¼뿪 */ -#define FSFB_RECORD_ERR_ASCII /* ַʽ¼ */ - #define FSFB_RECORD_SIMPLIFY_BIN /* ԶƷʽ¼ */ -#undef FSFB_RECORD_SIMPLIFY_BIN + #endif diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbLnkNodeMgr.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbLnkNodeMgr.c index aff89cc..09659a5 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbLnkNodeMgr.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbLnkNodeMgr.c @@ -39,6 +39,7 @@ #include "FsfbLnkNodeMgr.h" #include "FsfbConfig.h" #include "CommonRecord.h" +#include "FsfbRecordDelare.h" #ifdef __cplusplus @@ -60,7 +61,7 @@ static UINT8 FsfbSetNodeParam(const DSU_FSFB_LINK_RINFO_STRU* pRecvDsuLnkInf, static UINT8 FsfbCheckRecvDsuLnkInfo(UINT16 srcAddr,UINT16 destAddr, const DSU_FSFB_LINK_RINFO_STRU *pRecvLnkInfo); static UINT8 FsfbCheckInputAddr(UINT16 LocalDevName,UINT16 destName,const DSU_FSFB_LINK_RINFO_STRU *pRecvLnkInfo); -static void FsfbLnkNodeInfo2VarArray(const Fsfb_Lnk_Info_Node_Stru* pNode, UINT8* VarArray); +static void FsfbLnkNodeInfo2VarArray(const Fsfb_Lnk_Info_Node_Stru* pNode, UINT8* VarArray, UINT8* recordArray, UINT16 recordArraySize); /*-------------------------------------------------------------------- * ·ģڲ End *--------------------------------------------------------------------*/ @@ -147,6 +148,8 @@ UINT8 FsfbOutputReplaceLnkNode(UINT16 locName,UINT16 destName,UINT8 applyCat,Fsf ret = dsuFsfbSGetLnkInfo(locName,destName,applyCat,&outLnkInfo); if(ret == 0) { + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FIND_LNK_ERR); /* ѯ· */ + return ret; } @@ -154,6 +157,8 @@ UINT8 FsfbOutputReplaceLnkNode(UINT16 locName,UINT16 destName,UINT8 applyCat,Fsf pLnkNodeInfo = FsfbInsertLnkNode(pFsfbStruct,destName,applyCat); if(NULL == pLnkNodeInfo) { + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_INSERT_NODE_ERR); /* ѯ· */ + /* ɸǽڵȡʧ 󷵻 */ ret = 0; return ret; @@ -169,11 +174,15 @@ UINT8 FsfbOutputReplaceLnkNode(UINT16 locName,UINT16 destName,UINT8 applyCat,Fsf if (ret == 0) { + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_INIT_NODE_ERR); /* ʼڵ */ + return ret; } } else { + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ADDR_ERR); /* ַ */ + /* Ϣȡʧ ͨŹϵʽ CICC ַϵ */ ret = 0; return ret; @@ -368,74 +377,80 @@ UINT8 FsfbUptLnkNodeInfoBySsr(UINT8* pAppData,UINT8 applyCat,FSFB_INFO_STRU* pFs { /* 󷵻 */ retVal = 0; + + PrintRecArrayByte(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, IN_SSR_SSE_TC_ERR); /*SSRSSEŴ*/ + PrintRecArray4ByteB(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, SseTCe); + PrintRecArray4ByteB(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, pTmStmp->SseTC); } } else { /* 󷵻 0 */ retVal = 0; + + PrintRecArrayByte(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, IN_SSR_STATUS_ERR); /*SSR״̬*/ + PrintRecArrayByte(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, pFsfbLnkInfo->RecvLinkStatus); } } else { /* 󷵻 */ retVal =0; + + PrintRecArrayByte(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, IN_CAT_ERR); /*֡*/ + PrintRecArrayByte(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, applyCat); } return retVal; } - - -/*********************************************************************** - * : FsfbUptLnkNodeInfoByAbt - * : ABTϢͨŽڵϢ - * : - * - * -------------------------------------------------------------- - * pAppData UINT8* IN һ֡ĸʽ - * pFsfbStrut FSFB_INFO_STRU* IN FSFBЭͳһṹ - * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB·Ϣ - * - - * ֵ : UINT8 1 0󷵻 - ***********************************************************************/ + /** +* @brief FsfbUptLnkNodeInfoByAbt ABTϢͨŽڵϢ +* @param pAppData ȡֵΧ:ֽ +* @param pFsfbStrut FSFBṹ ȡֵΧ:οṹFSFB_INFO_STRU +* @param pLnkNode ·ڵ ȡֵΧ:οṹFsfb_Lnk_Info_Node_Stru + * @return 0:ʧ;1ɹ +*/ UINT8 FsfbUptLnkNodeInfoByAbt(UINT8* pAppData, FSFB_INFO_STRU* pFsfbStrut, Fsfb_Lnk_Info_Node_Stru* pLnkNode) { - UINT8 rtnVal = 0u; /*ֵ*/ + UINT8 rtnVal = 0u; /*-< úֵΪʧ*/ FsfbLinkInfoStru* lnkInfo = NULL; /*·Ϣ*/ ComTimeStampStru* timeStamp = NULL; /*ʱ*/ UINT32 tc = 0u; /**/ INT32 delayTc = 0; /**/ UINT8 funSidXorTnRtn = 0u; /*ûȡSidXorTnֵ*/ UINT8 funSvcRtn = 0u; /*SVCУ麯ֵ*/ - UINT8 procRst = 0u; /**/ + UINT8 procRst = 0u; /*-< ôΪ0*/ UINT32 sidXorTn[2] = { 0u }; /*SID XOR TN BSDļ*/ UINT8* recordArray = NULL; /*־*/ UINT16 recordArraySize = 0u; /*־鳤*/ - if ((NULL != pAppData) && (NULL != pFsfbStrut) && (NULL != pLnkNode) && (NULL != pFsfbStrut->RecordArray)) /**/ + if ((NULL != pAppData) && (NULL != pFsfbStrut) && (NULL != pLnkNode) && (NULL != pFsfbStrut->RecordArray)) /*-< Ƿǿ*/ { - lnkInfo = &pLnkNode->FsfbLinInfo; - timeStamp = &lnkInfo->TimeStmp; - recordArray = pFsfbStrut->RecordArray; - recordArraySize = pFsfbStrut->RecordArraySize; + lnkInfo = &pLnkNode->FsfbLinInfo; /*-< ·*/ + timeStamp = &lnkInfo->TimeStmp; /*-< ʱ*/ + recordArray = pFsfbStrut->RecordArray; /*-< ü¼*/ + recordArraySize = pFsfbStrut->RecordArraySize; /*-< ü¼鳤*/ - if ((Fsfb_WaitBtm_Sseabt == lnkInfo->RecvLinkStatus) || (Fsfb_WaitBtm_Btcabt == lnkInfo->RecvLinkStatus) || (Fsfb_WaitBtm_AbtOrSse == lnkInfo->RecvLinkStatus)) /*ȴBTMSSEABT֡ ȴBTMBTCABT֡ ȴBTMABT֡SSE֡*/ + PrintRecArrayByte(recordArray, recordArraySize, IN_ABT_STATUS); /*ABT״̬*/ + PrintRecArrayByte(recordArray, recordArraySize, lnkInfo->RecvLinkStatus); + + if ((Fsfb_WaitBtm_Sseabt == lnkInfo->RecvLinkStatus) || (Fsfb_WaitBtm_Btcabt == lnkInfo->RecvLinkStatus) || (Fsfb_WaitBtm_AbtOrSse == lnkInfo->RecvLinkStatus)) /*-< ·״̬ǷȴBTMSSEABT֡ ȴBTMBTCABT֡ ȴBTMABT֡SSE֡*/ { - tc = LongFromCharLE(&pAppData[FSFB_TC_POS]); - delayTc = tc - timeStamp->NowRecvTCr - 1; - if ((0 <= delayTc) && (COM_MAX_K > delayTc)) /**/ + tc = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*-< յ*/ + delayTc = tc - timeStamp->NowRecvTCr - 1; /*-< յϴŲ*/ + if ((0 <= delayTc) && (COM_MAX_K > delayTc)) /*-< ŲǷڵ0 Сڲ鳤*/ { - funSidXorTnRtn = ComGetSidXorTn(pAppData, sidXorTn); /*ȡSidXorTn*/ - funSvcRtn = ComCheckCRCM(sidXorTn, timeStamp->NowSINIT_ADD_SID_XOR_Tn, delayTc, lnkInfo->LocalNode.TSD_POST_RXDADA_K); /*SVC*/ - if ((1u == funSidXorTnRtn) && (1u == funSvcRtn)) /*ɹ*/ + funSidXorTnRtn = ComGetSidXorTn(pAppData, sidXorTn); /*-< ûȡSidXorTn*/ + funSvcRtn = ComCheckCRCM(sidXorTn, timeStamp->NowSINIT_ADD_SID_XOR_Tn, delayTc, lnkInfo->LocalNode.TSD_POST_RXDADA_K); /*üSVC*/ + if ((1u == funSidXorTnRtn) && (1u == funSvcRtn)) /*-< úǷɹ*/ { - procRst = ComUpdtTmStmpStru(sidXorTn, tc, delayTc, lnkInfo->LocalNode.PREC_SINIT_K, timeStamp); /*ʱ*/ + procRst = ComUpdtTmStmpStru(sidXorTn, tc, delayTc, lnkInfo->LocalNode.PREC_SINIT_K, timeStamp); /*-< øʱ,ֵ*/ } else /*ʧ*/ { -#ifdef FSFB_RECORD_ERR_ASCII +#ifdef FSFB_RECORD_ERR_ASCII + /*- ¼úʧ־*/ PrintFiles(recordArray, recordArraySize, "W:ABT SVC Error.\n"); PrintFileU16Hex(recordArray, recordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintFileU32Hex(recordArray, recordArraySize, sidXorTn[0]); /*sidXorTn[0]*/ @@ -444,66 +459,96 @@ UINT8 FsfbUptLnkNodeInfoByAbt(UINT8* pAppData, FSFB_INFO_STRU* pFsfbStrut, Fsfb_ PrintFileU32Hex(recordArray, recordArraySize, timeStamp->NowSINIT_ADD_SID_XOR_Tn[1]); /*NowSINIT_ADD_SID_XOR_Tn[1]*/ PrintFileU32Hex(recordArray, recordArraySize, delayTc); /*delayTc*/ #endif - procRst = 0u; + + + PrintRecArrayByte(recordArray, recordArraySize, IN_ABT_SVC_ERR); /*ABTSVC*/ + PrintRecArray2ByteB(recordArray, recordArraySize, pLnkNode->DestDevName); /*DestDevName*/ + PrintRecArray4ByteB(recordArray, recordArraySize, sidXorTn[0]); /*sidXorTn[0]*/ + PrintRecArray4ByteB(recordArray, recordArraySize, sidXorTn[1]); /*sidXorTn[1]*/ + PrintRecArray4ByteB(recordArray, recordArraySize, timeStamp->NowSINIT_ADD_SID_XOR_Tn[0]); /*NowSINIT_ADD_SID_XOR_Tn[0]*/ + PrintRecArray4ByteB(recordArray, recordArraySize, timeStamp->NowSINIT_ADD_SID_XOR_Tn[1]); /*NowSINIT_ADD_SID_XOR_Tn[1]*/ + PrintRecArray4ByteB(recordArray, recordArraySize, tc); /*tc*/ + PrintRecArray4ByteB(recordArray, recordArraySize, timeStamp->NowRecvTCr); /*NowRecvTCr*/ + PrintRecArray4ByteB(recordArray, recordArraySize, delayTc); /*delayTc*/ + + procRst = 0u; /*-< ôΪ0*/ } } else /**/ { #ifdef FSFB_RECORD_ERR_ASCII + /*- ¼־*/ PrintFiles(pFsfbStrut->RecordArray, pFsfbStrut->RecordArraySize, "W:ABT old tc\n"); PrintFileU16Hex(recordArray, recordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintFileU32Hex(recordArray, recordArraySize, timeStamp->NowRecvTCr); /*NowRecvTCr*/ PrintFileU32Hex(recordArray, recordArraySize, tc); /*tc*/ #endif - procRst = 0u; + + PrintRecArrayByte(recordArray, recordArraySize, IN_ABT_OLD_ERR); /*ABTŴ*/ + PrintRecArray2ByteB(recordArray, recordArraySize, pLnkNode->DestDevName); /*DestDevName*/ + PrintRecArray4ByteB(recordArray, recordArraySize, tc); /*tc*/ + PrintRecArray4ByteB(recordArray, recordArraySize, timeStamp->NowRecvTCr); /*NowRecvTCr*/ + PrintRecArray4ByteB(recordArray, recordArraySize, delayTc); /*delayTc*/ + + procRst = 0u; /*-< ôΪ0*/ } - if (1u == procRst) /**/ + if (1u == procRst) /*-< Ƿ*/ { - if (Fsfb_WaitBtm_Sseabt == lnkInfo->RecvLinkStatus) /*ͨ·Ľ״̬Ϊ ȴSSR*/ + if (Fsfb_WaitBtm_Sseabt == lnkInfo->RecvLinkStatus) /*-< ·״̬ǷΪ BTMSSE ABT*/ { - lnkInfo->SendLinkStatus = Fsfb_SendBtm_Btc; /*·״̬Ϊbtc*/ + lnkInfo->SendLinkStatus = Fsfb_SendBtm_Btc; /*-< ·״̬ΪBTC*/ } else /*BTC ȴABT ȴBTMABT֡SSE֡*/ { - lnkInfo->RecvLinkStatus = Fsfb_RecvData; /*··״̬Ϊ*/ - lnkInfo->SendLinkStatus = Fsfb_Halt; - timeStamp->NowRecvTCr = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*ǰյʱ=ļ*/ + lnkInfo->RecvLinkStatus = Fsfb_RecvData; /*-< ·״̬Ϊ*/ + lnkInfo->SendLinkStatus = Fsfb_Halt; /*-< ·״̬Ϊж*/ + timeStamp->NowRecvTCr = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*-< õǰյ*/ } } } - else if (Fsfb_WaitBtm_SbtAbt == lnkInfo->RecvLinkStatus) /*ȴBTMsbtAbt֡*/ + else if (Fsfb_WaitBtm_SbtAbt == lnkInfo->RecvLinkStatus) /*-< ·״̬ǷȴBTMsbtAbt֡*/ { - tc = LongFromCharLE(&pAppData[FSFB_TC_POS]); - delayTc = ComCheckTimeStamp(tc, timeStamp->NowRecvTCr, lnkInfo->LocalNode.MaxLost); - if (delayTc < 0) + tc = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*-< յ*/ + delayTc = ComCheckTimeStamp(tc, timeStamp->NowRecvTCr, lnkInfo->LocalNode.MaxLost); /*-< üյϴյǷ󶪰*/ + if (delayTc < 0) /*-< úǷʧ*/ { - lnkInfo->SendLinkStatus = Fsfb_SendSSE; /*·״̬ΪSSE*/ + lnkInfo->SendLinkStatus = Fsfb_SendSSE; /*-< ·״̬ΪSSE*/ } else { - lnkInfo->SendLinkStatus = Fsfb_SendBtm_Btc; /*·״̬ΪBtc*/ + lnkInfo->SendLinkStatus = Fsfb_SendBtm_Btc; /*-< ·״̬ΪBTC*/ } - timeStamp->NowRecvTCr = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*ǰյʱ=ļ*/ - procRst = 1u; + + PrintRecArrayByte(recordArray, recordArraySize, IN_ABT_SSE_BTC); /*ABTSSEBTC*/ + PrintRecArray4ByteB(recordArray, recordArraySize, tc); /*tc*/ + PrintRecArray4ByteB(recordArray, recordArraySize, timeStamp->NowRecvTCr); /*NowRecvTCr*/ + PrintRecArrayByte(recordArray, recordArraySize, lnkInfo->LocalNode.MaxLost); + PrintRecArray4ByteB(recordArray, recordArraySize, delayTc); /*delayTc*/ + PrintRecArrayByte(recordArray, recordArraySize, lnkInfo->SendLinkStatus); + PrintRecArray4ByteB(recordArray, recordArraySize, LongFromCharLE(&pAppData[FSFB_TC_POS])); /*NowRecvTCr*/ + + timeStamp->NowRecvTCr = LongFromCharLE(&pAppData[FSFB_TC_POS]); /*-< õǰյ*/ + + procRst = 1u; /*-< ôΪ1*/ } else /*Ƿ״̬*/ { - lnkInfo->SendLinkStatus = Fsfb_Halt; + lnkInfo->SendLinkStatus = Fsfb_Halt; /*-< ·״̬Ϊж*/ } - if (1u == procRst) /**/ + if (1u == procRst) /*-< Ƿ*/ { - timeStamp->LastLocalRecTC = *pFsfbStrut->CycleNum; /* ϴյĵıʱ */ - timeStamp->LastRecvTCr = timeStamp->NowRecvTCr; /* ϴνܱʱΪ ǰյʱ Ԥ */ - lnkInfo->NoRecvDataCycleNum = 0u; /* */ + timeStamp->LastLocalRecTC = *pFsfbStrut->CycleNum; /*-< ϴյΪǰں*/ + timeStamp->LastRecvTCr = timeStamp->NowRecvTCr; /*-< ϴյΪ·ǰ*/ + lnkInfo->NoRecvDataCycleNum = 0u; /*-< Ϊ0*/ pLnkNode->IsSendFlag = 1u; - rtnVal = 1u; + rtnVal = 1u; /*-< úֵΪɹ*/ } - return rtnVal; + return rtnVal; /*-< غֵ*/ } } @@ -661,7 +706,7 @@ UINT16 FsfbWriteToVarArray(UINT8 *VarArray,FSFB_INFO_STRU *pFsfbStruct) if((pFsfbStruct->VarArraySize - index) >= FSFB_VAR_NODE_LEN) { /*ض·м*/ - FsfbLnkNodeInfo2VarArray(CurFillLnk,&VarArray[index]); + FsfbLnkNodeInfo2VarArray(CurFillLnk, &VarArray[index], pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize); index +=FSFB_VAR_NODE_LEN; /*¼¼,·״̬Ϣ*/ /*ǰ·Ľڵһڵ*/ @@ -1193,7 +1238,7 @@ static UINT8 FsfbCheckInputAddr(UINT16 LocalDevName,UINT16 destName,const DSU_FS * * ֵ : ***********************************************************************/ -static void FsfbLnkNodeInfo2VarArray(const Fsfb_Lnk_Info_Node_Stru* pNode, UINT8* VarArray) +static void FsfbLnkNodeInfo2VarArray(const Fsfb_Lnk_Info_Node_Stru* pNode, UINT8* VarArray, UINT8* recordArray, UINT16 recordArraySize) { UINT16 index = 0; const FsfbLinkInfoStru *pFsfbLnkInfo = &pNode->FsfbLinInfo; @@ -1407,6 +1452,37 @@ static void FsfbLnkNodeInfo2VarArray(const Fsfb_Lnk_Info_Node_Stru* pNode, UINT8 } } + + + PrintRecArrayByte(recordArray, recordArraySize, OUT_LNK); /*·*/ + PrintRecArray2ByteB(recordArray, recordArraySize, pNode->DestDevName); + PrintRecArrayByte(recordArray, recordArraySize, pNode->Applcat); + PrintRecArrayByte(recordArray, recordArraySize, pNode->IsSendFlag); + PrintRecArray2ByteB(recordArray, recordArraySize, pFsfbLnkInfo->rcvSrcAdd); + PrintRecArray2ByteB(recordArray, recordArraySize, pFsfbLnkInfo->sendSrcAdd); + PrintRecArray2ByteB(recordArray, recordArraySize, pFsfbLnkInfo->rcvDestAdd); + PrintRecArray2ByteB(recordArray, recordArraySize, pFsfbLnkInfo->sendDestAdd); + PrintRecArrayByte(recordArray, recordArraySize, pFsfbLnkInfo->RecvLinkStatus); + PrintRecArrayByte(recordArray, recordArraySize, pFsfbLnkInfo->SendLinkStatus); + PrintRecArrayByte(recordArray, recordArraySize, pFsfbLnkInfo->NoRecvDataCycleNum); + PrintRecArrayByte(recordArray, recordArraySize, pFsfbLnkInfo->NoAppDataCycleNum); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->TC); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->LastLocalRecTC); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->LastRecvTCr); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->NowRecvTCr); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->RecvSseTCe); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->SseTC); + PrintRecArrayByte(recordArray, recordArraySize, pTmStmp->NumSendSse); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->SsrTc); + for (i = 0; i < 2; i++) + { + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->NowTn[i]); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->LastTn[i]); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->SseTn[i]); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->SeqEng[i]); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->NowSINIT_ADD_SID_XOR_Tn[i]); + PrintRecArray4ByteB(recordArray, recordArraySize, pTmStmp->LastSINIT_ADD_SID_XOR_Tn[i]); + } } diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c index bd26383..07115f8 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c @@ -53,7 +53,7 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h" +#include "FsfbRecordDelare.h " #include "FsfbMessageInfo.h" #include "FsfbLnkNodeMgr.h" /*-------------------------------------------------------------------- @@ -130,10 +130,11 @@ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, PrintFiles(RecordArray,RecordSize,"\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ - PrintRecArrayByte(RecordArray,RecordSize,FSFB_MSG_IN_TAG); /* һϢ֡ʼʶ */ - PrintRecArray2ByteB(RecordArray,RecordSize,localDevName); /* 豸 */ - PrintRecArray2ByteB(RecordArray,RecordSize,destDevName); /* Է豸 */ - PrintRecArray2ByteB(RecordArray,RecordSize,msgLen); /* Ӧݳ */ + 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) @@ -184,6 +185,9 @@ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, } else { + PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* һϢ֡ʼʶ */ + PrintRecArrayByte(RecordArray, RecordSize, applycat); + retVal = 0; } } @@ -226,6 +230,11 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* /* SSR ֡ */ retVal=CreateSsrMsg(APPLCAT_TDM,CurFillLnk,&outMsg[index]); index+=SSR_SIZE; + + 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); } else { @@ -245,6 +254,12 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* index +=SSR_SIZE; startFlag = 1; + + 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); + case Fsfb_SendBtm_Btc: if (startFlag == 1) { @@ -264,6 +279,9 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* BuildBtcBody(pFsfbStruct->TmpDataBuff,&msgLen); retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,BTC_DF_SIZE,FSFB_BTC_MSG,&outMsg[index],CurFillLnk); index +=BTC_SIZE; + + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_BTC_MSG); + break; case Fsfb_SendBtm_Abt: msgLen =0; @@ -271,6 +289,13 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* index+=4; 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); /**/ + PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, Fsfb_SendBtm_Abt); + break; case Fsfb_SendBtm_BtdAbt: msgLen =0; @@ -279,12 +304,30 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,ABT_DF_SIZE,FSFB_ABT_MSG,&outMsg[index],CurFillLnk); CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_Sbt; index +=ABT_SIZE; + + 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); + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, Fsfb_SendBtm_BtdAbt); + case Fsfb_SendBtm_Ebt: msgLen =0; LnkInfoBuildFrame(CurFillLnk->DestDevName,EBT_SIZE+2,&outMsg[index]); index+=4; retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,EBT_DF_SIZE,FSFB_EBT_MSG,&outMsg[index],CurFillLnk); - index +=EBT_SIZE; + index += EBT_SIZE; + + 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); /**/ + 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: /* ֡ͷ */ @@ -292,6 +335,12 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* index+=4; retVal = CreateSseMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); index +=SSE_SIZE; + + 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); + break; default: retVal =1; @@ -437,7 +486,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ #endif } else /* ͨ */ @@ -453,7 +502,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Node Not Exist.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ #endif } } @@ -464,7 +513,9 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_LEN_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); + PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif } retVal = 1; @@ -516,7 +567,7 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ #endif } else /* ͨ */ @@ -529,9 +580,7 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_SSR_NOT_ILLEGAL|FSFB_ERROR_NULL); -#endif + } else { @@ -546,7 +595,7 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ #endif } } @@ -557,7 +606,9 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_LEN_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); + PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif } @@ -621,7 +672,7 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ #endif } @@ -634,9 +685,6 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /* ³˵ǶӦSSR ô¼ */ #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); -#endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_SSR_NOT_ILLEGAL|FSFB_ERROR_NULL); #endif } @@ -653,7 +701,7 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ #endif } @@ -665,7 +713,9 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_LEN_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); + PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif } @@ -725,7 +775,7 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ #endif } else /* ͨ */ @@ -738,9 +788,7 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_SSR_NOT_ILLEGAL|FSFB_ERROR_NULL); -#endif + } else { @@ -755,7 +803,7 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ #endif } } @@ -766,7 +814,9 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_LEN_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); + PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif } @@ -812,6 +862,10 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != BTD_SDS)||(applyCat != APPLCAT_BTM)) { + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*BTDijȴ*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, tmpSds); + PrintRecArrayByte(RecordArray, RecordArraySize, applyCat); + retVal = 0; return retVal; } @@ -830,7 +884,7 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NOT_NODE_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ #endif } else /* ͨ */ @@ -854,9 +908,7 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ PrintFiles(RecordArray,RecordArraySize,"W:BTD InVaild.\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_NO_INVALID|FSFB_ERROR_NULL); -#endif + /* ֤ʧ */ retVal =0; } @@ -865,6 +917,9 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO else { retVal = 0; + + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + /* ¼ͨŽڵ㲻Ϸ */ } } @@ -876,7 +931,9 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO PrintFiles(RecordArray,RecordArraySize,"W:Tsd CRC Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(RecordArray,RecordArraySize,FSFB_WARN|FSFB_RECEIVE|FSFB_MSG_CRC_ERR|FSFB_ERROR_NULL); + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); + PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif } return retVal; @@ -1338,6 +1395,9 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN UINT8 *RecordArray = pFsfbStruct->RecordArray; UINT16 RecordArraySize = pFsfbStruct->RecordArraySize; + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*BTD״̬*/ + PrintRecArrayByte(RecordArray, RecordArraySize, pLnkNode->FsfbLinInfo.RecvLinkStatus); + /* ͨŽڵ״̬Ϊ ״̬ */ if( Fsfb_RecvData == pLnkNode->FsfbLinInfo.RecvLinkStatus) { @@ -1369,45 +1429,73 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN /* ˵Ѿյһ֡ݣҪʱ */ Tout = 0; } - if(Tout >= 0) /* Ϸʱյ */ + if (Tout >= 0) /* Ϸʱյ */ { /* RSDȡSID XOR TN CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ - tmpret = ComGetSidXorTn(pBtdMsg,SidXorTn); + tmpret = ComGetSidXorTn(pBtdMsg, SidXorTn); /* CRCMЧ */ - retVal = ComCheckCRCM(SidXorTn,pTmStmp->NowSINIT_ADD_SID_XOR_Tn , - DelayTCr,pNodeParam->TSD_POST_RXDADA_K); - if((1 == retVal)&&(tmpret == 1)) /* ɹ ӦϢ */ + retVal = ComCheckCRCM(SidXorTn, pTmStmp->NowSINIT_ADD_SID_XOR_Tn, + DelayTCr, pNodeParam->TSD_POST_RXDADA_K); + if ((1 == retVal) && (tmpret == 1)) /* ɹ ӦϢ */ { /* ʱṹ : pTmStmpStruǿգֵ϶Ϊ1 */ - retVal = ComUpdtTmStmpStru(SidXorTn,TCr,DelayTCr,pNodeParam->PREC_SINIT_K,pTmStmp); + retVal = ComUpdtTmStmpStru(SidXorTn, TCr, DelayTCr, pNodeParam->PREC_SINIT_K, pTmStmp); retVal = 1; /* */ } else { #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ - PrintFiles(RecordArray,RecordArraySize,"W:CRCM Error.\n"); + PrintFiles(RecordArray, RecordArraySize, "W:CRCM Error.\n"); #endif - /* ʧ 󷵻 */ + + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*BTDSVC*/ + PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ + PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[0]); /*sidXorTn[0]*/ + PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[1]); /*sidXorTn[1]*/ + PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowSINIT_ADD_SID_XOR_Tn[0]); /*NowSINIT_ADD_SID_XOR_Tn[0]*/ + 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*/ + PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ + + /* ʧ 󷵻 */ retVal = 0; - } + } } else /* ʱ */ { #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Time Out.\n"); #endif + + 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*/ + PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->Tout); + PrintRecArray4ByteB(RecordArray, RecordArraySize, Tout); + retVal = 0; } } else { #ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ - PrintFiles(RecordArray,RecordArraySize,"DelayTCr > MaxLost\n"); + PrintFiles(RecordArray, RecordArraySize, "DelayTCr > MaxLost\n"); #endif - /* Ķ طSSEͬ */ + + 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ͬ */ pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; retVal = 0; - } + } } else if( Fsfb_Halt == pLnkNode->FsfbLinInfo.RecvLinkStatus) { diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c index a8812cd..484dd2f 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c @@ -58,7 +58,7 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h" +#include "FsfbRecordDelare.h " #include "FsfbProtclCommon.h" #include "FsfbLnkNodeMgr.h" #include "FsfbMessageInfo.h" @@ -180,6 +180,10 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* ͨŽڵָ */ Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*嵱ǰָ;*/ + + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /**/ + PrintRecArray4ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, QueueStatus(&pFsfbStruct->OutputDataQueue)); + CurFillLnk=pFsfbStruct->LnkHead; /* ޷ۼ */ @@ -216,12 +220,19 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) if (tmpRetVal == 0) { + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*Ӧݴ*/ + PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); + LongToChar(0,pFsfbStruct->AppArray); break; } } else { + 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);/*֡*/ } } @@ -254,7 +265,7 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) *******************************************************/ fsfbVarLen = FsfbWriteToVarArray(&pFsfbStruct->VarArray[2],pFsfbStruct); - redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru); + redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize); /*ദṹемFSFBЭм*/ ComMemCopy(pFsfbStruct->RpInfoStru.VarArray,&pFsfbStruct->VarArray[2+fsfbVarLen],redunVarLen); @@ -270,6 +281,11 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); /*Խ,Ӧò崻*/ + + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /**/ + PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); + PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, redunVarLen); + retVal = 0; } } @@ -295,6 +311,7 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) UINT16 MaxLen = 0; /* һ֡С */ UINT8 *RecordArray = pFsfbStruct->RecordArray; /* ¼ */ UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* ¼С */ + UINT32 inputQueLen = 0u; /*г*/ /* ¼ */ ShortToChar(0,pFsfbStruct->RecordArray); @@ -303,11 +320,14 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ /* RSR뵥Ԫʶ */ - PrintRecArrayByte(RecordArray,RecordSize,FSFB_CYCLE_TAG); /* ڿʼ0xEE */ /* M_2010_05_10 */ + PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* ڿʼ0xEE */ /* M_2010_05_10 */ PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* ں */ /*M_2010_05_10 */ - PrintRecArrayByte(RecordArray,RecordSize,FSFB_RCV_TAG); PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* */ PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* ID */ + inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueR); + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /**/ + inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueB); + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /**/ #endif QueueClear(&pFsfbStruct->DataToApp); /* */ @@ -318,9 +338,11 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) ClearNetsRecvPkgNum(pFsfbStruct); /* Ժյݽд */ + PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /**/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueR, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 0, pFsfbStruct); /* յݽд */ + PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /**/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueB, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 1, pFsfbStruct); @@ -937,7 +959,8 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* ʧ */ #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ - PrintRecArray2ByteB(RecordArray,RecordSize,FSFB_WARN|FSFB_RECEIVE|FSFB_ERROR_NULL|FSFB_QUEUE_READ); /* ʧ */ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*ȡ֡ȴ*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*֡ȴ*/ #endif break; } @@ -960,6 +983,14 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr /* 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])); /*֡*/ switch(messageType) { @@ -1058,6 +1089,9 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr else {/*֡ݶ*/ QueueElementDiscard(MsgLen,pQueueData); + + PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*֡ȴ*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*֡*/ } } return retVal; diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h index d79a357..b22288c 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h @@ -23,7 +23,43 @@ ********************************************************************************/ /* ־λ */ -#define FSFB_CYCLE_TAG 0xDD /* FSFBڿʼʶ */ +#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_RCV_TAG 0xF4 /* FSFB뵥Ԫʶ */ #define FSFB_OUT_TAG 0xF5 /* FSFBԪʶ */ #define FSFB_MSG_IN_TAG 0x04 /* FSFBһ֡Ϣʼʶ(B 0000 0100) */ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/RpHandleInterface.c b/TSCP/src/protocol/fsfb/common_fsfb/RpHandleInterface.c index 27077b2..4119842 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/RpHandleInterface.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/RpHandleInterface.c @@ -16,6 +16,7 @@ #include "CommonMemory.h" #include "RpHandlePlatform.h" #include "dsuFsfbFunc.h" +#include "FsfbRecordDelare.h" UINT8 RpHandle_init_SnStack(RPHANDLE_INFO_STRU *pRedunStruct); @@ -104,7 +105,7 @@ UINT8 RpHandleInit(RPHANDLE_INFO_STRU *pRedunStruct)/* %RELAX */ * RPHANDLE_INFO_STRU *pRedunStruct ͳһṹ *ֵ:ݳ *****************************************************************************************/ -UINT16 RpHandleOutput(RPHANDLE_INFO_STRU *pRedunStruct)/* %RELAX */ +UINT16 RpHandleOutput(RPHANDLE_INFO_STRU *pRedunStruct,UINT8* recordArray,UINT16 recordArraySize)/* %RELAX */ { UINT8 ret = 0; UINT16 index = 0; @@ -135,6 +136,13 @@ UINT16 RpHandleOutput(RPHANDLE_INFO_STRU *pRedunStruct)/* %RELAX */ /* 1ֽ 󶪰 */ pRedunStruct->VarArray[index] = CurNumLink->SnLink_Info.maxLostSn; index++; + + + PrintRecArrayByte(recordArray, recordArraySize, OUT_RP_LNK); /*RP·*/ + PrintRecArray2ByteB(recordArray, recordArraySize, CurNumLink->SnLink_Info.DestDevName); + PrintRecArray4ByteB(recordArray, recordArraySize, CurNumLink->SnLink_Info.LastSn); + PrintRecArrayByte(recordArray, recordArraySize, CurNumLink->SnLink_Info.maxLostSn); + CurNumLink = CurNumLink->NextNode; } diff --git a/TSCP/src/protocol/fsfb/common_fsfb/RpHandlePlatform.h b/TSCP/src/protocol/fsfb/common_fsfb/RpHandlePlatform.h index 4e2a260..f74e5dc 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/RpHandlePlatform.h +++ b/TSCP/src/protocol/fsfb/common_fsfb/RpHandlePlatform.h @@ -111,7 +111,7 @@ UINT8 RpHandleReceive(QueueStruct* OutnetQueueA,QueueStruct* OutnetQueueB, RPHAN *ֵ: * ദЭм; *****************************************************************************************/ -UINT16 RpHandleOutput(RPHANDLE_INFO_STRU *pRpStruct); +UINT16 RpHandleOutput(RPHANDLE_INFO_STRU* pRpStruct, UINT8* recordArray, UINT16 recordArraySize); /***************************************************************************************** *: * ˢм diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h index 0756986..7998cbb 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h @@ -1,27 +1,27 @@ /******************************************************************************* -* ļ sfpConfig.h -* Ȩ˵ -* 汾 1.0 -* ʱ 2010.05.04 -* -* ļΪSFPЭļ -* ʹע - -* ޸ļ¼ +* �ļ��� �� sfpConfig.h +* ��Ȩ˵�� �� +* �汾�� �� 1.0 +* ����ʱ�� �� 2010.05.04 +* ���� �� ���� +* �������� �� ���ļ�ΪSFPЭ�������ļ� +* ʹ��ע�� �� + �� +* �޸ļ�¼ �� *******************************************************************************/ #ifndef _SFPCONFIG_H #define _SFPCONFIG_H -/**************************Э¼궨忪**********************************/ -/*#define PRTCL_RECORD_DATA_ASC*/ /*ݲַͼ¼*/ -/*#define PRTCL_RECORD_ERR_ASC*/ /*󲿷ַͼ¼*/ +/**************************Э���¼�궨�忪��**********************************/ +/*#define PRTCL_RECORD_DATA_ASC*/ /*���ݲ����ַ��ͼ�¼����*/ +/*#define PRTCL_RECORD_ERR_ASC*/ /*���󲿷��ַ��ͼ�¼����*/ -#define PRTCL_RECORD_SIMPLIFY_BIN /*Ƽ¼*/ -#define USE_DSU_SFP /*ʹSFPѯ*/ -/*#define SWAP_CRC */ /*CRC*/ +#define PRTCL_RECORD_SIMPLIFY_BIN /*�����Ƽ�¼����*/ +#define USE_DSU_SFP /*ʹ��SFP��ѯ����*/ +#define SWAP_CRC /*����CRC*/ #else #endif