From 4ffa99ff65e76bdb02702a2792112904bee19547 Mon Sep 17 00:00:00 2001 From: lh <3191213465@qq.com> Date: Fri, 22 May 2026 15:25:38 +0800 Subject: [PATCH] =?UTF-8?q?[9.6]=209.6=E9=A6=96=E7=89=88=E4=B8=80=E5=9B=9E?= =?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 | 380 +- .../ci_integrate_config.h | 2 +- .../APP/ciapp/2oo2/2oo2DataTransferManage.c | 4565 +++++++-- .../APP/ciapp/2oo2/2oo2DataTransferManage.h | 274 + .../APP/ciapp/2oo2/2oo2InterfaceDataManage.c | 142 +- .../APP/ciapp/2oo2/2oo2InterfaceDataManage.h | 9 +- .../ciapp/AllAutoReturn/AllAutoReturnDefine.h | 2 +- .../APP/ciapp/AutoReturn/AutoReturnDefine.h | 2 +- .../APP/ciapp/AutoRoute/AutoRouteDataManage.c | 14 +- .../APP/ciapp/AutoRoute/AutoRouteDataManage.h | 8 +- .../src/APP/ciapp/AutoRoute/AutoRouteDefine.h | 2 +- .../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 + .../ciapp/DataManage/DeviceConfigDataManage.c | 58 +- .../ciapp/DataManage/DeviceConfigDataManage.h | 4 + .../APP/ciapp/DataManage/DeviceDataManage.c | 559 +- .../APP/ciapp/DataManage/DeviceDataManage.h | 161 +- .../src/APP/ciapp/DataManage/PlatDataManage.c | 104 +- .../src/APP/ciapp/DataManage/PlatDataManage.h | 12 +- TSCP/src/APP/ciapp/ERROR/ErrorDefine.h | 25 +- TSCP/src/APP/ciapp/ESB/ESBDataManage.c | 275 + TSCP/src/APP/ciapp/ESB/ESBDataManage.h | 97 + .../ciapp/EnvelopeManage/CTEnvelopeTrack.c | 244 +- .../APP/ciapp/EnvelopeManage/ELMDataPrepare.c | 32 +- .../EnvelopeManage/EnvelopeLogicProcess.c | 125 +- .../EnvelopeManage/EnvelopeLogicProcess.h | 18 + .../APP/ciapp/EnvelopeManage/EnvelopeScreen.c | 42 +- .../ciapp/EnvelopeManage/UCTEnvelopeTrack.c | 95 +- .../APP/ciapp/FloodGate/FloodGateDataManage.c | 42 +- .../APP/ciapp/FloodGate/FloodGateDataManage.h | 21 +- .../ciapp/Garagedoor/GaragedoorDataManage.c | 25 +- .../ciapp/Garagedoor/GaragedoorDataManage.h | 23 +- .../HLHTMsgHead/HLHTCommonDataPacketHead.c | 62 +- .../ciapp/HLHTMsgHead/HLHTHeadContexManage.c | 134 +- .../ciapp/HLHTMsgHead/HLHTHeadContexManage.h | 17 +- .../src/APP/ciapp/IO/DeviceRelayDataProcess.c | 2434 ++++- .../src/APP/ciapp/IO/DeviceRelayDataProcess.h | 156 +- TSCP/src/APP/ciapp/IO/InputDataProcess.c | 3057 ++++-- TSCP/src/APP/ciapp/IO/InputDataProcess.h | 95 + TSCP/src/APP/ciapp/IO/OutputDataProcess.c | 185 +- TSCP/src/APP/ciapp/IO/OutputDataProcess.h | 8 + .../Indicator/IndicatorConfigDataManage.c | 2 +- .../src/APP/ciapp/Indicator/IndicatorDefine.h | 2 +- .../APP/ciapp/Initial/ConfigDataReadManage.c | 77 +- .../APP/ciapp/Initial/ConfigDataReadManage.h | 10 + TSCP/src/APP/ciapp/Initial/InitialProcess.c | 583 +- TSCP/src/APP/ciapp/Initial/InitialProcess.h | 16 + .../ciapp/InvadeSection/InvadeSectionDefine.h | 2 +- TSCP/src/APP/ciapp/LogRecord/LogRecord.c | 326 +- .../ciapp/LogicManage/InterlockCommonManage.c | 43 +- .../ciapp/LogicManage/InterlockCommonManage.h | 1 + .../ciapp/LogicManage/InterlockLogicManage.c | 1420 ++- .../ciapp/LogicManage/InterlockLogicManage.h | 45 +- .../ciapp/LogicManage/RouteRecoverManage.c | 342 +- .../LogicManage/TradInterlockLogicManage.c | 273 +- .../LogicManage/TradInterlockLogicManage.h | 5 +- .../ciapp/LogicProcess/InterlockLogicCheck.c | 3881 ++++++-- .../ciapp/LogicProcess/InterlockLogicCheck.h | 280 +- .../LogicProcess/InterlockLogicProcess.c | 1672 ++-- .../LogicProcess/InterlockLogicProcess.h | 32 +- .../LogicProcess/LogicalRouteLogicCheck.c | 60 +- .../LogicProcess/LogicalRouteLogicCheck.h | 6 +- .../LogicProcess/TradInterlockLogicProcess.c | 441 +- .../LogicProcess/TradInterlockLogicProcess.h | 11 + TSCP/src/APP/ciapp/Main/MainApp.c | 20 + .../src/APP/ciapp/Mask/MaskConfigDataManage.c | 8 +- TSCP/src/APP/ciapp/Mask/MaskDefine.h | 25 +- .../NonAutoReturn/NonAutoReturnDataManage.c | 17 +- .../NonAutoReturn/NonAutoReturnDataManage.h | 17 +- .../ciapp/Overlap/OverlapConfigDataManage.c | 121 +- .../ciapp/Overlap/OverlapConfigDataManage.h | 36 +- .../src/APP/ciapp/Overlap/OverlapDataManage.c | 212 +- .../src/APP/ciapp/Overlap/OverlapDataManage.h | 65 +- TSCP/src/APP/ciapp/Overlap/OverlapDefine.h | 4 + TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c | 119 +- TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h | 40 + TSCP/src/APP/ciapp/PSD/PSDDataManage.c | 625 +- TSCP/src/APP/ciapp/PSD/PSDDataManage.h | 233 +- TSCP/src/APP/ciapp/PSD/PSDDefine.h | 45 +- .../APP/ciapp/ParsePack/CiInterfaceDefine.h | 39 +- .../APP/ciapp/ParsePack/ParsePackAtsData.c | 3028 ++++-- .../APP/ciapp/ParsePack/ParsePackAtsData.h | 146 +- .../APP/ciapp/ParsePack/ParsePackAxleData.c | 702 +- .../APP/ciapp/ParsePack/ParsePackAxleData.h | 37 +- .../src/APP/ciapp/ParsePack/ParsePackCiData.c | 8574 ++++++++++++----- .../src/APP/ciapp/ParsePack/ParsePackCiData.h | 279 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.c | 572 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.h | 8 + .../src/APP/ciapp/ParsePack/ParsePackDefine.h | 3 +- .../ciapp/ParsePack/ParsePackGateWayData.c | 1436 ++- .../ciapp/ParsePack/ParsePackGateWayData.h | 63 +- .../APP/ciapp/ParsePack/ParsePackITEData.c | 30 +- .../src/APP/ciapp/ParsePack/ParsePackManage.c | 301 +- .../src/APP/ciapp/ParsePack/ParsePackOcData.c | 2324 +++-- .../src/APP/ciapp/ParsePack/ParsePackOcData.h | 167 +- .../APP/ciapp/ParsePack/ParsePackTmcData.c | 226 +- .../APP/ciapp/ParsePack/ParsePackTmcData.h | 6 +- .../APP/ciapp/ParsePack/ParsePackVobcData.c | 1891 +++- .../APP/ciapp/ParsePack/ParsePackVobcData.h | 130 +- .../src/APP/ciapp/ParsePack/ParsePackZcData.c | 852 +- .../src/APP/ciapp/ParsePack/ParsePackZcData.h | 273 +- .../APP/ciapp/QueryFiles/commonQueryStruDef.c | 2 + .../APP/ciapp/QueryFiles/commonQueryStruDef.h | 2 + TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c | 2324 +++-- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h | 43 +- .../src/APP/ciapp/QueryFiles/dquCIInterFace.c | 455 +- .../src/APP/ciapp/QueryFiles/dquCIInterFace.h | 28 + .../ciapp/QueryFiles/dquCIJDQStruFrmChar.c | 200 +- .../ciapp/QueryFiles/dquCIJDQStruFrmChar.h | 6 + .../APP/ciapp/QueryFiles/dquCIJDQStruInit.c | 249 +- TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h | 11 +- .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.c | 186 + .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.h | 16 + .../APP/ciapp/QueryFiles/dquCILSStruInit.c | 386 +- .../APP/ciapp/QueryFiles/dquCILSStruInit.h | 35 + TSCP/src/APP/ciapp/QueryFiles/dquCIPZStru.h | 2 + TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c | 2192 ++++- TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h | 65 +- TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h | 18 +- .../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 | 14 +- TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c | 271 +- TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.h | 14 - .../APP/ciapp/ReverseCut/ReverseCutDefine.h | 2 +- .../ciapp/ReverseRoute/ReverseRouteDefine.h | 2 +- .../APP/ciapp/Route/DynamicRouteDataManage.c | 16 +- .../APP/ciapp/Route/LogicalRouteDataManage.c | 346 +- .../APP/ciapp/Route/LogicalRouteDataManage.h | 37 + .../APP/ciapp/Route/RouteConfigDataManage.c | 276 +- .../APP/ciapp/Route/RouteConfigDataManage.h | 117 +- TSCP/src/APP/ciapp/Route/RouteDataManage.c | 686 +- TSCP/src/APP/ciapp/Route/RouteDataManage.h | 202 +- TSCP/src/APP/ciapp/Route/RouteDefine.h | 24 +- .../src/APP/ciapp/SPKS/SpksConfigDataManage.c | 42 + .../src/APP/ciapp/SPKS/SpksConfigDataManage.h | 16 + 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/AxisSectionDataManage.c | 90 +- .../APP/ciapp/Section/AxisSectionDataManage.h | 40 +- .../APP/ciapp/Section/LinkConfigDataManage.c | 143 +- .../APP/ciapp/Section/LinkConfigDataManage.h | 50 + .../ciapp/Section/LogicSectionDataManage.c | 678 +- .../ciapp/Section/LogicSectionDataManage.h | 178 +- .../Section/PhysicalSectionConfigDataManage.c | 69 + .../Section/PhysicalSectionConfigDataManage.h | 21 + .../ciapp/Section/PhysicalSectionDataManage.c | 440 +- .../ciapp/Section/PhysicalSectionDataManage.h | 144 +- TSCP/src/APP/ciapp/Section/SectionDefine.h | 21 +- TSCP/src/APP/ciapp/Signal/SignalDataManage.c | 801 +- TSCP/src/APP/ciapp/Signal/SignalDataManage.h | 222 +- TSCP/src/APP/ciapp/Signal/SignalDefine.h | 18 +- .../APP/ciapp/Switch/SwitchConfigDataManage.c | 25 +- .../APP/ciapp/Switch/SwitchConfigDataManage.h | 22 + TSCP/src/APP/ciapp/Switch/SwitchDataManage.c | 349 +- TSCP/src/APP/ciapp/Switch/SwitchDataManage.h | 78 +- TSCP/src/APP/ciapp/Switch/SwitchDefine.h | 8 +- TSCP/src/APP/ciapp/System/CiSystemDefine.h | 25 +- .../src/APP/ciapp/System/SystemConfigDefine.h | 28 +- .../APP/ciapp/System/SystemParameterManage.c | 263 +- .../APP/ciapp/System/SystemParameterManage.h | 140 +- .../APP/ciapp/Train/EvacuationAreaManage.c | 830 +- .../APP/ciapp/Train/EvacuationAreaManage.h | 3 +- TSCP/src/APP/ciapp/Train/TrainDataManage.c | 2767 +++++- TSCP/src/APP/ciapp/Train/TrainDataManage.h | 572 +- TSCP/src/APP/ciapp/Train/TrainDefine.h | 51 +- TSCP/src/APP/ciapp/Train/TrainOnAcManage.c | 2 +- TSCP/src/APP/ciapp/Transmit/TransmitDefine.h | 5 + .../ciapp/Transmit/TransmitStateDataManage.c | 261 +- .../ciapp/Transmit/TransmitStateDataManage.h | 2 - .../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 | 785 +- TSCP/src/DRV/imx8_drv_gpio.h | 163 + TSCP/src/MSCP/CFM/CFM_Net.c | 807 +- TSCP/src/MSCP/CFM/CFM_Net.h | 99 +- TSCP/src/MSCP/CM/CM_CRC32.c | 193 + TSCP/src/MSCP/CM/CM_CRC32.h | 13 +- TSCP/src/MSCP/CM/CM_Com.c | 2 - TSCP/src/MSCP/CM/CM_UDP.c | 77 +- TSCP/src/MSCP/CM/CM_UDP.h | 11 +- TSCP/src/MSCP/DFM/DFM_DRV.h | 58 + TSCP/src/MSCP/DFM/DFM_DRV_QNX.c | 297 + TSCP/src/MSCP/MSCP_APP_API.c | 65 +- TSCP/src/MSCP/MSCP_APP_API.h | 35 + TSCP/src/MSCP/MSCP_APP_Interface.h | 11 + TSCP/src/MSCP/MSCP_main.c | 43 +- TSCP/src/MSCP/PFM/PFM_Cfg.c | 92 +- TSCP/src/MSCP/PFM/PFM_Cfg.h | 22 + TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c | 2 + TSCP/src/MSCP/PFM/PFM_InputOutput.c | 91 +- TSCP/src/MSCP/PFM/PFM_InputOutput.h | 5 + TSCP/src/MSCP/PFM/PFM_Log.c | 235 +- TSCP/src/MSCP/PFM/PFM_Log.h | 35 + TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c | 10 +- TSCP/src/MSCP/SFM/SFM_2oo2.c | 138 +- TSCP/src/MSCP/SFM/SFM_2oo2.h | 12 +- TSCP/src/MSCP/SFM/SFM_2x2.c | 1007 +- TSCP/src/MSCP/SFM/SFM_2x2.h | 86 +- TSCP/src/MSCP/SFM/SFM_Area.c | 1497 +++ TSCP/src/MSCP/SFM/SFM_Area.h | 182 + TSCP/src/MSCP/SFM/SFM_Prtcl.c | 10 +- TSCP/src/MSCP/SFM/SFM_Prtcl.h | 1 + TSCP/src/MSCP/SFM/SFM_package.c | 157 - TSCP/src/MSCP/SFM/SFM_package.h | 17 +- .../commoncode_config_vxworks/CommonConfig.h | 2 + .../dqu_cbtc_common/dquCbtcConfigData.c | 107 +- .../dqu_cbtc_common/dquCbtcConfigData.h | 12 + .../dqu_common/dqu_dfs_common/dfsDataRead.c | 2 +- .../dqu_dfs_common/dquDataTypeDefine.h | 6 +- .../dqu_common/dqu_emap_common/dquEmapInit.c | 206 +- .../dqu_common/dqu_emap_common/dquEmapInit.h | 10 + .../dqu_emap_common/dquStructInit.c | 652 +- .../dqu_emap_common/dquStructInit.h | 18 +- .../dqu_emap_common/dsuEmapDefine.h | 6 + .../dqu_common/dqu_emap_common/dsuStruct.h | 41 +- .../dqu_idmap_common/dquIdmapInit.c | 378 +- .../dqu_idmap_common/dquIdmapInit.h | 20 + .../dqu_idmap_common/dquIdmapQuery.c | 219 +- .../dqu_idmap_common/dquIdmapQuery.h | 80 +- .../dqu_idmap_common/dsuIdmapStruct.h | 20 +- .../protocol/fsfb/common_fsfb/FsfbConfig.h | 4 +- .../fsfb/common_fsfb/FsfbLnkNodeMgr.c | 196 +- .../fsfb/common_fsfb/FsfbMessageInfo.c | 192 +- .../protocol/fsfb/common_fsfb/FsfbProtcl.c | 240 +- .../fsfb/common_fsfb/FsfbRecordDelare.h | 38 +- .../fsfb/common_fsfb/RpHandleInterface.c | 10 +- .../fsfb/common_fsfb/RpHandlePlatform.h | 2 +- .../common_dqu_protocol/dsuProtclFun.c | 848 +- .../common_dqu_protocol/dsuProtclFun.h | 43 +- .../common_protocol/ProtclManage.c | 1605 ++- .../common_protocol/ProtclManage.h | 59 +- .../common_protocol/protclInterFun.c | 510 +- .../common_protocol/protclInterFun.h | 25 +- .../common_protocol/protclMgeCfg.h | 4 +- .../common_protocol/protclStruct.h | 5 +- .../common_protocol_config/protocolConfig.h | 5 +- .../common_dqu_rp/dsuRpFunc.c | 155 +- .../common_dqu_rp/dsuRpFunc.h | 42 +- .../common_redun/RpInterface.c | 1739 ++-- .../common_redun/RpInterface.h | 3 - .../common_redun/RpPlatform.h | 62 +- .../redun_record_cbtc/common_redun/RpStruct.h | 1 - .../dqu_rsspii_cbtc/dsuRssp2Func.c | 3 + .../common_dqu_rssp/dsuRsspDataStru.h | 9 + .../common_dqu_rssp/dsuRsspFunc.c | 1604 +-- .../common_rssp/RsspCommonWl.c | 18 +- .../common_rssp/RsspCommonWl.h | 25 +- .../rssp_record_cbtc1/common_rssp/RsspIFWl.h | 15 +- .../common_rssp/RsspInitWl.c | 167 +- .../common_rssp/RsspLnkNodeMgrWl.c | 99 +- .../common_rssp/RsspLnkNodeMgrWl.h | 22 +- .../common_rssp/RsspOutputWl.c | 116 +- .../common_rssp/RsspReciveWl.c | 235 +- .../common_rssp/RsspStructWl.h | 4 +- .../rssp_record_cbtc1/common_rssp/RsspWl.c | 27 +- .../rssp_record_cbtc1/common_rssp/RsspWl.h | 12 +- .../common_dqu_sfp/dsuRelatedDeal.c | 603 +- .../common_dqu_sfp/dsuRelatedDeal.h | 60 +- .../common_sfp/sfpPrtclInit.c | 347 +- .../common_sfp/sfpPrtclReceive.c | 1797 ++-- .../common_sfp/sfpPrtclReceive.h | 15 - .../common_sfp/sfpPrtcl_Output.c | 694 +- .../sfp_record_cbtc1/common_sfp/sfpplatform.h | 22 +- .../common_sfp_nr_config/sfpConfig.h | 2 +- 275 files changed, 63864 insertions(+), 19340 deletions(-) create mode 100644 TSCP/src/MSCP/SFM/SFM_Area.c create mode 100644 TSCP/src/MSCP/SFM/SFM_Area.h diff --git a/TSCP/src/APP/APP_API.c b/TSCP/src/APP/APP_API.c index 6cf8050..98f4259 100644 --- a/TSCP/src/APP/APP_API.c +++ b/TSCP/src/APP/APP_API.c @@ -16,6 +16,10 @@ static CM_UINT32 gFollowDataLen = 0u; /*应用跟随数据长度*/ static CM_UINT8 gFollowData[MSCP_FOLLOW_BUFF_SIZE] = { 0 }; /*应用跟随数据*/ +static CM_UINT32 gCiRcFollowDataLen = 0u; /*CI-RC同步数据长度*/ +static CM_UINT8 gCiRcFollowData[MSCP_FOLLOW_BUFF_SIZE] = { 0 }; /*CI-RC同步数据*/ + +extern UINT8 LocalCiId; /*系统配置文件中定义的联锁ID*/ /* 内网安全通信配置参数,示例: */ /* 内网安全通信配置参数,示例: */ /*ATP、ATO、MMI间通信时,SFP协议使用的数据库数组: @@ -25,14 +29,15 @@ static CM_UINT8 gFollowData[MSCP_FOLLOW_BUFF_SIZE] = { 0 }; /*应用跟随数据 const CM_UINT8 g_SfpInnetParam[] = { - 0,4,/*不同设备通信关系表记录个数*/ + 0,5,/*不同设备通信关系表记录个数*/ /*记录的格式如下:*/ /* 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */ /* 设备类型 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 通信类型 周期长度 最大延时 一包数据所需最小周期数 */ /*ZC->CI*/ 0x22, 0x55, 0x01,0x1D, 0x01,0x1D, 0x01,0x1D, 0xff, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02, /*AOM->TIAS*/ 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x03, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02, /*AOM->ATP*/ 0x14, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02, - /*主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02, + /*RC主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02, + /*CI主机->维护机*/ 0xDE, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02, 0,2,/*相同设备通信关系表记录个数*/ /*记录的格式如下:*/ /* 发起方 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */ @@ -185,6 +190,7 @@ ENUM_CM_RETURN APP_API_Init(OUT CM_UINT8 VitalBuf[200], OUT CM_UINT16* pVitalLen MSCP_SetOutAtsVobcFunc(pReserveOutVobc); pReserveInAts = SerialInVobcAtsFunc; MSCP_SetInVobcAtsFunc(pReserveInAts); + MSCP_SetRCFollowUpFunc(SetCiGeneralData); #if 1 cSwtichFalg = GetCiFunctionSwitchConfig(FUNC_OC_200_INOUTNET); @@ -224,11 +230,65 @@ void APP_API_Data_Init() UINT16 ii = 0U; UINT8 szFSFILEVersionFS[DFS_VERSION_LENGTH] = { 0 }; UINT8 funcRetVal = 0U; + UINT8 cBoardInfo = 0U; + UINT8 cPluginId = 0U; + UINT8 cBoardId = 0U; + UINT8 cRetVal = CI_ERROR; + UINT16 locTypeId = 0U; + UINT8 cDevType = 0U; + UINT8 cSystemWorkType = SYSTEM_WORK_MODE_ONLY; funcRetVal = dquGetFSVersion(DataPath, szFSFILEVersionFS); + locTypeId = MSCP_GetOutnetID(); + LocalCiId = (UINT8)(locTypeId & 0x00FFU); /*联锁设备ID*/ + cDevType = (UINT8)((locTypeId >> 8U) & 0x00FFU); /*RC/CI类型*/ + + + cRetVal = CiPatternInit((const)DataPath); /*初始化当前联锁类型配置数据*/ + if ((CI_SUCCESS == cRetVal) && (CI_SUCCESS == funcRetVal)) /*初始化当前联锁类型配置数据*/ + { + cSystemWorkType = GetSystemWorkType(); #if (kPLATFORM==kVXWORKS) - /*文件配置*/ - STRU_APP_CFG_T AppCfgInterface = { + /*若为真机,则通过平台获取设备类型*/ + cBoardInfo = MSCP_GetDrvBoardID(); + PlatSheBeiType = &gSheBeiType; /*联锁设备类型*/ + cPluginId = ((cBoardInfo >> 4U) & 0x0FU); + cBoardId = (cBoardInfo & 0x0FU); + if (((0x03U == cPluginId) && ((0x03U == cBoardId) || (0x05U == cBoardId))) + || ((0x0CU == cPluginId) && ((0x06U == cBoardId) || (0x0AU == cBoardId)))) + { + (void)SetLocalRcWorkMode(RC_WORK_MODE_TIOC); + gSheBeiType = RC_WORK_MODE_TIOC; + } + else if (((0x04U == cPluginId) && ((0x03U == cBoardId) || (0x05U == cBoardId))) + || ((0x0BU == cPluginId) && ((0x06U == cBoardId) || (0x0AU == cBoardId)))) + { + (void)SetLocalRcWorkMode(RC_WORK_MODE_CI); + gSheBeiType = RC_WORK_MODE_CI; + } + else + { + debug_infor_printf((const)"APP_API_Data_Init Error: CI_SYSTEM_TYPE Error.\n"); + printf((const)"APP_API_Data_Init Error: CI_SYSTEM_TYPE Error.\n"); + } + /*真机需校验设备类型是否一致*/ + locTypeId = MSCP_GetOutnetID(); + cDevType = (UINT8)((locTypeId >> 8U) & 0x00FFU); /*RC/CI类型*/ + if (gSheBeiType == cDevType) + { + /*继续处理*/ + } + else + { + debug_infor_printf((const)"APP_API_Data_Init Error: DevType[0x%x] And [0x%x] Is Not Equal \n", gSheBeiType, cDevType); + cRetVal = CI_ERROR; + } + + } + if(CI_SUCCESS == cRetVal) + { + /*文件配置*/ + STRU_APP_CFG_T AppCfgInterface = { .FS_NAME = "RCI.FS", /**< FS文件名称 */ .APP_NAME = "RCOCI", /**< 应用文件名称 */ .CYC_TIME = 300, /**< 系统周期 */ @@ -246,109 +306,28 @@ void APP_API_Data_Init() .reboot_replycount = 10, /**< 重启确认报文回复次数 */ .M_AutoReboot_Count = 3, /**< 自动重启次数 */ .M_AutoClear_Days = 1, /**< 连续运行多久清空宕机次数的天数 */ - -#if 1 - .CPU[0].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */ - .CPU[0].IP_2x2 = "192.168.1.62", /**< 2x2通信IP */ - .CPU[0].IP_Out = "192.168.1.62", /**< 外网通信IP */ - .CPU[0].IP_Maintain = "192.168.146.101", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[0].IP_Com = "192.168.1.62", /**< 通用通信IP */ - .CPU[0].IP_Com_Extend = "192.168.1.62",/**< 通用通信扩展IP */ + .M_Area_Enable = 0, /**< 区域状态开关配置 */ + .CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */ .CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - .CPU[1].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */ - .CPU[1].IP_2x2 = "192.168.2.62", /**< 2x2通信IP */ - .CPU[1].IP_Out = "192.168.2.62", /**< 外网通信IP */ - .CPU[1].IP_Maintain = "192.168.18.102", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[1].IP_Com = "192.168.2.62", /**< 通用通信IP */ - .CPU[1].IP_Com_Extend = "192.168.2.62",/**< 通用通信扩展IP */ + .CPU[1].Logger_PortBase = 55012, /**< 明文日志记录发送端口 */ .CPU[1].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - .CPU[2].IP_2oo2 = "192.168.0.21", /**< 2oo2通信IP */ - .CPU[2].IP_2x2 = "192.168.1.64", /**< 2x2通信IP */ - .CPU[2].IP_Out = "192.168.1.64", /**< 外网通信IP */ - .CPU[2].IP_Maintain = "192.168.146.103", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[2].IP_Com = "192.168.1.64", /**< 通用通信IP */ - .CPU[2].IP_Com_Extend = "192.168.1.64",/**< 通用通信扩展IP */ + .CPU[2].Logger_PortBase = 55021, /**< 明文日志记录发送端口 */ .CPU[2].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - .CPU[3].IP_2oo2 = "192.168.0.22", /**< 2oo2通信IP */ - .CPU[3].IP_2x2 = "192.168.2.64", /**< 2x2通信IP */ - .CPU[3].IP_Out = "192.168.2.64", /**< 外网通信IP */ - .CPU[3].IP_Maintain = "192.168.18.104", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[3].IP_Com = "192.168.2.64", /**< 通用通信IP */ - .CPU[3].IP_Com_Extend = "192.168.2.64",/**< 通用通信扩展IP */ + .CPU[3].Logger_PortBase = 55022, /**< 明文日志记录发送端口 */ .CPU[3].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - -#else - .M_Area_Enable = 0xAA, /**< CI/RC标识 0x55为CI 0xAA为RC */ - .CPU[0].IP_2oo2 = "192.168.0.31", /**< 2oo2通信IP */ - .CPU[0].IP_2x2 = "192.168.1.63", /**< 2x2通信IP */ - .CPU[0].IP_Out = "192.168.1.63", /**< 外网通信IP */ - .CPU[0].IP_Maintain = "192.168.146.105", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[0].IP_Com = "192.168.1.63", /**< 通用通信IP */ - .CPU[0].IP_Com_Extend = "192.168.1.63",/**< 通用通信扩展IP */ - .CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */ - .CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - - .CPU[1].IP_2oo2 = "192.168.0.32", /**< 2oo2通信IP */ - .CPU[1].IP_2x2 = "192.168.2.63", /**< 2x2通信IP */ - .CPU[1].IP_Out = "192.168.2.63", /**< 外网通信IP */ - .CPU[1].IP_Maintain = "192.168.18.106", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[1].IP_Com = "192.168.2.63", /**< 通用通信IP */ - .CPU[1].IP_Com_Extend = "192.168.2.63",/**< 通用通信扩展IP */ - .CPU[1].Logger_PortBase = 55012, /**< 明文日志记录发送端口 */ - .CPU[1].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - - .CPU[2].IP_2oo2 = "192.168.0.41", /**< 2oo2通信IP */ - .CPU[2].IP_2x2 = "192.168.1.65", /**< 2x2通信IP */ - .CPU[2].IP_Out = "192.168.1.65", /**< 外网通信IP */ - .CPU[2].IP_Maintain = "192.168.146.107", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[2].IP_Com = "192.168.1.65", /**< 通用通信IP */ - .CPU[2].IP_Com_Extend = "192.168.1.65",/**< 通用通信扩展IP */ - .CPU[2].Logger_PortBase = 55021, /**< 明文日志记录发送端口 */ - .CPU[2].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - - .CPU[3].IP_2oo2 = "192.168.0.42", /**< 2oo2通信IP */ - .CPU[3].IP_2x2 = "192.168.2.65", /**< 2x2通信IP */ - .CPU[3].IP_Out = "192.168.2.65", /**< 外网通信IP */ - .CPU[3].IP_Maintain = "192.168.18.108", /**< 维护通信IP */ - /*适用透传通道-选配*/ - .CPU[3].IP_Com = "192.168.2.65", /**< 通用通信IP */ - .CPU[3].IP_Com_Extend = "192.168.2.65",/**< 通用通信扩展IP */ - .CPU[3].Logger_PortBase = 55022, /**< 明文日志记录发送端口 */ - .CPU[3].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */ - - /*CPU1*/ - .AREA_CPU[0].IP_Area_A = "192.168.1.62", /**< 另一插箱A系CPU1的2x2IP */ - .AREA_CPU[0].IP_Area_B = "192.168.1.64", /**< 另一插箱B系CPU1的2x2IP */ - .AREA_CPU[0].IP_Multicast_Mine = "239.0.0.21", /**< 本插箱CPU1所在广播域 */ - .AREA_CPU[0].IP_Multicast_Dest = "239.0.0.11", /**< 另一插箱CPU1所在广播域 */ - /*CPU2*/ - .AREA_CPU[1].IP_Area_A = "192.168.2.62", /**< 另一插箱A系CPU2的2x2IP */ - .AREA_CPU[1].IP_Area_B = "192.168.2.64", /**< 另一插箱B系CPU2的2x2IP */ - .AREA_CPU[1].IP_Multicast_Mine = "239.0.0.22", /**< 本插箱CPU2所在广播域 */ - .AREA_CPU[1].IP_Multicast_Dest = "239.0.0.12", /**< 另一插箱CPU2所在广播域 */ -#endif - /*通用端口配置*/ + /*通用端口配置*/ .Port_Outnet_Safe = 54001, /**< 外网安全通信端口 */ .Port_Innet_Safe = 53001, /**< 内网安全通信端口 */ .Port_Outnet_Raw = 54002, /**< 外网透明传输端口 */ -// .Port_Log_Base = 55001, /**< 明文日志记录发送端口 */ -// .Port_Log_Ciphertext = 55002, /**< 暗文日志记录发送端口 */ .Port_Remote_Update = 50000, /**< 远程部署通信端口 */ - /*透传配置-选配*/ + /*透传配置-选配*/ .Port_Innet_Raw_Num = 0, /**< 内网透传端口数量 */ .Port_Innet_Raw_Extend_Num = 0, /**< 内网透传扩展端口数量 */ .Innet_Raw_Parameter[0].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */ @@ -366,7 +345,7 @@ void APP_API_Data_Init() .Innet_Raw_Parameter[1].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关 */ .Innet_Raw_Parameter[1].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关 */ .Innet_Raw_Parameter[1].IP_InnetRaw_maddr = "224.0.0.32",/**< 内网透传的组播IP */ - /*外网通信配置*/ + /*外网通信配置*/ .OutNetRed.CC_G_IP = "192.168.1.60", /**< 通控的内网IP */ .OutNetRed.CC_P_IP = "192.168.2.60", /**< 通控的内网IP */ .OutNetRed.EXTEND_G_IP = "192.168.1.70", /**< 扩展板卡的内网IP */ @@ -382,43 +361,183 @@ void APP_API_Data_Init() .OutNetBlue.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */ .OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */ .OutNetBlue.InnetRaw_Port = 53003, /**< 内网透传通信端口 */ - /*日志记录目标设备IP配置*/ - .Logger_G_IP = "192.168.146.100", /**< 绿网日志记录IP */ - .Logger_P_IP = "192.168.18.100", /**< 紫网日志记录IP */ -// .Logger_PortBase = 55001, /**< 明文日志记录端口 */ -// .Logger_PortCiphertext = 55002, - /*内网通信设备注册最大支持0-255*/ .INNET_COM_NUM = 1, /**< 内网通信设备数量 */ .INNET_COM_CFG[0].InnetID = DEVICE_TYPE_AIM, /**< 内网通信ID */ - .INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.146.100"),/**< 绿网IP */ .INNET_COM_CFG[0].Port_Raw_G = 55004, /**< 绿网透传端口 */ .INNET_COM_CFG[0].Port_Safe_G = 55003, /**< 绿网安全端口 */ - .INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.18.100"),/**< 紫网IP */ .INNET_COM_CFG[0].Port_Raw_P = 55004, /**< 紫网透传端口 */ .INNET_COM_CFG[0].Port_Safe_P = 55003, /**< 紫网安全端口 */ - }; - MSCP_Set_APP_ConfigData(&AppCfgInterface); + + }; + + + if (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI) + { + /*设置IP 与CIIP一致*/ + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.11"), (UINT32)sizeof("192.168.0.11")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.62"), (UINT32)sizeof("192.168.1.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.62"), (UINT32)sizeof("192.168.1.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.62"), (UINT32)sizeof("192.168.1.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.62"), (UINT32)sizeof("192.168.1.62")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.12"), (UINT32)sizeof("192.168.0.12")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.62"), (UINT32)sizeof("192.168.2.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.62"), (UINT32)sizeof("192.168.2.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.62"), (UINT32)sizeof("192.168.2.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.62"), (UINT32)sizeof("192.168.2.62")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.21"), (UINT32)sizeof("192.168.0.21")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.64"), (UINT32)sizeof("192.168.1.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.64"), (UINT32)sizeof("192.168.1.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.64"), (UINT32)sizeof("192.168.1.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.64"), (UINT32)sizeof("192.168.1.64")); + + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.22"), (UINT32)sizeof("192.168.0.22")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.64"), (UINT32)sizeof("192.168.2.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.64"), (UINT32)sizeof("192.168.2.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.64"), (UINT32)sizeof("192.168.2.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.64"), (UINT32)sizeof("192.168.2.64")); + + /*CPU1*/ + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Area_A), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.66"), (UINT32)sizeof("192.168.1.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Area_B), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.68"), (UINT32)sizeof("192.168.1.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Multicast_Mine), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.21"), (UINT32)sizeof("239.0.0.21")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Multicast_Dest), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.11"), (UINT32)sizeof("239.0.0.11")); + + /*CPU2*/ + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Area_A), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.66"), (UINT32)sizeof("192.168.2.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Area_B), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.68"), (UINT32)sizeof("192.168.2.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Multicast_Mine), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.22"), (UINT32)sizeof("239.0.0.22")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Multicast_Dest), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.12"), (UINT32)sizeof("239.0.0.12")); + + /*内网 通控与扩展板卡*/ + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.60"), (UINT32)sizeof("192.168.1.60")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.60"), (UINT32)sizeof("192.168.2.60")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.70"), (UINT32)sizeof("192.168.1.70")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.70"), (UINT32)sizeof("192.168.2.70")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.61"), (UINT32)sizeof("192.168.1.61")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.61"), (UINT32)sizeof("192.168.2.61")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.71"), (UINT32)sizeof("192.168.1.71")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.71"), (UINT32)sizeof("192.168.2.71")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.146.101"), (UINT32)sizeof("192.168.146.101")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.18.102"), (UINT32)sizeof("192.168.18.102")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.146.103"), (UINT32)sizeof("192.168.146.103")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.18.104"), (UINT32)sizeof("192.168.18.104")); + + (void)CommonMemCpy((void*)(AppCfgInterface.Logger_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.146.100"), (UINT32)sizeof("192.168.146.100")); + (void)CommonMemCpy((void*)(AppCfgInterface.Logger_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.18.100"), (UINT32)sizeof("192.168.18.100")); + AppCfgInterface.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.146.100"); + AppCfgInterface.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.18.100"); + + } + else + {/*设置IP 与CIIP一致*/ + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.11"), (UINT32)sizeof("192.168.0.11")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.66"), (UINT32)sizeof("192.168.1.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.66"), (UINT32)sizeof("192.168.1.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.66"), (UINT32)sizeof("192.168.1.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.66"), (UINT32)sizeof("192.168.1.66")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.12"), (UINT32)sizeof("192.168.0.12")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.66"), (UINT32)sizeof("192.168.2.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.66"), (UINT32)sizeof("192.168.2.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.66"), (UINT32)sizeof("192.168.2.66")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.66"), (UINT32)sizeof("192.168.2.66")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.21"), (UINT32)sizeof("192.168.0.21")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.68"), (UINT32)sizeof("192.168.1.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.68"), (UINT32)sizeof("192.168.1.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.68"), (UINT32)sizeof("192.168.1.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.68"), (UINT32)sizeof("192.168.1.68")); + + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_2oo2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.0.22"), (UINT32)sizeof("192.168.0.22")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_2x2), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.68"), (UINT32)sizeof("192.168.2.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Out), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.68"), (UINT32)sizeof("192.168.2.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Com), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.68"), (UINT32)sizeof("192.168.2.68")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Com_Extend), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.68"), (UINT32)sizeof("192.168.2.68")); + + /*CPU1*/ + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Area_A), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.62"), (UINT32)sizeof("192.168.1.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Area_B), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.64"), (UINT32)sizeof("192.168.1.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Multicast_Mine), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.11"), (UINT32)sizeof("239.0.0.11")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[0].IP_Multicast_Dest), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.21"), (UINT32)sizeof("239.0.0.21")); + + /*CPU2*/ + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Area_A), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.62"), (UINT32)sizeof("192.168.2.62")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Area_B), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.64"), (UINT32)sizeof("192.168.2.64")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Multicast_Mine), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.12"), (UINT32)sizeof("239.0.0.12")); + (void)CommonMemCpy((void*)(AppCfgInterface.AREA_CPU[1].IP_Multicast_Dest), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("239.0.0.22"), (UINT32)sizeof("239.0.0.22")); + + /*内网 通控与扩展板卡*/ + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.80"), (UINT32)sizeof("192.168.1.80")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.80"), (UINT32)sizeof("192.168.2.80")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.90"), (UINT32)sizeof("192.168.1.90")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.90"), (UINT32)sizeof("192.168.2.90")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.81"), (UINT32)sizeof("192.168.1.81")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.81"), (UINT32)sizeof("192.168.2.81")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.91"), (UINT32)sizeof("192.168.1.91")); + (void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.91"), (UINT32)sizeof("192.168.2.91")); + + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.148.101"), (UINT32)sizeof("192.168.148.101")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.20.102"), (UINT32)sizeof("192.168.20.102")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[2].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.148.103"), (UINT32)sizeof("192.168.148.103")); + (void)CommonMemCpy((void*)(AppCfgInterface.CPU[3].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.20.104"), (UINT32)sizeof("192.168.20.104")); + + (void)CommonMemCpy((void*)(AppCfgInterface.Logger_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.148.100"), (UINT32)sizeof("192.168.148.100")); + (void)CommonMemCpy((void*)(AppCfgInterface.Logger_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.20.100"), (UINT32)sizeof("192.168.20.100")); + AppCfgInterface.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.148.100"); + AppCfgInterface.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.20.100"); + + } + if(SYSTEM_WORK_MODE_ONLY == cSystemWorkType) + { + /*单系统运行:区域开关设置为0*/ + AppCfgInterface.M_Area_Enable = 0u; + } + else + { + /*双系统运行*/ + if (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI) + { + /*RC区域开关设置为0xAA*/ + AppCfgInterface.M_Area_Enable = 0xAAu; + + + } + else + { + /*设置CI IP+区域IP*/ + AppCfgInterface.M_Area_Enable = 0x55u; + } + + } + MSCP_Set_APP_ConfigData(&AppCfgInterface); + #endif - /*组FS版本号*/ - ii = 0U; - fsVersBuffer[ii++] = szFSFILEVersionFS[0]; - fsVersBuffer[ii++] = szFSFILEVersionFS[1]; - fsVersBuffer[ii++] = szFSFILEVersionFS[2]; - fsVersBuffer[ii++] = szFSFILEVersionFS[3]; + /*组FS版本号*/ + ii = 0U; + fsVersBuffer[ii++] = szFSFILEVersionFS[0]; + fsVersBuffer[ii++] = szFSFILEVersionFS[1]; + fsVersBuffer[ii++] = szFSFILEVersionFS[2]; + fsVersBuffer[ii++] = szFSFILEVersionFS[3]; - /*组软件版本号*/ - ii = 0U; - appVersBuffer[ii++] = VER_SOFT_PRODUCT; - appVersBuffer[ii++] = VER_SOFT_MODUAL_APP >> 2U; - appVersBuffer[ii++] = (VER_SOFT_MODUAL_APP << 6U) + (VER_SOFT_MIANVERSION & (UINT8)0x3F); - appVersBuffer[ii++] = VER_SOFT_SUBVERSION; - /*设置平台调用获取外网信息函数*/ - MSCP_SetSrcId(SetOutNetPara); - /*设置内网参数*/ - MSCP_SetSfpInnetPara(g_SfpInnetParam); - MSCP_SetAppVersion(appVersBuffer); - MSCP_SetFsVersion(fsVersBuffer); + /*组软件版本号*/ + ii = 0U; + appVersBuffer[ii++] = VER_INTE_PROJECT; + appVersBuffer[ii++] = VER_INTE_PRODUCT >> 2U; + appVersBuffer[ii++] = (VER_INTE_PRODUCT << 6U) + (VER_INTE_EXE & (UINT8)0x3F); + appVersBuffer[ii++] = VER_INTE_TIME; + /*设置平台调用获取外网信息函数*/ + MSCP_SetSrcId(SetOutNetPara); + /*设置内网参数*/ + MSCP_SetSfpInnetPara(g_SfpInnetParam); + MSCP_SetAppVersion(appVersBuffer); + MSCP_SetFsVersion(fsVersBuffer); + } } /** * @brief 应用周期主逻辑 @@ -435,7 +554,7 @@ void APP_API_Data_Init() */ ENUM_CM_RETURN APP_API_MainFunc(void) { - ENUM_CM_RETURN retVal = ENUM_CM_FALSE; + ENUM_CM_RETURN retVal = ENUM_CM_NULL; CM_UINT64 startCycTick = 0u; CM_UINT64 endCycTick = 0u; @@ -456,6 +575,9 @@ ENUM_CM_RETURN APP_API_MainFunc(void) gFollowDataLen = GetCiAppData(gFollowData); MSCP_SetFollowData(gFollowData, gFollowDataLen); + gCiRcFollowDataLen = GetCiGeneralData(gCiRcFollowData); + MSCP_CISendAppData(gCiRcFollowData, gCiRcFollowDataLen); + return retVal; } @@ -596,7 +718,7 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId) chDstCiType = GetCiType(devId); chCldScxCommMode = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE); - if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_CI == devType)) + if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_RCI == devType)) { if (((CI_TYPE_CLD == chLocalCiType) && (CI_TYPE_SCX == chDstCiType)) || ((CI_TYPE_SCX == chLocalCiType) && (CI_TYPE_CLD == chDstCiType))) { @@ -619,6 +741,10 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId) { retVal = ENUM_CM_SEB; } + else if (CI_SYSTEM_TYPE_ITE == devType) + { + retVal = ENUM_CM_CCSEB; + } else { retVal = ENUM_CM_CC; @@ -680,8 +806,8 @@ void SetOutNetPara(UINT8* pRxBuf, UINT32 dwLen, ENUM_OUTNET_CHN_T chOutNetType, tempLen = *pCurLen; if ((TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX) > (tempLen + objLen)) { - CommonMemCpy(&pOutBuf[tempLen], objLen * sizeof(UINT16), \ - gTransmitObjTypeId, objLen * sizeof(UINT16)); + CommonMemCpy((void*)&pOutBuf[tempLen], objLen * sizeof(UINT16), \ + (const void*)gTransmitObjTypeId, objLen * sizeof(UINT16)); *pCurLen = tempLen + objLen; debug_infor_printf("outnet in type len :%d", chOutNetType, objLen); debug_out_array(0xAA, gTransmitObjTypeId, objLen * sizeof(UINT16)); @@ -815,9 +941,9 @@ ENUM_CM_RETURN SerialOutAtsVobcFunc(UINT16 inDstId IN, UINT16* outSrcId OUT, UIN UINT8 inDstType = 0U; inDstType = (UINT8)((inDstId & 0xff00U) >> 8); - if (CI_SYSTEM_TYPE_VOBC_BACKUP == inDstType) + if ((CI_SYSTEM_TYPE_VOBC_BACKUP == inDstType) || (CI_SYSTEM_TYPE_ITE == inDstType)) { - *outSrcId = (CI_SYSTEM_TYPE_CI << 8) + GetSystemParaLocalCiId(); + *outSrcId = (CI_SYSTEM_TYPE_RCI << 8) + GetSystemParaLocalCiId(); *outDstId = GetATSInterfaceTypeId(); retVal = ENUM_CM_TRUE; 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..ea01d7a 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 105 /*ɴ*/ #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..8da48f5 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c +++ b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.c @@ -1,11 +1,11 @@ /******************************************************** * -* 2oo2DataTransferManage.c -* Ȩ˵ ؿƼ޹˾ -* ʱ䣺 2011-06-24 -* ߣ -* Ӧת -* ޸ļ¼ +* �� �� ���� 2oo2DataTransferManage.c +* ��Ȩ˵���� �������ؿƼ����޹�˾ +* ����ʱ�䣺 2011-06-24 +* �� �ߣ� ������ +* ���������� ����Ӧ������ת�� +* �޸ļ�¼�� * ********************************************************/ @@ -16,27 +16,27 @@ #include "NonAutoReturnDataManage.h" #include "DynamicRouteDataManage.h" #include "../Deployment/DeploymentExtern.h" -/**/ -extern UINT16 TransmitStateDataCurSum; /*ͨŹϵ״̬ݵǰ*/ -extern UINT8 ComCycNumForCiToAts; /*ATSͨڼ¼*/ -extern UINT8 ComCycNumForCiToXianDi; /*ֵͨڼ¼*/ +/*��������*/ +extern UINT16 TransmitStateDataCurSum; /*ͨ�Ź�ϵ״̬���ݵ�ǰ����*/ +extern UINT8 ComCycNumForCiToAts; /*������ATSͨ�����ڼ�¼*/ +extern UINT8 ComCycNumForCiToXianDi; /*�������ֵ�ͨ�����ڼ�¼*/ -extern TransmitStateDataStruct TransmitStateDataStru[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX]; /*ͨ״̬ṹ*/ +extern TransmitStateDataStruct TransmitStateDataStru[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX]; /*����ͨ��״̬�ṹ��*/ /* -* ṹЧid - - const void *pDataStru ṹָ - UINT16 struNum:鳤, - UINT16 struLength:ṹ峤 - - UINT8 *pCurCiAppDataPointer:ǰָ, -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� �����ṹ����Ч��id���� + ������� + const void *pDataStru �ṹ��ָ�� + UINT16 struNum:���鳤��, + UINT16 struLength:�ṹ�峤�� + ������� + UINT8 *pCurCiAppDataPointer:��ǰ����ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, UINT16 struNum, UINT16 struLength) { @@ -48,7 +48,7 @@ UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, void * pSrcAddr = NULL; - /*У*/ + /*���У��*/ if((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0u != struNum) && (0u != struLength)) { curIndex += (UINT32)sizeof(UINT16); @@ -57,7 +57,7 @@ UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, { pSrcAddr = (const UINT8 *)pDataStru + struLength * i; - /*ṹԪǰֽIDΪ0ʱЧ,˴˵Ч*/ + /*�ṹ��Ԫ��ǰ�����ֽ�IDΪ0ʱ������Ч����,�˴����˵������Ч��*/ if(0u != ShortFromCharLE(pSrcAddr)) { (void)memcpy(pCurCiAppDataPointer + curIndex, pSrcAddr, struLength); @@ -68,11 +68,11 @@ UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, } else { - /*ִκβ*/ + /*��ִ���κβ���*/ } } - /*Ч*/ + /*������Ч����*/ ShortToChar(ValidIdNum, pCurCiAppDataPointer); } else @@ -85,14 +85,14 @@ UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, return curIndex; } /* -* ṹЧͨųid - - VobcToCiDataStruct *pDataStru ṹָ - UINT16 struNum:鳤, - - UINT8 *pCurCiAppDataPointer:ǰָ, -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� �����ṹ����Ч��ͨ�ų�id���� + ������� + VobcToCiDataStruct *pDataStru �ṹ��ָ�� + UINT16 struNum:���鳤��, + ������� + UINT8 *pCurCiAppDataPointer:��ǰ����ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidGetVobcDataStru(UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* pDataStru, UINT16 struNum) { @@ -100,79 +100,79 @@ UINT32 CopyValidGetVobcDataStru(UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* UINT16 ValidIdNum = 0U; UINT16 i = 0U; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0U != struNum)) { - curIndex += (UINT32)sizeof(UINT16); /*VOBC*/ + curIndex += (UINT32)sizeof(UINT16); /*VOBC����*/ for (i = 0U; i < struNum; i++) { - /*ṹԪǰֽVOBC IDΪ0ʱЧ,˴˵Ч*/ + /*�ṹ��Ԫ��ǰ�����ֽ�VOBC IDΪ0ʱ������Ч����,�˴����˵������Ч��*/ if (0U != pDataStru[i].VobcId) { - ShortToChar(pDataStru[i].VobcId, &pCurCiAppDataPointer[curIndex]); /*VOBC ID*/ + ShortToChar(pDataStru[i].VobcId, &pCurCiAppDataPointer[curIndex]); /*����VOBC ID*/ curIndex += 2U; - pCurCiAppDataPointer[curIndex] = pDataStru[i].trainDirection; /*гз*/ + pCurCiAppDataPointer[curIndex] = pDataStru[i].trainDirection; /*�����г����з���*/ curIndex++; - pCurCiAppDataPointer[curIndex] = pDataStru[i].chTrainLevel; /*гм*/ + pCurCiAppDataPointer[curIndex] = pDataStru[i].chTrainLevel; /*�����г����м���*/ curIndex++; - ShortToChar(pDataStru[i].wTrainMaxSafeHeadLink, &pCurCiAppDataPointer[curIndex]); /*ǰlink ID*/ + ShortToChar(pDataStru[i].wTrainMaxSafeHeadLink, &pCurCiAppDataPointer[curIndex]); /*������ǰlink ID*/ curIndex += 2U; - LongToChar(pDataStru[i].dwTrainMaxSafeHeadOffset, &pCurCiAppDataPointer[curIndex]); /*ǰlinkƫ*/ + LongToChar(pDataStru[i].dwTrainMaxSafeHeadOffset, &pCurCiAppDataPointer[curIndex]); /*������ǰlinkƫ����*/ curIndex += 4U; - ShortToChar(pDataStru[i].wTrainMinSafeHeadLink, &pCurCiAppDataPointer[curIndex]); /*Сǰlink ID*/ + ShortToChar(pDataStru[i].wTrainMinSafeHeadLink, &pCurCiAppDataPointer[curIndex]); /*����Сǰlink ID*/ curIndex += 2U; - LongToChar(pDataStru[i].dwTrainMinSafeHeadOffset, &pCurCiAppDataPointer[curIndex]); /*Сǰlinkƫ*/ + LongToChar(pDataStru[i].dwTrainMinSafeHeadOffset, &pCurCiAppDataPointer[curIndex]); /*����Сǰlinkƫ����*/ curIndex += 4U; - ShortToChar(pDataStru[i].wTrainMaxSafeTailLink, &pCurCiAppDataPointer[curIndex]); /*link ID*/ + ShortToChar(pDataStru[i].wTrainMaxSafeTailLink, &pCurCiAppDataPointer[curIndex]); /*�������link ID*/ curIndex += 2U; - LongToChar(pDataStru[i].dwTrainMaxSafeTailOffset, &pCurCiAppDataPointer[curIndex]); /*linkƫ*/ + LongToChar(pDataStru[i].dwTrainMaxSafeTailOffset, &pCurCiAppDataPointer[curIndex]); /*�������linkƫ����*/ curIndex += 4U; - ShortToChar(pDataStru[i].wTrainMinSafeTailLink, &pCurCiAppDataPointer[curIndex]); /*Сlink ID*/ + ShortToChar(pDataStru[i].wTrainMinSafeTailLink, &pCurCiAppDataPointer[curIndex]); /*����С��link ID*/ curIndex += 2U; - LongToChar(pDataStru[i].dwTrainMinSafeTailOffset, &pCurCiAppDataPointer[curIndex]); /*Сlinkƫ*/ + LongToChar(pDataStru[i].dwTrainMinSafeTailOffset, &pCurCiAppDataPointer[curIndex]); /*����С��linkƫ����*/ curIndex += 4U; - ShortToChar(pDataStru[i].wTrainSpeed, &pCurCiAppDataPointer[curIndex]); /*гٶ*/ + ShortToChar(pDataStru[i].wTrainSpeed, &pCurCiAppDataPointer[curIndex]); /*�����г��ٶ�*/ curIndex += 2U; - pCurCiAppDataPointer[curIndex] = pDataStru[i].chSpeedDir; /*гٶȷ*/ + pCurCiAppDataPointer[curIndex] = pDataStru[i].chSpeedDir; /*�����г��ٶȷ���*/ curIndex++; - LongToChar(pDataStru[i].ComStartCycle, &pCurCiAppDataPointer[curIndex]); /*гͨʼʱ*/ + LongToChar(pDataStru[i].ComStartCycle, &pCurCiAppDataPointer[curIndex]); /*�����г�ͨ����ʼʱ��*/ curIndex += 4U; - ShortToChar(pDataStru[i].appInfoType, &pCurCiAppDataPointer[curIndex]); /*ӦϢ*/ + ShortToChar(pDataStru[i].appInfoType, &pCurCiAppDataPointer[curIndex]); /*����Ӧ����Ϣ����*/ curIndex += 2U; - ShortToChar(pDataStru[i].vobcLogId, &pCurCiAppDataPointer[curIndex]); /*VOBCͨID*/ + ShortToChar(pDataStru[i].vobcLogId, &pCurCiAppDataPointer[curIndex]); /*����VOBC������ͨID*/ curIndex += 2U; - LongToChar(pDataStru[i].signalID, &pCurCiAppDataPointer[curIndex]); /*VOBC->CIźŻID*/ + LongToChar(pDataStru[i].signalID, &pCurCiAppDataPointer[curIndex]); /*����VOBC->CI�źŻ�ID*/ curIndex += 4U; - pCurCiAppDataPointer[curIndex] = pDataStru[i].chLogOutState; /*ע״̬*/ + pCurCiAppDataPointer[curIndex] = pDataStru[i].chLogOutState; /*����ע������״̬*/ curIndex++; ValidIdNum++; } else { - /*ִκβ*/ + /*��ִ���κβ���*/ } } - ShortToChar(ValidIdNum, pCurCiAppDataPointer); /*Ч*/ + ShortToChar(ValidIdNum, pCurCiAppDataPointer); /*������Ч����*/ } else { @@ -185,11 +185,11 @@ UINT32 CopyValidGetVobcDataStru(UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* } /* -* ṹͨITE -* ˵IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITEṹ -* UINT16 struNum 鳤 -* UINT8* pCurCiAppDataPointer ǰָ루Σ -* ֵݳ +* ���������������ṹ��ͨ��������ITE���� +* ����˵����IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITE�ṹ������ +* UINT16 struNum ���鳤�� +* UINT8* pCurCiAppDataPointer ��ǰ����ָ�루���Σ� +* �� �� ֵ�����������ݳ��� * Created By LQ 2024.06.15 */ UINT32 CopyValidGetIteDataStru(UINT8* pCurCiAppDataPointer, IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX], UINT16 struNum) @@ -198,34 +198,34 @@ UINT32 CopyValidGetIteDataStru(UINT8* pCurCiAppDataPointer, IteToCiDataStruct pD UINT16 ValidIdNum = 0U; UINT16 i = 0U; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0U != struNum)) { - curIndex += (UINT32)sizeof(UINT16); /*ITE*/ + curIndex += (UINT32)sizeof(UINT16); /*ITE����*/ for (i = 0U; i < struNum; i++) { - /*ṹԪǰֽITE IDΪ0ʱЧ,˴˵Ч*/ + /*�ṹ��Ԫ��ǰ�����ֽ�ITE IDΪ0ʱ������Ч����,�˴����˵������Ч��*/ if (0U != pDataStru[i].wIteId) { - ShortToChar(pDataStru[i].wIteId, &pCurCiAppDataPointer[curIndex]); /*ITE ID*/ + ShortToChar(pDataStru[i].wIteId, &pCurCiAppDataPointer[curIndex]); /*����ITE ID*/ curIndex += 2U; - ShortToChar(pDataStru[i].wIteLogId, &pCurCiAppDataPointer[curIndex]); /*ITE߼ID*/ + ShortToChar(pDataStru[i].wIteLogId, &pCurCiAppDataPointer[curIndex]); /*����ITE�߼�ID*/ curIndex += 2U; - LongToChar(pDataStru[i].dwComStartCycCount, &pCurCiAppDataPointer[curIndex]); /*ͨʼ*/ + LongToChar(pDataStru[i].dwComStartCycCount, &pCurCiAppDataPointer[curIndex]); /*����ͨ����ʼ����*/ curIndex += 4U; ValidIdNum++; } else { - /*ִκβ*/ + /*��ִ���κβ���*/ } } - ShortToChar(ValidIdNum, pCurCiAppDataPointer); /*Ч*/ + ShortToChar(ValidIdNum, pCurCiAppDataPointer); /*������Ч����*/ } else { @@ -238,15 +238,15 @@ UINT32 CopyValidGetIteDataStru(UINT8* pCurCiAppDataPointer, IteToCiDataStruct pD } /* -* Чͨͷ - -const void *pDataStru ṹָ -UINT16 struNum:鳤, -UINT16 struLength:ṹ峤 - -UINT8 *pCurCiAppDataPointer:ǰָ, -* ֵ ݵij -* ע ջͨͷidжЧ +* ���������� ������Ч������ͨͷ +������� +const void *pDataStru �ṹ��ָ�� +UINT16 struNum:���鳤��, +UINT16 struLength:�ṹ�峤�� +������� +UINT8 *pCurCiAppDataPointer:��ǰ����ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ���ջ�����ͨ��ͷ��id�ж���Ч */ UINT32 CopyValidGetVobcBackHlht(UINT8 *pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength) { @@ -256,14 +256,14 @@ UINT32 CopyValidGetVobcBackHlht(UINT8 *pCurCiAppDataPointer, UINT16 struNum, UIN UINT16 i = 0U; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (0U != struLength)&&(NULL != vobcBackupHLHTHeadCtxs)) { curIndex += (UINT32)sizeof(UINT16); for (i = 0U; i < struNum; i++) { - /*ͨͷidΪ0ʱЧ*/ + /*������ͨͷidΪ0ʱ������Ч����*/ if (0U != vobcBackupHLHTHeadCtxs[i].sourceId) { (void)CommonMemCpy((void *)(pCurCiAppDataPointer + curIndex), struLength, (void *)(&vobcBackupHLHTHeadCtxs[i]), struLength); @@ -273,11 +273,11 @@ UINT32 CopyValidGetVobcBackHlht(UINT8 *pCurCiAppDataPointer, UINT16 struNum, UIN } else { - /*ִκβ*/ + /*��ִ���κβ���*/ } } - /*Ч*/ + /*������Ч����*/ ShortToChar(ValidIdNum, pCurCiAppDataPointer); } else @@ -291,11 +291,11 @@ UINT32 CopyValidGetVobcBackHlht(UINT8 *pCurCiAppDataPointer, UINT16 struNum, UIN } /* -* ṹ߼· - - UINT8 *pCurCiAppDataPointer:ǰָ, -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� �����ṹ���߼���·���� + ������� + UINT8 *pCurCiAppDataPointer:��ǰ����ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer) { @@ -309,7 +309,7 @@ UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer) void* pSrcAddr = NULL; - /*У*/ + /*���У��*/ if (NULL != pCurCiAppDataPointer) { curIndex += (UINT32)sizeof(UINT16); @@ -323,7 +323,7 @@ UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer) if ((ROUTE_LOGICAL_STATE_IDLE != cRouteState) && (0U != cRouteState)) { - /*ṹԪǰֽIDΪ0ʱЧ,˴˵Ч*/ + /*�ṹ��Ԫ��ǰ�����ֽ�IDΪ0ʱ������Ч����,�˴����˵������Ч��*/ if (0U != ShortFromCharLE(pSrcAddr)) { (void)memcpy(pCurCiAppDataPointer + curIndex, pSrcAddr, sizeof(LogicalRouteDataStruct)); @@ -334,12 +334,12 @@ UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer) } else { - /*ִκβ*/ + /*��ִ���κβ���*/ } } } - /*Ч*/ + /*������Ч����*/ ShortToChar(ValidIdNum, pCurCiAppDataPointer); } else @@ -353,16 +353,16 @@ UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer) } /* -* ЧݵӦȫ -* ˵ - - const UINT8 *pCurCiAppDataPointer:ǰָ - UINT16 struNum:鳤, - UINT16 struLength:ṹ峤 - - void *pDataStru:ṹָ, -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� ������Ч���ݵ���Ӧ��ȫ������ +* ����˵���� + ������� + const UINT8 *pCurCiAppDataPointer:��ǰ����ָ�� + UINT16 struNum:���鳤��, + UINT16 struLength:�ṹ�峤�� + ������� + void *pDataStru:�ṹ��ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidSetDataStru(const UINT8 *pCurCiAppDataPointer, void *pDataStru, UINT16 struNum, UINT16 struLength) { @@ -376,10 +376,10 @@ UINT32 CopyValidSetDataStru(const UINT8 *pCurCiAppDataPointer, void *pDataStru, void * pDstAddr = NULL; - /*У*/ + /*���У��*/ if((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0u != struNum) && (0u != struLength)) { - /*ȡܵЧID*/ + /*��ȡ�ܵ���ЧID����*/ ValidIdNum = ShortFromChar(pCurCiAppDataPointer); curIndex += (UINT32)sizeof(UINT16); @@ -415,15 +415,15 @@ UINT32 CopyValidSetDataStru(const UINT8 *pCurCiAppDataPointer, void *pDataStru, } /* -* ͨųЧݵӦȫ -* ˵ - - const UINT8 *pCurCiAppDataPointer:ǰָ - UINT16 struNum:鳤, - - VobcToCiDataStruct *pDataStru:ṹָ, -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� ����ͨ�ų���Ч���ݵ���Ӧ��ȫ������ +* ����˵���� + ������� + const UINT8 *pCurCiAppDataPointer:��ǰ����ָ�� + UINT16 struNum:���鳤��, + ������� + VobcToCiDataStruct *pDataStru:�ṹ��ָ��, +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* pDataStru, UINT16 struNum) { @@ -431,10 +431,10 @@ UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataS UINT16 i = 0U; UINT16 ValidIdNum = 0U; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0U != struNum)) { - /*ȡܵЧID*/ + /*��ȡ�ܵ���ЧID����*/ ValidIdNum = ShortFromChar(pCurCiAppDataPointer); curIndex += (UINT32)sizeof(UINT16); @@ -443,58 +443,58 @@ UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataS { if (i < struNum) { - pDataStru[i].VobcId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬVOBC ID*/ + pDataStru[i].VobcId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��VOBC ID*/ curIndex += 2U; - pDataStru[i].trainDirection = pCurCiAppDataPointer[curIndex]; /*ͬгз*/ + pDataStru[i].trainDirection = pCurCiAppDataPointer[curIndex]; /*ͬ���г����з���*/ curIndex++; - pDataStru[i].chTrainLevel = pCurCiAppDataPointer[curIndex]; /*ͬгм*/ + pDataStru[i].chTrainLevel = pCurCiAppDataPointer[curIndex]; /*ͬ���г����м���*/ curIndex++; - pDataStru[i].wTrainMaxSafeHeadLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгǰlink ID*/ + pDataStru[i].wTrainMaxSafeHeadLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г���ǰlink ID*/ curIndex += 2U; - pDataStru[i].dwTrainMaxSafeHeadOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгǰlinkƫ*/ + pDataStru[i].dwTrainMaxSafeHeadOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г���ǰlinkƫ����*/ curIndex += 4U; - pDataStru[i].wTrainMinSafeHeadLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгСǰlink ID*/ + pDataStru[i].wTrainMinSafeHeadLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г�Сǰlink ID*/ curIndex += 2U; - pDataStru[i].dwTrainMinSafeHeadOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгСǰlinkƫ*/ + pDataStru[i].dwTrainMinSafeHeadOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г�Сǰlinkƫ����*/ curIndex += 4U; - pDataStru[i].wTrainMaxSafeTailLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгlink ID*/ + pDataStru[i].wTrainMaxSafeTailLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г����link ID*/ curIndex += 2U; - pDataStru[i].dwTrainMaxSafeTailOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгlinkƫ*/ + pDataStru[i].dwTrainMaxSafeTailOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г����linkƫ����*/ curIndex += 4U; - pDataStru[i].wTrainMinSafeTailLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгСlink ID*/ + pDataStru[i].wTrainMinSafeTailLink = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г�С��link ID*/ curIndex += 2U; - pDataStru[i].dwTrainMinSafeTailOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгСlinkƫ*/ + pDataStru[i].dwTrainMinSafeTailOffset = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г�С��linkƫ����*/ curIndex += 4U; - pDataStru[i].wTrainSpeed = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгٶ*/ + pDataStru[i].wTrainSpeed = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г��ٶ�*/ curIndex += 2U; - pDataStru[i].chSpeedDir = pCurCiAppDataPointer[curIndex]; /*ͬгٶȷ*/ + pDataStru[i].chSpeedDir = pCurCiAppDataPointer[curIndex]; /*ͬ���г��ٶȷ���*/ curIndex++; - pDataStru[i].ComStartCycle = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬгͨʼʱ*/ + pDataStru[i].ComStartCycle = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ���г�ͨ����ʼʱ��*/ curIndex += 4U; - pDataStru[i].appInfoType = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬӦϢ*/ + pDataStru[i].appInfoType = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��Ӧ����Ϣ����*/ curIndex += 2U; - pDataStru[i].vobcLogId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬVOBCͨID*/ + pDataStru[i].vobcLogId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��VOBC������ͨID*/ curIndex += 2U; - pDataStru[i].signalID = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬVOBC->CIźŻID*/ + pDataStru[i].signalID = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��VOBC->CI�źŻ�ID*/ curIndex += 4U; - pDataStru[i].chLogOutState = pCurCiAppDataPointer[curIndex]; /*ͬע״̬*/ + pDataStru[i].chLogOutState = pCurCiAppDataPointer[curIndex]; /*ͬ��ע������״̬*/ curIndex++; } else @@ -514,11 +514,11 @@ UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataS } /* -* ITEЧݵӦȫ -* ˵const UINT8 *pCurCiAppDataPointer:ǰָ -* UINT16 struNum 鳤 -* IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITEṹ Σ -* ֵݵij +* ��������������ITE��Ч���ݵ���Ӧ��ȫ������ +* ����˵����const UINT8 *pCurCiAppDataPointer:��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITE�ṹ������ �����Σ� +* �� �� ֵ���������ݵij��� * Created By LQ 2024.06.15 */ UINT32 CopyValidSetIteDataStru(const UINT8* pCurCiAppDataPointer, IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX], UINT16 struNum) @@ -527,10 +527,10 @@ UINT32 CopyValidSetIteDataStru(const UINT8* pCurCiAppDataPointer, IteToCiDataStr UINT16 i = 0U; UINT16 ValidIdNum = 0U; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0U != struNum)) { - /*ȡܵЧID*/ + /*��ȡ�ܵ���ЧID����*/ ValidIdNum = ShortFromChar(pCurCiAppDataPointer); curIndex += (UINT32)sizeof(UINT16); @@ -539,13 +539,13 @@ UINT32 CopyValidSetIteDataStru(const UINT8* pCurCiAppDataPointer, IteToCiDataStr { if (i < struNum) { - pDataStru[i].wIteId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬITE ID*/ + pDataStru[i].wIteId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��ITE ID*/ curIndex += 2U; - pDataStru[i].wIteLogId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬITE߼ID*/ + pDataStru[i].wIteLogId = ShortFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ��ITE�߼�ID*/ curIndex += 2U; - pDataStru[i].dwComStartCycCount = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬITEͨʼ*/ + pDataStru[i].dwComStartCycCount = LongFromChar(&pCurCiAppDataPointer[curIndex]); /*ͬ����ITEͨ����ʼ����*/ curIndex += 4U; } else @@ -565,14 +565,14 @@ UINT32 CopyValidSetIteDataStru(const UINT8* pCurCiAppDataPointer, IteToCiDataStr } /* -* ЧͨͷӦȫ -* ˵ - -const UINT8 *pCurCiAppDataPointer:ǰָ -UINT16 struNum:鳤, -UINT16 struLength:ṹ峤 - -* ֵ ݵij +* ���������� ������Ч������ͨ������ͷ����Ӧ��ȫ������ +* ����˵���� +������� +const UINT8 *pCurCiAppDataPointer:��ǰ����ָ�� +UINT16 struNum:���鳤��, +UINT16 struLength:�ṹ�峤�� +������� +* ����ֵ �� �������ݵij��� */ UINT32 CopyValidSetVobcBackHlht(const UINT8 *pCurCiAppDataPointer,UINT16 struNum, UINT16 struLength) { @@ -586,22 +586,22 @@ UINT32 CopyValidSetVobcBackHlht(const UINT8 *pCurCiAppDataPointer,UINT16 struNum HLHTHeadContextStru temp = { 0 }; - /*У*/ + /*���У��*/ if ((NULL != pCurCiAppDataPointer) && (NULL != vobcBackupHLHTHeadCtxs) && (0U != struNum) && (0U != struLength)) { - /*ȡܵЧID*/ + /*��ȡ�ܵ���ЧID����*/ ValidIdNum = ShortFromChar(pCurCiAppDataPointer); curIndex += (UINT32)sizeof(UINT16); for (i = 0u; i < ValidIdNum; i++) { - /*浽ʱṹ岢ȡ豸id*/ + /*���浽��ʱ�ṹ�岢��ȡ�豸id*/ (void)CommonMemCpy((void *)(&temp), struLength, (const void *)(pCurCiAppDataPointer + curIndex), struLength); devId = temp.sourceId; if (devId < struNum) { - /*浽ȫ*/ + /*���浽ȫ������*/ (void)CommonMemCpy((void *)(&vobcBackupHLHTHeadCtxs[devId]), struLength, (const void *)(&temp), struLength); curIndex += (UINT32)struLength; } @@ -624,12 +624,12 @@ UINT32 CopyValidSetVobcBackHlht(const UINT8 *pCurCiAppDataPointer,UINT16 struNum } /* -* ߼·ЧݵӦȫ -* ˵ - - const UINT8 *pCurCiAppDataPointer:ǰָ -* ֵ ݵij -* ע ֻڽṹһԪΪֽڵID +* ���������� �����߼���·��Ч���ݵ���Ӧ��ȫ������ +* ����˵���� + ������� + const UINT8 *pCurCiAppDataPointer:��ǰ����ָ�� +* ����ֵ �� �������ݵij��� +* ע �� �� ֻ�����ڽṹ���һ��Ԫ��Ϊ�����ֽڵ�ID */ UINT32 CopyValidSetLogicRouteDataStru(const UINT8* pCurCiAppDataPointer) { @@ -641,10 +641,10 @@ UINT32 CopyValidSetLogicRouteDataStru(const UINT8* pCurCiAppDataPointer) UINT16 dataStruIndex = 0u; void* pDstAddr = NULL; - /*У*/ + /*���У��*/ if (NULL != pCurCiAppDataPointer) { - /*ȡܵЧID*/ + /*��ȡ�ܵ���ЧID����*/ ValidIdNum = ShortFromChar(pCurCiAppDataPointer); curIndex += (UINT32)sizeof(UINT16); @@ -679,354 +679,457 @@ UINT32 CopyValidSetLogicRouteDataStru(const UINT8* pCurCiAppDataPointer) } /* -* ȡCIӦ -* ˵ UINT8 *pCiAppDataPointer, CIӦָ -* ֵ void +* ���������� ��ȡCIӦ������ +* ����˵���� UINT8 *pCiAppDataPointer, CIӦ������ָ�� +* ����ֵ �� void */ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer) { - UINT32 curIndex = 0u; /*¼ƶ±*/ - UINT32 curResult = 0u; /*ṹЧid*/ + UINT32 curIndex = 0u; /*��¼�ƶ��±�*/ + UINT32 curResult = 0u; /*�����ṹ����Ч��id����*/ UINT8 ii= 0u; + UINT32 crcIndex = 0u; /*���ڼ���CRC���±�*/ + UINT32 crcLength = 0u; /*���ڼ���CRC�ij���*/ + UINT32 crcResult = 0u; /*���ڴ��CRCֵ*/ if (NULL != pCiAppDataPointer) { + /*��������ģʽ��־*/ + (void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT8), &CI_SYSTEM_TYPE_RCI, (UINT32)sizeof(UINT8)); + curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫվƱ־*/ + /*����ȫվ���Ʊ�־*/ (void)memcpy(pCiAppDataPointer + curIndex, &AllSignalBrightFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫվ־*/ + /*����ȫվ����������־*/ (void)memcpy(pCiAppDataPointer + curIndex, &AllSwitchYLockFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫվ־*/ + /*����ȫվ������־*/ (void)memcpy(pCiAppDataPointer + curIndex, &StartFLockFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ϵձ־*/ + /*�����ϵ����ձ�־*/ (void)memcpy(pCiAppDataPointer + curIndex, &StartLockFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ֹͣδ*/ + /*����ֹͣ���δ����*/ (void)memcpy(pCiAppDataPointer + curIndex, &StopCheckState, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*Ӧ̵̼ID*/ + /*����Ӧ���̵̼���ID*/ (void)memcpy(pCiAppDataPointer + curIndex, &JkjRelayId, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*ƽ̨崻־*/ + /*����ƽ̨崻���־*/ (void)memcpy(pCiAppDataPointer + curIndex, &PlatOverFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*JKJӦ̵̼Ч*/ + /*����JKJӦ���̵̼�����Ч*/ (void)memcpy(pCiAppDataPointer + curIndex, &JkjRelayValid, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫѩģʽ*/ + /*ȫ����ѩģʽ����*/ (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); - /*ܸλʼ*/ + /*�����ܸ�λ���ʼ����*/ (void)memcpy(pCiAppDataPointer + curIndex, &ZFWCmdStartCycNum, sizeof(UINT32)); curIndex = curIndex + (UINT32)sizeof(UINT32); - /*ݵǰ*/ + /*�����������ݵ�ǰ����*/ (void)memcpy(pCiAppDataPointer + curIndex, &ErrorDataCurSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*ͨŹϵ״̬ݵǰ*/ + /*����ͨ�Ź�ϵ״̬���ݵ�ǰ����*/ (void)memcpy(pCiAppDataPointer + curIndex, &TransmitStateDataCurSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*ATSͨڼ¼*/ + /*����������ATSͨ�����ڼ�¼*/ (void)memcpy(pCiAppDataPointer + curIndex, &ComCycNumForCiToAts, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ֵͨڼ¼*/ + /*�����������ֵ�ͨ�����ڼ�¼*/ (void)memcpy(pCiAppDataPointer + curIndex, &ComCycNumForCiToXianDi, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*һβԴϵͳ*/ + /*�������һ�β���������Դϵͳ����*/ (void)memcpy(pCiAppDataPointer + curIndex, &LastCmdSourceSysType, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*״βȷϵID*/ + /*�����״β���ȷ�ϵ�����ID��*/ (void)memcpy(pCiAppDataPointer + curIndex, &FirstCmdId, sizeof(UINT32)); curIndex = curIndex + (UINT32)sizeof(UINT32); - /*CIṹ鳤*/ + /*����CI����������ṹ�����鳤��*/ (void)memcpy(pCiAppDataPointer + curIndex, &CiSendCmdStruCurSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*CI͵ṹ鳤*/ + /*����CI���͵�������������ṹ�����鳤��*/ (void)memcpy(pCiAppDataPointer + curIndex, &SendCiCmdDataStruCurSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*ͨŵVobcĿ*/ + /*����һ��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); - /*ͨŵITEĿ*/ + /*����������ͨ�ŵ�ITE��Ŀ*/ (void)memcpy(pCiAppDataPointer + curIndex, &IteToCiSum, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); #if 0 - /*г*/ + /*�����г�����*/ (void)memcpy(pCiAppDataPointer + curIndex, &ComTrainSum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); #endif - /*ܸλ־*/ + /*���������ܸ�λ��־*/ (void)memcpy(pCiAppDataPointer + curIndex, &generalResetFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȷϱ־*/ + /*��������ȷ�ϱ�־*/ (void)memcpy(pCiAppDataPointer + curIndex, &g_cTsrSureFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫʱ״̬*/ + /*����ȫ����ʱ����״̬*/ (void)memcpy(pCiAppDataPointer + curIndex, &g_AllLineTsrState, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ȫʱٶ*/ + /*����ȫ����ʱ�����ٶ�*/ (void)memcpy(pCiAppDataPointer + curIndex, &g_AllLineTsrSpeed, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*·ݽṹ*/ + /*������·���ݽṹ��*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)RouteDataStru, ROUTE_SUM_MAX, (UINT16)sizeof(RouteDataStruct)); curIndex = curIndex + curResult; - /*߼·ݽṹ*/ + /*������·���ݽṹ��-����*/ + curResult = CopyValidGetRouteDataCC(pCiAppDataPointer + curIndex, ROUTE_SUM_MAX,&RouteDataStruCC[0]); + curIndex = curIndex + curResult; + + /*�����߼���·���ݽṹ��*/ curResult = CopyValidGetLogicRouteDataStru(pCiAppDataPointer + curIndex); curIndex = curIndex + curResult; - /*źŻݽṹ*/ + /*�����źŻ����ݽṹ��*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)SignalDataStru, SIGNAL_SUM_MAX, (UINT16)sizeof(SignalDataStruct)); curIndex = curIndex + curResult; - /*ݽṹ*/ + /*�����źŻ����ݽṹ��-����*/ + curResult = CopyValidGetSigDataCC(pCiAppDataPointer + curIndex, SIGNAL_SUM_MAX, &SignalDataStruCC[0]); + curIndex = curIndex + curResult; + + /*�����������ݽṹ��*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)SwitchDataStru, SWITCH_SUM_MAX, (UINT16)sizeof(SwitchDataStruct)); curIndex = curIndex + curResult; - /*ݽṹ*/ + /*�����������ݽṹ��-����*/ + curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)SwitchDataStruCC, SWITCH_SUM_MAX, (UINT16)sizeof(SwitchDataStructCC)); + 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; - /*߼ݽṹ*/ + /*���������������ݽṹ��-����*/ + curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)AxisSectionDataStruCC, AXIS_SECTION_SUM_MAX, (UINT16)sizeof(AxisSectionDataStructCC)); + curIndex = curIndex + curResult; + + /*�����߼��������ݽṹ��*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)LogicSectionDataStru, LOGIC_SECTION_SUM_MAX, (UINT16)sizeof(LogicSectionDataStruct)); curIndex = curIndex + curResult; - /*ݽṹ*/ + /*�����߼��������ݽṹ��-����*/ + curResult = CopyValidGetLogicSecDataCC(pCiAppDataPointer + curIndex, LOGIC_SECTION_SUM_MAX, &LogicSectionDataStruCC[0]); + curIndex = curIndex + curResult; + + /*���������������ݽṹ��*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)PhysicalSectionDataStru, PHYSICAL_SECTION_SUM_MAX, (UINT16)sizeof(PhysicalSectionDataStruct)); curIndex = curIndex + curResult; - /*̵ݽṹ*/ + /*���������������ݽṹ��-����*/ + curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)PhysicalSectionDataStruCC, PHYSICAL_SECTION_SUM_MAX, (UINT16)sizeof(PhysicalSectionDataStructCC)); + curIndex = curIndex + curResult; + + /*�����̵����������ݽṹ������*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)RelayDataStru, RELAY_SUM_MAX, (UINT16)sizeof(RelayDataStruct)); curIndex = curIndex + curResult; - /*ESBݽṹ*/ + /*����ESB���ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, EsbDataStru, (ESB_SUM_MAX)*sizeof(EsbDataStruct)); curIndex = curIndex + (UINT32)((ESB_SUM_MAX)*sizeof(EsbDataStruct)); - /*ݽṹ*/ + /*�������������ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, PsdDataStru, (PSD_SUM_MAX)*sizeof(PsdDataStruct)); curIndex = curIndex + (UINT32)((PSD_SUM_MAX)*sizeof(PsdDataStruct)); - /*OVERLAPݽṹ*/ + /*����OVERLAP���ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, OverlapDataStru, (OVERLAP_SUM_MAX)*sizeof(OverlapDataStruct)); curIndex = curIndex + (UINT32)((OVERLAP_SUM_MAX)*sizeof(OverlapDataStruct)); - /*Զ۷ݽṹ*/ + /*����OVERLAP���ݽṹ��-����*/ + curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)OverlapDataStruCC, OVERLAP_SUM_MAX, (UINT16)sizeof(OverlapDataStructCC)); + curIndex = curIndex + curResult; + + /*�����Զ��۷����ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, AutoReturnDataStru, (AUTO_RETURN_SUM_MAX)*sizeof(AutoReturnDataStruct)); curIndex = curIndex + (UINT32)((AUTO_RETURN_SUM_MAX)*sizeof(AutoReturnDataStruct)); - /*Զ·ݽṹ*/ + /*�����Զ���·���ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, AutoRouteDataStru, (AUTO_ROUTE_SUM_MAX)*sizeof(AutoRouteDataStruct)); curIndex = curIndex + (UINT32)((AUTO_ROUTE_SUM_MAX)*sizeof(AutoRouteDataStruct)); - /*ǽ·ݽṹ*/ + /*�����ǽ�·���ݽṹ��*/ (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)); - /*OCվվͷǼվָʾṹ*/ + /*����OCվ������վ�ͷǼ���վ��ָʾ���ṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, g_OCStationIndicDataStru, (INDICATOR_SUM_MAX) * sizeof(OCStationIndicDataStru)); curIndex = curIndex + (UINT32)((INDICATOR_SUM_MAX) * sizeof(OCStationIndicDataStru)); - /*ݽṹ*/ + /*�����������ݽṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, ErrorDataStru, (ERROR_DATA_SUM_MAX)*sizeof(ErrorDataStruct)); curIndex = curIndex + (UINT32)((ERROR_DATA_SUM_MAX)*sizeof(ErrorDataStruct)); - /*·ݽṹ*/ + /*����������·���ݽṹ��*/ #if 0 (void)memcpy(pCiAppDataPointer + curIndex, LongRouteDataStru, (ROUTE_LONG_SUM_MAX)*sizeof(LongRouteDataStruct)); curIndex = curIndex + (ROUTE_LONG_SUM_MAX)*sizeof(LongRouteDataStruct); #endif curIndex += CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)LongRouteDataStru, ROUTE_LONG_SUM_MAX, (UINT16)sizeof(LongRouteDataStruct)); - /*ͨ״̬ṹ*/ + /*����ͨ��״̬�ṹ��*/ (void)memcpy(pCiAppDataPointer + curIndex, TransmitStateDataStru, (TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX)*sizeof(TransmitStateDataStruct)); curIndex = curIndex + (UINT32)((TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX)*sizeof(TransmitStateDataStruct)); - /*CIṹ*/ + /*����CI����������ṹ������*/ (void)memcpy(pCiAppDataPointer + curIndex, CiSendCmdDataStru, (CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct)); curIndex = curIndex + (UINT32)((CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct)); - /*CI͵ṹ*/ + /*����CI���͵�������������ṹ������*/ (void)memcpy(pCiAppDataPointer + curIndex, SendCiCmdDataStru, (SENDCI_CMD_DATA_STRU_SUM_MAX)*sizeof(ToCiCommandDataStruct)); curIndex = curIndex + (UINT32)((SENDCI_CMD_DATA_STRU_SUM_MAX)*sizeof(ToCiCommandDataStruct)); - /*ͨŵVobcϢ*/ + /*����������ͨ�ŵ�Vobc��Ϣ*/ curResult = CopyValidGetVobcDataStru(pCiAppDataPointer + curIndex, VobcToCiDataStru, VOBC_TO_CI_SUM_MAX); curIndex = curIndex + curResult; - /*ʹúģʽͨŵVobcϢ*/ + /*����ʹ�ú�ģʽ������ͨ�ŵ�Vobc��Ϣ*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)VobcBackUpToCiDataStru, VOBC_BACKUP_TO_CI_SUM_MAX, (UINT16)sizeof(VobcBackUpToCiDataStruct)); curIndex = curIndex + curResult; - /*ͨŵITEϢ*/ + /*����������ͨ�ŵ�ITE��Ϣ*/ curResult = CopyValidGetIteDataStru(pCiAppDataPointer + curIndex, IteToCiDataStru, ITE_TO_CI_SUM_MAX); curIndex = curIndex + curResult; #if 0 - /*гλϢ*/ + /*�����г�λ����Ϣ*/ (void)memcpy(pCiAppDataPointer + curIndex, ComTrainPosDataStru, (ZC_TO_CI_TRAIN_MAX)*sizeof(ComTrainPosDataStruct)); curIndex = curIndex + (ZC_TO_CI_TRAIN_MAX)*sizeof(ComTrainPosDataStruct); #endif - /*ȫԶ۷ݽṹ*/ + /*����ȫ�Զ��۷����ݽṹ��*/ (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)); - /* SPKS (void *pDest, UINT32 destBuffSize, const void *pSrc, UINT32 count);*/ + /*�������������ݽṹ��-����*/ + curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)GaragedoorDataStruCC, GARAGE_DOOR_SUM_MAX, (UINT16)sizeof(GaragedoorDataStructCC)); + curIndex = curIndex + curResult; + + /* ����SPKS���� (void *pDest, UINT32 destBuffSize, const void *pSrc, UINT32 count);*/ (void)memcpy(pCiAppDataPointer + curIndex,spksDataBuff,(SPKS_SUM_MAX)*sizeof(SpksDataStruct)); curIndex += (UINT32)((SPKS_SUM_MAX)*sizeof(SpksDataStruct)); - /* վģʽ */ + /* վ��ģʽ */ pCiAppDataPointer[curIndex] = GetCiModeFlag(); curIndex += 1U; - /*˹ȡʱ״̬ת*/ + /*�˹�ȡ����ʱ����״̬ת��*/ pCiAppDataPointer[curIndex] = LabourCancelLinShiXianState; curIndex += 1U; - /*뱾CIͨŵCIͨͷ*/ - (void)memcpy(pCiAppDataPointer + curIndex,ciHLHTHeadCtxs,(CI_SUM_MAX)*sizeof(HLHTHeadContextStru)); - curIndex = curIndex + (UINT32)((CI_SUM_MAX)*sizeof(HLHTHeadContextStru)); + /*�뱾����ͨ�ŵ�CI������ͨ����ͷ����������*/ + curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ciHLHTHeadCtxs); + curIndex = curIndex + curResult; - /*뱾CIͨŵVOBCͨͷ*/ + /*�뱾CIͨ�ŵ�VOBC������ͨ����ͷ����������*/ (void)memcpy(pCiAppDataPointer + curIndex,vobcHLHTHeadCtxs,(VOBC_SUM_MAX)*sizeof(HLHTHeadContextStru)); curIndex = curIndex + (UINT32)((VOBC_SUM_MAX)*sizeof(HLHTHeadContextStru)); - /*뱾CIͨŵVOBC󱸻ͨͷ*/ + /*�뱾CIͨ�ŵ�VOBC�󱸻�����ͨ����ͷ����������*/ curResult = CopyValidGetVobcBackHlht(pCiAppDataPointer + curIndex, VOBC_BACKUP_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru)); curIndex = curIndex + curResult; - /*뱾CIͨŵZCͨͷ*/ + /*�뱾CIͨ�ŵ�ZC������ͨ����ͷ����������*/ (void)memcpy(pCiAppDataPointer + curIndex,zcHLHTHeadCtxs,(ZC_SUM_MAX)*sizeof(HLHTHeadContextStru)); curIndex = curIndex + (UINT32)((ZC_SUM_MAX)*sizeof(HLHTHeadContextStru)); - /*뱾CIͨŵļϵͳͨͷ*/ - (void)memcpy(pCiAppDataPointer + curIndex, axleHLHTHeadCtxs, (AXLE_SUM_MAX) * sizeof(HLHTHeadContextStru)); - curIndex = curIndex + (UINT32)((AXLE_SUM_MAX) * sizeof(HLHTHeadContextStru)); + /*�뱾CIͨ�ŵļ���ϵͳ������ͨ����ͷ����������*/ + curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, AXLE_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), axleHLHTHeadCtxs); + curIndex = curIndex + curResult; - /*뱾CIͨŵOCϵͳͨͷ*/ - (void)memcpy(pCiAppDataPointer + curIndex, ocHLHTHeadCtxs, (OC_SUM_MAX) * sizeof(HLHTHeadContextStru)); - curIndex = curIndex + (UINT32)((OC_SUM_MAX) * sizeof(HLHTHeadContextStru)); + /*�뱾RCͨ�ŵļ���ϵͳ������ͨ����ͷ����������*/ + curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, AXLE_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcAxleHLHTHeadCtxs); + curIndex = curIndex + curResult; - /*뱾CIͨŵTMCϵͳͨͷ*/ - (void)memcpy(pCiAppDataPointer + curIndex, tmcHLHTHeadCtxs, (TMC_SUM_MAX) * sizeof(HLHTHeadContextStru)); - curIndex = curIndex + (UINT32)((TMC_SUM_MAX) * sizeof(HLHTHeadContextStru)); + /*�뱾CIͨ�ŵ�OCϵͳ������ͨ����ͷ����������*/ + curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, OC_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ocHLHTHeadCtxs); + curIndex = curIndex + curResult; - /*뱾CIͨŵITEͨͷ*/ + /*����һ��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ϵͳ������ͨ����ͷ����������*/ + curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, TMC_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), tmcHLHTHeadCtxs); + curIndex = curIndex + curResult; + + /*�뱾CIͨ�ŵ�ITE������ͨ����ͷ����������*/ (void)memcpy(pCiAppDataPointer + curIndex, IteHLHTHeadCtxs, (ITE_SUM_MAX * VOBC_INC_ITE_SUM_MAX) * sizeof(HLHTHeadContextStru)); curIndex = curIndex + (UINT32)((ITE_SUM_MAX * VOBC_INC_ITE_SUM_MAX) * sizeof(HLHTHeadContextStru)); - /*ǰԳ״̬*/ + /*������ǰ�Գ�״̬*/ (void)memcpy(pCiAppDataPointer + curIndex, &ciTrainTestStatus, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ǰϴ״̬*/ + /*������ǰϴ����״̬*/ (void)memcpy(pCiAppDataPointer + curIndex, WashMachineDataStru, (WASHMACHINE_SUM_MAX)*sizeof(WashMachineDataStruct)); curIndex = curIndex + (UINT32)((WASHMACHINE_SUM_MAX)*sizeof(WashMachineDataStruct)); - /*Զ־*/ + /*�����Զ�������־*/ (void)memcpy(pCiAppDataPointer + curIndex, &AutoTriggerFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*Ŷ̬*/ + /*���������Ŷ�̬����*/ curIndex += CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)FloodGateDataStru, FLOOD_GATE_SUM_MAX, (UINT16)sizeof(FloodGateDataStruct)); - /*̵ӿȷϱ־*/ + /*���������Ŷ�̬����-����*/ + curResult = CopyValidGetFloodGateDataCC(pCiAppDataPointer + curIndex, FLOOD_GATE_SUM_MAX, &FloodGateDataStruCC[0]); + curIndex = curIndex + curResult; + + /*�������������̵�ӿ�ȷ�ϱ�־*/ (void)memcpy(pCiAppDataPointer + curIndex, &CiCiRelayInterfaceConfirmFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - - /*OCźŻ豸*/ +#if 0 + /*OC�������źŻ��豸������*/ (void)memcpy(pCiAppDataPointer + curIndex, &m_SignalNum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*뱾CIͨŵOCźŻ*/ + /*�뱾CIͨ�ŵ�OC�źŻ�����������*/ (void)memcpy(pCiAppDataPointer + curIndex, m_Signals, m_SignalNum * sizeof(OcDeviceStruct)); curIndex = curIndex + (UINT32)(m_SignalNum * sizeof(OcDeviceStruct)); - /*OCе豸*/ + /*OC�����е����豸������*/ (void)memcpy(pCiAppDataPointer + curIndex, &m_SwitchNum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*뱾CIͨŵOC*/ + /*�뱾CIͨ�ŵ�OC��������������*/ (void)memcpy(pCiAppDataPointer + curIndex, m_Switches, m_SwitchNum * sizeof(OcDeviceStruct)); curIndex = curIndex + (UINT32)(m_SwitchNum * sizeof(OcDeviceStruct)); - /*뱾CIͨŵOC DI*/ + /*�뱾CIͨ�ŵ�OC DI����������*/ curIndex += CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)m_OcConvertedPtDataArr, (OC_SUM_MAX), (UINT16)sizeof(OcCollBoardDataStruct)); - /*OCй*/ + /*OC�����й���������*/ (void)memcpy(pCiAppDataPointer + curIndex, &m_GdNum, sizeof(UINT16)); curIndex = curIndex + (UINT32)sizeof(UINT16); - /*뱾CIͨŵOC */ + /*�뱾CIͨ�ŵ�OC ���������������*/ (void)memcpy(pCiAppDataPointer + curIndex, m_Gds, m_GdNum * sizeof(OcGdDevice)); curIndex = curIndex + (UINT32)(m_GdNum * sizeof(OcGdDevice)); - /*뱾CIͨŵOC ID*/ - (void)memcpy(pCiAppDataPointer + curIndex, LocalOcIds, (OC_SUM_MAX) * sizeof(UINT16)); + /*�뱾CIͨ�ŵ�OC ID����������*/ + (void)memcpy(pCiAppDataPointer + curIndex, LoalOcIds, (OC_SUM_MAX) * sizeof(UINT16)); curIndex = curIndex + (UINT32)((OC_SUM_MAX) * sizeof(UINT16)); - /*OcCiݵǰ*/ + /*Oc��Ci�����ݵ�ǰ������*/ (void)memcpy(pCiAppDataPointer + curIndex, &m_OcToCiOrginDataNum, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*뱾CIͨŵOC ԭʼ*/ + /*�뱾CIͨ�ŵ�OC ԭʼ����������*/ (void)memcpy(pCiAppDataPointer + curIndex, m_OcToCiOrginDataArr, m_OcToCiOrginDataNum * sizeof(OcToCiOriginDataStruct)); curIndex = curIndex + (UINT32)(m_OcToCiOrginDataNum * sizeof(OcToCiOriginDataStruct)); +#endif - /*뱾CIͨŵļ*/ + /*����OCԭʼ����*/ + curResult = CopyValidGetOcOrginData(pCiAppDataPointer + curIndex, OC_SUM_MAX, &m_OcToCiOrginDataArr[0]); + curIndex = curIndex + curResult; + + /*����һ��CRC*/ + crcLength = curIndex - crcIndex; + crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); + debug_infor_printf((const)"2oo2 tmcHLHTHeadCtxs-m_OcToCiOrginDataArr CRC:%x, Length:%d\n", crcResult, crcLength); + crcIndex = curIndex; + + /*�뱾CIͨ�ŵļ�������������*/ curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)axisToCiDataStru, AXIS_TO_CI_SUM_MAX, (UINT16)sizeof(AxisToCiDataStruct)); curIndex = curIndex + curResult; - /*ܸλ߱־*/ + /*���������ܸ�λ���߱�־*/ (void)memcpy(pCiAppDataPointer + curIndex, &ZFWJRelayHunXianFlag, sizeof(UINT8)); curIndex = curIndex + (UINT32)sizeof(UINT8); - /*ݴһ*/ + /*�����ݴ��һ�������*/ (void)memcpy(pCiAppDataPointer + curIndex, CiSendBackDataTempStru, (CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct)); curIndex = curIndex + (UINT32)((CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct)); - /*ݴһ*/ + /*�����ݴ��һ�������*/ (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;iiwTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainApplyState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicResUsable; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicReturnState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicUnlockState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainLevel; + curIndex++; + LongToChar(pstLogSecDataStruCC[i].szTrainResData->dwRcvUnlockCmdCyc, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + } + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].cResReqOtherCIId; + curIndex++; + ShortToChar(pstLogSecDataStruCC[i].wResReqTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].chResShareFlag; + curIndex++; + ShortToChar(pstLogSecDataStruCC[i].JumpLockTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogJumpLockState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogJumpLockDelayUnlockFlag; + curIndex++; + LongToChar(pstLogSecDataStruCC[i].LogSecJumpDelayUnlockStartCyc, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogSecJumpLockPermFlag; + curIndex++; + LongToChar(pstLogSecDataStruCC[i].LogErrlockStartCycNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].chLogSecLockBelLogRouteSum; + curIndex++; + for (j = 0U; j < pstLogSecDataStruCC[i].chLogSecLockBelLogRouteSum; j++) + { + ShortToChar(pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->wLogSecLockBelLogRouteId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->chLogSecLockBelLogRouteState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->wLogSecLockBelLogRouteDir; + curIndex++; + } + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogSecLogLockState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogSecLogLockDir; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].chAblRelLogSecUsableFlag; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].cRouteLeaveLogFlag; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LinShiXianSuSetFlag; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].OccupyState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].TXOccupyState; + curIndex++; + } + else + { + /*��ִ���κβ���*/ + } + } + + /*������Ч�豸����*/ + ShortToChar(ValidIdNum, pCurCiAppDataPointer); + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidGetLogicSecDataCC is invailid\n"); + } + return curIndex; +} + +/* +* �������������������߼����νṹ��-���� +* ����˵����UINT8 *pCurCiAppDataPointer ��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* LogicSectionDataStructCC pstLogSecDataStruCC[] �������Ľṹ�� +* �� �� ֵ�����������ݳ��� +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidSetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum,LogicSectionDataStructCC pstLogSecDataStruCC[]) +{ + UINT32 curIndex = 0U; + UINT16 ValidIdNum = 0U; + UINT16 i = 0U; + UINT8 j = 0U; + UINT16 devId = 0U; + /*���У��*/ + if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (NULL != pstLogSecDataStruCC)) + { + /*��ȡ�ܵ���ЧID����*/ + ValidIdNum = ShortFromChar(pCurCiAppDataPointer); + curIndex += (UINT32)sizeof(UINT16); + for (i = 0U; i < ValidIdNum; i++) + { + devId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + if (devId < struNum) + { + pstLogSecDataStruCC[devId].LogicSectionId = devId; + pstLogSecDataStruCC[devId].chTrainInfoSum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U;j < pstLogSecDataStruCC[devId].chTrainInfoSum;j++) + { + pstLogSecDataStruCC[devId].szTrainResData[j].wTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstLogSecDataStruCC[devId].szTrainResData[j].chTrainApplyState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szTrainResData[j].chLogicResUsable = * (pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szTrainResData[j].chLogicReturnState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szTrainResData[j].chLogicUnlockState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szTrainResData[j].chTrainLevel = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szTrainResData[j].dwRcvUnlockCmdCyc = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + + } + pstLogSecDataStruCC[devId].cResReqOtherCIId = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].wResReqTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstLogSecDataStruCC[devId].chResShareFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].JumpLockTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstLogSecDataStruCC[devId].LogJumpLockState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].LogJumpLockDelayUnlockFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].LogSecJumpDelayUnlockStartCyc = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstLogSecDataStruCC[devId].LogSecJumpLockPermFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].LogErrlockStartCycNum = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstLogSecDataStruCC[devId].chLogSecLockBelLogRouteSum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; j < pstLogSecDataStruCC[devId].chLogSecLockBelLogRouteSum; j++) + { + pstLogSecDataStruCC[devId].szLogSecLockBelLogRouteData[j].wLogSecLockBelLogRouteId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstLogSecDataStruCC[devId].szLogSecLockBelLogRouteData[j].chLogSecLockBelLogRouteState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].szLogSecLockBelLogRouteData[j].wLogSecLockBelLogRouteDir = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + pstLogSecDataStruCC[devId].LogSecLogLockState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].LogSecLogLockDir = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].chAblRelLogSecUsableFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].cRouteLeaveLogFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].LinShiXianSuSetFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].OccupyState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstLogSecDataStruCC[devId].TXOccupyState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + else + { + debug_infor_printf((const)"ERROR: CopyValidSetLogicSecDataCC = %d\n", devId); + break; + } + } + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidSetLogicSecDataCC is invailid\n"); + } + return curIndex; + +} +/* +* �������������˿�����·�ṹ��-���� +* ����˵����UINT8 *pCurCiAppDataPointer ��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* RouteDataStructCC pstRouteDataStruCC[] �������Ľṹ�� +* �� �� ֵ�����������ݳ��� +* Created By LYJ 2025.11.10 +*/ +UINT32 CopyValidGetRouteDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, RouteDataStructCC pstRouteDataStruCC[]) +{ + UINT32 curIndex = 0U; + UINT16 ValidIdNum = 0U; + UINT16 i = 0U; + UINT8 j = 0U; + /*���У��*/ + if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (NULL != pstRouteDataStruCC)) + { + curIndex += (UINT32)sizeof(UINT16); /*�������ֽ��豸����*/ + + for (i = 0U; i < struNum; i++) + { + /*idΪ0ʱ������Ч����*/ + if (0U != pstRouteDataStruCC[i].RouteId) + { + ValidIdNum++; /*�豸����*/ + ShortToChar(pstRouteDataStruCC[i].RouteId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + ShortToChar(pstRouteDataStruCC[i].wStopEnsureTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + LongToChar(pstRouteDataStruCC[i].dwStopEnsureCyc, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + ShortToChar(pstRouteDataStruCC[i].wResourceCancelTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + LongToChar(pstRouteDataStruCC[i].dwResourceCancelCyc, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + ShortToChar(pstRouteDataStruCC[i].wZhefanjiesuoTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + LongToChar(pstRouteDataStruCC[i].dwRouteZhefanjiesuoCyc, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].cResReqOtherCIId; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].chResReqTrainSum; + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[i].chResReqTrainSum; j++) + { + ShortToChar(pstRouteDataStruCC[i].wszResReqTrainId[j], (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + } + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].ITSRouteApplyTrainIdSum; + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[i].ITSRouteApplyTrainIdSum; j++) + { + ShortToChar(pstRouteDataStruCC[i].ITSRouteApplyTrainIdBuf[j], (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + } + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].HalfRouteDataSt.HalfRouteSwitchMoveValid; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].HalfRouteDataSt.RouteLockLgcSecNum; + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[i].HalfRouteDataSt.RouteLockLgcSecNum; j++) + { + ShortToChar(pstRouteDataStruCC[i].HalfRouteDataSt.RouteLockLgcSecIdBuf[j], (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + } + ShortToChar(pstRouteDataStruCC[i].HalfRouteDataSt.HalfResReqTrainId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].HalfRouteDataSt.TrainLocLgcSecNum; + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[i].HalfRouteDataSt.TrainLocLgcSecNum; j++) + { + ShortToChar(pstRouteDataStruCC[i].HalfRouteDataSt.TrainLocLgcSecIdBuf[j], (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + } + ShortToChar(pstRouteDataStruCC[i].wBelongDrId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + LongToChar(pstRouteDataStruCC[i].dwFirstElockStartCycNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].chRouteNearSecSearchState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pstRouteDataStruCC[i].StopensureFlag; + curIndex++; + } + else + { + /*��ִ���κβ���*/ + } + } + /*������Ч�豸����*/ + ShortToChar(ValidIdNum, pCurCiAppDataPointer); + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidGetRouteDataCC is invailid\n"); + } + return curIndex; +} + +/* +* �������������˿�����·�ṹ��-���� +* ����˵����UINT8 *pCurCiAppDataPointer ��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* RouteDataStructCC pstRouteDataStruCC[] �������Ľṹ�� +* �� �� ֵ�����������ݳ��� +* Created By LYJ 2025.11.10 +*/ +UINT32 CopyValidSetRouteDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, RouteDataStructCC pstRouteDataStruCC[]) +{ + UINT32 curIndex = 0U; + UINT16 ValidIdNum = 0U; + UINT16 i = 0U; + UINT8 j = 0U; + UINT16 devId = 0U; + /*���У��*/ + if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (NULL != pstRouteDataStruCC)) + { + /*��ȡ�ܵ���ЧID����*/ + ValidIdNum = ShortFromChar(pCurCiAppDataPointer); + curIndex += (UINT32)sizeof(UINT16); + for (i = 0U; i < ValidIdNum; i++) + { + devId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + if (devId < struNum) + { + pstRouteDataStruCC[devId].RouteId = devId; + pstRouteDataStruCC[devId].wStopEnsureTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstRouteDataStruCC[devId].dwStopEnsureCyc = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstRouteDataStruCC[devId].wResourceCancelTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstRouteDataStruCC[devId].dwResourceCancelCyc = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstRouteDataStruCC[devId].wZhefanjiesuoTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstRouteDataStruCC[devId].dwRouteZhefanjiesuoCyc = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstRouteDataStruCC[devId].cResReqOtherCIId = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstRouteDataStruCC[devId].chResReqTrainSum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[devId].chResReqTrainSum; j++) + { + pstRouteDataStruCC[devId].wszResReqTrainId[j] = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + } + pstRouteDataStruCC[devId].ITSRouteApplyTrainIdSum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[devId].ITSRouteApplyTrainIdSum; j++) + { + pstRouteDataStruCC[devId].ITSRouteApplyTrainIdBuf[j] = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + } + pstRouteDataStruCC[devId].HalfRouteDataSt.HalfRouteSwitchMoveValid = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstRouteDataStruCC[devId].HalfRouteDataSt.RouteLockLgcSecNum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[devId].HalfRouteDataSt.RouteLockLgcSecNum; j++) + { + pstRouteDataStruCC[devId].HalfRouteDataSt.RouteLockLgcSecIdBuf[j] = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + } + pstRouteDataStruCC[devId].HalfRouteDataSt.HalfResReqTrainId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstRouteDataStruCC[devId].HalfRouteDataSt.TrainLocLgcSecNum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; j < pstRouteDataStruCC[devId].HalfRouteDataSt.TrainLocLgcSecNum; j++) + { + pstRouteDataStruCC[devId].HalfRouteDataSt.TrainLocLgcSecIdBuf[j] = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + } + pstRouteDataStruCC[devId].wBelongDrId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + pstRouteDataStruCC[devId].dwFirstElockStartCycNum = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + pstRouteDataStruCC[devId].chRouteNearSecSearchState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pstRouteDataStruCC[devId].StopensureFlag = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + else + { + debug_infor_printf((const)"ERROR: CopyValidSetRouteDataCC = %d\n", devId); + break; + } + } + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidSetRouteDataCC is invailid\n"); + } + return curIndex; +} + +/* +* ��������������ZC���͵��źŻ����� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcSignalDymDataStru(UINT8* pCurCiAppDataPointer) +{ + UINT32 dwCurIndex = 0U; + UINT8 cLocalCiId = 0U; + UINT16 ii = 0U; + UINT16 wSignalSum = 0U; /*�������źŻ�����*/ + UINT16 wSignalId = 0U; /*�źŻ�ID*/ + UINT16 wBufIndex = 0U; + UINT8 cSignalBlongCiId = 0U; /*�źŻ���������*/ + UINT16 wValidDevNum = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wSignalSum = GetSignalCurSum(); + for (ii = 0U; ii < wSignalSum; ii++) + { + wSignalId = GetSignalId(ii); + wBufIndex = GetSignalConfigBufIndex(wSignalId); + cSignalBlongCiId = GetSignalBelongCiId(ii); + if (cLocalCiId == cSignalBlongCiId) + { + /*�������������źŻ�����*/ + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(SignalDataStructZC), (const void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), sizeof(SignalDataStructZC)); + dwCurIndex += sizeof(SignalDataStructZC); + wValidDevNum++; + } + else + { + /*�DZ������źŻ�����ͬ��*/ + } + } + + /*������Ч���豸����*/ + ShortToChar(wValidDevNum, pCurCiAppDataPointer); + } + else + { + debug_infor_printf((const)"\nCopyGetZcSignalDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ����������ͬ��ZC���͵��źŻ����� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcSignalDymDataStru(const UINT8* pCurCiAppDataPointer) +{ + UINT16 wValidDevNum = 0U; + UINT32 dwCurIndex = 0U; + UINT16 ii = 0U; + UINT16 wSignalId = 0U; /*�źŻ�ID*/ + UINT16 wBufIndex = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + /*��ȡ���豸����*/ + wValidDevNum = ShortFromChar(pCurCiAppDataPointer); + + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + /*ͬ��ǰ������*/ + (void)CommonMemSet((void*)(gZcToCiDymDataStru.szSignalDataStruZc), (UINT32)(sizeof(SignalDataStructZC) * SIGNAL_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(SignalDataStructZC) * SIGNAL_SUM_MAX)); + + /*��ʼͬ����������*/ + for (ii = 0U; ii < wValidDevNum; ii++) + { + wSignalId = ShortFromCharLE(pCurCiAppDataPointer + dwCurIndex); + wBufIndex = GetSignalConfigBufIndex(wSignalId); + if (wBufIndex < SIGNAL_SUM_MAX) + { + (void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), sizeof(SignalDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(SignalDataStructZC)); + } + else + { + debug_infor_printf((const)"\nCopySetZcSignalDymDataStru: wSignalId[%d] Is Invalid\n", wSignalId); + } + + dwCurIndex += sizeof(SignalDataStructZC); + } + } + else + { + debug_infor_printf((const)"\nCopySetZcSignalDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ��������������ZC���͵��߼��������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcLogSecDymDataStru(UINT8* pCurCiAppDataPointer) +{ + UINT32 dwCurIndex = 0U; + UINT8 cLocalCiId = 0U; + UINT16 ii = 0U; + UINT16 wLogSecSum = 0U; /*�������߼���������*/ + UINT16 wLogSecId = 0U; /*�߼�����ID*/ + UINT16 wBufIndex = 0U; + UINT8 cLogSecBlongCiId = 0U; /*�߼�������������*/ + UINT16 wValidDevNum = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wLogSecSum = GetLogicSecCurSum(); + for (ii = 0U; ii < wLogSecSum; ii++) + { + wLogSecId = GetLogicSecId(ii); + wBufIndex = GetlogSectionBufIndex(wLogSecId); + cLogSecBlongCiId = GetLogSecBelongCiId(ii); + if (cLocalCiId == cLogSecBlongCiId) + { + /*�������������߼���������*/ + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(LogicSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), sizeof(LogicSectionDataStructZC)); + dwCurIndex += sizeof(LogicSectionDataStructZC); + wValidDevNum++; + } + else + { + /*�DZ������߼����Σ���ͬ��*/ + } + } + + /*������Ч���豸����*/ + ShortToChar(wValidDevNum, pCurCiAppDataPointer); + } + else + { + debug_infor_printf((const)"\nCopyGetZcLogSecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ����������ͬ��ZC���͵��߼��������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcLogSecDymDataStru(const UINT8* pCurCiAppDataPointer) +{ + UINT16 wValidDevNum = 0U; + UINT32 dwCurIndex = 0U; + UINT16 ii = 0U; + UINT16 wLogSecId = 0U; /*�߼�����ID*/ + UINT16 wBufIndex = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + /*��ȡ���豸����*/ + wValidDevNum = ShortFromChar(pCurCiAppDataPointer); + + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + /*ͬ��ǰ������*/ + (void)CommonMemSet((void*)(gZcToCiDymDataStru.LogicSectionDataStruZc), (UINT32)(sizeof(LogicSectionDataStructZC) * LOGIC_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(LogicSectionDataStructZC) * LOGIC_SECTION_SUM_MAX)); + + /*��ʼͬ����������*/ + for (ii = 0U; ii < wValidDevNum; ii++) + { + wLogSecId = ShortFromCharLE(pCurCiAppDataPointer + dwCurIndex); + wBufIndex = GetlogSectionBufIndex(wLogSecId); + if (wBufIndex < LOGIC_SECTION_SUM_MAX) + { + (void)CommonMemCpy((void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), sizeof(LogicSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(LogicSectionDataStructZC)); + } + else + { + debug_infor_printf((const)"\nCopySetZcLogSecDymDataStru: wLogSecId[%d] Is Invalid\n", wLogSecId); + } + + dwCurIndex += sizeof(LogicSectionDataStructZC); + } + } + else + { + debug_infor_printf((const)"\nCopySetZcLogSecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ��������������ZC���͵ļ����������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcAxisSecDymDataStru(UINT8* pCurCiAppDataPointer) +{ + UINT32 dwCurIndex = 0U; + UINT8 cLocalCiId = 0U; + UINT16 ii = 0U; + UINT16 wAxisSecSum = 0U; /*������������������*/ + UINT16 wAxisSecId = 0U; /*��������ID*/ + UINT16 wBufIndex = 0U; + UINT8 cAxisSecBlongCiId = 0U; /*����������������*/ + UINT16 wValidDevNum = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wAxisSecSum = GetAxisSecCurSum(); + for (ii = 0U; ii < wAxisSecSum; ii++) + { + wAxisSecId = GetAxisSecId(ii); + wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId); + cAxisSecBlongCiId = GetAxisSectionBelongCiId(ii); + if (cLocalCiId == cAxisSecBlongCiId) + { + /*������������������������*/ + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(AxisSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), sizeof(AxisSectionDataStructZC)); + dwCurIndex += sizeof(AxisSectionDataStructZC); + wValidDevNum++; + } + else + { + /*�DZ������������Σ���ͬ��*/ + } + } + + /*������Ч���豸����*/ + ShortToChar(wValidDevNum, pCurCiAppDataPointer); + } + else + { + debug_infor_printf((const)"\nCopyGetZcAxisSecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ����������ͬ��ZC���͵ļ����������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcAxisSecDymDataStru(const UINT8* pCurCiAppDataPointer) +{ + UINT16 wValidDevNum = 0U; + UINT32 dwCurIndex = 0U; + UINT16 ii = 0U; + UINT16 wAxisSecId = 0U; /*��������ID*/ + UINT16 wBufIndex = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + /*��ȡ���豸����*/ + wValidDevNum = ShortFromChar(pCurCiAppDataPointer); + + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + /*ͬ��ǰ������*/ + (void)CommonMemSet((void*)(gZcToCiDymDataStru.AxisSectionDataStruZc), (UINT32)(sizeof(AxisSectionDataStructZC) * AXIS_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(AxisSectionDataStructZC) * AXIS_SECTION_SUM_MAX)); + + /*��ʼͬ����������*/ + for (ii = 0U; ii < wValidDevNum; ii++) + { + wAxisSecId = ShortFromCharLE(pCurCiAppDataPointer + dwCurIndex); + wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId); + if (wBufIndex < AXIS_SECTION_SUM_MAX) + { + (void)CommonMemCpy((void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), sizeof(AxisSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(AxisSectionDataStructZC)); + } + else + { + debug_infor_printf((const)"\nCopySetZcAxisSecDymDataStru: wAxisSecId[%d] Is Invalid\n", wAxisSecId); + } + + dwCurIndex += sizeof(AxisSectionDataStructZC); + } + } + else + { + debug_infor_printf((const)"\nCopySetZcAxisSecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ��������������ZC���͵������������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcPhySecDymDataStru(UINT8* pCurCiAppDataPointer) +{ + UINT32 dwCurIndex = 0U; + UINT8 cLocalCiId = 0U; + UINT16 ii = 0U; + UINT16 wPhySecSum = 0U; /*������������������*/ + UINT16 wPhySecId = 0U; /*��������ID*/ + UINT16 wBufIndex = 0U; + UINT8 cPhySecBlongCiId = 0U; /*����������������*/ + UINT16 wValidDevNum = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wPhySecSum = GetPhySecCurSum(); + for (ii = 0U; ii < wPhySecSum; ii++) + { + wPhySecId = GetPhySecId(ii); + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); + cPhySecBlongCiId = GetPhySecBelongCiId(ii); + if (cLocalCiId == cPhySecBlongCiId) + { + /*������������������������*/ + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(PhysicalSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), sizeof(PhysicalSectionDataStructZC)); + dwCurIndex += sizeof(PhysicalSectionDataStructZC); + wValidDevNum++; + } + else + { + /*�DZ������������Σ���ͬ��*/ + } + } + + /*������Ч���豸����*/ + ShortToChar(wValidDevNum, pCurCiAppDataPointer); + } + else + { + debug_infor_printf((const)"\nCopyGetZcPhySecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ����������ͬ��ZC���͵������������� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcPhySecDymDataStru(const UINT8* pCurCiAppDataPointer) +{ + UINT16 wValidDevNum = 0U; + UINT32 dwCurIndex = 0U; + UINT16 ii = 0U; + UINT16 wPhySecId = 0U; /*��������ID*/ + UINT16 wBufIndex = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + /*��ȡ���豸����*/ + wValidDevNum = ShortFromChar(pCurCiAppDataPointer); + + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + /*ͬ��ǰ������*/ + (void)CommonMemSet((void*)(gZcToCiDymDataStru.PhysicalSectionDataStruZc), (UINT32)(sizeof(PhysicalSectionDataStructZC) * PHYSICAL_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(PhysicalSectionDataStructZC) * PHYSICAL_SECTION_SUM_MAX)); + + /*��ʼͬ����������*/ + for (ii = 0U; ii < wValidDevNum; ii++) + { + wPhySecId = ShortFromCharLE(pCurCiAppDataPointer + dwCurIndex); + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + (void)CommonMemCpy((void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), sizeof(PhysicalSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(PhysicalSectionDataStructZC)); + } + else + { + debug_infor_printf((const)"\nCopySetZcPhySecDymDataStru: wPhySecId[%d] Is Invalid\n", wPhySecId); + } + + dwCurIndex += sizeof(PhysicalSectionDataStructZC); + } + } + else + { + debug_infor_printf((const)"\nCopySetZcPhySecDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ��������������ZC���͵Ľ�·���� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcRouteDymDataStru(UINT8* pCurCiAppDataPointer) +{ + UINT32 dwCurIndex = 0U; + UINT8 cLocalCiId = 0U; + UINT16 ii = 0U; + UINT16 wRouteSum = 0U; /*��������·����*/ + UINT16 wRouteId = 0U; /*��·ID*/ + UINT16 wBufIndex = 0U; + UINT8 cRouteBlongCiId = 0U; /*��·��������*/ + UINT16 wValidDevNum = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wRouteSum = GetRouteCurSum(); + for (ii = 0U; ii < wRouteSum; ii++) + { + wRouteId = GetRouteId(ii); + wBufIndex = GetRouteConfigBufIndex(wRouteId); + cRouteBlongCiId = GetRouteBelongCiId(ii); + if (cLocalCiId == cRouteBlongCiId) + { + /*��������������·����*/ + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(RouteDataStructZC), (const void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), sizeof(RouteDataStructZC)); + dwCurIndex += sizeof(RouteDataStructZC); + wValidDevNum++; + } + else + { + /*�DZ�������·����ͬ��*/ + } + } + + /*������Ч���豸����*/ + ShortToChar(wValidDevNum, pCurCiAppDataPointer); + } + else + { + debug_infor_printf((const)"\nCopyGetZcRouteDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} + +/* +* ����������ͬ��ZC���͵Ľ�·���� +* ����˵����UINT8* pCurCiAppDataPointer ��ǰ����ָ�� +* �� �� ֵ���������ݵij��� +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcRouteDymDataStru(const UINT8* pCurCiAppDataPointer) +{ + UINT16 wValidDevNum = 0U; + UINT32 dwCurIndex = 0U; + UINT16 ii = 0U; + UINT16 wRouteId = 0U; /*��·ID*/ + UINT16 wBufIndex = 0U; + + /*���У��*/ + if (NULL != pCurCiAppDataPointer) + { + /*��ȡ���豸����*/ + wValidDevNum = ShortFromChar(pCurCiAppDataPointer); + + dwCurIndex += sizeof(UINT16); /*�������ֽ��豸����*/ + + /*ͬ��ǰ������*/ + (void)CommonMemSet((void*)(gZcToCiDymDataStru.szRouteDataStruZc), (UINT32)(sizeof(RouteDataStructZC) * ROUTE_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(RouteDataStructZC) * ROUTE_SUM_MAX)); + + /*��ʼͬ����������*/ + for (ii = 0U; ii < wValidDevNum; ii++) + { + wRouteId = ShortFromCharLE(pCurCiAppDataPointer + dwCurIndex); + wBufIndex = GetRouteConfigBufIndex(wRouteId); + if (wBufIndex < ROUTE_SUM_MAX) + { + (void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), sizeof(RouteDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(RouteDataStructZC)); + } + else + { + debug_infor_printf((const)"\nCopySetZcRouteDymDataStru: wRouteId[%d] Is Invalid\n", wRouteId); + } + + dwCurIndex += sizeof(RouteDataStructZC); + } + } + else + { + debug_infor_printf((const)"\nCopySetZcRouteDymDataStru: InputPara Is Invalid\n"); + dwCurIndex = 0U; + } + + return dwCurIndex; +} +/* +* ������������������OC��Ч���� +* ����˵����UINT8 *pCurCiAppDataPointer ��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* �� �� ֵ�����������ݳ��� +* Created By fan 2025.11.12 +*/ +UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcToCiOriginDataStruct OcRecvData[]) +{ + UINT32 curIndex = 0U; + UINT16 ValidIdNum = 0U; + UINT16 i = 0U; + UINT16 k = 0U; + UINT8 j = 0U; + UINT16 devId = 0U; + UINT16 devNum = 0U; + OcDeviceStruct *pOcDevice = NULL; + OcGdDevice *pOcGdDevice = NULL; + OcDIBoard *pOcDIDevice = NULL; + OcSIBoard *pOcSIDevice = NULL; + OcDoBoard *pOcDoDevice = NULL; + OcDoBoard *pOcSoDevice = NULL; + OcSorBoard *pOcSorDevice = NULL; + OcPlusBox *pOcPbDevice = NULL; + OcToCiPsdInfo *pOcPsdDevice = NULL; + /*���У��*/ + if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (NULL != OcRecvData)) + { + /*��ȡ�ܵ���ЧID����*/ + ValidIdNum = ShortFromChar(pCurCiAppDataPointer); + curIndex += (UINT32)sizeof(UINT16); + if (struNum > ValidIdNum) + { + m_OcToCiOrginDataNum = (UINT8)ValidIdNum; + /*����*/ + //printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum); + (void)CommonMemSet(OcRecvData, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct)), 0U, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct))); /*����սṹ���ֹ������*/ + for (i = 0U; i < ValidIdNum; i++) + { + devId = ShortFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 2U; + /*���ڱ�����*/ + OcRecvData[i].OcId = devId; + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*�豸�ṹ������*/ + curIndex += 2U; + OcRecvData[i].OcDeviceNum = devNum;/*�豸����*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_DEVICE_NUM); k++) + { + pOcDevice = &(OcRecvData[i].OcDevices[k]); + pOcDevice->OcId = devId; + pOcDevice->DeviceType = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pOcDevice->DeviceId = ShortFromChar(pCurCiAppDataPointer + curIndex);/*�豸id*/ + curIndex += 2U; + pOcDevice->DeviceState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pOcDevice->chSwitchIncldeZzjNum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U;( j < pOcDevice->chSwitchIncldeZzjNum)&& (j < MAX_OC_SWITCH_INCLUDE_ZZJ_NUM); j++) + { + pOcDevice->szSwitchIncldeZzjState[j] = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + pOcDevice->BoardNum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + for (j = 0U; (j < pOcDevice->BoardNum) && (j < MAX_OC_SWITCH_INCLUDE_BOARD_NUM); j++) + { + pOcDevice->BoardAddr[j] = *(pCurCiAppDataPointer + curIndex); + curIndex++; + pOcDevice->BoardState[j] = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*�������*/ + curIndex += 2U; + OcRecvData[i].OcGdNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < Max_OC_GD_NUM); k++) + { + pOcGdDevice = &(OcRecvData[i].OcGdDevices[k]); + (void)CommonMemCpy((void*)pOcGdDevice, (UINT32)sizeof(OcGdDevice), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcGdDevice)); + curIndex = curIndex + (UINT32)sizeof(OcGdDevice); + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*DI�忨*/ + curIndex += 2U; + OcRecvData[i].OcDIBoardDataNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcDIDevice = &(OcRecvData[i].OcDIBoardDatas[k]); + (void)CommonMemCpy((void*)pOcDIDevice, (UINT32)sizeof(OcDIBoard), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcDIBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDIBoard); + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*SI�忨*/ + curIndex += 2U; + OcRecvData[i].OcSIBoardDataNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcSIDevice = &(OcRecvData[i].OcSIBoardDatas[k]); + (void)CommonMemCpy((void*)pOcSIDevice, (UINT32)sizeof(OcSIBoard), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcSIBoard)); + curIndex = curIndex + (UINT32)sizeof(OcSIBoard); + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*DO�忨*/ + curIndex += 2U; + OcRecvData[i].OcDOBoardNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcDoDevice = &(OcRecvData[i].OcDOBoardDatas[k]); + (void)CommonMemCpy((void*)pOcDoDevice, (UINT32)sizeof(OcDoBoard), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcDoBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDoBoard); + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*SO�忨*/ + curIndex += 2U; + OcRecvData[i].OcSOBoardNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcSoDevice = &(OcRecvData[i].OcSOBoardDatas[k]); + (void)CommonMemCpy((void*)pOcSoDevice, (UINT32)sizeof(OcDoBoard), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcDoBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDoBoard); + } + + OcRecvData[i].OcSORBoardNum = *(pCurCiAppDataPointer + curIndex);/*Sor�忨*/ + curIndex++; + /*ֱ�ӿ���*/ + for (j = 0U; (j < OcRecvData[i].OcSORBoardNum) && (j < MAX_OC_BOARD_NUM); j++) + { + pOcSorDevice = &(OcRecvData[i].OcSORBoardDatas[j]); + (void)CommonMemCpy((void*)pOcSorDevice, (UINT32)sizeof(OcSorBoard), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcSorBoard)); + curIndex = curIndex + (UINT32)sizeof(OcSorBoard); + } + OcRecvData[i].PowerAState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].PowerBState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].OCDevFaultState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].FanState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + + OcRecvData[i].chPbNum = *(pCurCiAppDataPointer + curIndex);/*ִ�е����*/ + curIndex++; + /*ֱ�ӿ���*/ + for (j = 0U; (j < OcRecvData[i].chPbNum) && (j < MAX_OC_PLUS_BOX_NUM); j++) + { + pOcPbDevice = &(OcRecvData[i].szPlusBox[j]); + (void)CommonMemCpy((void*)pOcPbDevice, (UINT32)sizeof(OcPlusBox), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcPlusBox)); + curIndex = curIndex + (UINT32)sizeof(OcPlusBox); + } + + devNum = ShortFromChar(pCurCiAppDataPointer + curIndex);/*��ϵ�忨*/ + curIndex += 2U; + OcRecvData[i].OCBoardSwapSysNum = devNum; + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_DEVICE_SWAP_MAX); k++) + { + OcRecvData[i].SwapSysBoardId[k] = *(pCurCiAppDataPointer + curIndex); + curIndex++; + } + + OcRecvData[i].OCPsdNum = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].DrvPowerState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].CtlPowerState = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].EdgeCtllerState1 = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].EdgeCtllerState2 = *(pCurCiAppDataPointer + curIndex); + curIndex++; + /*��������������*/ + for (j = 0U; (j < OcRecvData[i].OCPsdNum) && (j < MAX_OC_DEVICE_PSD_MAX); j++) + { + pOcPsdDevice = &(OcRecvData[i].PsdInfo[j]); + (void)CommonMemCpy((void*)pOcPsdDevice, (UINT32)sizeof(OcToCiPsdInfo), (const void*)(pCurCiAppDataPointer + curIndex), (UINT32) sizeof(OcToCiPsdInfo)); + curIndex = curIndex + (UINT32)sizeof(OcToCiPsdInfo); + } + + OcRecvData[i].chHaveYjk = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].chControlMode = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].chOcYjpComm = *(pCurCiAppDataPointer + curIndex); + curIndex++; + OcRecvData[i].ComStartCycle = LongFromChar(pCurCiAppDataPointer + curIndex); + curIndex += 4U; + } + } + + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidSetOcOrginData is invailid\n"); + } + return curIndex; +} + +/* +* �������������˿���OCԭʼ������Чֵ +* ����˵����UINT8 *pCurCiAppDataPointer ��ǰ����ָ�� +* UINT16 struNum ���鳤�� +* OcToCiOriginDataStruct OcRecvData[] �������Ľṹ�� +* �� �� ֵ�����������ݳ��� +* Created By fan 2025.11.12 +*/ +UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcToCiOriginDataStruct OcRecvData[]) +{ + UINT32 curIndex = 0U; + UINT16 ValidIdNum = 0U; + UINT16 i = 0U; + UINT16 k = 0U; + UINT8 j = 0U; + UINT16 devNum = 0U; + OcDeviceStruct *pOcDevice = NULL; + OcGdDevice *pOcGdDevice = NULL; + OcDIBoard *pOcDIDevice = NULL; + OcSIBoard *pOcSIDevice = NULL; + OcDoBoard *pOcDoDevice = NULL; + OcDoBoard *pOcSoDevice = NULL; + OcSorBoard *pOcSorDevice = NULL; + OcPlusBox *pOcPbDevice = NULL; + OcToCiPsdInfo *pOcPsdDevice = NULL; + /*���У��*/ + if ((NULL != pCurCiAppDataPointer) && (0U != struNum) && (NULL != OcRecvData)) + { + /*������Ч�豸����*/ + ShortToChar(m_OcToCiOrginDataNum, pCurCiAppDataPointer); + curIndex += (UINT32)sizeof(UINT16); /*�������ֽ��豸����*/ + //printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum); + if (struNum > ValidIdNum) + { + for (i = 0U; i < m_OcToCiOrginDataNum; i++) + { + ShortToChar(OcRecvData[i].OcId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + ShortToChar(OcRecvData[i].OcDeviceNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcDeviceNum; + for (k = 0U; (k < devNum) && (k < MAX_OC_DEVICE_NUM); k++) + { + pOcDevice = &(OcRecvData[i].OcDevices[k]); + *(pCurCiAppDataPointer + curIndex) = pOcDevice->DeviceType; + curIndex++; + ShortToChar(pOcDevice->DeviceId, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + *(pCurCiAppDataPointer + curIndex) = pOcDevice->DeviceState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pOcDevice->chSwitchIncldeZzjNum; + curIndex++; + for (j = 0U; (j < pOcDevice->chSwitchIncldeZzjNum )&& (j < MAX_OC_SWITCH_INCLUDE_ZZJ_NUM); j++) + { + *(pCurCiAppDataPointer + curIndex) = pOcDevice->szSwitchIncldeZzjState[j]; + curIndex++; + } + *(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardNum; + curIndex++; + for (j = 0U; (j < pOcDevice->BoardNum)&&(j < MAX_OC_SWITCH_INCLUDE_BOARD_NUM); j++) + { + *(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardAddr[j]; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardState[j]; + curIndex++; + } + } + ShortToChar(OcRecvData[i].OcGdNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcGdNum;/*һ��oc�����й�����ε�����*/ + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < Max_OC_GD_NUM); k++) + { + pOcGdDevice = &(OcRecvData[i].OcGdDevices[k]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcGdDevice), (const void*)pOcGdDevice, (UINT32) sizeof(OcGdDevice)); + curIndex = curIndex + (UINT32)sizeof(OcGdDevice); + } + + ShortToChar(OcRecvData[i].OcDIBoardDataNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcDIBoardDataNum;/*һ��oc������DI�忨*/ + /*ֱ�ӿ���*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcDIDevice = &(OcRecvData[i].OcDIBoardDatas[k]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcDIBoard), (const void*)pOcDIDevice, (UINT32) sizeof(OcDIBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDIBoard); + } + + ShortToChar(OcRecvData[i].OcSIBoardDataNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcSIBoardDataNum;/*һ��oc������SI�忨*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcSIDevice = &(OcRecvData[i].OcSIBoardDatas[k]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcSIBoard), (const void*)pOcSIDevice, (UINT32) sizeof(OcSIBoard)); + curIndex = curIndex + (UINT32)sizeof(OcSIBoard); + } + + ShortToChar(OcRecvData[i].OcDOBoardNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcDOBoardNum;/*һ��oc������DO�忨*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcDoDevice = &(OcRecvData[i].OcDOBoardDatas[k]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcDoBoard), (const void*)pOcDoDevice, (UINT32) sizeof(OcDoBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDoBoard); + } + + ShortToChar(OcRecvData[i].OcSOBoardNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OcSOBoardNum;/*һ��oc������SO�忨*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_BOARD_NUM); k++) + { + pOcSoDevice = &(OcRecvData[i].OcSOBoardDatas[k]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcDoBoard), (const void*)pOcSoDevice, (UINT32) sizeof(OcDoBoard)); + curIndex = curIndex + (UINT32)sizeof(OcDoBoard); + } + + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].OcSORBoardNum; + curIndex++; + for (j = 0U; (j < OcRecvData[i].OcSORBoardNum) && (j < MAX_OC_BOARD_NUM); j++) + { + pOcSorDevice = &(OcRecvData[i].OcSORBoardDatas[j]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcSorBoard), (const void*)pOcSorDevice, (UINT32) sizeof(OcSorBoard)); + curIndex = curIndex + (UINT32)sizeof(OcSorBoard); + } + + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].PowerAState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].PowerBState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].OCDevFaultState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].FanState; + curIndex++; + + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].chPbNum;/*ִ�е����*/ + curIndex++; + for (j = 0U; (j < OcRecvData[i].chPbNum) && (j < MAX_OC_PLUS_BOX_NUM); j++) + { + pOcPbDevice = &(OcRecvData[i].szPlusBox[j]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcPlusBox), (const void*)pOcPbDevice, (UINT32) sizeof(OcPlusBox)); + curIndex = curIndex + (UINT32)sizeof(OcPlusBox); + } + + ShortToChar(OcRecvData[i].OCBoardSwapSysNum, (pCurCiAppDataPointer + curIndex)); + curIndex += 2U; + devNum = OcRecvData[i].OCBoardSwapSysNum;/*һ��oc����ϵ�忨*/ + for (k = 0U; (k < devNum) && (k < MAX_OC_DEVICE_SWAP_MAX); k++) + { + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].SwapSysBoardId[k]; + curIndex++; + } + + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].OCPsdNum; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].DrvPowerState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].CtlPowerState; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].EdgeCtllerState1; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].EdgeCtllerState2; + curIndex++; + for (j = 0U; (j < OcRecvData[i].OCPsdNum) && (j < MAX_OC_DEVICE_PSD_MAX); j++) + { + pOcPsdDevice = &(OcRecvData[i].PsdInfo[j]); + (void)CommonMemCpy((void*)(pCurCiAppDataPointer + curIndex), (UINT32)sizeof(OcToCiPsdInfo), (const void*)pOcPsdDevice, (UINT32) sizeof(OcToCiPsdInfo)); + curIndex = curIndex + (UINT32)sizeof(OcToCiPsdInfo); + } + + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].chHaveYjk; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].chControlMode; + curIndex++; + *(pCurCiAppDataPointer + curIndex) = OcRecvData[i].chOcYjpComm; + curIndex++; + LongToChar(OcRecvData[i].ComStartCycle, (pCurCiAppDataPointer + curIndex)); + curIndex += 4U; + } + } + } + else + { + curIndex = 0U; + debug_infor_printf((const)"ERROR: CopyValidGetOcOrginData is invailid\n"); + } + return curIndex; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h index 3460d73..0405dff 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h +++ b/TSCP/src/APP/ciapp/2oo2/2oo2DataTransferManage.h @@ -188,6 +188,280 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer); */ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len); + +/** +* @brief ȡֵЧͨͷ +* @param[in] UINT8 *pCurCiAppDataPointer:ǰָ +* @param[in] UINT16 struNum:鳤 +* @param[in] struLength:ṹ峤 +* @return +* @note by cgh 20251103 +*/ +UINT32 CopyValidGetXiandiHlht(UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength); + +/** +* @brief ֵЧͨͷ +* @param[in] UINT8 *pCurCiAppDataPointer:ǰָ +* @param[in] UINT16 struNum:鳤 +* @param[in] struLength:ṹ峤 +* @return +* @note by cgh 20251103 +*/ +UINT32 CopyValidSetXiandiHlht(const UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength); + +/** +* @brief ȡATSЧͨͷ +* @param[in] UINT8 *pCurCiAppDataPointer:ǰָ +* @param[in] UINT16 struNum:鳤 +* @param[in] struLength:ṹ峤 +* @return +* @note by cgh 20251103 +*/ +UINT32 CopyValidGetAtsHlht(UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength); + +/** +* @brief ATSЧͨͷ +* @param[in] UINT8 *pCurCiAppDataPointer:ǰָ +* @param[in] UINT16 struNum:鳤 +* @param[in] struLength:ṹ峤 +* @return +* @note by cgh 20251103 +*/ +UINT32 CopyValidSetAtsiHlht(const UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength); + +/* +* CIRCӦ +* ˵ UINT8 *pCiAppDataPointer, CIӦָ +* ֵ void +*/ +UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer); + +/* +* RCCIӦ +* ˵ UINT8 *pCiAppDataPointer, CIӦָ +* const UINT32 lenݳ +* ֵ UINT8 +*/ +UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len); + +/* +* ˿ͨͷ +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* struLength ṹ峤 +* HLHTHeadContextStru pstrHLHTHeadCtxs[] Ļͨͷ +* ֵݳ +* Created By LQ 2025.11.04 +*/ +UINT32 CopyValidGetHlhtHeadCtxs(UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength, HLHTHeadContextStru pstrHLHTHeadCtxs[]); + +/* +* ûͨͷ +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* struLength ṹ峤 +* HLHTHeadContextStru pstrHLHTHeadCtxs[] õĻͨͷ +* ֵݳ +* Created By LQ 2025.11.04 +*/ +UINT32 CopyValidSetHlhtHeadCtxs(const UINT8* pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength, HLHTHeadContextStru pstrHLHTHeadCtxs[]); +/* +* ˿źŻṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* SignalDataStructCC pstSignalDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidGetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, SignalDataStructCC pstSignalDataStruCC[]); +/* +* źŻṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* SignalDataStructCC pstSignalDataStruCC[] õĽṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidSetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, SignalDataStructCC pstSignalDataStruCC[]); +/* +* ˿Žṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* FloodGateDataStructCC pstFloodGateDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidGetFloodGateDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, FloodGateDataStructCC pstFloodGateDataStruCC[]); +/* +* ÷Žṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* FloodGateDataStructCC pstFloodGateDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidSetFloodGateDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, FloodGateDataStructCC pstFloodGateDataStruCC[]); +/* +* ˿߼νṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* LogicSectionDataStructCC pstLogSecDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidGetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, LogicSectionDataStructCC pstLogSecDataStruCC[]); +/* +* ߼νṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* LogicSectionDataStructCC pstLogSecDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.07 +*/ +UINT32 CopyValidSetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, LogicSectionDataStructCC pstLogSecDataStruCC[]); +/* +* ˿·ṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* RouteDataStructCC pstRouteDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.10 +*/ +UINT32 CopyValidGetRouteDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, RouteDataStructCC pstRouteDataStruCC[]); +/* +* ˿·ṹ- +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* RouteDataStructCC pstRouteDataStruCC[] Ľṹ +* ֵݳ +* Created By LYJ 2025.11.10 +*/ +UINT32 CopyValidSetRouteDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, RouteDataStructCC pstRouteDataStruCC[]); + +/* +* ZC͵źŻ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcSignalDymDataStru(UINT8* pCurCiAppDataPointer); + +/* +* ͬZC͵źŻ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcSignalDymDataStru(const UINT8* pCurCiAppDataPointer); + +/* +* ZC͵߼ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcLogSecDymDataStru(UINT8* pCurCiAppDataPointer); + +/* +* ͬZC͵߼ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcLogSecDymDataStru(const UINT8* pCurCiAppDataPointer); + +/* +* ZC͵ļ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcAxisSecDymDataStru(UINT8* pCurCiAppDataPointer); + +/* +* ͬZC͵ļ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcAxisSecDymDataStru(const UINT8* pCurCiAppDataPointer); + +/* +* ZC͵ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcPhySecDymDataStru(UINT8* pCurCiAppDataPointer); + +/* +* ͬZC͵ +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcPhySecDymDataStru(const UINT8* pCurCiAppDataPointer); + +/* +* ZC͵Ľ· +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopyGetZcRouteDymDataStru(UINT8* pCurCiAppDataPointer); + +/* +* ͬZC͵Ľ· +* ˵UINT8* pCurCiAppDataPointer ǰָ +* ֵݵij +* Created By LQ 2025.11.10 +*/ +UINT32 CopySetZcRouteDymDataStru(const UINT8* pCurCiAppDataPointer); + +/* +* OCЧ +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* ֵݳ +* Created By fan 2025.11.12 +*/ +UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcToCiOriginDataStruct OcRecvData[]); + +/* +* ˿OCԭʼЧֵ +* ˵UINT8 *pCurCiAppDataPointer ǰָ +* UINT16 struNum 鳤 +* OcToCiOriginDataStruct OcRecvData[] Ľṹ +* ֵݳ +* Created By fan 2025.11.12 +*/ +UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcToCiOriginDataStruct OcRecvData[]); + +/* +* ñ +* ˵ + +const UINT8 *pCurCiAppDataPointer:ǰָ +UINT16 struNum:鳤, + +HLHTHeadContextStru *pDataStru:ṹָ, +* ֵ ݵij +* ע ֻڱ +*/ +UINT32 CopyValidSetHlhtHeadDataStru(const UINT8 *pCurCiAppDataPointer, UINT16 struNum, HLHTHeadContextStru *pDataStru); + +/* +* + +const HLHTHeadContextStru *pDataStru ṹָ +UINT16 struNum:鳤, + +UINT8 *pCurCiAppDataPointer:ǰָ, +* ֵ ݵij +* ע ֻڱ +*/ +UINT32 CopyValidGetHlhtHeadDataStru(UINT8 *pCurCiAppDataPointer, UINT16 struNum, const HLHTHeadContextStru *pDataStru); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c index 07c4af2..0bcba9e 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c +++ b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.c @@ -10,7 +10,6 @@ ********************************************************/ #include "../2oo2/2oo2InterfaceDataManage.h" -#include "MSCP_APP_API.h" #include "stdarg.h" #include "protclStruct.h" #include "ParsePackCommon.h" @@ -29,9 +28,7 @@ extern UINT8 processor_mode; /*ƽ̨ extern UINT8 FSIOLinkStatusInfo; /*FSIO֮״̬*/ extern UINT8 LEULinkStatusInfo; /*LEUͨ״̬*/ extern UINT8 ZCLinkStatusInfo; /*ZCͨ״̬*/ -extern UINT8 gSheBeiType; /*豸*/ extern UINT8 gSheBeiID; /*豸ID*/ -extern UINT8 LocalCiId; /*ϵͳļжID*/ extern QueueStruct logPrintfQue; /*־洢ݶ*/ UINT8 gSheBeiType; #endif @@ -97,52 +94,52 @@ QueueStruct logPrintfQue; /* /* * ƽ̨ʼ * ˵ void -* ֵ NULL: ȡʧ -* !NULL: ƽ̨ATSCIӿڶ +* ֵ 0: ʧ +* 1: ɹ +* Modified By LQ 2025.08.27 */ UINT8 Initial2oo2Interface(void) { - UINT8 rtn = 0u; - UINT16 locTypeId = 0; - UINT8 result = 0u; - - /*ƽ̨ݶָ*/ - + UINT8 rtn = CI_ERROR; + UINT8 result = 0U; + + /*ƽ̨ݶָ*/ + #ifdef PLATFORM_2OO2 - - + + rtn = CI_SUCCESS; ProtocolToCiDataQueue = &gCbtcData.DataToApp; /*ʼЭ鵽CIݶ*/ CiToProtocolDataQueue = &gCbtcData.OutputDataQueue; /*ʼCIЭݶ*/ - - FsfbToCiDataQueue = &Fsfb_Info.DataToApp; /*ʼFsfbCIݶ*/ - CiToFsfbDataQueue = &Fsfb_Info.OutputDataQueue; /*ʼCIFsfbݶ*/ - + + FsfbToCiDataQueue = &Fsfb_Info.DataToApp; /*ʼFsfbCIݶ*/ + CiToFsfbDataQueue = &Fsfb_Info.OutputDataQueue; /*ʼCIFsfbݶ*/ + CurCycleNum = &CycleNum; /*ʼƽ̨*/ StartCycleNum = MSCP_GetSysCount(); /*ϵں*/ - PlatComputerId = &Computer_Id_Local_File; - PlatRunMode = &processor_mode; - + PlatComputerId = &Computer_Id_Local_File; + PlatRunMode = &processor_mode; + IoToCiDataQueue = &canQueueRecv; /*ʼIOCIݶ*/ CiToIoDataQueue = &canQueueSend; /*ʼCIIOݶ*/ - + AtsToCiDataQueue = NULL; /*ʼATSCIݶ*/ - CiToAtsDataQueue = CiToProtocolDataQueue; /*ʼCIATSݶ*/ - - XianDiToCiDataQueue = NULL; /*ʼATSCIݶ*/ + CiToAtsDataQueue = CiToProtocolDataQueue; /*ʼCIATSݶ*/ + + XianDiToCiDataQueue = NULL; /*ʼATSCIݶ*/ CiToXianDiDataQueue = CiToProtocolDataQueue; /*ʼCIATSݶ*/ - + ZcToCiDataQueue = NULL; /*ʼZCCIݶ*/ - CiToZcDataQueue = CiToProtocolDataQueue; /*ʼCIZCݶ*/ - + CiToZcDataQueue = CiToProtocolDataQueue; /*ʼCIZCݶ*/ + AxisToCiDataQueue = NULL; /*ʼAxisCIݶ*/ CiToAxisDataQueue = CiToProtocolDataQueue; /*ʼCIAxisݶ*/ CiRecvFromCiDataQueue = NULL; /*ʼCICIݶ*/ CiSendToCiDataQueue = CiToProtocolDataQueue; /*ʼCI͵CIݶ*/ - - VobcToCiDataQueue = NULL; /*ʼVobcCIݶ*/ + + VobcToCiDataQueue = NULL; /*ʼVobcCIݶ*/ CiToVobcDataQueue = CiToProtocolDataQueue; /*ʼCIVobcݶ*/ PlatformToCiDataQueue = NULL; /*ʼPsdCIݶ*/ @@ -150,56 +147,67 @@ UINT8 Initial2oo2Interface(void) PscToCiDataQueue = NULL; /*ʼPSCCIݶ*/ CiToPscDataQueue = CiToProtocolDataQueue; /*ʼCIPSCݶ*/ - - LEUToCiDataQueue = NULL; /*ʼLeuCIݶ*/ + + LEUToCiDataQueue = NULL; /*ʼLeuCIݶ*/ CiToLEUDataQueue = CiToFsfbDataQueue; /*ʼCILeuݶ*/ - - CiAndIoComState = &FSIOLinkStatusInfo; /*IOͨ״̬*/ - locTypeId = MSCP_GetOutnetID(); - /*LocalCiId = gSheBeiID;*/ /*豸ID*/ - PlatSheBeiType = &gSheBeiType; /*豸*/ - LocalCiId = (UINT8)(locTypeId & 0xFFu); /*豸ID*/ - gSheBeiType = (UINT8)((locTypeId >> 8u) & 0xFFu); - + + CiAndIoComState = &FSIOLinkStatusInfo; /*IOͨ״̬*/ + + OcToCiDataQueue = NULL; /*ʼOcCiݶ*/ CiToOcDataQueue = CiToProtocolDataQueue; /*ʼCiOcݶ*/ - - if (1U != QueueInitial(&logPrintfQue, 500000U)) /*ʼ־*/ + + if (CI_SUCCESS == rtn) { - debug_infor_printf((const)"canQueueRecv init error \n"); - } + if (1U != QueueInitial(&logPrintfQue, 500000U)) /*ʼ־*/ + { + debug_infor_printf((const)"canQueueRecv init error \n"); + rtn = CI_ERROR; + } + else + { #if 0 - /*LEUZCCIȵͨ״̬*/ - if (TransmitRelaDataCurSum < TRANSMIT_OBJECT_SUM_MAX) - { - for (ii = 0u; ii < TRANSMIT_OBJECT_SUM_MAX; ii++) - { - PlatComStatusStru[ii].SystemType = &(ComDevStatusInfo[ii].DeviceTypeOther); - PlatComStatusStru[ii].SystemNum = &(ComDevStatusInfo[ii].ComDevSum); - for (jj = 0u; jj < TRANSMIT_OBJECT_DEVICE_SUM_MAX; jj++) - { - PlatComStatusStru[ii].SystemIdBuf[jj] = &(ComDevStatusInfo[ii].ComDevIdBuf[jj]); - PlatComStatusStru[ii].CommunicationStatusBuf[jj] = &(ComDevStatusInfo[ii].ComDevIdComStatusBuf[jj]); - } - } - - } - else - { - - } + /*LEUZCCIȵͨ״̬*/ + if (TransmitRelaDataCurSum < TRANSMIT_OBJECT_SUM_MAX) + { + for (ii = 0u; ii < TRANSMIT_OBJECT_SUM_MAX; ii++) + { + PlatComStatusStru[ii].SystemType = &(ComDevStatusInfo[ii].DeviceTypeOther); + PlatComStatusStru[ii].SystemNum = &(ComDevStatusInfo[ii].ComDevSum); + for (jj = 0u; jj < TRANSMIT_OBJECT_DEVICE_SUM_MAX; jj++) + { + PlatComStatusStru[ii].SystemIdBuf[jj] = &(ComDevStatusInfo[ii].ComDevIdBuf[jj]); + PlatComStatusStru[ii].CommunicationStatusBuf[jj] = &(ComDevStatusInfo[ii].ComDevIdComStatusBuf[jj]); + } + } + + } + else + { + + } #endif #endif - result = HLHTCiIdMapInitial(); - if (CI_SUCCESS == result) + result = HLHTCiIdMapInitial(); + if (CI_SUCCESS == result) + { + rtn = CI_SUCCESS; + } + else + { + debug_infor_printf((const)"Initial2oo2Interface init error: HLHTCiIdMapInitial Error\n"); + rtn = CI_ERROR; /*ʧ*/ + } + } + } + else { - rtn = 1; + rtn = CI_ERROR; /*ʧ*/ } return rtn; - } /* @@ -504,7 +512,7 @@ QueueStruct* Get2oo2CiToPscDataQueue(void) UINT32 Get2oo2CurCycleNum(void) { #if (kPLATFORM==kVXWORKS) - return MSCP_GetSysCount(); + return MSCP_GetAreaSysCount(); #else return *CurCycleNum; #endif diff --git a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h index 0542b2b..7810b26 100644 --- a/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h +++ b/TSCP/src/APP/ciapp/2oo2/2oo2InterfaceDataManage.h @@ -21,6 +21,7 @@ #include "CommonQueue.h" #include "../Transmit/TransmitStateDataManage.h" +#include "MSCP_APP_API.h" #ifdef PLATFORM_2OO2 #include "sfpplatform.h" #include "RsspWl.h" @@ -89,12 +90,14 @@ extern UINT8* CiAndCiComDeviceNum; /* extern UINT8* CiAndCiComIdBuf; /*ͨ豸ID*/ extern UINT8* CiAndCiComState; /*ͨ״̬*/ extern UINT8* PlatSheBeiType; /*ƽ̨豸*/ +extern UINT8 gSheBeiType; /*豸*/ /* * ƽ̨ʼ * ˵ void -* ֵ NULL: ȡʧ -* !NULL: ƽ̨ATSCIӿڶ +* ֵ 0: ʧ +* 1: ɹ +* Modified By LQ 2025.08.27 */ UINT8 Initial2oo2Interface(void); @@ -386,7 +389,7 @@ void SendOut_LogBuff(); void debug_infor_printf(char* debug_string, ...); void debug_out_array(UINT8 mode, UINT8* debug_array, UINT16 len); - +void DarkInfoPack(UINT16 mode, UINT8* debug_array, UINT16 len); UINT8 OutnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen); UINT8 InnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen); diff --git a/TSCP/src/APP/ciapp/AllAutoReturn/AllAutoReturnDefine.h b/TSCP/src/APP/ciapp/AllAutoReturn/AllAutoReturnDefine.h index df1a7f4..62268ff 100644 --- a/TSCP/src/APP/ciapp/AllAutoReturn/AllAutoReturnDefine.h +++ b/TSCP/src/APP/ciapp/AllAutoReturn/AllAutoReturnDefine.h @@ -41,5 +41,5 @@ #define ALL_AUTO_RETURN_DICHU_COMMR ((UINT8)0x06) /*ִͨ·Ѱ*/ #define ALL_AUTO_RETURN_HAVE_BLOCK ((UINT8)0x02) /*ȫԶ۷·ڷ*/ #define ALL_AUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x03) /*ȫԶ۷·ڷŲ*/ - +#define ALL_AUTO_RETURN_COUPROUTE_SET ((UINT8)0x07) /*ҽ·Ѱ*/ #endif diff --git a/TSCP/src/APP/ciapp/AutoReturn/AutoReturnDefine.h b/TSCP/src/APP/ciapp/AutoReturn/AutoReturnDefine.h index a5c9562..81d0ea2 100644 --- a/TSCP/src/APP/ciapp/AutoReturn/AutoReturnDefine.h +++ b/TSCP/src/APP/ciapp/AutoReturn/AutoReturnDefine.h @@ -41,5 +41,5 @@ #define AUTO_RETURN_DICHU_COMMROUTE ((UINT8)0x06) /*ִͨ·Ѱ*/ #define AUTO_RETURN_HAVE_BLOCK ((UINT8)0x02) /*Զ۷·ڷ*/ #define AUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x03) /*Զ۷·ڷŲ*/ - +#define AUTO_RETURN_COUPROUTE_SET ((UINT8)0x07) /*ҽ·Ѱ*/ #endif diff --git a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.c b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.c index c0f3c2e..57e04ec 100644 --- a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.c +++ b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.c @@ -107,7 +107,13 @@ void SetAutoRouteSetFlag(const UINT16 autoRouteId, const UINT8 setState) } } - - - - +/* +* ȡԶ·̬ݽṹ +* ˵ +* ֵԶ·̬ݽṹ +* Created By LQ 2025.05.26 +*/ +AutoRouteDataStruct* GetAutoRouteDataStr(void) +{ + return AutoRouteDataStru; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.h b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.h index e096ca1..1e0131f 100644 --- a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.h +++ b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDataManage.h @@ -56,7 +56,13 @@ UINT8 GetAutoRouteSetFlag(const UINT16 autoRouteId); */ void SetAutoRouteSetFlag(const UINT16 autoRouteId, const UINT8 setState); - +/* +* ȡԶ·̬ݽṹ +* ˵ +* ֵԶ·̬ݽṹ +* Created By LQ 2025.05.26 +*/ +AutoRouteDataStruct* GetAutoRouteDataStr(void); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDefine.h b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDefine.h index ee88cf1..98cbf47 100644 --- a/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDefine.h +++ b/TSCP/src/APP/ciapp/AutoRoute/AutoRouteDefine.h @@ -36,7 +36,7 @@ #define AUTO_ROUTE_DICHU_COMMROUTE ((UINT8)0x06) /*ִͨ·Ѱ*/ #define AUTO_ROUTE_HAVE_BLOCK ((UINT8)0x02) /*Զ·ڷ*/ #define AUTO_ROUTE_FLOOD_STATE_ERR ((UINT8)0x03) /*Զ·ڷŲ*/ - +#define AUTO_ROUTE_COUPROUTE_SET ((UINT8)0x07) /*ҽ·Ѱ*/ #endif diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h index 5e2c566..ff8d822 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertDefine.h @@ -25,6 +25,7 @@ #define AAM_BAD_NEAR 0x03u /* ӽ */ #define AAM_NO_TRAIN_NEAR 0x04u /* ޳ӽ */ #define AAM_GOOD_OCC 0x05u /* óռ */ +#define AAM_SLEEP_OCC 0x06u /* ߳ռ */ #define AAM_API_AC_ARB 0x01u /* ARB*/ diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c index 48315bd..0676797 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c @@ -53,6 +53,9 @@ static UINT8 aam_SearchNearestTrainInNextAC(UINT16 baseACID, UINT8 Dir, UINT8 en UINT32 errorCode = 0u; const EnvelopeStruct* pTempEnvelope = NULL; ELM_AxisLocStruct tmpAcLoc = { 0u }; + UINT8 cSleepState = 0U; /*г״̬*/ + UINT8 ii = 0U; + UINT8 chNoSleepCheck = 0U; /*- ڲУ */ ASSERT_RET_VALUE(NULL == envelopeIds,ret,0x80000000u); @@ -103,24 +106,44 @@ static UINT8 aam_SearchNearestTrainInNextAC(UINT16 baseACID, UINT8 Dir, UINT8 en ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x10000000u); AAM_LOG_LOC(AAM_LOG_ERROR,"errno:0x%08x info:Search NearestTrain ELM%d,ELM info error.",errorCode,preEnvelope) } - else if (((TYPE_CT_ENVELOPE == pTempEnvelope->envelopeType) || (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..c10b39a 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_RCI, 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/DeviceConfigDataManage.c b/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.c index f34cb34..8a6c0e9 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.c +++ b/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.c @@ -43,6 +43,7 @@ UINT8 GetCiEmapCheckVer(const UINT8 ciId, UINT32 *emapVer,const UINT8 commDevTyp switch (commDevType) {/*ͨ豸ͻȡCIͨ豸ĹУϢ*/ case CI_SYSTEM_TYPE_VOBC: + case CI_SYSTEM_TYPE_IVOC: case CI_SYSTEM_TYPE_ITE: *emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndVOBC; /*ITEʹVOBCͬУϢ*/ break; @@ -57,7 +58,7 @@ UINT8 GetCiEmapCheckVer(const UINT8 ciId, UINT32 *emapVer,const UINT8 commDevTyp *emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndTMC; break; default: - /*CI_SYSTEM_TYPE_CI*/ + /*CI_SYSTEM_TYPE_RCI*/ break; } @@ -111,8 +112,8 @@ UINT8 IsSameLineCI(const UINT8 ciA, const UINT8 ciB) UINT8 dquDevNameA = CI_ERROR; UINT8 dquDevNameB = CI_ERROR; - u16CiA = (UINT16)((CI_SYSTEM_TYPE_CI * 256u) + ciA); - u16CiB = (UINT16)((CI_SYSTEM_TYPE_CI * 256u) + ciB); + u16CiA = (UINT16)((CI_SYSTEM_TYPE_RCI * 256u) + ciA); + u16CiB = (UINT16)((CI_SYSTEM_TYPE_RCI * 256u) + ciB); cbtcSysType = GetCbtcSysType(); @@ -202,28 +203,55 @@ UINT32 GetCiTranCiDataCheckVer(const UINT8 ciId, const UINT16 deviceName) UINT32 retDataVer = CI_ERROR; UINT8 ii = 0U; UINT8 chBreakFlag = 0U; - - if ((ciId > 0U) && (ciId < CI_SUM_MAX) && (deviceName > 0U)) + UINT8 chDevType = 0U; + chDevType = (UINT8)((deviceName & 0xFF00) >> 8U); + if ((ciId > 0U) && (ciId < CI_SUM_MAX) && + ((RC_WORK_MODE_CI == chDevType)||(RC_WORK_MODE_TIOC == chDevType))) { if (gEmapCiConfigStrus[ciId].devId == ciId) { - for (ii = 0U; ii < gEmapCiConfigStrus[ciId].chAdjoinCICount; ii++) + if (RC_WORK_MODE_CI == chDevType) { - if (ii < CI_TRAINSMIT_CI_MAX_NUM) + for (ii = 0U; ii < gEmapCiConfigStrus[ciId].chAdjoinCICount; ii++) { - if ((deviceName == gEmapCiConfigStrus[ciId].wAdjoinCIId[ii]) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] > 0U) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] < 0xFFFFU)) + if (ii < CI_TRAINSMIT_CI_MAX_NUM) + { + if ((deviceName == gEmapCiConfigStrus[ciId].wAdjoinCIId[ii]) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] > 0U) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] < 0xFFFFU)) + { + retDataVer = gEmapCiConfigStrus[ciId].dwAdjoinCIShareCheckData[ii]; + chBreakFlag = 1U; + } + } + else { - retDataVer = gEmapCiConfigStrus[ciId].dwAdjoinCIShareCheckData[ii]; chBreakFlag = 1U; } + if (1U == chBreakFlag) + { + break; + } } - else + } + else + { + for (ii = 0U; ii < gEmapCiConfigStrus[ciId].chAdjoinRCCount; ii++) { - chBreakFlag = 1U; - } - if (1U == chBreakFlag) - { - break; + if (ii < CI_TRAINSMIT_CI_MAX_NUM) + { + if ((deviceName == gEmapCiConfigStrus[ciId].wAdjoinRCId[ii]) && (gEmapCiConfigStrus[ciId].wAdjoinRCId[ii] > 0U) && (gEmapCiConfigStrus[ciId].wAdjoinRCId[ii] < 0xFFFFU)) + { + retDataVer = gEmapCiConfigStrus[ciId].dwAdjoinRCShareCheckData[ii]; + chBreakFlag = 1U; + } + } + else + { + chBreakFlag = 1U; + } + if (1U == chBreakFlag) + { + break; + } } } } diff --git a/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.h b/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.h index a70aed8..6553b6b 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.h +++ b/TSCP/src/APP/ciapp/DataManage/DeviceConfigDataManage.h @@ -36,11 +36,15 @@ typedef struct S_EmapCheckVerConfigStruct UINT8 chAdjoinCICount; /*CI*/ UINT16 wAdjoinCIId[CI_TRAINSMIT_CI_MAX_NUM]; /*CI[1-6]ID*/ UINT32 dwAdjoinCIShareCheckData[CI_TRAINSMIT_CI_MAX_NUM]; /*CI[1-6]ĹУϢ*/ + UINT8 chAdjoinRCCount; /*RC*/ + UINT16 wAdjoinRCId[CI_TRAINSMIT_CI_MAX_NUM]; /*RC[1-6]ID*/ + UINT32 dwAdjoinRCShareCheckData[CI_TRAINSMIT_CI_MAX_NUM]; /*RC[1-6]ĹУϢ*/ UINT16 ciTransmitAxisId[CI_TRAINSMIT_AXIS_MAX_NUM];/*ͨŵļϵͳID*/ UINT32 ciTransmitAxisCheckData[CI_TRAINSMIT_AXIS_MAX_NUM];/*ͨŵļϵͳУϢ*/ UINT8 chAdjoinOcCount; /*CIͨŵoc*/ UINT16 wAdjoinOcId[CI_TRAINSMIT_OC_MAX_NUM]; /*Oc[1-10]ID*/ UINT32 dwAdjoinOcShareCheckData[CI_TRAINSMIT_OC_MAX_NUM]; /*OC[1-10]ĹУϢ*/ + UINT32 dwLocalShareCheckData; /*뱾RC/CIУϢ*/ } EmapCiConfigStru; extern EmapCiConfigStru gEmapCiConfigStrus[CI_SUM_MAX];/*洢CIʹõĵӵͼ汾*/ diff --git a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c index be10a07..34641af 100644 --- a/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c +++ b/TSCP/src/APP/ciapp/DataManage/DeviceDataManage.c @@ -44,7 +44,11 @@ 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_AllSnowModelCC = CI_ALL_SNOW_UNVALID; /*ȫѩģʽCC0x55-Ч0xAA-Ч*/ + +UINT8 g_AllSnowLevel = CI_SNOW_LEVEL_DEFAULT; /*ȫʪ켶0-Ĭֵ1-һ2-*/ UINT8 g_IteLineCutState = CI_ITE_LINE_CUT_DEFAULT; /*ITEȫг״̬0x55гITE0xAAʹITE0xFFĬֵ*/ @@ -82,13 +86,20 @@ 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 }; /*ѩ*/ + +UINT8 gLocalAreaSnowNumCC = 0U; /*ѩվ̨CC*/ +AreaSnowInfoStruct gszLocalAreaSnowCC[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*ѩCC*/ LineCommTrainStruct gStrLineCommTrain = { 0U }; /*ȫͨųṹ*/ UINT32 gFlyProtectOverCyc = 0U; /*ɳ崻ʼ*/ UINT8 g_LocalSnowModel = CI_LOCAL_SNOW_UNVALID; /*ѩģʽ*/ +UINT8 g_LocalSnowModelCC = CI_LOCAL_SNOW_UNVALID; /*ѩģʽCC*/ + +UINT8 gLocalAreaIteCutNum = 0U; /*ITEг*/ +UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX] = { 0U }; /*ITEгID顪Ҫ洢ZC͵ID*/ /******************************־ݹ****************************/ @@ -1258,8 +1269,16 @@ void RouteDrvInnerSwitch(const UINT16 routeId, const UINT8 DrivFlag) chSwitchBelCiId = GetSwitchBelongCiId(switchId); if ((chLocalCiId == chSwitchBelCiId) && (0U != chLocalCiId)) { - switchExpPos = pRouteProtectSwitchStru[ii].ProtectPosition; - (void)SwitchDriveProcess(switchId, switchExpPos); /*ý·״̬Ϊ*/ + funRtn = CheckSwitchPosAndMoveValid(pRouteProtectSwitchStru[ii].ProtectSwitchId, pRouteProtectSwitchStru[ii].ProtectPosition, ESEND_LEVEL_ZERO); + if (CI_ERROR == funRtn) + { + /*ɶͨз*/ + } + else + { + switchExpPos = pRouteProtectSwitchStru[ii].ProtectPosition; + (void)SwitchDriveProcess(switchId, switchExpPos); /*ý·״̬Ϊ*/ + } } else { @@ -1324,6 +1343,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 +1408,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)) @@ -1681,6 +1714,7 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId) UINT8 sigalMaintainState = 0u; UINT8 signalIsfushiFlag = 0u; UINT8 signalCurDriveColor = 0u; + UINT8 chRoutelightFlag = 0U; routeLevel = GetRouteLevel(routeId); /*ȡ·*/ if(ROUTE_LEVEL_BLOC == routeLevel) @@ -1782,7 +1816,16 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId) lightExtinctState = GetSignalLightExtinctState(signalId);/*źŻ״̬*/ sigalMaintainState = GetSignalMaintainState(signalId);/*źŻά޵״̬*/ - + + chRoutelightFlag = GetSignalShine(signalId); + if (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE == chRoutelightFlag) + { + lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; + } + else + { + /*óCBTCӽʱƣƣ״̬*/ + } signalIsfushiFlag = GetSignalIsfushiFlag(signalId); signalCurDriveColor = GetSignalCurDriveColor(signalId); if ((SIGNAL_DRIVECOLOUR_NULL == signalCurDriveColor)&&(SIGNALTYPE_FUSHI_YES != signalIsfushiFlag))/*Ƿʾ߼µ쳣*/ @@ -2050,6 +2093,7 @@ UINT8 DriveSignalClose(const UINT16 signalId) UINT8 routeLeadProperty = 0U; UINT8 routeState = 0U; UINT16 wStartSignalId = 0u; + UINT8 chRoutelightFlag = 0U; if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX)) { reVal = CI_ERROR; @@ -2084,6 +2128,15 @@ UINT8 DriveSignalClose(const UINT16 signalId) routeState = GetRouteState(routeId);/*ȡ·״̬*/ wStartSignalId = GetRouteStartSignalId(routeId); + chRoutelightFlag = GetSignalShine(signalId); + if (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE == chRoutelightFlag) + { + lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; + } + else + { + /*óCBTCӽʱƣƣ״̬*/ + } if (((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty)) && ((ROUTE_STATE_LEAD_LOCK == routeState) || (ROUTE_STATE_LEAD_LOCKERR == routeState) @@ -2148,6 +2201,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 +2229,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 +2567,9 @@ UINT8 GetSwitchMoveEarlyValidState(UINT16 switchId, UINT8 oper_src, UINT8 sendLe } } } - /*ɶ*/ +#endif + return reVal; } @@ -2577,9 +2632,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 +5183,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 +5322,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 +5440,6 @@ void SetAllTsrFlag(UINT8 setFlag) * ˵ void * ֵ 0x55: Ч 0xAA:Ч */ - UINT8 GetAllSnowModel(void) { return g_AllSnowModel; @@ -5404,6 +5462,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 +6255,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) UINT16 bufIndex = 0u; /*±*/ UINT8 logSecLockState = 0U; UINT8 logSecLockRouteNum = 0U; + UINT8 chFailStep = 0U; bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ /**±Ϸ*/ @@ -6182,7 +6272,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) logicCheck = LogicIntruSecVainCheck(logSectionId, &devId, &devState); /*߼޼*/ logSecLockState = GetLogSecLogLockState(logSectionId); logSecLockRouteNum = GetLogSecLockBelLogRouteSum(logSectionId); - + if (NULL == pLgcSecSwitchStru) { reVal = CI_ERROR; @@ -6197,6 +6287,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*·*/ reVal = CI_ERROR; + chFailStep = 1U; } } if (CI_SUCCESS == reVal) @@ -6205,6 +6296,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*߼δ߼·*/ reVal = CI_ERROR; + chFailStep = 2U; } } @@ -6224,6 +6316,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) || ((LOGICSECTION_OCCUPY_CT == curLogSecOccState) && (CI_ERROR == checkSulicTrain))) { reVal = CI_ERROR; + chFailStep =3U; break; } else @@ -6257,6 +6350,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) { /*ʧ*/ reVal = CI_ERROR; + chFailStep = 4U; } else { @@ -6275,12 +6369,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 +6390,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 +6417,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 +6448,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if (FLOOD_GATE_OPEN != floodState) { reVal = CI_ERROR; + chFailStep = 9U; break; } else @@ -6376,6 +6474,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) || ((LOGICSECTION_OCCUPY_CT == curLogSecOccState) && (CI_ERROR == checkSulicTrain))) { reVal = CI_ERROR; + chFailStep = 10U; } else { @@ -6395,6 +6494,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId) if (CI_ERROR == checkResult) { reVal = CI_ERROR; + chFailStep = 11U; } else { @@ -6406,11 +6506,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; } @@ -8992,7 +9111,13 @@ void SetSigleRouteAutoTriggerManage(UINT8 virCIid, UINT16 routeId, UINT8 setFlag UINT8 belongVirCI = 0u; UINT8 flag = 0u; UINT8 autoTriggerType = 0u; /*Զ·*/ - + UINT8 chRoutCouplinkFlag = 0U; + UINT16 wLastPhyId = 0U; + UINT16 wLockRouteId = 0U; + UINT16 wSigId = 0U; + UINT16 wSameStartSigRouteNum = 0U; + UINT16* pSameStartSigRouteBuf = NULL; + UINT16 jj = 0U; autoTriggerType = GetAutoTriggerType(routeId); /*ȡ·Զ·*/ localCiId = GetSystemParaLocalCiId(); /*ȡID*/ belongCiId = GetRouteBelongCiId(routeId); /*ȡ·ID*/ @@ -9015,7 +9140,71 @@ void SetSigleRouteAutoTriggerManage(UINT8 virCIid, UINT16 routeId, UINT8 setFlag { /*Զ·״̬*/ chkFState = ChekAutoTriggerRouteFlockState(routeId); + if (CI_SUCCESS == chkFState) + { + /*·ұ־*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(routeId); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /**/ + } + else + { + chkFState = CI_ERROR; + } + /*··ұ־*/ + if (CI_SUCCESS == chkFState) + { + wLastPhyId = GetRouteLastPhySectionId(routeId); /*ȡ·*/ + wLockRouteId = GetPhySecRLockBelongRouteId(wLastPhyId); /*ȡ·*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(wLockRouteId);/*ȡұ־*/ + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + chkFState = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_SUCCESS == chkFState) + { + /*·ʼźŻΪʼ˵·Ҳұ־*/ + wSigId = GetRouteStartSignalId(routeId); + wSameStartSigRouteNum = GetStartSignalRouteSum(wSigId); /*ȡʼźŻ·*/ + pSameStartSigRouteBuf = GetStartSignalRouteBuf(wSigId); + if ((NULL != pSameStartSigRouteBuf) && (0U < wSameStartSigRouteNum)) + { + for (jj = 0U; jj < wSameStartSigRouteNum; jj++) + { + chRoutCouplinkFlag = GetRouteCouplinkFlag(pSameStartSigRouteBuf[jj]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + chkFState = CI_ERROR; + break; + } + } + } + else + { + chkFState = CI_ERROR; + } + } + else + { + /**/ + } + + } if (CI_SUCCESS == chkFState) { /*Զ·״̬*/ @@ -10616,10 +10805,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 +10821,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 +10853,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 +10890,13 @@ UINT8 GetLocalAreaSnowNum(void) } /* -* ȡѩվ̨ID +* ȡѩϢ * ˵ -* ֵ ѩվ̨ID +* ֵ ѩϢ */ -UINT32* GetLocalAreaSnowId(void) +AreaSnowInfoStruct* GetLocalAreaSnow(void) { - return szLocalAreaSnowId; + return szLocalAreaSnow; } @@ -11114,4 +11303,324 @@ 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; +} + +/* +* ʱٴ +* ˵const UINT16 wLogSectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 20250916 +*/ + +void EmergXianSuProcess(const UINT16 wLogSectionId, const UINT8 chExiansuState) +{ + UINT8 chBelongCiId = 0U; + UINT8 chLocalCiId = 0U; + UINT8 chPerLogSecExiansuState = 0U; + if ((0U < wLogSectionId) && (LOGIC_SECTION_SUM_MAX > wLogSectionId)) + { + chBelongCiId = GetLogSecBelongCiId(wLogSectionId);/*߼*/ + chLocalCiId = GetSystemParaLocalCiId(); + if ((chLocalCiId == chBelongCiId) && (0U != chLocalCiId)) + { + chPerLogSecExiansuState = GetLogSecEmergXianSu(wLogSectionId); + SetLogSecEmergXianSu(wLogSectionId, chExiansuState);/*߼νʱ*/ + + if ((LOGSEC_EMERG_XS_SET_YES != chPerLogSecExiansuState) && (LOGSEC_EMERG_XS_SET_YES == chExiansuState)) + { + /*δõ*/ + ClearLgcSecBelongRtXsCfm(wLogSectionId); /*ȷ*/ + } + else + { + /**/ + } + } + else + { + /*DZ߼Σ*/ + } + } + else + { + /**/ + } +} + +/* +* ȡȫѩģʽCC +* ˵void +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.07 +*/ +UINT8 GetAllSnowModelCC(void) +{ + return g_AllSnowModelCC; +} + +/* +* ȫѩģʽCC +* ˵UINT8 setmodle ȫѩģʽ +* ֵvoid +* Created By LQ 2025.11.07 +*/ +void SetAllSnowModelCC(UINT8 setmodle) +{ + if ((CI_ALL_SNOW_VALID == setmodle) || (CI_ALL_SNOW_UNVALID == setmodle)) + { + g_AllSnowModelCC = setmodle; + } + else + { + /**/ + } +} + +/* +* ȡѩվ̨CC +* ˵ +* ֵѩվ̨ +* Created By LQ 2025.11.06 +*/ +UINT8 GetLocalAreaSnowNumCC(void) +{ + return gLocalAreaSnowNumCC; +} + +/* +* ȡѩϢCC +* ˵ +* ֵѩϢ +* Created By LQ 2025.11.06 +*/ +AreaSnowInfoStruct* GetLocalAreaSnowCC(void) +{ + return gszLocalAreaSnowCC; +} + +/* +* ñѩվ̨ϢCC +* ˵const UINT8 cAreaSnowNum ѩ +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLocalAreaSnowInfoCC(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]) +{ + UINT8 ii = 0U; + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) && (NULL != pAreaSnowBuf)) + { + /*ѩվ̨ϢCC*/ + (void)CommonMemSet(gszLocalAreaSnowCC, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX), 0U, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX)); + + gLocalAreaSnowNumCC = cAreaSnowNum; + for (ii = 0U; ii < cAreaSnowNum; ii++) + { + gszLocalAreaSnowCC[ii] = pAreaSnowBuf[ii]; /*洢ѩ״̬Ϣ*/ + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ȡѩģʽCC +* ˵ +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.06 +*/ +UINT8 GetLocalSnowModelCC(void) +{ + return g_LocalSnowModelCC; +} + +/* +* ñѩģʽCC +* ˵UINT8 setmodle ѩģʽ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLocalSnowModelCC(UINT8 setmodle) +{ + if ((CI_LOCAL_SNOW_UNVALID == setmodle) || (CI_LOCAL_SNOW_VALID == setmodle)) + { + g_LocalSnowModelCC = setmodle; + } + else + { + ; /**/ + } } \ 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..fa50207 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,10 @@ extern UINT8 g_AllTsrFlag; /* extern UINT8 g_AllSnowModel; /*ȫѩģʽ*/ +extern UINT8 g_AllSnowModelCC; /*ȫѩģʽCC0x55-Ч0xAA-Ч*/ + +extern UINT8 g_AllSnowLevel; /*ȫʪ켶0-Ĭֵ1-һ2-*/ + extern UINT8 g_IteLineCutState; /*ITEȫг״̬0x55гITE0xAAʹITE0xFFĬֵ*/ extern UINT8 g_AllLineTsrState; /*ȫʱ״̬*/ @@ -219,13 +232,21 @@ 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 UINT8 gLocalAreaSnowNumCC; /*ѩվ̨CC*/ +extern AreaSnowInfoStruct gszLocalAreaSnowCC[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩCC*/ extern LineCommTrainStruct gStrLineCommTrain; /*ȫͨųṹ*/ extern UINT32 gFlyProtectOverCyc; /*ɳ崻ʼ*/ extern UINT8 g_LocalSnowModel; /*ѩģʽ*/ +extern UINT8 g_LocalSnowModelCC; /*ѩģʽCC*/ + +extern UINT8 gLocalAreaIteCutNum; /*ITEг*/ +extern UINT16 gSzLocalAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*ITEгID*/ + /******************************־ݹ****************************/ /* @@ -1367,6 +1388,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 +1749,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 +1762,11 @@ void SetLocalAreaSnowInfo(const UINT8 cAreaSnowNum, const UINT32 pAreaSnowIdBuf[ UINT8 GetLocalAreaSnowNum(void); /* -* ȡѩվ̨ID +* ȡѩϢ * ˵ -* ֵ ѩվ̨ID +* ֵ ѩϢ */ -UINT32* GetLocalAreaSnowId(void); +AreaSnowInfoStruct* GetLocalAreaSnow(void); /* @@ -1824,4 +1863,114 @@ 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); +/* +* ʱٴ +* ˵const UINT16 wPhySectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 202500916 +*/ + +void EmergXianSuProcess(const UINT16 wPhySectionId, const UINT8 chExiansuState); + +/* +* ȡȫѩģʽCC +* ˵void +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.07 +*/ +UINT8 GetAllSnowModelCC(void); + +/* +* ȫѩģʽCC +* ˵UINT8 setmodle ȫѩģʽ +* ֵvoid +* Created By LQ 2025.11.07 +*/ +void SetAllSnowModelCC(UINT8 setmodle); + +/* +* ȡѩվ̨CC +* ˵ +* ֵѩվ̨ +* Created By LQ 2025.11.06 +*/ +UINT8 GetLocalAreaSnowNumCC(void); + +/* +* ȡѩϢCC +* ˵ +* ֵѩϢ +* Created By LQ 2025.11.06 +*/ +AreaSnowInfoStruct* GetLocalAreaSnowCC(void); + +/* +* ñѩվ̨ϢCC +* ˵const UINT8 cAreaSnowNum ѩ +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLocalAreaSnowInfoCC(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]); + +/* +* ȡѩģʽCC +* ˵ +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.06 +*/ +UINT8 GetLocalSnowModelCC(void); + +/* +* ñѩģʽCC +* ˵UINT8 setmodle ѩģʽ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLocalSnowModelCC(UINT8 setmodle); + #endif diff --git a/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c b/TSCP/src/APP/ciapp/DataManage/PlatDataManage.c index 239b672..ba3a04a 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)"\nPLATIO_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)"\nPLATIO_B_Node_Power_FaultState StartTime%d\n", dwErrorStartCyc); + } } else { retVal = CI_SUCCESS; + gPlatDataGPIOTolercance.powerBNode_TolCyc = 0U; } return retVal; } @@ -479,16 +515,20 @@ UINT8 CheckRCIBPowerFaultState(void) UINT8 CheckRCIAPowerModeFaultState(void) { UINT8 retVal = CI_ERROR; - UINT8 powerAPUBAState = 0U; /*PUB Aɼ24VAԴ״̬ 1*/ 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 +536,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)"\nPLATIO_A_Mode_Power_FaultState StartTime%d\n", dwErrorStartCyc); + } } else { retVal = CI_SUCCESS; + gPlatDataGPIOTolercance.powerAMode_TolCyc = 0U; } return retVal; @@ -520,25 +576,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ɼֻжϵԴѹ*/ + 2CPI Bɼ24VAԴ24VBԴѹΪ0V */ 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)"\nPLATIO_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..586ebbd 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*/ @@ -59,6 +59,7 @@ #define CCU_CommBadEnsureTime_CycleCount ((UINT16)5u) /*Ӧͨͨжж*/ #define VOLTAGE_MAX_TO_0 ((UINT16)500U) /*ѹжΪ0ֵ*/ +#define IO_POWERSTATE_TOLERANCE ((UINT8)0x02) /*ƽ̨Դ3ڣ2ڱ*/ /*ƽ̨֡Ϣṹ*/ typedef struct S_PlatHeartDataStruct @@ -100,7 +101,14 @@ typedef struct S_PlatGPIODataStruct UINT8 ModepowerBState_PUB; /*BϵԴΪCPUB24VDCԴģ״̬*/ }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..a2b9128 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h @@ -109,6 +109,8 @@ #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_ROUTE_COUPLINK_SET ((UINT8)0xD7) /*SetCouplinkRouteLogicManage ҽ·߼*/ /*߼*/ #define EFUNC_SET_LEAD_ROUTE_CHECK ((UINT8)0x4B) /*·*/ @@ -135,7 +137,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 +179,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 +213,11 @@ #define EFUNC_FIRSTLEAVE_LOGSEC_CHECK ((UINT8)0xD1) /*ȥ߼μRouteLeaveLogSecCheck*/ +#define EFUNC_OVERLAP_ZHAOCHA_CHECK ((UINT8)0xD3) /*ղ*/ + +#define EFUNC_PARSE_LOCAL_CI2RC_DATA ((UINT8)0xD4U) /*ParseCiToLocalRcDataFrame*/ +#define EFUNC_PARSE_LOCAL_RC2CI_DATA ((UINT8)0xD5U) /*ParseRcToLocalCiDataFrame*/ + /*************************************************ֽ******************************************************************************/ /*************************************************ֽ******************************************************************************/ @@ -230,6 +238,8 @@ #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_COUPLINK_ROUTE_IDLE ((UINT8)0xA5) /*ҽ·ޱҳ*/ #define ETYPE_COMM_WITH_VOBC ((UINT8)0x11) /*VOBCͨ*/ @@ -240,6 +250,7 @@ #define ETYPE_COMM_WITH_PSC ((UINT8)0x15) /*CIPSCͨ*/ #define ETYPE_COMM_WITH_TMC ((UINT8)0x17) /*TMCͨ*/ +#define ETYPE_COMM_WITH_RC ((UINT8)0x18U) /*RCͨ*/ /* źŻͱ (UINT8)0x21-(UINT8)0x3f */ /* 豸 CI_DEVICE_TYPE_SIGNAL */ @@ -293,6 +304,7 @@ /**/ #define ETYPE_OVERLAP_LABORUNLOCK_FAIL ((UINT8)0x51U) /*˹*/ #define ETYPE_OVERLAP_RES_CHECK_FAIL ((UINT8)0x52U) /*Դ*/ +#define ETYPE_OVERLAP_LABORUNLOCK_STATE ((UINT8)0x53U) /*˹״̬*/ /* ͱ (UINT8)0x61-(UINT8)0x7f */ /* 豸 CI_DEVICE_TYPE_SWITCH */ @@ -313,6 +325,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 +392,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/ELMDataPrepare.c b/TSCP/src/APP/ciapp/EnvelopeManage/ELMDataPrepare.c index d46c6dd..4329cad 100644 --- a/TSCP/src/APP/ciapp/EnvelopeManage/ELMDataPrepare.c +++ b/TSCP/src/APP/ciapp/EnvelopeManage/ELMDataPrepare.c @@ -176,7 +176,7 @@ else UINT8 elm_PrepareTrainSafeLoc(UINT16 trainID,INOUT ELM_TrainSafeLocStruct* pTrainSafeLoc) { UINT8 chRtnVal = CI_ERROR; -UINT16 wTrainID = (UINT16)(0x1400u + (trainID & 0x00ffu)); +UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainID & 0x00ffU)); if (NULL != pTrainSafeLoc) { @@ -1012,7 +1012,7 @@ UINT32 elm_PrepareTrainLength(UINT16 trainid) UINT8 chTrainType = 0u; UINT8 chFunRtn = CI_ERROR; UINT32 dwRtnVal = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); /*ȡг*/ chFunRtn = dquGetTrainType(wTrainID, &chTrainType); @@ -1074,7 +1074,7 @@ UINT8 elm_PrepareNextAcMinSafeHeadLoc(UINT16 trainid, OUT UINT16 acID[AC_MAXCNT_ UINT8 chFunRtn = CI_ERROR; LinkPointDataStru strPoint = { 0u }; UINT16 wSwitchId = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); UINT8 cDirectionPointFlag = 0U; /*Ƿз仯־*/ @@ -1135,7 +1135,7 @@ UINT8 elm_PrepareMaxSafeHeadLoc(UINT16 trainid, OUT LOD_STRU *pLoc) UINT16 wLink = 0u; UINT32 dwOff = UINT32_MAX; UINT8 chDir = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wLink = GetTrainMaxHeadLink(wTrainID); @@ -1169,7 +1169,7 @@ UINT8 elm_PrepareMinSafeHeadLoc(UINT16 trainid, OUT LOD_STRU *pLoc) UINT16 wLink = 0u; UINT32 dwOff = UINT32_MAX; UINT8 chDir = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wLink = GetTrainMinHeadLink(wTrainID); @@ -1200,7 +1200,7 @@ UINT16 elm_PrepareACOfMaxSafeHeadLoc(UINT16 trainid) UINT16 wMinHeadLink = 0u; UINT8 chFunRtn = CI_ERROR; UINT16 wRtn = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wMinHeadLink = GetTrainMaxHeadLink(wTrainID); chFunRtn = IsLinkIdValid(wMinHeadLink); @@ -1227,7 +1227,7 @@ UINT16 elm_PrepareACOfMinSafeHeadLoc(UINT16 trainid) UINT16 wMinHeadLink = 0u; UINT8 chFunRtn = CI_ERROR; UINT16 wRtn = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wMinHeadLink = GetTrainMinHeadLink(wTrainID); chFunRtn = IsLinkIdValid(wMinHeadLink); @@ -1261,7 +1261,7 @@ UINT8 elm_PrepareNextAcMaxSafeTailLoc(UINT16 trainid, OUT UINT16 acID[AC_MAXCNT_ UINT8 chFunRtn = CI_ERROR; LinkPointDataStru strPoint = { 0u }; UINT16 wSwitchId = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); UINT8 cDirectionPointFlag = 0U; /*Ƿз仯־*/ @@ -1324,7 +1324,7 @@ UINT8 elm_PrepareMaxSafeTailLoc(UINT16 trainid, OUT LOD_STRU *pLoc) UINT16 wLink = 0u; UINT32 dwOff = UINT32_MAX; UINT8 chDir = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wLink = GetTrainMaxTailLink(wTrainID); dwOff = GetTrainMaxTailOffset(wTrainID); @@ -1357,7 +1357,7 @@ UINT8 elm_PrepareMinSafeTailLoc(UINT16 trainid, OUT LOD_STRU *pLoc) UINT16 wLink = 0u; UINT32 dwOff = UINT32_MAX; UINT8 chDir = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wLink = GetTrainMinTailLink(wTrainID); dwOff = GetTrainMinTailOffset(wTrainID); @@ -1387,7 +1387,7 @@ UINT16 elm_PrepareACOfMaxSafeTailLoc(UINT16 trainid) UINT16 wMaxTailLink = 0u; UINT8 chFunRtn = CI_ERROR; UINT16 wRtn = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wMaxTailLink = GetTrainMaxTailLink(wTrainID); chFunRtn = IsLinkIdValid(wMaxTailLink); @@ -1414,7 +1414,7 @@ UINT16 elm_PrepareACOfMinSafeTailLoc(UINT16 trainid) UINT16 wMaxTailLink = 0u; UINT8 chFunRtn = CI_ERROR; UINT16 wRtn = 0u; - UINT16 wTrainID = (UINT16)(0x1400u + (trainid & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainid & 0x00ffU)); wMaxTailLink = GetTrainMinTailLink(wTrainID); chFunRtn = IsLinkIdValid(wMaxTailLink); @@ -1652,7 +1652,7 @@ UINT8 elm_PrepareComOCID(IN const UINT8 **pOCIDbuff) else { /** ȡOCͨŵOC */ - ret = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); + ret = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); /** жǷڣֱӷ*/ if (0u == ret) @@ -1662,7 +1662,7 @@ UINT8 elm_PrepareComOCID(IN const UINT8 **pOCIDbuff) else { /** ȡͨŵTIOC ID */ - (*pOCIDbuff) = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + (*pOCIDbuff) = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); } } @@ -1684,7 +1684,7 @@ UINT8 elm_PrepareOCCommStatus(UINT8 OCID) UINT8 funRtn = TRANSMIT_STATE_BAD; /** ȡOCͨ״̬ */ - funRtn = GetCiTransmitState(CI_SYSTEM_TYPE_CI,OCID); + funRtn = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,OCID); /** úֵ */ ASSERT_SETRET(TRANSMIT_STATE_GOOD == funRtn,ret,ELM_COM_STATUS_OK,ELM_COM_STATUS_ERROR) @@ -1771,7 +1771,7 @@ UINT8 elm_PrepareTrainSafeHeadFlag(UINT16 trainId) { UINT8 ret = CI_ERROR; UINT16 funRtn = TRAIN_HEAD_FLAG_YES; - UINT16 wTrainID = (UINT16)(0x1400u + (trainId & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (trainId & 0x00ffU)); funRtn = GetTrainSafeHeadFlag(wTrainID); diff --git a/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c b/TSCP/src/APP/ciapp/EnvelopeManage/EnvelopeLogicProcess.c index a164862..fd38b01 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]); @@ -2036,6 +2036,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 +2057,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 +2606,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 +2652,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 +2785,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 +2811,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 +2849,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 +2863,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; } 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..17607b8 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; } @@ -2271,7 +2270,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 +2383,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 +2657,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; } @@ -2916,6 +2939,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 +3053,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) { @@ -3256,6 +3305,7 @@ static UINT8 elm_ConvertToUCTCheck(const EnvelopeStruct* ptemp) UINT8 chCanUct = FLAG_SET; UINT32 minTrainLength = 0U; UINT32 dwTempLength = 0U; + UINT8 chTrainNvramPosFlag = 0U; /** ڲУ */ ASSERT_RET_VALUE(NULL == ptemp,ret,0x80000000U); @@ -3296,6 +3346,17 @@ 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 */ + } /** úֵ */ ASSERT_SETRET(0U == errorCode,ret,CI_SUCCESS,CI_ERROR); diff --git a/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.c b/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.c index 3df8cf9..2e11a08 100644 --- a/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.c +++ b/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.c @@ -14,6 +14,7 @@ FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /*Ŷ̬*/ +FloodGateDataStructCC FloodGateDataStruCC[FLOOD_GATE_SUM_MAX]; /*Ŷ̬-*/ /* @@ -26,7 +27,16 @@ FloodGateDataStruct *GetFloodGateData(void) { return FloodGateDataStru; } - +/* +* ȡݽṹָ복 +* ˵ +* ֵ + FloodGateDataStructCC * +*/ +FloodGateDataStructCC* GetFloodGateDataCC(void) +{ + return FloodGateDataStruCC; +} /* * ȡָIDſ״̬ @@ -482,7 +492,7 @@ UINT8 GetFloodGateCloseApplyIvocSum(const UINT16 floodGateId) if (0u < bufIndex) { - reVal = FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocSum; + reVal = FloodGateDataStruCC[bufIndex].FloodGateCloseApplyIvocSum; } else { @@ -505,7 +515,7 @@ void SetFloodGateCloseApplyIvocSum(const UINT16 floodGateId, const UINT8 wTrainS if (0u < bufIndex) { - FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocSum = wTrainSum; + FloodGateDataStruCC[bufIndex].FloodGateCloseApplyIvocSum = wTrainSum; } else { @@ -527,7 +537,7 @@ UINT16* GetFloodGateCloseApplyIvocId(const UINT16 floodGateId) if (0u < bufIndex) { - applyIvocBuf = FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId; + applyIvocBuf = FloodGateDataStruCC[bufIndex].FloodGateCloseApplyIvocId; } else { @@ -549,11 +559,11 @@ void SetFloodGateCloseApplyIvocId(const UINT16 floodGateId, const UINT16* applyI if (0u < bufIndex) { - (void)CommonMemSet(FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId, + (void)CommonMemSet(FloodGateDataStruCC[bufIndex].FloodGateCloseApplyIvocId, (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX), 0U, (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX)); /*ȳ壬ֹ*/ - (void)CommonMemCpy(FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId, /*ֵгID*/ + (void)CommonMemCpy(FloodGateDataStruCC[bufIndex].FloodGateCloseApplyIvocId, /*ֵгID*/ (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX), applyIvocBuf, (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX)); } @@ -574,7 +584,7 @@ FloodGateTrainAnsStruct* GetFloodGateCloseFromIvocStru(const UINT16 floodGateId) if (0u < bufIndex) { - retVal = FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru; + retVal = FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru; } else { @@ -610,7 +620,7 @@ void SetFloodGateAllowCloseFlagIVOC(UINT16 floodGateId, UINT16 wTrainId, UINT8 a trainSumIndex = chIvocSum; for (ii = 0U; ii < chIvocSum; ii++) { - if (FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId == wTrainId) + if (FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId == wTrainId) { retVal = CI_ERROR; /*Ѵг,һظˣٴ*/ break; @@ -619,8 +629,8 @@ void SetFloodGateAllowCloseFlagIVOC(UINT16 floodGateId, UINT16 wTrainId, UINT8 a if (CI_SUCCESS == retVal) { - FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wTrainId = wTrainId; - FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wFloodGateCloseIvocFlag = agreeFlag; /*־ʱ򣬲ʼѯʵгǷ񶼻ظͬ*/ + FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wTrainId = wTrainId; + FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wFloodGateCloseIvocFlag = agreeFlag; /*־ʱ򣬲ʼѯʵгǷ񶼻ظͬ*/ chIvocSum++; SetFloodGateCloseAnsIvocSum(floodGateId, chIvocSum); } @@ -653,8 +663,8 @@ void ClearFloodGateAllowClosFlagIVOC(UINT16 floodGateId) { for (ii = 0U; ii < chIvocSum; ii++) { - FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId = 0U; - FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wFloodGateCloseIvocFlag = FLOOD_GATE_NOT_ALLOWCLOSE_IVOC; + FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId = 0U; + FloodGateDataStruCC[bufIndex].FloodGateCloseFromIvocStru[ii].wFloodGateCloseIvocFlag = FLOOD_GATE_NOT_ALLOWCLOSE_IVOC; } SetFloodGateCloseAnsIvocSum(floodGateId, 0U); } @@ -674,7 +684,7 @@ UINT8 GetFloodGateAccessUTFlag(const UINT16 floodGateId) if (0u < bufIndex) { - reVal = FloodGateDataStru[bufIndex].FloodGateAccessUTFlag; + reVal = FloodGateDataStruCC[bufIndex].FloodGateAccessUTFlag; } else { @@ -699,7 +709,7 @@ void SetFloodGateAccessUTFlag(const UINT16 floodGateId, const UINT8 accessUTFlag { if ((FLOOD_GATE_ACCESS_UT_YES == accessUTFlag) || (FLOOD_GATE_ACCESS_UT_NO == accessUTFlag)) {/*ܻߴCT*/ - FloodGateDataStru[bufIndex].FloodGateAccessUTFlag = accessUTFlag; + FloodGateDataStruCC[bufIndex].FloodGateAccessUTFlag = accessUTFlag; } } else @@ -722,7 +732,7 @@ UINT8 GetFloodGateCloseAnsIvocSum(const UINT16 floodGateId) if (0u < bufIndex) { - reVal = FloodGateDataStru[bufIndex].FloodGateCloseAnsIvocSum; + reVal = FloodGateDataStruCC[bufIndex].FloodGateCloseAnsIvocSum; } else { @@ -745,7 +755,7 @@ void SetFloodGateCloseAnsIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum if (0u < bufIndex) { - FloodGateDataStru[bufIndex].FloodGateCloseAnsIvocSum = wTrainSum; + FloodGateDataStruCC[bufIndex].FloodGateCloseAnsIvocSum = wTrainSum; } else { diff --git a/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.h b/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.h index 1a1b249..2b157ea 100644 --- a/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.h +++ b/TSCP/src/APP/ciapp/FloodGate/FloodGateDataManage.h @@ -50,21 +50,23 @@ typedef struct S_FloodGateDataStruct * 1ΪǰΪǣ2㣬ǰͬ״̬Ϊͬ⣻ */ UINT8 CurAgreeCloseStateOut; /*ǰͬ״ֶ̬̬Σ:FLOOD_GATE_AGREE_CLOSEFLOOD_GATE_NOT_AGREE_CLOSE*/ - UINT32 CurYGJCrossLineStartCount;/*ǰYGJ߿ʼʱ*/ - UINT32 CurFloodGateDelayCloseStartCyc; /*Žӽռѹʱſʼʱ*/ +} FloodGateDataStruct; + +/*ݽṹ*/ +typedef struct S_FloodGateDataStructCC +{ + UINT16 FloodGateId; /*ID (ʼֶ)*/ UINT8 FloodGateCloseApplyIvocSum; /*Źг*/ UINT16 FloodGateCloseApplyIvocId[FLOOD_GATE_APPLY_TRAIN_SUM_MAX]; /*ŹгID*/ - UINT8 FloodGateCloseAnsIvocSum; /*Źгظ*/ FloodGateTrainAnsStruct FloodGateCloseFromIvocStru[FLOOD_GATE_APPLY_TRAIN_SUM_MAX]; /*гͬŹṹ*/ UINT8 FloodGateAccessUTFlag; /*ŽӽǷзͨų־*/ -} FloodGateDataStruct; - +}FloodGateDataStructCC; /*******************************ȫֱ*******************************/ extern FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /*Ŷ̬*/ - +extern FloodGateDataStructCC FloodGateDataStruCC[FLOOD_GATE_SUM_MAX]; /*Ŷ̬-*/ /* * ȡݽṹָ * ˵ @@ -72,6 +74,13 @@ extern FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /* FloodGateDataStruct * */ FloodGateDataStruct *GetFloodGateData(void); +/* +* ȡݽṹָ복 +* ˵ +* ֵ + FloodGateDataStructCC * +*/ +FloodGateDataStructCC* GetFloodGateDataCC(void); /* * ȡָIDſ״̬ diff --git a/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.c b/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.c index f4b4614..bc4b2f8 100644 --- a/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.c +++ b/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.c @@ -14,7 +14,7 @@ #include "WLScreenDataPrepare.h" GaragedoorDataStruct GaragedoorDataStru[GARAGE_DOOR_SUM_MAX]; /*峵ݽṹ*/ - +GaragedoorDataStructCC GaragedoorDataStruCC[GARAGE_DOOR_SUM_MAX]; /*峵ݽṹ-*/ /* * ȡָ @@ -26,7 +26,16 @@ GaragedoorDataStruct *GetGaragedoorData(void) { return GaragedoorDataStru; } - +/* +* ȡָ- +* ˵ +* ֵ + GaragedoorDataStructCC * +*/ +GaragedoorDataStructCC* GetGaragedoorDataCC(void) +{ + return GaragedoorDataStruCC; +} /* * ȡָID״̬ * ˵ const UINT16 garagedoorId, ID @@ -143,7 +152,7 @@ UINT8 GetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId) if (bufIndex < GARAGE_DOOR_SUM_MAX) { - reVal = GaragedoorDataStru[bufIndex].GDAllowCloseFlagIVOC; + reVal = GaragedoorDataStruCC[bufIndex].GDAllowCloseFlagIVOC; } return reVal; @@ -167,7 +176,7 @@ void SetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId, const UINT8 allo if ((GARAGE_DOOR_ALLOW_CLOSE_YES == allowCloseFlag) || (GARAGE_DOOR_ALLOW_CLOSE_NO == allowCloseFlag)) { - GaragedoorDataStru[bufIndex].GDAllowCloseFlagIVOC = allowCloseFlag; /*ű־*/ + GaragedoorDataStruCC[bufIndex].GDAllowCloseFlagIVOC = allowCloseFlag; /*ű־*/ } } @@ -190,7 +199,7 @@ UINT16 GetGaragedoorNearestTrainId(const UINT16 garagedoorId) if (bufIndex < GARAGE_DOOR_SUM_MAX) { - reVal = GaragedoorDataStru[bufIndex].GDAkuNearestTrainId; + reVal = GaragedoorDataStruCC[bufIndex].GDAkuNearestTrainId; } return reVal; @@ -215,7 +224,7 @@ void SetGaragedoorNearestTrainId(const UINT16 garagedoorId, const UINT16 trainId if (UINT16_MAX!= trainId) { - GaragedoorDataStru[bufIndex].GDAkuNearestTrainId = trainId; /*ű־*/ + GaragedoorDataStruCC[bufIndex].GDAkuNearestTrainId = trainId; /*ű־*/ } } @@ -561,7 +570,7 @@ void SetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId, const UINT32 sta if (bufIndex < GARAGE_DOOR_SUM_MAX) { - GaragedoorDataStru[bufIndex].waiteIVOCResponseStartCycNum = startCycNum; /*ʼں*/ + GaragedoorDataStruCC[bufIndex].waiteIVOCResponseStartCycNum = startCycNum; /*ʼں*/ } } @@ -581,7 +590,7 @@ UINT32 GetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId) if (bufIndex < GARAGE_DOOR_SUM_MAX) { - ret = GaragedoorDataStru[bufIndex].waiteIVOCResponseStartCycNum; + ret = GaragedoorDataStruCC[bufIndex].waiteIVOCResponseStartCycNum; } return ret; diff --git a/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.h b/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.h index 2c9c7e3..ae295e1 100644 --- a/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.h +++ b/TSCP/src/APP/ciapp/Garagedoor/GaragedoorDataManage.h @@ -32,8 +32,7 @@ typedef struct S_GaragedoorDataStruct UINT16 GaragedoorId; /*ID (ʼֶ)*/ UINT8 GaragedoorState; /*״̬ (ֶ̬)*/ UINT8 GaragedoorAllowCloseFlag; /*ű־ZC*/ - UINT8 GDAllowCloseFlagIVOC; /*ű־IVOC*/ - UINT16 GDAkuNearestTrainId; /*Aӽг*/ + UINT8 GaragedoorModeState; /*ģʽ״̬*/ UINT8 GaragedoorFaultState; /*Ź״̬*/ UINT8 GaragedoorPangLuState; /*·״̬*/ @@ -41,14 +40,21 @@ typedef struct S_GaragedoorDataStruct UINT8 cmdProcessState; /* ״̬ */ UINT32 drvDoorStartCycle; /* ʼʱ,Ԥ */ UINT32 waiteZCResponseStartCycNum; /*ȴZCʼʱ*/ - UINT32 waiteIVOCResponseStartCycNum; /*ȴIVOCʼʱ*/ + UINT32 GaragedoorOpenStartCycNum; /*Ŵ򿪿ʼ (ֶ̬)*/ UINT32 GaragedoorCloseStartCycNum; /*Źرտʼ (ֶ̬)*/ } GaragedoorDataStruct; - +/*ݽṹ*/ +typedef struct S_GaragedoorDataStructCC +{ + UINT16 GaragedoorId; /*ID (ʼֶ)*/ + UINT8 GDAllowCloseFlagIVOC; /*ű־IVOC*/ + UINT16 GDAkuNearestTrainId; /*Aӽг*/ + UINT32 waiteIVOCResponseStartCycNum; /*ȴIVOCʼʱ*/ +}GaragedoorDataStructCC; extern GaragedoorDataStruct GaragedoorDataStru[GARAGE_DOOR_SUM_MAX]; /*峵ݽṹ*/ - +extern GaragedoorDataStructCC GaragedoorDataStruCC[GARAGE_DOOR_SUM_MAX]; /*峵ݽṹ-*/ /* * ȡָ * ˵ @@ -56,6 +62,13 @@ extern GaragedoorDataStruct GaragedoorDataStru[GARAGE_DOOR_SUM_MAX]; /* GaragedoorDataStruct * */ GaragedoorDataStruct *GetGaragedoorData(void); +/* +* ȡָ- +* ˵ +* ֵ + GaragedoorDataStructCC * +*/ +GaragedoorDataStructCC* GetGaragedoorDataCC(void); /* * ȡָID״̬ diff --git a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTCommonDataPacketHead.c b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTCommonDataPacketHead.c index be74c30..ef4243c 100644 --- a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTCommonDataPacketHead.c +++ b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTCommonDataPacketHead.c @@ -93,7 +93,7 @@ UINT8 HLHTRecvCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, U UINT32 LocalEtcsId = 0u; /*ͷʶ*/ UINT32 RemoteEtcsId = 0u; /*շʶ*/ UINT32 emapVer = 0U;/*Ӧʹõĵӵͼ汾*/ - UINT8 emapCheckVer = 0U; /*ӵͼ汾У*/ + UINT8 emapCheckVer = CI_ERROR; /*ӵͼ汾ȡ*/ UINT8 chRet = 0U; /*ÿζ*/ @@ -109,29 +109,65 @@ UINT8 HLHTRecvCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, U ; } - /*ͷУ*/ - chRet = dquDevName2HlhtId(LocalDevName, logId, &LocalEtcsId); - if ((CI_ERROR == chRet) || (pMICommonPackage->sourceId != LocalEtcsId)) + + if ((CI_SYSTEM_TYPE_OC == devType) || (CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType)) { - *pErrorCode |= GAL_COMPARE_SEND_FLAG_ERR; + /*OC/ֵ/ATS޻ͨID*/ + if ((UINT16)(pMICommonPackage->sourceId & 0x0000FFFFU) != LocalDevName) + { + *pErrorCode |= GAL_COMPARE_SEND_FLAG_ERR; + } + else + { + ; + } + if((UINT16)(pMICommonPackage->destId & 0x0000FFFFU) != RemoteDevName) + { + *pErrorCode |= GAL_COMPARE_RECV_FLAG_ERR; + } + else + { + ; + } } else { - ; + /*ͷУ*/ + chRet = dquDevName2HlhtId(LocalDevName, logId, &LocalEtcsId); + if ((CI_ERROR == chRet) || (pMICommonPackage->sourceId != LocalEtcsId)) + { + *pErrorCode |= GAL_COMPARE_SEND_FLAG_ERR; + } + else + { + ; + } + /*շУ*/ + chRet = dquDevName2HlhtId(RemoteDevName, logId, &RemoteEtcsId); + if ((CI_ERROR == chRet) || (pMICommonPackage->destId != RemoteEtcsId)) + { + *pErrorCode |= GAL_COMPARE_RECV_FLAG_ERR; + } + else + { + ; + } } - /*շУ*/ - chRet = dquDevName2HlhtId(RemoteDevName, logId, &RemoteEtcsId); - if ((CI_ERROR == chRet) || (pMICommonPackage->destId != RemoteEtcsId)) + if ((CI_SYSTEM_TYPE_CI == devType) || (CI_SYSTEM_TYPE_RC == devType)) { - *pErrorCode |= GAL_COMPARE_RECV_FLAG_ERR; + emapVer = GetCiTranCiDataCheckVer((UINT8)(RemoteDevName & 0x00FFU), LocalDevName); + emapCheckVer = CI_SUCCESS; + } + else if (CI_SYSTEM_TYPE_OC == devType) + { + emapVer = GetCiTranOcDataCheckVer((UINT8)(RemoteDevName & 0x00FFU), LocalDevName); + emapCheckVer = CI_SUCCESS; } else { - ; + emapCheckVer = GetCiEmapCheckVer((UINT8)RemoteDevName, &emapVer, devType); } - - emapCheckVer = GetCiEmapCheckVer((UINT8)RemoteDevName, &emapVer, devType); if (CI_SUCCESS == emapCheckVer) { /*ӵͼ汾УϢ(4ֽCRCȽ)*/ diff --git a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.c b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.c index c34711f..f95da40 100644 --- a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.c +++ b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.c @@ -15,15 +15,20 @@ #include "../2oo2/2oo2InterfaceDataManage.h" #include "CommonMemory.h" -HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX]={0};/*뱾CIͨŵCIͨͷ*/ -HLHTHeadContextStru vobcHLHTHeadCtxs[VOBC_SUM_MAX]={0};/*뱾CIͨŵVOBCͨͷ*/ -HLHTHeadContextStru vobcBackupHLHTHeadCtxs[VOBC_BACKUP_SUM_MAX] = { 0 };/*뱾CIͨŵĺģʽVOBCͨͷ*/ -HLHTHeadContextStru zcHLHTHeadCtxs[ZC_SUM_MAX]={0};/*뱾CIͨŵZCͨͷ*/ -HLHTHeadContextStru ocHLHTHeadCtxs[OC_SUM_MAX]={0};/*뱾CIͨŵOCͨͷ*/ -HLHTHeadContextStru axleHLHTHeadCtxs[AXLE_SUM_MAX] = { 0 };/*뱾CIͨŵļϵͳͨͷ*/ -HLHTHeadContextStru tmcHLHTHeadCtxs[TMC_SUM_MAX] = { 0 };/*뱾TIOCͨŵTMCͨͷ*/ +HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX]={0U};/*뱾ͨŵCIͨͷ*/ +HLHTHeadContextStru gSzRcHLHTHeadCtxs[CI_SUM_MAX] = { 0U }; /*뱾ͨŵRCͨͷ*/ +HLHTHeadContextStru vobcHLHTHeadCtxs[VOBC_SUM_MAX]={0U};/*뱾CIͨŵVOBCͨͷ*/ +HLHTHeadContextStru vobcBackupHLHTHeadCtxs[VOBC_BACKUP_SUM_MAX] = { 0U };/*뱾CIͨŵĺģʽVOBCͨͷ*/ +HLHTHeadContextStru zcHLHTHeadCtxs[ZC_SUM_MAX]={0U};/*뱾CIͨŵZCͨͷ*/ +HLHTHeadContextStru ocHLHTHeadCtxs[OC_SUM_MAX]={0U};/*뱾CIͨŵOCͨͷ*/ +HLHTHeadContextStru ocHLHTHeadCtxsCiToRc[OC_SUM_MAX] = { 0U };/*ͬCIͨ-OCͨͷ*/ +HLHTHeadContextStru axleHLHTHeadCtxs[AXLE_SUM_MAX] = { 0U };/*뱾CIͨŵļϵͳͨͷ*/ +HLHTHeadContextStru gSzRcAxleHLHTHeadCtxs[AXLE_SUM_MAX] = { 0U };/*RCͨŵļϵͳͨͷ*/ +HLHTHeadContextStru tmcHLHTHeadCtxs[TMC_SUM_MAX] = { 0U };/*뱾TIOCͨŵTMCͨͷ*/ HLHTHeadContextStru IteHLHTHeadCtxs[ITE_SUM_MAX][VOBC_INC_ITE_SUM_MAX] = { 0U };/*뱾TIOCͨŵITEͨͷ*/ - +HLHTHeadContextStru gSzXiandiHLHTHeadCtxs[ATS_SUM_MAX] = { 0U };/*뱾CIͨŵֵػͨͷ*/ +HLHTHeadContextStru gSzAtsHLHTHeadCtxs[ATS_SUM_MAX] = { 0U };/*뱾CIͨŵATSͨͷ*/ +HLHTHeadContextStru vobcToRcHLHTHeadCtxs[VOBC_SUM_MAX] = { 0 };/*RCģʽ£뱾RCͨŵ510 VOBCͨͷݡCIģʽ²ʹ*/ /* * :غij豸͵ںĻͨͷ * ˵: @@ -417,6 +422,7 @@ void ProcHlhtHeadCtxTimeOut(void) { UINT32 timeoutSnCount = 0U; UINT32 timeoutSpan = 0U; + UINT8 chSystemWorkType = GetSystemWorkType();; /*ϵͳ*/ /*VOBCͨñͷʱЧ*/ timeoutSnCount = GetCiAndVobcTransBadEnsureCnt(); @@ -436,6 +442,11 @@ void ProcHlhtHeadCtxTimeOut(void) timeoutSpan = GetCiAndCiTransmitBadEnsureTime(); ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, ciHLHTHeadCtxs, CI_SUM_MAX); + /*RCͨñͷʱЧ*/ + timeoutSnCount = GetCiAndCiTransBadEnsureCnt(); + timeoutSpan = GetCiAndCiTransmitBadEnsureTime(); + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, gSzRcHLHTHeadCtxs, CI_SUM_MAX); + /*CIͨŵZCͨñͷʱЧ*/ timeoutSnCount = GetCiAndZcTransBadEnsureCnt(); timeoutSpan = GetCiAndZcTransmitBadEnsureTime(); @@ -451,10 +462,38 @@ void ProcHlhtHeadCtxTimeOut(void) timeoutSpan = GetCiAndOcTransmitBadEnsureTime(); ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, ocHLHTHeadCtxs, OC_SUM_MAX); +#if 0 + /*ҪCIͬ Ҫںж*/ + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, ocHLHTHeadCtxsCiToRc, OC_SUM_MAX); +#endif /*AXLEͨűͷʱЧ*/ timeoutSnCount = GetCiAndAxleTransBadEnsureCnt(); timeoutSpan = GetCiAndAxleTransBadEnsureTime(); ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, axleHLHTHeadCtxs, AXLE_SUM_MAX); + if ((SYSTEM_WORK_MODE_ALL == chSystemWorkType) && (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI)) + { + /*˫ϵͳRCҪRCͨñͷ*/ + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, gSzRcAxleHLHTHeadCtxs, AXLE_SUM_MAX); + } + else + { + ; + } + + /*ֵͨűͷʱЧ*/ + timeoutSnCount = GetCiAndAtsTransBadEnsureCnt(); + timeoutSpan = GetCiAndAtsTransBadEnsureTime(); + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, gSzXiandiHLHTHeadCtxs, ATS_SUM_MAX); + + /*ATSͨűͷʱЧ*/ + timeoutSnCount = GetCiAndAtsTransBadEnsureCnt(); + timeoutSpan = GetCiAndAtsTransBadEnsureTime(); + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, gSzAtsHLHTHeadCtxs, ATS_SUM_MAX); + + /*VOBCͨñͷʱЧ*/ + timeoutSnCount = GetCiAndVobcTransBadEnsureCnt(); + timeoutSpan = GetCiAndVobcTransBadEnsureTime(); + ProcHlhtHeadCtxTimeOutDiffSys(timeoutSnCount, timeoutSpan, vobcToRcHLHTHeadCtxs, VOBC_SUM_MAX); } /* * 豸ͣþ߱ʼͨŻͨͷ豸ID @@ -537,18 +576,43 @@ static UINT8 GetHLHTHeadCtxTmepVars(const UINT8 devType, UINT16 *devMaxSum, HLHT UINT8 retVal = CI_ERROR; UINT16 maxDevSum = 0u; HLHTHeadContextStru *tempHeadCtxPtr = NULL; + UINT8 chSystemWorkType = GetSystemWorkType();; /*ϵͳ*/ + UINT8 cRcWorkMode = 0U;/*ϵͳǰģʽ*/ - if ((CI_SYSTEM_TYPE_CI == devType)) + cRcWorkMode = GetLocalRcWorkMode(); + + if (CI_SYSTEM_TYPE_CI == devType) { maxDevSum = CI_SUM_MAX; tempHeadCtxPtr = ciHLHTHeadCtxs; retVal = CI_SUCCESS; } + else if (CI_SYSTEM_TYPE_RC == devType) + { + maxDevSum = CI_SUM_MAX; + tempHeadCtxPtr = gSzRcHLHTHeadCtxs; + + retVal = CI_SUCCESS; + } else if (CI_SYSTEM_TYPE_VOBC == devType) { maxDevSum = VOBC_SUM_MAX; - tempHeadCtxPtr = vobcHLHTHeadCtxs; + if (RC_WORK_MODE_CI == cRcWorkMode) + { + tempHeadCtxPtr = vobcHLHTHeadCtxs; + } + else + {/*RCģʽ*/ + tempHeadCtxPtr = vobcToRcHLHTHeadCtxs; + } + + retVal = CI_SUCCESS; + } + else if (CI_SYSTEM_TYPE_IVOC == devType) + { + maxDevSum = VOBC_SUM_MAX; + tempHeadCtxPtr = vobcHLHTHeadCtxs; retVal = CI_SUCCESS; } @@ -576,8 +640,15 @@ static UINT8 GetHLHTHeadCtxTmepVars(const UINT8 devType, UINT16 *devMaxSum, HLHT else if (CI_SYSTEM_TYPE_AXIS == devType) { maxDevSum = AXLE_SUM_MAX; - tempHeadCtxPtr = axleHLHTHeadCtxs; - + if((SYSTEM_WORK_MODE_ALL == chSystemWorkType) && (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI)) + { + tempHeadCtxPtr = gSzRcAxleHLHTHeadCtxs; + } + else + { + tempHeadCtxPtr = axleHLHTHeadCtxs; + } + retVal = CI_SUCCESS; } else if (CI_SYSTEM_TYPE_TMC == devType) @@ -587,6 +658,20 @@ static UINT8 GetHLHTHeadCtxTmepVars(const UINT8 devType, UINT16 *devMaxSum, HLHT retVal = CI_SUCCESS; } + else if (CI_SYSTEM_TYPE_XIANDI == devType) + { + maxDevSum = ATS_SUM_MAX; + tempHeadCtxPtr = gSzXiandiHLHTHeadCtxs; + + retVal = CI_SUCCESS; + } + else if (CI_SYSTEM_TYPE_ATS == devType) + { + maxDevSum = ATS_SUM_MAX; + tempHeadCtxPtr = gSzAtsHLHTHeadCtxs; + + retVal = CI_SUCCESS; + } else { retVal = CI_ERROR; @@ -652,7 +737,7 @@ static void ProcHlhtHeadCtxTimeOutDiffSys(const UINT32 timeoutSnCount, const UIN if (0u == headValid) { - if (headCtxs == axleHLHTHeadCtxs) /*ϵͳжʱ,GALԷ,յԷʱ,0xFFFFFFFF*/ + if ((headCtxs == axleHLHTHeadCtxs) || (headCtxs == gSzRcAxleHLHTHeadCtxs)) /*ϵͳжʱ,GALԷ,յԷʱ,0xFFFFFFFF*/ { headCtxs[i].logId = 0u; headCtxs[i].sourceRecvOppMsgSN = 0u; @@ -1182,4 +1267,27 @@ void ProcIteHlhtHeadCtxTimeOut(const UINT32 dwTimeoutSnCount, const UINT32 dwTim } } } +} + +/* +* ȡָocCI-RCͬͨͷ +* ˵const UINT8 oc ID +* ֵNULL ȡʧ +* NULL ȡݳɹ +* Created By fan 2025.11.12 +*/ +HLHTHeadContextStru* GetCiToRcHLHTOcHeadCtx(const UINT8 ocId) +{ + HLHTHeadContextStru* pstrRetVal = NULL; + + if ((0U < ocId) && (OC_SUM_MAX > ocId)) + { + pstrRetVal = &ocHLHTHeadCtxsCiToRc[ocId]; + } + else + { + /**/ + } + + return pstrRetVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.h b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.h index 2cc1fa0..18ddc48 100644 --- a/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.h +++ b/TSCP/src/APP/ciapp/HLHTMsgHead/HLHTHeadContexManage.h @@ -38,15 +38,20 @@ extern "C" { } HLHTHeadContextStru; /*******************************ȫֱ*******************************/ - extern HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX];/*뱾CIͨŵCIͨͷ*/ + extern HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX];/*뱾ͨŵCIͨͷ*/ + extern HLHTHeadContextStru gSzRcHLHTHeadCtxs[CI_SUM_MAX]; /*뱾ͨŵRCͨͷ*/ extern HLHTHeadContextStru vobcHLHTHeadCtxs[VOBC_SUM_MAX];/*뱾CIͨŵVOBCͨͷ*/ extern HLHTHeadContextStru vobcBackupHLHTHeadCtxs[VOBC_BACKUP_SUM_MAX];/*뱾CIͨŵĺģʽVOBCͨͷ*/ extern HLHTHeadContextStru zcHLHTHeadCtxs[ZC_SUM_MAX];/*뱾CIͨŵZCͨͷ*/ extern HLHTHeadContextStru ocHLHTHeadCtxs[OC_SUM_MAX];/*뱾CIͨŵOCͨͷ*/ + extern HLHTHeadContextStru ocHLHTHeadCtxsCiToRc[OC_SUM_MAX];/*뱾CIͨŵOCͨͷ*/ extern HLHTHeadContextStru axleHLHTHeadCtxs[AXLE_SUM_MAX];/*뱾CIͨŵļϵͳͨͷ*/ + extern HLHTHeadContextStru gSzRcAxleHLHTHeadCtxs[AXLE_SUM_MAX];/*RCͨŵļϵͳͨͷ*/ extern HLHTHeadContextStru tmcHLHTHeadCtxs[TMC_SUM_MAX];/*뱾TIOCͨŵTMCͨͷ*/ extern HLHTHeadContextStru IteHLHTHeadCtxs[ITE_SUM_MAX][VOBC_INC_ITE_SUM_MAX];/*뱾TIOCͨŵITEͨͷ*/ - + extern HLHTHeadContextStru gSzXiandiHLHTHeadCtxs[ATS_SUM_MAX]; /*뱾CIͨŵֵػͨͷ*/ + extern HLHTHeadContextStru gSzAtsHLHTHeadCtxs[ATS_SUM_MAX]; /*뱾CIͨŵATSͨͷ*/ + extern HLHTHeadContextStru vobcToRcHLHTHeadCtxs[VOBC_SUM_MAX];/*RCģʽ£뱾RCͨŵ510 VOBCͨͷݡCIģʽ²ʹ*/ /* * :ȡij豸һθCIʱ䵱ǰ * ˵: @@ -285,6 +290,14 @@ extern "C" { * Created By LQ 2024.06.11 */ void ProcIteHlhtHeadCtxTimeOut(const UINT32 dwTimeoutSnCount, const UINT32 dwTimeoutSpan); + /* + * ȡָocCI-RCͬͨͷ + * ˵const UINT8 oc ID + * ֵNULL ȡʧ + * NULL ȡݳɹ + * Created By fan 2025.11.12 + */ + HLHTHeadContextStru* GetCiToRcHLHTOcHeadCtx(const UINT8 ocId); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c index 8734fe7..f2cfca5 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) @@ -361,6 +362,10 @@ void OcSwitchDeviceOutput(void) chSwitchJichaState = GetSwitchPrompylyAlarmInfo(switchId); /*ֻо̬Ͷ̬ãòһֱΪ0*/ SetSwitchJichaState(switchId, chSwitchJichaState); + + /*OCת޻ʶ״̬ */ + SetOcSwitchIndicatorLightStatus(switchId); + } } } @@ -517,6 +522,9 @@ void OcSwitchDeviceInput(void) /*еλ*/ SetAllSingleSwitchCurPosition(switchCurSum); + /*еת޻״̬*/ + SetAllSingleSwitchZzjState(switchCurSum); + /*õǰ߼λ*/ UpdataSwitchCurPostion(switchCurSum); @@ -546,7 +554,6 @@ void OcSignalDeviceOutput(void) UINT32 signalDriCloseStartCyc = 0U;/*źŻرʼ*/ UINT32 signalDriCloseTimeCount = 0U;/*źŻرճʱ*/ UINT8 driveRetVal = 0U; - UINT32 jkjValidCycNum = 0u; UINT8 jkjRelayValidFlag = 0u; signalCurSum = GetSignalCurSum(); /*ȡźŻ*/ @@ -570,10 +577,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 +677,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 +724,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 +786,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 +823,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 +894,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 +903,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 +933,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 +943,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 +969,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 +985,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 +1140,9 @@ void OcSignalDeviceInput(void) UINT8 addCiToCiCmdFlag = CI_ERROR; /*Ƿ*/ UINT32 signalDriveNewSigStartCyc = 0u; /*źŻźʼں*/ UINT32 signalDiffCyc = 0U; /*źſɫһ*/ + UINT8 cFuncRet = 0U; + + UINT8 cControlState = GetLocalCiBackUpPattern(); curCycNum= Get2oo2CurCycleNum(); signalCurSum = GetTotalSignalCurNum(); /*ȡźŻ*/ @@ -1114,6 +1177,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 +1200,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 +1222,7 @@ void OcSignalDeviceInput(void) { SignalZfsDetainBtnPro(signalId); SignalZfsCancelDetainBtnPro(signalId); + SignalZfsDetainCutBtnPro(signalId); signalDetainBtnActFlag = GetSignalDetainBtnActFlag(signalId); if (SIGNAL_ZFS_BTN_ACT_FLAG_NO != signalDetainBtnActFlag) { @@ -1181,8 +1265,11 @@ void OcSignalDeviceInput(void) } else { - /*źŻЧ*/ - SetSignalCurDriveColor(signalId, SIGNAL_DRIVECOLOUR_NULL); + if (SYSTEM_WORK_MODE_MAIN == cControlState) + { + /*źŻЧ*/ + SetSignalCurDriveColor(signalId, SIGNAL_DRIVECOLOUR_NULL); + } } /*õǰʾɫ*/ @@ -1606,15 +1693,13 @@ void DetZfsCancelBtnActFlagProc(const UINT16 wSignalId, const UINT16 wCancelDetB /******************************OC spksָʾ****************************/ /* -* OC spksָʾƺspks·ָʾ +* OC spksָʾơspks·ָʾƼ̵ * ˵ void * ֵ void */ 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 +1711,10 @@ void SpksDisplayDrivOutput(void) UINT32 spksflockStartNum = 0u; UINT32 dwSpksIndicDelayCount = 0u; UINT8 checkCycOut = 0u; + UINT8 cSpksState = 0U; + UINT16 wSpksBuzzRelayId = 0U; + UINT16 wSpksCutBuzzRelayId = 0U; + UINT8 chRelayDriveState = 0U;/*̵ǰ״̬*/ spksCurSum = GetSpksSum(); /*ȡspksĬΪÿspksжӦָʾ*/ chLocalCiId = GetSystemParaLocalCiId(); /*ȡID*/ @@ -1644,14 +1733,12 @@ 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*/ cutSpksDisplayId = GetSpksCutDisRelayId(spksId); /*spks IDȡspks·ָʾID*/ - + wSpksBuzzRelayId = GetSpksBuzzRelayId(spksId);/*ȡ̵ID*/ + wSpksCutBuzzRelayId = GetSpksCutBuzzRelayId(spksId);/*ȡг̵ID*/ devBlongCiId = GetSpksBelongCiId(spksId); /*ȡ豸ID*/ if ((0u != cutSpksId) && (UINT16_MAX != cutSpksId)) @@ -1666,26 +1753,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); /*ָʾ*/ @@ -1719,6 +1804,64 @@ void SpksDisplayDrivOutput(void) /*spksָʾ*/ spksflockStartNum = GetSpksflockStartNum(spksId); SpksOutsideDisPlayDriv(spksId,spksflockStartNum); + + /*SPKS̵*/ + if ((0u != wSpksBuzzRelayId) && (UINT16_MAX != wSpksBuzzRelayId)) + { + /*״̬*/ + chRelayDriveState = GetRelayDriveState(wSpksBuzzRelayId); + /*spksЧ*/ + if ((SPKS_STATUS_YES == cSpksState)&&(RELAY_STATE_UP != tmpCutRelayColState))/*δ·*/ + { + /**/ + (void)SetRelayDriveState(wSpksBuzzRelayId, RELAY_DRIVE_STATE_UP); + } + else + { + /*û*/ + if (RELAY_DRIVE_STATE_NULL == chRelayDriveState) + { + /**/ + (void)SetRelayDriveState(wSpksBuzzRelayId, RELAY_DRIVE_STATE_DOWN); + } + else + { + ;/**/ + } + } + } + else + { + ;/*spks޷̵*/ + } + /*SPKSг̵*/ + if ((0u != wSpksCutBuzzRelayId) && (UINT16_MAX != wSpksCutBuzzRelayId)) + { + /*̵״̬*/ + chRelayDriveState = GetRelayDriveState(wSpksCutBuzzRelayId); + if ((SPKS_STATUS_YES == cSpksState) && (RELAY_STATE_UP != tmpCutRelayColState))/*δ·*/ + { + /*ԭ*/ + (void)SetRelayDriveState(wSpksCutBuzzRelayId, RELAY_DRIVE_STATE_DOWN); + } + else + { + /*û*/ + if (RELAY_DRIVE_STATE_NULL == chRelayDriveState) + { + /**/ + (void)SetRelayDriveState(wSpksCutBuzzRelayId, RELAY_DRIVE_STATE_UP); + } + else + { + ;/**/ + } + } + } + else + { + ;/*spks޷г̵*/ + } } else { @@ -1950,45 +2093,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 +2231,7 @@ void DetainDisplayDrivOutput(void) else { /*Ըʽ۳ťʾƴ*/ - DriveZfsDetainBsRelay(signalId, signalDetainDisplayId); + DriveZfsDetainBsRelay(signalId, signalDetainDisplayId, cutDetainDisplayId); } } else @@ -2125,7 +2266,7 @@ void DetainDisplayDrivOutput(void) else { /*Ըʽ۳ťʾƴ*/ - DriveZfsDetainBsRelay(signalId, signalDetainDisplayId); + DriveZfsDetainBsRelay(signalId, signalDetainDisplayId, cutDetainDisplayId); } } } @@ -2150,6 +2291,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 +2324,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 +2356,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 +2382,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 +2847,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 +2866,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 +2894,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,12 +6144,16 @@ 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; /*Ḵλʱ*/ + UINT8 chCurSystemAreaState = 0U; /*ϵͳǰ״̬*/ localCi = GetSystemParaLocalCiId(); relayZFWId = GetZFWRelayId(localCi); /*ܸλ̵ID*/ retGeneralResetFlag = GetPhySecGeneralResetFlag(); /*ȡμܸλ̵״̬Ч*/ + chCurSystemAreaState = GetLocalCiBackUpPattern(); + if (relayZFWId > 0u) { relayZFWState = GetRelayCollState(relayZFWId); /*ZFWJ̵ɼ״̬*/ @@ -6076,14 +6280,27 @@ void PhySecResetToRelayStateProc(void) retValid = CI_ERROR; /*ܸλ̵״̬ЧֵλΪЧ*/ phySecId = GetPhySecId(ii);/*ȡID*/ + + if (SYSTEM_WORK_MODE_MAIN != chCurSystemAreaState) + { + /*ǰϵͳΪϵüḴλʼںΪ0Ḵλ*/ + SetPhySecResetStartCycNum(phySecId, 0U); + } + else + { + ; + } + 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 +6308,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 +6331,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);/*Ḵλʧܣܸλ̵*/ } } @@ -6437,18 +6644,17 @@ void PsdRelayToDeviceStateProc(void) UINT8 chPsdCloseState = 0U; UINT8 chPsdClose2State = 0U; UINT8 chPsdButtonState = 0U; - UINT8 chPsdReOpenRelayState = 0U; UINT8 reVal = CI_SUCCESS; UINT8 relayCollState = 0u; UINT8 buttonState = 0u; UINT32 buttonPressCycNum = 0U; UINT32 curCycNum = 0U; - UINT8 chPsdVirtualState = 0U; UINT32 dwCycNum = 0U; UINT8 chDsnLinSwitch = 0U; - - + UINT8 cFuncRet = 0U; + UINT16 wpsdReopenButtonRelayId2 = 0U; + UINT8 relayCollState2 = 0U; chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); psdSum = GetPsdSum(); @@ -6523,41 +6729,52 @@ void PsdRelayToDeviceStateProc(void) if (CI_SUCCESS == reVal) { psdReopenButtonRelayId = GetPsdReOpenRelayId(psdId); + wpsdReopenButtonRelayId2 = GetPsdReOpenRelayId2(psdId); /*ſŰť״̬*/ if ((0u != psdReopenButtonRelayId) && (UINT16_MAX != psdReopenButtonRelayId)) {/*վ̨Űť̵IDЧ*/ relayCollState = GetRelayCollState(psdReopenButtonRelayId); - if (RELAY_STATE_UP == relayCollState) - { - buttonPressCycNum = GetPOBPressCycNum(psdId); - curCycNum = Get2oo2CurCycleNum(); - if (0U == buttonPressCycNum) - {/*δʱʼ*/ - (void)SetPOBPressCycNum(psdId, curCycNum); - } - buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_VALID); - if (CI_ERROR == buttonState) - { - reVal = CI_ERROR; - } + } + else + { + relayCollState = RELAY_STATE_DOWN; + } + if ((0u != wpsdReopenButtonRelayId2) && (UINT16_MAX != wpsdReopenButtonRelayId2)) + { + relayCollState2 = GetRelayCollState(wpsdReopenButtonRelayId2); + + } + else + { + relayCollState2 = RELAY_STATE_DOWN; + } + if ((RELAY_STATE_UP == relayCollState) || (RELAY_STATE_UP == relayCollState2)) + { + buttonPressCycNum = GetPOBPressCycNum(psdId); + curCycNum = Get2oo2CurCycleNum(); + if (0U == buttonPressCycNum) + {/*δʱʼ*/ + (void)SetPOBPressCycNum(psdId, curCycNum); } - else if (RELAY_STATE_DOWN == relayCollState) + buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_VALID); + if (CI_ERROR == buttonState) { - (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ - buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_INVALID); - if (CI_ERROR == buttonState) - { - reVal = CI_ERROR; - } + reVal = CI_ERROR; } - else + } + else if ((RELAY_STATE_DOWN == relayCollState) && (RELAY_STATE_DOWN == relayCollState2)) + { + (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ + buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_INVALID); + if (CI_ERROR == buttonState) { - (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ reVal = CI_ERROR; } } else - {/*Щ·PSDÿŰť̵continueִ*/ + { + (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ + reVal = CI_ERROR; } } @@ -6656,21 +6873,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 @@ -6774,32 +6986,52 @@ void PsdRelayToDeviceStateProc(void) if (reVal == CI_SUCCESS) { psdReopenButtonRelayId = GetPsdReOpenRelayId(psdId); + wpsdReopenButtonRelayId2 = GetPsdReOpenRelayId2(psdId); /*ſŰť״̬*/ if ((0u != psdReopenButtonRelayId) && (UINT16_MAX != psdReopenButtonRelayId)) {/*վ̨Űť̵IDЧ*/ - chPsdReOpenRelayState = GetRelayCollState(psdReopenButtonRelayId); - if (RELAY_STATE_UP == chPsdReOpenRelayState) - { - dwCycNum = GetPOBPressCycNum(psdId); - if (0u == dwCycNum) - {/*δʱʼ*/ - (void)SetPOBPressCycNum(psdId, Get2oo2CurCycleNum()); - } - reVal = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_VALID); + relayCollState = GetRelayCollState(psdReopenButtonRelayId); + } + else + { + relayCollState = RELAY_STATE_DOWN; + } + if ((0u != wpsdReopenButtonRelayId2) && (UINT16_MAX != wpsdReopenButtonRelayId2)) + { + relayCollState2 = GetRelayCollState(wpsdReopenButtonRelayId2); + + } + else + { + relayCollState2 = RELAY_STATE_DOWN; + } + if ((RELAY_STATE_UP == relayCollState) || (RELAY_STATE_UP == relayCollState2)) + { + buttonPressCycNum = GetPOBPressCycNum(psdId); + curCycNum = Get2oo2CurCycleNum(); + if (0U == buttonPressCycNum) + {/*δʱʼ*/ + (void)SetPOBPressCycNum(psdId, curCycNum); } - else if (RELAY_STATE_DOWN == chPsdReOpenRelayState) + buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_VALID); + if (CI_ERROR == buttonState) { - (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ - reVal = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_INVALID); + reVal = CI_ERROR; } - else + } + else if ((RELAY_STATE_DOWN == relayCollState) && (RELAY_STATE_DOWN == relayCollState2)) + { + (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ + buttonState = SetPsdOpenButtonState(psdId, PSD_OPEN_BUTTON_STATE_INVALID); + if (CI_ERROR == buttonState) { - (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ reVal = CI_ERROR; } } else - {/*Щ·PSDÿŰť̵continueִ*/ + { + (void)SetPOBPressCycNum(psdId, 0u); /*POBʼں*/ + reVal = CI_ERROR; } } @@ -7045,6 +7277,11 @@ UINT8 PsdDeviceToRelayStateProc(void) {/*˱*/ psdKMRelayId = GetEightGroupPsdOpenDrvRelayId(psdId); } + else if (PSD_THREE_EDIT_GROUP == psdEditGroupInfo) + { + /**/ + psdKMRelayId = GetThreeGroupPsdOpenDrvRelayId(psdId); + } else {/*Ч*/ psdKMRelayId = 0u; @@ -7094,6 +7331,16 @@ UINT8 PsdDeviceToRelayStateProc(void) reVal = CI_ERROR; } } + tmpPsdKMRelayId = GetThreeGroupPsdOpenDrvRelayId(psdId); + if (tmpPsdKMRelayId > 0u) + { + /*пż̵*/ + relayFlag = SetRelayDriveState(tmpPsdKMRelayId, RELAY_DRIVE_STATE_DOWN); + if (CI_ERROR == relayFlag) + {/*ż̵*/ + reVal = CI_ERROR; + } + } } } @@ -7162,6 +7409,16 @@ UINT8 PsdDeviceToRelayStateProc(void) reVal = CI_ERROR; } } + tmpPsdKMRelayId = GetThreeGroupPsdOpenDrvRelayId(psdId); + if (tmpPsdKMRelayId > 0u) + { + /*пż̵*/ + relayFlag = SetRelayDriveState(tmpPsdKMRelayId, RELAY_DRIVE_STATE_DOWN); + if (CI_ERROR == relayFlag) + {/*ż̵*/ + reVal = CI_ERROR; + } + } } } else @@ -7834,6 +8091,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 +8123,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 +8218,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 +8234,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) @@ -8297,7 +8565,6 @@ UINT8 GaragedoorRelayToDevStaProc(void) gdOpenRelayState = GetRelayCollState(garagedoorOpenRelayId); gdCloseRelayState = GetRelayCollState(garagedoorCloseRelayId); - gdKGHRelayState = GetRelayCollState(garagedoorKGHRelayId); gdPangLuRelayState = GetRelayCollState(garagedoorPangLuRelayId); gdGuZhangRelayState = GetRelayCollState(garagedoorFaultRelayId); gdModeRelayState = GetRelayCollState(garagedoorModeRelayId); @@ -8316,6 +8583,15 @@ UINT8 GaragedoorRelayToDevStaProc(void) * ſ: ſ̵ Źؼ̵ Ź: ſ̵ Źؼ̵ */ + if ((0U < garagedoorKGHRelayId) && (UINT16_MAX > garagedoorKGHRelayId)) + {/*˿غڵ̵*/ + gdKGHRelayState = GetRelayCollState(garagedoorKGHRelayId); + } + else + {/*δÿغڵ̵*/ + gdKGHRelayState = RELAY_STATE_DOWN; + } + /*ſ*/ if ((RELAY_STATE_DOWN == gdOpenRelayState) && (RELAY_STATE_UP == gdCloseRelayState) && (RELAY_STATE_DOWN == gdKGHRelayState) && (RELAY_STATE_DOWN == gdPangLuRelayState)) @@ -10201,122 +10477,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 +10592,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 +12107,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 +12143,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 +12201,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 +12225,7 @@ void EsbRelateDelayDriveOutputProc(void) } } - /*ԸʽESBг̵״̬*/ + /*2.ԸʽESBг̵״̬*/ esbCutoffBuzzRelayId = GetEsbCutoffBuzzRelayId(esbId); if ((0U < esbCutoffBuzzRelayId) && (UINT16_MAX > esbCutoffBuzzRelayId)) { @@ -11999,7 +12246,7 @@ void EsbRelateDelayDriveOutputProc(void) } } } - else /*ԸʽESB̵*/ + else /*ԸʽESBESB̵*/ { /*ȡ·ť״̬ESB״̬*/ esbCutState = GetEsbCutState(esbId); @@ -14313,6 +14560,75 @@ void SetAllSingleSwitchCurPosition(UINT16 switchCurSum) } } +/* +* еת޻λ +* ˵ UINT16 switchCurSum +* ֵ +*/ +void SetAllSingleSwitchZzjState(UINT16 switchCurSum) +{ + UINT16 belongOcId = 0u; /*oc ID*/ + UINT16 switchId = 0U; /*ID*/ + UINT16 ii = 0U; /*ѭ*/ + UINT16 jj = 0U; /*ѭ*/ + UINT8 flagFind = 0u; + UINT16 indexFind = 0u; + + UINT8 chSwitchIncldeZzjNum = 0u; /*Ӧת޻Ŀ豸ΪźŻʱ,˸Ϊ0*/ + UINT8 szSwitchIncldeZzjState[MAX_OC_SWITCH_INCLUDE_ZZJ_NUM] = { 0 };/*ת޻״̬*/ + + + for (ii = 0U; ii < switchCurSum; ii++) + { + switchId = GetSwitchId(ii); /*ȡID*/ + belongOcId = GetSwitchBelongOcId(switchId);/*ȡOc id*/ + if ((0u < belongOcId) && (OC_SUM_MAX > belongOcId)) + { + for (jj = 0u; jj < m_SwitchNum; jj++) + { + if (m_Switches[jj].DeviceId == switchId) + { + flagFind = 1u; + indexFind = jj; + break; + } + } + } + else + { + ;/**/ + } + if (1u == flagFind) /*ҵ*/ + { + flagFind = 0u; + chSwitchIncldeZzjNum = m_Switches[indexFind].chSwitchIncldeZzjNum; + if (0u == chSwitchIncldeZzjNum) + { + /* */ + } + else + { + for (jj = 0U; jj < MAX_OC_SWITCH_INCLUDE_ZZJ_NUM; jj++) + { + szSwitchIncldeZzjState[jj] = 0u; + } + for (jj = 0U; jj < chSwitchIncldeZzjNum; jj++) + { + szSwitchIncldeZzjState[jj] = m_Switches[indexFind].szSwitchIncldeZzjState[jj]; + } + + /* ϣʼ붯̬ṹ*/ + SetOcSwitchZzjState(switchId, chSwitchIncldeZzjNum, szSwitchIncldeZzjState); + } + } + else + { + /*δҵ*/ + } + } +} + + /* * õǰ߼λ * ˵ UINT16 switchCurSum @@ -15016,7 +15332,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 +15368,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 +15382,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 +15395,7 @@ UINT8 GetSwitchCollToleratePos(const UINT16 switchId) else { retPos = chSwitchColPos;/*ʱ*/ + SetSwitchCollTolerateCycNum(switchId, 0u); } return retPos; } @@ -15097,14 +15413,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 +15455,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 +15470,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..f693f57 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); @@ -353,7 +354,7 @@ void ProcessJXTCPulseInterfStopDrv(UINT16 startJXTCRelayId, UINT16 stopJXTCRelay /******************************OC spksָʾ****************************/ /* -* OC spksָʾƺspks·ָʾ +* OC spksָʾơspks·ָʾƼ̵ * ˵ void * ֵ 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,142 @@ 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); + +/* +* еת޻λ +* ˵ UINT16 switchCurSum +* ֵ +*/ +void SetAllSingleSwitchZzjState(UINT16 switchCurSum); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.c b/TSCP/src/APP/ciapp/IO/InputDataProcess.c index f2f9167..509ef07 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.c @@ -235,6 +235,84 @@ static void VobcBackUpConnectDataProc(VobcBackUpToCiDataStruct* vobcToCiDataStru * fan 20240815 */ static void BackupStopSteadyDataProc(VobcBackUpToCiDataStruct* vobcToCiDataStru); + +/* +* ˢг +* ˵ stvobcToRcDataVOBCݽṹָ +* ֵ void +*/ +static void VobcInputRefreshTrain(const VobcToRcDataStruct stvobcToRcData); + +/* +* VobcгϢ +* ˵ UINT16 wTrainIdVOBCid +* ֵ void +*/ +static void VobcToRcDataClear(const UINT16 wTrainId); + +/* +* RCģʽVOBCRC +* ˵ void +* ֵ void +*/ +static void ProcessVobcToRcData(void); + + +/** +* @brief ͣͣϢں +* @param[in] void +* @return +*/ +static void PhySecStopSteadyMergeDeal(void); + +/** +* @brief ſں +* @param[in] void +* @return +*/ +static void PsdCmdMergeDeal(void); +/* +* վ̨ػ +* ˵UINT16 psdId վ̨ID +* ֵ +*/ +static void ClearPsdData(const UINT16 psdId); +/* +* վ̨ػ +* ˵UINT16 psdId վ̨ID +* ֵ +*/ +static void ProcessClearPsdData(void); +/* +* VOBCIVOC +* ˵void +* ֵ +*/ +static void ProcessVobcOrIvocData(void); +/* +* ͨжϵVOBCIVOC(RCģʽCIģʽô˺) +* ˵void +* ֵ +*/ +static void ClearVobcOrIvocData(void); +/* +* гλϢˢ +* ˵ vobcToCiDataStruVOBCݽṹָ +* ֵ void +*/ +static void RefreshIvocInputlocation(const IvocToRcDataStruct stIvocToCiData); +/* +* VobcгӿϢ +* ˵ vobcToCiDataStruVOBCݽṹָ +* ֵ void +*/ +static void HLHTFAOVobcConnectDataProc(VobcToCiDataStruct* vobcToCiDataStru); +/* +* IVOCRC +* ˵ void +* ֵ void +*/ +static void ProIvocToRcLocationData(void); /* * * ˵ void @@ -246,30 +324,23 @@ void InputDataProcess(void) UINT8 localCiPattern = GetLocalCiPattern(); UINT8 chSwitch = 0u; UINT8 cRcWorkMode = 0U; + UINT8 cControlState = 0U; /*״̬*/ signed long long cost[20] = {0U}; chSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH); cRcWorkMode = GetLocalRcWorkMode(); + cControlState = GetLocalCiBackUpPattern(); + + debug_infor_printf((const)"\n chLocalAreaState: %d\n", cControlState); + cost[0] = MSCP_GetTick(); + + /*ͨͨñͷ*/ + ProcHlhtHeadCtxTimeOut(); - cost[0] = MSCP_GetTick(); #if (kPLATFORM==kVXWORKS) (void)ProcessPlatformNetData(); #endif - if (CI_PATTERN_TRADITIONAL == localCiPattern) - { - /*IO*/ - (void)ProcessIoToCiData(); - } - else if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)/*ȫ*/ - { - /*OC*/ - (void)ProcessOcToCiRelayData(); - debug_infor_printf((const)"\nprocess oc_relay end\n"); - } - else - { - /**/ - } + #ifdef PLATFORM_2OO2 @@ -284,6 +355,23 @@ void InputDataProcess(void) ProcessOcToCiData(); } + if (CI_PATTERN_TRADITIONAL == localCiPattern) + { + /*IO*/ + (void)ProcessIoToCiData(); + } + else if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)/*ȫ*/ + { + /*OC Ӧ÷OC֮*/ + (void)ProcessOcToCiRelayData(); + /*ɼһµĵλ*/ + ProcessOcToCiRelayDiffData(); + debug_infor_printf((const)"\nprocess oc_relay end\n"); + } + else + { + /**/ + } #endif cost[1] = MSCP_GetTick(); /*ᵽCI*/ @@ -293,10 +381,6 @@ void InputDataProcess(void) /*ͣϢΪδͣ,ֹùUTռѹͣϢZC֮ͣλϢͣϢһֱڣ޷*/ ResetPhySecStopSteadyInfo(); #endif - - /*ͨͨñͷ*/ - ProcHlhtHeadCtxTimeOut(); - /*ͨʱͨı*/ ClearSignalOvlpCmdHlht(); @@ -317,11 +401,11 @@ void InputDataProcess(void) /*ITE*/ ProcessIteToCiData(); cost[3] = MSCP_GetTick(); - /*VOBC*/ - ProcessVobcToCiData(); + + /*VOBCIvoc*/ + ProcessVobcOrIvocData(); + cost[4] = MSCP_GetTick(); - /*ͨVOBC*/ - ProcessVobcBackupToCiData(); /*гABLռñ־*/ TrainPhyAblTagUpdate(); @@ -332,15 +416,15 @@ void InputDataProcess(void) /*PSCϵͳ*/ ProcessPscToCiData(); - /*豸״̬*/ - ProcessDeviceLogicState(); + /*OC-PSCһ廯*/ + ProcessOCToCiPsdData(); + + /*豸״̬*/ + ProcessDeviceLogicState(); + - /**/ - ProcessPsdData(); - /*LEU*/ ProcessLeuToCiData(); - if (RC_WORK_MODE_TIOC == cRcWorkMode) { @@ -383,27 +467,45 @@ void InputDataProcess(void) /*״̬ж*/ ssp_MainProcess(); cost[7] = MSCP_GetTick(); - } - /* ߼ARB״̬ */ - SetLgcArbStateProc(); - /*ں״̬*/ - UpdatePhySectionMergeLogicState(); - /*ں߼CTռϢ*/ - UpdateLogSectionCTOccupyState(); + /*źŻѹ*/ + SignalTrainCrossPro(); - if (RC_WORK_MODE_TIOC == cRcWorkMode) - { /* źŻ */ (void)SignalLightUpProc(); } + + if (SYSTEM_WORK_MODE_MAIN == cControlState) + { + /*ϵͳŽ豸״̬ĸ*/ + + /*豸״̬ںϴ*/ + UpdateDoubleSystemMergeInfo(); + + /*źŻʱٴҪ豸״̬ںϴ󣬲ȻźŻʱ״̬ͺһڣ*/ + SignalLinShiXianSuFlagCalculate(); + + /* ߼ARB״̬ */ + SetLgcArbStateProc(); + + /*ں״̬*/ + UpdatePhySectionMergeLogicState(); + + /*ں߼CTռϢ*/ + UpdateLogSectionCTOccupyState(); + + /*ˢźŻʪ־*/ + UpdateHumidRailFlag(); + + /*PSD쳣򿪴Ҫȸں״̬ٽPSD쳣жϣ*/ + PsdExceptOpenProc(); + } else { - /**/ + /*ϵͳΪû򲻿ʱںϴ*/ } - - /*ˢźŻʪ־*/ - UpdateHumidRailFlag(); + /**/ + ProcessPsdData(); /*ATS*/ if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType)) @@ -569,15 +671,12 @@ UINT8 ProcessIoToCiData(void) */ void ProcessAxleToCiData(void) { - UINT8 returnValue = CI_ERROR; /*ֵĬϳɹ*/ - AxisToCiDataStruct* CollAxisDataStru = NULL; /*ͨŲɼ*/ UINT8 axisCommSum = 0u; /*ͨż*/ UINT8* pAxisSysIdBuf = NULL; /*ͨż*/ UINT16 ii = 0u; /*ѭ*/ UINT16 jj = 0u; /*ѭ*/ UINT8 localCiId = 0u; /*CI ID*/ UINT8 axisSysId = 0u;/*ϵͳid*/ - UINT8 tranAxisCommState = TRANSMIT_STATE_BAD;/*ͨ״̬*/ UINT16 secId = 0u; /*ID*/ UINT8 colAxisRelaySta = RELAY_STATE_DOWN; /*״̬*/ UINT8 secOccupySta = SECTION_OCCUPY_YES; /*ռ״̬*/ @@ -585,94 +684,256 @@ void ProcessAxleToCiData(void) UINT32 dwCurCycNum = 0U; UINT32 dwLastRecvAxisDataCycNum = 0U; /*յݵ*/ UINT32 dwCommBadEnsureCount = 0U; /*жϼͨжȷ*/ + UINT32 dwSystemUpdateMainUseCycNum = 0U; + UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*ǰں*/ + UINT8 chCurSystemAreaState = GetLocalCiBackUpPattern();/*ǰϵͳ״̬*/ + UINT32 dwTimeOutCout = GetCiAndAxleTransBadEnsureTime(); /*ϵͳͨжȷʱ䣬λ*/ + UINT32 dwCiCurappCycleTime = GetSystemParaAppCycleTime(); /*ǰʱ*/ - CollAxisDataStru = GetCollAxisDataStruct(); - axisCommSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); - pAxisSysIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); + INT32 dwRemainValidiy = 0U; /*Ч*/ - if ((NULL != CollAxisDataStru) && (NULL != pAxisSysIdBuf)) + if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState) { - returnValue = CI_SUCCESS; - } + axisCommSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); + pAxisSysIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); - if (CI_SUCCESS == returnValue) - { - localCiId = GetSystemParaLocalCiId(); - for (ii = 0u; ii < axisCommSum; ii++) + if (NULL != pAxisSysIdBuf) { - axisSysId = pAxisSysIdBuf[ii]; - (void)UpdateCiTransmitState(localCiId, CI_SYSTEM_TYPE_AXIS, axisSysId); - - tranAxisCommState = GetCiTransmitState(CI_SYSTEM_TYPE_AXIS, axisSysId); - if (TRANSMIT_STATE_GOOD == tranAxisCommState) + localCiId = GetSystemParaLocalCiId(); + for (ii = 0u; ii < axisCommSum; ii++) { - if(axisSysId = dwSystemUpdateMainUseCycNum) { - SetSecColOccupyStartCycNum(secId, dwCurCycNum); + + /* RCᱨͷЧԷյһRCںŴڵں */ } else { - /*ͨжϵڸһβɼռʼ*/ + debug_infor_printf((const)"\nProcessAxleToCiData Error CI HLHTCommonMsgRemainingValidity Fail,sourceRecvOppMsgSN = %d,dwRemainValidiy = %d \n", gSzRcAxleHLHTHeadCtxs[axisSysId].sourceRecvOppMsgSN, dwRemainValidiy); + /* RCᱨͷЧ*/ + dwRemainValidiy = -1; } } - } + if (0 < dwRemainValidiy) + { + if ((axisSysId < AXIS_TO_CI_SUM_MAX) && (dwCurCycleNum == axisToCiDataStru[axisSysId].dwLastRecvDataCycNum)) + { + /*CIAXISͨ*/ + for (jj = 0u; jj < axisToCiDataStru[axisSysId].SectionSum; jj++) + { + secId = axisToCiDataStru[axisSysId].axisDataStr[jj].PhySecId; + colAxisRelaySta = axisToCiDataStru[axisSysId].axisDataStr[jj].gdRelayState; + + if (RELAY_STATE_UP == colAxisRelaySta) + { + secOccupySta = SECTION_OCCUPY_NO; + } + else if (RELAY_STATE_DOWN == colAxisRelaySta) + { + secOccupySta = SECTION_OCCUPY_YES; + } + else + { + secOccupySta = SECTION_OCCUPY_YES; + } + (void)SetPhySecCurAxisGdOccupyState(secId, secOccupySta); + + /*Ԥλ*/ + acFty = GetCiFunctionSwitchConfig(FUNC_SWITCH_AC_FACTORY); + 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 if (AXIS_TYPE_STANDARD_INTERFACE == 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); + + /*ӿѾУ飬ֱ*/ + SetPhySecResetCmdTagBack(secId, axisToCiDataStru[axisSysId].axisDataStr[jj].chResetCmdTagBack); + } + else + { + ; /*ӿڲ*/ + } + } + + + } + else + { + ; + /**/ + } + } + else + { + debug_infor_printf((const)"\nProcessAxleToCiData Error HLHTCommonMsgRemainingValidity Fail,\n"); + /*CIAXISͨжϣAXIS豸״̬ȫ*/ + dwCurCycNum = Get2oo2CurCycleNum(); + dwLastRecvAxisDataCycNum = GetCiTransmitRecvDataCycNum(localCiId, CI_SYSTEM_TYPE_AXIS, axisSysId); + dwCommBadEnsureCount = GetCiAndAxleTransBadEnsureCnt(); + for (jj = 0u; jj < axisToCiDataStru[axisSysId].SectionSum; jj++) + { + secId = axisToCiDataStru[axisSysId].axisDataStr[jj].PhySecId; + + (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)) + { + SetSecColOccupyStartCycNum(secId, dwCurCycNum); + } + else + { + /*ͨжϵڸһβɼռʼ*/ + } + } + } + + } } + else + { + ; + } + } + else + { + ; /*ϵ*/ } } @@ -695,8 +956,6 @@ void ProcessOcToCiData(void) CollBoardData* pTempCollBoardData_ForProcess = NULL; - UINT32 ciocBadComCycle = 0u; - UINT32 curCycle = 0u; UINT8 deviceSum =0u;/*ͨ豸*/ @@ -706,11 +965,10 @@ void ProcessOcToCiData(void) UINT8 swapBoardId = 0U;/*OCϵ忨ID*/ UINT16 deviceOCAndBoardId = 0U;/*ϵ忨OCͰ忨ID ֽ:OC ID ֽ:忨ID*/ UINT8 chSwitchZzjIndex = 0U; - + UINT8 chOcId = 0U; + UINT8 transmitState = 0U; localCiId = GetSystemParaLocalCiId(); - ciocBadComCycle = GetCiAndOcTransmitBadEnsureCnt(); - curCycle = Get2oo2CurCycleNum(); deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸*/ @@ -728,18 +986,18 @@ void ProcessOcToCiData(void) } } } - + debug_infor_printf((const)"ProcessOcToCiData, m_OcToCiOrginDataNum:%d \n", m_OcToCiOrginDataNum); for (ii = 0u; ii < m_OcToCiOrginDataNum; ii++) { pTempOc = &m_OcToCiOrginDataArr[ii]; if (GetCiIdByOcId(pTempOc->OcId) == localCiId) { - if ((curCycle - pTempOc->ComStartCycle > ciocBadComCycle) || - (pTempOc->RecvErrorDevTypeCycle > ciocBadComCycle) - )/*CIOCͨųʱյ豸ݳ10*/ + chOcId = (UINT8)(pTempOc->OcId & 0xFF); + transmitState = GetCiTransmitState(CI_SYSTEM_TYPE_OC, chOcId);/*OCͨ״̬ñͷ*/ + if (TRANSMIT_STATE_GOOD != transmitState)/*CIOCͨųʱ*/ { - debug_infor_printf((const)"OC_COM:break, com_cycle:%d startCycle:%d RecvErrorDevTypeCycle:%d\n", Get2oo2CurCycleNum(), pTempOc->ComStartCycle, pTempOc->RecvErrorDevTypeCycle); + debug_infor_printf((const)"OC_COM:break, com_cycle:%d startCycle:%d\n", Get2oo2CurCycleNum(), pTempOc->ComStartCycle); /*1.źŻɼóɺ 2.ѵóĿ 3.ѹں״̬Ϊռ 4.Ѽ̵ɼ״̬Ϊ */ for (jj = 0u; jj < pTempOc->OcDeviceNum; jj++) { @@ -768,6 +1026,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; + } } } /*תĵ״̬*/ @@ -780,6 +1043,11 @@ void ProcessOcToCiData(void) for (j = 0U; j < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; j++) { m_Switches[jj].BoardState[j] = 0xffU; + + } + for (j = 0U; j < MAX_OC_SWITCH_INCLUDE_ZZJ_NUM; j++) + { + m_Switches[jj].szSwitchIncldeZzjState[j] = OC_SWITCH_POSITION_SIKAI;/*Ŀ*/ } } } @@ -821,9 +1089,17 @@ void ProcessOcToCiData(void) } /*OCͨжϣȷPCBť״̬*/ SetAllCleFarePCBButKeepSta(pTempOc->OcId,QK_PSD_BUTTON_STATE_UP); + + /*OCͨжϣϢ*/ + + SetOcToCiDefaultDataStru(ii); + } else { + ConvertOcOriginDataToPtData(chOcId);/*ѽOC忨תΪOCλ*/ + ConvertOcOriginDataToOcSigSwDev(chOcId);/*ѽOC豸תΪOC źŻ OC 豸ݺOC*/ + /*OCͨʱҪOCϵ忨ϢATSʾϵİ忨*/ curSwapBoardNum = pTempOc->OCBoardSwapSysNum; for (kk = 0U; kk < curSwapBoardNum; kk++) @@ -1047,7 +1323,6 @@ void ProcessZcToCiData(void) UINT16 phySecCurSum = 0u; UINT16 routeCurSum = 0u; UINT8 logSecLinShiXianSuSetState = 0u; - UINT8 signalLinShiXianSuSetFlag = 0u; UINT8 phySecJumpDelayUnlockFlag = 0u; UINT8 belongCiId = 0u; UINT16 garagedoorSum = 0u; @@ -1059,7 +1334,6 @@ void ProcessZcToCiData(void) UINT8 kk = 0u; UINT8 jj = 0u; UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); - UINT8 signalLightExtinctRet = 0U; UINT8 axisSectionSum = 0U;/*ζӦĿ*/ UINT16* pAxisSectionIdBuf = NULL;/*ζӦID*/ UINT8 cTsrSureFlag = CI_TSR_SURE_NO; @@ -1110,12 +1384,8 @@ void ProcessZcToCiData(void) for (ii = 0u; ii < signalCurSum; ii++) { deviceId = GetSignalId(ii); - signalLightExtinctRet = SetSignalLightExtinctState(deviceId, SIGNAL_LIGHT_EXTICT_STATE_ALL_YES);/*źŻ*/ - if (CI_ERROR == signalLightExtinctRet) - { - /*źŻʧ*/ - } - (void)SetSignalCrossState(deviceId, SIGNAL_CROSS_STATE_NO);/*źŻδѹ*/ + SetSignalLightExtinctStateZc(deviceId, SIGNAL_LIGHT_EXTICT_STATE_ALL_YES);/*ZCźŻ*/ + (void)SetSignalCrossStateZc(deviceId, SIGNAL_CROSS_STATE_NO);/*ZCźŻδѹ*/ /*cgh-ϲCID-2341-5*/ SetSigEngineerVehicleNearSte(deviceId, SIG_ENGINEERVEHICNEAR_STE_NO);/*źŻδѹӽ*/ } @@ -1123,8 +1393,8 @@ void ProcessZcToCiData(void) for (ii = 0u; ii cSnowValidFlag) || (CI_ALL_SNOW_UNVALID == pZcToCiDataStru->cSnowValidFlag)) { - /* ѩģʽ */ - SetAllSnowModel(pZcToCiDataStru->cSnowValidFlag); - SetLocalAreaSnowInfo(pZcToCiDataStru->cAreaSnowPlatFormNum, pZcToCiDataStru->szAreaSnowPlatFormId); /*±ѩ״̬Ϣ*/ - SetLocalSnowModel(pZcToCiDataStru->chLocalSnowValidFlag); + /*ZC͵ѩϢ*/ + SetAllSnowModelZc(pZcToCiDataStru->cSnowValidFlag); + SetLocalAreaSnowInfoZc(pZcToCiDataStru->cAreaSnowPlatFormNum, pZcToCiDataStru->szAreaSnowInfo); + SetLocalSnowModelZc(pZcToCiDataStru->chLocalSnowValidFlag); } } else @@ -1428,6 +1691,7 @@ void ProcessZcToCiData(void) ; } + /*ZC͵ITEȫгϢ*/ if (reVal == CI_SUCCESS) { @@ -1436,6 +1700,8 @@ void ProcessZcToCiData(void) { /* ITEȫг״̬ */ SetIteLineCutState(pZcToCiDataStru->cIteLineCutState); + /* ITEгϢ */ + SetLocalAreaIteCutInfo(pZcToCiDataStru->cAreaIteCutNum, pZcToCiDataStru->szAreaIteCutId); } else { @@ -1533,9 +1799,10 @@ void ProcessTmcToTiocData(void) { if ((CI_ALL_SNOW_VALID == pTmcInputData->cSnowValidFlag) || (CI_ALL_SNOW_UNVALID == pTmcInputData->cSnowValidFlag)) { - /* ѩģʽ */ - SetAllSnowModel(pTmcInputData->cSnowValidFlag); - SetLocalAreaSnowInfo(pTmcInputData->cAreaSnowPlatFormNum, pTmcInputData->szAreaSnowPlatFormId); /*±ѩ״̬Ϣ*/ + /*RCѩϢ*/ + SetAllSnowModelCC(pTmcInputData->cSnowValidFlag); + SetAllSnowLevel(pTmcInputData->cSnowLevel); + SetLocalAreaSnowInfoCC(pTmcInputData->cAreaSnowPlatFormNum, pTmcInputData->szAreaSnowInfo); } } } @@ -1547,6 +1814,8 @@ void ProcessTmcToTiocData(void) { /* ITEȫг״̬ */ SetIteLineCutState(pTmcInputData->cIteLineCutState); + /* ITEгϢ */ + SetLocalAreaIteCutInfo(pTmcInputData->cAreaIteCutNum, pTmcInputData->szAreaIteCutId); } else { @@ -1612,103 +1881,21 @@ void ProcessVobcToCiData(void) UINT16 deviceId = 0u; UINT8 funRet = CI_ERROR; UINT8 getResult = CI_ERROR; - UINT8 chRCMode = GetLocalRcWorkMode(); + UINT32 dwCurCycNum = 0U; UINT32 dwTransmitBadEnsureCount = 0U; /*CIVOBCͨжжʱ*/ UINT8 cTrainReportState = 0U; UINT8 cCheckFlag = CI_ERROR; + localCiId = GetSystemParaLocalCiId(); dwCurCycNum = Get2oo2CurCycleNum(); dwTransmitBadEnsureCount = GetCiAndVobcTransBadEnsureCnt(); - if (LINE_CC == chLineIdentity) - { - ClearTrainCanUctFlag(); - } - else - { - ; /* dz· */ - } - /*VOBCϸPSDϢ*/ - for(bufIndex = 0u;bufIndex < PSD_SUM_MAX;bufIndex++) - {/*PSDṹ*/ - psdId = PsdDataStru[bufIndex].PsdId; - if (GetPsdBelongCiId(psdId) == localCiId) - {/*ڱPSDŴ*/ - if ((dwCurCycNum - PsdDataStru[bufIndex].CmdSetCycle) > dwTransmitBadEnsureCount) - {/*ǰPSDGetCiAndVobcTransBadEnsureCnt()δյκVOBCڸPSDĿϢ򿪡رպͲѯPSDĹϸ*/ - PsdDataStru[bufIndex].SrcVobcId = 0u; - PsdDataStru[bufIndex].PsdCmd = PSD_DEFAULT_CONTROL_CMD; - PsdDataStru[bufIndex].CmdSetCycle = 0u; - PsdDataStru[bufIndex].psdEditGroupInfo = 0u;/*Ϣ*/ - PsdDataStru[bufIndex].VOBCDoorState = PSD_DOOR_CLOSEDANDLOCKED_INVALID; - deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸*/ - deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸ID*/ - if ((deviceSum > 0u) && (deviceIdBuf != NULL)) - {/*Чж*/ - for (ii = 0u;ii < deviceSum;ii++) - {/*뱾CIͨŵվ̨ϵͳ*/ - platformId = deviceIdBuf[ii]; - for (jj = 0u;jj < platformToCiDataStru[platformId].psdSum;jj++) - {/*վ̨ϵͳPSDĿ*/ - platformPsdId = platformToCiDataStru[platformId].psdDataStr[jj].PsdId; - if (psdId == platformPsdId) - {/*ҵӦվ̨ϵͳϢVOBC͵ĹϸϢ*/ - platformToCiDataStru[platformId].psdDataStr[jj].doorHaveOrNot = PSD_HAVE_TRAIN_DOOR_NO;/*VOBCͨжϺ󣬰޳ϢΪ޳*/ - platformToCiDataStru[platformId].psdDataStr[jj].faultIsolationRequestInfo = 0u;/*VOBCͨжϺ󣬽VOBCPSDΪ޸*/ - platformToCiDataStru[platformId].psdDataStr[jj].doorEditGroupInfo = 0u; /*Ϣ*/ - } - } - } - } - } - } - } - - if (RC_WORK_MODE_TIOC == chRCMode) - {/*TIOC*/ - - /* ֮ǰ֤ͣϢԴȡϢ */ - phySecCurSum = GetPhySecCurSum(); - for (ii = 0u; ii < phySecCurSum; ii++) - { - deviceId = GetPhySecId(ii); - SetPhySecStopSteadyFlag(deviceId, PHYSICAL_SECTION_STOPSTEADY_NO);/*δͣ*/ - } - wRouteSum = GetRouteCurSum(); - for (wRouteIndex = 0u; wRouteIndex < wRouteSum; wRouteIndex++) - { - wRouteId = GetRouteId(ii); - belongCiId = GetRouteBelongCiId(wRouteId); - if (belongCiId == localCiId) - { - /*ý·δյ֤ͣ*/ - SetRouteStopensureFlag(wRouteId, ROUTE_STOPENSURE_NO); - - /*ý·Դȡ*/ - SetRouteResourceCancelFlag(wRouteId, ROUTE_RESOURCECANCEL_NO); - } - else - { - /**/ - } - } - } - else if (RC_WORK_MODE_CI == chRCMode) - {/*CI*/ - /*֤ͣϢZCλ*/ - } - else - { - /*޴*/ - } - for (ii = 0u; ii < vobcToCiDataSum; ii++) - { - wTrainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + vobcToCiDataStru[ii].VobcId; + { if (LINE_FAO == chLineIdentity)/*FAO·*/ {/*жVOBCCIͨж*/ if((dwCurCycNum - vobcToCiDataStru[ii].ComStartCycle) > dwTransmitBadEnsureCount) @@ -1735,27 +1922,6 @@ void ProcessVobcToCiData(void) dataValid = 1u; } } - else if (LINE_CC == chLineIdentity) - { - /* · */ - dwDelayTime = GetVobcMsgDelayTime(wTrainId); - dwVobcBrkTime = GetCiAndVobcTransBadEnsureTime(); - if (dwDelayTime > dwVobcBrkTime) - { - dwDelayTime = dwVobcBrkTime; - } - funRet = SetTrainMsgDelayTime(wTrainId, dwDelayTime); - /*ͨ·ʹϢʣЧжCIVOBCͨǷж*/ - getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(vobcToCiDataStru[ii].VobcId)); - if ((CI_ERROR == getResult) || (CI_ERROR == funRet)) - { - dataValid = 0u; - } - else - {/*ϢЧ*/ - dataValid = 1u; - } - } else { /*·ʹ*/ @@ -1768,19 +1934,15 @@ void ProcessVobcToCiData(void) /*PSD*/ for (jj = 0u; ((jj < vobcToCiDataStru[ii].PsdSum) && (jj < VOBC_TO_CI_TRAIN_PSD_MAX)); jj++) { - /*֮ǰδʵֵվ̨ʾ̵Ŀǰ޴ע͵δ*/ -#if 0 - /*Ӹֵط*/ - SetCiSendCmdBackInfoData(CI_BACK_TRAIN_DOOR_STATE, CI_DEVICE_TYPE_PSD, vobcToCiDataStru[ii].PsdData[jj].PsdId, 0u, 0u); -#endif /*»VOBCCIһֱͨţ¹ϸϢ޷ڴ˼յһVOBCĿǷʱ*/ if ((dwCurCycNum - vobcToCiDataStru[ii].PsdData[kk].CmdStartCycNum) > dwTransmitBadEnsureCount) { ClearPsdVobcContext(vobcToCiDataStru[ii].VobcId); break; } - if (vobcToCiDataStru[ii].PsdData[jj].PsdId != PSD_INVALID_ID) + if ((PSD_INVALID_ID != vobcToCiDataStru[ii].PsdData[jj].PsdId)&&(TRAIN_MAIN_MODE ==vobcToCiDataStru[ii].controlMode)) {/*PSD IDЧ*/ + if ((LINE_FAOHLHT == chLineIdentity) || (LINE_FAOHLHT_ONESELF == chLineIdentity) || (LINE_FAOHLHT_ONESELFSECOND == chLineIdentity)) { switch (vobcToCiDataStru[ii].PsdData[jj].CmdType) @@ -1895,18 +2057,6 @@ void ProcessVobcToCiData(void) { /*·ʹ*/ } -#if 0 - if ((VOBCTOCI_COMMAND_TYPE_PSDCLOSE == vobcToCiDataStru[ii].PsdData[jj].CmdType) && - (PSD_STATE_OPEN == GetPsdState(vobcToCiDataStru[ii].PsdData[jj].PsdId)) && - (0u == GetStartDetectionCycNum(vobcToCiDataStru[ii].PsdData[jj].PsdId))) - { /*״̬Ϊ򿪣ʱյ͵Ĺһûʼʱ*/ - /*̽̽Чֹͣ̽Ч*/ - SetStartDetectionCycNum(vobcToCiDataStru[ii].PsdData[jj].PsdId, Get2oo2CurCycleNum()); - SetStartDetectionState(vobcToCiDataStru[ii].PsdData[jj].PsdId, JXTC_START_DETECTION_YES); - SetStopDetectionState(vobcToCiDataStru[ii].PsdData[jj].PsdId, JXTC_STOP_DETECTION_NO); - } -#endif - } } } @@ -1915,6 +2065,7 @@ void ProcessVobcToCiData(void) /*δյݣ*/ } + if((LINE_FAO == chLineIdentity) && (dwCurCycNum == vobcToCiDataStru[ii].ComStartCycle))/*FAO·*/ { FAOVOBCDataProc(&(vobcToCiDataStru[ii]));/*ڴFAOVOBCϴ*/ @@ -1927,73 +2078,33 @@ void ProcessVobcToCiData(void) { HLHTFAOVOBCDataProc(&(vobcToCiDataStru[ii])); } - else if (LINE_CC == chLineIdentity) - { - IvocInputDataProcCC(&(vobcToCiDataStru[ii])); /* IVOC*/ - cTrainReportState = GetTrainReportState(vobcToCiDataStru[ii].VobcId); - if (BIT_VAL_00000001B == ((cTrainReportState >> 3U) & BIT_VAL_00000001B)) - { - cCheckFlag = CI_SUCCESS; /*MMIʪ죬־óɹ*/ - } - else - { - /*MMIʪ죬*/ - } - } else { - /*Ŀǰֽ֧ӿڣFAOӿڡHLHTӿڡFAO+HLHTӿڣdataValidЧǰ£÷֧*/ + /*ʹ*/ } } else { - if ((LINE_FAO == chLineIdentity) || (LINE_HLHT == chLineIdentity) || (LINE_FAOHLHT == chLineIdentity) || (LINE_FAOHLHT_ONESELF == chLineIdentity) || (LINE_FAOHLHT_ONESELFSECOND == chLineIdentity)) - { - /*PSDɾVOBCϢ*/ - ClearPsdVobcContext(vobcToCiDataStru[ii].VobcId); + + /*PSDɾVOBCϢ*/ + ClearPsdVobcContext(vobcToCiDataStru[ii].VobcId); - /*г͵ͣϢ*/ - ClearVobcStopSteadyData(vobcToCiDataStru[ii].VobcId); + /*г͵ͣϢ*/ + ClearVobcStopSteadyData(vobcToCiDataStru[ii].VobcId); - /*ϴVOBC״̬*/ - ClearWashVobcDriveState(&(vobcToCiDataStru[ii])); + /*ϴVOBC״̬*/ + ClearWashVobcDriveState(&(vobcToCiDataStru[ii])); - /*гӿϢ*/ - VobcConnectDataClear(vobcToCiDataStru[ii].VobcId); - } - else if (LINE_CC == chLineIdentity) - { - /*PSDɾVOBCϢ*/ - ClearPsdVobcContext(vobcToCiDataStru[ii].VobcId); - ProcessIvocLoseCom(vobcToCiDataStru[ii]); - - /*ϴVOBC״̬*/ - ClearWashVobcDriveState(&(vobcToCiDataStru[ii])); - - /*гӿϢ*/ - VobcConnectDataClear(vobcToCiDataStru[ii].VobcId); - } - else - { - ; /*·ݲ*/ - } + /*гӿϢ*/ + VobcConnectDataClear(vobcToCiDataStru[ii].VobcId); + /*ɾVOBCCI*/ - (void)RemoveVobcToCiMsgAt((UINT8)ii); - ii--; - vobcToCiDataSum = GetVobcToCiSum(); + (void)CommonMemSet(&(vobcToCiDataStru[ii]), sizeof(VobcToCiDataStruct), 0, sizeof(VobcToCiDataStruct));/**/ } } - if (CI_SUCCESS == cCheckFlag) - { - /*гMMIʪ״̬ñʪЧ*/ - SetLocalSnowModel(CI_LOCAL_SNOW_VALID); - } - else - { - /*гMMIʪ״̬ñʪЧ*/ - SetLocalSnowModel(CI_LOCAL_SNOW_UNVALID); - } + /*ͨжݣ*/ + ClearVobcOrIvocData(); } /* @@ -2015,7 +2126,8 @@ void ProcessVobcBackupToCiData(void) UINT32 curCycNum = 0U; UINT32 dwRcvCycNum = 0U; UINT8 headCheck = CI_ERROR; - UINT8 psdCmdCode = 0U; + UINT8 psdCmdCode = 0U; + UINT8 cRcWorkMode = 0U; curCycNum = Get2oo2CurCycleNum(); for (ii = 0U; ii < VOBC_BACKUP_TO_CI_SUM_MAX; ii++) @@ -2025,7 +2137,15 @@ void ProcessVobcBackupToCiData(void) /*ʹûͨͷжCIVOBCͨǷЧ*/ backUpValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC_BACKUP, (UINT8)(VobcBackUpToCiDataStru[ii].VobcId)); /*ʹûͨͷжCIVOBCͨǷЧ*/ - mainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcBackUpToCiDataStru[ii].VobcId)); + cRcWorkMode = GetLocalRcWorkMode(); + if (RC_WORK_MODE_TIOC == cRcWorkMode) + { + mainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)(VobcBackUpToCiDataStru[ii].VobcId)); + } + else + { + mainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcBackUpToCiDataStru[ii].VobcId)); + } trainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC_BACKUP * 256U)) + VobcBackUpToCiDataStru[ii].VobcId; dwRcvCycNum = VobcBackUpToCiDataStru[ii].ComStartCycle; @@ -2249,7 +2369,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 +2852,8 @@ UINT8 ProcessAtsOrXianDiToCiData(void) /*δȡ*/ ClearCiRevCmdData();/*CIݶ*/ + } } - } else {/**/ for (ii = 0u; ii < AtsOrXianDiToCiCmdSum; ii++) @@ -2821,7 +2941,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void) OrderCheckReVal = CheckOrderWhetherDoing(virCiID,belongVirCIid,cmdType,CmdDeviceId); if(CI_SUCCESS == OrderCheckReVal) { - SetCommonRouteLogicManage(CmdDeviceId); + SetCommonRouteLogicManage(CmdDeviceId, ESEND_LEVEL_ATS); } } else @@ -3503,7 +3623,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void) { checkRetVal = AFFIRM_SUCCESS; /*˹*/ - (void)LaborUnlockOverlapProc((UINT8)CmdDeviceId); + (void)LaborUnlockOverlapProc(CmdDeviceId); } else { @@ -4052,9 +4172,121 @@ 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; + /*ýʱһ*/ + case ATS_CMD_EMERG_XS_SET_ONE: + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, AFFIRM_SUCCESS, virCiID); + break; + /*ýʱٶ*/ + case ATS_CMD_EMERG_XS_SET_TWO: + checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID); + if (CI_SUCCESS == checkRetVal) + { + belongVirCIid = GetLogSecBelongVirCiId(CmdDeviceId); + OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, cmdType, CmdDeviceId); + if (CI_SUCCESS == OrderCheckReVal) + { + checkRetVal = AFFIRM_SUCCESS; + /*ýʱ*/ + EmergXianSuProcess(CmdDeviceId, LOGSEC_EMERG_XS_SET_YES); + } + else + { + checkRetVal = AFFIRM_FAIL; + } + } + else + { + checkRetVal = AFFIRM_FAIL; + } + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, checkRetVal, virCiID); + break; + /*ȡʱһ*/ + case ATS_CMD_EMERG_XS_CANCEL_ONE: + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, AFFIRM_SUCCESS, virCiID); + break; + + /*ȡʱٶ*/ + case ATS_CMD_EMERG_XS_CANCEL_TWO: + checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID); + if (CI_SUCCESS == checkRetVal) + { + belongVirCIid = GetLogSecBelongVirCiId(CmdDeviceId); + OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, cmdType, CmdDeviceId); + if (CI_SUCCESS == OrderCheckReVal) + { + checkRetVal = AFFIRM_SUCCESS; + /*ýʱ*/ + EmergXianSuProcess(CmdDeviceId, LOGSEC_EMERG_XS_SET_NO); + } + else + { + checkRetVal = AFFIRM_FAIL; + } + } + else + { + checkRetVal = AFFIRM_FAIL; + } + SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, checkRetVal, virCiID); + break; + + /*ҽ·*/ + case ATS_CMD_COUPLING_ROUTE_SET: + belongVirCIid = GetRouteBelongVirCiId(CmdDeviceId); + OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, cmdType, CmdDeviceId); + if (CI_SUCCESS == OrderCheckReVal) + { + checkRetVal = AFFIRM_SUCCESS; + /*ҽ·*/ + SetCouplinkRouteLogicManage(CmdDeviceId); + } + else + { + checkRetVal = AFFIRM_FAIL; + } + + break; default: cFunRetVal = VirtualDevCmdProc(CmdDeviceId, AtsOrXianDiToCiCmdStru[ii].CommandType);/*Գ豸״̬*/ if (CI_ERROR == cFunRetVal) @@ -4099,7 +4331,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 +4374,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 +4391,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 +4727,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) if(ATS_ROUTE_SET_PROCESS_MAX >= routeCmdSum) { /*ͨ·*/ - SetCommonRouteLogicManage(CmdDeviceId); + SetCommonRouteLogicManage(CmdDeviceId, ESEND_LEVEL_ATS); } else { @@ -4854,7 +5085,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) { checkRetVal = AFFIRM_SUCCESS; /*˹*/ - (void)LaborUnlockOverlapProc((UINT8)CmdDeviceId); + (void)LaborUnlockOverlapProc(CmdDeviceId); } else { @@ -5292,6 +5523,22 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void) /*ͷȨ*/ ReleaseCtrlPower(virCiID, CONTRAL_POWER_NO, CmdDeviceId, cmdDevType); break; + /*ҽ·*/ + case ATS_CMD_COUPLING_ROUTE_SET: + belongVirCIid = GetRouteBelongVirCiId(CmdDeviceId); + OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, AtsToCiCmdStru[ii].CommandType, CmdDeviceId); + if (CI_SUCCESS == OrderCheckReVal) + { + checkRetVal = AFFIRM_SUCCESS; + /*ҽ·*/ + SetCouplinkRouteLogicManage(CmdDeviceId); + } + else + { + checkRetVal = AFFIRM_FAIL; + } + + break; default: { SetCiSendCmdBackInfoData(CI_BACK_INVALID_CMD,0u,0u,0u,AtsToCiCmdStru[ii].CommandType);/*Ч*/ @@ -5572,7 +5819,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) || (AXIS_TYPE_STANDARD_INTERFACE == acFty))) /*йӿ*/ { /*¹βɼ״̬*/ OcPhyStateToDeviceStatePro(); @@ -5637,9 +5884,6 @@ void ProcessDeviceLogicState(void) /* spks */ (void)SpksRelayToDeviceStateProc(); - /*źŻʱٴ*/ - SignalLinShiXianSuFlagCalculate(); - /*Ŵ*/ (void)GaragedoorRelayToDevStaProc(); @@ -5696,8 +5940,6 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 UINT16 numAxisHaveJumpLockApply = 0u;/*Ծ*/ UINT8 applyFlag = 0u;/*־*/ UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); - UINT8 signalLightExtinctRet = 0U; - UINT8 cLogSecTsrState = LOGSEC_LSXS_SET_STATE_NO; UINT8 chRtnIndcDevId = 0U;/*۷ָʾ豸ID*/ ciid = GetSystemParaLocalCiId();/*ȡID*/ @@ -5716,7 +5958,7 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 for (ii = 0u; ii < maskConfigSum; ii++) { maskId = (UINT16)(ii + 1U);/*λID*/ - index = GetMaskIndex(CI_SYSTEM_TYPE_ZC, CI_SYSTEM_TYPE_CI, maskId); + index = GetMaskIndex(CI_SYSTEM_TYPE_ZC, CI_SYSTEM_TYPE_RCI, maskId); if (index != 0u) { DeviceType = GetReceiveMaskDeviceType(systemType, index); @@ -5726,14 +5968,22 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 else { continue; - } - + } switch (DeviceType) { case CI_DEVICE_TYPE_SWITCH: /*豸*/ - + switch (MaskType) + { + case MASK_TYPE_SWITCH_QINGXIAN: + /*Ԥ*/ + break; + default: + returnValue = CI_ERROR; + break; + } + break; case CI_DEVICE_TYPE_SIGNAL: /*źŻ豸*/ @@ -5742,35 +5992,29 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 case MASK_TYPE_SIGNAL_OPENSTATE:/*źŻ״̬λ*/ break; case MASK_TYPE_SIGNAL_LIGHTSTATE:/*źŻ״̬λ*/ + /*õZCṹ壬ٽں*/ if (1U == maskBuf[ii]) {/*źŻǿ*/ - signalLightExtinctRet = SetSignalLightExtinctState(DeviceId, SIGNAL_LIGHT_EXTICT_STATE_NO); - if (CI_ERROR == signalLightExtinctRet) - { - /*źŻʧ*/ - } + SetSignalLightExtinctStateZc(DeviceId, SIGNAL_LIGHT_EXTICT_STATE_NO); /**/ } else {/*źŻ*/ - signalLightExtinctRet = SetSignalLightExtinctState(DeviceId, SIGNAL_LIGHT_EXTICT_STATE_YES); - if (CI_ERROR == signalLightExtinctRet) - { - /*źŻʧ*/ - } + SetSignalLightExtinctStateZc(DeviceId, SIGNAL_LIGHT_EXTICT_STATE_YES); /**/ } break; case MASK_ZC_CI_TYPE_SIGNAL_OCCUPYED:/*ͨųѹźŻλ*/ + /*õZCṹ壬ٽں*/ if (1U == maskBuf[ii]) {/*ͨųѹźŻ*/ - (void)SetSignalCrossState(DeviceId, SIGNAL_CROSS_STATE_YES);/*ͨųѹźŻ*/ + SetSignalCrossStateZc(DeviceId, SIGNAL_CROSS_STATE_YES); /*ÿѹ*/ } else { - (void)SetSignalCrossState(DeviceId, SIGNAL_CROSS_STATE_NO);/*ͨųδѹźŻ*/ + SetSignalCrossStateZc(DeviceId, SIGNAL_CROSS_STATE_NO); /*δѹ*/ } break; case MASK_ZC_CI_SIG_ENGINEERV_NEAR:/*źŻ̳ӽλ*/ @@ -5806,23 +6050,24 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 case MASK_TYPE_AXISSECTION_ARB:/*ARB״̬λ*/ if (1U == maskBuf[ii]) { - SetAxisSecArbState(DeviceId, AXIS_SECTION_ARB_YES);/*üARB*/ + SetAxisSecArbState(DeviceId, AXIS_SECTION_ARB_YES); /*ARB*/ } else { - SetAxisSecArbState(DeviceId, AXIS_SECTION_ARB_NO);/*üδARB*/ + SetAxisSecArbState(DeviceId, AXIS_SECTION_ARB_NO); /*δARB*/ } break; case MASK_TYPE_LIECHE_STOPSTATE:/*гͣϢ״̬λ*/ - if (maskBuf[ii] == 1u) + /*õZCṹ壬ٽں*/ + if (1u == maskBuf[ii]) {/*гͣ*/ - SetPhySecStopSteadyFlag(DeviceId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ + SetPhySecStopSteadyZcOrVobc(DeviceId, PHYSICAL_SECTION_STOPSTEADY_YES); /*ͣ*/ } else { - SetPhySecStopSteadyFlag(DeviceId, PHYSICAL_SECTION_STOPSTEADY_NO);/*δͣ*/ + SetPhySecStopSteadyZcOrVobc(DeviceId, PHYSICAL_SECTION_STOPSTEADY_NO); /*δͣ*/ } break; case MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY:/*Ծλ*/ @@ -5881,32 +6126,35 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 break; case MASK_TYPE_LOGICSECTION_TXOCCUPY:/*߼ͨųռλ,A by yt 2022519*/ /*TSCIϲ 20221208-lc*/ + /*õZCṹ壬ٽں*/ if (1u == maskBuf[ii]) { - SetLogSecTXOccupyState(DeviceId, LOGICSECTION_OCCUPY_TX); + SetLogSecTXOccupyStateZc(DeviceId, LOGICSECTION_OCCUPY_TX); /*ͨųռ*/ } else { - SetLogSecTXOccupyState(DeviceId, LOGICSECTION_OCCUPY_NO_TX); + SetLogSecTXOccupyStateZc(DeviceId, LOGICSECTION_OCCUPY_NO_TX); /*޳ͨųռ*/ } break; case MASK_TYPE_LOGICSECTION_LINSHIXIANSU_SET:/*߼ʱλ*/ + /*õZCṹ壬ٽں*/ if(1u == maskBuf[ii]) {/*߼δʱ*/ - SetLogSecLinShiXianSuState(DeviceId, LOGSEC_LSXS_SET_STATE_NO); + SetLogSecLinShiXianSuStateZc(DeviceId, LOGSEC_LSXS_SET_STATE_NO); /*δʱ*/ } else {/*߼ʱ*/ - cLogSecTsrState = GetLogSecLinShiXianSuSetState(DeviceId); - - SetLogSecLinShiXianSuState(DeviceId, LOGSEC_LSXS_SET_STATE_YES); + SetLogSecLinShiXianSuStateZc(DeviceId, LOGSEC_LSXS_SET_STATE_YES); /*ʱ*/ + /*ںںϴʱ·ȷ״̬*/ +#if 0 if (LOGSEC_LSXS_SET_STATE_YES != cLogSecTsrState) { - ClearLgcSecBelongRtXsCfm(DeviceId); + ClearLgcSecBelongRtXsCfm(DeviceId); /*ŵںʱ*/ } +#endif } break; @@ -5946,6 +6194,7 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 } else {/*̵ȷ*/ + /*õZCṹ壬ٽں*/ chRtnIndcDevId = GetIndicatorRelNonReturnId(DeviceId); if (MaskType == MASK_TYPE_PLAT_AUTORETURNSIG_FLASH) {/*λһ̵λ*/ @@ -5990,21 +6239,44 @@ UINT8 MaskDataProcess(const UINT8 systemType,const UINT8* maskBuf, const UINT16 } break; case CI_DEVICE_TYPE_ROUTE: - if (MASK_TYPE_ROUTE_STOPENABLEE_STATUS == MaskType) /*֤ͣλ*/ + switch (MaskType) { - if (maskBuf[ii] == 1u) + case MASK_TYPE_ROUTE_STOPENABLEE_STATUS: /*֤ͣλ*/ + /*õZCṹУٽں*/ + if (1U == maskBuf[ii]) { - SetRouteStopensureFlag(DeviceId,ROUTE_STOPENSURE_YES); - } + SetRouteStopensureFlagZc(DeviceId, ROUTE_STOPENSURE_YES); /*֤ͣ*/ + } else { - SetRouteStopensureFlag(DeviceId,ROUTE_STOPENSURE_NO); + SetRouteStopensureFlagZc(DeviceId, ROUTE_STOPENSURE_NO); /*֤ͣ*/ } - } + break; + case MASK_TYPE_ROUTE_COUPLIN_SUCCESS: /*·ҳɹλ*/ + if (1U == maskBuf[ii]) + { + SetRouteCoupSuccessFlag(DeviceId, ROUTE_COUPLINK_RESULT_GET); + } + else + { + /*Ч·״̬*/ + } + break; + case MASK_TYPE_ROUTE_COUPLIN_ERROR: /*·ʧλ*/ + if (1U == maskBuf[ii]) + { + SetRouteCoupErrorFlag(DeviceId, ROUTE_COUPLINK_RESULT_GET); + } + else + { + /*Ч·״̬*/ + } + break; + } + break; - case CI_DEVICE_TYPE_GARAGEDOOR: if (MASK_TYPE_GARAGEDOOR_ALLOWCLOSE_STATE == MaskType) /*λ*/ { @@ -6104,8 +6376,8 @@ void ProcessCiToCiData(void) UINT8 sameLineFlag = SAME_LINE_ERR;/*CIǷͬһ·*/ /*ͨж*/ - tranCiNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); - tranCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + tranCiNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); + tranCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); for (jj = 0u;jjtrainStopSteadyState) @@ -7403,32 +7687,41 @@ static void StopSteadyDataProc(VobcToCiDataStruct* vobcToCiDataStru) if (localCiId == phyBelongCiId) {/*ȡεǰռ״̬*/ /*ÿڵijʼ׶ΣÿζᱻóδͣȡVOBCZCͣϢ㣬һCIͣȣΪͣȡ*/ - utOrCtOccFlag = GetPhySecPreOccState(psdRelatedPhySecId); - if (LOGICSECTION_OCCUPY_UT == utOrCtOccFlag) + if (TRAIN_MAIN_MODE == vobcToCiDataStru->controlMode) { - SetPhySecStopSteadyFlag(psdRelatedPhySecId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ - SetPhyStopSteadyTrainId(psdRelatedPhySecId, vobcToCiDataStru->VobcId); /*ͣιгID*/ - } - else if (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag) - { - if (RC_WORK_MODE_TIOC == chRCMode) - {/*TIOC*/ - SetPhySecStopSteadyFlag(psdRelatedPhySecId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ + utOrCtOccFlag = GetPhySecPreOccState(psdRelatedPhySecId); + if (LOGICSECTION_OCCUPY_UT == utOrCtOccFlag) + { + if (RC_WORK_MODE_CI == chRCMode) + { + SetPhySecStopSteadyZcOrVobc(psdRelatedPhySecId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ + SetPhyStopSteadyTrainId(psdRelatedPhySecId, vobcToCiDataStru->VobcId); /*ͣιгID*/ + } + else + { + SetPhySecStopSteadyFlagCC(psdRelatedPhySecId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ + } } - else if (RC_WORK_MODE_CI == chRCMode) - {/*CI*/ - /*ZCϢͣ*/ + else if (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag) + { + if (RC_WORK_MODE_TIOC == chRCMode) + {/*TIOC*/ + SetPhySecStopSteadyFlagCC(psdRelatedPhySecId, PHYSICAL_SECTION_STOPSTEADY_YES);/*ͣ*/ + } + else if (RC_WORK_MODE_CI == chRCMode) + {/*CI*/ + /*ZCϢͣ*/ + } + else + { + ; /*ģʽ*/ + } + } else { - ; /*ģʽ*/ + /*г͹*/ } - - - } - else - { - /*г͹*/ } } @@ -7465,7 +7758,7 @@ static void StopensureDataProc(VobcToCiDataStruct* vobcToCiDataStru) if ((vobcToCiDataStru->VobcId == (wTrainId & 0xffu)) && (dwCyc == vobcToCiDataStru->szTrainStopRouteCyc[ii]) && (0u != wTrainId) && (0U != dwCyc)) { /* ֤ͣд· */ - SetRouteStopensureFlag(vobcToCiDataStru->szTrainStopRouteId[ii], ROUTE_STOPENSURE_YES); + SetRouteStopensureFlagCC(vobcToCiDataStru->szTrainStopRouteId[ii], ROUTE_STOPENSURE_YES); } else { @@ -8677,7 +8970,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 @@ -9038,50 +9331,7 @@ void ClearPsdVobcContext(const UINT16 vobcId) { if(PsdDataStru[bufIndex].SrcVobcId==vobcId) { - PsdDataStru[bufIndex].PsdCmd=PSD_DEFAULT_CONTROL_CMD; - psdId = PsdDataStru[bufIndex].PsdId; - - if ((0u != psdId) && (PSD_INVALID_ID != psdId)) - {/*PSD IDЧ*/ - /*úǰжVOBCͨжϣǰVOBCڴPSDĹϸϢ*/ - - PsdDataStru[bufIndex].SrcVobcId = 0u; - PsdDataStru[bufIndex].CmdSetCycle = 0u; - PsdDataStru[bufIndex].VOBCDoorState = PSD_DOOR_CLOSEDANDLOCKED_INVALID; - deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸*/ - deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸ID*/ - if ((deviceSum > 0u) && (deviceIdBuf != NULL)) - {/*Чж*/ - for (ii = 0u; ii < deviceSum; ii++) - {/*뱾CIͨŵվ̨ϵͳ*/ - platformId = deviceIdBuf[ii]; - psdSum = platformToCiDataStru[platformId].psdSum; - for (jj = 0u; jj < psdSum; jj++) - {/*վ̨ϵͳPSDĿ*/ - platformPsdId = platformToCiDataStru[platformId].psdDataStr[jj].PsdId; - if (psdId == platformPsdId) - {/*ҵӦվ̨ϵͳϢVOBC͵ĹϸϢ*/ - platformToCiDataStru[platformId].psdDataStr[jj].doorHaveOrNot = PSD_HAVE_TRAIN_DOOR_NO;/*VOBCͨжϺ󣬰޳ϢΪ޳*/ - platformToCiDataStru[platformId].psdDataStr[jj].faultIsolationRequestInfo = 0u;/*VOBCͨжϺ󣬽VOBCPSDΪ޸*/ - platformToCiDataStru[platformId].psdDataStr[jj].doorEditGroupInfo = 0u; /*Ϣ*/ - break; - } - else - { - ; /**/ - } - } - } - } - else - { - ; /**/ - } - } - else - { - ; /**/ - } + ClearPsdData(PsdDataStru[bufIndex].PsdId); } else { @@ -9269,7 +9519,7 @@ static void HLHTFAOVOBCDataProc(VobcToCiDataStruct* vobcToCiDataStru) VobcVideoQkDataProc(vobcToCiDataStru); /*гӿݴ*/ - VobcConnectDataProc(vobcToCiDataStru); + HLHTFAOVobcConnectDataProc(vobcToCiDataStru); } else { @@ -9302,8 +9552,8 @@ void UpdateRelayInterfaceConfirmFlag(void) /*ͨж*/ - ciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); /*ȡͨ豸*/ - pCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI);/*ȡͱͨŵID*/ + ciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); /*ȡͨ豸*/ + pCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI);/*ȡͱͨŵID*/ for (jj = 0u;jjComStartCycle; dwCurCycNum = Get2oo2CurCycleNum(); - trainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + pstIvocToCiData->VobcId; + trainId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + pstIvocToCiData->VobcId; if (IVOC_CI_INFO_TYPE_CONTROL == pstIvocToCiData->appInfoType) { /*ÿTIOC룬ÿڶҪˢгϢ*/ @@ -9835,15 +10097,23 @@ static void IvocInputDataProcCC(VobcToCiDataStruct* pstIvocToCiData) /*ˢгϢ TODO*/ StopSteadyDataProc(pstIvocToCiData); /*VOBCͣϢ*/ - /*֤ͣϢ */ - StopensureDataProc(pstIvocToCiData); /*VOBC֤ͣ*/ + /*PB_TACSΪسϢ*/ + if (VEHICLE_CONTROL_STATUS_YES == pstIvocToCiData->controlMode) + { + /*֤ͣϢ */ + StopensureDataProc(pstIvocToCiData); /*VOBC֤ͣ*/ + + /*IVOCϢ*/ + IvocUnLockOverlapProc(pstIvocToCiData); + } + else + { + ; /**/ + } /*ȡԴϢ*/ ResourceCancelDataProc(pstIvocToCiData); /*VOBCȡԴϢ*/ - /*IVOCϢ*/ - IvocUnLockOverlapProc(pstIvocToCiData); - /*IVOCŹȷϢ*/ IvocFloodGateCloseProc(pstIvocToCiData); @@ -9943,27 +10213,11 @@ static void IvocInputRefreshTrain(const VobcToCiDataStruct stIvocToCiData) UINT32 dwCurCycle = 0U; UINT8 chIndex = 0U; TrainEaStru szTmp[EA_MAX_NUM] = { 0U }; - UINT8 chRet = 0U; dwCurCycle = Get2oo2CurCycleNum(); - wTrainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + stIvocToCiData.VobcId; - chRet = SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); - chRet &= SetTrainDir(wTrainId, stIvocToCiData.trainDirection); - chRet &= SetTrainSpeed(wTrainId, stIvocToCiData.wTrainSpeed); - chRet &= SetTrainSpeedDir(wTrainId, stIvocToCiData.chSpeedDir); - chRet &= SetTrainLevel(wTrainId, stIvocToCiData.chTrainLevel); - chRet &= SetTrainMaxHeadLink(wTrainId, stIvocToCiData.wTrainMaxSafeHeadLink); - chRet &= SetTrainMaxTailLink(wTrainId, stIvocToCiData.wTrainMaxSafeTailLink); - chRet &= SetTrainMaxHeadOffset(wTrainId, stIvocToCiData.dwTrainMaxSafeHeadOffset); - chRet &= SetTrainMaxTailOffset(wTrainId, stIvocToCiData.dwTrainMaxSafeTailOffset); - chRet &= SetTrainMinHeadLink(wTrainId, stIvocToCiData.wTrainMinSafeHeadLink); - chRet &= SetTrainMinTailLink(wTrainId, stIvocToCiData.wTrainMinSafeTailLink); - chRet &= SetTrainMinHeadOffset(wTrainId, stIvocToCiData.dwTrainMinSafeHeadOffset); - chRet &= SetTrainMinTailOffset(wTrainId, stIvocToCiData.dwTrainMinSafeTailOffset); - chRet &= SetTrainOtherPointDir(wTrainId, stIvocToCiData.trainDirection); /*гȫˡСȫǰˡȫǰ˵з*/ - SetTrainMsgFromTiocId(wTrainId, 0U); - SetTrainSleepCancleFlag(wTrainId, TRAIN_SLEEP_CANCLE_YES); + wTrainId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + stIvocToCiData.VobcId; + #if 0 chRet &= SetGroupTrainOtherId(wTrainId, stIvocToCiData.wGroupOtherTrainId); @@ -9973,8 +10227,7 @@ static void IvocInputRefreshTrain(const VobcToCiDataStruct stIvocToCiData) if (dwCurCycle == stIvocToCiData.ComStartCycle) { - chRet &= SetTrainZeroState(wTrainId, stIvocToCiData.chTrainZeroState); - SetTrainMode(wTrainId, stIvocToCiData.chTrainMode); + SetTrainZeroState(wTrainId, stIvocToCiData.chTrainZeroState); SetTrainWakeState(wTrainId, stIvocToCiData.chTrainWakeState); SetTrainReportState(wTrainId, stIvocToCiData.chTrainReportState); /*г㱨״̬*/ SetTrainHeadScreenConfirm(wTrainId, stIvocToCiData.chTrainHeadScreenConfirm); @@ -10006,20 +10259,15 @@ 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 { /*δյгݣˢгϢ*/ } - if (CI_ERROR == chRet) - { - debug_infor_printf((const)"IvocInputRefreshTrain ERROR TrainID:%d\n", wTrainId); - } - else - { - /**/ - } + } /* @@ -10029,7 +10277,7 @@ static void IvocInputRefreshTrain(const VobcToCiDataStruct stIvocToCiData) * qw.liu 2022-02-26 * ޸bug YF0083-100 */ -static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) +static void IvocInputCmdProc(const IvocToRcDataStruct stIvocToCiData) { UINT16 wCmdSum = 0U; UINT8 chCmdType = 0U; @@ -10053,14 +10301,18 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) UINT8 chVirCIBelLocCiCheck = CI_ERROR;/*IDǷڱʵϽ*/ UINT16 wLogRouteId = 0U; /*̬·ID*/ UINT8 chExistEaCmd = CI_ERROR; /*Ƿɢ*/ + UINT32 dwCurCycNum = 0U; - wTrainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + stIvocToCiData.VobcId; + dwCurCycNum = Get2oo2CurCycleNum(); + + wTrainId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + stIvocToCiData.VobcId; cLocalCiId = GetSystemParaLocalCiId(); funcSwitchJumpLockDriveSwitch = GetCiFunctionSwitchConfig(FUNC_SWITCH_JUMPLOCK_DRIVE_SWITCH); wCmdSum = stIvocToCiData.wIvocCmdNum; - + + if (IVOC_CI_CMD_MAX > wCmdSum) { for (ii = 0U; ii < wCmdSum; ii++) @@ -10135,17 +10387,21 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) } case IVOC_CI_CMD_TYPE_PSD_OPEN_FOUR: { - for (jj = 0U; jj < chCmdDevSum; jj++) + if (TRAIN_MAIN_MODE == stIvocToCiData.controlMode) { - wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; - - wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ - if (0u < wBufIndex) + for (jj = 0U; jj < chCmdDevSum; jj++) { - if (PSD_SUM_MAX > wBufIndex) + wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; + + wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ + if (0u < wBufIndex) { - SetPsdVobcCmd(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN); - PsdDataStru[wBufIndex].psdEditGroupInfo = PSD_FOUR_EDIT_GROUP; + if (PSD_SUM_MAX > wBufIndex) + { + SetPsdVobcCmdCC(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN, dwCurCycNum); + + SetPsdEditGroupInfoDataCC(wCmdDevId, PSD_FOUR_EDIT_GROUP); + } } } } @@ -10153,17 +10409,20 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) } case IVOC_CI_CMD_TYPE_PSD_OPEN_SIX: { - for (jj = 0U; jj < chCmdDevSum; jj++) + if (TRAIN_MAIN_MODE == stIvocToCiData.controlMode) { - wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; - - wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ - if (0u < wBufIndex) + for (jj = 0U; jj < chCmdDevSum; jj++) { - if (PSD_SUM_MAX > wBufIndex) + wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; + + wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ + if (0u < wBufIndex) { - SetPsdVobcCmd(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN); - PsdDataStru[wBufIndex].psdEditGroupInfo = PSD_SIX_EDIT_GROUP; + if (PSD_SUM_MAX > wBufIndex) + { + SetPsdVobcCmdCC(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN, dwCurCycNum); + SetPsdEditGroupInfoDataCC(wCmdDevId, PSD_SIX_EDIT_GROUP); + } } } } @@ -10171,17 +10430,20 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) } case IVOC_CI_CMD_TYPE_PSD_OPEN_EIGHT: { - for (jj = 0U; jj < chCmdDevSum; jj++) + if (TRAIN_MAIN_MODE == stIvocToCiData.controlMode) { - wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; - - wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ - if (0u < wBufIndex) + for (jj = 0U; jj < chCmdDevSum; jj++) { - if (PSD_SUM_MAX > wBufIndex) + wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; + + wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ + if (0u < wBufIndex) { - SetPsdVobcCmd(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN); - PsdDataStru[wBufIndex].psdEditGroupInfo = PSD_EIGHT_EDIT_GROUP; + if (PSD_SUM_MAX > wBufIndex) + { + SetPsdVobcCmdCC(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDOPEN, dwCurCycNum); + SetPsdEditGroupInfoDataCC(wCmdDevId, PSD_EIGHT_EDIT_GROUP); + } } } } @@ -10189,16 +10451,19 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) } case IVOC_CI_CMD_TYPE_PSD_CLOSE: { - for (jj = 0U; jj < chCmdDevSum; jj++) + if (TRAIN_MAIN_MODE == stIvocToCiData.controlMode) { - wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; - wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ - if (0u < wBufIndex) + for (jj = 0U; jj < chCmdDevSum; jj++) { - if (PSD_SUM_MAX > wBufIndex) + wCmdDevId = stIvocToCiData.stCmdInfo[ii].wCmdDevId[jj]; + wBufIndex = GetPsdConfigBufIndex(wCmdDevId); /*ȡ±*/ + if (0u < wBufIndex) { - SetPsdVobcCmd(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDCLOSE); - PsdDataStru[wBufIndex].psdEditGroupInfo = PSD_FOUR_EDIT_GROUP; + if (PSD_SUM_MAX > wBufIndex) + { + SetPsdVobcCmdCC(wCmdDevId, wTrainId, VOBCTOCI_COMMAND_TYPE_PSDCLOSE, dwCurCycNum); + SetPsdEditGroupInfoDataCC(wCmdDevId, PSD_FOUR_EDIT_GROUP); + } } } } @@ -10520,6 +10785,8 @@ static void IvocInputCmdProc(const VobcToCiDataStruct stIvocToCiData) /*ɢ*/ SetTrainEaCmdState(wTrainId, TRAIN_EA_CMD_STATE_INVALID); } + + #if 0 /**Ծܿش򿪣ͬһζ߼Ծմ*/ if (FUNC_SWITCH_ON == funcSwitchJumpLockDriveSwitch) @@ -10579,6 +10846,7 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) UINT8 chLjkExistDBSwitch = 0U; UINT8 chVirHeadScreenPassFlag = 0U;/*ǰɸ־*/ UINT8 chVirTailScreenPassFlag = 0U;/*ɸ־*/ + UINT8 chTrainPosMonitorState = 0U; /*гλüල־*/ #if 0 UINT32 dwRecvIvocCount = 0U; @@ -10586,7 +10854,28 @@ static void ProcessIvocLoseCom(const VobcToCiDataStruct stIvocToCiData) dwRecvIvocCount = stIvocToCiData.ComStartCycle; chTimeState = SystemOverTimeCheck(dwRecvIvocCount, dwIvoc); #endif - wTrainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + stIvocToCiData.VobcId; + wTrainId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + stIvocToCiData.VobcId; + + /*Ϣ*/ + SetIvocTrainSpeed(wTrainId, 0u); + SetIvocTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + SetIvocControlMode(wTrainId, 0U);/*سģʽ*/ + SetIvocTrainMsgDelayTime(wTrainId, 0u);/*гϢӳʱ*/ + SetIvocTrainMode(wTrainId, 0u);/*гʻģʽ*/ + + SetIvocTrainMaxHeadLink(wTrainId, 0u); + SetIvocTrainMaxTailLink(wTrainId, 0u); + SetIvocTrainMaxHeadOffset(wTrainId, UINT32_MAX); + SetIvocTrainMaxTailOffset(wTrainId, UINT32_MAX); + SetIvocTrainMinHeadLink(wTrainId, 0U); + SetIvocTrainMinTailLink(wTrainId, 0U); + SetIvocTrainMinHeadOffset(wTrainId, UINT32_MAX); + SetIvocTrainMinTailOffset(wTrainId, UINT32_MAX); + + + + + chTrainTransmitState = GetTrainTransitmitStat(wTrainId); if ((TRAIN_COMM_STATE_UNKNOWN != chTrainTransmitState) && (TRAIN_COMM_STATE_BAD!= chTrainTransmitState)) @@ -10622,10 +10911,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 +10934,10 @@ 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); } } @@ -10720,6 +11015,7 @@ static void IvocUnLockOverlapProc(VobcToCiDataStruct* vobcToCiDataStru) SetOverlapUnlockApplyTrainId(vobcToCiDataStru->szAllowUnlockOverlapId[ii], 0U); SetReqIvocUnlockStartCycNum(vobcToCiDataStru->szAllowUnlockOverlapId[ii], 0U); SetOverlapIvocAllowUnlockFlag(vobcToCiDataStru->szAllowUnlockOverlapId[ii], IVOC_ALLOW_UNLOCK_OVERLAP_YES); /*ñгͬ*/ + SetOverlapBelPhyStopSteadyFlag(vobcToCiDataStru->szAllowUnlockOverlapId[ii], PHYSICAL_SECTION_STOPSTEADY_YES); } else { @@ -11179,7 +11475,7 @@ void ClearVobcStopSteadyData(UINT16 wTrainId) /*ӦͣϢ*/ if ((0U != PhyStopSteadyTrainId) && (wTrainId == PhyStopSteadyTrainId)) { - SetPhySecStopSteadyFlag(deviceId, PHYSICAL_SECTION_STOPSTEADY_NO);/*δͣ*/ + SetPhySecStopSteadyZcOrVobc(deviceId, PHYSICAL_SECTION_STOPSTEADY_NO);/*δͣ*/ SetPhyStopSteadyTrainId(deviceId, 0U); /*ϵijID*/ } else @@ -11507,6 +11803,33 @@ static void VobcConnectDataProc(VobcToCiDataStruct* vobcToCiDataStru) SetTrainNvramPosFlag(vobcToCiDataStru->VobcId, vobcToCiDataStru->chNvramPosFlag); + } + else + { + ; /**/ + } +} + +/* +* VobcгӿϢ +* ˵ vobcToCiDataStruVOBCݽṹָ +* ֵ void +*/ +static void HLHTFAOVobcConnectDataProc(VobcToCiDataStruct* vobcToCiDataStru) +{ + if (NULL != vobcToCiDataStru) + { + SetAblTrainDir(vobcToCiDataStru->VobcId, vobcToCiDataStru->trainDirection); + SetAblTrainMaxHeadLink(vobcToCiDataStru->VobcId, vobcToCiDataStru->wTrainMaxSafeHeadLink); + SetAblTrainMaxHeadOffset(vobcToCiDataStru->VobcId, vobcToCiDataStru->dwTrainMaxSafeHeadOffset); + SetAblTrainMinTailLink(vobcToCiDataStru->VobcId, vobcToCiDataStru->wTrainMinSafeTailLink); + SetAblTrainMinTailOffset(vobcToCiDataStru->VobcId, vobcToCiDataStru->dwTrainMinSafeTailOffset); + + SetTrainHeadSigId(vobcToCiDataStru->VobcId, vobcToCiDataStru->wHeadSigId); + SetTrainHeadTrainId(vobcToCiDataStru->VobcId, vobcToCiDataStru->wHeadVobcId); + + SetTrainNvramPosFlag(vobcToCiDataStru->VobcId, vobcToCiDataStru->chNvramPosFlag); + SetTrainLevel(vobcToCiDataStru->VobcId, vobcToCiDataStru->chTrainLevel); } else @@ -11531,12 +11854,17 @@ static void VobcConnectDataClear(const UINT16 wTrainId) SetAblTrainMinTailOffset(wTrainId, UINT32_MAX); SetTrainHeadSigId(wTrainId, 0U); - SetTrainHeadTrainId(wTrainId, TRAIN_ID_MAX); + SetTrainHeadTrainId(wTrainId, TRAIN_ID_INVAL); /*ǰгλϢ*/ ClearVobcHeadTrainData(wTrainId); /*FAOHLHTӿںϢ֡*/ ClearBackUpTrainInfo(wTrainId); + + + + + } else { @@ -11642,7 +11970,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 +12007,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 +12030,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 +12527,1627 @@ void OtherPartRouteCleanLogRouteProc(const UINT16 wCurRouteId) { /*ηǷ*/ } -} \ No newline at end of file +} + +/* +* 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); + (void)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 + {/**/ + } + +} + +/* +* CIRCͨ״̬ +* ˵void +* ֵ +* edit by cgh 20251107 +*/ +void ProcessCiAndRcInfo(void) +{ + UINT8 cSysType = 0U; /*ϵͳ*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cTransDevNum = 0U; + UINT8* pTransDecIdBuf = NULL; + UINT8 cDecType = 0U; /*Է*/ + UINT8 ii = 0U; + UINT8 cTransDevState = 0U; + UINT8 chControlState = 0U; /*״̬*/ + + cSysType = GetSystemWorkType(); + + if (SYSTEM_WORK_MODE_ALL == cSysType) + { + /*עֶ֧ϵͳRC/CI*/ + cLocalCiId = GetSystemParaLocalCiId(); + if (CI_SYSTEM_TYPE_CI == CI_SYSTEM_TYPE_RCI) + { + /*ǰΪCIȡRCϢ*/ + cTransDevNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RC); + pTransDecIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RC); + cDecType = CI_SYSTEM_TYPE_RC; + } + else + { + /*ǰΪRCȡCIϢ*/ + cTransDevNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); + pTransDecIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + cDecType = CI_SYSTEM_TYPE_CI; + } + + if ((0U < cTransDevNum) && (NULL != pTransDecIdBuf)) + { + for (ii = 0U; ii < cTransDevNum; ii++) + { + /*RC/CIͨ״̬*/ + (void)UpdateCiTransmitState(cLocalCiId, cDecType, pTransDecIdBuf[ii]); + cTransDevState = GetCiTransmitState(cDecType, pTransDecIdBuf[ii]); + if (TRANSMIT_STATE_GOOD == cTransDevState) + { + ; + } + else + { + if (CI_SYSTEM_TYPE_CI == CI_SYSTEM_TYPE_RCI) + { + if (cLocalCiId == pTransDecIdBuf[ii]) + { + /*ΪCI뱾RCͨжʱRC͵ݵȫ̬*/ + ResetLocalRcDynamicState(); + } + else + { + /*DZRC*/ + } + } + else + { + /**/ + } + } + } + } + else + { + /**/ + } + + chControlState = GetLocalCiBackUpPattern(); + + if ((CI_SYSTEM_TYPE_RC == CI_SYSTEM_TYPE_RCI) && (SYSTEM_WORK_MODE_MAIN != chControlState)) + { + /*CIRCݲ磬ƽ̨ͬڴ*/ + /*ν*/ + OverlapUnlockApplyDeal(); + /*·֤ͣϢ*/ + RouteStopensureDeal(); + } + else + { + /*CIģʽRCã*/ + } + } + else + { + /*ϵͳ漰*/ + } +} + +/** +* @brief ν +* @param[in] +* @return +* @note by cgh 20251107 +*/ +void OverlapUnlockApplyDeal(void) +{ + UINT16 wOverlapCurSum = 0U; /*εǰ*/ + UINT16 ii = 0U; /**/ + UINT8 chOverlapBelCiId = 0U; /*ID*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/**/ + UINT16 wOverlapId = 0U; /*ID*/ + UINT8 chOverlapUnlockApplyFlag = 0U; /*־*/ + UINT16 wOverlopBelRouteId = 0U; /*·ID*/ + UINT8 chReval = CI_ERROR; + UINT16 wTrainId = 0U; /*гID*/ + UINT32 dwReqUnlockStartCycNum = 0U; /*гظıʼں*/ + UINT32 dwCurSysCycNum = Get2oo2CurCycleNum(); /*ǰں*/ + + wOverlapCurSum = GetOverlapCurSum(); + + for (ii = 0U; ii < wOverlapCurSum; ii++) + { + wOverlapId = GetOverlapId(ii); + chOverlapBelCiId = GetOverlapBelongCiId(wOverlapId); + + if ((chLocalCiId == chOverlapBelCiId) && (0U != chLocalCiId)) + { + /*ֻı*/ + chOverlapUnlockApplyFlag = GetOverlapUnlockApplyFlag(wOverlapId); + + /*CIڱνŴRCǷIVOC뱣ν*/ + if (UNLOCK_OVERLAP_APPLY_YES == chOverlapUnlockApplyFlag) + { + wOverlopBelRouteId = GetOverlapBelongRouteId(wOverlapId); + + if (0U != wOverlopBelRouteId) + { + /*Ѱӽεг*/ + chReval = GetNearstVBTCTrainToOverlap(wOverlopBelRouteId, &wTrainId); + if (CI_SUCCESS == chReval) + { + wTrainId = wTrainId & 0x00FFU; + SetOverlapUnlockApplyTrainId(wOverlapId, wTrainId); + + dwReqUnlockStartCycNum = GetReqIvocUnlockStartCycNum(wOverlapId); + if (0U == dwReqUnlockStartCycNum) + { + /*һʱںΪʼں*/ + SetReqIvocUnlockStartCycNum(wOverlapId, dwCurSysCycNum); + } + else + { + ; /**/ + } + + } + else + { + ; /*ӽijȡʧܣIVOC뱣ν*/ + } + } + else + { + ; /*·IVOC뱣ν*/ + } + } + else + { + ; /*δ뱣νRCIVOC뱣ν*/ + } + } + else + { + ; /*DZ*/ + } + } +} + +/** +* @brief ·֤ͣ +* @param[in] +* @return +* @note by cgh 20251107 +*/ +void RouteStopensureDeal(void) +{ + UINT16 wRouteCurSum = 0U; /*·ǰ*/ + UINT16 ii = 0U; /*·*/ + UINT8 chRouteBelCiId = 0U; /*·ID*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/**/ + UINT16 wRouteId = 0U; /*·ID*/ + UINT8 chRouteState = 0U; /*·״̬*/ + UINT8 chZqxDelayflag = 0U;/*ȡʱ־*/ + UINT8 chZrjDelayType = 0U; /*·˽ʱ*/ + UINT32 dwDelayStartCycNum = 0u; /*ʱʼں*/ + UINT32 dwDelayTotalCycSum = 0u; /*ʱ*/ + UINT8 chRouteZrjCheckFlag = 0U; /*·˽־*/ + UINT8 chTimeStateCheck = 0U; /*ʱ״̬*/ + UINT8 chRouteStopEnsureFlag = 0U; /*·֤ͣ־*/ + UINT16 wTrainId = 0U; /*гID*/ + UINT16 wLastTrainId = 0U; /*֮ǰгID*/ + UINT32 curCycle = Get2oo2CurCycleNum(); /*ǰں*/ + + wRouteCurSum = GetRouteCurSum(); + + for (ii = 0U; ii < wRouteCurSum; ii++) + { + wRouteId = GetRouteId(ii); + chRouteBelCiId = GetRouteBelongCiId(wRouteId); + + if ((chLocalCiId == chRouteBelCiId) && (0U != chLocalCiId)) + { + chRouteState = GetRouteState(wRouteId); + if (ROUTE_STATE_DELAY_UNLOCK != chRouteState) + { + /* ΪʱѯгID--ֹCIֱͬ·ͨݣRC޷֤ͣID */ + SetRouteStopEnsureTrainId(wRouteId, 0U); + SetRouteStopEnsureCyc(wRouteId, 0U); + SetRouteStopensureFlag(wRouteId, ROUTE_STOPENSURE_NO); + } + else + { + /*ʱҪIVOC*/ + chZqxDelayflag = GetRouteZongQuXiaoDelayFlag(wRouteId); + + if (ROUTE_ZQX_DELAY_YES != chZqxDelayflag) + { + dwDelayStartCycNum = GetRouteDelayUnlockStartCycNum(wRouteId); + dwDelayTotalCycSum = GetRouteDelayCycleCount(wRouteId); + chZrjDelayType = GetRouteZongRenJieDelayType(wRouteId); + + if (ROUTE_ZRJ_DELAY_TYPE_IDLE == chZrjDelayType) + { + chRouteZrjCheckFlag = RouteCancelLogicProcess(wRouteId); + + if (CI_SUCCESS == chRouteZrjCheckFlag) + { + chTimeStateCheck = SystemOverTimeCheck(dwDelayStartCycNum, dwDelayTotalCycSum); + chRouteStopEnsureFlag = GetRouteStopensureFlag(wRouteId); + + if ((CI_TIME_OUT != chTimeStateCheck) && (ROUTE_STOPENSURE_YES != chRouteStopEnsureFlag)) + { + wTrainId = GetRouteNearestTrainId(wRouteId); + wLastTrainId = GetRouteStopEnassureTrainId(wRouteId); + + if ((wTrainId != wLastTrainId) && (0u != wTrainId)) + { + /* ѯʻǰˣ */ + SetRouteStopEnsureTrainId(wRouteId, wTrainId); + SetRouteStopEnsureCyc(wRouteId, curCycle); + } + else + { + ; /*ǰѾУά*/ + } + } + else + { + /*CIý·״̬ȻRCڷʱ*/ + ; + } + } + else + { + /*CIý·״̬ȻRCڷʱ*/ + ; + } + } + else if ((ROUTE_ZRJ_DELAY_TYPE_ALL_EXP == chZrjDelayType) || (ROUTE_ZRJ_DELAY_TYPE_EXP_TO_OCCUPY == chZrjDelayType)) + { + chRouteZrjCheckFlag = CheckRouteZongRenJieFeasibility(wRouteId); + + if (CI_SUCCESS == chRouteZrjCheckFlag) + { + chTimeStateCheck = SystemOverTimeCheck(dwDelayStartCycNum, dwDelayTotalCycSum); + chRouteStopEnsureFlag = GetRouteStopensureFlag(wRouteId); + + if ((CI_TIME_OUT != chTimeStateCheck) && (ROUTE_STOPENSURE_YES != chRouteStopEnsureFlag)) + { + wTrainId = GetRouteNearestTrainId(wRouteId); + wLastTrainId = GetRouteStopEnassureTrainId(wRouteId); + + if ((wTrainId != wLastTrainId) && (0u != wTrainId)) + { + /* ѯʻǰˣ */ + SetRouteStopEnsureTrainId(wRouteId, wTrainId); + SetRouteStopEnsureCyc(wRouteId, curCycle); + } + else + { + ; /*ǰѾУά*/ + } + } + else + { + /*CIý·״̬ȻRCڷʱ*/ + ; + } + } + else + { + /*CIý·״̬ȻRCڷʱ*/ + ; + } + } + else + { + /*CIý·״̬ȻRCڷʱ*/ + ; + } + + + } + else + { + ; /*ȡʱ*/ + } + } + } + else + { + ; /*DZ·*/ + } + } +} + +/** +* @brief ˫ϵͳں +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void UpdateDoubleSystemMergeInfo(void) +{ + /*ͣ*/ + PhySecStopSteadyMergeDeal(); + /*֤ͣϢں*/ + RouteStopensureFlagMergeDeal(); + + /*źŻϢں*/ + SignalInfoMergeDeal(); + + + + /*豸ں״̬*/ + + /*߼Ϣںϴ*/ + LogSecInfoMergePro(); + + /*ѩϢںϴ*/ + SnowInfoMergePro(); + + + /*ں*/ + PsdCmdMergeDeal(); +} + +/* +* ߼Ϣںϴ +* ˵ +* ֵ +* Created By LQ 2025.11.07 +*/ +void LogSecInfoMergePro(void) +{ + UINT16 wLogSecCurSum = 0U; /*߼*/ + UINT16 ii = 0U; + UINT8 cClearLimitSpeedState = 0U; /*ȷ״̬*/ + UINT16 wLogSecId = 0U; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cRcCommState = TRANSMIT_STATE_BAD; /*RCͨ״̬*/ + UINT8 cPreLimitSpeedSetState = 0U; /*һڵ߼ʱ״̬*/ + UINT8 cCurLimitSpeedSetState = 0U; /*ڵ߼ʱ״̬*/ + UINT8 cOccStateRc = 0U; /*RC͵߼γʼռ״̬*/ + UINT8 cOccStateZc = 0U; /*ZC͵߼γʼռ״̬*/ + UINT8 cTXOccStateRc = 0U; /*RC͵߼ͨųռ״̬*/ + UINT8 cTXOccStateZc = 0U; /*ZC͵߼ͨųռ״̬*/ + UINT8 cWorkMode = 0U; /*ģʽ*/ + + cClearLimitSpeedState = GetLabourCancelLinShiXianState(); + + cLocalCiId = GetSystemParaLocalCiId(); + cRcCommState = GetCiTransmitState(CI_SYSTEM_TYPE_RC, cLocalCiId); + + cWorkMode = GetLocalRcWorkMode(); /*ȡģʽ*/ + + wLogSecCurSum = GetLogicSecCurSum(); + + for (ii = 0U; ii < wLogSecCurSum; ii++) + { + wLogSecId = GetLogicSecId(ii); + + /****** ߼ʱ״̬ںϴ ******/ + /*ںԭZCͨʱȲZCʱ״̬*/ + cPreLimitSpeedSetState = GetLogSecLinShiXianSuSetState(wLogSecId); + if (LINSHIXIANSU_COMM_BAD_STATE != cClearLimitSpeedState) + { + /*ZCͨʱѽZC߼ʱ״̬*/ + cCurLimitSpeedSetState = GetLogSecLinShiXianSuStateZc(wLogSecId); + } + else if ((TRANSMIT_STATE_GOOD == cRcCommState) || (RC_WORK_MODE_TIOC == cWorkMode)) + { + /*ZCͨжʱǰΪRCģʽRC߼ʱ״̬*/ + cCurLimitSpeedSetState = GetLogSecLinShiXianSuStateCC(wLogSecId); + } + else + { + /*ZCRCͨжʱZC߼ʱ״̬״̬ʱںȡ״̬͹ܿ25+52*/ + cCurLimitSpeedSetState = GetLogSecLinShiXianSuStateZc(wLogSecId); + } + + SetLogSecLinShiXianSuState(wLogSecId, cCurLimitSpeedSetState); /*߼ʱ״̬*/ + if ((LOGSEC_LSXS_SET_STATE_YES == cCurLimitSpeedSetState) && (LOGSEC_LSXS_SET_STATE_YES != cPreLimitSpeedSetState)) + { + ClearLgcSecBelongRtXsCfm(wLogSecId); /*Ӧ·ȷ״̬*/ + } + else + { + /**/ + } + + /****** ߼γʼռ״̬ںϴ ******/ + /*ںԭCT > > UT*/ + cOccStateRc = GetLogSecOccupyStateCC(wLogSecId); + cOccStateZc = GetLogSecOccupyStateZc(wLogSecId); + if ((LOGICSECTION_OCCUPY_CT == cOccStateRc) || (LOGICSECTION_OCCUPY_CT == cOccStateZc)) + { + /*RCZCһΪCTռãCTռ*/ + SetLogSecOccupyState(wLogSecId, LOGICSECTION_OCCUPY_CT); + } + else if ((LOGICSECTION_OCCUPY_NO == cOccStateRc) || (LOGICSECTION_OCCUPY_NO == cOccStateZc)) + { + /*CTռʱRCZCһΪУÿ*/ + SetLogSecOccupyState(wLogSecId, LOGICSECTION_OCCUPY_NO); + } + else + { + /*RCZCCTռúͿУUTռ*/ + SetLogSecOccupyState(wLogSecId, LOGICSECTION_OCCUPY_UT); + } + + /****** ߼ͨųռ״̬ںϴ ******/ + /*ںԭͨųռ > ޳ͨųռ*/ + cTXOccStateRc = GetLogSecTXOccupyStateCC(wLogSecId); + cTXOccStateZc = GetLogSecTXOccupyStateZc(wLogSecId); + if ((LOGICSECTION_OCCUPY_TX == cTXOccStateRc) || (LOGICSECTION_OCCUPY_TX == cTXOccStateZc)) + { + /*RCZCһΪͨųռãͨųռ*/ + SetLogSecTXOccupyState(wLogSecId, LOGICSECTION_OCCUPY_TX); + } + else + { + /*RCZCͨųռãͨųռ*/ + SetLogSecTXOccupyState(wLogSecId, LOGICSECTION_OCCUPY_NO_TX); + } + } +} + +/* +* ѩϢںϴ +* ˵ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SnowInfoMergePro(void) +{ + UINT8 cAllSnowModeRc = 0U; /*RCȫѩģʽ*/ + UINT8 cAllSnowModeZc = 0U; /*ZCȫѩģʽ*/ + UINT8 cAreaSnowNumRc = 0U; /*RCѩ*/ + AreaSnowInfoStruct* pAreaSnowInfoRc = NULL; /*RCѩϢ*/ + UINT8 cAreaSnowNumZc = 0U; /*ZCѩ*/ + AreaSnowInfoStruct* pAreaSnowInfoZc = NULL; /*ZCѩϢ*/ + UINT8 cLocalSnowModeRc = 0U; /*RCıѩģʽ*/ + UINT8 cLocalSnowModeZc = 0U; /*ZCıѩģʽ*/ + + /****** ȫѩģʽںϴ ******/ + /*ںԭȫѩģʽЧ > ȫѩģʽЧ*/ + cAllSnowModeRc = GetAllSnowModelCC(); + cAllSnowModeZc = GetAllSnowModelZc(); + if ((CI_ALL_SNOW_VALID == cAllSnowModeRc) || (CI_ALL_SNOW_VALID == cAllSnowModeZc)) + { + /*RCZCһΪȫѩģʽЧȫѩģʽЧ*/ + SetAllSnowModel(CI_ALL_SNOW_VALID); + } + else + { + /*RCZCΪȫѩģʽЧȫѩģʽЧ*/ + SetAllSnowModel(CI_ALL_SNOW_UNVALID); + } + + /****** ѩϢںϴ ******/ + /*ںԭTMC߱ȰZC*/ + cAreaSnowNumRc = GetLocalAreaSnowNumCC(); + pAreaSnowInfoRc = GetLocalAreaSnowCC(); + cAreaSnowNumZc = GetLocalAreaSnowNumZc(); + pAreaSnowInfoZc = GetLocalAreaSnowZc(); + if (0U < cAreaSnowNumZc) + { + SetLocalAreaSnowInfo(cAreaSnowNumZc, pAreaSnowInfoZc); + } + else + { + SetLocalAreaSnowInfo(cAreaSnowNumRc, pAreaSnowInfoRc); + } + + /****** ѩģʽںϴ ******/ + /*ںԭ򣺱ѩģʽЧ > ѩģʽЧ*/ + cLocalSnowModeRc = GetLocalSnowModelCC(); + cLocalSnowModeZc = GetLocalSnowModelZc(); + if ((CI_LOCAL_SNOW_VALID == cLocalSnowModeRc) || (CI_LOCAL_SNOW_VALID == cLocalSnowModeZc)) + { + /*RCZCһΪȫѩģʽЧȫѩģʽЧ*/ + SetLocalSnowModel(CI_LOCAL_SNOW_VALID); + } + else + { + /*RCZCΪȫѩģʽЧȫѩģʽЧ*/ + SetLocalSnowModel(CI_LOCAL_SNOW_UNVALID); + } +} + +/** +* @brief ·֤ͣϢں +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void RouteStopensureFlagMergeDeal(void) +{ + UINT8 chRouteStopEnsureFlagZc = ROUTE_STOPENSURE_NO; /*ZC͵Ľ·֤ͣ־*/ + UINT8 chRouteStopEnsureFlagRc = ROUTE_STOPENSURE_NO; /*RC͵Ľ·֤ͣ־*/ + UINT16 wRouteCurSum = 0U; /*·ǰ*/ + UINT16 ii = 0U; /*·*/ + UINT8 chRouteBelCiId = 0U; /*·ID*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/**/ + UINT16 wRouteId = 0U; /*·ID*/ + + wRouteCurSum = GetRouteCurSum(); + + for (ii = 0U; ii < wRouteCurSum; ii++) + { + wRouteId = GetRouteId(ii); + chRouteBelCiId = GetRouteBelongCiId(wRouteId); + + if ((chLocalCiId == chRouteBelCiId) && (0U != chRouteBelCiId)) + { + chRouteStopEnsureFlagZc = GetRouteStopensureFlagZc(wRouteId); + chRouteStopEnsureFlagRc = GetRouteStopensureFlagCC(wRouteId); + + if ((ROUTE_STOPENSURE_YES == chRouteStopEnsureFlagZc) || (ROUTE_STOPENSURE_YES == chRouteStopEnsureFlagRc)) + { + /*κһ֤ͣںϽΪ֤߱ͣ*/ + SetRouteStopensureFlag(wRouteId, ROUTE_STOPENSURE_YES); + } + else + { + /*˫֤ͣսںΪ֤߱ͣ*/ + SetRouteStopensureFlag(wRouteId, ROUTE_STOPENSURE_NO); + } + } + else + { + ; /*DZ·*/ + } + } +} + +/** +* @brief źŻϢںϴ +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void SignalInfoMergeDeal(void) +{ + UINT8 chSignalLightExtinctStateZc = SIGNAL_LIGHT_EXTICT_STATE_YES; /*ZC͵źŻ״̬*/ + UINT8 cchSignalLightExtinctStateRc = SIGNAL_LIGHT_EXTICT_STATE_YES; /*RC͵źŻ״̬*/ + UINT16 wSignalCurSum = 0U; /*źŻǰ*/ + UINT16 ii = 0U; /*źŻ*/ + UINT16 wSignalId = 0U; /*źŻID*/ + UINT8 cSignalCrossStateRc = SIGNAL_CROSS_STATE_NO; /*RCźŻѹ״̬*/ + UINT8 cSignalCrossStateZc = SIGNAL_CROSS_STATE_NO; /*ZCźŻѹ״̬*/ + + wSignalCurSum = GetSignalCurSum(); + for (ii = 0U; ii < wSignalCurSum; ii++) + { + wSignalId = GetSignalId(ii); + + /****** źŻ״̬ںϴ ******/ + /*ںԭ > */ + chSignalLightExtinctStateZc = GetSignalLightExtinctStateZc(wSignalId); + cchSignalLightExtinctStateRc = GetSignalLightExtinctStateCC(wSignalId); + + if ((SIGNAL_LIGHT_EXTICT_STATE_NO == chSignalLightExtinctStateZc) || (SIGNAL_LIGHT_EXTICT_STATE_NO == cchSignalLightExtinctStateRc)) + { + /*κһƣںϽΪ*/ + (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + } + else + { + /*˫ƣںϽΪ*/ + (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + } + + /****** źŻѹ״̬ںϴ ******/ + /*ںԭ򣺿ѹ > δѹ*/ + cSignalCrossStateRc = GetSignalCrossStateCC(wSignalId); + cSignalCrossStateZc = GetSignalCrossStateZc(wSignalId); + if ((SIGNAL_CROSS_STATE_YES == cSignalCrossStateRc) || (SIGNAL_CROSS_STATE_YES == cSignalCrossStateZc)) + { + /*κһڿѹںϽΪѹ*/ + SetSignalCrossState(wSignalId, SIGNAL_CROSS_STATE_YES); + } + else + { + /*˫δѹںϽΪδѹ*/ + SetSignalCrossState(wSignalId, SIGNAL_CROSS_STATE_NO); + } + } +} + + +/* +* RCģʽVOBCRC +* ˵ void +* ֵ void +*/ +static void ProcessVobcToRcData(void) +{ + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 chValid = CI_ERROR; + UINT8 mainValid = CI_ERROR; + + UINT32 curCycNum = 0U; + UINT32 dwRcvCycNum = 0U; + UINT8 headCheck = CI_ERROR; + UINT8 psdCmdCode = 0U; + UINT8 cRcWorkMode = 0U; + UINT8 vobcToRcDataSum = 0u; + UINT32 dwDelayTime = 0U; + UINT32 dwVobcBrkTime = 0U; + UINT8 funRet = 0u; + UINT8 tempVobcNum = 0U; + + curCycNum = Get2oo2CurCycleNum(); + vobcToRcDataSum = GetVobcToRcSum(); + + for (ii = 0U; ii < vobcToRcDataSum; ii++) + { + if (0U != VobcToRcDataStru[ii].VobcId) + { + + dwDelayTime = CalTrainMsgDelayTime(VobcToRcDataStru[ii].VobcId, CI_SYSTEM_TYPE_VOBC); + dwVobcBrkTime = GetCiAndVobcTransBadEnsureTime(); + if (dwDelayTime > dwVobcBrkTime) + { + dwDelayTime = dwVobcBrkTime; + } + (void)SetVobcTrainMsgDelayTime(VobcToRcDataStru[ii].VobcId, dwDelayTime); + + + /*ʹûͨͷжRCVOBCͨǷЧ*/ + chValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(VobcToRcDataStru[ii].VobcId)); + + /*GALʶȼͨ*/ + if (CI_SUCCESS == chValid) + { + dwRcvCycNum = VobcToRcDataStru[ii].ComStartCycle; + /* vobdidЧ ͨЧ ſ*/ + if (dwRcvCycNum == curCycNum)/*ڣ*/ + { + /*ӿݴ*/ + VobcInputRefreshTrain(VobcToRcDataStru[ii]); + } + } + else + { + /*ʧͨŴ*/ + VobcToRcDataClear(VobcToRcDataStru[ii].VobcId); + + (void)CommonMemSet(&(VobcToRcDataStru[ii]), sizeof(VobcToRcDataStruct), 0, sizeof(VobcToRcDataStruct));/**/ + } + } + else + { + ; /**/ + } + } + + + + /*ͨжϵVOBC*/ + for (ii = 0U; ii < vobcToRcDataSum; ii++) + { + if (0u != VobcToRcDataStru[ii].VobcId) + { + CommonMemCpy(&VobcToRcDataStru[tempVobcNum], sizeof(VobcToRcDataStruct), &VobcToRcDataStru[ii], sizeof(VobcToRcDataStruct)); + tempVobcNum++; + } + } + + for (ii = tempVobcNum; ii < VOBC_TO_CI_SUM_MAX; ii++) + { + /**/ + (void)CommonMemSet(&(VobcToRcDataStru[ii]), sizeof(VobcToRcDataStruct), 0, sizeof(VobcToRcDataStruct));/**/ + } + + VobcToRcSum = tempVobcNum; +} + +/* +* ˢг +* ˵ stvobcToRcDataVOBCݽṹָ +* ֵ void +*/ +static void VobcInputRefreshTrain(const VobcToRcDataStruct stvobcToRcData) +{ + UINT16 wTrainId = 0U; + UINT32 dwCurCycle = 0U; + UINT8 chIndex = 0U; + TrainEaStru szTmp[EA_MAX_NUM] = { 0U }; + UINT8 chRet = 0U; + + + + wTrainId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + stvobcToRcData.VobcId; + chRet = SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); + chRet &= SetVobcTrainDir(wTrainId, stvobcToRcData.trainDirection); + chRet &= SetVobcTrainSpeed(wTrainId, stvobcToRcData.wTrainSpeed); + chRet &= SetVobcTrainSpeedDir(wTrainId, stvobcToRcData.chSpeedDir); + chRet &= SetVobcTrainLevel(wTrainId, stvobcToRcData.chTrainLevel); + + + chRet &= SetVobcTrainMaxHeadLink(wTrainId, stvobcToRcData.wTrainMaxSafeHeadLink); + chRet &= SetVobcTrainMaxTailLink(wTrainId, stvobcToRcData.wTrainMaxSafeTailLink); + chRet &= SetVobcTrainMaxHeadOffset(wTrainId, stvobcToRcData.dwTrainMaxSafeHeadOffset); + chRet &= SetVobcTrainMaxTailOffset(wTrainId, stvobcToRcData.dwTrainMaxSafeTailOffset); + chRet &= SetVobcTrainMinHeadLink(wTrainId, stvobcToRcData.wTrainMinSafeHeadLink); + chRet &= SetVobcTrainMinTailLink(wTrainId, stvobcToRcData.wTrainMinSafeTailLink); + chRet &= SetVobcTrainMinHeadOffset(wTrainId, stvobcToRcData.dwTrainMinSafeHeadOffset); + chRet &= SetVobcTrainMinTailOffset(wTrainId, stvobcToRcData.dwTrainMinSafeTailOffset); + + + chRet &= SetVobcTrainOtherPointDir(wTrainId, stvobcToRcData.trainDirection); /*гȫˡСȫǰˡȫǰ˵з*/ + SetVobcControlMode(wTrainId, stvobcToRcData.controlMode);/*سģʽ*/ + + + + SetVobcTrainMode(wTrainId, stvobcToRcData.chTrainMode);/*гʻģʽ*/ + + + + + if (CI_ERROR == chRet) + { + debug_infor_printf((const)"VobcInputRefreshTrain ERROR TrainID:%d\n", wTrainId); + } + else + { + /**/ + } +} + + +/* +* VobcгϢ +* ˵ UINT16 wTrainIdVOBCid +* ֵ void +*/ +static void VobcToRcDataClear(const UINT16 wTrainId) +{ + if ((TRAIN_SUM_MAX > wTrainId) && (0U < wTrainId)) + { + (void)SetVobcTrainSpeed(wTrainId, 0u); + (void)SetVobcTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + + (void)SetVobcTrainMaxHeadLink(wTrainId, 0u); + (void)SetVobcTrainMaxTailLink(wTrainId, 0u); + (void)SetVobcTrainMaxHeadOffset(wTrainId, UINT32_MAX); + (void)SetVobcTrainMaxTailOffset(wTrainId, UINT32_MAX); + (void)SetVobcTrainMinHeadLink(wTrainId, 0u); + (void)SetVobcTrainMinTailLink(wTrainId, 0u); + (void)SetVobcTrainMinHeadOffset(wTrainId, UINT32_MAX); + (void)SetVobcTrainMinTailOffset(wTrainId, UINT32_MAX); + + SetVobcControlMode(wTrainId, 0u);/*سģʽ*/ + SetVobcTrainMode(wTrainId, 0u);/*гʻģʽ*/ + SetVobcTrainMsgDelayTime(wTrainId, 0u);/*гϢӳʱ*/ + } + else + { + ; /**/ + } +} + +/* +* źŻгѹ +* ˵ +* ֵ +* Created By LQ 2025.11.11 +*/ +void SignalTrainCrossPro(void) +{ + UINT8 cSignalCrossState = SIGNAL_CROSS_STATE_NO; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT16 wSignalCurSum = 0U; /*źŻ*/ + UINT16 ii = 0U; + UINT16 wSignalId = 0U; /*źŻID*/ + UINT8 cSignalBelongCiId = 0U; /*źŻ*/ + UINT8 cSignalCurColor = 0U; /*źŻǰɫ*/ + UINT8 cSignalOpenState = 0U; /*źŻ״̬*/ + UINT16 wStartRelRouteSum = 0U; /*ԸźŻΪʼźŻĽ·*/ + UINT16* pStartRelRouteId = NULL; /*ԸźŻΪʼźŻĽ·ID*/ + UINT16 jj = 0U; + UINT8 cRouteState = 0U; /*·״̬*/ + UINT8 cRouteLevel = 0U; /*·*/ + UINT8 cFunRet = 0U; + UINT8 cRouteResTrainSum = 0U; /*·Դг*/ + UINT16 szRouteResTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; /*·ԴгID*/ + UINT8 cTrainEnterState = 0U; /*гʻ·״̬*/ + + cLocalCiId = GetSystemParaLocalCiId(); + wSignalCurSum = GetSignalCurSum(); + for (ii = 0U; ii < wSignalCurSum; ii++) + { + wSignalId = GetSignalId(ii); + cSignalBelongCiId = GetSignalBelongCiId(wSignalId); + if (cLocalCiId == cSignalBelongCiId) + { + cSignalCurColor = GetSignalCurColor(wSignalId); /*ȡźŻɫͿ״̬*/ + cSignalOpenState = GetSignalOpenCloseState(cSignalCurColor); + if (SIGNAL_OPEN == cSignalOpenState) + { + wStartRelRouteSum = GetStartSignalRouteSum(wSignalId); /*ȡԸźŻΪʼźŻĽ·Ŀ*/ + pStartRelRouteId = GetStartSignalRouteBuf(wSignalId); /*ȡԸźŻΪʼźŻĽ·ID*/ + if ((0U < wStartRelRouteSum) && (NULL != pStartRelRouteId)) + { + for (jj = 0U; jj < wStartRelRouteSum; jj++) + { + cRouteState = GetRouteState(pStartRelRouteId[jj]); /*ȡ·״̬*/ + cRouteLevel = GetRouteLevel(pStartRelRouteId[jj]); /*ȡ·*/ + if ((ROUTE_STATE_NEAR_OPEN == cRouteState) && (ROUTE_LEVEL_CBTC == cRouteLevel)) + { + cFunRet = GetRouteInOutFstLgcTrainInfo(pStartRelRouteId[jj], &cRouteResTrainSum, szRouteResTrainId); /*ȡ·ԴгϢ*/ + + if ((CI_SUCCESS == cFunRet) && (1U == cRouteResTrainSum)) + { + cTrainEnterState = dsuTrainMinHeadCrossSignal(szRouteResTrainId[0], pStartRelRouteId[jj]); /*гʻ·״̬*/ + if (TRAIN_ENTER_ROUTE_CROSS == cTrainEnterState) + { + /*ÿѹ*/ + cSignalCrossState = SIGNAL_CROSS_STATE_YES; + } + else + { + /*δѹ*/ + } + } + else + { + /*ȡ·ԴгϢʧܻԴгδѹ*/ + } + break; + } + else + { + /*·δӽŻCBTCδѹ*/ + } + } + } + else + { + /*ȡʧܣ*/ + } + } + else + { + /*źŻδţδѹ*/ + } + + /*ݼRCźŻѹ״̬*/ + SetSignalCrossStateCC(wSignalId, cSignalCrossState); + } + else + { + /*DZźŻѹ״̬*/ + } + } +} + +/* +* IVOCRC +* ˵ void +* ֵ void +*/ +static void ProIvocToRcLocationData(void) +{ + UINT8 ii = 0u; + UINT8 chIvocSum = GetIvocToRcSum(); + IvocToRcDataStruct* pIvocToCiDataStru = GetVobcToCiDataStru(); + UINT8 dataValid = 0u; + UINT8 getResult = CI_ERROR; + UINT32 dwCurCycNum = 0U; + + dwCurCycNum = Get2oo2CurCycleNum(); + + if (NULL != pIvocToCiDataStru) + { + for (ii = 0u; ii < chIvocSum; ii++) + { + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)(pIvocToCiDataStru[ii].VobcId)); + + if (CI_SUCCESS == getResult) + { + if (IVOC_CI_INFO_TYPE_CONTROL == pIvocToCiDataStru[ii].appInfoType) + { + /*ǰˢгλúͿسģʽ*/ + RefreshIvocInputlocation(pIvocToCiDataStru[ii]); + } + } + else + {/*޴*/ + } + } + } +} + + +/** +* @brief ͣͣϢں +* @param[in] void +* @return +*/ +static void PhySecStopSteadyMergeDeal(void) +{ + UINT8 chPhySecStopSteadyZc = 0u; /*ZC͵α־*/ + UINT8 chPhySecStopSteadyRc = 0u; /*RC͵α־*/ + UINT16 ii = 0U; /**/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/**/ + UINT16 wPhySecCurSum = 0u; + UINT16 phySecId = 0u; + UINT8 belongCiId = 0u; + + wPhySecCurSum = GetPhySecCurSum(); + + for (ii = 0U; ii < wPhySecCurSum; ii++) + { + phySecId = GetPhySecId(ii); + belongCiId = GetPhySecBelongCiId(phySecId); + + if ((chLocalCiId == belongCiId) && (0U != belongCiId)) + { + + chPhySecStopSteadyZc = GetPhySecStopSteadyZcOrVobc(phySecId); + chPhySecStopSteadyRc = GetPhySecStopSteadyFlagCC(phySecId); + + if ((PHYSICAL_SECTION_STOPSTEADY_YES == chPhySecStopSteadyZc) || (PHYSICAL_SECTION_STOPSTEADY_YES == chPhySecStopSteadyRc)) + { + /*κһͣϢںϽΪͣ*/ + SetPhySecStopSteadyFlag(phySecId, PHYSICAL_SECTION_STOPSTEADY_YES); + + } + else + { + /*˫ͣȣսںΪͣ*/ + SetPhySecStopSteadyFlag(phySecId, PHYSICAL_SECTION_STOPSTEADY_NO); + } + } + else + { + ; /*DZ·*/ + } + } +} + +/** +* @brief ſں +* @param[in] void +* @return +*/ +static void PsdCmdMergeDeal(void) +{ + UINT16 ii = 0U; /**/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/**/ + UINT16 psdSum = 0U; + UINT16 psdId = 0u; + UINT8 belongCIid = 0u; + UINT8 chPsdVobcCmdCC = 0U; + UINT8 chPsdEditGroupCC = 0u; + UINT8 chPsdVobcIdCC = 0U; + + psdSum = GetPsdSum(); + for (ii = 0u; ii < psdSum; ii++) + { + psdId = GetPsdId(ii); + belongCIid = GetPsdBelongCiId(psdId); + if ((chLocalCiId == belongCIid) && (0u != belongCIid)) + { + chPsdVobcCmdCC = GetPsdVobcCmdCC(psdId); + + + if ((VOBCTOCI_COMMAND_TYPE_PSDOPEN == chPsdVobcCmdCC) + || (VOBCTOCI_COMMAND_TYPE_PSDCLOSE == chPsdVobcCmdCC)) + { + chPsdVobcIdCC = GetPsdVobcIdCC(psdId); + chPsdEditGroupCC = GetPsdEditGroupInfoDataCC(psdId); + if ((0u < chPsdVobcIdCC) && (0u < chPsdEditGroupCC)) + {/*RCںϵPSDṹ*/ + SetPsdVobcCmd(psdId, chPsdVobcIdCC, chPsdVobcCmdCC); + SetPsdEditGroupInfoData(psdId, chPsdEditGroupCC); + } + } + } + } + +} + + +/* +* VOBCCI +* ˵ void +* ֵ void +*/ +void ProcessIvocToRCData(void) +{ + UINT8 ii = 0u; + UINT8 jj = 0u; + UINT8 kk = 0u; + UINT16 wRouteIndex = 0u; + UINT16 wRouteSum = 0u; + UINT8 chIvocToCiDataSum = GetIvocToRcSum(); + IvocToRcDataStruct* pIvocToRcDataStru = GetVobcToCiDataStru(); + UINT8 chLineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*ȡ·ʶ*/ + UINT8 dataValid = 0u; + UINT8 bufIndex = 0u; + UINT16 psdId = 0u; + UINT8 localCiId = 0u; + UINT8 belongCiId = 0u; + UINT8 deviceSum = 0u;/*ͨ豸*/ + UINT8* deviceIdBuf = NULL;/*ͨ豸ID*/ + UINT8 platformId = 0u; + UINT16 platformPsdId = 0u; + UINT16 wRouteId = 0u; + UINT16 wTrainId = 0u; + UINT32 dwDelayTime = 0u; + UINT32 dwVobcBrkTime = 0u; + UINT16 phySecCurSum = 0u; + UINT16 deviceId = 0u; + UINT8 funRet = CI_ERROR; + UINT8 getResult = CI_ERROR; + UINT8 chRCMode = GetLocalRcWorkMode(); + UINT32 dwCurCycNum = 0U; + UINT32 dwTransmitBadEnsureCount = 0U; /*CIVOBCͨжжʱ*/ + UINT8 cTrainReportState = 0U; + UINT8 cCheckFlag = CI_ERROR; + + + + localCiId = GetSystemParaLocalCiId(); + dwCurCycNum = Get2oo2CurCycleNum(); + dwTransmitBadEnsureCount = GetCiAndVobcTransBadEnsureCnt(); + + /*гΪתΪUCT*/ + ClearTrainCanUctFlag(); + + + + /* ֮ǰ֤ͣϢԴȡϢ */ + phySecCurSum = GetPhySecCurSum(); + for (ii = 0u; ii < phySecCurSum; ii++) + { + deviceId = GetPhySecId(ii); + SetPhySecStopSteadyFlagCC(deviceId, PHYSICAL_SECTION_STOPSTEADY_NO);/*δͣ*/ + } + + wRouteSum = GetRouteCurSum(); + for (wRouteIndex = 0u; wRouteIndex < wRouteSum; wRouteIndex++) + { + wRouteId = GetRouteId(wRouteIndex); + belongCiId = GetRouteBelongCiId(wRouteId); + if (belongCiId == localCiId) + { + /*ý·δյ֤ͣ*/ + SetRouteStopensureFlagCC(wRouteId, ROUTE_STOPENSURE_NO); + + /*ý·Դȡ*/ + SetRouteResourceCancelFlag(wRouteId, ROUTE_RESOURCECANCEL_NO); + } + else + { + /**/ + } + } + + + for (ii = 0u; ii < chIvocToCiDataSum; ii++) + { + wTrainId = pIvocToRcDataStru[ii].VobcId; /*ǰõ˱*/ + dwDelayTime = CalTrainMsgDelayTime(wTrainId, CI_SYSTEM_TYPE_IVOC); + dwVobcBrkTime = GetCiAndVobcTransBadEnsureTime(); + if (dwDelayTime > dwVobcBrkTime) + { + dwDelayTime = dwVobcBrkTime; + } + funRet = SetIvocTrainMsgDelayTime(wTrainId, dwDelayTime); + /*ͨ·ʹϢʣЧжCIVOBCͨǷж*/ + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)(pIvocToRcDataStru[ii].VobcId)); + if ((CI_ERROR == getResult) || (CI_ERROR == funRet)) + { + dataValid = 0u; + } + else + {/*ϢЧ*/ + dataValid = 1u; + } + + if (1u == dataValid) + { + IvocInputDataProcCC(&(pIvocToRcDataStru[ii])); /* IVOC*/ + cTrainReportState = GetTrainReportState(pIvocToRcDataStru[ii].VobcId); + if (BIT_VAL_00000001B == ((cTrainReportState >> 3U) & BIT_VAL_00000001B)) + { + cCheckFlag = CI_SUCCESS; /*MMIʪ죬־óɹ*/ + } + else + { + /*MMIʪ죬*/ + } + } + else + { + + /*PSDɾVOBCϢ*/ + ClearPsdVobcContext(pIvocToRcDataStru[ii].VobcId); + ProcessIvocLoseCom(pIvocToRcDataStru[ii]); + + /*ϴVOBC״̬*/ + ClearWashVobcDriveState(&(pIvocToRcDataStru[ii])); + + /*гӿϢ*/ + VobcConnectDataClear(pIvocToRcDataStru[ii].VobcId); + + + /*ɾVOBCCI*/ + (void)CommonMemSet(&(pIvocToRcDataStru[ii]), sizeof(IvocToRcDataStruct), 0, sizeof(IvocToRcDataStruct));/**/ + } + } + + if (CI_SUCCESS == cCheckFlag) + { + /*гMMIʪ״̬RCıʪЧ*/ + SetLocalSnowModelCC(CI_LOCAL_SNOW_VALID); + } + else + { + /*гMMIʪ״̬RCıʪЧ*/ + SetLocalSnowModelCC(CI_LOCAL_SNOW_UNVALID); + } + + + /*ͨжݣ*/ + ClearVobcOrIvocData(); +} + +/* +* վ̨ػ +* ˵UINT16 psdId վ̨ID +* ֵ +*/ +static void ClearPsdData(const UINT16 psdId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 ii = 0u; + UINT8 jj = 0u; + UINT8 deviceSum = 0u;/*ͨ豸*/ + UINT8* deviceIdBuf = NULL;/*ͨ豸ID*/ + UINT8 platformId = 0u; + UINT8 psdSum = 0u; + UINT16 platformPsdId = 0u; + UINT8 chRcWorkMode = 0u; + + + chRcWorkMode = GetLocalRcWorkMode(); + + if ((0u != psdId) && (PSD_INVALID_ID != psdId)) + {/*PSD IDЧ*/ + + bufIndex = GetPsdConfigBufIndex(psdId); + + PsdDataStru[bufIndex].SrcVobcId = 0u; + PsdDataStru[bufIndex].CmdSetCycle = 0u; + PsdDataStru[bufIndex].PsdCmd = PSD_DEFAULT_CONTROL_CMD; + PsdDataStru[bufIndex].VOBCDoorState = PSD_DOOR_CLOSEDANDLOCKED_INVALID; + PsdDataStru[bufIndex].psdEditGroupInfo = 0u;/*Ϣ*/ + + + if (RC_WORK_MODE_TIOC == chRcWorkMode) + { + SetPsdEditGroupInfoDataCC(psdId, PSD_EDIT_GROUP_DEFAULT); /*RCPSDϢΪĬֵ*/ + SetPsdVobcCmdCC(psdId, 0U, PSD_DEFAULT_CONTROL_CMD, 0U); /*RCPSDϢЧ*/ + } + + + deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸*/ + deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_PLATFORM); /*ȡͨPSD豸ID*/ + if ((0u < deviceSum) && (NULL !=deviceIdBuf )) + {/*Чж*/ + for (ii = 0u; ii < deviceSum; ii++) + {/*뱾CIͨŵվ̨ϵͳ*/ + platformId = deviceIdBuf[ii]; + psdSum = platformToCiDataStru[platformId].psdSum; + for (jj = 0u; jj < psdSum; jj++) + {/*վ̨ϵͳPSDĿ*/ + platformPsdId = platformToCiDataStru[platformId].psdDataStr[jj].PsdId; + if (psdId == platformPsdId) + {/*ҵӦվ̨ϵͳϢVOBC͵ĹϸϢ*/ + platformToCiDataStru[platformId].psdDataStr[jj].doorHaveOrNot = PSD_HAVE_TRAIN_DOOR_NO;/*VOBCͨжϺ󣬰޳ϢΪ޳*/ + platformToCiDataStru[platformId].psdDataStr[jj].faultIsolationRequestInfo = 0u;/*VOBCͨжϺ󣬽VOBCPSDΪ޸*/ + platformToCiDataStru[platformId].psdDataStr[jj].doorEditGroupInfo = 0u; /*Ϣ*/ + break; + } + else + { + ; /**/ + } + } + } + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } +} + +/* +* վ̨ػ +* ˵UINT16 psdId վ̨ID +* ֵ +*/ +static void ProcessClearPsdData(void) +{ + UINT16 bufIndex = 0U; + UINT16 psdId = 0U; + UINT8 belongCIid = 0u; + UINT8 chlocalCiId = 0u; + UINT32 dwCurCycNum = 0U; + UINT32 dwTransmitBadEnsureCount = 0U; + UINT8 chRcWorkMode =0u; + UINT16 chVobcId = 0u; + UINT8 chVobcControlMode = 0U; + + + chRcWorkMode = GetLocalRcWorkMode(); + + dwCurCycNum = Get2oo2CurCycleNum(); + dwTransmitBadEnsureCount = GetCiAndVobcTransBadEnsureCnt(); + + chlocalCiId = GetSystemParaLocalCiId(); + + for (bufIndex = 0u; bufIndex < PSD_SUM_MAX; bufIndex++) + {/*PSDṹ*/ + psdId = PsdDataStru[bufIndex].PsdId; + + belongCIid = GetPsdBelongCiId(psdId); + + if (belongCIid == chlocalCiId) + {/*ڱPSDŴ*/ + if ((dwCurCycNum - PsdDataStru[bufIndex].CmdSetCycle) > dwTransmitBadEnsureCount)/*δյ*/ + {/*ǰPSDͨжʱδյκVOBCڸPSDĿϢ򿪡رպͲѯ*/ + ClearPsdData(psdId); + } + + if (RC_WORK_MODE_TIOC == chRcWorkMode) + {/*RCģʽ²*/ + chVobcId = GetPsdVobcIdCC(psdId); + chVobcControlMode = GetRecvVobcControlMode(chVobcId); + + if (((dwCurCycNum - PsdDataStruCC[bufIndex].CmdSetCycle) > dwTransmitBadEnsureCount)||(TRAIN_MAIN_MODE != chVobcControlMode)) + {/*ͨжδյг״̬Ϊأ*/ + SetPsdEditGroupInfoDataCC(psdId, PSD_EDIT_GROUP_DEFAULT); /*RCPSDϢΪĬֵ*/ + SetPsdVobcCmdCC(psdId, 0U, PSD_DEFAULT_CONTROL_CMD, 0U); /*RCPSDϢЧ*/ + } + } + } + } + +} + +/* +* VOBCIVOC +* ˵void +* ֵ +*/ +static void ProcessVobcOrIvocData(void) +{ + UINT8 cRcWorkMode = 0U; + + cRcWorkMode = GetLocalRcWorkMode(); + + /**/ + ProcessClearPsdData(); + + if (RC_WORK_MODE_TIOC == cRcWorkMode) + { + /*VOBCRC*/ + ProcessVobcToRcData(); + /*IVOCλϢ״̬*/ + ProIvocToRcLocationData(); + /*ٲõǰģʽ,سͣIVOCVOBCλ*/ + MainTrainInformationManage(); + /*IVOC*/ + ProcessIvocToRCData(); + } + else + {/*CIģʽVOBC*/ + ProcessVobcToCiData(); + } + + /*ͨVOBC*/ + ProcessVobcBackupToCiData(); +} + +/* +* ͨжϵVOBCIVOC(RCģʽCIģʽô˺) +* ˵void +* ֵ +*/ +static void ClearVobcOrIvocData(void) +{ + UINT8 chTrainSum = GetVobcToCiSum(); + VobcToCiDataStruct* pTrainDataStru = GetVobcToCiDataStru(); + + UINT8 temptrainNum = 0u; + UINT8 ii = 0u; + + if (NULL != pTrainDataStru) + { + for (ii = 0U; ii < chTrainSum; ii++) + { + if (0u != pTrainDataStru[ii].VobcId) + { + CommonMemCpy(&pTrainDataStru[temptrainNum], sizeof(VobcToCiDataStruct), &pTrainDataStru[ii], sizeof(VobcToCiDataStruct)); + temptrainNum++; + } + } + + + /*ͨжϵIvoc*/ + for (ii = temptrainNum; ii < VOBC_TO_CI_SUM_MAX; ii++) + { + /**/ + (void)CommonMemSet(&(pTrainDataStru[ii]), sizeof(VobcToCiDataStruct), 0, sizeof(VobcToCiDataStruct));/**/ + } + VobcToCiSum = temptrainNum; + } +} + +/* +* гλϢˢ +* ˵ vobcToCiDataStruVOBCݽṹָ +* ֵ void +*/ +static void RefreshIvocInputlocation(const IvocToRcDataStruct stIvocToCiData) +{ + UINT16 wTrainId = 0U; + UINT32 dwCurCycle = 0U; + UINT8 chIndex = 0U; + TrainEaStru szTmp[EA_MAX_NUM] = { 0U }; + UINT8 chRet = 0U; + + dwCurCycle = Get2oo2CurCycleNum(); + + wTrainId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + stIvocToCiData.VobcId; + chRet = SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); + chRet &= SetIvocTrainDir(wTrainId, stIvocToCiData.trainDirection); + chRet &= SetIvocTrainSpeed(wTrainId, stIvocToCiData.wTrainSpeed); + chRet &= SetIvocTrainSpeedDir(wTrainId, stIvocToCiData.chSpeedDir); + chRet &= SetIvocTrainLevel(wTrainId, stIvocToCiData.chTrainLevel); + chRet &= SetIvocTrainMaxHeadLink(wTrainId, stIvocToCiData.wTrainMaxSafeHeadLink); + chRet &= SetIvocTrainMaxTailLink(wTrainId, stIvocToCiData.wTrainMaxSafeTailLink); + chRet &= SetIvocTrainMaxHeadOffset(wTrainId, stIvocToCiData.dwTrainMaxSafeHeadOffset); + chRet &= SetIvocTrainMaxTailOffset(wTrainId, stIvocToCiData.dwTrainMaxSafeTailOffset); + chRet &= SetIvocTrainMinHeadLink(wTrainId, stIvocToCiData.wTrainMinSafeHeadLink); + chRet &= SetIvocTrainMinTailLink(wTrainId, stIvocToCiData.wTrainMinSafeTailLink); + chRet &= SetIvocTrainMinHeadOffset(wTrainId, stIvocToCiData.dwTrainMinSafeHeadOffset); + chRet &= SetIvocTrainMinTailOffset(wTrainId, stIvocToCiData.dwTrainMinSafeTailOffset); + + + chRet &= SetIvocTrainOtherPointDir(wTrainId, stIvocToCiData.trainDirection); /*IovcгȫˡСȫǰˡȫǰ˵з*/ + SetIvocControlMode(wTrainId, stIvocToCiData.controlMode);/*سģʽ*/ + SetIvocTrainMode(wTrainId, stIvocToCiData.chTrainMode);/*гʻģʽ*/ + + SetTrainMsgFromTiocId(wTrainId, 0U); + SetTrainSleepCancleFlag(wTrainId, TRAIN_SLEEP_CANCLE_YES); + + + + +} + + diff --git a/TSCP/src/APP/ciapp/IO/InputDataProcess.h b/TSCP/src/APP/ciapp/IO/InputDataProcess.h index f8f28ad..a0a0cc3 100644 --- a/TSCP/src/APP/ciapp/IO/InputDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/InputDataProcess.h @@ -451,6 +451,101 @@ void LogRouteCleanOldPhySecLockProc(const UINT16 wPreRouteId); */ void OtherPartRouteCleanLogRouteProc(const UINT16 wCurRouteId); +/* +* OC->CIPSD +* ˵ void +* ֵ void +*/ +void ProcessOCToCiPsdData(void); + +/* +* OCCIIJһ¼̵ +* ˵ void +* ֵ 0:ʧ +* 1:ɹ +*/ +void ProcessOcToCiRelayDiffData(void); + +/* +* CIRCͨ״̬ +* ˵void +* ֵ +* Created By LQ 2025.11.04 +*/ +void ProcessCiAndRcInfo(void); + +/** +* @brief ν +* @param[in] +* @return +* @note by cgh 20251107 +*/ +void OverlapUnlockApplyDeal(void); + + +/** +* @brief ·֤ͣ +* @param[in] +* @return +* @note by cgh 20251107 +*/ +void RouteStopensureDeal(void); + +/** +* @brief ˫ϵͳں +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void UpdateDoubleSystemMergeInfo(void); + +/* +* ߼Ϣںϴ +* ˵ +* ֵ +* Created By LQ 2025.11.07 +*/ +void LogSecInfoMergePro(void); + +/* +* ѩϢںϴ +* ˵ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SnowInfoMergePro(void); + +/** +* @brief ·֤ͣϢں +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void RouteStopensureFlagMergeDeal(void); + +/** +* @brief źŻϢںϴ +* @param[in] void +* @return +* @note by cgh 20251106 +*/ +void SignalInfoMergeDeal(void); + +/* +* źŻгѹ +* ˵ +* ֵ +* Created By LQ 2025.11.11 +*/ +void SignalTrainCrossPro(void); + +/* +* VOBCCI +* ˵ void +* ֵ void +*/ +void ProcessIvocToRCData(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c index 4354cee..1cf57cf 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c @@ -387,6 +387,13 @@ 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_COUPLINK_ROUTE_IDLE: + returnValue = CI_BACK_COUPLINK_ROUTE_IDLE; /*ҽ·ޱҳ*/ + break; + /*źŻϷ*/ case ETYPE_SIG_START_OPEN_STATE: if (SIGNAL_OPEN==deviceState ) @@ -685,6 +692,7 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co case ETYPE_COMM_WITH_VOBC: case ETYPE_COMM_WITH_ZC: case ETYPE_COMM_WITH_CI: + case ETYPE_COMM_WITH_RC: case ETYPE_COMM_WITH_TMC: returnValue = deviceState; /*VOBCZCCITMCCIͨʧܱ*/ break; @@ -834,6 +842,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co { returnValue = CI_BACK_AUTO_ROUTE_HAVE_BLOCK; } + else if (AUTO_ROUTE_COUPROUTE_SET == deviceState) + { + returnValue = CI_BACK_AUTO_ROUTE_COUPROUTE_SET; + } else { returnValue = CI_BACK_AUTO_ROUTE_FLOOD_STATE_ERR; @@ -860,6 +872,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co { returnValue = CI_BACK_AUTO_RETURN_HAVE_BLOCK; } + else if (AUTO_RETURN_COUPROUTE_SET == deviceState) + { + returnValue = CI_BACK_AUTO_RETURN_COUPROUTE_SET; + } else { returnValue = CI_BACK_AUTO_RETURN_FLOOD_STATE_ERR; @@ -886,6 +902,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co { returnValue = CI_BACK_ALLAUTO_RETURN_HAVE_BLOCK; } + else if (ALL_AUTO_RETURN_COUPROUTE_SET == deviceState) + { + returnValue = CI_BACK_ALLAUTO_RETURN_COUPROUTE_SET; + } else { returnValue = CI_BACK_ALLAUTO_RETURN_FLOOD_STATE_ERR; @@ -898,6 +918,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 +963,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; } @@ -1723,16 +1774,16 @@ void IndicatorStateProc(void) && (INDICATOR_TYPE_COMM_CI_LAST >= devType)) {/*devType-INDICATOR_TYPE_COMM_CI_FIRST+1ͨ״̬*/ - devRelaySum = Get2oo2CiAndOtherSysCommNum(CI_SYSTEM_TYPE_CI); + devRelaySum = Get2oo2CiAndOtherSysCommNum(CI_SYSTEM_TYPE_RCI); jj = devType - INDICATOR_TYPE_COMM_CI_FIRST; if (devRelaySum > jj) { - if (TRANSMIT_2OO2_STATE_GOOD == Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI,(UINT8)jj)) + if (TRANSMIT_2OO2_STATE_GOOD == Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RCI,(UINT8)jj)) {/*ϵjj+1 ͨ*/ SetIndicatorState(devId, INDICATOR_SHOW_COMM_GREEN);/*ָʾͨ*/ } - else if (TRANSMIT_2OO2_STATE_LINK == Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI,(UINT8)jj)) + else if (TRANSMIT_2OO2_STATE_LINK == Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RCI,(UINT8)jj)) {/*jj+1 ͨһ*/ SetIndicatorState(devId, INDICATOR_SHOW_COMM_YELLOW);/*ָʾͨһ*/ @@ -3340,11 +3391,11 @@ void IndicatorStateProc_UseVirCI(UINT8 virCIid) && (INDICATOR_TYPE_COMM_CI_LAST >= devType)) {/*devType-INDICATOR_TYPE_COMM_CI_FIRST+1ͨ״̬*/ - devRelaySum = Get2oo2CiAndOtherSysCommNum(CI_SYSTEM_TYPE_CI); + devRelaySum = Get2oo2CiAndOtherSysCommNum(CI_SYSTEM_TYPE_RCI); jj = devType - INDICATOR_TYPE_COMM_CI_FIRST; if (devRelaySum > jj) { - commState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI,(UINT8)jj); + commState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RCI,(UINT8)jj); if (TRANSMIT_2OO2_STATE_GOOD == commState) {/*ϵjj+1 ͨ*/ @@ -5719,7 +5770,6 @@ UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCoun UINT32 laborUnlockOverlapTimeCount =0u; UINT16 returnTime = 0u; - /*Զʱ*/ deltCount = (INT32)(curCycleNum - startCycNum); if((deltCount >= 0) && (deltCount <= (INT32)OverlapUnLockCount))/*ʱֵںΧ*/ @@ -5743,19 +5793,10 @@ UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCoun } } - - - if(0u < laborUnlockStartCycNum)/*Ѿ˹*/ + if (0u < laborUnlockStartCycNum)/*Ѿ˹*/ { - /*Ƚʱ䣬СġΪڽ߼Сʱ*/ - if(autotimeData > labortimeData) - { - returnTime = labortimeData; - } - else - { - returnTime = autotimeData; - } + /*˹˹ʱ*/ + returnTime = labortimeData; } else { @@ -6241,6 +6282,7 @@ void OverlapTimeDataBackProcess(const UINT16 wOverlapId) UINT8 chTmpOvlpOccuSecSta = 0U;/*ʱúijڲвֵ*/ UINT8 chFuncSwitchSendTime = 0u;/*CBTCǷͱνʱ*/ UINT8 chABLFlag = 0U; /*·ABLռñ־*/ + UINT32 dwLaborUnlockStartCycNum = 0U; /*˹ʼں*/ chLocalCiId = GetSystemParaLocalCiId(); chFuncSwitchSendTime = GetCiFunctionSwitchConfig(FUNC_SWITCH_SEND_UNLOCK_OVERLEP_TIMER_COUNTDOWN); @@ -6260,6 +6302,9 @@ void OverlapTimeDataBackProcess(const UINT16 wOverlapId) { wRouteLastPhySectionId = GetRouteLastPhySectionId(wOverlapBelongRouteId); dwUtCtStartOccuCount = GetSecUtOrCtOccuStartCycNum(wRouteLastPhySectionId); + wOverlapAllClearRes = OverlapAllSecOccuClearCheck(wOverlapId, &wTmpOvlpOccuSecId, &chTmpOvlpOccuSecSta); + dwLaborUnlockStartCycNum = GetlaborUnlockStartCycNum(wOverlapId); + /*·˳ռѹһεʼ*/ if (0U UINT8_MAX) - {/*ʱʱ䳬ֵʱͬһڷһΪֽڣһΪֽ*/ - SetCiSendCmdBackInfoData(CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH, CI_DEVICE_TYPE_PHYSEC, pOverlapPhySecBuf[0], (UINT8)(wTimeData >> 8), 0U); - + /*⣺ + ռñʱCT/UTռʼʱЧռñ־ѾδռãʱҪ˹ʱʧռñʱ*/ + if ((0U < dwLaborUnlockStartCycNum) && (CI_SUCCESS == wOverlapAllClearRes)) + { + wTimeData = GetOverlapLaborUnlockBackTime(wOverlapId); + } + else + { + SetOverlapUnlockTime(wOverlapId, 0U); } - SetCiSendCmdBackInfoData(CI_BACK_COUNT_OVERLAP_UNLOCK, CI_DEVICE_TYPE_PHYSEC, pOverlapPhySecBuf[0], (UINT8)wTimeData, 0U); } - SetOverlapUnlockTime(wOverlapId, wTimeData); } else { - SetOverlapUnlockTime(wOverlapId, 0U);/*ʱΪٴռʱҪռÿʼʱΪʱο¼ʱ*/ + /*˹ʱ*/ + if ((0U < dwLaborUnlockStartCycNum) && (CI_SUCCESS == wOverlapAllClearRes)) + { + wTimeData = GetOverlapLaborUnlockBackTime(wOverlapId); + } + else + { + SetOverlapUnlockTime(wOverlapId, 0U);/*ʱΪٴռʱҪռÿʼʱΪʱο¼ʱ*/ + } } + + if (0u < wTimeData)/*ڵʱ*/ + { + if (wTimeData > UINT8_MAX) + {/*ʱʱ䳬ֵʱͬһڷһΪֽڣһΪֽ*/ + SetCiSendCmdBackInfoData(CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH, CI_DEVICE_TYPE_PHYSEC, pOverlapPhySecBuf[0], (UINT8)(wTimeData >> 8), 0U); + + } + SetCiSendCmdBackInfoData(CI_BACK_COUNT_OVERLAP_UNLOCK, CI_DEVICE_TYPE_PHYSEC, pOverlapPhySecBuf[0], (UINT8)wTimeData, 0U); + } + SetOverlapUnlockTime(wOverlapId, wTimeData); } else { @@ -6524,13 +6585,22 @@ void VobcBackUpOutputProcess(void) UINT8 chMainValid = 0U;/*гͨ״̬*/ UINT16 wVobcId = 0U;/*VOBC ID*/ UINT8 chBackUpValid = 0U;/*ͨЧ־*/ + UINT8 cRcWorkMode = 0U; for (ii = 0U; ii < TRAIN_SUM_MAX; ii++) { wTrainId = GetTrainId(ii); chBackUpValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC_BACKUP, (UINT8)(wTrainId & 0x00ffU)); - chMainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(wTrainId & 0x00ffU)); + /*ݹģʽȡͨͷ*/ + if (RC_WORK_MODE_CI == cRcWorkMode) + { + chMainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)(wTrainId & 0x00ffU)); + } + else + { + chMainValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)(wTrainId & 0x00ffU)); + } wVobcId = 0U; @@ -8538,3 +8608,44 @@ void RtnRealyAdhesionStatePro(void) } } +/* +* ȡ˹ʣ൹ʱ +* ˵ const UINT16 overlapId id +* ֵ ʱ +* by cgh 20250928 +*/ +UINT16 GetOverlapLaborUnlockBackTime(const UINT16 overlapId) +{ + UINT16 wLabortimeData = 0u; + INT32 deltCount = 0; + UINT32 curCycleNum = Get2oo2CurCycleNum(); + UINT32 appCycTime = GetSystemParaAppCycleTime();/*ȡ*/ + UINT32 laborUnlockStartCycNum = 0u; + UINT32 laborUnlockOverlapTimeCount = 0u; + + /*˹ʱ*/ + laborUnlockStartCycNum = GetlaborUnlockStartCycNum(overlapId); + + if (0u < laborUnlockStartCycNum)/*Ѿ˹*/ + { + deltCount = (INT32)(curCycleNum - laborUnlockStartCycNum); + laborUnlockOverlapTimeCount = GetlabarUnlockOverlapTimeCount(); + + if ((deltCount >= 0) && (deltCount <= (INT32)laborUnlockOverlapTimeCount))/*ʱֵںΧ*/ + { + wLabortimeData = (UINT16)(((laborUnlockOverlapTimeCount + laborUnlockStartCycNum - curCycleNum) * appCycTime) / 1000U); + + } + else + { + ; + } + } + else + { + + } + + return wLabortimeData; +} + diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.h b/TSCP/src/APP/ciapp/IO/OutputDataProcess.h index 5e89466..6aa94f2 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.h @@ -456,6 +456,14 @@ UINT8 FindRouteLeaveAxis(const UINT16 routeId); */ void RtnRealyAdhesionStatePro(void); +/* +* ȡ˹ʣ൹ʱ +* ˵ const UINT16 overlapId id +* ֵ ʱ +* by cgh 20250928 +*/ +UINT16 GetOverlapLaborUnlockBackTime(const UINT16 overlapId); + #ifdef __cplusplus } #endif 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..7dd5e3c 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 { @@ -1064,6 +1083,21 @@ UINT8 ReadConfigureData(void) rtnVal = 2u; } + if (0u == rtnVal) + { + g_ret = QueryTrackBelongLink(); + if (CI_ERROR == g_ret) + { + debug_infor_printf((const)"QueryTrackBelongLink Error\n"); + rtnVal = 43u; + } + } + else + { + /**/ + } + + } @@ -1280,7 +1314,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 +3461,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..b1e7214 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.c +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.c @@ -20,6 +20,7 @@ #include "NonAutoReturnConfigDataManage.h" #include "../Deployment/DeploymentExtern.h" #include "NonAutoReturnDataManage.h" +#include "ParsePackZcData.h" /****************************ʼ̬ݶ********************************************/ extern TransmitRelationDataStruct TransmitRelaDataStru[TRANSMIT_OBJECT_SUM_MAX]; /*ѶͨŹϵݽṹ*/ @@ -65,18 +66,25 @@ UINT8 InitialProcess(void) } /*ȡ*/ - if (0u != ReadConfigureData()) - { + if (CI_SUCCESS == ret) + { + if (0u != ReadConfigureData()) + { #ifdef PLATFORM_2OO2 - (void)printf("ReadConfigureData Error\n"); - debug_infor_printf((const)"ReadConfigureData Error\n"); + (void)printf("ReadConfigureData Error\n"); + debug_infor_printf((const)"ReadConfigureData Error\n"); #endif - ret = CI_ERROR; + ret = CI_ERROR; - } + } + } + else + { + /**/ + } cRcWorkMode = GetLocalRcWorkMode(); @@ -572,9 +580,7 @@ UINT8 InitialSignalData(void) SignalDataStru[signalId].RelayDetainCmd = SIGNAL_DETAIN_CI_RELAY_NO;/*ʼɲ۳*/ SignalDataStru[signalId].NeighbourSignalDetainDrive = NEIGHBOUR_SIGNAL_DETAIN_DRIVE_NO;/*վźŻ۳*/ SignalDataStru[signalId].MaintainLightState = MAINTAIN_STATE_NO;/*źŻά޵״̬*/ - SignalDataStru[signalId].wSignalLightUpLinkIdSum = 0U; - (void)CommonMemSet(SignalDataStru[signalId].szSignalLightUpLinkIdBuf, (UINT32)sizeof(SignalDataStru[signalId].szSignalLightUpLinkIdBuf),0U, (UINT32)sizeof(SignalDataStru[signalId].szSignalLightUpLinkIdBuf)); - SignalDataStru[signalId].wSignalLightUpTrainId = 0U; + if ((0U == detainBtnRelayId) || (UINT16_MAX == detainBtnRelayId)) { SignalDataStru[signalId].DetainBtnActivateFlag = SIGNAL_ZFS_BTN_ACT_FLAG_NO; /*Ըʽδÿ۳ť̵ʼ۳ťδ*/ @@ -586,19 +592,21 @@ 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; /*ȡ۳ťЧ־*/ SignalDataStru[signalId].CancelDetainRelayDownState = SIGNAL_RELAY_ERROR_DOWN_YES; /*ȡ۳ťɼ̵״̬ʼΪ쳣*/ - SignalDataStru[signalId].LogRouteSignalErrCloseFlag = LOG_ROUTE_SIGNAL_CLOSE_NOERR; /*ʼΪδ쳣رձ־(߼·쳣رʹ)*/ 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;/*ʱЧ*/ - routeSum = GetRouteCurSum(); for (jj = 0u; jj < routeSum; jj++) { @@ -667,6 +675,21 @@ UINT8 InitialSignalData(void) { SignalDataStru[signalId].ProSecValid = SIGNAL_PRO_SEC_INVALID;/*óЧȫ*/ } + + /*ʼṹԱ*/ + SignalDataStruCC[signalId].SignalId = signalId; + SignalDataStruCC[signalId].wSignalLightUpLinkIdSum = 0U; + (void)CommonMemSet(SignalDataStruCC[signalId].szSignalLightUpLinkIdBuf, (UINT32)sizeof(SignalDataStruCC[signalId].szSignalLightUpLinkIdBuf), 0U, (UINT32)sizeof(SignalDataStruCC[signalId].szSignalLightUpLinkIdBuf)); + SignalDataStruCC[signalId].wSignalLightUpTrainId = 0U; + SignalDataStruCC[signalId].LogRouteSignalErrCloseFlag = LOG_ROUTE_SIGNAL_CLOSE_NOERR; /*ʼΪδ쳣رձ־(߼·쳣رʹ)*/ + SignalDataStruCC[signalId].cSleepTrainLightUpFlag = SIGNAL_SLEEP_TRAIN_LIGHTUP_NO; /*ʼ߳źŻ־Ч*/ + SignalDataStruCC[signalId].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; /*źŻ״̬CC(0x55ƣ0xaa)*/ + SignalDataStruCC[signalId].SignalCrossState = SIGNAL_CROSS_STATE_NO; /*ͨųѹͨźŻ״̬CC(0x55δѹ0xaaѹ)*/ + + /*ʼZC͵źŻ̬*/ + gZcToCiDymDataStru.szSignalDataStruZc[signalId].SignalId = signalId; + gZcToCiDymDataStru.szSignalDataStruZc[signalId].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; + gZcToCiDymDataStru.szSignalDataStruZc[signalId].SignalCrossState = SIGNAL_CROSS_STATE_NO; } /* Զź */ @@ -756,6 +779,7 @@ UINT8 InitialSwitchData(void) switchId = GetSwitchId(ii);/*ȡļиµĵID*/ SwitchDataStru[switchId].SwitchId = switchId; + SwitchDataStruCC[switchId].SwitchId = switchId; SwitchDataStru[switchId].YLockState = SWITCH_LOCK_YINZONG_NO; SwitchDataStru[switchId].LockStatus = SWITCH_LOCK_STATUS_NO; SwitchDataStru[switchId].FLockState = SWITCH_LOCK_FENGSUO_NO; @@ -780,7 +804,7 @@ UINT8 InitialSwitchData(void) SwitchDataStru[switchId].DFHRelayValidCycNum = 0u; SwitchDataStru[switchId].SigleDFHRelayValidCycNum = 0u; SwitchDataStru[switchId].PLockedRouteNum = 0u; - SwitchDataStru[switchId].PLockedLogRouteNum = 0u; + SwitchDataStruCC[switchId].PLockedLogRouteNum = 0u; SwitchDataStru[switchId].PLockedOverlapNum = 0u; SwitchDataStru[switchId].PLockedNonRouteNum = 0u; SwitchDataStru[switchId].YCRelayValidCycNum = 0u; @@ -797,10 +821,16 @@ UINT8 InitialSwitchData(void) for (jj=0; jj zcToCiMaskSum) { LogicSectionDataStru[logicSectionId].LinShiXianSuSetFlag = LOGSEC_LSXS_SET_STATE_INVALID; + LogicSectionDataStruCC[logicSectionId].LinShiXianSuSetFlag = LOGSEC_LSXS_SET_STATE_INVALID; + gZcToCiDymDataStru.LogicSectionDataStruZc[logicSectionId].LinShiXianSuSetFlag = LOGSEC_LSXS_SET_STATE_INVALID; } else { @@ -1217,6 +1293,7 @@ UINT8 InitialFloodGateData(void) if ((0u < floodGateId) && (FLOOD_GATE_SUM_MAX> floodGateId)) { FloodGateDataStru[floodGateId].FloodGateId = floodGateId; + FloodGateDataStruCC[floodGateId].FloodGateId = floodGateId; FloodGateDataStru[floodGateId].CurAgreeCloseAckFromZC = FLOOD_GATE_NOT_ALLOWCLOSE_ZC; FloodGateDataStru[floodGateId].CurAgreeCloseStateIn = FLOOD_GATE_NOT_AGREE_CLOSE; FloodGateDataStru[floodGateId].CurAgreeCloseStateOut = FLOOD_GATE_NOT_AGREE_CLOSE; @@ -1224,15 +1301,15 @@ UINT8 InitialFloodGateData(void) FloodGateDataStru[floodGateId].CurOpenLockStateFromFYM = FLOOD_GATE_NOT_OPENLOCK; FloodGateDataStru[floodGateId].CurYGJCrossLineStartCount = 0u;/*߿ʼʱΪ0*/ FloodGateDataStru[floodGateId].CurFloodGateDelayCloseStartCyc = 0u;/*ŽӽռѹʱſʼʱΪ0*/ - FloodGateDataStru[floodGateId].FloodGateCloseApplyIvocSum = 0u;/*ŹгΪ0*/ + FloodGateDataStruCC[floodGateId].FloodGateCloseApplyIvocSum = 0u;/*ŹгΪ0*/ for (jj = 0U; jj < FLOOD_GATE_APPLY_TRAIN_SUM_MAX; jj++) { - FloodGateDataStru[floodGateId].FloodGateCloseApplyIvocId[jj] = 0u;/*ŹгIDΪ0*/ - FloodGateDataStru[floodGateId].FloodGateCloseFromIvocStru[jj].wTrainId = 0u; /*ŹŻظгIDΪ0*/ - FloodGateDataStru[floodGateId].FloodGateCloseFromIvocStru[jj].wFloodGateCloseIvocFlag = FLOOD_GATE_NOT_ALLOWCLOSE_IVOC; /*ŹŻظ־Ϊ*/ + FloodGateDataStruCC[floodGateId].FloodGateCloseApplyIvocId[jj] = 0u;/*ŹгIDΪ0*/ + FloodGateDataStruCC[floodGateId].FloodGateCloseFromIvocStru[jj].wTrainId = 0u; /*ŹŻظгIDΪ0*/ + FloodGateDataStruCC[floodGateId].FloodGateCloseFromIvocStru[jj].wFloodGateCloseIvocFlag = FLOOD_GATE_NOT_ALLOWCLOSE_IVOC; /*ŹŻظ־Ϊ*/ } - FloodGateDataStru[floodGateId].FloodGateAccessUTFlag = FLOOD_GATE_ACCESS_UT_YES;/*ŽӽռѹǷUTռѹ־*/ - FloodGateDataStru[floodGateId].FloodGateCloseAnsIvocSum = 0u;/*ŹŻظгΪ0*/ + FloodGateDataStruCC[floodGateId].FloodGateAccessUTFlag = FLOOD_GATE_ACCESS_UT_YES;/*ŽӽռѹǷUTռѹ־*/ + FloodGateDataStruCC[floodGateId].FloodGateCloseAnsIvocSum = 0u;/*ŹŻظгΪ0*/ } else { @@ -1258,7 +1335,7 @@ UINT8 InitialPsdData(void) UINT8 psdVirtual = 0u; UINT16 wPsdButtenRelayId = 0u; UINT16 wCleFarePCBButRelayId = 0U;/*ȷŰť̵ID*/ - + UINT16 wPsdButtenRelayId2 = 0U; psdDataSum = GetTotalPsdCurNum();/*͸PsdĿ*/ /*ֵڵPSD_SUM_MAX᷵0*/ @@ -1285,7 +1362,9 @@ UINT8 InitialPsdData(void) } wPsdButtenRelayId = GetPsdReOpenRelayId(psdId); - if ((0u == wPsdButtenRelayId) || (UINT16_MAX == wPsdButtenRelayId)) + wPsdButtenRelayId2 = GetPsdReOpenRelayId2(psdId); + if (((0u == wPsdButtenRelayId) || (UINT16_MAX == wPsdButtenRelayId)) + && ((0u == wPsdButtenRelayId2) || (UINT16_MAX == wPsdButtenRelayId2))) { PsdDataStru[psdId].doorOpenButtonState = PSD_OPEN_BUTTON_STATE_INVALID; } @@ -1363,6 +1442,26 @@ 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Źؼ̵ʼ*/ + + /*ʼṹԱ*/ + PsdDataStruCC[psdId].PsdId = psdId; + PsdDataStruCC[psdId].psdEditGroupInfo = 0U; /*psdϢʼΪ0*/ + PsdDataStruCC[psdId].SrcVobcId = 0U; + PsdDataStruCC[psdId].PsdCmd = PSD_DEFAULT_CONTROL_CMD; + PsdDataStruCC[psdId].CmdSetCycle = 0U; } reVal = CI_SUCCESS; return reVal; @@ -1452,13 +1551,14 @@ UINT8 InitialOverlapData(void) overlapId = GetOverlapId(ii);/*ȡļиµıID*/ OverlapDataStru[overlapId].OverlapId = overlapId; + OverlapDataStruCC[overlapId].OverlapId = overlapId; OverlapDataStru[overlapId].BelongRouteId = 0u; OverlapDataStru[overlapId].UnlockStartCycNum = 0u; OverlapDataStru[overlapId].XuanPaiStartCycNum = 0u; OverlapDataStru[overlapId].OverlapUnlockApplyFlag = UNLOCK_OVERLAP_APPLY_NO; - OverlapDataStru[overlapId].wOverlapUnlockApplyTrainId = 0U; - OverlapDataStru[overlapId].dwReqIvocUnLockStartCycNum = 0U; - OverlapDataStru[overlapId].cIvocAllowUnlockFlag = IVOC_ALLOW_UNLOCK_OVERLAP_NO; + OverlapDataStruCC[overlapId].wOverlapUnlockApplyTrainId = 0U; + OverlapDataStruCC[overlapId].dwReqIvocUnLockStartCycNum = 0U; + OverlapDataStruCC[overlapId].cIvocAllowUnlockFlag = IVOC_ALLOW_UNLOCK_OVERLAP_NO; OverlapDataStru[overlapId].OverlapCanLaborUnlockFlag = CANNOT_LABOR_UNLOCK_OVERLAP; OverlapDataStru[overlapId].OverlapLaborUnlockSetState = LABOR_UNLOCK_OVERLAP_NO; OverlapDataStru[overlapId].laborUnlockStartCycNum = 0u; @@ -1468,6 +1568,7 @@ UINT8 InitialOverlapData(void) OverlapDataStru[overlapId].laborLockOverlapCmd = LOCK_OVERLAP_CMD_NO; OverlapDataStru[overlapId].cProSwitchCheckResultFlag = PROSWITCH_CHECK_RESULT_DEFAULT; OverlapDataStru[overlapId].cProSwitchCheckStartFlag = PROSWITCH_CHECK_START_INVALID; + OverlapDataStru[overlapId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO; } } @@ -1497,7 +1598,8 @@ UINT8 InitialRouteData(void) } else { - (void)memset(RouteDataStru,0,sizeof(RouteDataStru)); + (void)CommonMemSet(RouteDataStru, sizeof(RouteDataStru),0U,sizeof(RouteDataStru)); + (void)CommonMemSet(RouteDataStruCC, sizeof(RouteDataStruCC),0U, sizeof(RouteDataStruCC)); for (ii = 0u; ii < routeSum; ii++) { routeId = GetRouteId(ii);/*ȡµĽ·ID*/ @@ -1511,7 +1613,6 @@ UINT8 InitialRouteData(void) RouteDataStru[routeId].RouteLevelChangeCyc = 0U; RouteDataStru[routeId].AutoRouteId = 0u; RouteDataStru[routeId].AutoReturnId = 0u; - RouteDataStru[routeId].XuanPaiStartCycNum = 0u; RouteDataStru[routeId].RouteLockStartCycNum = 0u; RouteDataStru[routeId].OverlapLockStartCycNum = 0u; @@ -1541,33 +1642,48 @@ 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; /*ԶźȡЧ*/ - RouteDataStru[routeId].wStopEnsureTrainId = 0u; - RouteDataStru[routeId].dwStopEnsureCyc = 0u; - RouteDataStru[routeId].cResReqOtherCIId = 0u; - for (k = 0u; k < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; k++) - { - RouteDataStru[routeId].wszResReqTrainId[k] = 0u; - } - RouteDataStru[routeId].ITSRouteApplyTrainIdSum = 0u; - for (k = 0u; k < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; k++) - { - RouteDataStru[routeId].ITSRouteApplyTrainIdBuf[k] = 0u; - } + /*cgh-ϲCID-2539-10*/ RouteDataStru[routeId].OverlapNeedCIlockFlag = OVERLAPCILOCK_NO; /*ձ־Ч*/ RouteDataStru[routeId].OverlapLockProcFlag = OVERLAP_LOCK_PROC_NO; /*βչ*/ RouteDataStru[routeId].GroupRouteCmdFlag = ROUTE_GROUPROUTE_CMD_NO; /*·Ͻ·־*/ RouteDataStru[routeId].AutoTriggerFlag = AUTO_TRIGGER_SET_NO; /*·ûԶ־*/ - RouteDataStru[routeId].dwFirstElockStartCycNum = 0U; /*·һյ߼ʱιʼں*/ RouteDataStru[routeId].cRelZuHeRouteSGBJDelayFlag = ROUTE_SGBJ_DELAY_OPEN_VALID; /*Ͻ·ⱨʱ־Ч*/ RouteDataStru[routeId].dwDelayOpenStartCycNum = 0U; /*ⱨ·ʱʱʼ*/ RouteDataStru[routeId].cRouteNeedDriveSGBJFlag = ROUTE_DRIVE_SGBJ_INVALID; /*·ⱨ־Ч*/ 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].cRouteToLeadFlag = ROUTE_TO_LEAD_FLAG_NO; /*ʼͨ·ת·־ΪЧ*/ + RouteDataStru[routeId].chRoutCouplinkFlag = ROUTE_COUPLINK_FLAG_NO; /*ʼұ־Ч*/ + RouteDataStru[routeId].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*ʼҳɹ־Ϊδյ*/ + RouteDataStru[routeId].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*ʼʧܱ־Ϊδյ*/ + + /*ʼṹԱ*/ + RouteDataStruCC[routeId].RouteId = routeId; + RouteDataStruCC[routeId].wStopEnsureTrainId = 0u; + RouteDataStruCC[routeId].dwStopEnsureCyc = 0u; + RouteDataStruCC[routeId].cResReqOtherCIId = 0u; + for (k = 0u; k < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; k++) + { + RouteDataStruCC[routeId].wszResReqTrainId[k] = 0u; + } + RouteDataStruCC[routeId].ITSRouteApplyTrainIdSum = 0u; + for (k = 0u; k < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; k++) + { + RouteDataStruCC[routeId].ITSRouteApplyTrainIdBuf[k] = 0u; + } + RouteDataStruCC[routeId].dwFirstElockStartCycNum = 0U; /*·һյ߼ʱιʼں*/ + RouteDataStruCC[routeId].chRouteNearSecSearchState = ROUTE_NEAR_SEC_HAVE_UT; /*ʼ·ӽβѯ״̬Ϊйϳ*/ + RouteDataStruCC[routeId].StopensureFlag = ROUTE_STOPENSURE_NO; + + /*ʼZC͵Ľ·̬*/ + gZcToCiDymDataStru.szRouteDataStruZc[routeId].RouteId = routeId; + gZcToCiDymDataStru.szRouteDataStruZc[routeId].StopensureFlag = ROUTE_STOPENSURE_NO; } } @@ -1853,6 +1969,12 @@ UINT8 InitialTransmitStateData(void) InitHlhtHeadCtx(CI_SYSTEM_TYPE_TMC); InitHlhtHeadCtx(CI_SYSTEM_TYPE_AXIS); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_CI); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_RC); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_ZC); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_OC); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_ATS); + InitHlhtHeadCtx(CI_SYSTEM_TYPE_XIANDI); } return reVal; @@ -2111,6 +2233,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 { @@ -2163,9 +2290,9 @@ void ResetDynamicState(const UINT8 ciId) } } - if (LOG_SECTION_LOGLOCK_NORMAL == LogicSectionDataStru[logicSectionId].LogSecLogLockState) + if (LOG_SECTION_LOGLOCK_NORMAL == LogicSectionDataStruCC[logicSectionId].LogSecLogLockState) { - LogicSectionDataStru[logicSectionId].LogSecLogLockState = LOG_SECTION_LOGLOCK_EXCEPT; /*ͨţ߼յ߼Ϊ߼쳣*/ + LogicSectionDataStruCC[logicSectionId].LogSecLogLockState = LOG_SECTION_LOGLOCK_EXCEPT; /*ͨţ߼յ߼Ϊ߼쳣*/ } if ((localCi !=phyBelongCi) && (TRANSMIT_STATE_BAD == commState) && @@ -2186,14 +2313,15 @@ void ResetDynamicState(const UINT8 ciId) LogicSectionDataStru[logicSectionId].OccupyState = LOGICSECTION_OCCUPY_UT; /*ռ״̬*/ LogicSectionDataStru[logicSectionId].TXOccupyState = LOGICSECTION_OCCUPY_NO_TX; /*TSCIϲ 20221208-lc*/ } - /*߼Σռáʱ١δARB*/ + /*߼Σռáʱ١δARBʱЧ*/ LogicSectionDataStru[logicSectionId].LinShiXianSuSetFlag= LOGSEC_LSXS_SET_STATE_YES; /*߼ʱ״̬*/ LogicSectionDataStru[logicSectionId].chLinShiXianSuSetSpeed = 0U; /*߼ʱٶֵ*/ LogicSectionDataStru[logicSectionId].chXianSuRemoveState = LOGIC_XIANSU_REMOVE_NO; LogicSectionDataStru[logicSectionId].chArbState = LGC_SECTION_ARB_NO; /* δARB */ - LogicSectionDataStru[logicSectionId].chAblRelLogSecUsableFlag = LOGIC_ABLNEAR_USE_FLAG_NO; - LogicSectionDataStru[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*ȥABLг鲻ͨ*/ + LogicSectionDataStruCC[logicSectionId].chAblRelLogSecUsableFlag = LOGIC_ABLNEAR_USE_FLAG_NO; + LogicSectionDataStruCC[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*ȥABLг鲻ͨ*/ LogicSectionDataStru[logicSectionId].chLogicProResUsable = LOGIC_SECTION_PRO_RES_UNUSABLE; + LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_YES; /*߼νʱ״̬*/ } else { @@ -2223,6 +2351,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 +2374,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 +2414,7 @@ void ResetDynamicState(const UINT8 ciId) * ޸ģڽ·е״̬¡ͨжҪ·óɰȫ״̬ * ޸20160511ԶԶ쳣ֽ·״̬ðȫ̬ ·״̬ΪԶԶ쳣ðȫ̬󣬽·ı޷ + * ޸ģ·״̬н·󣬱ʼźŻΪնźŻ۷·״̬Ƿ */ throughRtId = GetRouteThroughRouteId(devId); OverlapLockedId = GetRouteOverlapLockedId(devId); @@ -2302,6 +2433,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; } @@ -2438,9 +2570,9 @@ void ResetDynamicState(const UINT8 ciId) OverlapDataStru[devId].UnlockStartCycNum = 0u; OverlapDataStru[devId].XuanPaiStartCycNum = 0u; OverlapDataStru[devId].OverlapUnlockApplyFlag = UNLOCK_OVERLAP_APPLY_NO; - OverlapDataStru[devId].wOverlapUnlockApplyTrainId = 0U; - OverlapDataStru[devId].dwReqIvocUnLockStartCycNum = 0U; - OverlapDataStru[devId].cIvocAllowUnlockFlag = IVOC_ALLOW_UNLOCK_OVERLAP_NO; + OverlapDataStruCC[devId].wOverlapUnlockApplyTrainId = 0U; + OverlapDataStruCC[devId].dwReqIvocUnLockStartCycNum = 0U; + OverlapDataStruCC[devId].cIvocAllowUnlockFlag = IVOC_ALLOW_UNLOCK_OVERLAP_NO; OverlapDataStru[devId].OverlapCanLaborUnlockFlag = CANNOT_LABOR_UNLOCK_OVERLAP; OverlapDataStru[devId].OverlapLaborUnlockSetState = LABOR_UNLOCK_OVERLAP_NO; OverlapDataStru[devId].laborUnlockStartCycNum = 0u; @@ -2450,6 +2582,7 @@ void ResetDynamicState(const UINT8 ciId) OverlapDataStru[devId].laborLockOverlapCmd = LOCK_OVERLAP_CMD_NO; OverlapDataStru[devId].cProSwitchCheckResultFlag = PROSWITCH_CHECK_RESULT_INVALID; OverlapDataStru[devId].cProSwitchCheckStartFlag = PROSWITCH_CHECK_START_INVALID; + OverlapDataStru[devId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO; } else if ((chOverlapCiId == localCi) && (devId > 0U) && (devId < OVERLAP_SUM_MAX)) { @@ -2624,17 +2757,18 @@ UINT8 InitialGaragedoorData(void) garagedoorId = GetGaragedoorId(ii);/*ȡļиµijID*/ GaragedoorDataStru[garagedoorId].GaragedoorId = garagedoorId; /*ID (ʼֶ)*/ + GaragedoorDataStruCC[garagedoorId].GaragedoorId = garagedoorId; /*ID (ʼֶ)*/ GaragedoorDataStru[garagedoorId].GaragedoorState = GARAGE_DOOR_STATE_CLOSE; /*״̬ (ֶ̬)*/ GaragedoorDataStru[garagedoorId].GaragedoorModeState = GARAGE_DOOR_STATE_MODE_LOCAL; /*ģʽ״̬*/ GaragedoorDataStru[garagedoorId].GaragedoorFaultState = GARAGE_DOOR_FAULT_TRUE; /*Ź״̬*/ - GaragedoorDataStru[garagedoorId].GDAkuNearestTrainId = NAME_FAILUREAREA; /*AӽŵгID*/ + GaragedoorDataStruCC[garagedoorId].GDAkuNearestTrainId = NAME_FAILUREAREA; /*AӽŵгID*/ GaragedoorDataStru[garagedoorId].GaragedoorAllowCloseFlag = GARAGE_DOOR_ALLOW_CLOSE_NO; /*ű־ZC*/ - GaragedoorDataStru[garagedoorId].GDAllowCloseFlagIVOC = GARAGE_DOOR_ALLOW_CLOSE_NO; /*ű־IVOC*/ + GaragedoorDataStruCC[garagedoorId].GDAllowCloseFlagIVOC = GARAGE_DOOR_ALLOW_CLOSE_NO; /*ű־IVOC*/ GaragedoorDataStru[garagedoorId].drvDoorState = GARAGE_DOOR_DRV_NULL; /* ״̬*/ GaragedoorDataStru[garagedoorId].cmdProcessState = GARAGE_DOOR_CMD_NULL; /* ״̬ */ GaragedoorDataStru[garagedoorId].drvDoorStartCycle = 0u; /* ʼʱ,Ԥ */ GaragedoorDataStru[garagedoorId].waiteZCResponseStartCycNum = 0u; /*ȴZCʼʱ*/ - GaragedoorDataStru[garagedoorId].waiteIVOCResponseStartCycNum = 0u; /*ȴIVOCʼʱ*/ + GaragedoorDataStruCC[garagedoorId].waiteIVOCResponseStartCycNum = 0u; /*ȴIVOCʼʱ*/ GaragedoorDataStru[garagedoorId].GaragedoorOpenStartCycNum = 0u; /*Ŵ򿪿ʼ*/ GaragedoorDataStru[garagedoorId].GaragedoorCloseStartCycNum = 0u; /*Źرտʼ*/ GaragedoorDataStru[garagedoorId].GaragedoorPangLuState = GARAGE_DOOR_PANGLU_FALSE; /*·״̬*/ @@ -2655,6 +2789,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 +2806,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 +2828,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 +2912,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 +2947,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; } } @@ -2811,17 +2960,17 @@ void InitOcData(void) m_OcToCiOrginDataArr[i].OcId = 0u; m_OcToCiOrginDataArr[i].OcDeviceNum = 0u; m_OcToCiOrginDataArr[i].OcDIBoardDataNum = 0u; + m_OcToCiOrginDataArr[i].OcSIBoardDataNum = 0u; m_OcToCiOrginDataArr[i].OcDOBoardNum = 0u; + m_OcToCiOrginDataArr[i].OcSOBoardNum = 0u; m_OcToCiOrginDataArr[i].OcSORBoardNum = 0u; m_OcToCiOrginDataArr[i].OcGdNum = 0u; - m_OcToCiOrginDataArr[i].RecvErrorDevTypeCycle = 0u; - m_OcToCiOrginDataArr[i].PowerAState = (UINT8)0xFF; m_OcToCiOrginDataArr[i].PowerBState = (UINT8)0xFF; m_OcToCiOrginDataArr[i].OCDevFaultState = (UINT8)0xFF; m_OcToCiOrginDataArr[i].FanState = (UINT8)0xFF;/*״̬ʼΪ*/ m_OcToCiOrginDataArr[i].OCBoardSwapSysNum = 0U; /*OCϵ忨ʼΪ*/ - for (j = 0U; j < MAX_OC_DEVICE_NUM; j++) + for (j = 0U; j < MAX_OC_DEVICE_SWAP_MAX; j++) { m_OcToCiOrginDataArr[i].SwapSysBoardId[j] = 0U; } @@ -3113,7 +3262,6 @@ UINT8 InitialRtnIndicStaData(void) { wNonAutoReturnId = GetNonReturnId(ii); NonReturnDataStru[wNonAutoReturnId].IndicatorDevID = wNonAutoReturnId; - NonReturnDataStru[wNonAutoReturnId].cmdSetTrainId = 0U; NonReturnDataStru[wNonAutoReturnId].VobcToCIAutoRtnIndicFlashState = VOBCTOCIAUTORTN_INDICT_MASK_INVALID; NonReturnDataStru[wNonAutoReturnId].VobcToCIAutoRtnIndicSteadyState = VOBCTOCIAUTORTN_INDICT_MASK_INVALID; @@ -3133,6 +3281,10 @@ UINT8 InitialRtnIndicStaData(void) NonReturnDataStru[wNonAutoReturnId].RtnRelayAdhesionState.RelayUpCycNum = 0U; } + + /*ʼṹԱ*/ + NonReturnDataStruCC[wNonAutoReturnId].IndicatorDevID = wNonAutoReturnId; + NonReturnDataStruCC[wNonAutoReturnId].cmdSetTrainId = 0U; } } else @@ -3193,3 +3345,268 @@ UINT8 InitialRtnIndicStaData(void) return chReval; } + +/* +* ñRC豸̬ +* ˵void +* ֵvoid +* Created By LQ 2025.11.07 +*/ +void ResetLocalRcDynamicState(void) +{ + UINT16 jj = 0U; + UINT8 cLocalCiId = 0U; + UINT8 cBelongCiId = 0U; /*豸ID*/ + UINT16 wRouteNum = 0U; /*·*/ + UINT16 wRouteId = 0U; /*·ID*/ + UINT16 wSignalNum = 0U; /*źŻ*/ + UINT16 wSignalId = 0U; /*źŻID*/ + UINT16 wAxisSecNum = 0U; /**/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT16 wLogSecNum = 0U; /*߼*/ + UINT16 wLogSecId = 0U; /*߼ID*/ + UINT16 wPhySecNum = 0U; /**/ + UINT16 wPhySecId = 0U; /*ID*/ + UINT16 wPsdNum = 0U; /*PSD*/ + UINT16 wPsdSecId = 0U; /*PSD ID*/ + + cLocalCiId = GetSystemParaLocalCiId(); + + /****** RC·Ϣ ******/ + wRouteNum = GetRouteCurSum(); /*ȡ·*/ + for (jj = 0U; jj < wRouteNum; jj++) + { + wRouteId = GetRouteId(jj); + cBelongCiId = GetRouteBelongCiId(wRouteId); + if (cBelongCiId == cLocalCiId) + { + SetRouteStopensureFlagCC(wRouteId, ROUTE_STOPENSURE_NO); /*RC·֤ͣΪ֤ͣ*/ + } + else + { + /*DZ豸*/ + } + } + + /****** RCźŻϢ ******/ + wSignalNum = GetSignalCurSum(); /*ȡźŻ*/ + for (jj = 0U; jj < wSignalNum; jj++) + { + wSignalId = GetSignalId(jj); + cBelongCiId = GetSignalBelongCiId(wSignalId); + if (cBelongCiId == cLocalCiId) + { + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); /*RCźŻ״̬Ϊ*/ + SetSignalCrossStateCC(wSignalId, SIGNAL_CROSS_STATE_NO); /*RCźŻѹ״̬Ϊδѹ*/ + } + else + { + /*DZ豸*/ + } + } + + /****** RCϢ ******/ + wAxisSecNum = GetAxisSecCurSum(); /*ȡ*/ + for (jj = 0U; jj < wAxisSecNum; jj++) + { + wAxisSecId = GetAxisSecId(jj); + cBelongCiId = GetAxisBelongTioc(wAxisSecId); + if (cBelongCiId == cLocalCiId) + { + SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_NO); /*RCARB״̬ΪδARB*/ + } + else + { + /*DZ豸*/ + } + } + + /****** RC߼Ϣ ******/ + wLogSecNum = GetLogicSecCurSum(); /*ȡ߼*/ + for (jj = 0U; jj < wLogSecNum; jj++) + { + wLogSecId = GetLogicSecId(jj); + cBelongCiId = GetLogSecBelongCiId(wLogSecId); + if (cBelongCiId == cLocalCiId) + { + SetLogSecLinShiXianSuStateCC(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); /*RC߼ʱ״̬Ϊʱ*/ + SetLogSecOccupyStateCC(wLogSecId, LOGICSECTION_OCCUPY_UT); /*RC߼γʼռ״̬ΪUTռ*/ + SetLogSecTXOccupyStateCC(wLogSecId, LOGICSECTION_OCCUPY_NO_TX); /*RC߼ͨųռ״̬Ϊͨųռ*/ + } + else + { + /*DZ豸*/ + } + } + + /****** RCϢ ******/ + wPhySecNum = GetPhySecCurSum(); /*ȡ*/ + for (jj = 0U; jj < wPhySecNum; jj++) + { + wPhySecId = GetPhySecId(jj); + cBelongCiId = GetPhySecBelongCiId(wPhySecId); + if (cBelongCiId == cLocalCiId) + { + SetPhySecStopSteadyFlagCC(wPhySecId, PHYSICAL_SECTION_STOPSTEADY_NO); /*RCͣ״̬Ϊδͣ*/ + } + else + { + /*DZ豸*/ + } + } + + /****** RC PSDϢ ******/ + wPsdNum = GetPsdSum(); /*ȡPSD*/ + for (jj = 0U; jj < wPsdNum; jj++) + { + wPsdSecId = GetPsdId(jj); + cBelongCiId = GetPsdBelongCiId(wPsdSecId); + if (cBelongCiId == cLocalCiId) + { + SetPsdEditGroupInfoDataCC(wPsdSecId, PSD_EDIT_GROUP_DEFAULT); /*RCPSDϢΪĬֵ*/ + SetPsdVobcCmdCC(wPsdSecId, 0U, PSD_DEFAULT_CONTROL_CMD, 0U); /*RCPSDϢЧ*/ + } + else + { + /*DZ豸*/ + } + } +} + +/* +* ÿ豸״̬ +* ˵void +* ֵ +* Created By LQ 2025.11.19 +*/ +void ResetDevStateProcess(void) +{ + UINT8 cRcWorkMode = 0U; + + cRcWorkMode = GetLocalRcWorkMode(); + + /*ϵͳڼ䣬Ϊδȫվ*/ + SetStartFLockFlag(CI_START_FLOCK_YES); + + /*ϵͳڼ䣬Ϊδϵ*/ + SetStartLockFlag(CI_START_LOCK_YES); + + /*ʼ·*/ + (void)InitialRouteData(); + + /*ʼźŻ*/ + (void)InitialSignalData(); + + /*ʼ*/ + (void)InitialSwitchData(); + + /*ʼ*/ + (void)InitialPhySectionData(); + + /*ʼ*/ + (void)InitialAxisSectionData(); + + /*ʼ߼*/ + (void)InitialLogicSectionData(); + + /*ʼͣť*/ + (void)InitialEsbData(); + + /*ʼ*/ + (void)InitialPsdData(); + + /*ʼվ̨*/ + (void)InitialPlatformData(); + + /*ʼվ̨ſ*/ + (void)InitialPscToCiData(); + + /*ʼ̵*/ + (void)InitialRelayData(); + + /*ʼ*/ + (void)InitialOverlapData(); + + /*ʼԶ۷*/ + (void)InitialAutoReturnRouteData(); + + /*ʼԶͨ*/ + (void)InitialAutoRouteRouteData(); + + /*ʼָʾ*/ + (void)InitialIndicatorStateData(); + + /*ʼͨ״̬*/ + (void)InitialTransmitStateData(); + + /*ʼȫԶ۷*/ + (void)InitialAllAutoReturnRouteData(); + + /*ʼ*/ + (void)InitialGaragedoorData(); + + /*ʼSPKS*/ + (void)SpksDataManageInit(); + + /*ʼESB*/ + (void)EsbDataManageInit(); + + /*ʼ*/ + (void)InitialFloodGateData(); + + /*ʼгģ*/ + (void)TrainDataModuleInit(); + + /* ʼ豸 */ + (void)ReverseCutDataManageInit(); + + if (RC_WORK_MODE_TIOC == cRcWorkMode) + { + /*ʼֽ*/ + (void)CutoffPointDataManageInit(); + + /*ʼ̬·*/ + InitialDynamicRouteData(); + + /*ʼ߼·*/ + InitialLogicalRouteData(); + + /*ʼ*/ + as_Init(); + (void)elm_Init(); + ssp_Init(); + + /*ʼȫɸ*/ + (void)wls_Init(); + + /*ʼȫ߽ƶ*/ + WlbInit(); + } + else + { + ; /* ޴ */ + } + + /*ʼOC*/ + InitOcData(); + + /*ʼoc豸*/ + InitOcDevices(); + + /*ʼṹ*/ + InitCtrlPowerStru(); + + /*ʼOCվָʾ*/ + (void)InitialOCStationIndicStaData(); + + /*ʼ۷ָʾ״̬*/ + (void)InitialRtnIndicStaData(); + + /*ʼƽ̨͵ͨءչ*/ + InitPlatDataStru(); + + /*ʼLEU*/ + (void)InitLEUDataStru(); + + TiocTransCtInit(); +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Initial/InitialProcess.h b/TSCP/src/APP/ciapp/Initial/InitialProcess.h index 60f890a..f454910 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.h +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.h @@ -330,6 +330,22 @@ UINT8 InitLEUDataStru(void); */ UINT8 InitialRtnIndicStaData(void); +/* +* ñRC豸̬ +* ˵void +* ֵvoid +* Created By LQ 2025.11.07 +*/ +void ResetLocalRcDynamicState(void); + +/* +* ÿ豸״̬ +* ˵void +* ֵ +* Created By LQ 2025.11.19 +*/ +void ResetDevStateProcess(void); + #ifdef __cplusplus } #endif 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..95a12a4 100644 --- a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c +++ b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c @@ -21,18 +21,27 @@ UINT16 colStringLength = 0u; UINT8 drvString[RELAY_SUM_MAX] = {0u};/**/ UINT16 drvStringLength = 0u; AxisSectionDataStruct Record_AxisSecDataStru[AXIS_SECTION_SUM_MAX];/*ο*/ +AxisSectionDataStructCC Record_AxisSecDataStruCC[AXIS_SECTION_SUM_MAX];/*ο-*/ SignalDataStruct Record_SignalDataStru[SIGNAL_SUM_MAX];/*οźŻ̬*/ +SignalDataStructCC Record_SignalDataStruCC[SIGNAL_SUM_MAX];/*οźŻ̬-*/ EsbDataStruct Record_EsbDataStru[ESB_SUM_MAX]; /*οESB̬*/ SwitchDataStruct Record_SwitchDataStru[SWITCH_SUM_MAX];/*ο̬*/ PhysicalSectionDataStruct Record_PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX];/*οζ̬*/ +PhysicalSectionDataStructCC Record_PhySecDataStruCC[PHYSICAL_SECTION_SUM_MAX] = { 0U };/*οζ̬CC*/ RouteDataStruct Record_RouteDataStru[ROUTE_SUM_MAX];/*ο·̬*/ +RouteDataStructCC Record_RouteDataStruCC[ROUTE_SUM_MAX];/*ο·̬-*/ NonRouteDataStruct Record_NonRouteDataStru[NONROUTE_ID_NUM_MAX]; /*οǽ·̬*/ LogicSectionDataStruct Record_LogicSecDataStru[LOGIC_SECTION_SUM_MAX];/*ο߼ζ̬*/ +LogicSectionDataStructCC Record_LogicSecDataStruCC[LOGIC_SECTION_SUM_MAX];/*ο߼ζ̬-*/ WashMachineDataStruct Record_WashMachineDataStru[WASHMACHINE_SUM_MAX]; /*οϴ̬*/ PsdDataStruct Record_PsdDataStru[PSD_SUM_MAX];/*οŶ̬*/ +PsdDataStructCC Record_PsdDataStruCC[PSD_SUM_MAX] = { 0U };/*οŶ̬CC*/ GaragedoorDataStruct Record_GaragedoorDataStru[GARAGE_DOOR_SUM_MAX]; /*οݽṹ*/ -FloodGateDataStruct Record_FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /**/ +GaragedoorDataStructCC Record_GaragedoorDataStruCC[GARAGE_DOOR_SUM_MAX]; /*οݽṹ-*/ +FloodGateDataStruct Record_FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /*οݽṹ*/ +FloodGateDataStructCC Record_FloodGateDataStruCC[FLOOD_GATE_SUM_MAX]; /*οݽṹ-*/ OverlapDataStruct Record_OverlapDataStru[OVERLAP_SUM_MAX];/*οζ̬*/ +OverlapDataStructCC Record_OverlapDataStruCC[OVERLAP_SUM_MAX];/*οζ̬-*/ VirCIKeyDataStru Record_VirCIKeyDataStru[VIRTUAL_CI_MAX]= {0u};/*¼ؼ*/ VirCIKeyDataStru newVirCIKeyDataStru[VIRTUAL_CI_MAX]= {0u}; SpksDataStruct Record_spksDataBuff[SPKS_SUM_MAX] = { 0u }; @@ -42,7 +51,7 @@ TsrDataStruct Record_TsrInfo[TSR_MAX_SUM] = { 0u }; /* OCStationIndicDataStru Record_OCStationIndicBuff[INDICATOR_SUM_MAX] = { 0u }; LogicalRouteDataStruct Record_LogicalRouteDataStru[ROUTE_LOGICAL_SUM_MAX] = { 0U }; NonAutoReturnDataStruct Record_NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX] = { 0U }; - +NonAutoReturnDataStructCC Record_NonReturnDataStruCC[NON_AUTO_RETURN_SUM_MAX] = { 0U }; UINT8 outString[1024*1024] = {0u};/*ȽϺ豸ӡݻ*/ extern QueueStruct logPrintfQue; /*־ӡ*/ UINT16 logIndex = 0u; /*־*/ @@ -458,19 +467,29 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) UINT16 wTrainId = 0u; UINT8 returnValue = CI_SUCCESS;/*ֵ*/ UINT8 comparaResult = 0u;/*ȽϽ*/ + UINT8 comparaResultCC = 0u;/*ȽϽ*/ UINT16 floodGateTotalSum = 0u;/**/ AxisSectionDataStruct* newAxisSecData = GetAxisSecData(); + AxisSectionDataStructCC* pAxisSecDataCC = GetAxisSecDataCC(); SignalDataStruct* newSignalData = GetSignalData(); + SignalDataStructCC* pSignalDataCC = GetSignalDataCC(); SwitchDataStruct* newSwitchData = GetSwitchData(); PhysicalSectionDataStruct* newPhysicalSectionData = GetPhySecData(); + PhysicalSectionDataStructCC* pPhysicalSectionDataCC = GetPhySecDataCC(); RouteDataStruct* newRouteData = GetRouteData(); + RouteDataStructCC* pRouteDataCC = GetRouteDataCC(); NonRouteDataStruct* newNonRouteDataStru = GetNonRouteDataPtr(); LogicSectionDataStruct* newLogicSecData = GetLogicSecData(); + LogicSectionDataStructCC* pLogicSecDataCC = GetLogicSecDataCC(); WashMachineDataStruct* newWashMachineData = GetWashMachineData(); PsdDataStruct * newPsdData = GetPsdData(); + PsdDataStructCC* pPsdDataCC = GetPsdDataCC(); GaragedoorDataStruct* newGaragedoorData = GetGaragedoorData(); /*ȡݽṹ*/ + GaragedoorDataStructCC* pGaragedoorDataCC = GetGaragedoorDataCC(); /*ȡݽṹ*/ FloodGateDataStruct *pNewFloodGateData = GetFloodGateData(); /*ȡݽṹ*/ + FloodGateDataStructCC* pNewFloodGateDataCC = GetFloodGateDataCC(); /*ȡݽṹ*/ OverlapDataStruct* newOverlapData = GetOverlapData(); + OverlapDataStructCC* pOverlapDataCC = GetOverlapDataCC(); TrainInfoStru* pNewTrainInfoData = GetTrainInfoData(); TsrDataStruct* pNewTsrInfo = GetTsrData(); /* ʱϢ */ CfpDataStru * pNewCfpData = GetCfpData(); @@ -484,8 +503,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) UINT16 deviceNum = 0u; UINT8 localCiType = 0u; UINT16 wNonAutoReturnCurSum = 0U;/*۷ťǰ*/ - NonAutoReturnDataStruct* pNonAutoReturnData = NULL;/*۷ݽṹָ*/ - + NonAutoReturnDataStruct* pNonAutoReturnData = NULL; /*۷ݽṹָ*/ + NonAutoReturnDataStructCC* pNonReturnDataStruCC = NULL; /*۷ݽṹָ-CC*/ /*************************************ӡ********************************************/ /*ӡ*/ @@ -497,9 +516,10 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetPhySecId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_PhysicalSectionDataStru[deviceId]), (UINT16)sizeof(PhysicalSectionDataStruct), (UINT8*)(&newPhysicalSectionData[deviceId]), (UINT16)sizeof(PhysicalSectionDataStruct)); + comparaResultCC = DeviceCompara((UINT8*)(&Record_PhySecDataStruCC[deviceId]), (UINT16)sizeof(PhysicalSectionDataStructCC), + (UINT8*)(&pPhysicalSectionDataCC[deviceId]), (UINT16)sizeof(PhysicalSectionDataStructCC)); - - if(0u != comparaResult) + if ((1U == comparaResult) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR != Flag) @@ -526,7 +546,18 @@ 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].chResetCmdTag;/*λǩ*/ + outString[outStringLength++] = newPhysicalSectionData[deviceId].chResetCmdTagBack;/*λǩ*/ + 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] = pPhysicalSectionDataCC[deviceId].StopSteadyFlag;/*ͣ״̬ϢCC(0x55-δͣȣ0xAA-ͣ)*/ + outStringLength++; outString[outStringLength++] = newPhysicalSectionData[deviceId].ArbState;/*ARB״̬*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].ProtectSecLockDelayTimeFlag;/*ʱ־(ֶ̬)*/ outString[outStringLength++] = newPhysicalSectionData[deviceId].StopCheckFlag; /*ֹͣ־(δ/) (ֶ̬)*/ @@ -544,8 +575,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,8 +587,14 @@ 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; } } + else + { + /*һ£*/ + } } if (0u == outStringLength) @@ -606,11 +641,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) comparaResult = DeviceCompara((UINT8*)(&Record_SignalDataStru[deviceId]), (UINT16)sizeof(SignalDataStruct), (UINT8*)(&newSignalData[deviceId]), (UINT16)sizeof(SignalDataStruct)); - if (0u==comparaResult) + comparaResultCC = DeviceCompara((UINT8*)(&Record_SignalDataStruCC[deviceId]), (UINT16)sizeof(SignalDataStructCC), + (UINT8*)(&pSignalDataCC[deviceId]), (UINT16)sizeof(SignalDataStructCC)); + + if ((0U==comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u==comparaResult ) + else if ((1U==comparaResult ) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR != Flag) @@ -621,6 +659,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 2u; outString[outStringLength++] = newSignalData[deviceId].FLockState;/*״̬*/ outString[outStringLength++] = newSignalData[deviceId].LightExtinctState;/*״̬*/ + outString[outStringLength] = pSignalDataCC[deviceId].LightExtinctState;/*״̬CC(0x55ƣ0xaa)*/ + outStringLength++; outString[outStringLength++] = newSignalData[deviceId].PreColor;/*֮ǰʾɫ*/ outString[outStringLength++] = newSignalData[deviceId].CurColor;/*ǰʾɫ*/ outString[outStringLength++] = newSignalData[deviceId].PreDriveColor;/*֮ǰɫ*/ @@ -633,6 +673,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) LongToChar(newSignalData[deviceId].CollSigOpenStartCycNum,&outString[outStringLength]); /*ɼźŻʼ*/ outStringLength += 4u; outString[outStringLength++] = newSignalData[deviceId].SignalCrossState;/*źŻѹ״̬*/ + outString[outStringLength] = pSignalDataCC[deviceId].SignalCrossState;/*źŻѹ״̬CC(0x55δѹ0xaaѹ)*/ + outStringLength++; outString[outStringLength++] = newSignalData[deviceId].SignalYLockOpenState;/*źſ״̬*/ outString[outStringLength++] = newSignalData[deviceId].AtsDetainFlag;/*Ats˹۳־*/ outString[outStringLength++] = newSignalData[deviceId].AtsDetainFlagAuto;/*AtsԶ۳־*/ @@ -652,6 +694,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;/*̻Ƶ˿˿־״̬*/ @@ -659,7 +702,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newSignalData[deviceId].DoubleYellowDsBreakFlag;/*˫Ƶ˿˿־״̬*/ outString[outStringLength++] = newSignalData[deviceId].MaintainLightState;/*źŻά޵״̬*/ - if (MAX_SIGNAL_LIGHTUPLINK_NUM < newSignalData[deviceId].wSignalLightUpLinkIdSum) + if (MAX_SIGNAL_LIGHTUPLINK_NUM < pSignalDataCC[deviceId].wSignalLightUpLinkIdSum) { /* Ϸ */ ShortToChar(0u, &outString[outStringLength]);/*źŻlink*/ @@ -668,12 +711,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) else { /* Ϸ */ - ShortToChar(newSignalData[deviceId].wSignalLightUpLinkIdSum, &outString[outStringLength]);/*źŻlink*/ + ShortToChar(pSignalDataCC[deviceId].wSignalLightUpLinkIdSum, &outString[outStringLength]);/*źŻlink*/ outStringLength += 2u; - for (jj = 0u; jj < newSignalData[deviceId].wSignalLightUpLinkIdSum; jj++) + for (jj = 0u; jj < pSignalDataCC[deviceId].wSignalLightUpLinkIdSum; jj++) { - ShortToChar(newSignalData[deviceId].szSignalLightUpLinkIdBuf[jj], &outString[outStringLength]);/*źŻlink*/ + ShortToChar(pSignalDataCC[deviceId].szSignalLightUpLinkIdBuf[jj], &outString[outStringLength]);/*źŻlink*/ outStringLength += 2u; } } @@ -683,16 +726,28 @@ 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]); /*ȡ۳ť󴥷*/ outStringLength += 4u; - ShortToChar(newSignalData[deviceId].wSignalLightUpTrainId, &outString[outStringLength]);/*źŻνӽгID*/ + ShortToChar(pSignalDataCC[deviceId].wSignalLightUpTrainId, &outString[outStringLength]);/*źŻνӽгID*/ outStringLength += 2u; - outString[outStringLength++] = newSignalData[deviceId].cSleepTrainLightUpFlag; /*߳źŻ־0x55 Ч0xAA Ч*/ + outString[outStringLength++] = pSignalDataCC[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 +817,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 +826,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 @@ -936,11 +998,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) comparaResult = DeviceCompara((UINT8*)(&Record_RouteDataStru[deviceId]), (UINT16)sizeof(RouteDataStruct), (UINT8*)(&newRouteData[deviceId]), (UINT16)sizeof(RouteDataStruct)); - if (0u==comparaResult) + comparaResultCC = DeviceCompara((UINT8*)(&Record_RouteDataStruCC[deviceId]), (UINT16)sizeof(RouteDataStructCC), + (UINT8*)(&pRouteDataCC[deviceId]), (UINT16)sizeof(RouteDataStructCC)); + + if ((0U == comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u==comparaResult ) + else if ((1U==comparaResult) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR != Flag) @@ -976,6 +1041,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) ShortToChar(newRouteData[deviceId].AllAutoReturnId,&outString[outStringLength]);/*ȫԶ۷·ID*/ outStringLength += 2u; outString[outStringLength++] = newRouteData[deviceId].StopensureFlag;/*֤ͣ־*/ + outString[outStringLength] = pRouteDataCC[deviceId].StopensureFlag;/*֤ͣ־CC(0x55ã0xAAδ)*/ + outStringLength++; outString[outStringLength++] = newRouteData[deviceId].StopKeepCheckFlag; /* ʱõ֤ͣ־ */ outString[outStringLength++] = newRouteData[deviceId].RouteStateFlag; /*·״̬־1ʾЧ0ʾЧ*/ outString[outStringLength++] = newRouteData[deviceId].TrainEnterFlag;/*гʻ־*/ @@ -994,7 +1061,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; @@ -1006,19 +1075,19 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newRouteData[deviceId].AutoSigPropertyLoseEfficacyFlag; /*ԶźʧЧ־δ/ã*/ outString[outStringLength++] = newRouteData[deviceId].OverlapNeedCIlockFlag; /*ҪCIձ־*/ outString[outStringLength++] = newRouteData[deviceId].OverlapLockProcFlag; /*չб־*/ - ShortToChar(newRouteData[deviceId].wStopEnsureTrainId, &outString[outStringLength]);/*·֤ͣгID*/ + ShortToChar(pRouteDataCC[deviceId].wStopEnsureTrainId, &outString[outStringLength]);/*·֤ͣгID*/ outStringLength += 2u; - LongToChar(newRouteData[deviceId].dwStopEnsureCyc, &outString[outStringLength]);/*֤ͣѯں*/ + LongToChar(pRouteDataCC[deviceId].dwStopEnsureCyc, &outString[outStringLength]);/*֤ͣѯں*/ outStringLength += 4u; - outString[outStringLength++] = newRouteData[deviceId].cResReqOtherCIId; /*ԴID*/ + outString[outStringLength++] = pRouteDataCC[deviceId].cResReqOtherCIId; /*ԴID*/ - if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX >= newRouteData[deviceId].chResReqTrainSum) + if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX >= pRouteDataCC[deviceId].chResReqTrainSum) { - outString[outStringLength++] = newRouteData[deviceId].chResReqTrainSum; /*ԴID*/ - for (jj = 0u; jj < newRouteData[deviceId].chResReqTrainSum; jj++) + outString[outStringLength++] = pRouteDataCC[deviceId].chResReqTrainSum; /*ԴID*/ + for (jj = 0u; jj < pRouteDataCC[deviceId].chResReqTrainSum; jj++) { - ShortToChar(newRouteData[deviceId].wszResReqTrainId[jj], &outString[outStringLength]);/*ԴгID*/ + ShortToChar(pRouteDataCC[deviceId].wszResReqTrainId[jj], &outString[outStringLength]);/*ԴгID*/ outStringLength += 2u; } } @@ -1027,13 +1096,13 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = 0u; /*ԴID*/ } - if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX >= newRouteData[deviceId].ITSRouteApplyTrainIdSum) + if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX >= pRouteDataCC[deviceId].ITSRouteApplyTrainIdSum) { - outString[outStringLength++] = newRouteData[deviceId].ITSRouteApplyTrainIdSum; /*ITS·гID¼*/ + outString[outStringLength++] = pRouteDataCC[deviceId].ITSRouteApplyTrainIdSum; /*ITS·гID¼*/ - for (jj = 0u; jj < newRouteData[deviceId].ITSRouteApplyTrainIdSum; jj++) + for (jj = 0u; jj < pRouteDataCC[deviceId].ITSRouteApplyTrainIdSum; jj++) { - ShortToChar(newRouteData[deviceId].ITSRouteApplyTrainIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ + ShortToChar(pRouteDataCC[deviceId].ITSRouteApplyTrainIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ outStringLength += 2u; } @@ -1044,16 +1113,16 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) } /*ɶ־*/ - outString[outStringLength++] = newRouteData[deviceId].HalfRouteDataSt.HalfRouteSwitchMoveValid; + outString[outStringLength++] = pRouteDataCC[deviceId].HalfRouteDataSt.HalfRouteSwitchMoveValid; - if (MAX_ROUTE_IN_LT_NUM > newRouteData[deviceId].HalfRouteDataSt.RouteLockLgcSecNum) + if (MAX_ROUTE_IN_LT_NUM > pRouteDataCC[deviceId].HalfRouteDataSt.RouteLockLgcSecNum) { /*߼*/ - outString[outStringLength++] = newRouteData[deviceId].HalfRouteDataSt.RouteLockLgcSecNum; + outString[outStringLength++] = pRouteDataCC[deviceId].HalfRouteDataSt.RouteLockLgcSecNum; /*߼ID*/ - for (jj = 0u; jj < newRouteData[deviceId].HalfRouteDataSt.RouteLockLgcSecNum; jj++) + for (jj = 0u; jj < pRouteDataCC[deviceId].HalfRouteDataSt.RouteLockLgcSecNum; jj++) { - ShortToChar(newRouteData[deviceId].HalfRouteDataSt.RouteLockLgcSecIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ + ShortToChar(pRouteDataCC[deviceId].HalfRouteDataSt.RouteLockLgcSecIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ outStringLength += 2u; } @@ -1063,18 +1132,18 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = 0u; } /*гID*/ - ShortToChar(newRouteData[deviceId].HalfRouteDataSt.HalfResReqTrainId, &outString[outStringLength]);/*ͨITS·¼гID*/ + ShortToChar(pRouteDataCC[deviceId].HalfRouteDataSt.HalfResReqTrainId, &outString[outStringLength]);/*ͨITS·¼гID*/ outStringLength += 2u; - if (ROUTE_TRAIN_LOC_MAX_LGC_SUM >= newRouteData[deviceId].HalfRouteDataSt.TrainLocLgcSecNum) + if (ROUTE_TRAIN_LOC_MAX_LGC_SUM >= pRouteDataCC[deviceId].HalfRouteDataSt.TrainLocLgcSecNum) { /*гԴ*/ - outString[outStringLength++] = newRouteData[deviceId].HalfRouteDataSt.TrainLocLgcSecNum; + outString[outStringLength++] = pRouteDataCC[deviceId].HalfRouteDataSt.TrainLocLgcSecNum; - for (jj = 0u; jj < newRouteData[deviceId].HalfRouteDataSt.TrainLocLgcSecNum; jj++) + for (jj = 0u; jj < pRouteDataCC[deviceId].HalfRouteDataSt.TrainLocLgcSecNum; jj++) { /*гԴ߼ID*/ - ShortToChar(newRouteData[deviceId].HalfRouteDataSt.TrainLocLgcSecIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ + ShortToChar(pRouteDataCC[deviceId].HalfRouteDataSt.TrainLocLgcSecIdBuf[jj], &outString[outStringLength]);/*ͨITS·¼гID*/ outStringLength += 2u; } @@ -1083,7 +1152,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) { outString[outStringLength++] = 0u; } - LongToChar(newRouteData[deviceId].dwFirstElockStartCycNum, &outString[outStringLength]); /*·һյ߼ʱιʼں*/ + LongToChar(pRouteDataCC[deviceId].dwFirstElockStartCycNum, &outString[outStringLength]); /*·һյ߼ʱιʼں*/ outStringLength += 4u; outString[outStringLength++] = newRouteData[deviceId].cRelZuHeRouteSGBJDelayFlag; /*Ͻ·ⱨǷʱ־*/ @@ -1094,8 +1163,11 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newRouteData[deviceId].cRouteNeedDriveSGBJFlag; /*·ⱨ־*/ outString[outStringLength++] = newRouteData[deviceId].cRouteDrivedSGBJFlag; /*·ⱨ־0x55 δ0xAA */ - outString[outStringLength++] = newRouteData[deviceId].chRouteNearSecSearchState; /*·ӽβѯ״̬Ƿйϳ*/ + outString[outStringLength++] = pRouteDataCC[deviceId].chRouteNearSecSearchState; /*·ӽβѯ״̬Ƿйϳ*/ outString[outStringLength++] = newRouteData[deviceId].chRouteApplySwitchCheckFlag; /*·ڿ־*/ + outString[outStringLength++] = newRouteData[deviceId].chRoutCouplinkFlag; /*·ұ־*/ + outString[outStringLength++] = newRouteData[deviceId].chCouplinkSuccessFlag; /*·ҳɹ*/ + outString[outStringLength++] = newRouteData[deviceId].chCouplinkErrorFlag; /*·ʧ*/ } } else @@ -1236,12 +1308,13 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetLogicSecId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_LogicSecDataStru[deviceId]), (UINT16)sizeof(LogicSectionDataStruct), (UINT8*)(&newLogicSecData[deviceId]), (UINT16)sizeof(LogicSectionDataStruct)); - - if (0u==comparaResult) + comparaResultCC = DeviceCompara((UINT8*)(&Record_LogicSecDataStruCC[deviceId]), (UINT16)sizeof(LogicSectionDataStructCC), + (UINT8*)(&pLogicSecDataCC[deviceId]), (UINT16)sizeof(LogicSectionDataStructCC)); + if ((0U==comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u==comparaResult ) + else if ((1U==comparaResult) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR==Flag) @@ -1257,10 +1330,18 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newLogicSecData[deviceId].PreOccupyState;/*߼֮ǰռ״̬*/ outString[outStringLength++] = newLogicSecData[deviceId].CurOccupyState;/*߼εǰռ״̬*/ outString[outStringLength++] = newLogicSecData[deviceId].LinShiXianSuSetFlag;/*߼ʱ*/ - outString[outStringLength++] = newLogicSecData[deviceId].OccupyState;/*߼ռ״̬*/ + outString[outStringLength] = pLogicSecDataCC[deviceId].LinShiXianSuSetFlag;/*߼ʱCC(0x55-δʱ٣0xAA-ʱ٣0xFF-ʱЧ)*/ + outStringLength++; + outString[outStringLength++] = newLogicSecData[deviceId].OccupyState;/*߼γʼռ״̬*/ + outString[outStringLength] = pLogicSecDataCC[deviceId].OccupyState;/*߼γʼռ״̬CC(0x55-δռã0xAA-ͨųռã0xBB-ͨųռ)*/ + outStringLength++; + outString[outStringLength] = newLogicSecData[deviceId].TXOccupyState;/*߼ͨųռ״̬(0x55-޳ͨųռã0xAA-ͨųռ)*/ + outStringLength++; + outString[outStringLength] = pLogicSecDataCC[deviceId].TXOccupyState;/*߼ͨųռ״̬CC(0x55-޳ͨųռã0xAA-ͨųռ)*/ + outStringLength++; outString[outStringLength++] = newLogicSecData[deviceId].LogLockState;/*߼״̬*/ outString[outStringLength++] = newLogicSecData[deviceId].LogLockDir;/*߼շ*/ - outString[outStringLength++] = newLogicSecData[deviceId].chResShareFlag;/*߼ι־ 0x55 0xAAǹ*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].chResShareFlag;/*߼ι־ 0x55 0xAAǹ*/ ShortToChar(newLogicSecData[deviceId].LogLockBelongRoute,&outString[outStringLength]);/*߼·*/ outStringLength += 2u; LongToChar(newLogicSecData[deviceId].LogUnlockStartCycNum,&outString[outStringLength]);/*߼ʱں*/ @@ -1268,53 +1349,53 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) ShortToChar(newLogicSecData[deviceId].wPLockBelongRouteId, &outString[outStringLength]);/*յĽ·*/ outStringLength += 2u; - outString[outStringLength++] = newLogicSecData[deviceId].cResReqOtherCIId;/*ԴID*/ - ShortToChar(newLogicSecData[deviceId].wResReqTrainId, &outString[outStringLength]);/*ԴгID*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].cResReqOtherCIId;/*ԴID*/ + ShortToChar(pLogicSecDataCC[deviceId].wResReqTrainId, &outString[outStringLength]);/*ԴгID*/ outStringLength += 2u; - ShortToChar(newLogicSecData[deviceId].JumpLockTrainId, &outString[outStringLength]);/*ͷԾгID*/ + ShortToChar(pLogicSecDataCC[deviceId].JumpLockTrainId, &outString[outStringLength]);/*ͷԾгID*/ outStringLength += 2u; - outString[outStringLength++] = newLogicSecData[deviceId].LogJumpLockState;/*߼Ծ״̬ 0x55 δգ0xAA */ - outString[outStringLength++] = newLogicSecData[deviceId].LogJumpLockDelayUnlockFlag;/*߼Ծʱñ־ 0x55 δã0xaa */ - LongToChar(newLogicSecData[deviceId].LogSecJumpDelayUnlockStartCyc, &outString[outStringLength]);/*߼Ծʱʼں*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].LogJumpLockState;/*߼Ծ״̬ 0x55 δգ0xAA */ + outString[outStringLength++] = pLogicSecDataCC[deviceId].LogJumpLockDelayUnlockFlag;/*߼Ծʱñ־ 0x55 δã0xaa */ + LongToChar(pLogicSecDataCC[deviceId].LogSecJumpDelayUnlockStartCyc, &outString[outStringLength]);/*߼Ծʱʼں*/ outStringLength += 4u; - outString[outStringLength++] = newLogicSecData[deviceId].LogSecJumpLockPermFlag;/*߼Ծ־ 0x55 0xaa ֹ*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].LogSecJumpLockPermFlag;/*߼Ծ־ 0x55 0xaa ֹ*/ - if (LOGIC_SECTION_RES_SUM_MAX < newLogicSecData[deviceId].chTrainInfoSum) + if (LOGIC_SECTION_RES_SUM_MAX < pLogicSecDataCC[deviceId].chTrainInfoSum) { /* Ϸ */ outString[outStringLength++] = 0u;/*߼Դ*/ } else { - outString[outStringLength++] = newLogicSecData[deviceId].chTrainInfoSum;/*߼Դ*/ - for (jj = 0u; jj < newLogicSecData[deviceId].chTrainInfoSum; jj++) + outString[outStringLength++] = pLogicSecDataCC[deviceId].chTrainInfoSum;/*߼Դ*/ + for (jj = 0u; jj < pLogicSecDataCC[deviceId].chTrainInfoSum; jj++) { - ShortToChar(newLogicSecData[deviceId].szTrainResData[jj].wTrainId, &outString[outStringLength]);/*гID*/ + ShortToChar(pLogicSecDataCC[deviceId].szTrainResData[jj].wTrainId, &outString[outStringLength]);/*гID*/ outStringLength += 2u; - outString[outStringLength++] = newLogicSecData[deviceId].szTrainResData[jj].chTrainApplyState;/*г״̬*/ - outString[outStringLength++] = newLogicSecData[deviceId].szTrainResData[jj].chLogicResUsable;/*гԴ״̬*/ - outString[outStringLength++] = newLogicSecData[deviceId].szTrainResData[jj].chLogicReturnState;/*۷߼α־*/ - outString[outStringLength++] = newLogicSecData[deviceId].szTrainResData[jj].chLogicUnlockState;/*г״̬*/ - LongToChar(newLogicSecData[deviceId].szTrainResData[jj].dwRcvUnlockCmdCyc, &outString[outStringLength]);/*߼ʱں*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szTrainResData[jj].chTrainApplyState;/*г״̬*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szTrainResData[jj].chLogicResUsable;/*гԴ״̬*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szTrainResData[jj].chLogicReturnState;/*۷߼α־*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szTrainResData[jj].chLogicUnlockState;/*г״̬*/ + LongToChar(pLogicSecDataCC[deviceId].szTrainResData[jj].dwRcvUnlockCmdCyc, &outString[outStringLength]);/*߼ʱں*/ outStringLength += 4u; } } - LongToChar(newLogicSecData[deviceId].LogErrlockStartCycNum, &outString[outStringLength]);/*߼ʱùʼں*/ + LongToChar(pLogicSecDataCC[deviceId].LogErrlockStartCycNum, &outString[outStringLength]);/*߼ʱùʼں*/ outStringLength += 4U; outString[outStringLength++] = newLogicSecData[deviceId].chLogicProResUsable;/*߼ηԴ״̬*/ outString[outStringLength++] = newLogicSecData[deviceId].chLogicSpksFLockState;/*߼αSPKS״̬*/ - if (LOGSEC_RELATE_ROUTE_SUM_MAX >= newLogicSecData[deviceId].chLogSecLockBelLogRouteSum) + if (LOGSEC_RELATE_ROUTE_SUM_MAX >= pLogicSecDataCC[deviceId].chLogSecLockBelLogRouteSum) { - outString[outStringLength++] = newLogicSecData[deviceId].chLogSecLockBelLogRouteSum; /*߼߼·*/ - for (kk = 0U; kk < newLogicSecData[deviceId].chLogSecLockBelLogRouteSum; kk++) + outString[outStringLength++] = pLogicSecDataCC[deviceId].chLogSecLockBelLogRouteSum; /*߼߼·*/ + for (kk = 0U; kk < pLogicSecDataCC[deviceId].chLogSecLockBelLogRouteSum; kk++) { - ShortToChar(newLogicSecData[deviceId].szLogSecLockBelLogRouteData[kk].wLogSecLockBelLogRouteId, &outString[outStringLength]); /*߼߼·ID*/ + ShortToChar(pLogicSecDataCC[deviceId].szLogSecLockBelLogRouteData[kk].wLogSecLockBelLogRouteId, &outString[outStringLength]); /*߼߼·ID*/ outStringLength += 2u; - outString[outStringLength++] = newLogicSecData[deviceId].szLogSecLockBelLogRouteData[kk].chLogSecLockBelLogRouteState; /*߼߼·״̬*/ - outString[outStringLength++] = newLogicSecData[deviceId].szLogSecLockBelLogRouteData[kk].wLogSecLockBelLogRouteDir; /*߼α߼·յķID*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szLogSecLockBelLogRouteData[kk].chLogSecLockBelLogRouteState; /*߼߼·״̬*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].szLogSecLockBelLogRouteData[kk].wLogSecLockBelLogRouteDir; /*߼α߼·յķID*/ } } else @@ -1322,11 +1403,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = 0U; /*߼߼·ޣ*/ } - outString[outStringLength++] = newLogicSecData[deviceId].LogSecLogLockState; /*߼߼״̬*/ - outString[outStringLength++] = newLogicSecData[deviceId].LogSecLogLockDir; /*߼߼շ*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].LogSecLogLockState; /*߼߼״̬*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].LogSecLogLockDir; /*߼߼շ*/ outString[outStringLength++] = newLogicSecData[deviceId].chLinShiXianSuSetSpeed; /*߼ʱֵ*/ - outString[outStringLength++] = newLogicSecData[deviceId].chAblRelLogSecUsableFlag; /*ABLг߼ʹñ־*/ - outString[outStringLength++] = newLogicSecData[deviceId].cRouteLeaveLogFlag; /*ȥABLг־*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].chAblRelLogSecUsableFlag; /*ABLг߼ʹñ־*/ + outString[outStringLength++] = pLogicSecDataCC[deviceId].cRouteLeaveLogFlag; /*ȥABLг־*/ + outString[outStringLength++] = newLogicSecData[deviceId].chLogSecEmergXianSu;/*߼νʱ*/ } } else @@ -1463,12 +1545,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetPsdId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_PsdDataStru[deviceId]), (UINT16)sizeof(PsdDataStruct), (UINT8*)(&newPsdData[deviceId]), (UINT16)sizeof(PsdDataStruct)); + comparaResultCC = DeviceCompara((UINT8*)(&Record_PsdDataStruCC[deviceId]), (UINT16)sizeof(PsdDataStructCC), + (UINT8*)(&pPsdDataCC[deviceId]), (UINT16)sizeof(PsdDataStructCC)); - if (0u==comparaResult) + if ((0U == comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u==comparaResult ) + else if ((1U == comparaResult)|| (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR==Flag) @@ -1483,6 +1567,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 2u; ShortToChar(newPsdData[deviceId].psdEditGroupInfo,&outString[outStringLength]);/*PSD Ϣ*/ outStringLength += 2u; + ShortToChar(pPsdDataCC[deviceId].psdEditGroupInfo, &outString[outStringLength]);/*PSD ϢCC(0-Ĭֵ3-飬4-ı飬6-飬8-˱)*/ + outStringLength += 2U; outString[outStringLength++] = newPsdData[deviceId].DoorButtonState;/*Űť״̬*/ outString[outStringLength++] = newPsdData[deviceId].MutualLockRemoveState;/*Ż״̬*/ outString[outStringLength++] = newPsdData[deviceId].PsdDriveState;/*״̬*/ @@ -1492,6 +1578,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newPsdData[deviceId].PsdCmd;/*ŵ*/ LongToChar(newPsdData[deviceId].CmdSetCycle,&outString[outStringLength]);/**/ outStringLength += 4u; + ShortToChar(pPsdDataCC[deviceId].SrcVobcId, &outString[outStringLength]);/*ŵĵǰVOBCCC*/ + outStringLength += 2U; + outString[outStringLength] = pPsdDataCC[deviceId].PsdCmd;/*ŵCC(0x00-Ĭֵ0x55-PSD0xAA-رPSD0xFF-ѯPSD)*/ + outStringLength++; + LongToChar(pPsdDataCC[deviceId].CmdSetCycle, &outString[outStringLength]);/*CC*/ + outStringLength += 4U; LongToChar(newPsdData[deviceId].CmdSetCyclePsc,&outString[outStringLength]);/*psc״̬*/ outStringLength += 4u; outString[outStringLength++] = newPsdData[deviceId].doorOpenButtonState;/*վ̨Űť״̬*/ @@ -1528,8 +1620,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 { @@ -1572,6 +1667,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetGaragedoorId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_GaragedoorDataStru[deviceId]), (UINT16)sizeof(GaragedoorDataStruct), (UINT8*)(&newGaragedoorData[deviceId]), (UINT16)sizeof(GaragedoorDataStruct)); + comparaResult += DeviceCompara((UINT8*)(&Record_GaragedoorDataStruCC[deviceId]), (UINT16)sizeof(GaragedoorDataStructCC), + (UINT8*)(&pGaragedoorDataCC[deviceId]), (UINT16)sizeof(GaragedoorDataStructCC)); if (0u==comparaResult) {/*Ƚһ*/ @@ -1592,7 +1689,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 2u; outString[outStringLength++] = newGaragedoorData[deviceId].GaragedoorState; /*״̬ (ֶ̬)*/ outString[outStringLength++] = newGaragedoorData[deviceId].GaragedoorAllowCloseFlag; /*ű־ZC*/ - outString[outStringLength++] = newGaragedoorData[deviceId].GDAllowCloseFlagIVOC; /*ű־IVOC*/ + outString[outStringLength++] = pGaragedoorDataCC[deviceId].GDAllowCloseFlagIVOC; /*ű־IVOC*/ outString[outStringLength++] = newGaragedoorData[deviceId].GaragedoorModeState; /*ģʽ״̬*/ outString[outStringLength++] = newGaragedoorData[deviceId].GaragedoorFaultState; /*Ź״̬*/ outString[outStringLength++] = newGaragedoorData[deviceId].GaragedoorPangLuState; /*·״̬*/; @@ -1600,7 +1697,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = newGaragedoorData[deviceId].cmdProcessState; /* ״̬ */ LongToChar(newGaragedoorData[deviceId].waiteZCResponseStartCycNum,&outString[outStringLength]);/* ȴZCʼʱ */ outStringLength += 4u; - LongToChar(newGaragedoorData[deviceId].waiteIVOCResponseStartCycNum, &outString[outStringLength]);/* ȴIVOCʼʱ */ + LongToChar(pGaragedoorDataCC[deviceId].waiteIVOCResponseStartCycNum, &outString[outStringLength]);/* ȴIVOCʼʱ */ outStringLength += 4u; LongToChar(newGaragedoorData[deviceId].GaragedoorOpenStartCycNum,&outString[outStringLength]);/* Ŵ򿪿ʼ */ outStringLength += 4u; @@ -1649,6 +1746,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetFloodGateId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_FloodGateDataStru[deviceId]), (UINT16)sizeof(FloodGateDataStruct), (UINT8*)(&pNewFloodGateData[deviceId]), (UINT16)sizeof(FloodGateDataStruct)); + comparaResult += DeviceCompara((UINT8*)(&Record_FloodGateDataStruCC[deviceId]), (UINT16)sizeof(FloodGateDataStructCC), + (UINT8*)(&pNewFloodGateDataCC[deviceId]), (UINT16)sizeof(FloodGateDataStructCC)); if (0u==comparaResult ) {/*Ƚһ*/ @@ -1674,19 +1773,19 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength++] = pNewFloodGateData[deviceId].CurAgreeCloseStateIn; /*ǰͬŲɼ״̬*/; outString[outStringLength++] = pNewFloodGateData[deviceId].CurAgreeCloseStateOut; /* ǰͬ״ֶ̬̬Σ*/ - outString[outStringLength++] = pNewFloodGateData[deviceId].FloodGateCloseApplyIvocSum; /*Źг*/ - for (jj = 0u; jj < pNewFloodGateData[deviceId].FloodGateCloseApplyIvocSum; jj++) + outString[outStringLength++] = pNewFloodGateDataCC[deviceId].FloodGateCloseApplyIvocSum; /*Źг*/ + for (jj = 0u; jj < pNewFloodGateDataCC[deviceId].FloodGateCloseApplyIvocSum; jj++) { - ShortToChar(pNewFloodGateData[deviceId].FloodGateCloseApplyIvocId[jj], &outString[outStringLength]);/*ŹгID*/ + ShortToChar(pNewFloodGateDataCC[deviceId].FloodGateCloseApplyIvocId[jj], &outString[outStringLength]);/*ŹгID*/ outStringLength += 2u; } - outString[outStringLength++] = pNewFloodGateData[deviceId].FloodGateCloseAnsIvocSum; /*Źгظг*/ - for (jj = 0u; jj < pNewFloodGateData[deviceId].FloodGateCloseAnsIvocSum; jj++) + outString[outStringLength++] = pNewFloodGateDataCC[deviceId].FloodGateCloseAnsIvocSum; /*Źгظг*/ + for (jj = 0u; jj < pNewFloodGateDataCC[deviceId].FloodGateCloseAnsIvocSum; jj++) { - ShortToChar(pNewFloodGateData[deviceId].FloodGateCloseFromIvocStru[jj].wTrainId, &outString[outStringLength]);/*гͬŹгID*/ + ShortToChar(pNewFloodGateDataCC[deviceId].FloodGateCloseFromIvocStru[jj].wTrainId, &outString[outStringLength]);/*гͬŹгID*/ outStringLength += 2u; - outString[outStringLength++] = pNewFloodGateData[deviceId].FloodGateCloseFromIvocStru[jj].wFloodGateCloseIvocFlag; /*гͬŹ״̬*/ + outString[outStringLength++] = pNewFloodGateDataCC[deviceId].FloodGateCloseFromIvocStru[jj].wFloodGateCloseIvocFlag; /*гͬŹ״̬*/ } } @@ -1730,6 +1829,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) deviceId = GetOverlapId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_OverlapDataStru[deviceId]), (UINT16)sizeof(OverlapDataStruct), (UINT8*)(&newOverlapData[deviceId]), (UINT16)sizeof(OverlapDataStruct)); + comparaResult += DeviceCompara((UINT8*)(&Record_OverlapDataStruCC[deviceId]), (UINT16)sizeof(OverlapDataStructCC), + (UINT8*)(&pOverlapDataCC[deviceId]), (UINT16)sizeof(OverlapDataStructCC)); if (0u==comparaResult) {/*Ƚһ*/ @@ -1750,6 +1851,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 4u; LongToChar(newOverlapData[deviceId].XuanPaiStartCycNum,&outString[outStringLength]);/*ѡſʼں*/ outStringLength += 4u; + outString[outStringLength++] = newOverlapData[deviceId].chPreLaborUnlockState; /*֮ǰ˹״̬*/ outString[outStringLength++] = newOverlapData[deviceId].OverlapUnlockApplyFlag;/*ZCν־*/ outString[outStringLength++] = newOverlapData[deviceId].OverlapCanLaborUnlockFlag;/*ο˹־*/ outString[outStringLength++] = newOverlapData[deviceId].OverlapLaborUnlockSetState;/*˹״̬*/ @@ -1766,10 +1868,10 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 2U; outString[outStringLength++] = newOverlapData[deviceId].laborLockOverlapCmd;/*˹ձ־*/ - ShortToChar(newOverlapData[deviceId].wOverlapUnlockApplyTrainId, &outString[outStringLength]);/*εгID*/ + ShortToChar(pOverlapDataCC[deviceId].wOverlapUnlockApplyTrainId, &outString[outStringLength]);/*εгID*/ outStringLength += 2U; - LongToChar(newOverlapData[deviceId].dwReqIvocUnLockStartCycNum, &outString[outStringLength]);/*ʼں*/ + LongToChar(pOverlapDataCC[deviceId].dwReqIvocUnLockStartCycNum, &outString[outStringLength]);/*ʼں*/ outStringLength += 4U; outString[outStringLength++] = newOverlapData[deviceId].cProSwitchCheckResultFlag;/*־0xFFĬֵ0x55ʧܣ0xAAɹ*/ @@ -1844,11 +1946,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) comparaResult = DeviceCompara((UINT8*)(&Record_AxisSecDataStru[deviceId]), (UINT16)sizeof(AxisSectionDataStruct), (UINT8*)(&newAxisSecData[deviceId]), (UINT16)sizeof(AxisSectionDataStruct)); - if (0u==comparaResult) + comparaResultCC = DeviceCompara((UINT8*)(&Record_AxisSecDataStruCC[deviceId]), (UINT16)sizeof(AxisSectionDataStructCC), + (UINT8*)(&pAxisSecDataCC[deviceId]), (UINT16)sizeof(AxisSectionDataStructCC)); + + if ((0u==comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u==comparaResult ) + else if ((1U==comparaResult ) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR != Flag) @@ -1858,17 +1963,19 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) ShortToChar(newAxisSecData[deviceId].AxisSectionId,&outString[outStringLength]);/*ID*/ outStringLength += 2u; outString[outStringLength++] = newAxisSecData[deviceId].AxisArbState;/*ARB״̬ (ֶ̬)*/ + outString[outStringLength] = pAxisSecDataCC[deviceId].AxisArbState;/*ARB״̬CC(0x55-δARB0xaa-ARB)*/ + outStringLength++; outString[outStringLength++] = newAxisSecData[deviceId].AxisJumpLockApplyFlag;/*Ծ־*/ outString[outStringLength++] = newAxisSecData[deviceId].AxisJumpLockCancelApplyFlag;/*Ծȡ־*/ LongToChar(newAxisSecData[deviceId].AxisJumpLockApplyCylce,&outString[outStringLength]);/*Ծں*/ outStringLength += 4u; outString[outStringLength++] = newAxisSecData[deviceId].AxisJumpLockState;/*Ծ״̬*/ - outString[outStringLength++] = newAxisSecData[deviceId].AxisOccStatus;/*ռ״̬*/ - LongToChar(newAxisSecData[deviceId].dwAxisOccCycNum, &outString[outStringLength]);/*ռʼ*/ + outString[outStringLength++] = pAxisSecDataCC[deviceId].AxisOccStatus;/*ռ״̬*/ + LongToChar(pAxisSecDataCC[deviceId].dwAxisOccCycNum, &outString[outStringLength]);/*ռʼ*/ outStringLength += 4u; - LongToChar(newAxisSecData[deviceId].dwUtOccupyCycNum, &outString[outStringLength]);/*ռ*/ + LongToChar(pAxisSecDataCC[deviceId].dwUtOccupyCycNum, &outString[outStringLength]);/*ռ*/ outStringLength += 4u; - ShortToChar(newAxisSecData[deviceId].wPosMonitorTrainId, &outString[outStringLength]); /*ලЧгID*/ + ShortToChar(pAxisSecDataCC[deviceId].wPosMonitorTrainId, &outString[outStringLength]); /*ලЧгID*/ outStringLength += 2u; } } @@ -1997,7 +2104,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 +2123,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 +2223,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; @@ -2251,6 +2362,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outString[outStringLength] = pNewTrainInfoData[deviceId].chTrainReportState; /*г㱨״̬*/ outStringLength++; outString[outStringLength++] = pNewTrainInfoData[deviceId].chEaCmdState; /*ɢ״̬0x55 Ч0xAA Ч*/ + + outString[outStringLength++] = pNewTrainInfoData[deviceId].chtrainControlMode;/*ǰسģʽ*/ + outString[outStringLength++] = pNewTrainInfoData[deviceId].chTrainPostionMode; /*гλģʽ0λã1ʹIVOCλã2ʹVOBCλ*/ } @@ -2669,17 +2783,19 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) break; } pNonAutoReturnData = GetNonReturnData(); - + pNonReturnDataStruCC = GetNonReturnDataCC(); /*Ƚ*/ deviceId = GetNonReturnId(ii); comparaResult = DeviceCompara((UINT8*)(&Record_NonReturnDataStru[deviceId]), (UINT16)sizeof(NonAutoReturnDataStruct), (UINT8*)(&pNonAutoReturnData[deviceId]), (UINT16)sizeof(NonAutoReturnDataStruct)); - if (0u == comparaResult) + comparaResultCC = DeviceCompara((UINT8*)(&Record_NonReturnDataStruCC[deviceId]), (UINT16)sizeof(NonAutoReturnDataStructCC), + (UINT8*)(&pNonReturnDataStruCC[deviceId]), (UINT16)sizeof(NonAutoReturnDataStructCC)); + if ((0U == comparaResult) && (0U == comparaResultCC)) {/*Ƚһ*/ } - else if (1u == comparaResult) + else if ((1U == comparaResult) || (1U == comparaResultCC)) {/*Ƚݲһ*/ if (CI_ERROR == Flag) @@ -2690,10 +2806,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) { /**************ӡϢ****************/ outString[outStringLength++] = pNonAutoReturnData[deviceId].IndicatorDevID; /*ָʾ豸ID*/ - ShortToChar(pNonAutoReturnData[deviceId].cmdSetTrainId, &outString[outStringLength]);/*гID*/ + ShortToChar(pNonReturnDataStruCC[deviceId].cmdSetTrainId, &outString[outStringLength]);/*гID*/ outStringLength += 2u; - outString[outStringLength++] = pNonAutoReturnData[deviceId].VobcToCIAutoRtnIndicFlashState; /*ظ۷ָʾ״̬*/ - outString[outStringLength++] = pNonAutoReturnData[deviceId].VobcToCIAutoRtnIndicSteadyState; /*ظ۷ָʾȵ״̬*/ + outString[outStringLength] = pNonAutoReturnData[deviceId].VobcToCIAutoRtnIndicFlashState; /*ظ۷ָʾ״̬*/ + outStringLength++; + outString[outStringLength] = pNonAutoReturnData[deviceId].VobcToCIAutoRtnIndicSteadyState; /*ظ۷ָʾȵ״̬*/ + outStringLength++; ShortToChar(pNonAutoReturnData[deviceId].RtnRelayAdhesionState.AdhesionRealyId, &outString[outStringLength]);/*ճ̵ID*/ outStringLength += 2u; outString[outStringLength++] = pNonAutoReturnData[deviceId].RtnRelayAdhesionState.AdhesionState; /*̵ճ״̬*/ diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c index e01dbc0..a362722 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockCommonManage.c @@ -564,6 +564,8 @@ void SetRouteRelProSwitchLockSta(const UINT16 routeId, const UINT8 lockCommand) UINT16 protectSwitchId = 0u; /*ID*/ UINT8 routeProtectSwitchSum = 0u; /*Ŀ*/ RouteProtectSwitchStruct* routeProtectSwitchStru = NULL; /**/ + UINT8 cSwitchCurPos = 0U; /*ǰλ*/ + UINT8 cFuncRet = CI_ERROR; routeProtectSwitchSum = GetRouteRelatedProtectSwitchSum(routeId); /*ȡĿ*/ routeProtectSwitchStru = GetRouteRelatedProtSwitchData(routeId); /*ȡ*/ @@ -586,20 +588,30 @@ void SetRouteRelProSwitchLockSta(const UINT16 routeId, const UINT8 lockCommand) if (CI_SUCCESS == retVal) { - for (ii= 0u; ii < routeProtectSwitchSum; ii++) + for (ii = 0u; ii < routeProtectSwitchSum; ii++) { protectSwitchId = routeProtectSwitchStru[ii].ProtectSwitchId; - SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE,routeId,protectSwitchId, lockCommand); /*õ״̬*/ - /*RC 13.0.0 ޣ˫һ*/ + cSwitchCurPos = GetSwitchCurPosition(protectSwitchId); + cFuncRet = checkSwtLastValDrvPosStayorNot(protectSwitchId, routeProtectSwitchStru[ii].ProtectPosition); + if ((SWITCH_LOCK_PROTECT_CANCEL == lockCommand) + || ((SWITCH_LOCK_PROTECT_SET == lockCommand) && (cSwitchCurPos == routeProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet))) + { + SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, routeId, protectSwitchId, lockCommand); /*õ״̬*/ + /*RC 13.0.0 ޣ˫һ*/ #if 0 - if (SWITCH_TYPE_DOUBLE == GetSwitchType(protectSwitchId)) - { /*˫*/ - SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE,routeId,GetDSwitchOtherId(protectSwitchId), lockCommand); /*õ״̬*/ + if (SWITCH_TYPE_DOUBLE == GetSwitchType(protectSwitchId)) + { /*˫*/ + SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, routeId, GetDSwitchOtherId(protectSwitchId), lockCommand); /*õ״̬*/ + } + else + { + } +#endif } else { + /*ڷλûڷ÷*/ } -#endif } } else @@ -1379,6 +1391,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 +1409,7 @@ void RouteRecoverOpenProc(const UINT16 routeId) errType = RecoverOpenRouteCheckCLD(routeId); } + wStartSignalId = GetRouteStartSignalId(routeId); /*ȡ·ʼźŻID*/ if (errType == CI_SUCCESS) { SetRouteOpenSigStartCycNum(routeId, Get2oo2CurCycleNum()); @@ -1410,6 +1424,9 @@ void RouteRecoverOpenProc(const UINT16 routeId) else { SetRouteRecoverState(routeId, ROUTE_RECOVER_STA_STAY);/*һPSDSPKS۳㣬·ָ״̬Ϊɻָ*/ + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(wStartSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -1922,6 +1939,18 @@ void ClearSomeFlagDependRouteState(const UINT16 routeId) { SetRouteGroupRouteCmdFlag(routeId, ROUTE_GROUPROUTE_CMD_NO); /*·Ͻ·־*/ } + + /*·״̬ҽ·־*/ + if ((ROUTE_STATE_IDLE == routeState) || (ROUTE_STATE_DELAY_UNLOCK == routeState) + || (ROUTE_STATE_LEAD_XUANPAI == routeState) || (ROUTE_STATE_LEAD_LOCK == routeState) + || (ROUTE_STATE_LEAD_LOCKERR == routeState) || (ROUTE_STATE_LEAD_OPEN == routeState)) + { + SetRouteCouplinkFlag(routeId, ROUTE_COUPLINK_FLAG_NO); + } + else + { + /**/ + } } /* 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..0edbffb 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c @@ -22,6 +22,7 @@ #include "LogicalRouteDataManage.h" #include "../LogicProcess/LogicalRouteLogicCheck.h" #include "../LogicManage/TradInterlockLogicManage.h" +#include "ParsePackZcData.h" @@ -144,81 +145,92 @@ void InterlockLogicMainProc(void) { UINT8 localCiType = GetLocalCiType(); UINT8 cRcWorkMode = GetLocalRcWorkMode(); - + UINT8 cControlState = GetLocalCiBackUpPattern(); signed long long cost[20] = {0U}; cost[0] = MSCP_GetTick(); - if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType)) - { - /*ȫԶ۷·߼*/ - AllAutoReturnLogicManage(); + if (SYSTEM_WORK_MODE_MAIN == cControlState) + { + if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType)) + { + /*ȫԶ۷·߼*/ + AllAutoReturnLogicManage(); #if 0 - /*·߼*/ - RouteLogicManage(); + /*·߼*/ + RouteLogicManage(); #endif - /*·ڱ·رźŻڱ*/ - NearCIRouteNeedCloseProce(); - /*cgh-ϲCID-2341-8εѡʼں, ·״̬·ѡʼ*/ - ClearOverlapXuanPaiStartCycNum(); - if (CI_TYPE_SCX == localCiType) - { - CiTrainTestLogicManage(); - } + /*·ڱ·رźŻڱ*/ + NearCIRouteNeedCloseProce(); + /*cgh-ϲCID-2341-8εѡʼں, ·״̬·ѡʼ*/ + ClearOverlapXuanPaiStartCycNum(); + if (CI_TYPE_SCX == localCiType) + { + CiTrainTestLogicManage(); + } #if 0 - /*ָʾ߼*/ - IndicatorLogicManage(); + /*ָʾ߼*/ + IndicatorLogicManage(); #endif - /*߼*/ - FloodLogicManage(); + /*߼*/ + FloodLogicManage(); - /*߼·״̬*/ - LogicalRouteProcess(); - } - else - { - /*Ӧ̹ܴ*/ - JKJRelayLogicProcess(); + /*߼·״̬*/ + LogicalRouteProcess(); + } + else + { + /*Ӧ̹ܴ*/ + JKJRelayLogicProcess(); - /*·߼*/ - LongRouteLogicProcess(); + /*·߼*/ + LongRouteLogicProcess(); #if 0 - /*·߼*/ - RouteLogicProcess(); + /*·߼*/ + RouteLogicProcess(); #endif - /*ǽ·߼*/ - NonRouteLogicProcess(); + /*ǽ·߼*/ + NonRouteLogicProcess(); - /* ߼ */ - GargeDoorLogicProcess(); - } + /* ߼ */ + GargeDoorLogicProcess(); + } - /*̬Ͻ·߼߾֧֣*/ - DynamicRouteLogicProcess(); + /*̬Ͻ·߼߾֧֣*/ + DynamicRouteLogicProcess(); - cost[1] = MSCP_GetTick(); - /*·߼*/ - RouteLogicManage(); + cost[1] = MSCP_GetTick(); + /*·߼*/ + RouteLogicManage(); + /*״̬¹*/ + OverlapStateUpdateManage(); + + + + cost[2] = MSCP_GetTick(); + + /*·*/ + RouteOtherCiSwitchManage(); + + /**/ + OverlapOtherCiProSwitchManage(); + + /*շ*/ + lockSwitchLogicManage(); + + /*߼*/ + UnlockSwitchLogicManage(); + + /*Ծ߼*/ + JumpLockManage(); + } + cost[3] = MSCP_GetTick(); /*·гͷŽ߼*/ RouteTrainResUnlockManage(); - - cost[2] = MSCP_GetTick(); - - /*·*/ - RouteOtherCiSwitchManage(); - - /**/ - OverlapOtherCiProSwitchManage(); - - /*߼*/ - UnlockSwitchLogicManage(); - /*߼Դ*/ LogicSecResManage(); - cost[3] = MSCP_GetTick(); + - /*Ծ߼*/ - JumpLockManage(); cost[4] = MSCP_GetTick(); debug_infor_printf((const)"\n JKJRelayLogicProcess :%dms RouteLogicManage:%dms LogicSecResManage:%dms JumpLockManage:%dms \n",(cost[1]-cost[0])/1000,(cost[2]-cost[1])/1000,(cost[3]-cost[2])/1000,(cost[4]-cost[3])/1000); @@ -400,6 +412,9 @@ void RouteLogicManage(void) /*·ź̿ſʼ*/ SetClearKeepSignalTolerateCyc(routeId); + /*ˢұ־*/ + UpdateRouteCouplinkFlag(routeId); + routeState = GetRouteState(routeId); /*#####·״̬#####*/ @@ -601,7 +616,6 @@ void RouteLogicManage(void) RouteStateFlagManage(routeId); } - if (RC_WORK_MODE_TIOC == cRcWorkMode) { /*гȡԴʱ wei ȱݣԴȡ*/ @@ -609,10 +623,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 +864,7 @@ void RouteAutoManage(const UINT16 routeId) /*·ѡ*/ RouteFirstXuanPaiManage(routeId); #else - SetCommonRouteLogicManage(routeId); + SetCommonRouteLogicManage(routeId, ESEND_LEVEL_ATS); #endif } } @@ -1217,6 +1238,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 +1263,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 +1314,10 @@ void RouteFirstLockManage(const UINT16 routeId) else { /*ʧ*/ - SetRouteStateManage(routeId, ROUTE_STATE_FIRST_LOCKERR); /*-->ó쳣*/ + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -1302,8 +1335,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 +1359,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 +1395,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 +1444,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 +1514,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 +1547,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 +1564,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 +1609,9 @@ void RouteYuXianOpenManage(const UINT16 routeId) /*޳ӽ*/ SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_LOCK); /*-->Ԥ*/ } + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -1545,6 +1631,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 +1657,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 +1738,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 +1875,9 @@ void RouteNearOpenManage(const UINT16 routeId) { SetRouteStateManage(routeId, ROUTE_STATE_NEAR_LOCKERR); /*-->ýӽ쳣*/ } + + /*ֿʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } else @@ -1783,6 +1887,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 +2016,7 @@ void RouteNearLockManage(const UINT16 routeId) UINT16 validReturnSigId = 0U; /*Ч۷źŻ*/ UINT16 returnSecId = 0U; /*۷*/ UINT8 localCiType = 0U;/**/ + UINT8 cFuncRetVal = CI_ERROR; localCiType = GetLocalCiType(); /*ȡ·ʼźŻID*/ @@ -1990,7 +2098,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 +2118,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 +2723,8 @@ void RouteLeadLockManage(const UINT16 routeId) { /*ʧ*/ SetRouteStateManage(routeId, ROUTE_STATE_LEAD_LOCKERR); /*-->쳣*/ + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(startSignalId, SIGNAL_DETAIN_CUT_VALID_NO); } } } @@ -2730,6 +2860,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 +2872,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); } } @@ -3061,6 +3197,7 @@ UINT8 LockRouteOverlapAccdToAtsCmd(const UINT16 routeId, const UINT16 expLkOverl UINT16 wOverlapLockRouteId = 0U;/*·*/ UINT32 dwXuanpaiStartCycNum = 0U; /*εѡʼ*/ UINT8 cTimeCheckFlag = CI_TIME_OUT; + UINT8 cSwitchPosCheckRet = CI_ERROR; localCiId = GetSystemParaLocalCiId(); /*ȡID*/ @@ -3109,7 +3246,8 @@ UINT8 LockRouteOverlapAccdToAtsCmd(const UINT16 routeId, const UINT16 expLkOverl retValue = CI_ERROR; } - if (CI_SUCCESS == retValue) + cSwitchPosCheckRet = CheckOverlapSwitchPosRight(expLkOverlapId); /*鱣εͷλǷȷ*/ + if ((CI_SUCCESS == retValue) && (CI_SUCCESS == cSwitchPosCheckRet)) { /*ճɹ*/ /*Ϊ˽βظ·ʱڶ·ձǰһ·չıID @@ -3158,7 +3296,7 @@ UINT8 LockRouteOverlapAccdToAtsCmd(const UINT16 routeId, const UINT16 expLkOverl SetOverlapProSwtCheckStartFlag(expLkOverlapId, PROSWITCH_CHECK_START_VALID); retValue = RETURN_WAIT_SWITCH_CHECK; } - else if (RETURN_LOCK_ERR_SWITPOS == retValue) + else if ((RETURN_LOCK_ERR_SWITPOS == retValue) || ((CI_SUCCESS == retValue) && (CI_ERROR == cSwitchPosCheckRet))) { SetOverlapRelSwitchUsing(expLkOverlapId, SWITCH_USING_YES); SetOverlapXuanPaiStartCycNum(expLkOverlapId, cycNum); @@ -3237,6 +3375,7 @@ UINT8 LockRouteOverlapProc(const UINT16 routeId) UINT32 dwXuanPaiStartCycNum = 0U; /*εѡʼ*/ UINT8 cTimeCheckFlag = CI_TIME_OUT; UINT8 cKeepWorkFlag = CI_ERROR; + UINT8 cSwitchPosCheckRet = CI_ERROR; overlapSum = GetRouteOverlapSum(routeId); /*ȡOverlap*/ overlapIdBuf = GetRouteOverlapIdBuf(routeId); /*ȡOverlap ID BUF*/ @@ -3316,7 +3455,8 @@ UINT8 LockRouteOverlapProc(const UINT16 routeId) returnValue = CI_ERROR; } - if (CI_SUCCESS == returnValue) + cSwitchPosCheckRet = CheckOverlapSwitchPosRight(overlapIdBuf[ii]); /*鱣εͷλǷȷ*/ + if ((CI_SUCCESS == returnValue) && (CI_SUCCESS == cSwitchPosCheckRet)) { /*ճɹ*/ /*Ϊ˽βظ·ʱڶ·ձǰһ·չıID @@ -3338,6 +3478,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; } @@ -3368,7 +3509,7 @@ UINT8 LockRouteOverlapProc(const UINT16 routeId) cKeepWorkFlag = CI_ERROR; /*ֹͣ*/ returnValue = RETURN_WAIT_SWITCH_CHECK; } - else if (RETURN_LOCK_ERR_SWITPOS == returnValue) + else if ((RETURN_LOCK_ERR_SWITPOS == returnValue) || ((CI_SUCCESS == returnValue) && (CI_ERROR == cSwitchPosCheckRet))) { SetOverlapRelSwitchUsing(overlapIdBuf[ii], SWITCH_USING_YES); SetOverlapXuanPaiStartCycNum(overlapIdBuf[ii], dwCurCycNum); @@ -3520,6 +3661,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 +3747,8 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*ʱУ*/ } + dctyReOpenFlag = GetRouteDCTYNotSatisfySignalReOpenFlag(routeId);/*ȡͬؿ־*/ + /*ݿźŷֵ*/ if (CI_SUCCESS == returnValue) { /*ɹ*/ @@ -3627,7 +3772,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 +3804,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 +3822,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 +3837,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 +3856,7 @@ UINT8 OpenRouteSignalProc(const UINT16 routeId) /*忪δؿ־δŲؿʼʱ*/ SetRouteNeedOpenReopenFlag(routeId, ROUTE_NEEDOPEN_REOPEN_NO); - SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0); + SetRouteNeedOpenNotTrueSigRepeatOpenStartCycNum(routeId, 0U); } } else @@ -3713,10 +3871,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 +3964,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 +4209,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) { @@ -4203,21 +4442,8 @@ void RouteZongRenJieProc(const UINT16 routeId) } else { - /* ·гռãжڷһ߼Ƿռ */ - if (ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterSta) - {/*޳ʻ룬ȫ̹*/ - /*·α̹*/ - SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_EXCEPT); - - /*·߼ζ*/ - SetRouteLogSectionLockState(routeId, LOG_SECTION_LOCK_EXCEPT); - } - else - { - /*̹*/ - SetRoutePhySecExpLockToOccupy(routeId); - } - + /*̹*/ + SetRoutePhySecExpLockToOccupy(routeId); SetRouteStateManage(routeId, ROUTE_STATE_AUTO_UNLOCKERR); } } @@ -4230,19 +4456,8 @@ void RouteZongRenJieProc(const UINT16 routeId) } else { - if (ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterSta) - {/*޳ʻ룬ȫ̹*/ - /*·α̹*/ - SetRoutePhySectionLockState(routeId, PHYSICAL_SECTION_LOCK_EXCEPT); - - /*·߼ζ*/ - SetRouteLogSectionLockState(routeId, LOG_SECTION_LOCK_EXCEPT); - } - else - { - /*̹*/ - SetRoutePhySecExpLockToOccupy(routeId); - } + /*̹*/ + SetRoutePhySecExpLockToOccupy(routeId); SetRouteStateManage(routeId, ROUTE_STATE_AUTO_UNLOCKERR); } @@ -4268,17 +4483,9 @@ void RouteZongRenJieProc(const UINT16 routeId) } else { - /* ·гռ */ - if (ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterSta) - { - /*гʻʱȫ̹*/ - SetRouteZongRenJieDelayType(routeId, ROUTE_ZRJ_DELAY_TYPE_ALL_EXP); - } - else - { - /*ʱ󲿷̹һռѹ֮ǰα̹*/ - SetRouteZongRenJieDelayType(routeId, ROUTE_ZRJ_DELAY_TYPE_EXP_TO_OCCUPY); - } + + /*ʱ󲿷̹һռѹ֮ǰα̹*/ + SetRouteZongRenJieDelayType(routeId, ROUTE_ZRJ_DELAY_TYPE_EXP_TO_OCCUPY); } } else @@ -4437,7 +4644,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; @@ -4994,6 +5201,7 @@ UINT8 OverlapLockDriveSwitch(const UINT16 overlapId)/* liu 06-26*/ OverlapProtectSwitchStruct* overlapProtectSwitchStru = NULL; /**/ UINT8 cLocalCiId = 0U; UINT8 cSwitchBelongCiId = 0U; + UINT8 cFuncRet = CI_ERROR; cLocalCiId = GetSystemParaLocalCiId(); @@ -5044,7 +5252,8 @@ UINT8 OverlapLockDriveSwitch(const UINT16 overlapId)/* liu 06-26*/ } else { - if (CI_ERROR == SwitchDriveProcess(switchId, switchExpPosition)) + cFuncRet = SwitchDriveProcess(switchId, switchExpPosition); + if (CI_ERROR == cFuncRet) { retVal = CI_ERROR; break; @@ -5086,10 +5295,19 @@ UINT8 OverlapLockDriveSwitch(const UINT16 overlapId)/* liu 06-26*/ } else { - if (CI_ERROR == SwitchDriveProcess(switchId, switchExpPosition)) + cFuncRet = CheckSwitchPosAndMoveValid(overlapProtectSwitchStru[ii].ProtectSwitchId, overlapProtectSwitchStru[ii].ProtectPosition, ESEND_LEVEL_ZERO); /*ɶԼ*/ + if (CI_ERROR == cFuncRet) { - retVal = CI_ERROR; - break; + /*ɶλãͨз*/ + } + else + { + cFuncRet = SwitchDriveProcess(switchId, switchExpPosition); + if (CI_ERROR == cFuncRet) + { + retVal = CI_ERROR; + break; + } } } } @@ -5319,9 +5537,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,14 +5563,22 @@ 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;/*ײǽ*/ + UINT8 chRouteCouplinkFlag = 0U; + UINT16 wRouteInLastLogSecId = 0U; + UINT16 wLogLockRouteId = 0U; + UINT8 chAutoFlagCheck = 0U; + chHitSoftWallSwitch = GetHitSoftWallSwitch(); /*·ź쳣رգյ·ִźؿ 0xaaִ 0x55ִ*/ chSignalReOpenFunc = GetCiFunctionSwitchConfig(FUNC_ROUTELOCK_OPEN_SIGNAL); /* RCģʽ */ cRcWorkMode = GetLocalRcWorkMode(); chLocalCiType = GetLocalCiType(); /*ȡ*/ - + if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX)) { ; /* ޴ */ @@ -5379,8 +5607,36 @@ void SetCommonRouteLogicManage(const UINT16 routeId) routeLevel = GetRouteLevel(routeId); routeState = GetRouteState(routeId); triggerFlag = GetRouteAutoTriggerFlag(routeId); /*ȡ·Զ־*/ - + chAutoFlagCheck = AutoSignalOrRouteValid(routeId); + } + if (CI_SUCCESS == cKeepWorkFlag) + { + /*ҽ·ܱг·׷*/ + wRouteInLastLogSecId = GetRouteInLastLogSecId(routeId); + wLogLockRouteId = GetLogSecLockBelongRoute(wRouteInLastLogSecId); + if (0U != wLogLockRouteId) + { /*·һ߼·ұ־׷г·*/ + chRouteCouplinkFlag = GetRouteCouplinkFlag(wLogLockRouteId); + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_TYPE_DIAOCHE != routeType)) + { + if ((CI_SUCCESS == chAutoFlagCheck) || (AUTO_TRIGGER_SET_YES == triggerFlag)) + { + /*Զ· */ + } + else + { + /*ӷ */ + SetCiSendCmdBackInfoData(CI_BACK_ROUTE_STATE_ERROR, CI_DEVICE_TYPE_ROUTE, routeId, 0u, 0u);/*·*/ + } + cKeepWorkFlag = CI_ERROR; + } + else + { + /*ִ*/ + } + } + } if (CI_SUCCESS == cKeepWorkFlag) { @@ -5478,7 +5734,7 @@ void SetCommonRouteLogicManage(const UINT16 routeId) } else { - if ((AutoSignalOrRouteValid(routeId) == CI_SUCCESS) || + if ((CI_SUCCESS == chAutoFlagCheck) || (AUTO_TRIGGER_SET_YES == triggerFlag)) { /*Զ·Զ·ATS*/ @@ -5526,11 +5782,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 +6670,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 +6691,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 +6747,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 +6768,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 +6794,12 @@ void OpenLeadSignalLogicManage(const UINT16 signalId) /*ʧ*/ /*ԭ·״̬*/ - + + /*ʧܣöӦʼźŻ۳·ťЧ*/ + SetDetCutBtnState(signalId, SIGNAL_DETAIN_CUT_VALID_NO); } + + SetRouteToLeadFlag(routeId, ROUTE_TO_LEAD_FLAG_NO); /*·ɺ·ת־ΪЧ*/ } else { @@ -7427,8 +7735,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 +7749,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 +7764,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);/*¼崻*/ @@ -7646,6 +7910,11 @@ void SetAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid) } } + if (CI_SUCCESS == chkStatus) + { + /*ӽ·δҽ·*/ + chkStatus = AutoRouteCouplinkStateCheck(autoRouteId, chFunctionId); + } if (CI_SUCCESS == chkStatus) { SetAutoRouteSetFlag(autoRouteId, AUTO_ROUTE_SET_YES); @@ -7747,7 +8016,11 @@ void SetAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid) SetErrorData(chFunctionId, CI_DEVICE_TYPE_AUTORETURN, autoReturnId, ETYPE_AUTO_RETURN_FLAG, AUTO_RETURN_FLOOD_STATE_ERR, chSendLevel); } } - + if (CI_SUCCESS == chkStatus) + { + /*ӽ·δҽ·*/ + chkStatus = AutoReturnRouteCouplinkCheck(autoReturnId, chFunctionId); + } if (CI_SUCCESS == chkStatus) {/*мϣԶ*/ SetAutoReturnSetFlag(autoReturnId, AUTO_RETURN_SET_YES); @@ -8088,6 +8361,8 @@ void SetSectionResetLogicManage(const UINT16 phySecId, const UINT8 resetType) UINT8 const functionId = EFUNC_SET_SEC_RESET_LOGIC_MANAGE; /**/ UINT16 retValid = CI_ERROR; /*ܸλ̵״̬ЧֵĬΪЧ*/ UINT8 occupyState = 0u; /*ռ״̬*/ + UINT32 dwCurCycleNum = 0U;/*ǰں*/ + UINT32 dwResetStartCycNum = 0U; /*λʼں*/ if ((0u < phySecId) && (PHYSICAL_SECTION_SUM_MAX > phySecId)) { @@ -8104,8 +8379,19 @@ void SetSectionResetLogicManage(const UINT16 phySecId, const UINT8 resetType) retValid = GetZFWValidByPhySecId(phySecId); /*ȡμܸλ̵״̬Ч*/ if (CI_SUCCESS == retValid) /*ЧִмḴλ*/ { - SetPhySecSectionResetType(phySecId, resetType); - SetPhySecResetStartCycNum(phySecId, Get2oo2CurCycleNum());/*õǰںλḴλʼں*/ + dwResetStartCycNum = GetPhySecResetStartCycNum(phySecId); + if (0U == dwResetStartCycNum) + { + dwCurCycleNum = Get2oo2CurCycleNum(); + SetPhySecSectionResetType(phySecId, resetType); + SetPhySecResetStartCycNum(phySecId, dwCurCycleNum);/*õǰںλḴλʼں*/ + SetPhySecResetCmdTag(phySecId); + } + else + { + /*ڸλ*/ + SetCiSendCmdBackInfoData(CI_BACK_PSEC_RESET_ING, CI_DEVICE_TYPE_PHYSEC, phySecId, 0U, 0U); + } } else /*ЧḴλʧܣܸλ̵*/ { @@ -8677,6 +8963,11 @@ void SetAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 virCI SetErrorData(chFunctionId, CI_DEVICE_TYPE_ALLAUTORETURN, allAutoReturnId, ETYPE_ALL_AUTO_RETURN_FLAG, ALL_AUTO_RETURN_FLOOD_STATE_ERR, chSendLevel); } } + if (CI_SUCCESS == chkStatus) + { + /*ӽ·δҽ·*/ + chkStatus = AllAutoReturnRCouplinkCheck(allAutoReturnId,chFunctionId); + } if (CI_SUCCESS == chkStatus) { @@ -9058,7 +9349,7 @@ void AllAutoReturnManage(const UINT16 routeId) /*·ѡ*/ RouteFirstXuanPaiManage(routeId); #else - SetCommonRouteLogicManage(routeId); + SetCommonRouteLogicManage(routeId, ESEND_LEVEL_ATS); #endif } } @@ -9164,6 +9455,8 @@ UINT8 CancleLinShiXianSuManage(void) if (LOGSEC_LSXS_SET_STATE_INVALID != state) {/*ʱ*/ SetLogSecLinShiXianSuState(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*ȡʱ*/ + SetLogSecLinShiXianSuStateZc(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*ͬʱȡZCʱ*/ + /*עTMCв߱ȽǺZCͨ*/ } } retVal = CI_SUCCESS; @@ -9512,6 +9805,7 @@ void RouteStateFlagManage(const UINT16 routeId) SetRoutePhySectionOccupyState(routeId, PHYSICAL_SECTION_USING_NO); SetRouteStateFlag(routeId, ROUTE_STATE_FLAG_NO); /*-->ý·״̬תƱ־Ч*/ + SetRouteCouplinkFlag(routeId, ROUTE_COUPLINK_FLAG_NO); /*-->ұ־*/ } else if (CI_SUCCESS == returnValueFunc1) { @@ -9542,6 +9836,7 @@ void RouteStateFlagManage(const UINT16 routeId) SetRouteStateFlag(routeId, ROUTE_STATE_FLAG_NO); /*-->ý·״̬תƱ־Ч*/ + SetRouteCouplinkFlag(routeId, ROUTE_COUPLINK_FLAG_NO); /*-->ұ־*/ } routeStateFlag = GetRouteStateFlag(routeId); @@ -9608,6 +9903,7 @@ void RouteXuanPaiStateManage(const UINT16 routeId) /* ȡ */ SetRouteStateFlag(routeId, ROUTE_STATE_FLAG_NO); /*-->ý·״̬תƱ־Ч*/ + SetRouteCouplinkFlag(routeId, ROUTE_COUPLINK_FLAG_NO); /*-->ұ־*/ } } else if (RETURN_LOCK_ERR_WAIT_SWCHECK == returnValue) @@ -9624,6 +9920,7 @@ void RouteXuanPaiStateManage(const UINT16 routeId) /* ·ʧ */ SetRouteStateFlag(routeId, ROUTE_STATE_FLAG_NO); /*-->ý·״̬תƱ־Ч*/ + SetRouteCouplinkFlag(routeId, ROUTE_COUPLINK_FLAG_NO); /*-->ұ־*/ } } @@ -11141,6 +11438,9 @@ void JumpLockManage(void) { /*߼Ծڼͨжϴ*/ CheckLogSecJumpLockManage(); + + /*Ծ봦*/ + TrainJumpBackApplyProc(); } else if (RC_WORK_MODE_CI == chRCMode) { @@ -11674,8 +11974,8 @@ void SetCiCiRelayInterfConfirmFlag(UINT8 setFlag) localCi = GetSystemParaLocalCiId();/*ID*/ /*ͨŶȷʧ*/ - ciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); /*ȡͨ豸*/ - pCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI);/*ȡͱͨŵID*/ + ciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); /*ȡͨ豸*/ + pCiIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI);/*ȡͱͨŵID*/ for (jj = 0u; jj < ciSum; jj++) { @@ -11686,7 +11986,7 @@ void SetCiCiRelayInterfConfirmFlag(UINT8 setFlag) dstCIType = GetCiType(pCiIdBuf[jj]); if (CI_TYPE_SCX != dstCIType) { - tranCiState = GetCiTransmitState(CI_SYSTEM_TYPE_CI, pCiIdBuf[jj]); + tranCiState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, pCiIdBuf[jj]); if (TRANSMIT_STATE_GOOD == tranCiState) { @@ -11708,7 +12008,7 @@ void SetCiCiRelayInterfConfirmFlag(UINT8 setFlag) } else {/*ͨŶ*/ - SetErrorData(funcId, CI_SYSTEM_TYPE_CI, localCi, ETYPE_COMM_WITH_NEIGHBOUR_CI, allCommState, sendLevel); + SetErrorData(funcId, CI_SYSTEM_TYPE_RCI, localCi, ETYPE_COMM_WITH_NEIGHBOUR_CI, allCommState, sendLevel); } } @@ -11837,7 +12137,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 +12169,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 { @@ -12616,6 +12916,7 @@ void RouteLgcSecResUnlockManage(const UINT16 wRouteId) UINT8 chOpenCloseState = 0U; UINT8 chRouteRepeatOpenFlag = 0U; UINT16 wStartSignalId = 0U; + UINT8 cSysType = 0U; /*ȡ·Ϣ*/ chRouteState = GetRouteState(wRouteId); @@ -12637,7 +12938,15 @@ void RouteLgcSecResUnlockManage(const UINT16 wRouteId) || (ROUTE_STATE_NEAR_LOCK == chRouteState) || (ROUTE_STATE_HALF_UNLOCK == chRouteState))) /*ӦгͷŽ*/ { - RouteLgcSecResUnlockProcess(wRouteId); + cSysType = GetSystemWorkType(); + if (SYSTEM_WORK_MODE_ALL == cSysType) + { + /*˫ϵͳ֧ԴͷŽ*/ + } + else + { + RouteLgcSecResUnlockProcess(wRouteId); + } } else /*ֻͷԴ*/ { @@ -12664,7 +12973,7 @@ void RouteApplyLogicManage(const UINT16 routeId, const UINT16 trainId) UINT8 chRouteType = 0U; /** μ*/ - if ((0u == routeId) || (ROUTE_SUM_MAX <= routeId) || (TRAIN_ID_MIN >= trainId) || (TRAIN_ID_MAX <= trainId)) + if ((0u == routeId) || (ROUTE_SUM_MAX <= routeId) || (TRAIN_ID_MIN_IVOC >= trainId) || (TRAIN_ID_MAX_IVOC <= trainId)) { keepWork = CI_ERROR; } @@ -12693,7 +13002,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 +13105,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 +13127,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_IVOC_TO_ATS, (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 +13232,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_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); break; /*ʧܣֹͣ*/ } + else + { + /**/ + } } cCheckStep++; @@ -12948,7 +13273,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 +13295,15 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, cSplitLogSecSumBuff[k + 1U] = 0U; } } + + if (CI_ERROR == keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + } + else + { + /**/ + } } cCheckStep++; @@ -12979,6 +13313,15 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, { /*岽ͨųûǰ˿*/ keepWork = CtTrainHeadSuspCheck(wTrainId, cLogSecSeqDir, pLogSecIdBuff[0U]); + + if (CI_ERROR == keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } @@ -13040,15 +13383,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 +13427,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); @@ -13148,6 +13499,11 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, LogicRouteOpenColorProc(wUsableLogicRouteId); /*߼·ʼźŻɫ*/ LogRouteOutLgcSecConfigDataInit(wUsableLogicRouteId); +#if 0 + /*߼·*/ + retVal = SetLogRoutSidePrtectData(wUsableLogicRouteId); +#endif + /*ͨ߼·״̬Ϊѡ߼·״̬*/ keepWork = LogRoutePhySecUseLogicProcess(wUsableLogicRouteId); if (CI_SUCCESS == keepWork) @@ -13163,6 +13519,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_REPEAT, 0U, cSendLevel); debug_infor_printf((const)"Dynamic Logic Route Set Is Error: LogicRoute Repeat Set!\n"); /*߼·ظͣ*/ } } @@ -13186,6 +13543,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (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*/ } } @@ -13390,7 +13748,7 @@ static void TrainTransitmitStatJumpLockProcess(const UINT16 logSectionId, const /** μ*/ if ((LOGIC_SECTION_SUM_MAX > bufIndex) - && (TRAIN_ID_MIN < trainId) && (TRAIN_ID_MAX > trainId)) + && (TRAIN_ID_MIN_IVOC < trainId) && (TRAIN_ID_MAX_IVOC > trainId)) { logSecBelongCiId = GetLogSecBelongCiId(logSectionId); if (localCi == logSecBelongCiId) @@ -13483,7 +13841,7 @@ UINT8 CheckRouteLgsLinShiXianSuExist(const UINT16 routeId) UINT8 cCheckFlag = CI_SUCCESS; UINT16 devId = 0U; UINT8 devState = 0U; - + UINT8 chLogSecEmergXianSu = 0U; /** ȡ·߼κͽ·ΰ߼*/ routeSectionSum = GetRouteLogSectionSum(routeId); pRouteSectionDataBuf = GetRouteLogSectionIdBuf(routeId); @@ -13496,9 +13854,10 @@ UINT8 CheckRouteLgsLinShiXianSuExist(const UINT16 routeId) { logSecId = pRouteSectionDataBuf[i]; logSecState = GetLogSecLinShiXianSuSetState(logSecId); - if (logSecState == LOGSEC_LSXS_SET_STATE_YES) + chLogSecEmergXianSu = GetLogSecEmergXianSu(logSecId); + if ((LOGSEC_LSXS_SET_STATE_YES == logSecState) || (LOGSEC_EMERG_XS_SET_YES == chLogSecEmergXianSu)) { - /** ·һ߼ʱ*/ + /** ·һ߼ʱٻʱ*/ break; } else @@ -13515,9 +13874,10 @@ UINT8 CheckRouteLgsLinShiXianSuExist(const UINT16 routeId) { logSecId = pRouteOvlapSectionDataBuf[j]; logSecState = GetLogSecLinShiXianSuSetState(logSecId); - if (logSecState == LOGSEC_LSXS_SET_STATE_YES) + chLogSecEmergXianSu = GetLogSecEmergXianSu(logSecId); + if ((LOGSEC_LSXS_SET_STATE_YES == logSecState) || (LOGSEC_EMERG_XS_SET_YES == chLogSecEmergXianSu)) { - /** ·һ߼ʱ*/ + /** ·һ߼ʱٻʱ*/ break; } else @@ -13768,7 +14128,7 @@ void RouteCancelResLogicManage(const UINT16 wRouteId, const UINT16 wTrainId) if (CI_SUCCESS == chKeepWork) { checkResult = RouteAllSecOccuClearCheck(wRouteId, &devId, &devState); /*·м*/ - wRouteNearestTrainId |= 0x1400U; /*ϳ*/ + wRouteNearestTrainId |= TRAIN_ID_MIN_IVOC; /*ϳ*/ autoSigRouteState = GetRouteAutoSigSetState(wRouteId); /*ȡ·Զź״̬*/ if (ROUTE_AUTOSIGROUTE_YES == autoSigRouteState) /*·ԶźŲ*/ @@ -13970,7 +14330,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 +15056,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) @@ -14909,7 +15269,9 @@ void RouteXuanPaiCommonProcess(const UINT16 wRouteId, const UINT8 chLockRoutePro RouteFirstLockManage(wRouteId); } - else if (((CI_SUCCESS == chLockRouteProcCheck) && (SWITCH_NEED_DRIV_TRUE == chNeedForDrvRoutAssoSwit)) || (RETURN_LOCK_ERR_SWITPOS == chLockRouteProcCheck)) + else if (((CI_SUCCESS == chLockRouteProcCheck) && (SWITCH_NEED_DRIV_TRUE == chNeedForDrvRoutAssoSwit)) + || (RETURN_LOCK_ERR_SWITPOS == chLockRouteProcCheck) + || ((CI_SUCCESS == chLockRouteProcCheck) && (CI_ERROR == chSwitchPos))) { if (CI_SUCCESS == chRoutSwitDrvOvtmFlag) { @@ -14985,7 +15347,7 @@ void RouteNearestTrainRenJieManage(const UINT16 routeId) delayStartCycNum = GetRouteZhefanJiesuoCyc(routeId); /*ȡҪ۷ʼʱ*/ delayTotalCycSum = GetRouteTrainRanJieDelayCyc(); /*ȡ·Ҫ۷*/ zongRenJieFlag = GetRouteZongRenJieFlag(routeId); /*ȡ·˽־*/ - wRouteNearestTrainId |= 0x1400U; /*ϳ*/ + wRouteNearestTrainId |= TRAIN_ID_MIN_IVOC; /*ϳ*/ startSignalId = GetRouteStartSignalId(routeId); @@ -15461,6 +15823,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 +15841,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 +15853,15 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain { /*ڶ߼Уƥг·*/ keepWork = LogSecSeqAndRouteMatchCheckCLD(cLogSecSeqDir, pLogSecIdBuff[0], &wMatchedRouteId); + + if (CI_SUCCESS != keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } else @@ -15500,6 +15873,15 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain { /*ͨųûǰ˼˿*/ keepWork = CtTrainSuspCheck(wTrainId); + + if (CI_SUCCESS != keepWork) + { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + } + else + { + /**/ + } cCheckStep++; } else @@ -15931,4 +16313,562 @@ 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 20250928 +*/ +void OverlapStateUpdateManage(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; /*źŻرճ*/ + UINT8 chTempCheckFlag = 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 + { + ; /*ޱղ̵*/ + } + + chTempCheckFlag = OverlapLockRouteCheck(wOverlapId); + + if (CI_SUCCESS == chTempCheckFlag) + { + SetOverlapPreLoaborUnlockState(wOverlapId, PRO_PRE_LABOR_UNLOCK_STATE_NO); + } + 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 + { + ; /*ò*/ + } + } + } +} + +/* +* ҽ·߼ +* ˵ const UINT16 wRouteId ·ID +* ֵ +* Create: 20250917 +*/ +void SetCouplinkRouteLogicManage(const UINT16 wRouteId) +{ + UINT8 chlocalCiId = 0U; /*ID*/ + UINT8 chbelongCiId = 0U; /*·ID*/ + UINT8 chReval = CI_ERROR; + UINT8 functionId = EFUNC_ROUTE_COUPLINK_SET; + UINT8 sendLevel = ESEND_LEVEL_ATS; + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteState = 0U; + UINT8 chSwitchUseSta = 0U; + UINT8 chPhyUseSta = 0U; + UINT16 startSignalId = 0U; + UINT8 checkRetVal = 0U; + if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId)) + { + chlocalCiId = GetSystemParaLocalCiId(); /*ȡID*/ + chbelongCiId = GetRouteBelongCiId(wRouteId); /*ȡ·ID*/ + if ((chlocalCiId == chbelongCiId) && (0U != chlocalCiId)) + { + chReval = SetRouteCouplinkProcess(wRouteId, functionId, sendLevel); + chRouteCouplinkFlag = GetRouteCouplinkFlag(wRouteId); + if ((CI_SUCCESS == chReval) && (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)) + { + chReval = SetRouteProc(wRouteId); + if (CI_SUCCESS == chReval) + { + chRouteState = GetRouteState(wRouteId); + if ((ROUTE_STATE_IDLE == chRouteState)) + { + chPhyUseSta = RoutePhySectionUseLogicProcess(wRouteId); + if (CI_SUCCESS == chPhyUseSta) + { + chSwitchUseSta = CheckRouteContainSwitchUseSta(wRouteId); + if (CI_SUCCESS == chSwitchUseSta) + { + SetRouteStateManage(wRouteId, ROUTE_STATE_FIRST_XUANPAI); /*-->ý·ѡ*/ + } + else + { + /*ô룺*/ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wRouteId, ETYPE_SWT_USE_STATE, SWITCH_USING_YES, sendLevel); + } + } + else + { + /*麯Ѿ*/ + } + } + else if ((ROUTE_STATE_AUTO_UNLOCK == chRouteState) || (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState)) + { + /*·ԶԶ쳣*/ + chPhyUseSta = RoutePhySectionUseLogicProcess(wRouteId); + if (CI_SUCCESS == chPhyUseSta) + { + /*ȫδ*/ + /*ý·*/ + SetRoutePhySectionOccupyState(wRouteId, PHYSICAL_SECTION_USING_YES); + SetRouteStateFlag(wRouteId, ROUTE_STATE_FLAG_YES); /*-->ý·״̬תƱ־Ч*/ + (void)SetRouteXuanPaiStartCycNum(wRouteId, 0U);/*ÿµЧҪ¼ѡʱ*/ + } + else + { + /*麯Ѿ*/ + } + } + else if ((ROUTE_STATE_NEAR_LOCKERR == chRouteState) || (ROUTE_STATE_YUXIAN_LOCK == chRouteState) + || (ROUTE_STATE_FIRST_LOCKERR == chRouteState)||(ROUTE_STATE_NEAR_LOCK == chRouteState)) + { + /**/ + startSignalId = GetRouteStartSignalId(wRouteId); + checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SIGNAL, startSignalId); + if (CI_TRUE == checkRetVal) + { + /*źؿ*/ + RepeatOpenSignalLogicManage(startSignalId); + } + else + { + /* ִ */ + } + } + else + { + /* ִ */ + } + } + else + { + /* ִ */ + } + + } + else + { + /* ִ */ + } + + } + else + { + /* ִ */ + } + + } + else + { + /* ִ */ + } + +} + + +/* +* յ߼ +* ˵ void +* ֵ +*/ +void lockSwitchLogicManage(void) +{ + UINT16 j = 0U; + UINT16 ii = 0U; + UINT16 dwSwitchTotalSum = 0U; + UINT8 localCiId = 0U; /*ID*/ + UINT16 switchId = 0U; + UINT16 hostSwitchNum = 0U;/**/ + UINT16* pHostSwitchBuf = NULL;/*Idָ*/ + UINT16 hostSwitchId = 0U;/*ID*/ + UINT16 hostPhyId = 0U;/*ID*/ + + UINT16 wRLockBelongRouteId = 0U; + UINT8 retVal = CI_ERROR; + UINT16 wPLockBelongRouteId = 0u; + UINT16 wOverlapId = 0U; + UINT8 chSwitchCurPosition = 0U; + UINT8 chPortecSwitchPos = 0U; + + localCiId = GetSystemParaLocalCiId(); /*ȡID*/ + dwSwitchTotalSum = GetTotalSwitchCurNum(); /*+*/ + for (ii = 0u; ii < dwSwitchTotalSum; ii++) + { + switchId = GetSwitchId(ii); /*ȡID*/ + + if ((0u < switchId) && (SWITCH_SUM_MAX >switchId)) + { + hostSwitchNum = GetSwitchHostSwitchNum(switchId); + pHostSwitchBuf = GetSwitchHostSwitchIdBuf(switchId); + + if ((hostSwitchNum > 0u) && (NULL != pHostSwitchBuf)) + { + for (j = 0u; j < hostSwitchNum; j++) + { + hostSwitchId = pHostSwitchBuf[j]; + + hostPhyId = GetSwitchPhySectionId(hostSwitchId);/*ȡĵID*/ + + if (0u == hostPhyId) + { + debug_infor_printf((const)"Error:hostSwitchId %d phySec is 0.\r\n", hostSwitchId); + } + else + { + /*ν·״̬շ*/ + wRLockBelongRouteId = GetPhySecRLockBelongRouteId(hostPhyId); + if (0u < wRLockBelongRouteId) + { + /*ȡǰǷѾý·˷*/ + retVal = GetSwitchThisRoutePLocked(switchId, wRLockBelongRouteId); + if (CI_ERROR == retVal) + { + /*ǰλǷڽ·Ҫλ*/ + chPortecSwitchPos = GetRouteThisPortecSwitchPos(wRLockBelongRouteId, switchId); + chSwitchCurPosition = GetSwitchCurPosition(switchId); + retVal = checkSwtLastValDrvPosStayorNot(switchId, chPortecSwitchPos); /*Ƿڷ*/ + if ((chPortecSwitchPos == chSwitchCurPosition) && (CI_SUCCESS == retVal)) + { + SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, wRLockBelongRouteId, switchId, SWITCH_LOCK_PROTECT_SET); /*õ״̬*/ + } + else + { + /*㣬*/ + } + + } + } + + + /*α״̬շ*/ + wPLockBelongRouteId = GetPhySecPLockBelongRouteId(hostPhyId); + if (0u < wPLockBelongRouteId) + { + + wOverlapId = GetRouteOverlapLockedId(wPLockBelongRouteId);/*ȡ·ǰյıID*/ + retVal = GetSwitchThisOverlapPLocked(switchId, wOverlapId);/*ȡǰǷѾñη*/ + if (CI_ERROR == retVal) + {/*δգ*/ + + /*ǰλǷڽ·Ҫλ*/ + chPortecSwitchPos = GetOverlapThisPortecSwitchPos(wOverlapId, switchId); + chSwitchCurPosition = GetSwitchCurPosition(switchId); + retVal = checkSwtLastValDrvPosStayorNot(switchId, chPortecSwitchPos); /*Ƿڷ*/ + if ((chPortecSwitchPos == chSwitchCurPosition) && (CI_SUCCESS == retVal)) + { + /*ñιΪ*/ + SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP, wOverlapId, switchId, SWITCH_LOCK_PROTECT_SET);/*õ״̬*/ + } + 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..35e0b2c 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,43 @@ 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 20250928 +*/ +void OverlapStateUpdateManage(void); +/* +* гԾ״̬ +* ˵ +* ֵ +* Create: fan 20250725 +*/ +void TrainJumpBackApplyProc(void); +/* +* ҽ·߼ +* ˵ const UINT16 wRouteId +* ֵ +* Create: 20250917 +*/ +void SetCouplinkRouteLogicManage(const UINT16 wRouteId); + +/* +* յ߼ +* ˵ void +* ֵ +*/ +void lockSwitchLogicManage(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c index 4431120..f2c9ad3 100644 --- a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c @@ -189,7 +189,7 @@ UINT8 OpenCbtcLTrainRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) UINT8 sendLevel = ESEND_LEVEL_ZERO; UINT8 routeReverseProperty = 0u; UINT8 airShaftRouteType = 0u; - + UINT8 chRouteCouplinkFlag = 0U; /* ߼ */ /* ·ලģʽΪCBTC*/ @@ -325,24 +325,36 @@ UINT8 OpenCbtcLTrainRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) { routeReverseProperty = GetRouteReverseProperty(routeId); airShaftRouteType = GetAirShaftRouteType(routeId); - if ((ROUTE_REVERSE_PROPERTY_YES == routeReverseProperty) || (ROUTE_TYPE_AIRSHAFT == airShaftRouteType)) - { /*·εռ״̬֮ǰڲռ״̬źų·ڷһΣźŻؿ*/ - /*羮·׷ٰʿӶԽ·ڷεռ״̬*/ - devId = 0u; - devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if ((ROUTE_REVERSE_PROPERTY_YES == routeReverseProperty)|| (ROUTE_TYPE_AIRSHAFT == airShaftRouteType)) + { + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + /* ҽ·׷٣OpenCbtcRouteSectionErrCheck */ + /*ұ־ڲ鷴·ȫУ;羮·òұ־Ҫȫο*/ } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_MERGY_OCU_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /*·εռ״̬֮ǰڲռ״̬źų·ڷһΣźŻؿ*/ + + /*羮·׷ٰʿӶԽ·ڷεռ״̬*/ + devId = 0u; + devState = 0u; + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + /* · */ if (CI_SUCCESS == reResult) { @@ -763,7 +775,7 @@ UINT8 OpenCbtcReturnRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) /* ȡ־ */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); - + UINT8 chRouteCouplinkFlag = 0U; /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; @@ -900,8 +912,16 @@ UINT8 OpenCbtcReturnRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) { devId = 0u; devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); - if (checkResult == CI_SUCCESS) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + checkResult = SetCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (CI_SUCCESS == checkResult) { /* ͨ */ reResult = CI_SUCCESS; @@ -1346,6 +1366,7 @@ UINT8 KeepCbtcLTrainRouteErrProcess(const UINT16 routeId) UINT16 trainEnteringRouteState = 0u; UINT8 signalCrossState = 0u; UINT8 rcWorkMode = 0U; /*rcģʽ*/ + UINT8 chRouteCouplinkFlag = 0U; rcWorkMode = GetLocalRcWorkMode(); /* ߼ */ @@ -1471,7 +1492,16 @@ UINT8 KeepCbtcLTrainRouteErrProcess(const UINT16 routeId) { /*·羮·Խ·ڷεռѹ״̬м*/ devId = 0u; devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &devState); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + checkResult = KeepCouplinkRouteSecOccCheck(routeId, &devId, &devState);; + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -1856,6 +1886,7 @@ UINT8 KeepCbtcReturnRouteErrProcess(const UINT16 routeId) UINT8 trainEnteringRouteState =0u; UINT8 signalCrossState = 0u; UINT8 rcWorkMode = 0U; /*rcģʽ*/ + UINT8 chRouteCouplinkFlag = 0U; rcWorkMode = GetLocalRcWorkMode(); devState = GetRouteLevel(routeId); if (ROUTE_LEVEL_CBTC == devState) @@ -1991,7 +2022,16 @@ UINT8 KeepCbtcReturnRouteErrProcess(const UINT16 routeId) } else if(RC_WORK_MODE_CI == rcWorkMode) { - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + checkResult = KeepCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (CI_SUCCESS == checkResult) { /* ͨ */ @@ -3011,10 +3051,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; } @@ -3585,6 +3624,9 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId) /*·*/ UINT8 const overlapSum = GetRouteOverlapSum(routeId); UINT16 const overlapId = GetRouteOverlapLockedId(routeId); + UINT8 cSndSideProFuncSwitch = 0U; + + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ UINT8 lineIdentity = CI_TRADITION_RAILWAY; @@ -3647,8 +3689,6 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId) reResult = CI_ERROR; } } - - } else { @@ -3691,43 +3731,49 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId) } } - /*ιλȷ*/ - if(CI_SUCCESS == reResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwitchPosCheck(overlapId,&devId,&devState); - if (checkResult == CI_SUCCESS) + /*Ϊֶ֧ʱɲ鱣ηλüɶԣͨ*/ + } + else + { + /*ιλȷ*/ + if (CI_SUCCESS == reResult) { - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ʧܷ */ - reResult = CI_ERROR; + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + } + + /*ιա򡾵ҷա*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } } } - /*ιա򡾵ҷա*/ - if (CI_SUCCESS == reResult) - { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwitchLockCheck(overlapId,&devId, &devState); - if (checkResult == CI_SUCCESS) - { - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ʧܷ */ - reResult = CI_ERROR; - } - } - - if (CI_SUCCESS == reResult) { /*·״̬*/ @@ -3743,13 +3789,21 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId) /*β*/ if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) { - /*鱣β״̬*/ - devId = 0u; - devState = 0u; - checkResult = OverlapLateralDfnCheck(overlapId, &devId, &devState); - if (CI_ERROR == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - reResult = checkResult; + /*ڶΪֶ֧ʱŽв*/ + /*鱣β״̬*/ + devId = 0u; + devState = 0u; + checkResult = OlapSideProtectConditionCheck(overlapId, 0U, 0U); + if (CI_ERROR == checkResult) + { + reResult = checkResult; + } + } + else + { + /**/ } } @@ -3796,6 +3850,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 @@ -4249,7 +4320,8 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId) UINT8 functionId = EFUNC_OPENROUTESECTIONERRCHECK; UINT8 rcWorkMode = 0U; UINT8 cLocalCiType = 0U; /**/ - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chSigCrossState = 0U; rcWorkMode = GetLocalRcWorkMode(); /* ߼ */ @@ -4276,16 +4348,30 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId) } else if (RC_WORK_MODE_CI == rcWorkMode) {/*CI*/ - - /* ·ʼźŻδѹڷһ߼ΡС*/ startSignalId = GetRouteStartSignalId(routeId); - devId = GetRouteInFirstLogSecId(routeId); - devState = GetLogSecCurOccupyState(devId); - if ((GetSignalCrossState(startSignalId) == SIGNAL_CROSS_STATE_NO) && - (devState == SECTION_OCCUPY_NO)) + chSigCrossState = GetSignalCrossState(startSignalId); + if (SIGNAL_CROSS_STATE_NO == chSigCrossState) { - /* ͨ */ - reResult = CI_SUCCESS; + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + /*ҽ·ռü*/ + reResult = SetCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + devId = GetRouteInFirstLogSecId(routeId); + devState = GetLogSecCurOccupyState(devId); + if (SECTION_OCCUPY_NO == devState) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + reResult = CI_ERROR; + } + } } else { @@ -4639,26 +4725,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 +4751,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 +4771,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 +4785,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 +4819,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..5d94efc 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崻*/ @@ -6099,11 +6120,11 @@ UINT16 GetReturnId(const UINT16 routeId) for (ii = 0u; ii < starSigRouteSum; ii++) { /*BΪ·8鳵ռѹ·ʱʱBG2·ҪԲֵźŻΪʼ˵Ľ·״̬*/ - if ((ROUTE_STATE_IDLE == GetRouteState(starSigRouteBuf[ii])) &&(CI_SUCCESS == CheckRoutePhysicalType(starSigRouteBuf[ii])) && - (SIGNAL_VIRTUAL_YES == GetSignalVirtualAttr(returnSigId))) + if ((ROUTE_STATE_IDLE == GetRouteState(starSigRouteBuf[ii])) &&(CI_SUCCESS == CheckRoutePhysicalType(starSigRouteBuf[ii]))) { /*ԲźŻΪʼ˵Ľ·Ϊҽ·ξΪмΣҲźŻΪźŻ, - 㷨Ŀǰֻڿ;۷*/ + 㷨Ŀǰֻڿ;۷(SIGNAL_VIRTUAL_YES == GetSignalVirtualAttr(returnSigId))*/ + /*ҹȥźŻ*/ } else { @@ -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..63953e9 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c @@ -272,8 +272,8 @@ UINT8 RouteSignalEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDevS if (localCiID != sigBelongCiId) {/*ڱźŻ*/ /*CIͨ״̬*/ - (void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_CI, sigBelongCiId); - commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_CI,sigBelongCiId); + (void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_RCI, sigBelongCiId); + commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,sigBelongCiId); if (TRANSMIT_STATE_GOOD != commNeiborCiState) {/*ͨжϣΪж*/ @@ -447,8 +447,8 @@ UINT8 ReverseRouteSigEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p if (localCiID != sigBelongCiId) {/*ڱźŻ*/ /*CIͨ״̬*/ - (void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_CI, sigBelongCiId); - commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_CI,sigBelongCiId); + (void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_RCI, sigBelongCiId); + commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,sigBelongCiId); if (TRANSMIT_STATE_GOOD != commNeiborCiState) {/*ͨжϣΪж*/ @@ -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; - } @@ -1153,10 +1117,12 @@ UINT8 BlockRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDe UINT16 phySecId = 0U; UINT8 cPhySecIncLogSecNum = 0U; /*ΰ߼*/ UINT16* pPhySecIncLogSecId = NULL; /*ΰ߼ID*/ - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; cLocalCiId = GetSystemParaLocalCiId(); ciType = GetCiType(cLocalCiId); - + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ if ((0U != checkSum) && (NULL != dataIdBuf) && (NULL != pDevId) && (NULL != pDevState)) { reVal = CI_SUCCESS; @@ -1175,7 +1141,7 @@ UINT8 BlockRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDe devState = GetLogSecLockState(devId); secLockDirection = GetLogSecLockDir(devId); phySecId = GetLgcSecRelativePhySecId(devId); - + if (LOG_SECTION_LOCK_NO == devState) { /* δգͨ */ @@ -1202,6 +1168,10 @@ UINT8 BlockRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDe 龰Ϊϸ·Ϊг·һ޷гϣʱ·гȥ շ·һ*/ } + else if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel) && (secLockDirection == routeDirDirection)) + { + /*CBTCҼͨ*/ + } else { *pDevId = devId; @@ -1209,6 +1179,20 @@ UINT8 BlockRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDe reVal = CI_ERROR; /*0ʧ*/ } } + else if (LOG_SECTION_LOCK_DELAY == devState) + { + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel) && (secLockDirection == routeDirDirection)) + { + /*CBTCҼͨ*/ + } + else + { + *pDevId = devId; + *pDevState = devState; + reVal = CI_ERROR; /*0ʧ*/ + + } + } else if (LOG_SECTION_LOCK_EXCEPT == devState) { if (CI_TYPE_CLD == ciType) @@ -1477,7 +1461,11 @@ UINT8 ReverseRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p UINT16* pPhySecIncLogSecId = NULL; /*ΰ߼ID*/ UINT8 cRouteState = ROUTE_STATE_IDLE; UINT8 cRouteType = 0U; /*·*/ - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; + + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ chRevrsRouteHasAutoSigRouteSum = GetReverseRouteIncludeRouteSum(routeId);/*ȡ·ԶźŽ·Ŀ*/ reverseRouteAutoSigRouteBuf = GetReverseRouteIncludeRouteBuf(routeId);/*ȡ·ԶźŽ·ID*/ @@ -1550,6 +1538,10 @@ UINT8 ReverseRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p { /*߼·ǰΪֽ·ȴ״̬Ϊг·շ뱾·ͬͨ*/ } + else if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel) && (secLockDirection == routeDirDirection)) + { + /*CBTCΪҽ·շһ¼ͨ*/ + } else { if (0U == chRevrsRouteHasAutoSigRouteSum) @@ -1580,6 +1572,20 @@ UINT8 ReverseRouteSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p } } } + else if (LOG_SECTION_LOCK_DELAY == devState) + { + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel) && (secLockDirection == routeDirDirection)) + { + /*CBTCΪҽ·շһ¼ͨ*/ + } + else + { + /*״̬Чʧ*/ + *pDevId = devId; + *pDevState = devState; + retVal = CI_ERROR; + } + } else { /*״̬Чʧ*/ @@ -1947,7 +1953,6 @@ UINT8 RouteIntruSecVainCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevSt } } - /* δ⵽ */ return reVal; } @@ -2189,7 +2194,8 @@ UINT8 RouteCbtcSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDev UINT16 phySecId = 0U; UINT8 cPhySecIncLogSecNum = 0U; /*ΰ߼*/ UINT16* pPhySecIncLogSecId = NULL; /*ΰ߼ID*/ - + UINT8 chRouteCouplinkFlag = 0U; + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ if ((0U != checkSum) && (NULL != dataIdBuf) && (NULL != pDevId) && (NULL != pDevState)) { reVal = CI_SUCCESS; @@ -2234,10 +2240,26 @@ UINT8 RouteCbtcSecLockValidCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDev secLockDirection = GetLogSecLockDir(devId); routeLockedId = GetLogSecLockBelongRoute(devId); routeLockedType = GetRouteType(routeLockedId); - if ((secLockDirection == routeDirection) - && (ROUTE_TYPE_LIECHE == routeLockedType)) + + if (secLockDirection == routeDirection) { - /*һҽ·Ϊг·򣨽·Ϊ۷·Ҵڲֽ·ȴ״̬ͨ*/ + if (ROUTE_TYPE_LIECHE == routeLockedType) + { + /*һҽ·Ϊг·򣨽·Ϊ۷·Ҵڲֽ·ȴ״̬ͨ*/ + } + else if((ROUTE_TYPE_RETURN == routeLockedType) && (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)) + { + /*ҽ·ֱͨ׷۷*/ + } + else + { + + /*һ»·㣬0ʧ*/ + *pDevId = devId; + *pDevState = devState; + reVal = CI_ERROR; + } + } else { @@ -5479,6 +5501,7 @@ UINT8 CheckRouteSwitchPosRight(const UINT16 routeId) RouteSwitchStruct* pRouteSwitchStru = NULL; /**/ UINT8 routeProtectSwitchSum = 0u; /*Ŀ*/ RouteProtectSwitchStruct* routeProtectSwitchStru = NULL; /**/ + UINT8 cFuncRet = CI_ERROR; switchSum = GetRouteSwitchSum(routeId); /*ý·*/ pRouteSwitchStru = GetRouteSwitchData(routeId); /*ý·*/ @@ -5513,10 +5536,18 @@ UINT8 CheckRouteSwitchPosRight(const UINT16 routeId) reVal = CI_SUCCESS; for (ii = 0u; ii < routeProtectSwitchSum; ii++) { - if (routeProtectSwitchStru[ii].ProtectPosition != GetSwitchCurPosition(routeProtectSwitchStru[ii].ProtectSwitchId)) - { /*ڹ涨λ*/ - reVal = CI_ERROR; - break; + cFuncRet = CheckSwitchPosAndMoveValid(routeProtectSwitchStru[ii].ProtectSwitchId, routeProtectSwitchStru[ii].ProtectPosition, ESEND_LEVEL_ZERO); + if (CI_ERROR == cFuncRet) + { + /*ɶλãͨз*/ + } + else + { + if (routeProtectSwitchStru[ii].ProtectPosition != GetSwitchCurPosition(routeProtectSwitchStru[ii].ProtectSwitchId)) + { /*ڹ涨λ*/ + reVal = CI_ERROR; + break; + } } } } @@ -7099,39 +7130,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 +7175,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 +7194,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 +7207,10 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId) } else { + } - - return result; + + return result; } /* * ȫԶ۷·ǷеִԶ·Ѱ @@ -7606,7 +7625,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 +7638,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 +7776,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 +7815,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 +7832,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 +7885,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 +7896,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 +7960,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 +7980,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) @@ -9090,16 +9118,16 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ֲʼ */ UINT8 reResult = CI_ERROR; /*ֵ*/ UINT8 checkResult = CI_ERROR; /**/ - UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ UINT8 FSwitchFlag = 0u; - UINT8 lineIdentity = CI_TRADITION_RAILWAY; + UINT8 cSndSideProFuncSwitch = 0U; /* ·豸 */ lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ /* ߼ */ @@ -9196,29 +9224,16 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) {/*·ֿŷ*/ if(CI_TRADITION_RAILWAY == lineIdentity) { - /*·λȷ*/ - devId = 0u; - devState = 0u; - checkResult = RouteRelatedProSwitchPosCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ֶ֧ʱλúͿɶ*/ } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_POSTION_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } - - if (CI_SUCCESS == reResult) - { - /*·ա򡾵ҷա*/ + /*·λȷ*/ devId = 0u; devState = 0u; - checkResult = RouteRelatedProSwitchLockCheck(routeId,&devId, &devState); + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -9227,14 +9242,34 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_LOCK_STATUS,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); /* ʧܷ */ reResult = CI_ERROR; } - } - else - { - reResult = CI_ERROR; + + if (CI_SUCCESS == reResult) + { + /*·ա򡾵ҷա*/ + devId = 0u; + devState = 0u; + checkResult = RouteRelatedProSwitchLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } } } else @@ -9252,8 +9287,73 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(routeId, &devId, &devState); - if (CI_SUCCESS == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) + { + /*ڶΪֶ֧ʱŽв*/ + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /**/ + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + /* ؽ */ + return reResult; +} + +/* +* ·źűֵ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 KeepLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel) +{ + /* ֲʼ */ + UINT8 reResult = CI_ERROR; /*ֵ*/ + UINT8 checkResult = CI_ERROR; /**/ + UINT16 devId = 0U; /*豸ID*/ + UINT8 devState = 0U; /*豸״̬*/ + UINT8 FSwitchFlag = 0U; + UINT8 lineIdentity = CI_TRADITION_RAILWAY; + + /* ·豸 */ + + lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ + + /* ߼ */ + + FSwitchFlag = GetCiFunctionSwitchConfig(CLOSE_OPENED_SIG_LOCK_SWITCH); + if (FUNC_SWITCH_OFF == FSwitchFlag) /*δ򲻼״̬*/ + { + reResult = CI_SUCCESS; + } + else if (FUNC_SWITCH_ON == FSwitchFlag) + { + /*·еδ*/ + devId = 0U; + devState = 0U; + checkResult = RouteSwitchFLockCheck(routeId, &devId, &devState); + + if (checkResult == CI_SUCCESS) { /* ͨ */ reResult = CI_SUCCESS; @@ -9261,7 +9361,144 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + + if (CI_SUCCESS == reResult) + { + /*·δ*/ + devId = 0U; + devState = 0U; + checkResult = RouteReltProtSwitchFLockCheck(routeId, &devId, &devState); + + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + + } + else + { + reResult = CI_ERROR; + } + + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /*·еλȷ*/ + devId = 0U; + devState = 0U; + checkResult = RouteAllSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } + + /* zt ɾش 2022-02-15 */ + + if (CI_SUCCESS == reResult) + {/*·ֿŷ*/ + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /*·λȷ*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + + if (CI_SUCCESS == reResult) + { + /*·ա򡾵ҷա*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + +#if 0 + /*·*/ + if (CI_SUCCESS == reResult) + { + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { /* ʧܷ */ reResult = CI_ERROR; } @@ -9271,6 +9508,7 @@ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ʧܷ */ reResult = CI_ERROR; } +#endif /* ؽ */ return reResult; } @@ -9411,9 +9649,10 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ѡճʱ״̬ */ UINT8 const routeTimeState = SystemOverTimeCheck(startCycNum, startCycMax); UINT8 chConnetCheckFunc = 0U; + UINT8 cSndSideProFuncSwitch = 0U; /**/ chConnetCheckFunc = GetCiFunctionSwitchConfig(FUNC_SETROUTE_CONNECT_CHECK); /*ȡǷҪĿ*/ - + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ /* ߼ */ @@ -9519,18 +9758,24 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(routeId, &devId, &devState); - if (CI_SUCCESS == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ڶΪֶ֧ʱŽв*/ + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /**/ } } else @@ -9644,48 +9889,55 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) reResultP = CI_ERROR; } - if (CI_SUCCESS == reResultP) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /*·λȷλòȷɶ*/ - devId = 0u; - devState = 0u; - checkResult = RouteRelProSwiPosAndMovValCheck(routeId,sendLevel); - if (CI_SUCCESS == checkResult) - { - /* ͨ */ - reResultP = CI_SUCCESS; - } - else - { - /* ʧܷ */ - reResultP = checkResult; - } - } - else - { - reResultP = CI_ERROR; + /*ֶ֧ʱɶԺλ*/ } - - if (CI_SUCCESS == reResultP) + else { - /*·λȷ*/ - devId = 0u; - devState = 0u; - checkResult = RouteRelatedProSwitchPosCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + if (CI_SUCCESS == reResultP) { - /* ͨ */ - reResultP = CI_SUCCESS; + /*·λȷλòȷɶ*/ + devId = 0u; + devState = 0u; + checkResult = RouteRelProSwiPosAndMovValCheck(routeId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResultP = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResultP = checkResult; + } } else { - /* ʧܷ */ - reResultP = RETURN_LOCK_ERR_SWITPOS; + reResultP = CI_ERROR; + } + + if (CI_SUCCESS == reResultP) + { + /*·λȷ*/ + devId = 0u; + devState = 0u; + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResultP = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResultP = RETURN_LOCK_ERR_SWITPOS; + } + } + else + { + /*ǽ·ڷȴ״̬,ȲǷȫλãȴ*/ } - } - else - { - /*ǽ·ڷȴ״̬,ȲǷȫλãȴ*/ } if (CI_ERROR == reResultP) @@ -9727,6 +9979,352 @@ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) return reResult; } +/* +* ·յ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR +* CI_SUCCESS +* RETURN_LOCK_ERR_SWITPOS λòȷ +* Created By LQ 2025.09.29 +*/ +UINT8 LockLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel) +{ + /* ֲʼ */ + UINT8 reResult = CI_ERROR; /*ֵ*/ + UINT8 checkResult = CI_ERROR; /**/ + + UINT8 reResultP = CI_ERROR; /*ξֲ鷵ֵ*/ + + UINT16 devId = 0U; /*豸ID*/ + UINT8 devState = 0U; /*豸״̬*/ + + UINT8 lineIdentity = CI_TRADITION_RAILWAY; + UINT32 startCycNum = GetRouteXuanPaiStartCycNum(routeId); /*ѡʼں*/ + UINT32 startCycMax = GetSystemParaRouteXuanPaiCyc(); /*ѡų*/ + +/* ·豸 */ + /* ѡճʱ״̬ */ + UINT8 const routeTimeState = SystemOverTimeCheck(startCycNum, startCycMax); + UINT8 chConnetCheckFunc = 0U; + + chConnetCheckFunc = GetCiFunctionSwitchConfig(FUNC_SETROUTE_CONNECT_CHECK); /*ȡǷҪĿ*/ + lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ +/* ߼ */ + + + /*·еδ*/ + devId = 0U; + devState = 0U; + checkResult = RouteSwitchYLockCheck(routeId, &devId, &devState); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_YLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + + if (CI_SUCCESS == reResult) + { + /*·еδ*/ + devId = 0U; + devState = 0U; + checkResult = RouteSwitchFLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + } + + if (CI_SUCCESS == reResult) + { + /*·δ*/ + devId = 0U; + devState = 0U; + checkResult = RouteReltProtSwitchFLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + } + + if (CI_SUCCESS == reResult) + { + /*·ʱ䳬ʱ*/ + /*жΪCI_TIME_INʱͨ·תʱ˴ʱ(ΪѡʱΪ0)*/ + if (CI_TIME_OUT == routeTimeState) + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_XUANPAI_OVERTIME, routeTimeState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + else + { + /* ͨ */ + reResult = CI_SUCCESS; + } + } + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + +#if 0 + /*·*/ + if (CI_SUCCESS == reResult) + { + + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } +#endif + + if (CI_SUCCESS == reResult) + { + if (FUNC_SWITCH_ON == chConnetCheckFunc) + { + ; /*ش򿪣*/ + } + else + { + /*·豸*/ + checkResult = RouteContactLineDevSwitchCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + } + } + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /*·еλȷλòȷɶ*/ + devId = 0U; + devState = 0U; + + checkResult = RouteSwitchPosAndMoveValidCheck(routeId, sendLevel); + + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = checkResult; + } + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /* + ·еλȷ + ȷRETURN_LOCK_ERR_SWITPOS + ȷCI_SUCCESS + */ + devId = 0U; + devState = 0U; + checkResult = RouteAllSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = RETURN_LOCK_ERR_SWITPOS; + + } + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + /*ǽ·ڵȴ״̬,ȲǷȫλãȴ*/ + } + + if ((CI_SUCCESS == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult)) + {/*·շ*/ + /*·δ*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchYLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResultP = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_YLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResultP = CI_ERROR; + } + + if (CI_SUCCESS == reResultP) + { + /*·λȷλòȷɶ*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelProSwiPosAndMovValCheck(routeId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResultP = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResultP = checkResult; + } + } + else + { + reResultP = CI_ERROR; + } + + if (CI_SUCCESS == reResultP) + { + /*·λȷ*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResultP = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResultP = RETURN_LOCK_ERR_SWITPOS; + } + } + else + { + /*ǽ·ڷȴ״̬,ȲǷȫλãȴ*/ + } + + if (CI_ERROR == reResultP) + {/*ļΪܵļΪ*/ + reResult = CI_ERROR; + } + else if (CI_SUCCESS == reResultP) + { + /*ļΪɹܵļֲ*/ + } + else if (RETURN_LOCK_ERR_WAIT_SWCHECK == reResultP) + { + /*ļȴ飬ܵļȴ*/ + reResult = RETURN_LOCK_ERR_WAIT_SWCHECK; + } + else if (RETURN_LOCK_ERR_SWITPOS == reResultP) + {/*ļΪλôܵļΪλô*/ + reResult = RETURN_LOCK_ERR_SWITPOS; + } + else + {/*ڵܵĽΪ*/ + reResult = CI_ERROR; + } + + } + else if (RETURN_LOCK_ERR_WAIT_SWCHECK == reResult) + { + /*·ڵȴ״̬,Ȳ״̬ȴ*/ + ; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + + + /* ؽ */ + return reResult; +} + /* * յʽ· * ˵ @@ -9745,21 +10343,34 @@ UINT8 LockBlocRouteSectionCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLeve UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; - /* ·ΡС */ - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); - if (checkResult == CI_SUCCESS) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ + if ((ROUTE_LEVEL_CBTC == chRouteLevel) && (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)) { - /* ͨ */ + /* Ҳ */ reResult = CI_SUCCESS; } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /* ·ΡС */ + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + /*·εķǽ·ҷǵ߼Ρδա*/ if (CI_SUCCESS == reResult) @@ -10067,7 +10678,6 @@ UINT8 PhySecFaultUnlockLogicProcess(UINT16 const phySectionId) UINT8 routeBelongCi = 0u; UINT8 otherCiId = 0u;/*ID*/ UINT8 execRes = 0u;/*ִн*/ - UINT8 chRouteLevel = 0U; /*ȡϢ*/ phySecLockBelongRouteId = GetPhySecRLockBelongRouteId(phySectionId); @@ -10125,20 +10735,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 +10858,6 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId) UINT8 sectionSum = 0u;/*·*/ /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ UINT16 secIdx = 0u;/*·ڰα*/ - UINT8 chRouteLevel = 0U; /**/ /* ·״̬ա*/ @@ -10369,19 +10965,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 +10999,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; -} /* ձ @@ -10666,12 +11115,13 @@ UINT8 LockLocalOvlpCheckHlht(const UINT16 overlapId, UINT8 PLockDirect) } /* β*/ +#if 0 if (CI_SUCCESS == reResult) { devId = 0u; devState = 0u; - checkResult = OverlapLateralDfnCheck(overlapId, &devId, &devState); - + /*ע⣺һʹãֶ֧ʱżֶ֧ʱɲλúͿɶ*/ + checkResult = OlapSideProtectConditionCheck(overlapId, functionId, sendLevel); if (CI_SUCCESS == checkResult) { /* ͨ */ @@ -10679,12 +11129,12 @@ UINT8 LockLocalOvlpCheckHlht(const UINT16 overlapId, UINT8 PLockDirect) } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); + /* ʧܷ */ reResult = CI_ERROR; } } +#endif /* εĵжޱμ*/ if (CI_SUCCESS == reResult) @@ -11073,12 +11523,13 @@ UINT8 LockOthCiOvlpCheckHlht(const UINT16 routeId, const UINT16 overlapId) } /* β*/ +#if 0 if (CI_SUCCESS == reResult) { devId = 0u; devState = 0u; - checkResult = OverlapLateralDfnCheck(overlapId, &devId, &devState); - + /*ע⣺һʹãֶ֧ʱżֶ֧ʱɲλúͿɶ*/ + checkResult = OlapSideProtectConditionCheck(overlapId, functionId, sendLevel); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -11086,12 +11537,12 @@ UINT8 LockOthCiOvlpCheckHlht(const UINT16 routeId, const UINT16 overlapId) } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); + /* ʧܷ */ reResult = CI_ERROR; } } +#endif /* εĵжޱμ*/ if (CI_SUCCESS == reResult) @@ -12203,12 +12654,12 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ֲʼ */ UINT8 reResult = CI_ERROR; /*ֵ*/ UINT8 checkResult = CI_ERROR; /**/ - UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ - UINT8 lineIdentity = CI_TRADITION_RAILWAY; + UINT8 cSndSideProFuncSwitch = 0U; + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ /* ·豸 */ @@ -12306,29 +12757,16 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) {/*·ŷ*/ if(CI_TRADITION_RAILWAY == lineIdentity) { - /*·λȷ*/ - devId = 0u; - devState = 0u; - checkResult = RouteRelatedProSwitchPosCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ֶ֧ʱλúͿɶ*/ } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_POSTION_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } - - if (CI_SUCCESS == reResult) - { - /*·ա򡾵ҷա*/ + /*·λȷ*/ devId = 0u; devState = 0u; - checkResult = RouteRelatedProSwitchLockCheck(routeId,&devId, &devState); + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -12337,14 +12775,34 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_LOCK_STATUS,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); /* ʧܷ */ reResult = CI_ERROR; } - } - else - { - reResult = CI_ERROR; + + if (CI_SUCCESS == reResult) + { + /*·ա򡾵ҷա*/ + devId = 0u; + devState = 0u; + checkResult = RouteRelatedProSwitchLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } } } else @@ -12362,18 +12820,24 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(routeId, &devId, &devState); - if (CI_SUCCESS == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ڶΪֶ֧ʱŽв*/ + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /**/ } } else @@ -12386,6 +12850,198 @@ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) return reResult; } +/* +* ·źŵ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 OpenLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel) +{ + /* ֲʼ */ + UINT8 reResult = CI_ERROR; /*ֵ*/ + UINT8 checkResult = CI_ERROR; /**/ + UINT16 devId = 0U; /*豸ID*/ + UINT8 devState = 0U; /*豸״̬*/ + UINT8 lineIdentity = CI_TRADITION_RAILWAY; + + lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ + + /*·еδ*/ + devId = 0U; + devState = 0U; + checkResult = RouteSwitchFLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + + if (CI_SUCCESS == reResult) + { + /*·δ*/ + devId = 0U; + devState = 0U; + checkResult = RouteReltProtSwitchFLockCheck(routeId, &devId, &devState); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } + } + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /*·еλȷ*/ + devId = 0U; + devState = 0U; + checkResult = RouteAllSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + + if (CI_SUCCESS == reResult) + { + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + + if (CI_SUCCESS == reResult) + {/*·ŷ*/ + if (CI_TRADITION_RAILWAY == lineIdentity) + { + /*·λȷ*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchPosCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + + if (CI_SUCCESS == reResult) + { + /*·ա򡾵ҷա*/ + devId = 0U; + devState = 0U; + checkResult = RouteRelatedProSwitchLockCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ *//* zt ɾش 2022-02-15 */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + +#if 0 + /*·*/ + if (CI_SUCCESS == reResult) + { + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + + + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } +#endif + + /* ؽ */ + return reResult; +} + /* L10_ʽ·źű */ /* @@ -12394,8 +13050,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) { @@ -12411,8 +13068,10 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·*/ UINT8 const overlapSum = GetRouteOverlapSum(routeId); UINT16 const overlapId = GetRouteOverlapLockedId(routeId); - UINT8 lineIdentity = CI_TRADITION_RAILWAY; + UINT8 cSndSideProFuncSwitch = 0U; + + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ @@ -12572,43 +13231,50 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) } } - /*ιλȷ*/ - if(CI_SUCCESS == reResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwitchPosCheck(overlapId,&devId,&devState); - if (checkResult == CI_SUCCESS) - { - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_POSTION_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } + /*Ϊֶ֧ʱ鱣ηλüɶԣͨ*/ } - - /*ιա򡾵ҷա*/ - if (CI_SUCCESS == reResult) + else { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwitchLockCheck(overlapId,&devId, &devState); - if (checkResult == CI_SUCCESS) + /*ιλȷ*/ + if (CI_SUCCESS == reResult) { - /* ͨ */ - reResult = CI_SUCCESS; + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } - else + + /*ιա򡾵ҷա*/ + if (CI_SUCCESS == reResult) { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_LOCK_STATUS,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } } @@ -12653,21 +13319,28 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·β*/ if (CI_SUCCESS == reResult) - { - devId = 0u; - devState = 0u; - checkResult = OverlapLateralDfnCheck(overlapId, &devId, &devState); - - if (CI_SUCCESS == checkResult) + { + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ڶΪֶ֧ʱŽв*/ + devId = 0u; + devState = 0u; + + checkResult = OlapSideProtectConditionCheck(overlapId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); - reResult = CI_ERROR; + /**/ } } @@ -12689,9 +13362,7 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ʧܷ */ reResult = CI_ERROR; } - } - - + } /*з״̬*/ if (CI_SUCCESS == reResult) @@ -12712,6 +13383,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 +15834,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;jwLtrlDfncSwSum)) + UINT8 j = 0u; + LogsecSwitchStruct* pLogsecSwitchData = NULL; + UINT8 chLogsecSwitchDataNum = 0u; + SideProtecStru sideProtectdata = { 0u }; + + UINT8 cDevType = 0u; + UINT8 cDevStateType = 0u; + UINT16 cDevId = 0u; + UINT8 cDevState = 0u; + + + /*߼IDҵ߼*/ + pLogsecSwitchData = GetLogicSecSwitchIdStru(wLgcId); + chLogsecSwitchDataNum = GetLogicSecSwitchSum(wLgcId); + if (NULL != pLogsecSwitchData) { chRetVal = CI_SUCCESS; - for (ii = 0U; ii < wLtrlDfncSwSum; ii++) +#if 0 + for (j = 0u; j < chLogsecSwitchDataNum; j++) { - /*ȡ*/ - wSwitchRltvPhySecId =GetSwitchPhySectionId(pstLtrlDfncSwitch[ii].SwitchId); - /*ȡǰλ*/ - chSwitchCurPos = GetSwitchCurPosition(pstLtrlDfncSwitch[ii].SwitchId); - /*ȡշ*/ - chPhySecLockDir = GetPhySecLockDirection(wSwitchRltvPhySecId); - cLogSecLockFlag = CheckPSecIncLSecLogicLockState(wSwitchRltvPhySecId, pDevId, pDevState); - if (CI_ERROR != wSwitchRltvPhySecId) - { - /*Ϸ*/ - chPhySecMerOccState = GetPhySecCurMergeState(wSwitchRltvPhySecId); - chPhySecUtOrCtOccState = GetPhySecUtOrCtOccuState(wSwitchRltvPhySecId); - if (SECTION_OCCUPY_NO != chPhySecMerOccState) + sideProtectdata = GetSideProtectID(pLogsecSwitchData[j].SwitchId, pLogsecSwitchData[j].SwitchPosition); + if (0u < sideProtectdata.SideProtecID) + {/*ЧIJ*/ + /*洢*/ + chRetVal = SingleSideProtectCheck(sideProtectdata, &cDevType, &cDevStateType, &cDevId, &cDevState); + if (CI_SUCCESS != chRetVal) { - /*ں״̬Ϊռ*/ - if ((pstLtrlDfncSwitch[ii].SwitchPosition == chSwitchCurPos) - &&((SWITCH_POSITION_DINGWEI==pstLtrlDfncSwitch[ii].SwitchPosition) - ||(SWITCH_POSITION_FANWEI == pstLtrlDfncSwitch[ii].SwitchPosition))) - { - ; /*λã*/ - } - else - { - if (LOGICSECTION_OCCUPY_CT == chPhySecUtOrCtOccState) - { - /*CTռѹշǷ*/ - if ((pSwitchLtrlDfncLockDir[ii] != chPhySecLockDir) - && ((CI_SYSTEM_DIRECTION_UP == chPhySecLockDir) || (CI_SYSTEM_DIRECTION_DOWN == chPhySecLockDir)) - && ((CI_SYSTEM_DIRECTION_UP == pSwitchLtrlDfncLockDir[ii]) || (CI_SYSTEM_DIRECTION_DOWN == pSwitchLtrlDfncLockDir[ii])) - && (CI_SUCCESS == cLogSecLockFlag)) - { - ; /*շΪӽ߼߼*/ - } - else - { - chRetVal = CI_ERROR; /*շǽӽ߼·գʧ*/ - } - } - else - { - chRetVal = CI_ERROR; /*CTռѹʧ*/ - } - } + break; } } - else - { - /* */ - chRetVal = CI_ERROR; - } - if (CI_ERROR == chRetVal) - { - *pDevId = wSwitchRltvPhySecId; - *pDevState = chPhySecUtOrCtOccState; - break; - } - else - { - /*ִ*/ - } } - +#endif } else { chRetVal = CI_ERROR; } + return chRetVal; } /* @@ -17564,7 +18214,9 @@ UINT8 OverlapUsableCheck(UINT16 const wOverlapId) UINT8 overlapSum = 0u; UINT16* overlapIdBuf = NULL; UINT8 jj = 0u; + UINT8 cSndSideProFuncSwitch = 0U; + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ overlapPhySecSum = GetOverlapPhySecSum(wOverlapId); overlapContainPhySecIdBuf = GetOverlapPhySecIdBuf(wOverlapId); for (ii = 0u; ii < overlapPhySecSum; ii++) @@ -17648,16 +18300,25 @@ UINT8 OverlapUsableCheck(UINT16 const wOverlapId) /*鱣βǷ*/ if (CI_SUCCESS == cRetVal) { - checkResult = OverlapLateralDfnCheck(wOverlapId, &tempDevId, &tempDevSta); - - if (CI_SUCCESS == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - cRetVal = CI_SUCCESS; +#if 0 + /*ڶΪֶ֧ʱŽв*/ + checkResult = OlapSideProtectConditionCheck(wOverlapId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + cRetVal = CI_SUCCESS; + } + else + { + cErrStep = 4U; + cRetVal = CI_ERROR; + } +#endif } else { - cErrStep = 4U; - cRetVal = CI_ERROR; + /**/ } } else @@ -18244,6 +18905,7 @@ UINT8 RouteAllLgcSecXianSuCheck(UINT16 const routeId,UINT16 *pDevId, UINT8 *pDev OverlapConditionSwitchStruct* pOvlpRelSwitchStr = NULL; /*ιĵṹ*/ UINT16 wOvlpRelSwitchId = 0U; /*ιĵID*/ UINT8 reVal = CI_ERROR; + UINT8 chLogSecExiansu = 0U; /* ݼ */ if ((MAX_ROUTE_IN_LT_NUM <= routeSectionSum) @@ -18269,6 +18931,7 @@ UINT8 RouteAllLgcSecXianSuCheck(UINT16 const routeId,UINT16 *pDevId, UINT8 *pDev { devId = pRouteSectionDataBuf[i]; devState = GetLogSecLinShiXianSuSetState(devId); + /*ʼ*/ /* 鱾 */ if ((LOGSEC_LSXS_SET_STATE_NO == devState) @@ -18284,7 +18947,21 @@ UINT8 RouteAllLgcSecXianSuCheck(UINT16 const routeId,UINT16 *pDevId, UINT8 *pDev *pDevState = devState; reVal = CI_ERROR; } - + if (CI_SUCCESS == reVal) + { + /* 鱾ν */ + chLogSecExiansu = GetLogSecEmergXianSu(devId); /*ȡ߼νʱ*/ + if (LOGSEC_EMERG_XS_SET_NO == chLogSecExiansu) + { + /*ͨ*/ + } + else + { + *pDevId = devId; + *pDevState = chLogSecExiansu; + reVal = CI_ERROR; + } + } if (CI_ERROR == reVal) { break; @@ -18342,7 +19019,21 @@ UINT8 RouteAllLgcSecXianSuCheck(UINT16 const routeId,UINT16 *pDevId, UINT8 *pDev *pDevState = devState; reVal = CI_ERROR; } - + if (CI_SUCCESS == reVal) + { + /* 鱾ν */ + chLogSecExiansu = GetLogSecEmergXianSu(devId); /*ȡ߼νʱ*/ + if (LOGSEC_EMERG_XS_SET_NO == chLogSecExiansu) + { + /*ͨ*/ + } + else + { + *pDevId = devId; + *pDevState = chLogSecExiansu; + reVal = CI_ERROR; + } + } if (CI_ERROR == reVal) { break; @@ -18701,12 +19392,10 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) { UINT8 chRetVal = CI_ERROR; UINT8 chFunRet = CI_ERROR; - UINT8 chRouteType = 0U; UINT8 chTrainEnterState = 0U; UINT8 chReadyEnterRouteTrainSum = 0U; UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT16 wCrossTrainId = 0u; - UINT8 chGroupRelate = 0u; UINT16 wInFirstSecId = 0U;/*·ڷһ*/ UINT8 chLogSecCurOccupySta = 0U;/*߼ںռ״̬*/ UINT16 wStartSignalId = 0U;/*ʼźŻID*/ @@ -18717,9 +19406,9 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId); if (CI_SUCCESS == chFunRet) { - if (2U < chReadyEnterRouteTrainSum) + if (1U < chReadyEnterRouteTrainSum) { - /*۷Դ2 ,ʧ*/ + /*Դ1,ʧ*/ chRetVal = CI_ERROR; } else if (1U == chReadyEnterRouteTrainSum) @@ -18727,30 +19416,41 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) wCrossTrainId = wszReadyEtRouteTrainId[0]; chRetVal = CI_SUCCESS; } +#if 0 + /*ɾ۷ݣ߱鳵*/ else if (2U == chReadyEnterRouteTrainSum) { - chRouteType = GetRouteType(routeId); - /*۷󳵲Źź*/ - chRetVal = isTwoGroupRunTrain(wszReadyEtRouteTrainId[0], wszReadyEtRouteTrainId[1]); - if ((CI_SUCCESS == chRetVal) - &&(ROUTE_TYPE_RETURN == chRouteType)) + if (CI_TYPE_CLD == chLocalCiType) { - chGroupRelate = GetGroupTrainRelation(wszReadyEtRouteTrainId[0]); - if (VOBC_CI_GROUP_TAIL == chGroupRelate) - { - wCrossTrainId = wszReadyEtRouteTrainId[0]; - } - else - { - wCrossTrainId = wszReadyEtRouteTrainId[1]; - } + /*Դ1 ,ʧ*/ + chRetVal = CI_ERROR; } else { - /*DZ۷ź*/ - chRetVal = CI_ERROR; + chRouteType = GetRouteType(routeId); + /*۷󳵲Źź*/ + chRetVal = isTwoGroupRunTrain(wszReadyEtRouteTrainId[0], wszReadyEtRouteTrainId[1]); + if ((CI_SUCCESS == chRetVal) + && (ROUTE_TYPE_RETURN == chRouteType)) + { + chGroupRelate = GetGroupTrainRelation(wszReadyEtRouteTrainId[0]); + if (VOBC_CI_GROUP_TAIL == chGroupRelate) + { + wCrossTrainId = wszReadyEtRouteTrainId[0]; + } + else + { + wCrossTrainId = wszReadyEtRouteTrainId[1]; + } + } + else + { + /*DZ۷ź*/ + chRetVal = CI_ERROR; + } } } +#endif else { chRetVal = CI_ERROR; @@ -18828,54 +19528,7 @@ UINT8 RouteCbtcTiranEnterCheck(UINT16 const routeId) return chRetVal; } -/* -* ·ȫ -* ˵ UINT16 routeId, · -* UINT16 *pDevId, 豸Idأ -* UINT8 *pDevState, 豸״̬أ -* ֵ CI_ERROR -* CI_SUCCESS -*/ -UINT8 RouteAllLtrlDfncSwitchCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevState) -{ - /* ·*/ - UINT16 const checkSum = GetRouteLogSectionSum(routeId); - UINT16* const dataIdBuf =GetRouteLogSectionIdBuf (routeId); - /* ֲʼ */ - UINT16 i = 0u; /* ѭ */ - UINT16 devId = 0u; - UINT8 devState = 0u; - UINT8 reVal = CI_ERROR; - - /* ռü */ - if (0u == checkSum) - { - /*ݴ*/ - reVal = CI_ERROR; - } - else - { - /*ʼ*/ - for (i = 0u; i switchId) && (NULL != pLogSecId) && (NULL != pLogState)) { /*ȡ߼Ϣ*/ @@ -22190,9 +22792,10 @@ UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* p if ((0U != wLogSecSum) && (NULL != pLogSecIDBuf)) { - /*߼ʱ״̬*/ + for (i = 0U; i < wLogSecSum; i++) { + /*߼ʱ״̬*/ cLogSecLockState = GetLogSecLinShiXianSuSetState(pLogSecIDBuf[i]); if ((LOGSEC_LSXS_SET_STATE_NO == cLogSecLockState) || (LOGSEC_LSXS_SET_STATE_INVALID == cLogSecLockState)) @@ -22204,8 +22807,36 @@ UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* p *pLogSecId = pLogSecIDBuf[i]; *pLogState = cLogSecLockState; retValue = CI_ERROR; + + } + /*߼νʱ״̬*/ + if (CI_SUCCESS == retValue) + { + chLogSecEmergXianSu = GetLogSecEmergXianSu(pLogSecIDBuf[i]); + if (LOGSEC_EMERG_XS_SET_NO == chLogSecEmergXianSu) + { + /*ͨ*/ + } + else + { + *pLogSecId = pLogSecIDBuf[i]; + *pLogState = chLogSecEmergXianSu; + retValue = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_ERROR == retValue) + { break; } + else + { + /**/ + } + } } else @@ -22222,7 +22853,7 @@ UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* p } /* -* źűֿʱ·ղ +* ·ղ * ˵ UINT16 const routeId, · * ֵ CI_ERROR ʧ * CI_SUCCESS ɹ @@ -22232,28 +22863,14 @@ UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* p UINT8 KeepSignalRelayZhaoChaCheck(UINT16 const routeId) { UINT8 chRetVal = CI_ERROR; /*ֵ*/ - UINT8 chRouteLevel = 0U; /*·ල*/ - UINT32 chRouteLevelChangeCyc = 0U; /*·ල仯ں*/ UINT16 wSelfRealyId = 0U;/*ǰ𱾶ղ̵ID*/ UINT8 chRelayCollState = 0U;/*̵ɼ״̬*/ UINT8 checkRelayRes = 0U;/*̵ʱ*/ UINT8 chRouteState = 0U;/*·״̬*/ UINT32 dwRouteLockStartCyc = 0U;/*·ʼ*/ - chRouteLevel = GetRouteLevel(routeId); + wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ղ̵ID*/ - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - wSelfRealyId = GetRouteThisZhaoChaRelayId(routeId); /*ģʽղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - wSelfRealyId = GetRouteCbtcThisZhaoChaRelayId(routeId); /*CBTCģʽղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0*/ - } if (0U < wSelfRealyId) { chRelayCollState = GetRelayCollState(wSelfRealyId); /*ȡָID̵״̬*/ @@ -22262,24 +22879,7 @@ UINT8 KeepSignalRelayZhaoChaCheck(UINT16 const routeId) { chRouteState = GetRouteState(routeId); - if ((ROUTE_STATE_NEAR_OPEN == chRouteState) || - (ROUTE_STATE_YUXIAN_OPEN == chRouteState)) - { - chRouteLevelChangeCyc = GetRouteLevelChangeCyc(routeId); - /*·ǰලͬл*/ - checkRelayRes = SystemOverTimeCheck(chRouteLevelChangeCyc, RELAY_DRIVE_MAX_NUM); - if (CI_TIME_IN == checkRelayRes) - { - /*ڷģʽתղ̵״̬δ£ʱسɹ*/ - /*ղ̵״̬10ڣʱڷسɹ*/ - chRetVal = CI_SUCCESS; - } - else - { - chRetVal = CI_ERROR; - } - } - else if (ROUTE_STATE_HALF_UNLOCK == chRouteState) + if (ROUTE_STATE_HALF_UNLOCK == chRouteState) { dwRouteLockStartCyc = GetRouteLockStartCycNum(routeId); checkRelayRes = SystemOverTimeCheck(dwRouteLockStartCyc, RELAY_DRIVE_MAX_NUM); @@ -22375,7 +22975,6 @@ UINT8 LogSecFaultUnlockLogicProcess(UINT16 const wLogSecId) UINT16 wLogSecLockBelongRouteId = 0U;/*߼·ID*/ UINT8 chRouteBelongCi = 0U;/*·*/ UINT16 wLogSecBelongPhySecId = 0U;/*߼ID*/ - UINT8 chRouteLevel = 0U;/*߼··ල*/ UINT16 wCancleZhaoChaRelayId = 0U;/*ȡղ̵ID*/ UINT8 chRelayCollState = 0U;/*̵ɼ״̬*/ UINT8 chOtherCiId = 0U;/*ID*/ @@ -22436,20 +23035,8 @@ UINT8 LogSecFaultUnlockLogicProcess(UINT16 const wLogSecId) /*ȡղ̵Ϊ*/ if (CI_SUCCESS == chResult) { - chRouteLevel = GetRouteLevel(wLogSecLockBelongRouteId); - if (ROUTE_LEVEL_BLOC == chRouteLevel) - { - wCancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(wLogSecLockBelongRouteId); /*ģʽȡղ̵ID*/ - } - else if (ROUTE_LEVEL_CBTC == chRouteLevel) - { - wCancleZhaoChaRelayId = GetRouteCbtcCancelZhaochaRelay(wLogSecLockBelongRouteId);/*CBTCģʽȡղ̵ID*/ - } - else - { - ; /*Ƿලģʽ̵IDΪ0治ᴦ*/ - } - + wCancleZhaoChaRelayId = GetRouteCancleZhaoChaRelayId(wLogSecLockBelongRouteId); /*ȡղ̵ID*/ + if ((0U != wCancleZhaoChaRelayId) && (0xFFFFU != wCancleZhaoChaRelayId)) { if ((chLocalCi == chLogSecBelongCiId) && (chLocalCi != chRouteBelongCi) && @@ -23774,7 +24361,6 @@ UINT8 CheckRouteZhefanJiesuo(UINT16 const routeId) UINT8 relayState = 0u; /*̵ɼ״̬*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*//*Ϸͼ*/ - UINT8 chRouteLevel = 0U; UINT8 cRouteType = 0U; /*·*/ UINT8 routeState = 0U; /*·״̬*/ UINT16 startSignalId = 0U; /*·ʼźŻID*/ @@ -23876,19 +24462,8 @@ UINT8 CheckRouteZhefanJiesuo(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)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -23997,59 +24572,7 @@ UINT8 CheckOverlapPhysecOtherLock(UINT16 const overlapId, UINT16* pDevId, UINT8* return reVal; } -/* -* β -* ˵UINT16 const overlapId, OverlapID -* UINT16* pDevId 豸Idأ -* UINT8* pDevState 豸״̬أ -* ֵ 0 ʧ -* 1 ɹ -* Created By LQ 2024.01.05 -*/ -UINT8 OverlapLateralDfnCheck(UINT16 const overlapId, UINT16* pDevId, UINT8* pDevState) -{ - UINT8 retVal = CI_ERROR; - UINT8 i = 0U; - UINT16 wLogSecId = 0U; - UINT8 cOvlpIncLogSecNum = 0U; /*ΰ߼*/ - UINT16* pOvlpIncLogSecId = NULL; /*ΰ߼ID*/ - if ((0U != overlapId) && (OVERLAP_SUM_MAX > overlapId) && (NULL != pDevId) && (NULL != pDevState)) - { - cOvlpIncLogSecNum = GetOverlapLogicSectionSum(overlapId); - pOvlpIncLogSecId = GetOverlapLogicSectionBuf(overlapId); - - if ((0U != cOvlpIncLogSecNum) && (NULL != pOvlpIncLogSecId)) - { - /*鱣߼εIJǷ*/ - for (i = 0U; i < cOvlpIncLogSecNum; i++) - { - wLogSecId = pOvlpIncLogSecId[i]; - retVal = LogicSecSwitchLtrlDfncCheck(wLogSecId, pDevId, pDevState); - - if (CI_SUCCESS == retVal) - { - /*ͨ*/ - } - else - { - retVal = CI_ERROR; - break; - } - } - } - else - { - /*ȡΰ߼Ϣʧܣʧ*/ - } - } - else - { - /*ηǷʧ*/ - } - - return retVal; -} /* * 鱣εCBTC @@ -24873,17 +25396,18 @@ UINT8 CtTrainHeadSuspCheck(const UINT16 wTrainId, const UINT8 cLogSecSeqDir,cons * βֽ·߼кгλü * 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 */ -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) { /*ֲʼ*/ UINT8 cRetVal = CI_ERROR; - UINT16 wTrainIndex = 0U; UINT8 cLogSecLockState = LOG_SECTION_LOCK_NORMAL; /*߼״̬*/ UINT8 cLogSecLogLockState = LOG_SECTION_LOGLOCK_NORMAL; /*߼߼״̬*/ UINT8 cLogSecIncLinkNum = 0U; /*߼ΰlink*/ @@ -24898,8 +25422,7 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec UINT16 wTrainMinTailLink = 0U; /*μ*/ - wTrainIndex = GetTrainBufIndex(wTrainId); - if ((1U == cLogSecSum) && (NULL != pLogSecIdBuff) && (TRAIN_SUM_MAX > wTrainIndex)) + if ((1U == cLogSecSum) && (NULL != pLogSecIdBuff) && ((ESEND_LEVEL_ATS == cSendLevel) || (ESEND_LEVEL_ZERO == cSendLevel))) { /****** ֽ·߼Ψһ߼Ƿδ ******/ cLogSecLockState = GetLogSecLockState(pLogSecIdBuff[0]); @@ -24936,31 +25459,37 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec } else { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (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 { + SetErrorData(cFunctionId, CI_SYSTEM_TYPE_IVOC_TO_ATS, (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_IVOC_TO_ATS, (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_IVOC_TO_ATS, (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_IVOC_TO_ATS, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); /*μʧܣʧ*/ } @@ -25887,4 +26416,1528 @@ 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 wRouteId ·ID +* UINT16* pDevId 豸ID +* UINT8* pDevState 豸״̬ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By 2025.09.18 +*/ +UINT8 SetCouplinkRouteSecOccCheck(const UINT16 wRouteId,UINT16* pDevId,UINT8* pDevState) +{ + UINT8 chRet = CI_ERROR; + UINT16 wCheckSum = 0U; + UINT16* pDataIdBuf = NULL; + UINT8 chrouteType = 0U; + UINT16 i = 0U; + UINT8 chLogOccState = 0U; + UINT16 wLastLogId = 0U; + + if ((NULL != pDevId) && (NULL != pDevState)) + { + chrouteType = GetRouteType(wRouteId); /*ȡ·*/ + wCheckSum = GetRouteLogSectionSum(wRouteId); /*ȡ·߼*/ + pDataIdBuf = GetRouteLogSectionIdBuf(wRouteId); + if (NULL != pDataIdBuf) + { + if (ROUTE_TYPE_RETURN == chrouteType) + { + /*۷·һCTռãο*/ + for (i = 0U; i < wCheckSum; i++) + { + chLogOccState = GetLogSecCurCtOrUtOccupyState(pDataIdBuf[i]); + if (LOGICSECTION_OCCUPY_NO != chLogOccState) + { + wLastLogId = GetRouteInLastLogSecId(wRouteId); /*·һ߼*/ + if ((LOGICSECTION_OCCUPY_CT == chLogOccState) && (wLastLogId == pDataIdBuf[i])) + { + chRet = CI_SUCCESS; + } + else + { + *pDevId = GetLgcSecRelativePhySecId(pDataIdBuf[i]); + *pDevState = SECTION_OCCUPY_YES; + /*UTռã߲Σʧ*/ + } + break; + } + else + { + /**/ + } + + } + + } + else + { + /*ֱͨ·һռõCTռ*/ + for (i = 0U; i < wCheckSum; i++) + { + chLogOccState = GetLogSecCurCtOrUtOccupyState(pDataIdBuf[i]); + if (LOGICSECTION_OCCUPY_NO != chLogOccState) + { + if (LOGICSECTION_OCCUPY_CT == chLogOccState) + { + chRet = CI_SUCCESS; + } + else + { + *pDevId = GetLgcSecRelativePhySecId(pDataIdBuf[i]); + *pDevState = SECTION_OCCUPY_YES; + /*UTռãʧ*/ + } + break; + } + else + { + /**/ + } + + } + } + + } + else + { + /*ʧ*/ + } + + } + else + { + /*ηǷʧ*/ + } + return chRet; +} + +/* +* ҽ·ռü +* ˵const UINT16 wRouteId ·ID +* UINT16* pDevId 豸ID +* UINT8* pDevState 豸״̬ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By 2025.09.18 +*/ +UINT8 KeepCouplinkRouteSecOccCheck(const UINT16 wRouteId, UINT16* pDevId, UINT8* pDevState) +{ + UINT8 chRet = CI_ERROR; + UINT16 wCheckSum = 0U; + UINT16* pDataIdBuf = NULL; + UINT16 i = 0U; + UINT8 chLogOccState = 0U; + UINT16 wLastLogId = 0U; + + if ((NULL != pDevId) && (NULL != pDevState)) + { + wCheckSum = GetRouteLogSectionSum(wRouteId); /*ȡ·߼*/ + pDataIdBuf = GetRouteLogSectionIdBuf(wRouteId); + if (NULL != pDataIdBuf) + { + /*һռõCTռ*/ + for (i = 0U; i < wCheckSum; i++) + { + chLogOccState = GetLogSecCurCtOrUtOccupyState(pDataIdBuf[i]); + if (LOGICSECTION_OCCUPY_NO != chLogOccState) + { + if (LOGICSECTION_OCCUPY_CT == chLogOccState) + { + chRet = CI_SUCCESS; + } + else + { + *pDevId = GetLgcSecRelativePhySecId(pDataIdBuf[i]); + *pDevState = SECTION_OCCUPY_YES; + /*UTռãʧ*/ + } + break; + } + else + { + /**/ + } + + } + + } + else + { + /*ηǷʧ*/ + } + + } + else + { + /*ηǷʧ*/ + } + return chRet; +} + +/* +* +* ˵SideProtecStru SidePretectData һ +* UINT16 wDevId 豸ID +* UINT8 cDevType 豸 +* UINT8 functionId ID +* UINT8 sendLevel ͵ȼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +*/ +UINT8 SingleSideProtectCheck(SideProtecStru SidePretectData, UINT16 wDevId, UINT8 cDevType, UINT8 functionId, UINT8 sendLevel) +{ + UINT8 retVal = CI_ERROR; + UINT8 chSignalDsBreakFlag = 0U; /*˿־*/ + UINT8 cFuncRet = CI_ERROR; + UINT8 lightExtinctState = 0U; + UINT8 sigalMaintainState = 0U; + + if ((0U != wDevId) && ((CI_DEVICE_TYPE_OVERLAP == cDevType) || (CI_DEVICE_TYPE_ROUTE == cDevType))) + { + retVal = CI_SUCCESS; + + /****** 1.ؼ״̬ ******/ + cFuncRet = SingleSideKeySwitchCheck(SidePretectData.KeysSwitchID, wDevId, cDevType); + if (CI_SUCCESS == cFuncRet) + { + /*ؼβΪ·գسɹ*/ + } + else + { + /****** 2.ؼգλ ******/ + cFuncRet = SideProtectSwitchPosCheck(SidePretectData.SideProtecSwitchBuf, SidePretectData.SideProtecSwitchNum); + if (CI_SUCCESS == cFuncRet) + { + /*ͨλãźŻƵ˿״̬*/ + } + else + { + /****** 3.ͨλãźŻƵ˿˿״̬źŻʱ飩 ******/ + lightExtinctState = GetSignalLightExtinctState(SidePretectData.SideProtecSignalID);/*źŻ״̬*/ + sigalMaintainState = GetSignalMaintainState(SidePretectData.SideProtecSignalID);/*źŻά޵״̬*/ + + if ((SIGNAL_LIGHT_EXTICT_STATE_NO == lightExtinctState) && (MAINTAIN_STATE_NO == sigalMaintainState)) + { + /*źŻƣƵ˿״̬*/ + } + else + { + chSignalDsBreakFlag = GetSignalDsBreakFlag(SidePretectData.SideProtecSignalID); + if (SIGNAL_DS_BREAK_NO == chSignalDsBreakFlag) + { + /**/ + } + else + { + /*Ƶ˿˿ʧܣֹͣ*/ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, SidePretectData.SideProtecSignalID, 0U, chSignalDsBreakFlag, ESEND_LEVEL_ZERO); /*ӿδʵ֣ݲͱ*/ + retVal = CI_ERROR; + } + } + } + + /****** 4./ռ״̬ ******/ + if (CI_SUCCESS == retVal) + { + retVal = SideProtectPhySecCheck(SidePretectData, functionId, sendLevel); + } + else + { + retVal = CI_ERROR; /*ʧ*/ + } + } + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* λü +* ˵SideProtecSwitchData* pSideProtecSwitchBuf +* UINT8 chSideProtecSwitchNum +* ֵCI_ERROR 0 λͨ +* CI_SUCCESS 1 λòͨ +*/ +UINT8 SideProtectSwitchPosCheck(SideProtecSwitchData* pSideProtecSwitchBuf, UINT8 chSideProtecSwitchNum) +{ + UINT8 retVal = CI_ERROR; + UINT8 i = 0U; + UINT8 chSwitchCurPosition = 0U; + + if ((NULL != pSideProtecSwitchBuf) && (SIDE_PROTECT_SWITCH_NUM_MAX >= chSideProtecSwitchNum)) + { + for (i = 0U; i < chSideProtecSwitchNum; i++) + { + chSwitchCurPosition = GetSwitchCurPosition(pSideProtecSwitchBuf[i].SideProtecSwitchID); + if (((SWITCH_POSITION_DINGWEI == pSideProtecSwitchBuf[i].SideProtecSwitchPos) && (SWITCH_POSITION_FANWEI == chSwitchCurPosition)) + || ((SWITCH_POSITION_FANWEI == pSideProtecSwitchBuf[i].SideProtecSwitchPos) && (SWITCH_POSITION_DINGWEI == chSwitchCurPosition))) + { + break; /*һͨλãֹͣسɹ*/ + } + else + { + /**/ + } + } + + if (chSideProtecSwitchNum != i) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_ERROR; /*вͨλûΪ0践0*/ + } + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* +* ˵SideProtecStru SidePretectData +* UINT8 functionId ID +* UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR ʧ +* CI_SUCCESS ɹ +*/ +UINT8 SideProtectPhySecCheck(SideProtecStru SidePretectData, UINT8 functionId, UINT8 sendLevel) +{ + UINT8 retVal = CI_ERROR; + UINT8 cCycleNum = 0U; + UINT8 i = 0U; + UINT8 cFuncRet = CI_ERROR; + UINT8 phySecLockState = 0U; + UINT8 chPhySecLockDirection = 0U; + UINT8 phycurMergeState = 0U; + UINT8 cKeepCheckFlag = CI_SUCCESS; /*־*/ + + if (0U == SidePretectData.SideProtecPhyNum) + { + retVal = CI_SUCCESS; /*δòʱֱӷسɹ*/ + } + else + { + retVal = CI_SUCCESS; + for (cCycleNum = SidePretectData.SideProtecPhyNum; cCycleNum > 0U; cCycleNum--) + { + /*˳ΪӴСԭеIJΰղźŻؼԶãҪ෴飬鵽һIJξΪʧ*/ + i = cCycleNum - 1U; + + /*εIJǷͨλ*/ + cFuncRet = SideProtectPhySecSwtPosCheck(SidePretectData.SideProtecPhyBuf[i].SideProtecPhySecID, SidePretectData); + if(CI_SUCCESS == cFuncRet) + { + cKeepCheckFlag = CI_ERROR; /*βڲλãټ飬صǰ*/ + } + else + { + phySecLockState = GetPhySecLockState(SidePretectData.SideProtecPhyBuf[i].SideProtecPhySecID); /*ȡ״̬*/ + chPhySecLockDirection = GetPhySecLockDirection(SidePretectData.SideProtecPhyBuf[i].SideProtecPhySecID); + if (((PHYSICAL_SECTION_LOCK_NORMAL == phySecLockState) || (PHYSICAL_SECTION_LOCK_DELAY == phySecLockState) || (PHYSICAL_SECTION_LOCK_PROTECT == phySecLockState)) + && (((CI_SYSTEM_DIRECTION_UP == SidePretectData.SideProtecPhyBuf[i].SideProtecDirect) && (CI_SYSTEM_DIRECTION_DOWN == chPhySecLockDirection)) + || ((CI_SYSTEM_DIRECTION_DOWN == SidePretectData.SideProtecPhyBuf[i].SideProtecDirect) && (CI_SYSTEM_DIRECTION_UP == chPhySecLockDirection)))) + { + /*Σ||ʱ||գңշΪԶ뷽򣩣üռ״̬*/ + } + else + { + phycurMergeState = GetPhySecCurMergeState(SidePretectData.SideProtecPhyBuf[i].SideProtecPhySecID); + if (SECTION_OCCUPY_NO == phycurMergeState) + { + /*οУһ*/ + } + else + { + /*ͨλռãʧ*/ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, SidePretectData.SideProtecPhyBuf[i].SideProtecPhySecID, ETYPE_PS_MERGY_OCU_STATE, phycurMergeState, sendLevel); + retVal = CI_ERROR; + cKeepCheckFlag = CI_ERROR; + } + } + } + + if (CI_ERROR == cKeepCheckFlag) + { + break; + } + else + { + /**/ + } + } + } + + return retVal; +} + +/* +* · +* ˵UINT16 routeId ·ID +* UINT8 functionId ID +* UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR +* CI_SUCCESS +* +*/ +UINT8 RouteSideProtectConditionCheck(UINT16 routeId, UINT8 functionId,UINT8 sendLevel) +{ + UINT8 retVal = CI_ERROR; + UINT16 wBufIndex = 0U; + SideProtecGroupStru sideProtecGroupData = { 0U }; + UINT8 chSidePretectNum = 0U; + SideProtecStru* pSidePretectData = NULL; + UINT8 i = 0U; + + wBufIndex = GetRouteConfigBufIndex(routeId); + + if (ROUTE_SUM_MAX > wBufIndex) + { + retVal = CI_SUCCESS; + sideProtecGroupData = GetRouteSideProtecGroupData(routeId); + chSidePretectNum = sideProtecGroupData.RouteSideProtecNum; + pSidePretectData = sideProtecGroupData.RouteSideProtecBuf; + + for (i = 0U; i < chSidePretectNum; i++) + { + retVal = SingleSideProtectCheck(pSidePretectData[i], routeId, CI_DEVICE_TYPE_ROUTE, functionId, sendLevel); + if (CI_SUCCESS == retVal) + { + /*һ*/ + } + else + { + retVal = CI_ERROR; + break; + } + } + } + else + { + retVal = CI_ERROR; /*ηǷʧ*/ + } + + return retVal; +} + +/* +* 鱣β +* ˵UINT16 wOverlapId ID + UINT8 functionId ID + UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR +* CI_SUCCESS +* +*/ +UINT8 OlapSideProtectConditionCheck(UINT16 wOverlapId, UINT8 functionId, UINT8 sendLevel) +{ + UINT8 retVal = CI_ERROR; + UINT16 wBufIndex = 0U; + SideProtecGroupStru sideProtecGroupData = { 0U }; + UINT8 chSidePretectNum = 0U; + SideProtecStru* pSidePretectData = NULL; + UINT8 i = 0U; + + wBufIndex = GetOverlapConfigBufIndex(wOverlapId); + if (OVERLAP_SUM_MAX > wBufIndex) + { + retVal = CI_SUCCESS; + sideProtecGroupData = GetOverlapSideProtecGroupData(wOverlapId); + chSidePretectNum = sideProtecGroupData.RouteSideProtecNum; + pSidePretectData = sideProtecGroupData.RouteSideProtecBuf; + + for (i = 0U; i < chSidePretectNum; i++) + { + retVal = SingleSideProtectCheck(pSidePretectData[i], wOverlapId, CI_DEVICE_TYPE_OVERLAP, functionId, sendLevel); + if (CI_SUCCESS == retVal) + { + /*һ*/ + } + else + { + retVal = CI_ERROR; + break; + } + } + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ελü +* ˵UINT16 const physicalId, ID +* SideProtecStru SidePretectData +* ֵCI_ERROR 0 ʧܣ޲ͨλã +* CI_SUCCESS 1 ɹͨλã +*/ +UINT8 SideProtectPhySecSwtPosCheck(const UINT16 physicalId, SideProtecStru SidePretectData) +{ + UINT16 i = 0U; + UINT16 j = 0U; + UINT16* pPhySecIncludeSwitchBuf = NULL; + UINT8 chSwitchSum = 0U; + UINT8 reVal = CI_ERROR; + UINT8 switchCurPosition = 0U; + + pPhySecIncludeSwitchBuf = GetPhySecIncludeSwitch(physicalId); + chSwitchSum = GetPhyIncludeSwitchSum(physicalId); + + if ((NULL != pPhySecIncludeSwitchBuf) && (0U != chSwitchSum)) + { + for (i = 0U; i < chSwitchSum; i++) + { + switchCurPosition = GetSwitchCurPosition(pPhySecIncludeSwitchBuf[i]); + for (j = 0U; j < SidePretectData.SideProtecSwitchNum; j++) + { + if (pPhySecIncludeSwitchBuf[i] == SidePretectData.SideProtecSwitchBuf[j].SideProtecSwitchID) + { + if (((SWITCH_POSITION_DINGWEI == SidePretectData.SideProtecSwitchBuf[j].SideProtecSwitchPos) && (SWITCH_POSITION_FANWEI == switchCurPosition)) + || ((SWITCH_POSITION_FANWEI == SidePretectData.SideProtecSwitchBuf[j].SideProtecSwitchPos) && (SWITCH_POSITION_DINGWEI == switchCurPosition))) + { + reVal = CI_SUCCESS; /*ͨλãֹͣسɹ*/ + break; + } + else + { + reVal = CI_ERROR; + } + } + else + { + /**/ + } + } + + if (CI_SUCCESS == reVal) + { + break; + } + else + { + /**/ + } + } + } + else + { + reVal = CI_ERROR; /*ȡʧܻΪ޲Σֱӷʧ*/ + } + + return reVal; +} + +/* +* 鱣ελǷȷ +* ˵const UINT16 overlapId overlap ID +* ֵCI_ERROR 0 λô +* CI_SUCCESS 1 λȷ +* Created By LQ 2025.09.28 +*/ +UINT8 CheckOverlapSwitchPosRight(const UINT16 overlapId) +{ + UINT8 retVal = CI_ERROR; + UINT16 bufIndex = 0U; + UINT8 switchSum = 0U; /*ε*/ + OverlapConditionSwitchStruct* conditionSwitchStru = NULL; /*ε*/ + UINT8 overlapProtectSwitchSum = 0U; /*ηĿ*/ + OverlapProtectSwitchStruct* overlapProtectSwitchStru = NULL; /*η*/ + UINT8 ii = 0U; + UINT16 switchId = 0U; + UINT8 switchCurPosition = 0U; + UINT8 cFuncRet = 0U; + + bufIndex = GetOverlapConfigBufIndex(overlapId); + switchSum = GetOverlapSwitchSum(overlapId); + conditionSwitchStru = GetOverlapCondSwitchStruct(overlapId); + overlapProtectSwitchSum = GetOverlapRelatedProtSwitSum(overlapId); + overlapProtectSwitchStru = GetOverlapRelatedProtSwitStru(overlapId); + + if ((OVERLAP_SUM_MAX > bufIndex) && (NULL != conditionSwitchStru) && (NULL != overlapProtectSwitchStru)) + { + retVal = CI_SUCCESS; + + /*鱣ελǷȷ*/ + for (ii = 0U; ii < switchSum; ii++) + { + switchId = conditionSwitchStru[ii].SwitchId; + switchCurPosition = GetSwitchCurPosition(switchId); + + if (((SWITCH_POSITION_DINGWEI == switchCurPosition) || (SWITCH_POSITION_FANWEI == switchCurPosition)) + && (switchCurPosition == conditionSwitchStru[ii].SwitchPosition)) + { + /*λȷ*/ + } + else + { + /*λôֹͣ*/ + retVal = CI_ERROR; + break; + } + } + + if (CI_SUCCESS == retVal) + { + /*鱣ηλǷȷ*/ + for (ii = 0U; ii < overlapProtectSwitchSum; ii++) + { + switchId = overlapProtectSwitchStru[ii].ProtectSwitchId; + cFuncRet = CheckSwitchPosAndMoveValid(overlapProtectSwitchStru[ii].ProtectSwitchId, overlapProtectSwitchStru[ii].ProtectPosition, ESEND_LEVEL_ZERO); + if (CI_ERROR == cFuncRet) + { + /*ɶλãͨз*/ + } + else + { + switchCurPosition = GetSwitchCurPosition(switchId); + + if (((SWITCH_POSITION_DINGWEI == switchCurPosition) || (SWITCH_POSITION_FANWEI == switchCurPosition)) + && (switchCurPosition == overlapProtectSwitchStru[ii].ProtectPosition)) + { + /*λȷ*/ + } + else + { + /*λôֹͣ*/ + retVal = CI_ERROR; + break; + } + } + } + } + else + { + retVal = CI_ERROR; /**/ + } + } + else + { + retVal = CI_ERROR; /*ηǷʧ*/ + } + + return retVal; +} + +/* +*ܣ֮ǰ˹״̬ +*˵const UINT16 wRouteId ·ID +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أ +* ֵ CI_ERROR +* CI_SUCCESS +* by cgh 20250929 +*/ +UINT8 OverlapPreLaborUnLockStateCheck(UINT16 const wRouteId, UINT16* pDevId, UINT8* pDevState) +{ + UINT8 chReval = CI_ERROR; + UINT8 chRouteOverlapNum = 0U; /*·Ŀ*/ + UINT16* pRouteOverlapIdbuf = NULL; /*·ID*/ + UINT8 ii = 0U; + UINT8 chPreLoaborUnlockState = 0U; + + if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId)) + { + chRouteOverlapNum = GetRouteOverlapSum(wRouteId); + pRouteOverlapIdbuf = GetRouteOverlapIdBuf(wRouteId); + + if (NULL != pRouteOverlapIdbuf) + { + for (ii = 0U; ii < chRouteOverlapNum; ii++) + { + chPreLoaborUnlockState = GetOverlapPreLoaborUnlockState(pRouteOverlapIdbuf[ii]); + if (PRO_PRE_LABOR_UNLOCK_STATE_NO == chPreLoaborUnlockState) + { + /*δ˹ATSԼձ*/ + ; + } + else + { + break; + } + } + + if (chRouteOverlapNum == ii) + { + chReval = CI_SUCCESS; + *pDevId = 0U; + *pDevState = 0U; + } + else + { + *pDevId = pRouteOverlapIdbuf[ii]; + *pDevState = chPreLoaborUnlockState; + } + } + else + { + *pDevId = 0U; + *pDevState = 0U; + } + } + else + { + *pDevId = 0U; + *pDevState = 0U; + } + + /*ȫͨ*/ + return chReval; +} + +/* +* ؼ +* ˵UINT16 wSwitchId ؼID +* UINT16 wDevId 豸ID +* UINT8 cDevType 豸 +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 SingleSideKeySwitchCheck(UINT16 wSwitchId, UINT16 wDevId, UINT8 cDevType) +{ + UINT8 retVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT16 wSwtPhySecId = 0U; + UINT8 cRouteState = 0U; /*·״̬*/ + UINT8 cRouteStateFlag = 0U; /*·״̬תƱ־*/ + UINT16 wRLockBelongRouteId = 0U; /*ν··ID*/ + UINT16 wUsingBelongRouteId = 0U; /*·ID*/ + + wBufIndex = GetSwitchConfigBufIndex(wSwitchId); + if ((SWITCH_SUM_MAX > wBufIndex) && (0U != wDevId) && ((CI_DEVICE_TYPE_OVERLAP == cDevType) || (CI_DEVICE_TYPE_ROUTE == cDevType))) + { + if (CI_DEVICE_TYPE_ROUTE == cDevType) + { + cRouteState = GetRouteState(wDevId); + cRouteStateFlag = GetRouteStateFlag(wDevId); + wSwtPhySecId = GetSwitchPhySectionId(wSwitchId); + wRLockBelongRouteId = GetPhySecRLockBelongRouteId(wSwtPhySecId); + wUsingBelongRouteId = GetPhySecUseRouteId(wSwtPhySecId); + if ((ROUTE_STATE_IDLE != cRouteState) && (ROUTE_STATE_FIRST_XUANPAI != cRouteState) && (ROUTE_STATE_XUANPAI != cRouteState) && (ROUTE_STATE_FLAG_YES != cRouteStateFlag) + && (wRLockBelongRouteId != wDevId) && (wUsingBelongRouteId != wDevId)) + { + /*·ǿСѡѡ&&·״̬תƱ־Ч&&ν··DZ·&&·DZ·سɹ*/ + retVal = CI_SUCCESS; + } + else + { + retVal = CI_ERROR; /*ʧܣ*/ + } + } + else + { + retVal = CI_ERROR; /*ʧܣ*/ + } + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* λ +* ˵UINT16 wPhySecId ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 PhySecLockMaskSideProtectCheck(UINT16 wPhySecId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wPhySecBufIndex = 0U; + UINT16 wRLockBelongRouteId = 0U; /*··ID*/ + UINT16 wRouteBufIndex = 0U; + SideProtecGroupStru sideProtecGroupData = { 0U }; + UINT8 chSideProtectNum = 0U; + SideProtecStru* pSideProtectData = NULL; + UINT8 cCurPhySecIndex = 0U; /*ڽ·еλ*/ + UINT16 wSwtPhySecId = 0U; /*ؼID*/ + UINT8 cKeySwtPhySecIndex = 0U; /*ؼڽ·еλ*/ + UINT8 i = 0U; + UINT8 cFuncRet = CI_ERROR; + UINT8 cSndSideProFuncSwitch = 0U; + + wPhySecBufIndex = GetPhySecConfigBufIndex(wPhySecId); + wRLockBelongRouteId = GetPhySecRLockBelongRouteId(wPhySecId); + wRouteBufIndex = GetRouteConfigBufIndex(wRLockBelongRouteId); + if ((PHYSICAL_SECTION_SUM_MAX > wPhySecBufIndex) && (ROUTE_SUM_MAX > wRouteBufIndex)) + { + cRetVal = CI_SUCCESS; + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) + { + /*ڶΪֶ֧ʱŽв*/ + sideProtecGroupData = GetRouteSideProtecGroupData(wRLockBelongRouteId); + chSideProtectNum = sideProtecGroupData.RouteSideProtecNum; + pSideProtectData = sideProtecGroupData.RouteSideProtecBuf; + if (0U == chSideProtectNum) + { + /*޲سɹ*/ + } + else + { + cCurPhySecIndex = GetPhySecInRoutePosIndex(wRLockBelongRouteId, wPhySecId); + if (ROUTE_PHYSICALSECTION_SUM_MAX > cCurPhySecIndex) + { + for (i = 0U; i < chSideProtectNum; i++) + { + /*ڲʱжϵǰǷλڹؼκ*/ + wSwtPhySecId = GetSwitchPhySectionId(pSideProtectData[i].KeysSwitchID); + cKeySwtPhySecIndex = GetPhySecInRoutePosIndex(wRLockBelongRouteId, wSwtPhySecId); + if ((ROUTE_PHYSICALSECTION_SUM_MAX > cKeySwtPhySecIndex) && (cKeySwtPhySecIndex < cCurPhySecIndex)) + { + /*λڹؼκ󷽣*/ + } + else + { + cFuncRet = SingleSideProtectCheck(pSideProtectData[i], wRLockBelongRouteId, CI_DEVICE_TYPE_ROUTE, 0U, 0U); + if (CI_SUCCESS == cFuncRet) + { + /*һ*/ + } + else + { + cRetVal = CI_ERROR; + break; + } + } + } + } + else + { + cRetVal = CI_ERROR; /*ʧ*/ + } + } + } + else + { + /**/ + } + } + else + { + cRetVal = CI_ERROR; /*ηǷʧ*/ + } + + return cRetVal; +} + +/* +*ܣԶͨ·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AutoRouteCouplinkStateCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chRouteSum = 0u; /*Զ··Ŀ (ֶ)*/ + UINT16* pRouteIdBuf = NULL; /*Զ··ID (ֶ)*/ + UINT8 ii = 0U; + UINT8 chRoutCouplinkFlag = 0U; + UINT16 wSigId = 0U; + UINT16 wSameStartSigRouteNum = 0U; + UINT16* pSameStartSigRouteBuf = NULL; + UINT16 jj = 0U; + UINT16 wLastPhyId = 0U; + UINT16 wLockRouteId = 0U; + if ((AUTO_ROUTE_SUM_MAX > wAutoRouteId) && (0U < wAutoRouteId)) + { + chRouteSum = GetAutoRouteIncludeRouteSum(wAutoRouteId);/*ý··Ŀ*/ + pRouteIdBuf = GetAutoRouteIncludeRouteBuf(wAutoRouteId);/*ȡԶ·ӦĻ·*/ + if ((0U < chRouteSum) && (NULL != pRouteIdBuf)) + { + for (ii = 0U; ii < chRouteSum; ii++) + { + /*ӽ·ұ־*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(pRouteIdBuf[ii]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + chReval = CI_SUCCESS; + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pRouteIdBuf[ii], ETYPE_AUTO_ROUTE_FLAG, AUTO_ROUTE_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + /*ӽ··ұ־*/ + if (CI_SUCCESS == chReval) + { + wLastPhyId = GetRouteLastPhySectionId(pRouteIdBuf[ii]); /*ȡ·*/ + wLockRouteId = GetPhySecRLockBelongRouteId(wLastPhyId); /*ȡ·*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(wLockRouteId);/*ȡұ־*/ + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, wLockRouteId, ETYPE_AUTO_ROUTE_FLAG, AUTO_ROUTE_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_SUCCESS == chReval) + { + /*ӽ·ʼźŻΪʼ˵·Ҳұ־*/ + wSigId = GetRouteStartSignalId(pRouteIdBuf[ii]); + wSameStartSigRouteNum = GetStartSignalRouteSum(wSigId); /*ȡʼźŻ·*/ + pSameStartSigRouteBuf = GetStartSignalRouteBuf(wSigId); + if ((NULL != pSameStartSigRouteBuf) && (0U < wSameStartSigRouteNum)) + { + for (jj = 0U; jj < wSameStartSigRouteNum; jj++) + { + chRoutCouplinkFlag = GetRouteCouplinkFlag(pSameStartSigRouteBuf[jj]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pSameStartSigRouteBuf[jj], ETYPE_AUTO_ROUTE_FLAG, AUTO_ROUTE_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + break; + } + } + } + else + { + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_ERROR == chReval) + { + break; + } + else + { + /**/ + } + + } + + } + else + { + /*ݴ󷵻ʧ*/ + } + } + else + { + /*δ󷵻ʧ*/ + } + + return chReval; +} +/* +*ܣԶ۷·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AutoReturnRouteCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chRouteSum = 0u; /*Զ··Ŀ (ֶ)*/ + UINT16* pRouteIdBuf = NULL; /*Զ··ID (ֶ)*/ + UINT8 ii = 0U; + UINT8 chRoutCouplinkFlag = 0U; + UINT16 wSigId = 0U; + UINT16 wSameStartSigRouteNum = 0U; + UINT16* pSameStartSigRouteBuf = NULL; + UINT16 jj = 0U; + UINT16 wLastPhyId = 0U; + UINT16 wLockRouteId = 0U; + if ((AUTO_RETURN_SUM_MAX > wAutoRouteId) && (0U < wAutoRouteId)) + { + chRouteSum = GetAutoReturnIncludeRouteSum(wAutoRouteId);/*ý··Ŀ*/ + pRouteIdBuf = GetAutoReturnIncludeRouteBuf(wAutoRouteId);/*ȡĻ·*/ + if ((0U < chRouteSum) && (NULL != pRouteIdBuf)) + { + for (ii = 0U; ii < chRouteSum; ii++) + { + /*ӽ·ұ־*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(pRouteIdBuf[ii]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + chReval = CI_SUCCESS; + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pRouteIdBuf[ii], ETYPE_AUTO_RETURN_FLAG, AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + /*ӽ··ұ־*/ + if (CI_SUCCESS == chReval) + { + wLastPhyId = GetRouteLastPhySectionId(pRouteIdBuf[ii]); /*ȡ·*/ + wLockRouteId = GetPhySecRLockBelongRouteId(wLastPhyId); /*ȡ·*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(wLockRouteId);/*ȡұ־*/ + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, wLockRouteId, ETYPE_AUTO_RETURN_FLAG, AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_SUCCESS == chReval) + { + /*ӽ·ʼźŻΪʼ˵·Ҳұ־*/ + wSigId = GetRouteStartSignalId(pRouteIdBuf[ii]); + wSameStartSigRouteNum = GetStartSignalRouteSum(wSigId);/*ȡʼźŻ·*/ + pSameStartSigRouteBuf = GetStartSignalRouteBuf(wSigId); + if ((NULL != pSameStartSigRouteBuf) && (0U < wSameStartSigRouteNum)) + { + for (jj = 0U; jj < wSameStartSigRouteNum; jj++) + { + chRoutCouplinkFlag = GetRouteCouplinkFlag(pSameStartSigRouteBuf[jj]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pSameStartSigRouteBuf[jj], ETYPE_AUTO_RETURN_FLAG, AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + break; + } + } + } + else + { + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_ERROR == chReval) + { + break; + } + else + { + /**/ + } + + } + } + else + { + /*ݴ󷵻ʧ*/ + } + } + else + { + /*δ󷵻ʧ*/ + } + + return chReval; +} +/* +*ܣȫԶ۷·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AllAutoReturnRCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId) +{ + UINT8 chReval = CI_ERROR; + UINT8 chRouteSum = 0u; /*Զ··Ŀ (ֶ)*/ + UINT16* pRouteIdBuf = NULL; /*Զ··ID (ֶ)*/ + UINT8 ii = 0U; + UINT8 chRoutCouplinkFlag = 0U; + UINT16 wSigId = 0U; + UINT16 wSameStartSigRouteNum = 0U; + UINT16* pSameStartSigRouteBuf = NULL; + UINT16 jj = 0U; + UINT16 wLastPhyId = 0U; + UINT16 wLockRouteId = 0U; + if ((ALL_AUTO_RETURN_SUM_MAX > wAutoRouteId) && (0U < wAutoRouteId)) + { + chRouteSum = GetAllAutoReturnIncludeRouteSum(wAutoRouteId);/*ý··Ŀ*/ + pRouteIdBuf = GetAllAutoReturnIncludeRouteBuf(wAutoRouteId);/*ȡĻ·*/ + if ((0U < chRouteSum) && (NULL != pRouteIdBuf)) + { + for (ii = 0U; ii < chRouteSum; ii++) + { + chRoutCouplinkFlag = GetRouteCouplinkFlag(pRouteIdBuf[ii]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + chReval = CI_SUCCESS; + } + else + { + /*ATS*/ + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pRouteIdBuf[ii], ETYPE_ALL_AUTO_RETURN_FLAG, ALL_AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + /*ӽ··ұ־*/ + if (CI_SUCCESS == chReval) + { + wLastPhyId = GetRouteLastPhySectionId(pRouteIdBuf[ii]); /*ȡ·*/ + wLockRouteId = GetPhySecRLockBelongRouteId(wLastPhyId); /*ȡ·*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(wLockRouteId);/*ȡұ־*/ + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, wLockRouteId, ETYPE_ALL_AUTO_RETURN_FLAG, ALL_AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_SUCCESS == chReval) + { + /*ӽ·ʼźŻΪʼ˵·Ҳұ־*/ + wSigId = GetRouteStartSignalId(pRouteIdBuf[ii]); + wSameStartSigRouteNum = GetStartSignalRouteSum(wSigId); /*ȡʼźŻ·*/ + pSameStartSigRouteBuf = GetStartSignalRouteBuf(wSigId); + if ((NULL != pSameStartSigRouteBuf) && (0U < wSameStartSigRouteNum)) + { + for (jj = 0U; jj < wSameStartSigRouteNum; jj++) + { + chRoutCouplinkFlag = GetRouteCouplinkFlag(pSameStartSigRouteBuf[jj]); + if (ROUTE_COUPLINK_FLAG_NO == chRoutCouplinkFlag) + { + /*ұ־*/ + } + else + { + SetErrorData(chFunctionId, CI_DEVICE_TYPE_ROUTE, pRouteIdBuf[ii], ETYPE_ALL_AUTO_RETURN_FLAG, ALL_AUTO_RETURN_COUPROUTE_SET, ESEND_LEVEL_ATS); + chReval = CI_ERROR; + break; + } + } + } + else + { + chReval = CI_ERROR; + } + } + else + { + /**/ + } + if (CI_ERROR == chReval) + { + break; + } + else + { + /**/ + } + + } + } + else + { + /*ݴ󷵻ʧ*/ + } + } + else + { + /*δ󷵻ʧ*/ + } + + return chReval; +} diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h index 636ec6a..00248c7 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h @@ -946,6 +946,18 @@ UINT8 RouteAllSecJumpLockStateCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p * CI_SUCCESS */ UINT8 KeepRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel); + +/* +* ·źűֵ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 KeepLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel); + /* * г·źŻ * ˵ @@ -970,6 +982,18 @@ UINT8 KeepLTrainRouteSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel */ UINT8 LockBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel); +/* +* ·յ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR +* CI_SUCCESS +* RETURN_LOCK_ERR_SWITPOS λòȷ +* Created By LQ 2025.09.29 +*/ +UINT8 LockLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel); + /* * յʽ· * ˵ @@ -1021,14 +1045,6 @@ CI_ERROR: */ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId); -/* -* ·˽ĿԡֻҪ·һοֱӽ̹Ϊ˽Сע·˽ⲻɵøú -* ˵ const UINT16 routeId, ·ID -* ֵ UINT8 -CI_SUCCESS:˽ִ -CI_ERROR:˽ⲻִ -*/ -UINT8 CheckDiaoCheRouteZRJFeasibility(const UINT16 routeId); /* ձ @@ -1173,6 +1189,17 @@ UINT8 OpenLTrainRouteSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel */ UINT8 OpenBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel); +/* +* ·źŵ +* ˵UINT16 RouteId, · +* UINT8 functionId, ú +* UINT8 sendLevel, 뷢ͼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 OpenLeadRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel); + /* L10_ʽ·źű */ /* * ʽ·źű @@ -1497,6 +1524,7 @@ UINT8 AxisSecAllSwitchPosCheck(UINT16 const axisSecId,UINT16 *pDevId,UINT8 *pDev * ˵ UINT16 const routeId, · * ֵ CI_ERROR * CI_SUCCESS +* qw.liu ޸ ·ⷽһελü鲻ʹýӽΣΪֱӲ߼ */ UINT8 RouteOutfirstPhySecSwiPosCheck(UINT16 const routeId); /* @@ -1869,15 +1897,7 @@ UINT8 LockLeadRouteSectionCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLeve */ UINT8 LogicSecSwitchLtrlDfncCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState); -/* -* ·ȫ -* ˵ UINT16 routeId, · -* UINT16 *pDevId, 豸Idأ -* UINT8 *pDevState, 豸״̬أ -* ֵ CI_ERROR -* CI_SUCCESS -*/ -UINT8 RouteAllLtrlDfncSwitchCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevState); + /* * ·ȫ豸 @@ -2211,15 +2231,7 @@ UINT8 LogSecSeqIncUTCheck(const UINT16 wTrainId, const UINT8 cLogSecSum, const U */ UINT8 RouteHalfProSwitchFLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState, UINT8* pYLockAlarmFlag); -/* -* ·ȫ -* ˵ UINT16 routeId, · -* UINT16 *pDevId, 豸Idأ -* UINT8 *pDevState, 豸״̬أ -* ֵ CI_ERROR -* CI_SUCCESS -*/ -UINT8 RouteHalfLtrlDfncSwitchCheck(UINT16 const routeId, UINT16 *pDevId, UINT8 *pDevState); + /* * ֽ·ȫ豸 @@ -2294,7 +2306,7 @@ UINT16 SearchNonMainRoute(UINT8 cRouteSum, UINT16 wRouteIdBuff[]); UINT8 SwitchRelLogSecLSXSStateCheck(UINT16 switchId, UINT16* pLogSecId, UINT8* pLogState); /* -* źűֿʱ·ղ +* ·ղ * ˵ UINT16 const routeId, · * ֵ CI_ERROR ʧ * CI_SUCCESS ɹ @@ -2506,16 +2518,7 @@ UINT8 CheckRouteZhefanJiesuo(UINT16 const routeId); */ UINT8 CheckOverlapPhysecOtherLock(UINT16 const overlapId, UINT16* pDevId, UINT8* pDevState); -/* -* β -* ˵UINT16 const overlapId, OverlapID -* UINT16* pDevId 豸Idأ -* UINT8* pDevState 豸״̬أ -* ֵ 0 ʧ -* 1 ɹ -* Created By LQ 2024.01.05 -*/ -UINT8 OverlapLateralDfnCheck(UINT16 const overlapId, UINT16* pDevId, UINT8* pDevState); + /* * 鱣εCBTC @@ -2614,13 +2617,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 */ -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); /* * βֽ·߼·ƥ @@ -2719,5 +2724,202 @@ UINT8 OverlapProSwUsingCheck(const UINT16 wOverlapId, UINT16* pDevId, UINT8* pDe */ UINT8 RouteRelAllSwitchPosCheck(UINT16 const routeId); +/* +*ܣղ̵ +*˵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 wRouteId ·ID +* UINT16* pDevId 豸ID +* UINT8* pDevState 豸״̬ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By 2025.09.18 +*/ +UINT8 SetCouplinkRouteSecOccCheck(const UINT16 wRouteId, UINT16* pDevId, UINT8* pDevState); +/* +* ҽ·ռü +* ˵const UINT16 wRouteId ·ID +* UINT16* pDevId 豸ID +* UINT8* pDevState 豸״̬ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By 2025.09.18 +*/ +UINT8 KeepCouplinkRouteSecOccCheck(const UINT16 wRouteId, UINT16* pDevId, UINT8* pDevState); + +/* +* +* ˵SideProtecStru SidePretectData һ +* UINT16 wDevId 豸ID +* UINT8 cDevType 豸 +* UINT8 functionId ID +* UINT8 sendLevel ͵ȼ +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +*/ +UINT8 SingleSideProtectCheck(SideProtecStru SidePretectData, UINT16 wDevId, UINT8 cDevType, UINT8 functionId, UINT8 sendLevel); + +/* +* λü +* ˵SideProtecSwitchData* pSideProtecSwitchBuf +* UINT8 chSideProtecSwitchNum +* ֵCI_ERROR 0 λͨ +* CI_SUCCESS 1 λòͨ +*/ +UINT8 SideProtectSwitchPosCheck(SideProtecSwitchData* pSideProtecSwitchBuf, UINT8 chSideProtecSwitchNum); + +/* +* +* ˵SideProtecStru SidePretectData +* UINT8 functionId ID +* UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR ʧ +* CI_SUCCESS ɹ +*/ +UINT8 SideProtectPhySecCheck(SideProtecStru SidePretectData, UINT8 functionId, UINT8 sendLevel); + +/* +* · +* ˵UINT16 routeId ·ID + UINT8 functionId ID + UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR +* CI_SUCCESS +* +*/ +UINT8 RouteSideProtectConditionCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel); +/* +* 鱣β +* ˵UINT16 wOverlapId ID + UINT8 functionId ID + UINT8 sendLevel ͵ȼ +* ֵ CI_ERROR +* CI_SUCCESS +* +*/ +UINT8 OlapSideProtectConditionCheck(UINT16 wOverlapId, UINT8 functionId, UINT8 sendLevel); + +/* +* ελü +* ˵UINT16 const physicalId, ID +* SideProtecStru SidePretectData +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +*/ +UINT8 SideProtectPhySecSwtPosCheck(const UINT16 physicalId, SideProtecStru SidePretectData); + +/* +* 鱣ελǷȷ +* ˵const UINT16 overlapId overlap ID +* ֵCI_ERROR 0 λô +* CI_SUCCESS 1 λȷ +* Created By LQ 2025.09.28 +*/ +UINT8 CheckOverlapSwitchPosRight(const UINT16 overlapId); + +/* +*ܣ֮ǰ˹״̬ +*˵const UINT16 wRouteId ·ID +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أ +* ֵ CI_ERROR +* CI_SUCCESS +* by cgh 20250929 +*/ +UINT8 OverlapPreLaborUnLockStateCheck(UINT16 const wRouteId, UINT16* pDevId, UINT8* pDevState); + +/* +* ؼ +* ˵UINT16 wSwitchId ؼID +* UINT16 wDevId 豸ID +* UINT8 cDevType 豸 +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 SingleSideKeySwitchCheck(UINT16 wSwitchId, UINT16 wDevId, UINT8 cDevType); + +/* +* λ +* ˵UINT16 wPhySecId ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Created By LQ 2025.09.29 +*/ +UINT8 PhySecLockMaskSideProtectCheck(UINT16 wPhySecId); +/* +*ܣԶͨ·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AutoRouteCouplinkStateCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId); +/* +*ܣԶ۷·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AutoReturnRouteCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId); +/* +*ܣȫԶ۷·Լ +*˵ const UINT16 wAutoRouteId ·ID +* const UINT8 chFunctionId ID +* ֵ CI_ERROR +* CI_SUCCESS +* by lyj 20250929 +*/ +UINT8 AllAutoReturnRCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId); + + #endif diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c index 269c600..f2e30c7 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c @@ -215,7 +215,7 @@ UINT8 SetCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT8 triggerFlag = 0u; /*Ϸͼ*/ UINT8 sendLevel = 0u; - + UINT8 chRouteCouplinkFlag = 0U; triggerFlag = GetRouteAutoTriggerFlag(routeId); /*ȡ·Զ־*/ if ((AutoSignalOrRouteValid(routeId) == CI_SUCCESS) || (AUTO_TRIGGER_SET_YES == triggerFlag)) @@ -267,22 +267,45 @@ UINT8 SetCbtcLTrainRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊ·СԶ ·ԤѡԶ쳣ARBҹ޸ģ*/ devState = GetRouteState(routeId); - if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) - || (ROUTE_STATE_AUTO_UNLOCKERR == devState) || (ROUTE_STATE_HALF_UNLOCK == devState)) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ҽ·״̬·״̬С·ѡԶԶ쳣ARB쳣Ԥաӽӽ쳣԰ҽ·*/ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_FIRST_LOCKERR == devState) + || (ROUTE_STATE_YUXIAN_LOCK == devState) || (ROUTE_STATE_NEAR_LOCK == devState) || (ROUTE_STATE_NEAR_LOCKERR == devState) + || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_AUTO_UNLOCKERR == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /* ·״̬Ϊ·СԶ ·ԤѡԶ쳣ARBҹ޸ģ*/ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) + || (ROUTE_STATE_AUTO_UNLOCKERR == devState) || (ROUTE_STATE_HALF_UNLOCK == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + } if (CI_SUCCESS == reResult) @@ -410,6 +433,11 @@ UINT8 SetRevrLTrainRouteLogicProcess(UINT16 const routeId) /*Ϸͼ*/ UINT8 sendLevel = 0u; UINT8 isAutoSigRoute = CI_ERROR; + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; + + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ isAutoSigRoute = AutoSignalOrRouteValid(routeId); if (CI_SUCCESS == isAutoSigRoute) @@ -445,23 +473,46 @@ UINT8 SetRevrLTrainRouteLogicProcess(UINT16 const routeId) } - /* ·״̬Ϊ·С ·Ԥѡ*/ + if(CI_SUCCESS == reResult) { devState = GetRouteState(routeId); - if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_HALF_UNLOCK == devState)) + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel)) { - /* ͨ */ - reResult = CI_SUCCESS; + /* ·״̬·״̬С·ѡԶԶ쳣ARB쳣Ԥաӽӽ쳣԰ҽ· */ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_FIRST_LOCKERR == devState) + || (ROUTE_STATE_YUXIAN_LOCK == devState) || (ROUTE_STATE_NEAR_LOCK == devState)|| (ROUTE_STATE_NEAR_LOCKERR == devState) + || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_AUTO_UNLOCKERR == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /* ·״̬Ϊ·С ·Ԥѡ򡾲δա*/ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_HALF_UNLOCK == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + } /* źŻ */ if(CI_SUCCESS == reResult) @@ -767,7 +818,11 @@ UINT8 SetCbtcReturnRouteLogicProcess(UINT16 const routeId) UINT8 devState = 0u; /*豸״̬*/ /*Ϸͼ*/ - UINT8 sendLevel = 0u; + UINT8 sendLevel = 0u; + UINT8 chRouteCouplinkFlag = 0U; + + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) { /*Զ·ATS*/ @@ -817,21 +872,44 @@ UINT8 SetCbtcReturnRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊ·С ·Ԥѡ*/ + devState = GetRouteState(routeId); - if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState)) + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + /* ·״̬·״̬С·ѡԶԶ쳣ARB쳣Ԥաӽӽ쳣԰ҽ· */ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_FIRST_LOCKERR == devState) + || (ROUTE_STATE_YUXIAN_LOCK == devState) || (ROUTE_STATE_NEAR_LOCK == devState) || (ROUTE_STATE_NEAR_LOCKERR == devState) + || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_AUTO_UNLOCKERR == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_RETURN_ROUTE_STATE, devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - + /* ·״̬Ϊ·С ·Ԥѡ*/ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_RETURN_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + + } } + } if (CI_SUCCESS == reResult) @@ -956,7 +1034,12 @@ UINT8 SetReverseRtnRouteLogicProcess(UINT16 const routeId) UINT8 devState = 0u; /*豸״̬*/ /*Ϸͼ*/ - UINT8 sendLevel = 0u; + UINT8 sendLevel = 0u; + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; + + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) { /*Զ·ATS*/ @@ -986,22 +1069,45 @@ UINT8 SetReverseRtnRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } - /* ·״̬Ϊ·С ·Ԥѡ*/ + if(CI_SUCCESS == reResult) { devState = GetRouteState(routeId); - if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState)) + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel)) { - /* ͨ */ - reResult = CI_SUCCESS; + /* ·״̬·״̬С·ѡԶԶ쳣ARB쳣Ԥաӽӽ쳣԰ҽ· */ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState) || (ROUTE_STATE_FIRST_LOCKERR == devState) + || (ROUTE_STATE_YUXIAN_LOCK == devState) || (ROUTE_STATE_NEAR_LOCK == devState) || (ROUTE_STATE_NEAR_LOCKERR == devState) + || (ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_AUTO_UNLOCKERR == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /* ·״̬Ϊ·С ·Ԥѡ*/ + if ((ROUTE_STATE_IDLE == devState) || (ROUTE_STATE_FIRST_XUANPAI == devState)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + } /* źŻ */ if(CI_SUCCESS == reResult) @@ -1127,6 +1233,7 @@ UINT8 LockLeadRouteLogicProcess(UINT16 const routeId) /*Ϸͼ*/ UINT8 sendLevel = 0u; + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) @@ -1160,19 +1267,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; @@ -1242,7 +1339,7 @@ UINT8 LockLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /* */ - checkResult = LockBlocRouteSwitchCheck(routeId, functionId, sendLevel); + checkResult = LockLeadRouteSwitchCheck(routeId, functionId, sendLevel); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -1259,7 +1356,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; @@ -1520,7 +1628,8 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*豸ID*/ UINT8 routeStateFlag = ROUTE_STATE_FLAG_NO; /*·״̬תƱ־*/ UINT8 cAutoStateFlag = CI_ERROR; - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteReverse = 0U; cAutoStateFlag = AutoSignalOrRouteValid(routeId); /*ȡԶ*/ if (cAutoStateFlag == CI_SUCCESS) { @@ -1574,10 +1683,11 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊ·ѡš*/ + devState = GetRouteState(routeId); if (ROUTE_STATE_XUANPAI == devState) { + /* ·״̬Ϊ·ѡš*/ /* ͨ */ reResult = CI_SUCCESS; } @@ -1696,8 +1806,12 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - if ((ROUTE_REVERSE_PROPERTY_YES == GetRouteReverseProperty(routeId)) || (ROUTE_TYPE_AIRSHAFT == GetAirShaftRouteType(routeId))) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteReverse = GetRouteReverseProperty(routeId); + if (((ROUTE_REVERSE_PROPERTY_YES == chRouteReverse) && (ROUTE_COUPLINK_FLAG_YES != chRouteCouplinkFlag)) + || (ROUTE_TYPE_AIRSHAFT == GetAirShaftRouteType(routeId))) { /*·εռ״̬֮ǰڲռ״̬źų·ڷһ߼ΣźŻؿ*/ + /*Ƿҽ·SetCbtcRouteSectionCheck*/ /*羮·׷ٰ·*/ devId = 0u; devState = 0u; @@ -1992,7 +2106,9 @@ UINT8 LockCbtcReturnRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*豸ID*/ UINT8 sendLevel = ESEND_LEVEL_ZERO; /*Ϸͼ*/ UINT8 cAutoStateFlag = CI_ERROR; - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chrouteStateFlag = 0U; + cAutoStateFlag = AutoSignalOrRouteValid(routeId); /*ȡԶ*/ if (cAutoStateFlag == CI_SUCCESS) { @@ -2043,13 +2159,32 @@ UINT8 LockCbtcReturnRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { - /* ·״̬Ϊ·ѡš*/ + devState = GetRouteState(routeId); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chrouteStateFlag = GetRouteStateFlag(routeId); /* ȡ·״̬תƱ־*/ if (ROUTE_STATE_XUANPAI == devState) { + /* ·״̬Ϊ·ѡš*/ /* ͨ */ reResult = CI_SUCCESS; } + else if ((ROUTE_STATE_AUTO_UNLOCK == devState) || (ROUTE_STATE_AUTO_UNLOCKERR == devState)) + { + if ((ROUTE_STATE_FLAG_YES == chrouteStateFlag) && (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)) + { + /*׷ٱ־Чҽ·۷׷*/ + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + } else { /* ¼ */ @@ -2231,16 +2366,22 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, UINT16 wRouteLeavePhySecId = 0U;/*·ȥID*/ UINT8 chLeavePhyCurOcuState = 0U;/*ȥռ״̬*/ UINT8 cAlarmType = FLAG_UNSET; + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chCoupResult = 0U; + UINT8 chPreLoaborUnlockState = 0U; + UINT8 cSndSideProFuncSwitch = 0U; lineIdentity = GetCiFunctionSwitchConfig(LINE_RAILWAY_TYPE_CONF);/*ȡ·ʶ*/ - + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); + laborLockCmdFlag = GetOverlaplaborLockCmdFlag(overlapId); + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ /* */ if(ATS_LOCK_OVERLAP == lockType) { chOverlapFromRouteFlag = GetOverlapFromSetRouteCmdFlag(overlapId); - if (OVERLAP_ROUTE_FLAG_YES == chOverlapFromRouteFlag) + if ((OVERLAP_ROUTE_FLAG_YES == chOverlapFromRouteFlag) && (ROUTE_COUPLINK_FLAG_YES != chRouteCouplinkFlag)) { devId = GetRouteLastPhySectionId(routeId); devState = GetPhySecCurMergeState(devId); @@ -2269,65 +2410,76 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, } else { - /*Ǵ·IDATSβټ·һռ״̬*/ + /*Ǵ·IDATSβټ·һռ״̬;·ұ־ռ*/ reResult = CI_SUCCESS; - } + } + /*·ұ־βͣ*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + reResult = CI_SUCCESS; + } + else + { + /*ͣ״̬*/ + if (CI_SUCCESS == reResult) + { + devId = GetRouteLastPhySectionId(routeId); + secStopFlag = GetPhySecStopSteadyFlag(devId); + if (PHYSICAL_SECTION_STOPSTEADY_NO == secStopFlag) + {/*δյͣϢ*/ + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_STOPSTEADY_STATE, secStopFlag, sendLevel);/*ֻ¼*/ + /* ʧܷ */ + reResult = CI_ERROR; + } + + } + } + } else { + /*·һΡС*/ devId = GetRouteLastPhySectionId(routeId); devState = GetPhySecCurMergeState(devId); - if (devState == SECTION_OCCUPY_NO) + if (SECTION_OCCUPY_NO == devState) { /* ͨ */ reResult = CI_SUCCESS; } else { -#if 0 - /*鱣ε״̬*/ - overlapSwitchUsing = OvlpIncludeAndProtSwitchCheck(overlapId); - - /*ε*/ - if(CI_SUCCESS == overlapSwitchUsing) - { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } + /*ͣ״̬*/ + if (CI_SUCCESS == reResult) + { + devId = GetRouteLastPhySectionId(routeId); + secStopFlag = GetPhySecStopSteadyFlag(devId); + if (PHYSICAL_SECTION_STOPSTEADY_NO == secStopFlag) + {/*δյͣϢ*/ /* ͨ */ reResult = CI_SUCCESS; } else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_MERGY_OCU_STATE,devState,sendLevel); + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_STOPSTEADY_STATE, secStopFlag, sendLevel);/*ֻ¼*/ /* ʧܷ */ reResult = CI_ERROR; } -#endif - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; - } - } - - /*ͣ״̬*/ - if (CI_SUCCESS == reResult) - { - devId = GetRouteLastPhySectionId(routeId); - secStopFlag = GetPhySecStopSteadyFlag(devId); - if(PHYSICAL_SECTION_STOPSTEADY_NO == secStopFlag) - {/*δյͣϢ*/ - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_STOPSTEADY_STATE,secStopFlag,sendLevel);/*ֻ¼*/ - /* ʧܷ */ - reResult = CI_ERROR; } + } @@ -2403,6 +2555,47 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, } } + /*˹*/ + if (CI_SUCCESS == reResult) + { + if ((LOCK_OVERLAP_CMD_YES == laborLockCmdFlag) && (ATS_LOCK_OVERLAP == lockType)) + { + /*˹ձΣ*/ + } + else + { + devId = 0u; + devState = 0u; + chPreLoaborUnlockState = OverlapPreLaborUnLockStateCheck(routeId, &devId, &devState); + if (CI_SUCCESS == chPreLoaborUnlockState) + { + /*ñζӦн·кٴձ*/ + ; + } + else + { + reResult = CI_ERROR; + SetErrorData(functionId, CI_DEVICE_TYPE_OVERLAP, devId, ETYPE_OVERLAP_LABORUNLOCK_STATE, devState, sendLevel); + } + } + } + + + /*ղ*/ + if (CI_SUCCESS == reResult) + { + checkResult = OverlapZhaoChaRelayCheck(overlapId, sendLevel); + + if (CI_ERROR == checkResult) + { + reResult = CI_ERROR; + } + else + { + ; /*֮ǰʱȲ鱾Ƿ*/ + } + } + /* μηΡδá*/ if (CI_SUCCESS == reResult) { @@ -2543,19 +2736,25 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, /*β*/ if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult)) { - devId = 0u; - devState = 0u; - checkResult = OverlapLateralDfnCheck(overlapId, &devId, &devState); - - if (checkResult == CI_SUCCESS) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ飬ֵǰ״̬ */ + /*ڶΪֶ֧ʱŽв*/ + devId = 0u; + devState = 0u; + checkResult = OlapSideProtectConditionCheck(overlapId, functionId, sendLevel); + if (checkResult == CI_SUCCESS) + { + /* ͨ飬ֵǰ״̬ */ + } + else + { + + reResult = CI_ERROR; /* ʧ */ + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); - reResult = CI_ERROR; /* ʧ */ + /**/ } } @@ -2787,73 +2986,79 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId, reResult = CI_ERROR; } - /*ιλȷλòȷɶ*/ - if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult)) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwiMovValCheck(overlapId, &devId, &devState, &cAlarmType); - - if (CI_SUCCESS == checkResult) - { - /* ͨ飬ֵǰ״̬ */ - } - else if (RETURN_WAIT_SWITCH_CHECK == checkResult) - { - if (RETURN_WAIT_SWITCH_USING == reResult) - { - /*ȴȣȼȴ>ȴ>λô*/ - } - else - { - reResult = RETURN_WAIT_SWITCH_CHECK; /*ɶԼδȷϣصȴ*/ - } - } - else - { - /* ¼ */ - if (FLAG_SET == cAlarmType) - { - SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_MOVE_CHECK_RESULT, devState, sendLevel); - } - else - { - SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); - } - /* ʧܷ */ - reResult = CI_ERROR; - } + /*ֶ֧ʱλúͿɶ*/ } - - /*ιλȷ*/ - if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult)) + else { - devId = 0u; - devState = 0u; - checkResult = OvlpRelatedProtSwitchPosCheck(overlapId,&devId,&devState); - - if (checkResult == CI_ERROR) + /*ιλȷλòȷɶ*/ + if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult)) { - if ((RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult)) + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwiMovValCheck(overlapId, &devId, &devState, &cAlarmType); + + if (CI_SUCCESS == checkResult) { - /*άֵǰֵȼȴ>ȴ>λô*/ + /* ͨ飬ֵǰ״̬ */ + } + else if (RETURN_WAIT_SWITCH_CHECK == checkResult) + { + if (RETURN_WAIT_SWITCH_USING == reResult) + { + /*ȴȣȼȴ>ȴ>λô*/ + } + else + { + reResult = RETURN_WAIT_SWITCH_CHECK; /*ɶԼδȷϣصȴ*/ + } } else { - /* λòȷ */ - reResult = RETURN_LOCK_ERR_SWITPOS; + /* ¼ */ + if (FLAG_SET == cAlarmType) + { + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_MOVE_CHECK_RESULT, devState, sendLevel); + } + else + { + SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel); + } + /* ʧܷ */ + reResult = CI_ERROR; } - } - else + } + + /*ιλȷ*/ + if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult)) { - /* λȷ ͨ飬ֵǰ״̬ */ + devId = 0u; + devState = 0u; + checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState); + + if (checkResult == CI_ERROR) + { + if ((RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult)) + { + /*άֵǰֵȼȴ>ȴ>λô*/ + } + else + { + /* λòȷ */ + reResult = RETURN_LOCK_ERR_SWITPOS; + } + } + else + { + /* λȷ ͨ飬ֵǰ״̬ */ + } } } } if(CI_ERROR == reResult) { - laborLockCmdFlag = GetOverlaplaborLockCmdFlag(overlapId); if((LOCK_OVERLAP_CMD_YES == laborLockCmdFlag)&&(ATS_LOCK_OVERLAP ==lockType)) {/*˹ձ*/ SetOverlaplaborLockCmdFlag(overlapId,LOCK_OVERLAP_CMD_NO); @@ -3064,7 +3269,7 @@ UINT8 OpenBlocLTrainRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -3425,7 +3630,8 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); UINT16 devId = 0u; /*豸ID*/ /*Ϸͼ*/ - UINT8 sendLevel = 0u; + UINT8 sendLevel = 0u; + UINT8 chRouteCouplinkFlag = 0U; if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) { /*Զ·ATS*/ @@ -3633,23 +3839,33 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId) } if (CI_SUCCESS == reResult) { - if ((ROUTE_REVERSE_PROPERTY_YES == GetRouteReverseProperty(routeId)) || (ROUTE_TYPE_AIRSHAFT == GetAirShaftRouteType(routeId))) - { /*·εռ״̬֮ǰڲռ״̬źų·ڷһΣźŻؿ*/ - /*羮·׷ٰʿӶԽ·ڷεռ״̬*/ - devId = 0u; - devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if ((ROUTE_REVERSE_PROPERTY_YES == GetRouteReverseProperty(routeId))|| (ROUTE_TYPE_AIRSHAFT == GetAirShaftRouteType(routeId))) + { + /*ұ־ڲ鷴·ȫУ;羮·ұ־ȫο*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + /* ͨ,ռOpenCbtcRouteSectionCheck*/ } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_MERGY_OCU_STATE,devState,sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /*·εռ״̬֮ǰڲռ״̬źų·ڷһΣźŻؿ*/ + /*羮·׷ٰʿӶԽ·ڷεռ״̬*/ + devId = 0u; + devState = 0u; + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + if (checkResult == CI_SUCCESS) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } /* · */ if (CI_SUCCESS == reResult) @@ -3663,7 +3879,7 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -3742,7 +3958,7 @@ UINT8 KeepCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT8 signalCrossState = CI_ERROR; /* ѹźŻ״̬ */ UINT8 routeRevProperty = 0u; /* · */ UINT8 airShaftRouteType = 0u; /* 羮· */ - + UINT8 chRouteCouplinkFlag = 0U; autoValueCheck = AutoSignalOrRouteValid(routeId); if (CI_SUCCESS == autoValueCheck) { @@ -3940,16 +4156,28 @@ UINT8 KeepCbtcLTrainRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } - /* ·ռ״̬С*/ + if(CI_SUCCESS == reResult) { routeRevProperty = GetRouteReverseProperty(routeId); airShaftRouteType = GetAirShaftRouteType(routeId); - if ((ROUTE_REVERSE_PROPERTY_YES == routeRevProperty) || (ROUTE_TYPE_AIRSHAFT == airShaftRouteType)) - { /*·羮·Խ·ڷεռѹ״̬м*/ + + if ((ROUTE_REVERSE_PROPERTY_YES == routeRevProperty)|| (ROUTE_TYPE_AIRSHAFT == airShaftRouteType)) + + { devId = 0u; devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &devState); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + /*ҽ·׷٣羮·òұ־ȫ*/ + checkResult = KeepCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + /* ·ռ״̬С*/ + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } if (CI_SUCCESS == checkResult) { /* ͨ */ @@ -4240,7 +4468,7 @@ UINT8 OpenBlocReturnRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -4622,7 +4850,7 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*豸ID*/ - + UINT8 chRouteCouplinkFlag = 0U; if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) { @@ -4796,7 +5024,7 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId) else { /* ʧܷ */ - reResult = CI_ERROR; + reResult = checkResult; } } @@ -4848,21 +5076,40 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId) } } - /* ·ռ״̬С*/ + if(CI_SUCCESS == reResult) { devId = 0u; devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &devState); - if (checkResult == CI_SUCCESS) + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + /*ҽ·*/ + checkResult = SetCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + /* ·ռ״̬С*/ + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (CI_SUCCESS == checkResult) { /* ͨ */ reResult = CI_SUCCESS; } else { - /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_MERGY_OCU_STATE,devState,sendLevel); + if (0U == devId) + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_COUPLINK_ROUTE_IDLE, 0U, sendLevel); + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + } + /* ʧܷ */ reResult = CI_ERROR; } @@ -4913,6 +5160,7 @@ UINT8 KeepCbtcReturnRouteLogicProcess(UINT16 const routeId) UINT16 devId = 0u; /*豸ID*/ UINT16 routeFirstPhyId = 0u; + UINT8 chRouteCouplinkFlag = 0U; UINT8 rcWorkMode = GetLocalRcWorkMode(); if (AutoSignalOrRouteValid(routeId) == CI_SUCCESS) @@ -5149,7 +5397,16 @@ UINT8 KeepCbtcReturnRouteLogicProcess(UINT16 const routeId) {/*CI*/ devId = 0u; devState = 0u; - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + checkResult = KeepCouplinkRouteSecOccCheck(routeId, &devId, &devState);; + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -5238,6 +5495,7 @@ UINT8 OpenLeadRouteLogicProcess(UINT16 const routeId) /* ȡ־ */ UINT8 const zxqFlag = GetRouteZongQuXiaoFlag(routeId); UINT8 const zrjFlag = GetRouteZongRenJieFlag(routeId); + UINT8 cFuncSwitch = FUNC_SWITCH_ON; /*·Ƿſ*/ /* ȡ۳Ƿرźű־ */ @@ -5273,9 +5531,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; @@ -5364,7 +5626,7 @@ UINT8 OpenLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /* */ - checkResult = OpenBlocRouteSwitchCheck(routeId, functionId, sendLevel); + checkResult = OpenLeadRouteSwitchCheck(routeId, functionId, sendLevel); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -5411,7 +5673,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 +5762,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), @@ -5629,7 +5900,7 @@ UINT8 KeepLeadRouteLogicProcess(UINT16 const routeId) if (CI_SUCCESS == reResult) { /* */ - checkResult = KeepRouteSwitchCheck(routeId, functionId, sendLevel); + checkResult = KeepLeadRouteSwitchCheck(routeId, functionId, sendLevel); if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -5725,7 +5996,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 +6104,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 +6125,6 @@ UINT8 RouteFirstSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId) returnRouteLockTime = GetRouteLockStartCycNum(routeId); /*۳·ʱ*/ backRouteLockTime = GetRouteLockStartCycNum(belongRouteID); - chRouteLevel = GetRouteLevel(routeId); if(CI_SUCCESS == reResult) { @@ -5916,18 +6196,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 +6280,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 +6693,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,9 +6734,11 @@ 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; + UINT8 chRoutCouplinkFlag = 0U; + UINT8 chCoupResult = 0U; + UINT8 chOverlapLaborUnlockSetState = 0U; /*˹״̬*/ localCiId = GetSystemParaLocalCiId(); SetOverlapCanLaborUnlockFlag(overlapLockedId,CANNOT_LABOR_UNLOCK_OVERLAP);/*ÿò˹*/ @@ -6510,40 +6773,30 @@ 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; + } } } -#if 0 if (CI_SUCCESS == reResult) { - /* ڵ߼Դֻһгȡ޳ռ */ - checkResult = OverlapLogicSectionTrainCheck(overlapLockedId, &wTmpTrainId); - - if (checkResult == CI_SUCCESS) - { - /* ͨ */ - *pTrainId = wTmpTrainId; - reResult = CI_SUCCESS; - } - else - { - /* ʧܷ */ - reResult = CI_ERROR; - *overlapId = overlapLockedId; - - } - } -#endif - - if (CI_SUCCESS == reResult) - { - /*·״̬Сҽ·һΡδա*/ + /*·һΡδա + շ෴ + ռãӳٽͣȽ + δռãҽ·ξա*/ devId = GetRouteLastPhySectionId(routeId); devState = GetPhySecLockState(devId); @@ -6563,196 +6816,194 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN {/*˵·շ·ķͬ*/ if (GetPhySecCurMergeState(devId) == SECTION_OCCUPY_YES) { - utOrCtOccFlag = GetPhySecPreOccState(devId); /*ȡCTUTռ״̬*/ - functionSwitchFlag = GetCiFunctionSwitchConfig(UNLOCK_OVERLAP_SWITCH_CONF); - /*ͣȽεʱʱ飺ͨųռü45sʱͨųռü180sʱ*/ - if (LOGICSECTION_OCCUPY_UT == utOrCtOccFlag) - {/*ǰΪͨųռãABL45sʱABL180S RC16.0*/ - chABLFlag = GetPhySecABLTrainFlag(devId); - if ((tmpRouteBelongCiId == localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ - {/*ʱνΪϵͳ*/ - if (PHYSICAL_SECTION_ABLOCCUPY_YES != chABLFlag) - { - overlapUnLockCount = (UINT16)GetSystemParaProtSecUnlockCyc(); - } - else - { - /*ABLCTʱ*/ - overlapUnLockCount = (UINT16)GetSystemParaCtProtSecUnlockCyc(); - } - } - else if ((tmpRouteBelongCiId != localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + chRoutCouplinkFlag = GetRouteCouplinkFlag(routeId); + if (ROUTE_COUPLINK_FLAG_YES == chRoutCouplinkFlag) + { + /*ȡZCҽ*/ + chCoupResult = GetRouteCoupResult(routeId); + if ((ROUTE_COUPLINK_RESULT_SUCCESS == chCoupResult) && (PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag)) { - if (PHYSICAL_SECTION_ABLOCCUPY_YES != chABLFlag) - { - overlapUnLockCount = GetOtherCIRouteOvlpUTUnlockCnt(routeId); - } - else - { - /*ABLCTʱ*/ - overlapUnLockCount = GetOtherCIRouteOverlapCTUnlockCount(routeId); - } - - } - else - { - /*·ڱβڱһѾأݲ*/ - - } - - relyonStartCycNum = CalculaOverlapUnlockStartCycNum(overlapLockedId, devId);/*ʼʱ*/ - - - secStopTimeState = SystemOverTimeCheck(relyonStartCycNum, overlapUnLockCount); - if (((PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) && (CI_TIME_IN == secStopTimeState)) || (CI_TIME_OUT == secStopTimeState)) - {/*δʱյͣϢǵʱʱ*/ + /*ҳɹ,ͣȣֱӽ*/ reResult = CI_SUCCESS; *overlapId = overlapLockedId; } else { - /*δʱδյͣϢܽ*/ reResult = CI_ERROR; *overlapId = overlapLockedId; } - if (CI_SUCCESS != reResult) - {/*ִе˴˵˹־*/ - - SetOverlapCanLaborUnlockFlag(overlapLockedId, CAN_LABOR_UNLOCK_OVERLAP);/*ÿ˹*/ - - checkResult = CheckOverlapLaborUnlock(overlapLockedId, (UINT32)overlapUnLockCount, relyonStartCycNum); - if (CI_SUCCESS == checkResult) - { - reResult = CI_SUCCESS; - } - else - { - /*reResultʲôҲ*/ - } - } } - else if (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag) - {/*ǰΪͨųռã180sʱ*/ - - if ((tmpRouteBelongCiId == localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ - {/*ʱνΪϵͳ*/ - overlapUnLockCount = (UINT16)GetSystemParaCtProtSecUnlockCyc(); - } - else if ((tmpRouteBelongCiId != localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + else + { + chOverlapLaborUnlockSetState = GetOverlapLaborUnlockSetState(overlapLockedId); + if (LABOR_UNLOCK_OVERLAP_YES == chOverlapLaborUnlockSetState) { - overlapUnLockCount = GetOtherCIRouteOverlapCTUnlockCount(routeId); + /*˹Զ*/ + reResult = CI_ERROR; + *overlapId = overlapLockedId; } else { - /*·ڱβڱһѾأݲ*/ - - /*·ڱβڱһѾأݲ*/ - } - - /*ͨųҪ鳵ZC͵ͣϢͣ򲻽*/ - relyonStartCycNum = CalculaOverlapUnlockStartCycNum(overlapLockedId, devId);/*ʼʱ*/ - secStopTimeState = SystemOverTimeCheck(relyonStartCycNum, overlapUnLockCount); - if (FUNC_SWITCH_ON == functionSwitchFlag) - { - if (PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) - {/*CTΣյͣϢ*/ - reResult = CI_SUCCESS; - *overlapId = overlapLockedId; - - } - else - { - /*δʱδյͣϢܽ*/ - if (CI_TIME_OUT == secStopTimeState) - { - /*ʱʱZC/IVOC뱣ν*/ - cRcWorkMode = GetLocalRcWorkMode(); - if (RC_WORK_MODE_TIOC == cRcWorkMode) + utOrCtOccFlag = GetPhySecPreOccState(devId); /*ȡCTUTռ״̬*/ + functionSwitchFlag = GetCiFunctionSwitchConfig(UNLOCK_OVERLAP_SWITCH_CONF); + /*ͣȽεʱʱ飺ͨųռü45sʱͨųռü180sʱ*/ + if (LOGICSECTION_OCCUPY_UT == utOrCtOccFlag) + {/*ǰΪͨųռãABL45sʱABL180S RC16.0*/ + chABLFlag = GetPhySecABLTrainFlag(devId); + if ((tmpRouteBelongCiId == localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + {/*ʱνΪϵͳ*/ + if (PHYSICAL_SECTION_ABLOCCUPY_YES != chABLFlag) { - reResult = GetNearstVBTCTrainToOverlap(routeId, pTrainId); /*Ѱӽεг*/ - if (CI_SUCCESS == reResult) - { - cIvocUnlockOverlapFlag = GetOverlapIvocAllowUnlockFlag(overlapLockedId); /*ȡгͬα־*/ - if (IVOC_ALLOW_UNLOCK_OVERLAP_YES == cIvocUnlockOverlapFlag) - { - reResult = CI_SUCCESS; /*ͬسɹ*/ - } - else - { - reResult = CI_UNLOCK_OVERLAP_REQURE; /*ͬ*/ - } - } - else - { - reResult = CI_ERROR; - } + overlapUnLockCount = (UINT16)GetSystemParaProtSecUnlockCyc(); } else { - reResult = CI_UNLOCK_OVERLAP_REQURE; /*ZC*/ + /*ABLCTʱ*/ + overlapUnLockCount = (UINT16)GetSystemParaCtProtSecUnlockCyc(); + } + } + else if ((tmpRouteBelongCiId != localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + { + if (PHYSICAL_SECTION_ABLOCCUPY_YES != chABLFlag) + { + overlapUnLockCount = GetOtherCIRouteOvlpUTUnlockCnt(routeId); + } + else + { + /*ABLCTʱ*/ + overlapUnLockCount = GetOtherCIRouteOverlapCTUnlockCount(routeId); } + } + else + { + /*·ڱβڱһѾأݲ*/ + + } + + relyonStartCycNum = CalculaOverlapUnlockStartCycNum(overlapLockedId, devId);/*ʼʱ*/ + + + secStopTimeState = SystemOverTimeCheck(relyonStartCycNum, overlapUnLockCount); + if (((PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) && (CI_TIME_IN == secStopTimeState)) || (CI_TIME_OUT == secStopTimeState)) + {/*δʱյͣϢǵʱʱ*/ + reResult = CI_SUCCESS; *overlapId = overlapLockedId; } else { + /*δʱδյͣϢܽ*/ reResult = CI_ERROR; *overlapId = overlapLockedId; } - } + else if (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag) + {/*ǰΪͨųռã180sʱ*/ - } - else if (FUNC_SWITCH_OFF == functionSwitchFlag) - { - if (((PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) && (CI_TIME_IN == secStopTimeState)) || (CI_TIME_OUT == secStopTimeState)) - {/*δʱյͣϢǵʱʱ*/ - reResult = CI_SUCCESS; - *overlapId = overlapLockedId; + if ((tmpRouteBelongCiId == localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + {/*ʱνΪϵͳ*/ + overlapUnLockCount = (UINT16)GetSystemParaCtProtSecUnlockCyc(); + } + else if ((tmpRouteBelongCiId != localCiId) && (overlapBelongCiId == localCiId))/*·ڱұڱ*/ + { + overlapUnLockCount = GetOtherCIRouteOverlapCTUnlockCount(routeId); + } + else + { + /*·ڱβڱһѾأݲ*/ + + /*·ڱβڱһѾأݲ*/ + } + + /*ͨųҪ鳵ZC͵ͣϢͣ򲻽*/ + relyonStartCycNum = CalculaOverlapUnlockStartCycNum(overlapLockedId, devId);/*ʼʱ*/ + secStopTimeState = SystemOverTimeCheck(relyonStartCycNum, overlapUnLockCount); + if (FUNC_SWITCH_ON == functionSwitchFlag) + { + if (PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) + {/*CTΣյͣϢ*/ + reResult = CI_SUCCESS; + *overlapId = overlapLockedId; + + } + else + { + /*δʱδյͣϢܽ*/ + if (CI_TIME_OUT == secStopTimeState) + { + /*ʱʱZC/IVOC뱣ν*/ + cRcWorkMode = GetLocalRcWorkMode(); + if (RC_WORK_MODE_TIOC == cRcWorkMode) + { + reResult = GetNearstVBTCTrainToOverlap(routeId, pTrainId); /*Ѱӽεг*/ + if (CI_SUCCESS == reResult) + { + cIvocUnlockOverlapFlag = GetOverlapIvocAllowUnlockFlag(overlapLockedId); /*ȡгͬα־*/ + if (IVOC_ALLOW_UNLOCK_OVERLAP_YES == cIvocUnlockOverlapFlag) + { + reResult = CI_SUCCESS; /*ͬسɹ*/ + } + else + { + reResult = CI_UNLOCK_OVERLAP_REQURE; /*ͬ*/ + } + } + else + { + reResult = CI_ERROR; + } + } + else + { + reResult = CI_UNLOCK_OVERLAP_REQURE; /*ZC*/ + } + + *overlapId = overlapLockedId; + } + else + { + reResult = CI_ERROR; + *overlapId = overlapLockedId; + } + + } + + } + else if (FUNC_SWITCH_OFF == functionSwitchFlag) + { + if (((PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) && (CI_TIME_IN == secStopTimeState)) || (CI_TIME_OUT == secStopTimeState)) + {/*δʱյͣϢǵʱʱ*/ + reResult = CI_SUCCESS; + *overlapId = overlapLockedId; + } + else + { + /*δʱδյͣϢܽ*/ + reResult = CI_ERROR; + *overlapId = overlapLockedId; + } + } + else + { /*ô*/ + reResult = CI_ERROR; + *overlapId = overlapLockedId; + } } else { - /*δʱδյͣϢܽ*/ + /*г͹*/ reResult = CI_ERROR; *overlapId = overlapLockedId; } } - else - { /*ô*/ - reResult = CI_ERROR; - *overlapId = overlapLockedId; - } - if (CI_SUCCESS != reResult) - {/*ִе˴˵˹־*/ - - SetOverlapCanLaborUnlockFlag(overlapLockedId, CAN_LABOR_UNLOCK_OVERLAP);/*ÿ˹*/ - - checkResult = CheckOverlapLaborUnlock(overlapLockedId, (UINT32)overlapUnLockCount, relyonStartCycNum); - if (CI_SUCCESS == checkResult) - { - reResult = CI_SUCCESS; - } - else - { - /*reResultʲôҲ*/ - } - *overlapId = overlapLockedId; - } - } - else - { - /*г͹*/ - reResult = CI_ERROR; - *overlapId = overlapLockedId; - } - } else { - phySecSum = GetRoutePhysicalSectionSum(routeId); - /*·ֻһΣҸαǰһ· Խ*/ - if ((PHYSICAL_SECTION_LOCK_PROTECT == devState)&&(1U== phySecSum)) + /*·״̬Ϊգɽ*/ + chProtectCheck = RouteAllSecProtectLockCheck(routeId); + + if (CI_SUCCESS == chProtectCheck) { reResult = CI_SUCCESS; *overlapId = overlapLockedId; @@ -6762,7 +7013,6 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN /*һν·յδռãԽ*/ /*ڴ˴˹ձ־ӡ¼*/ SetOverlapAtsOrlaborLockCmdFlag(overlapLockedId, LOCK_OVERLAP_CMD_NO);/*˹ձ־ʹ´ռʱռʼʱΪԶʱοʱ*/ - SetlaborUnlockStartCycNum(overlapLockedId, 0u);/*˹ʼڣ֤ZCLEUͱν*/ reResult = CI_ERROR; *overlapId = overlapLockedId; } @@ -6775,40 +7025,29 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN *overlapId = overlapLockedId; } } -#if 0 - if ((routeState == ROUTE_STATE_IDLE) && (devState == PHYSICAL_SECTION_LOCK_NO)) + + if (CI_SUCCESS != reResult) { - /* ֱӽ */ - reResult = CI_SUCCESS; + /*ִе˴˵˹־*/ + + SetOverlapCanLaborUnlockFlag(overlapLockedId, CAN_LABOR_UNLOCK_OVERLAP);/*ÿ˹*/ + + checkResult = CheckOverlapLaborUnlock(overlapLockedId); + if (CI_SUCCESS == checkResult) + { + reResult = CI_SUCCESS; + SetOverlapPreLoaborUnlockState(overlapLockedId, PRO_PRE_LABOR_UNLOCK_STATE_YES); + } + else + { + /*reResultʲôҲ*/ + } *overlapId = overlapLockedId; - } else { - /*յһͣ*/ - if (((secStopFlag == PHYSICAL_SECTION_STOPSTEADY_YES)&&(secStopTimeState == CI_TIME_IN)) - || (PHYSICAL_SECTION_LOCK_NO == secLockState)) - {/*δʱյͣȣ*/ - - reResult = CI_SUCCESS; - *overlapId = overlapLockedId; - } - else if (secStopTimeState == CI_TIME_OUT) - {/*Ƿյͣȣʱ*/ - - reResult = CI_SUCCESS; - *overlapId = overlapLockedId; - - } - else - {/**/ - - reResult = CI_ERROR; - *overlapId = overlapLockedId; - - } + ; /*ֱӽ*/ } -#endif } return reResult; @@ -6837,7 +7076,6 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId) UINT8 relayState = 0u; /*̵ɼ״̬*/ /*Ϸͼ*/ UINT8 sendLevel = ESEND_LEVEL_ATS; /*ATS*/ - UINT8 chRouteLevel = 0U; UINT8 cRouteType = 0U; /*·*/ /**/ @@ -6910,19 +7148,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)) { /*ȡ̵Чȡ̵ɼ״̬Ϊ*/ @@ -8075,7 +8302,11 @@ UINT8 SetBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT8 devState = 0u; /*豸״̬*/ UINT8 funcSwitch = 0u; /*ܿ*/ + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ funcSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY); @@ -8121,7 +8352,15 @@ UINT8 SetBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) } else { - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel)) + { + /*ҽ·ռü*/ + checkResult = SetCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } if (checkResult == CI_SUCCESS) { /* ͨ */ @@ -8129,10 +8368,19 @@ UINT8 SetBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + if (0U == devId) + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_COUPLINK_ROUTE_IDLE, 0U, sendLevel); + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + } /* ʧܷ */ reResult = CI_ERROR; + } } } @@ -8280,9 +8528,11 @@ UINT8 SetReverseRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLeve UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ UINT8 funcSwitch = 0u; /*ܿ*/ - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; funcSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY); - + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ /* ߼ */ @@ -8327,16 +8577,34 @@ UINT8 SetReverseRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLeve } else { - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); - if (checkResult == CI_SUCCESS) + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) && (ROUTE_LEVEL_CBTC == chRouteLevel)) + { + /*ҽ·ռü*/ + checkResult = SetCouplinkRouteSecOccCheck(routeId, &devId, &devState); + + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (CI_SUCCESS == checkResult) { /* ͨ */ reResult = CI_SUCCESS; } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + if (0U == devId) + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_COUPLINK_ROUTE_IDLE, 0U, sendLevel); + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + } + /* ʧܷ */ reResult = CI_ERROR; } @@ -8542,9 +8810,10 @@ UINT8 SetBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ UINT8 chConnetCheckFunc = 0U; + UINT8 cSndSideProFuncSwitch = 0U; /*ܿ*/ chConnetCheckFunc = GetCiFunctionSwitchConfig(FUNC_SETROUTE_CONNECT_CHECK); /*ȡǷҪĿ*/ - + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ /* ߼ */ /*·еδ*/ @@ -8612,18 +8881,24 @@ UINT8 SetBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(routeId, &devId, &devState); - if (CI_SUCCESS == checkResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ڶΪֶ֧ʱŽв*/ + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + /**/ } } else @@ -8699,28 +8974,34 @@ UINT8 SetBlocRouteSwitchCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) reResult = CI_ERROR; } - if (CI_SUCCESS == reResult) + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) { - /*·λȷλòȷɶ*/ - devId = 0u; - devState = 0u; - checkResult = RouteRelProSwiPosAndMovValCheck(routeId,sendLevel); - if ((CI_SUCCESS == checkResult) || (RETURN_LOCK_ERR_WAIT_SWCHECK == checkResult)) - { - /* ͨ */ - reResult = CI_SUCCESS; - } - else - { - /* ʧܷ */ - reResult = CI_ERROR; - } + /*ֶ֧ʱλúͿɶ*/ } else { - reResult = CI_ERROR; + if (CI_SUCCESS == reResult) + { + /*·λȷλòȷɶ*/ + devId = 0u; + devState = 0u; + checkResult = RouteRelProSwiPosAndMovValCheck(routeId, sendLevel); + if ((CI_SUCCESS == checkResult) || (RETURN_LOCK_ERR_WAIT_SWCHECK == checkResult)) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + reResult = CI_ERROR; + } } - } else { @@ -8754,7 +9035,7 @@ UINT8 SetCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT8 funcSwitch = 0u; /*ܿ*/ UINT8 CiFunctionJLock = 0u; /*ǷԾձ־*/ UINT8 cRcWorkMode = 0u; - + UINT8 chRouteCouplinkFlag = 0U; /* RCģʽ */ cRcWorkMode = GetLocalRcWorkMode(); @@ -8790,20 +9071,52 @@ UINT8 SetCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) { if (RC_WORK_MODE_CI == cRcWorkMode) { - devId = GetRouteInFirstLogSecId(routeId); - devState = GetLogSecCurOccupyState(devId); - if (devState == SECTION_OCCUPY_NO) + devId = 0U; + devState = 0U; + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + checkResult = SetCouplinkRouteSecOccCheck(routeId,&devId,&devState); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + } + else + { + if (0U == devId) + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_COUPLINK_ROUTE_IDLE, 0U, sendLevel); + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + } + /* ʧܷ */ + reResult = CI_ERROR; + + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); - /* ʧܷ */ - reResult = CI_ERROR; + devId = GetRouteInFirstLogSecId(routeId); + devState = GetLogSecCurOccupyState(devId); + if (devState == SECTION_OCCUPY_NO) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + /* ʧܷ */ + reResult = CI_ERROR; + } } + + } else if(RC_WORK_MODE_TIOC == cRcWorkMode) { @@ -9285,6 +9598,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 +9637,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 +9648,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; } @@ -9502,7 +9827,8 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel) UINT8 chReadyEnterRouteTrainSum = 0U; UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U }; UINT8 rcWorkMode = GetLocalRcWorkMode(); - + UINT8 chRouteCouplinkFlag = 0U; + UINT8 chRouteLevel = 0U; pRoutePhySecData = GetRouteSectionData(routeId); routePhyNum = GetRoutePhysicalSectionSum(routeId); curCycle = Get2oo2CurCycleNum(); @@ -9519,12 +9845,20 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel) routeOutLastLogSecId = GetSignalOutFirstLogSec(startSignalId); routeOutLastLogSecState = GetLogSecCurCtOrUtOccupyState(routeOutLastLogSecId);/*ȡ·ⷽһ߼ռ״̬*/ crossState = GetSignalCrossState(startSignalId); - + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + chRouteLevel = GetRouteLevel(routeId); /*ȡ·ල*/ if (SIGNAL_CROSS_STATE_NO == crossState) { /*δѹ*/ - checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); - + if ((ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)&&(ROUTE_LEVEL_CBTC == chRouteLevel)) + { + checkResult = KeepCouplinkRouteSecOccCheck(routeId, &devId, &devState); + } + else + { + checkResult = RouteAllSecOccuClearCheck(routeId, &devId, &devState); + } + if (CI_SUCCESS == checkResult) { /*ȫ,ͨ飬ź*/ @@ -9698,8 +10032,7 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /*źŻ*/ UINT16 startSignalId = 0u; UINT8 signalCrossState = 0u; - - + UINT8 chRouteCouplinkFlag = 0U; /* ߼ */ /* ·δ */ @@ -9749,24 +10082,54 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ·ʼźŻδѹڷһ߼ΡС*/ startSignalId = GetRouteStartSignalId(routeId); - devId = GetRouteInFirstLogSecId(routeId); - devState = GetLogSecCurOccupyState(devId); + + devId = 0U; + devState = 0U; signalCrossState = GetSignalCrossState(startSignalId); + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ if (SIGNAL_CROSS_STATE_NO == signalCrossState) { - if (devState == SECTION_OCCUPY_NO) + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) { - /* ͨ */ - reResult = CI_SUCCESS; + /*ҽ·ռü*/ + reResult = SetCouplinkRouteSecOccCheck(routeId,&devId,&devState); + if (CI_SUCCESS == reResult) + { + /* ͨ */ + } + else + { + if (0U == devId) + { + SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_COUPLINK_ROUTE_IDLE, 0U, sendLevel); + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_MERGY_OCU_STATE, devState, sendLevel); + } + /* ʧ */ + reResult = CI_ERROR; + } } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, devState, sendLevel); - /* ʧ */ - reResult = CI_ERROR; + devId = GetRouteInFirstLogSecId(routeId); + devState = GetLogSecCurOccupyState(devId); + if (devState == SECTION_OCCUPY_NO) + { + /* ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, devState, sendLevel); + /* ʧ */ + reResult = CI_ERROR; + } } - + } else { @@ -10015,7 +10378,7 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) UINT16 outPhySecId = 0U; /*·ⷽһ*/ UINT8 outPhySecState = 0U; UINT8 cLocalCiType = 0U; /**/ - + UINT8 chRouteCouplinkFlag = 0U; /* ߼ */ /* ·δ */ @@ -10065,44 +10428,62 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) /* ·ʼźŻδѹ ǣ·ⷽΡСڷһ߼Ρռá*/ startSignalId = GetRouteStartSignalId(routeId); - devId = GetRouteInFirstLogSecId(routeId); - devState = GetLogSecCurOccupyState(devId); - LogSecCurCtOrUtOcc = GetLogSecCurCtOrUtOccupyState(devId); - preLogDevState = GetLogSecPreCtOrUtOccupyState(devId); + signalCrossState = GetSignalCrossState(startSignalId); if (SIGNAL_CROSS_STATE_NO == signalCrossState) { - if (!((SECTION_OCCUPY_NO == devState) && (LOGICSECTION_OCCUPY_CT == preLogDevState))) - { /*ǣڷһ߼εǰС֮ǰռCT˵Ѿһ߼ΣֻҪδһ߼Σȿѹ*/ - if (LOGICSECTION_OCCUPY_UT != LogSecCurCtOrUtOcc) - { - /*ֻеΪCTռѹͿʱֹUT쳣ռѹ ͨ */ - reResult = CI_SUCCESS; - } - else + devId = 0U; + devState = 0U; + chRouteCouplinkFlag = GetRouteCouplinkFlag(routeId); /*ȡ·ұ־*/ + if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) + { + reResult = KeepCouplinkRouteSecOccCheck(routeId,&devId,&devState); + if (CI_ERROR == reResult) { /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, LogSecCurCtOrUtOcc, sendLevel); - reResult = CI_ERROR; /*UTռѹ쳣*/ + SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, SECTION_OCCUPY_YES, devState, sendLevel); } - } else { - outPhySecId = GetSignalOutFirstPhySecId(startSignalId); /*źŻⷽһID*/ - outPhySecState = GetPhySecCurMergeState(outPhySecId); - /*·ⷽһδռ״̬رź(CTг׷٣ǰʻʱֶδ·룬ɵһ쳣壬źŻرյij)*/ - if (SECTION_OCCUPY_YES == outPhySecState) - { - reResult = CI_SUCCESS; + devId = GetRouteInFirstLogSecId(routeId); + devState = GetLogSecCurOccupyState(devId); + LogSecCurCtOrUtOcc = GetLogSecCurCtOrUtOccupyState(devId); + preLogDevState = GetLogSecPreCtOrUtOccupyState(devId); + if (!((SECTION_OCCUPY_NO == devState) && (LOGICSECTION_OCCUPY_CT == preLogDevState))) + { /*ǣڷһ߼εǰС֮ǰռCT˵Ѿһ߼ΣֻҪδһ߼Σȿѹ*/ + if (LOGICSECTION_OCCUPY_UT != LogSecCurCtOrUtOcc) + { + /*ֻеΪCTռѹͿʱֹUT쳣ռѹ ͨ */ + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, LogSecCurCtOrUtOcc, sendLevel); + reResult = CI_ERROR; /*UTռѹ쳣*/ + } + } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, devState, sendLevel); - reResult = CI_ERROR; + outPhySecId = GetSignalOutFirstPhySecId(startSignalId); /*źŻⷽһID*/ + outPhySecState = GetPhySecCurMergeState(outPhySecId); + /*·ⷽһδռ״̬رź(CTг׷٣ǰʻʱֶδ·룬ɵһ쳣壬źŻرյij)*/ + if (SECTION_OCCUPY_YES == outPhySecState) + { + reResult = CI_SUCCESS; + } + else + { + /* ¼ */ + SetErrorData(functionId, CI_DEVICE_TYPE_LOGICSEC, devId, ETYPE_LOGSEC_OCC_STATE, devState, sendLevel); + reResult = CI_ERROR; + } } + } + } else { @@ -10557,7 +10938,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 +10971,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 +11265,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 +11281,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 +11356,6 @@ void RouteLgcSecResUnlockProcess(const UINT16 wRouteId) chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId); wTrainId = GetLogSecTrainIdByIndex(wUnlockLgcSecId, 0); - chLogicTrainRetrunStt = GetLogSecTrainReturnState(wUnlockLgcSecId, wTrainId); } else { @@ -11016,21 +11371,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(); @@ -11212,11 +11552,11 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId) UINT8 chNeedKeepSum = 0U; UINT16* routeLogIdBuf = NULL; LogicTrainResStruct * pstTrainResInfo = NULL; - LogicSectionDataStruct *pstLgcSecInfo = NULL; + LogicSectionDataStructCC *pstLgcSecInfo = NULL; /*ȡ·߼*/ routeLogNum = GetRouteLogSectionSum(wRouteId); routeLogIdBuf = GetRouteLogSectionIdBuf(wRouteId); - pstLgcSecInfo = GetLogicSecData(); + pstLgcSecInfo = GetLogicSecDataCC(); if ((0u < routeLogNum) && (MAX_ROUTE_IN_LT_NUM > routeLogNum) @@ -11304,15 +11644,15 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId) } } } + /* * 鱣˹Ƿִ * ˵ const UINT16 overlapId, ID -* const UINT32 dwOverlapUnlockCount Զ -* const UINT32 dwOverlapUnlockStartCyc Զʼ * ֵ CI_SUCCESS:ɹ CI_ERROR:ʧ +* edit cgh 20250928 */ -UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId, const UINT32 dwOverlapUnlockCount, const UINT32 dwOverlapUnlockStartCyc) +UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId) { UINT8 rtVal = CI_ERROR; UINT8 OverlapLaborUnlockSetState = 0u; @@ -11336,17 +11676,7 @@ UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId, const UINT32 dwOverlapUnlo } else { - /*޸ȱYF0083-1554ʱ*/ - cTimeCheckFlag = SystemOverTimeCheck(dwOverlapUnlockStartCyc, dwOverlapUnlockCount); - - if (CI_TIME_OUT == cTimeCheckFlag) - { - rtVal = CI_SUCCESS; /*Զʱ䳬ʱ1ɹ*/ - } - else - { - rtVal = CI_ERROR; - } + rtVal = CI_ERROR; } } else @@ -11375,12 +11705,10 @@ UINT32 CalculaOverlapUnlockStartCycNum(const UINT16 overlapId,const UINT16 phySe UINT32 OverlaplockSucessStartCycNum = 0u; UINT32 phyOccuStartCycNum = 0u; - - atsOrlaborLockCmdFlag = GetOverlapAtsOrlaborLockCmdFlag(overlapId); OverlaplockSucessStartCycNum = GetOverlaplockSucessStartCycNum(overlapId); phyOccuStartCycNum = GetSecUtOrCtOccuStartCycNum(phySecId); - if(LOCK_OVERLAP_CMD_YES == atsOrlaborLockCmdFlag)/*վ̨ռõ£˹ջATSձ*/ + if(LOCK_OVERLAP_CMD_YES == atsOrlaborLockCmdFlag)/*վ̨ռõATSձ˹*/ { if((0u ATS*/ diff --git a/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.c b/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.c index 960b224..ad4febd 100644 --- a/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.c +++ b/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.c @@ -15,7 +15,8 @@ -NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ*/ +NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ*/ +NonAutoReturnDataStructCC NonReturnDataStruCC[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ-*/ /* * ȡ۷ݽṹָ @@ -28,6 +29,16 @@ NonAutoReturnDataStruct* GetNonReturnData(void) return NonReturnDataStru; } +/* +* ȡ۷ݽṹָ- +* ˵ +* ֵ + NonAutoReturnDataStruct * +*/ +NonAutoReturnDataStruct* GetNonReturnDataCC(void) +{ + return NonReturnDataStruCC; +} /* * ȡָIDԶ۷ťгID * ˵ const UINT16 autoReturnId, Զ۷ID @@ -41,7 +52,7 @@ UINT16 GetNonRtnCmdSetTrainId(const UINT16 nonReturnId) bufIndex = GetNonReturnBufIndex(nonReturnId); if (bufIndex < NON_AUTO_RETURN_SUM_MAX) { - trainId = NonReturnDataStru[bufIndex].cmdSetTrainId; + trainId = NonReturnDataStruCC[bufIndex].cmdSetTrainId; } else { @@ -64,7 +75,7 @@ void SetNonRtnCmdSetTrainId(const UINT16 nonReturnId,const UINT16 trainId) if (bufIndex < NON_AUTO_RETURN_SUM_MAX) { - NonReturnDataStru[bufIndex].cmdSetTrainId = trainId; + NonReturnDataStruCC[bufIndex].cmdSetTrainId = trainId; } else { diff --git a/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.h b/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.h index 1b73ce9..d27c89e 100644 --- a/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.h +++ b/TSCP/src/APP/ciapp/NonAutoReturn/NonAutoReturnDataManage.h @@ -35,15 +35,21 @@ typedef struct S_RtnRelayAdhesionStruct /*ԶԶ۷ݽṹ*/ typedef struct S_NonAutoReturnDataStruct { - UINT16 cmdSetTrainId; /*гID (ֶ̬)*/ UINT8 IndicatorDevID; /*ָʾ豸ID*/ UINT8 VobcToCIAutoRtnIndicFlashState; /*ظ۷ָʾ״̬*/ UINT8 VobcToCIAutoRtnIndicSteadyState; /*ظ۷ָʾȵ״̬*/ RtnRelayAdhesionStruct RtnRelayAdhesionState; /*۷̵ճ״̬*/ } NonAutoReturnDataStruct; -extern NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ*/ +/*ԶԶ۷ݽṹ-*/ +typedef struct S_NonAutoReturnDataStructCC +{ + UINT8 IndicatorDevID; /*ָʾ豸ID*/ + UINT16 cmdSetTrainId; /*гID (ֶ̬)*/ +} NonAutoReturnDataStructCC; +extern NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ*/ +extern NonAutoReturnDataStructCC NonReturnDataStruCC[NON_AUTO_RETURN_SUM_MAX]; /*Զ۷̬ṹ-*/ /* * ȡָIDԶ۷ťгID * ˵ const UINT16 autoReturnId, Զ۷ID @@ -51,6 +57,13 @@ extern NonAutoReturnDataStruct NonReturnDataStru[NON_AUTO_RETURN_SUM_MAX]; /* * >0: Զ۷ťָʾƼ̵ID */ UINT16 GetNonRtnCmdSetTrainId(const UINT16 nonReturnId); +/* +* ȡ۷ݽṹָ- +* ˵ +* ֵ + NonAutoReturnDataStruct * +*/ +NonAutoReturnDataStruct* GetNonReturnDataCC(void); /* * ȡ۷ݽṹָ diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c index 4a5e981..672dbe6 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.c @@ -872,4 +872,123 @@ UINT8 GetOverlapProSwitchPos(const UINT16 wOverlapId, const UINT16 wProSwitchId) } return cRetVal; -} \ No newline at end of file +} + +/* +* ȡָ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; +} + +/* +* ȡָβ +* ˵ const UINT16 wRouteId, ·ID +* ֵ ز +*/ +SideProtecGroupStru GetOverlapSideProtecGroupData(const UINT16 wOverlapId) +{ + SideProtecGroupStru cRetVal = { 0u }; + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetOverlapConfigBufIndex(wOverlapId); /*ȡ±*/ + + if (OVERLAP_SUM_MAX > bufIndex) + { + cRetVal = OverlapConfigDataStru[bufIndex].SideProtecGroupData; + } + else + { + /*޴*/ + } + + return cRetVal; +} + +/* +* ȡָķλ +* ˵ const UINT16 wOverlapId, ID +* const UINT16 wSwitchId ID +* +* ֵ 12Ϊλ,0u Ƿֵ +* +*/ +UINT8 GetOverlapThisPortecSwitchPos(const UINT16 wOverlapId, const UINT16 wSwitchId) +{ + UINT8 chRetVal = 0U; + UINT16 bufIndex = 0U; + UINT8 i = 0u; + + bufIndex = GetOverlapConfigBufIndex(wOverlapId); /*ȡ±*/ + + if (OVERLAP_SUM_MAX > bufIndex) + { + for (i = 0u; i < OverlapConfigDataStru[bufIndex].ProtectSwitchSum; i++) + { + if (OverlapConfigDataStru[bufIndex].ProtectSwitchStru[i].ProtectSwitchId == wSwitchId) + { + chRetVal = OverlapConfigDataStru[bufIndex].ProtectSwitchStru[i].ProtectPosition; + break; + } + } + } + else + { + /**/ + } + + if ((SWITCH_POSITION_DINGWEI == chRetVal) || (SWITCH_POSITION_FANWEI == chRetVal)) + { + /*Уͨ*/ + } + else + { + chRetVal = 0u; + } + + return chRetVal; +} + diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h index ff1eace..d70301a 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Overlap/OverlapConfigDataManage.h @@ -19,7 +19,7 @@ #include "CommonTypes.h" #include "../System/CiSystemDefine.h" #include "../System/SystemParameterManage.h" - +#include "RouteConfigDataManage.h" #ifdef __cplusplus @@ -72,7 +72,9 @@ typedef struct S_OverlapConfigDataStruct UINT16 OverlapRouteSum; /*ν·*/ UINT16 OverlapRouteIdBuf[OVERLAP_ROUTE_SUM_MAX]; /*ν·*/ UINT16 AxisSecFarId; /*Զ˼ID*/ - + UINT16 wOverlapThisZhaoChaRelayId; /*αղ̵ID*/ + UINT16 wOverlapThatZhaoChaRelayId; /*ζԶղ̵ID*/ + SideProtecGroupStru SideProtecGroupData; /*β*/ } OverlapConfigDataStruct; extern OverlapConfigDataStruct OverlapConfigDataStru[OVERLAP_SUM_MAX]; /*OVERLAPýṹ,cgh-ϲCID-2539-1˴гʼͳһŵInitAllStaticDataStrнгʼΪں˹*/ @@ -373,6 +375,36 @@ 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); +/* +* ȡָβ +* ˵ const UINT16 wRouteId, ·ID +* ֵ ز +*/ +SideProtecGroupStru GetOverlapSideProtecGroupData(const UINT16 wOverlapId); +/* +* ȡָķλ +* ˵ const UINT16 wOverlapId, ID +* const UINT16 wSwitchId ID +* +* ֵ 12Ϊλ,0u Ƿֵ +* +*/ +UINT8 GetOverlapThisPortecSwitchPos(const UINT16 wOverlapId, const UINT16 wSwitchId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c index f636446..9ee364a 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c +++ b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.c @@ -14,8 +14,8 @@ -OverlapDataStruct OverlapDataStru[OVERLAP_SUM_MAX]; /*OVERLAPݽṹ*/ - +OverlapDataStruct OverlapDataStru[OVERLAP_SUM_MAX]; /*OVERLAPݽṹ*/ +OverlapDataStructCC OverlapDataStruCC[OVERLAP_SUM_MAX]; /*OVERLAPݽṹ-*/ /* @@ -28,7 +28,16 @@ OverlapDataStruct *GetOverlapData(void) { return OverlapDataStru; } - +/* +* ȡָID- +* ˵ +* ֵ + OverlapDataStructCC * +*/ +OverlapDataStructCC* GetOverlapDataCC(void) +{ + return OverlapDataStruCC; +} /* * ȡָID·ID * ˵ const UINT16 overlapId, ID @@ -51,7 +60,7 @@ UINT16 GetOverlapBelongRouteId(const UINT16 overlapId) /* -* ָIDʼں +* ָID· * ˵ const UINT16 overlapId, ID * const UINT16 belongRouteId, · * ֵ @@ -82,6 +91,8 @@ void SetOverlapRelateProtSwLockSta(const UINT16 overlapId, const UINT8 lockComma UINT16 protectSwitchId = 0u; /*ID*/ UINT8 overlapProtectSwitchSum = 0u; /*Ŀ*/ OverlapProtectSwitchStruct* overlapProtectSwitchStru = NULL; /**/ + UINT8 cSwitchCurPos = 0U; + UINT8 cFuncRet = CI_ERROR; overlapProtectSwitchSum = GetOverlapRelatedProtSwitSum(overlapId); /*ȡĿ*/ overlapProtectSwitchStru = GetOverlapRelatedProtSwitStru(overlapId); /*ȡ*/ @@ -107,17 +118,27 @@ void SetOverlapRelateProtSwLockSta(const UINT16 overlapId, const UINT8 lockComma for (ii= 0u; ii < overlapProtectSwitchSum; ii++) { protectSwitchId = overlapProtectSwitchStru[ii].ProtectSwitchId; - SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP,overlapId,protectSwitchId, lockCommand); /*õ״̬*/ - /*RC 13.0.0 ޣ˫һ*/ + cSwitchCurPos = GetSwitchCurPosition(protectSwitchId); + cFuncRet = checkSwtLastValDrvPosStayorNot(protectSwitchId, overlapProtectSwitchStru[ii].ProtectPosition); + if ((SWITCH_LOCK_PROTECT_CANCEL == lockCommand) + || ((SWITCH_LOCK_PROTECT_SET == lockCommand) && (cSwitchCurPos == overlapProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet))) + { + SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP, overlapId, protectSwitchId, lockCommand); /*õ״̬*/ + /*RC 13.0.0 ޣ˫һ*/ #if 0 - if (SWITCH_TYPE_DOUBLE == GetSwitchType(protectSwitchId)) - { /*˫*/ - SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP,overlapId,GetDSwitchOtherId(protectSwitchId), lockCommand); /*õ ״̬*/ + if (SWITCH_TYPE_DOUBLE == GetSwitchType(protectSwitchId)) + { /*˫*/ + SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP, overlapId, GetDSwitchOtherId(protectSwitchId), lockCommand); /*õ ״̬*/ + } + else + { + } +#endif } else { + /*ڷλûڷʱ÷*/ } -#endif } } else @@ -265,7 +286,7 @@ void SetOverlapUnlockApplyFlag(const UINT16 overlapId, const UINT8 overlapUnlock * ȡָIDгID * ˵const UINT16 overlapId, ID * ֵ 0 ȡʧ -* гID0x14 +* гID0x10 */ UINT16 GetOverlapUnlockApplyTrainId(const UINT16 overlapId) { @@ -276,7 +297,7 @@ UINT16 GetOverlapUnlockApplyTrainId(const UINT16 overlapId) if (bufIndex < OVERLAP_SUM_MAX) { - reVal = OverlapDataStru[bufIndex].wOverlapUnlockApplyTrainId; + reVal = OverlapDataStruCC[bufIndex].wOverlapUnlockApplyTrainId; } return reVal; } @@ -285,7 +306,7 @@ UINT16 GetOverlapUnlockApplyTrainId(const UINT16 overlapId) /* * ָIDгID * ˵ const UINT16 overlapId, ID -* const UINT16 wTrainIdгID0x14 +* const UINT16 wTrainIdгID0x10 * ֵ * */ @@ -297,7 +318,7 @@ void SetOverlapUnlockApplyTrainId(const UINT16 overlapId, const UINT16 wTrainId) if (bufIndex < OVERLAP_SUM_MAX) { - OverlapDataStru[bufIndex].wOverlapUnlockApplyTrainId = wTrainId; + OverlapDataStruCC[bufIndex].wOverlapUnlockApplyTrainId = wTrainId; } } @@ -622,7 +643,7 @@ void SetReqIvocUnlockStartCycNum(const UINT16 overlapId, const UINT32 reqIvocUnl if (bufIndex < OVERLAP_SUM_MAX) { - OverlapDataStru[bufIndex].dwReqIvocUnLockStartCycNum = reqIvocUnlockStartCycNum; /*˹ʼں*/ + OverlapDataStruCC[bufIndex].dwReqIvocUnLockStartCycNum = reqIvocUnlockStartCycNum; /*˹ʼں*/ } } @@ -641,7 +662,7 @@ UINT32 GetReqIvocUnlockStartCycNum(const UINT16 overlapId) if (bufIndex < OVERLAP_SUM_MAX) { - reVal = OverlapDataStru[bufIndex].dwReqIvocUnLockStartCycNum; /*˹ʼں*/ + reVal = OverlapDataStruCC[bufIndex].dwReqIvocUnLockStartCycNum; /*˹ʼں*/ } return reVal; } @@ -661,7 +682,7 @@ void SetOverlapIvocAllowUnlockFlag(const UINT16 overlapId, const UINT8 overlapIv if ((bufIndex < OVERLAP_SUM_MAX) && ((IVOC_ALLOW_UNLOCK_OVERLAP_YES == overlapIvocUnlockFlag) || (IVOC_ALLOW_UNLOCK_OVERLAP_NO == overlapIvocUnlockFlag))) { - OverlapDataStru[bufIndex].cIvocAllowUnlockFlag = overlapIvocUnlockFlag; + OverlapDataStruCC[bufIndex].cIvocAllowUnlockFlag = overlapIvocUnlockFlag; } else { @@ -685,7 +706,7 @@ UINT8 GetOverlapIvocAllowUnlockFlag(const UINT16 overlapId) if (bufIndex < OVERLAP_SUM_MAX) { - reVal = OverlapDataStru[bufIndex].cIvocAllowUnlockFlag; + reVal = OverlapDataStruCC[bufIndex].cIvocAllowUnlockFlag; } else { @@ -975,4 +996,159 @@ UINT8 GetOverlapProSwtCheckStartFlag(const UINT16 wOverlapId) } return cRetVal; +} + +/* +* ȡָID֮ǰ˹״̬ +* ˵ const UINT16 overlapId, ID +* ֵ 0: ȡʧ +* >0:֮ǰ˹״̬ +* BY CGH 20250928 +*/ +UINT8 GetOverlapPreLoaborUnlockState(const UINT16 overlapId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetOverlapConfigBufIndex(overlapId); /*ȡ±*/ + + if (bufIndex < OVERLAP_SUM_MAX) + { + reVal = OverlapDataStru[bufIndex].chPreLaborUnlockState; + } + else + { + ; + } + + return reVal; +} + + +/* +* ָID֮ǰ˹״̬ +* ˵ const UINT16 overlapId, ID +* const UINT8 chPreLaborUnlockState, ֮ǰ˹״̬ +* ֵ void +* by cgh 20250928 +*/ +void SetOverlapPreLoaborUnlockState(const UINT16 overlapId, const UINT8 chPreLaborUnlockState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetOverlapConfigBufIndex(overlapId); /*ȡ±*/ + + if ((bufIndex < OVERLAP_SUM_MAX) + && ((PRO_PRE_LABOR_UNLOCK_STATE_YES == chPreLaborUnlockState) + || (PRO_PRE_LABOR_UNLOCK_STATE_NO == chPreLaborUnlockState))) + { + OverlapDataStru[bufIndex].chPreLaborUnlockState = chPreLaborUnlockState; /*ýʼں*/ + } + else + { + ; + } +} + +/* +* · +* ˵ const UINT16 wOverlapId ·ID +* ֵ CI_SUCCESS н· +* CI_ERROR ڽ·ǿ +* by cgh 20250928 +*/ +UINT8 OverlapLockRouteCheck(const UINT16 wOverlapId) +{ + UINT8 chReval = CI_ERROR; + UINT16 dwOverlapRouteSum = 0U; /*ν·Ŀ*/ + UINT16* pOverlapRouteBuf = NULL; /*ν·*/ + UINT16 jj = 0U; + UINT8 chRouteState = 0U; /*·״̬*/ + UINT8 chFlag = 0U; /*־*/ + + if ((0U < wOverlapId) && (OVERLAP_SUM_MAX > wOverlapId)) + { + dwOverlapRouteSum = GetOverlapRouteIdSum(wOverlapId); + pOverlapRouteBuf = GetOverlapRouteIdBuf(wOverlapId); + + if ((NULL != pOverlapRouteBuf)) + { + for (jj = 0U; jj < dwOverlapRouteSum; jj++) + { + chRouteState = GetRouteState(pOverlapRouteBuf[jj]); + + if ((ROUTE_STATE_IDLE != chRouteState)) + { + chFlag = 1U; + break; + } + else + { + ; + } + } + + if (0U == chFlag) + { + chReval = CI_SUCCESS; + } + else + { + ; /*ڲеĽ·*/ + } + } + else + { + ; + } + } + else + { + ; + } + + return chReval; +} + +/* +* ָIDιͣ׼ͣ״̬ +* ˵const UINT16 overlapId ID +* const UINT8 chSetFlag ñ־ +* ֵ +*/ +void SetOverlapBelPhyStopSteadyFlag(const UINT16 wOverlapId, const UINT8 chSetFlag) +{ + UINT16 wOverlopBelRouteId = 0U; /*·ID*/ + UINT8 chRoutePhySecSum = 0U; /*·Ŀ*/ + RoutePhysicalSectionStruct* szRoutePhySecData = NULL; /*·νṹ*/ + + if ((0U < wOverlapId) && (wOverlapId < OVERLAP_SUM_MAX) + && ((PHYSICAL_SECTION_STOPSTEADY_NO == chSetFlag) || (PHYSICAL_SECTION_STOPSTEADY_YES == chSetFlag))) + { + wOverlopBelRouteId = GetOverlapBelongRouteId(wOverlapId); + + if (0U != wOverlopBelRouteId) + { + chRoutePhySecSum = GetRoutePhysicalSectionSum(wOverlopBelRouteId); + szRoutePhySecData = GetRouteSectionData(wOverlopBelRouteId); + + if (NULL != szRoutePhySecData) + { + /*óͣ״̬*/ + SetPhySecStopSteadyFlagCC(szRoutePhySecData[chRoutePhySecSum - 1U].PhysicalSectionId, chSetFlag); + } + else + { + ; + } + } + else + { + /*·*/ + } + } + else + { + /**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.h b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.h index 047fc02..2c8457e 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.h +++ b/TSCP/src/APP/ciapp/Overlap/OverlapDataManage.h @@ -35,9 +35,6 @@ typedef struct S_OverlapDataStruct UINT32 UnlockStartCycNum; /*νʼں (ֶ̬)*/ UINT32 XuanPaiStartCycNum; /*ѡſʼں(ֶ̬)*/ UINT8 OverlapUnlockApplyFlag; /*ZCν־20181105*/ - UINT16 wOverlapUnlockApplyTrainId;/* 뱣νгID0x14*/ - UINT32 dwReqIvocUnLockStartCycNum; /*ʼں*/ - UINT8 cIvocAllowUnlockFlag; /*гα־0xAAͬ0x55ͬ*/ UINT8 OverlapCanLaborUnlockFlag;/*ο˹־*/ UINT8 OverlapLaborUnlockSetState;/*˹״̬*/ UINT32 laborUnlockStartCycNum;/*˹ʼں*/ @@ -48,10 +45,20 @@ typedef struct S_OverlapDataStruct UINT8 OverlapFromSetRouteCmdFlag;/*ɽ·ʱı־*/ UINT8 cProSwitchCheckResultFlag; /*־0xFFĬֵ0x55ʧܣ0xAAɹ*/ UINT8 cProSwitchCheckStartFlag; /*鿪ʼ־0x55鿪ʼ0xAAֹͣ*/ + UINT8 chPreLaborUnlockState; /*֮ǰ˹״̬*/ } OverlapDataStruct; +/*ݽṹ*/ +typedef struct S_OverlapDataStructCC +{ + UINT16 OverlapId; /*ID (ʼֶ)*/ + UINT16 wOverlapUnlockApplyTrainId; /*뱣νгID0x10*/ + UINT32 dwReqIvocUnLockStartCycNum; /*ʼں*/ + UINT8 cIvocAllowUnlockFlag; /*гα־0xAAͬ0x55ͬ*/ +}OverlapDataStructCC; /*******************************ȫֱ*******************************/ extern OverlapDataStruct OverlapDataStru[OVERLAP_SUM_MAX]; /*OVERLAPݽṹ*/ +extern OverlapDataStructCC OverlapDataStruCC[OVERLAP_SUM_MAX]; /*OVERLAPݽṹ-*/ /* * ȡָID * ˵ @@ -59,6 +66,19 @@ extern OverlapDataStruct OverlapDataStru[OVERLAP_SUM_MAX]; /* OverlapDataStruct * */ OverlapDataStruct *GetOverlapData(void); +/* +* ȡָID- +* ˵ +* ֵ + OverlapDataStructCC * +*/ +/* +* ȡָID- +* ˵ +* ֵ + OverlapDataStructCC * +*/ +OverlapDataStructCC* GetOverlapDataCC(void); /* * ȡָID·ID @@ -138,7 +158,7 @@ void SetOverlapUnlockApplyFlag(const UINT16 overlapId, const UINT8 overlapUnlock * ȡָIDгID * ˵const UINT16 overlapId, ID * ֵ 0 ȡʧ -* гID0x14 +* гID0x10 */ UINT16 GetOverlapUnlockApplyTrainId(const UINT16 overlapId); @@ -146,7 +166,7 @@ UINT16 GetOverlapUnlockApplyTrainId(const UINT16 overlapId); /* * ָIDгID * ˵ const UINT16 overlapId, ID -* const UINT16 wTrainIdгID0x14 +* const UINT16 wTrainIdгID0x10 * ֵ * */ @@ -360,6 +380,41 @@ void SetOverlapProSwtCheckStartFlag(const UINT16 wOverlapId, const UINT8 cCheckS */ UINT8 GetOverlapProSwtCheckStartFlag(const UINT16 wOverlapId); +/* +* ȡָID֮ǰ˹״̬ +* ˵ const UINT16 overlapId, ID +* ֵ 0: ȡʧ +* >0:֮ǰ˹״̬ +* BY CGH 20250928 +*/ +UINT8 GetOverlapPreLoaborUnlockState(const UINT16 overlapId); + +/* +* ָID֮ǰ˹״̬ +* ˵ const UINT16 overlapId, ID +* const UINT8 chPreLaborUnlockState, ֮ǰ˹״̬ +* ֵ void +* by cgh 20250928 +*/ +void SetOverlapPreLoaborUnlockState(const UINT16 overlapId, const UINT8 chPreLaborUnlockState); + +/* +* · +* ˵ const UINT16 wOverlapId ·ID +* ֵ CI_SUCCESS н· +* CI_ERROR ڽ·ǿ +* by cgh 20250928 +*/ +UINT8 OverlapLockRouteCheck(const UINT16 wOverlapId); + +/* +* ָIDιͣ׼ͣ״̬ +* ˵const UINT16 overlapId ID +* const UINT8 chSetFlag ñ־ +* ֵ +*/ +void SetOverlapBelPhyStopSteadyFlag(const UINT16 wOverlapId, const UINT8 chSetFlag); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Overlap/OverlapDefine.h b/TSCP/src/APP/ciapp/Overlap/OverlapDefine.h index 3c87018..d90cf4c 100644 --- a/TSCP/src/APP/ciapp/Overlap/OverlapDefine.h +++ b/TSCP/src/APP/ciapp/Overlap/OverlapDefine.h @@ -72,6 +72,10 @@ #define PROSWITCH_CHECK_START_VALID ((UINT8)0x55) /*ʼ*/ #define PROSWITCH_CHECK_START_INVALID ((UINT8)0xAA) /*ֹͣ*/ +/*֮ǰ˹־*/ +#define PRO_PRE_LABOR_UNLOCK_STATE_YES ((UINT8)0x55) /*֮ǰɹ˹*/ +#define PRO_PRE_LABOR_UNLOCK_STATE_NO ((UINT8)0xAA) /*֮ǰδ˹*/ + #define OVERLAP_USING_OVERTIME_CYC_NUM 10U /*óʱ*/ #endif diff --git a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c index 06913d6..296273c 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c +++ b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.c @@ -1041,4 +1041,121 @@ UINT8 CheckPsdBelSendRange(const UINT16 wCheckPsdId) } return retVal; -} \ No newline at end of file +} + +/* +* ȡָ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; +} +/* +* ȡָIDż̵ID +* ˵ const UINT16 doorId, ID +* ֵ 0: ȡʧ +* >0: ż̵ID +*/ +UINT16 GetThreeGroupPsdOpenDrvRelayId(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT16 retVal = 0u; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdConfigDataStru[bufIndex].OpenThreeEditGroupDriveRelayId; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* ȡָIDٴοż̵ID2 +* ˵ const UINT16 doorId, ID +* ֵ 0: ȡʧ +* >0: ٴοż̵ID +*/ +UINT16 GetPsdReOpenRelayId2(const UINT16 doorId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdConfigDataStru[bufIndex].doorReopenRelayId2; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* ȡָIDŰESB +* ˵ const UINT16 doorId, ID +* ֵ ESB ID +*/ +UINT16* GetPsdIncloudeEsbIdBuf(const UINT16 psdId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT16* retVal = NULL; + + bufIndex = GetPsdConfigBufIndex(psdId); /*ȡ±*/ + + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdConfigDataStru[bufIndex].IncloudeEsbIdBuf; + } + else + { + retVal = NULL; + } + return retVal; +} + +/* +* ȡָIDŰESB +* ˵ const UINT16 doorId, ID +* ֵ ESB ID +*/ +UINT8 GetPsdIncloudeEsbNum(const UINT16 psdId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = NULL; + + bufIndex = GetPsdConfigBufIndex(psdId); /*ȡ±*/ + + if (PSD_SUM_MAX > bufIndex) + { + retVal = PsdConfigDataStru[bufIndex].IncloudeEsbNum; + } + else + { + retVal = NULL; + } + return retVal; +} diff --git a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h index aca7c84..94dec37 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h +++ b/TSCP/src/APP/ciapp/PSD/PSDConfigDataManage.h @@ -39,6 +39,7 @@ typedef struct S_PsdConfigDataStruct UINT16 MutualLockRelayId; /*̵ID (ֶ)*/ UINT16 wMutualLockRelayId2; /*̵ID2(ֶ) ˹*/ UINT16 CloseDriveRelayId; /*ż̵ID (ֶ)*/ + UINT16 OpenThreeEditGroupDriveRelayId; /*ŵ̵(ֶ)*/ UINT16 OpenFourEditGroupDriveRelayId; /*ıŵ̵(ֶ)*/ UINT16 OpenSixEditGroupDriveRelayId; /*ŵ̵(ֶ)*/ UINT16 OpenEightEditGroupDriveRelayId; /*򿪰˱ŵ̵(ֶ)*/ @@ -46,6 +47,7 @@ typedef struct S_PsdConfigDataStruct UINT16 wDoorStateRelayId2; /*ſɼ̵ID2(ֶ) ˹*/ UINT16 wRelayDoorButtonId; /*ٹŰť̵*/ UINT16 doorReopenRelayId; /*վ̨ٴοż̵*/ + UINT16 doorReopenRelayId2; /*վ̨ٴοż̵2*/ UINT16 departureConfirmRelayId; /*ȷϼ̵*/ UINT16 detectStartRelayId; /*̵̽*/ UINT16 detectStopRelayId; /*̵ֹͣ̽*/ @@ -64,6 +66,12 @@ typedef struct S_PsdConfigDataStruct UINT16 wPcbIndicatorRelayId; /*ٹŰťָʾƼ̵*/ UINT16 wVideoQkLight1RelayId; /*ͰťƵָʾ1̵̣*/ UINT16 wVideoQkLight2RelayId; /*ͰťƵָʾ2죩̵*/ + UINT16 wPsdFstProLinkId; /*ŷlink1ID*/ + UINT16 wPsdSndProLinkId; /*ŷlink2ID*/ + UINT16 wPsdTrdProLinkId; /*ŷlink3ID*/ + UINT8 chPsdControlType; /*ſ*/ + UINT16 IncloudeEsbIdBuf[PSD_INCLUDE_ESB_NUM]; /*ŰESB ID*/ + UINT8 IncloudeEsbNum; /*ESB*/ } PsdConfigDataStruct; @@ -411,6 +419,38 @@ 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); +/* +* ȡָIDż̵ID +* ˵ const UINT16 doorId, ID +* ֵ 0: ȡʧ +* >0: ż̵ID +*/ +UINT16 GetThreeGroupPsdOpenDrvRelayId(const UINT16 doorId); +/* +* ȡָIDٴοż̵ID2 +* ˵ const UINT16 doorId, ID +* ֵ 0: ȡʧ +* >0: ٴοż̵ID +*/ +UINT16 GetPsdReOpenRelayId2(const UINT16 doorId); +/* +* ȡָIDŰESB +* ˵ const UINT16 doorId, ID +* ֵ ESB ID +*/ +UINT8 GetPsdIncloudeEsbNum(const UINT16 psdId); +/* +* ȡָIDŰESB +* ˵ const UINT16 doorId, ID +* ֵ ESB ID +*/ +UINT16* GetPsdIncloudeEsbIdBuf(const UINT16 psdId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c index b15470a..7eb2bbf 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.c +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.c @@ -11,8 +11,10 @@ #include "PSDDataManage.h" #include "../ParsePack/ParsePackDefine.h" +#include "ESBDataManage.h" -PsdDataStruct PsdDataStru[PSD_SUM_MAX]; /*ݽṹ*/ +PsdDataStruct PsdDataStru[PSD_SUM_MAX] = { 0U }; /*ݽṹ*/ +PsdDataStructCC PsdDataStruCC[PSD_SUM_MAX] = { 0U }; /*峵ݽṹ*/ /* * ȡָID @@ -24,6 +26,16 @@ PsdDataStruct *GetPsdData(void) return PsdDataStru; } +/* +* ȡָIDCC +* ˵ +* ֵŶ̬ +*/ +PsdDataStructCC* GetPsdDataCC(void) +{ + return PsdDataStruCC; +} + /* * ȡָIDŻ״̬ * ˵ const UINT16 doorId, ID @@ -519,6 +531,9 @@ void ResetPsdData(const UINT16 psdId) PsdDataStru[bufIndex].PsdDriveState=PSD_DRIVE_STATE_INVALID; PsdDataStru[bufIndex].PsdPreDriveState=PSD_DRIVE_STATE_INVALID; + + SetPsdVobcCmdCC(psdId,0u, PSD_DEFAULT_CONTROL_CMD,0u); + SetPsdEditGroupInfoDataCC(psdId, PSD_EDIT_GROUP_DEFAULT); /*RCPSDϢΪĬֵ*/ } else { @@ -1443,14 +1458,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 +1482,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 +1547,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 +1559,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 +2524,596 @@ UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId) retVal = CI_ERROR; } return retVal; -} \ No newline at end of file +} + +/* +* ָ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 + { + /**/ + } +} + +/* +* ȡָIDűϢCC +* ˵const UINT16 doorId, ID +* ֵ0 ޱϢ +* 3 +* 4 ı +* 6 +* 8 ˱ +* Created By LQ 2025.11.05 +*/ +UINT16 GetPsdEditGroupInfoDataCC(const UINT16 doorId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStruCC[bufIndex].psdEditGroupInfo; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָIDűϢCC +* ˵const UINT16 doorId, ID +* const UINT16 wPsdEditGroupInfo űϢ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPsdEditGroupInfoDataCC(const UINT16 doorId, const UINT16 wPsdEditGroupInfo) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + if ((PSD_THREE_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_FOUR_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_SIX_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EIGHT_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EDIT_GROUP_DEFAULT == wPsdEditGroupInfo)) + { + PsdDataStruCC[bufIndex].psdEditGroupInfo = wPsdEditGroupInfo; /*FAOӿ*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡPSDVOBCCC +* ˵const UINT16 doorId,ID +* ֵ0x00-Ĭֵ +* 0x55-PSD +* 0xAA-رPSD +* 0xFF-ѯPSD +* Created By LQ 2025.11.05 +*/ +UINT8 GetPsdVobcCmdCC(const UINT16 doorId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 ctrlCmd = PSD_DEFAULT_CONTROL_CMD; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + ctrlCmd = PsdDataStruCC[bufIndex].PsdCmd; + } + else + { + ctrlCmd = PSD_DEFAULT_CONTROL_CMD; + } + + return ctrlCmd; +} + +/* +* ȡǰƸPSDVOBCıCC +* ˵ const UINT16 doorId,ID +* ֵ VOBC ID +* Created By LQ 2025.11.05 +*/ +UINT16 GetPsdVobcIdCC(const UINT16 doorId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 vobcId = 0U; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + vobcId = PsdDataStruCC[bufIndex].SrcVobcId; + } + else + { + vobcId = 0U; + } + + return vobcId; +} + +/* +* øPSDĿCC +* ˵const UINT16 doorId,ID +* ֵPSDĿ +* Created By LQ 2025.11.05 +*/ +UINT32 GetPsdCmdSetCycleCC(const UINT16 doorId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT32 setCycle = 0U; + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + setCycle = PsdDataStruCC[bufIndex].CmdSetCycle; + } + else + { + setCycle = 0U; + } + + return setCycle; +} + +/* +* PSDVOBCCC +* ˵const UINT16 doorId ID +* const UINT16 vobcId ŵVOBC ID +* const UINT8 operCmd VOBCĿ +* const UINT32 dwCycNum ں +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPsdVobcCmdCC(const UINT16 doorId, const UINT16 vobcId, const UINT8 operCmd, const UINT32 dwCycNum) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + if ((PSD_DEFAULT_CONTROL_CMD == operCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDOPEN == operCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDCLOSE == operCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDCHECK_FAOHLHT == operCmd)) + { + if (PsdDataStruCC[bufIndex].SrcVobcId == vobcId) + { + PsdDataStruCC[bufIndex].PsdCmd = operCmd; + } + else + { + /*һVOBCʼţ֮ǰVOBCŲĽиλ*/ + PsdDataStruCC[bufIndex].SrcVobcId = vobcId; + PsdDataStruCC[bufIndex].PsdCmd = operCmd; + } + PsdDataStruCC[bufIndex].CmdSetCycle = dwCycNum; + } + else + { + /*Ƿ*/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDűϢCC +* ˵const UINT16 doorId, ID +* ֵ0 ޱϢ +* 3 +* 4 ı +* 6 +* 8 ˱ +*/ +UINT16 GetPsdEditGroupInfoData(const UINT16 doorId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16 retVal = CI_ERROR; + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + retVal = PsdDataStru[bufIndex].psdEditGroupInfo; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָIDűϢ +* ˵const UINT16 doorId, ID +* const UINT16 wPsdEditGroupInfo űϢ +* ֵ +*/ +void SetPsdEditGroupInfoData(const UINT16 doorId, const UINT16 wPsdEditGroupInfo) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetPsdConfigBufIndex(doorId); /*ȡ±*/ + + if (bufIndex < PSD_SUM_MAX) + { + if ((PSD_THREE_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_FOUR_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_SIX_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EIGHT_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EDIT_GROUP_DEFAULT == wPsdEditGroupInfo)) + { + PsdDataStru[bufIndex].psdEditGroupInfo = wPsdEditGroupInfo; /*FAOӿ*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} diff --git a/TSCP/src/APP/ciapp/PSD/PSDDataManage.h b/TSCP/src/APP/ciapp/PSD/PSDDataManage.h index 8012e33..b665f1d 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDataManage.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDataManage.h @@ -22,6 +22,7 @@ #include "CommonTypes.h" #include "../System/CiSystemDefine.h" #include "../Relay/RelayConfigDataManage.h" +#include "CiInterfaceDefine.h" #ifdef __cplusplus extern "C" { @@ -81,9 +82,30 @@ 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; +/*ݽṹ*/ +typedef struct S_PsdDataStructCC +{ + UINT16 PsdId; /*ID (ʼֶ)*/ + UINT16 psdEditGroupInfo; /*űϢCC(0-Ĭֵ3-飬4-ı飬6-飬8-˱)*/ + UINT16 SrcVobcId; /*ŵĵǰVOBCCC*/ + UINT8 PsdCmd; /*ŵCC(0x00-Ĭֵ0x55-PSD0xAA-رPSD0xFF-ѯPSD)*/ + UINT32 CmdSetCycle;/*CC*/ +} PsdDataStructCC; + extern PsdDataStruct PsdDataStru[PSD_SUM_MAX]; /*ݽṹ*/ +extern PsdDataStructCC PsdDataStruCC[PSD_SUM_MAX]; /*峵ݽṹ*/ /* * PSDVOBC @@ -159,6 +181,13 @@ void ResetPsdData(const UINT16 psdId); */ PsdDataStruct *GetPsdData(void); +/* +* ȡָIDCC +* ˵ +* ֵŶ̬ +*/ +PsdDataStructCC* GetPsdDataCC(void); + /* * ȡָIDŻ״̬ * ˵ const UINT16 doorId, ID @@ -518,23 +547,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 +901,202 @@ 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); + +/* +* ȡָIDűϢCC +* ˵const UINT16 doorId, ID +* ֵ0 ޱϢ +* 3 +* 4 ı +* 6 +* 8 ˱ +* Created By LQ 2025.11.05 +*/ +UINT16 GetPsdEditGroupInfoDataCC(const UINT16 doorId); + +/* +* ָIDűϢCC +* ˵const UINT16 doorId, ID +* const UINT16 wPsdEditGroupInfo űϢ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPsdEditGroupInfoDataCC(const UINT16 doorId, const UINT16 wPsdEditGroupInfo); + +/* +* ȡPSDVOBCCC +* ˵const UINT16 doorId,ID +* ֵ0x00-Ĭֵ +* 0x55-PSD +* 0xAA-رPSD +* 0xFF-ѯPSD +* Created By LQ 2025.11.05 +*/ +UINT8 GetPsdVobcCmdCC(const UINT16 doorId); + +/* +* ȡǰƸPSDVOBCıCC +* ˵ const UINT16 doorId,ID +* ֵ VOBC ID +* Created By LQ 2025.11.05 +*/ +UINT16 GetPsdVobcIdCC(const UINT16 doorId); + +/* +* øPSDĿCC +* ˵const UINT16 doorId,ID +* ֵPSDĿ +* Created By LQ 2025.11.05 +*/ +UINT32 GetPsdCmdSetCycleCC(const UINT16 doorId); + +/* +* PSDVOBCCC +* ˵const UINT16 doorId ID +* const UINT16 vobcId ŵVOBC ID +* const UINT8 operCmd VOBCĿ +* const UINT32 dwCycNum ں +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPsdVobcCmdCC(const UINT16 doorId, const UINT16 vobcId, const UINT8 operCmd, const UINT32 dwCycNum); + +/* +* ȡָIDűϢCC +* ˵const UINT16 doorId, ID +* ֵ0 ޱϢ +* 3 +* 4 ı +* 6 +* 8 ˱ +*/ +UINT16 GetPsdEditGroupInfoData(const UINT16 doorId); +/* +* ָIDűϢ +* ˵const UINT16 doorId, ID +* const UINT16 wPsdEditGroupInfo űϢ +* ֵ +*/ +void SetPsdEditGroupInfoData(const UINT16 doorId, const UINT16 wPsdEditGroupInfo); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/PSD/PSDDefine.h b/TSCP/src/APP/ciapp/PSD/PSDDefine.h index 6ba3aaa..acda5b9 100644 --- a/TSCP/src/APP/ciapp/PSD/PSDDefine.h +++ b/TSCP/src/APP/ciapp/PSD/PSDDefine.h @@ -67,15 +67,36 @@ #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) /*ı*/ #define PSD_SIX_EDIT_GROUP_FAO_YF ((UINT8)0x02U) /**/ /*űϢ*/ -#define PSD_FOUR_EDIT_GROUP ((UINT8)0x04U) /*ı*/ -#define PSD_SIX_EDIT_GROUP ((UINT8)0x06U) /**/ -#define PSD_EIGHT_EDIT_GROUP ((UINT8)0x08U) /*˱*/ +#define PSD_EDIT_GROUP_DEFAULT ((UINT16)0x00U) /*Ĭֵ*/ +#define PSD_THREE_EDIT_GROUP ((UINT16)0x03U) /**/ +#define PSD_FOUR_EDIT_GROUP ((UINT16)0x04U) /*ı*/ +#define PSD_SIX_EDIT_GROUP ((UINT16)0x06U) /**/ +#define PSD_EIGHT_EDIT_GROUP ((UINT16)0x08U) /*˱*/ /*ijվ·źŹرǷŴ֮ǰı־*/ #define PSD_OPEN_BEFORE_SIG_CLOSE_YES ((UINT8)0xaaU) /*Ŵ֮ǰźŹر*/ @@ -87,6 +108,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 +197,18 @@ #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) /*ֽ*/ + + +#define PSD_INCLUDE_ESB_NUM ((UINT8)10U) /*ESB*/ #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h index fe2683b..760305f 100644 --- a/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h +++ b/TSCP/src/APP/ciapp/ParsePack/CiInterfaceDefine.h @@ -135,9 +135,6 @@ #define ATS_CMD_ROUTE_APPLY ((UINT8)0x92) /*·*/ #define ATS_CMD_ROUTE_APPLY_CANCLE ((UINT8)0x93) /*ȡ·*/ #define ATS_CMD_ROUTE_PART_APPLY ((UINT8)0x94) /*벿·*/ -#define ATS_CMD_ROUTE_PART_APPLY_CANCEL ((UINT8)0x95) /*ȡ벿·*/ -#define ATS_CMD_AUTO_RETURN_SET_ONE ((UINT8)0x96) /*Զ۷һЧ*/ -#define ATS_CMD_AUTO_RETURN_CMD_CANCEL ((UINT8)0x97) /*ȡԶ۷*/ #define ATS_CMD_SET_PHYSEC_ERR ((UINT8)0x98) /*ιռ*/ #define ATS_CMD_CANCEL_PHYSEC_FIRST ((UINT8)0x99) /*ιռȡһ*/ #define ATS_CMD_CANCEL_PHYSEC_SECOND ((UINT8)0x9a) /*ιռȡ*/ @@ -147,7 +144,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) /* ͷȨ*/ @@ -162,6 +162,11 @@ #define SCX_ATS_CMD_ESS_GO_POSITION (UINT8)0x89 /*ESSȥλ*/ #define SCX_ATS_CMD_ESS_STOP_POSITION (UINT8)0x90 /*ESSͣλ*/ #define ATS_CMD_STATION_QK_SET (UINT8)0x91 /*վ̨ͱ־ */ +#define ATS_CMD_EMERG_XS_SET_ONE (UINT8)0xAC /*ýʱһ */ +#define ATS_CMD_EMERG_XS_SET_TWO (UINT8)0xAD /*ýʱٶ */ +#define ATS_CMD_EMERG_XS_CANCEL_ONE (UINT8)0xAE /*ȡʱһ */ +#define ATS_CMD_EMERG_XS_CANCEL_TWO (UINT8)0xAF /*ȡʱٶ */ +#define ATS_CMD_COUPLING_ROUTE_SET (UINT8)0xB0 /*ҽ· */ /****궨****/ #define CI_CMD_PHYSEC_USING_APPLY ((UINT16)0x0001) /**/ @@ -213,7 +218,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 +250,8 @@ #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_COUPLINK_ROUTE_IDLE ((UINT8)0xAF) /*ҽ·ޱҳ*/ /*źŻϷ*/ #define CI_BACK_SIG_START_OPEN ((UINT8)0x11) /*·ʼźŻ*/ @@ -285,6 +292,7 @@ #define CI_BACK_PSEC_RESET_IN_CT ((UINT8)0x58) /*ḴλCTռ*/ #define UNLOCK_OVELAP_CANNOT (UINT8)0x80 /**/ #define LOCK_OVELAP_OUT_CANNOT (UINT8)0x81 /**/ +#define CI_BACK_PSEC_RESET_ING ((UINT8)0xAE) /*ڼḴλ*/ /*Ϸ*/ #define CI_BACK_SWT_YLOCK_YES ((UINT8)0x31) /**/ @@ -298,7 +306,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 +413,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ϵͳݷͷʶϢ */ @@ -435,15 +452,17 @@ #define CI_BACK_AUTO_ROUTE_HAVE_BLOCK ((UINT8)0x95) /*Զͨ·Զ·ڷ*/ #define CI_BACK_AUTO_ROUTE_FLOOD_STATE_ERR ((UINT8)0x96) /*Զͨ·ڷŲ*/ +#define CI_BACK_AUTO_ROUTE_COUPROUTE_SET ((UINT8)0xB0) /*Զͨҽ·Ѱ*/ + #define CI_BACK_AUTO_RETURN_HAVE_BLOCK ((UINT8)0x98) /*Զ۷·ڷ*/ #define CI_BACK_AUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x99) /*Զ۷·ڷŲ*/ - +#define CI_BACK_AUTO_RETURN_COUPROUTE_SET ((UINT8)0xB1) /*Զ۷ҽ·Ѱ*/ #define CI_BACK_ALLAUTO_RETURN_HAVE_BLOCK ((UINT8)0x9B) /*ȫԶ۷·ڷ*/ #define CI_BACK_ALLAUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x9C) /*ȫԶ۷·ڷŲ*/ - +#define CI_BACK_ALLAUTO_RETURN_COUPROUTE_SET ((UINT8)0xB2) /*ȫԶ۷ҽ·Ѱ*/ #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c index 5e63b4d..6af12de 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c @@ -18,6 +18,8 @@ #include "../IO/OutputDataProcess.h" #include "EnvelopeManageAPI.h" #include "../DataManage/PlatDataManage.h" +#include "HLHTCommonDataPacketHead.h" +#include "HLHTHeadContexManage.h" /*ʹ*/ CommandDataStruct CiRevCmdDataStru[ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX] = {0u}; /*CIṹ*/ @@ -41,6 +43,9 @@ UINT32 FirstCmdId; /* PSCToCiDataStruct* pscCiSendToAtsDataStru = NULL; +ReciveAtsCmdDataCycInfo szReciveAtsCmdDataCycInfo[ATS_SUM_MAX * 2U] = {0U}; /*յATSںϢ*/ +UINT16 gReciveAtsCmdDataDeviceSum = 0U; /*յATS豸Ŀ*/ + /* * CiAts߼Ϣ * ˵ const UINT8* pDataBuf, ݻ @@ -122,284 +127,297 @@ 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); /* * ֡ * ˵ const UINT8* dataBuf, ݻ * const UINT16 dataLength, ݳ +* const UINT8 chDevType 豸 +* const UINT8 chDeciveId 豸ID * ֵ 0: ݽʧ -* 1: ݽɹ -* ޸bug YF0083-210 +* 1: ݽɹ +* edit by cgh 20251104 */ -UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength) +UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const UINT8 chDevType,const UINT8 chDeciveId) { - UINT8 sourceId = 0u; /*ԴID*/ - UINT8 sourceType = 0u; /*Դϵͳ*/ - UINT8 targetId = 0u; /*ĿID*/ - UINT8 targetType = 0u; /*Ŀϵͳ*/ - UINT32 systemTimeH = 0u; /*ϵͳʱ4ֽ*/ - UINT32 systemTimeL = 0u; /*ϵͳʱ4ֽ*/ - UINT16 commandTotalLen = 0u; /*ܳ*/ - UINT16 commandTotalSum = 0u; /**/ - UINT8 commandLenth = 0u; /**/ - UINT16 ii = 0u; - UINT16 jj = 0u; - UINT16 dwIndex = 0u; - UINT32 dataCheckInfo = 0u; /*ݰ汾УϢ*/ - UINT32 interfacePrtclVer = 0u; /*ӿЭ汾ʱԤ*/ - UINT32 emapCrcInfo = 0u; - UINT8 localCiId = 0u; - UINT8 ciEmapCheck = 0u; - UINT8 systemtype = 0u; UINT8 chRetVal = CI_ERROR; - UINT8 chKeepWork = CI_ERROR; - UINT16 preAtsRouteSteCmdNum = 0u; /*ATS·*/ - UINT16 wCmdStartByteNum = 0u;/*У*/ - UINT16 wParseCmdLength = 0u; - UINT8 chLogicSecIndex = 0u; - UINT32 dwHlhtTrainId = 0u;/*ͨг*/ - UINT16 wTrainId = 0;/*гID ֽֽͣڱ*/ - UINT16 logId = 0;/*vobcʱʹö˱ 1-TC1 2-TC2 0-2IPβ೵*/ - UINT8 chCmdType = 0u; - UINT32 dwCmdParam = 0u; - UINT32 dwCmdId = 0u; - UINT16 wTerminalId = 0u; - UINT8 chVirCi = 0u; - UINT8 chLogSecNum = 0u; - UINT8 chToaCmdNum = 0u; - UINT32 dwCmdParam_DevID = 0u; - UINT16 dwCmdParam_Type = 0u; - UINT8 dwCmdParam_Param = 0u; - UINT16 oVerlap_RouteId = 0U; + UINT8 chGalHeadSaved = 0u; /*ͨͷǷѱ־1棻0δ*/ + UINT8 chAtsInterfaceType = 0U; /*ATSӿ*/ + HLHTGALInfoStruct hlhtGalHead = { 0U }; /*ͨͷ*/ + UINT16 ii = 0U; /**/ + UINT8 chHeadReval = CI_ERROR; /*ͨͷ*/ + UINT16 wLocalDevName = 0U; /*豸Ϣ*/ + UINT16 wRemoteDevName = 0U; /*Է豸Ϣ*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId();/*ID*/ + UINT32 dwErrCode = 0U; /*ͨñͷ¼*/ + UINT32 dwCurCycNum = Get2oo2CurCycleNum(); /*ǰں*/ + UINT32 dwCiAndAtsTimeOutTime = 0u; /*ATSͨжʱ*/ + UINT32 dwCiCurappCycleTime = 0u; /*ǰ*/ + INT32 remainValidiy = 0; /*ʣʱǷЧ*/ + UINT16 wApplyDataLenth = 0U; /*Ӧòݳ*/ + UINT16 wTmpDataLen = 0U; /*ݳʱ¼*/ + UINT16 wMsgLen = 0U; /*һӦݳ*/ + UINT16 wMsgType = 0U; /**/ + UINT16 wMsgCheckLen = 0U; /* ڽУݳ */ + UINT8 chExistCmdDataFlag = 0U; /*ݱ־*/ + UINT8 chCurSystemAreaState = 0U; /*ǰϵͳ״̬*/ + UINT32 dwReciveCmdDataAtsCycNum = 0U; /*յATSʱATSں*/ + UINT32 dwSystemUpdateMainUseCycNum = 0U; /*ϵͳʼں*/ if ((NULL!= dataBuf) && (0u < dataLength)) - { - sourceType = dataBuf[ii++]; /*ȡݰԴ豸*/ - sourceId = dataBuf[ii++]; /*ȡݰԴ豸ID*/ - targetType= dataBuf[ii++]; /*ȡݰĿ豸*/ - targetId = dataBuf[ii++]; /*ȡݰĿ豸ID*/ - dataCheckInfo = LongFromChar(&dataBuf[ii]); /*ȡݰ汾УϢ4ֽ*/ - ii += 4u; - /*УϢȽ*/ - ciEmapCheck = GetCiEmapCheckVer(targetId,&emapCrcInfo,sourceType); - if (CI_SUCCESS == ciEmapCheck) - { - chRetVal = CI_SUCCESS; - chKeepWork = CI_SUCCESS; + { + chAtsInterfaceType = GetCiFunctionSwitchConfig(FUNC_ATS_INTERFACE_IDENTIFIER); - if (dataCheckInfo != emapCrcInfo) - { -#if 0 - /*ATSֵطݰ汾УʧϢ*/ - if ((CI_SYSTEM_TYPE_XIANDI == sourceType) || ((CI_SYSTEM_TYPE_ATS == sourceType))) - { - SetCiSendCmdBackInfoData(CI_BACK_DATA_VER_CHECK_FAIL, sourceType, sourceId, 0, 0); - } -#endif - chRetVal = CI_ERROR; - } + if (ATS_INTERFACE_EXIST_GAL != chAtsInterfaceType) + { + /*ݽṹֻϢ*/ + chRetVal = ReciveAtsCmdDeal(dataBuf, &ii, dataLength); } else { - chRetVal = CI_ERROR; - } - if (CI_ERROR != chRetVal) - { - interfacePrtclVer = LongFromChar(&dataBuf[ii]); /*ȡӿЭ汾Ϣ4ֽ*/ - ii += 4u; - systemTimeH = LongFromChar(&dataBuf[ii]); /*ȡϵͳʱ4ֽ*/ - ii += 4u; - systemTimeL = LongFromChar(&dataBuf[ii]); /*ȡϵͳʱ4ֽ*/ - ii += 4u; - commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰܳ*/ - ii += 2u; + /*ݽṹGALͷҴ֡Ϣ֡*/ + /*ͨϢͷ*/ + hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); + ii += 2U; + hlhtGalHead.sourceId = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.destId = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.emapVerCrc = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.crntOwnMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.comPeriod = ShortFromChar(&dataBuf[ii]); + ii += 2U; + hlhtGalHead.recvOppMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.preOwnMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4U; + hlhtGalHead.prtclVer = dataBuf[ii++]; + hlhtGalHead.totalDataLen = ShortFromChar(&dataBuf[ii]); + ii += 2U; - localCiId = GetSystemParaLocalCiId(); - systemtype = Get2oo2SheBeiType(); - if ((targetType != systemtype) || (targetId != localCiId) - || ((CI_SYSTEM_TYPE_XIANDI != sourceType) && (CI_SYSTEM_TYPE_ATS != sourceType))) - {/*ݲϷ*/ - - chKeepWork = CI_ERROR; - } - - if (0u == commandTotalLen) - {/**/ - - chKeepWork = CI_ERROR; - } - - if (CI_ERROR != chKeepWork) + wLocalDevName = (chDevType) * 256U + chDeciveId; + wRemoteDevName = (CI_SYSTEM_TYPE_RCI) * 256U + chLocalCiId; + chHeadReval = HLHTRecvCommonPacketHeadCheck(wLocalDevName, wRemoteDevName, ATS_CI_INTERFACE_INFOTYPE, 1U, &hlhtGalHead, &dwErrCode, 0U, chDevType); + + debug_infor_printf((const)"\nATS/Xiandi %d GAL Check Result:%d errCode:%d\n", chDeciveId, chHeadReval, dwErrCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + + if (HLHT_HEAD_SUCCESS == chHeadReval) { - commandTotalSum = ShortFromChar(&dataBuf[ii]); /*ȡݰ֡*/ - ii += 2u; - if ((0u == commandTotalSum) || (ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX < commandTotalSum)) - {/*Ϊ0*/ + dwCiAndAtsTimeOutTime = GetCiAndAtsTransBadEnsureTime(); + dwCiCurappCycleTime = GetSystemParaAppCycleTime(); + /*ϢʱЧ*/ + remainValidiy = HLHTCommonMsgRemainingValidity(dwCiAndAtsTimeOutTime, dwCurCycNum, dwCiCurappCycleTime, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod); - chRetVal = CI_ERROR; - } - else - { - /** ܳȵЧ*/ - chRetVal = CheckATSorXiandTotalDataLenVal(&dataBuf[ii], commandTotalSum, commandTotalLen); - - } - - if (CI_ERROR != chRetVal) - { - /*ȻȡһǴ洢·*/ - preAtsRouteSteCmdNum = GetCiRevCmdStruCurSum(); - /**/ - for (jj = preAtsRouteSteCmdNum; jj < (commandTotalSum + preAtsRouteSteCmdNum); jj++) + if (remainValidiy > 0) + { + /*Ӧ*/ + if (0u == hlhtGalHead.totalDataLen) { - /*ȫ*/ - if (ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX > jj) - { - commandLenth = dataBuf[ii++];/*ȡ*/ - wCmdStartByteNum = ii; /*Ȳȱ*/ - chCmdType = dataBuf[ii++]; /*ȡ*/ - dwCmdId = LongFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 4u; - dwCmdParam = LongFromChar(&dataBuf[ii]);/*ȡ*/ - ii += 4u; - wTerminalId = ShortFromChar(&dataBuf[ii]);/*ȡնID*/ - ii += 2u; - - oVerlap_RouteId = ShortFromChar(&dataBuf[ii]);/*ȡι·ID*/ - ii += 2U; - - /*Ԥ*/ - ii += 2U; - chVirCi = dataBuf[ii++];/*ID*/ - /*Ԥ*/ - ii++; - - /*¼*/ - dwHlhtTrainId = LongFromChar(&dataBuf[ii]); - ii += 4u; - (void)dquHlhtId2VobcName(dwHlhtTrainId, &wTrainId, &logId);/*4ֽڻͨת2ֽ*/ - - chLogSecNum = dataBuf[ii++];/*߼*/ - /*š豸IDз*/ - dwCmdParam_DevID = dwCmdParam & 0xffff0000u; - dwCmdParam_Type = (UINT16)(dwCmdParam & 0x0000ff00u); - dwCmdParam_Param = (UINT8)(dwCmdParam & 0x000000ffu); /*ӷYF0083-227ȱ޸*/ - if ((0xffffffffu == dwCmdId) || (0xffff0000u == dwCmdParam_DevID)|| - (0x0000ff00u == dwCmdParam_Type)||(0x000000ffu == dwCmdParam_Param)) - { - chRetVal = CI_ERROR; - } - else - { - if ((ATS_CMD_SET_PHYSEC_ERR == chCmdType) - || (ATS_CMD_CANCEL_PHYSEC_FIRST == chCmdType) - || (ATS_CMD_CANCEL_PHYSEC_SECOND == chCmdType) - || (ATS_CMD_TOA_RESET_FIRST == chCmdType) - || (ATS_CMD_TOA_RESET_SECOND == chCmdType)) - { - chToaCmdNum++; - chRetVal = ToaAddCmd(chCmdType, wTrainId, dwCmdId, wTerminalId, chVirCi, dwCmdParam); - if ((CI_SUCCESS == chRetVal) && (0u != chLogSecNum)) - { - chRetVal = CI_ERROR; - } - else - { - ; - } - } - else - { - CiRevCmdDataStru[jj].CommandType = chCmdType; /*ȡ*/ - CiRevCmdDataStru[jj].CommandId = dwCmdId; /*ȡ*/ - CiRevCmdDataStru[jj].CommandParam = dwCmdParam;/*ȡ*/ - CiRevCmdDataStru[jj].termial_id = wTerminalId;/*ȡնID*/ - CiRevCmdDataStru[jj].VirCIid = chVirCi;/*ID*/ - CiRevCmdDataStru[jj].wTrainIdParam = wTrainId; /* гID*/ - CiRevCmdDataStru[jj].OverLapRouteID = oVerlap_RouteId; /* ι·ID*/ - - CiRevCmdDataStru[jj].chLogicSecSum = chLogSecNum;/*߼*/ - if (MAX_ROUTE_IN_LT_NUM > CiRevCmdDataStru[jj].chLogicSecSum) - { - for (chLogicSecIndex = 0u; chLogicSecIndex < CiRevCmdDataStru[jj].chLogicSecSum; chLogicSecIndex++) - { - CiRevCmdDataStru[jj].wLogicSecData[chLogicSecIndex] = ShortFromChar(&dataBuf[ii]);/*߼ID*/ - ii += 2u; - } - } - else - { - /*Խ*/ - chRetVal = CI_ERROR; - } - } - } - if (CI_SUCCESS == chRetVal) - { - /*У*/ - wParseCmdLength = (UINT16)(ii - wCmdStartByteNum); - if (commandLenth != wParseCmdLength) - {/*ȳ*/ - chRetVal = CI_ERROR; - - } - else - { - chRetVal = CI_SUCCESS; - } - } - else - { - ; - } - - if (CI_ERROR == chRetVal) - {/*ݴ󣬶*/ - /*Ȿ*/ - ToaClearCmd(); - commandTotalSum = 0u; - for (dwIndex = preAtsRouteSteCmdNum; dwIndex <= jj; dwIndex++) - { - (void)CommonMemSet(&CiRevCmdDataStru[dwIndex], (UINT32)sizeof(CommandDataStruct), 0u, (UINT32)sizeof(CommandDataStruct)); - } - break; - } - else - { - /*޲*/ - } - - } + /* GALͷϢ */ + chRetVal = CI_ERROR; } - - /**/ - if (CI_SUCCESS == chRetVal) + else if (6u > hlhtGalHead.totalDataLen) { - CiRevCmdStruCurSum = commandTotalSum - chToaCmdNum + preAtsRouteSteCmdNum;/**/ - } - else - { - CiRevCmdStruCurSum = preAtsRouteSteCmdNum;/*ֻ¼ڴ洢*/ - } - - - if (dataLength < ii) - { - CiRevCmdStruCurSum = 0u; + /* ݳȴ,ʧ */ chRetVal = CI_ERROR; } else { - /*޲*/ + chRetVal = CI_SUCCESS; + + while (wTmpDataLen < hlhtGalHead.totalDataLen) + { + /* һӦݳ */ + wMsgLen = ShortFromChar(&dataBuf[ii]); + ii += 2u; + wTmpDataLen += 2U; + wTmpDataLen += wMsgLen; + + if (0u == wMsgLen) + { + ; /* ޴һ */ + } + else + { + /* ȡ */ + wMsgType = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /* Ԥ */ + ii += 2u; + + wMsgCheckLen = wMsgLen - 4u; + switch (wMsgType) + { + case ATS_CI_INFO_TYPE_HEART_STATE: + /* Ϣ */ + ii += wMsgCheckLen; + break; + case ATS_CI_INFO_TYPE_CMD_CONTROL: + /*Ϣ*/ + chCurSystemAreaState = GetLocalCiBackUpPattern(); + if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState) + { + /*ý鵱ǰðǷѾ*/ + dwReciveCmdDataAtsCycNum = GetReciveCmdDataAtsCycNum(chDevType, chDeciveId); + dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum(); + + if ((dwReciveCmdDataAtsCycNum < hlhtGalHead.crntOwnMsgSN) || + (dwSystemUpdateMainUseCycNum <= hlhtGalHead.recvOppMsgSN)) + { + /*ǰATSʱںŴڽյATSʱATSں + ǰATSʱںŴڵڵǰϵͳʼں*/ + chRetVal = ReciveAtsCmdDeal(dataBuf, &ii, wMsgCheckLen); + chExistCmdDataFlag = 1U; /*ôݱ־ЧݽΪЧ*/ + } + else + { + ii += wMsgCheckLen; + /*Ѿһ*/ + debug_infor_printf((const)"\nATS/Xiandi %d Not Deal Cmd,Because curCmd has been processed by another System,dwReciveCmdDataAtsCycNum %d dwSystemUpdateMainUseCycNum %d\n", chDeciveId, dwReciveCmdDataAtsCycNum, dwSystemUpdateMainUseCycNum); + } + } + else + { + ii += wMsgCheckLen; + /*ò*/ + debug_infor_printf((const)"\nATS/Xiandi %d Not Deal Cmd,Because chCurSystemAreaState %d\n", chDeciveId, chCurSystemAreaState); + } + break; + default: + chRetVal = CI_ERROR; + break; + } + } + + if (CI_ERROR == chRetVal) + { + chExistCmdDataFlag = 0U; + break; + } + else + { + ; /*do nothing*/ + } + } + } - LastCmdSourceSysType = sourceType;/*һβԴϵͳ*/ + if (CI_SUCCESS == chRetVal) + { + /*Уݳ*/ + if (hlhtGalHead.totalDataLen != ii - 31U) + { + /* 31ΪӦ֡ͷ */ + chRetVal = CI_ERROR; + + } + } + else + { + ; + } + + if (CI_SUCCESS == chRetVal) + { + /*ݾУ飬Ҫ洢ͨñ*/ + SetHLHTHeadCtxComPeriod(chDevType, chDeciveId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(chDevType, chDeciveId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(chDevType, chDeciveId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(chDevType, chDeciveId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(chDevType, chDeciveId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(chDevType, chDeciveId, 0U); + + chGalHeadSaved = 1U; + + if (1U == chExistCmdDataFlag) + { + UpdateAtsCmdDataCycInfo(chDevType, chDeciveId); + } + else + { + ; /*һյATSں*/ + } + } + else + { + ; + } + } + else + { + chRetVal = CI_ERROR; } - } - + else if (HLHT_HEAD_INIT == chHeadReval) + { + if (dwCurCycNum > 0U)/*жŴ0Ϊ0Ч*/ + { + SetHLHTHeadCtxComPeriod(chDevType, chDeciveId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(chDevType, chDeciveId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(chDevType, chDeciveId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(chDevType, chDeciveId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(chDevType, chDeciveId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(chDevType, chDeciveId, 0U); + + chGalHeadSaved = 1U; + } + + chRetVal = CI_ERROR; + } + else + { + chRetVal = CI_ERROR; + } + + } + + if ((CI_ERROR == chRetVal) && (0u == chGalHeadSaved)) + { + /*ͨͷѾˣִͨͷ򣬳Ҳͨͷ*/ + ClearHlhtHeadCtx(chDevType, chDeciveId); + } + else + { + ; /*do nothing*/ } - } else { @@ -416,794 +434,212 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt * const UINT8 deviceId, ĿϵͳID * const UINT8 targetDevType, Ŀϵͳ * const UINT8 frame,֡ +* UINT8* chSendXiandiorAtsBuf λ׵ַ * ֵ 0: ʧ * 1: ɹ */ -UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, const UINT8 frame) +UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, const UINT8 frame, UINT8* chSendXiandiorAtsBuf) { - UINT8 localCi = 0u; /*ID*/ UINT8 ciToXianDiDataBuffer[CI_TO_ATS_DATA_LEN_MAX] = { 0u }; /*CIֵ֡*/ - UINT16 SendMaskSum = 0u; /*λֽ*/ - UINT16 indicatorId = 0u; /*ʾƱID*/ UINT16 ii = 0u; /*α*/ - UINT16 jj = 0u; /*α*/ - UINT8 kk = 0u; /*α*/ - UINT16 m = 0u; - UINT8 n = 0u; - UINT8 mm = 0U; /*ִеα*/ - UINT16 curIndex = 0u; /*α*/ - UINT8 pscId = 0u; - - UINT8 transmitState = 0u; - UINT8 pscConfirmFlag = 0u; - - UINT32 emapCrcInfo = 0u; /*ݰ汾УCRCϢ*/ - UINT32 interfacePrtclVer = 0u; /*ӿЭ汾ʱԤ*/ - UINT16 deviceSum = 0u; /*豸*/ - UINT8* pDeviceIdBuf = NULL; /*豸ID*/ - - UINT16 ocDeviceSum = 0u;/*OC豸*/ - UINT8* pOcDeviceIdBuf = NULL; /*OC豸ID*/ - UINT16 ocId = 0u; - UINT8 powerAState = 0u;/*AϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ - UINT8 powerBState = 0u;/*BϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ - UINT8 ocDevFaultState = 0u;/*OC豸״̬0x55-忨0xFF-忨*/ - UINT8 fanState = 0u; - UINT8 ciAndOcCommState = 0u;/*ciOCͨ״̬*/ - UINT32 curCycleNum = 0u;/*ǰ*/ - UINT8 psdSum = 0u; - UINT8 psdMutualLockState = 0u; - UINT8 psdCiId = 0u; - UINT8 emapCheckState = 0u; - PSCToCiDataStruct* pscToCiDataStru = GetPscToCiDataStru(); - UINT8 virtualCiNum = 0u; - UINT8 virtualCIid = 0u; - UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); - UINT8 indicatorState = 0u; - UINT16 indicatorNum = 0u; - UINT8 i = 0u; UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; - UINT8 cTiocMode = REVERSE_MODE_SHADOW; - UINT8 cTiocCutReason = 0u; - UINT8 cTiocCutState = REVERSE_CUT_STATE_DEFAULT; - UINT32 dwTrainId = 0u; - UINT8 cLogId = 0u; - UINT8 cFunRetVal = CI_ERROR; - UINT8 ocstionPowerIndic = 0U; + UINT8 chReval = CI_ERROR; + UINT8 chAtsInterfaceType = 0U; /*ATSӿ*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); /*ID*/ + UINT32 dwCiEtcsId = 0U; /*ͨID*/ + UINT32 dwAtsEtcsId = 0U; /*ATSͨID*/ + UINT32 dwEmapCheckVer = 0U; /*ӵͼУ汾*/ + UINT32 dwHlhtHSrcSN = 0U; /*CIݵһͱʱǰSN*/ + UINT32 dwHlhtHRcvSN = 0U; /*CIյʱSN*/ + UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*Ӧں*/ + UINT32 dwAppCycleTime = GetSystemParaAppCycleTime(); /*Ӧ*/ + UINT16 wAppDataLenIndex = 0U; /* Ӧݳλ */ + UINT8 chStepRetVal = CI_ERROR; /**/ + UINT8 chStep = 0U; /*ǰ*/ + UINT16 wMagLen = 0u; /* ݳ */ + UINT16 wMagDataLenIndex = 0U; /* Ϣݳλ */ + UINT16 wAppDataLen = 0u; /* Ӧݳ */ + UINT8 chCurSystemAreaState = 0U; /*ǰϵͳ״̬*/ - UINT8 indicatorDevId = 0U; - UINT16 szEnvelopeIdBuf[ENVELOPE_SUM_MAX] = { 0u }; - UINT16 wEnvelopeSum = 0u; - UINT16 wcomTrainSumIndex = 0u; /*ͨų*/ - UINT16 comTrainSum = 0U; /*ͨųʼΪ0*/ - UINT16 wEnvelopeIndex = 0u; /**/ - InfEnvelopeStruct strEnvelope = { 0u }; /*Ϣؽṹ*/ - UINT16 wEnvelopeId = 0u; - UINT8 chFunRtn = CI_ERROR; - UINT32 dwHLHTTrainID = 0u; /*гͨID*/ - UINT8 chHeadScreStat = 0u; /*гǰɸ־*/ - UINT8 chTailScreStat = 0u; /*гɸ־*/ - UINT8 chVirHeadScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*гǰɸ־*/ - UINT8 chVirTailScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*гɸ־*/ - UINT16 wTrainId = 0u; /*гID*/ - UINT8 chRetVal = CI_ERROR; - UINT8 indicatorType = 0u; /*豸*/ + chAtsInterfaceType = GetCiFunctionSwitchConfig(FUNC_ATS_INTERFACE_IDENTIFIER); - UINT8 wPbNum = 0u; /*ִе*/ - UINT8 hlhtIdFlag = 0U; /*ͨIDǷЧ*/ - OcToATSPlusBox szSendATSPlusBox[MAX_OC_PLUS_BOX_NUM] = { 0U }; /*ATSִеṹϢ*/ - UINT16 wDjqySwitchNum = 0U; /*ǣ*/ - OcToATSSwitchZzjData szSendAtsSwitchZzjData[SWITCH_SUM_MAX] = { 0U }; /*ATSĵӦת޻Ϣ*/ - UINT16 wDjqySwitchIndex = 0U;/*ǣ*/ - UINT8 chSwitchZzjStateIndex = 0U;/*ǣӦת޻״̬*/ - - UINT8 powerANodeState = 0U;/*AϵԴ״̬*/ - UINT8 powerBNodeState = 0U;/*BϵԴ״̬*/ - UINT8 ModeAState = 0U;/*AϵԴģ״̬*/ - UINT8 ModeBState = 0U;/*BϵԴģ״̬*/ - - - localCi = GetSystemParaLocalCiId(); /*ȡID*/ - pscCiSendToAtsDataStru = GetPscToCiDataStru(); /*ȡPsc-CIĽṹ*/ - - curCycleNum = Get2oo2CurCycleNum();/*ȡǰں*/ - - if (CI_ATS_STATION_FRAME == frame) + if (ATS_INTERFACE_EXIST_GAL != chAtsInterfaceType) { - /*ʼӦ֡*/ - ciToXianDiDataBuffer[ii++] = CI_ATS_STATION_FRAME; /*վ״̬֡*/ - ciToXianDiDataBuffer[ii++] = Get2oo2SheBeiType();/*Ͷ豸ID豸*/ - ciToXianDiDataBuffer[ii++] = localCi; - - ciToXianDiDataBuffer[ii++] = targetDevType; /*ն豸ID豸*/ - ciToXianDiDataBuffer[ii++] = deviceId; - - emapCheckState = GetCiEmapCheckVer(localCi, &emapCrcInfo, targetDevType); - if (CI_SUCCESS == emapCheckState) + chReval = CI_SUCCESS; + /*ݽṹGALͷ*/ + if (CI_ATS_STATION_FRAME == frame) { - LongToChar(emapCrcInfo, &ciToXianDiDataBuffer[ii]); /*ݰ汾УCRCϢ*/ - ii += 4u; + /*վ״̬֡*/ + SendAtsCommonStationStateDeal(ciToXianDiDataBuffer, &ii, deviceId, targetDevType, chSendXiandiorAtsBuf); } else { - ii += 4u; + /*豸״̬֡*/ + SendAtsCommonDeviceStateDeal(ciToXianDiDataBuffer, &ii, deviceId, targetDevType); } - LongToChar(interfacePrtclVer, &ciToXianDiDataBuffer[ii]); /*ӿЭ汾Ϣ*/ - ii += 4u; - - ShortToChar((UINT16)255, &ciToXianDiDataBuffer[ii]); - ii += 4u; /*ʱǰĸֽΪĬϷ*/ - - LongToChar(curCycleNum, &ciToXianDiDataBuffer[ii]); - ii += 4u; /*ʱĸֽΪCIں*/ - - - /*ʼӦ*/ - - if (0u == GetSendMaskSum(targetDevType) % 8u) - { - SendMaskSum = (UINT16)(GetSendMaskSum(targetDevType) / 8u); - } - else - { - SendMaskSum = (UINT16)(GetSendMaskSum(targetDevType) / 8u + 1u); - } - - curIndex = ii; - - ShortToChar(SendMaskSum, &ciToXianDiDataBuffer[ii]); /*վϢܳ*/ - ii += 2u; - - /*λϢ*/ - (void)MaskPack(targetDevType, &ciToXianDiDataBuffer[ii]); - ii = (UINT16)(ii + SendMaskSum); - - /*ͨгϢ*/ - chRetVal = CI_SUCCESS; - wEnvelopeSum = elm_GetAllEnvelope(szEnvelopeIdBuf); /*ȡеİϢ*/ - wcomTrainSumIndex = ii; - ii += 2U; - if (ENVELOPE_SUM_MAX > wEnvelopeSum) - { - for (wEnvelopeIndex = 0U; wEnvelopeIndex < wEnvelopeSum; wEnvelopeIndex++) - { - wEnvelopeId = szEnvelopeIdBuf[wEnvelopeIndex]; /*ȡID*/ - chFunRtn = elm_ConvertEnvelopeInfo(wEnvelopeId, &strEnvelope); - if (CI_SUCCESS == chFunRtn) - {/*Ϣȡɹ*/ - /*ͨų*/ - if (TYPE_CT_ENVELOPE == strEnvelope.envelopeType) - { - comTrainSum++; - wTrainId = 0x1400u + (strEnvelope.trainID[0] & 0x00FFu); - hlhtIdFlag = dquDevName2HlhtId(wTrainId, 0u, &dwHLHTTrainID); /*ֽгIDתΪ4ֽڻͨID*/ - if (hlhtIdFlag == CI_SUCCESS) - {/*ͨIDѯɹ*/ - LongToChar(dwHLHTTrainID, &ciToXianDiDataBuffer[ii]); /* гID */ - ii += 4u; - } - else - { /*ʧ*/ - chRetVal = CI_ERROR; - } - - /*ǰɸ*/ - chHeadScreStat = strEnvelope.suspicHead; - chVirHeadScreStat = GetTrainVirHeadScreenPassFlag(wTrainId); - if ((CI_IVOC_HEAD_SCREEN_PASS == chHeadScreStat) || (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirHeadScreStat)) - { - /*ǰɸ״̬Ч*/ - ciToXianDiDataBuffer[ii] = CI_IVOC_HEAD_SCREEN_PASS; - ii += 1U; - } - else if ((CI_IVOC_HEAD_SCREEN_UNKNOW == chHeadScreStat) && (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirHeadScreStat)) - { - /*ǰɸ״̬Ч*/ - ciToXianDiDataBuffer[ii] = CI_IVOC_HEAD_SCREEN_UNKNOW; - ii += 1U; - } - else - { - chRetVal = CI_ERROR; - } - - /*ɸ*/ - chTailScreStat = strEnvelope.suspicTail; - chVirTailScreStat = GetTrainVirTailScreenPassFlag(wTrainId); - if ((CI_IVOC_TAIL_SCREEN_PASS == chTailScreStat) || (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirTailScreStat)) - { - /*ɸ״̬Ч*/ - ciToXianDiDataBuffer[ii] = CI_IVOC_TAIL_SCREEN_PASS; - ii += 1U; - } - else if ((CI_IVOC_TAIL_SCREEN_UNKNOW == chTailScreStat) && (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirTailScreStat)) - { - /*ɸ״̬Ч*/ - ciToXianDiDataBuffer[ii] = CI_IVOC_TAIL_SCREEN_UNKNOW; - ii += 1U; - } - else - { - chRetVal = CI_ERROR; - } - } - else - { - /* ִ*/ - } - } - else - { - /*ID*/ - chRetVal = CI_ERROR; - } - if (CI_SUCCESS != chRetVal) - { - break; - } - else - { - /*ִ*/ - } - } - } - else - { - /*гϢִ*/ - } - ShortToChar(comTrainSum, &ciToXianDiDataBuffer[wcomTrainSumIndex]); - - /*ָʾ״̬*/ - if (FUNC_SWITCH_ON == includeVirFlag) - { - virtualCiNum = GetVirtualCINum(); - ciToXianDiDataBuffer[ii++] = virtualCiNum;/**/ - for (kk = 0u; kk < virtualCiNum; kk++) - { - virtualCIid = GetVirtualCIid(kk); - ciToXianDiDataBuffer[ii++] = virtualCIid;/*ID*/ - /*ʾƱϢ*/ - indicatorNum = (UINT8)GetVirCIIndicatorConfigDataNum(virtualCIid); - ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*ʾƱ*/ - ii += 2u; - for (i = 0u; i < indicatorNum; i++) - { - indicatorId = GetVirCIlocalCiIndicatorId(virtualCIid, i); /*ʾƱƷ*/ - indicatorType = GetVirCIIndicatorType(virtualCIid, (UINT8)indicatorId); /*ȡ豸*/ /*ԭֱõڸΪIDҪתΪͼ*/ - indicatorState = GetVirCIIndicatorState(virtualCIid, (UINT8)indicatorId); /*ʾƱ״̬*/ - indicatorDevId = GetVirCIIndicatorDevId(virtualCIid, (UINT8)indicatorId); /*ʾƱID*/ - ciToXianDiDataBuffer[ii++] = indicatorType; - ciToXianDiDataBuffer[ii++] = indicatorDevId; - ciToXianDiDataBuffer[ii++] = indicatorState; - } - } - } - else - { - /*ʾƱϢ*/ - ciToXianDiDataBuffer[ii++] = 1u;/*ӿ*/ - ciToXianDiDataBuffer[ii++] = localCi; - indicatorNum = GetIndicatorCurSum(); - ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*ʾƱ*/ - ii += 2u; - for (jj = 0u; jj < indicatorNum; jj++) - { - indicatorId = GetIndicatorId(jj); - indicatorType = GetIndicatorType(indicatorId); /*ȡ豸*/ /*ԭֱõڸΪIDҪתΪͼ*/ - ciToXianDiDataBuffer[ii++] = indicatorType; /*ʾƱƷ*/ - indicatorDevId = GetIndicatorDevId(indicatorId); - ciToXianDiDataBuffer[ii++] = indicatorDevId;/*豸ID*/ - ciToXianDiDataBuffer[ii++] = GetIndicatorState(indicatorId);/*ʾƱ״̬*/ - } - } - - UpdataCiSendCmdBack_OrderBack();/**/ - if (1u > CiSendCmdStruCurSum) - { /*ȴ*/ - - ShortToChar(0, &ciToXianDiDataBuffer[ii]); /*֡ܳ*/ - ii += 2u; - } - else - { - curIndex = ii;/*֡ܳ*/ - ii += 2u; - - ShortToChar(CiSendCmdStruCurSum, &ciToXianDiDataBuffer[ii]); /*֡*/ - ii += 2u; - - for (jj = 0u; jj < CiSendCmdStruCurSum; jj++) - { - ciToXianDiDataBuffer[ii++] = 22u; /**/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].CommandType; /**/ - LongToChar(CiSendCmdDataStru[jj].CommandId, &ciToXianDiDataBuffer[ii]); /**/ - ii += 4u; - LongToChar(CiSendCmdDataStru[jj].CommandParam, &ciToXianDiDataBuffer[ii]); /**/ - ii += 4u; - ShortToChar(CiSendCmdDataStru[jj].termial_id, &ciToXianDiDataBuffer[ii]); /**/ - ii += 2u; - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].order_type; /**/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].response_type; /*Ӧ*/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].affirm_result; /*ȷϽ*/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].firstCmd_time; /*һεʱ*/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].VirCIid; /*ID*/ - ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].OCid; /*OC ID*/ - - if (0u != CiSendCmdDataStru[jj].wTrainIdParam) - { - cLogId = (UINT8)(CiSendCmdDataStru[jj].wTrainIdParam & 0xFFu); - cFunRetVal = dquDevName2HlhtId(CiSendCmdDataStru[jj].wTrainIdParam, cLogId, &dwTrainId); - if (CI_ERROR == cFunRetVal) - { - cLogId = 0u; - dwTrainId = 0u; - } - else - { - ; - } - } - else - { - cLogId = 0u; - dwTrainId = 0u; - } - LongToChar(dwTrainId, &ciToXianDiDataBuffer[ii]); - ii += 4u; - - ciToXianDiDataBuffer[ii++] = 0u;/*߼*/ - } - - ShortToChar((UINT16)(ii - curIndex - 2U), &ciToXianDiDataBuffer[curIndex]); /*֡ܳ*/ - -#if 0 - /**/ - ClearCiSendCmdData(); -#endif - } - - /* ߼εϢ*/ - (void)PackCiToAtsLgcSgmtInfo(ciToXianDiDataBuffer, &ii); - - /* ģʽϢ */ - cTiocMode = GetTiocSystemMode(); - if (REVERSE_MODE_MAIN == cTiocMode) - { - /* ģʽ */ - ciToXianDiDataBuffer[ii] = 0x55; - } - else - { - /* Ӱģʽ */ - ciToXianDiDataBuffer[ii] = 0xAA; - } - ii++; - - ciToXianDiDataBuffer[ii] = GetTiocSystemCutState(); - ii++; - - /* ɵԭ */ - cTiocCutReason = GetTiocCanntCutReason(); - ciToXianDiDataBuffer[ii] = cTiocCutReason; - ii++; - - ii += 40u; } else { - } + /*ݽṹҪGALͷ*/ + /*ȻȡʱϢȡɹż*/ + /*豸ID,ûͨID*/ + dwCiEtcsId = (UINT32)(CI_SYSTEM_TYPE_RCI * 256U + chLocalCiId); + dwAtsEtcsId = (UINT32)(targetDevType * 256U + deviceId); + chReval = GetCiEmapCheckVer(chLocalCiId, &dwEmapCheckVer, targetDevType); + dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(targetDevType, deviceId); + dwHlhtHRcvSN = GetHLHTHeadCtxCiRcvSN(targetDevType, deviceId); - /*豸״̬֡*/ - if (CI_ATS_DEVICE_STATE_FRAME == frame) - { - /*豸֡*/ - ciToXianDiDataBuffer[ii++] = CI_ATS_DEVICE_STATE_FRAME; /*豸״̬֡*/ - ciToXianDiDataBuffer[ii++] = Get2oo2SheBeiType();/*Ͷ豸ID豸*/ - ciToXianDiDataBuffer[ii++] = localCi; - - ciToXianDiDataBuffer[ii++] = targetDevType; /*ն豸ID豸*/ - ciToXianDiDataBuffer[ii++] = deviceId; - - emapCheckState = GetCiEmapCheckVer(localCi, &emapCrcInfo, targetDevType); - if (CI_SUCCESS == emapCheckState) + if (CI_SUCCESS == chReval) { - LongToChar(emapCrcInfo, &ciToXianDiDataBuffer[ii]); /*ݰ汾УCRCϢ*/ - ii += 4u; - } - else - { - ii += 4u; - } - LongToChar(interfacePrtclVer, &ciToXianDiDataBuffer[ii]); /*ӿЭ汾Ϣ*/ - ii += 4u; - - ShortToChar((UINT16)255, &ciToXianDiDataBuffer[ii]); - ii += 4u; /*ʱǰĸֽΪĬϷ*/ - - LongToChar(curCycleNum, &ciToXianDiDataBuffer[ii]); - ii += 4u; /*ʱĸֽΪCIں*/ - - - deviceSum = (UINT16)GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_PSC); /*ȡͨPSC豸*/ - pDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_PSC); /*ȡͨPSC豸ID*/ - if (1u > deviceSum) - { /*PSC*/ - - ShortToChar(0u, &ciToXianDiDataBuffer[ii]); /*PSCܳ*/ + /*GALͷ*/ + ShortToChar(ATS_CI_INTERFACE_INFOTYPE, &ciToXianDiDataBuffer[ii]);/*ӿϢ*/ ii += 2u; - } - else - { - ShortToChar(deviceSum, &ciToXianDiDataBuffer[ii]); /*PSC*/ + LongToChar(dwCiEtcsId, &ciToXianDiDataBuffer[ii]);/*ͷʶϢ*/ + ii += 4u; + LongToChar(dwAtsEtcsId, &ciToXianDiDataBuffer[ii]);/*շʶϢ*/ + ii += 4u; + LongToChar(dwEmapCheckVer, &ciToXianDiDataBuffer[ii]);/*ӵͼ汾УϢ*/ + ii += 4u; + LongToChar(dwCurCycleNum, &ciToXianDiDataBuffer[ii]);/*Ϣк*/ + ii += 4u; + ShortToChar((UINT16)dwAppCycleTime, &ciToXianDiDataBuffer[ii]);/*豸ͨѶ*/ + ii += 2u; + LongToChar(dwHlhtHSrcSN, &ciToXianDiDataBuffer[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ + ii += 4u; + LongToChar(dwHlhtHRcvSN, &ciToXianDiDataBuffer[ii]);/*յһϢʱк*/ + ii += 4u; + + ciToXianDiDataBuffer[ii++] = 1U; /*CI_ATSӿЭ汾*/ + + /*Ӧòݳ*/ + wAppDataLenIndex = ii; ii += 2u; - if (NULL != pDeviceIdBuf) - { /*ͨ豸ȷ*/ - for (jj = 0u; jj < deviceSum; jj++) - { - pscId = pDeviceIdBuf[jj]; /*ȡPSCID*/ - if (0u != pscId) - { - ciToXianDiDataBuffer[ii++] = 0u; /*PSCID*/ - ciToXianDiDataBuffer[ii++] = pscId; - - /*PSC Aϵ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCWorkState(ciToXianDiDataBuffer[ii], 6u, - pscCiSendToAtsDataStru[pscId].devType_PSC_A_WORK_STATE); - - /*PSC Bϵ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCWorkState(ciToXianDiDataBuffer[ii], 4u, - pscCiSendToAtsDataStru[pscId].devType_PSC_B_WORK_STATE); - - /*PSC ͨŰ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, - pscCiSendToAtsDataStru[pscId].devType_PSC_SINGLE_COMM_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSC FSIO״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, - pscCiSendToAtsDataStru[pscId].devType_PSC_FSIO_FAULT_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); - - ii++; - - /*PSC Դ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 6u, - pscCiSendToAtsDataStru[pscId].devType_PSC_DRIVE_POWER_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSC ƵԴ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 4u, - pscCiSendToAtsDataStru[pscId].devType_PSC_CONTROL_POWER_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSCӿģ1״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, - pscCiSendToAtsDataStru[pscId].devType_PSC_Q_IM_1_STATE, BIT_VAL_00000001B, BIT_VAL_00000000B); - - /*PSCӿģ2״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, - pscCiSendToAtsDataStru[pscId].devType_PSC_Q_IM_2_STATE, BIT_VAL_00000001B, BIT_VAL_00000000B); - - ii++; - /*PSC пŹ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 6u, - pscCiSendToAtsDataStru[pscId].devType_PSC_OPEN_FAULT_STATE_UP, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSC йŹ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 4u, - pscCiSendToAtsDataStru[pscId].devType_PSC_CLOSE_FAULT_STATE_UP, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSC пŹ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, - pscCiSendToAtsDataStru[pscId].devType_PSC_OPEN_FAULT_STATE_DOWN, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*PSC йŹ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, - pscCiSendToAtsDataStru[pscId].devType_PSC_CLOSE_FAULT_STATE_DOWN, BIT_VAL_00000011B, BIT_VAL_00000000B); - - ii++; - - transmitState = GetCiTransmitState(CI_SYSTEM_TYPE_PSC, pscId);/*ȡCIPSCͨ״̬*/ - pscConfirmFlag = GetPscConfirmFlag(pscId); /*ȡPSC·״̬*/ - /*·״̬*/ - - /*·״̬ת*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCtypeState(ciToXianDiDataBuffer[ii], 2u, pscConfirmFlag, - CI_PSC_PL_CONFIRM_YES, BIT_VAL_00000000B, BIT_VAL_00000001B); - - /*CIPSCͨ״̬ת*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPSCtypeState(ciToXianDiDataBuffer[ii], 0u, transmitState, - TRANSMIT_STATE_GOOD, BIT_VAL_00000001B, BIT_VAL_00000000B); - - ii++; - } - else - { - } - } - } - else + chStepRetVal = CI_SUCCESS; + while (CI_ERROR != chStepRetVal) { - } - } - - ocDeviceSum = (UINT16)GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸*/ - pOcDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC); /*ȡͨOC豸ID*/ - - ShortToChar(ocDeviceSum, &ciToXianDiDataBuffer[ii]); /*OCܳ*/ - ii += 2u; - - if (NULL != pOcDeviceIdBuf) - { - for (jj = 0u; jj < ocDeviceSum; jj++)/*ͨŵoc*/ - { - ocId = pOcDeviceIdBuf[jj]; /*ȡOC ID*/ - - powerAState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/**/ - powerBState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/**/ - ocDevFaultState = OC_CARD_ABNORMAL;/**/ - fanState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/*ȹ*/ - wPbNum = 0U; /*OCǰֹͬһһOC*/ - - if (0U != ocId) + wMagLen = 0u; + switch (chStep) { - ShortToChar(ocId, &ciToXianDiDataBuffer[ii]); /*OCID*/ + case 0u: + wMagDataLenIndex = ii; + ii += 2U; + ShortToChar(RCI_ATS_INFO_TYPE_COMMON_STATE, &ciToXianDiDataBuffer[ii]);/* */ + ii += 2u; + /* Ԥ2ֽ */ ii += 2u; - for (kk = 0u; kk < m_OcToCiOrginDataNum; kk++) - { - if (NULL != m_OcToCiOrginDataArr) - { - if (m_OcToCiOrginDataArr[kk].OcId == ocId)/*ͨţҵ͸ֵ*/ - { - powerAState = m_OcToCiOrginDataArr[kk].PowerAState; - powerBState = m_OcToCiOrginDataArr[kk].PowerBState; - ocDevFaultState = m_OcToCiOrginDataArr[kk].OCDevFaultState; - fanState = m_OcToCiOrginDataArr[kk].FanState; + PackRcOrCiDeciveCommonState(ciToXianDiDataBuffer, &ii); + wMagLen = ii - wMagDataLenIndex -2U; + /* ݳ */ + ShortToChar(wMagLen, &ciToXianDiDataBuffer[wMagDataLenIndex]); - /*OCbyteִеӿת*/ - wPbNum = TransCiToAtsOCPlusBoxInfo(szSendATSPlusBox, &kk); - - /*by cgh 20230918 ǣת޻Ŀת*/ - wDjqySwitchNum = TransCiToAtsSwitchZzjInfo(szSendAtsSwitchZzjData, &kk); - } - else - { - - } - } - else - { - } - } - /*תAϵԴ״̬*/ - powerAState = TransCiToAtsPowerState(powerAState); - - /*תBϵԴ״̬*/ - powerBState = TransCiToAtsPowerState(powerBState); - - /*ת״̬*/ - fanState = TransCiToAtsFanState(fanState); - - /*תOC豸״̬*/ - ocDevFaultState = TransCiToAtsOcDevFaultState(ocDevFaultState); - - ciAndOcCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_OC, (UINT8)jj); - - ciToXianDiDataBuffer[ii++] = powerAState; - ciToXianDiDataBuffer[ii++] = powerBState; - ciToXianDiDataBuffer[ii++] = ciAndOcCommState;/*OCͨ״̬*/ - ciToXianDiDataBuffer[ii++] = ocDevFaultState; - ciToXianDiDataBuffer[ii++] = fanState; - - ciToXianDiDataBuffer[ii++] = wPbNum; /*ִе,ЧֻΪ0Ҳֻ*/ - if (MAX_OC_PLUS_BOX_NUM >= wPbNum) - { - for (mm = 0u; mm < wPbNum; mm++) - { - ciToXianDiDataBuffer[ii++] = szSendATSPlusBox[mm].chPbId; /*ִе*/ - ciToXianDiDataBuffer[ii++] = szSendATSPlusBox[mm].SendAtsAsState; /*鱨*/ - } - } - else - { - ; /*do nothing*/ - } - - ShortToChar(wDjqySwitchNum, &ciToXianDiDataBuffer[ii]); /*˫ǣĿ*/ + break; + case 1u: + wMagDataLenIndex = ii; ii += 2U; - if (SWITCH_SUM_MAX > wDjqySwitchNum) + if (CI_ATS_STATION_FRAME == frame) { - for (wDjqySwitchIndex = 0U; wDjqySwitchIndex < wDjqySwitchNum; wDjqySwitchIndex++) - { - ShortToChar(szSendAtsSwitchZzjData[wDjqySwitchIndex].wSwitchId, &ciToXianDiDataBuffer[ii]); /*˫ǣID*/ - ii += 2U; - ciToXianDiDataBuffer[ii++] = szSendAtsSwitchZzjData[wDjqySwitchIndex].chSwIncludeZzjSum; /*Ӧת޻Ŀ*/ - for (chSwitchZzjStateIndex = 0U; chSwitchZzjStateIndex < szSendAtsSwitchZzjData[wDjqySwitchIndex].chSwIncludeZzjSum; chSwitchZzjStateIndex++) - { - ciToXianDiDataBuffer[ii++] = szSendAtsSwitchZzjData[wDjqySwitchIndex].szSwitchIncldeZzjState[chSwitchZzjStateIndex]; - } - } + /*վ״̬֡*/ + ShortToChar(RCI_ATS_INFO_TYPE_STATION_STATE, &ciToXianDiDataBuffer[ii]);/* */ + ii += 2u; + /* Ԥ2ֽ */ + ii += 2u; + SendAtsCommonStationStateDeal(ciToXianDiDataBuffer, &ii, deviceId, targetDevType, chSendXiandiorAtsBuf); } else { - ; /*do nothing*/ + ShortToChar(RCI_ATS_INFO_TYPE_DEVICE_STATE, &ciToXianDiDataBuffer[ii]);/* */ + ii += 2u; + /* Ԥ2ֽ */ + ii += 2u; + /*豸״̬֡*/ + SendAtsCommonDeviceStateDeal(ciToXianDiDataBuffer, &ii, deviceId, targetDevType); } + wMagLen = ii - wMagDataLenIndex - 2U; + /* ݳ */ + ShortToChar(wMagLen, &ciToXianDiDataBuffer[wMagDataLenIndex]); + break; + default: + chStepRetVal = CI_ERROR; + break; + } + + chStep++; + + if (CI_ERROR == chStepRetVal) + { + /* */ + chStepRetVal = CI_ERROR; } else { + ; /**/ } } } else { + chReval = CI_ERROR; } - /*PSC豸ŷPSDϢATS*/ - if (NULL == pDeviceIdBuf) + /* ݳ */ + if (CI_SUCCESS == chReval) { - ciToXianDiDataBuffer[ii++] = 0u; + wAppDataLen = ii - wAppDataLenIndex - 2U; + /* Ӧݳ */ + ShortToChar(wAppDataLen, &ciToXianDiDataBuffer[wAppDataLenIndex]); } else { - /*PSD0*/ - ciToXianDiDataBuffer[ii++] = 0u; - - for (m = 0u; m < deviceSum; m++) - { - for (n = 0u; n < pscToCiDataStru[pDeviceIdBuf[m]].psdSum; n++) - { - /*ȡPSD*/ - psdCiId = GetPsdBelongCiId(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdId); - if (localCi == psdCiId) - { - psdSum++; - /*psd ID*/ - ShortToChar(0u, &ciToXianDiDataBuffer[ii]); - ii += 2u; - ShortToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdId, &ciToXianDiDataBuffer[ii]); - ii += 2u; - /*ȡϢ*/ - psdMutualLockState = GetPsdMutualLockRemoveState(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdId); - /*ATSȷ·*/ - if ((PSD_ATS_MUTUALLOCK_REMOVE_YES == psdMutualLockState) || - (PSD_ATS_AND_JD_MUTUALLOCK_REMOVE_YES == psdMutualLockState)) - { - /*ϸϢ()*/ - pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdFaultQStataOne = 0u; - pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdFaultQStataTwo = 0u; - /*ſϢ*/ - pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorsStateOne = 0u; - pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorsStateTwo = 0u; - } - else - { - /**/ - } - /*ϸϢ()*/ - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdFaultQStataOne, &ciToXianDiDataBuffer[ii]); - ii += 4u; - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdFaultQStataTwo, &ciToXianDiDataBuffer[ii]); - ii += 4u; - /*űϢ*/ - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorIStateOne, &ciToXianDiDataBuffer[ii]); - ii += 4u; - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorIStateTwo, &ciToXianDiDataBuffer[ii]); - ii += 4u; - /*ÿſϢ*/ - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorsStateOne, &ciToXianDiDataBuffer[ii]); - ii += 4u; - LongToChar(pscToCiDataStru[pDeviceIdBuf[m]].psdDataStr[n].psdDoorsStateTwo, &ciToXianDiDataBuffer[ii]); - ii += 4u; - } - else - { - /**/ - } - } - } - /*дPSD*/ - ciToXianDiDataBuffer[ii - (psdSum * 28U) - 1U] = psdSum; + ; } + } - /*RCOCI豸״̬ Դ/Դģ״̬2ֽ*/ - powerANodeState = CheckRCIAPowerFaultState(); - powerBNodeState = CheckRCIBPowerFaultState(); - ModeAState = CheckRCIAPowerModeFaultState(); - ModeBState = CheckRCIBPowerModeFaultState(); - - /*AϵԴ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[ii], 6u, powerANodeState, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*BϵԴ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[ii], 4u, powerBNodeState, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*AϵԴģ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[ii], 2u, ModeAState, BIT_VAL_00000011B, BIT_VAL_00000000B); - - /*BϵԴģ״̬ʾ*/ - ciToXianDiDataBuffer[ii] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[ii], 0u, ModeBState, BIT_VAL_00000011B, BIT_VAL_00000000B); - debug_infor_printf((const)"\nPOWER BYTE IS %d", ciToXianDiDataBuffer[ii]); - ii++; - - - /*Ԥһֽ*/ - ii++; - - /**/ - /*ȡ*/ - virtualCiNum = GetVirtualCINum(); - ciToXianDiDataBuffer[ii++] = virtualCiNum; - if (0u < virtualCiNum) - { - for (m = 0u; m < virtualCiNum; m++) - { - ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[m].virCiId; - ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[m].ctrlPowerState; - ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[m].ctrlDeviceType; - ShortToChar(ctrlpowerFlag[m].ctrlDeviceId, &ciToXianDiDataBuffer[ii]); - ii += 2u; - } - } - else - { - /**/ - } - - /*Ԥ40ֽ*/ - ii += 40u; + if ((ii > CI_TO_ATS_DATA_LEN_MAX) || (CI_ERROR == chReval)) + { + chReval = CI_ERROR; } else { - } - - /*ݰܳ */ - /*ciToXianDiDataBuffer[0] = (UINT8) (((ii - 2) >> 8u) & 0xffu); - ciToXianDiDataBuffer[1] = (UINT8) ((ii - 2) & 0xffu);*/ - - if (ii > CI_TO_ATS_DATA_LEN_MAX) - { - return CI_ERROR; - } - else - { - } - #ifdef APPCI_MAINTAIN_DEBUG #ifdef PLATFORM_2OO2 - /*͸ά޻*/ - (void)DarkInfoPack(CIM_INFO_RCI_TO_ATS_DATA, ciToXianDiDataBuffer, ii); + /*͸ά޻*/ + (void)DarkInfoPack(CIM_INFO_RCI_TO_ATS_DATA, ciToXianDiDataBuffer, ii); #endif -#endif/*APPCI_MAINTAIN_DEBUG*/ - - - /*if (QueueWrite(ii, ciToXianDiDataBuffer, ciToXianDiDataQueue))*/ - dstDevId = ((UINT16)((UINT16)targetDevType << 8u) | ((UINT16)deviceId)); - outnetSafeSendRtn = OutnetSafeSend(dstDevId, 0u, &ciToXianDiDataBuffer[0], ii); - if (1u == outnetSafeSendRtn) - { /*дгɹ*/ +#endif + dstDevId = ((UINT16)((UINT16)targetDevType << 8u) | ((UINT16)deviceId)); + outnetSafeSendRtn = OutnetSafeSend(dstDevId, 0u, &ciToXianDiDataBuffer[0], ii); + if (1u == outnetSafeSendRtn) + { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - if (targetDevType == CI_SYSTEM_TYPE_XIANDI) - {/*͸ֵ*/ - debug_infor_printf((const)"\nXIANDI_SEND:%d", ii); - debug_out_array(0xAA, ciToXianDiDataBuffer, ii); - } - else - {/*͸ATS*/ - debug_infor_printf((const)"\nATS_SEND:%d", ii); - debug_out_array(0xAA, ciToXianDiDataBuffer, ii); - } + if (targetDevType == CI_SYSTEM_TYPE_XIANDI) + {/*͸ֵ*/ + debug_infor_printf((const)"\nXIANDI_SEND:%d", ii); + debug_out_array(0xAA, ciToXianDiDataBuffer, ii); + } + else + {/*͸ATS*/ + debug_infor_printf((const)"\nATS_SEND:%d", ii); + debug_out_array(0xAA, ciToXianDiDataBuffer, ii); + } #endif/*ƽ̨ӡ*/ #endif - return CI_SUCCESS; - } - else - { - /*дʧ*/ - return CI_ERROR; + chReval = CI_SUCCESS; + } + else + { + /*дʧ*/ + chReval = CI_ERROR; + } } + + return chReval; } /* @@ -1367,6 +803,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 +1140,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 +1285,18 @@ 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; + case ATS_CMD_EMERG_XS_SET_TWO: + reVal = ATS_CMD_EMERG_XS_SET_ONE; /*ýʱһ*/ + break; + case ATS_CMD_EMERG_XS_CANCEL_TWO: + reVal = ATS_CMD_EMERG_XS_CANCEL_ONE; /*ȡʱһ*/ + break; default: reVal = 0u; break; @@ -2542,6 +1992,7 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U UINT8 jj = 0U;/*Ӧת޻*/ UINT8 mm = 0U;/*״̬ĿʱжǷ쳣ѭ*/ UINT8 chSwitchDriveFlag = 0U;/*־*/ + UINT8 chSingleSwitchCurPosition = 0u;/*ǰλ*/ if ((NULL != ciSendAtsSwitchZzjData) && (NULL != wDataLength)) @@ -2569,14 +2020,6 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U } } - else if(OC_SWITCH_POSITION_UNKNOW == m_OcToCiOrginDataArr[kk].OcDevices[ii].DeviceState) - { - /*OCCIĵǰ״̬Ϊδ֪öӦת޻״̬Ϊ,δ֪״̬ᵥһת޻*/ - for (jj = 0U; jj < m_OcToCiOrginDataArr[kk].OcDevices[ii].chSwitchIncldeZzjNum; jj++) - { - ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_ALARM; - } - } else { /*OCCIĵǰ״̬ΪĿ*/ @@ -2611,18 +2054,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 +2121,1607 @@ 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_RCI); + pCiDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); + + ciToXianDiDataBuffer[index++] = transCiSum;/*ͨŵ*/ + if (NULL != pCiDeviceIdBuf) + { + for (jj = 0u; jj < transCiSum; jj++) + { + ciId = pCiDeviceIdBuf[jj];/*CI ID*/ + ciAndCiCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RCI, (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 + { + /*μʧܣ*/ + } +} + +/** +* @brief RC/CI豸ͨ״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* ii CIATSֵص +* @return +* @note by cgh 20251103 +*/ +void RcOrCiDeciveCommonStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 wIndex = 0U; + UINT8 chPowerANodeState = 0U;/*AϵԴ״̬*/ + UINT8 chPowerBNodeState = 0U;/*BϵԴ״̬*/ + UINT8 chModeAState = 0U;/*AϵԴģ״̬*/ + UINT8 chModeBState = 0U;/*BϵԴģ״̬*/ + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + wIndex = *ii; + + /*RCOCI豸״̬ Դ/Դģ״̬2ֽ*/ + chPowerANodeState = CheckRCIAPowerFaultState(); + chPowerBNodeState = CheckRCIBPowerFaultState(); + chModeAState = CheckRCIAPowerModeFaultState(); + chModeBState = CheckRCIBPowerModeFaultState(); + + /*AϵԴ״̬ʾ*/ + ciToXianDiDataBuffer[wIndex] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[wIndex], 6U, chPowerANodeState, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*BϵԴ״̬ʾ*/ + ciToXianDiDataBuffer[wIndex] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[wIndex], 4U, chPowerBNodeState, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*AϵԴģ״̬ʾ*/ + ciToXianDiDataBuffer[wIndex] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[wIndex], 2U, chModeAState, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*BϵԴģ״̬ʾ*/ + ciToXianDiDataBuffer[wIndex] = TransCiToAtsPowerModeState(ciToXianDiDataBuffer[wIndex], 0U, chModeBState, BIT_VAL_00000011B, BIT_VAL_00000000B); + debug_infor_printf((const)"\nPOWER BYTE IS %d", ciToXianDiDataBuffer[wIndex]); + wIndex++; + + + *ii = wIndex; + } + else + { + /*μʧܣ*/ + } +} + +/** +* @brief ATSͨ豸״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* wDataIndex CIATSֵص +* @param[in] const UINT8 chDeviceId, ĿϵͳID +* @param[in] const UINT8 chTargetDevType, Ŀϵͳ +* @return +* @note by cgh 20251103 +*/ +void SendAtsCommonDeviceStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, const UINT8 chDeviceId, const UINT8 chTargetDevType) +{ + UINT16 ii = 0U;/*α*/ + UINT16 jj = 0U; /*α*/ + UINT8 kk = 0U; /*α*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); /* ID*/ + UINT8 chEmapCheckState = 0U; /*ӵͼݰ汾У*/ + UINT32 emapCrcInfo = 0U; /*ݰ汾УCRCϢ*/ + UINT32 curCycleNum = Get2oo2CurCycleNum(); /*ǰ*/ + UINT16 deviceSum = 0U; /*豸*/ + UINT8* pDeviceIdBuf = NULL; /*豸ID*/ + UINT8 pscId = 0U; /*PSC ID*/ + UINT8 transmitState = 0U; /*ͨ״̬*/ + UINT8 pscConfirmFlag = 0U; /*PSC·״̬*/ + UINT16 ocDeviceSum = 0U;/*OC豸*/ + UINT8* pOcDeviceIdBuf = NULL; /*OC豸ID*/ + UINT16 ocId = 0U; /*OC ID*/ + UINT8 powerAState = 0U;/*AϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ + UINT8 powerBState = 0U;/*BϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ + UINT8 ocDevFaultState = 0U;/*OC豸״̬0x55-忨0xFF-忨*/ + UINT8 fanState = 0U; /*ȹ״̬*/ + UINT8 ciAndOcCommState = 0U;/*ciOCͨ״̬*/ + UINT8 wPbNum = 0U; /*ִе*/ + OcToATSPlusBox szSendATSPlusBox[MAX_OC_PLUS_BOX_NUM] = { 0U }; /*ATSִеṹϢ*/ + UINT16 wDjqySwitchNum = 0U; /*ǣ*/ + OcToATSSwitchZzjData szSendAtsSwitchZzjData[SWITCH_SUM_MAX] = { 0U }; /*ATSĵӦת޻Ϣ*/ + UINT16 wDjqySwitchIndex = 0U;/*ǣ*/ + UINT8 chSwitchZzjStateIndex = 0U;/*ǣӦת޻״̬*/ + UINT8 virtualCiNum = 0U; /*Ŀ*/ + + if ((NULL != ciToXianDiDataBuffer) && (NULL != wDataIndex)) + { + ii = *wDataIndex; + pscCiSendToAtsDataStru = GetPscToCiDataStru(); /*ȡPsc-CIĽṹ*/ + + /*豸֡*/ + ciToXianDiDataBuffer[ii++] = CI_ATS_DEVICE_STATE_FRAME; /*վ״̬֡*/ + ciToXianDiDataBuffer[ii++] = Get2oo2SheBeiType();/*Ͷ豸ID豸*/ + ciToXianDiDataBuffer[ii++] = chLocalCiId; + + ciToXianDiDataBuffer[ii++] = chTargetDevType; /*ն豸ID豸*/ + ciToXianDiDataBuffer[ii++] = chDeviceId; + + chEmapCheckState = GetCiEmapCheckVer(chLocalCiId, &emapCrcInfo, chTargetDevType); + if (CI_SUCCESS == chEmapCheckState) + { + LongToChar(emapCrcInfo, &ciToXianDiDataBuffer[ii]); /*ݰ汾УCRCϢ*/ + ii += 4u; + } + else + { + ii += 4u; + } + LongToChar(0U, &ciToXianDiDataBuffer[ii]); /*ӿЭ汾Ϣ*/ + ii += 4u; + + ShortToChar((UINT16)255U, &ciToXianDiDataBuffer[ii]); + ii += 4u; /*ʱǰĸֽΪĬϷ*/ + + LongToChar(curCycleNum, &ciToXianDiDataBuffer[ii]); + ii += 4u; /*ʱĸֽΪCIں*/ + + + deviceSum = (UINT16)GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_PSC); /*ȡͨPSC豸*/ + pDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_PSC); /*ȡͨPSC豸ID*/ + if (1u > deviceSum) + { /*PSC*/ + + ShortToChar(0u, &ciToXianDiDataBuffer[ii]); /*PSCܳ*/ + ii += 2u; + } + else + { + ShortToChar(deviceSum, &ciToXianDiDataBuffer[ii]); /*PSC*/ + ii += 2u; + + if (NULL != pDeviceIdBuf) + { /*ͨ豸ȷ*/ + for (jj = 0u; jj < deviceSum; jj++) + { + pscId = pDeviceIdBuf[jj]; /*ȡPSCID*/ + if (0u != pscId) + { + ciToXianDiDataBuffer[ii++] = 0u; /*PSCID*/ + ciToXianDiDataBuffer[ii++] = pscId; + + /*PSC Aϵ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCWorkState(ciToXianDiDataBuffer[ii], 6u, + pscCiSendToAtsDataStru[pscId].devType_PSC_A_WORK_STATE); + + /*PSC Bϵ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCWorkState(ciToXianDiDataBuffer[ii], 4u, + pscCiSendToAtsDataStru[pscId].devType_PSC_B_WORK_STATE); + + /*PSC ͨŰ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, + pscCiSendToAtsDataStru[pscId].devType_PSC_SINGLE_COMM_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSC FSIO״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, + pscCiSendToAtsDataStru[pscId].devType_PSC_FSIO_FAULT_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); + + ii++; + + /*PSC Դ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 6u, + pscCiSendToAtsDataStru[pscId].devType_PSC_DRIVE_POWER_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSC ƵԴ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 4u, + pscCiSendToAtsDataStru[pscId].devType_PSC_CONTROL_POWER_STATE, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSCӿģ1״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, + pscCiSendToAtsDataStru[pscId].devType_PSC_Q_IM_1_STATE, BIT_VAL_00000001B, BIT_VAL_00000000B); + + /*PSCӿģ2״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, + pscCiSendToAtsDataStru[pscId].devType_PSC_Q_IM_2_STATE, BIT_VAL_00000001B, BIT_VAL_00000000B); + + ii++; + /*PSC пŹ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 6u, + pscCiSendToAtsDataStru[pscId].devType_PSC_OPEN_FAULT_STATE_UP, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSC йŹ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 4u, + pscCiSendToAtsDataStru[pscId].devType_PSC_CLOSE_FAULT_STATE_UP, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSC пŹ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 2u, + pscCiSendToAtsDataStru[pscId].devType_PSC_OPEN_FAULT_STATE_DOWN, BIT_VAL_00000011B, BIT_VAL_00000000B); + + /*PSC йŹ״̬ʾ*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCState(ciToXianDiDataBuffer[ii], 0u, + pscCiSendToAtsDataStru[pscId].devType_PSC_CLOSE_FAULT_STATE_DOWN, BIT_VAL_00000011B, BIT_VAL_00000000B); + + ii++; + + transmitState = GetCiTransmitState(CI_SYSTEM_TYPE_PSC, pscId);/*ȡCIPSCͨ״̬*/ + pscConfirmFlag = GetPscConfirmFlag(pscId); /*ȡPSC·״̬*/ + /*·״̬*/ + + /*·״̬ת*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCtypeState(ciToXianDiDataBuffer[ii], 2u, pscConfirmFlag, + CI_PSC_PL_CONFIRM_YES, BIT_VAL_00000000B, BIT_VAL_00000001B); + + /*CIPSCͨ״̬ת*/ + ciToXianDiDataBuffer[ii] = TransCiToAtsPSCtypeState(ciToXianDiDataBuffer[ii], 0u, transmitState, + TRANSMIT_STATE_GOOD, BIT_VAL_00000001B, BIT_VAL_00000000B); + + ii++; + } + else + { + } + } + } + else + { + } + } + + /*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*/ + + ShortToChar(ocDeviceSum, &ciToXianDiDataBuffer[ii]); /*OCܳ*/ + ii += 2u; + + if (NULL != pOcDeviceIdBuf) + { + for (jj = 0u; jj < ocDeviceSum; jj++)/*ͨŵoc*/ + { + ocId = pOcDeviceIdBuf[jj]; /*ȡOC ID*/ + + powerAState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/**/ + powerBState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/**/ + ocDevFaultState = OC_CARD_ABNORMAL;/**/ + fanState = DUAL_WAY_AIR_SWITCH_ABNORMAL;/*ȹ*/ + wPbNum = 0U; /*OCǰֹͬһһOC*/ + + if (0U != ocId) + { + ShortToChar(ocId, &ciToXianDiDataBuffer[ii]); /*OCID*/ + ii += 2u; + + for (kk = 0u; kk < m_OcToCiOrginDataNum; kk++) + { + if (NULL != m_OcToCiOrginDataArr) + { + if (m_OcToCiOrginDataArr[kk].OcId == ocId)/*ͨţҵ͸ֵ*/ + { + powerAState = m_OcToCiOrginDataArr[kk].PowerAState; + powerBState = m_OcToCiOrginDataArr[kk].PowerBState; + ocDevFaultState = m_OcToCiOrginDataArr[kk].OCDevFaultState; + fanState = m_OcToCiOrginDataArr[kk].FanState; + + /*OCbyteִеӿת*/ + wPbNum = TransCiToAtsOCPlusBoxInfo(szSendATSPlusBox, &kk); + + /*by cgh 20230918 ǣת޻Ŀת*/ + wDjqySwitchNum = TransCiToAtsSwitchZzjInfo(szSendAtsSwitchZzjData, &kk); + } + else + { + + } + } + else + { + } + } + /*תAϵԴ״̬*/ + powerAState = TransCiToAtsPowerState(powerAState); + + /*תBϵԴ״̬*/ + powerBState = TransCiToAtsPowerState(powerBState); + + /*ת״̬*/ + fanState = TransCiToAtsFanState(fanState); + + /*תOC豸״̬*/ + ocDevFaultState = TransCiToAtsOcDevFaultState(ocDevFaultState); + + ciAndOcCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_OC, (UINT8)jj); + + ciToXianDiDataBuffer[ii++] = powerAState; + ciToXianDiDataBuffer[ii++] = powerBState; + ciToXianDiDataBuffer[ii++] = ciAndOcCommState;/*OCͨ״̬*/ + ciToXianDiDataBuffer[ii++] = ocDevFaultState; + ciToXianDiDataBuffer[ii++] = fanState; + + ciToXianDiDataBuffer[ii++] = wPbNum; /*ִе,ЧֻΪ0Ҳֻ*/ + if (MAX_OC_PLUS_BOX_NUM >= (UINT16)wPbNum) + { + for (kk = 0u; kk < wPbNum; kk++) + { + ciToXianDiDataBuffer[ii++] = szSendATSPlusBox[kk].chPbId; /*ִе*/ + ciToXianDiDataBuffer[ii++] = szSendATSPlusBox[kk].SendAtsAsState; /*鱨*/ + } + } + else + { + ; /*do nothing*/ + } + + ShortToChar(wDjqySwitchNum, &ciToXianDiDataBuffer[ii]); /*˫ǣĿ*/ + ii += 2U; + if (SWITCH_SUM_MAX > wDjqySwitchNum) + { + for (wDjqySwitchIndex = 0U; wDjqySwitchIndex < wDjqySwitchNum; wDjqySwitchIndex++) + { + ShortToChar(szSendAtsSwitchZzjData[wDjqySwitchIndex].wSwitchId, &ciToXianDiDataBuffer[ii]); /*˫ǣID*/ + ii += 2U; + ciToXianDiDataBuffer[ii++] = szSendAtsSwitchZzjData[wDjqySwitchIndex].chSwIncludeZzjSum; /*Ӧת޻Ŀ*/ + for (chSwitchZzjStateIndex = 0U; chSwitchZzjStateIndex < szSendAtsSwitchZzjData[wDjqySwitchIndex].chSwIncludeZzjSum; chSwitchZzjStateIndex++) + { + ciToXianDiDataBuffer[ii++] = szSendAtsSwitchZzjData[wDjqySwitchIndex].szSwitchIncldeZzjState[chSwitchZzjStateIndex]; + } + } + } + else + { + ; /*do nothing*/ + } + } + else + { + } + } + } + else + { + } + + /*RCOCI豸״̬ Դ/Դģ״̬*/ + RcOrCiDeciveCommonStateDeal(ciToXianDiDataBuffer, &ii); + + /*Ԥһֽ*/ + ii++; + + /**/ + /*ȡ*/ + virtualCiNum = GetVirtualCINum(); + ciToXianDiDataBuffer[ii++] = virtualCiNum; + if (0u < virtualCiNum) + { + for (kk = 0u; kk < virtualCiNum; kk++) + { + ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[kk].virCiId; + ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[kk].ctrlPowerState; + ciToXianDiDataBuffer[ii++] = ctrlpowerFlag[kk].ctrlDeviceType; + ShortToChar(ctrlpowerFlag[kk].ctrlDeviceId, &ciToXianDiDataBuffer[ii]); + ii += 2u; + } + } + else + { + /**/ + } + + /*ͨϢ*/ + PackCiDataToAts(ciToXianDiDataBuffer, &ii); + + /*Ԥ40ֽ*/ + ii += 40u; + + + *wDataIndex = ii; + } + else + { + /*μʧܣ*/ + } +} + +/** +* @brief ATSͨվ״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* wDataIndex CIATSֵص +* @param[in] const UINT8 chDeviceId, ĿϵͳID +* @param[in] const UINT8 chTargetDevType, Ŀϵͳ +* @param[in] UINT8* chSendXiandiorAtsBuf λ׵ַ +* @return +* @note by cgh 20251103 +*/ +void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, const UINT8 chDeviceId, const UINT8 chTargetDevType, UINT8* chSendXiandiorAtsBuf) +{ + UINT16 ii = 0U; /*α*/ + UINT16 jj = 0U; /*α*/ + UINT8 kk = 0U; /*α*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); /* ID*/ + UINT8 chEmapCheckState = 0U; /*ӵͼݰ汾У*/ + UINT32 emapCrcInfo = 0U; /*ݰ汾УCRCϢ*/ + UINT32 curCycleNum = Get2oo2CurCycleNum(); /*ǰ*/ + UINT16 wMaskSum = 0U; /*λĿ*/ + UINT16 SendMaskSum = 0U; /*λֽ*/ + UINT16 curIndex = 0U; /*α*/ + UINT8 chRetVal = CI_ERROR; /*ʱ鷵ֵ*/ + UINT16 szEnvelopeIdBuf[ENVELOPE_SUM_MAX] = { 0U }; + UINT16 wEnvelopeSum = 0U; /*Ŀ*/ + UINT16 wcomTrainSumIndex = 0U; /*ͨų*/ + UINT16 comTrainSum = 0U; /*ͨųʼΪ0*/ + UINT16 wEnvelopeIndex = 0U; /**/ + InfEnvelopeStruct strEnvelope = { 0U }; /*Ϣؽṹ*/ + UINT16 wEnvelopeId = 0U; /*ID*/ + UINT8 chFunRtn = CI_ERROR; /*ݼ鷵ֵ*/ + UINT32 dwHLHTTrainID = 0U; /*гͨID*/ + UINT16 wTrainId = 0U; /*гID*/ + UINT8 hlhtIdFlag = 0U; /*ͨIDǷЧ*/ + UINT8 chHeadScreStat = 0U; /*гǰɸ־*/ + UINT8 chTailScreStat = 0U; /*гɸ־*/ + UINT8 chVirHeadScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*гǰɸ־*/ + UINT8 chVirTailScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*гɸ־*/ + UINT8 virtualCiNum = 0U; /*Ŀ*/ + UINT8 virtualCIid = 0U; /*ID*/ + UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); /*Ƿ֧*/ + UINT16 indicatorId = 0U; /*ʾƱID*/ + UINT8 indicatorState = 0U; /*ʾ״̬*/ + UINT16 indicatorNum = 0U; /*ʾĿ*/ + UINT8 indicatorType = 0U; /*ʾ*/ + UINT8 indicatorDevId = 0U; /*ʶ豸ID*/ + UINT32 dwTrainId = 0U; /*гID*/ + UINT8 cLogId = 0U; /*߼ID*/ + UINT8 cFunRetVal = CI_ERROR; /*ݼ鷵ֵ*/ + UINT8 cTiocMode = REVERSE_MODE_SHADOW; /*TIOCģʽ*/ + UINT8 cTiocCutReason = 0U; /*ԭ*/ + + if ((NULL != ciToXianDiDataBuffer) && (NULL != wDataIndex) && (NULL != chSendXiandiorAtsBuf)) + { + ii = *wDataIndex; + + /*豸֡*/ + ciToXianDiDataBuffer[ii++] = CI_ATS_STATION_FRAME; /*վ״̬֡*/ + ciToXianDiDataBuffer[ii++] = Get2oo2SheBeiType();/*Ͷ豸ID豸*/ + ciToXianDiDataBuffer[ii++] = chLocalCiId; + + ciToXianDiDataBuffer[ii++] = chTargetDevType; /*ն豸ID豸*/ + ciToXianDiDataBuffer[ii++] = chDeviceId; + + chEmapCheckState = GetCiEmapCheckVer(chLocalCiId, &emapCrcInfo, chTargetDevType); + if (CI_SUCCESS == chEmapCheckState) + { + LongToChar(emapCrcInfo, &ciToXianDiDataBuffer[ii]); /*ݰ汾УCRCϢ*/ + ii += 4u; + } + else + { + ii += 4u; + } + LongToChar(0U, &ciToXianDiDataBuffer[ii]); /*ӿЭ汾Ϣ*/ + ii += 4u; + + ShortToChar((UINT16)255U, &ciToXianDiDataBuffer[ii]); + ii += 4u; /*ʱǰĸֽΪĬϷ*/ + + LongToChar(curCycleNum, &ciToXianDiDataBuffer[ii]); + ii += 4u; /*ʱĸֽΪCIں*/ + + /*ʼӦ*/ + wMaskSum = GetSendMaskSum(chTargetDevType); + + if (0U == wMaskSum % 8u) + { + SendMaskSum = (UINT16)(wMaskSum / 8u); + } + else + { + SendMaskSum = (UINT16)(wMaskSum / 8u + 1u); + } + + curIndex = ii; + + ShortToChar(SendMaskSum, &ciToXianDiDataBuffer[ii]); /*λϢܳ*/ + ii += 2u; + + /*λϢ*/ + (void)CommonMemCpy((void*)(&ciToXianDiDataBuffer[ii]), (UINT32)(CI_TO_ATS_DATA_LEN_MAX - ii), (const void*)(chSendXiandiorAtsBuf), (UINT32)SendMaskSum); + ii = (UINT16)(ii + SendMaskSum); + + /*ͨгϢ*/ + chRetVal = CI_SUCCESS; + wEnvelopeSum = elm_GetAllEnvelope(szEnvelopeIdBuf); /*ȡеİϢ*/ + wcomTrainSumIndex = ii; + ii += 2U; + if (ENVELOPE_SUM_MAX > wEnvelopeSum) + { + for (wEnvelopeIndex = 0U; wEnvelopeIndex < wEnvelopeSum; wEnvelopeIndex++) + { + wEnvelopeId = szEnvelopeIdBuf[wEnvelopeIndex]; /*ȡID*/ + chFunRtn = elm_ConvertEnvelopeInfo(wEnvelopeId, &strEnvelope); + if (CI_SUCCESS == chFunRtn) + {/*Ϣȡɹ*/ + /*ͨų*/ + if (TYPE_CT_ENVELOPE == strEnvelope.envelopeType) + { + comTrainSum++; + wTrainId = TRAIN_ID_MIN_IVOC + (strEnvelope.trainID[0] & 0x00FFU); + hlhtIdFlag = dquDevName2HlhtId(wTrainId, 0u, &dwHLHTTrainID); /*ֽгIDתΪ4ֽڻͨID*/ + if (hlhtIdFlag == CI_SUCCESS) + {/*ͨIDѯɹ*/ + LongToChar(dwHLHTTrainID, &ciToXianDiDataBuffer[ii]); /* гID */ + ii += 4u; + } + else + { /*ʧ*/ + chRetVal = CI_ERROR; + } + + /*ǰɸ*/ + chHeadScreStat = strEnvelope.suspicHead; + chVirHeadScreStat = GetTrainVirHeadScreenPassFlag(wTrainId); + if ((CI_IVOC_HEAD_SCREEN_PASS == chHeadScreStat) || (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirHeadScreStat)) + { + /*ǰɸ״̬Ч*/ + ciToXianDiDataBuffer[ii] = CI_IVOC_HEAD_SCREEN_PASS; + ii += 1U; + } + else if ((CI_IVOC_HEAD_SCREEN_UNKNOW == chHeadScreStat) && (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirHeadScreStat)) + { + /*ǰɸ״̬Ч*/ + ciToXianDiDataBuffer[ii] = CI_IVOC_HEAD_SCREEN_UNKNOW; + ii += 1U; + } + else + { + chRetVal = CI_ERROR; + } + + /*ɸ*/ + chTailScreStat = strEnvelope.suspicTail; + chVirTailScreStat = GetTrainVirTailScreenPassFlag(wTrainId); + if ((CI_IVOC_TAIL_SCREEN_PASS == chTailScreStat) || (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chVirTailScreStat)) + { + /*ɸ״̬Ч*/ + ciToXianDiDataBuffer[ii] = CI_IVOC_TAIL_SCREEN_PASS; + ii += 1U; + } + else if ((CI_IVOC_TAIL_SCREEN_UNKNOW == chTailScreStat) && (TRAIN_VIR_SCREEN_PASS_FLAG_INVALID == chVirTailScreStat)) + { + /*ɸ״̬Ч*/ + ciToXianDiDataBuffer[ii] = CI_IVOC_TAIL_SCREEN_UNKNOW; + ii += 1U; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /* ִ*/ + } + } + else + { + /*ID*/ + chRetVal = CI_ERROR; + } + if (CI_SUCCESS != chRetVal) + { + break; + } + else + { + /*ִ*/ + } + } + } + else + { + /*гϢִ*/ + } + ShortToChar(comTrainSum, &ciToXianDiDataBuffer[wcomTrainSumIndex]); + + /*ָʾ״̬*/ + if (FUNC_SWITCH_ON == includeVirFlag) + { + virtualCiNum = GetVirtualCINum(); + ciToXianDiDataBuffer[ii++] = virtualCiNum;/**/ + for (kk = 0u; kk < virtualCiNum; kk++) + { + virtualCIid = GetVirtualCIid(kk); + ciToXianDiDataBuffer[ii++] = virtualCIid;/*ID*/ + /*ʾƱϢ*/ + indicatorNum = (UINT16)GetVirCIIndicatorConfigDataNum(virtualCIid); + ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*ʾƱ*/ + ii += 2u; + for (jj = 0u; jj < indicatorNum; jj++) + { + indicatorId = GetVirCIlocalCiIndicatorId(virtualCIid, jj); /*ʾƱƷ*/ + indicatorType = GetVirCIIndicatorType(virtualCIid, (UINT8)indicatorId); /*ȡ豸*/ /*ԭֱõڸΪIDҪתΪͼ*/ + indicatorState = GetVirCIIndicatorState(virtualCIid, (UINT8)indicatorId); /*ʾƱ״̬*/ + indicatorDevId = GetVirCIIndicatorDevId(virtualCIid, (UINT8)indicatorId); /*ʾƱID*/ + ciToXianDiDataBuffer[ii++] = indicatorType; + ciToXianDiDataBuffer[ii++] = indicatorDevId; + ciToXianDiDataBuffer[ii++] = indicatorState; + } + } + } + else + { + /*ʾƱϢ*/ + ciToXianDiDataBuffer[ii++] = 1u;/*ӿ*/ + ciToXianDiDataBuffer[ii++] = chLocalCiId; + indicatorNum = GetIndicatorCurSum(); + ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*ʾƱ*/ + ii += 2u; + for (jj = 0u; jj < indicatorNum; jj++) + { + indicatorId = GetIndicatorId(jj); + indicatorType = GetIndicatorType(indicatorId); /*ȡ豸*/ /*ԭֱõڸΪIDҪתΪͼ*/ + ciToXianDiDataBuffer[ii++] = indicatorType; /*ʾƱƷ*/ + indicatorDevId = GetIndicatorDevId(indicatorId); + ciToXianDiDataBuffer[ii++] = indicatorDevId;/*豸ID*/ + ciToXianDiDataBuffer[ii++] = GetIndicatorState(indicatorId);/*ʾƱ״̬*/ + } + } + + UpdataCiSendCmdBack_OrderBack();/**/ + if (1u > CiSendCmdStruCurSum) + { /*ȴ*/ + + ShortToChar(0, &ciToXianDiDataBuffer[ii]); /*֡ܳ*/ + ii += 2u; + } + else + { + curIndex = ii;/*֡ܳ*/ + ii += 2u; + + ShortToChar(CiSendCmdStruCurSum, &ciToXianDiDataBuffer[ii]); /*֡*/ + ii += 2u; + + for (jj = 0u; jj < CiSendCmdStruCurSum; jj++) + { + ciToXianDiDataBuffer[ii++] = 22u; /**/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].CommandType; /**/ + LongToChar(CiSendCmdDataStru[jj].CommandId, &ciToXianDiDataBuffer[ii]); /**/ + ii += 4u; + LongToChar(CiSendCmdDataStru[jj].CommandParam, &ciToXianDiDataBuffer[ii]); /**/ + ii += 4u; + ShortToChar(CiSendCmdDataStru[jj].termial_id, &ciToXianDiDataBuffer[ii]); /**/ + ii += 2u; + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].order_type; /**/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].response_type; /*Ӧ*/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].affirm_result; /*ȷϽ*/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].firstCmd_time; /*һεʱ*/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].VirCIid; /*ID*/ + ciToXianDiDataBuffer[ii++] = CiSendCmdDataStru[jj].OCid; /*OC ID*/ + + if (0u != CiSendCmdDataStru[jj].wTrainIdParam) + { + cLogId = (UINT8)(CiSendCmdDataStru[jj].wTrainIdParam & 0xFFu); + cFunRetVal = dquDevName2HlhtId(CiSendCmdDataStru[jj].wTrainIdParam, cLogId, &dwTrainId); + if (CI_ERROR == cFunRetVal) + { + cLogId = 0u; + dwTrainId = 0u; + } + else + { + ; + } + } + else + { + cLogId = 0u; + dwTrainId = 0u; + } + LongToChar(dwTrainId, &ciToXianDiDataBuffer[ii]); + ii += 4u; + + ciToXianDiDataBuffer[ii++] = 0u;/*߼*/ + } + + ShortToChar((UINT16)(ii - curIndex - 2U), &ciToXianDiDataBuffer[curIndex]); /*֡ܳ*/ + } + + /* ߼εϢ*/ + (void)PackCiToAtsLgcSgmtInfo(ciToXianDiDataBuffer, &ii); + + /* ģʽϢ */ + cTiocMode = GetTiocSystemMode(); + if (REVERSE_MODE_MAIN == cTiocMode) + { + /* ģʽ */ + ciToXianDiDataBuffer[ii] = 0x55; + } + else + { + /* Ӱģʽ */ + ciToXianDiDataBuffer[ii] = 0xAA; + } + ii++; + + ciToXianDiDataBuffer[ii] = GetTiocSystemCutState(); + ii++; + + /* ɵԭ */ + cTiocCutReason = GetTiocCanntCutReason(); + ciToXianDiDataBuffer[ii] = cTiocCutReason; + ii++; + + ii += 40u; + + *wDataIndex = ii; + } + else + { + /*μʧܣ*/ + } +} + +/** +* @brief յATS +* @param[in] const UINT8* dataBuf, ݻ +* @param[in] UINT16* dataIndex, +* @param[in] const UINT16 dataLength, ݳ +* @return CI_ERROR ʧ CI_SUCCESS ɹ +* @note by cgh 20251104 +*/ +UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex,const UINT16 wDataLength) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 ii = 0U; /*ݽ*/ + UINT16 jj = 0U; /*ʱ±*/ + UINT8 sourceType = 0U; /*Դϵͳ*/ + UINT8 targetId = 0U; /*ĿID*/ + UINT8 targetType = 0U; /*Ŀϵͳ*/ + UINT32 dataCheckInfo = 0U; /*ݰ汾УϢ*/ + UINT32 emapCrcInfo = 0U; /*ӵͼУϢ*/ + UINT8 ciEmapCheck = 0U; /*ݰ汾У*/ + UINT16 commandTotalLen = 0U; /*ܳ*/ + UINT16 commandTotalSum = 0U; /**/ + UINT8 commandLenth = 0U; /**/ + UINT8 localCiId = 0U; /*ID*/ + UINT8 systemtype = 0U; /*ϵͳ*/ + UINT16 preAtsRouteSteCmdNum = 0U; /*ATS·*/ + UINT16 wCmdStartByteNum = 0U;/*У*/ + UINT8 chCmdType = 0U; /**/ + UINT32 dwCmdParam = 0U; /**/ + UINT32 dwCmdId = 0U; /*ID*/ + UINT16 wTerminalId = 0U; /*ն˱*/ + UINT16 oVerlap_RouteId = 0U; + UINT8 chVirCi = 0U; + UINT8 chLogSecNum = 0U; + UINT8 chToaCmdNum = 0U; + UINT32 dwCmdParam_DevID = 0U; + UINT16 dwCmdParam_Type = 0U; + UINT8 dwCmdParam_Param = 0U; + UINT32 dwHlhtTrainId = 0U;/*ͨг*/ + UINT16 wTrainId = 0U;/*гID ֽֽͣڱ*/ + UINT16 logId = 0U;/*vobcʱʹö˱ 1-TC1 2-TC2 0-2IPβ೵*/ + UINT16 wParseCmdLength = 0U; + UINT8 chLogicSecIndex = 0U; + UINT16 wIndex = 0U; + + if ((NULL != dataBuf) && (NULL != dataIndex)) + { + chRetVal = CI_SUCCESS; + ii = *dataIndex; + + sourceType = dataBuf[ii++]; /*ȡݰԴ豸*/ + /*ȡݰԴ豸ID*/ + ii++; + targetType = dataBuf[ii++]; /*ȡݰĿ豸*/ + targetId = dataBuf[ii++]; /*ȡݰĿ豸ID*/ + dataCheckInfo = LongFromChar(&dataBuf[ii]); /*ȡݰ汾УϢ4ֽ*/ + ii += 4u; + /*УϢȽ*/ + ciEmapCheck = GetCiEmapCheckVer(targetId, &emapCrcInfo, sourceType); + + if (CI_SUCCESS == ciEmapCheck) + { + if (dataCheckInfo != emapCrcInfo) + { + chRetVal = CI_ERROR; + } + else + { + chRetVal = CI_SUCCESS; + } + } + else + { + chRetVal = CI_ERROR; + debug_infor_printf((const)"\nATS/Xiandi %d ReciveAtsCmdDeal emapCrcInfo Error\n", targetId); + } + + if (CI_ERROR != chRetVal) + { + /*ӿЭ汾Ϣ4ֽ,ʹã*/ + ii += 4u; + /*ϵͳʱ4ֽ*/ + ii += 4u; + /*ϵͳʱ4ֽ*/ + ii += 4u; + + commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰܳ*/ + ii += 2u; + + localCiId = GetSystemParaLocalCiId(); + systemtype = Get2oo2SheBeiType(); + + if ((targetType != systemtype) || (targetId != localCiId) + || ((CI_SYSTEM_TYPE_XIANDI != sourceType) && (CI_SYSTEM_TYPE_ATS != sourceType)) + || (0u == commandTotalLen)) + { + /*ݲϷ*/ + chRetVal = CI_ERROR; + } + else + { + commandTotalSum = ShortFromChar(&dataBuf[ii]); /*ȡݰ֡*/ + ii += 2u; + if ((0u == commandTotalSum) || (ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX < commandTotalSum)) + {/*Ϊ0*/ + + chRetVal = CI_ERROR; + } + else + { + /** ܳȵЧ*/ + chRetVal = CheckATSorXiandTotalDataLenVal(&dataBuf[ii], commandTotalSum, commandTotalLen); + + } + + if (CI_ERROR != chRetVal) + { + /*ȻȡһǴ洢·*/ + preAtsRouteSteCmdNum = GetCiRevCmdStruCurSum(); + /**/ + for (jj = preAtsRouteSteCmdNum; jj < (commandTotalSum + preAtsRouteSteCmdNum); jj++) + { + /*ȫ*/ + if (ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX > jj) + { + commandLenth = dataBuf[ii++];/*ȡ*/ + wCmdStartByteNum = ii; /*Ȳȱ*/ + chCmdType = dataBuf[ii++]; /*ȡ*/ + dwCmdId = LongFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 4u; + dwCmdParam = LongFromChar(&dataBuf[ii]);/*ȡ*/ + ii += 4u; + wTerminalId = ShortFromChar(&dataBuf[ii]);/*ȡնID*/ + ii += 2u; + + oVerlap_RouteId = ShortFromChar(&dataBuf[ii]);/*ȡι·ID*/ + ii += 2U; + + /*Ԥ*/ + ii += 2U; + chVirCi = dataBuf[ii++];/*ID*/ + /*Ԥ*/ + ii++; + + /*¼*/ + dwHlhtTrainId = LongFromChar(&dataBuf[ii]); + ii += 4u; + (void)dquHlhtId2VobcName(dwHlhtTrainId, &wTrainId, &logId);/*4ֽڻͨת2ֽ*/ + + chLogSecNum = dataBuf[ii++];/*߼*/ + /*š豸IDз*/ + dwCmdParam_DevID = dwCmdParam & 0xffff0000u; + dwCmdParam_Type = (UINT16)(dwCmdParam & 0x0000ff00u); + dwCmdParam_Param = (UINT8)(dwCmdParam & 0x000000ffu); /*ӷYF0083-227ȱ޸*/ + if ((0xffffffffu == dwCmdId) || (0xffff0000u == dwCmdParam_DevID) || + (0x0000ff00u == dwCmdParam_Type) || (0x000000ffu == dwCmdParam_Param)) + { + chRetVal = CI_ERROR; + } + else + { + if ((ATS_CMD_SET_PHYSEC_ERR == chCmdType) + || (ATS_CMD_CANCEL_PHYSEC_FIRST == chCmdType) + || (ATS_CMD_CANCEL_PHYSEC_SECOND == chCmdType) + || (ATS_CMD_TOA_RESET_FIRST == chCmdType) + || (ATS_CMD_TOA_RESET_SECOND == chCmdType)) + { + chToaCmdNum++; + chRetVal = ToaAddCmd(chCmdType, wTrainId, dwCmdId, wTerminalId, chVirCi, dwCmdParam); + if ((CI_SUCCESS == chRetVal) && (0u != chLogSecNum)) + { + chRetVal = CI_ERROR; + } + else + { + ; + } + } + else + { + CiRevCmdDataStru[jj].CommandType = chCmdType; /*ȡ*/ + CiRevCmdDataStru[jj].CommandId = dwCmdId; /*ȡ*/ + CiRevCmdDataStru[jj].CommandParam = dwCmdParam;/*ȡ*/ + CiRevCmdDataStru[jj].termial_id = wTerminalId;/*ȡնID*/ + CiRevCmdDataStru[jj].VirCIid = chVirCi;/*ID*/ + CiRevCmdDataStru[jj].wTrainIdParam = wTrainId; /* гID*/ + CiRevCmdDataStru[jj].OverLapRouteID = oVerlap_RouteId; /* ι·ID*/ + + CiRevCmdDataStru[jj].chLogicSecSum = chLogSecNum;/*߼*/ + if (MAX_ROUTE_IN_LT_NUM > CiRevCmdDataStru[jj].chLogicSecSum) + { + for (chLogicSecIndex = 0u; chLogicSecIndex < CiRevCmdDataStru[jj].chLogicSecSum; chLogicSecIndex++) + { + CiRevCmdDataStru[jj].wLogicSecData[chLogicSecIndex] = ShortFromChar(&dataBuf[ii]);/*߼ID*/ + ii += 2u; + } + } + else + { + /*Խ*/ + chRetVal = CI_ERROR; + } + } + } + if (CI_SUCCESS == chRetVal) + { + /*У*/ + wParseCmdLength = (UINT16)(ii - wCmdStartByteNum); + if (commandLenth != wParseCmdLength) + {/*ȳ*/ + chRetVal = CI_ERROR; + + } + else + { + chRetVal = CI_SUCCESS; + } + } + else + { + ; + } + + if (CI_ERROR == chRetVal) + {/*ݴ󣬶*/ + /*Ȿ*/ + ToaClearCmd(); + commandTotalSum = 0u; + for (wIndex = preAtsRouteSteCmdNum; wIndex <= jj; wIndex++) + { + (void)CommonMemSet(&CiRevCmdDataStru[wIndex], (UINT32)sizeof(CommandDataStruct), 0u, (UINT32)sizeof(CommandDataStruct)); + } + break; + } + else + { + /*޲*/ + } + + } + } + + /**/ + if (CI_SUCCESS == chRetVal) + { + CiRevCmdStruCurSum = commandTotalSum - chToaCmdNum + preAtsRouteSteCmdNum;/**/ + + /*Ԥ40ֽ*/ + ii += 40U; + } + else + { + CiRevCmdStruCurSum = preAtsRouteSteCmdNum;/*ֻ¼ڴ洢*/ + } + + + if (wDataLength != (ii- *dataIndex)) + { + CiRevCmdStruCurSum = 0u; + chRetVal = CI_ERROR; + } + else + { + /*޲*/ + } + + LastCmdSourceSysType = sourceType;/*һβԴϵͳ*/ + } + } + } + else + { + ; /*ʧ*/ + } + } + else + { + chRetVal = CI_ERROR; + } + + + + if (CI_SUCCESS == chRetVal) + { + *dataIndex = ii; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/** +* @brief ATSںϢ +* @param[in] UINT8 chDeviceType 豸 +* @param[in] UINT8 chDeviceId 豸ID +* @return +* @note by cgh 20251105 +*/ +void UpdateAtsCmdDataCycInfo(UINT8 chDeviceType, UINT8 chDeviceId) +{ + UINT16 ii = 0U; + UINT8 chExistFlag = 0U; /*ڱ־*/ + UINT32 dwReciveCmdDataAtsCycNum = 0U; /*յATSʱATSں*/ + + if (((CI_SYSTEM_TYPE_XIANDI == chDeviceType) || (CI_SYSTEM_TYPE_ATS == chDeviceType)) && (0U != chDeviceId)) + { + dwReciveCmdDataAtsCycNum = GetHLHTHeadCtxSrcCrntSN(chDeviceType, chDeviceId); + + for (ii = 0U; ii < gReciveAtsCmdDataDeviceSum; ii++) + { + if ((szReciveAtsCmdDataCycInfo[ii].chDeviceType == chDeviceType) && (szReciveAtsCmdDataCycInfo[ii].chDeviceId == chDeviceId)) + { + chExistFlag = 1U; + break; + } + else + { + ; /**/ + } + } + + if (1U == chExistFlag) + { + szReciveAtsCmdDataCycInfo[ii].dwReciveCmdDataAtsCycNum = dwReciveCmdDataAtsCycNum; + } + else + { + /*ûҵ¼һ*/ + if (gReciveAtsCmdDataDeviceSum < (ATS_SUM_MAX * 2U)) + { + szReciveAtsCmdDataCycInfo[gReciveAtsCmdDataDeviceSum].chDeviceType = chDeviceType; + szReciveAtsCmdDataCycInfo[gReciveAtsCmdDataDeviceSum].chDeviceId = chDeviceId; + szReciveAtsCmdDataCycInfo[gReciveAtsCmdDataDeviceSum].dwReciveCmdDataAtsCycNum = dwReciveCmdDataAtsCycNum; + gReciveAtsCmdDataDeviceSum++; + } + else + { + ; + } + } + } + else + { + ; + } +} + +/** +* @brief ȡյATSʱATSں +* @param[in] UINT8 chDeviceType 豸 +* @param[in] UINT8 chDeviceId 豸ID +* @return UINT32 յATSʱATSں +* @note by cgh 20251105 +*/ +UINT32 GetReciveCmdDataAtsCycNum(UINT8 chDeviceType, UINT8 chDeviceId) +{ + UINT32 dwReval = 0U; + UINT16 ii = 0U; + + if (((CI_SYSTEM_TYPE_XIANDI == chDeviceType) || (CI_SYSTEM_TYPE_ATS == chDeviceType)) && (0U != chDeviceId)) + { + for (ii = 0U; ii < gReciveAtsCmdDataDeviceSum; ii++) + { + if ((szReciveAtsCmdDataCycInfo[ii].chDeviceType == chDeviceType) && (szReciveAtsCmdDataCycInfo[ii].chDeviceId == chDeviceId)) + { + dwReval = szReciveAtsCmdDataCycInfo[ii].dwReciveCmdDataAtsCycNum; + break; + } + else + { + ; /**/ + } + } + } + else + { + ; + } + + return dwReval; +} + +/** +* @brief RC/CI豸ͨ״̬Ϣ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* ii CIATSֵص +* @return +* @note by cgh 20251111 +*/ +void PackRcOrCiDeciveCommonState(UINT8* ciToXianDiDataBuffer, UINT16* ii) +{ + UINT16 wIndex = 0U; + UINT8 chComputerId = 0U; /*ƽ̨ID*/ + UINT8 chRunMode = 0U; + UINT8 chSelfState = 0U; /*Aϵ״̬*/ + UINT8 chOtherState = 0U; /*Bϵ״̬*/ + UINT8 chAProcessMode = 0U; /*Aϵ״̬*/ + UINT8 chBProcessMode = 0U; /*Bϵ״̬*/ + UINT8 chRciCommCCUDeviceState = 0U; /*ͨ/չͨ״̬*/ + + if ((NULL != ciToXianDiDataBuffer) && (NULL != ii)) + { + wIndex = *ii; + + /*RC/CI״̬*/ + ciToXianDiDataBuffer[wIndex] = GetLocalCiBackUpPattern(); + wIndex++; + + chComputerId = Get2oo2ComputerId(); /*ȡƽ̨ID*/ + chRunMode = Get2oo2ProcessMode(); /*ȡƽ̨ģʽ*/ + chRunMode |= Get2oo2OhterProcessMode(); + + if ((chComputerId > 0U) && (chRunMode > 0U)) + { + chSelfState = ((chRunMode) & ((UINT8)0xF0)) >> 4U; + chOtherState = (chRunMode) & ((UINT8)0x0F); + + if (1U == chComputerId) + { + if (0x0aU == chSelfState) + { + chAProcessMode = SHOW_2OO2_STATE_MAIN; + } + else if (0x05U == chSelfState) + { + chAProcessMode = SHOW_2OO2_STATE_BACKUP; + } + else + { + chAProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + + if (0x0aU == chOtherState) + { + chBProcessMode = SHOW_2OO2_STATE_MAIN; + } + else if (0x05U == chOtherState) + { + chBProcessMode = SHOW_2OO2_STATE_BACKUP; + } + else + { + chBProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + } + else if (2U == chComputerId) + { + if (0x0aU == chSelfState) + { + chBProcessMode = SHOW_2OO2_STATE_MAIN; + } + else if (0x05U == chSelfState) + { + chBProcessMode = SHOW_2OO2_STATE_BACKUP; + } + else + { + chBProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + + if (0x0aU == chOtherState) + { + chAProcessMode = SHOW_2OO2_STATE_MAIN; + } + else if (0x05U == chOtherState) + { + chAProcessMode = SHOW_2OO2_STATE_BACKUP; + } + else + { + chAProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + } + else + { + /*RC/CI Aϵ״̬*/ + chAProcessMode = SHOW_2OO2_STATE_UNKNOW; + + /*RC/CI Bϵ״̬*/ + chBProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + } + else + { + /*ϵΪ*/ + /*RC/CI Aϵ״̬*/ + chAProcessMode = SHOW_2OO2_STATE_UNKNOW; + + /*RC/CI Bϵ״̬*/ + chBProcessMode = SHOW_2OO2_STATE_UNKNOW; + } + + /*RC/CI Aϵ״̬*/ + ciToXianDiDataBuffer[wIndex] = chAProcessMode; + wIndex++; + + /*RC/CI Bϵ״̬*/ + ciToXianDiDataBuffer[wIndex] = chBProcessMode; + wIndex++; + + /*ԴϢ*/ + RcOrCiDeciveCommonStateDeal(ciToXianDiDataBuffer, &wIndex); + + chRciCommCCUDeviceState = CheckRCICommCCUDeviceStatue(); + if (CI_SUCCESS == chRciCommCCUDeviceState) + { + /*ͨ/չ嶼ͨ*/ + ciToXianDiDataBuffer[wIndex] = INDICATOR_SHOW_COMM_GOOD; + } + else + { + /*ͨ/չͨ쳣 */ + ciToXianDiDataBuffer[wIndex] = INDICATOR_SHOW_COMM_BAD; + } + /*ͨ豸*/ + wIndex++; + + *ii = wIndex; + } + 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..df8577d 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.h @@ -69,6 +69,17 @@ #define OC_TO_ATS_SWITCH_ZZJ_NORMAL ((UINT8)0x55) /*OCATSĶǣӦ״̬-*/ #define OC_TO_ATS_SWITCH_ZZJ_ALARM ((UINT8)0xAA) /*OCATSĶǣӦ״̬-*/ +#define ATS_CI_INTERFACE_INFOTYPE ((UINT16)0x0407U) /*ATS-ӿ*/ +#define RCI_ATS_INFO_TYPE_COMMON_STATE ((UINT16)0x0201U) /*RCI->ATSͨ״̬Ϣڷ*/ +#define RCI_ATS_INFO_TYPE_STATION_STATE ((UINT16)0x0202U) /*RCI->ATSվ״̬Ϣ1ڷ*/ +#define RCI_ATS_INFO_TYPE_DEVICE_STATE ((UINT16)0x0203U) /*RCI->ATS豸״̬Ϣ1ڷ*/ +#define ATS_CI_INFO_TYPE_HEART_STATE ((UINT16)0x0204U) /*ATS->CI״̬Ϣڷ*/ +#define ATS_CI_INFO_TYPE_CMD_CONTROL ((UINT16)0x0205U) /*ATS->CIϢATS*/ + +#define SHOW_2OO2_STATE_MAIN ((UINT8)0x55U) /*ʾϵ״̬-ϵ*/ +#define SHOW_2OO2_STATE_BACKUP ((UINT8)0xaaU) /*ʾϵ״̬-ϵ*/ +#define SHOW_2OO2_STATE_UNKNOW ((UINT8)0xFFU) /*ʾϵ״̬-δ֪*/ + /*ִеϢ*/ typedef struct s_PlusBoxDataSendATS { @@ -106,6 +117,14 @@ typedef struct s_SwitchZzjDataSendATS UINT8 szSwitchIncldeZzjState[MAX_OC_SWITCH_INCLUDE_ZZJ_NUM]; /*ATSĵӦת޻״̬*/ }OcToATSSwitchZzjData; +/*һյATSݵںϢ*/ +typedef struct s_ReciveAtsCmdDataCycInfo +{ + UINT8 chDeviceType; /*豸*/ + UINT8 chDeviceId; /*豸ID*/ + UINT32 dwReciveCmdDataAtsCycNum; /*յATSʱATSں*/ +}ReciveAtsCmdDataCycInfo; + #ifdef __cplusplus extern "C" { #endif @@ -121,26 +140,32 @@ extern CommandDataStruct CiSendBackDataTempStru[CI_TO_ATSORXIANDI_CMD_DATA_STRU_ extern UINT16 CiSendBackDataTempStruSum; extern UINT8 LastCmdSourceSysType; extern UINT32 FirstCmdId; /*״βȷϵID*/ +extern ReciveAtsCmdDataCycInfo szReciveAtsCmdDataCycInfo[ATS_SUM_MAX * 2U]; /*յATSںϢ*/ +extern UINT16 gReciveAtsCmdDataDeviceSum; /*յATS豸Ŀ*/ /* * ֡ * ˵ const UINT8* dataBuf, ݻ * const UINT16 dataLength, ݳ +* const UINT8 chDevType 豸 +* const UINT8 chDeciveId 豸ID * ֵ 0: ݽʧ -* 1: ݽɹ +* 1: ݽɹ +* edit by cgh 20251104 */ -UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength); +UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 chDevType, const UINT8 chDeciveId); /* * ATSֵ -* ˵ +* ˵ QueueStruct* ciToAtsDataQueue, Ͷеַ * const UINT8 deviceId, ĿϵͳID * const UINT8 targetDevType, Ŀϵͳ * const UINT8 frame,֡ +* UINT8* chSendXiandiorAtsBuf λ׵ַ * ֵ 0: ʧ -* 1: ɹ +* 1: ɹ */ -UINT8 PackCiToAtsOrXianDiData( const UINT8 deviceId, const UINT8 targetDevType,const UINT8 frame); +UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, const UINT8 frame, UINT8* chSendXiandiorAtsBuf); /* * ȡCIյIJṹ鳤 @@ -366,6 +391,117 @@ 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); + +/** +* @brief RC/CI豸ͨ״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* ii CIATSֵص +* @return +* @note by cgh 20251103 +*/ +void RcOrCiDeciveCommonStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* ii); + +/** +* @brief ATSͨ豸״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* wDataIndex CIATSֵص +* @param[in] const UINT8 chDeviceId, ĿϵͳID +* @param[in] const UINT8 chTargetDevType, Ŀϵͳ +* @return +* @note by cgh 20251103 +*/ +void SendAtsCommonDeviceStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, const UINT8 chDeviceId, const UINT8 chTargetDevType); + +/** +* @brief ATSͨվ״̬ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* wDataIndex CIATSֵص +* @param[in] const UINT8 chDeviceId, ĿϵͳID +* @param[in] const UINT8 chTargetDevType, Ŀϵͳ +* @param[in] UINT8* chSendXiandiorAtsBuf λ׵ַ +* @return +* @note by cgh 20251103 +*/ +void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, const UINT8 chDeviceId, const UINT8 chTargetDevType, UINT8* chSendXiandiorAtsBuf); + +/** +* @brief յATS +* @param[in] const UINT8* dataBuf, ݻ +* @param[in] UINT16* dataIndex, +* @param[in] const UINT16 dataLength, ݳ +* @return CI_ERROR ʧ CI_SUCCESS ɹ +* @note by cgh 20251104 +*/ +UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex, const UINT16 wDataLength); + +/** +* @brief ATSںϢ +* @param[in] UINT8 chDeviceType 豸 +* @param[in] UINT8 chDeviceId 豸ID +* @return +* @note by cgh 20251105 +*/ +void UpdateAtsCmdDataCycInfo(UINT8 chDeviceType, UINT8 chDeviceId); + +/** +* @brief ȡյATSʱATSں +* @param[in] UINT8 chDeviceType 豸 +* @param[in] UINT8 chDeviceId 豸ID +* @return UINT32 յATSʱATSں +* @note by cgh 20251105 +*/ +UINT32 GetReciveCmdDataAtsCycNum(UINT8 chDeviceType, UINT8 chDeviceId); + +/** +* @brief RC/CI豸ͨ״̬Ϣ +* @param[in] UINT8* ciToXianDiDataBuffer CIATSֵص +* @param[in] UINT16* ii CIATSֵص +* @return +* @note by cgh 20251111 +*/ +void PackRcOrCiDeciveCommonState(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..a328f0b 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAxleData.c @@ -124,7 +124,7 @@ UINT8 InitAxleToCiDataStru(void) UINT8 deviceSum = 0u; /*豸*/ UINT8* deviceIdBuf = NULL; /*豸ID*/ UINT8 i = 0u; /*ѭ*/ - UINT8 j = 0u; /*ѭ*/ + UINT16 j = 0u; /*ѭ*/ UINT8 ciId = 0u; /*CI ID*/ UINT8 axleId = 0u; /*ID*/ UINT16 axleName = 0u; /*豸ƣ+ID*/ @@ -137,15 +137,18 @@ UINT8 InitAxleToCiDataStru(void) UINT8 belongAxleSysId = 0u; /*ID*/ UINT16 axlePhySecSum = 0u; /*ϵͳĿ*/ UINT8 pyhIsThisLine = 0u; - UINT8 cPrtclVerBtwCiAndAxle = 0U; /*ͼЭУ汾*/ + UINT8 chAxisLogId = 0U; ciId = GetSystemParaLocalCiId(); - ciName = (CI_SYSTEM_TYPE_CI) * 256U + ciId; - rtn = DsuRsspInitWl((const)DataPath,0,NULL,ciName, 0, &dsuRsspInfo); + ciName = (CI_SYSTEM_TYPE_RCI) * 256U + ciId; + rtn = DsuRsspInitWl((const)DataPath, 0, NULL, ciName, 0, &dsuRsspInfo); + if (CI_SUCCESS == rtn) { deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸*/ deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸ID*/ + chAxisLogId = GetAxisLogId(); + if ((deviceSum > 0u) && (deviceIdBuf != NULL)) { phySecCurSum = GetPhySecCurSum(); @@ -153,73 +156,93 @@ 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, chAxisLogId, &axieEtcsId); /*ȡụͨID*/ + + rtn &= dquDevName2HlhtId(ciName, 0U, &ciEtcsId); /*ȡͨID*/ if (CI_SUCCESS == rtn) /*GAL㻥ͨIDȡɹ*/ { - if(axleId>=AXIS_TO_CI_SUM_MAX) + if ((UINT16)axleId >= AXIS_TO_CI_SUM_MAX) { + rtn = CI_ERROR; break;/*룬ֹԽ*/ } - axisToCiDataStru[axleId].deviceType = CI_SYSTEM_TYPE_AXIS; - axisToCiDataStru[axleId].axisSystemId = deviceIdBuf[i]; - axisToCiDataStru[axleId].axisEtcsId = axieEtcsId; - axisToCiDataStru[axleId].ciEtcsId = ciEtcsId; - - (void)memset(axisToCiDataStru[axleId].PhySecIdx, (INT)AXISDATASTR_IDX, PHYSICAL_SECTION_SUM_MAX); /*Ĭ±ΪЧλ*/ - for (j = 0u; j < phySecCurSum; j++) /**/ + else { - phySecId = GetPhySecId(j); - belongCiId = GetPhySecBelongCiId(phySecId); - belongAxleSysId = GetPhySecBelongAxisSysId(phySecId); - pyhIsThisLine = GetPhyIsThisLineState(phySecId); /*Ƿ·*/ - if ((0U < phySecId) && (phySecId < PHYSICAL_SECTION_SUM_MAX) && (belongCiId == ciId) - && (belongAxleSysId == axleId) && (DEV_IS_THIS_LINE_YES == pyhIsThisLine)) + axisToCiDataStru[axleId].deviceType = CI_SYSTEM_TYPE_AXIS; + axisToCiDataStru[axleId].axisSystemId = deviceIdBuf[i]; + axisToCiDataStru[axleId].axisEtcsId = axieEtcsId; + axisToCiDataStru[axleId].ciEtcsId = ciEtcsId; + + (void)CommonMemSet((void*)&axisToCiDataStru[axleId].PhySecIdx, (UINT32)sizeof(UINT8) * PHYSICAL_SECTION_SUM_MAX, AXISDATASTR_IDX, (UINT32)sizeof(UINT8) * PHYSICAL_SECTION_SUM_MAX); + + for (j = 0u; j < phySecCurSum; j++) /**/ { - axlePhySecSum = axisToCiDataStru[axleId].SectionSum; - - if (CI_INCLUDE_AXIS_MAX_SUM > axlePhySecSum) + phySecId = GetPhySecId(j); + belongCiId = GetPhySecBelongCiId(phySecId); + belongAxleSysId = GetPhySecBelongAxisSysId(phySecId); + pyhIsThisLine = GetPhyIsThisLineState(phySecId); /*Ƿ·*/ + if ((0U < phySecId) && (phySecId < PHYSICAL_SECTION_SUM_MAX) && (belongCiId == ciId) + && (belongAxleSysId == axleId) && (DEV_IS_THIS_LINE_YES == pyhIsThisLine)) { - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].PhySecId = phySecId; - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].gdRelayState = RELAY_STATE_DOWN; - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].faultInfo = 0u; - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].showAndReplyInfo = 0u; - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].PreResetRst = RELAY_STATE_DOWN; - axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].State = RELAY_STATE_DOWN; + axlePhySecSum = axisToCiDataStru[axleId].SectionSum; - axisToCiDataStru[axleId].PhySecIdx[phySecId] = (UINT8)(axlePhySecSum); + if (CI_INCLUDE_AXIS_MAX_SUM > axlePhySecSum) + { + axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].PhySecId = phySecId; + axisToCiDataStru[axleId].axisDataStr[axlePhySecSum].gdRelayState = RELAY_STATE_DOWN; + 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].axisDataStr[axlePhySecSum].chResetCmdTagBack = 0U; - axisToCiDataStru[axleId].SectionSum++; + axisToCiDataStru[axleId].PhySecIdx[phySecId] = (UINT8)(axlePhySecSum); + axisToCiDataStru[axleId].dwLastRecvDataCycNum = 0U; + + axisToCiDataStru[axleId].SectionSum++; + } + else /**/ + { + rtn = CI_ERROR; + break; + } } - else /**/ + else { - rtn = CI_ERROR; - break; + ; /**/ } } } } + else + { + ; + } + + if (CI_ERROR == rtn) + { + debug_infor_printf((const)"InitAxleToCiDataStru fail,dquDevName2HlhtId error\r\n"); + break; + } + else + { + ; /*ʼ*/ + } } } else { - rtn = CI_SUCCESS; + ; } } - if (CI_ERROR == rtn) + else { - debug_infor_printf((const)"InitAxleToCiDataStru fail.\r\n"); + debug_infor_printf((const)"InitAxleToCiDataStru fail,DsuRsspInitWl error\r\n"); } return rtn; @@ -255,7 +278,12 @@ 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; /*ε*/ + UINT8 chResetCmdTag = 0U; /*λǩ*/ + UINT8 chCurSystemAreaState = 0U; /*ǰϵͳ״̬*/ + UINT32 dwSystemUpdateMainUseCycNum = 0U; /*ϵͳʼں*/ deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸*/ deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS); /*ȡͨAxis豸ID*/ @@ -273,6 +301,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; } @@ -311,7 +342,7 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons galPrtclVer = GetCiAndAxisPrtclCheckVer(); /*ȡϵͳЭ汾*/ galAxisDataVer = GetCiTranAxisDataCheckVer(localCiId, axisDevName); /*ȡϵͳݰ汾*/ headRet = GalHeadCheck(axisToCiDataStru[systemId].axisEtcsId, axisToCiDataStru[systemId].ciEtcsId, GAL_INTERFACE, galPrtclVer, galAxisDataVer, &hlhtGalHead, &errCode); - debug_infor_printf((const)"\nAXLE %d GAL Check Result:%d errCode:%d", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + debug_infor_printf((const)"\nAXLE %d GAL Check Result:%d errCode:%d\n", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ if (HLHT_HEAD_SUCCESS == headRet) { @@ -450,6 +481,258 @@ 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 if (AXIS_TYPE_STANDARD_INTERFACE == acFty) + { + if (0XAAU == dataBuf[ii]) + { + ii++; /**/ + phySecNum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2U;; + wPhySecCurSum = axisToCiDataStru[systemId].SectionSum; + + if ((AXIS_TO_CI_SECTION_SUM_MAX > phySecNum) && (wPhySecCurSum == phySecNum)) + { + 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 + { /*01B:ռ 11B:쳣ռ 00B:δ֪*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].gdRelayState = RELAY_STATE_DOWN; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + if (0x01U == ((dataBuf[ii] >> 2U) & 0x03U)) + { + /*Ԥλɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].PreResetRst = RELAY_STATE_UP; + } + else + { + /*Ԥλδִлִδɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].PreResetRst = RELAY_STATE_DOWN; + } + } + else + { + ; + } + + if (CI_SUCCESS == retVal) + { + chResetCmdTag = (dataBuf[ii] >> 4U); + if (PHY_SEC_RESET_CMD_FLAG_SUM_MAX >= chResetCmdTag) + { + /*Ԥλɹ*/ + axisToCiDataStru[systemId].axisDataStr[axisDataStrIdx].chResetCmdTagBack = chResetCmdTag; + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"\nAxis chResetCmdTag:%d ERROR\n", chResetCmdTag); + } + + ii++; + } + else + { + ; + } + + if (CI_SUCCESS != retVal) + { + retVal = CI_ERROR; + break; /*ʧܣֹͣʧ*/ + } + else + { + /**/ + } + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"\nAxis phySecNum:%d ERROR,RC wPhySecCurSum::%d\n", phySecNum, wPhySecCurSum); + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"\nAxis PackageType:%d ERROR\n", dataBuf[ii]); + } + } else { retVal = CI_ERROR; @@ -458,7 +741,7 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons else /*Ч*/ { retVal = CI_ERROR; - debug_infor_printf((const)"\naxleSys gal check err.axleSysId=%d,remainValidiy=%d,curCycle=%d,RSN=%d,TSN=%d,LTSN=%d", systemId, remainValidiy, curCycleNo, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN); + debug_infor_printf((const)"\naxleSys gal check err.axleSysId=%d,remainValidiy=%d,curCycle=%d,RSN=%d,TSN=%d,LTSN=%d\n", systemId, remainValidiy, curCycleNo, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN); } if (CI_SUCCESS == retVal) @@ -469,6 +752,21 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_AXIS, systemId, hlhtGalHead.recvOppMsgSN); SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_AXIS, systemId, hlhtGalHead.preOwnMsgSN); SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_AXIS, systemId, curCycleNo); + + chCurSystemAreaState = GetLocalCiBackUpPattern(); + dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum(); + /*ͨñͷУϷ*/ + if ((SYSTEM_WORK_MODE_MAIN != chCurSystemAreaState) + || ((SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState) && (hlhtGalHead.recvOppMsgSN < dwSystemUpdateMainUseCycNum))) + { + /*ǰûõδظʱݣֻ洢ͨñͷյ*/ + debug_infor_printf((const)"\nnot deal axleSysId=%d data,because chCurSystemAreaState %d or hlhtGalHead.recvOppMsgSN %d < dwSystemUpdateMainUseCycNum,\n", systemId, chCurSystemAreaState, hlhtGalHead.recvOppMsgSN); + + } + else + { + axisToCiDataStru[systemId].dwLastRecvDataCycNum = curCycleNo; + } } } else if (HLHT_HEAD_INIT == headRet) @@ -515,6 +813,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; } @@ -528,17 +829,6 @@ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, cons return retVal; } -/* -* ȡɼݽṹ -* ˵ void -* ֵ NULL: ȡʧ -* !NULL: ɼṹָ -*/ -AxisToCiDataStruct* GetCollAxisDataStruct(void) -{ - return axisToCiDataStru; -} - /* * Axis * ˵ void @@ -592,6 +882,15 @@ 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; /*ε*/ + UINT8 chResetCmdTagBack = 0U; /*ǩ*/ + UINT8 chResetCmdTag = 0U; /*ǩ*/ + UINT8 chAxisLogId = 0U; /*߼ID*/ + axisDevName = (CI_SYSTEM_TYPE_AXIS) * 256U + axisSysId; if (AXIS_TO_CI_SUM_MAX > axisSysId) { @@ -742,6 +1041,213 @@ 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 if (AXIS_TYPE_STANDARD_INTERFACE == acFty) + { + CiToAxisDataBuffer[ii] = 0X55U; + ii++; + + phyCount = axisToCiDataStru[axisSysId].SectionSum; + ShortToChar(phyCount, &CiToAxisDataBuffer[ii]); + ii += 2U; + + for (jj = 0U; jj < phyCount; jj++) + { + wIndexInAxle += 1U; + phySecId = GetPhyIdByIndexInAxle(axisSysId, wIndexInAxle); /*ID*/ + fwCycle = GetPhySecResetStartCycNum(phySecId); + chResetCmdTagBack = GetPhySecResetCmdTagBack(phySecId); + chResetCmdTag = GetPhySecResetCmdTag(phySecId); + + if (0U < fwCycle) + { + if (chResetCmdTagBack == chResetCmdTag) + { + CiToAxisDataBuffer[ii] = CiToAxisDataBuffer[ii] | (0X00U); + } + else + { + resetType = GetPhySecSectionResetType(phySecId); + if (PHYSICAL_SECTION_PRE_RESET_NO == resetType) + { + CiToAxisDataBuffer[ii] = CiToAxisDataBuffer[ii] | (0X0AU); + } + else if (PHYSICAL_SECTION_PRE_RESET_YES == resetType) + { + CiToAxisDataBuffer[ii] = CiToAxisDataBuffer[ii] | (0X05U); + } + else + { + retVal = CI_ERROR; + } + } + } + else + { + /**/ + CiToAxisDataBuffer[ii] = CiToAxisDataBuffer[ii] | (0X00U); + } + + CiToAxisDataBuffer[ii] = CiToAxisDataBuffer[ii] | ((UINT8)(chResetCmdTag << 4U)); + ii++; + + if (CI_ERROR == retVal) + { + break; + } + else + { + ; /**/ + } + } + } else { retVal = CI_ERROR; @@ -769,7 +1275,8 @@ UINT8 PackCiToAxisData(UINT8 axisSysId) if (CI_SUCCESS == retVal)/*֮ǰIJdzɹ*/ { dstDevId = (((UINT16)(CI_SYSTEM_TYPE_AXIS << 8u)) | ((UINT16)axisSysId)); - outnetSafeSendRtn = OutnetSafeSend(dstDevId, 1U, &CiToAxisDataBuffer[0], ii); + chAxisLogId = GetAxisLogId(); + outnetSafeSendRtn = OutnetSafeSend(dstDevId, chAxisLogId, &CiToAxisDataBuffer[0], ii); if (1u == outnetSafeSendRtn) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ @@ -951,6 +1458,79 @@ 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; +} + +/* +* ȡϵͳ߼ID +* ˵ +* ֵ ϵͳ߼ID +* by cgh 20250903 +*/ +UINT8 GetAxisLogId(void) +{ + UINT8 rtn = CI_ERROR; /*ֵ*/ + UINT8 chSystemWorkMode = 0U; /*ϵͳģʽ*/ + UINT8 chSystemWorkType = 0U; /*ϵͳ*/ + + chSystemWorkMode = GetLocalRcWorkMode(); + chSystemWorkType = GetSystemWorkType(); + + if (SYSTEM_WORK_MODE_ALL == chSystemWorkType) + { + if (RC_WORK_MODE_CI == chSystemWorkMode) + { + rtn = 1U; + } + else + { + rtn = 2U; + } + } + else + { + rtn = 1U; + } + + return rtn; +} \ 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..ec9dd7b 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,10 +51,12 @@ 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; /*״̬*/ - + UINT8 chResetCmdTagBack; /*λǩ*/ } AxisCollDataStruct; typedef struct S_AxisToCiDataStruct @@ -65,6 +68,7 @@ typedef struct S_AxisToCiDataStruct UINT8 SectionSum; /*: ֶ̬*/ UINT8 PhySecIdx[PHYSICAL_SECTION_SUM_MAX]; /*ڼϢṹλ*/ AxisCollDataStruct axisDataStr[CI_INCLUDE_AXIS_MAX_SUM]; /*Ϣṹ*/ + UINT32 dwLastRecvDataCycNum; /*յں*/ }AxisToCiDataStruct; @@ -85,14 +89,6 @@ extern "C" { */ UINT8 ParseAxisToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId); -/* -* ȡɼݽṹ -* ˵ void -* ֵ NULL: ȡʧ -* !NULL: ɼṹָ -*/ -AxisToCiDataStruct* GetCollAxisDataStruct(void); - #if 0 /* * ͨŲɼ @@ -126,6 +122,25 @@ 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); + +/* +* ȡϵͳ߼ID +* ˵ +* ֵ ϵͳ߼ID +* by cgh 20250903 +*/ +UINT8 GetAxisLogId(void); + #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCiData.c index 310dc67..26c1b86 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); - /* : 컥ͨӦ @@ -512,69 +492,6 @@ UINT16 packetOderQueue[16] = IntconPhySecDataStrut IntconPhySecData[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ*/ -/* -* CI -* ˵ void -* ֵ 0: ʧ -* 1: ɹ -*/ -UINT8 ParseCiToCiData(void) -{ - QueueStruct* ci0ToCiDataQueue = Get2oo2CiRecvCiDataQueue(); - UINT32 dataQueueTotalLen = 0u; /*ܳ*/ - UINT8 dataLenBuf[2]; /*ݳ*/ - UINT8 tempBuf[7]; /*ʱ*/ - UINT8 tempDataBuf[5000]; /*ʱ*/ - UINT16 appDataLen = 0u; /*һ֡ݳ*/ - - if (ci0ToCiDataQueue != NULL) - { - /*ȡܳ*/ - dataQueueTotalLen = QueueStatus(ci0ToCiDataQueue); - - while (dataQueueTotalLen > 0u) - { - (void)QueueScan(2, dataLenBuf, ci0ToCiDataQueue); - - appDataLen = (UINT16) (ShortFromChar(dataLenBuf) + 2u); /*ȡ֡ݳ*/ - - if ((dataQueueTotalLen >= appDataLen) && (appDataLen >= 6u)) - { - /*ǰ6ֽ*/ - (void)QueueRead(6, tempBuf, ci0ToCiDataQueue); - - /*Ӷжһ֡*/ - (void) QueueRead(appDataLen-6U, tempDataBuf, ci0ToCiDataQueue); - - /*CICI֡*/ - (void)ParseCiToCiDataFrame(tempDataBuf, (UINT16)(appDataLen-6U)); - - } - else - { - break; - } - - /*ȡܳ*/ - dataQueueTotalLen = QueueStatus(ci0ToCiDataQueue); - } - - if (dataQueueTotalLen > 0u) - { - (void)QueueClear(ci0ToCiDataQueue); /**/ - - return 0u; - } - else - { - return 1u; - } - } - else - { - return 0u; - } -} /* * УCICI֡ݳȺϷ @@ -590,8 +507,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 +525,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) * Уվ * Уܳ @@ -635,9 +552,7 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT UINT16 floodGateNum = 0u, floodGateNumIndex = 0u; UINT16 overlapNum = 0u,overlapNumIndex = 0u; UINT16 cmdNum = 0u, cmdNumIndex = 0u; - UINT16 stationLen = 0u, stationLenIndex = 0u; - UINT16 tmpStationLen = 0u; - UINT16 tmpTotalLen = 0u; + UINT16 stationLen = 0u;/*ϢУ*/ UINT16 logsecLockStateNumIndex = 0u; UINT16 logsecLockStateNum = 0u; UINT16 wCfpInfoNum = 0u; @@ -677,6 +592,10 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT UINT8 cPLockRouteNum = 0U; UINT8 cPLockOverlapNum = 0U; UINT16 wProSwInfoLen = 0U; + UINT16 wAreaIteCutIndex = 0U; + UINT8 cAreaIteCutNum = 0U; + UINT16 wHlhtHeadLen = 0U; + UINT16 wAppLen = 0U; /*ָ*/ if (NULL == errNo) @@ -691,16 +610,16 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT if (CI_SUCCESS == reVal) { /*Уվ*/ - if (totalLength < CICI_BEGIN_TO_STATION_LEN) + if (totalLength < CICI_BEGIN_TO_STATION_LEN)/*ͷ+2Ӧó+2+2Ԥ*/ { reVal = CI_ERROR; *errNo = 1U; } else { - stationLenIndex = CICI_BEGIN_TO_STATION_LEN - 2U; - stationLen = ShortFromChar(&dataBuf[stationLenIndex]); reVal = CI_SUCCESS; + wHlhtHeadLen = ShortFromChar(&dataBuf[CICI_BEGIN_TO_STATION_LEN- 6U - 2U]); + wAppLen = ShortFromChar(&dataBuf[CICI_BEGIN_TO_STATION_LEN -6U]); } } @@ -1046,14 +965,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; @@ -1137,26 +1073,17 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT } } - /*Уվ*/ + /*վ*/ if (CI_SUCCESS == reVal) { - tmpStationLen = 2u + (switchNum*CICI_ONE_SWITCH_LEN) + 2u + (phySecNum* CICI_ONE_PHYSEC_LEN) + 2u +(logSecNum*CICI_ONE_LOGSEC_LEN) + + stationLen = 2u + (switchNum*CICI_ONE_SWITCH_LEN) + 2u + (phySecNum* CICI_ONE_PHYSEC_LEN) + 2u +(logSecNum*CICI_ONE_LOGSEC_LEN) + logSecNum + (chLgcStateTrainNum * 3U)+ 2u + (signalNum * CICI_ONE_SIGNAL_LEN) + 2u + (psdNum * CICI_ONE_PSD_LEN) + 2u + (esbNum*CICI_ONE_ESB_LEN) + 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; - if (stationLen == tmpStationLen) - { - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - *errNo = 19U; - } + 2u + (logsecLockStateNum * CICI_ONE_LOGSEC_LOCKSTATE_LEN) + logsecLockStateNum + (trainNum * 2U) + 2u + (wCfpInfoLen)+1U + cAreaSnowNum * 3U + + 1U + cAreaIteCutNum * 2U + 2U + cLeaveLogNum * 3U + 2U + wNeedCheckSwStaRouteSum * 3U + 2U + wNeedCheckProSwStaOlpNum * 3U + 2U + wProSwInfoLen; } /* ȡɢݳ */ @@ -1240,10 +1167,10 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT } } - /*Уܳ*/ + /*Уܳȼķͳ*/ if (CI_SUCCESS == reVal) { - if (totalLength == wDrCmdLenIndex + 40U) + if ((totalLength == wDrCmdLenIndex + 40U)&&(totalLength == wHlhtHeadLen+ CICI_BEGIN_TO_STATION_LEN-6U)&&(wHlhtHeadLen == wAppLen+2U)) { reVal = CI_SUCCESS; } @@ -1260,18 +1187,15 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT /* * CI֡ -* ˵ void +* ˵ UINT8* dataBuf , UINT16 dataLength ,UINT8 chSendCiId ͷid * ֵ 0:ʧ * 1:ɹ * @note ڲŻ 20220419 wqm 1淶dsuCheckSameLocֵҪн 2ӷֵж */ -UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) +UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength,UINT8 sourceId) { - UINT16 sourceId = 0u; /*ԴID*/ - UINT16 targetId = 0u; /*ĿID*/ - UINT16 MaskTotalLen = 0u; /*λܳ*/ UINT16 deviceSum = 0u; /*豸*/ UINT16 deviceId = 0u; /*豸ID*/ UINT16 pLockBlongRouteId = 0u; /*·ID*/ @@ -1300,10 +1224,9 @@ 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;/*ǰϢԴں*/ UINT16 utOverlapUnlockCount = 0u;/*UTνʱ*/ UINT16 ctOverlapUnlockCount = 0u;/*CTνʱ*/ @@ -1314,8 +1237,6 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT32 xuanPaiStartCycNum = 0u;/*ѡſʼں(ֶ̬)*/ UINT8 autoRouteSetFlag = 0u; /*Զ·ñ־δ(/)*/ - UINT16 ciciVer = 0u;/*ci-ciӿڰ汾*/ - UINT8 ciTransmitRecvDataCycResult = 0u; UINT8 belongCiId =0u; UINT16 belongRouteId = 0u; @@ -1370,16 +1291,14 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT8 chLgcIndex = 0u; EaDataStru strEaTmp = { 0u }; UINT16 overlapUnlockTime = 0u; - UINT32 dwDataVerFromOtherCi = 0U; - UINT32 dwDataVerFromEmap = 0U; - UINT16 wCiDevName = 0U;/*ڽܴ豸͵ID*/ UINT8 chLgcSecResTrainSum = 0U; UINT16 wPhyErrlockTime = 0U;/*ʽ⵹ʱ*/ UINT8 cTempTrainNum = 0U; 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,10 +1337,21 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT16 wProSwSecUseRouteId = 0U;/*·ID*/ UINT8 cPhySecOccState = 0U; UINT8 cLogLockBelLogRouteSum = 0U; - + UINT8 cCiRecvAreaIteCutNum = 0U; /*͵ITEг*/ + HLHTGALInfoStruct hlhtGalHead = { 0u }; + UINT8 headRet = HLHT_HEAD_ERROR;/*ͨ*/ + UINT16 wDevName = 0U; /*豸ƣ+ID*/ + UINT16 wLocalName = 0U; /*豸ƣ+ID*/ + UINT8 galHeadSaved = 0u; /*ͨͷǷ񱣴־1棻0δ*/ + UINT16 chInterType = 0U; /*Ӧò㱨*/ + UINT32 errCode = 0U;/*ͨͷ*/ + UINT32 transmitBadEnsureTime = 0U;/*ͨжʱ*/ + INT32 InfoRemainValidiy = 0;/*ͨŰͷɿУ*/ localCiId = GetSystemParaLocalCiId(); dwCurCycNum = Get2oo2CurCycleNum(); - + wDevName = (CI_SYSTEM_TYPE_RCI)* 256U + sourceId; + wLocalName = (CI_SYSTEM_TYPE_RCI)* 256U + localCiId; + transmitBadEnsureTime = GetCiAndCiTransmitBadEnsureTime(); if ((dataBuf != NULL) && (dataLength > 0u)) { reVal = CI_SUCCESS; @@ -1434,1783 +1364,1864 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) if (CI_SUCCESS == reVal) { - sourceId = ShortFromChar(&dataBuf[ii]); /*ȡݰԴ豸ID*/ + + /*ͨϢͷ*/ + hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); ii += 2u; - sourceCurCycleNo = LongFromChar(&dataBuf[ii]); /*ȡݰԴں*/ - ii +=4u; - targetId = ShortFromChar(&dataBuf[ii]); /*ȡݰĿ豸ID*/ + hlhtGalHead.sourceId = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.destId = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.emapVerCrc = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.crntOwnMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.comPeriod = ShortFromChar(&dataBuf[ii]); + ii += 2u; + hlhtGalHead.recvOppMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.preOwnMsgSN = LongFromChar(&dataBuf[ii]); + ii += 4u; + hlhtGalHead.prtclVer = dataBuf[ii++]; + hlhtGalHead.totalDataLen = ShortFromChar(&dataBuf[ii]); ii += 2u; - ciciVer = ShortFromChar(&dataBuf[ii]);/*汾ţ2ֽ*/ - ii += 2u; + headRet = HLHTRecvCommonPacketHeadCheck(wDevName, wLocalName, HLHT_CI_INTER_TYPE, CICI_VERSION, &hlhtGalHead, &errCode, 0U, CI_SYSTEM_TYPE_RCI); - if ((UINT16)CICI_VERSION == ciciVer) + debug_infor_printf((const)"\nRCI %d GAL Check Result:%d errCode:%d", sourceId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + if (HLHT_HEAD_SUCCESS == headRet) { - reVal = CI_SUCCESS; - } - else - { - debug_infor_printf((const)"CICI_VERSION ERROR,local:%d other:%d\n",CICI_VERSION,ciciVer); - reVal = CI_ERROR; - } - if (CI_SUCCESS == reVal) - { - dwDataVerFromOtherCi = LongFromChar(&dataBuf[ii]); /*УϢ*/ - ii += 4U; - wCiDevName = (CI_SYSTEM_TYPE_CI) * 256U + sourceId; - dwDataVerFromEmap = GetCiTranCiDataCheckVer(localCiId, wCiDevName); /*ȡϵͳݰ汾*/ - if (dwDataVerFromOtherCi != dwDataVerFromEmap) + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod); + if (0 < InfoRemainValidiy) { - reVal = CI_ERROR; - SetCiSendCmdBackInfoData(CI_BACK_DATA_VER_CHECK_FAIL, CI_SYSTEM_TYPE_CI, sourceId, 0U, 0U); - } - } + ii += 2u;/*Ӧò㱨ij*/ - - if (CI_SUCCESS == reVal) - { - MaskTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡվϢܳ*/ - ii += 2u; - - if (localCiId != targetId) - { - /*ĿDZ*/ - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - } + chInterType = ShortFromChar(&dataBuf[ii]);/*Ӧò㱨*/ + ii += 2u; + ii += 2u;/*Ԥֽ*/ + if ((CI_SUCCESS == reVal) && (LOCAL_RCI_INFO_STATE == chInterType)) + { + /*жԴ豸ǷָCI*/ + devSum = GetCiTransmitSpecifySysDevSum(Get2oo2SheBeiType()); /*ȡͨ豸*/ + deviceIdBuf = GetCiTransmitSpecifySysDevBuf(Get2oo2SheBeiType()); /*ȡͨ豸ID*/ - } - - if (CI_SUCCESS == reVal) - { - /*жԴ豸ǷָCI*/ - devSum = GetCiTransmitSpecifySysDevSum(Get2oo2SheBeiType()); /*ȡͨ豸*/ - deviceIdBuf = GetCiTransmitSpecifySysDevBuf(Get2oo2SheBeiType()); /*ȡͨ豸ID*/ - - if ((0u < devSum) && (NULL != deviceIdBuf)) - { - for (yy = 0u; yy < devSum; yy++) - { - if (deviceIdBuf[yy] == sourceId) - { - deviceFlag = 1u; - break; - } - } - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - } - - if (CI_SUCCESS == reVal) - { - if (0u == deviceFlag) - { - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - } - - } - if (CI_SUCCESS == reVal) - { - /**/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ - ii += 2u; - belongCiId = GetSwitchBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_SWITCH_LEN - 2u;/*ڱĵ״̬Ϣ*/ - } - else - { - bufIndex = GetSwitchConfigBufIndex(deviceId); - tmpSwitchDataStru[bufIndex].SwitchId = deviceId; - - /*״̬*/ - SetSwitchYLockState(deviceId, dataBuf[ii++]); - /*״̬*/ - SetOtherCiSwitchLockStatus(deviceId, dataBuf[ii++]); - /*״̬*/ - SetSwitchFLockState(deviceId, dataBuf[ii++]); - /*ǰλ*/ - SetSwitchCurPosition(deviceId, dataBuf[ii++]); - /*ǰλ*/ - SetSingleSwitchCurPosition(deviceId, dataBuf[ii++]); - - switchIsThisLineFlag = GetSwitchIsThisLineState(deviceId); - if (DEV_IS_THIS_LINE_NO == switchIsThisLineFlag) - { - SetConnetSwitchDsState(deviceId, dataBuf[ii++]); /*ߵ״̬*/ - SetConnetSwitchByPassState(deviceId, dataBuf[ii++]); /*ߵ·״̬,ǽ·ʱδе·״̬Ӱźſ*/ - } - else - { - ii += 2U; /*ߵֽ*/ - } - - /*õ״̬*/ - SetSwitchJichaState(deviceId, dataBuf[ii++]); - - /*õıID*/ - wUsingBelongOverlapId = ShortFromChar(&dataBuf[ii]); /**/ - ii += 2U; - cSwitchTempUsingState = dataBuf[ii]; /*״̬*/ - ii++; - - /*ݵǰ״̬µ״̬*/ - cSwitchCurUsingState = GetSwitchUsingState(deviceId); - cOverlapBelongCiId = GetOverlapBelongCiId(wUsingBelongOverlapId); - if (cOverlapBelongCiId == localCiId) - { - /*ñΪ*/ - if ((SWITCH_USING_YES == cSwitchTempUsingState) && (SWITCH_USING_APPLY == cSwitchCurUsingState)) + if ((0u < devSum) && (NULL != deviceIdBuf)) { - /*ԷãұǰΪã״̬*/ - SetSwitchUsingState(deviceId, SWITCH_USING_YES, wUsingBelongOverlapId); /*õñ*/ - } - else if ((SWITCH_USING_YES == cSwitchTempUsingState) && (SWITCH_USING_NO == cSwitchCurUsingState)) - { - AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_CANCEL, deviceId, wUsingBelongOverlapId, belongCiId); /*ȡ*/ - /*ο󣬳ʼδãᷢãʱͨ*/ - } - else - { - /**/ - } - } - else - { - /*ñηDZIDΪ0*/ - if (SWITCH_USING_NO == cSwitchTempUsingState) - { - if (SWITCH_USING_APPLY == cSwitchCurUsingState) + for (yy = 0u; yy < devSum; yy++) { - /*άֵǰ״̬οտʼãͨ첽ᷢδãʱοҪά״̬*/ - } - else - { - SetSwitchUsingState(deviceId, SWITCH_USING_NO, wUsingBelongOverlapId); /**/ - } - } - else - { - if (0U < wUsingBelongOverlapId) - { - SetSwitchUsingState(deviceId, cSwitchTempUsingState, wUsingBelongOverlapId); /*״̬*/ - } - else - { - /**/ - } - } - } - } - } - } - - if (CI_SUCCESS == reVal) - { - /**/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ - ii += 2U; - chPhySecBelCiId = GetPhySecBelongCiId(deviceId); - if (chPhySecBelCiId == localCiId) - { - ii += CICI_ONE_PHYSEC_LEN - 2U;/*ڱ״̬Ϣ*/ - } - else - { - bufIndex = GetPhySecConfigBufIndex(deviceId); /*ȡ±*/ - - tmpPhysicalSectionDataStru[bufIndex].PhysicalSectionId = deviceId; /*εǰں״̬*/ - - cPhySecOccState = dataBuf[ii]; - ii++; - SetPhySecCurOccupyState(deviceId, cPhySecOccState); /*βɼռ״̬*/ - - /*ںϺ״̬*/ - SetPhySecCurMergeState(deviceId, dataBuf[ii++]); - - /*ȡεǰCTUTռ״̬*/ - curUtOrCtOccFlag = dataBuf[ii++]; - - /*ͣϢ*/ - SetPhySecStopSteadyFlag(deviceId, dataBuf[ii++]); - - chRecvPhySecUseState = dataBuf[ii++]; - wPhySecUseRouteId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - wProSwSecUseRouteId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - - /*״̬*/ - belongCiId = GetRouteBelongCiId(wPhySecUseRouteId); - chCurPhySecUseState = GetPhySecUseState(deviceId); - if (belongCiId == localCiId) - { - /*ý·ڱ*/ - if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState)) - { /*ԷҵǰòŸ*/ - - SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); - } - else if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_NO == chCurPhySecUseState)) - { /*Էұδ*/ - /*ȡ*/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_CANCEL, deviceId, wPhySecUseRouteId, chPhySecBelCiId); - /*2024.12.06ڲŻ·󣬳ʼδãοᷢãʱͨ*/ - } - else - { - /**/ - } - } - else - { - /*ý·ڱƻ߽·IDΪ0*/ - if (PHYSICAL_SECTION_USING_NO == chRecvPhySecUseState) - { - /*δ*/ - if (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState) - { - ; - } - else - { - SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); - } - } - else - { - /**/ - if (0U < wPhySecUseRouteId) - { - SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); - } - else - { - ; - } - } - } - - /*״̬*/ - belongCiId = GetRouteBelongCiId(wProSwSecUseRouteId); - chCurPhySecUseState = GetPhySecUseState(deviceId); - if (belongCiId == localCiId) - { - /*ý·ڱ*/ - if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState)) - { /*ԷҵǰòŸ*/ - - SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); - } - else if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_NO == chCurPhySecUseState)) - { /*Էұδ*/ - /*ȡ*/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_CANCEL, deviceId, wProSwSecUseRouteId, chPhySecBelCiId); - } - else - { - ; /**/ - } - } - else - { - /*ý·ڱƻ߽·IDΪ0*/ - if (PHYSICAL_SECTION_USING_NO == chRecvPhySecUseState) - { - /*δ*/ - if (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState) - { - ; - } - else - { - SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); - } - } - else - { - /**/ - if (0U < wProSwSecUseRouteId) - { - SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); - } - else - { - ; - } - } - } - - - /*η״̬*/ - (void)SetPhySecFLockState(deviceId, dataBuf[ii++]); - /*Arb״̬*/ - phySecArbState = dataBuf[ii++]; - SetPhySecArbState(deviceId,phySecArbState); - /*Arb״̬ùarb*/ - SetPhyContainAxisSecArbState(deviceId,phySecArbState); - /*ռ״̬*/ - SetPhySecCurAndMergeState(deviceId,dataBuf[ii++]); - /*Ծ״̬*/ - SetPhySecJumpLockState(deviceId,dataBuf[ii++]); - /*η*/ - SetPhySecFLockType(deviceId, dataBuf[ii++]); - /*Ԥλ״̬*/ - SetPhySecPreResetState(deviceId, dataBuf[ii++]); - /*by cgh 20230706 ʾʽ⵹ʱ*/ - wPhyErrlockTime = ShortFromChar(&dataBuf[ii]); - ii += 2U; - SetPhyErrUnlockTime(deviceId, wPhyErrlockTime); - /*ƶ״̬*/ - SetPhySecAreaUrgentState(deviceId, dataBuf[ii++]); - - /*16.0£ABLռñ־*/ - chCurAblFlag = dataBuf[ii++]; - SetPhySecABLTrainFlag(deviceId, chCurAblFlag); - /*ռ״̬͵ʱ仯*/ - phySecCurMergeState = GetPhySecCurMergeState(deviceId); - if (SECTION_OCCUPY_YES == phySecCurMergeState) - { - utOrCtOccFlag = GetPhySecPreOccState(deviceId); /*ȡ֮ǰCTUTռ״̬*/ - dwSecUtOrCtOccuCyc = GetSecUtOrCtOccuStartCycNum(deviceId); - /*ʱУγռ״̬仯ҽѿʼʱ*/ - if ((utOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) - { - /*UTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); - } - else if (LOGICSECTION_OCCUPY_UT == curUtOrCtOccFlag) - { - /*UTռѹ ABL UTCTռÿʼʱ*/ - chPreAblFlag = GetPhySecPreABLTrainFlag(deviceId); - if (chCurAblFlag != chPreAblFlag) - { - SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); - } - } - else - { - /*ιУ·һγռδ仯ʱ*/ - } - - /*ռ״̬Ϊ֮ǰռ״̬*/ - SetPhySecPreOccState(deviceId, curUtOrCtOccFlag); - } - if (SECTION_OCCUPY_NO == phySecCurMergeState) - { - /*ȡUTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, 0u); - SetPhySecPreOccState(deviceId, LOGICSECTION_OCCUPY_NO); - } - - /*λռñ־*/ - SetPhySecUTTrainFlag(deviceId, dataBuf[ii++]); - - cPhySecInHumidRailFlag = dataBuf[ii++]; - SetPhySecInHumidRailFlag(deviceId, cPhySecInHumidRailFlag); /*ڿεʪ־*/ - } - } - } - if (CI_SUCCESS == reVal) - { - /*߼*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ߼*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ߼ID*/ - ii += 2u; - - belongCiId = GetLogSecBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += 5U; /*ڱ߼״̬Ϣ*/ - chLgcSecResTrainSum = dataBuf[ii++]; /*ȡ߼Դг*/ - ii += chLgcSecResTrainSum * 3U; /*߼εԴгϢ*/ - } - else - { - - bufIndex = GetlogSectionBufIndex(deviceId); - tmpLogicSectionDataStru[bufIndex].LogicSectionId = deviceId; - /*߼ռ״̬*/ - SetLogSecPreOccupyState(deviceId, GetLogSecCurCtOrUtOccupyState(deviceId));/*߼֮ǰռ״̬*/ - SetLogSecCurOccupyState(deviceId, dataBuf[ii++]); - SetLogSecXSSttOtherTioc(deviceId, dataBuf[ii++]); - /** ߼Ծ״̬ */ - SetLogSecJumpLockState(deviceId, dataBuf[ii++]); - /* ߼ARB״̬ */ - SetLgcArbState(deviceId, dataBuf[ii++]); - /* ߼SPKS״̬ */ - SetLogSecSpksFLockState(deviceId, dataBuf[ii++]); - /*߼ηԴ״̬*/ - SetLogSecProResUseState(deviceId, dataBuf[ii++]); - /*߼ABLԴñ־*/ - SetLogSecAblUseFlag(deviceId, dataBuf[ii++]); - /*ʱٶֵ*/ - SetLogSecXiansuSpeed(deviceId, dataBuf[ii++]); - - chLgcSecResTrainSum = dataBuf[ii++]; - for (kk = 0U; kk < chLgcSecResTrainSum; kk++) - { - wTrainId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - SetLogSecTrainUseState(deviceId,wTrainId,dataBuf[ii++]); - } - } - - } - } - - if (CI_SUCCESS == reVal) - { - /*źŻ*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡźŻ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡźŻID*/ - ii += 2u; - belongCiId = GetSignalBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_SIGNAL_LEN -2u;/*ڱźŻ״̬Ϣ*/ - } - else - { - bufIndex = GetSignalConfigBufIndex(deviceId); - tmpSignalDataStru[bufIndex].SignalId = deviceId; - - /*źŻ״̬*/ - SetSignalFLockState(deviceId, dataBuf[ii++]); - /*źŻ״̬*/ - (void)SetNearCISigLightExtinctState(deviceId, dataBuf[ii++]); - /*źŻǰʾɫ*/ - (void)SetNearCISignalCurColor(deviceId, dataBuf[ii++]); - /*źŻʱ*/ - SetSignalLinShiXianSuSetFlag(deviceId, dataBuf[ii++]); - /*źŻ۳*/ - SetSignalDetainState(deviceId, dataBuf[ii++]); - /*źŻӲ߿۳״̬*/ - SetSignalRelayDetainFlag(deviceId, dataBuf[ii++]); - /*źŻά޵״̬*/ - SetSignalMaintainState(deviceId, dataBuf[ii++]); - } - } - } - - if (CI_SUCCESS == reVal) - { - /**/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ - ii += 2u; - belongCiId = GetPsdBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_PSD_LEN -2u;/*ڱPSD״̬Ϣ*/ - } - else - { - bufIndex = GetPsdConfigBufIndex(deviceId); - tmpPsdDataStru[bufIndex].PsdId = deviceId; - - (void)SetPsdState(deviceId, dataBuf[ii++]); /*ſ״̬״̬*/ - (void)SetPsdMutualLockRemoveState(deviceId,dataBuf[ii++]); /*Ż״̬״̬*/ - } - } - } - - if (CI_SUCCESS == reVal) - { - /*ͣť*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡͣ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡͣID*/ - ii += 2u; - belongCiId = GetEsbBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_ESB_LEN -2u;/*ڱESB״̬Ϣ*/ - } - else - { - bufIndex = GetEsbConfigBufIndex(deviceId); - tmpEsbDataStru[bufIndex].EsbId = deviceId; - - /*ͣť״̬*/ - (void)SetEsbState(deviceId, dataBuf[ii++]); - - /*ͣ·ť״̬*/ - SetEsbCutState(deviceId, dataBuf[ii++]); - } - } - } - - if (CI_SUCCESS == reVal) - { - /*·*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ·*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ·ID*/ - ii += 2u; - belongCiId = GetRouteBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_ROUTE_LEN -2u;/*ڱĽ·״̬Ϣ*/ - } - else - { - /*·״̬*/ - (void)SetRouteState(deviceId, dataBuf[ii++]); - - /*·ල*/ - SetRouteLevel(deviceId, dataBuf[ii++]); - - /* 2B:UTνʱ*/ - utOverlapUnlockCount = ShortFromChar(&dataBuf[ii]); - ii+=2u; - - if (0u < utOverlapUnlockCount) - { - SetOtherCIRouteOvlpUTUnlockCnt(deviceId,utOverlapUnlockCount); - } - - /* 2B:CTνʱ*/ - ctOverlapUnlockCount = ShortFromChar(&dataBuf[ii]); - ii+=2u; - - if (0u < ctOverlapUnlockCount) - { - SetOtherCIRouteOverlapCTUnlockCount(deviceId,ctOverlapUnlockCount); - } - - /*Զźȡ״̬*/ - SetAutoSigCancleState(deviceId,dataBuf[ii++]); - SetRouteOverlapNeedCIlockFlag(deviceId, dataBuf[ii++]); - - SetRouteStateFlag(deviceId, dataBuf[ii++]);/*·׷ٰ־*/ - - SetRouteAutoTriggerFlag(deviceId, dataBuf[ii++]);/*·Զ־*/ - } - } - } - - if (CI_SUCCESS == reVal) - { - /*״̬*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ - ii += 2u; - /*״̬*/ - deviceInfo = dataBuf[ii++]; - - /*η·ID*/ - pLockBlongRouteId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - /*·ID*/ - rLockBlongRouteId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - /*״̬*/ - belongCiId = GetPhySecBelongCiId(deviceId); - if (belongCiId != localCiId) - {/*DZ*/ - - if (PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) - {/*ֻз*/ - - /*·գΪPHYSICAL_SECTION_LOCK_NOPhysicalSectionDataStru[bufIndex].RLockBelongRouteId*/ - (void)SetPhySecLockStateOtherCI(deviceId, PHYSICAL_SECTION_LOCK_NO, 0u, 0u); - - /*·Ϊ*/ - belongCiId = GetRouteBelongCiId(pLockBlongRouteId); - if (belongCiId == localCiId) - { - /*ý·*/ - SetRouteOverlapLockedId(pLockBlongRouteId,ShortFromChar(&dataBuf[ii])); - } - } - else if (PHYSICAL_SECTION_LOCK_NO == deviceInfo) - { /*δ*/ - - belongRouteId = GetPhySecPLockBelongRouteId(deviceId); - belongCiId = GetRouteBelongCiId(belongRouteId); - if ((0u < belongRouteId) &&(belongCiId == localCiId)) - { - /*·ձId*/ - SetRouteOverlapLockedId(GetPhySecPLockBelongRouteId(deviceId), 0); - /*α־*/ - SetOverlapUnlockApplyFlag(ShortFromChar(&dataBuf[ii]),UNLOCK_OVERLAP_APPLY_NO); - } - } - else - { - - if(pLockBlongRouteId > 0u) - {/*ͬʱڷպͨ*/ - belongCiId = GetRouteBelongCiId(pLockBlongRouteId); - if(belongCiId == localCiId) - {/*η·ڱ*/ - SetRouteOverlapLockedId(pLockBlongRouteId,ShortFromChar(&dataBuf[ii])); - } - - /*η*/ - (void)SetPhySecLockStateOtherCI(deviceId,PHYSICAL_SECTION_LOCK_PROTECT,pLockBlongRouteId,dataBuf[ii+3U]); - } - else - { - belongRouteId = GetPhySecPLockBelongRouteId(deviceId); - if (0u < belongRouteId) - { - belongCiId = GetRouteBelongCiId(belongRouteId); - if(belongCiId == localCiId) + if (deviceIdBuf[yy] == sourceId) { - /*·ձId*/ - SetRouteOverlapLockedId(GetPhySecPLockBelongRouteId(deviceId), 0); - /*α־*/ - SetOverlapUnlockApplyFlag(ShortFromChar(&dataBuf[ii]),UNLOCK_OVERLAP_APPLY_NO); - } - - (void) ClearPhySecPLock(deviceId); - } - - } - } - - ii += 2u;/*ID*/ - if(PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) - { - (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, pLockBlongRouteId, dataBuf[ii++]);/*״̬dataBuf[ii++]Ϊշ*/ - } - else - { - (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii++]);/*״̬dataBuf[ii++]Ϊշ*/ - } - - /* αռüʱ */ - phySecPreOccupyState = GetPhySecPreOccupyState(deviceId); - phySecCurOccupyState = GetPhySecCurOccupyState(deviceId); - phySecPreMergeState = GetPhySecPreMergeState(deviceId); - phySecCurMergeState = GetPhySecCurMergeState(deviceId); - if ((SECTION_OCCUPY_NO == phySecPreOccupyState) && (SECTION_OCCUPY_YES == phySecCurOccupyState)) - { - /*бռ*/ - - /*εһͬʱռʱռÿʼʱ*/ - routeId = GetPhySecRLockBelongRouteId(deviceId); - if (routeId > 0u) - {/*ν·*/ - - routePhySecSum = GetRoutePhysicalSectionSum(routeId); - routePSSecStru = GetRouteSectionData(routeId); - preSecId = 0u; - for (kk = 0u; kk < routePhySecSum; kk++) - { - if (routePSSecStru[kk].PhysicalSectionId == deviceId) - {/*ҵ·еĸ*/ - - if (kk > 0u) - {/*ǵһ*/ - - preSecId = routePSSecStru[kk - 1U].PhysicalSectionId; - } - else - { - routeNearPSSecStru = GetRouteBlocNearPhySectionStru(routeId); - if (routeNearPSSecStru != NULL) - { - preSecId = routeNearPSSecStru[0].NearPhySecIdBuf[0]; - } - else - { - preSecId = 0u; - } - - } - phySecCurMergeState = GetPhySecCurMergeState(preSecId); - if ((0u != preSecId) &&(SECTION_OCCUPY_YES == phySecCurMergeState)) - {/*һͬʱռ*/ - - /*ռÿʼʱ*/ - SetSecCurOccupyStartCycNum(deviceId, Get2oo2CurCycleNum()); - - /*UTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, Get2oo2CurCycleNum()); - } - + deviceFlag = 1u; break; } } - - } - else - { - /* ûս·Ϊг˳ռ, */ - SetSecCurOccupyStartCycNum(deviceId, 0u); - /*ȡUTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, 0u); - } - } - else if ((SECTION_OCCUPY_YES == phySecPreMergeState) && (SECTION_OCCUPY_NO == phySecCurMergeState)) - { - /*ռñ*/ - - /*ȡռÿʼʱ*/ - SetSecCurOccupyStartCycNum(deviceId, 0u); - /*ȡUTCTռÿʼʱ*/ - SetSecUtOrCtOccuStartCycNum(deviceId, 0u); - } - else - { - /*ʱ*/ - } - - continue; - } - else - { - ii += 2u;/*ID*/ - SetPhySecOtherCiPLockRouteId(deviceId, pLockBlongRouteId); /*ñ߼CI͵ķ·ID*/ - } - - /*״̬״̬Ϣ*/ - switch (deviceInfo) - { - case PHYSICAL_SECTION_LOCK_START: - /*ǰϵ*/ - - /**/ - - break; - case PHYSICAL_SECTION_LOCK_NO: - /*ǰδ*/ - phySecLockState = GetPhySecLockState(deviceId); - if (PHYSICAL_SECTION_LOCK_NO != phySecLockState) - { - (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ - } - - break; - - default: - /*״̬*/ - if(PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) - { - (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, pLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ - } - else - { - (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ - } - break; - - } - ii++; - - } - } - - - if (CI_SUCCESS == reVal) - { - /* SPKS */ - deviceSum = ShortFromChar(&dataBuf[ii]);/*SPKS*/ - ii += 2u; - for (jj = 0u;jj < deviceSum;jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - belongCiId = GetSpksBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_SPKS_LEN -2u;/*ڱSPKS״̬Ϣ*/ - } - else - { - bufIndex = GetSpksConfigBufIndex(deviceId); - tmpSpksDataStru[bufIndex].spksId = deviceId; - - deviceInfo = dataBuf[ii++]; - (void)SetSpksState(deviceId, deviceInfo); - - deviceInfo = dataBuf[ii++]; - SetSpksCutState(deviceId, deviceInfo); - } - } - } - - if (CI_SUCCESS == reVal) - { - /* ̵ */ - deviceSum = ShortFromChar(&dataBuf[ii]);/*̵*/ - ii += 2u; - for (jj = 0u;jj < deviceSum;jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - belongCiId = GetRelayBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_VIRTUAL_RELAY_LEN - 2u;/*ڱ̵״̬Ϣ*/ - } - else - { - bufIndex = GetRelayConfigBufIndex(deviceId); - tmpRelayDataStru[bufIndex].RelayId = deviceId; - - deviceInfo = dataBuf[ii++]; - SetRelayCollState(deviceId, deviceInfo);/*̵ɼ״̬*/ - } - } - } - - if (CI_SUCCESS == reVal) - { - /* */ - deviceSum = ShortFromChar(&dataBuf[ii]);/**/ - ii += 2u; - for (jj = 0u;jj < deviceSum;jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - floodBelongCiId = GetFloodGateBelongCiId(deviceId); - if (floodBelongCiId == localCiId) - { - ii += CICI_ONE_FLOODGATE_LEN - 2u;/*ڱķŵ״̬Ϣ*/ - } - else - { - bufIndex = GetFloodGateBufIndex(deviceId); - execRet = SetFloodGateCurOpenLockState(bufIndex,dataBuf[ii++]);/**/ - if (CI_ERROR == execRet) - { - debug_infor_printf((const)"SetFloodGateCurOpenLockState %d error.",bufIndex); - } - execRet = SetFloodGateCurCloseRequestSta(bufIndex,dataBuf[ii++]);/**/ - if (CI_ERROR == execRet) - { - debug_infor_printf((const)"SetFloodGateCurCloseRequestState %d error.",bufIndex); - } - execRet = SetFloodGateCurZCAgrCloseAck(bufIndex,dataBuf[ii++]);/*zcͬر*/ - if (CI_ERROR == execRet) - { - debug_infor_printf((const)"SetFloodGateCurAgreeCloseAckFromZC %d error.",bufIndex); - } - execRet = SetFloodGateCurAgreeCloseSta(bufIndex,dataBuf[ii++]);/*ǰɼͬر*/ - if (CI_ERROR == execRet) - { - debug_infor_printf((const)"SetFloodGateCurAgreeCloseCollState %d error.",bufIndex); - } - execRet = SetFloodGateCurAgreeCloseOutSta(bufIndex,dataBuf[ii++]);/*ͬر*/ - if (CI_ERROR == execRet) - { - debug_infor_printf((const)"SetFloodGateCurAgreeCloseOutState %d error.",bufIndex); - } - } - } - } - - if (CI_SUCCESS == reVal) - { - /**/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ - ii += 2u; - belongCiId = GetOverlapBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_OVERLAP_LEN -2u;/*ڱı״̬Ϣ*/ - } - else - { - /*·ID*/ - overlapBelongRouteId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - SetOverlapBelongRouteId(deviceId,overlapBelongRouteId); - - /* 4B:ָIDʼں*/ - unlockStartCycNum = LongFromChar(&dataBuf[ii]); - ii += 4u; - - if (unlockStartCycNum > 0u) - { - (void)SetOverlapUnlockStartCycNum(deviceId,unlockStartCycNum); - } - - /* 4B:ָIDѡſʼں*/ - xuanPaiStartCycNum = LongFromChar(&dataBuf[ii]); - ii += 4u; - - if (xuanPaiStartCycNum > 0u) - { - SetOverlapXuanPaiStartCycNum(deviceId,xuanPaiStartCycNum); - } - - /*ָIDZCα־*/ - overlapUnlockApplyFlag = dataBuf[ii++]; - if (overlapUnlockApplyFlag > 0u) - { - SetOverlapUnlockApplyFlag(deviceId,overlapUnlockApplyFlag); - } - /*νʱ*/ - overlapUnlockTime = ShortFromChar(&dataBuf[ii]); - ii += 2U; - - SetOverlapUnlockTime(deviceId,overlapUnlockTime); - - /*η鿪ʼ־*/ - cProSwtCheckStartFlag = dataBuf[ii]; - ii++; - SetOverlapProSwtCheckStartFlag(deviceId, cProSwtCheckStartFlag); - - if (PROSWITCH_CHECK_START_VALID != cProSwtCheckStartFlag) - { - SetOverlapProSwtCheckResultFlag(deviceId, PROSWITCH_CHECK_RESULT_DEFAULT); /*ս־ΪĬֵ*/ - } - else - { - /*ڽӿи·־*/ - } - } - } - } - - if (CI_SUCCESS == reVal) - { - /*cgh-ϲCID-2539-7Զͨ·*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡԶͨ·*/ - ii += 2u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡԶͨ·ID*/ - ii += 2u; - belongCiId = GetAutoRouteBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += CICI_ONE_AUTOROUTE_LEN - 2u;/*ڱԶͨ·Ϣ*/ - } - else - { - autoRouteSetFlag = dataBuf[ii++]; - /*Զͨ·״̬*/ - SetAutoRouteSetFlag(deviceId, autoRouteSetFlag); - } - } - } - - if (CI_SUCCESS == reVal) - { - /*߼״̬*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ߼*/ - ii += 2U; - for (jj = 0; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ߼ID*/ - ii += 2U; - /*״̬*/ - logLockState = dataBuf[ii++]; - /*·*/ - lockBelongRoute = ShortFromChar(&dataBuf[ii]); - ii += 2U; - /*·*/ - pLockBelongRoute = ShortFromChar(&dataBuf[ii]); - ii += 2U; - /*շ*/ - lockDir = dataBuf[ii++]; - /*߼߼״̬*/ - cLogSecLogicLockState = dataBuf[ii++]; - /*߼߼շ*/ - cLogSecLogicLockDir = dataBuf[ii++]; - /*߼߼߼·*/ - cLogLockBelLogRouteSum = dataBuf[ii++]; - chLgcResShrFlag = dataBuf[ii++]; - /* ȡ߼TIOC */ - belongCiId = GetLogSecBelongCiId(deviceId); - belongRouteId = GetLogSecLockBelongRoute(deviceId); - cRouteCiId = GetRouteBelongCiId(belongRouteId); - cFlashTrainInfoFlag = 0u; - - if ((belongCiId != localCiId) || ((cRouteCiId != localCiId)&&(0U != cRouteCiId))) - {/*DZ߼λս·DZTIOC*/ - - /* ״̬жǷͬг */ - if ((LOG_SECTION_LOCK_NORMAL == logLockState) || (LOG_SECTION_LOCK_DELAY == logLockState) || (LOG_SECTION_LOCK_PROTECT == logLockState) - || (LOG_SECTION_LOGLOCK_NORMAL == cLogSecLogicLockState)) - { - /* Էջʱջ߼ո */ - cFlashTrainInfoFlag = 1u; - } - } - - /*״̬*/ - - if (belongCiId != localCiId) - {/*DZ߼*/ - - switch (logLockState) - { - case LOG_SECTION_LOCK_PROTECT: - /*ֻз*/ - SetLogSecLockStateOtherCI(deviceId, logLockState, pLockBelongRoute, lockDir);/*߼״̬*/ - break; - case LOG_SECTION_LOCK_NO: - /*δ*/ - SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ - /*YF0083-1235,޸ȱݣԷ״̬Ϊδʱյε״̬Ľ·ID*/ - ClearLogicSecPLock(deviceId); - break; - default: - - if (pLockBelongRoute > 0u) - { - /*η*/ - SetLogSecLockStateOtherCI(deviceId, LOG_SECTION_LOCK_PROTECT, pLockBelongRoute, lockDir); - } - else - { - /*޸ȱݣԷ·ID0ʱҪս·ID,ʱԷʱջ*/ - ClearLogicSecPLock(deviceId); - } - SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ - break; - } - - SetLogSecLogLockStateOtherCi(deviceId, cLogSecLogicLockState, cLogSecLogicLockDir, cLogLockBelLogRouteSum); /*·DZ߼ε߼״̬ڸʾ*/ - } - else - { - /*߼״̬߼̬Ϣ߼ε߼״̬ɱٽ߼״̬*/ - switch (logLockState) - { - case LOG_SECTION_LOCK_START: - /*ǰϵ*/ - /**/ - break; - case LOG_SECTION_LOCK_NO: - /*ǰδ*/ - localLogLockState = GetLogSecLockState(deviceId); - if (LOG_SECTION_LOCK_NO != localLogLockState) - { - SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ - } - - break; - case LOG_SECTION_LOCK_PROTECT: - /* */ - SetLogSecLockStateOtherCI(deviceId, logLockState, pLockBelongRoute, lockDir); - break; - default: - /*״̬*/ - SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ - break; - - } - - SetLogSecOtherCiPLockRouteId(deviceId, pLockBelongRoute); /*ñ߼CI͵ķ·ID*/ - } - - /* ԴϢ */ - chLogSecTrainInfoSum = dataBuf[ii++];/*߼г*/ - - /*߼гϢ*/ - for (chLogicTrainIndex = 0u; chLogicTrainIndex < chLogSecTrainInfoSum; chLogicTrainIndex++) - { - - szTrainId[chLogicTrainIndex] = ShortFromChar(&dataBuf[ii]);/*гID*/ - ii += 2u; - } - - - if (1u == cFlashTrainInfoFlag) - { - /* ͬгϢs */ - SetLogSecResShareFlag(deviceId, chLgcResShrFlag); - AddLogSecOtherTIOCTrainRes(deviceId, chLogSecTrainInfoSum, szTrainId); - } - } - } - - if (CI_SUCCESS == reVal) - { - /*ֽϢ*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*ֽ*/ - ii += 2u; - chTiocIndex = GetTiocTransmitIndex((UINT8)sourceId); - g_szTiocCt[chTiocIndex].chCtNum = 0u; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ֽID*/ - ii += 2u; - dwTmpIndex = GetCfpBufIndex(deviceId); - - - if (CUTOFF_POINT_SUM_MAX <= dwTmpIndex) - { - ii += 7U; /*ڱֽгϢ*/ - chEnvelopeNum = dataBuf[ii++]; /*ֽ*/ - for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++) - { - /*ֽϢ*/ - ii += 19U; - cTempTrainNum = dataBuf[ii++]; /*г*/ - ii += cTempTrainNum * 2U; /*гID*/ - } - - chCtNum = dataBuf[ii++]; /*ֽг*/ - ii += cTempTrainNum * 35U; /*ֽгϢ*/ - ii += 7U; /*ԶRRMϢ*/ - ii += 2; /*źŻID*/ - } - else - { - /*гID*/ - tmpTrainInfo.wTrainId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - /*еȼ*/ - tmpTrainInfo.chTrainLevel =dataBuf[ii]; - ii++; - if ((0u == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_BACKUP_UNKNOWN == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_UR == tmpTrainInfo.chTrainLevel) - || (TRAIN_LEVEL_ABL == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_VBTC == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_ITC == tmpTrainInfo.chTrainLevel)) - { - ;/*0޳URABLVBTCITC 0xffϷ*/ - } - else - { - reVal = CI_ERROR; - } - - /*ֽ*/ - tmpTrainInfo.dwDis = LongFromChar(&dataBuf[ii]); - ii += 4u; - - /* дֽг */ - SetCfpOtherOcTrainInfo(deviceId,tmpTrainInfo); - - /* ֽյOCİ */ - chEnvelopeNum = dataBuf[ii++]; - if (CUTOFF_POINT_SUM_MAX >= chEnvelopeNum) - { - SetCfpOtherOcENum(deviceId, chEnvelopeNum); - } - else - { - reVal = CI_ERROR; - } - - for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++) - { - tmpEnvelopeInfo.envelopeType = dataBuf[ii++]; /* */ - if ((TYPE_UKT_ENVELOPE == tmpEnvelopeInfo.envelopeType) - || (TYPE_UCT_ENVELOPE == tmpEnvelopeInfo.envelopeType) - || (TYPE_CT_ENVELOPE == tmpEnvelopeInfo.envelopeType)) - { - ;/*1:ͨų 2ʧͨų 3س*/ + reVal = CI_SUCCESS; } else { reVal = CI_ERROR; } - - tmpEnvelopeInfo.headTrainID = ShortFromChar(&dataBuf[ii]);/* ǰID */ - ii += 2u; - - tmpEnvelopeInfo.tailTrainID = ShortFromChar(&dataBuf[ii]);/* ID */ - ii += 2u; - - tmpEnvelopeInfo.startPos.Dir = dataBuf[ii++];/* 㷽 */ - - tmpEnvelopeInfo.startPos.Lnk = ShortFromChar(&dataBuf[ii]);/* link */ - ii += 2u; - - tmpEnvelopeInfo.startPos.Off = LongFromChar(&dataBuf[ii]);/* offset */ - ii += 4u; - - tmpEnvelopeInfo.endPos.Dir = dataBuf[ii++];/* յ㷽 */ - - tmpEnvelopeInfo.endPos.Lnk = ShortFromChar(&dataBuf[ii]);/* յlink */ - ii += 2u; - - tmpEnvelopeInfo.endPos.Off = LongFromChar(&dataBuf[ii]);/* յoffset */ - ii += 4u; - - wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.startPos.Lnk); - if (wLinkTioc == localCiId) + + if (CI_SUCCESS == reVal) { - (void)dsuCheckSameLoc(tmpEnvelopeInfo.startPos.Lnk, tmpEnvelopeInfo.startPos.Off, &tmpEnvelopeInfo.startPos.Lnk, &tmpEnvelopeInfo.startPos.Off); - } - - wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.endPos.Lnk); - if (wLinkTioc == localCiId) - { - (void)dsuCheckSameLoc(tmpEnvelopeInfo.endPos.Lnk, tmpEnvelopeInfo.endPos.Off, &tmpEnvelopeInfo.endPos.Lnk, &tmpEnvelopeInfo.endPos.Off); - } - - /*ȡֽOCİ*/ - reVal = CutCfpOtherOcEData(deviceId,&tmpEnvelopeInfo); - - tmpEnvelopeInfo.ACCnt = elm_PrepareACBtwPoints(tmpEnvelopeInfo.startPos, tmpEnvelopeInfo.endPos, tmpEnvelopeInfo.ACID); - /* ڲŻ 20220419 wqm elm_PrepareACBtwPoints0߷гаʱ˴Ӧ÷ΪCI_ERROR*/ - if ((SECTION_IN_ENVELOPE_SUM_MAX == tmpEnvelopeInfo.ACCnt) || (0u == tmpEnvelopeInfo.ACCnt)) - { - reVal = CI_ERROR; - } - else - { - for (chAcIndex = 0u; chAcIndex < tmpEnvelopeInfo.ACCnt; chAcIndex++) + if (0u == deviceFlag) { - wTiocId = GetAxisBelongTioc(tmpEnvelopeInfo.ACID[chAcIndex]); - if ((localCiId == wTiocId) || (0u == wTiocId)) + reVal = CI_ERROR; + } + else + { + reVal = CI_SUCCESS; + } + } + + } + else + { + reVal = CI_ERROR; + debug_infor_printf((const)"chInterType :0x%x Check ERROR should be : 0x%x\n,", chInterType,LOCAL_RCI_INFO_STATE); + } + if (CI_SUCCESS == reVal) + { + /**/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 2u; + belongCiId = GetSwitchBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_SWITCH_LEN - 2u;/*ڱĵ״̬Ϣ*/ + } + else + { + bufIndex = GetSwitchConfigBufIndex(deviceId); + tmpSwitchDataStru[bufIndex].SwitchId = deviceId; + + /*״̬*/ + SetSwitchYLockState(deviceId, dataBuf[ii++]); + /*״̬*/ + SetOtherCiSwitchLockStatus(deviceId, dataBuf[ii++]); + /*״̬*/ + SetSwitchFLockState(deviceId, dataBuf[ii++]); + /*ǰλ*/ + SetSwitchCurPosition(deviceId, dataBuf[ii++]); + /*ǰλ*/ + SetSingleSwitchCurPosition(deviceId, dataBuf[ii++]); + + switchIsThisLineFlag = GetSwitchIsThisLineState(deviceId); + if (DEV_IS_THIS_LINE_NO == switchIsThisLineFlag) { - reVal = CI_ERROR; - break; + SetConnetSwitchDsState(deviceId, dataBuf[ii++]); /*ߵ״̬*/ + SetConnetSwitchByPassState(deviceId, dataBuf[ii++]); /*ߵ·״̬,ǽ·ʱδе·״̬Ӱźſ*/ } else { - ; + ii += 2U; /*ߵֽ*/ + } + + /*õ״̬*/ + SetSwitchJichaState(deviceId, dataBuf[ii++]); + + /*õıID*/ + wUsingBelongOverlapId = ShortFromChar(&dataBuf[ii]); /**/ + ii += 2U; + cSwitchTempUsingState = dataBuf[ii]; /*״̬*/ + ii++; + + /*ݵǰ״̬µ״̬*/ + cSwitchCurUsingState = GetSwitchUsingState(deviceId); + cOverlapBelongCiId = GetOverlapBelongCiId(wUsingBelongOverlapId); + if (cOverlapBelongCiId == localCiId) + { + /*ñΪ*/ + if ((SWITCH_USING_YES == cSwitchTempUsingState) && (SWITCH_USING_APPLY == cSwitchCurUsingState)) + { + /*ԷãұǰΪã״̬*/ + SetSwitchUsingState(deviceId, SWITCH_USING_YES, wUsingBelongOverlapId); /*õñ*/ + } + else if ((SWITCH_USING_YES == cSwitchTempUsingState) && (SWITCH_USING_NO == cSwitchCurUsingState)) + { + AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_CANCEL, deviceId, wUsingBelongOverlapId, belongCiId); /*ȡ*/ + /*ο󣬳ʼδãᷢãʱͨ*/ + } + else + { + /**/ + } + } + else + { + /*ñηDZIDΪ0*/ + if (SWITCH_USING_NO == cSwitchTempUsingState) + { + if (SWITCH_USING_APPLY == cSwitchCurUsingState) + { + /*άֵǰ״̬οտʼãͨ첽ᷢδãʱοҪά״̬*/ + } + else + { + SetSwitchUsingState(deviceId, SWITCH_USING_NO, wUsingBelongOverlapId); /**/ + } + } + else + { + if (0U < wUsingBelongOverlapId) + { + SetSwitchUsingState(deviceId, cSwitchTempUsingState, wUsingBelongOverlapId); /*״̬*/ + } + else + { + /**/ + } + } } } } + } - - tmpEnvelopeInfo.trianCnt = dataBuf[ii++];/* г */ - - for (chTrainIndex = 0u; chTrainIndex < tmpEnvelopeInfo.trianCnt; chTrainIndex++) + if (CI_SUCCESS == reVal) + { + /**/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) { - tmpEnvelopeInfo.trainID[chTrainIndex] = ShortFromChar(&dataBuf[ii]);/* гID */ + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 2U; + chPhySecBelCiId = GetPhySecBelongCiId(deviceId); + if (chPhySecBelCiId == localCiId) + { + ii += CICI_ONE_PHYSEC_LEN - 2U;/*ڱ״̬Ϣ*/ + } + else + { + bufIndex = GetPhySecConfigBufIndex(deviceId); /*ȡ±*/ + + tmpPhysicalSectionDataStru[bufIndex].PhysicalSectionId = deviceId; /*εǰں״̬*/ + + cPhySecOccState = dataBuf[ii]; + ii++; + SetPhySecCurOccupyState(deviceId, cPhySecOccState); /*βɼռ״̬*/ + + /*ںϺ״̬*/ + SetPhySecCurMergeState(deviceId, dataBuf[ii++]); + + /*ȡεǰCTUTռ״̬*/ + curUtOrCtOccFlag = dataBuf[ii++]; + + /*ͣϢ*/ + SetPhySecStopSteadyFlag(deviceId, dataBuf[ii++]); + + chRecvPhySecUseState = dataBuf[ii++]; + wPhySecUseRouteId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + wProSwSecUseRouteId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + + /*״̬*/ + belongCiId = GetRouteBelongCiId(wPhySecUseRouteId); + chCurPhySecUseState = GetPhySecUseState(deviceId); + if (belongCiId == localCiId) + { + /*ý·ڱ*/ + if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState)) + { /*ԷҵǰòŸ*/ + + SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); + } + else if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_NO == chCurPhySecUseState)) + { /*Էұδ*/ + /*ȡ*/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_CANCEL, deviceId, wPhySecUseRouteId, chPhySecBelCiId); + /*2024.12.06ڲŻ·󣬳ʼδãοᷢãʱͨ*/ + } + else + { + /**/ + } + } + else + { + /*ý·ڱƻ߽·IDΪ0*/ + if (PHYSICAL_SECTION_USING_NO == chRecvPhySecUseState) + { + /*δ*/ + if (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState) + { + ; + } + else + { + SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); + } + } + else + { + /**/ + if (0U < wPhySecUseRouteId) + { + SetPhySecUseState(deviceId, chRecvPhySecUseState, wPhySecUseRouteId); + } + else + { + ; + } + } + } + + /*״̬*/ + belongCiId = GetRouteBelongCiId(wProSwSecUseRouteId); + chCurPhySecUseState = GetPhySecUseState(deviceId); + if (belongCiId == localCiId) + { + /*ý·ڱ*/ + if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState)) + { /*ԷҵǰòŸ*/ + + SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); + } + else if ((PHYSICAL_SECTION_USING_YES == chRecvPhySecUseState) && (PHYSICAL_SECTION_USING_NO == chCurPhySecUseState)) + { /*Էұδ*/ + /*ȡ*/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_CANCEL, deviceId, wProSwSecUseRouteId, chPhySecBelCiId); + } + else + { + ; /**/ + } + } + else + { + /*ý·ڱƻ߽·IDΪ0*/ + if (PHYSICAL_SECTION_USING_NO == chRecvPhySecUseState) + { + /*δ*/ + if (PHYSICAL_SECTION_USING_APPLY == chCurPhySecUseState) + { + ; + } + else + { + SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); + } + } + else + { + /**/ + if (0U < wProSwSecUseRouteId) + { + SetPhySecProtectUseState(deviceId, chRecvPhySecUseState, wProSwSecUseRouteId); + } + else + { + ; + } + } + } + + + /*η״̬*/ + (void)SetPhySecFLockState(deviceId, dataBuf[ii++]); + /*Arb״̬*/ + phySecArbState = dataBuf[ii++]; + SetPhySecArbState(deviceId,phySecArbState); + /*Arb״̬ùarb*/ + SetPhyContainAxisSecArbState(deviceId,phySecArbState); + /*ռ״̬*/ + SetPhySecCurAndMergeState(deviceId,dataBuf[ii++]); + /*Ծ״̬*/ + SetPhySecJumpLockState(deviceId,dataBuf[ii++]); + /*η*/ + SetPhySecFLockType(deviceId, dataBuf[ii++]); + /*Ԥλ״̬*/ + SetPhySecPreResetState(deviceId, dataBuf[ii++]); + /*by cgh 20230706 ʾʽ⵹ʱ*/ + wPhyErrlockTime = ShortFromChar(&dataBuf[ii]); + ii += 2U; + SetPhyErrUnlockTime(deviceId, wPhyErrlockTime); + /*ƶ״̬*/ + SetPhySecAreaUrgentState(deviceId, dataBuf[ii++]); + + /*16.0£ABLռñ־*/ + chCurAblFlag = dataBuf[ii++]; + SetPhySecABLTrainFlag(deviceId, chCurAblFlag); + /*ռ״̬͵ʱ仯*/ + phySecCurMergeState = GetPhySecCurMergeState(deviceId); + if (SECTION_OCCUPY_YES == phySecCurMergeState) + { + chPreUtOrCtOccFlag = GetPhySecPreOccState(deviceId); /*ȡ֮ǰCTUTռ״̬*/ + dwSecUtOrCtOccuCyc = GetSecUtOrCtOccuStartCycNum(deviceId); + /*ʱУγռ״̬仯ҽѿʼʱ֮ǰʱ*/ + if ((chPreUtOrCtOccFlag != curUtOrCtOccFlag) && (0u != dwSecUtOrCtOccuCyc)) + { + if (LOGICSECTION_OCCUPY_NO != curUtOrCtOccFlag) + { + /*UTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); + } + else + { + /*߼ξУδںϿУݲ*/ + } + } + else if (LOGICSECTION_OCCUPY_UT == curUtOrCtOccFlag) + { + /*UTռѹ ABL UTCTռÿʼʱ*/ + chPreAblFlag = GetPhySecPreABLTrainFlag(deviceId); + if (chCurAblFlag != chPreAblFlag) + { + SetSecUtOrCtOccuStartCycNum(deviceId, dwCurCycNum); + } + } + else + { + /*ιУ·һγռδ仯ʱ*/ + } + + /*ռ״̬Ϊ֮ǰռ״̬*/ + SetPhySecPreOccState(deviceId, curUtOrCtOccFlag); + } + if (SECTION_OCCUPY_NO == phySecCurMergeState) + { + /*ȡUTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, 0u); + SetPhySecPreOccState(deviceId, LOGICSECTION_OCCUPY_NO); + } + + /*λռñ־*/ + SetPhySecUTTrainFlag(deviceId, dataBuf[ii++]); + + cPhySecInHumidRailFlag = dataBuf[ii++]; + SetPhySecInHumidRailFlag(deviceId, cPhySecInHumidRailFlag); /*ڿεʪ־*/ + } + } + } + if (CI_SUCCESS == reVal) + { + /*߼*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ߼*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ߼ID*/ ii += 2u; - tmpEnvelopeInfo.ACTPort[chTrainIndex] = dataBuf[ii++]; /* гˡUCTֽRRM */ - } + belongCiId = GetLogSecBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += 6U; /*ڱ߼״̬Ϣ*/ + chLgcSecResTrainSum = dataBuf[ii++]; /*ȡ߼Դг*/ + ii += chLgcSecResTrainSum * 3U; /*߼εԴгϢ*/ + } + else + { - if (CI_SUCCESS == reVal) + bufIndex = GetlogSectionBufIndex(deviceId); + tmpLogicSectionDataStru[bufIndex].LogicSectionId = deviceId; + /*߼ռ״̬*/ + SetLogSecPreOccupyState(deviceId, GetLogSecCurCtOrUtOccupyState(deviceId));/*߼֮ǰռ״̬*/ + SetLogSecCurOccupyState(deviceId, dataBuf[ii++]); + SetLogSecXSSttOtherTioc(deviceId, dataBuf[ii++]); + /** ߼Ծ״̬ */ + SetLogSecJumpLockState(deviceId, dataBuf[ii++]); + /* ߼ARB״̬ */ + SetLgcArbState(deviceId, dataBuf[ii++]); + /* ߼SPKS״̬ */ + SetLogSecSpksFLockState(deviceId, dataBuf[ii++]); + /*߼ηԴ״̬*/ + SetLogSecProResUseState(deviceId, dataBuf[ii++]); + /*߼ABLԴñ־*/ + SetLogSecAblUseFlag(deviceId, dataBuf[ii++]); + /*ʱٶֵ*/ + SetLogSecXiansuSpeed(deviceId, dataBuf[ii++]); + /*߼νʱ*/ + SetLogEmergXianSuOtherCi(deviceId, dataBuf[ii++]); + chLgcSecResTrainSum = dataBuf[ii++]; + for (kk = 0U; kk < chLgcSecResTrainSum; kk++) + { + wTrainId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + SetLogSecTrainUseState(deviceId,wTrainId,dataBuf[ii++]); + } + } + + } + } + + if (CI_SUCCESS == reVal) + { + /*źŻ*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡźŻ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) { - /* дֽյİ */ - SetCfpOtherOcEData(deviceId, chEnvelopeIndex, tmpEnvelopeInfo); + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡźŻID*/ + ii += 2u; + belongCiId = GetSignalBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_SIGNAL_LEN -2u;/*ڱźŻ״̬Ϣ*/ + } + else + { + bufIndex = GetSignalConfigBufIndex(deviceId); + tmpSignalDataStru[bufIndex].SignalId = deviceId; + + /*źŻ״̬*/ + SetSignalFLockState(deviceId, dataBuf[ii++]); + /*źŻ״̬*/ + (void)SetNearCISigLightExtinctState(deviceId, dataBuf[ii++]); + /*źŻǰʾɫ*/ + (void)SetNearCISignalCurColor(deviceId, dataBuf[ii++]); + /*źŻʱ*/ + SetSignalLinShiXianSuSetFlag(deviceId, dataBuf[ii++]); + /*źŻ۳*/ + SetSignalDetainState(deviceId, dataBuf[ii++]); + /*źŻӲ߿۳״̬*/ + SetSignalRelayDetainFlag(deviceId, dataBuf[ii++]); + /*źŻά޵״̬*/ + SetSignalMaintainState(deviceId, dataBuf[ii++]); + /*źŻӦ˿־*/ + SetNearCISignalCurDsFlag(deviceId, dataBuf[ii++]); + /*źŻ۳·ť״̬*/ + SetDetCutBtnState(deviceId, dataBuf[ii]); + ii++; + } + } + } + + if (CI_SUCCESS == reVal) + { + /**/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 2u; + belongCiId = GetPsdBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_PSD_LEN -2u;/*ڱPSD״̬Ϣ*/ + } + else + { + bufIndex = GetPsdConfigBufIndex(deviceId); + tmpPsdDataStru[bufIndex].PsdId = deviceId; + + (void)SetPsdState(deviceId, dataBuf[ii++]); /*ſ״̬״̬*/ + (void)SetPsdMutualLockRemoveState(deviceId,dataBuf[ii++]); /*Ż״̬״̬*/ + + deviceInfo = dataBuf[ii]; /*PSD쳣״̬*/ + ii++; + SetPsdExceptOpenState(deviceId, deviceInfo); + } + } + } + + if (CI_SUCCESS == reVal) + { + /*ͣť*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡͣ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡͣID*/ + ii += 2u; + belongCiId = GetEsbBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_ESB_LEN -2u;/*ڱESB״̬Ϣ*/ + } + else + { + bufIndex = GetEsbConfigBufIndex(deviceId); + tmpEsbDataStru[bufIndex].EsbId = deviceId; + + /*ͣť״̬*/ + (void)SetEsbState(deviceId, dataBuf[ii++]); + + /*ͣ·ť״̬*/ + SetEsbCutState(deviceId, dataBuf[ii++]); + } + } + } + + if (CI_SUCCESS == reVal) + { + /*·*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ·*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ·ID*/ + ii += 2u; + belongCiId = GetRouteBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_ROUTE_LEN -2u;/*ڱĽ·״̬Ϣ*/ + } + else + { + /*·״̬*/ + (void)SetRouteState(deviceId, dataBuf[ii++]); + + /*·ල*/ + SetRouteLevel(deviceId, dataBuf[ii++]); + + /* 2B:UTνʱ*/ + utOverlapUnlockCount = ShortFromChar(&dataBuf[ii]); + ii+=2u; + + if (0u < utOverlapUnlockCount) + { + SetOtherCIRouteOvlpUTUnlockCnt(deviceId,utOverlapUnlockCount); + } + + /* 2B:CTνʱ*/ + ctOverlapUnlockCount = ShortFromChar(&dataBuf[ii]); + ii+=2u; + + if (0u < ctOverlapUnlockCount) + { + SetOtherCIRouteOverlapCTUnlockCount(deviceId,ctOverlapUnlockCount); + } + + /*Զźȡ״̬*/ + SetAutoSigCancleState(deviceId,dataBuf[ii++]); + SetRouteOverlapNeedCIlockFlag(deviceId, dataBuf[ii++]); + + SetRouteStateFlag(deviceId, dataBuf[ii++]);/*·׷ٰ־*/ + + SetRouteAutoTriggerFlag(deviceId, dataBuf[ii++]); /*·Զ־*/ + + SetRouteCouplinkFlag(deviceId, dataBuf[ii++]); /*·ұ־*/ + } + } + } + + if (CI_SUCCESS == reVal) + { + /*״̬*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 2u; + /*״̬*/ + deviceInfo = dataBuf[ii++]; + + /*η·ID*/ + pLockBlongRouteId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /*·ID*/ + rLockBlongRouteId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /*״̬*/ + belongCiId = GetPhySecBelongCiId(deviceId); + if (belongCiId != localCiId) + {/*DZ*/ + + if (PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) + {/*ֻз*/ + + /*·գΪPHYSICAL_SECTION_LOCK_NOPhysicalSectionDataStru[bufIndex].RLockBelongRouteId*/ + (void)SetPhySecLockStateOtherCI(deviceId, PHYSICAL_SECTION_LOCK_NO, 0u, 0u); + + /*·Ϊ*/ + belongCiId = GetRouteBelongCiId(pLockBlongRouteId); + if (belongCiId == localCiId) + { + /*ý·*/ + SetRouteOverlapLockedId(pLockBlongRouteId,ShortFromChar(&dataBuf[ii])); + } + } + else if (PHYSICAL_SECTION_LOCK_NO == deviceInfo) + { /*δ*/ + + belongRouteId = GetPhySecPLockBelongRouteId(deviceId); + belongCiId = GetRouteBelongCiId(belongRouteId); + if ((0u < belongRouteId) &&(belongCiId == localCiId)) + { + /*·ձId*/ + SetRouteOverlapLockedId(GetPhySecPLockBelongRouteId(deviceId), 0); + /*α־*/ + SetOverlapUnlockApplyFlag(ShortFromChar(&dataBuf[ii]),UNLOCK_OVERLAP_APPLY_NO); + } + } + else + { + + if(pLockBlongRouteId > 0u) + {/*ͬʱڷպͨ*/ + belongCiId = GetRouteBelongCiId(pLockBlongRouteId); + if(belongCiId == localCiId) + {/*η·ڱ*/ + SetRouteOverlapLockedId(pLockBlongRouteId,ShortFromChar(&dataBuf[ii])); + } + + /*η*/ + (void)SetPhySecLockStateOtherCI(deviceId,PHYSICAL_SECTION_LOCK_PROTECT,pLockBlongRouteId,dataBuf[ii+3U]); + } + else + { + belongRouteId = GetPhySecPLockBelongRouteId(deviceId); + if (0u < belongRouteId) + { + belongCiId = GetRouteBelongCiId(belongRouteId); + if(belongCiId == localCiId) + { + /*·ձId*/ + SetRouteOverlapLockedId(GetPhySecPLockBelongRouteId(deviceId), 0); + /*α־*/ + SetOverlapUnlockApplyFlag(ShortFromChar(&dataBuf[ii]),UNLOCK_OVERLAP_APPLY_NO); + } + + (void) ClearPhySecPLock(deviceId); + } + + } + } + + ii += 2u;/*ID*/ + if(PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) + { + (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, pLockBlongRouteId, dataBuf[ii++]);/*״̬dataBuf[ii++]Ϊշ*/ + } + else + { + (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii++]);/*״̬dataBuf[ii++]Ϊշ*/ + } + + /* αռüʱ */ + phySecPreOccupyState = GetPhySecPreOccupyState(deviceId); + phySecCurOccupyState = GetPhySecCurOccupyState(deviceId); + phySecPreMergeState = GetPhySecPreMergeState(deviceId); + phySecCurMergeState = GetPhySecCurMergeState(deviceId); + if ((SECTION_OCCUPY_NO == phySecPreOccupyState) && (SECTION_OCCUPY_YES == phySecCurOccupyState)) + { + /*бռ*/ + + /*εһͬʱռʱռÿʼʱ*/ + routeId = GetPhySecRLockBelongRouteId(deviceId); + if (routeId > 0u) + {/*ν·*/ + + routePhySecSum = GetRoutePhysicalSectionSum(routeId); + routePSSecStru = GetRouteSectionData(routeId); + preSecId = 0u; + for (kk = 0u; kk < routePhySecSum; kk++) + { + if (routePSSecStru[kk].PhysicalSectionId == deviceId) + {/*ҵ·еĸ*/ + + if (kk > 0u) + {/*ǵһ*/ + + preSecId = routePSSecStru[kk - 1U].PhysicalSectionId; + } + else + { + routeNearPSSecStru = GetRouteBlocNearPhySectionStru(routeId); + if (routeNearPSSecStru != NULL) + { + preSecId = routeNearPSSecStru[0].NearPhySecIdBuf[0]; + } + else + { + preSecId = 0u; + } + + } + phySecCurMergeState = GetPhySecCurMergeState(preSecId); + if ((0u != preSecId) &&(SECTION_OCCUPY_YES == phySecCurMergeState)) + {/*һͬʱռ*/ + + /*ռÿʼʱ*/ + SetSecCurOccupyStartCycNum(deviceId, Get2oo2CurCycleNum()); + + /*UTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, Get2oo2CurCycleNum()); + } + + break; + } + } + + } + else + { + /* ûս·Ϊг˳ռ, */ + SetSecCurOccupyStartCycNum(deviceId, 0u); + /*ȡUTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, 0u); + } + } + else if ((SECTION_OCCUPY_YES == phySecPreMergeState) && (SECTION_OCCUPY_NO == phySecCurMergeState)) + { + /*ռñ*/ + + /*ȡռÿʼʱ*/ + SetSecCurOccupyStartCycNum(deviceId, 0u); + /*ȡUTCTռÿʼʱ*/ + SetSecUtOrCtOccuStartCycNum(deviceId, 0u); + } + else + { + /*ʱ*/ + } + + continue; + } + else + { + ii += 2u;/*ID*/ + SetPhySecOtherCiPLockRouteId(deviceId, pLockBlongRouteId); /*ñ߼CI͵ķ·ID*/ + } + + /*״̬״̬Ϣ*/ + switch (deviceInfo) + { + case PHYSICAL_SECTION_LOCK_START: + /*ǰϵ*/ + + /**/ + + break; + case PHYSICAL_SECTION_LOCK_NO: + /*ǰδ*/ + phySecLockState = GetPhySecLockState(deviceId); + if (PHYSICAL_SECTION_LOCK_NO != phySecLockState) + { + (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ + } + + break; + + default: + /*״̬*/ + if(PHYSICAL_SECTION_LOCK_PROTECT == deviceInfo) + { + (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, pLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ + } + else + { + (void)SetPhySecLockStateOtherCI(deviceId, deviceInfo, rLockBlongRouteId, dataBuf[ii]);/*״̬dataBuf[ii++]Ϊշ*/ + } + break; + + } + ii++; + + } + } + + + if (CI_SUCCESS == reVal) + { + /* SPKS */ + deviceSum = ShortFromChar(&dataBuf[ii]);/*SPKS*/ + ii += 2u; + for (jj = 0u;jj < deviceSum;jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + belongCiId = GetSpksBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_SPKS_LEN -2u;/*ڱSPKS״̬Ϣ*/ + } + else + { + bufIndex = GetSpksConfigBufIndex(deviceId); + tmpSpksDataStru[bufIndex].spksId = deviceId; + + deviceInfo = dataBuf[ii++]; + (void)SetSpksState(deviceId, deviceInfo); + + deviceInfo = dataBuf[ii++]; + SetSpksCutState(deviceId, deviceInfo); + } + } + } + + if (CI_SUCCESS == reVal) + { + /* ̵ */ + deviceSum = ShortFromChar(&dataBuf[ii]);/*̵*/ + ii += 2u; + for (jj = 0u;jj < deviceSum;jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + belongCiId = GetRelayBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_VIRTUAL_RELAY_LEN - 2u;/*ڱ̵״̬Ϣ*/ + } + else + { + bufIndex = GetRelayConfigBufIndex(deviceId); + tmpRelayDataStru[bufIndex].RelayId = deviceId; + + deviceInfo = dataBuf[ii++]; + SetRelayCollState(deviceId, deviceInfo);/*̵ɼ״̬*/ + } + } + } + + if (CI_SUCCESS == reVal) + { + /* */ + deviceSum = ShortFromChar(&dataBuf[ii]);/**/ + ii += 2u; + for (jj = 0u;jj < deviceSum;jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + floodBelongCiId = GetFloodGateBelongCiId(deviceId); + if (floodBelongCiId == localCiId) + { + ii += CICI_ONE_FLOODGATE_LEN - 2u;/*ڱķŵ״̬Ϣ*/ + } + else + { + bufIndex = GetFloodGateBufIndex(deviceId); + execRet = SetFloodGateCurOpenLockState(bufIndex,dataBuf[ii++]);/**/ + if (CI_ERROR == execRet) + { + debug_infor_printf((const)"SetFloodGateCurOpenLockState %d error.",bufIndex); + } + execRet = SetFloodGateCurCloseRequestSta(bufIndex,dataBuf[ii++]);/**/ + if (CI_ERROR == execRet) + { + debug_infor_printf((const)"SetFloodGateCurCloseRequestState %d error.",bufIndex); + } + execRet = SetFloodGateCurZCAgrCloseAck(bufIndex,dataBuf[ii++]);/*zcͬر*/ + if (CI_ERROR == execRet) + { + debug_infor_printf((const)"SetFloodGateCurAgreeCloseAckFromZC %d error.",bufIndex); + } + execRet = SetFloodGateCurAgreeCloseSta(bufIndex,dataBuf[ii++]);/*ǰɼͬر*/ + if (CI_ERROR == execRet) + { + debug_infor_printf((const)"SetFloodGateCurAgreeCloseCollState %d error.",bufIndex); + } + execRet = SetFloodGateCurAgreeCloseOutSta(bufIndex,dataBuf[ii++]);/*ͬر*/ + if (CI_ERROR == execRet) + { + debug_infor_printf((const)"SetFloodGateCurAgreeCloseOutState %d error.",bufIndex); + } + } + } + } + + if (CI_SUCCESS == reVal) + { + /**/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡID*/ + ii += 2u; + belongCiId = GetOverlapBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_OVERLAP_LEN -2u;/*ڱı״̬Ϣ*/ + } + else + { + /*·ID*/ + overlapBelongRouteId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + SetOverlapBelongRouteId(deviceId,overlapBelongRouteId); + + /* 4B:ָIDʼں*/ + unlockStartCycNum = LongFromChar(&dataBuf[ii]); + ii += 4u; + + if (unlockStartCycNum > 0u) + { + (void)SetOverlapUnlockStartCycNum(deviceId,unlockStartCycNum); + } + + /* 4B:ָIDѡſʼں*/ + xuanPaiStartCycNum = LongFromChar(&dataBuf[ii]); + ii += 4u; + + if (xuanPaiStartCycNum > 0u) + { + SetOverlapXuanPaiStartCycNum(deviceId,xuanPaiStartCycNum); + } + + /*ָIDZCα־*/ + overlapUnlockApplyFlag = dataBuf[ii++]; + if (overlapUnlockApplyFlag > 0u) + { + SetOverlapUnlockApplyFlag(deviceId,overlapUnlockApplyFlag); + } + /*νʱ*/ + overlapUnlockTime = ShortFromChar(&dataBuf[ii]); + ii += 2U; + + SetOverlapUnlockTime(deviceId,overlapUnlockTime); + + /*η鿪ʼ־*/ + cProSwtCheckStartFlag = dataBuf[ii]; + ii++; + SetOverlapProSwtCheckStartFlag(deviceId, cProSwtCheckStartFlag); + + if (PROSWITCH_CHECK_START_VALID != cProSwtCheckStartFlag) + { + SetOverlapProSwtCheckResultFlag(deviceId, PROSWITCH_CHECK_RESULT_DEFAULT); /*ս־ΪĬֵ*/ + } + else + { + /*ڽӿи·־*/ + } + } + } + } + + if (CI_SUCCESS == reVal) + { + /*cgh-ϲCID-2539-7Զͨ·*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡԶͨ·*/ + ii += 2u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡԶͨ·ID*/ + ii += 2u; + belongCiId = GetAutoRouteBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += CICI_ONE_AUTOROUTE_LEN - 2u;/*ڱԶͨ·Ϣ*/ + } + else + { + autoRouteSetFlag = dataBuf[ii++]; + /*Զͨ·״̬*/ + SetAutoRouteSetFlag(deviceId, autoRouteSetFlag); + } + } + } + + if (CI_SUCCESS == reVal) + { + /*߼״̬*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ȡ߼*/ + ii += 2U; + for (jj = 0; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ȡ߼ID*/ + ii += 2U; + /*״̬*/ + logLockState = dataBuf[ii++]; + /*·*/ + lockBelongRoute = ShortFromChar(&dataBuf[ii]); + ii += 2U; + /*·*/ + pLockBelongRoute = ShortFromChar(&dataBuf[ii]); + ii += 2U; + /*շ*/ + lockDir = dataBuf[ii++]; + /*߼߼״̬*/ + cLogSecLogicLockState = dataBuf[ii++]; + /*߼߼շ*/ + cLogSecLogicLockDir = dataBuf[ii++]; + /*߼߼߼·*/ + cLogLockBelLogRouteSum = dataBuf[ii++]; + chLgcResShrFlag = dataBuf[ii++]; + /* ȡ߼TIOC */ + belongCiId = GetLogSecBelongCiId(deviceId); + belongRouteId = GetLogSecLockBelongRoute(deviceId); + cRouteCiId = GetRouteBelongCiId(belongRouteId); + cFlashTrainInfoFlag = 0u; + + if ((belongCiId != localCiId) || ((cRouteCiId != localCiId)&&(0U != cRouteCiId))) + {/*DZ߼λս·DZTIOC*/ + + /* ״̬жǷͬг */ + if ((LOG_SECTION_LOCK_NORMAL == logLockState) || (LOG_SECTION_LOCK_DELAY == logLockState) || (LOG_SECTION_LOCK_PROTECT == logLockState) + || (LOG_SECTION_LOGLOCK_NORMAL == cLogSecLogicLockState)) + { + /* Էջʱջ߼ո */ + cFlashTrainInfoFlag = 1u; + } + } + + /*״̬*/ + + if (belongCiId != localCiId) + {/*DZ߼*/ + + switch (logLockState) + { + case LOG_SECTION_LOCK_PROTECT: + /*ֻз*/ + SetLogSecLockStateOtherCI(deviceId, logLockState, pLockBelongRoute, lockDir);/*߼״̬*/ + break; + case LOG_SECTION_LOCK_NO: + /*δ*/ + SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ + /*YF0083-1235,޸ȱݣԷ״̬Ϊδʱյε״̬Ľ·ID*/ + ClearLogicSecPLock(deviceId); + break; + default: + + if (pLockBelongRoute > 0u) + { + /*η*/ + SetLogSecLockStateOtherCI(deviceId, LOG_SECTION_LOCK_PROTECT, pLockBelongRoute, lockDir); + } + else + { + /*޸ȱݣԷ·ID0ʱҪս·ID,ʱԷʱջ*/ + ClearLogicSecPLock(deviceId); + } + SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ + break; + } + + SetLogSecLogLockStateOtherCi(deviceId, cLogSecLogicLockState, cLogSecLogicLockDir, cLogLockBelLogRouteSum); /*·DZ߼ε߼״̬ڸʾ*/ + } + else + { + /*߼״̬߼̬Ϣ߼ε߼״̬ɱٽ߼״̬*/ + switch (logLockState) + { + case LOG_SECTION_LOCK_START: + /*ǰϵ*/ + /**/ + break; + case LOG_SECTION_LOCK_NO: + /*ǰδ*/ + localLogLockState = GetLogSecLockState(deviceId); + if (LOG_SECTION_LOCK_NO != localLogLockState) + { + SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ + } + + break; + case LOG_SECTION_LOCK_PROTECT: + /* */ + SetLogSecLockStateOtherCI(deviceId, logLockState, pLockBelongRoute, lockDir); + break; + default: + /*״̬*/ + SetLogSecLockStateOtherCI(deviceId, logLockState, lockBelongRoute, lockDir);/*߼״̬*/ + break; + + } + + SetLogSecOtherCiPLockRouteId(deviceId, pLockBelongRoute); /*ñ߼CI͵ķ·ID*/ + } + + /* ԴϢ */ + chLogSecTrainInfoSum = dataBuf[ii++];/*߼г*/ + + /*߼гϢ*/ + for (chLogicTrainIndex = 0u; chLogicTrainIndex < chLogSecTrainInfoSum; chLogicTrainIndex++) + { + + szTrainId[chLogicTrainIndex] = ShortFromChar(&dataBuf[ii]);/*гID*/ + ii += 2u; + } + + + if (1u == cFlashTrainInfoFlag) + { + /* ͬгϢs */ + SetLogSecResShareFlag(deviceId, chLgcResShrFlag); + AddLogSecOtherTIOCTrainRes(deviceId, chLogSecTrainInfoSum, szTrainId); + } + } + } + + if (CI_SUCCESS == reVal) + { + /*ֽϢ*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*ֽ*/ + ii += 2u; + chTiocIndex = GetTiocTransmitIndex(sourceId); + g_szTiocCt[chTiocIndex].chCtNum = 0u; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ֽID*/ + ii += 2u; + dwTmpIndex = GetCfpBufIndex(deviceId); + + + if (CUTOFF_POINT_SUM_MAX <= dwTmpIndex) + { + ii += 7U; /*ڱֽгϢ*/ + chEnvelopeNum = dataBuf[ii++]; /*ֽ*/ + for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++) + { + /*ֽϢ*/ + ii += 19U; + cTempTrainNum = dataBuf[ii++]; /*г*/ + ii += cTempTrainNum * 2U; /*гID*/ + } + + chCtNum = dataBuf[ii++]; /*ֽг*/ + ii += cTempTrainNum * 35U; /*ֽгϢ*/ + ii += 7U; /*ԶRRMϢ*/ + ii += 2; /*źŻID*/ + } + else + { + /*гID*/ + tmpTrainInfo.wTrainId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /*еȼ*/ + tmpTrainInfo.chTrainLevel =dataBuf[ii]; + ii++; + if ((0u == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_BACKUP_UNKNOWN == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_UR == tmpTrainInfo.chTrainLevel) + || (TRAIN_LEVEL_ABL == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_VBTC == tmpTrainInfo.chTrainLevel) || (TRAIN_LEVEL_ITC == tmpTrainInfo.chTrainLevel)) + { + ;/*0޳URABLVBTCITC 0xffϷ*/ + } + else + { + reVal = CI_ERROR; + } + + /*ֽ*/ + tmpTrainInfo.dwDis = LongFromChar(&dataBuf[ii]); + ii += 4u; + + /* дֽг */ + SetCfpOtherOcTrainInfo(deviceId,tmpTrainInfo); + + /* ֽյOCİ */ + chEnvelopeNum = dataBuf[ii++]; + if (CUTOFF_POINT_SUM_MAX >= chEnvelopeNum) + { + SetCfpOtherOcENum(deviceId, chEnvelopeNum); + } + else + { + reVal = CI_ERROR; + } + + for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++) + { + tmpEnvelopeInfo.envelopeType = dataBuf[ii++]; /* */ + if ((TYPE_UKT_ENVELOPE == tmpEnvelopeInfo.envelopeType) + || (TYPE_UCT_ENVELOPE == tmpEnvelopeInfo.envelopeType) + || (TYPE_CT_ENVELOPE == tmpEnvelopeInfo.envelopeType)) + { + ;/*1:ͨų 2ʧͨų 3س*/ + } + else + { + reVal = CI_ERROR; + } + + tmpEnvelopeInfo.headTrainID = ShortFromChar(&dataBuf[ii]);/* ǰID */ + ii += 2u; + + tmpEnvelopeInfo.tailTrainID = ShortFromChar(&dataBuf[ii]);/* ID */ + ii += 2u; + + tmpEnvelopeInfo.startPos.Dir = dataBuf[ii++];/* 㷽 */ + + tmpEnvelopeInfo.startPos.Lnk = ShortFromChar(&dataBuf[ii]);/* link */ + ii += 2u; + + tmpEnvelopeInfo.startPos.Off = LongFromChar(&dataBuf[ii]);/* offset */ + ii += 4u; + + tmpEnvelopeInfo.endPos.Dir = dataBuf[ii++];/* յ㷽 */ + + tmpEnvelopeInfo.endPos.Lnk = ShortFromChar(&dataBuf[ii]);/* յlink */ + ii += 2u; + + tmpEnvelopeInfo.endPos.Off = LongFromChar(&dataBuf[ii]);/* յoffset */ + ii += 4u; + + wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.startPos.Lnk); + if (wLinkTioc == localCiId) + { + (void)dsuCheckSameLoc(tmpEnvelopeInfo.startPos.Lnk, tmpEnvelopeInfo.startPos.Off, &tmpEnvelopeInfo.startPos.Lnk, &tmpEnvelopeInfo.startPos.Off); + } + + wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.endPos.Lnk); + if (wLinkTioc == localCiId) + { + (void)dsuCheckSameLoc(tmpEnvelopeInfo.endPos.Lnk, tmpEnvelopeInfo.endPos.Off, &tmpEnvelopeInfo.endPos.Lnk, &tmpEnvelopeInfo.endPos.Off); + } + + /*ȡֽOCİ*/ + reVal = CutCfpOtherOcEData(deviceId,&tmpEnvelopeInfo); + + tmpEnvelopeInfo.ACCnt = elm_PrepareACBtwPoints(tmpEnvelopeInfo.startPos, tmpEnvelopeInfo.endPos, tmpEnvelopeInfo.ACID); + /* ڲŻ 20220419 wqm elm_PrepareACBtwPoints0߷гаʱ˴Ӧ÷ΪCI_ERROR*/ + if ((SECTION_IN_ENVELOPE_SUM_MAX == tmpEnvelopeInfo.ACCnt) || (0u == tmpEnvelopeInfo.ACCnt)) + { + reVal = CI_ERROR; + } + else + { + for (chAcIndex = 0u; chAcIndex < tmpEnvelopeInfo.ACCnt; chAcIndex++) + { + wTiocId = GetAxisBelongTioc(tmpEnvelopeInfo.ACID[chAcIndex]); + if ((localCiId == wTiocId) || (0u == wTiocId)) + { + reVal = CI_ERROR; + break; + } + else + { + ; + } + } + } + + + tmpEnvelopeInfo.trianCnt = dataBuf[ii++];/* г */ + + for (chTrainIndex = 0u; chTrainIndex < tmpEnvelopeInfo.trianCnt; chTrainIndex++) + { + tmpEnvelopeInfo.trainID[chTrainIndex] = ShortFromChar(&dataBuf[ii]);/* гID */ + ii += 2u; + + tmpEnvelopeInfo.ACTPort[chTrainIndex] = dataBuf[ii++]; /* гˡUCTֽRRM */ + } + + if (CI_SUCCESS == reVal) + { + /* дֽյİ */ + SetCfpOtherOcEData(deviceId, chEnvelopeIndex, tmpEnvelopeInfo); + } + else + { + ; + } + } + + chCtNum = dataBuf[ii++]; + for (chCtIndex = 0u; chCtIndex < chCtNum; chCtIndex++) + { + wTrainId = ShortFromChar(&dataBuf[ii]); /* гID */ + ii += 2u; + + g_szTiocCt[chTiocIndex].szCtId[g_szTiocCt[chTiocIndex].chCtNum++] = wTrainId; + + SetTrainMsgFromTiocId(wTrainId, sourceId); + + (void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); + + chLevel = dataBuf[ii++]; + (void)SetTrainLevel(wTrainId, chLevel); /* гм */ + + dwTrainDelay = LongFromChar(&dataBuf[ii]); /* TIOCгͨʱ */ + ii += 4u; + (void)SetTrainMsgDelayTime(wTrainId, dwTrainDelay); + + wSpeed = ShortFromChar(&dataBuf[ii]); + ii += 2u; + (void)SetTrainSpeed(wTrainId, wSpeed); /* гٶ */ + + chSpeedDir = dataBuf[ii++]; + (void)SetTrainSpeedDir(wTrainId, chSpeedDir); /* ٶȷ */ + + chTrainDir = dataBuf[ii++]; + (void)SetTrainDir(wTrainId, chTrainDir); /* гз */ + + wLinkId = ShortFromChar(&dataBuf[ii]); /* гȫǰlink */ + ii += 2u; + (void)SetTrainMaxHeadLink(wTrainId, wLinkId); + + dwOffset = LongFromChar(&dataBuf[ii]); /* гȫǰOffset */ + ii += 4u; + (void)SetTrainMaxHeadOffset(wTrainId, dwOffset); + + wLinkId = ShortFromChar(&dataBuf[ii]); /* гСȫǰlink */ + ii += 2u; + (void)SetTrainMinHeadLink(wTrainId, wLinkId); + + dwOffset = LongFromChar(&dataBuf[ii]); /* гСȫǰOffset */ + ii += 4u; + (void)SetTrainMinHeadOffset(wTrainId, dwOffset); + + wLinkId = ShortFromChar(&dataBuf[ii]); /* гȫlink */ + ii += 2u; + (void)SetTrainMaxTailLink(wTrainId, wLinkId); + + dwOffset = LongFromChar(&dataBuf[ii]); /* гȫOffset */ + ii += 4u; + (void)SetTrainMaxTailOffset(wTrainId, dwOffset); + + wLinkId = ShortFromChar(&dataBuf[ii]); /* гСȫlink */ + ii += 2u; + (void)SetTrainMinTailLink(wTrainId, wLinkId); + + dwOffset = LongFromChar(&dataBuf[ii]); /* гСȫOffset */ + ii += 4u; + (void)SetTrainMinTailOffset(wTrainId, dwOffset); + + /*гȫˡСȫǰˡȫǰ˵з*/ + reVal = SetTrainOtherPointDir(wTrainId, chTrainDir); + + } + + /*ֽԶRMϢ*/ + cRrmSrcRcId = dataBuf[ii++]; /*ԴRC ID*/ + wRrmTrainId = ShortFromChar(&dataBuf[ii]); /* RRMгID */ + ii += 2U; + wRrmTrainNextStaId = ShortFromChar(&dataBuf[ii]); /* RRMгһվ̨ID */ + ii += 2U; + chRrmSrcApplyState = dataBuf[ii++]; /* ԶRMʱԴTIOC״̬ */ + chRrmDstAllowState = dataBuf[ii++]; /* ԶRMʱĿTIOC״̬ */ + + SetCfpRrmSrcRcId(deviceId, cRrmSrcRcId); + SetCfpRrmTrainId(deviceId, wRrmTrainId); + SetCfpRrmTrainNextStaId(deviceId, wRrmTrainNextStaId); + if (cRrmSrcRcId != localCiId) + { + SetCfpRrmSrcApplyState(deviceId, chRrmSrcApplyState); + } + else + { + /*ΪԴRC*/ + } + + SetCfpRrmDstAllowState(deviceId, chRrmDstAllowState); + + wCfpRelAdjaRcSignalId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + cCfpSignalLightUpFlag = dataBuf[ii]; /*ֽźŻƱ־*/ + ii++; + + belongCiId = GetSignalBelongCiId(wCfpRelAdjaRcSignalId); + + if ((0U != belongCiId) && (belongCiId == localCiId)) + { + SetSleepTrainLightUpSignalFlag(wCfpRelAdjaRcSignalId, cCfpSignalLightUpFlag); /*Էֽ߳źŻ־Ч*/ + } + else + { + /*DZźŻ*/ + } + } + } + } + + /*ѩ*/ + if (CI_SUCCESS == reVal) + { + cCiRecvAreaSnowNum = dataBuf[ii]; + ii++; + if (CI_TO_CI_AREA_SNOW_SUM_MAX >= cCiRecvAreaSnowNum) + { + ClearCiRecvAreaSnowInfo(sourceId); /*͸ѩϢ*/ + for (kk = 0U; kk < cCiRecvAreaSnowNum; kk++) + { + wAreaId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + cAreaSnowLevel = dataBuf[ii]; /*ʪ켶*/ + ii++; + + AddCiRecvAreaSnowInfo(sourceId, localCiId, wAreaId, cAreaSnowLevel); /*洢DZѩϢ*/ + } } else { - ; + reVal = CI_ERROR; } } - chCtNum = dataBuf[ii++]; - for (chCtIndex = 0u; chCtIndex < chCtNum; chCtIndex++) - { - wTrainId = ShortFromChar(&dataBuf[ii]); /* гID */ - ii += 2u; - - g_szTiocCt[chTiocIndex].szCtId[g_szTiocCt[chTiocIndex].chCtNum++] = wTrainId; - - SetTrainMsgFromTiocId(wTrainId, (UINT8)sourceId); - - (void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); - - chLevel = dataBuf[ii++]; - (void)SetTrainLevel(wTrainId, chLevel); /* гм */ - - dwTrainDelay = LongFromChar(&dataBuf[ii]); /* TIOCгͨʱ */ - ii += 4u; - (void)SetTrainMsgDelayTime(wTrainId, dwTrainDelay); - - wSpeed = ShortFromChar(&dataBuf[ii]); - ii += 2u; - (void)SetTrainSpeed(wTrainId, wSpeed); /* гٶ */ - - chSpeedDir = dataBuf[ii++]; - (void)SetTrainSpeedDir(wTrainId, chSpeedDir); /* ٶȷ */ - - chTrainDir = dataBuf[ii++]; - (void)SetTrainDir(wTrainId, chTrainDir); /* гз */ - - wLinkId = ShortFromChar(&dataBuf[ii]); /* гȫǰlink */ - ii += 2u; - (void)SetTrainMaxHeadLink(wTrainId, wLinkId); - - dwOffset = LongFromChar(&dataBuf[ii]); /* гȫǰOffset */ - ii += 4u; - (void)SetTrainMaxHeadOffset(wTrainId, dwOffset); - - wLinkId = ShortFromChar(&dataBuf[ii]); /* гСȫǰlink */ - ii += 2u; - (void)SetTrainMinHeadLink(wTrainId, wLinkId); - - dwOffset = LongFromChar(&dataBuf[ii]); /* гСȫǰOffset */ - ii += 4u; - (void)SetTrainMinHeadOffset(wTrainId, dwOffset); - - wLinkId = ShortFromChar(&dataBuf[ii]); /* гȫlink */ - ii += 2u; - (void)SetTrainMaxTailLink(wTrainId, wLinkId); - - dwOffset = LongFromChar(&dataBuf[ii]); /* гȫOffset */ - ii += 4u; - (void)SetTrainMaxTailOffset(wTrainId, dwOffset); - - wLinkId = ShortFromChar(&dataBuf[ii]); /* гСȫlink */ - ii += 2u; - (void)SetTrainMinTailLink(wTrainId, wLinkId); - - dwOffset = LongFromChar(&dataBuf[ii]); /* гСȫOffset */ - ii += 4u; - (void)SetTrainMinTailOffset(wTrainId, dwOffset); - - /*гȫˡСȫǰˡȫǰ˵з*/ - reVal = SetTrainOtherPointDir(wTrainId, chTrainDir); - - } - - /*ֽԶRMϢ*/ - cRrmSrcRcId = dataBuf[ii++]; /*ԴRC ID*/ - wRrmTrainId = ShortFromChar(&dataBuf[ii]); /* RRMгID */ - ii += 2U; - wRrmTrainNextStaId = ShortFromChar(&dataBuf[ii]); /* RRMгһվ̨ID */ - ii += 2U; - chRrmSrcApplyState = dataBuf[ii++]; /* ԶRMʱԴTIOC״̬ */ - chRrmDstAllowState = dataBuf[ii++]; /* ԶRMʱĿTIOC״̬ */ - - SetCfpRrmSrcRcId(deviceId, cRrmSrcRcId); - SetCfpRrmTrainId(deviceId, wRrmTrainId); - SetCfpRrmTrainNextStaId(deviceId, wRrmTrainNextStaId); - if (cRrmSrcRcId != localCiId) - { - SetCfpRrmSrcApplyState(deviceId, chRrmSrcApplyState); - } - else - { - /*ΪԴRC*/ - } - - SetCfpRrmDstAllowState(deviceId, chRrmDstAllowState); - - wCfpRelAdjaRcSignalId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - cCfpSignalLightUpFlag = dataBuf[ii]; /*ֽźŻƱ־*/ - ii++; - - belongCiId = GetSignalBelongCiId(wCfpRelAdjaRcSignalId); - - if ((0U != belongCiId) && (belongCiId == localCiId)) - { - SetSleepTrainLightUpSignalFlag(wCfpRelAdjaRcSignalId, cCfpSignalLightUpFlag); /*Էֽ߳źŻ־Ч*/ - } - else - { - /*DZźŻ*/ - } - } - } - } - - /*ѩ*/ - if (CI_SUCCESS == reVal) - { - cCiRecvAreaSnowNum = dataBuf[ii]; - ii++; - if (CI_TO_CI_AREA_SNOW_SUM_MAX >= cCiRecvAreaSnowNum) - { - ClearCiRecvAreaSnowInfo((UINT8)sourceId); /*͸ѩϢ*/ - for (kk = 0U; kk < cCiRecvAreaSnowNum; kk++) - { - dwPlatFormHlhtId = LongFromChar(&dataBuf[ii]); /*վ̨ͨID*/ - ii += 4U; - - AddCiRecvAreaSnowInfo((UINT8)sourceId, localCiId, dwPlatFormHlhtId); /*洢DZѩվ̨ID*/ - } - } - else - { - reVal = CI_ERROR; - } - } - else - { - /**/ - } - - /*ȥ*/ - if (CI_SUCCESS == reVal) - { - cCiRecvLeavelogNum = ShortFromChar(&dataBuf[ii]); - ii += 2U; - if (CI_TO_CI_LEAVE_LOGSEC_ROUTE_NUM >= cCiRecvLeavelogNum) - { - for (kk = 0U; kk < cCiRecvLeavelogNum; kk++) - { - leaveLogSecId = ShortFromChar(&dataBuf[ii]); /*ȥ߼ID*/ - ii += 2U; - leaveCheckFlag = dataBuf[ii++]; - SetRouteLeaveLogSecFlag(leaveLogSecId, leaveCheckFlag); - } - } - else - { - reVal = CI_ERROR; - } - } - else - { - /**/ - } - - if (CI_SUCCESS == reVal) - { - /* Ҫ״̬Ľ· */ - deviceSum = ShortFromChar(&dataBuf[ii]);/*Ҫ״̬Ľ·*/ - ii += 2U; - for (jj = 0u; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); - belongCiId = GetRouteBelongCiId(deviceId); - if (belongCiId == localCiId) - { - ii += 2U; - chRouteState = GetRouteState(deviceId); - chRouteStateFlag = GetRouteStateFlag(deviceId); - - if ((ROUTE_STATE_XUANPAI == chRouteState) - || (((ROUTE_STATE_AUTO_UNLOCK == chRouteState) || (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState)) && (ROUTE_STATE_FLAG_YES == chRouteStateFlag)) - || (ROUTE_STATE_LEAD_XUANPAI == chRouteState)) - { - /*ͨ첽ֻн··״̬Ÿڿ״̬ãֹĬϣ첽˳ɹʧܽĬ޸*/ - SetRouteApplySwitchCheckFlag(deviceId, dataBuf[ii++]); - } - else + /*ITEг*/ + if (CI_SUCCESS == reVal) { + cCiRecvAreaIteCutNum = dataBuf[ii]; ii++; - } - - } - else - { - ii += 3U;/*ڱĽ·*/ - } - } - } + if (CI_TO_CI_AREA_SNOW_SUM_MAX >= cCiRecvAreaIteCutNum) + { + ClearCiRecvAreaIteCutInfo(sourceId); /*͸ITEгϢ*/ + for (kk = 0U; kk < cCiRecvAreaIteCutNum; kk++) + { + wAreaId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; - if (CI_SUCCESS == reVal) - { - /*Ҫ״̬ı*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /*Ҫ״̬ı*/ - ii += 2U; - for (jj = 0U; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); - ii += 2U; - - belongCiId = GetOverlapBelongCiId(deviceId); - if (belongCiId == localCiId) - { - cProSwtCheckResultFlag = dataBuf[ii]; - ii++; - cProSwtCheckStartFlag = GetOverlapProSwtCheckStartFlag(deviceId); /*ȡ鿪ʼ־*/ - if (PROSWITCH_CHECK_START_VALID == cProSwtCheckStartFlag) - { - SetOverlapProSwtCheckResultFlag(deviceId, cProSwtCheckResultFlag); + AddCiRecvAreaIteCutInfo(sourceId, localCiId, wAreaId); /*洢DZID*/ + } + } + else + { + reVal = CI_ERROR; + } } else { - /*βУ·־ - Ѿճɹ/ʧܣ־Ϊ0xFFͨ첽ᷢ0xAA/0x55ʱοҪάֱ־Ϊ0xFF*/ + /**/ } - } - else - { - ii++; /*ڱıΣ*/ - } - } - } - else - { - /**/ - } - if (CI_SUCCESS == reVal) - { - /*·/ηյıķϢ*/ - deviceSum = ShortFromChar(&dataBuf[ii]); /**/ - ii += 2U; - for (jj = 0U; jj < deviceSum; jj++) - { - deviceId = ShortFromChar(&dataBuf[ii]); /*ID*/ - ii += 2U; - - cPLockRouteNum = dataBuf[ii]; /*յĽ·*/ - ii++; - - for (kk = 0U; kk < cPLockRouteNum; kk++) - { - szPLockRouteId[kk] = ShortFromChar(&dataBuf[ii]); /*յĽ·ID*/ - ii += 2U; - } - - cPLockOverlapNum = dataBuf[ii]; /*յĽ·*/ - ii++; - - for (kk = 0U; kk < cPLockOverlapNum; kk++) - { - szPLockOverlapId[kk] = ShortFromChar(&dataBuf[ii]); /*յĽ·ID*/ - ii += 2U; - } - - belongCiId = GetSwitchBelongCiId(deviceId); - if (belongCiId == localCiId) - { - for (kk = 0U; kk < cPLockRouteNum; kk++) + /*ȥ*/ + if (CI_SUCCESS == reVal) { - SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, szPLockRouteId[kk], deviceId, SWITCH_LOCK_PROTECT_SET); /*ý·*/ - } - - for (kk = 0U; kk < cPLockOverlapNum; kk++) - { - SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP, szPLockOverlapId[kk], deviceId, SWITCH_LOCK_PROTECT_SET); /*ñη*/ - } - } - else - { - /*ڱ*/ - } - } - } - else - { - /**/ - } - - /*ɢ*/ - if (CI_SUCCESS == reVal) - { - chTiocIndex = GetTiocTransmitIndex((UINT8)sourceId); - g_szTiocCt[chTiocIndex].chEaTrainNum = 0u; - chEaNum = dataBuf[ii]; - ii++; - for (chEaIndex = 0u; chEaIndex < chEaNum; chEaIndex++) - {/* ȡɢгID */ - strEaTmp.wTrainId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - - /* ߼ */ - strEaTmp.strLgcInfo.chObjNum = dataBuf[ii]; - ii++; - for (chLgcIndex = 0u; chLgcIndex < strEaTmp.strLgcInfo.chObjNum; chLgcIndex++) - {/* ߼ID */ - strEaTmp.strLgcInfo.szObjId[chLgcIndex] = ShortFromChar(&dataBuf[ii]); - ii += 2u; - } - - /* ʶ */ - strEaTmp.chBuildedFlag = dataBuf[ii]; - ii++; - - /* ɢг */ - strEaTmp.dwMidLine = LongFromChar(&dataBuf[ii]); - ii += 4u; - - /* */ - strEaTmp.chPaType = dataBuf[ii]; - ii++; - - /* ɢں */ - strEaTmp.dwEaBuildCycNum = LongFromChar(&dataBuf[ii]); - ii += 4u; - - /* ¼ڿķ */ - g_szTiocCt[chTiocIndex].szEaTrainId[g_szTiocCt[chTiocIndex].chEaTrainNum] = strEaTmp.wTrainId; - g_szTiocCt[chTiocIndex].szPaType[g_szTiocCt[chTiocIndex].chEaTrainNum] = strEaTmp.chPaType; - g_szTiocCt[chTiocIndex].dwEaBuildCyc[g_szTiocCt[chTiocIndex].chEaTrainNum++] = strEaTmp.dwEaBuildCycNum; - - strEaTmp.chSrcTiocId = (UINT8)(sourceId & 0x00ffu); - strEaTmp.chDstTiocId = localCiId; - - EaNeighborUpdata(&strEaTmp); - } - - chEaNum = dataBuf[ii]; - ii++; - for (chEaIndex = 0u; chEaIndex < chEaNum; chEaIndex++) - {/* ɢгID */ - strEaTmp.wTrainId = ShortFromChar(&dataBuf[ii]); - ii += 2u; - /* ڿ״̬ */ - strEaTmp.chDstAllowed = dataBuf[ii]; - ii++; - - /* ں */ - dwEaBuildCyc = LongFromChar(&dataBuf[ii]); - ii += 4u; - strEaTmp.chSrcTiocId = localCiId; - strEaTmp.chDstTiocId = (UINT8)(sourceId & 0x00ffu); - - EaSetNeighborAllowFlag(strEaTmp.wTrainId, strEaTmp.chSrcTiocId, strEaTmp.chDstTiocId, strEaTmp.chDstAllowed,dwEaBuildCyc); - } - } - else - { - ; - } - - if (CI_SUCCESS == reVal) - { - /*Ϣ*/ - commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰ*/ - ii += 2u; - - if (commandTotalLen <= RECVCI_CMD_DATA_STRU_SUM_MAX) - { - for (jj = 0u; jj < commandTotalLen; jj++) - { - commandID = ShortFromChar(&dataBuf[ii]); /*ȡ*/ - ii += 2u; - commandParam1 = ShortFromChar(&dataBuf[ii]);/*ȡ1*/ - ii += 2u; - commandParam2 = ShortFromChar(&dataBuf[ii]);/*ȡ2*/ - ii += 2u; - - strTempCiRecvCmd.SourceCiId = (UINT8)sourceId; - strTempCiRecvCmd.TargetCiId = (UINT8)targetId; - strTempCiRecvCmd.CommandID = commandID; - strTempCiRecvCmd.Param1 = commandParam1; - strTempCiRecvCmd.Param2 = commandParam2; - strTempCiRecvCmd.CycleNo = dwCurCycNum; - - cCmdRecvFlag = CheckCiRecvCmdIsRepeat(&strTempCiRecvCmd); - if (CI_SUCCESS == cCmdRecvFlag) - { - RecvCiCmdDataStru[RecvCiCmdDataStruCurSum] = strTempCiRecvCmd; - RecvCiCmdDataStruCurSum++; - } - else - { - /*ظ洢*/ - } - } - } - else - { - /*Խ*/ - reVal = CI_ERROR; - } - - } - - if (CI_SUCCESS == reVal) - { - /*CI̬·Ϣ*/ - commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰ*/ - ii += 2u; - - if (commandTotalLen <= RECVCI_CMD_DATA_STRU_SUM_MAX) - { - for (jj = 0u; jj < commandTotalLen; jj++) - { - strTempCiRecvDrCmd.cSourceCiId = (UINT8)sourceId; - strTempCiRecvDrCmd.cTargetCiId = (UINT8)targetId; - strTempCiRecvDrCmd.cCmdType = dataBuf[ii]; /*̬·*/ - ii++; - - strTempCiRecvDrCmd.cLogSecSeqDir = dataBuf[ii]; /*̬·߼з*/ - ii++; - - strTempCiRecvDrCmd.cLogSecSum = dataBuf[ii]; /*̬·߼*/ - ii++; - - for (kk = 0U; kk < strTempCiRecvDrCmd.cLogSecSum; kk++) - { - strTempCiRecvDrCmd.wLogSecIdBuff[kk] = ShortFromChar(&dataBuf[ii]); /*̬·߼ID*/ + cCiRecvLeavelogNum = ShortFromChar(&dataBuf[ii]); ii += 2U; - } - - strTempCiRecvDrCmd.wTrainId = ShortFromChar(&dataBuf[ii]); /*̬·гID*/ - ii += 2U; - - strTempCiRecvDrCmd.cTrainLocLogSecSum = dataBuf[ii]; /*̬·г߼*/ - ii++; - - for (kk = 0U; kk < strTempCiRecvDrCmd.cTrainLocLogSecSum; kk++) - { - strTempCiRecvDrCmd.wTrainLocLogSecIdBuff[kk] = ShortFromChar(&dataBuf[ii]); /*̬·г߼ID*/ - ii += 2U; - } - - strTempCiRecvDrCmd.cSwitchMoveFlag = dataBuf[ii]; /*ؽ·ɶ־*/ - ii++; - - strTempCiRecvDrCmd.wRelStartSignalId = ShortFromChar(&dataBuf[ii]); /*׸߼ιʼźŻID*/ - ii += 2U; - strTempCiRecvDrCmd.CycleNo = dwCurCycNum; - - cCmdRecvFlag = CheckCiRecvDrCmdIsRepeat(&strTempCiRecvDrCmd); - if (CI_SUCCESS == cCmdRecvFlag) - { - RecvCiDrCmdDataStru[RecvCiDrCmdSum] = strTempCiRecvDrCmd; - RecvCiDrCmdSum++; + if (CI_TO_CI_LEAVE_LOGSEC_ROUTE_NUM >= cCiRecvLeavelogNum) + { + for (kk = 0U; kk < cCiRecvLeavelogNum; kk++) + { + leaveLogSecId = ShortFromChar(&dataBuf[ii]); /*ȥ߼ID*/ + ii += 2U; + leaveCheckFlag = dataBuf[ii++]; + SetRouteLeaveLogSecFlag(leaveLogSecId, leaveCheckFlag); + } + } + else + { + reVal = CI_ERROR; + } } else { - /*ظ洢*/ + /**/ + } + + if (CI_SUCCESS == reVal) + { + /* Ҫ״̬Ľ· */ + deviceSum = ShortFromChar(&dataBuf[ii]);/*Ҫ״̬Ľ·*/ + ii += 2U; + for (jj = 0u; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); + belongCiId = GetRouteBelongCiId(deviceId); + if (belongCiId == localCiId) + { + ii += 2U; + chRouteState = GetRouteState(deviceId); + chRouteStateFlag = GetRouteStateFlag(deviceId); + + if ((ROUTE_STATE_XUANPAI == chRouteState) + || (((ROUTE_STATE_AUTO_UNLOCK == chRouteState) || (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState)) && (ROUTE_STATE_FLAG_YES == chRouteStateFlag)) + || (ROUTE_STATE_LEAD_XUANPAI == chRouteState)) + { + /*ͨ첽ֻн··״̬Ÿڿ״̬ãֹĬϣ첽˳ɹʧܽĬ޸*/ + SetRouteApplySwitchCheckFlag(deviceId, dataBuf[ii++]); + } + else + { + ii++; + } + + } + else + { + ii += 3U;/*ڱĽ·*/ + } + } + } + + if (CI_SUCCESS == reVal) + { + /*Ҫ״̬ı*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /*Ҫ״̬ı*/ + ii += 2U; + for (jj = 0U; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); + ii += 2U; + + belongCiId = GetOverlapBelongCiId(deviceId); + if (belongCiId == localCiId) + { + cProSwtCheckResultFlag = dataBuf[ii]; + ii++; + cProSwtCheckStartFlag = GetOverlapProSwtCheckStartFlag(deviceId); /*ȡ鿪ʼ־*/ + if (PROSWITCH_CHECK_START_VALID == cProSwtCheckStartFlag) + { + SetOverlapProSwtCheckResultFlag(deviceId, cProSwtCheckResultFlag); + } + else + { + /*βУ·־ + Ѿճɹ/ʧܣ־Ϊ0xFFͨ첽ᷢ0xAA/0x55ʱοҪάֱ־Ϊ0xFF*/ + } + } + else + { + ii++; /*ڱıΣ*/ + } + } + } + else + { + /**/ + } + + if (CI_SUCCESS == reVal) + { + /*·/ηյıķϢ*/ + deviceSum = ShortFromChar(&dataBuf[ii]); /**/ + ii += 2U; + for (jj = 0U; jj < deviceSum; jj++) + { + deviceId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + cPLockRouteNum = dataBuf[ii]; /*յĽ·*/ + ii++; + + for (kk = 0U; kk < cPLockRouteNum; kk++) + { + szPLockRouteId[kk] = ShortFromChar(&dataBuf[ii]); /*յĽ·ID*/ + ii += 2U; + } + + cPLockOverlapNum = dataBuf[ii]; /*յĽ·*/ + ii++; + + for (kk = 0U; kk < cPLockOverlapNum; kk++) + { + szPLockOverlapId[kk] = ShortFromChar(&dataBuf[ii]); /*յĽ·ID*/ + ii += 2U; + } + + belongCiId = GetSwitchBelongCiId(deviceId); + if (belongCiId == localCiId) + { + for (kk = 0U; kk < cPLockRouteNum; kk++) + { + SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, szPLockRouteId[kk], deviceId, SWITCH_LOCK_PROTECT_SET); /*ý·*/ + } + + for (kk = 0U; kk < cPLockOverlapNum; kk++) + { + SetSwitchLockStatus(SWITCH_PLOCKTYPE_OVERLAP, szPLockOverlapId[kk], deviceId, SWITCH_LOCK_PROTECT_SET); /*ñη*/ + } + } + else + { + /*ڱ*/ + } + } + } + else + { + /**/ + } + + /*ɢ*/ + if (CI_SUCCESS == reVal) + { + chTiocIndex = GetTiocTransmitIndex(sourceId); + g_szTiocCt[chTiocIndex].chEaTrainNum = 0u; + chEaNum = dataBuf[ii]; + ii++; + for (chEaIndex = 0u; chEaIndex < chEaNum; chEaIndex++) + {/* ȡɢгID */ + strEaTmp.wTrainId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + + /* ߼ */ + strEaTmp.strLgcInfo.chObjNum = dataBuf[ii]; + ii++; + for (chLgcIndex = 0u; chLgcIndex < strEaTmp.strLgcInfo.chObjNum; chLgcIndex++) + {/* ߼ID */ + strEaTmp.strLgcInfo.szObjId[chLgcIndex] = ShortFromChar(&dataBuf[ii]); + ii += 2u; + } + + /* ʶ */ + strEaTmp.chBuildedFlag = dataBuf[ii]; + ii++; + + /* ɢг */ + strEaTmp.dwMidLine = LongFromChar(&dataBuf[ii]); + ii += 4u; + + /* */ + strEaTmp.chPaType = dataBuf[ii]; + ii++; + + /* ɢں */ + strEaTmp.dwEaBuildCycNum = LongFromChar(&dataBuf[ii]); + ii += 4u; + + /* ¼ڿķ */ + g_szTiocCt[chTiocIndex].szEaTrainId[g_szTiocCt[chTiocIndex].chEaTrainNum] = strEaTmp.wTrainId; + g_szTiocCt[chTiocIndex].szPaType[g_szTiocCt[chTiocIndex].chEaTrainNum] = strEaTmp.chPaType; + g_szTiocCt[chTiocIndex].dwEaBuildCyc[g_szTiocCt[chTiocIndex].chEaTrainNum++] = strEaTmp.dwEaBuildCycNum; + + strEaTmp.chSrcTiocId = sourceId; + strEaTmp.chDstTiocId = localCiId; + + EaNeighborUpdata(&strEaTmp); + } + + chEaNum = dataBuf[ii]; + ii++; + for (chEaIndex = 0u; chEaIndex < chEaNum; chEaIndex++) + {/* ɢгID */ + strEaTmp.wTrainId = ShortFromChar(&dataBuf[ii]); + ii += 2u; + /* ڿ״̬ */ + strEaTmp.chDstAllowed = dataBuf[ii]; + ii++; + + /* ں */ + dwEaBuildCyc = LongFromChar(&dataBuf[ii]); + ii += 4u; + strEaTmp.chSrcTiocId = localCiId; + strEaTmp.chDstTiocId = sourceId; + + EaSetNeighborAllowFlag(strEaTmp.wTrainId, strEaTmp.chSrcTiocId, strEaTmp.chDstTiocId, strEaTmp.chDstAllowed,dwEaBuildCyc); + } + } + else + { + ; + } + + if (CI_SUCCESS == reVal) + { + /*Ϣ*/ + commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰ*/ + ii += 2u; + + if (commandTotalLen <= RECVCI_CMD_DATA_STRU_SUM_MAX) + { + for (jj = 0u; jj < commandTotalLen; jj++) + { + commandID = ShortFromChar(&dataBuf[ii]); /*ȡ*/ + ii += 2u; + commandParam1 = ShortFromChar(&dataBuf[ii]);/*ȡ1*/ + ii += 2u; + commandParam2 = ShortFromChar(&dataBuf[ii]);/*ȡ2*/ + ii += 2u; + + strTempCiRecvCmd.SourceCiId =sourceId; + strTempCiRecvCmd.TargetCiId =localCiId; + strTempCiRecvCmd.CommandID = commandID; + strTempCiRecvCmd.Param1 = commandParam1; + strTempCiRecvCmd.Param2 = commandParam2; + strTempCiRecvCmd.CycleNo = dwCurCycNum; + + cCmdRecvFlag = CheckCiRecvCmdIsRepeat(&strTempCiRecvCmd); + if (CI_SUCCESS == cCmdRecvFlag) + { + RecvCiCmdDataStru[RecvCiCmdDataStruCurSum] = strTempCiRecvCmd; + RecvCiCmdDataStruCurSum++; + } + else + { + /*ظ洢*/ + } + } + } + else + { + /*Խ*/ + reVal = CI_ERROR; + } + + } + + if (CI_SUCCESS == reVal) + { + /*CI̬·Ϣ*/ + commandTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡݰ*/ + ii += 2u; + + if (commandTotalLen <= RECVCI_CMD_DATA_STRU_SUM_MAX) + { + for (jj = 0u; jj < commandTotalLen; jj++) + { + strTempCiRecvDrCmd.cSourceCiId = sourceId; + strTempCiRecvDrCmd.cTargetCiId = localCiId; + strTempCiRecvDrCmd.cCmdType = dataBuf[ii]; /*̬·*/ + ii++; + + strTempCiRecvDrCmd.cLogSecSeqDir = dataBuf[ii]; /*̬·߼з*/ + ii++; + + strTempCiRecvDrCmd.cLogSecSum = dataBuf[ii]; /*̬·߼*/ + ii++; + + for (kk = 0U; kk < strTempCiRecvDrCmd.cLogSecSum; kk++) + { + strTempCiRecvDrCmd.wLogSecIdBuff[kk] = ShortFromChar(&dataBuf[ii]); /*̬·߼ID*/ + ii += 2U; + } + + strTempCiRecvDrCmd.wTrainId = ShortFromChar(&dataBuf[ii]); /*̬·гID*/ + ii += 2U; + + strTempCiRecvDrCmd.cTrainLocLogSecSum = dataBuf[ii]; /*̬·г߼*/ + ii++; + + for (kk = 0U; kk < strTempCiRecvDrCmd.cTrainLocLogSecSum; kk++) + { + strTempCiRecvDrCmd.wTrainLocLogSecIdBuff[kk] = ShortFromChar(&dataBuf[ii]); /*̬·г߼ID*/ + ii += 2U; + } + + strTempCiRecvDrCmd.cSwitchMoveFlag = dataBuf[ii]; /*ؽ·ɶ־*/ + ii++; + + strTempCiRecvDrCmd.wRelStartSignalId = ShortFromChar(&dataBuf[ii]); /*׸߼ιʼźŻID*/ + ii += 2U; + strTempCiRecvDrCmd.CycleNo = dwCurCycNum; + + cCmdRecvFlag = CheckCiRecvDrCmdIsRepeat(&strTempCiRecvDrCmd); + if (CI_SUCCESS == cCmdRecvFlag) + { + RecvCiDrCmdDataStru[RecvCiDrCmdSum] = strTempCiRecvDrCmd; + RecvCiDrCmdSum++; + } + else + { + /*ظ洢*/ + } + } + } + else + { + /*Խ*/ + reVal = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == reVal) + { /*CI뱾CIͨ*/ + /*ͨ*/ + ciTransmitRecvDataCycResult = SetCiTransmitRecvDataCycNum(localCiId, Get2oo2SheBeiType(), (UINT8)sourceId, Get2oo2CurCycleNum()); + if (CI_ERROR == ciTransmitRecvDataCycResult) + { + /*ʧ*/ + reVal = CI_ERROR; + } + else + { + /*ݾУ飬Ҫ洢ͨñ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, sourceId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_RCI, sourceId, 0u); + + galHeadSaved = 1; + } } } + else + { + reVal = CI_ERROR; + } } - else + else if (HLHT_HEAD_INIT == headRet) { - /*Խ*/ - reVal = CI_ERROR; - } - } - else - { - /**/ - } + if (dwCurCycNum > 0u)/*жŴ0Ϊ0Ч*/ + { + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RCI, sourceId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, sourceId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_RCI, sourceId, 0U); + + galHeadSaved = 1; + } + else + { + } - if (CI_SUCCESS == reVal) - { /*CI뱾CIͨ*/ - /*ͨ*/ - ciTransmitRecvDataCycResult = SetCiTransmitRecvDataCycNum(localCiId, Get2oo2SheBeiType(), (UINT8)sourceId, Get2oo2CurCycleNum()); - if (CI_ERROR == ciTransmitRecvDataCycResult) - { - /*ʧ*/ reVal = CI_ERROR; } else { - + ;/*ޱ*/ + } + + if (0 == galHeadSaved) + { + /*ͨñͷ*/ + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_RCI, sourceId); + } + else + { + /**/ } } @@ -3226,25 +3237,24 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength) UINT8 PackCiToCiData(UINT8 targetDeviceId) { UINT8 localCi = GetSystemParaLocalCiId(); /*ȡID*/ - UINT16 cmdSum = 0u;/**/ + UINT16 cmdSum = 0u;/**/ UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; UINT8 localCiType = 0u; UINT16 scState; UINT32 curCycleNo = Get2oo2CurCycleNum();/*ȡǰں*/ UINT8 ciFunctionSwitchConfig = 0u; - UINT8 ciToCiDataBuffer[CI_TO_CI_DATA_LEN_MAX] = {0u};/*CICI֡*/ - UINT16 infoSumIndex = 0u; /*Ϣܳαλ*/ + UINT8 ciToCiDataBuffer[CI_TO_CI_DATA_LEN_MAX] = { 0u };/*CICI֡*/ UINT16 infoSum = 0u; /*Ϣܳ*/ - UINT16 ii = 0u; + UINT16 ii = 0u; UINT16 jj = 0u; UINT8 kk = 0U; - UINT16 curIndex = 0u; + UINT16 curIndex = 0u; UINT16 deviceId = 0u; /*豸ID*/ const CiTransmitStruct* pCiTramsStru = GetDstCiTransInfo(targetDeviceId); UINT16 otherCiPhySecIdSum = 0u; UINT16 wOtherCiSwitchIdSum = 0U; - UINT8 chRtn = CI_ERROR; + UINT8 chRtn = CI_ERROR;/*ֵ*/ UINT16 OcDevName = 0U; UINT32 emapCheckVer = 0U; UINT16 wDevType = 0U; @@ -3256,290 +3266,320 @@ UINT8 PackCiToCiData(UINT8 targetDeviceId) UINT16 wProSwSecUseRouteId = 0U;/*·ID*/ UINT8 chPhyUseRouteBelCiId = 0U;/*ý·ID*/ UINT8 chProPhyUseRouteBelCiId = 0U;/*ý·ID*/ - - OcDevName = (CI_SYSTEM_TYPE_CI) * 256U + targetDeviceId; + UINT32 localHlhtId = 0U; + UINT32 dstHlhtId = 0U; + UINT8 chHlhtIdCheck = CI_ERROR; + UINT32 appCycleTime = GetSystemParaAppCycleTime();/*ʱ*/ + OcDevName = (CI_SYSTEM_TYPE_RCI)* 256U + targetDeviceId; emapCheckVer = GetCiTranCiDataCheckVer(localCi, OcDevName); - /*Ӧ֡ʼ*/ - ShortToChar((UINT16)localCi, &ciToCiDataBuffer[ii]); /*CI ID*/ - ii += 2u; - LongToChar(curCycleNo, &ciToCiDataBuffer[ii]); /*鵱ǰں*/ - ii +=4u; - ShortToChar((UINT16)targetDeviceId, &ciToCiDataBuffer[ii]); /*ĿCI ID*/ - ii += 2u; + /*ȡ&ԷͨID*/ + chHlhtIdCheck = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCi, 0U, &localHlhtId); + chHlhtIdCheck &= dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + targetDeviceId, 0U, &dstHlhtId); - ShortToChar((UINT16)CICI_VERSION, &ciToCiDataBuffer[ii]);/*ci-ciӿڰ汾ţÿ޸ĽӿҪ汾*/ - ii+=2u; - - LongToChar(emapCheckVer, &ciToCiDataBuffer[ii]); /*CI-CIУ*/ - ii += 4U; - - /***֡Ϣ***/ - infoSumIndex = ii; - ii += 2u;/*Ϣܳ*/ - - PackCiToCiDataFrameUseCfg(targetDeviceId,&ciToCiDataBuffer[ii],&infoSum); - - ShortToChar(infoSum, &ciToCiDataBuffer[infoSumIndex]);/*ܳ*/ - ii = ii + infoSum; - - /* ڿ֮以ɢ */ - infoSum = PackCiToCiDataFrameEa(targetDeviceId, &ciToCiDataBuffer[ii]); - if (0u == infoSum) - { - ; - } - else + if (CI_SUCCESS == chHlhtIdCheck) { chRtn = CI_SUCCESS; } - ii += infoSum; - - /*DZ*/ - if(NULL != pCiTramsStru ) + if (CI_SUCCESS == chRtn) { - otherCiPhySecIdSum = pCiTramsStru->phySecIdBufSumhOfOtherCi; - wOtherCiSwitchIdSum = pCiTramsStru->wSwitchSumOfOtherCi; - } - else - { - otherCiPhySecIdSum = 0u; - } - for (jj = 0u; jj < otherCiPhySecIdSum; jj++) - { - deviceId = pCiTramsStru->wPhySecIdBufOfOtherCi[jj];/*ȡID*/ - cDevBelongCiId = GetPhySecBelongCiId(deviceId); - - if (targetDeviceId == cDevBelongCiId) - {/*DZ*/ - chPhySecUseState = GetPhySecUseState(deviceId); - wPhySecUseRouteId = GetPhySecUseRouteId(deviceId); - wProSwSecUseRouteId = GetPhySecProtectUseRouteId(deviceId); - chPhyUseRouteBelCiId = GetRouteBelongCiId(wPhySecUseRouteId); - chProPhyUseRouteBelCiId = GetRouteBelongCiId(wProSwSecUseRouteId); - - if (PHYSICAL_SECTION_USING_APPLY == chPhySecUseState) - { - /*·*/ - if ((0U < wPhySecUseRouteId) && (localCi == chPhyUseRouteBelCiId)) - { - /**/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_APPLY, deviceId, wPhySecUseRouteId, cDevBelongCiId); - } - else - { - ; - } - - /*·*/ - if ((0U < wProSwSecUseRouteId) && (localCi == chProPhyUseRouteBelCiId)) - { - /**/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_APPLY, deviceId, wProSwSecUseRouteId, cDevBelongCiId); - } - else - { - ; - } - } - else if (PHYSICAL_SECTION_USING_CANCEL == GetPhySecUseState(deviceId)) - { - /*·ȡ*/ - if ((0U < wPhySecUseRouteId) && (localCi == chPhyUseRouteBelCiId)) - { - /**/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_CANCEL, deviceId, wPhySecUseRouteId, cDevBelongCiId); - } - else - { - ; - } - - /*·*/ - if ((0U < wProSwSecUseRouteId) && (localCi == chProPhyUseRouteBelCiId)) - { - /**/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_CANCEL, deviceId, wProSwSecUseRouteId, cDevBelongCiId); - } - else - { - ; - } - } - else - { - ; /**/ - } - } - else - { - ; /*β*/ - } - - } - - /*/ȡ*/ - for (jj = 0U; jj < wOtherCiSwitchIdSum; jj++) - { - deviceId = pCiTramsStru->szSwitchIdBufOfOtherCi[jj]; - cDevBelongCiId = GetSwitchBelongCiId(deviceId); - if (targetDeviceId == cDevBelongCiId) - { - wUsingBelongOverlapId = GetSwitchBelongOverlapId(deviceId); /*ȡID*/ - cSwitchUsingState = GetSwitchUsingState(deviceId); /*ȡ״̬*/ - if (SWITCH_USING_APPLY == cSwitchUsingState) - { - AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_APPLY, deviceId, wUsingBelongOverlapId, cDevBelongCiId); /**/ - } - else if (SWITCH_USING_CANCEL == cSwitchUsingState) - { - AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_CANCEL, deviceId, wUsingBelongOverlapId, cDevBelongCiId); /*ȡ*/ - } - else - { - /**/ - } - } - else - { - /**/ - } - } - - /*ΪλԳߣݳκԳߵĽӿڷʽ໥Գ豸״̬*/ - ciFunctionSwitchConfig = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE); - if ((SCX_CLD_INTERFACE_COMM == ciFunctionSwitchConfig)||(SCX_CLD_SERIAL_PORT_COMM == ciFunctionSwitchConfig)) - {/*Գ복νӿΪͨŽӿ*/ - localCiType = GetLocalCiType();/*ȡ豸*/ - - if(CI_TYPE_CLD==localCiType) - {/*Ϊ*/ - if(CI_TYPE_SCX==GetCiType(targetDeviceId))/*ĿΪԳ*/ - { - scState = GetCommTrainTestCLDTYSJStatus();/*ȡTYSJ״̬*/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_TRAIN_TEST_ALLOW_STATUS, (UINT16)COMM_TRAIN_TEST_TYSJ_CLD, scState, targetDeviceId);/*Գ߷Գ豸״̬*/ - } - else - { - } - } - - else if (CI_TYPE_SCX==localCiType) - {/*ΪԳ*/ - if (CI_TYPE_CLD==GetCiType(targetDeviceId))/*ĿΪ*/ - { - scState = GetCommTrainTestSCXSQAJStatus();/*ȡԳSQAJ״̬*/ - AddCiSendToCiCmdInfo((UINT8)CI_CMD_TRAIN_TEST_APPLY, (UINT16)COMM_TRAIN_TEST_SQAJ_SCX, (UINT16)(scState*256U+CI_TYPE_SCX), targetDeviceId);/*ηԳ豸״̬*/ - } - else - { - } - } - else - { - /*ʲô*/ - } - } - else - { - } - - if (1u> SendCiCmdDataStruCurSum) - { /**/ - - ShortToChar(cmdSum, &ciToCiDataBuffer[ii]); /*֡*/ + /*ͨͷ*/ + ShortToChar(HLHT_CI_INTER_TYPE, &ciToCiDataBuffer[ii]);/*ӿϢ*/ ii += 2u; - } - else - { - curIndex = ii;/**/ + LongToChar(localHlhtId, &ciToCiDataBuffer[ii]);/*ͷʶϢ*/ + ii += 4u; + LongToChar(dstHlhtId, &ciToCiDataBuffer[ii]);/*շʶϢ*/ + ii += 4u; + LongToChar(emapCheckVer, &ciToCiDataBuffer[ii]);/*ӵͼ汾УϢ*/ + ii += 4u; + LongToChar(curCycleNo, &ciToCiDataBuffer[ii]);/*Ϣк*/ + ii += 4u; + ShortToChar((UINT16)appCycleTime, &ciToCiDataBuffer[ii]);/*豸ͨѶ*/ ii += 2u; - - for (jj = 0u; jj < SendCiCmdDataStruCurSum; jj++) + LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, targetDeviceId), &ciToCiDataBuffer[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ + ii += 4u; + LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, targetDeviceId), &ciToCiDataBuffer[ii]);/*յһϢʱк*/ + ii += 4u; + ciToCiDataBuffer[ii++] = CICI_VERSION;/*HLHT+FAO_CI_VOBCӿЭ汾*/ + + ii += 2u;/*ͨñͷеӦò㱨ܳ*/ + + /***֡Ϣ***/ + ii += 2u;/*ӦϢܳ*/ + + ShortToChar(LOCAL_RCI_INFO_STATE, &ciToCiDataBuffer[ii]);/*ӿϢ*/ + ii += 2U;/*ӿֽ*/ + + ii += 2U;/*Ԥֽ*/ + + PackCiToCiDataFrameUseCfg(targetDeviceId,&ciToCiDataBuffer[ii],&infoSum); + ii = ii + infoSum; + + /* ڿ֮以ɢ */ + infoSum = PackCiToCiDataFrameEa(targetDeviceId, &ciToCiDataBuffer[ii]); + if (0u == infoSum) { - if ((SendCiCmdDataStru[jj].SourceCiId == localCi) && (SendCiCmdDataStru[jj].TargetCiId == targetDeviceId)) - { - ShortToChar(SendCiCmdDataStru[jj].CommandID, &ciToCiDataBuffer[ii]); /**/ - ii += 2u; - ShortToChar(SendCiCmdDataStru[jj].Param1, &ciToCiDataBuffer[ii]); /*1*/ - ii += 2u; - ShortToChar(SendCiCmdDataStru[jj].Param2, &ciToCiDataBuffer[ii]); /*2*/ - ii += 2u; - cmdSum++; - } - else - { - } + ; + } + else + { + chRtn = CI_SUCCESS; + } + ii += infoSum; + + /*DZ*/ + if(NULL != pCiTramsStru ) + { + otherCiPhySecIdSum = pCiTramsStru->phySecIdBufSumhOfOtherCi; + wOtherCiSwitchIdSum = pCiTramsStru->wSwitchSumOfOtherCi; + } + else + { + otherCiPhySecIdSum = 0u; + } + for (jj = 0u; jj < otherCiPhySecIdSum; jj++) + { + deviceId = pCiTramsStru->wPhySecIdBufOfOtherCi[jj];/*ȡID*/ + cDevBelongCiId = GetPhySecBelongCiId(deviceId); + + if (targetDeviceId == cDevBelongCiId) + {/*DZ*/ + chPhySecUseState = GetPhySecUseState(deviceId); + wPhySecUseRouteId = GetPhySecUseRouteId(deviceId); + wProSwSecUseRouteId = GetPhySecProtectUseRouteId(deviceId); + chPhyUseRouteBelCiId = GetRouteBelongCiId(wPhySecUseRouteId); + chProPhyUseRouteBelCiId = GetRouteBelongCiId(wProSwSecUseRouteId); + + if (PHYSICAL_SECTION_USING_APPLY == chPhySecUseState) + { + /*·*/ + if ((0U < wPhySecUseRouteId) && (localCi == chPhyUseRouteBelCiId)) + { + /**/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_APPLY, deviceId, wPhySecUseRouteId, cDevBelongCiId); + } + else + { + ; + } + + /*·*/ + if ((0U < wProSwSecUseRouteId) && (localCi == chProPhyUseRouteBelCiId)) + { + /**/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_APPLY, deviceId, wProSwSecUseRouteId, cDevBelongCiId); + } + else + { + ; + } + } + else if (PHYSICAL_SECTION_USING_CANCEL == GetPhySecUseState(deviceId)) + { + /*·ȡ*/ + if ((0U < wPhySecUseRouteId) && (localCi == chPhyUseRouteBelCiId)) + { + /**/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PHYSEC_USING_CANCEL, deviceId, wPhySecUseRouteId, cDevBelongCiId); + } + else + { + ; + } + + /*·*/ + if ((0U < wProSwSecUseRouteId) && (localCi == chProPhyUseRouteBelCiId)) + { + /**/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_PROSW_SEC_USING_CANCEL, deviceId, wProSwSecUseRouteId, cDevBelongCiId); + } + else + { + ; + } + } + else + { + ; /**/ + } + } + else + { + ; /*β*/ + } + + } + + /*/ȡ*/ + for (jj = 0U; jj < wOtherCiSwitchIdSum; jj++) + { + deviceId = pCiTramsStru->szSwitchIdBufOfOtherCi[jj]; + cDevBelongCiId = GetSwitchBelongCiId(deviceId); + if (targetDeviceId == cDevBelongCiId) + { + wUsingBelongOverlapId = GetSwitchBelongOverlapId(deviceId); /*ȡID*/ + cSwitchUsingState = GetSwitchUsingState(deviceId); /*ȡ״̬*/ + if (SWITCH_USING_APPLY == cSwitchUsingState) + { + AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_APPLY, deviceId, wUsingBelongOverlapId, cDevBelongCiId); /**/ + } + else if (SWITCH_USING_CANCEL == cSwitchUsingState) + { + AddCiSendToCiCmdInfo(CI_CMD_OLP_PROSWT_USE_CANCEL, deviceId, wUsingBelongOverlapId, cDevBelongCiId); /*ȡ*/ + } + else + { + /**/ + } + } + else + { + /**/ + } + } + + /*ΪλԳߣݳκԳߵĽӿڷʽ໥Գ豸״̬*/ + ciFunctionSwitchConfig = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE); + if ((SCX_CLD_INTERFACE_COMM == ciFunctionSwitchConfig)||(SCX_CLD_SERIAL_PORT_COMM == ciFunctionSwitchConfig)) + {/*Գ복νӿΪͨŽӿ*/ + localCiType = GetLocalCiType();/*ȡ豸*/ + + if(CI_TYPE_CLD==localCiType) + {/*Ϊ*/ + if(CI_TYPE_SCX==GetCiType(targetDeviceId))/*ĿΪԳ*/ + { + scState = GetCommTrainTestCLDTYSJStatus();/*ȡTYSJ״̬*/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_TRAIN_TEST_ALLOW_STATUS, (UINT16)COMM_TRAIN_TEST_TYSJ_CLD, scState, targetDeviceId);/*Գ߷Գ豸״̬*/ + } + else + { + } + } + + else if (CI_TYPE_SCX==localCiType) + {/*ΪԳ*/ + if (CI_TYPE_CLD==GetCiType(targetDeviceId))/*ĿΪ*/ + { + scState = GetCommTrainTestSCXSQAJStatus();/*ȡԳSQAJ״̬*/ + AddCiSendToCiCmdInfo((UINT8)CI_CMD_TRAIN_TEST_APPLY, (UINT16)COMM_TRAIN_TEST_SQAJ_SCX, (UINT16)(scState*256U+CI_TYPE_SCX), targetDeviceId);/*ηԳ豸״̬*/ + } + else + { + } + } + else + { + /*ʲô*/ + } + } + else + { + } + + if (1u> SendCiCmdDataStruCurSum) + { /**/ + + ShortToChar(cmdSum, &ciToCiDataBuffer[ii]); /*֡*/ + ii += 2u; + } + else + { + curIndex = ii;/**/ + ii += 2u; + + for (jj = 0u; jj < SendCiCmdDataStruCurSum; jj++) + { + if ((SendCiCmdDataStru[jj].SourceCiId == localCi) && (SendCiCmdDataStru[jj].TargetCiId == targetDeviceId)) + { + ShortToChar(SendCiCmdDataStru[jj].CommandID, &ciToCiDataBuffer[ii]); /**/ + ii += 2u; + ShortToChar(SendCiCmdDataStru[jj].Param1, &ciToCiDataBuffer[ii]); /*1*/ + ii += 2u; + ShortToChar(SendCiCmdDataStru[jj].Param2, &ciToCiDataBuffer[ii]); /*2*/ + ii += 2u; + cmdSum++; + } + else + { + } + } + ShortToChar(cmdSum, &ciToCiDataBuffer[curIndex]); /**/ } - ShortToChar(cmdSum, &ciToCiDataBuffer[curIndex]); /**/ - } - /*䶯̬·*/ - cmdSum = 0U; - if (1u > SendCiDrCmdSum) - { /**/ + /*䶯̬·*/ + cmdSum = 0U; + if (1u > SendCiDrCmdSum) + { /**/ - ShortToChar(cmdSum, &ciToCiDataBuffer[ii]); /**/ - ii += 2u; - } - else - { - curIndex = ii;/**/ - ii += 2u; - - for (jj = 0u; jj < SendCiDrCmdSum; jj++) + ShortToChar(cmdSum, &ciToCiDataBuffer[ii]); /**/ + ii += 2u; + } + else { - if ((SendCiDrCmdDataStru[jj].cSourceCiId == localCi) && (SendCiDrCmdDataStru[jj].cTargetCiId == targetDeviceId)) + curIndex = ii;/**/ + ii += 2u; + + for (jj = 0u; jj < SendCiDrCmdSum; jj++) { - ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cCmdType; /*鶯̬·*/ - ii += 1u; - - ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cLogSecSeqDir; /*߼з*/ - ii += 1u; - - ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cLogSecSum; /*߼*/ - ii += 1u; - - for (kk = 0U; kk < SendCiDrCmdDataStru[jj].cLogSecSum; kk++) + if ((SendCiDrCmdDataStru[jj].cSourceCiId == localCi) && (SendCiDrCmdDataStru[jj].cTargetCiId == targetDeviceId)) { - ShortToChar(SendCiDrCmdDataStru[jj].wLogSecIdBuff[kk], &ciToCiDataBuffer[ii]); /*߼ID*/ + ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cCmdType; /*鶯̬·*/ + ii += 1u; + + ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cLogSecSeqDir; /*߼з*/ + ii += 1u; + + ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cLogSecSum; /*߼*/ + ii += 1u; + + for (kk = 0U; kk < SendCiDrCmdDataStru[jj].cLogSecSum; kk++) + { + ShortToChar(SendCiDrCmdDataStru[jj].wLogSecIdBuff[kk], &ciToCiDataBuffer[ii]); /*߼ID*/ + ii += 2u; + } + + ShortToChar(SendCiDrCmdDataStru[jj].wTrainId, &ciToCiDataBuffer[ii]); /*гID*/ ii += 2u; + + ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cTrainLocLogSecSum; /*г߼*/ + ii += 1u; + + for (kk = 0U; kk < SendCiDrCmdDataStru[jj].cTrainLocLogSecSum; kk++) + { + ShortToChar(SendCiDrCmdDataStru[jj].wTrainLocLogSecIdBuff[kk], &ciToCiDataBuffer[ii]); /*г߼ID*/ + ii += 2u; + } + + ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cSwitchMoveFlag; /*ؽ·ɶ־*/ + ii += 1u; + + ShortToChar(SendCiDrCmdDataStru[jj].wRelStartSignalId, &ciToCiDataBuffer[ii]); /*׸߼ιʼźŻID*/ + ii += 2u; + + cmdSum++; } - - ShortToChar(SendCiDrCmdDataStru[jj].wTrainId, &ciToCiDataBuffer[ii]); /*гID*/ - ii += 2u; - - ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cTrainLocLogSecSum; /*г߼*/ - ii += 1u; - - for (kk = 0U; kk < SendCiDrCmdDataStru[jj].cTrainLocLogSecSum; kk++) + else { - ShortToChar(SendCiDrCmdDataStru[jj].wTrainLocLogSecIdBuff[kk], &ciToCiDataBuffer[ii]); /*г߼ID*/ - ii += 2u; } - - ciToCiDataBuffer[ii] = SendCiDrCmdDataStru[jj].cSwitchMoveFlag; /*ؽ·ɶ־*/ - ii += 1u; - - ShortToChar(SendCiDrCmdDataStru[jj].wRelStartSignalId, &ciToCiDataBuffer[ii]); /*׸߼ιʼźŻID*/ - ii += 2u; - - cmdSum++; - } - else - { } + ShortToChar(cmdSum, &ciToCiDataBuffer[curIndex]); /*鶯̬·*/ } - ShortToChar(cmdSum, &ciToCiDataBuffer[curIndex]); /*鶯̬·*/ - } - /*Ԥ40ֽ*/ - ii += 40u; + /*Ԥ40ֽ*/ + ii += 40u; + /*ͨñͷӦò㱨ܳ*/ + ciToCiDataBuffer[29U] = (UINT8)((UINT8)((ii - 31U) >> 8u) & 0xffu); + ciToCiDataBuffer[30U] = (UINT8)((ii - 31U) & 0xffu); + + /*Ӧòݵıij */ + ciToCiDataBuffer[31U] = (UINT8)(((ii - 33U) >> 8u) & 0xffu); + ciToCiDataBuffer[32U] = (UINT8)((ii - 33U) & 0xffu); - /*CIݺͷ͸RCѩ*/ - ClearPackCICmdData(targetDeviceId); - ClearPackCiDrCmdData(targetDeviceId); + /*CIݺͷ͸RCѩ*/ + ClearPackCICmdData(targetDeviceId); + ClearPackCiDrCmdData(targetDeviceId); + } if (CI_SUCCESS == chRtn) { @@ -3783,7 +3823,6 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt UINT8 routeBelongCi = 0u; UINT8 belongCiId = 0u; UINT8 startLockFlag = 0u; - UINT16 secPLockBelongRouteId = 0u; UINT16 logSectionSum = 0u; UINT16* logIdBuf = NULL; UINT16 logLockBelongRouteId = 0u; @@ -3835,6 +3874,9 @@ 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г*/ localCi = GetSystemParaLocalCiId(); startLockFlag = GetStartLockFlag(); @@ -3971,6 +4013,7 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt dataFrame[ii++] = GetLogSecProResUseState(deviceId); /*߼αԴ״̬*/ dataFrame[ii++] = GetLogSecAblUseFlag(deviceId); /*߼ABLӽԴñ־*/ dataFrame[ii++] = GetLogSecXiansuSpeed(deviceId); /*߼ʱȡֵ*/ + dataFrame[ii++] = GetLogSecEmergXianSu(deviceId); /*߼νʱ*/ chLogicTrainSum = GetLogSecTrainInfoSum(deviceId); dataFrame[ii++] = chLogicTrainSum; @@ -4020,7 +4063,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 +4072,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 +4095,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 @@ -4129,6 +4179,8 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt /*·Զ־*/ dataFrame[ii++] = GetRouteAutoTriggerFlag(deviceId); + /*·ұ־*/ + dataFrame[ii++] = GetRouteCouplinkFlag(deviceId); deviceSum++; @@ -4236,13 +4288,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 +4687,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 +4701,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;/*ȥαλ*/ @@ -5075,9 +5149,11 @@ 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; + srcCiName = (CI_SYSTEM_TYPE_RCI) * 256U + systemId; + localCiName = (CI_SYSTEM_TYPE_RCI) * 256U + localCiId; /*ͨϢͷ*/ hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); @@ -5103,13 +5179,15 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI curntCycleNo = Get2oo2CurCycleNum(); /*ͨñͷ*/ - headRet = HLHTCiCommonPacketHeadCheck(srcCiName, localCiName, HLHT_CI_INTER_TYPE, HLHT_CI_INTER_VER, &hlhtGalHead, &errCode, 0, CI_SYSTEM_TYPE_CI); + headRet = HLHTCiCommonPacketHeadCheck(srcCiName, localCiName, HLHT_CI_INTER_TYPE, HLHT_CI_INTER_VER, &hlhtGalHead, &errCode, 0, CI_SYSTEM_TYPE_RCI); debug_infor_printf((const)"\nCI %d GAL Check Result:%d errCode:%d", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ 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) { @@ -5127,11 +5205,11 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI if (CI_SUCCESS == retVal) { - SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.comPeriod); - SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.crntOwnMsgSN); - SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.recvOppMsgSN); - SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.preOwnMsgSN); - SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, systemId, curntCycleNo); + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, systemId, curntCycleNo); if (CI_SUCCESS == retVal) { /*CI뱾CIͨ*/ @@ -5155,6 +5233,7 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI } else { + debug_infor_printf((const)"\nParseCiToCiDataFrameHLHT: Msg Validity Error"); retVal = CI_ERROR; } } @@ -5162,11 +5241,11 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI { if (curntCycleNo > 0u)/*жŴ0Ϊ0Ч*/ { - SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.comPeriod); - SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.crntOwnMsgSN); - SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.recvOppMsgSN); - SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_CI, systemId, hlhtGalHead.preOwnMsgSN); - SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, systemId, curntCycleNo); + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RCI, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, systemId, curntCycleNo); } retVal = CI_ERROR; @@ -5176,51 +5255,51 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI /*ATSֵطCI-CIݽӿϢʹ*/ if (GAL_COMPARE_INFO_TYPE_ERR == (errCode & GAL_COMPARE_INFO_TYPE_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_INFO_TYPE_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_INFO_TYPE_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIݷͷʶϢ*/ else if (GAL_COMPARE_SEND_FLAG_ERR == (errCode & GAL_COMPARE_SEND_FLAG_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_SEND_FLAG_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_SEND_FLAG_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIݽշ־Ϣ*/ else if (GAL_COMPARE_RECV_FLAG_ERR == (errCode & GAL_COMPARE_RECV_FLAG_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_RECV_FLAG_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_RECV_FLAG_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIݰ汾УʧϢ*/ else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (errCode & GAL_COMPARE_EMAP_VER_COMP_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_VER_CHECK_FAIL,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_VER_CHECK_FAIL,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIݱԷյһϢʱкŴ*/ else if (GAL_COMPARE_MSG_BDS_SN_ERR == (errCode & GAL_COMPARE_MSG_BDS_SN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_MSG_BDS_SN_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_MSG_BDS_SN_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIݶԷϢкżյһϢʱкŴ*/ else if (GAL_COMPARE_MSG_SN_ERR == (errCode & GAL_COMPARE_MSG_SN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_MSG_SN_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_MSG_SN_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIЭ汾Ŵ*/ else if (GAL_COMPARE_PROTOCOL_VER_ERR == (errCode & GAL_COMPARE_PROTOCOL_VER_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_PROTOCOL_VER_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_PROTOCOL_VER_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIӦòݳЧ*/ else if (GAL_COMPARE_APP_LEN_ERR == (errCode & GAL_COMPARE_APP_LEN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_APP_LEN_ERR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_APP_LEN_ERR,ESEND_LEVEL_ATS); } /*ATSֵطCI-CIͨڴ */ else if (GAL_COMPARE_COM_PERIOD == (errCode & GAL_COMPARE_COM_PERIOD)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_COM_PERIOD,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_BACK_DATA_COM_PERIOD,ESEND_LEVEL_ATS); } else {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_CI,systemId,ETYPE_COMM_WITH_CI,CI_ERROR,ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_CI2CI_DATA,CI_SYSTEM_TYPE_RCI,systemId,ETYPE_COMM_WITH_CI,CI_ERROR,ESEND_LEVEL_ATS); } retVal = CI_ERROR; } @@ -8190,36 +8269,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 +8299,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 +8417,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 +8481,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 +8610,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: @@ -8648,7 +8698,7 @@ UINT8 PackHlhtPacketHeadPha1(UINT8 dstCiId, UINT8 * pInputData, UINT16 * pHeadDa UINT8 protocolVersion = HLHT_CI_INTER_VER; /*Э汾*/ UINT8 locCiId = 0u; UINT16 ii = 0u; /*α*/ - UINT8 headSaved = GetHLHTHeadCtxExistance(CI_SYSTEM_TYPE_CI, dstCiId); + UINT8 headSaved = GetHLHTHeadCtxExistance(CI_SYSTEM_TYPE_RCI, dstCiId); UINT16 wCiDevName = 0U; UINT8 cRetVal = CI_ERROR; @@ -8659,15 +8709,15 @@ UINT8 PackHlhtPacketHeadPha1(UINT8 dstCiId, UINT8 * pInputData, UINT16 * pHeadDa ShortToChar(interfaceInfoType, &pInputData[ii]); /*дӿϢ*/ ii += INTERFACE_INFO_TYPE_LEN; - (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_CI << 8u) + locCiId, 0u, &srcCiEtcsId); + (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_RCI << 8u) + locCiId, 0u, &srcCiEtcsId); LongToChar(srcCiEtcsId, &pInputData[ii]); /*д뷢ͷETCS ID*/ ii += SOURCE_ID_LEN; - (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_CI << 8u) + dstCiId, 0u, &dstCiEtcsId); + (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_RCI << 8u) + dstCiId, 0u, &dstCiEtcsId); LongToChar(dstCiEtcsId, &pInputData[ii]); /*дշETCS ID*/ ii += DESTIN_ID_LEN; - wCiDevName = (CI_SYSTEM_TYPE_CI) * 256U + dstCiId; + wCiDevName = (CI_SYSTEM_TYPE_RCI) * 256U + dstCiId; emapVerChkSum = GetCiTranCiDataCheckVer(locCiId, wCiDevName); LongToChar(emapVerChkSum, &pInputData[ii]); /*дӵͼУϢ*/ @@ -8683,8 +8733,8 @@ UINT8 PackHlhtPacketHeadPha1(UINT8 dstCiId, UINT8 * pInputData, UINT16 * pHeadDa if (CI_SUCCESS == headSaved) { - destinMessageSn = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, dstCiId); - prevSourceMessageSn = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, dstCiId); + destinMessageSn = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, dstCiId); + prevSourceMessageSn = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RCI, dstCiId); } else { @@ -8785,9 +8835,9 @@ UINT8 PackHLHTCiToCiData(UINT8 targetDeviceId) UINT16 wDevType = 0u; localCiId = GetSystemParaLocalCiId(); /*ID*/ - locCiEtcsIdChkRetVal = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_CI << 8u) + localCiId,0u,&etcsId); - tarCiEtcsIdChkRetVal = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_CI << 8u) + targetDeviceId,0u,&etcsId); - locCiEmapChkRetVal = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_CI); + locCiEtcsIdChkRetVal = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_RCI << 8u) + localCiId,0u,&etcsId); + tarCiEtcsIdChkRetVal = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_RCI << 8u) + targetDeviceId,0u,&etcsId); + locCiEmapChkRetVal = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_RCI); /*ȻȡʱϢȡɹбҪ*/ if( (CI_SUCCESS == locCiEtcsIdChkRetVal) && @@ -8847,8 +8897,8 @@ void TiocTransCtInit(void) UINT8 chTiocNum = 0u; UINT8 chIndex = 0u; - chTiocNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); - pTiocIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + chTiocNum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); + pTiocIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); if ((TRANSMIT_OBJECT_DEVICE_SUM_MAX > chTiocNum) && (NULL != pTiocIdBuf)) { @@ -9011,14 +9061,6 @@ static UINT16 PackCiToCiDataFrameEa(UINT8 dstCiId, UINT8* dataFrame) /* ɢг */ dwMidLine = EaGetMidLine(chEaIndex); - if (UINT32_MAX == dwMidLine) - { - chPackFlag = CI_ERROR; - } - else - { - ; - } /* ־ */ chEaBuidFlag = GetEaBuildedFlag(chEaIndex); @@ -9516,7 +9558,6 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) { UINT8 reVal = CI_ERROR; UINT8 errorNo_length = 0U; - UINT8 errorNO_Type = 0U; UINT16 ii = 0U; /**/ /*η*/ @@ -9528,8 +9569,7 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) { reVal = CI_ERROR; } - - /*汾ţIDУ*/ + /*汾У ֹӿڰ汾һУʱԽ*/ if (CI_SUCCESS == reVal) { reVal = CheckCiIDAndVer(dataBuf, &ii); @@ -9538,7 +9578,6 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) *errNo = 1U; } } - /*У*/ if (CI_SUCCESS == reVal) { @@ -9710,6 +9749,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) { @@ -9800,7 +9849,7 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) /* -* УCI汾ϢID +* УCI汾Ϣ * ˵ const UINT8* dataBuf Ϣ * UINT8* Index (Σ) * ֵ CI_ERROR:Уʧ @@ -9809,112 +9858,22 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo) UINT8 CheckCiIDAndVer(const UINT8* dataBuf, UINT8* Index) { UINT8 reVal = CI_ERROR; - UINT8 ii = 0u; - UINT16 sourceId = 0u; /*ԴID*/ - UINT16 targetId = 0u; /*ĿID*/ - UINT32 sourceCurCycleNo = 0u;/*ǰϢԴں*/ - UINT16 ciciVer = 0u;/*ci-ciӿڰ汾*/ - UINT32 dwDataVerFromOtherCi = 0U; - UINT16 wCiDevName = 0U;/*ڽܴ豸͵ID*/ - UINT32 dwDataVerFromEmap = 0U; - UINT8 localCiId = 0u; /*ID*/ - UINT16 MaskTotalLen = 0u; /*λܳ*/ - UINT8 devSum = 0u; /*豸*/ - UINT8* deviceIdBuf = NULL; /*豸ID*/ - UINT8 deviceFlag = 0u; - UINT8 yy = 0u; - localCiId = GetSystemParaLocalCiId(); - + UINT8 chSendCitoCiVer = 0U; if ((dataBuf != NULL) && (Index != NULL)) { - ii = *Index; - - sourceId = ShortFromChar(&dataBuf[ii]); /*ȡݰԴ豸ID*/ - ii += 2u; - sourceCurCycleNo = LongFromChar(&dataBuf[ii]); /*ȡݰԴں*/ - ii += 4u; - targetId = ShortFromChar(&dataBuf[ii]); /*ȡݰĿ豸ID*/ - ii += 2u; - - ciciVer = ShortFromChar(&dataBuf[ii]);/*汾ţ2ֽ*/ - ii += 2u; - - if ((UINT16)CICI_VERSION == ciciVer) + /*˴УӿЭ汾*/ + /*ͷշIDͨУϢParseCiToCiDataFrame*/ + chSendCitoCiVer = dataBuf[CICI_CICIVERINDEX]; + if (CICI_VERSION == chSendCitoCiVer) { reVal = CI_SUCCESS; + *Index = CICI_BEGIN_TO_STATION_LEN; /*ͨ ضӦ*/ } else { - debug_infor_printf((const)"CICI_VERSION ERROR,local:%d other:%d\n", CICI_VERSION, ciciVer); reVal = CI_ERROR; + debug_infor_printf((const)"CheckCiVer error, RecvVer:%d , LocalVer%d .\n", chSendCitoCiVer, CICI_VERSION); } - - if (CI_SUCCESS == reVal) - { - dwDataVerFromOtherCi = LongFromChar(&dataBuf[ii]); /*УϢ*/ - ii += 4U; - wCiDevName = (CI_SYSTEM_TYPE_CI) * 256U + sourceId; - dwDataVerFromEmap = GetCiTranCiDataCheckVer(localCiId, wCiDevName); /*ȡϵͳݰ汾*/ - if (dwDataVerFromOtherCi != dwDataVerFromEmap) - { - reVal = CI_ERROR; - SetCiSendCmdBackInfoData(CI_BACK_DATA_VER_CHECK_FAIL, CI_SYSTEM_TYPE_CI, sourceId, 0U, 0U); - } - } - - if (CI_SUCCESS == reVal) - { - MaskTotalLen = ShortFromChar(&dataBuf[ii]); /*ȡվϢܳ*/ - ii += 2u; - - if (localCiId != targetId) - { - /*ĿDZ*/ - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - } - - if (CI_SUCCESS == reVal) - { - /*жԴ豸ǷָCI*/ - devSum = GetCiTransmitSpecifySysDevSum(Get2oo2SheBeiType()); /*ȡͨ豸*/ - deviceIdBuf = GetCiTransmitSpecifySysDevBuf(Get2oo2SheBeiType()); /*ȡͨ豸ID*/ - - if ((0u < devSum) && (NULL != deviceIdBuf)) - { - for (yy = 0u; yy < devSum; yy++) - { - if (deviceIdBuf[yy] == sourceId) - { - deviceFlag = 1u; - break; - } - } - reVal = CI_SUCCESS; - } - else - { - reVal = CI_ERROR; - } - - if (CI_SUCCESS == reVal) - { - if (0u == deviceFlag) - { - reVal = CI_ERROR; - } - else - { - reVal = CI_SUCCESS; - } - } - } - - *Index = ii; /*ضӦ*/ } else { @@ -9924,6 +9883,7 @@ UINT8 CheckCiIDAndVer(const UINT8* dataBuf, UINT8* Index) return reVal; } + /* * УCI͵Ĵĵ * ˵const UINT8* dataBuf @@ -10607,7 +10567,7 @@ UINT8 CheckCiToCiLogSecData(const UINT8* dataBuf, UINT16* index) UINT8 chLogSecProResUseState = 0U;/*߼αԴ״̬*/ UINT8 chLogSecAblUseFlag = 0U; UINT8 chLogSecXinsuSpeed = 0U; - + UINT8 chLogSecExiansuState = 0U; chLocalCiId = GetSystemParaLocalCiId(); if ((NULL != dataBuf) && (NULL != index)) @@ -10746,6 +10706,20 @@ UINT8 CheckCiToCiLogSecData(const UINT8* dataBuf, UINT16* index) debug_infor_printf((const)"CheckCiToCiLogSecData wLogSecId %d Is Error: chLogSecXinsuSpeed Is %d\n", wLogSecId, chLogSecXinsuSpeed); } } + if (CI_SUCCESS == retVal) + { + /* ߼νʱ*/ + chLogSecExiansuState = dataBuf[ii++]; + if ((LOGSEC_EMERG_XS_SET_NO == chLogSecExiansuState) || (LOGSEC_EMERG_XS_SET_YES == chLogSecExiansuState)) + { + retVal = CI_SUCCESS; /**/ + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"CheckCiToCiLogSecData wLogSecId %d Is Error: chLogSecExiansuState Is %d\n", wLogSecId, chLogSecXinsuSpeed); + } + } if (CI_SUCCESS == retVal) { @@ -10760,8 +10734,8 @@ UINT8 CheckCiToCiLogSecData(const UINT8* dataBuf, UINT16* index) /*߼ԴгID*/ wLogSecResTrainId = ShortFromChar(&dataBuf[ii]);/*߼ԴгID*/ ii += 2U; - if (((0U < wLogSecResTrainId) && (254U >= wLogSecResTrainId)) - || ((0X1401U <= wLogSecResTrainId) && (0X14FEU >= wLogSecResTrainId))) + if (((0U < wLogSecResTrainId) && (TRAIN_SUM_MAX > wLogSecResTrainId)) + || ((TRAIN_ID_MIN_IVOC < wLogSecResTrainId) && (TRAIN_ID_MAX_IVOC > wLogSecResTrainId))) { retVal = CI_SUCCESS; /**/ } @@ -10847,8 +10821,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 +10950,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 @@ -11588,8 +11619,8 @@ UINT8 CheckCiToCiCommandData(const UINT8* dataBuf, UINT16* index) } if (CI_SUCCESS == retVal) { - if (((0U < wCommandParam2) && (255U > wCommandParam2)) - || ((0X1400U < wCommandParam2) && (0X14FFU > wCommandParam2))) + if (((0U < wCommandParam2) && (TRAIN_SUM_MAX > wCommandParam2)) + || ((TRAIN_ID_MIN_IVOC < wCommandParam2) && (TRAIN_ID_MAX_IVOC > wCommandParam2))) { retVal = CI_SUCCESS; /**/ } @@ -11614,7 +11645,7 @@ UINT8 CheckCiToCiCommandData(const UINT8* dataBuf, UINT16* index) } if (CI_SUCCESS == retVal) { - if ((0X1400U < wCommandParam2) && (0X14FFU > wCommandParam2)) + if ((TRAIN_ID_MIN_IVOC < wCommandParam2) && (TRAIN_ID_MAX_IVOC > wCommandParam2)) { retVal = CI_SUCCESS; /**/ } @@ -11639,7 +11670,7 @@ UINT8 CheckCiToCiCommandData(const UINT8* dataBuf, UINT16* index) } if (CI_SUCCESS == retVal) { - if ((0X1400U < wCommandParam2) && (0X14FFU > wCommandParam2)) + if ((TRAIN_ID_MIN_IVOC < wCommandParam2) && (TRAIN_ID_MAX_IVOC > wCommandParam2)) { retVal = CI_SUCCESS; /**/ } @@ -12527,9 +12558,9 @@ UINT8 CheckCiToCiLogicLockData(const UINT8* dataBuf, UINT16* index) { /*0255 Уͨ*/ } - else if ((TRAIN_ID_MIN < szLgcSecTrainId) && (TRAIN_ID_MAX >= szLgcSecTrainId)) + else if ((TRAIN_ID_MIN_IVOC < szLgcSecTrainId) && (TRAIN_ID_MAX_IVOC >= szLgcSecTrainId)) { - /*0x14010x14ffУͨ*/ + /*0x10010x10ffУͨ*/ } else { @@ -13278,15 +13309,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 +13833,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 +13890,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 @@ -14031,7 +14069,7 @@ UINT8 CheckCiToCiRouteData(const UINT8* dataBuf, UINT16* index) UINT8 overLapflag = 0u; /*ñҪձ־*/ UINT8 routeStateFlag = 0U; /*·׷ٰ־*/ UINT8 routeZDCFFlag = 0U; /*·Զ־*/ - + UINT8 chCouplinkFlag = 0U; localCiId = GetSystemParaLocalCiId(); if ((NULL != dataBuf) && (NULL != index)) @@ -14157,6 +14195,21 @@ UINT8 CheckCiToCiRouteData(const UINT8* dataBuf, UINT16* index) retVal = CI_ERROR; } } + /*·ұ־*/ + if (CI_SUCCESS == retVal) + { + chCouplinkFlag = dataBuf[ii]; + ii++; + if ((ROUTE_COUPLINK_FLAG_YES == chCouplinkFlag) || (ROUTE_COUPLINK_FLAG_NO == chCouplinkFlag)) + { + ; /*Уͨ*/ + } + else + { + debug_infor_printf((const)"CheckCiToCiRouteData routeId %d Is Error: chRoutCouplinkFlag Is %d\n", routeId, chCouplinkFlag); + retVal = CI_ERROR; + } + } } } @@ -14382,7 +14435,7 @@ UINT8 CiToCiEnvelopeCheck(const UINT8* dataBuf, UINT16* index) /*гID*/ wTrainId = ShortFromChar(&dataBuf[ii]); ii += 2u; - if ((TRAIN_ID_MIN <= wTrainId) && (TRAIN_ID_MAX >= wTrainId)) + if ((TRAIN_ID_MIN_IVOC <= wTrainId) && (TRAIN_ID_MAX_IVOC >= wTrainId)) { retVal = CI_SUCCESS; } @@ -14627,16 +14680,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 +14727,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 +14751,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 +14799,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 +14814,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 +14939,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 +14956,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 +14977,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; @@ -16081,4 +16162,3813 @@ 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_RCI); /*ȡͨCI豸*/ + pCommCiId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); /*ȡͨ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*/ + UINT8 chExiansuState = 0U; + 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; + chExiansuState = GetLogSecEmergXianSu(pTmpCiTransInfo->logicSecIdBuf[ii]); + if (LOGSEC_EMERG_XS_SET_NO == chExiansuState) + { + *(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->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) + { + /*δýʱ*/ + SetLogEmergXianSuOtherCi(wDevId, LOGSEC_EMERG_XS_SET_NO); + } + else if (BIT_VAL_00000001B == cDevState) + { + /*ýʱ*/ + SetLogEmergXianSuOtherCi(wDevId, LOGSEC_EMERG_XS_SET_YES); + } + 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; +} + +/* +* CIRC֡ +* ˵const UINT8 cRcId ĿRC ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.04 +*/ +UINT8 PackCiToLocalRcDataFrame(const UINT8 cRcId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cFuncRet = CI_ERROR; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT16 wCiDevName = 0U; /*豸͵CI ID*/ + UINT16 wRcDevName = 0U; /*豸͵RC ID*/ + UINT32 dwCiEtcsId = 0U; /*CIͨID*/ + UINT32 dwRcEtcsId = 0U; /*RCͨID*/ + UINT32 dwEmapCheckVer = 0U; /*ӵͼУ汾*/ + UINT32 dwHlhtHSrcSN = 0U; + UINT32 dwHlhtHRcvSN = 0U; + UINT16 ii = 0U; + UINT8 szCiToRcDataBuf[CI_TO_CI_DATA_LEN_MAX] = { 0U }; /*CIRC*/ + UINT32 dwCurCycNum = 0U; + UINT32 dwAppCycTime = 0U; /*Ӧ*/ + UINT16 wGalLenIndex = 0U; + UINT16 wAppLenIndex = 0U; + UINT16 wGalLen = 0U; /*ͨñͷеӦò㱨ij*/ + UINT16 wAppLen = 0U; /*Ӧò㱨ij*/ + UINT8 cOutnetSafeSendRtn = 0U; /*ͽ*/ + + if ((0U < cRcId) && (CI_SUM_MAX > cRcId)) + { + /*ȻȡʱϢȡɹż*/ + cLocalCiId = GetSystemParaLocalCiId(); + wCiDevName = (UINT16)CI_SYSTEM_TYPE_CI * 256U + cLocalCiId; + wRcDevName = (UINT16)CI_SYSTEM_TYPE_RC * 256U + cRcId; + + cFuncRet = dquDevName2HlhtId(wCiDevName, 0U, &dwCiEtcsId); /*ȡCIͨ*/ + cFuncRet &= dquDevName2HlhtId(wRcDevName, 0U, &dwRcEtcsId); /*ȡRCͨ*/ + + dwEmapCheckVer = GetCiTranCiDataCheckVer(cLocalCiId, wRcDevName); /*ȡCIRCĵӵͼ汾УϢ*/ + + dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RC, cRcId); /*ȡк*/ + dwHlhtHRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RC, cRcId); + + if (CI_SUCCESS == cFuncRet) + { + cRetVal = CI_SUCCESS; + + /*ʼ*/ + ShortToChar(LOCAL_CI_RC_INTER_TYPE, &szCiToRcDataBuf[ii]); /*ӿϢ*/ + ii += 2U; + + LongToChar(dwCiEtcsId, &szCiToRcDataBuf[ii]); /*ͷʶϢ*/ + ii += 4U; + + LongToChar(dwRcEtcsId, &szCiToRcDataBuf[ii]); /*շʶϢ*/ + ii += 4U; + + LongToChar(dwEmapCheckVer, &szCiToRcDataBuf[ii]); /*ӵͼ汾УϢ*/ + ii += 4U; + + dwCurCycNum = Get2oo2CurCycleNum(); + LongToChar(dwCurCycNum, &szCiToRcDataBuf[ii]); /*Ϣк*/ + ii += 4U; + + dwAppCycTime = GetSystemParaAppCycleTime(); + ShortToChar((UINT16)dwAppCycTime, &szCiToRcDataBuf[ii]); /*豸ͨѶ*/ + ii += 2U; + + LongToChar(dwHlhtHSrcSN, &szCiToRcDataBuf[ii]); /*ԷϢкţյԷһϢеĶԷϢк*/ + ii += 4U; + + LongToChar(dwHlhtHRcvSN, &szCiToRcDataBuf[ii]); /*յһϢʱк*/ + ii += 4U; + + szCiToRcDataBuf[ii] = LOCAL_CI_RC_PRTCL_VER; /*CI_RCӿЭ汾*/ + ii++; + + wGalLenIndex = ii; /*ͨñͷеӦò㱨ܳ*/ + ii += 2U; + + /*ΪӦò*/ + wAppLenIndex = ii; /*Ӧò㱨ij*/ + ii += 2U; + + ShortToChar(LOCAL_CI_TO_RC_INFO_HEART, &szCiToRcDataBuf[ii]); /*ֽͣ*/ + ii += 2U; + + ii += 2U; /*Ԥֽ*/ + + /*ͨñͷӦò㱨ܳ*/ + wGalLen = ii - (wGalLenIndex + 2U); + ShortToChar(wGalLen, &szCiToRcDataBuf[wGalLenIndex]); + + /*Ӧòݵıij */ + wAppLen = ii - (wAppLenIndex + 2U); + ShortToChar(wAppLen, &szCiToRcDataBuf[wAppLenIndex]); + + cOutnetSafeSendRtn = OutnetSafeSend(wRcDevName, 0U, &szCiToRcDataBuf[0U], ii); + if (1U == cOutnetSafeSendRtn) + { + /*дгɹ*/ +#ifdef LOGPRINT/*־ӡ*/ +#ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ + debug_infor_printf((const)"\nLOCAL_CI2RC_SEND:%d", ii); + debug_out_array(0xAAU, szCiToRcDataBuf, ii); +#endif/*ƽ̨ӡ*/ +#endif + cRetVal = CI_SUCCESS; + } + else + { + debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error: OutnetSafeSend Fail\n"); + cRetVal = CI_ERROR; /*дʧ*/ + } + } + else + { + debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error: Get Hlht Id Fail\n"); + cRetVal = CI_ERROR; /*ȡʧܣ0ʧ*/ + } + } + else + { + debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error: InputPara Is Invalid\n"); + cRetVal = CI_ERROR; /*ηǷ0ʧ*/ + } + + return cRetVal; +} + +/* +* CIRC֡ +* ˵const UINT8* dataBuf ݻ +* const UINT16 dataLength ݳ +* const UINT8 systemId Դ豸ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.04 +*/ +UINT8 ParseCiToLocalRcDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId) +{ + UINT8 chRetVal = CI_ERROR; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT16 wSrcDevName = 0U; /*Դ豸ƣ+ID*/ + UINT16 wDstDevName = 0U; /*Ŀ豸ƣ+ID*/ + HLHTGALInfoStruct strHlhtGalHead = { 0U }; /*ͨͷ*/ + UINT16 ii = 0U; /**/ + UINT32 dwCurCycNum = 0U; /*ǰں*/ + UINT8 cHeadGalCheckRet = HLHT_HEAD_ERROR; /*ͨͷ*/ + UINT32 dwErrorCode = 0U; + INT32 dwInfoRemainValidiy = 0; /*ϢʱЧ*/ + UINT32 dwTransBadTime = 0U; /*жͨж*/ + UINT32 dwAppCycle = 0U; /*Ӧ*/ + UINT16 wApplyDataLenth = 0U; /*Ӧݳ*/ + UINT16 wAppInfoType = 0U; /*ӦϢ*/ + UINT8 cGalHeadSaved = CI_ERROR; /*ͨͷǷѱ־*/ + UINT8 cFunRetVal = CI_ERROR; + + if ((NULL != pDataBuf) && (0U < dataLength) && (CI_TO_CI_DATA_LEN_MAX >= dataLength) && (0U < systemId) && (CI_SUM_MAX > systemId)) + { + chRetVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + wSrcDevName = CI_SYSTEM_TYPE_CI * 256U + systemId; + wDstDevName = CI_SYSTEM_TYPE_RC * 256U + cLocalCiId; + + /*ͨϢͷ*/ + strHlhtGalHead.devInterInfoType = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.sourceId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.destId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.emapVerCrc = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.crntOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.comPeriod = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.recvOppMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.preOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.prtclVer = pDataBuf[ii]; + ii++; + strHlhtGalHead.totalDataLen = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + + dwCurCycNum = Get2oo2CurCycleNum(); + cHeadGalCheckRet = HLHTRecvCommonPacketHeadCheck(wSrcDevName, wDstDevName, LOCAL_CI_RC_INTER_TYPE, LOCAL_CI_RC_PRTCL_VER, &strHlhtGalHead, &dwErrorCode, 0U, CI_SYSTEM_TYPE_CI); + + debug_infor_printf((const)"\nLocal Ci %d GAL Check Result:%d errCode:%d\n", systemId, cHeadGalCheckRet, dwErrorCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + + if (HLHT_HEAD_SUCCESS == cHeadGalCheckRet) + { + /*ϢʱЧ*/ + dwTransBadTime = GetCiAndCiTransmitBadEnsureTime(); + dwAppCycle = GetSystemParaAppCycleTime(); + dwInfoRemainValidiy = HLHTCommonMsgRemainingValidity(dwTransBadTime, dwCurCycNum, dwAppCycle, strHlhtGalHead.recvOppMsgSN, strHlhtGalHead.crntOwnMsgSN, strHlhtGalHead.preOwnMsgSN, strHlhtGalHead.comPeriod); + + if (dwInfoRemainValidiy > 0) + { + /*Ӧ*/ + wApplyDataLenth = ShortFromChar(&pDataBuf[ii]); /*Ӧòݳ*/ + ii += 2U; + + wAppInfoType = ShortFromChar(&pDataBuf[ii]); /*ӦϢ*/ + ii += 2U; + + ii += 2U; /*Ԥֽ*/ + + if (LOCAL_CI_TO_RC_INFO_HEART == wAppInfoType) + { + /*سɹ*/ + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error: AppInfoType Fail\n"); + chRetVal = CI_ERROR; /*ӦϢͷǷ0ʧ*/ + } + + if (CI_SUCCESS == chRetVal) + { + /*Уݳ γȣڲ㳤ȱټ¼ȵֽ */ + if ((strHlhtGalHead.totalDataLen != ii - 31U) || (wApplyDataLenth != ii - 33U)) + { + /* 31ΪӦ֡ͷ */ + chRetVal = CI_ERROR; + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame strHlhtGalHead.totalDataLen :%d ii %d wApplyDataLenth %d\n", strHlhtGalHead.totalDataLen, ii, wApplyDataLenth); /*0x55ȷ0xaa0x33ʼͨ֡*/ + + } + else + { + /**/ + } + } + else + { + chRetVal = CI_ERROR; /*0ʧ*/ + } + + if (CI_SUCCESS == chRetVal) + { + /*ݾУ飬洢ͨñͷ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, systemId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_CI, systemId, 0U); + + cGalHeadSaved = CI_SUCCESS; + } + else + { + /**/ + } + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error: dwInfoRemainValidiy Fail"); + chRetVal = CI_ERROR; /*ʱ0ʧ*/ + } + } + else if (HLHT_HEAD_INIT == cHeadGalCheckRet) + { + if (dwCurCycNum > 0U) + { + /*ݾУ飬洢ͨñͷ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_CI, systemId, strHlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, systemId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_CI, systemId, 0U); + + cGalHeadSaved = CI_SUCCESS; + } + else + { + /**/ + } + + chRetVal = CI_ERROR; /*0ʧ*/ + } + else + { + /*ӿԤ*/ + if (GAL_COMPARE_INFO_TYPE_ERR == (dwErrorCode & GAL_COMPARE_INFO_TYPE_ERR)) + { + /*ATSֵطCI-RCݽӿϢʹ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_SEND_FLAG_ERR == (dwErrorCode & GAL_COMPARE_SEND_FLAG_ERR)) + { + /*ATSֵطCI-RCݷͷʶϢ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_RECV_FLAG_ERR == (dwErrorCode & GAL_COMPARE_RECV_FLAG_ERR)) + { + /*ATSֵطCI-RCݽշ־Ϣ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (dwErrorCode & GAL_COMPARE_EMAP_VER_COMP_ERR)) + { + /*ATSֵطCI-RCݰ汾УʧϢ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_MSG_BDS_SN_ERR == (dwErrorCode & GAL_COMPARE_MSG_BDS_SN_ERR)) + { + /*ATSֵطCI-RCݱԷյһϢʱкŴ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_MSG_SN_ERR == (dwErrorCode & GAL_COMPARE_MSG_SN_ERR)) + { + /*ATSֵطCI-RCݶԷϢкżյһϢʱкŴ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_PROTOCOL_VER_ERR == (dwErrorCode & GAL_COMPARE_PROTOCOL_VER_ERR)) + { + /*ATSֵطCI-RCЭ汾Ŵ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_APP_LEN_ERR == (dwErrorCode & GAL_COMPARE_APP_LEN_ERR)) + { + /*ATSֵطCI-RCӦòݳЧ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_COM_PERIOD == (dwErrorCode & GAL_COMPARE_COM_PERIOD)) + { + /*ATSֵطCI-RCͨڴ */ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ZERO); + } + else + { + /*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_LOCAL_CI2RC_DATA, CI_SYSTEM_TYPE_CI, systemId, ETYPE_COMM_WITH_CI, CI_ERROR, ESEND_LEVEL_ZERO); + } + + chRetVal = CI_ERROR; /*0ʧ*/ + } + + if ((CI_ERROR == chRetVal) && (CI_ERROR == cGalHeadSaved)) + { + /*ͨñͷ*/ + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_CI, systemId); + } + else + { + /**/ + } + + if (CI_SUCCESS == cGalHeadSaved) + { + cFunRetVal = SetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_CI, cLocalCiId, dwCurCycNum); + if (CI_SUCCESS == cFunRetVal) + { + cFunRetVal = UpdateCiTransmitState(cLocalCiId, CI_SYSTEM_TYPE_CI, cLocalCiId); + + if (CI_SUCCESS == cFunRetVal) + { + /**/ + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error: UpdateCiTransmitState Fail\n"); + } + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error: SetCiTransmitRecvDataCycNum Fail\n"); + } + } + else + { + /**/ + } + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error: InputPara Is Invalid\n"); + chRetVal = CI_ERROR; /*ηǷ0ʧ*/ + } + + return chRetVal; +} + +/* +* RCCI֡ +* ˵const UINT8 cCiId ĿCI ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.05 +*/ +UINT8 PackRcToLocalCiDataFrame(const UINT8 cCiId) +{ + UINT8 cRetVal = CI_ERROR; + UINT8 cFuncRet = CI_ERROR; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT16 wCiDevName = 0U; /*豸͵CI ID*/ + UINT16 wRcDevName = 0U; /*豸͵RC ID*/ + UINT32 dwCiEtcsId = 0U; /*CIͨID*/ + UINT32 dwRcEtcsId = 0U; /*RCͨID*/ + UINT32 dwEmapCheckVer = 0U; /*ӵͼУ汾*/ + UINT32 dwHlhtHSrcSN = 0U; + UINT32 dwHlhtHRcvSN = 0U; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT8 kk = 0U; + UINT8 szRcToCiDataBuf[CI_TO_CI_DATA_LEN_MAX] = { 0U }; /*CIRC*/ + UINT32 dwCurCycNum = 0U; + UINT32 dwAppCycTime = 0U; /*Ӧ*/ + UINT16 wGalLenIndex = 0U; + UINT16 wAppLenIndex = 0U; + UINT16 wGalLen = 0U; /*ͨñͷеӦò㱨ij*/ + UINT16 wAppLen = 0U; /*Ӧò㱨ij*/ + UINT8 cOutnetSafeSendRtn = 0U; /*ͽ*/ + UINT16 wNumIndex = 0U; /*豸λ*/ + UINT16 wNeedPackDevNum = 0U; /*豸*/ + UINT8 cBelongCiId = 0U; /*豸ID*/ + UINT16 wRouteNum = 0U; /*·*/ + UINT16 wRouteId = 0U; /*·ID*/ + UINT8 cStopensureFlag = 0U; /*֤ͣ*/ + UINT16 wSignalNum = 0U; /*źŻ*/ + UINT16 wSignalId = 0U; /*źŻID*/ + UINT8 cLightExtinctState = 0U; /*źŻ״̬*/ + UINT8 cSignalCrossState = 0U; /*źŻѹ״̬*/ + UINT16 wAxisSecNum = 0U; /**/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT8 cAxisArbState = 0U; /*ARB״̬*/ + UINT16 wLogSecNum = 0U; /*߼*/ + UINT16 wLogSecId = 0U; /*߼ID*/ + UINT8 cLinShiXianSuSetFlag = 0U; /*߼ʱ״̬*/ + UINT8 cOccupyState = 0U; /*߼γʼռ״̬*/ + UINT8 cTXOccupyState = 0U; /*߼ͨųռ״̬*/ + UINT16 wPhySecNum = 0U; /**/ + UINT16 wPhySecId = 0U; /*ID*/ + UINT8 cStopSteadyFlag = 0U; /*ͣ״̬*/ + UINT16 wPsdNum = 0U; /*PSD*/ + UINT16 wPsdId = 0U; /*PSD ID*/ + UINT16 wPsdEditGroupInfo = 0U; /*PSDϢ*/ + UINT16 wPsdSrcVobcId = 0U; /*PSDԴVOBC ID*/ + UINT8 cPsdCmd = 0U; /*PSD*/ + UINT8 cAllSnowState = 0U; /*ȫѩģʽ*/ + UINT8 cAreaSnowNum = 0U; /*ѩ*/ + AreaSnowInfoStruct* pstrLocalAreaSnow = NULL; /*ѩϢ*/ + UINT8 cPackedAreaSnowNum = 0U; /*ѩ*/ + UINT8 cLocalSnowModel = 0U; /*ѩģʽ*/ + + if ((0U < cCiId) && (CI_SUM_MAX > cCiId)) + { + /*ȻȡʱϢȡɹż*/ + cLocalCiId = GetSystemParaLocalCiId(); + wCiDevName = (UINT16)CI_SYSTEM_TYPE_CI * 256U + cCiId; + wRcDevName = (UINT16)CI_SYSTEM_TYPE_RC * 256U + cLocalCiId; + + cFuncRet = dquDevName2HlhtId(wCiDevName, 0U, &dwCiEtcsId); /*ȡCIͨ*/ + cFuncRet &= dquDevName2HlhtId(wRcDevName, 0U, &dwRcEtcsId); /*ȡRCͨ*/ + + dwEmapCheckVer = GetCiTranCiDataCheckVer(cLocalCiId, wCiDevName); /*ȡRCCIĵӵͼ汾УϢ*/ + + dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_CI, cCiId); /*ȡк*/ + dwHlhtHRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_CI, cCiId); + + if (CI_SUCCESS == cFuncRet) + { + cRetVal = CI_SUCCESS; + + /*ʼ*/ + ShortToChar(LOCAL_CI_RC_INTER_TYPE, &szRcToCiDataBuf[ii]); /*ӿϢ*/ + ii += 2U; + + LongToChar(dwRcEtcsId, &szRcToCiDataBuf[ii]); /*ͷʶϢ*/ + ii += 4U; + + LongToChar(dwCiEtcsId, &szRcToCiDataBuf[ii]); /*շʶϢ*/ + ii += 4U; + + LongToChar(dwEmapCheckVer, &szRcToCiDataBuf[ii]); /*ӵͼ汾УϢ*/ + ii += 4U; + + dwCurCycNum = Get2oo2CurCycleNum(); + LongToChar(dwCurCycNum, &szRcToCiDataBuf[ii]); /*Ϣк*/ + ii += 4U; + + dwAppCycTime = GetSystemParaAppCycleTime(); + ShortToChar((UINT16)dwAppCycTime, &szRcToCiDataBuf[ii]); /*豸ͨѶ*/ + ii += 2U; + + LongToChar(dwHlhtHSrcSN, &szRcToCiDataBuf[ii]); /*ԷϢкţյԷһϢеĶԷϢк*/ + ii += 4U; + + LongToChar(dwHlhtHRcvSN, &szRcToCiDataBuf[ii]); /*յһϢʱк*/ + ii += 4U; + + szRcToCiDataBuf[ii] = LOCAL_CI_RC_PRTCL_VER; /*CI_RCӿЭ汾*/ + ii++; + + wGalLenIndex = ii; /*ͨñͷеӦò㱨ܳ*/ + ii += 2U; + + /*ΪӦò*/ + wAppLenIndex = ii; /*Ӧò㱨ij*/ + ii += 2U; + + ShortToChar(LOCAL_RC_TO_CI_INFO_DEV_STATE, &szRcToCiDataBuf[ii]); /*ֽͣ*/ + ii += 2U; + + ii += 2U; /*Ԥֽ*/ + + /****** ·Ϣ ******/ + wNumIndex = ii; /*·*/ + ii += 2U; /*2ֽڽ·*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wRouteNum = GetRouteCurSum(); /*ȡ·*/ + for (jj = 0U; jj < wRouteNum; jj++) + { + wRouteId = GetRouteId(jj); + cBelongCiId = GetRouteBelongCiId(wRouteId); + if (cBelongCiId == cLocalCiId) + { + /*·ID*/ + ShortToChar(wRouteId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*֤ͣ״̬*/ + cStopensureFlag = GetRouteStopensureFlagCC(wRouteId); + szRcToCiDataBuf[ii] = cStopensureFlag; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /*·*/ + + /****** źŻϢ ******/ + wNumIndex = ii; /*źŻ*/ + ii += 2U; /*2ֽźŻ*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wSignalNum = GetSignalCurSum(); /*ȡźŻ*/ + for (jj = 0U; jj < wSignalNum; jj++) + { + wSignalId = GetSignalId(jj); + cBelongCiId = GetSignalBelongCiId(wSignalId); + if (cBelongCiId == cLocalCiId) + { + /*źŻID*/ + ShortToChar(wSignalId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*źŻ״̬*/ + cLightExtinctState = GetSignalLightExtinctStateCC(wSignalId); + szRcToCiDataBuf[ii] = cLightExtinctState; + ii++; + + /*źŻѹ״̬*/ + cSignalCrossState = GetSignalCrossStateCC(wSignalId); + szRcToCiDataBuf[ii] = cSignalCrossState; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /*źŻ*/ + + /****** Ϣ ******/ + wNumIndex = ii; /**/ + ii += 2U; /*2ֽڼ*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wAxisSecNum = GetAxisSecCurSum(); /*ȡ*/ + for (jj = 0U; jj < wAxisSecNum; jj++) + { + wAxisSecId = GetAxisSecId(jj); + cBelongCiId = GetAxisSectionBelongCiId(wAxisSecId); + if (cBelongCiId == cLocalCiId) + { + /*ID*/ + ShortToChar(wAxisSecId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*ARB״̬*/ + cAxisArbState = GetAxisSecArbStateCC(wAxisSecId); + szRcToCiDataBuf[ii] = cAxisArbState; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /**/ + + /****** ߼Ϣ ******/ + wNumIndex = ii; /*߼*/ + ii += 2U; /*2ֽ߼*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wLogSecNum = GetLogicSecCurSum(); /*ȡ߼*/ + for (jj = 0U; jj < wLogSecNum; jj++) + { + wLogSecId = GetLogicSecId(jj); + cBelongCiId = GetLogSecBelongCiId(wLogSecId); + if (cBelongCiId == cLocalCiId) + { + /*߼ID*/ + ShortToChar(wLogSecId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*߼ʱ״̬*/ + cLinShiXianSuSetFlag = GetLogSecLinShiXianSuStateCC(wLogSecId); + szRcToCiDataBuf[ii] = cLinShiXianSuSetFlag; + ii++; + + /*߼γʼռ״̬*/ + cOccupyState = GetLogSecOccupyStateCC(wLogSecId); + szRcToCiDataBuf[ii] = cOccupyState; + ii++; + + /*߼ͨųռ״̬*/ + cTXOccupyState = GetLogSecTXOccupyStateCC(wLogSecId); + szRcToCiDataBuf[ii] = cTXOccupyState; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /*߼*/ + + /****** Ϣ ******/ + wNumIndex = ii; /**/ + ii += 2U; /*2ֽ*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wPhySecNum = GetPhySecCurSum(); /*ȡ*/ + for (jj = 0U; jj < wPhySecNum; jj++) + { + wPhySecId = GetPhySecId(jj); + cBelongCiId = GetPhySecBelongCiId(wPhySecId); + if (cBelongCiId == cLocalCiId) + { + /*ID*/ + ShortToChar(wPhySecId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*ͣ״̬*/ + cStopSteadyFlag = GetPhySecStopSteadyFlagCC(wPhySecId); + szRcToCiDataBuf[ii] = cStopSteadyFlag; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /**/ + + /****** PSDϢ ******/ + wNumIndex = ii; /*PSD*/ + ii += 2U; /*2ֽPSD*/ + + wNeedPackDevNum = 0U; /*ÿ豸ǰȽ*/ + + wPsdNum = GetPsdSum(); /*ȡPSD*/ + for (jj = 0U; jj < wPsdNum; jj++) + { + wPsdId = GetPsdId(jj); + cBelongCiId = GetPsdBelongCiId(wPsdId); + if (cBelongCiId == cLocalCiId) + { + /*PSD ID*/ + ShortToChar(wPsdId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*PSDϢ*/ + wPsdEditGroupInfo = GetPsdEditGroupInfoDataCC(wPsdId); + ShortToChar(wPsdEditGroupInfo, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*PSDԴVOBC ID*/ + wPsdSrcVobcId = GetPsdVobcIdCC(wPsdId); + ShortToChar(wPsdSrcVobcId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*PSD*/ + cPsdCmd = GetPsdVobcCmdCC(wPsdId); + szRcToCiDataBuf[ii] = cPsdCmd; + ii++; + + wNeedPackDevNum++; + } + else + { + /*DZ豸*/ + } + } + + ShortToChar(wNeedPackDevNum, &szRcToCiDataBuf[wNumIndex]); /*PSD*/ + + /****** ȫѩģʽ ******/ + cAllSnowState = GetAllSnowModelCC(); + szRcToCiDataBuf[ii] = cAllSnowState; + ii++; + + /****** ѩϢ ******/ + wNumIndex = ii; /*ѩ*/ + ii++; /*1ֽѩ*/ + + cPackedAreaSnowNum = 0U; /*ÿ豸ǰȽ*/ + + cAreaSnowNum = GetLocalAreaSnowNumCC(); /*ȡѩ*/ + pstrLocalAreaSnow = GetLocalAreaSnowCC(); + if ((0U < cAreaSnowNum) && (NULL != pstrLocalAreaSnow)) + { + for (kk = 0U; kk < cAreaSnowNum; kk++) + { + /*ID*/ + ShortToChar(pstrLocalAreaSnow[kk].wAreaId, &szRcToCiDataBuf[ii]); + ii += 2U; + + /*ʪ켶*/ + szRcToCiDataBuf[ii] = pstrLocalAreaSnow[kk].cAreaSnowLevel; + + ii++; + + cPackedAreaSnowNum++; + } + } + else + { + /*ѩ*/ + } + + szRcToCiDataBuf[wNumIndex] = cPackedAreaSnowNum; /*ѩ*/ + + /****** 鱾ѩģʽ ******/ + cLocalSnowModel = GetLocalSnowModelCC(); + szRcToCiDataBuf[ii] = cLocalSnowModel; + ii++; + + /*ͨñͷӦò㱨ܳ*/ + wGalLen = ii - (wGalLenIndex + 2U); + ShortToChar(wGalLen, &szRcToCiDataBuf[wGalLenIndex]); + + /*Ӧòݵıij */ + wAppLen = ii - (wAppLenIndex + 2U); + ShortToChar(wAppLen, &szRcToCiDataBuf[wAppLenIndex]); + + cOutnetSafeSendRtn = OutnetSafeSend(wCiDevName, 0U, &szRcToCiDataBuf[0U], ii); + if (1U == cOutnetSafeSendRtn) + { + /*дгɹ*/ +#ifdef LOGPRINT/*־ӡ*/ +#ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ + debug_infor_printf((const)"\nLOCAL_RC2CI_SEND:%d", ii); + debug_out_array(0xAAU, szRcToCiDataBuf, ii); +#endif/*ƽ̨ӡ*/ +#endif + cRetVal = CI_SUCCESS; + } + else + { + debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error: OutnetSafeSend Fail\n"); + cRetVal = CI_ERROR; /*дʧ*/ + } + } + else + { + debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error: Get Hlht Id Fail\n"); + cRetVal = CI_ERROR; /*ȡʧܣ0ʧ*/ + } + } + else + { + debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error: InputPara Is Invalid\n"); + cRetVal = CI_ERROR; /*ηǷ0ʧ*/ + } + + return cRetVal; +} + +/* +* RCCI֡ +* ˵const UINT8* dataBuf ݻ +* const UINT16 dataLength ݳ +* const UINT8 systemId Դ豸ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.05 +*/ +UINT8 ParseRcToLocalCiDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId) +{ + UINT8 chRetVal = CI_ERROR; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT16 wSrcDevName = 0U; /*Դ豸ƣ+ID*/ + UINT16 wDstDevName = 0U; /*Ŀ豸ƣ+ID*/ + HLHTGALInfoStruct strHlhtGalHead = { 0U }; /*ͨͷ*/ + UINT16 ii = 0U; /**/ + UINT16 jj = 0U; + UINT8 kk = 0U; + UINT32 dwCurCycNum = 0U; /*ǰں*/ + UINT8 cHeadGalCheckRet = HLHT_HEAD_ERROR; /*ͨͷ*/ + UINT32 dwErrorCode = 0U; + INT32 dwInfoRemainValidiy = 0; /*ϢʱЧ*/ + UINT32 dwTransBadTime = 0U; /*жͨж*/ + UINT32 dwAppCycle = 0U; /*Ӧ*/ + UINT16 wApplyDataLenth = 0U; /*Ӧݳ*/ + UINT16 wAppInfoType = 0U; /*ӦϢ*/ + UINT8 cGalHeadSaved = CI_ERROR; /*ͨͷǷѱ־*/ + UINT8 cFunRetVal = CI_ERROR; + UINT16 wRouteNum = 0U; /*·*/ + UINT16 wRouteId = 0U; /*·ID*/ + UINT8 cStopensureFlag = 0U; /*֤ͣ*/ + UINT16 wSignalNum = 0U; /*źŻ*/ + UINT16 wSignalId = 0U; /*źŻID*/ + UINT8 cLightExtinctState = 0U; /*źŻ״̬*/ + UINT8 cSignalCrossState = 0U; /*źŻѹ״̬*/ + UINT16 wAxisSecNum = 0U; /**/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT8 cAxisArbState = 0U; /*ARB״̬*/ + UINT16 wLogSecNum = 0U; /*߼*/ + UINT16 wLogSecId = 0U; /*߼ID*/ + UINT8 cLinShiXianSuSetFlag = 0U; /*߼ʱ״̬*/ + UINT8 cOccupyState = 0U; /*߼γʼռ״̬*/ + UINT8 cTXOccupyState = 0U; /*߼ͨųռ״̬*/ + UINT16 wPhySecNum = 0U; /**/ + UINT16 wPhySecId = 0U; /*ID*/ + UINT8 cStopSteadyFlag = 0U; /*ͣ״̬*/ + UINT16 wPsdNum = 0U; /*PSD*/ + UINT16 wPsdSecId = 0U; /*PSD ID*/ + UINT16 wPsdEditGroupInfo = 0U; /*PSDϢ*/ + UINT16 wPsdSrcVobcId = 0U; /*PSDԴVOBC ID*/ + UINT8 cPsdCmd = 0U; /*PSD*/ + UINT8 cAllSnowState = 0U; /*ȫѩģʽ*/ + UINT8 cAreaSnowNum = 0U; /*ѩ*/ + AreaSnowInfoStruct strszLocalAreaSnow[LOCAL_AREA_SNOW_SUM_MAX] = { 0U }; /*ѩϢ*/ + UINT8 cLocalSnowModel = 0U; /*ѩģʽ*/ + + if ((NULL != pDataBuf) && (0U < dataLength) && (CI_TO_CI_DATA_LEN_MAX >= dataLength) && (0U < systemId) && (CI_SUM_MAX > systemId)) + { + chRetVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + wSrcDevName = CI_SYSTEM_TYPE_RC * 256U + systemId; + wDstDevName = CI_SYSTEM_TYPE_CI * 256U + cLocalCiId; + + /*ͨϢͷ*/ + strHlhtGalHead.devInterInfoType = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.sourceId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.destId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.emapVerCrc = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.crntOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.comPeriod = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.recvOppMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.preOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.prtclVer = pDataBuf[ii]; + ii++; + strHlhtGalHead.totalDataLen = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + + dwCurCycNum = Get2oo2CurCycleNum(); + cHeadGalCheckRet = HLHTRecvCommonPacketHeadCheck(wSrcDevName, wDstDevName, LOCAL_CI_RC_INTER_TYPE, LOCAL_CI_RC_PRTCL_VER, &strHlhtGalHead, &dwErrorCode, 0U, CI_SYSTEM_TYPE_RC); + + debug_infor_printf((const)"\nLocal Rc %d GAL Check Result:%d errCode:%d", systemId, cHeadGalCheckRet, dwErrorCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + + if (HLHT_HEAD_SUCCESS == cHeadGalCheckRet) + { + /*ϢʱЧ*/ + dwTransBadTime = GetCiAndCiTransmitBadEnsureTime(); + dwAppCycle = GetSystemParaAppCycleTime(); + dwInfoRemainValidiy = HLHTCommonMsgRemainingValidity(dwTransBadTime, dwCurCycNum, dwAppCycle, strHlhtGalHead.recvOppMsgSN, strHlhtGalHead.crntOwnMsgSN, strHlhtGalHead.preOwnMsgSN, strHlhtGalHead.comPeriod); + + if (dwInfoRemainValidiy > 0) + { + /*Ӧ*/ + wApplyDataLenth = ShortFromChar(&pDataBuf[ii]); /*Ӧòݳ*/ + ii += 2U; + + wAppInfoType = ShortFromChar(&pDataBuf[ii]); /*ӦϢ*/ + ii += 2U; + + ii += 2U; /*Ԥֽ*/ + + if (LOCAL_RC_TO_CI_INFO_DEV_STATE == wAppInfoType) + { + /****** · ******/ + wRouteNum = ShortFromChar(&pDataBuf[ii]); /*·*/ + ii += 2U; + for (jj = 0U; jj < wRouteNum; jj++) + { + wRouteId = ShortFromChar(&pDataBuf[ii]); /*·ID*/ + ii += 2U; + + cStopensureFlag = pDataBuf[ii]; /*֤ͣ״̬*/ + ii++; + + SetRouteStopensureFlagCC(wRouteId, cStopensureFlag); /*ý·֤ͣCC*/ + } + + /****** źŻ ******/ + wSignalNum = ShortFromChar(&pDataBuf[ii]); /*źŻ*/ + ii += 2U; + for (jj = 0U; jj < wSignalNum; jj++) + { + wSignalId = ShortFromChar(&pDataBuf[ii]); /*źŻID*/ + ii += 2U; + + cLightExtinctState = pDataBuf[ii]; /*źŻ״̬*/ + ii++; + + cSignalCrossState = pDataBuf[ii]; /*źŻѹ״̬*/ + ii++; + + SetSignalLightExtinctStateCC(wSignalId, cLightExtinctState); /*źŻ״̬CC*/ + SetSignalCrossStateCC(wSignalId, cSignalCrossState); /*źŻѹ״̬CC*/ + } + + /****** ******/ + wAxisSecNum = ShortFromChar(&pDataBuf[ii]); /**/ + ii += 2U; + for (jj = 0U; jj < wAxisSecNum; jj++) + { + wAxisSecId = ShortFromChar(&pDataBuf[ii]); /*ID*/ + ii += 2U; + + cAxisArbState = pDataBuf[ii]; /*ARB״̬*/ + ii++; + + SetAxisSecArbStateCC(wAxisSecId, cAxisArbState); /*üARB״̬*/ + } + + /****** ߼ ******/ + wLogSecNum = ShortFromChar(&pDataBuf[ii]); /*߼*/ + ii += 2U; + for (jj = 0U; jj < wLogSecNum; jj++) + { + wLogSecId = ShortFromChar(&pDataBuf[ii]); /*߼ID*/ + ii += 2U; + + cLinShiXianSuSetFlag = pDataBuf[ii]; /*߼ʱ״̬*/ + ii++; + + cOccupyState = pDataBuf[ii]; /*߼γʼռ״̬*/ + ii++; + + cTXOccupyState = pDataBuf[ii]; /*߼ͨųռ״̬*/ + ii++; + + SetLogSecLinShiXianSuStateCC(wLogSecId, cLinShiXianSuSetFlag); /*߼ʱ״̬*/ + SetLogSecOccupyStateCC(wLogSecId, cOccupyState); /*߼γʼռ״̬*/ + SetLogSecTXOccupyStateCC(wLogSecId, cTXOccupyState); /*߼ͨųռ״̬*/ + } + + /****** ******/ + wPhySecNum = ShortFromChar(&pDataBuf[ii]); /**/ + ii += 2U; + for (jj = 0U; jj < wPhySecNum; jj++) + { + wPhySecId = ShortFromChar(&pDataBuf[ii]); /*ID*/ + ii += 2U; + + cStopSteadyFlag = pDataBuf[ii]; /*ͣ״̬*/ + ii++; + + SetPhySecStopSteadyFlagCC(wPhySecId, cStopSteadyFlag); /*ͣ״̬*/ + } + + /****** PSD ******/ + wPsdNum = ShortFromChar(&pDataBuf[ii]); /*PSD*/ + ii += 2U; + for (jj = 0U; jj < wPsdNum; jj++) + { + wPsdSecId = ShortFromChar(&pDataBuf[ii]); /*PSD ID*/ + ii += 2U; + + wPsdEditGroupInfo = ShortFromChar(&pDataBuf[ii]); /*PSDϢ*/ + ii += 2U; + + wPsdSrcVobcId = ShortFromChar(&pDataBuf[ii]); /*PSDԴVOBC ID*/ + ii += 2U; + + cPsdCmd = pDataBuf[ii]; /*PSD*/ + ii++; + + SetPsdEditGroupInfoDataCC(wPsdSecId, wPsdEditGroupInfo); /*PSDϢ*/ + SetPsdVobcCmdCC(wPsdSecId, wPsdSrcVobcId, cPsdCmd, dwCurCycNum); /*PSDϢ*/ + } + + /****** ȫѩģʽϢ ******/ + cAllSnowState = pDataBuf[ii]; /*ȫѩģʽ*/ + ii++; + SetAllSnowModelCC(cAllSnowState); /*ȫѩģʽCC*/ + + /****** ѩ ******/ + cAreaSnowNum = pDataBuf[ii]; /*ѩ*/ + ii++; + for (kk = 0U; kk < cAreaSnowNum; kk++) + { + strszLocalAreaSnow[kk].wAreaId = ShortFromChar(&pDataBuf[ii]); /*ID*/ + ii += 2U; + + strszLocalAreaSnow[kk].cAreaSnowLevel = pDataBuf[ii]; /*ʪ켶*/ + ii++; + } + + SetLocalAreaSnowInfoCC(cAreaSnowNum, strszLocalAreaSnow); /*ѩϢCC*/ + + /****** ѩģʽ ******/ + cLocalSnowModel = pDataBuf[ii]; /*ѩģʽ*/ + ii++; + SetLocalSnowModelCC(cLocalSnowModel); /*ñرѩģʽCC*/ + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: AppInfoType Fail\n"); + chRetVal = CI_ERROR; /*ӦϢͷǷ0ʧ*/ + } + + if (CI_SUCCESS == chRetVal) + { + /*Уݳ γȣڲ㳤ȱټ¼ȵֽ */ + if ((strHlhtGalHead.totalDataLen != ii - 31U) || (wApplyDataLenth != ii - 33U)) + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: strHlhtGalHead.totalDataLen[%d],ii[%d],wApplyDataLenth[%d]\n", strHlhtGalHead.totalDataLen, ii, wApplyDataLenth); + chRetVal = CI_ERROR; + } + else + { + /**/ + } + } + else + { + chRetVal = CI_ERROR; /*0ʧ*/ + } + + if (CI_SUCCESS == chRetVal) + { + /*ݾУ飬洢ͨñͷ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RC, systemId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_RC, systemId, 0U); + + cGalHeadSaved = CI_SUCCESS; + } + else + { + /**/ + } + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: dwInfoRemainValidiy Fail\n"); + chRetVal = CI_ERROR; /*ʱ0ʧ*/ + } + } + else if (HLHT_HEAD_INIT == cHeadGalCheckRet) + { + if (dwCurCycNum > 0U) + { + /*ݾУ飬洢ͨñͷ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RC, systemId, strHlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_RC, systemId, dwCurCycNum); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_RC, systemId, 0U); + + cGalHeadSaved = CI_SUCCESS; + } + else + { + /**/ + } + + chRetVal = CI_ERROR; /*0ʧ*/ + } + else + { + /*ӿԤ*/ + if (GAL_COMPARE_INFO_TYPE_ERR == (dwErrorCode & GAL_COMPARE_INFO_TYPE_ERR)) + { + /*ATSֵطCI-RCݽӿϢʹ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_SEND_FLAG_ERR == (dwErrorCode & GAL_COMPARE_SEND_FLAG_ERR)) + { + /*ATSֵطCI-RCݷͷʶϢ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_RECV_FLAG_ERR == (dwErrorCode & GAL_COMPARE_RECV_FLAG_ERR)) + { + /*ATSֵطCI-RCݽշ־Ϣ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (dwErrorCode & GAL_COMPARE_EMAP_VER_COMP_ERR)) + { + /*ATSֵطCI-RCݰ汾УʧϢ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_MSG_BDS_SN_ERR == (dwErrorCode & GAL_COMPARE_MSG_BDS_SN_ERR)) + { + /*ATSֵطCI-RCݱԷյһϢʱкŴ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_MSG_SN_ERR == (dwErrorCode & GAL_COMPARE_MSG_SN_ERR)) + { + /*ATSֵطCI-RCݶԷϢкżյһϢʱкŴ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_PROTOCOL_VER_ERR == (dwErrorCode & GAL_COMPARE_PROTOCOL_VER_ERR)) + { + /*ATSֵطCI-RCЭ汾Ŵ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_APP_LEN_ERR == (dwErrorCode & GAL_COMPARE_APP_LEN_ERR)) + { + /*ATSֵطCI-RCӦòݳЧ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ZERO); + } + else if (GAL_COMPARE_COM_PERIOD == (dwErrorCode & GAL_COMPARE_COM_PERIOD)) + { + /*ATSֵطCI-RCͨڴ */ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ZERO); + } + else + { + /*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_LOCAL_RC2CI_DATA, CI_SYSTEM_TYPE_RC, systemId, ETYPE_COMM_WITH_RC, CI_ERROR, ESEND_LEVEL_ZERO); + } + + chRetVal = CI_ERROR; /*0ʧ*/ + } + + if ((CI_ERROR == chRetVal) && (CI_ERROR == cGalHeadSaved)) + { + /*ͨñͷ*/ + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_RC, systemId); + } + else + { + /**/ + } + + if (CI_SUCCESS == cGalHeadSaved) + { + cFunRetVal = SetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_RC, cLocalCiId, dwCurCycNum); + if (CI_SUCCESS == cFunRetVal) + { + cFunRetVal = UpdateCiTransmitState(cLocalCiId, CI_SYSTEM_TYPE_RC, cLocalCiId); + + if (CI_SUCCESS == cFunRetVal) + { + /**/ + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: UpdateCiTransmitState Fail\n"); + } + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: SetCiTransmitRecvDataCycNum Fail\n"); + } + } + else + { + /**/ + } + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error: InputPara Is Invalid\n"); + chRetVal = CI_ERROR; /*ηǷ0ʧ*/ + } + + return chRetVal; +} + +/* +* У鱾RCCIĵ֡ +* ˵UINT8* pDataBuf Ϣ +* UINT16 dataLength ݳ +* UINT8 *pErrNo Уʧܹ +* ֵCI_ERROR 0 Уʧ +* CI_SUCCESS 0 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 ParseRcToLocalCiDataCheck(UINT8* pDataBuf, UINT16 dataLength, UINT8* pErrNo) +{ + UINT8 reVal = CI_ERROR; + UINT16 ii = 0U; /**/ + HLHTGALInfoStruct strHlhtGalHead = { 0U }; /*ͨͷ*/ + UINT16 wApplyDataLenth = 0U; /*Ӧݳ*/ + UINT16 wAppInfoType = 0U; /*ӦϢ*/ + + /*η*/ + if ((NULL != pDataBuf) && (dataLength > 0U) && (NULL != pErrNo)) + { + reVal = CI_SUCCESS; + + /*ͨñͷ˴У飬ʱУ飩*/ + strHlhtGalHead.devInterInfoType = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.sourceId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.destId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.emapVerCrc = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.crntOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.comPeriod = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + strHlhtGalHead.recvOppMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.preOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + strHlhtGalHead.prtclVer = pDataBuf[ii]; + ii++; + strHlhtGalHead.totalDataLen = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + + wApplyDataLenth = ShortFromChar(&pDataBuf[ii]); /*Ӧòݳ*/ + ii += 2U; + + wAppInfoType = ShortFromChar(&pDataBuf[ii]); /*ӦϢ*/ + ii += 2U; + + ii += 2U; /*Ԥֽ*/ + + if (LOCAL_RC_TO_CI_INFO_DEV_STATE == wAppInfoType) + { + /*·У*/ + reVal = CheckLocalRcToCiRouteData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 2U; + } + + /*źŻУ*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiSignalData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 3U; + } + } + else + { + /**/ + } + + /*У*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiAxisSecData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 4U; + } + } + else + { + /**/ + } + + /*߼У*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiLogSecData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 5U; + } + } + else + { + /**/ + } + + /*У*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiPhySecData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 6U; + } + } + else + { + /**/ + } + + /*У*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiPsdData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 7U; + } + } + else + { + /**/ + } + + /*ѩУ*/ + if (CI_SUCCESS == reVal) + { + reVal = CheckLocalRcToCiSnowData(pDataBuf, &ii); + if (CI_SUCCESS == reVal) + { + /*У*/ + } + else + { + *pErrNo = 8U; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == reVal) + { + /*Уݳȣڲ㳤ȱټ¼ȵֽ*/ + if ((strHlhtGalHead.totalDataLen == (ii - 31U)) && (wApplyDataLenth == (ii - 33U))) + { + /*سɹ*/ + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nParseRcToLocalCiDataCheck Error: strHlhtGalHead.totalDataLen[%d],ii[%d],wApplyDataLenth[%d]", strHlhtGalHead.totalDataLen, ii, wApplyDataLenth); + reVal = CI_ERROR; + *pErrNo = 9U; + } + } + else + { + /**/ + } + } + else + { + /*ͷǷʧ*/ + debug_infor_printf((const)"\nParseRcToLocalCiDataCheck Error: AppInfoType Fail\n"); + reVal = CI_ERROR; + *pErrNo = 1U; + } + } + else + { + /*ηǷ0ʧ*/ + debug_infor_printf((const)"\nParseRcToLocalCiDataCheck Error: InputPara Is Invalid\n"); + reVal = CI_ERROR; + } + + return reVal; +} + +/* +* У鱾RCCIĽ· +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiRouteData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wRouteNum = 0U; /*·*/ + UINT16 wRouteId = 0U; /*·ID*/ + UINT8 cStopensureFlag = 0U; /*֤ͣ*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cRouteBelongCiId = 0U; /*·ID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wRouteNum = ShortFromChar(&dataBuf[ii]); /*·*/ + ii += 2U; + + if (ROUTE_SUM_MAX > wRouteNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wRouteNum; jj++) + { + wRouteId = ShortFromChar(&dataBuf[ii]); /*·ID*/ + ii += 2U; + + if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId)) + { + cRouteBelongCiId = GetRouteBelongCiId(wRouteId); + if (cRouteBelongCiId == cLocalCiId) + { + cStopensureFlag = dataBuf[ii]; /*֤ͣ־*/ + ii++; + + if ((ROUTE_STOPENSURE_NO == cStopensureFlag) || (ROUTE_STOPENSURE_YES == cStopensureFlag)) + { + /*У*/ + } + else + { + /*֤ͣ־Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiRouteData Is Error: wRouteId[%d] cStopensureFlag Is %d\n", wRouteId, cStopensureFlag); + retVal = CI_ERROR; + } + } + else + { + /*·DZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiRouteData Is Error: wRouteId[%d] cRouteBelongCiId Is %d\n", wRouteId, cRouteBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*·IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiRouteData Is Error: wRouteId Is %d\n", wRouteId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*·ޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiRouteData Is Error: wRouteNum Is %d\n", wRouteNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiRouteData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCIźŻ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiSignalData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wSignalNum = 0U; /*źŻ*/ + UINT16 wSignalId = 0U; /*źŻID*/ + UINT8 cLightExtinctState = 0U; /*źŻ״̬*/ + UINT8 cSignalCrossState = 0U; /*źŻѹ״̬*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cSignalBelongCiId = 0U; /*źŻID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wSignalNum = ShortFromChar(&dataBuf[ii]); /*źŻ*/ + ii += 2U; + + if (SIGNAL_SUM_MAX > wSignalNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wSignalNum; jj++) + { + wSignalId = ShortFromChar(&dataBuf[ii]); /*źŻID*/ + ii += 2U; + + if ((0U < wSignalId) && (SIGNAL_SUM_MAX > wSignalId)) + { + cSignalBelongCiId = GetSignalBelongCiId(wSignalId); + if (cSignalBelongCiId == cLocalCiId) + { + cLightExtinctState = dataBuf[ii]; /*źŻ״̬*/ + ii++; + + if ((SIGNAL_LIGHT_EXTICT_STATE_YES == cLightExtinctState) || (SIGNAL_LIGHT_EXTICT_STATE_NO == cLightExtinctState)) + { + /*У*/ + } + else + { + /*źŻ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: wSignalId[%d] cLightExtinctState Is %d\n", wSignalId, cLightExtinctState); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + cSignalCrossState = dataBuf[ii]; /*źŻѹ״̬*/ + ii++; + + if ((SIGNAL_CROSS_STATE_YES == cSignalCrossState) || (SIGNAL_CROSS_STATE_NO == cSignalCrossState)) + { + /*У*/ + } + else + { + /*źŻѹ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: wSignalId[%d] cSignalCrossState Is %d\n", wSignalId, cSignalCrossState); + retVal = CI_ERROR; + } + } + else + { + /**/ + } + } + else + { + /*źŻDZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: wSignalId[%d] cSignalBelongCiId Is %d\n", wSignalId, cSignalBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*źŻIDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: wSignalId Is %d\n", wSignalId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*źŻޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: wSignalNum Is %d\n", wSignalNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSignalData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCIļ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiAxisSecData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wAxisSecNum = 0U; /**/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT8 cAxisArbState = 0U; /*ARB״̬*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cAxisSecBelongCiId = 0U; /*ID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wAxisSecNum = ShortFromChar(&dataBuf[ii]); /**/ + ii += 2U; + + if (AXIS_SECTION_SUM_MAX > wAxisSecNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wAxisSecNum; jj++) + { + wAxisSecId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId)) + { + cAxisSecBelongCiId = GetAxisSectionBelongCiId(wAxisSecId); + if (cAxisSecBelongCiId == cLocalCiId) + { + cAxisArbState = dataBuf[ii]; /*ARB״̬*/ + ii++; + + if ((AXIS_SECTION_ARB_NO == cAxisArbState) || (AXIS_SECTION_ARB_YES == cAxisArbState)) + { + /*У*/ + } + else + { + /*ARB״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiAxisSecData Is Error: wAxisSecId[%d] cAxisArbState Is %d\n", wAxisSecId, cAxisArbState); + retVal = CI_ERROR; + } + } + else + { + /*ηDZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiAxisSecData Is Error: wAxisSecId[%d] cAxisSecBelongCiId Is %d\n", wAxisSecId, cAxisSecBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiAxisSecData Is Error: wAxisSecId Is %d\n", wAxisSecId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*ޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiAxisSecData Is Error: wAxisSecNum Is %d\n", wAxisSecNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiAxisSecData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCI߼ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiLogSecData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wLogSecNum = 0U; /*߼*/ + UINT16 wLogSecId = 0U; /*߼ID*/ + UINT8 cLinShiXianSuSetFlag = 0U; /*߼ʱ״̬*/ + UINT8 cOccupyState = 0U; /*߼γʼռ״̬*/ + UINT8 cTXOccupyState = 0U; /*߼ͨųռ״̬*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cLogSecBelongCiId = 0U; /*߼ID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wLogSecNum = ShortFromChar(&dataBuf[ii]); /*߼*/ + ii += 2U; + + if (LOGIC_SECTION_SUM_MAX > wLogSecNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wLogSecNum; jj++) + { + wLogSecId = ShortFromChar(&dataBuf[ii]); /*߼ID*/ + ii += 2U; + + if ((0U < wLogSecId) && (LOGIC_SECTION_SUM_MAX > wLogSecId)) + { + cLogSecBelongCiId = GetLogSecBelongCiId(wLogSecId); + if (cLogSecBelongCiId == cLocalCiId) + { + cLinShiXianSuSetFlag = dataBuf[ii]; /*߼ʱ״̬*/ + ii++; + + if ((LOGSEC_LSXS_SET_STATE_NO == cLinShiXianSuSetFlag) + || (LOGSEC_LSXS_SET_STATE_YES == cLinShiXianSuSetFlag) + || (LOGSEC_LSXS_SET_STATE_INVALID == cLinShiXianSuSetFlag)) + { + /*У*/ + } + else + { + /*߼ʱ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecId[%d] cLinShiXianSuSetFlag Is %d\n", wLogSecId, cLinShiXianSuSetFlag); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + cOccupyState = dataBuf[ii]; /*߼γʼռ״̬*/ + ii++; + + if ((LOGICSECTION_OCCUPY_UT == cOccupyState) + || (LOGICSECTION_OCCUPY_CT == cOccupyState) + || (LOGICSECTION_OCCUPY_NO == cOccupyState)) + { + /*У*/ + } + else + { + /*߼γʼռ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecId[%d] cOccupyState Is %d\n", wLogSecId, cOccupyState); + retVal = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == retVal) + { + cTXOccupyState = dataBuf[ii]; /*߼ͨųռ״̬*/ + ii++; + + if ((LOGICSECTION_OCCUPY_TX == cTXOccupyState) || (LOGICSECTION_OCCUPY_NO_TX == cTXOccupyState)) + { + /*У*/ + } + else + { + /*߼ͨųռ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecId[%d] cTXOccupyState Is %d\n", wLogSecId, cTXOccupyState); + retVal = CI_ERROR; + } + } + else + { + /**/ + } + } + else + { + /*߼ηDZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecId[%d] cLogSecBelongCiId Is %d\n", wLogSecId, cLogSecBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*߼IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecId Is %d\n", wLogSecId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*߼ޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: wLogSecNum Is %d\n", wLogSecNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiLogSecData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCI +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiPhySecData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wPhySecNum = 0U; /**/ + UINT16 wPhySecId = 0U; /*ID*/ + UINT8 cStopSteadyFlag = 0U; /*ͣ״̬*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cPhySecBelongCiId = 0U; /*ID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wPhySecNum = ShortFromChar(&dataBuf[ii]); /**/ + ii += 2U; + + if (PHYSICAL_SECTION_SUM_MAX > wPhySecNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wPhySecNum; jj++) + { + wPhySecId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + if ((0U < wPhySecId) && (PHYSICAL_SECTION_SUM_MAX > wPhySecId)) + { + cPhySecBelongCiId = GetPhySecBelongCiId(wPhySecId); + if (cPhySecBelongCiId == cLocalCiId) + { + cStopSteadyFlag = dataBuf[ii]; /*ͣ״̬*/ + ii++; + + if ((PHYSICAL_SECTION_STOPSTEADY_NO == cStopSteadyFlag) || (PHYSICAL_SECTION_STOPSTEADY_YES == cStopSteadyFlag)) + { + /*У*/ + } + else + { + /*ͣ״̬Ƿʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPhySecData Is Error: wPhySecId[%d] cStopSteadyFlag Is %d\n", wPhySecId, cStopSteadyFlag); + retVal = CI_ERROR; + } + } + else + { + /*ηDZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPhySecData Is Error: wPhySecId[%d] cPhySecBelongCiId Is %d\n", wPhySecId, cPhySecBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPhySecData Is Error: wPhySecId Is %d\n", wPhySecId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*ޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPhySecData Is Error: wPhySecNum Is %d\n", wPhySecNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPhySecData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCI +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiPsdData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT16 jj = 0U; + UINT16 wPsdNum = 0U; /*PSD*/ + UINT16 wPsdId = 0U; /*PSD ID*/ + UINT16 wPsdEditGroupInfo = 0U; /*PSDϢ*/ + UINT16 wSrcVobcId = 0U; /*ԴVOBC ID*/ + UINT8 cPsdCmd = 0U; /*PSD*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cPsdBelongCiId = 0U; /*PSDID*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + ii = *index; + + wPsdNum = ShortFromChar(&dataBuf[ii]); /*PSD*/ + ii += 2U; + + if (PSD_SUM_MAX > wPsdNum) + { + retVal = CI_SUCCESS; + + cLocalCiId = GetSystemParaLocalCiId(); + for (jj = 0U; jj < wPsdNum; jj++) + { + wPsdId = ShortFromChar(&dataBuf[ii]); /*PSD ID*/ + ii += 2U; + + if ((0U < wPsdId) && (PSD_SUM_MAX > wPsdId)) + { + cPsdBelongCiId = GetPsdBelongCiId(wPsdId); + if (cPsdBelongCiId == cLocalCiId) + { + wPsdEditGroupInfo = ShortFromChar(&dataBuf[ii]); /*PSDϢ*/ + ii += 2U; + + if ((PSD_THREE_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_FOUR_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_SIX_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EIGHT_EDIT_GROUP == wPsdEditGroupInfo) + || (PSD_EDIT_GROUP_DEFAULT == wPsdEditGroupInfo)) + { + /*У*/ + } + else + { + /*PSDϢǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdId[%d] wPsdEditGroupInfo Is %d\n", wPsdId, wPsdEditGroupInfo); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + wSrcVobcId = ShortFromChar(&dataBuf[ii]); /*ԴVOBC ID*/ + ii += 2U; + + if (UINT16_MAX > wSrcVobcId) + { + /*У*/ + } + else + { + /*ԴVOBC IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdId[%d] wSrcVobcId Is %d\n", wPsdId, wSrcVobcId); + retVal = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == retVal) + { + cPsdCmd = dataBuf[ii]; /*PSD*/ + ii++; + + if ((PSD_DEFAULT_CONTROL_CMD == cPsdCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDOPEN == cPsdCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDCLOSE == cPsdCmd) + || (VOBCTOCI_COMMAND_TYPE_PSDCHECK_FAOHLHT == cPsdCmd)) + { + /*У*/ + } + else + { + /*PSDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdId[%d] cPsdCmd Is %d\n", wPsdId, cPsdCmd); + retVal = CI_ERROR; + } + } + else + { + /**/ + } + } + else + { + /*PSDDZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdId[%d] cPsdBelongCiId Is %d\n", wPsdId, cPsdBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*PSD IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdId Is %d\n", wPsdId); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*PSDޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: wPsdNum Is %d\n", wPsdNum); + retVal = CI_ERROR; + } + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiPsdData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* У鱾RCCIѩ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiSnowData(const UINT8* dataBuf, UINT16* index) +{ + UINT8 retVal = CI_ERROR; + UINT16 ii = 0U; + UINT8 jj = 0U; + UINT8 cAllSnowState = 0U; /*ȫѩģʽ*/ + UINT8 cAreaSnowNum = 0U; /*ѩ*/ + UINT16 wPlatFormId = 0U; /*ѩվ̨ID*/ + UINT8 cPlatFormBelongCiId = 0U; /*վ̨*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cAreaSnowLevel = 0U; /*ʪȼ*/ + UINT8 cLocalSnowModel = 0U; /*ѩģʽ*/ + + if ((NULL != dataBuf) && (NULL != index)) + { + retVal = CI_SUCCESS; + ii = *index; + + cAllSnowState = dataBuf[ii]; /*ȫѩģʽ*/ + ii++; + + if ((CI_ALL_SNOW_VALID == cAllSnowState) || (CI_ALL_SNOW_UNVALID == cAllSnowState)) + { + /*У*/ + } + else + { + /*ȫѩģʽǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData Is Error: cAllSnowState Is %d\n", cAllSnowState); + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + cAreaSnowNum = dataBuf[ii]; /*ѩվ̨*/ + ii++; + + if (LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) + { + cLocalCiId = GetSystemParaLocalCiId(); + + for (jj = 0U; jj < cAreaSnowNum; jj++) + { + wPlatFormId = ShortFromChar(&dataBuf[ii]); /*ID*/ + ii += 2U; + + if ((0U < wPlatFormId) && (UINT16_MAX > wPlatFormId)) + { + cPlatFormBelongCiId = GetAreaSnowPlatFormBelongCiId(wPlatFormId); /*ȡѩվ̨*/ + + if (cLocalCiId == cPlatFormBelongCiId) + { + /*Уͨ*/ + } + else + { + /*DZʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData Is Error: cPlatFormBelongCiId Is %d\n", cPlatFormBelongCiId); + retVal = CI_ERROR; + } + } + else + { + /*IDǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData 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)"\nCheckLocalRcToCiSnowData Is Error: wPlatFormId[%d] cAreaSnowLevel Is %d\n", wPlatFormId, cAreaSnowLevel); + retVal = CI_ERROR; + } + } + else + { + /*ѽʧܣ*/ + } + + if (CI_SUCCESS == retVal) + { + /*У*/ + } + else + { + break; + } + } + } + else + { + /*ѩվ̨ޣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData Is Error: cAreaSnowNum Is %d\n", cAreaSnowNum); + retVal = CI_ERROR; + } + } + else + { + /*ѽʧܣ*/ + } + + if (CI_SUCCESS == retVal) + { + cLocalSnowModel = dataBuf[ii]; /*ѩģʽ*/ + ii++; + + if ((CI_LOCAL_SNOW_UNVALID == cLocalSnowModel) || (CI_LOCAL_SNOW_VALID == cLocalSnowModel)) + { + /*Уͨ*/ + } + else + { + /*ѩģʽǷʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData Is Error: cLocalSnowModel Is %d\n", cLocalSnowModel); + retVal = CI_ERROR; + } + } + else + { + /*ѽʧܣ*/ + } + + *index = ii; + } + else + { + /*Уʧܣʧ*/ + debug_infor_printf((const)"\nCheckLocalRcToCiSnowData Is Error: InputPara Is Invalid\n"); + retVal = CI_ERROR; + } + + return retVal; } \ 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..83e3b04 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,15 +100,16 @@ #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_BEGIN_TO_STATION_LEN ((UINT16)16) /*ӿʼվֹ cgh4ֽCI-CIУϢ*/ +#define CICI_VERSION ((UINT8)30) /*ciciӿڰ汾ţÿ޸ĽӿҪ汾šLast Modified On 2025.11.04*/ +#define CICI_BEGIN_TO_STATION_LEN ((UINT16)37) /*20251104ΪHLHTͷ+Ӧò㱣ǰ6ֽ*/ +#define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-6U-3U) /*20251104º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_LOGSEC_LEN ((UINT16)11)/*һ߼ݳ*/ +#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_ROUTE_LEN ((UINT16)13)/*һ·ݳ*/ #define CICI_ONE_PHYSEC_LOCKSTATE_LEN ((UINT16)10)/*һ״̬ݳ*/ #define CICI_ONE_SPKS_LEN ((UINT16)4) /*һSPKSݳ*/ #define CICI_ONE_VIRTUAL_RELAY_LEN ((UINT16)3) /*һSPKSݳ*/ @@ -120,6 +126,14 @@ #define CICI_DR_CMD_FULL ((UINT8)0xaa) /*ӽ·*/ #define CICI_DR_CMD_LOGIC ((UINT8)0xbb) /*߼ӽ·*/ +#define LOCAL_CI_RC_INTER_TYPE ((UINT16)0x0306U) /*CI-RCӿ*/ +#define LOCAL_RC_TO_CI_INFO_DEV_STATE ((UINT16)0x0301U) /*RCͱCI豸״̬֡*/ +#define LOCAL_CI_TO_RC_INFO_HEART ((UINT16)0x0302U) /*CIͱRC֡*/ +#define LOCAL_RCI_INFO_STATE ((UINT16)0x0303U) /*ͬģʽӿ*/ + +#define LOCAL_CI_RC_PRTCL_VER ((UINT8)0x01U) /*CI-RCЭ汾*/ + + /*ݽṹ*/ typedef struct S_IntconPhySecDataStruct { @@ -233,9 +247,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,22 +275,19 @@ extern "C" { extern UINT8 SendCiDrCmdSum; extern ToCiAreaSnowStruct szRecvCiAreaSnow[CI_COM_CI_MAX_NUM]; extern ToCiAreaSnowStruct szSendCiAreaSnow[CI_COM_CI_MAX_NUM]; - -/* -* CI -* ˵ void -* ֵ 0: ʧ -* 1: ɹ -*/ -UINT8 ParseCiToCiData(void); + extern ToCiAreaIteCutStruct szRecvCiAreaIteCut[CI_COM_CI_MAX_NUM]; + extern ToCiAreaIteCutStruct szSendCiAreaIteCut[CI_COM_CI_MAX_NUM]; /* * CI֡ -* ˵ void +* ˵ UINT8* dataBuf , UINT16 dataLength ,UINT8 chSendCiId ͷid * ֵ 0:ʧ -* 1:ɹ +* 1:ɹ +* @note ڲŻ 20220419 wqm +1淶dsuCheckSameLocֵҪн +2ӷֵж */ -UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength); +UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 sourceId); /* * УCI䵥֡ @@ -721,21 +741,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 +931,211 @@ 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); + +/* +* CIRC֡ +* ˵const UINT8 cRcId ĿRC ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1:ݳɹ +* Created By LQ 2025.11.04 +*/ +UINT8 PackCiToLocalRcDataFrame(const UINT8 cRcId); + +/* +* CIRC֡ +* ˵const UINT8* dataBuf ݻ +* const UINT16 dataLength ݳ +* const UINT8 systemId Դ豸ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.04 +*/ +UINT8 ParseCiToLocalRcDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId); + +/* +* RCCI֡ +* ˵const UINT8 cCiId ĿCI ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.05 +*/ +UINT8 PackRcToLocalCiDataFrame(const UINT8 cCiId); + +/* +* RCCI֡ +* ˵const UINT8* dataBuf ݻ +* const UINT16 dataLength ݳ +* const UINT8 systemId Դ豸ID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ݳɹ +* Created By LQ 2025.11.05 +*/ +UINT8 ParseRcToLocalCiDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId); + +/* +* У鱾RCCIĵ֡ +* ˵UINT8* pDataBuf Ϣ +* UINT16 dataLength ݳ +* UINT8 *pErrNo Уʧܹ +* ֵCI_ERROR 0 Уʧ +* CI_SUCCESS 0 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 ParseRcToLocalCiDataCheck(UINT8* pDataBuf, UINT16 dataLength, UINT8* pErrNo); + +/* +* У鱾RCCIĽ· +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiRouteData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCIźŻ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiSignalData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCIļ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiAxisSecData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCI߼ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiLogSecData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCI +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiPhySecData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCI +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiPsdData(const UINT8* dataBuf, UINT16* index); + +/* +* У鱾RCCIѩ +* ˵const UINT8* dataBuf +* UINT16* index +* ֵ0 Уʧ +* 1 Уɹ +* Created By LQ 2025.11.05 +*/ +UINT8 CheckLocalRcToCiSnowData(const UINT8* dataBuf, UINT16* index); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c index 7d9949c..571d4d8 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c @@ -31,6 +31,8 @@ PlatHeartDataStruct RecvHeartDataStru = { 0U }; /*ƽ̨֡ݽṹ*/ PlatGPIODataStruct RecvPlatDataStruGPIO = { 0U };/*ƽ̨0x2D֡ݽṹ GPIOɼ״̬*/ +PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance = { 0U };/*ƽ̨Ӳɼ*/ + /* * źŻλ @@ -61,7 +63,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 +288,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 +471,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 +739,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; @@ -695,7 +798,8 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8 UINT8 phySecStopSteadyFlag = 0u; UINT8 chPhyFree = CI_ERROR; UINT8 gdDLline = 0u; /*·Ƿù·*/ - funcSwitchJumpLockDriveSwitch = GetCiFunctionSwitchConfig(FUNC_SWITCH_JUMPLOCK_DRIVE_SWITCH); + UINT8 cFuncRet = CI_ERROR; + funcSwitchJumpLockDriveSwitch = GetCiFunctionSwitchConfig(FUNC_SWITCH_JUMPLOCK_DRIVE_SWITCH); /*жǷù·*/ gdDLline = GetCiFunctionSwitchConfig(FUNC_CLD_GD_DIANLU_LINE); @@ -729,14 +833,22 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8 phySecLockState = GetPhySecLockState(DeviceId); localCiType = GetLocalCiType(); phyIntruSecVainCheck = PhysicalIntruSecVainCheck(DeviceId); + if (((PHYSICAL_SECTION_LOCK_NORMAL == phySecLockState) || (PHYSICAL_SECTION_LOCK_DELAY == phySecLockState) || (PHYSICAL_SECTION_LOCK_FAULTDELAY == phySecLockState) || ((PHYSICAL_SECTION_LOCK_EXCEPT == phySecLockState) && (CI_TYPE_CLD == localCiType))) && (CI_SUCCESS == phyIntruSecVainCheck)) {/*ջʱʽʱ,쳣Ҳ״̬,ζӦZCδգ20190308*/ - - SetMaskValue(MaskId, dataBuf); + cFuncRet = PhySecLockMaskSideProtectCheck(DeviceId); /**/ + if (CI_SUCCESS== cFuncRet) + { + SetMaskValue(MaskId, dataBuf); + } + else + { + /*㣬0δ*/ + } } else { @@ -1098,7 +1210,7 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*߼߼״̬*/ UINT8 cLogSecLockDir = CI_SYSTEM_DIRECTION_NONE; /*߼շ*/ UINT8 chLogSecBelLogRouteSum = 0U;/*߼߼·Ŀ*/ - + UINT8 chLogSecEmergXianSu = 0U;/*߼νʱ״̬*/ switch (MaskType) { case MASK_TYPE_LOGICSECTION_UTOCCUPY: @@ -1276,6 +1388,19 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN SetMaskValue(MaskId, dataBuf); } + break; + case MASK_TYPE_LOGICSECTION_EMERG_XIANSU: + /* ߼νʱ״̬ */ + chLogSecEmergXianSu = GetLogSecEmergXianSu(DeviceId); + if (LOGSEC_EMERG_XS_SET_NO == chLogSecEmergXianSu) + { + /*δλΪ0*/ + } + else + { + /*λΪ1*/ + SetMaskValue(MaskId, dataBuf); + } break; default: returnValue = CI_ERROR; @@ -1391,6 +1516,8 @@ UINT8 OverlapMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* d returnValue = CI_ERROR; } + + if (CI_SUCCESS == returnValue) { SetMaskValue(MaskId, dataBuf); @@ -1456,6 +1583,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 +1784,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 +1903,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 +2017,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 +2257,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; @@ -2623,6 +2802,9 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) UINT8 devState = 0u; UINT32 laborUnlockStartCycNum = 0u; UINT8 functionId = EFUNC_OVERLAP_VALIDMASK_CHECK; + UINT8 cSndSideProFuncSwitch = 0U; + + cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*ܿ*/ if (0u != rtOverlapLockedId) { @@ -2638,10 +2820,14 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) /*߼һ£ռѹ*/ || (SECTION_OCCUPY_YES == GetPhySecCurMergeState(overlapContainPhySecIdBuf[ii]))) -#endif - { - returnValue = CI_ERROR; - break; +#endif + { + returnValue = CI_ERROR; + break; + } + else + { + /**/ } } @@ -2664,7 +2850,7 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) (SWITCH_LOCK_FENGSUO_NO == GetSwitchFLockState(condSwiDataIdBuf[ii].SwitchId)) && (condSwiDataIdBuf[ii].SwitchPosition == GetSwitchCurPosition(condSwiDataIdBuf[ii].SwitchId))) { - /* ĵΪδҵλȷŷλ*/ + /* ĵΪδҵλȷͨλò룬ŷλ*/ } else @@ -2675,6 +2861,10 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) } } } + else + { + /**/ + } if (CI_SUCCESS == returnValue) { /*ι*/ @@ -2686,13 +2876,12 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) ylockStatus = GetSwitchYLockState(protSwiDataIdBuf[ii].ProtectSwitchId); switchPos = GetSwitchCurPosition(protSwiDataIdBuf[ii].ProtectSwitchId); fengsuoStateus = GetSwitchFLockState(protSwiDataIdBuf[ii].ProtectSwitchId); - if ((SWITCH_LOCK_YINZONG_NO == ylockStatus) - && ((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_DAP == lockStatus)) - && (protSwiDataIdBuf[ii].ProtectPosition == switchPos) + && ((((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_DAP == lockStatus)) && (protSwiDataIdBuf[ii].ProtectPosition == switchPos)) + || (FUNC_SWITCH_ON == cSndSideProFuncSwitch)) && (SWITCH_LOCK_FENGSUO_NO == fengsuoStateus)) { - /* ιҷҵλȷδŷλ*/ + /* ιҷңλȷֶ֧δŷλ*/ } else { @@ -2701,6 +2890,10 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) } } } + else + { + /**/ + } if (CI_SUCCESS == returnValue) { @@ -2714,6 +2907,10 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) returnValue = CI_ERROR; } } + else + { + /**/ + } if (CI_SUCCESS == returnValue) { @@ -2726,6 +2923,10 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) returnValue = CI_ERROR; } } + else + { + /**/ + } /*鱣ι״̬*/ if (CI_SUCCESS == returnValue) @@ -2735,7 +2936,16 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) { SetErrorData(functionId, CI_DEVICE_TYPE_FLOODGATE, devId, devStateType, devState, ESEND_LEVEL_ZERO); } + else + { + /**/ + } } + else + { + /**/ + } + /*˹ǷڵʱУʱзZC,LEUδ*/ if (CI_SUCCESS == returnValue) { @@ -2744,7 +2954,53 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId) { returnValue = CI_ERROR; } + else + { + /**/ + } } + else + { + /**/ + } + + /*ղ̵״̬*/ + if (CI_SUCCESS == returnValue) + { + returnValue = OverlapZhaoChaRelayCheck(rtOverlapLockedId, ESEND_LEVEL_ZERO); + + if (CI_SUCCESS == returnValue) + { + returnValue = CI_SUCCESS; + } + else + { + /*ȴղ̵»Զ˼鲻ʧ*/ + returnValue = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == returnValue) + { + if (FUNC_SWITCH_ON == cSndSideProFuncSwitch) + { + /*ڶΪֶ֧ʱŽв*/ + returnValue = OlapSideProtectConditionCheck(rtOverlapLockedId, 0U, 0U);/*鱣β*/ + } + else + { + /**/ + } + } + else + { + /**/ + } + } else { @@ -2764,18 +3020,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 +3055,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 +3092,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 +3131,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 +3175,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 +3218,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; @@ -2925,22 +3249,32 @@ void PackCiToCimCommData(void) /*CIϵͳͨ״̬*/ - deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI); - pDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI); + deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RCI); + pDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RCI); if ((NULL != pDeviceIdBuf) && (0u != deviceSum)) { for (j = 0u; j < deviceSum; j++) { - transmitState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI, j); + transmitState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RCI, j); /*ID*/ transmitDevSum++; - ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_CI; + ciToCimDataBuffer[i++] = CI_SYSTEM_TYPE_RCI; ciToCimDataBuffer[i++] = pDeviceIdBuf[j]; - ciToCimDataBuffer[i++] = 0U; - /*ͨ*/ + /*RC/CIͨ*/ + dwRecvCycNum = GetCiTransmitRecvDataCycNum(cLocalCiId, CI_SYSTEM_TYPE_RCI, 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 +3305,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 +3338,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 +3357,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 +3993,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); @@ -3659,14 +4029,20 @@ void PackCiToCimDeviceData(void) PhysicalSectionDataStruct* pPhysicalData = NULL; WashMachineDataStruct* pWashMachineData = NULL; GaragedoorDataStruct* pGrageDoorData = NULL; + GaragedoorDataStructCC* pGrageDoorDataCC = NULL; FloodGateDataStruct* pFloodGateData = NULL; + FloodGateDataStructCC* pFloodGateDataCC = 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 +4056,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 +4069,7 @@ void PackCiToCimDeviceData(void) } else { - ciToCimDataBuffer[ii++] = pSwitchData[deviceId].SingleSwitchCurPosition;/*ǰλ*/ + ciToCimDataBuffer[ii++] = chSwitchCurPos;/*ǰλ*/ } @@ -3702,13 +4078,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 +4120,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 +4165,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 +4197,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 +4241,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 +4282,8 @@ void PackCiToCimDeviceData(void) /*ӡ*/ deviceNum = GetGaragedoorSum(); pGrageDoorData = GetGaragedoorData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + pGrageDoorDataCC = GetGaragedoorDataCC(); + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/**/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++) { @@ -3894,7 +4296,7 @@ void PackCiToCimDeviceData(void) ii += 2u; ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GaragedoorState; /*״̬ (ֶ̬)*/ ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GaragedoorAllowCloseFlag; /*ű־ ZC*/ - ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GDAllowCloseFlagIVOC; /*ű־ IVOC*/ + ciToCimDataBuffer[ii++] = pGrageDoorDataCC[deviceId].GDAllowCloseFlagIVOC; /*ű־ IVOC*/ ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GaragedoorModeState; /*ģʽ״̬*/ ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GaragedoorFaultState; /*Ź״̬*/ ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].GaragedoorPangLuState; /*·״̬*/; @@ -3902,7 +4304,7 @@ void PackCiToCimDeviceData(void) ciToCimDataBuffer[ii++] = pGrageDoorData[deviceId].cmdProcessState; /* ״̬ */ LongToChar(pGrageDoorData[deviceId].waiteZCResponseStartCycNum, &ciToCimDataBuffer[ii]);/* ȴZCʼʱ */ ii += 4u; - LongToChar(pGrageDoorData[deviceId].waiteIVOCResponseStartCycNum, &ciToCimDataBuffer[ii]);/* ȴIVOCʼʱ */ + LongToChar(pGrageDoorDataCC[deviceId].waiteIVOCResponseStartCycNum, &ciToCimDataBuffer[ii]);/* ȴIVOCʼʱ */ ii += 4u; LongToChar(pGrageDoorData[deviceId].GaragedoorOpenStartCycNum, &ciToCimDataBuffer[ii]);/* Ŵ򿪿ʼ */ ii += 4u; @@ -3914,7 +4316,8 @@ void PackCiToCimDeviceData(void) /*ӡ*/ deviceNum = GetFloodGateCurSum(); pFloodGateData = GetFloodGateData(); - ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/*PSD ID*/ + pFloodGateDataCC = GetFloodGateDataCC(); + ShortToChar(deviceNum, &ciToCimDataBuffer[ii]);/**/ ii += 2u; for (jj = 0u; jj < deviceNum; jj++) { @@ -3941,13 +4344,15 @@ void PackCiToCimDeviceData(void) ciToCimDataBuffer[ii++] = pFloodGateData[deviceId].CurAgreeCloseStateOut; /* ǰͬ״ֶ̬̬Σ*/ LongToChar(pFloodGateData[deviceId].CurFloodGateDelayCloseStartCyc, &ciToCimDataBuffer[ii]);/* Žӽռѹʱſʼʱ */ ii += 4u; - ciToCimDataBuffer[ii++] = pFloodGateData[deviceId].FloodGateCloseApplyIvocSum; /*Źг*/ - ciToCimDataBuffer[ii++] = pFloodGateData[deviceId].FloodGateCloseAnsIvocSum; /*Źгظ*/ - ciToCimDataBuffer[ii++] = pFloodGateData[deviceId].FloodGateAccessUTFlag; /*ŽӽǷзͨų־*/ + ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateCloseApplyIvocSum; /*Źг*/ + ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateCloseAnsIvocSum; /*Źгظ*/ + ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateAccessUTFlag; /*ŽӽǷзͨų־*/ } /*CIM*/ + debug_infor_printf((const)"\nCIM_SEND_DEVSTATE:%d", ii); + debug_out_array(0xAA, ciToCimDataBuffer, ii); (void)DarkInfoPack(CIM_INFO_DEVICE_STATE, ciToCimDataBuffer, ii); } @@ -4753,7 +5158,7 @@ void PackCiToCimFlyProtectData(void) pFlyData = GetFlyProtectData(chIndex); wTrainId = pFlyData->wTrainId; TrainFlyAxis = pFlyData->flyProtectSecCnt; - (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U) + wTrainId, 0U, &dwTrainId); /*ֽгIDתΪ4ֽڻͨID*/ + (void)dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U) + wTrainId, 0U, &dwTrainId); /*ֽгIDתΪ4ֽڻͨID*/ LongToChar(dwTrainId, &ciToCimDataBuffer[ii]); /* гID */ ii += 4u; @@ -4774,3 +5179,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 + {/**/ + } + + (void)debug_infor_printf((const)"IO Compare Diff OCnum = %d\n", gDiffDataOcNum); + (void)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..9adef2f 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.h @@ -61,6 +61,7 @@ extern "C" { extern PlatHeartDataStruct RecvHeartDataStru; extern PlatGPIODataStruct RecvPlatDataStruGPIO; + extern PlatGPIOToleranceDataStruct gPlatDataGPIOTolercance; /* * źŻλ @@ -380,6 +381,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..6bf5552 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; /* ȷϽ */ @@ -1966,7 +2618,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType) pFlyData = GetFlyProtectData(chIndex); wTrainId = pFlyData->wTrainId; TrainFlyAxis = pFlyData->flyProtectSecCnt; - chRtn = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U) + wTrainId, 0U, &dwTrainId); /*ֽгIDתΪ4ֽڻͨID*/ + chRtn = dquDevName2HlhtId((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U) + wTrainId, 0U, &dwTrainId); /*ֽгIDתΪ4ֽڻͨID*/ if (chRtn == CI_SUCCESS) {/*ͨIDѯɹ*/ LongToChar(dwTrainId, &szToGateWayDataBuf[ii]); /* гID */ @@ -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..f8d887f 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 { @@ -156,7 +166,7 @@ UINT8 ParseIteToCiDataFrame(const UINT8* pDataBuf, const UINT16 dataLength, cons wIteName = (CI_SYSTEM_TYPE_ITE) * 256U + systemId; cLocalCiId = GetSystemParaLocalCiId(); - wCiName = (CI_SYSTEM_TYPE_CI) * 256U + cLocalCiId; + wCiName = (CI_SYSTEM_TYPE_RCI) * 256U + cLocalCiId; /*ͨϢͷ*/ strHlhtGalHead.devInterInfoType = ShortFromChar(&pDataBuf[ii]); @@ -373,7 +383,7 @@ UINT8 PackCiToIteDataFrame(const UINT8 iteId, const UINT16 iteLogId) { /*ȻȡʱϢȡɹż*/ cLocalCiId = GetSystemParaLocalCiId(); - cFuncRet = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_CI * 256U + cLocalCiId), 0U, &dwCiEtcsId); + cFuncRet = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_RCI * 256U + cLocalCiId), 0U, &dwCiEtcsId); cFuncRet &= dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_ITE * 256U) + iteId, iteLogId, &dwIteEtcsId); cFuncRet &= GetCiEmapCheckVer(cLocalCiId, &dwEmapCheckVer, CI_SYSTEM_TYPE_ITE); pstrHlhtHeadCtx = GetIteHLHTHeadCtx(iteId, iteLogId); /*ȡָITEͨͷ*/ diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c index 828e6b0..c36ca37 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackManage.c @@ -206,6 +206,13 @@ UINT8 ParseOtherSysToCiData(void) UINT8 isBreak = 0u; /*˳*/ UINT16 wTiocRcvAtsGtwyDevTypeId = 0U; UINT8 errorNO_Type = 0u; /*CIӿУݹ*/ + UINT8 cLocalDevType = 0U; /*豸*/ + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cWorkMode = 0U;/*ǰģʽ*/ + UINT8 chCurSystemAreaState = 0U; /*ǰϵͳ״̬*/ + + cWorkMode = GetLocalRcWorkMode(); + curSysCount = MSCP_GetSysCount(); wTiocRcvAtsGtwyDevTypeId = GetTiocTrnsmtGtwyDevTypeId(); @@ -232,36 +239,20 @@ UINT8 ParseOtherSysToCiData(void) debug_out_array(0x11, data, (UINT16)dataLen); #endif/*ƽ̨ӡ*/ #endif/*־ӡ*/ - ocId = (UINT8)GetCiIdByOcId(devId); + ocId = GetCiIdByOcId(devId); chLocalCiId = GetSystemParaLocalCiId(); if (ocId == chLocalCiId)/*oc idci idΪid*/ { oc2ciParseResult = ParseOcToCiDataFrame(data, (UINT16)dataLen, devId); - if (CI_ERROR == oc2ciParseResult) + if (CI_SUCCESS == oc2ciParseResult) { - /*OCݴѾ10ڣͨжϣȫ*/ - } - else if (CI_CHECK_LEN_ERROR == oc2ciParseResult) - { - /*УѴOCԭʼ豸״̬ȫ*/ - /* Уʧܴ - * 1. ڣOCԭʼݻ豸״̬״̬DI忨״̬DO忨״̬ðȫ̬ - * 2. ΪCIOCͨڲ£CI OCͨжҲͨжϣ豸״̬ȫ - */ - ResetOcOriginalState(devId); - ConvertOcOriginDataToPtData();/*ѽOC忨תΪOCλ*/ - ConvertOcOriginDataToOcSigSwDev();/*ѽOC豸תΪOC źŻ OC 豸ݺOC*/ - debug_infor_printf((const)"OC Id %d len check ERROR.", devId); - } - else if (CI_SUCCESS == oc2ciParseResult) - {/*ɹתOC忨*/ - ConvertOcOriginDataToPtData();/*ѽOC忨תΪOCλ*/ - ConvertOcOriginDataToOcSigSwDev();/*ѽOC豸תΪOC źŻ OC 豸ݺOC*/ - debug_infor_printf((const)"\nconvert succeed\n"); + /*ɹProcessOcToCiDatд(RCʱCIͬ)*/ + debug_infor_printf((const)"\nOC %d DataCheck succeed\n", devId); } else { /*ֵʲôҲ*/ + /*OCݴδͬݣProcessOcToCiDatлͨж*/ } } else @@ -283,8 +274,17 @@ UINT8 ParseOtherSysToCiData(void) { debug_infor_printf((const)"\nATS_RECV:%d", dataLen); - checkResult = ParseAtsOrXianDiToCiDataFrame(data, (UINT16)dataLen); - (void)DarkInfoPack(CIM_INFO_ATS_TO_RCI_DATA, data, (UINT16)dataLen); + checkResult = ParseAtsOrXianDiToCiDataFrame(data, (UINT16)dataLen, CI_SYSTEM_TYPE_ATS, devId); + + chCurSystemAreaState = GetLocalCiBackUpPattern(); + if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState) + { + (void)DarkInfoPack(CIM_INFO_ATS_TO_RCI_DATA, data, (UINT16)dataLen); + } + else + { + ; /*ϵ*/ + } } else { @@ -312,9 +312,18 @@ UINT8 ParseOtherSysToCiData(void) #endif/*ƽ̨ӡ*/ #endif - checkResult = ParseAtsOrXianDiToCiDataFrame(data, (UINT16)dataLen); + checkResult = ParseAtsOrXianDiToCiDataFrame(data, (UINT16)dataLen, CI_SYSTEM_TYPE_XIANDI, devId); - (void)DarkInfoPack(CIM_INFO_ATS_TO_RCI_DATA, data, (UINT16)dataLen); + chCurSystemAreaState = GetLocalCiBackUpPattern(); + if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState) + { + (void)DarkInfoPack(CIM_INFO_ATS_TO_RCI_DATA, data, (UINT16)dataLen); + } + else + { + ; /*ϵ*/ + } + if (CI_ERROR == checkResult) { debug_infor_printf((const)"parse xiandi id %d error.", devId); @@ -324,6 +333,7 @@ UINT8 ParseOtherSysToCiData(void) } break; case CI_SYSTEM_TYPE_CI: + case CI_SYSTEM_TYPE_RC: /*CI*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ @@ -332,51 +342,108 @@ UINT8 ParseOtherSysToCiData(void) #endif/*ƽ̨ӡ*/ #endif - /*жǷͬһ·ͬ·ʹûͨӿڣͬһ·ʹԼӿ*/ - sameLineCi = IsSameLineCI(devId, GetSystemParaLocalCiId()); - if (SAME_LINE_YES == sameLineCi) /*ͬ*/ + cLocalDevType = Get2oo2SheBeiType(); + cLocalCiId = GetSystemParaLocalCiId(); + startLockFlag = GetStartLockFlag(); + if (devType == cLocalDevType) { - startLockFlag = GetStartLockFlag(); - if (CI_START_LOCK_NO == startLockFlag) - { - checkResult = ParseCiToCiDataCheck(data, (UINT16)dataLen, &errorNO_Type); /*CIݴУ*/ - if (CI_SUCCESS != checkResult) + /*RCCI*/ + /*жǷͬһ·ͬ·ʹûͨӿڣͬһ·ʹԼӿ*/ + sameLineCi = IsSameLineCI(devId, cLocalCiId); + if (SAME_LINE_YES == sameLineCi) /*ͬ*/ + { + if (CI_START_LOCK_NO == startLockFlag) { - debug_infor_printf((const)"check parse ci step %d error", errorNO_Type); - } - else - { - checkResult = ParseCiToCiDataFrame(data, (UINT16)dataLen); - if (CI_SUCCESS != checkResult) /**/ + checkResult = ParseCiToCiDataCheck(data, (UINT16)dataLen, &errorNO_Type); /*CIݴУ*/ + if (CI_SUCCESS != checkResult) { - debug_infor_printf((const)"parse ci id %d error", devId); + debug_infor_printf((const)"check parse ci step %d error", errorNO_Type); } else { + checkResult = ParseCiToCiDataFrame(data, (UINT16)dataLen, devId); + if (CI_SUCCESS != checkResult) /**/ + { + debug_infor_printf((const)"parse ci id %d error", devId); + } + else + { + } } } + else + { + } + } + else if (SAME_LINE_NO == sameLineCi) /*ͬ*/ + { + checkResult = ParseCiToCiDataFrameHLHT(data, (UINT16)dataLen, devId); + if (CI_ERROR == checkResult) /**/ + { + debug_infor_printf((const)"parse hlht ci id %d error", devId); + } + else + { + } } else { - } - } - else if (SAME_LINE_NO == sameLineCi) /*ͬ*/ - { - checkResult = ParseCiToCiDataFrameHLHT(data, (UINT16)dataLen, devId); - if (CI_ERROR == checkResult) /**/ - { - debug_infor_printf((const)"parse hlht ci id %d error", devId); - } - else - { + debug_infor_printf((const)"ci id %d sameLineCi:%d error", devId, sameLineCi); } } else { - debug_infor_printf((const)"ci id %d sameLineCi:%d error", devId, sameLineCi); - } + if (CI_START_LOCK_NO == startLockFlag) + { + /*CI-RC*/ + if ((CI_SYSTEM_TYPE_CI == cLocalDevType) && (CI_SYSTEM_TYPE_RC == devType)) + { + /*CIݴУ*/ + checkResult = ParseRcToLocalCiDataCheck(data, (UINT16)dataLen, &errorNO_Type); + if (CI_SUCCESS != checkResult) + { + debug_infor_printf((const)"ParseRcToLocalCiDataCheck: Step %d Error", errorNO_Type); + } + else + { + /*ǰΪCIRC͵*/ + checkResult = ParseRcToLocalCiDataFrame(data, (UINT16)dataLen, cLocalCiId); + if (CI_SUCCESS == checkResult) + { + /**/ + } + else + { + debug_infor_printf((const)"\nParseRcToLocalCiDataFrame Error"); + } + } + } + else if ((CI_SYSTEM_TYPE_RC == cLocalDevType) && (CI_SYSTEM_TYPE_CI == devType)) + { + /*ǰΪRCCI͵*/ + checkResult = ParseCiToLocalRcDataFrame(data, (UINT16)dataLen, cLocalCiId); + + if (CI_SUCCESS == checkResult) + { + /**/ + } + else + { + debug_infor_printf((const)"\nParseCiToLocalRcDataFrame Error"); + } + } + else + { + /*쳣֧*/ + } + } + else + { + /*δϵ磬*/ + } + } break; case CI_SYSTEM_TYPE_ZC: @@ -410,16 +477,47 @@ UINT8 ParseOtherSysToCiData(void) break; case CI_SYSTEM_TYPE_VOBC: /*VOBC*/ - debug_infor_printf((const)"\nVOBC_RECV:%d", (UINT16)dataLen); - debug_out_array(0xAA, data, (UINT16)dataLen); - checkResult = ParseVobcToCiDataFrame(data, (UINT16)dataLen, devId, srcDevLogicId); - if (CI_ERROR == checkResult) /**/ + if (RC_WORK_MODE_TIOC == cWorkMode) { - debug_infor_printf((const)"parse vobc id %d,logic id %d error", devId, srcDevLogicId); + debug_infor_printf((const)"\nRC_VOBC_CBTC_RECV:%d", (UINT16)dataLen); + debug_out_array(0xAA, data, (UINT16)dataLen); + /*ģʽµVOBCģʽ*/ + checkResult = ParseVobcToRcDataCC(data, (UINT16)dataLen, devId, srcDevLogicId); + if (CI_ERROR == checkResult) /**/ + { + debug_infor_printf((const)"parse vobc id %d,logic id %d error", devId, srcDevLogicId); + } + else + {/*޴*/ + } } else { + debug_infor_printf((const)"\nVOBC_CBTC_RECV:%d", (UINT16)dataLen); + debug_out_array(0xAA, data, (UINT16)dataLen); + /*CIģʽüк*/ + checkResult = ParseVobcToCiDataFrame(data, (UINT16)dataLen, devId, srcDevLogicId); + if (CI_ERROR == checkResult) /**/ + { + debug_infor_printf((const)"parse vobc id %d,logic id %d error", devId, srcDevLogicId); + } + else + {/*޴*/ + } + } + break; + case CI_SYSTEM_TYPE_IVOC: /*IVOC*/ + debug_infor_printf((const)"\nVOBC_PBTACS_RECV:%d", (UINT16)dataLen); + debug_out_array(0xAA, data, (UINT16)dataLen); + + checkResult = ParseIvocToRcDataFrame(data, (UINT16)dataLen, devId, srcDevLogicId); + if (CI_ERROR == checkResult) /**/ + { + debug_infor_printf((const)"parse ivoc id %d,logic id %d error", devId, srcDevLogicId); + } + else + {/*޴*/ } break; @@ -622,10 +720,18 @@ UINT8 PackCiToOtherSysData(void) UINT32 fsfbOutQueIdx = 0u; /*fsfbλ*/ UINT16 fsfbOutQueFramLen = 0u; /*fsfb֡*/ UINT8 fsfbBtmHead[5] = { 0 }; /*fsfb btm֡ͷ*/ - UINT8 chTiocRcvAtsGtwyDevTypeId = 0U; unsigned long long cost[20] = { 0U }; UINT32 dwFlyProtectOverCyc = GetFlyProtectOverCyc(); + UINT8 chSendXiandiorAtsMaskBuf[CI_TO_ATS_DATA_LEN_MAX] = { 0U }; /*͸ֵػATSλ*/ + UINT8 cSysType = 0U; /*ϵͳ*/ + UINT8 cLocalCiType = 0U; + UINT8 cLocalCiId = 0U; /*ID*/ + UINT8 cLocalDevType = 0U; /*豸*/ + UINT8 cStartLockFlag = 0U; /*ϵ־*/ + UINT8 cRcWorkMode = 0U; + + cRcWorkMode = GetLocalRcWorkMode(); chTiocRcvAtsGtwyDevTypeId = (UINT8)GetTiocTrnsmtGtwyDevTypeId(); curSysCount = MSCP_GetSysCount(); @@ -634,6 +740,8 @@ UINT8 PackCiToOtherSysData(void) if(0U == dwFlyProtectOverCyc) { + /*λϢ*/ + (void)MaskPack(CI_SYSTEM_TYPE_XIANDI, chSendXiandiorAtsMaskBuf); /*****ֵ*****/ deviceSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_XIANDI); /*ȡֵͨ豸*/ deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_XIANDI); /*ȡֵͨ豸ID*/ @@ -648,7 +756,7 @@ UINT8 PackCiToOtherSysData(void) for (ii = 0u; ii < deviceSum; ii++) { /*ֵվ֡*/ - reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_XIANDI, CI_ATS_STATION_FRAME); + reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_XIANDI, CI_ATS_STATION_FRAME, chSendXiandiorAtsMaskBuf); if (CI_ERROR == reVal) { /**/ @@ -666,7 +774,7 @@ UINT8 PackCiToOtherSysData(void) for (ii = 0u; ii < deviceSum; ii++) { /*ֵ豸֡*/ - reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_XIANDI, CI_ATS_DEVICE_STATE_FRAME); + reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_XIANDI, CI_ATS_DEVICE_STATE_FRAME, chSendXiandiorAtsMaskBuf); if (CI_ERROR == reVal) { /**/ @@ -698,7 +806,7 @@ UINT8 PackCiToOtherSysData(void) { /*ATSվ֡*/ - reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS, CI_ATS_STATION_FRAME); + reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS, CI_ATS_STATION_FRAME, chSendXiandiorAtsMaskBuf); if (CI_ERROR == reVal) { @@ -713,7 +821,7 @@ UINT8 PackCiToOtherSysData(void) else { /*ATS豸֡*/ - reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS, CI_ATS_DEVICE_STATE_FRAME); + reVal = PackCiToAtsOrXianDiData(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS, CI_ATS_DEVICE_STATE_FRAME, chSendXiandiorAtsMaskBuf); if (CI_ERROR == reVal) { /**/ @@ -901,6 +1009,51 @@ UINT8 PackCiToOtherSysData(void) } } + /*CI-RC*/ + cStartLockFlag = GetStartLockFlag(); + if (CI_START_LOCK_NO == cStartLockFlag) + { + cSysType = GetSystemWorkType(); + cLocalCiType = GetLocalCiType(); + if ((SYSTEM_WORK_MODE_ALL == cSysType) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType))) + { + /*˫ϵͳµߺԳ߲ŽбCI-RC*/ + cLocalCiId = GetSystemParaLocalCiId(); + cLocalDevType = Get2oo2SheBeiType(); + if (CI_SYSTEM_TYPE_CI == cLocalDevType) + { + reVal = PackCiToLocalRcDataFrame(cLocalCiId); /*CIRC*/ + if (CI_SUCCESS == reVal) + { + /**/ + } + else + { + debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error."); + } + } + else + { + reVal = PackRcToLocalCiDataFrame(cLocalCiId); /*RCCI*/ + if (CI_SUCCESS == reVal) + { + /**/ + } + else + { + debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error."); + } + } + } + else + { + /*ϵͳ򳡶β漰*/ + } + } + else + { + /*δϵ磬*/ + } /*****LEU*****/ deviceSum = 0u; @@ -930,8 +1083,8 @@ UINT8 PackCiToOtherSysData(void) cost[2] = MSCP_GetTick(); /*****VOBC*****/ - /*VOBC*/ - reVal = PackCiToVobcData(); + /*CIģʽVOBCݣRCģʽIVOC*/ + reVal = PackVobcData(); if (CI_ERROR == reVal) { /**/ @@ -954,6 +1107,16 @@ UINT8 PackCiToOtherSysData(void) } + /*RCģʽִи510*/ + if (RC_WORK_MODE_TIOC == cRcWorkMode) + { + /*RC-VOBC*/ + reVal = PackRcToVobcData(); + if (CI_ERROR == reVal) + { + + } + } /*****PSD******/ deviceSum = 0u; deviceIdBuf = NULL; @@ -1008,11 +1171,15 @@ 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 +1198,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..de386f7 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; } @@ -218,13 +226,11 @@ UINT8 PackCiToOcData( UINT8 deviceId) UINT8 boardNum = 0u;/*忨Ŀ*/ UINT16 i = 0u; UINT32 ii = 0u; - UINT16 mm = 0u; UINT8 kk = 0u; UINT16 nn = 0u; UINT16 relayId = 0u; UINT8 relayDrvState = 0u; - UINT32 ciEtcsId = 0u; - UINT32 ocEtcsId = 0u; + UINT32 ciEtcsId = 0u;/*ʶ*/ UINT32 emapCheckVer = 0u; UINT8 retVal= CI_ERROR; UINT8 localCiId = GetSystemParaLocalCiId(); /*ID*/ @@ -238,8 +244,9 @@ UINT8 PackCiToOcData( UINT8 deviceId) UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; UINT16 OcDevName = 0U; /*OCƣ+ID*/ - UINT8 chSwitch = GetCiFunctionSwitchConfig(FUNC_OC_100_OR_200); - UINT8 chLocalOcType = GetLocalOcPattern(); /*OC*/ + UINT16 deviceSum = 0u; + UINT16 kqChangeCommand = 0u;/*Ȩл*/ + UINT8 chCurSystemAreaState = 0u; /*ģʽ*/ #if 0 QueueClear(CiToOcDataQueue); /**/ #endif @@ -266,13 +273,12 @@ UINT8 PackCiToOcData( UINT8 deviceId) pOcData = &m_OcToCiOrginDataArr[i]; OcDevName = (CI_SYSTEM_TYPE_OC) * 256U + deviceId; emapCheckVer = GetCiTranOcDataCheckVer(localCiId, OcDevName); - ciEtcsId = localCiId; - ocEtcsId = deviceId; + ciEtcsId = (CI_SYSTEM_TYPE_RCI)* 256U + localCiId; ShortToChar(CI_OC_INTERFACE, &Ci2OcDataBuffer[ii]);/*ӿͣCI-OCӿ0206*/ ii += 2u; LongToChar(ciEtcsId, &Ci2OcDataBuffer[ii]);/*ͷʶϢ*/ ii += 4u; - LongToChar(ocEtcsId, &Ci2OcDataBuffer[ii]);/*շʶϢ*/ + LongToChar(OcDevName, &Ci2OcDataBuffer[ii]);/*շʶϢ*/ ii += 4u; LongToChar(emapCheckVer, &Ci2OcDataBuffer[ii]);/*ӵͼ汾УϢ*/ ii += 4u; @@ -280,9 +286,9 @@ UINT8 PackCiToOcData( UINT8 deviceId) ii += 4u; ShortToChar((UINT16)appCycleTime, &Ci2OcDataBuffer[ii]);/*豸ͨѶ*/ ii += 2u; - LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_OC, (UINT8)pOcData->OcId), &Ci2OcDataBuffer[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ + LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_OC, deviceId), &Ci2OcDataBuffer[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ ii += 4u; - LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_OC, (UINT8)pOcData->OcId), &Ci2OcDataBuffer[ii]);/*յһϢʱк*/ + LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_OC, deviceId), &Ci2OcDataBuffer[ii]);/*յһϢʱк*/ ii += 4u; Ci2OcDataBuffer[ii++] = (UINT8)CI_OC_PRTCL_VER;/*CI_OCӿЭ汾*/ ii += 2u;/*ͨñͷеӦò㱨ܳ*/ @@ -293,20 +299,26 @@ UINT8 PackCiToOcData( UINT8 deviceId) ii += 2u; ii += 2u;/*Ԥ2ֽ*/ - ShortToChar(pOcData->OcDeviceNum, &Ci2OcDataBuffer[ii]);/*豸*/ - ii += 2u; - for (kk = 0u; kk < pOcData->OcDeviceNum; kk++)/*豸*/ + /*ñʶ*/ + chCurSystemAreaState = GetLocalCiBackUpPattern(); + Ci2OcDataBuffer[ii++] = chCurSystemAreaState;/*0x55 0xaa 0xFF*/ + + if (OC_HAVE_YJK == pOcData->chHaveYjk) { - if( MAX_OC_DEVICE_NUM == kk) - { - retVal = CI_ERROR; - break; - } - else - { - } - switch (pOcData->OcDevices[kk].DeviceType) + deviceSum = pOcData->OcDeviceNum+ 1u; /*豸źŻ++Ȩл*/ + } + else + { + deviceSum = pOcData->OcDeviceNum; + } + if (MAX_OC_DEVICE_NUM > deviceSum) + { + ShortToChar(deviceSum, &Ci2OcDataBuffer[ii]);/*豸*/ + ii += 2u; + for (kk = 0u; kk < pOcData->OcDeviceNum; kk++)/*豸*/ { + switch (pOcData->OcDevices[kk].DeviceType) + { case CI_DEVICE_TYPE_SWITCH:/*豸*/ { Ci2OcDataBuffer[ii++] = CI_DEVICE_TYPE_SWITCH; @@ -334,258 +346,295 @@ UINT8 PackCiToOcData( UINT8 deviceId) ii += 5u; break; } - } - }/*Ϊoc豸*/ - - pBoardNumStartIndex = ii;/*ֵ*/ - ii += 2u;/*ֵ*/ - - /*ʼ忨*/ - for (kk = 0u; kk < GetDrvRelayStructSum(); kk++) - { - BoardDataStruct* pDrvBoard = GetDrvRelayStruct(); - if (pDrvBoard[kk].OcId == pOcData->OcId) - { - /*ɢ忨*/ - if (1u == ocsBoardsIsScatter[pOcData->OcId][pDrvBoard[kk].BoardAddress][0]) - { - ciSiToOc[ciSiToOcIdx++] = 0u; - ciSiToOc[ciSiToOcIdx++] = pDrvBoard[kk].BoardAddress; - tmpInd = (UINT16)(ciSiToOcIdx); - for (nn = 0u; nn < 24u / 2u; nn++) - {/*ȰеSI忨̵״̬ó*/ - ciSiToOc[tmpInd] = (UINT8)(OC_RELAY_DOWN << 4u) + OC_RELAY_DOWN; - tmpInd++; - } - /*̵ 8B*/ - for (nn = 0u; nn < 24u / 2u; nn++) - { - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U]; - - if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) - { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ - - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_DOWN; - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ - - /*drvData = drvData | (0x0001 << jj);*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_UP; - } - else - { /*̵Ч*/ - - /*̵*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_DOWN; - } - - } - else - { - } - - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U + 1U]; - - if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) - { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ - - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ - - /*drvData = drvData | (0x0001 << jj);*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_UP << 4u); - } - else - { /*̵Ч*/ - - /*̵*/ - ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); - } - - } - else - { - } - ciSiToOcIdx++; - } - - siBoardNum++; - } - /*ȫ̵忨 SOR*/ - else if (2u == ocsBoardsIsScatter[pOcData->OcId][pDrvBoard[kk].BoardAddress][0]) + }/*Ϊ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 + {/**/ + } + } + else + { + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + pBoardNumStartIndex = ii;/*ֵ*/ + ii += 2u;/*ֵ*/ + + /*ʼ忨*/ + for (kk = 0u; kk < GetDrvRelayStructSum(); kk++) + { + BoardDataStruct* pDrvBoard = GetDrvRelayStruct(); + if (pDrvBoard[kk].OcId == pOcData->OcId) { - ciSorToOc[ciSorToOcIdx++] = pDrvBoard[kk].BoardAddress; - tmpInd = ciSorToOcIdx; - for (nn = 0U; nn < 8u / 2u; nn++) - {/*ȰеSOR忨̵״̬ó*/ - ciSorToOc[tmpInd] = (OC_RELAY_DOWN << 4) + OC_RELAY_DOWN; - tmpInd++; - } - - /*̵ 8B*/ - for (nn = 0U; nn < 8u / 2u; nn++) + /*ɢ忨*/ + if (1u == ocsBoardsIsScatter[pOcData->OcId][pDrvBoard[kk].BoardAddress][0]) { - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u]; - - if ((0U != relayId) && (relayId < RELAY_SUM_MAX)) + ciSiToOc[ciSiToOcIdx++] = 0u; + ciSiToOc[ciSiToOcIdx++] = pDrvBoard[kk].BoardAddress; + tmpInd = (UINT16)(ciSiToOcIdx); + for (nn = 0u; nn < 24u / 2u; nn++) + {/*ȰеSI忨̵״̬ó*/ + ciSiToOc[tmpInd] = (UINT8)(OC_RELAY_DOWN << 4u) + OC_RELAY_DOWN; + tmpInd++; + } + /*̵ 8B*/ + for (nn = 0u; nn < 24u / 2u; nn++) { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U]; - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_DOWN; - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ + if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_DOWN; + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ + + /*drvData = drvData | (0x0001 << jj);*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_UP; + } + else + { /*̵Ч*/ + + /*̵*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0xf0u) | OC_RELAY_DOWN; + } - /*drvData = drvData | (0x0001 << jj);*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_UP; } else - { /*̵Ч*/ - - /*̵*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_DOWN; + { } - } + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U + 1U]; - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U + 1U]; + if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ - if ((0U != relayId) && (relayId < RELAY_SUM_MAX)) - { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_DOWN << 4U); - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ + /*drvData = drvData | (0x0001 << jj);*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_UP << 4u); + } + else + { /*̵Ч*/ + + /*̵*/ + ciSiToOc[ciSiToOcIdx] = (ciSiToOc[ciSiToOcIdx] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); + } - /*drvData = drvData | (0x0001 << jj);*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_UP << 4U); } else - { /*̵Ч*/ + { + } + ciSiToOcIdx++; + } + + siBoardNum++; + if (MAX_OC_BOARD_NUM<= siBoardNum) + { + retVal = CI_ERROR; + break; + } + + } + /*ȫ̵忨 SOR*/ + else if (2u == ocsBoardsIsScatter[pOcData->OcId][pDrvBoard[kk].BoardAddress][0]) + { + ciSorToOc[ciSorToOcIdx++] = pDrvBoard[kk].BoardAddress; + tmpInd = (UINT16)ciSorToOcIdx; + for (nn = 0U; nn < 8u / 2u; nn++) + {/*ȰеSOR忨̵״̬ó*/ + ciSorToOc[tmpInd] = (OC_RELAY_DOWN << 4) + OC_RELAY_DOWN; + tmpInd++; + } + + /*̵ 8B*/ + for (nn = 0U; nn < 8u / 2u; nn++) + { + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u]; + + if ((0U != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_DOWN; + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ + + /*drvData = drvData | (0x0001 << jj);*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_UP; + } + else + { /*̵Ч*/ + + /*̵*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0xf0U) | OC_RELAY_DOWN; + } - /*̵*/ - ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_DOWN << 4U); } + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2U + 1U]; + + if ((0U != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_DOWN << 4U); + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ + + /*drvData = drvData | (0x0001 << jj);*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_UP << 4U); + } + else + { /*̵Ч*/ + + /*̵*/ + ciSorToOc[ciSorToOcIdx] = (ciSorToOc[ciSorToOcIdx] & 0x0fU) | (UINT8)(OC_RELAY_DOWN << 4U); + } + + } + ciSorToOcIdx++; + } + + sorBoardNum++; + if (MAX_OC_BOARD_NUM <= sorBoardNum) + { + retVal = CI_ERROR; + break; + } + } + else + { + /*忨ַ 2B*/ + Ci2OcDataBuffer[ii++] = 0u; + Ci2OcDataBuffer[ii++] = pDrvBoard[kk].BoardAddress; + tmpInd = (UINT16)(ii); + for (nn = 0u; nn < DRV_BOARD_POSITION_MAX / 2u; nn++) + {/*ȰеDO忨̵״̬ó*/ + Ci2OcDataBuffer[tmpInd] = (UINT8)(OC_RELAY_DOWN << 4u) + OC_RELAY_DOWN; + tmpInd++; + } + /*̵ 8B*/ + for (nn = 0u; nn < DRV_BOARD_POSITION_MAX / 2u; nn++) + { + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u]; + + if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_DOWN; + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ + + /*drvData = drvData | (0x0001 << jj);*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_UP; + } + else + { /*̵Ч*/ + + /*̵*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_DOWN; + } + + } + else + { + } + + relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u + 1u]; + + if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) + { + relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ + + if (RELAY_STATE_DOWN == relayDrvState) + { /*̵*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); + } + else if (RELAY_STATE_UP == relayDrvState) + { /*̵*/ + + /*drvData = drvData | (0x0001 << jj);*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_UP << 4u); + } + else + { /*̵Ч*/ + + /*̵*/ + Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); + } + + } + else + { + } + ii++; + } + + boardNum++; + if (MAX_OC_BOARD_NUM <= boardNum) + { + retVal = CI_ERROR; + break; } - ciSorToOcIdx++; } - sorBoardNum++; } else { - /*忨ַ 2B*/ - Ci2OcDataBuffer[ii++] = 0u; - Ci2OcDataBuffer[ii++] = pDrvBoard[kk].BoardAddress; - tmpInd = (UINT16)(ii); - for (nn = 0u; nn < DRV_BOARD_POSITION_MAX / 2u; nn++) - {/*ȰеDO忨̵״̬ó*/ - Ci2OcDataBuffer[tmpInd] = (UINT8)(OC_RELAY_DOWN << 4u) + OC_RELAY_DOWN; - tmpInd++; - } - /*̵ 8B*/ - for (nn = 0u; nn < DRV_BOARD_POSITION_MAX / 2u; nn++) - { - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u]; - - if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) - { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ - - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_DOWN; - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ - - /*drvData = drvData | (0x0001 << jj);*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_UP; - } - else - { /*̵Ч*/ - - /*̵*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0xf0u) | OC_RELAY_DOWN; - } - - } - else - { - } - - relayId = pDrvBoard[kk].RelayIdBuf[nn * 2u + 1u]; - - if ((0u != relayId) && (relayId < RELAY_SUM_MAX)) - { - relayDrvState = GetRelayDriveState(relayId);/*䵽ֽ*/ - - if (RELAY_STATE_DOWN == relayDrvState) - { /*̵*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); - } - else if (RELAY_STATE_UP == relayDrvState) - { /*̵*/ - - /*drvData = drvData | (0x0001 << jj);*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_UP << 4u); - } - else - { /*̵Ч*/ - - /*̵*/ - Ci2OcDataBuffer[ii] = (Ci2OcDataBuffer[ii] & 0x0fu) | (UINT8)(OC_RELAY_DOWN << 4u); - } - - } - else - { - } - ii++; - } - - boardNum++; - } - - } - else - { } } - Ci2OcDataBuffer[pBoardNumStartIndex] = (UINT8)((boardNum >> 8u) & 0xffu); - Ci2OcDataBuffer[pBoardNumStartIndex + 1U] = (UINT8)(boardNum & 0xffu); - ShortToChar(siBoardNum, &Ci2OcDataBuffer[ii]); - ii += 2u; - (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 (CI_SUCCESS == retVal) { + Ci2OcDataBuffer[pBoardNumStartIndex] = (UINT8)((boardNum >> 8u) & 0xffu); + Ci2OcDataBuffer[pBoardNumStartIndex + 1U] = (UINT8)(boardNum & 0xffu); + + ShortToChar(siBoardNum, &Ci2OcDataBuffer[ii]); + ii += 2u; + (void)CommonMemCpy(&Ci2OcDataBuffer[ii], OC_TO_CI_DATA_LEN_MAX - ii, ciSiToOc, ciSiToOcIdx); + ii += ciSiToOcIdx; + /*OC200 ݽṹ25ϲ֧SOR*/ Ci2OcDataBuffer[ii] = sorBoardNum; ii += 1U; (void)CommonMemCpy(&Ci2OcDataBuffer[ii], OC_TO_CI_DATA_LEN_MAX - ii, ciSorToOc, ciSorToOcIdx); ii += ciSorToOcIdx; - } + } #if 0 /*ʽʵ飬ԺҪٴ*/ if (curCycleNum == xingshiTestStartCycle && 1 == xingshiTestStart) @@ -604,21 +653,8 @@ UINT8 PackCiToOcData( UINT8 deviceId) Ci2OcDataBuffer[ii++] = 0xff; } #endif - /*OC100OCݽṹ24 ӿڱԤ20ֽ*/ - if ((FUNC_SWITCH_OFF == chSwitch) || (OC_DATA_TYPE_OLD == chLocalOcType)) - { - Ci2OcDataBuffer[ii++] = 0xffu; - Ci2OcDataBuffer[ii++] = 0xffu; - for (mm = 2u; mm < 20u; mm++)/*Ԥ*/ - { - Ci2OcDataBuffer[ii++] = 0xffu; - } - } - else - { - ; /*OC200 OC3.0ɾԤ20ֽ*/ - } + /*OC200 OC3.0ɾԤ20ֽ*/ Ci2OcDataBuffer[31] = (UINT8)(((ii - 33U) >> 8u) & 0xffu); Ci2OcDataBuffer[32] = (UINT8)((ii - 33U) & 0xffu);/*䳤*/ @@ -653,7 +689,7 @@ UINT8 PackCiToOcData( UINT8 deviceId) return retVal; } - +#if 0 /* * УOcCIĵ֡ݳȺϷ * ˵ const UINT8* dataBuf, ݻ @@ -696,6 +732,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,18 +742,19 @@ 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;/*ת޻״̬ռֽ*/ - UINT8 chLocalOcType = GetLocalOcPattern(); /*ȡOC汾Ϣ*/ + /*OC ټ24.1 ĿʹOC100*/ UINT16 wSwitchIncludeZzjIndex = LEN_OC_UP_TO_DEV_NO;/*ת޻*/ UINT16 wOffSet = 0U; if(NULL != dataBuf) { 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; @@ -727,284 +765,218 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength) } } - if (FUNC_SWITCH_ON == chSwitch) - { - /*OC-200 ҽOCӿУ*/ - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷݽֹ*/ + /*OC-200 ҽOCӿУ*/ - if (OC_DATA_TYPE_NEW == chLocalOcType) - { - /*ݳ*/ - switchNum = dataBuf[LEN_OC_UP_TO_DEV_NO - 2U]; - for (ii = 0U; ii < switchNum; ii++) - { - wDevInfoIndex += 3U; - wZzjStateNumber = wZzjStateNumber + (UINT16)(dataBuf[wDevInfoIndex] * 1U); - wDevInfoIndex += 1U + (UINT16)dataBuf[wDevInfoIndex] * 1U; - switchBoardNum += (UINT8)dataBuf[wDevInfoIndex]; - wDevInfoIndex += 1U + (UINT16)dataBuf[wDevInfoIndex] * 2U; - } - /*źŻ*/ - signalNum = dataBuf[wDevInfoIndex]; - //wDevInfoIndex += 1U; - upToGDNumber = (UINT16)LEN_OC_UP_TO_GD_NO_200(wZzjStateNumber, (UINT16)switchNum, (UINT16)switchBoardNum, (UINT16)signalNum); - wDevInfoIndex = upToGDNumber; - } - else - { - /*OCݽṹ24ӦOC*/ - devNumber = ShortFromChar(&dataBuf[LEN_OC_UP_TO_DEV_NO - 2U]); - for (ii = 0U; ii < devNumber; ii++) - { - wSwitchIncludeZzjIndex += 4U; - wZzjStateNumber = wZzjStateNumber + (dataBuf[wSwitchIncludeZzjIndex] * 1U); - wSwitchIncludeZzjIndex += 1U + dataBuf[wSwitchIncludeZzjIndex] * 1U + 4U; - } - upToGDNumber = LEN_OC_UP_TO_GD_NO_200_2(devNumber, wZzjStateNumber); - wDevInfoIndex = upToGDNumber; - } - if (totalLength < upToGDNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹ*/ - gdBoardNumber = ShortFromChar(&dataBuf[upToGDNumber - 2U]); - } - } + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷݽֹ*/ - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷDIݽֹDI*/ - upToDIBoardNumber = LEN_OC_UP_TO_DIBOARD_NO_200(wDevInfoIndex, gdBoardNumber); - - if (totalLength < upToDIBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*УɹDI忨*/ - diBoardNumber = ShortFromChar(&dataBuf[upToDIBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷDOݽֹDO*/ - upToDOBoardNumber = LEN_OC_UP_TO_DOBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber); - if (totalLength < upToDOBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹdo忨*/ - doBoardNumber = ShortFromChar(&dataBuf[upToDOBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷSIݽֹSI*/ - upToSIBoardNumber = LEN_OC_UP_TO_SIBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber); - if (totalLength < upToSIBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹsi忨*/ - siBoardNumber = ShortFromChar(&dataBuf[upToSIBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷSOݽֹSO*/ - upToSOBoardNumber = LEN_OC_UP_TO_SOBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber); - if (totalLength < upToSOBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹso忨*/ - soBoardNumber = ShortFromChar(&dataBuf[upToSOBoardNumber - 2U]); - } - } - if (OC_DATA_TYPE_NEW == chLocalOcType) + /*ݳ*/ + switchNum = dataBuf[LEN_OC_UP_TO_DEV_NO - 2U]; + for (ii = 0U; ii < switchNum; ii++) { - wOffSet = 0U; + wDevInfoIndex += 3U; + wZzjStateNumber = wZzjStateNumber + (UINT16)(dataBuf[wDevInfoIndex] * 1U); + wDevInfoIndex += 1U + (UINT16)dataBuf[wDevInfoIndex] * 1U; + switchBoardNum += (UINT8)dataBuf[wDevInfoIndex]; + wDevInfoIndex += 1U + (UINT16)dataBuf[wDevInfoIndex] * 2U; + } + /*źŻ*/ + signalNum = dataBuf[wDevInfoIndex]; + //wDevInfoIndex += 1U; + upToGDNumber = (UINT16)LEN_OC_UP_TO_GD_NO_200(wZzjStateNumber, (UINT16)switchNum, (UINT16)switchBoardNum, (UINT16)signalNum); + wDevInfoIndex = upToGDNumber; + + if (totalLength < upToGDNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹ*/ + gdBoardNumber = ShortFromChar(&dataBuf[upToGDNumber - 2U]); + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷDIݽֹDI*/ + upToDIBoardNumber = LEN_OC_UP_TO_DIBOARD_NO_200(wDevInfoIndex, gdBoardNumber); + + if (totalLength < upToDIBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*УɹDI忨*/ + diBoardNumber = ShortFromChar(&dataBuf[upToDIBoardNumber - 2U]); + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷDOݽֹDO*/ + upToDOBoardNumber = LEN_OC_UP_TO_DOBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber); + if (totalLength < upToDOBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹdo忨*/ + doBoardNumber = ShortFromChar(&dataBuf[upToDOBoardNumber - 2U]); + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷSIݽֹSI*/ + upToSIBoardNumber = LEN_OC_UP_TO_SIBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber); + if (totalLength < upToSIBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹsi忨*/ + siBoardNumber = ShortFromChar(&dataBuf[upToSIBoardNumber - 2U]); + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷSOݽֹSO*/ + upToSOBoardNumber = LEN_OC_UP_TO_SOBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber); + if (totalLength < upToSOBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹso忨*/ + soBoardNumber = ShortFromChar(&dataBuf[upToSOBoardNumber - 2U]); + } + } + wOffSet = 0U; + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷSORݽֹSOR*/ + upToSORBoardNumber = LEN_OC_UP_TO_SORBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber); + if (totalLength < upToSORBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹsor忨*/ + sorBoardNumber = dataBuf[upToSORBoardNumber - 1U]; + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷִеݽִֹе*/ + upToPbNumer = LEN_OC_UP_TO_PLUSBOX_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber); + if (totalLength < upToPbNumer) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹִе*/ + chPbNumber = dataBuf[upToPbNumer - 1U - wOffSet]; + } + } + + if (CI_SUCCESS == retVal) + {/*УOCݴӿͷϵ忨ݽֹϵ忨*/ + upToSwapSysBoardNumber = LEN_OC_UP_TO_SWAPSYSBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, (UINT16)chPbNumber); + upToSwapSysBoardNumber -= wOffSet; + if (totalLength < upToSwapSysBoardNumber) + { + retVal = CI_CHECK_LEN_ERROR; + } + else + { + /*Уɹϵ忨*/ + SwapBoardNumber = ShortFromChar(&dataBuf[upToSwapSysBoardNumber - 2U]); + } + } + + if (CI_SUCCESS == retVal) + {/*У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) - {/*УOCݴӿͷSORݽֹSOR*/ - upToSORBoardNumber = LEN_OC_UP_TO_SORBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber); - if (totalLength < upToSORBoardNumber) + {/*Уݳ*/ + 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_CHECK_LEN_ERROR; + retVal = CI_SUCCESS; } else { - /*Уɹsor忨*/ - sorBoardNumber = dataBuf[upToSORBoardNumber - 1U]; + retVal = CI_CHECK_LEN_ERROR; } } } else { - /*֧SOR*/ - wOffSet = 1U; - sorBoardNumber = 0U; - } + /*滹ݣ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 (CI_SUCCESS == retVal) - {/*УOCݴӿͷִеݽִֹе*/ - upToPbNumer = LEN_OC_UP_TO_PLUSBOX_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber); - if (totalLength < upToPbNumer) - { - retVal = CI_CHECK_LEN_ERROR; + 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 { - /*Уɹִе*/ - chPbNumber = dataBuf[upToPbNumer - 1U- wOffSet]; } } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷϵ忨ݽֹϵ忨*/ - upToSwapSysBoardNumber = LEN_OC_UP_TO_SWAPSYSBOARD_NO_200(wDevInfoIndex, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, (UINT16)sorBoardNumber, chPbNumber); - upToSwapSysBoardNumber -= wOffSet; - if (totalLength < upToSwapSysBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹϵ忨*/ - SwapBoardNumber = ShortFromChar(&dataBuf[upToSwapSysBoardNumber - 2U]); - } - } - - 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 - { - retVal = CI_CHECK_LEN_ERROR; - } - } - } - else if (FUNC_SWITCH_OFF == chSwitch) - { - /*OC-100ӿ*/ - devNumber = ShortFromChar(&dataBuf[LEN_OC_UP_TO_DEV_NO - 2U]); - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷݽֹ*/ - upToGDNumber = LEN_OC_UP_TO_GD_NO(devNumber); - - if (totalLength < upToGDNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹ*/ - gdBoardNumber = ShortFromChar(&dataBuf[upToGDNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷDIݽֹDI*/ - upToDIBoardNumber = LEN_OC_UP_TO_DIBOARD_NO(devNumber, gdBoardNumber); - - if (totalLength < upToDIBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*УɹDI忨*/ - diBoardNumber = ShortFromChar(&dataBuf[upToDIBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷDOݽֹDO*/ - upToDOBoardNumber = LEN_OC_UP_TO_DOBOARD_NO(devNumber, gdBoardNumber, diBoardNumber); - if (totalLength < upToDOBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹdo忨*/ - doBoardNumber = ShortFromChar(&dataBuf[upToDOBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷSIݽֹSI*/ - upToSIBoardNumber = LEN_OC_UP_TO_SIBOARD_NO(devNumber, gdBoardNumber, diBoardNumber, doBoardNumber); - if (totalLength < upToSIBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹdo忨*/ - siBoardNumber = ShortFromChar(&dataBuf[upToSIBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷSOݽֹSO*/ - upToSOBoardNumber = LEN_OC_UP_TO_SOBOARD_NO(devNumber, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber); - if (totalLength < upToSOBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹdo忨*/ - soBoardNumber = ShortFromChar(&dataBuf[upToSOBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*УOCݴӿͷϵ忨ݽֹϵ忨*/ - upToSwapSysBoardNumber = LEN_OC100_UP_TO_SWAPSYSBOARD_NO(devNumber, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber); - if (totalLength < upToSwapSysBoardNumber) - { - retVal = CI_CHECK_LEN_ERROR; - } - else - { - /*Уɹϵ忨*/ - SwapBoardNumber = ShortFromChar(&dataBuf[upToSwapSysBoardNumber - 2U]); - } - } - - if (CI_SUCCESS == retVal) - {/*Уݳ*/ - tmpTotalLen = LEN_OC100_UP_TO_END(devNumber, gdBoardNumber, diBoardNumber, doBoardNumber, siBoardNumber, soBoardNumber, SwapBoardNumber); - if (totalLength == tmpTotalLen) - { - retVal = CI_SUCCESS; - } - else - { - retVal = CI_CHECK_LEN_ERROR; - } - } - } - else - { - retVal = CI_CHECK_LEN_ERROR; } return retVal; } @@ -1085,9 +1057,11 @@ void ResetOcOriginalState(const UINT8 ocId) pDIBoard->BoardCollData[jj] = 0xaau;/*SOR忨̵ȫ*/ } } + + SetOcToCiDefaultDataStru(toFindIndex);/*ϢΪȫ*/ } } - +#endif /* * OcCIĵ֡ݵ * ˵ const UINT8* dataBuf, ݻ @@ -1099,7 +1073,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { UINT8 retVal = CI_ERROR; UINT8 localCiId = 0u; /*ID*/ - + UINT16 ii = 0u; /**/ UINT8 j = 0u; UINT8 k = 0U; @@ -1118,6 +1092,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U UINT8 tmpBoardCollData[18] = {0u}; /*ɼ*/ UINT16 ocName = 0u; /*ciͨŵoc Name 0x46*/ + UINT16 wCiName = 0U; /*豸 0x3C+ID 0x3D+ID*/ UINT8 headRet = HLHT_HEAD_ERROR; UINT8* sourceId = NULL; /*ԴID*/ @@ -1126,34 +1101,54 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U INT32 ocInfoRemainValidity = 0; UINT16 appInfoType = 0u; /*ӦϢ*/ - OcToCiOriginDataStruct * pTmpOcToCiData = NULL; + OcToCiOriginDataStruct * pOcToCiCur = NULL; /*ɹ󱣴λ*/ + OcToCiOriginDataStruct OcToCiDataUpTemp; + OcToCiOriginDataStruct* pTmpOcToCiData = &OcToCiDataUpTemp;/*ʱ*/ UINT8 toUpdateOcIndex = 0u; UINT8 findFlag = 0u; UINT16 tmpGdId = 0u;/*ʱʱId*/ - UINT16 curBoardNum = 0u; /*ǰ*/ UINT16 curBoardSwapSysNum = 0U;/*ϵ忨*/ - UINT32 galOcDataVer = 0U; + UINT8 curPsdNum = 0u; /*PSD*/ + UINT32 psdId = 0u; /*PSD */ + UINT16 psdIndexId = 0u; /*PSD ID*/ + UINT8 funcRet = 0u; /*PSDŲѯidֵ*/ + UINT32 errCode = 0U; UINT8 chPbIndex = 0u; - UINT8 chSwitch = 0u; UINT8 chZzjStateIndex = 0u;/*Ӧת޻״̬*/ - UINT8 chOcType = GetLocalOcPattern(); /*ȡOCݽṹ*/ - + UINT8 chStateCheck = CI_ERROR; + UINT8 galHeadSaved = 0u; /*ͨͷǷ񱣴־1棻0δ*/ + UINT16 wApplyDataLenth = 0U;/*Ӧò㳤*/ + UINT32 transmitBadEnsureTime = 0U; /*ͨжʱ*/ + UINT8 chDevBelongOC = 0U;/*豸OC*/ + UINT8 chDevBelongCI = 0U;/*豸*/ + UINT8 chMainWorckMode = 0U;/*ģʽ*/ + UINT8 chUsableCycCheck = CI_ERROR;/*RCģʽʱOCںżͬںУ*/ + UINT32 dwUpToMainCyc = 0U;/*ں*/ + UINT32 CiRecvOcSN = 0U;/*ͬCIOCں*/ + HLHTHeadContextStru* pstrHlhtHeadCtx = NULL; /*CIͬĻͨͷ*/ + (void)CommonMemSet(pTmpOcToCiData, (UINT32)sizeof(OcToCiOriginDataStruct),0U, (UINT32)sizeof(OcToCiOriginDataStruct));/*ڴ棬ֹ*/ + chMainWorckMode = GetLocalCiBackUpPattern(); + dwUpToMainCyc = GetSystemUpdateMainUseCycNum(); + for (j=0u;j 0u)) - {/*УOCciЧ*/ - retVal = CheckOc2CiDataLenValid(dataBuf,dataLength); + { + retVal = CI_SUCCESS; } else { @@ -1163,8 +1158,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U if (CI_SUCCESS == retVal) { - /* ȡOCͺţ0xaa:2000x55:100 */ - chSwitch = GetCiFunctionSwitchConfig(FUNC_OC_100_OR_200); + /* ĿʹOC100֧OC24.1 */ sourceId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC);/*ȡ뱾ͨŵOCID*/ ii+=4u;/*4ֽڣԺoc*/ @@ -1193,30 +1187,53 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U ocName = (CI_SYSTEM_TYPE_OC) * 256U + systemId; localCiId = GetSystemParaLocalCiId(); /*ȡID*/ + wCiName = (CI_SYSTEM_TYPE_RCI)* 256U + localCiId; + + headRet = HLHTRecvCommonPacketHeadCheck(ocName, wCiName, CI_OC_INTERFACE_INFOTYPE, CI_OC_PRTCL_VER, &hlhtGalHead, &errCode, 0u, CI_SYSTEM_TYPE_OC); + transmitBadEnsureTime = GetCiAndOcTransmitBadEnsureTime(); + debug_infor_printf((const)"\nOC %d GAL Check Result:%d errCode:%d\n", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ - galOcDataVer = GetCiTranOcDataCheckVer(localCiId, ocName); /*ȡOCϵͳݰ汾*/ - if (hlhtGalHead.emapVerCrc == galOcDataVer) - { - headRet = HLHT_HEAD_SUCCESS; - } - else - { - headRet = HLHT_HEAD_ERROR; - } -#if 0 - headRet = HLHTRecvCommonPacketHeadCheck(ocName, ciName, CI_OC_INTERFACE_INFOTYPE, CI_OC_PRTCL_VER, &hlhtGalHead, &errCode, 0, CI_SYSTEM_TYPE_OC); -#endif if (HLHT_HEAD_SUCCESS == headRet) { -#if 0 - ocInfoRemainValidity = HLHTCommonMsgRemainingValidity(GetCiAndOcTransmitBadEnsureCnt(),curntCycleNo, + + ocInfoRemainValidity = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime,curntCycleNo, GetSystemParaAppCycleTime(),hlhtGalHead.recvOppMsgSN,hlhtGalHead.crntOwnMsgSN,hlhtGalHead.preOwnMsgSN,hlhtGalHead.comPeriod); -#endif - ocInfoRemainValidity = 1; - if (ocInfoRemainValidity > 0) + + if (CI_SYSTEM_TYPE_RCI == RC_WORK_MODE_TIOC) + { + /*CIͬ*/ + pstrHlhtHeadCtx = GetCiToRcHLHTOcHeadCtx(systemId); + if (NULL != pstrHlhtHeadCtx) + { + CiRecvOcSN = pstrHlhtHeadCtx->sourceCrntOwnMsgSN; + } + else + { + CiRecvOcSN = 0U; + } + /*1.RCGALЧOCڵǰں*/ + /*2.նԷ¼ıںŴڵں ͬCIOCOCںڵǰOC*/ + if (((hlhtGalHead.recvOppMsgSN >= dwUpToMainCyc) + || (0U != CiRecvOcSN) && (CiRecvOcSN OcId = systemId; /*oc idֵ*/ - pTmpOcToCiData->ComStartCycle = Get2oo2CurCycleNum();/*յOCʱͨſʼ*/ - - debug_infor_printf((const)"\nId:%d OC_COM:%d\n",pTmpOcToCiData->OcId,pTmpOcToCiData->ComStartCycle); - if (OC_CI_STATE_INFO == appInfoType)/*OCCI״̬Ϣ 0x8802*/ { + pTmpOcToCiData->ComStartCycle = curntCycleNo;/*յOCʱͨſʼ*/ + debug_infor_printf((const)"\nId:%d OC_COM:%d\n", pTmpOcToCiData->OcId, pTmpOcToCiData->ComStartCycle); /*by cgh 20230831 ת޻״̬ӿ*/ /*fan 20241120 4ǣ OC3.0 ӿ ֧OCݽṹнݽṹ*/ - if ((FUNC_SWITCH_ON == chSwitch)&&(OC_DATA_TYPE_NEW == chOcType)) - { - /*************豸[]***********/ - tmpDeviceType = CI_DEVICE_TYPE_SWITCH; - tmpSwitchNum = dataBuf[ii++];/**/ - for (j = 0u;jtmpSwitchNum) + { + pTmpOcToCiData->OcDeviceNum = tmpSwitchNum;/*洢*/ + for (j = 0u; j < tmpSwitchNum; j++) /*豸*/ { tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*豸Id 2B*/ - ii+=2u; - tmpDeviceState = dataBuf[ii++]; /*豸״̬ 1B*/ - pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = dataBuf[ii++]; - if (MAX_OC_SWITCH_INCLUDE_ZZJ_NUM >= pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum) - { - for (chZzjStateIndex = 0U; chZzjStateIndex < pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum; chZzjStateIndex++) - { - /*ת޻״̬*/ - pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[chZzjStateIndex] = dataBuf[ii++]; - } - } - else + ii += 2u; + chDevBelongOC = (UINT8)GetSwitchBelongOcId(tmpDeviceId); + chDevBelongCI = GetSwitchBelongCiId(tmpDeviceId); + if ((chDevBelongOC != systemId)||(chDevBelongCI != localCiId)) { retVal = CI_ERROR; - pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; - pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[0U] = OC_SWITCH_POSITION_SIKAI; + debug_infor_printf((const)"Swicth devId:%d Belong OC/CI Error\n", tmpDeviceId); } - + if (CI_SUCCESS == retVal) + { + tmpDeviceState = dataBuf[ii++]; /*豸״̬ 1B*/ + if ((OC_SWITCH_POSITION_DINGWEI == tmpDeviceState) + || (OC_SWITCH_POSITION_FANWEI == tmpDeviceState) + || (OC_SWITCH_POSITION_SIKAI == tmpDeviceState) + || (OC_SWITCH_POSITION_MOVE == tmpDeviceState)) + { + pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = dataBuf[ii++]; + if (MAX_OC_SWITCH_INCLUDE_ZZJ_NUM >= pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum) + { + for (chZzjStateIndex = 0U; chZzjStateIndex < pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum; chZzjStateIndex++) + { + /*ת޻״̬*/ + pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[chZzjStateIndex] = dataBuf[ii++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[chZzjStateIndex], OC_SWITCH_POSITION_SIKAI); + if (CI_ERROR == chStateCheck) + { + debug_infor_printf((const)"SwitchID %d ZZJ State%d ERROR \n", tmpDeviceId, pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[chZzjStateIndex]); + retVal = CI_ERROR; + break; + } + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"SwitchID %d ZZJnum%d, exceed max:%d \n", tmpDeviceId, pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum, MAX_OC_SWITCH_INCLUDE_ZZJ_NUM); + pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; + pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[0U] = OC_SWITCH_POSITION_SIKAI; + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"SwitchID %d State%d, ERROR \n", tmpDeviceId, tmpDeviceState); + } + } + if (CI_SUCCESS == retVal) { tmpSwitchBoardNum = dataBuf[ii++];/*忨*/ - if ((j < MAX_OC_DEVICE_NUM) && (tmpSwitchBoardNum <= MAX_OC_SWITCH_INCLUDE_BOARD_NUM)) + if ( MAX_OC_SWITCH_INCLUDE_BOARD_NUM>=tmpSwitchBoardNum) { pTmpOcToCiData->OcDevices[j].OcId = systemId;/*ÿ豸oc id*/ - /*忨ַ״ֵ̬*/ + /*忨ַ״ֵ̬*/ pTmpOcToCiData->OcDevices[j].BoardNum = tmpSwitchBoardNum; /*忨*/ switchBoardCheck = CI_ERROR; for (k = 0U; k < tmpSwitchBoardNum; k++) @@ -1296,128 +1341,82 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { /*豸źŻԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"devId'index %d exceed macro %d boardNum%d, max:%d \n", tmpDeviceId, MAX_OC_DEVICE_NUM, tmpSwitchBoardNum, MAX_OC_SWITCH_INCLUDE_BOARD_NUM); + debug_infor_printf((const)"Swicth devId'index %d Board Num exceed Max %d boardNum%d,\n", tmpDeviceId,MAX_OC_SWITCH_INCLUDE_BOARD_NUM ,tmpSwitchBoardNum ); } } - } - - - /*************豸[źŻ]***********/ - if (CI_SUCCESS == retVal) - { - tmpDeviceType = CI_DEVICE_TYPE_SIGNAL; - tmpSignalNum = dataBuf[ii++];/*źŻ*/ + if (CI_SUCCESS != retVal) + { + break; + } + } + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"OCSwitchNum %d exceed Unreachable max:%d \n", tmpSwitchNum, MAX_OC_DEVICE_SWITCH_MAX); + } + + /*************豸[źŻ]***********/ + if (CI_SUCCESS == retVal) + { + tmpDeviceType = CI_DEVICE_TYPE_SIGNAL; + tmpSignalNum = dataBuf[ii++];/*źŻ*/ + if ((MAX_OC_DEVICE_SIGNAL_MAX > tmpSignalNum) && (MAX_OC_DEVICE_NUM> tmpSignalNum+ tmpSwitchNum)) + { pTmpOcToCiData->OcDeviceNum = tmpSignalNum + tmpSwitchNum; for (j = tmpSwitchNum; j < pTmpOcToCiData->OcDeviceNum; j++) /*豸*/ { tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*豸Id 2B*/ ii += 2u; - tmpDeviceState = dataBuf[ii++]; /*豸״̬ 1B*/ - - tmpBoardAddr1 = dataBuf[ii++];/*忨ַ 1B*/ - tmpBoardState1 = dataBuf[ii++]; /*忨״̬ 1B*/ - - tmpBoardAddr2 = dataBuf[ii++];/*忨ַ 1B*/ - tmpBoardState2 = dataBuf[ii++]; /*忨״̬ 1B*/ - if (j < MAX_OC_DEVICE_NUM) + chDevBelongOC = (UINT8)GetSignalBelongOcId(tmpDeviceId); + chDevBelongCI = GetSignalBelongCiId(tmpDeviceId); + if ((chDevBelongOC != systemId) || (chDevBelongCI != localCiId)) { - pTmpOcToCiData->OcDevices[j].OcId = systemId;/*ÿ豸oc id*/ - /*忨ַ״ֵ̬*/ - pTmpOcToCiData->OcDevices[j].BoardNum = 2U; /*忨*/ - pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; - pTmpOcToCiData->OcDevices[j].BoardAddr[0] = tmpBoardAddr1;/*忨ַ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardState[0] = tmpBoardState1; /*忨״̬ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardAddr[1] = tmpBoardAddr2;/*忨ַ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardState[1] = tmpBoardState2; /*忨״̬ 1B*/ - pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; - pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*豸 1B*/ - pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*豸Id 2B*/ - pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*豸״̬ 1B*/ - - if ((0u == tmpBoardState1) || (0u == tmpBoardState2)) /*0Ϊ 쳣*/ + retVal = CI_ERROR; + debug_infor_printf((const)"Signal devId:%d Belong OC/CI Error\n", tmpDeviceId); + } + if (CI_SUCCESS == retVal) + { + tmpDeviceState = dataBuf[ii++]; /*豸״̬ 1B*/ + chStateCheck = OcInputSignalStateCheck(tmpDeviceState); + if (CI_SUCCESS == chStateCheck) { + tmpBoardAddr1 = dataBuf[ii++];/*忨ַ 1B*/ + tmpBoardState1 = dataBuf[ii++]; /*忨״̬ 1B*/ + + tmpBoardAddr2 = dataBuf[ii++];/*忨ַ 1B*/ + tmpBoardState2 = dataBuf[ii++]; /*忨״̬ 1B*/ + pTmpOcToCiData->OcDevices[j].OcId = systemId;/*ÿ豸oc id*/ + /*忨ַ״ֵ̬*/ + pTmpOcToCiData->OcDevices[j].BoardNum = 2U; /*忨*/ + pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; + pTmpOcToCiData->OcDevices[j].BoardAddr[0] = tmpBoardAddr1;/*忨ַ 1B*/ + pTmpOcToCiData->OcDevices[j].BoardState[0] = tmpBoardState1; /*忨״̬ 1B*/ + pTmpOcToCiData->OcDevices[j].BoardAddr[1] = tmpBoardAddr2;/*忨ַ 1B*/ + pTmpOcToCiData->OcDevices[j].BoardState[1] = tmpBoardState2; /*忨״̬ 1B*/ + pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U; + pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*豸 1B*/ + pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*豸Id 2B*/ pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*豸״̬ 1B*/ + /*źŻ忨״̬0GetOcSignalColor*/ } else { - /*ats*/ - + retVal = CI_ERROR; + debug_infor_printf((const)"Signal ID %d State%d, ERROR \n", tmpDeviceId, tmpDeviceState); } - } - else + } + if (CI_SUCCESS != retVal) { - /*豸źŻԾϢ*/ - retVal = CI_ERROR; - debug_infor_printf((const)"devId'index %d exceed macro %d.\n", tmpDeviceId, MAX_OC_DEVICE_NUM); + break; } } } - - } - /*OC-100 ԼOCݽṹ24ӦOC 4ǣ 豸ֵ&źŻϲ ̶豸忨2*/ - else - { - /*OC100 Լ OCݽṹ24*/ - /*************豸[źŻ]***********/ - pTmpOcToCiData->OcDeviceNum = ShortFromChar(&dataBuf[ii]);/*豸*/ - ii += 2u; - for (j = 0u; jOcDeviceNum; j++) /*豸*/ + else { - tmpDeviceType = dataBuf[ii++]; /*豸 1B*/ - tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*豸Id 2B*/ - ii += 2u; - tmpDeviceState = dataBuf[ii++]; /*豸״̬ 1B*/ - - if (FUNC_SWITCH_ON == chSwitch) - { - /*Ӧת޻Ŀ豸ΪźŻʱ,˸Ϊ0*/ - pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = dataBuf[ii++]; - for (chZzjStateIndex = 0U; chZzjStateIndex < pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum; chZzjStateIndex++) - { - /*ת޻״̬*/ - pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[chZzjStateIndex] = dataBuf[ii++]; - } - } - else - { - /* 100޴˽ӿ */ - } - tmpBoardAddr1 = dataBuf[ii++];/*忨ַ 1B*/ - tmpBoardState1 = dataBuf[ii++]; /*忨״̬ 1B*/ - - tmpBoardAddr2 = dataBuf[ii++];/*忨ַ 1B*/ - tmpBoardState2 = dataBuf[ii++]; /*忨״̬ 1B*/ - if (j< MAX_OC_DEVICE_NUM) - { - pTmpOcToCiData->OcDevices[j].OcId = systemId;/*ÿ豸oc id*/ - /*忨ַ״ֵ̬*/ - pTmpOcToCiData->OcDevices[j].BoardNum = 2U; /*忨̶2*/ - pTmpOcToCiData->OcDevices[j].BoardAddr[0] = tmpBoardAddr1;/*忨ַ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardState[0] = tmpBoardState1; /*忨״̬ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardAddr[1] = tmpBoardAddr2;/*忨ַ 1B*/ - pTmpOcToCiData->OcDevices[j].BoardState[1] = tmpBoardState2; /*忨״̬ 1B*/ - - pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*豸 1B*/ - pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*豸Id 2B*/ - pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*豸״̬ 1B*/ - - if ((0u == tmpBoardState1) || (0u == tmpBoardState2)) /*0Ϊ 쳣*/ - { - pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*豸״̬ 1B*/ - } - else - { - /*ats*/ - - } - } - else - { - /*豸źŻԾϢ*/ - retVal = CI_ERROR; - debug_infor_printf((const)"devId'index %d exceed macro %d.\n", tmpDeviceId, MAX_OC_DEVICE_NUM); - } + retVal = CI_ERROR; + debug_infor_printf((const)"OCSignalNum %d exceed Unreachable max:%d \n", tmpSignalNum, MAX_OC_DEVICE_SIGNAL_MAX); } } @@ -1427,31 +1426,55 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { pTmpOcToCiData->OcGdNum = ShortFromChar(&dataBuf[ii]);/**/ ii += 2u; - if (Max_OC_GD_NUM >= pTmpOcToCiData->OcGdNum) + if (Max_OC_GD_NUM > pTmpOcToCiData->OcGdNum) { for (j = 0u; j < pTmpOcToCiData->OcGdNum; j++)/**/ { pTmpOcToCiData->OcId = systemId;/*OCŸֵ*/ tmpGdId = ShortFromChar(&dataBuf[ii]);/*id*/ + chDevBelongCI = GetPhySecBelongCiId(tmpGdId); + if (chDevBelongCI != localCiId) + { + retVal = CI_ERROR; + debug_infor_printf((const)"OC send Physec Id:%d Belong CI Error\n", tmpGdId); + } + if (CI_SUCCESS == retVal) + { + pTmpOcToCiData->OcGdDevices[j].OcId = systemId; + pTmpOcToCiData->OcGdDevices[j].GdDeviceId = ShortFromChar(&dataBuf[ii]);/*id*/ + ii += 2u; + pTmpOcToCiData->OcGdDevices[j].BoardAddr1 = dataBuf[ii++]; + pTmpOcToCiData->OcGdDevices[j].BoardState1 = dataBuf[ii++]; + pTmpOcToCiData->OcGdDevices[j].GdState1 = dataBuf[ii++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->OcGdDevices[j].GdState1, OC_GD_STATE_FAULT); - pTmpOcToCiData->OcGdDevices[j].OcId = systemId; - pTmpOcToCiData->OcGdDevices[j].GdDeviceId = ShortFromChar(&dataBuf[ii]);/*id*/ - ii += 2u; - pTmpOcToCiData->OcGdDevices[j].BoardAddr1 = dataBuf[ii++]; - pTmpOcToCiData->OcGdDevices[j].BoardState1 = dataBuf[ii++]; - pTmpOcToCiData->OcGdDevices[j].GdState1 = dataBuf[ii++]; + pTmpOcToCiData->OcGdDevices[j].BoardAddr2 = dataBuf[ii++]; + pTmpOcToCiData->OcGdDevices[j].BoardState2 = dataBuf[ii++]; + pTmpOcToCiData->OcGdDevices[j].GdState2 = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->OcGdDevices[j].GdState2, OC_GD_STATE_FAULT); + if (CI_SUCCESS == chStateCheck) + { + ; /*Ϸֵ*/ + } + else + { + retVal = CI_ERROR; + debug_infor_printf((const)"GdBoardState PhySecId %d Error: Gdstate1%d, Gdstate2%d\n", tmpGdId, pTmpOcToCiData->OcGdDevices[j].GdState1, pTmpOcToCiData->OcGdDevices[j].GdState2); + } + } - pTmpOcToCiData->OcGdDevices[j].BoardAddr2 = dataBuf[ii++]; - pTmpOcToCiData->OcGdDevices[j].BoardState2 = dataBuf[ii++]; - pTmpOcToCiData->OcGdDevices[j].GdState2 = dataBuf[ii++]; + if (CI_SUCCESS != retVal) + { + break; + } } } else { retVal = CI_ERROR; /*峬ԾϢ*/ - debug_infor_printf((const)"devId'index %d exceed macro %d.\n", pTmpOcToCiData->OcGdNum, Max_OC_GD_NUM); + debug_infor_printf((const)"OcGdBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcGdNum, Max_OC_GD_NUM); } } /*************DI忨***********/ @@ -1459,21 +1482,21 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { pTmpOcToCiData->OcDIBoardDataNum = ShortFromChar(&dataBuf[ii]);/*忨*/ ii += 2u; - if (MAX_OC_DI_BOARD_NUM >= pTmpOcToCiData->OcDIBoardDataNum) + if (MAX_OC_BOARD_NUM > pTmpOcToCiData->OcDIBoardDataNum) { for (j = 0u; j < pTmpOcToCiData->OcDIBoardDataNum; j++) /*忨*/ { tmpBoardAddr2 = dataBuf[ii++]; /*忨ַ*/ tmpBoardState2 = dataBuf[ii++]; /*忨״̬*/ - (void)memcpy(tmpBoardCollData, &dataBuf[ii], 18); /*忨ɼ*/ /*ij18ֽˣҪ޸*/ + (void)CommonMemCpy(tmpBoardCollData, (UINT32)18,&dataBuf[ii], (UINT32)18); /*忨ɼ*/ /*ij18ֽˣҪ޸*/ ii += 18u; pTmpOcToCiData->OcDIBoardDatas[j].BoardAddr = tmpBoardAddr2; pTmpOcToCiData->OcDIBoardDatas[j].BoardState = tmpBoardState2; if (tmpBoardState2 == 0u) /*忨*/ { - (void)memcpy(pTmpOcToCiData->OcDIBoardDatas[j].BoardCollData, tmpBoardCollData, 18); + (void)CommonMemCpy(pTmpOcToCiData->OcDIBoardDatas[j].BoardCollData, (UINT32)18, tmpBoardCollData, (UINT32)18); } else /*忨*/ @@ -1487,7 +1510,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { /*DI忨ԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"OcDIBoardDatas'index %d exceed macro %d.\n", pTmpOcToCiData->OcDIBoardDataNum, MAX_OC_DI_BOARD_NUM); + debug_infor_printf((const)"OcDIBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcDIBoardDataNum, MAX_OC_BOARD_NUM); } } @@ -1496,7 +1519,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { pTmpOcToCiData->OcDOBoardNum = ShortFromChar(&dataBuf[ii]);/*DO忨*/ ii += 2u; - if (MAX_OC_DO_BOARD_NUM >=pTmpOcToCiData->OcDOBoardNum) + if (MAX_OC_BOARD_NUM >pTmpOcToCiData->OcDOBoardNum) { for (j = 0u; j < pTmpOcToCiData->OcDOBoardNum; j++) { @@ -1508,35 +1531,34 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { retVal = CI_ERROR; /*DO忨ԾϢ*/ - debug_infor_printf((const)"OcDOBoardDatas'index %d exceed macro %d.\n", pTmpOcToCiData->OcDOBoardNum, MAX_OC_DO_BOARD_NUM); + debug_infor_printf((const)"OcDoBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcDOBoardNum, MAX_OC_BOARD_NUM); } } /*************SI忨***********/ if (CI_SUCCESS == retVal) { - curBoardNum = pTmpOcToCiData->OcDIBoardDataNum; - pTmpOcToCiData->OcDIBoardDataNum += ShortFromChar(&dataBuf[ii]);/*SI忨*/ + pTmpOcToCiData->OcSIBoardDataNum = ShortFromChar(&dataBuf[ii]);/*SI忨*/ ii += 2u; - if (MAX_OC_DI_BOARD_NUM >= pTmpOcToCiData->OcDIBoardDataNum) + if (MAX_OC_BOARD_NUM >pTmpOcToCiData->OcSIBoardDataNum) { - for (j = (UINT8)(curBoardNum); j < pTmpOcToCiData->OcDIBoardDataNum; j++) /*忨*/ + for (j = 0U; j < pTmpOcToCiData->OcSIBoardDataNum; j++) /*忨*/ { tmpBoardAddr2 = dataBuf[ii++]; /*忨ַ*/ tmpBoardState2 = dataBuf[ii++]; /*忨״̬*/ - (void)memcpy(tmpBoardCollData, &dataBuf[ii], 12); /*忨ɼ*/ /*ij12ֽˣҪ޸*/ + (void)CommonMemCpy(tmpBoardCollData, (UINT32)12,&dataBuf[ii], (UINT32)12); /*忨ɼ*/ /*ij12ֽˣҪ޸*/ ii += 12u; - pTmpOcToCiData->OcDIBoardDatas[j].BoardAddr = tmpBoardAddr2; - pTmpOcToCiData->OcDIBoardDatas[j].BoardState = tmpBoardState2; + pTmpOcToCiData->OcSIBoardDatas[j].BoardAddr = tmpBoardAddr2; + pTmpOcToCiData->OcSIBoardDatas[j].BoardState = tmpBoardState2; if (tmpBoardState2 == 0u) /*忨*/ { - (void)memcpy(pTmpOcToCiData->OcDIBoardDatas[j].BoardCollData, tmpBoardCollData, 12); + (void)CommonMemCpy(pTmpOcToCiData->OcSIBoardDatas[j].BoardCollData, (UINT32)12,tmpBoardCollData, (UINT32)12); } else /*忨*/ { - (void)memset(pTmpOcToCiData->OcDIBoardDatas[j].BoardCollData, 0xaa, 12); + (void)CommonMemSet(pTmpOcToCiData->OcSIBoardDatas[j].BoardCollData, (UINT32)12, 0xaa, (UINT32)12); /*ats*/ } } @@ -1545,76 +1567,89 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { /*SI忨ԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"OcSIBoardDatas'index %d exceed macro %d\n.", pTmpOcToCiData->OcDIBoardDataNum, MAX_OC_DI_BOARD_NUM); + debug_infor_printf((const)"OcSIBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcSIBoardDataNum, MAX_OC_BOARD_NUM); } } - /************SO忨**********/ - curBoardNum = pTmpOcToCiData->OcDOBoardNum; - pTmpOcToCiData->OcDOBoardNum += ShortFromChar(&dataBuf[ii]);/*DO忨*/ - ii += 2u; - if (MAX_OC_DO_BOARD_NUM >=pTmpOcToCiData->OcDOBoardNum) - { - for (j = (UINT8)(curBoardNum); j < pTmpOcToCiData->OcDOBoardNum; j++) - { - pTmpOcToCiData->OcDOBoardDatas[j].DoBoardAddr = dataBuf[ii++]; - pTmpOcToCiData->OcDOBoardDatas[j].DoBoardState = dataBuf[ii++]; - } - } - else - { - retVal = CI_ERROR; - /*SO忨ԾϢ*/ - debug_infor_printf((const)"OcSOBoardDatas'index %d exceed macro %d.\n", pTmpOcToCiData->OcDOBoardNum, MAX_OC_DO_BOARD_NUM); - } - /*************SOR忨 OC-200ҽOC***********/ - if ((CI_SUCCESS == retVal) && (FUNC_SWITCH_ON == chSwitch)&& (OC_DATA_TYPE_NEW == chOcType)) + /*************SO忨***********/ + if (CI_SUCCESS == retVal) + { + pTmpOcToCiData->OcSOBoardNum += ShortFromChar(&dataBuf[ii]);/*SO忨*/ + ii += 2u; + if (MAX_OC_BOARD_NUM > pTmpOcToCiData->OcSOBoardNum) + { + for (j = 0U; j < pTmpOcToCiData->OcSOBoardNum; j++) + { + pTmpOcToCiData->OcSOBoardDatas[j].DoBoardAddr = dataBuf[ii++]; + pTmpOcToCiData->OcSOBoardDatas[j].DoBoardState = dataBuf[ii++]; + } + } + else + { + retVal = CI_ERROR; + /*SO忨ԾϢ*/ + debug_infor_printf((const)"OcSOBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcSOBoardNum, MAX_OC_BOARD_NUM); + } + } + /*************SOR忨 ***********/ + if (CI_SUCCESS == retVal) { pTmpOcToCiData->OcSORBoardNum = dataBuf[ii++];/*Sor忨*/ - if (MAX_OC_SOR_BOARD_NUM >= pTmpOcToCiData->OcSORBoardNum) + if (MAX_OC_BOARD_NUM > (UINT16)pTmpOcToCiData->OcSORBoardNum) { - for (j = 0U; j < pTmpOcToCiData->OcSORBoardNum; j++) /*忨*/ + if (Oc_Max_Board_Num>(pTmpOcToCiData->OcSORBoardNum+ pTmpOcToCiData->OcDIBoardDataNum+ pTmpOcToCiData->OcSIBoardDataNum)) { - tmpBoardAddr2 = dataBuf[ii++]; /*忨ַ*/ - tmpBoardState2 = dataBuf[ii++]; /*忨״̬*/ - - (void)memcpy(tmpBoardCollData, &dataBuf[ii], 5); /*̵ز*/ - ii += 5u; - - pTmpOcToCiData->OcSORBoardDatas[j].BoardAddr = tmpBoardAddr2; - pTmpOcToCiData->OcSORBoardDatas[j].BoardState = tmpBoardState2; - if (tmpBoardState2 == 0u) /*忨*/ + for (j = 0U; j < pTmpOcToCiData->OcSORBoardNum; j++) /*忨*/ { - (void)memcpy(pTmpOcToCiData->OcSORBoardDatas[j].BoardCollData, tmpBoardCollData, 5U); - } - else /*忨*/ - { - (void)memset(pTmpOcToCiData->OcSORBoardDatas[j].BoardCollData, 0xaaU, 5U); - /*ats*/ + tmpBoardAddr2 = dataBuf[ii++]; /*忨ַ*/ + tmpBoardState2 = dataBuf[ii++]; /*忨״̬*/ + (void)CommonMemCpy(tmpBoardCollData, (UINT32)5U , &dataBuf[ii], (UINT32)5U); /*̵ز*/ + ii += 5u; + + pTmpOcToCiData->OcSORBoardDatas[j].BoardAddr = tmpBoardAddr2; + pTmpOcToCiData->OcSORBoardDatas[j].BoardState = tmpBoardState2; + if (tmpBoardState2 == 0u) /*忨*/ + { + (void)CommonMemCpy(pTmpOcToCiData->OcSORBoardDatas[j].BoardCollData, (UINT32)5U , tmpBoardCollData, (UINT32)5U); + } + else /*忨*/ + { + (void)CommonMemSet(pTmpOcToCiData->OcSORBoardDatas[j].BoardCollData, (UINT32)5U , 0xaaU, (UINT32)5U); + /*ats*/ + } } } + else + { + /*Sor忨ԾϢ*/ + retVal = CI_ERROR; + debug_infor_printf((const)"OcSorBoardNum+DIBoardNum+SIBoardNum %d, Max:%d\n", + (pTmpOcToCiData->OcSORBoardNum + pTmpOcToCiData->OcDIBoardDataNum + pTmpOcToCiData->OcSIBoardDataNum), Oc_Max_Board_Num -1); + } } else { /*Sor忨ԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"OcSorBoardDatas'index %d exceed macro %d.\n", pTmpOcToCiData->OcSORBoardNum, MAX_OC_SOR_BOARD_NUM); + debug_infor_printf((const)"OcSorBoardDataNum%d, Unreachable Max:%d\n", pTmpOcToCiData->OcSORBoardNum, MAX_OC_BOARD_NUM); } } - /*************OCԴ״ִ̬е***********/ if (CI_SUCCESS == retVal) { pTmpOcToCiData->PowerAState = dataBuf[ii++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->PowerAState, DUAL_WAY_AIR_SWITCH_ABNORMAL); pTmpOcToCiData->PowerBState = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->PowerBState, DUAL_WAY_AIR_SWITCH_ABNORMAL); pTmpOcToCiData->OCDevFaultState = dataBuf[ii++]; pTmpOcToCiData->FanState = dataBuf[ii++]; - - if (FUNC_SWITCH_ON == chSwitch) + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->FanState, AirFan_ABNORMAL); + if ((CI_SUCCESS == chStateCheck)&& + ((OC_CARD_NORMAL == pTmpOcToCiData->OCDevFaultState)||(OC_CARD_ABNORMAL == pTmpOcToCiData->OCDevFaultState))) { /* ִеϢ */ pTmpOcToCiData->chPbNum = dataBuf[ii++]; - if (pTmpOcToCiData->chPbNum <= MAX_OC_PLUS_BOX_NUM) + if (MAX_OC_PLUS_BOX_NUM >= pTmpOcToCiData->chPbNum) { for (chPbIndex = 0u; chPbIndex < pTmpOcToCiData->chPbNum; chPbIndex++) { @@ -1630,12 +1665,13 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { /*ִеԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"OcPbNumDatas'index %d exceed macro %d.\n", pTmpOcToCiData->chPbNum, MAX_OC_PLUS_BOX_NUM); + debug_infor_printf((const)"OcPbNumDatas %d exceed Max %d.\n", pTmpOcToCiData->chPbNum, MAX_OC_PLUS_BOX_NUM); } } else { - /* 100ִе */ + retVal = CI_ERROR; + debug_infor_printf((const)"OCPowerState | OCDevFaultState | FanState Error\n"); } } /*************ϵ忨***********/ @@ -1645,7 +1681,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U pTmpOcToCiData->OCBoardSwapSysNum = ShortFromChar(&dataBuf[ii]); /*OCϵ忨*/ ii += 2U; curBoardSwapSysNum = pTmpOcToCiData->OCBoardSwapSysNum; - if (MAX_OC_DEVICE_NUM >= curBoardSwapSysNum) + if (MAX_OC_DEVICE_SWAP_MAX > curBoardSwapSysNum) { for (j = 0U; j < curBoardSwapSysNum; j++) { @@ -1656,18 +1692,129 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U { /*ϵԾϢ*/ retVal = CI_ERROR; - debug_infor_printf((const)"OcSwapSysBoardNum'index %d exceed macro %d.\n", curBoardSwapSysNum, MAX_OC_DEVICE_NUM); + debug_infor_printf((const)"OcSwapSysBoardNum %d exceed Unreachable Max: %d.\n", curBoardSwapSysNum, MAX_OC_DEVICE_SWAP_MAX); } } -#endif -#if 0 - (void)memcpy(pTmpOcToCiData->OcSystemState,&dataBuf[ii],16);/*OCϵͳ״̬*/ - ii+=16; + /*************OCݡϲӿ***********/ + if (CI_SUCCESS == retVal) + { + /*************Ϣ***********/ + /**/ + pTmpOcToCiData->OCPsdNum = dataBuf[ii++]; + curPsdNum = pTmpOcToCiData->OCPsdNum; + if (0u != curPsdNum) + { + /*Դ״̬*/ + pTmpOcToCiData->DrvPowerState = dataBuf[ii++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->DrvPowerState, 0U); + /*ƵԴ״̬*/ + pTmpOcToCiData->CtlPowerState = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->CtlPowerState, 0U); + /*Ե1״̬*/ + pTmpOcToCiData->EdgeCtllerState1 = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->EdgeCtllerState1, 0U); + /*Ե2״̬*/ + pTmpOcToCiData->EdgeCtllerState2 = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->EdgeCtllerState2, 0U); + if ((MAX_OC_DEVICE_PSD_MAX >= curPsdNum) && (CI_SUCCESS == chStateCheck)) + { + 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++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->PsdInfo[j].OpenErrState, 0U); + /*Ź״̬*/ + pTmpOcToCiData->PsdInfo[j].CloseErrState = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->PsdInfo[j].CloseErrState, 0U); + /*״̬*/ + pTmpOcToCiData->PsdInfo[j].OpenOrCloseState = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->PsdInfo[j].OpenOrCloseState, 0U); + /*״̬*/ + pTmpOcToCiData->PsdInfo[j].InterlockRelState = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->PsdInfo[j].InterlockRelState, 0U); + /*ŹϸϢλ*/ + 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++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->PsdInfo[j].psdAlarmState, 0U); + if (CI_ERROR == chStateCheck) + { + /*Ž*/ + retVal = CI_ERROR; + debug_infor_printf((const)"OcPsdData Id %d StateError.\n", psdId); + break; + } + } + else + { + /*Ž*/ + retVal = CI_ERROR; + debug_infor_printf((const)"OcPsdData Id %d Not Find.\n", psdId); + break; + } + } + } + else + { + /*ԾϢ*/ + retVal = CI_ERROR; + debug_infor_printf((const)"OcPscNum'index %d exceed Max %d, or PsdPower | StateEdgeCtllerState Error.\n", curPsdNum, MAX_OC_DEVICE_PSD_MAX); + } + } + + } + + /*************OCӦ״̬Ϣ***********/ + if (CI_SUCCESS == retVal) + { + pTmpOcToCiData->chHaveYjk = dataBuf[ii++]; + chStateCheck = OcInputStateCheck(pTmpOcToCiData->chHaveYjk, 0U); + if (OC_HAVE_YJK == pTmpOcToCiData->chHaveYjk) + {/*߱Ӧ*/ + pTmpOcToCiData->chControlMode = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->chControlMode, 0U); + pTmpOcToCiData->chOcYjpComm = dataBuf[ii++]; + chStateCheck &= OcInputStateCheck(pTmpOcToCiData->chOcYjpComm, CI_AND_OTHER_TRANSMIT_LINK); + } + else + {/*߱Ӧ*/ + } + if (CI_ERROR == chStateCheck) + { + retVal = CI_ERROR; + debug_infor_printf((const)"OcYjkState Error.\n"); + } + } + #endif } else { retVal = CI_ERROR; + debug_infor_printf((const)"\nOc Id:%d appInfoType Error:%d\n", systemId, appInfoType); } if (CI_SUCCESS == retVal) @@ -1675,6 +1822,19 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U if (ii > dataLength) { retVal = CI_ERROR; + debug_infor_printf((const)"length Check ERROR Error\n"); + } + + if (CI_SUCCESS == retVal) + { + /*Уݳ γȣڲ㳤ȱټ¼ȵֽ */ + if ((hlhtGalHead.totalDataLen != ii - 35U) || (wApplyDataLenth != ii - 37U)) + { + /* 31ΪӦ֡ͷ+ͷǰ4ֽ */ + retVal = CI_ERROR; + debug_infor_printf((const)"length Check ERROR Error\n"); + + } } } @@ -1687,14 +1847,15 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_OC, systemId, hlhtGalHead.preOwnMsgSN); SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_OC, systemId, curntCycleNo); - if(findFlag ==0u) /*ҪµocûҵΪµoc,Ҫoc*/ - { - m_OcToCiOrginDataNum++; - } + galHeadSaved = 1; } } - + else + { + retVal = CI_ERROR; + galHeadSaved = 0; + } } else if (HLHT_HEAD_INIT == headRet) @@ -1706,7 +1867,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); + + galHeadSaved = 1; } + retVal = CI_ERROR; } else { @@ -1719,26 +1883,47 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U if (CI_SUCCESS == retVal) { - if (SetCiTransmitRecvDataCycNum(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_OC, systemId, Get2oo2CurCycleNum()) == CI_ERROR) - {/*ʧ*/ - - } - else - {/*ڳɹ*/ - - /*OCͨ״̬жOCǷͨж*/ - if (UpdateCiTransmitState(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_OC, systemId) == CI_ERROR) + if ((SYSTEM_WORK_MODE_MAIN == chMainWorckMode)&&(CI_SUCCESS == chUsableCycCheck)) + { + if ((NULL != pOcToCiCur) && (NULL != pTmpOcToCiData)) { - /*ͨ״̬ʧ*/ + if (findFlag == 0u) /*ҪµocûҵΪµoc,Ҫoc*/ + { + if (OC_SUM_MAX <= m_OcToCiOrginDataNum) + { + retVal = CI_ERROR;/*ͨOC*/ + } + else + { + m_OcToCiOrginDataNum++; + } + } + if (CI_SUCCESS == retVal) + { + (void)CommonMemCpy((void *)(pOcToCiCur), (UINT32)sizeof(OcToCiOriginDataStruct), (void *)(pTmpOcToCiData), (UINT32)sizeof(OcToCiOriginDataStruct)); + } + } + + if (SetCiTransmitRecvDataCycNum(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_OC, systemId, curntCycleNo) == CI_ERROR) + {/*ʧ*/ + } else - { - /*ͨ״̬ɹ*/ + {/*ڳɹ*/ + + /*OCͨ״̬жOCǷͨж*/ + if (UpdateCiTransmitState(GetSystemParaLocalCiId(), CI_SYSTEM_TYPE_OC, systemId) == CI_ERROR) + { + /*ͨ״̬ʧ*/ + } + else + { + /*ͨ״̬ɹ*/ + } } } - } - else if ((CI_ERROR == retVal)|| (CI_CHECK_LEN_ERROR == retVal) /*|| (0 == galHeadSaved)*/) + else if (0 == galHeadSaved) { /*ͨñͷ*/ ClearHlhtHeadCtx(CI_SYSTEM_TYPE_OC, systemId); @@ -1958,11 +2143,11 @@ void InitOcGds(void) } /* -* ѽOC豸תΪOC źŻ OC 豸 -* ˵ void +* ѽĶӦOC豸תΪOC źŻ OC 豸 +* ˵ uint8 devId OC * ֵ void */ -void ConvertOcOriginDataToOcSigSwDev(void) +void ConvertOcOriginDataToOcSigSwDev(UINT8 devId) { UINT8 i=0U; UINT16 j= 0U; @@ -1970,12 +2155,16 @@ void ConvertOcOriginDataToOcSigSwDev(void) INT16 ind = -1; OcDeviceStruct *pOcDevice = NULL; OcGdDevice *pGdDevice = NULL; - UINT8 flagRecvInvalidData = 0u;/*Ƿ豸ͱ־*/ + UINT8 chOcId = 0U; + UINT8 chOcBelongCI = 0U;/*OC*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); for (i=0U;iDeviceType == OC_DEVICE_TYPE_SWITCH) + else {/**/ ind = GetIndexBySwitchId(pOcDevice->DeviceId); if ((ind >=0) && (OC_DEVICE_TYPE_SWITCH == pOcDevice->DeviceType)) @@ -2023,20 +2212,20 @@ void ConvertOcOriginDataToOcSigSwDev(void) m_Switches[ind].BoardAddr[k] = pOcDevice->BoardAddr[k]; m_Switches[ind].BoardState[k] = pOcDevice->BoardState[k]; } + /* */ + m_Switches[ind].chSwitchIncldeZzjNum = pOcDevice->chSwitchIncldeZzjNum; + for (k = 0U; k < MAX_OC_SWITCH_INCLUDE_ZZJ_NUM; k++) + { + m_Switches[ind].szSwitchIncldeZzjState[k] = pOcDevice->szSwitchIncldeZzjState[k]; + } } else { + ; } } - else - { - } - - } - else - {/*յ豸ͷǷȷźŻַǵ*/ - flagRecvInvalidData = 1u; + } } @@ -2072,18 +2261,6 @@ void ConvertOcOriginDataToOcSigSwDev(void) } - if (1u == flagRecvInvalidData) - {/*յǷ豸*/ - m_OcToCiOrginDataArr[i].RecvErrorDevTypeCycle++; - } - else if (0u == flagRecvInvalidData) - {/*յ֡Ѵ*/ - m_OcToCiOrginDataArr[i].RecvErrorDevTypeCycle = 0; - } - else - { - /*޲*/ - } } else { @@ -2093,11 +2270,11 @@ void ConvertOcOriginDataToOcSigSwDev(void) /* -* ѽOC忨תΪOCλ -* ˵ void -* ֵ void +* ѽָOCİ忨תΪOCλ +* ˵ uint8 devId OC +* ֵ void */ -void ConvertOcOriginDataToPtData(void) +void ConvertOcOriginDataToPtData(UINT8 devId) { UINT8 i=0U; UINT16 j= 0U; @@ -2113,150 +2290,193 @@ void ConvertOcOriginDataToPtData(void) for (i=0U;iOcId) == chLocalCiId) + if ((GetCiIdByOcId(pOcOriginData->OcId) == chLocalCiId)&&((UINT8)(pOcOriginData->OcId &0xFFU) == devId)) { - if (Get2oo2CurCycleNum() - pOcOriginData->ComStartCycle <= GetCiAndOcTransmitBadEnsureCnt())/*CIOCͨδʱ*/ + /*øУ黥ͨͷЧOC*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum = 0u; + /*һOCDI忨*/ + for (j = 0U; jOcDIBoardDataNum; j++) { - m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum = 0u; - /*һOCDI忨*/ - for (j=0U;jOcDIBoardDataNum;j++) - { - boardAddr = pOcOriginData->OcDIBoardDatas[j].BoardAddr;/*忨ַ*/ - cBoardState = pOcOriginData->OcDIBoardDatas[j].BoardState; /*忨״̬*/ - boardNum = (UINT8)m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum;/*忨*/ - - - m_OcConvertedPtDataArr[pOcOriginData->OcId].OcId = pOcOriginData->OcId; - InsertOcId(pOcOriginData->OcId);/*oc id*/ - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardAddress = boardAddr;/*忨ֵַ*/ + boardAddr = pOcOriginData->OcDIBoardDatas[j].BoardAddr;/*忨ַ*/ + cBoardState = pOcOriginData->OcDIBoardDatas[j].BoardState; /*忨״̬*/ + boardNum = (UINT8)m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum;/*忨*/ - if (0U == cBoardState) + + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcId = pOcOriginData->OcId; + InsertOcId(pOcOriginData->OcId);/*oc id*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardAddress = boardAddr;/*忨ֵַ*/ + + if (0U == cBoardState) + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_NO; /*忨״̬*/ + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_YES; /*忨״̬*/ + } + + for (k = 0; k<18; k++)/*һ忨18ֽڣ1~40λ1~36λЧ*/ + { + byteRealy = pOcOriginData->OcDIBoardDatas[j].BoardCollData[k]; + + lowByte = byteRealy & 0x0fu;/*ֽڵ4λ*/ + highByte = (byteRealy >> 4) & 0x0fu;/*ֽڸ4λ*/ + + if (OC_RELAY_UP == (lowByte))/*5:*/ { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_NO; /*忨״̬*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_UP; + } + else if (OC_RELAY_DOWN == (lowByte))/*0xa:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; } else { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_YES; /*忨״̬*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; } - for (k=0;k<18;k++)/*һ忨18ֽڣ1~40λ1~36λЧ*/ + if (OC_RELAY_UP == (highByte))/*5:*/ { - byteRealy = pOcOriginData->OcDIBoardDatas[j].BoardCollData[k]; - - lowByte = byteRealy & 0x0fu;/*ֽڵ4λ*/ - highByte = (byteRealy>>4)&0x0fu;/*ֽڸ4λ*/ - - if (OC_RELAY_UP == (lowByte ) )/*5:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2] = RELAY_STATE_UP; - } - else if (OC_RELAY_DOWN == (lowByte ) )/*0xa:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2] = RELAY_STATE_DOWN; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2] = RELAY_STATE_DOWN; - } - - if (OC_RELAY_UP == (highByte ) )/*5:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2+1] = RELAY_STATE_UP; - } - else if (OC_RELAY_DOWN == (highByte ) )/*0xa:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2+1] = RELAY_STATE_DOWN; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*2+1] = RELAY_STATE_DOWN; - } -#if 0 - for (ii=0;ii<8;ii++) - { - if (((byteRealy>>ii) & 0x1) == 0x1) - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*8+ii] = RELAY_STATE_UP; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k*8+ii] = RELAY_STATE_DOWN; - } - } -#endif + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_UP; } - m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum++; - - } - - /*SOR忨*/ - for (j = 0U; j < pOcOriginData->OcSORBoardNum; j++) - { - boardAddr = pOcOriginData->OcSORBoardDatas[j].BoardAddr;/*忨ַ*/ - cBoardState = pOcOriginData->OcSORBoardDatas[j].BoardState; /*忨״̬*/ - boardNum = (UINT8)m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum;/*а忨*/ - - m_OcConvertedPtDataArr[pOcOriginData->OcId].OcId = pOcOriginData->OcId; - InsertOcId(pOcOriginData->OcId);/*oc id*/ - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardAddress = boardAddr;/*忨ֵַ*/ - - if (0U == cBoardState) + else if (OC_RELAY_DOWN == (highByte))/*0xa:*/ { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_NO; /*忨״̬*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; } else { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_YES; /*忨״̬*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; } - - for (k = 0; k<5; k++)/*SOR忨ز5ֽڣ10·ɼ*/ - { - byteRealy = pOcOriginData->OcSORBoardDatas[j].BoardCollData[k]; - - lowByte = byteRealy & 0x0fu;/*ֽڵ4λ*/ - highByte = (byteRealy >> 4) & 0x0fu;/*ֽڸ4λ*/ - - if (OC_RELAY_UP == (lowByte))/*5:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_UP; - } - else if (OC_RELAY_DOWN == (lowByte))/*0xa:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; - } - - if (OC_RELAY_UP == (highByte))/*5:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_UP; - } - else if (OC_RELAY_DOWN == (highByte))/*0xa:*/ - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; - } #if 0 - for (ii = 0; ii<8; ii++) + for (ii = 0; ii<8; ii++) + { + if (((byteRealy >> ii) & 0x1) == 0x1) { - if (((byteRealy >> ii) & 0x1) == 0x1) - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 8 + ii] = RELAY_STATE_UP; - } - else - { - m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 8 + ii] = RELAY_STATE_DOWN; - } + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 8 + ii] = RELAY_STATE_UP; + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 8 + ii] = RELAY_STATE_DOWN; } -#endif } - m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum++; +#endif } + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum++;/*DI+SI+SOR忨ڽӿڴУͨ*/ + + } + + + /*һOCSI忨*/ + for (j = 0U; jOcSIBoardDataNum; j++) + { + boardAddr = pOcOriginData->OcSIBoardDatas[j].BoardAddr;/*忨ַ*/ + cBoardState = pOcOriginData->OcSIBoardDatas[j].BoardState; /*忨״̬*/ + boardNum = (UINT8)m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum;/*忨*/ + + + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcId = pOcOriginData->OcId; + InsertOcId(pOcOriginData->OcId);/*oc id*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardAddress = boardAddr;/*忨ֵַ*/ + + if (0U == cBoardState) + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_NO; /*忨״̬*/ + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_YES; /*忨״̬*/ + } + + for (k = 0; k<12; k++)/*һSI忨12ֽڣ1~40λ1~36λЧ*/ + { + byteRealy = pOcOriginData->OcSIBoardDatas[j].BoardCollData[k]; + + lowByte = byteRealy & 0x0fu;/*ֽڵ4λ*/ + highByte = (byteRealy >> 4) & 0x0fu;/*ֽڸ4λ*/ + + if (OC_RELAY_UP == (lowByte))/*5:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_UP; + } + else if (OC_RELAY_DOWN == (lowByte))/*0xa:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; + } + + if (OC_RELAY_UP == (highByte))/*5:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_UP; + } + else if (OC_RELAY_DOWN == (highByte))/*0xa:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; + } + } + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum++;/*DI+SI+SOR忨ڽӿڴУͨ*/ + + } + /*SOR忨*/ + for (j = 0U; j < pOcOriginData->OcSORBoardNum; j++) + { + boardAddr = pOcOriginData->OcSORBoardDatas[j].BoardAddr;/*忨ַ*/ + cBoardState = pOcOriginData->OcSORBoardDatas[j].BoardState; /*忨״̬*/ + boardNum = (UINT8)m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum;/*а忨*/ + + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcId = pOcOriginData->OcId; + InsertOcId(pOcOriginData->OcId);/*oc id*/ + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardAddress = boardAddr;/*忨ֵַ*/ + + if (0U == cBoardState) + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_NO; /*忨״̬*/ + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].BoardState = RELAY_BOARD_FAULT_YES; /*忨״̬*/ + } + + for (k = 0; k<5; k++)/*SOR忨ز5ֽڣ10·ɼ*/ + { + byteRealy = pOcOriginData->OcSORBoardDatas[j].BoardCollData[k]; + + lowByte = byteRealy & 0x0fu;/*ֽڵ4λ*/ + highByte = (byteRealy >> 4) & 0x0fu;/*ֽڸ4λ*/ + + if (OC_RELAY_UP == (lowByte))/*5:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_UP; + } + else if (OC_RELAY_DOWN == (lowByte))/*0xa:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2] = RELAY_STATE_DOWN; + } + + if (OC_RELAY_UP == (highByte))/*5:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_UP; + } + else if (OC_RELAY_DOWN == (highByte))/*0xa:*/ + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; + } + else + { + m_OcConvertedPtDataArr[pOcOriginData->OcId].BoardDatas[boardNum].PosValueBuf[k * 2 + 1] = RELAY_STATE_DOWN; + } + } + m_OcConvertedPtDataArr[pOcOriginData->OcId].OcBoardNum++;/*DI+SI+SOR忨ڽӿڴУͨ*/ } } else @@ -2278,6 +2498,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 +2517,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 +2544,40 @@ UINT8 InitOcsBoardsIsScatter(void) { rtn = 0U; } + + cOcBelongCiId = 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 +2591,193 @@ 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 < MAX_OC_DEVICE_PSD_MAX; 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 + {/**/ + } +} +/* +* УӿֵΪ0x550XAA,Чֵ +* ˵ const UINT8 chInput, ӿֵUINT8 chOtherValid,0Чֵ +* ֵ CI_ERROR CI_SUCCESS +*/ +UINT8 OcInputStateCheck(const UINT8 chInput,const UINT8 chOtherValid) +{ + UINT8 retVal = CI_ERROR; + if ((0x55 == chInput) || (0xAA == chInput)) + { + retVal = CI_SUCCESS; + } + else if ((0U!=chOtherValid)&&(chOtherValid == chInput)) + { + retVal = CI_SUCCESS; + } + else + { + ;/*ERROR*/ + } + return retVal; +} + +/* +* УOCӿźŻ״̬ЧЧ +* ˵ const UINT8 chInput, ӿֵ +* ֵ CI_ERROR CI_SUCCESS +*/ +UINT8 OcInputSignalStateCheck(const UINT8 chInput) +{ + UINT8 retVal = CI_ERROR; + switch (chInput) { + case OC_SIGNAL_SHOWCOLOR_RED: + case OC_SIGNAL_SHOWCOLOR_YELLOW: + case OC_SIGNAL_SHOWCOLOR_REDYELLOW: + case OC_SIGNAL_SHOWCOLOR_GREEN: + case OC_SIGNAL_SHOWCOLOR_WHITE: + case OC_SIGNAL_SHOWCOLOR_REDWHITE: + case OC_SIGNAL_SHOWCOLOR_BLUE: + case OC_SIGNAL_SHOWCOLOR_YELLOW2: + case OC_SIGNAL_SHOWCOLOR_GREEN2: + case OC_SIGNAL_SHOWCOLOR_GREENYELLOW: + case OC_SIGNAL_SHOWCOLOR_DOUBLEYELLOW: + case OC_SIGNAL_SHOWCOLOR_DOUBLEGREEN: + case OC_SIGNAL_SHOWCOLOR_ALL_CLOSE: + case OC_SIGNAL_SHOWCOLOR_RED_BREAK: + case OC_SIGNAL_SHOWCOLOR_YELLOW_BREAK: + case OC_SIGNAL_SHOWCOLOR_GREEN_BREAK: + case OC_SIGNAL_SHOWCOLOR_WHITE_BREAK: + case OC_SIGNAL_SHOWCOLOR_BLUE_BREAK: + case OC_SIGNAL_SHOWCOLOR_YELLOW_2_BREAK: + case OC_SIGNAL_SHOWCOLOR_GREEN_2_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: + case OC_SIGNAL_SHOWCOLOR_UNKNOWN: + retVal = CI_SUCCESS; + break; + default: + retVal = CI_ERROR; + } + return retVal; +} + + @@ -2335,15 +2788,6 @@ UINT8 InitOcsBoardsIsScatter(void) - - - - - - - - - diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h index b2fbffc..47494d8 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackOcData.h @@ -48,16 +48,17 @@ #include "../LogRecord/LogRecord.h" #endif -#define MAX_OC_DEVICE_NUM ((UINT16)150) /*һOCֶ֧ٸ豸*/ -#define MAX_OC_DI_BOARD_NUM ((UINT16)20) /*һOC֧DI忨*/ -#define MAX_OC_DO_BOARD_NUM ((UINT16)20) /*һOC֧DO忨*/ -#define MAX_OC_SOR_BOARD_NUM ((UINT16)20) /*һOC֧SOR忨*/ -#define MAX_OC_PLUS_BOX_NUM ((UINT16)3) /*һOCִ֧е*/ -#define MAX_OC_SWITCH_INCLUDE_ZZJ_NUM ((UINT16)4) /*һ֧ת޻*/ -#define MAX_OC_SWITCH_INCLUDE_BOARD_NUM ((UINT8)4) /*һ֧忨*/ - -#define Max_OC_GD_NUM ((UINT16)100) /*һoc֧ٸ*/ +#define MAX_OC_DEVICE_SWITCH_MAX ((UINT16)84) /*һOCֵ֧豸ɴֵ*/ +#define MAX_OC_DEVICE_SIGNAL_MAX ((UINT16)168) /*һOC֧źŻ豸ɴֵ*/ +#define MAX_OC_DEVICE_NUM ((UINT16)MAX_OC_DEVICE_SWITCH_MAX+MAX_OC_DEVICE_SIGNAL_MAX) /*һOCֶ֧ٸ豸ɴֵ*/ +#define MAX_OC_BOARD_NUM ((UINT16)22) /*һOC֧DI/SI/DO/SO/SOR忨ɴֵ*/ +#define MAX_OC_PLUS_BOX_NUM ((UINT16)3) /*һOCִ֧е䣨ɴֵ*/ +#define MAX_OC_DEVICE_SWAP_MAX ((UINT16)83) /*һOCϵ忨(MAX_OC_DEVICE_NUM/2)ɴֵ */ +#define MAX_OC_SWITCH_INCLUDE_ZZJ_NUM ((UINT16)10) /*һ֧ת޻ɴֵ*/ +#define MAX_OC_SWITCH_INCLUDE_BOARD_NUM ((UINT8)10) /*һ֧忨ɴֵ*/ +#define Max_OC_GD_NUM ((UINT16)252) /*һoc֧ٸΣɴֵ*/ +#define MAX_OC_DEVICE_PSD_MAX ((UINT8)2) /*һOCɴֵ*/ #define OC_CI_STATE_INFO ((UINT16)0x8802) /*OCCI״̬Ϣ*/ #define CI_OC_CONTROL_INFO ((UINT16)0x8801) /*CIOC*/ @@ -69,6 +70,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*/ @@ -82,13 +92,27 @@ typedef struct s_OcDevState UINT8 BoardState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*忨״̬ 0x0000 󷢴*/ }OcDeviceStruct; -typedef struct s_OcBoardData +typedef struct s_OcDoBoardData { UINT8 BoardAddr; /*忨ַ*/ UINT8 BoardState; /*忨״̬ 0x00 󷢴*/ UINT8 BoardCollData[18]; /*ɼ*/ }OcDIBoard; +typedef struct s_OcSIBoardData +{ + UINT8 BoardAddr; /*忨ַ*/ + UINT8 BoardState; /*忨״̬ 0x00 󷢴*/ + UINT8 BoardCollData[12]; /*ɼ*/ +}OcSIBoard; + +typedef struct s_OcSorBoardData +{ + UINT8 BoardAddr; /*忨ַ*/ + UINT8 BoardState; /*忨״̬ 0x00 󷢴*/ + UINT8 BoardCollData[5]; /*ɼ*/ +}OcSorBoard; + typedef struct s_OcGd { UINT16 OcId; /*OC*/ @@ -117,6 +141,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*/ @@ -127,14 +168,20 @@ typedef struct S_OcToCiDataStruct UINT16 OcGdNum;/*һocйε*/ OcGdDevice OcGdDevices[Max_OC_GD_NUM];/*һocй豸*/ - UINT16 OcDIBoardDataNum; /*һocвɼ忨*/ - OcDIBoard OcDIBoardDatas[MAX_OC_DI_BOARD_NUM]; /*һocвɼ忨*/ - - UINT16 OcDOBoardNum;/*һOCвɼ忨*/ - OcDoBoard OcDOBoardDatas[MAX_OC_DO_BOARD_NUM]; /*OC忨*/ + UINT16 OcDIBoardDataNum; /*һocDI忨*/ + OcDIBoard OcDIBoardDatas[MAX_OC_BOARD_NUM]; /*һocDI忨*/ - UINT16 OcSORBoardNum;/*һOC̵忨*/ - OcDIBoard OcSORBoardDatas[MAX_OC_SOR_BOARD_NUM]; /*OCİȫ忨*/ + UINT16 OcSIBoardDataNum; /*һocSI忨*/ + OcSIBoard OcSIBoardDatas[MAX_OC_BOARD_NUM]; /*һocSI忨*/ + + UINT16 OcDOBoardNum;/*һOCDO忨*/ + OcDoBoard OcDOBoardDatas[MAX_OC_BOARD_NUM]; /*OCDO忨*/ + + UINT16 OcSOBoardNum;/*һOCSO忨*/ + OcDoBoard OcSOBoardDatas[MAX_OC_BOARD_NUM]; /*OCSO忨*/ + + UINT8 OcSORBoardNum;/*һOC̵忨*/ + OcSorBoard OcSORBoardDatas[MAX_OC_BOARD_NUM]; /*OCİȫ忨*/ UINT8 PowerAState;/*AϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ UINT8 PowerBState;/*BϵԴ״̬0x55-˫·տ0xaa-·տ쳣0xFF-˫·տ쳣*/ @@ -145,11 +192,20 @@ typedef struct S_OcToCiDataStruct OcPlusBox szPlusBox[MAX_OC_PLUS_BOX_NUM];/*ִеϢ*/ UINT16 OCBoardSwapSysNum;/*OCϵ忨*/ - UINT8 SwapSysBoardId[MAX_OC_DEVICE_NUM];/*OCϵ忨ID*/ + UINT8 SwapSysBoardId[MAX_OC_DEVICE_SWAP_MAX];/*OCϵ忨ID*/ + + UINT8 OCPsdNum;/**/ + UINT8 DrvPowerState;/*Դ״̬*/ + UINT8 CtlPowerState;/*ƵԴ״̬*/ + UINT8 EdgeCtllerState1;/*Ե1״̬*/ + UINT8 EdgeCtllerState2;/*Ե2״̬*/ + OcToCiPsdInfo PsdInfo[MAX_OC_DEVICE_PSD_MAX];/*Ϣ*/ + + UINT8 chHaveYjk; /*Ƿ߱Ӧ*/ + UINT8 chControlMode; /*״̬*/ + UINT8 chOcYjpComm; /*OCYJPͨ״̬*/ UINT32 ComStartCycle; /*ͨſʼڣʹøжOCCIж*/ - - UINT16 RecvErrorDevTypeCycle; /*յ豸*/ }OcToCiOriginDataStruct; @@ -159,6 +215,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 +323,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" { @@ -314,18 +379,18 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor /* -* ѽOC豸תΪOC źŻ OC 豸 -* ˵ void -* ֵ void +* ѽĶӦOC豸תΪOC źŻ OC 豸 +* ˵ uint8 devId OC +* ֵ void */ -void ConvertOcOriginDataToOcSigSwDev(void); +void ConvertOcOriginDataToOcSigSwDev(UINT8 devId); /* -* ѽOC忨תΪOCλ -* ˵ void -* ֵ void +* ѽָOCİ忨תΪOCλ +* ˵ uint8 devId OC +* ֵ void */ -void ConvertOcOriginDataToPtData(void); +void ConvertOcOriginDataToPtData(UINT8 devId); /* * ʼOC豸 @@ -382,7 +447,7 @@ INT16 GetIndexBySwitchId(UINT16 swId); */ INT16 GetIndexByGdId(UINT16 gdId); - +#if 0 /* * УOcCIĵ֡ݳȺϷ * ˵ const UINT8* dataBuf, ݻ @@ -399,6 +464,50 @@ UINT8 CheckOc2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength); * */ void ResetOcOriginalState(const UINT8 ocId); +#endif +/* +* Ϊָ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); +/* +* УӿֵΪ0x550XAA,Чֵ +* ˵ const UINT8 chInput, ӿֵUINT8 chOtherValid,0Чֵ +* ֵ CI_ERROR CI_SUCCESS +*/ +UINT8 OcInputStateCheck(const UINT8 chInput, const UINT8 chOtherValid); +/* +* УOCӿźŻ״̬ЧЧ +* ˵ const UINT8 chInput, ӿֵ +* ֵ CI_ERROR CI_SUCCESS +*/ +UINT8 OcInputSignalStateCheck(const UINT8 chInput); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackTmcData.c index 5e54dc7..1eb06c9 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); /* * ȫͨųϢ @@ -147,7 +147,7 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId) localCiId = GetSystemParaLocalCiId(); /*ȡID*/ wTmcName = (CI_SYSTEM_TYPE_TMC)*256U + systemId; - wTiocName = (CI_SYSTEM_TYPE_CI)*256U + localCiId; + wTiocName = (CI_SYSTEM_TYPE_RCI)*256U + localCiId; curntCycleNo = Get2oo2CurCycleNum(); /* ս */ @@ -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; } } @@ -860,7 +874,7 @@ UINT8 PackTiocToTmcData( UINT8 deviceId) localCi = GetSystemParaLocalCiId(); /*ȡID*/ /* ȡGALͷϢ */ - retVal = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCi, 0U, &cTiocEtcsId); + retVal = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCi, 0U, &cTiocEtcsId); retVal &= dquDevName2HlhtId((CI_SYSTEM_TYPE_TMC * 256U) + deviceId, 0U, &cTmcEtcsId); retVal &= GetCiEmapCheckVer(localCi, &emapCheckVer, CI_SYSTEM_TYPE_TMC); dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_TMC, deviceId); @@ -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..2888b7a 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c @@ -352,7 +352,7 @@ static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength, c * CiIvocѩƶϢ * ˵ UINT8* pDataBuf ݻ * UINT16 *pDataLength ݳ() -* UINT16 wTrainId гID0x14 +* UINT16 wTrainId гID0x10 * ֵ CI_ERROR 0 ʧ * CI_SUCCESS 1 ɹ * Created By LQ 2023.11.10 @@ -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); /* @@ -414,13 +414,51 @@ static UINT8 PackCiToIvocFarNoOccuLogInfo(UINT8* pDataBuf, UINT16* wDataLength, */ static UINT8 PackCiToIvocPosMonitorInfo(UINT8* pDataBuf, UINT16* wDataLength, const UINT16 wTrainId); +/* +* RCģʽVOBC֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* VobcToRcDataStruct *pstVobcToRcDataStruݽṹָ +* UINT8* saveGalHead,ͨñͷǷ,1:0: +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +static UINT8 ParseVobcToRcDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId, VobcToRcDataStruct* pstVobcToRcDataStru, UINT8* pSaveGalHead, const UINT16 logId); + +/* +* 黥ͨRC->VOBC֡ +* ˵ +* const UINT8 vobcId ĿVOBC ID +* const UINT16 logId ĿVOBC ߼ID1˻2ˣ +* ֵ 0:ʧ +* 1:ݳɹ +*/ +static UINT8 PackRcToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId); +/* +* 黥ͨRC->IVOC֡ +* ˵ +* const UINT8 vobcId ĿVOBC ID +* const UINT16 logId ĿVOBC ߼ID1˻2ˣ +* ֵ 0:ʧ +* 1:ݳɹ +*/ +static UINT8 PackRcToIvocDataHLHTHeart(const UINT8 vobcId, const UINT16 logId); + + /*ʹ*/ -VobcToCiDataStruct VobcToCiDataStru[VOBC_TO_CI_SUM_MAX] = {0u};/*ͨŵVobcϢ*/ +VobcToCiDataStruct VobcToCiDataStru[VOBC_TO_CI_SUM_MAX] = {0u};/*ͨŵVobcϢCIģʽ£洢510ϢRCģʽ£洢ϵͳIVOCϢ*/ +UINT8 VobcToCiSum = 0u;/*ͨŵVobcĿ,CIģʽ¼510ͨRCģʽ¼IVOCͨ*/ + +VobcToRcDataStruct VobcToRcDataStru[VOBC_TO_CI_SUM_MAX] = { 0u };/*RCͨŵVOBCϢCIģʽ²ʹáRCģʽ£洢RCͨŵ510Ϣ*/ +UINT8 VobcToRcSum = 0u;/*RCͨŵVobcĿRCģʽʹã¼RCͨŵVOBC*/ + VobcBackUpToCiDataStruct VobcBackUpToCiDataStru[VOBC_BACKUP_TO_CI_SUM_MAX] = { 0u };/*ʹúģʽͨŵVobcϢ*/ -UINT8 VobcToCiSum = 0u;/*ͨŵVobcĿ*/ + /*վӳ @@ -449,7 +487,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 +498,17 @@ 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); - } - else if (LINE_CC == lineIdentity)/*·*/ - { - retVal = ParseIvocToCiDataFrameCC(dataBuf, dataLength, systemId, &(VobcToCiDataStru[VobcToCiSum]), &galHeadSaved, logId); + retVal = ParseVobcToCiDataFrameFAOHLHT(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved,logId); } else { @@ -484,33 +517,44 @@ 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 { if ((LINE_HLHT == lineIdentity) || (LINE_FAOHLHT == lineIdentity) || (LINE_FAOHLHT_ONESELF == lineIdentity) - || (LINE_FAOHLHT_ONESELFSECOND == lineIdentity) || (LINE_CC == lineIdentity)) + || (LINE_FAOHLHT_ONESELFSECOND == lineIdentity)) { /*ͨͷѾˣִͨͷ򣬳Ҳͨͷ*/ if (0u == galHeadSaved) { - ClearHlhtHeadCtx(CI_SYSTEM_TYPE_VOBC, systemId); + if (LINE_CC == lineIdentity) + { + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_IVOC, systemId); + } + else + { + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_VOBC, systemId); + } } else { @@ -598,7 +642,7 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength { ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); vobcName = (CI_SYSTEM_TYPE_VOBC)* 256U + systemId; - ciName = (CI_SYSTEM_TYPE_CI)* 256U + localCiId; + ciName = (CI_SYSTEM_TYPE_RCI)* 256U + localCiId; /*ͨϢͷ*/ vobvBackupGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); ii += 2U; @@ -833,7 +877,7 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength if (0xFFFFFFFFU == dwHlhtNs) { /*ĬֵǰIDΪ0*/ - vobcBackupToCiCur->wTrainHeadTrainId = 0x14FFU; + vobcBackupToCiCur->wTrainHeadTrainId = TRAIN_ID_INVAL; } else { @@ -1108,7 +1152,7 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength * ֵ 0:ʧ * 1:ݳɹ */ -UINT8 PackCiToVobcData(void) +UINT8 PackVobcData(void) { UINT32 ii = 0u; UINT8 retVal = CI_SUCCESS; @@ -1116,70 +1160,93 @@ UINT8 PackCiToVobcData(void) UINT8 initVobcIds[UINT8_MAX] = { 0u }; UINT16 initVobcIdLogIds[UINT8_MAX] = { 0u }; UINT8 initVobcSum = 0u; + UINT8 cFuncRet = CI_ERROR; + UINT8 cRcWorkMode = 0U; + + cRcWorkMode = GetLocalRcWorkMode(); + debug_infor_printf((const)"\nPackCiToVobcData VobcToCiSum = %d\n", VobcToCiSum); /*ӡCIͨŵVOBCĿ*/ for (ii = 0u; (ii < (UINT32)VobcToCiSum) && (ii < VOBC_TO_CI_SUM_MAX); ii++) { - if (LINE_HLHT == lineIdentity)/*ͨ·*/ + if (RC_WORK_MODE_CI == cRcWorkMode) { - retVal = PackCiToVobcDataHLHT(&(VobcToCiDataStru[ii])); - } - else if (LINE_FAO == lineIdentity) - {/*FAO*/ - retVal = PackCiToVobcDataFAO(&(VobcToCiDataStru[ii])); - } - else if (LINE_FAOHLHT == lineIdentity) - {/*FAO+ͨ·*/ - retVal = PackCiToVobcDataFAOHLHT(&(VobcToCiDataStru[ii])); - } - else if (LINE_CC == lineIdentity) - { - /*·*/ - retVal = PackCiToIvocDataCC(&(VobcToCiDataStru[ii])); - } - else if (LINE_FAOHLHT_ONESELF == lineIdentity) - { - retVal = PackCiToVobcDataFAOHLHToneSelf(&(VobcToCiDataStru[ii])); - } - else if (LINE_FAOHLHT_ONESELFSECOND == lineIdentity) - { - retVal = PackCiToVobcDataFAOHLHToneSelfSecond(&(VobcToCiDataStru[ii])); - } - else - { - retVal = CI_ERROR; - } -#if 0 - if (CI_ERROR==chRetVal) - { - break; /*ע͵ֹijʧܣijVOBCղϢCIж*/ - } -#endif - } - - if ((LINE_HLHT == lineIdentity) - || (LINE_FAOHLHT == lineIdentity) - || (LINE_CC == lineIdentity) - || (LINE_FAOHLHT_ONESELF == lineIdentity) - || (LINE_FAOHLHT_ONESELFSECOND == lineIdentity))/*ͨ·FAO+ͨ·*/ - { - /*VOBCͨñͷݣЭ涨VOBC״θCIʱȻУ޷ͨ޷õݣCIҪVOBC*/ - if (CI_SUCCESS == GetHlhtInitHeadDevsByDevType(CI_SYSTEM_TYPE_VOBC, initVobcIds, (UINT8)sizeof(initVobcIds), &initVobcSum, initVobcIdLogIds)) - { - for (ii = 0u; ii < initVobcSum; ii++) + if (LINE_HLHT == lineIdentity)/*ͨ·*/ { - retVal &=PackCiToVobcDataHLHTHeart(initVobcIds[ii], initVobcIdLogIds[ii]); - debug_infor_printf((const)"\nPACK HEARTFARME TO VOBC %d", initVobcIds[ii]); /*ӡϢ*/ + retVal = PackCiToVobcDataHLHT(&(VobcToCiDataStru[ii])); + } + else if (LINE_FAO == lineIdentity) + {/*FAO*/ + retVal = PackCiToVobcDataFAO(&(VobcToCiDataStru[ii])); + } + else if (LINE_FAOHLHT == lineIdentity) + {/*FAO+ͨ·*/ + retVal = PackCiToVobcDataFAOHLHT(&(VobcToCiDataStru[ii])); + } + else if (LINE_FAOHLHT_ONESELF == lineIdentity) + { + retVal = PackCiToVobcDataFAOHLHToneSelf(&(VobcToCiDataStru[ii])); + } + else if (LINE_FAOHLHT_ONESELFSECOND == lineIdentity) + { + retVal = PackCiToVobcDataFAOHLHToneSelfSecond(&(VobcToCiDataStru[ii])); + } + else + { + retVal = CI_ERROR; } } else + {/*RCģʽ·ʶ϶dz*/ + /*·*/ + retVal = PackCiToIvocDataCC(&(VobcToCiDataStru[ii])); + + } + } + + if (RC_WORK_MODE_CI == cRcWorkMode) + { + if ((LINE_HLHT == lineIdentity) + || (LINE_FAOHLHT == lineIdentity) + || (LINE_FAOHLHT_ONESELF == lineIdentity) + || (LINE_FAOHLHT_ONESELFSECOND == lineIdentity))/*ͨ·FAO+ͨ·*/ { + /*VOBCͨñͷݣЭ涨VOBC״θCIʱȻУ޷ͨ޷õݣCIҪVOBC*/ + cFuncRet = GetHlhtInitHeadDevsByDevType(CI_SYSTEM_TYPE_VOBC, initVobcIds, (UINT8)sizeof(initVobcIds), &initVobcSum, initVobcIdLogIds); + if (CI_SUCCESS == cFuncRet) + { + for (ii = 0u; ii < initVobcSum; ii++) + { + retVal &= PackCiToVobcDataHLHTHeart(initVobcIds[ii], initVobcIdLogIds[ii]); + debug_infor_printf((const)"\nPACK HEARTFARME TO VOBC %d", initVobcIds[ii]); /*ӡϢ*/ + } + } + else + {/*޴*/ + } + } + else + {/*޴*/ } } else - { + {/*RCģʽ·Ϊ*/ + cFuncRet = GetHlhtInitHeadDevsByDevType(CI_SYSTEM_TYPE_IVOC, initVobcIds, (UINT8)sizeof(initVobcIds), &initVobcSum, initVobcIdLogIds); + + if (CI_SUCCESS == cFuncRet) + { + for (ii = 0u; ii < initVobcSum; ii++) + { + retVal &= PackRcToIvocDataHLHTHeart(initVobcIds[ii], initVobcIdLogIds[ii]); + debug_infor_printf((const)"\nPACK HEARTFARME TO IVOC %d", initVobcIds[ii]); /*ӡϢ*/ + } + } + else + {/*޴*/ + } } + return retVal; } @@ -1286,6 +1353,16 @@ UINT8 GetVobcToCiSum(void) return VobcToCiSum; } +/* +* ȡIvocRCṹ +* ˵ void +* ֵ +*/ +UINT8 GetIvocToRcSum(void) +{ + return VobcToCiSum; +} + /* * ȡűϢ * ˵ const UINT16 psdId :ID @@ -1333,35 +1410,6 @@ UINT8 GetPsdEditGroupInfo(const UINT16 psdId) return retVal; } -/* -* VOBC͸CIϢṹУɾָλõ -* ˵ const UINT8 idx:VOBC͸CIϢṹλ -* ֵ 0:ʧ -* 1:ɹ -*/ -UINT8 RemoveVobcToCiMsgAt(UINT8 idx) -{ - UINT8 retVal = CI_ERROR; - UINT8 afIdx; - if(idx>=VobcToCiSum) - { - retVal = CI_ERROR; - } - else - { - for(afIdx=idx+1U;afIdxCIźŻID*/ - - -#endif UINT8 ci_vobcPrtclVersion = 0u; ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); vobcName = (CI_SYSTEM_TYPE_VOBC)*256U + systemId; - ciName = (CI_SYSTEM_TYPE_CI)*256U + localCiId; + ciName = (CI_SYSTEM_TYPE_RCI)*256U + localCiId; /*ͨϢͷ*/ hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); @@ -1466,6 +1510,8 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL ii += 2u; vobcToCiDataStru->appInfoType = appInfoType; vobcToCiDataStru->VobcId = systemId; + + vobcToCiDataStru->controlMode = TRAIN_MAIN_MODE;/*״̬ӿ*/ #if 0 vobcToCiDataStru->vobcInfoStartCycNum = Get2oo2CurCycleNum();/*CIյVOBC͵Ϣʼ*/ #endif @@ -1526,7 +1572,7 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL } else { - vobcToCiDataStru->trainEditGroupInfo = vobcToCiDataStru->trainEditGroupInfo; + ;/**/ } psdSum = dataBuf[ii]; @@ -1562,7 +1608,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 +1624,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 { @@ -1812,6 +1855,7 @@ static UINT8 ParseVobcToCiDataFrameFAO(const UINT8* dataBuf, const UINT16 dataLe if(CI_SUCCESS == retVal) { vobcToCiDataStru->ComStartCycle = Get2oo2CurCycleNum(); + vobcToCiDataStru->controlMode = TRAIN_MAIN_MODE;/*״̬ӿ*/ for (jj = 0u; jj < vobcToCiDataStru->PsdSum; jj++) {/*ſϢ*/ @@ -1912,25 +1956,26 @@ 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))) + if ((CI_SUCCESS == dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI*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))) { retVal = CI_SUCCESS; } @@ -2027,7 +2072,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 +2082,7 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) if (CI_SUCCESS == retVal) { - startSigColour = GetSignalShowColor(sigId);/*ȡźŻǰʾɫ*/ + startSigColour = GetSignalCurColor(sigId);/*ȡźŻǰʾɫ*/ if (SIGNAL_OPEN == GetSignalOpenCloseState(startSigColour))/*ȡʼźŻ״̬*/ {/*źſ*/ @@ -2051,8 +2096,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 +2138,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)) @@ -2123,7 +2168,7 @@ static UINT8 PackCiToVobcDataHLHT(VobcToCiDataStruct *vobcToCiDataStru) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ #endif @@ -2392,7 +2437,7 @@ static UINT8 PackCiToVobcDataFAO(VobcToCiDataStruct *vobcToCiDataStru) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ @@ -2435,11 +2480,20 @@ static UINT8 PackCiToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) UINT16 dstDevId = 0u; UINT8 outnetSafeSendRtn = 0u; UINT8 functionreturn= 0u; - + UINT8 chVobcType = CI_SYSTEM_TYPE_VOBC; + lineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*ȡVOBC-CIӿڱʶ*/ + if (LINE_CC == lineIdentity) + { + chVobcType = CI_SYSTEM_TYPE_IVOC; + } + else + { + chVobcType = CI_SYSTEM_TYPE_VOBC; + } ci_vobcPrtclVersion = GetVersionOfVOBCToCI(); - functionreturn = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_CI * 256U + localCiId),0U,&ciEtcsId) ; - functionreturn &= dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_VOBC *256U) + vobcId,logId,&vobcEtcsId); - functionreturn &= GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC); + functionreturn = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_RCI * 256U + localCiId),0U,&ciEtcsId) ; + functionreturn &= dquDevName2HlhtId(((UINT16)chVobcType *256U) + vobcId,logId,&vobcEtcsId); + functionreturn &= GetCiEmapCheckVer(localCiId, &emapCheckVer, chVobcType); /*ȻȡʱϢȡɹбҪ*/ if (CI_SUCCESS == functionreturn) { @@ -2452,8 +2506,6 @@ static UINT8 PackCiToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) if (CI_SUCCESS == retVal) { - lineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*ȡVOBC-CIӿڱʶ*/ - ii = 0u; /*ʼӦ֡*/ @@ -2479,9 +2531,9 @@ static UINT8 PackCiToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) ii += 4u; ShortToChar((UINT16)appCycleTime, &CiToVobcDataBuffer[ii]);/*豸ͨѶ*/ ii += 2u; - LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, vobcId), &CiToVobcDataBuffer[ii]);/*ԷϢкţյԷһϢеĶԷϢк*/ + LongToChar(GetHLHTHeadCtxSrcCrntSN(chVobcType, vobcId), &CiToVobcDataBuffer[ii]);/*ԷϢкţյԷһϢеĶԷϢк*/ ii += 4u; - LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, vobcId), &CiToVobcDataBuffer[ii]);/*յһϢʱк*/ + LongToChar(GetHLHTHeadCtxCiRcvSN(chVobcType, vobcId), &CiToVobcDataBuffer[ii]);/*յһϢʱк*/ ii += 4u; if (LINE_HLHT == lineIdentity) {/*ͨ·*/ @@ -2524,13 +2576,13 @@ static UINT8 PackCiToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) CiToVobcDataBuffer[31U] = (UINT8)((UINT8)((ii - 33U) >> 8u) & 0xffu); CiToVobcDataBuffer[32U] = (UINT8)((ii - 33U) & 0xffu); - dstDevId = (UINT16)(CI_SYSTEM_TYPE_VOBC << 8U) | ((UINT16)vobcId); + dstDevId = (UINT16)(chVobcType << 8U) | ((UINT16)vobcId); outnetSafeSendRtn = OutnetSafeSend(dstDevId, logId, &CiToVobcDataBuffer[0U], ii); if(1u == outnetSafeSendRtn) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ #endif @@ -2594,7 +2646,7 @@ static UINT8 ParseVobcToCiDataFrameFAOHLHT(const UINT8* dataBuf, const UINT16 da UINT16 wTempDataLenIndex = 0U;/*ʱݳ*/ vobcName = (CI_SYSTEM_TYPE_VOBC)*256U + systemId; - ciName = (CI_SYSTEM_TYPE_CI)*256U + localCiId; + ciName = (CI_SYSTEM_TYPE_RCI)*256U + localCiId; /*ͨϢͷ*/ hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]); @@ -2664,6 +2716,7 @@ static UINT8 ParseVobcToCiDataFrameFAOHLHT(const UINT8* dataBuf, const UINT16 da ; /**/ } vobcToCiDataStru->VobcId = systemId; + vobcToCiDataStru->controlMode = TRAIN_MAIN_MODE;/*״̬ӿ*/ ii += 2u;/*Ԥֽ*/ @@ -2860,7 +2913,7 @@ static UINT8 PackCiToVobcDataFAOHLHT(VobcToCiDataStruct *vobcToCiDataStru) UINT16 wTempSendIndex = 0U; /*ȻȡʱϢȡɹбҪ*/ - localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI*256U) + localCiId,0U,&ciEtcsId); + localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI*256U) + localCiId,0U,&ciEtcsId); vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC*256U) + (UINT8)(vobcToCiDataStru->VobcId),vobcToCiDataStru->vobcLogId,&vobcEtcsId); ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer,CI_SYSTEM_TYPE_VOBC); if ((CI_SUCCESS == localhlhtId) && (CI_SUCCESS == vobcHlhtId) && (CI_SUCCESS == ciEmapCheckVer)) @@ -3099,6 +3152,8 @@ static UINT8 PackCiToVobcDataFAOHLHT(VobcToCiDataStruct *vobcToCiDataStru) {/*Ĭֵ*/ CiToVobcDataBuffer[ii++] = CI_VOBC_GAP_DETECT_STATUS_DEFAULT; /*϶̽״̬Ĭֵδ/޴˹*/ } + + } } @@ -3214,7 +3269,7 @@ static UINT8 PackCiToVobcDataFAOHLHT(VobcToCiDataStruct *vobcToCiDataStru) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ #endif @@ -3327,9 +3382,12 @@ 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;/*Ծк*/ + UINT8 chControlMode = 0U;/*ģʽ*/ - vobcName = (CI_SYSTEM_TYPE_VOBC) * 256U + systemId; - ciName = (CI_SYSTEM_TYPE_CI) * 256U + localCiId; + vobcName = (CI_SYSTEM_TYPE_IVOC) * 256U + systemId; + ciName = (CI_SYSTEM_TYPE_RCI) * 256U + localCiId; if ((NULL == pDataBuf) || (NULL == pstVobcToCiDataStru) @@ -3373,7 +3431,7 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe pstVobcToCiDataStru->vobcLogId = logId;/*洢VOBC߼ID1˻2*/ /*ͨϢͷУͨ && ʱЧżϢ*/ /*һյVOBCϢʱУ鲻ֻͨ¼curntOwnMsgԼǰں*/ - headRet = HLHTRecvCommonPacketHeadCheck(vobcName, ciName, IVOC_CI_INTERFACE_INFOTYPE, CI_IVOC_PRTCL_VER, &hlhtGalHead, &errCode, logId, CI_SYSTEM_TYPE_VOBC); + headRet = HLHTRecvCommonPacketHeadCheck(vobcName, ciName, IVOC_CI_INTERFACE_INFOTYPE, CI_IVOC_PRTCL_VER, &hlhtGalHead, &errCode, logId, CI_SYSTEM_TYPE_IVOC); debug_infor_printf((const)"\nVOBC %d GAL Check Result:%d errCode:%d", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ @@ -3991,7 +4049,7 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe ii++; dwEaBuildCyc =LongFromChar(&pDataBuf[ii]); ii += 4u; - if ((0x1401u <= wEaTrainId) && (0x14feu >= wEaTrainId) && ((EA_PROTECT_BUILD_Y == chEaState) || (EA_PROTECT_BUILD_N == chEaState))) + if ((TRAIN_ID_MIN_IVOC < wEaTrainId) && (TRAIN_ID_MAX_IVOC > wEaTrainId) && ((EA_PROTECT_BUILD_Y == chEaState) || (EA_PROTECT_BUILD_N == chEaState))) { pstVobcToCiDataStru->stEaInfo[chEaIndex].wDeviceId = wEaTrainId; pstVobcToCiDataStru->stEaInfo[chEaIndex].chDeviceStatus = chEaState; @@ -4364,7 +4422,7 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe if (0xFFFFFFFFU == dwHlhtNs) { /*ĬֵǰIDΪ0*/ - pstVobcToCiDataStru->wHeadVobcId = 0x14FFU; + pstVobcToCiDataStru->wHeadVobcId = TRAIN_ID_INVAL; } else { @@ -4384,6 +4442,54 @@ 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) + { + chControlMode = pDataBuf[ii++]; + if ((TRAIN_MAIN_MODE == chControlMode) || (TRAIN_STANDBY_MODE == chControlMode)) + { + pstVobcToCiDataStru->controlMode = chControlMode; + } + else + { + chRetVal = CI_ERROR; + } + } + + /*гϢ*/ if (CI_SUCCESS == chRetVal) { @@ -4524,12 +4630,12 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe if (CI_SUCCESS == chRetVal) { /*ݾУ飬Ҫ洢ͨñ*/ - SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.comPeriod); - SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.crntOwnMsgSN); - SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.recvOppMsgSN); - SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.preOwnMsgSN); - SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, systemId, curntCycleNo); - SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_VOBC, systemId, logId); + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_IVOC, systemId, curntCycleNo); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_IVOC, systemId, logId); *pSaveGalHead = 1U; } @@ -4543,12 +4649,12 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe { if (curntCycleNo > 0U)/*жŴ0Ϊ0Ч*/ { - SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.comPeriod); - SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.crntOwnMsgSN); - SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.recvOppMsgSN); - SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.preOwnMsgSN); - SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, systemId, curntCycleNo); - SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_VOBC, systemId, logId); + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_IVOC, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_IVOC, systemId, curntCycleNo); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_IVOC, systemId, logId); *pSaveGalHead = 1U; } @@ -4560,51 +4666,51 @@ static UINT8 ParseIvocToCiDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLe /*ATSֵطVOBC-CIݽӿϢʹ*/ if (GAL_COMPARE_INFO_TYPE_ERR == (errCode & GAL_COMPARE_INFO_TYPE_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIݷͷʶϢ*/ else if (GAL_COMPARE_SEND_FLAG_ERR == (errCode & GAL_COMPARE_SEND_FLAG_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIݽշ־Ϣ*/ else if (GAL_COMPARE_RECV_FLAG_ERR == (errCode & GAL_COMPARE_RECV_FLAG_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIݰ汾УʧϢ*/ else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (errCode & GAL_COMPARE_EMAP_VER_COMP_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIݱԷյһϢʱкŴ*/ else if (GAL_COMPARE_MSG_BDS_SN_ERR == (errCode & GAL_COMPARE_MSG_BDS_SN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIݶԷϢкżյһϢʱкŴ*/ else if (GAL_COMPARE_MSG_SN_ERR == (errCode & GAL_COMPARE_MSG_SN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIЭ汾Ŵ*/ else if (GAL_COMPARE_PROTOCOL_VER_ERR == (errCode & GAL_COMPARE_PROTOCOL_VER_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIӦòݳЧ*/ else if (GAL_COMPARE_APP_LEN_ERR == (errCode & GAL_COMPARE_APP_LEN_ERR)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ATS); } /*ATSֵطVOBC-CIͨڴ */ else if (GAL_COMPARE_COM_PERIOD == (errCode & GAL_COMPARE_COM_PERIOD)) {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ATS); } else {/*¼ͨŹ*/ - SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_ERROR, ESEND_LEVEL_ATS); + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_IVOC_TO_ATS, systemId, ETYPE_COMM_WITH_VOBC, CI_ERROR, ESEND_LEVEL_ATS); } chRetVal = CI_ERROR; } @@ -4797,9 +4903,9 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) if (NULL != pstVobcToCiDataStru) { - localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCiId, 0U, &ciEtcsId); - vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(pstVobcToCiDataStru->VobcId), pstVobcToCiDataStru->vobcLogId, &vobcEtcsId); - ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC); + localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCiId, 0U, &ciEtcsId); + vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_IVOC * 256U) + (UINT8)(pstVobcToCiDataStru->VobcId), pstVobcToCiDataStru->vobcLogId, &vobcEtcsId); + ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_IVOC); } else { @@ -4812,7 +4918,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) } else { - debug_infor_printf((const)"\nPack vobc %d HLHT_id or EmapCheckVer error ciEmapCheckVer%d \n", pstVobcToCiDataStru->VobcId, ciEmapCheckVer); + debug_infor_printf((const)"\nPack IVOC %d HLHT_id or EmapCheckVer error ciEmapCheckVer%d \n", pstVobcToCiDataStru->VobcId, ciEmapCheckVer); chRetVal = CI_ERROR; } if (CI_SUCCESS == chRetVal) @@ -4840,9 +4946,9 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) ii += 4u; ShortToChar((UINT16)appCycleTime, &cszCiToIvocDataBuf[ii]);/*豸ͨѶ*/ ii += 2u; - LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(pstVobcToCiDataStru->VobcId)), &cszCiToIvocDataBuf[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ + LongToChar(GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_IVOC, (UINT8)(pstVobcToCiDataStru->VobcId)), &cszCiToIvocDataBuf[ii]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ ii += 4u; - LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, (UINT8)(pstVobcToCiDataStru->VobcId)), &cszCiToIvocDataBuf[ii]);/*յһϢʱк*/ + LongToChar(GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_IVOC, (UINT8)(pstVobcToCiDataStru->VobcId)), &cszCiToIvocDataBuf[ii]);/*յһϢʱк*/ ii += 4u; cszCiToIvocDataBuf[ii++] = CI_VOBC_PRTCL_VER;/*HLHT+FAO_CI_VOBCӿЭ汾*/ ii += 2u;/*ͨñͷеӦò㱨ܳ*/ @@ -4868,7 +4974,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocSwitchInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocSwitchInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4888,7 +4994,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocEsbInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocEsbInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) { @@ -4897,7 +5003,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocARInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocARInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4907,7 +5013,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocSpksInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocSpksInfo Error \n", pstVobcToCiDataStru->VobcId); } /*Ϣ*/ @@ -4918,7 +5024,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocGaragedoorInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocGaragedoorInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4928,7 +5034,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocFloodGateInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocFloodGateInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4938,7 +5044,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocFLockInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocFLockInfo Error \n", pstVobcToCiDataStru->VobcId); } @@ -4949,7 +5055,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocCommTrainInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocCommTrainInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4959,7 +5065,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocFaultTrainInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocFaultTrainInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4969,7 +5075,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocSleepTrainInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocSleepTrainInfo Error \n", pstVobcToCiDataStru->VobcId); } @@ -4980,7 +5086,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocTsrInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocTsrInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -4990,7 +5096,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocLgcSgmtInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocLgcSgmtInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -5000,7 +5106,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocReqAndReplyInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocReqAndReplyInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -5010,7 +5116,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocReqAlignmentInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocReqAlignmentInfo Error \n", pstVobcToCiDataStru->VobcId); } /*ѩ״̬ͽƶϢ*/ @@ -5021,7 +5127,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocUnlockOverlapInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocUnlockOverlapInfo Error \n", pstVobcToCiDataStru->VobcId); } /*ϴϢ*/ @@ -5032,7 +5138,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocSnowAndUrgentInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocSnowAndUrgentInfo Error \n", pstVobcToCiDataStru->VobcId); } /*ǰźŻϢ*/ @@ -5043,7 +5149,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocWashMachineInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocWashMachineInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -5053,18 +5159,18 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToVobcSigInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToVobcSigInfo Error \n", pstVobcToCiDataStru->VobcId); } - /*ͨIVOCITEȫг״̬*/ + /*ͨIVOCITEг״̬*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocIteLineCutInfo(cszCiToIvocDataBuf, &ii); + chRetVal = PackCiToIvocIteCutInfo(cszCiToIvocDataBuf, &ii); } else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocHeadTrainInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocHeadTrainInfo Error \n", pstVobcToCiDataStru->VobcId); } /*ͨIVOCԶδռ߼Ϣ*/ @@ -5075,9 +5181,8 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocIteLineCutInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocIteCutInfo Error \n", pstVobcToCiDataStru->VobcId); } - /*ͨIVOCгλüල״̬*/ if (CI_SUCCESS == chRetVal) { @@ -5086,7 +5191,18 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocFarNoOccuLogInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocFarNoOccuLogInfo Error \n", pstVobcToCiDataStru->VobcId); + } + + /*ͨIVOCԾظϢ*/ + if (CI_SUCCESS == chRetVal) + { + chRetVal = PackCiToIvocJumpBackReply(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); + } + else + { + /**/ + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocPosMonitorInfo Error \n", pstVobcToCiDataStru->VobcId); } if (CI_SUCCESS == chRetVal) @@ -5096,11 +5212,11 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) else { /**/ - debug_infor_printf((const)"\n VOBC: %d PackCiToIvocPosMonitorInfo Error \n", pstVobcToCiDataStru->VobcId); + debug_infor_printf((const)"\n IVOC: %d PackCiToIvocJumpBackReply Error \n", pstVobcToCiDataStru->VobcId); } /*Ԥ10ֽ*/ - ii += 10U; + ii += 5U; } else if ((IVOC_CI_INFO_TYPE_LOGOUT_ASK == pstVobcToCiDataStru->appInfoType) && (curCycleNum == pstVobcToCiDataStru->ComStartCycle)) {/*עظ֡*/ @@ -5171,13 +5287,13 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) cszCiToIvocDataBuf[29U] = (UINT8)((UINT8)((ii - 31U) >> 8U) & 0xffU); cszCiToIvocDataBuf[30U] = (UINT8)((ii - 31U) & 0xffU); - dstDevId = ((UINT16)(CI_SYSTEM_TYPE_VOBC << 8U) | pstVobcToCiDataStru->VobcId); + dstDevId = ((UINT16)(CI_SYSTEM_TYPE_IVOC << 8U) | pstVobcToCiDataStru->VobcId); outnetSafeSendRtn = OutnetSafeSend(dstDevId, (pstVobcToCiDataStru->vobcLogId), &cszCiToIvocDataBuf[0], ii); if (1u == outnetSafeSendRtn) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\VOBC_PBTACS_SEND:%d", ii); debug_out_array(0xAA, cszCiToIvocDataBuf, ii); #endif/*ƽ̨ӡ*/ #endif @@ -5187,7 +5303,7 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) { /*дʧ*/ chRetVal = CI_ERROR; - debug_infor_printf((const)"\nWrite VOBC %d dataQueue Error Len = %d\n", pstVobcToCiDataStru->VobcId, ii); + debug_infor_printf((const)"\nWrite IVOC %d dataQueue Error Len = %d\n", pstVobcToCiDataStru->VobcId, ii); } @@ -5233,7 +5349,7 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC if (NULL != pstVobcBackUpToCiDataStru) { - localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCiId, 0U, &ciEtcsId); + localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCiId, 0U, &ciEtcsId); vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(pstVobcBackUpToCiDataStru->VobcId), pstVobcBackUpToCiDataStru->vobcLogId, &vobcEtcsId); ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC); } @@ -5426,7 +5542,7 @@ static UINT8 PackCiToIvocBackUpDataCC(VobcBackUpToCiDataStruct *pstVobcBackUpToC /*鱸ͨITEȫгϢ*/ if (CI_SUCCESS == chRetVal) { - chRetVal = PackCiToIvocIteLineCutInfo(cszCiToIvocDataBuf, &ii); + chRetVal = PackCiToIvocIteCutInfo(cszCiToIvocDataBuf, &ii); } else { @@ -5442,7 +5558,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 +5572,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 +6589,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 +6629,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 +6765,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)) @@ -6664,7 +6796,7 @@ static UINT8 PackCiToIvocCommTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) dwOrgnOffset = strEnvelope.startPos.Off; wEnvelopeSendSum++; - wTrainId = (0x1400u + (strEnvelope.trainID[0] & 0x00FFu)); + wTrainId = (TRAIN_ID_MIN_IVOC + (strEnvelope.trainID[0] & 0x00FFU)); pDataBuf[ii] = strEnvelope.trainID[0]; ii += 1U; @@ -6770,8 +6902,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; } @@ -6840,7 +6982,6 @@ static UINT8 PackCiToIvocFaultTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) InfEnvelopeStruct strEnvelope = { 0u }; UINT16 wEnvelopeSendSumIndex = 0u; UINT8 chTrainIndex = 0u; - UINT16 wTrainId = 0u; UINT8 chLocalId = 0u; if ((NULL == pDataBuf) @@ -6874,7 +7015,6 @@ static UINT8 PackCiToIvocFaultTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) for (chTrainIndex = 0u; chTrainIndex < strEnvelope.trianCnt; chTrainIndex++) { wEnvelopeSendSum++; - wTrainId = 0x14ffu; wTmpLinkId = strEnvelope.endPos.Lnk; dwTmpOff = strEnvelope.endPos.Off; @@ -7004,7 +7144,7 @@ static UINT8 PackCiToIvocSleepTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength) dwOrgnOffset = strEnvelope.startPos.Off; wEnvelopeSendSum++; - wTrainId = (0x1400u + (strEnvelope.trainID[0] & 0x00FFu)); + wTrainId = (TRAIN_ID_MIN_IVOC + (strEnvelope.trainID[0] & 0x00FFU)); pDataBuf[ii] = strEnvelope.trainID[0]; ii += 1U; @@ -7422,7 +7562,7 @@ static UINT8 PackCiToIvocLgcSgmtInfo(UINT8* pDataBuf, UINT16 *wDataLength,UINT1 { ii = *wDataLength; chRetVal = CI_SUCCESS; - wTrainSysId = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + (wVobcId&0x00FFU); + wTrainSysId = ((UINT16)(CI_SYSTEM_TYPE_IVOC * 256U)) + (wVobcId&0x00FFU); wLogicSecSum = GetLogicSecCurSum(); strTrainMinTail.wLinkId = GetTrainMinTailLink(wVobcId); strTrainMinTail.dwOffset = GetTrainMinTailOffset(wVobcId); @@ -8293,9 +8433,12 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) UINT8 chWashWorkModeBack = WASH_WORKMODE_BACK_DEFAULT;/*ϴģʽ÷*/ UINT16 wTempSendIndex = 0U;/*ʱ*/ UINT8 chTempCheckFlag = CI_ERROR; + UINT16 esbId = 0; + UINT8 chEsbState = 0u; + UINT8 chEsbCutState = 0U; /*ȻȡʱϢȡɹбҪ*/ - localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCiId, 0U, &ciEtcsId); + localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCiId, 0U, &ciEtcsId); vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(vobcToCiDataStru->VobcId), vobcToCiDataStru->vobcLogId, &vobcEtcsId); ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC); if ((CI_SUCCESS == localhlhtId) && (CI_SUCCESS == vobcHlhtId) && (CI_SUCCESS == ciEmapCheckVer)) @@ -8462,6 +8605,7 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) CiToVobcDataBuffer[ii++] = PSD_RELATED_BUTTON_STATE_DEFAULT; /*վ̨ťĬֵ*/ CiToVobcDataBuffer[ii++] = CI_VOBC_GAP_DETECT_STATUS_DEFAULT; /*϶̽״̬Ĭֵδ/޴˹*/ CiToVobcDataBuffer[ii++] = CI_VOBC_REMOVE_OFF; /*Ĭֵ*/ + CiToVobcDataBuffer[ii++] = 0xffu;/*϶̽·״̬*/ } else {/*IDЧ*/ @@ -8594,9 +8738,17 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) { CiToVobcDataBuffer[ii++] = CI_VOBC_REMOVE_NO; } + + CiToVobcDataBuffer[ii++] =0xffu;/*϶̽·״̬*/ } } - + + CiToVobcDataBuffer[ii++] = 0u;/*ESB0ӿ*/ + for (kk = 0U; kk < 2U; kk++) + { + ii += 4u;/*ͨID*/ + CiToVobcDataBuffer[ii++] = 0xFFU; + } /*վ̨״̬ϢӦñij*/ CiToVobcDataBuffer[60U] = (UINT8)((UINT8)((ii - 62U) >> 8U) & 0xffU); CiToVobcDataBuffer[61U] = (UINT8)((ii - 62U) & 0xffU); @@ -8724,7 +8876,7 @@ UINT8 PackCiToVobcDataFAOHLHToneSelf(VobcToCiDataStruct* vobcToCiDataStru) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ #endif @@ -8792,7 +8944,7 @@ UINT8 PackCiToVobcDataFAOHLHToneSelfSecond(VobcToCiDataStruct* vobcToCiDataStru) UINT8 chTempCheckFlag = CI_ERROR; /*ȻȡʱϢȡɹбҪ*/ - localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCiId, 0U, &ciEtcsId); + localhlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCiId, 0U, &ciEtcsId); vobcHlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_VOBC * 256U) + (UINT8)(vobcToCiDataStru->VobcId), vobcToCiDataStru->vobcLogId, &vobcEtcsId); ciEmapCheckVer = GetCiEmapCheckVer(localCiId, &emapCheckVer, CI_SYSTEM_TYPE_VOBC); if ((CI_SUCCESS == localhlhtId) && (CI_SUCCESS == vobcHlhtId) && (CI_SUCCESS == ciEmapCheckVer)) @@ -9001,7 +9153,7 @@ UINT8 PackCiToVobcDataFAOHLHToneSelfSecond(VobcToCiDataStruct* vobcToCiDataStru) { /*дгɹ*/ #ifdef LOGPRINT/*־ӡ*/ #ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ - debug_infor_printf((const)"\nVOBC_SEND:%d", ii); + debug_infor_printf((const)"\nVOBC_CBTC_SEND:%d", ii); debug_out_array(0xAA, CiToVobcDataBuffer, ii); #endif/*ƽ̨ӡ*/ #endif @@ -9745,7 +9897,7 @@ static UINT8 PackCiToIvocWashMachineInfo(UINT8* pDataBuf, UINT16* wDataLength,co * CiIvocѩƶϢ * ˵ UINT8* pDataBuf ݻ * UINT16 *pDataLength ݳ() -* UINT16 wTrainId гID0x14 +* UINT16 wTrainId гID0x10 * ֵ CI_ERROR 0 ʧ * CI_SUCCESS 1 ɹ * Created By LQ 2023.11.10 @@ -9758,7 +9910,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 +9918,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 +9930,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 +9968,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 +10973,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 +11058,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 +11092,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 { @@ -11192,6 +11386,7 @@ UINT8 ParseFAOHLHTOtherTypeData(const UINT16 appInfoType, UINT8* dataBuf, UINT16 UINT8 chVideoQkState = 0U;/*Ƶ״̬*/ UINT8 chVideoQkResult = 0U;/*Ƶͽ*/ UINT16 wTempAppInfoType = 0U; + UINT8 chControlMode = 0U; if (NULL == dataBuf) { @@ -11431,6 +11626,19 @@ UINT8 ParseFAOHLHTOtherTypeData(const UINT16 appInfoType, UINT8* dataBuf, UINT16 chRetVal = CI_ERROR;; } } + + /*س״̬*/ + if (CI_SUCCESS == chRetVal) + { + + chControlMode= dataBuf[ii]; + ii++; + if ((TRAIN_MAIN_MODE == chControlMode) + || (TRAIN_STANDBY_MODE == chControlMode)) + {/*ػ򱸿*/ + vobcToCiDataStru->controlMode = chControlMode; + } + } } else { @@ -11678,7 +11886,7 @@ UINT8 ParseFAOHLHTBackUpControlData(UINT8* dataBuf, UINT16 dataLen, VobcToCiData if (0xFFFFFFFFU == dwHlhtNs) { /*ĬֵǰIDΪ0*/ - vobcToCiDataStru->wHeadVobcId = 0x14FFU; + vobcToCiDataStru->wHeadVobcId = TRAIN_ID_INVAL; } else { @@ -12057,7 +12265,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 +12281,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 +12309,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 +12343,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 +12535,1115 @@ static UINT8 PackCiToIvocPosMonitorInfo(UINT8* pDataBuf, UINT16* wDataLength, co } return chRetVal; +} + +/* +* طɳ崻 +* ˵ +* ֵ +* by cgh 20250630 +*/ +void PackCiToVobcFlyProtectData(void) +{ + UINT8 ii = 0U; + UINT8 jj = 0U; + UINT8 cszCiToIvocDataBuf[VOBC_TO_CI_DATA_LEN_MAX] = { 0U };/*CIVOBC֡*/ + UINT16 wDataIndex = 0U; /**/ + UINT8 chLineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); + UINT8 chFlyProtectTrainNum = GetFlyProtectNum(); /*ɳ崻Ŀ*/ + TrainFlyProtectStru* pFlyData = NULL; /*ɳ崻*/ + UINT8 chLocalCiId = GetSystemParaLocalCiId(); /*ID*/ + UINT32 dwCiEtcsId = 0U; /*ͨ*/ + UINT32 dwVobcEtcsId = 0U; /*ػͨID*/ + UINT32 dwEmapCheckVer = 0U; /*ӵͼݰ汾*/ + UINT8 chTempResult = 0U;/*ʱ*/ + UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*ǰں*/ + UINT32 dwAppCycleTime = GetSystemParaAppCycleTime(); + UINT32 dwSrcCrntSN = 0U; + UINT32 dwCiRcvSN = 0U; + UINT16 wDstDevId = 0U; /*Ŀ豸ID*/ + + if ((LINE_CC == chLineIdentity) + && (0U < chFlyProtectTrainNum) && (SHUT_DOWN_TRAIN_NUMMAX > chFlyProtectTrainNum)) + { + for (jj = 0U; jj < chFlyProtectTrainNum; jj++) + { + pFlyData = GetFlyProtectData(jj); + if (NULL != pFlyData) + { + for (ii = 0U; ii < VobcToCiSum; ii++) + { + if (VobcToCiDataStru[ii].VobcId == pFlyData->wTrainId) + { + break; + } + } + + if (ii == VobcToCiSum) + { + ; /*ûҵǰ͸óͨ*/ + } + else + { + /*ʼ*/ + chTempResult = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + chLocalCiId, 0U, &dwCiEtcsId); + chTempResult &= dquDevName2HlhtId((CI_SYSTEM_TYPE_IVOC * 256U) + (UINT8)(VobcToCiDataStru[ii].VobcId), VobcToCiDataStru[ii].vobcLogId, &dwVobcEtcsId); + chTempResult &= GetCiEmapCheckVer(chLocalCiId, &dwEmapCheckVer, CI_SYSTEM_TYPE_IVOC); + + if (CI_SUCCESS == chTempResult) + { + dwSrcCrntSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_IVOC, (UINT8)(VobcToCiDataStru[ii].VobcId)); + dwCiRcvSN = GetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_IVOC, (UINT8)(VobcToCiDataStru[ii].VobcId)); + wDataIndex = 0U; + + ShortToChar(IVOC_CI_INTERFACE_INFOTYPE, &cszCiToIvocDataBuf[wDataIndex]);/*ӿϢ*/ + wDataIndex += 2U; + LongToChar(dwCiEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*ͷʶϢ*/ + wDataIndex += 4U; + LongToChar(dwVobcEtcsId, &cszCiToIvocDataBuf[wDataIndex]);/*շʶϢ*/ + wDataIndex += 4U; + LongToChar(dwEmapCheckVer, &cszCiToIvocDataBuf[wDataIndex]);/*ӵͼ汾УϢ*/ + wDataIndex += 4U; + LongToChar(dwCurCycleNum, &cszCiToIvocDataBuf[wDataIndex]);/*Ϣк*/ + wDataIndex += 4U; + ShortToChar((UINT16)dwAppCycleTime, &cszCiToIvocDataBuf[wDataIndex]);/*豸ͨѶ*/ + wDataIndex += 2U; + LongToChar(dwSrcCrntSN, &cszCiToIvocDataBuf[wDataIndex]);/*ԷϢкţrecvOppMsgSN¼յԷһϢеĶԷϢк*/ + wDataIndex += 4U; + LongToChar(dwCiRcvSN, &cszCiToIvocDataBuf[wDataIndex]);/*յһϢʱк*/ + wDataIndex += 4U; + cszCiToIvocDataBuf[wDataIndex++] = CI_VOBC_PRTCL_VER;/*HLHT+FAO_CI_VOBCӿЭ汾*/ + wDataIndex += 2U;/*ͨñͷеӦò㱨ܳ*/ + /*ΪӦò*/ + wDataIndex += 2U;/*ij*/ + ShortToChar(CI_IVOC_INFO_TYPE_SPECIAL_CONTROL, &cszCiToIvocDataBuf[wDataIndex]); + wDataIndex += 2U;/*Ӧñ*/ + wDataIndex += 2U;/*Ԥֽ*/ + + /*ؿر*/ + cszCiToIvocDataBuf[wDataIndex++] = CI_IVOC_LOST_POSITION; + + /*Ӧòݵıij */ + cszCiToIvocDataBuf[31U] = (UINT8)((UINT8)((wDataIndex - 33U) >> 8U) & 0xFFU); + cszCiToIvocDataBuf[32U] = (UINT8)((wDataIndex - 33U) & 0xFFU); + + /*ͨñͷӦò㱨ܳ*/ + cszCiToIvocDataBuf[29U] = (UINT8)((UINT8)((wDataIndex - 31U) >> 8U) & 0xFFU); + cszCiToIvocDataBuf[30U] = (UINT8)((wDataIndex - 31U) & 0xFFU); + + wDstDevId = ((UINT16)(CI_SYSTEM_TYPE_IVOC << 8U) | VobcToCiDataStru[ii].VobcId); + chTempResult = OutnetSafeSend(wDstDevId, (VobcToCiDataStru[ii].vobcLogId), &cszCiToIvocDataBuf[0], wDataIndex); + + if (1U == chTempResult) + { /*дгɹ*/ +#ifdef LOGPRINT/*־ӡ*/ +#ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ + debug_infor_printf((const)"\nVOBCFLYPROTECT_SEND:%d vobc:%d", wDataIndex, VobcToCiDataStru[ii].VobcId); + debug_out_array(0xAA, cszCiToIvocDataBuf, wDataIndex); +#endif/*ƽ̨ӡ*/ +#endif + } + else + { + debug_infor_printf((const)"\nWrite VOBC %d FLYPROTECT Error, Len = %d\n", VobcToCiDataStru[ii].VobcId, wDataIndex); + } + + } + else + { + /**/ + debug_infor_printf((const)"\nvobc %d PackCiToVobcFlyProtectData errordwCiEtcsId%d dwVobcEtcsId%d dwEmapCheckVer%d \n", VobcToCiDataStru[ii].VobcId, dwCiEtcsId, dwVobcEtcsId, dwEmapCheckVer); + } + } + } + else + { + ; /**/ + } + } + } + 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; + +} + +/* +* RCģʽVOBC֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* VobcToRcDataStruct *pstVobcToRcDataStruݽṹָ +* UINT8* saveGalHead,ͨñͷǷ,1:0: +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +static UINT8 ParseVobcToRcDataFrameCC(const UINT8* pDataBuf, const UINT16 dataLength, const UINT8 systemId, VobcToRcDataStruct* pstVobcToRcDataStru, UINT8* pSaveGalHead, const UINT16 logId) +{ + UINT8 chTrainDir = 0U; /*г*/ + UINT16 ii = 0U; /**/ + UINT8 chRetVal = CI_ERROR; + UINT16 appInfoType = 0U; /*ӦϢ*/ + UINT32 curntCycleNo = 0U; /*ǰں*/ + UINT16 vobcName = 0U; /*VOBC豸ƣ+ID*/ + UINT16 ciName = 0U; /*豸ƣ+ID*/ + UINT8 localCiId = GetSystemParaLocalCiId();/*ID*/ + UINT32 errCode = 0U; + HLHTGALInfoStruct hlhtGalHead = { 0 }; + INT32 vobcInfoRemainValidiy = 0; + UINT8 headRet = HLHT_HEAD_ERROR;/*ͨ*/ + UINT8 chTrainLevel = 0U; + UINT16 wTrainSpeed = 0U; + UINT8 chTrainSpeedDir = 0U; + UINT8 chTrainMode = 0u; + LOD_STRU wMaxhead = { 0u }; + LOD_STRU wMaxtail = { 0u }; + LOD_STRU wMinhead = { 0u }; + LOD_STRU wMintail = { 0u }; + UINT16 wApplyDataLenth = 0U; + UINT8 chControlMode = 0u;/*ģ*/ + UINT16 wTrainlen = 0u; + UINT32 trackId = 0u; + UINT32 dwCiAndVobcTransBadEnsureTime = 0u; + UINT32 dwSystemParaAppCycleTime = 0U; + + + vobcName = (CI_SYSTEM_TYPE_VOBC) * 256U + systemId; + ciName = (CI_SYSTEM_TYPE_RCI) * 256U + localCiId; + + if ((NULL == pDataBuf) + || (NULL == pstVobcToRcDataStru) + || (NULL == pSaveGalHead) + || (CI_IVOC_PACKET_LENGTH_MAX < dataLength)) + { + chRetVal = CI_ERROR; + } + else + { + /*βΪգȽֵΪɹ*/ + chRetVal = CI_SUCCESS; + } + + if (CI_SUCCESS == chRetVal) + { + /*ͨϢͷ*/ + hlhtGalHead.devInterInfoType = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + hlhtGalHead.sourceId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + hlhtGalHead.destId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + hlhtGalHead.emapVerCrc = LongFromChar(&pDataBuf[ii]); + ii += 4U; + hlhtGalHead.crntOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + hlhtGalHead.comPeriod = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + hlhtGalHead.recvOppMsgSN = LongFromChar(&pDataBuf[ii]); + + ii += 4U; + hlhtGalHead.preOwnMsgSN = LongFromChar(&pDataBuf[ii]); + ii += 4U; + hlhtGalHead.prtclVer = pDataBuf[ii++]; + hlhtGalHead.totalDataLen = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + + curntCycleNo = Get2oo2CurCycleNum(); + + pstVobcToRcDataStru->vobcLogId = logId;/*洢VOBC߼ID1˻2*/ + headRet = HLHTRecvCommonPacketHeadCheck(vobcName, ciName, VOBC_RC_INTERFACE_INFOTYPE, RC_VOBC_PRTCL_VER, &hlhtGalHead, &errCode, logId, CI_SYSTEM_TYPE_IVOC); + + debug_infor_printf((const)"\nVOBC %d GAL Check Result:%d errCode:%d", systemId, headRet, errCode); /*0x55ȷ0xaa0x33ʼͨ֡*/ + + if (HLHT_HEAD_SUCCESS == headRet) + { + /*ϢʱЧ*/ + dwCiAndVobcTransBadEnsureTime = GetCiAndVobcTransBadEnsureTime(); + dwSystemParaAppCycleTime = GetSystemParaAppCycleTime(); + vobcInfoRemainValidiy = HLHTCommonMsgRemainingValidity(dwCiAndVobcTransBadEnsureTime, curntCycleNo, dwSystemParaAppCycleTime, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod); + + if (0 < vobcInfoRemainValidiy) + { + /*Ӧ*/ + wApplyDataLenth = ShortFromChar(&pDataBuf[ii]);/*Ӧòݳ*/ + ii += 2U; + + appInfoType = ShortFromChar(&pDataBuf[ii]);/*ӦϢͣſϢ֡Ϣ*/ + ii += 2U; + pstVobcToRcDataStru->appInfoType = appInfoType; + pstVobcToRcDataStru->VobcId = systemId; + + ii += 2U;/*Ԥֽ*/ + + if (VOBC_RC_INFO_STATE == appInfoType) + {/*ֻеVOBCRCϢ״̬λðʱżϢ*/ + pstVobcToRcDataStru->ComStartCycle = Get2oo2CurCycleNum(); + + chControlMode = pDataBuf[ii++]; + if ((TRAIN_MAIN_MODE == chControlMode) || (TRAIN_STANDBY_MODE == chControlMode)) + { + pstVobcToRcDataStru->controlMode = chControlMode; + } + else + { + chRetVal = CI_ERROR; + } + + /*гз*/ + if (CI_SUCCESS == chRetVal) + { + chTrainDir = pDataBuf[ii]; + ii += 1U; + if ((TRAIN_DIR_UP == chTrainDir) || (TRAIN_DIR_DOWN == chTrainDir)) + { + pstVobcToRcDataStru->trainDirection = chTrainDir; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + + if (CI_SUCCESS == chRetVal) + { + /*геȼж*/ + chTrainLevel = pDataBuf[ii]; + ii += 1U; + + if ((VOBC_TRAIN_LEVEL_CBTC == chTrainLevel) || (VOBC_TRAIN_LEVEL_ITC == chTrainLevel) || (VOBC_VOBC_TRAIN_LEVEL_IL == chTrainLevel) || (VOBC_TRAIN_LEVEL_ABL == chTrainLevel)) + { + pstVobcToRcDataStru->chTrainLevel = chTrainLevel; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == chRetVal) + { + chTrainMode = pDataBuf[ii]; + ii++; + + /* гģʽ */ + if ((VOBC_TRAIN_MODE_AM == chTrainMode) + || (VOBC_TRAIN_MODE_CM == chTrainMode) + || (VOBC_TRAIN_MODE_RM == chTrainMode) + || (VOBC_TRAIN_MODE_EUM == chTrainMode) + || (VOBC_TRAIN_MODE_FAM == chTrainMode) + || (VOBC_TRAIN_MODE_CAM == chTrainMode)) + { + pstVobcToRcDataStru->chTrainMode = chTrainMode; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*гȫǰλ*/ + if (CI_SUCCESS == chRetVal) + { + + trackId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + wMaxhead.Off = LongFromChar(&pDataBuf[ii]); + ii += 4U; + + wMaxhead.Lnk = GetTrackBelongLink(trackId); + + if ((UINT32_MAX != wMaxhead.Off)&&(UINT16_MAX != wMaxhead.Lnk)&& (0U != wMaxhead.Lnk)) + { + pstVobcToRcDataStru->wTrainMaxSafeHeadLink = wMaxhead.Lnk; + pstVobcToRcDataStru->dwTrainMaxSafeHeadOffset = wMaxhead.Off; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*гСȫǰλ*/ + if (CI_SUCCESS == chRetVal) + { + trackId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + wMinhead.Off = LongFromChar(&pDataBuf[ii]); + ii += 4U; + + wMinhead.Lnk = GetTrackBelongLink(trackId); + + if ((UINT32_MAX != wMinhead.Off)&&(UINT16_MAX != wMinhead.Lnk) && (0U != wMinhead.Lnk)) + { + pstVobcToRcDataStru->wTrainMinSafeHeadLink = wMinhead.Lnk; + pstVobcToRcDataStru->dwTrainMinSafeHeadOffset = wMinhead.Off; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*гȫλ*/ + if (CI_SUCCESS == chRetVal) + { + trackId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + wMaxtail.Off = LongFromChar(&pDataBuf[ii]); + ii += 4U; + + wMaxtail.Lnk = GetTrackBelongLink(trackId); + + if ((UINT32_MAX != wMaxtail.Off)&&(UINT16_MAX != wMaxtail.Lnk) && (0U != wMaxtail.Lnk)) + { + pstVobcToRcDataStru->wTrainMaxSafeTailLink = wMaxtail.Lnk; + pstVobcToRcDataStru->dwTrainMaxSafeTailOffset = wMaxtail.Off; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*гСȫλ*/ + if (CI_SUCCESS == chRetVal) + { + trackId = LongFromChar(&pDataBuf[ii]); + ii += 4U; + wMintail.Off = LongFromChar(&pDataBuf[ii]); + ii += 4U; + + wMintail.Lnk = GetTrackBelongLink(trackId); + + if ((UINT32_MAX != wMintail.Off)&&(UINT16_MAX != wMintail.Lnk) && (0U != wMintail.Lnk)) + { + pstVobcToRcDataStru->wTrainMinSafeTailLink = wMintail.Lnk; + pstVobcToRcDataStru->dwTrainMinSafeTailOffset = wMintail.Off; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + if (CI_SUCCESS == chRetVal) + { + /*λãУǷܼǰСǰ㷽*/ + chRetVal = CheckTrainDirToOtherPointDir(wMaxhead, wMinhead, wMaxtail, wMintail, chTrainDir); + } + else + { + /**/ + } + + + if (CI_SUCCESS == chRetVal) + { + wTrainlen = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + } + else + { + /*Уʧ*/ + } + + + /*гٶȷ*/ + if (CI_SUCCESS == chRetVal) + { + wTrainSpeed = ShortFromChar(&pDataBuf[ii]); + ii += 2U; + chTrainSpeedDir = pDataBuf[ii]; + ii += 1U; + if (((TRAIN_SPEED_DIR_FORWARD == chTrainSpeedDir) || (TRAIN_SPEED_DIR_BACKWARD == chTrainSpeedDir)) && (UINT16_MAX != wTrainSpeed)) + { + pstVobcToRcDataStru->chSpeedDir = chTrainSpeedDir; + pstVobcToRcDataStru->wTrainSpeed = wTrainSpeed; + + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + /**/ + } + + /*Ԥ10ֽ*/ + ii += 10U; + + } + else + { + chRetVal = CI_ERROR; + } + + if (CI_SUCCESS == chRetVal) + { + /*Уݳ γȣڲ㳤ȱټ¼ȵֽ */ + if ((hlhtGalHead.totalDataLen != ii - 31U) || (wApplyDataLenth != ii - 33U)) + { + /* 31ΪӦ֡ͷ */ + chRetVal = CI_ERROR; + + } + } + + if (CI_SUCCESS == chRetVal) + { + /*ݾУ飬Ҫ洢ͨñ*/ + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, systemId, curntCycleNo); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_VOBC, systemId, logId); + + *pSaveGalHead = 1U; + } + } + else + { + chRetVal = CI_ERROR; + } + } + else if (HLHT_HEAD_INIT == headRet) + { + if (curntCycleNo > 0U)/*жŴ0Ϊ0Ч*/ + { + SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.comPeriod); + SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.crntOwnMsgSN); + SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.recvOppMsgSN); + SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_VOBC, systemId, hlhtGalHead.preOwnMsgSN); + SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_VOBC, systemId, curntCycleNo); + SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_VOBC, systemId, logId); + + *pSaveGalHead = 1U; + } + + chRetVal = CI_ERROR; + } + else + { + /*ATSֵطVOBC-CIݽӿϢʹ*/ + if (GAL_COMPARE_INFO_TYPE_ERR == (errCode & GAL_COMPARE_INFO_TYPE_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIݷͷʶϢ*/ + else if (GAL_COMPARE_SEND_FLAG_ERR == (errCode & GAL_COMPARE_SEND_FLAG_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIݽշ־Ϣ*/ + else if (GAL_COMPARE_RECV_FLAG_ERR == (errCode & GAL_COMPARE_RECV_FLAG_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIݰ汾УʧϢ*/ + else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (errCode & GAL_COMPARE_EMAP_VER_COMP_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIݱԷյһϢʱкŴ*/ + else if (GAL_COMPARE_MSG_BDS_SN_ERR == (errCode & GAL_COMPARE_MSG_BDS_SN_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIݶԷϢкżյһϢʱкŴ*/ + else if (GAL_COMPARE_MSG_SN_ERR == (errCode & GAL_COMPARE_MSG_SN_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIЭ汾Ŵ*/ + else if (GAL_COMPARE_PROTOCOL_VER_ERR == (errCode & GAL_COMPARE_PROTOCOL_VER_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIӦòݳЧ*/ + else if (GAL_COMPARE_APP_LEN_ERR == (errCode & GAL_COMPARE_APP_LEN_ERR)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ATS); + } + /*ATSֵطVOBC-CIͨڴ */ + else if (GAL_COMPARE_COM_PERIOD == (errCode & GAL_COMPARE_COM_PERIOD)) + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ATS); + } + else + {/*¼ͨŹ*/ + SetErrorData(EFUNC_PARSE_VOBC2CI_DATA, CI_SYSTEM_TYPE_VOBC, systemId, ETYPE_COMM_WITH_VOBC, CI_ERROR, ESEND_LEVEL_ATS); + } + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + + + +/* +* VOBC֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +UINT8 ParseVobcToRcDataCC(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, const UINT16 logId) +{ + UINT8 ii = 0u; /**/ + UINT8 retVal = CI_ERROR; + UINT8 galHeadSaved = 0u; + VobcToRcDataStruct parseCheckVobcStruc = { 0 }; + UINT8 chFind = CI_ERROR; + + /*ܴVOBCж*/ + if (VOBC_TO_CI_SUM_MAX <=VobcToRcSum) + { + retVal = CI_ERROR; + } + else + { + retVal = CI_SUCCESS; + } + + if (CI_SUCCESS == retVal) + { + retVal = ParseVobcToRcDataFrameCC(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved, logId); + if (CI_SUCCESS == retVal) + { + /*ȥ*/ + for (ii = 0u; ii < VobcToRcSum; ii++) + { + if (VobcToRcDataStru[ii].VobcId == parseCheckVobcStruc.VobcId) + {/*гӵгһ*/ + (void)CommonMemCpy(&(VobcToRcDataStru[ii]), (UINT32)sizeof(VobcToRcDataStruct), &parseCheckVobcStruc, (UINT32)sizeof(VobcToRcDataStruct)); + chFind = CI_SUCCESS; + break; + } + } + if (CI_ERROR == chFind) + { + (void)CommonMemSet(&(VobcToRcDataStru[VobcToRcSum]), (UINT32)sizeof(VobcToRcDataStruct), 0U, (UINT32)sizeof(VobcToRcDataStruct));/*ڴ棬ֹ*/ + + (void)CommonMemCpy(&(VobcToRcDataStru[VobcToRcSum]), (UINT32)sizeof(VobcToRcDataStruct), &parseCheckVobcStruc, (UINT32)sizeof(VobcToRcDataStruct)); + VobcToRcSum++; + } + else + { + ; /*Ѵڲ*/ + } + } + else + { + /*ͨͷѾˣִͨͷ򣬳Ҳͨͷ*/ + if (0u == galHeadSaved) + { + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_VOBC, systemId); + } + else + { + ; + } + + } + } + + return retVal; +} + +/* +* RCģʽVOBC +* ˵ void +* ֵ 0:ʧ +* 1:ݳɹ +*/ +UINT8 PackRcToVobcData(void) +{ + UINT32 ii = 0u; + UINT8 retVal = CI_SUCCESS; + UINT8 initVobcIds[UINT8_MAX] = { 0u }; + UINT16 initVobcIdLogIds[UINT8_MAX] = { 0u }; + UINT8 initVobcSum = 0u; + UINT8 cFuncRet = CI_ERROR; + + debug_infor_printf((const)"\PackRcToVobcData VobcToRcSum = %d\n", VobcToRcSum); /*ӡRCͨŵVOBCĿ*/ + for (ii = 0u; (ii < (UINT32)VobcToRcSum) && (ii < VOBC_TO_CI_SUM_MAX); ii++) + { + retVal = PackRcToVobcDataHLHTHeart(VobcToRcDataStru[ii].VobcId, VobcToRcDataStru[ii].vobcLogId); + } + + + cFuncRet = GetHlhtInitHeadDevsByDevType(CI_SYSTEM_TYPE_VOBC, initVobcIds, (UINT8)sizeof(initVobcIds), &initVobcSum, initVobcIdLogIds); + if (CI_SUCCESS == cFuncRet) + { + for (ii = 0u; ii < initVobcSum; ii++) + { + retVal &= PackRcToVobcDataHLHTHeart(initVobcIds[ii], initVobcIdLogIds[ii]); + } + } + else + { + } + return retVal; +} + +/* +* 黥ͨRC->VOBC֡ +* ˵ +* const UINT8 vobcId ĿVOBC ID +* const UINT16 logId ĿVOBC ߼ID1˻2ˣ +* ֵ 0:ʧ +* 1:ݳɹ +*/ +static UINT8 PackRcToVobcDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) +{ + UINT8 chRcToVobcDataBuffer[VOBC_TO_CI_DATA_LEN_MAX] = { 0u };/*CIVOBC֡*/ + UINT32 curCycleNum = Get2oo2CurCycleNum(); + UINT32 appCycleTime = GetSystemParaAppCycleTime(); + UINT16 ii = 0u; + + UINT8 retVal = CI_ERROR; + UINT8 localCiId = GetSystemParaLocalCiId(); /*ID*/ + UINT32 ciEtcsId = 0u; + UINT32 vobcEtcsId = 0u; + UINT32 emapCheckVer = 0u; + UINT16 dstDevId = 0u; + UINT8 outnetSafeSendRtn = 0u; + UINT8 functionreturn = 0u; + UINT8 chVobcType = CI_SYSTEM_TYPE_VOBC; + UINT32 chCtxSrcCrntSN = 0u; + UINT32 chCtxCiRcvSN = 0U; + + + functionreturn = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_RCI * 256U + localCiId), 0U, &ciEtcsId); + functionreturn &= dquDevName2HlhtId(((UINT16)chVobcType * 256U) + vobcId, logId, &vobcEtcsId); + functionreturn &= GetCiEmapCheckVer(localCiId, &emapCheckVer, chVobcType);/*RCģʽ£IVOCVOBC汾ʹRC*/ + /*ȻȡʱϢȡɹбҪ*/ + if (CI_SUCCESS == functionreturn) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + ii = 0u; + + /*ʼӦ֡*/ + ShortToChar(VOBC_RC_INTERFACE_INFOTYPE, &chRcToVobcDataBuffer[ii]);/*ӿϢ*/ + ii += 2u; + + LongToChar(ciEtcsId, &chRcToVobcDataBuffer[ii]);/*ͷʶϢ*/ + ii += 4u; + LongToChar(vobcEtcsId, &chRcToVobcDataBuffer[ii]);/*շʶϢ*/ + ii += 4u; + LongToChar(emapCheckVer, &chRcToVobcDataBuffer[ii]);/*ӵͼ汾УϢ*/ + ii += 4u; + LongToChar(curCycleNum, &chRcToVobcDataBuffer[ii]);/*Ϣк*/ + ii += 4u; + ShortToChar((UINT16)appCycleTime, &chRcToVobcDataBuffer[ii]);/*豸ͨѶ*/ + ii += 2u; + chCtxSrcCrntSN = GetHLHTHeadCtxSrcCrntSN(chVobcType, vobcId); + LongToChar(chCtxSrcCrntSN, &chRcToVobcDataBuffer[ii]);/*ԷϢкţյԷһϢеĶԷϢк*/ + ii += 4u; + chCtxCiRcvSN = GetHLHTHeadCtxCiRcvSN(chVobcType, vobcId); + LongToChar(chCtxCiRcvSN, &chRcToVobcDataBuffer[ii]);/*յһϢʱк*/ + ii += 4u; + + chRcToVobcDataBuffer[ii++] = RC_VOBC_PRTCL_VER;/*RC_VOBCӿЭ汾*/ + + + ii += 2u;/*ͨñͷеӦò㱨ܳ*/ + + /*ΪӦò*/ + ii += 2u;/*ij*/ + + ii += 2u;/*Ӧñ*/ + + ii += 2u;/*Ԥֽ*/ + + ShortToChar(RC_VOBC_HEART_FRAME, &chRcToVobcDataBuffer[33]);/*ֽ֡ͣ*/ + + /*ͨñͷӦò㱨ܳ*/ + chRcToVobcDataBuffer[29U] = (UINT8)((UINT8)((ii - 31U) >> 8u) & 0xffu); + chRcToVobcDataBuffer[30U] = (UINT8)((ii - 31U) & 0xffu); + + /*Ӧòݵıij */ + chRcToVobcDataBuffer[31U] = (UINT8)((UINT8)((ii - 33U) >> 8u) & 0xffu); + chRcToVobcDataBuffer[32U] = (UINT8)((ii - 33U) & 0xffu); + + dstDevId = (UINT16)(chVobcType << 8U) | ((UINT16)vobcId); + outnetSafeSendRtn = OutnetSafeSend(dstDevId, logId, &chRcToVobcDataBuffer[0U], ii); + if (1u == outnetSafeSendRtn) + { /*дгɹ*/ +#ifdef LOGPRINT/*־ӡ*/ +#ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ + debug_infor_printf((const)"\nRC_VOBC_CBTC_SEND:%d", ii); + debug_out_array(0xAA, chRcToVobcDataBuffer, ii); +#endif/*ƽ̨ӡ*/ +#endif + retVal = CI_SUCCESS; + } + else + { + /*дʧ*/ + retVal = CI_ERROR; + } + } + else + { + } + + return retVal; +} + + +/* +* ȡVOBCRcṹ +* ˵ void +* ֵ +*/ +UINT8 GetVobcToRcSum(void) +{ + return VobcToRcSum; +} + +/* +* Ivoc֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +UINT8 ParseIvocToRcDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, const UINT16 logId) +{ + UINT8 ii = 0u; /**/ + UINT8 retVal = CI_SUCCESS; + UINT8 lineIdentity = 0u; /*·ʶ*/ + UINT8 galHeadSaved = 0u; + IvocToRcDataStruct parseCheckVobcStruc = { 0u }; + UINT8 chFind = CI_ERROR; + /*ܴVOBCж*/ + if (VOBC_TO_CI_SUM_MAX <= VobcToCiSum) + { + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + retVal = ParseIvocToCiDataFrameCC(dataBuf, dataLength, systemId, &parseCheckVobcStruc, &galHeadSaved, logId); + + if (CI_SUCCESS == retVal) + { + /*ȥ*/ + for (ii = 0u; ii < VobcToCiSum; ii++) + { + if (VobcToCiDataStru[ii].VobcId == parseCheckVobcStruc.VobcId) + {/*гӵгһ*/ + CopyVobcToCiMsg(&parseCheckVobcStruc, &(VobcToCiDataStru[ii])); + chFind = CI_SUCCESS; + break; + } + } + if (CI_ERROR == chFind) + { + (void)CommonMemSet(&(VobcToCiDataStru[VobcToCiSum]), (UINT32)sizeof(IvocToRcDataStruct), 0U, (UINT32)sizeof(IvocToRcDataStruct));/*ڴ棬ֹ*/ + CopyVobcToCiMsg(&parseCheckVobcStruc, &(VobcToCiDataStru[VobcToCiSum])); + VobcToCiSum++; + } + else + { + ; /*Ѵڲ*/ + } + } + else + { + + /*ͨͷѾˣִͨͷ򣬳Ҳͨͷ*/ + if (0u == galHeadSaved) + { + if (LINE_CC == lineIdentity) + { + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_IVOC, systemId); + } + else + { + ClearHlhtHeadCtx(CI_SYSTEM_TYPE_VOBC, systemId); + } + } + else + { + ; + } + } + } + + return retVal; +} + +/* +* 黥ͨRC->IVOC֡ +* ˵ +* const UINT8 vobcId ĿVOBC ID +* const UINT16 logId ĿVOBC ߼ID1˻2ˣ +* ֵ 0:ʧ +* 1:ݳɹ +*/ +static UINT8 PackRcToIvocDataHLHTHeart(const UINT8 vobcId, const UINT16 logId) +{ + UINT8 sendIvocDataBuffer[VOBC_TO_CI_DATA_LEN_MAX] = { 0u };/*CIVOBC֡*/ + UINT32 curCycleNum = Get2oo2CurCycleNum(); + UINT32 appCycleTime = GetSystemParaAppCycleTime(); + UINT16 ii = 0u; + + UINT8 retVal = CI_ERROR; + UINT8 localCiId = GetSystemParaLocalCiId(); /*ID*/ + UINT32 ciEtcsId = 0u; + UINT32 vobcEtcsId = 0u; + UINT32 emapCheckVer = 0u; + UINT16 dstDevId = 0u; + UINT8 outnetSafeSendRtn = 0u; + UINT8 functionreturn = 0u; + UINT8 chVobcType = CI_SYSTEM_TYPE_IVOC; + UINT32 chCtxSrcCrntSN = 0U; + UINT32 chCtxCiRcvSN = 0U; + + functionreturn = dquDevName2HlhtId(((UINT16)CI_SYSTEM_TYPE_RCI * 256U + localCiId), 0U, &ciEtcsId); + functionreturn &= dquDevName2HlhtId(((UINT16)chVobcType * 256U) + vobcId, logId, &vobcEtcsId); + functionreturn &= GetCiEmapCheckVer(localCiId, &emapCheckVer, chVobcType); + /*ȻȡʱϢȡɹбҪ*/ + if (CI_SUCCESS == functionreturn) + { + retVal = CI_SUCCESS; + } + else + { + retVal = CI_ERROR; + } + + if (CI_SUCCESS == retVal) + { + ii = 0u; + + /*ʼӦ֡*/ + ShortToChar(IVOC_CI_INTERFACE_INFOTYPE, &sendIvocDataBuffer[ii]);/*ӿϢ*/ + ii += 2u; + + LongToChar(ciEtcsId, &sendIvocDataBuffer[ii]);/*ͷʶϢ*/ + ii += 4u; + LongToChar(vobcEtcsId, &sendIvocDataBuffer[ii]);/*շʶϢ*/ + ii += 4u; + LongToChar(emapCheckVer, &sendIvocDataBuffer[ii]);/*ӵͼ汾УϢ*/ + ii += 4u; + LongToChar(curCycleNum, &sendIvocDataBuffer[ii]);/*Ϣк*/ + ii += 4u; + ShortToChar((UINT16)appCycleTime, &sendIvocDataBuffer[ii]);/*豸ͨѶ*/ + ii += 2u; + chCtxSrcCrntSN = GetHLHTHeadCtxSrcCrntSN(chVobcType, vobcId); + LongToChar(chCtxSrcCrntSN, &sendIvocDataBuffer[ii]);/*ԷϢкţյԷһϢеĶԷϢк*/ + ii += 4u; + chCtxCiRcvSN = GetHLHTHeadCtxCiRcvSN(chVobcType, vobcId); + LongToChar(chCtxCiRcvSN, &sendIvocDataBuffer[ii]);/*յһϢʱк*/ + ii += 4u; + + sendIvocDataBuffer[ii++] = CI_IVOC_PRTCL_VER;/*RC-IVOCӿЭ汾*/ + + + ii += 2u;/*ͨñͷеӦò㱨ܳ*/ + + /*ΪӦò*/ + ii += 2u;/*ij*/ + + ii += 2u;/*Ӧñ*/ + + ii += 2u;/*Ԥֽ*/ + + ShortToChar(CI_IVOC_INFO_TYPE_HEART_FRAME, &sendIvocDataBuffer[33]);/*ֽ֡ͣ*/ + + + /*ͨñͷӦò㱨ܳ*/ + sendIvocDataBuffer[29U] = (UINT8)((UINT8)((ii - 31U) >> 8u) & 0xffu); + sendIvocDataBuffer[30U] = (UINT8)((ii - 31U) & 0xffu); + + /*Ӧòݵıij */ + sendIvocDataBuffer[31U] = (UINT8)((UINT8)((ii - 33U) >> 8u) & 0xffu); + sendIvocDataBuffer[32U] = (UINT8)((ii - 33U) & 0xffu); + + dstDevId = (UINT16)(chVobcType << 8U) | ((UINT16)vobcId); + outnetSafeSendRtn = OutnetSafeSend(dstDevId, logId, &sendIvocDataBuffer[0U], ii); + if (1u == outnetSafeSendRtn) + { /*дгɹ*/ +#ifdef LOGPRINT/*־ӡ*/ +#ifdef PLATFORM_2OO2/*2oo2ƽ̨ӡ*/ + debug_infor_printf((const)"\nVOBC_PBTACS_SEND:%d", ii); + debug_out_array(0xAA, sendIvocDataBuffer, ii); +#endif/*ƽ̨ӡ*/ +#endif + retVal = CI_SUCCESS; + } + else + { + /*дʧ*/ + retVal = CI_ERROR; + } + } + else + { + } + + return retVal; +} + +/* +* ȡյг״̬ +* ˵const UINT16 wVobcId гID +* +* ֵ 0:ȡʧ +* 0x55 +* 0xaa +*/ +UINT8 GetRecvVobcControlMode(const UINT16 wVobcId) +{ + VobcToCiDataStruct* pVobcData = NULL; + UINT8 chVobcSum = 0u; + UINT8 ii = 0u; + UINT8 rtVal = 0u; + + + pVobcData = GetVobcToCiDataStru(); + chVobcSum = GetIvocToRcSum(); + + if (NULL != pVobcData) + { + for (ii = 0u; ii < chVobcSum; ii++) + { + if (wVobcId == pVobcData[ii].VobcId) + { + rtVal = pVobcData[ii].controlMode;/*ָг״̬*/ + break; + } + else + { + /*޴*/ + } + } + } + else + { + /*޴*/ + } + + return rtVal; } \ 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..fba3a8d 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h @@ -102,9 +102,16 @@ #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 VOBC_RC_INTERFACE_INFOTYPE ((UINT16)0x0217U) /*VOBC-RCӿڣRC-VOBCӿ*/ +#define VOBC_RC_INFO_STATE ((UINT16)0x0201U) /*VOBC->RCϢڷ*/ +#define RC_VOBC_HEART_FRAME ((UINT16)0x0201U) /*RC->VOBCϢڷ*/ + #define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBCЭ汾*/ #define CI_IVOC_BACKUP_PRTCL_VER ((UINT8)0x066) /*CI_VOBCͨЭ汾*/ +#define RC_VOBC_PRTCL_VER ((UINT8)0x065) /*RC_VOBCЭ汾*/ #define IVOC_CI_CMD_MAX ((UINT16)100U) /*IVOC CIֵ*/ #define IVOC_CI_CMD_DEVICE_MAX ((UINT8)100U) /*IVOC CI豸ֵ*/ @@ -166,8 +173,9 @@ #define CI_IVOC_GAP_DETECT_STATUS_UNCLEAR ((UINT8)0xAA) /*CI2VOBC϶̽״̬Ѽϰ*/ #define CI_IVOC_GAP_DETECT_STATUS_DEFAULT ((UINT8)0xFF) /*CI2VOBC϶̽״̬δ/޴˹ܣDefault Value*/ -#define CI_IVOC_ESB_STATE_VALID ((UINT8)0x55U) /*CIIVOC ESBť*/ -#define CI_IVOC_ESB_STATE_INVALID ((UINT8)0xAAU) /*CIIVOC ESBťδ*/ +#define CI_IVOC_ESB_STATE_VALID ((UINT8)0x55U) /*CIIVOC(VOBC) ESBť*/ +#define CI_IVOC_ESB_STATE_INVALID ((UINT8)0xAAU) /*CIIVOC(VOBC) ESBťδ*/ +#define CI_IVOC_NO_HAVE_ESB ((UINT8)0xFFU) /*CIIVOC(VOBC) ESBťδ*/ #define CI_IVOC_NON_RETURN_STATE_VALID ((UINT8)0x55U) /*CIIVOC ۷ť*/ #define CI_IVOC_NON_RETURN_STATE_INVALID ((UINT8)0xAAU) /*CIIVOC ۷ťδ*/ @@ -222,6 +230,13 @@ #define CI_VOBC_BACKUP_SEND_ROUTE_SUM ((UINT8)5U) /*CIغͨ·ֵ*/ +#define CI_IVOC_LOST_POSITION ((UINT8)0x55U) /*CIؿر λ*/ + + +#define CI_VOBC_JXTC_CUT_YES ((UINT8)0x55) /*϶̽·*/ +#define CI_VOBC_JXTC_CUT_NO ((UINT8)0xAA) /*϶̽·δ*/ +#define CI_VOBC_JXTC_OFF ((UINT8)0xFF) /*δ/޴˹*/ + #ifdef __cplusplus extern "C" { #endif @@ -353,8 +368,14 @@ typedef struct S_VobcToCiDataStruct UINT8 chNvramPosFlag; /*NVNAMλñʶ 0x55гʹNVRAMλ 0xaaгδʹNVRAMλ*/ UINT16 wHeadSigId; /*ǰźŻID*/ UINT16 wHeadVobcId; /*ǰID*/ + UINT8 chJumpBackApply; /*Ծ*/ + UINT32 dwJumpBackSn; /*Ծк*/ + UINT8 controlMode; /*سģʽ*/ } VobcToCiDataStruct; +/*RCģʽ£ͳһʹIvocToRcDataStruct*/ +typedef VobcToCiDataStruct IvocToRcDataStruct; + /*ʹúģʽͨŵVobcϢ*/ typedef struct S_VobcBackUpToCiDataStruct { @@ -382,6 +403,34 @@ typedef struct S_VobcBackUpToCiDataStruct } VobcBackUpToCiDataStruct; +/*RCͨŵVobcϢģʽ£RCͨŵVOBC*/ +typedef struct S_IvocToRcDataStruct +{ + UINT16 VobcId; /*Vobc ID*/ + UINT16 VobcType; /*г:0x14 5100x10 ijṹRCģʽ510*/ + UINT8 controlMode; /*سģʽ*/ + UINT8 trainDirection; /*гз*/ + UINT8 chTrainLevel; /*гм 0x01ʽгƼCBTC𣩣0x02ʽгƼITC𣩣0x03Ƽ(IL)0x04֪󱸿Ƽ(ABL)Ƿ*/ + UINT8 chTrainMode; /*гģʽ0x01AM0x02CM0x03RM0x04EUMԤ0x05FAM(Ԥ)0x06CAMԤǷ*/ + + UINT16 appInfoType; /*ӦϢ*/ + UINT16 vobcLogId; /*ͨ4IP VOBC1˻2˱ʶ*/ + UINT32 ComStartCycle; /*VOBCͨڣʹøVOBCͨжж*/ + + UINT16 wTrainMaxSafeHeadLink; /*гȫǰLink*/ + UINT32 dwTrainMaxSafeHeadOffset; /*гȫǰƫ*/ + UINT16 wTrainMinSafeHeadLink; /*гСȫǰlink*/ + UINT32 dwTrainMinSafeHeadOffset; /*гСȫǰƫ*/ + UINT16 wTrainMaxSafeTailLink; /*гȫLink*/ + UINT32 dwTrainMaxSafeTailOffset; /*гȫƫ*/ + UINT16 wTrainMinSafeTailLink; /*гСȫlink*/ + UINT32 dwTrainMinSafeTailOffset; /*гСȫƫ*/ + UINT16 wTrainLen; /*г*/ + UINT16 wTrainSpeed; /*гٶ*/ + UINT8 chSpeedDir; /*гٶȷ*/ + +} VobcToRcDataStruct; + #endif extern VobcToCiDataStruct VobcToCiDataStru[VOBC_TO_CI_SUM_MAX]; @@ -390,6 +439,8 @@ extern VobcBackUpToCiDataStruct VobcBackUpToCiDataStru[VOBC_BACKUP_TO_CI_SUM_MAX extern UINT8 VobcToCiSum; +extern VobcToRcDataStruct VobcToRcDataStru[VOBC_TO_CI_SUM_MAX];/*RCͨŵVOBCϢCIģʽ²ʹáRCģʽ£洢RCͨŵ510Ϣ,ǵöͬ*/ +extern UINT8 VobcToRcSum;/*RCͨŵVobcĿRCģʽʹã¼RCͨŵVOBC,2˼ǵͬ*/ /* * VOBC֡ @@ -419,7 +470,7 @@ UINT8 ParseVobcBackUpToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength * ֵ 0:ʧ * 1:ݳɹ */ -UINT8 PackCiToVobcData(void); +UINT8 PackVobcData(void); /* * VOBCͨ @@ -453,13 +504,6 @@ UINT8 GetVobcToCiSum(void); * CI_ERROR: Ϸ */ UINT8 GetPsdEditGroupInfo(const UINT16 psdId); -/* -* VOBC͸CIϢṹУɾָλõ -* ˵ const UINT8 idx:VOBC͸CIϢṹλ -* ֵ 0:ʧ -* 1:ɹ -*/ -UINT8 RemoveVobcToCiMsgAt(UINT8 idx); /* @@ -683,6 +727,72 @@ UINT8 ParseFAOHLHTOtherTypeData(const UINT16 appInfoType, UINT8* dataBuf, UINT16 */ UINT8 ParseFAOHLHTBackUpControlData(UINT8* dataBuf, UINT16 dataLen, VobcToCiDataStruct* vobcToCiDataStru); +/* +* طɳ崻 +* ˵ +* ֵ +* by cgh 20250630 +*/ +void PackCiToVobcFlyProtectData(void); + +/* +* 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); +/* +* VOBC֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +UINT8 ParseVobcToRcDataCC(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, const UINT16 logId); +/* +* RCģʽVOBC +* ˵ void +* ֵ 0:ʧ +* 1:ݳɹ +*/ +UINT8 PackRcToVobcData(void); +/* +* ȡVOBCRcṹ +* ˵ void +* ֵ +*/ +UINT8 GetVobcToRcSum(void); +/* +* Ivoc֡ +* ˵ const UINT8* dataBuf, ݻ +* const UINT16 dataLength, ݳ +* const UINT8 systemId, Դ豸ID +* const UINT16 logIdͨ4IP VOBC1˻2˱ʶ +* ֵ 0: ݽʧ +* 1: ݽɹ +*/ +UINT8 ParseIvocToRcDataFrame(const UINT8* dataBuf, const UINT16 dataLength, const UINT8 systemId, const UINT16 logId); +/* +* ȡIvocRCṹ +* ˵ void +* ֵ +*/ +UINT8 GetIvocToRcSum(void); +/* +* ȡյг״̬ +* ˵const UINT16 wVobcId гID +* +* ֵ 0:ȡʧ +* 0x55 +* 0xaa +*/ +UINT8 GetRecvVobcControlMode(const UINT16 wVobcId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c index bed6509..6eb3d97 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.c @@ -26,6 +26,8 @@ ComTrainPosDataStruct ComTrainPosDataStru[ZC_TO_CI_TRAIN_MAX];/* UINT16 ComTrainSum = 0u;/*г*/ UINT8 lineIdentity = 0u; /*·ʶ*/ +ZcToCiDynamicDataStruct gZcToCiDymDataStru = { 0U }; /*ZC̬ݽṹ*/ + /* * ZC֡ @@ -58,15 +60,18 @@ 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);/*ȡ·ʶ*/ ci_zcPrtclVersion = GetVersionOfZCToCI(); localCiId = GetSystemParaLocalCiId(); /*ȡID*/ zcName = (CI_SYSTEM_TYPE_ZC)*256U + systemId; - ciName = (CI_SYSTEM_TYPE_CI)*256U + localCiId; + ciName = (CI_SYSTEM_TYPE_RCI)*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 +133,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 +255,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 +913,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 +966,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 +995,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,15 +1070,17 @@ UINT8 PackCiToZcData( UINT8 deviceId) UINT32 dwHlhtHSrcSN = 0u; UINT32 dwHlhtHRcvSN = 0u; UINT16 totallenIndex = 0U; + UINT8 chDataType = 0U; localCi = GetSystemParaLocalCiId(); /*ȡID*/ ci_zcPrtclVersion = GetVersionOfZCToCI(); /*ȻȡʱϢȡɹбҪ*/ - CIName2HlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_CI * 256U) + localCi, 0U, &ciEtcsId); + CIName2HlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_RCI * 256U) + localCi, 0U, &ciEtcsId); ZCName2HlhtId = dquDevName2HlhtId((CI_SYSTEM_TYPE_ZC * 256U) + deviceId, 0U, &zcEtcsId); 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 +1149,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 +1169,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 +1358,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 +1385,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; /*״̬Ƿʧ*/ } } @@ -1367,4 +1444,575 @@ UINT8 ParseZcIteLineCutData(UINT8* dataBuf, UINT16 dataLen) } return cRetVal; +} + +/** +* @brief ȡZC͵Ľ·֤ͣ־ +* @param[in] UINT16 wDeviceId 豸ID +* @return ·֤ͣ־ +* @note by cgh 20251106 +*/ +UINT8 GetRouteStopensureFlagZc(UINT16 wDeviceId) +{ + UINT8 chReval = ROUTE_STOPENSURE_NO; + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(wDeviceId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + chReval = gZcToCiDymDataStru.szRouteDataStruZc[bufIndex].StopensureFlag; + } + else + { + /*֤ͣ*/ + } + + return chReval; +} + +/* +* ZC͵Ľ·֤ͣ־ +* ˵const UINT16 routeId, ·ID +* const UINT8 stopensureFlag ֤ͣ־ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetRouteStopensureFlagZc(const UINT16 routeId, const UINT8 stopensureFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + if ((ROUTE_STOPENSURE_YES == stopensureFlag) || (ROUTE_STOPENSURE_NO == stopensureFlag)) + { + gZcToCiDymDataStru.szRouteDataStruZc[bufIndex].StopensureFlag = stopensureFlag; /*֤ͣ־*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/** +* @brief ȡZC͵źŻ״̬ +* @param[in] UINT16 wDeviceId 豸ID +* @return źŻ״̬ +* @note by cgh 20251106 +*/ +UINT8 GetSignalLightExtinctStateZc(UINT16 wDeviceId) +{ + UINT8 chReval = SIGNAL_LIGHT_EXTICT_STATE_YES; + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(wDeviceId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + chReval = gZcToCiDymDataStru.szSignalDataStruZc[bufIndex].LightExtinctState; + } + else + { + /**/ + } + + return chReval; +} + +/* +* ZC͵źŻ״̬ +* ˵const UINT16 signalId, źŻID +* const UINT8 ligheCloseState, ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetSignalLightExtinctStateZc(const UINT16 signalId, const UINT8 lightExtinctState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_LIGHT_EXTICT_STATE_ALL_YES == lightExtinctState) || (SIGNAL_LIGHT_EXTICT_STATE_YES == lightExtinctState)) + { + gZcToCiDymDataStru.szSignalDataStruZc[bufIndex].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; + } + else if (SIGNAL_LIGHT_EXTICT_STATE_NO == lightExtinctState) + { + gZcToCiDymDataStru.szSignalDataStruZc[bufIndex].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_NO; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡZC͵ͨųѹͨźŻ״̬ +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.07 +*/ +UINT8 GetSignalCrossStateZc(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + reVal = gZcToCiDymDataStru.szSignalDataStruZc[bufIndex].SignalCrossState; + } + else + { + /**/ + } + return reVal; +} + +/* +* ZC͵ͨųѹͨźŻ״̬ +* ˵const UINT16 signalId, źŻID +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetSignalCrossStateZc(const UINT16 signalId, const UINT8 signalCrossState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_CROSS_STATE_NO == signalCrossState) || (SIGNAL_CROSS_STATE_YES == signalCrossState)) + { + gZcToCiDymDataStru.szSignalDataStruZc[bufIndex].SignalCrossState = signalCrossState; /*ͨųѹͨźŻ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡZC͵߼ʱ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δʱ +* 0xAA ʱ +* 0xFF ʱЧ +* Created By LQ 2025.11.07 +*/ +UINT8 GetLogSecLinShiXianSuStateZc(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + cRetVal = gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].LinShiXianSuSetFlag; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* ZC͵߼ʱ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 linShiXianSuSetState, ʱ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetLogSecLinShiXianSuStateZc(const UINT16 logSectionId, const UINT8 linShiXianSuSetState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ߼±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGSEC_LSXS_SET_STATE_NO == linShiXianSuSetState) || + (LOGSEC_LSXS_SET_STATE_YES == linShiXianSuSetState) || + (LOGSEC_LSXS_SET_STATE_INVALID == linShiXianSuSetState)) + { + gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].LinShiXianSuSetFlag = linShiXianSuSetState; /*߼ʱ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡZC͵߼γʼռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δռ +* 0xAA ͨųռ +* 0xBB ͨųռ +* Created By LQ 2025.11.07 +*/ +UINT8 GetLogSecOccupyStateZc(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (bufIndex < LOGIC_SECTION_SUM_MAX) + { + retVal = gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].OccupyState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ZC͵߼γʼռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetLogSecOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGICSECTION_OCCUPY_UT == curOccupyState) || + (LOGICSECTION_OCCUPY_CT == curOccupyState) || + (LOGICSECTION_OCCUPY_NO == curOccupyState)) + { + gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].OccupyState = curOccupyState; /*߼εǰռ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡZC͵߼ͨųռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 ޳ͨųռ +* 0xAA ͨųռ +* Created By LQ 2025.11.07 +*/ +UINT8 GetLogSecTXOccupyStateZc(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + retVal = gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].TXOccupyState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ZC͵߼ͨųռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetLogSecTXOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGICSECTION_OCCUPY_TX == curOccupyState) || + (LOGICSECTION_OCCUPY_NO_TX == curOccupyState)) + { + gZcToCiDymDataStru.LogicSectionDataStruZc[bufIndex].TXOccupyState = curOccupyState; /*߼εǰռ״̬*/ + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } +} + +/* +* ȡZC͵ļARB״̬ +* ˵const UINT16 axisSectionId, ID +* ֵ0 ȡʧ +* 0x55 δARB״̬ +* 0xaa ARB +* Created By LQ 2025.11.07 +*/ +UINT8 GetAxisSecArbStateZc(const UINT16 axisSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (bufIndex < AXIS_SECTION_SUM_MAX) + { + retVal = gZcToCiDymDataStru.AxisSectionDataStruZc[bufIndex].AxisArbState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ZC͵ļARB״̬ +* ˵const UINT16 axisSectionId, ID +* const UINT8 arbState, ARB״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetAxisSecArbStateZc(const UINT16 axisSectionId, const UINT8 arbState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (bufIndex < AXIS_SECTION_SUM_MAX) + { + if ((AXIS_SECTION_ARB_NO == arbState) || (AXIS_SECTION_ARB_YES == arbState)) + { + gZcToCiDymDataStru.AxisSectionDataStruZc[bufIndex].AxisArbState = arbState; /*ARB״̬*/ + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } +} + +/* +* ȡZC͵ͣ״̬ +* ˵const UINT16 phySectionId, ID +* ֵ0 ȡʧ +* 0x55 δͣ +* 0xAA ͣ +* Created By LQ 2025.11.07 +*/ +UINT8 GetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*ȡ±*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + retVal = gZcToCiDymDataStru.PhysicalSectionDataStruZc[bufIndex].StopSteadyFlag; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ZC͵ͣ״̬ +* ˵const UINT16 phySectionId, ID +* const UINT8 stopSteadyState, ͣ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId, const UINT8 stopSteadyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*ȡ±*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((PHYSICAL_SECTION_STOPSTEADY_NO == stopSteadyState) || (PHYSICAL_SECTION_STOPSTEADY_YES == stopSteadyState)) + { + gZcToCiDymDataStru.PhysicalSectionDataStruZc[bufIndex].StopSteadyFlag = stopSteadyState; /*ͣ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡZC͵ȫѩģʽ +* ˵void +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.10 +*/ +UINT8 GetAllSnowModelZc(void) +{ + return gZcToCiDymDataStru.cSnowValidFlagZc; +} + +/* +* ZC͵ȫѩģʽ +* ˵UINT8 setmodle ȫѩģʽ +* ֵvoid +* Created By LQ 2025.11.10 +*/ +void SetAllSnowModelZc(UINT8 setmodle) +{ + if ((CI_ALL_SNOW_VALID == setmodle) || (CI_ALL_SNOW_UNVALID == setmodle)) + { + gZcToCiDymDataStru.cSnowValidFlagZc = setmodle; + } + else + { + /**/ + } +} + +/* +* ȡZC͵ıѩվ̨ +* ˵ +* ֵѩվ̨ +* Created By LQ 2025.11.10 +*/ +UINT8 GetLocalAreaSnowNumZc(void) +{ + return gZcToCiDymDataStru.cAreaSnowPlatFormNumZc; +} + +/* +* ȡZC͵ıѩϢ +* ˵ +* ֵѩϢ +* Created By LQ 2025.11.10 +*/ +AreaSnowInfoStruct* GetLocalAreaSnowZc(void) +{ + return gZcToCiDymDataStru.szAreaSnowInfoZc; +} + +/* +* ZC͵ıѩϢ +* ˵const UINT8 cAreaSnowNum ѩ +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SetLocalAreaSnowInfoZc(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]) +{ + UINT8 ii = 0U; + + if ((LOCAL_AREA_SNOW_SUM_MAX >= cAreaSnowNum) && (NULL != pAreaSnowBuf)) + { + /*ZC͵ıѩϢ*/ + (void)CommonMemSet(gZcToCiDymDataStru.szAreaSnowInfoZc, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX), 0U, (UINT32)(sizeof(AreaSnowInfoStruct) * LOCAL_AREA_SNOW_SUM_MAX)); + + gZcToCiDymDataStru.cAreaSnowPlatFormNumZc = cAreaSnowNum; + for (ii = 0U; ii < cAreaSnowNum; ii++) + { + gZcToCiDymDataStru.szAreaSnowInfoZc[ii] = pAreaSnowBuf[ii]; /*洢ZC͵ıѩ״̬Ϣ*/ + } + } + else + { + /*ηǷ*/ + } +} + +/* +* ȡZC͵ıѩģʽ +* ˵ +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.10 +*/ +UINT8 GetLocalSnowModelZc(void) +{ + return gZcToCiDymDataStru.chLocalSnowValidFlagZc; +} + +/* +* ZC͵ıѩģʽ +* ˵UINT8 setmodle ѩģʽ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SetLocalSnowModelZc(UINT8 setmodle) +{ + if ((CI_LOCAL_SNOW_UNVALID == setmodle) || (CI_LOCAL_SNOW_VALID == setmodle)) + { + gZcToCiDymDataStru.chLocalSnowValidFlagZc = setmodle; + } + else + { + ; /**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackZcData.h index 6bec290..54c3f55 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 @@ -51,7 +51,7 @@ typedef struct S_EbInputInfoStruct /*·̬ݽṹ*/ typedef struct S_ZcToCiDataStruct { - UINT8 ZcId; /*Zc ID*/ + UINT8 ZcId; /*Zc ID*/ UINT16 ZcMaskValueBufLen; /*ZCCIλֵBuf*/ UINT8 ZcMaskValueBuf[ZC_TO_CI_MASK_SUM_MAX]; /*ZCCIλֵBuf*/ @@ -59,11 +59,65 @@ 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; +/*ZC͵źŻ̬ݽṹ*/ +typedef struct S_SignalDataStructZC +{ + UINT16 SignalId; /*źŻID (ֶ)*/ + UINT8 LightExtinctState; /*źŻ״̬ZC(0x55ƣ0xaa)*/ + UINT8 SignalCrossState; /*ͨųѹͨźŻ״̬ZC(0x55δѹ0xaaѹ)*/ +}SignalDataStructZC; + +/*ZC͵߼ζ̬ݽṹ*/ +typedef struct S_LogicSectionDataStructZC +{ + UINT16 LogicSectionId; /*߼ID (ʼֶ)*/ + UINT8 LinShiXianSuSetFlag; /*߼ʱ״̬ZC(0x55-δʱ٣0xAA-ʱ٣0xFF-ʱЧ)*/ + UINT8 OccupyState; /*߼γʼռ״̬ZC(0x55-δռã0xAA-ͨųռã0xBB-ͨųռ)*/ + UINT8 TXOccupyState; /*߼ͨųռ״̬ZC(0x55-޳ͨųռã0xAA-ͨųռ)*/ +}LogicSectionDataStructZC; + +/*ZC͵ļζ̬ݽṹ*/ +typedef struct S_AxisSectionDataStructZC +{ + UINT16 AxisSectionId; /*ID (ʼֶ)*/ + UINT8 AxisArbState; /*ARB״̬CC(0x55-δARB0xaa-ARB)*/ +}AxisSectionDataStructZC; + +/*ZC͵ζ̬ݽṹ*/ +typedef struct S_PhysicalSectionDataStructZC +{ + UINT16 PhysicalSectionId; /*ID (ʼֶ)*/ + UINT8 StopSteadyFlag; /*ͣϢZC(0x55-δͣȣ0xAA-ͣ)*/ +}PhysicalSectionDataStructZC; + +/*ZC͵Ľ·̬ݽṹ*/ +typedef struct S_RouteDataStructZC +{ + UINT16 RouteId; /*·ID (ʼֶ)*/ + UINT8 StopensureFlag; /*֤ͣ־ZC(0x55ã0xAAδ) */ +}RouteDataStructZC; + +/*洢ZC͵Ķ̬ݽṹ*/ +typedef struct S_ZcToCiDynamicDataStruct +{ + UINT8 cSnowValidFlagZc; /* ȫѩģʽЧ־ZC */ + UINT8 cAreaSnowPlatFormNumZc; /*ѩվ̨ZC*/ + AreaSnowInfoStruct szAreaSnowInfoZc[LOCAL_AREA_SNOW_SUM_MAX]; /*ѩZC*/ + UINT8 chLocalSnowValidFlagZc; /* ѩģʽЧ־ZC */ + SignalDataStructZC szSignalDataStruZc[SIGNAL_SUM_MAX]; /*źŻݽṹZC˳洢ݣ*/ + LogicSectionDataStructZC LogicSectionDataStruZc[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹZC˳洢ݣ*/ + AxisSectionDataStructZC AxisSectionDataStruZc[AXIS_SECTION_SUM_MAX]; /*ݽṹZC˳洢ݣ*/ + PhysicalSectionDataStructZC PhysicalSectionDataStruZc[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹZC˳洢ݣ*/ + RouteDataStructZC szRouteDataStruZc[ROUTE_SUM_MAX]; /*·ݽṹZC˳洢ݣ*/ +} ZcToCiDynamicDataStruct; + /*ͨųλϢ*/ typedef struct S_ComTrainPosDataStruct { @@ -78,6 +132,7 @@ typedef struct S_ComTrainPosDataStruct extern ComTrainPosDataStruct ComTrainPosDataStru[ZC_TO_CI_TRAIN_MAX]; extern UINT16 ComTrainSum; extern UINT8 lineIdentity; +extern ZcToCiDynamicDataStruct gZcToCiDymDataStru; /*ZC̬ݽṹ*/ #endif @@ -196,14 +251,222 @@ 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); + +/** +* @brief ȡZC͵Ľ·֤ͣ־ +* @param[in] UINT16 wDeviceId 豸ID +* @return ·֤ͣ־ +* @note by cgh 20251106 +*/ +UINT8 GetRouteStopensureFlagZc(UINT16 wDeviceId); + +/* +* ZC͵Ľ·֤ͣ־ +* ˵const UINT16 routeId, ·ID +* const UINT8 stopensureFlag ֤ͣ־ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetRouteStopensureFlagZc(const UINT16 routeId, const UINT8 stopensureFlag); + +/** +* @brief ȡZC͵źŻ״̬ +* @param[in] UINT16 wDeviceId 豸ID +* @return źŻ״̬ +* @note by cgh 20251106 +*/ +UINT8 GetSignalLightExtinctStateZc(UINT16 wDeviceId); + +/* +* ZC͵źŻ״̬ +* ˵const UINT16 signalId, źŻID +* const UINT8 ligheCloseState, ״̬ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetSignalLightExtinctStateZc(const UINT16 signalId, const UINT8 lightExtinctState); + +/* +* ȡZC͵ͨųѹͨźŻ״̬ +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.06 +*/ +UINT8 GetSignalCrossStateZc(const UINT16 signalId); + +/* +* ZC͵ͨųѹͨźŻ״̬ +* ˵const UINT16 signalId, źŻID +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetSignalCrossStateZc(const UINT16 signalId, const UINT8 signalCrossState); + +/* +* ȡZC͵߼ʱ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δʱ +* 0xAA ʱ +* 0xFF ʱЧ +* Created By LQ 2025.11.06 +*/ +UINT8 GetLogSecLinShiXianSuStateZc(const UINT16 logSectionId); + +/* +* ZC͵߼ʱ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 linShiXianSuSetState, ʱ״̬ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLogSecLinShiXianSuStateZc(const UINT16 logSectionId, const UINT8 linShiXianSuSetState); + +/* +* ȡZC͵߼γʼռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δռ +* 0xAA ͨųռ +* 0xBB ͨųռ +* Created By LQ 2025.11.06 +*/ +UINT8 GetLogSecOccupyStateZc(const UINT16 logSectionId); + +/* +* ZC͵߼γʼռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLogSecOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState); + +/* +* ȡZC͵߼ͨųռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 ޳ͨųռ +* 0xAA ͨųռ +* Created By LQ 2025.11.06 +*/ +UINT8 GetLogSecTXOccupyStateZc(const UINT16 logSectionId); + +/* +* ZC͵߼ͨųռ״̬ +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.06 +*/ +void SetLogSecTXOccupyStateZc(const UINT16 logSectionId, const UINT8 curOccupyState); + +/* +* ȡZC͵ļARB״̬ +* ˵const UINT16 axisSectionId, ID +* ֵ0 ȡʧ +* 0x55 δARB״̬ +* 0xaa ARB +* Created By LQ 2025.11.07 +*/ +UINT8 GetAxisSecArbStateZc(const UINT16 axisSectionId); + +/* +* ZC͵ļARB״̬ +* ˵const UINT16 axisSectionId, ID +* const UINT8 arbState, ARB״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetAxisSecArbStateZc(const UINT16 axisSectionId, const UINT8 arbState); + +/* +* ȡZC͵ͣ״̬ +* ˵const UINT16 phySectionId, ID +* ֵ0 ȡʧ +* 0x55 δͣ +* 0xAA ͣ +* Created By LQ 2025.11.07 +*/ +UINT8 GetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId); + +/* +* ZC͵ͣ״̬ +* ˵const UINT16 phySectionId, ID +* const UINT8 stopSteadyState, ͣ״̬ +* ֵ +* Created By LQ 2025.11.07 +*/ +void SetPhySecStopSteadyZcOrVobc(const UINT16 phySectionId, const UINT8 stopSteadyState); + +/* +* ȡZC͵ȫѩģʽ +* ˵void +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.10 +*/ +UINT8 GetAllSnowModelZc(void); + +/* +* ZC͵ȫѩģʽ +* ˵UINT8 setmodle ȫѩģʽ +* ֵvoid +* Created By LQ 2025.11.10 +*/ +void SetAllSnowModelZc(UINT8 setmodle); + +/* +* ȡZC͵ıѩվ̨ +* ˵ +* ֵѩվ̨ +* Created By LQ 2025.11.10 +*/ +UINT8 GetLocalAreaSnowNumZc(void); + +/* +* ȡZC͵ıѩϢ +* ˵ +* ֵѩϢ +* Created By LQ 2025.11.10 +*/ +AreaSnowInfoStruct* GetLocalAreaSnowZc(void); + +/* +* ZC͵ıѩϢ +* ˵const UINT8 cAreaSnowNum ѩ +* const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX] ѩ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SetLocalAreaSnowInfoZc(const UINT8 cAreaSnowNum, const AreaSnowInfoStruct pAreaSnowBuf[LOCAL_AREA_SNOW_SUM_MAX]); + +/* +* ȡZC͵ıѩģʽ +* ˵ +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.11.10 +*/ +UINT8 GetLocalSnowModelZc(void); + +/* +* ZC͵ıѩģʽ +* ˵UINT8 setmodle ѩģʽ +* ֵ +* Created By LQ 2025.11.10 +*/ +void SetLocalSnowModelZc(UINT8 setmodle); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.c b/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.c index 8bfc365..162459b 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.c +++ b/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.c @@ -70,6 +70,8 @@ UINT16* dsuATSIndex; /*ATS UINT16* dsuCIIndex; /*CIϢ*/ +UINT16* dsuRCIndex; /*CIϢ*/ + UINT16* dsuARIndex; /*ӵĽṹԶ۷Ӧ*/ UINT16* dsuZCComZoneIndex; /*ӵZC򣬶Ӧ 2012.1.5*/ diff --git a/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.h b/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.h index 0609b47..ac32eaa 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.h +++ b/TSCP/src/APP/ciapp/QueryFiles/commonQueryStruDef.h @@ -73,6 +73,8 @@ extern UINT16* dsuAROutIndex; /* extern UINT16* dsuATSIndex; /*ATSϢ*/ extern UINT16* dsuCIIndex; /*CIϢ*/ + +extern UINT16* dsuRCIndex; /*CIϢ*/ extern UINT16* dsuARIndex; /*ӵĽṹԶ۷Ӧ*/ diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c index cb49b3a..e326c9d 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,13 +165,27 @@ 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); + if (0u == funcRtn) + { + debug_infor_printf((const)"OCSwitchConfigDataStructInit_OLD fail.\r\n"); + } } else { funcRtn *= OCSwitchConfigDataStructInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"OCSwitchConfigDataStructInit fail.\r\n"); + } + /*ʼOC ת޻״ָ̬ʾ*/ + funcRtn *= OCSwitchCfgZzjDataStuInit(FSName); + if (0u == funcRtn) + { + debug_infor_printf((const)"OCSwitchCfgZzjDataStuInit fail.\r\n"); + } } /*ʼOC źŻñ*/ @@ -170,7 +194,6 @@ UINT8 RelayInit(CHAR* FSName) /*ʼOC ñ*/ funcRtn *= OCPhySecConfigDataStructInit(FSName); - if (0u == funcRtn) { @@ -476,6 +499,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 +1034,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 +2053,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) || (AXIS_TYPE_STANDARD_INTERFACE == acFty)) { rtnvalue = 1u; /*ȫӼܸλ*/ @@ -2236,6 +2283,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 +2339,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 +3238,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 +3311,10 @@ UINT8 OverlapCfgDtStruFromDquStr(DSU_PROTECT_LINK_STRU * pProtectLink, OverlapCo pOvlpCfgDtStr->FloodGateIdSum++; } } + + pOvlpCfgDtStr->wOverlapThisZhaoChaRelayId = LSData.pLSOverlapLockCondStru[k].wOverlapThisZhaoChaRelayId; + pOvlpCfgDtStr->wOverlapThatZhaoChaRelayId = LSData.pLSOverlapLockCondStru[k].wOverlapThatZhaoChaRelayId; + break; } @@ -3341,6 +3420,46 @@ UINT8 OverlapCfgDtStruFromDquStr(DSU_PROTECT_LINK_STRU * pProtectLink, OverlapCo { ; } + + if (1U == rtnvalue) + { + for (k = 0u; k < LSDataLen.LSOverlapLockCondStruLen; k++)/**/ + { + if (LSData.pLSOverlapLockCondStru[k].wOverlapId == pOvlpCfgDtStr->OverlapId) + { + pOvlpCfgDtStr->SideProtecGroupData.GroupID = LSData.pLSOverlapLockCondStru[k].wSidePretectGroupId;/*ҵID*/ + break; + } + } + if ((0u < pOvlpCfgDtStr->SideProtecGroupData.GroupID) && (UINT16_MAX > pOvlpCfgDtStr->SideProtecGroupData.GroupID)) + {/*˲ID*/ + for (k = 0u; k < LSDataLen.LSSideProtecGroupStruLen; k++)/**/ + { + if (pOvlpCfgDtStr->SideProtecGroupData.GroupID == LSData.pLSSideProtecGroupStru[k].GroupID)/*ݲIDƥ*/ + { + CommonMemCpy(&pOvlpCfgDtStr->SideProtecGroupData, sizeof(SideProtecGroupStru), &LSData.pLSSideProtecGroupStru[k], sizeof(SideProtecGroupStru)); + break; + } + } + if (0u < LSDataLen.LSSideProtecGroupStruLen) + {/*ڲ*/ + if (LSDataLen.LSSideProtecGroupStruLen == k) + {/*ָID*/ + rtnvalue = 0u; + } + else + { + /*޴*/ + } + } + else + { + rtnvalue = 0u; + } + } + + + } return rtnvalue; } @@ -3361,7 +3480,7 @@ UINT8 OverlapConfigDataStructInit(CHAR * FSName) callFun *= InitLS_RouteStruct (FSName); callFun *= InitLS_OverlapLockCondStru(FSName); callFun *= InitLS_FHDaoChaStru(FSName); - + callFun *= InitLSSideProtec(FSName);/*ʼ*/ /*ӵͼʼʧܣʧ˳*/ if(0u == callFun) { @@ -3524,102 +3643,146 @@ UINT8 PsdCfgDtStruFromDquEmergStr(DSU_SCREEN_STRU * pScreen,PsdConfigDataStruct* UINT8 rtnvalue = 0u; UINT16 stationId = 0u; UINT16 linkindex = 0u; + UINT8 esbnum = 0u; /*ڲ*/ 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->OpenThreeEditGroupDriveRelayId = 0U; + pPsdCfgDtStr->OpenFourEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->OpenSixEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->OpenEightEditGroupDriveRelayId = 0u; + pPsdCfgDtStr->wRelayDoorButtonId = 0u; + pPsdCfgDtStr->doorReopenRelayId = 0u; + pPsdCfgDtStr->doorReopenRelayId2 = 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;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; + 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; + + pPsdCfgDtStr->OpenThreeEditGroupDriveRelayId = (RelayData.pRelayScreenStr + i)->wRelayThreeEditGroupOpenDoorId; + pPsdCfgDtStr->doorReopenRelayId2 = (RelayData.pRelayScreenStr + i)->doorReopenRelayId2; + + break; /*ż̵ҵţֹͣ*/ + } + else + { + /*ʼ*/ + } } + + + for (i = 0u; i < dquCICfgDtStr.EsbCfgDtStrLen; i++) + { + if (pPsdCfgDtStr->BelongPlatformId == dquCICfgDtStr.EsbCfgDtStr[i].BelongPlatFormId) + {/*psd߼վ̨ESB߼վ̨*/ + if (PSD_INCLUDE_ESB_NUM > esbnum) + { + pPsdCfgDtStr->IncloudeEsbIdBuf[esbnum] = dquCICfgDtStr.EsbCfgDtStr[i].EsbId; + esbnum++; + } + else + { + rtnvalue = 0U; + break; + } + } + } + pPsdCfgDtStr->IncloudeEsbNum = esbnum; + + } + 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 +3794,6 @@ UINT8 PsdCfgDtStruFromDquEmergStr(DSU_SCREEN_STRU * pScreen,PsdConfigDataStruct* *********************************************/ UINT8 PsdConfigDataStructInit(CHAR * FSName) { - UINT8 rtnvalue = 0u; UINT8 callFun = 0u; UINT16 i = 0u; @@ -3641,7 +3803,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 +3815,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 +4822,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:????*/ /*ڲ*/ @@ -4714,521 +4873,535 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS rtnvalue = CI_ERROR; } - ciType = (UINT8)(dsuStaticHeadStru.pCIStruStru[dsuCIIndex[pRouteCfgDtStr->BelongCiId]].wType);/*·*/ - - /*·*/ - if(0x01u == (pDsuRouteStr->wRouteType & 0x01u)) + ciType = GetdsuStaticDataCiType(pRouteCfgDtStr->BelongCiId);/*·*/ + if ((CI_ERROR != ciType)&&(CI_ERROR!= rtnvalue)) { - /*·Ϊг·*/ - pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE; - } - else if(0x02u == (pDsuRouteStr->wRouteType & 0x02u)) - { - /*·Ϊ۷·*/ - pRouteCfgDtStr->RouteType = ROUTE_TYPE_RETURN; - - /*û۷·۷·г·*/ - if ((CI_TYPE_TCC == ciType) || (CI_TYPE_CLD == ciType)) + /*·*/ + if (0x01u == (pDsuRouteStr->wRouteType & 0x01u)) { + /*·Ϊг·*/ + pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE; + } + else if (0x02u == (pDsuRouteStr->wRouteType & 0x02u)) + { + /*·Ϊ۷·*/ + pRouteCfgDtStr->RouteType = ROUTE_TYPE_RETURN; + + /*û۷·۷·г·*/ + if ((CI_TYPE_TCC == ciType) || (CI_TYPE_CLD == ciType)) + { + pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE; + } + else + { + } + } + else if (0x0100u == (pDsuRouteStr->wRouteType & 0x0100u)) + { + /*·Ϊ·*/ + pRouteCfgDtStr->RouteType = ROUTE_TYPE_DIAOCHE; + } + else if (0u == pDsuRouteStr->wRouteType) + { + pRouteCfgDtStr->RouteType = 0u; + } + else if (0u != (0xffu&pDsuRouteStr->wRouteType)) + { + /*ͲΪ0,ҵֽڲΪ0,·Ϊг·*/ pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE; } else { + pRouteCfgDtStr->RouteType = 0u; } - } - else if(0x0100u == (pDsuRouteStr->wRouteType & 0x0100u)) - { - /*·Ϊ·*/ - pRouteCfgDtStr->RouteType = ROUTE_TYPE_DIAOCHE; - } - else if(0u == pDsuRouteStr->wRouteType) - { - pRouteCfgDtStr->RouteType = 0u; - } - else if(0u != (0xffu&pDsuRouteStr->wRouteType)) - { - /*ͲΪ0,ҵֽڲΪ0,·Ϊг·*/ - pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE; - } - else - { - pRouteCfgDtStr->RouteType = 0u; - } - /*ý·*/ - pRouteCfgDtStr->ConfigRouteType = pRouteCfgDtStr->RouteType; - /*۷·,ý·*/ - if (0x02u == (pDsuRouteStr->wRouteType & 0x02u)) - { - pRouteCfgDtStr->ConfigRouteType = ROUTE_TYPE_RETURN; - } - else - { - } - - if (0x0800u == (pDsuRouteStr->wRouteType & 0x0800u)) - { /*羮·*/ - pRouteCfgDtStr->AirShaftRouteType = ROUTE_TYPE_AIRSHAFT; - } - else - { - } - - /*Զ·*/ - if (0x1000u == (pDsuRouteStr->wRouteType & 0x1000u)) - {/*Զ·*/ - pRouteCfgDtStr->AutoTriggerType = ROUTE_TYPE_AUTO_TRIGGER; - } - else - { - } - - /*ý·*/ - pRouteCfgDtStr->cRouteRukuProperty = ROUTE_RUKU_PROPERTY_NO; - if (0x0010U == (pDsuRouteStr->wRouteType & 0x0010U)) - { - pRouteCfgDtStr->cRouteRukuProperty = ROUTE_RUKU_PROPERTY_YES; - } - else - { - /*·*/ - } - - /*Զź*/ - pRouteCfgDtStr->AutoSigProperty = ROUTE_AUTOSIG_PROPERTY_NO; - if(0xaau == pDsuRouteStr->wAttribute) - { - pRouteCfgDtStr->AutoSigProperty = ROUTE_AUTOSIG_PROPERTY_YES; - } - else - { - } - - /*Զ·*/ - pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_NO; - for(i=0u;iConfigRouteType = pRouteCfgDtStr->RouteType; + /*۷·,ý·*/ + if (0x02u == (pDsuRouteStr->wRouteType & 0x02u)) { - /*·IDԶ·гֹ·ԶΪyes*/ - if(LSData.pLSAutoRouteStr[i].szIncludeRouteId[j] == pLSRouteStr->wRouteId) - { - pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; - break; - } - else - { - } - - } - } - - /*Զ۷·*/ - for(i=0u;iwRouteId) - { - pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; - break; - } - else - { - } - } - } - - for(i=0u;iwRouteId) - { - pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; - break; - } - else - { - } - } - } - - - pRouteCfgDtStr->ReverseRouteProperty = ROUTE_REVERSE_PROPERTY_NO; - /*·*/ - for(i = 0u;i < LSDataLen.LSReverseRouteStrLen;i++) - {/*·ен·*/ - if(LSData.pLSReverseRouteStr[i].wId == pLSRouteStr->wRouteId) - {/*·IDڷ·гֹ·з*/ - pRouteCfgDtStr->ReverseRouteProperty = ROUTE_REVERSE_PROPERTY_YES; - break; + pRouteCfgDtStr->ConfigRouteType = ROUTE_TYPE_RETURN; } else { } - } - pRouteCfgDtStr->cCbtcProperty = ROUTE_CBTC_PROPERTY_NO; /*ʼ·ΪCBTC*/ - /*·linkȷ·CBTC*/ - for (i = 0U; i < pDsuRouteStr->wIncludeLinkNum; i++) - { - pRouteIncLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[i]]; - if (0x55U != pRouteIncLinkStru->cCbtcProperty) - { - break; /*linkCBTCԣֹͣ*/ + if (0x0800u == (pDsuRouteStr->wRouteType & 0x0800u)) + { /*羮·*/ + pRouteCfgDtStr->AirShaftRouteType = ROUTE_TYPE_AIRSHAFT; } else { - /*linkCBTCԣ*/ } - } - if ((i == pDsuRouteStr->wIncludeLinkNum) && (0U != i)) - { - pRouteCfgDtStr->cCbtcProperty = ROUTE_CBTC_PROPERTY_YES; /*linkCBTCԣ·CBTC*/ - } - else - { - /*linkCBTCԣ·CBTC*/ - } - - pRouteCfgDtStr->HaveDirChangePointInRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT;/*·Ĭûз仯*/ - - pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT;/*·Ĭûз仯*/ - /*·Ŀ (ֶ)*/ - pRouteCfgDtStr->RoutePhySecSum = 0u; - - for(i=0u;iwPhySecCheckStaId == LSData.pLSPhyAndChkStaStr[i].wId) + /*Զ·*/ + if (0x1000u == (pDsuRouteStr->wRouteType & 0x1000u)) + {/*Զ·*/ + pRouteCfgDtStr->AutoTriggerType = ROUTE_TYPE_AUTO_TRIGGER; + } + else { - for(j=0u;jcRouteRukuProperty = ROUTE_RUKU_PROPERTY_NO; + if (0x0010U == (pDsuRouteStr->wRouteType & 0x0010U)) + { + pRouteCfgDtStr->cRouteRukuProperty = ROUTE_RUKU_PROPERTY_YES; + } + else + { + /*·*/ + } + + /*Զź*/ + pRouteCfgDtStr->AutoSigProperty = ROUTE_AUTOSIG_PROPERTY_NO; + if (0xaau == pDsuRouteStr->wAttribute) + { + pRouteCfgDtStr->AutoSigProperty = ROUTE_AUTOSIG_PROPERTY_YES; + } + else + { + } + /*·*/ + if (0x8000U == (pDsuRouteStr->wRouteType & 0x8000U)) + { + pRouteCfgDtStr->chRouteCouplinkType = ROUTE_TYPE_COUPLINK; + } + else + { + + } + + /*Զ·*/ + pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_NO; + for (i = 0u; i < LSDataLen.LSAutoRouteStrLen; i++)/*Զͨ*/ + { + for (j = 0u; j < AR_MAX_INCLUDE_ROUTE_NUM; j++) { - if((0u != LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j]) && (UINT16_MAX != LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j])) + /*·IDԶ·гֹ·ԶΪyes*/ + if (LSData.pLSAutoRouteStr[i].szIncludeRouteId[j] == pLSRouteStr->wRouteId) { - if(ROUTE_PHYSICALSECTION_SUM_MAX <= (pRouteCfgDtStr->RoutePhySecSum)) - { - rtnvalue = CI_ERROR; - break; - } - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].PhysicalSectionId =LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j]; - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].CheckProperty =(UINT8)LSData.pLSPhyAndChkStaStr[i].wCheckState[j]; - - /*շǷӦȡ*/ - if (0u == pRouteCfgDtStr->RoutePhySecSum) - {/*ԵһLinkΪ׼*/ - /*ȡ·һ*/ - firstAxleSecId = pDsuRouteStr->wIncludeAxleSgmtId[0];/*һ*/ - lastAxleSecId = pDsuRouteStr->wIncludeAxleSgmtId[pDsuRouteStr->wIncludeAxleSgmtNum-1u];/*һ*/ - axleNum = pDsuRouteStr->wIncludeAxleSgmtNum;/**/ - - - /*·һβӦȡ*/ - pRouteCfgDtStr->RoutePhySectionStru[0].LockDirShouldOpposedToRoute - = ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK; + pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; + break; + } + else + { + } - /*һΣ·пз仯*/ - /*׼*/ - if ((1u < axleNum) && (1u < pDsuRouteStr->wIncludeLinkNum)) - { - /*㵽յ㣬յ㵽*/ - /*·һιLINK1ǰLINK֮ӹϵ(LINKһյ㵽) - յӹϵ(յLINKһ㵽յ)*/ - pDsuAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[firstAxleSecId]; - - /*·һLINKṹ*/ - pRouteFirstLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[0]]; - /*·ڶLINKṹ*/ - pRouteSecondLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[1]]; + } + } - if (pDsuAxleSgmt->wRelatePhysicalSgmtId == pRouteCfgDtStr->RoutePhySectionStru[0].PhysicalSectionId) - {/*ܶ*/ - - - if ((pRouteFirstLinkStru->wOrgnJointMainLkId == pRouteSecondLinkStru->wId) || - (pRouteFirstLinkStru->wOrgnJointSideLkId == pRouteSecondLinkStru->wId)) - {/*һLINKLINKIdӲLINKidڶLINKidͬΪյ㵽*/ - baseDir = TERMINAL_TO_ORIGIN;/*յ㵽*/ - } - else if ((pRouteFirstLinkStru->wTmnlJointMainLkId == pRouteSecondLinkStru->wId) || - (pRouteFirstLinkStru->wTmnlJointSideLkId == pRouteSecondLinkStru->wId)) - { - baseDir = ORIGIN_TO_TERMINAL;/*㵽յ*/ - } - else - { - /*ǣݴ*/ - } - - /*ֱӲLINK仯*/ - flagFind = 0u; - for (lkIndex=0u;(lkIndex < (pDsuRouteStr->wIncludeLinkNum - 1u))&&((DSU_ROUTE_STRU_wLinkId-1u)>lkIndex);lkIndex++) - { - - pDsuLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex]]; - - - if (ORIGIN_TO_TERMINAL == baseDir) - {/*㵽յ*/ - if ((pDsuLink->wTmnlJointMainLkId == pDsuRouteStr->wLinkId[lkIndex+1u]) || - (pDsuLink->wTmnlJointSideLkId == pDsuRouteStr->wLinkId[lkIndex+1u]) - ) - {/*LINKյLINK յӲLINKΪһLINK*/ - pDsuLinkNext = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex+1u]];/*һLINK*/ - - if ((pDsuLinkNext->wTmnlJointMainLkId == pDsuRouteStr->wLinkId[lkIndex]) || - (pDsuLinkNext->wTmnlJointSideLkId == pDsuRouteStr->wLinkId[lkIndex]) - ) - {/*һLINKյLINK յӲLINKΪLINK*/ - /*˵ҵ仯*/ - dirChangeLinkId = pDsuRouteStr->wLinkId[lkIndex+1u];/*仯LINKΪһLINK*/ - findFlag = 1u; - } - else - { - } - } - else - { - } - - } - - else if (TERMINAL_TO_ORIGIN == baseDir) - {/*յ㵽*/ - if ((pDsuLink->wOrgnJointMainLkId == pDsuRouteStr->wLinkId[lkIndex+1u]) || - (pDsuLink->wOrgnJointSideLkId == pDsuRouteStr->wLinkId[lkIndex+1u]) - ) - {/*LINKLINK ӲLINKΪһLINK*/ - pDsuLinkNext = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex+1u]];/*һLINK*/ - - if ((pDsuLinkNext->wOrgnJointMainLkId == pDsuRouteStr->wLinkId[lkIndex]) || - (pDsuLinkNext->wOrgnJointSideLkId == pDsuRouteStr->wLinkId[lkIndex]) - ) - {/*һLINKLINK ӲLINKΪLINK*/ - /*˵ҵ仯*/ - - dirChangeLinkId = pDsuRouteStr->wLinkId[lkIndex+1u];/*仯LINKΪһLINK*/ - findFlag = 1u; - } - else - { - } - } - else - { - } - - } - else - { - /*޲*/ - } - - if (1u == findFlag) - {/*ҵ˳ѭ*/ - break; - } - else - { - } - } - - /*·Σҵ仯*/ - for (axleSecIndex =0u;(axleSecIndexwIncludeAxleSgmtNum)&&(DSU_ROUTE_STRU_AxleSgmtId >axleSecIndex);axleSecIndex++) - { - axleSecId = pDsuRouteStr->wIncludeAxleSgmtId[axleSecIndex]; - pDsuAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[axleSecId]; - if ((pDsuAxleSgmt->wOrgnLkId == dirChangeLinkId) || - (pDsuAxleSgmt->wTmnlLkId == dirChangeLinkId)) - {/*εLINKյLINKΪ仯LINK˼Ϊ仯*/ - dirChangeAxleSecId = pDsuAxleSgmt->wId;/*ҵ仯ID*/ - dirChangePhySecId = pDsuAxleSgmt->wRelatePhysicalSgmtId;/*¼仯ID*/ - break; - } - else - { - } - } - - } - else - { - } - - } - else - { - } - - findRouteProtectDirChangeFlag = 0u; - /*ĬϽ·뱣֮ûз仯*/ - pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT; - if (0u == dirChangeAxleSecId)/*·ûз仯*/ - { - /*·һκͱ֮Ƿз仯*/ - if (pDsuRouteStr->wProtectLinkNum > 0u) - {/*б*/ - firstProtectId = pDsuRouteStr->wProtectLinkId[0];/*ȡһID*/ - - if (firstProtectId <= PROTECT_INDEX_NUM) - { - /*ȡñνṹ*/ - pProtectStru = dsuStaticHeadStru.pProtectLinkStru + dsuProtectLinkIndex[firstProtectId]; - - if (pProtectStru->wIncludeAxleSgmtNum > 0u) - {/*α0*/ - - pProtectFirstAxleSec = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[pProtectStru->wIncludeAxleSgmtId[0]]; - - /*εһLINK*/ - pDsuProtectFstAxleSecStartLink = - dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pProtectFirstAxleSec->wOrgnLkId]; - /*εһյLINK*/ - pDsuProtectFstAxleSecEndLink = - dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pProtectFirstAxleSec->wTmnlLkId]; - - /*·һ*/ - pDsuRouteLastAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[lastAxleSecId]; - - /*·һLINK*/ - pRouteLastLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteLastAxleSgmt->wTmnlLkId]; - if ((pRouteLastLink->wTmnlJointMainLkId == pDsuProtectFstAxleSecEndLink->wId) || - (pRouteLastLink->wTmnlJointSideLkId == pDsuProtectFstAxleSecEndLink->wId)) - {/*·һLINKյLINKڱεһյLINK - ·һLINKյӲLINKڱεһյLINK*/ - if ((pDsuProtectFstAxleSecEndLink->wTmnlJointMainLkId == pRouteLastLink->wId) || - (pDsuProtectFstAxleSecEndLink->wTmnlJointSideLkId == pRouteLastLink->wId)) - {/*εһյLINKյLINKڽ·һLINK - εһյLINKյӲLINKڽ·һLINK*/ - /*Զҵ仯*/ - findRouteProtectDirChangeFlag = 1u; - } - } - - /*·һLINK*/ - pRouteLastLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteLastAxleSgmt->wOrgnLkId]; - if ((pRouteLastLink->wOrgnJointMainLkId == pDsuProtectFstAxleSecStartLink->wId) || - (pRouteLastLink->wOrgnJointSideLkId == pDsuProtectFstAxleSecStartLink->wId)) - {/*·һLINKLINKڱεһLINK - ·һLINKӲLINKڱεһLINK*/ - if ((pDsuProtectFstAxleSecStartLink->wOrgnJointMainLkId == pRouteLastLink->wId) || - (pDsuProtectFstAxleSecStartLink->wOrgnJointSideLkId == pRouteLastLink->wId)) - {/*εһLINKLINKڽ·һLINK - εһLINKӲLINKڽ·һLINK*/ - /*Զҵ仯*/ - findRouteProtectDirChangeFlag = 1u; - } - } - - if (1u == findRouteProtectDirChangeFlag) - { - /*·з仯*/ - pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_HAVE_DIR_CHANGE_POINT; - } - else - {/*·ûз仯*/ - pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT; - } - } - else - { - } - } - else - { - } - - - } - else - { - } - } - else - { - } - - } - else if (0u < pRouteCfgDtStr->RoutePhySecSum) - {/*ΣΪ仯LINKѾڴˣ - ֻҪζӦLINKӦǷdirChangeLinkIndex*/ - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = - ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK;/*ĬϲӦȡ*/ - if (0u < dirChangePhySecId) - {/*з仯*/ - if (pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].PhysicalSectionId - == dirChangePhySecId) - { - dirChangePhySecIndex = pRouteCfgDtStr->RoutePhySecSum;/**/ - - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = - ROUTE_PHYSEC_SHOULD_OPPOSE_LOCK;/*ӦȡһΪ˼*/ - } - else - {/*ڷ仯ID*/ - if (0u == dirChangePhySecIndex) - {/*ûID*/ - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = - ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK;/*Ӧȡ*/ - } - else - { - if (pRouteCfgDtStr->RoutePhySecSum > dirChangePhySecIndex) - {/*pRouteCfgDtStr->RoutePhySecSumû++֮ǰ*/ - pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = - ROUTE_PHYSEC_SHOULD_OPPOSE_LOCK;/*ӦȡһΪ˼*/ - } - else - { - } - - } - } - - - }else - { - } - - } - else - { - /*ڣ*/ - } - if (dirChangePhySecId >0u) - { - pRouteCfgDtStr->HaveDirChangePointInRoute = ROUTE_HAVE_DIR_CHANGE_POINT;/*з仯*/ - } - else - { - } - pRouteCfgDtStr->RoutePhySecSum++; + /*Զ۷·*/ + for (i = 0u; i < LSDataLen.LSAutoRtnRouteStrLen; i++) + { + for (j = 0u; j < ARR_MAX_INCLUDE_ROUTE_NUM; j++) + { + /*·IDԶ۷·гֹ·ԶΪyes Զ۷·Զ··Ϊ8Ծһѭˣ*/ + if (LSData.pLSAutoRtnRouteStr[i].szIncludeRouteId[j] == pLSRouteStr->wRouteId) + { + pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; + break; + } + else + { } } + } - if (ROUTE_HAVE_DIR_CHANGE_POINT == pRouteCfgDtStr->HaveDirChangePointInRoute) - { - debug_infor_printf((const)"RouteId:%d HaveDirChangePointInRoute dirChangedPhyId:%d\n",pRouteCfgDtStr->RouteId,dirChangePhySecId); - } - else + for (i = 0u; i < LSDataLen.LSAllAutoRtnRouteStrLen; i++) /*ȫԶ۷*/ + { + for (j = 0u; j < AARR_MAX_INCLUDE_ROUTE_NUM; j++) { + /*·IDȫԶ۷·гֹ·ԶΪyes */ + if (LSData.pLSAllAutoRtnRouteStr[i].szIncludeRouteId[j] == pLSRouteStr->wRouteId) + { + pRouteCfgDtStr->AutoRouteProperty = ROUTE_AUTOROUTE_PROPERTY_YES; + break; + } + else + { + } } + } - if (ROUTE_HAVE_DIR_CHANGE_POINT == pRouteCfgDtStr->HaveDirChangePointAfterRoute) - { - debug_infor_printf((const)"RouteId:%d HaveDirChangePointAfterRoute \n",pRouteCfgDtStr->RouteId); + + pRouteCfgDtStr->ReverseRouteProperty = ROUTE_REVERSE_PROPERTY_NO; + /*·*/ + for (i = 0u; i < LSDataLen.LSReverseRouteStrLen; i++) + {/*·ен·*/ + if (LSData.pLSReverseRouteStr[i].wId == pLSRouteStr->wRouteId) + {/*·IDڷ·гֹ·з*/ + pRouteCfgDtStr->ReverseRouteProperty = ROUTE_REVERSE_PROPERTY_YES; + break; } else { } } - } - + pRouteCfgDtStr->cCbtcProperty = ROUTE_CBTC_PROPERTY_NO; /*ʼ·ΪCBTC*/ + /*·linkȷ·CBTC*/ + for (i = 0U; i < pDsuRouteStr->wIncludeLinkNum; i++) + { + pRouteIncLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[i]]; + if (0x55U != pRouteIncLinkStru->cCbtcProperty) + { + break; /*linkCBTCԣֹͣ*/ + } + else + { + /*linkCBTCԣ*/ + } + } + + if ((i == pDsuRouteStr->wIncludeLinkNum) && (0U != i)) + { + pRouteCfgDtStr->cCbtcProperty = ROUTE_CBTC_PROPERTY_YES; /*linkCBTCԣ·CBTC*/ + } + else + { + /*linkCBTCԣ·CBTC*/ + } + + pRouteCfgDtStr->HaveDirChangePointInRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT;/*·Ĭûз仯*/ + + pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT;/*·Ĭûз仯*/ + /*·Ŀ (ֶ)*/ + pRouteCfgDtStr->RoutePhySecSum = 0u; + + for (i = 0u; i < LSDataLen.LSPhyAndChkStaStrLen; i++) + { + if (pLSRouteStr->wPhySecCheckStaId == LSData.pLSPhyAndChkStaStr[i].wId) + { + for (j = 0u; j < MAX_INCLUDE_PHYSC_SGMT_NUM; j++) + { + if ((0u != LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j]) && (UINT16_MAX != LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j])) + { + if (ROUTE_PHYSICALSECTION_SUM_MAX <= (pRouteCfgDtStr->RoutePhySecSum)) + { + rtnvalue = CI_ERROR; + break; + } + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].PhysicalSectionId = LSData.pLSPhyAndChkStaStr[i].wPhysicalSgmtId[j]; + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].CheckProperty = (UINT8)LSData.pLSPhyAndChkStaStr[i].wCheckState[j]; + + /*շǷӦȡ*/ + if (0u == pRouteCfgDtStr->RoutePhySecSum) + {/*ԵһLinkΪ׼*/ + /*ȡ·һ*/ + firstAxleSecId = pDsuRouteStr->wIncludeAxleSgmtId[0];/*һ*/ + lastAxleSecId = pDsuRouteStr->wIncludeAxleSgmtId[pDsuRouteStr->wIncludeAxleSgmtNum - 1u];/*һ*/ + axleNum = pDsuRouteStr->wIncludeAxleSgmtNum;/**/ + + + /*·һβӦȡ*/ + pRouteCfgDtStr->RoutePhySectionStru[0].LockDirShouldOpposedToRoute + = ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK; + + /*һΣ·пз仯*/ + /*׼*/ + if ((1u < axleNum) && (1u < pDsuRouteStr->wIncludeLinkNum)) + { + /*㵽յ㣬յ㵽*/ + /*·һιLINK1ǰLINK֮ӹϵ(LINKһյ㵽) + յӹϵ(յLINKһ㵽յ)*/ + pDsuAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[firstAxleSecId]; + + /*·һLINKṹ*/ + pRouteFirstLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[0]]; + /*·ڶLINKṹ*/ + pRouteSecondLinkStru = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[1]]; + + if (pDsuAxleSgmt->wRelatePhysicalSgmtId == pRouteCfgDtStr->RoutePhySectionStru[0].PhysicalSectionId) + {/*ܶ*/ + + + if ((pRouteFirstLinkStru->wOrgnJointMainLkId == pRouteSecondLinkStru->wId) || + (pRouteFirstLinkStru->wOrgnJointSideLkId == pRouteSecondLinkStru->wId)) + {/*һLINKLINKIdӲLINKidڶLINKidͬΪյ㵽*/ + baseDir = TERMINAL_TO_ORIGIN;/*յ㵽*/ + } + else if ((pRouteFirstLinkStru->wTmnlJointMainLkId == pRouteSecondLinkStru->wId) || + (pRouteFirstLinkStru->wTmnlJointSideLkId == pRouteSecondLinkStru->wId)) + { + baseDir = ORIGIN_TO_TERMINAL;/*㵽յ*/ + } + else + { + /*ǣݴ*/ + } + + /*ֱӲLINK仯*/ + flagFind = 0u; + for (lkIndex = 0u; (lkIndex < (pDsuRouteStr->wIncludeLinkNum - 1u)) && ((DSU_ROUTE_STRU_wLinkId - 1u)>lkIndex); lkIndex++) + { + + pDsuLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex]]; + + + if (ORIGIN_TO_TERMINAL == baseDir) + {/*㵽յ*/ + if ((pDsuLink->wTmnlJointMainLkId == pDsuRouteStr->wLinkId[lkIndex + 1u]) || + (pDsuLink->wTmnlJointSideLkId == pDsuRouteStr->wLinkId[lkIndex + 1u]) + ) + {/*LINKյLINK յӲLINKΪһLINK*/ + pDsuLinkNext = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex + 1u]];/*һLINK*/ + + if ((pDsuLinkNext->wTmnlJointMainLkId == pDsuRouteStr->wLinkId[lkIndex]) || + (pDsuLinkNext->wTmnlJointSideLkId == pDsuRouteStr->wLinkId[lkIndex]) + ) + {/*һLINKյLINK յӲLINKΪLINK*/ + /*˵ҵ仯*/ + dirChangeLinkId = pDsuRouteStr->wLinkId[lkIndex + 1u];/*仯LINKΪһLINK*/ + findFlag = 1u; + } + else + { + } + } + else + { + } + + } + + else if (TERMINAL_TO_ORIGIN == baseDir) + {/*յ㵽*/ + if ((pDsuLink->wOrgnJointMainLkId == pDsuRouteStr->wLinkId[lkIndex + 1u]) || + (pDsuLink->wOrgnJointSideLkId == pDsuRouteStr->wLinkId[lkIndex + 1u]) + ) + {/*LINKLINK ӲLINKΪһLINK*/ + pDsuLinkNext = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteStr->wLinkId[lkIndex + 1u]];/*һLINK*/ + + if ((pDsuLinkNext->wOrgnJointMainLkId == pDsuRouteStr->wLinkId[lkIndex]) || + (pDsuLinkNext->wOrgnJointSideLkId == pDsuRouteStr->wLinkId[lkIndex]) + ) + {/*һLINKLINK ӲLINKΪLINK*/ + /*˵ҵ仯*/ + + dirChangeLinkId = pDsuRouteStr->wLinkId[lkIndex + 1u];/*仯LINKΪһLINK*/ + findFlag = 1u; + } + else + { + } + } + else + { + } + + } + else + { + /*޲*/ + } + + if (1u == findFlag) + {/*ҵ˳ѭ*/ + break; + } + else + { + } + } + + /*·Σҵ仯*/ + for (axleSecIndex = 0u; (axleSecIndexwIncludeAxleSgmtNum) && (DSU_ROUTE_STRU_AxleSgmtId >axleSecIndex); axleSecIndex++) + { + axleSecId = pDsuRouteStr->wIncludeAxleSgmtId[axleSecIndex]; + pDsuAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[axleSecId]; + if ((pDsuAxleSgmt->wOrgnLkId == dirChangeLinkId) || + (pDsuAxleSgmt->wTmnlLkId == dirChangeLinkId)) + {/*εLINKյLINKΪ仯LINK˼Ϊ仯*/ + dirChangeAxleSecId = pDsuAxleSgmt->wId;/*ҵ仯ID*/ + dirChangePhySecId = pDsuAxleSgmt->wRelatePhysicalSgmtId;/*¼仯ID*/ + break; + } + else + { + } + } + + } + else + { + } + + } + else + { + } + + findRouteProtectDirChangeFlag = 0u; + /*ĬϽ·뱣֮ûз仯*/ + pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT; + if (0u == dirChangeAxleSecId)/*·ûз仯*/ + { + /*·һκͱ֮Ƿз仯*/ + if (pDsuRouteStr->wProtectLinkNum > 0u) + {/*б*/ + firstProtectId = pDsuRouteStr->wProtectLinkId[0];/*ȡһID*/ + + if (firstProtectId <= PROTECT_INDEX_NUM) + { + /*ȡñνṹ*/ + pProtectStru = dsuStaticHeadStru.pProtectLinkStru + dsuProtectLinkIndex[firstProtectId]; + + if (pProtectStru->wIncludeAxleSgmtNum > 0u) + {/*α0*/ + + pProtectFirstAxleSec = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[pProtectStru->wIncludeAxleSgmtId[0]]; + + /*εһLINK*/ + pDsuProtectFstAxleSecStartLink = + dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pProtectFirstAxleSec->wOrgnLkId]; + /*εһյLINK*/ + pDsuProtectFstAxleSecEndLink = + dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pProtectFirstAxleSec->wTmnlLkId]; + + /*·һ*/ + pDsuRouteLastAxleSgmt = dsuStaticHeadStru.pAxleSgmtStru + dsuAxleSgmtIndex[lastAxleSecId]; + + /*·һLINK*/ + pRouteLastLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteLastAxleSgmt->wTmnlLkId]; + if ((pRouteLastLink->wTmnlJointMainLkId == pDsuProtectFstAxleSecEndLink->wId) || + (pRouteLastLink->wTmnlJointSideLkId == pDsuProtectFstAxleSecEndLink->wId)) + {/*·һLINKյLINKڱεһյLINK + ·һLINKյӲLINKڱεһյLINK*/ + if ((pDsuProtectFstAxleSecEndLink->wTmnlJointMainLkId == pRouteLastLink->wId) || + (pDsuProtectFstAxleSecEndLink->wTmnlJointSideLkId == pRouteLastLink->wId)) + {/*εһյLINKյLINKڽ·һLINK + εһյLINKյӲLINKڽ·һLINK*/ + /*Զҵ仯*/ + findRouteProtectDirChangeFlag = 1u; + } + } + + /*·һLINK*/ + pRouteLastLink = dsuStaticHeadStru.pLinkStru + dsuLinkIndex[pDsuRouteLastAxleSgmt->wOrgnLkId]; + if ((pRouteLastLink->wOrgnJointMainLkId == pDsuProtectFstAxleSecStartLink->wId) || + (pRouteLastLink->wOrgnJointSideLkId == pDsuProtectFstAxleSecStartLink->wId)) + {/*·һLINKLINKڱεһLINK + ·һLINKӲLINKڱεһLINK*/ + if ((pDsuProtectFstAxleSecStartLink->wOrgnJointMainLkId == pRouteLastLink->wId) || + (pDsuProtectFstAxleSecStartLink->wOrgnJointSideLkId == pRouteLastLink->wId)) + {/*εһLINKLINKڽ·һLINK + εһLINKӲLINKڽ·һLINK*/ + /*Զҵ仯*/ + findRouteProtectDirChangeFlag = 1u; + } + } + + if (1u == findRouteProtectDirChangeFlag) + { + /*·з仯*/ + pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_HAVE_DIR_CHANGE_POINT; + } + else + {/*·ûз仯*/ + pRouteCfgDtStr->HaveDirChangePointAfterRoute = ROUTE_NOT_HAVE_DIR_CHANGE_POINT; + } + } + else + { + } + } + else + { + } + + + } + else + { + } + } + else + { + } + + } + else if (0u < pRouteCfgDtStr->RoutePhySecSum) + {/*ΣΪ仯LINKѾڴˣ + ֻҪζӦLINKӦǷdirChangeLinkIndex*/ + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = + ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK;/*ĬϲӦȡ*/ + if (0u < dirChangePhySecId) + {/*з仯*/ + if (pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].PhysicalSectionId + == dirChangePhySecId) + { + dirChangePhySecIndex = pRouteCfgDtStr->RoutePhySecSum;/**/ + + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = + ROUTE_PHYSEC_SHOULD_OPPOSE_LOCK;/*ӦȡһΪ˼*/ + } + else + {/*ڷ仯ID*/ + if (0u == dirChangePhySecIndex) + {/*ûID*/ + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = + ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK;/*Ӧȡ*/ + } + else + { + if (pRouteCfgDtStr->RoutePhySecSum > dirChangePhySecIndex) + {/*pRouteCfgDtStr->RoutePhySecSumû++֮ǰ*/ + pRouteCfgDtStr->RoutePhySectionStru[pRouteCfgDtStr->RoutePhySecSum].LockDirShouldOpposedToRoute = + ROUTE_PHYSEC_SHOULD_OPPOSE_LOCK;/*ӦȡһΪ˼*/ + } + else + { + } + + } + } + + + } + else + { + } + + } + else + { + /*ڣ*/ + } + if (dirChangePhySecId > 0u) + { + pRouteCfgDtStr->HaveDirChangePointInRoute = ROUTE_HAVE_DIR_CHANGE_POINT;/*з仯*/ + } + else + { + } + pRouteCfgDtStr->RoutePhySecSum++; + } + } + + if (ROUTE_HAVE_DIR_CHANGE_POINT == pRouteCfgDtStr->HaveDirChangePointInRoute) + { + debug_infor_printf((const)"RouteId:%d HaveDirChangePointInRoute dirChangedPhyId:%d\n", pRouteCfgDtStr->RouteId, dirChangePhySecId); + } + else + { + } + + if (ROUTE_HAVE_DIR_CHANGE_POINT == pRouteCfgDtStr->HaveDirChangePointAfterRoute) + { + debug_infor_printf((const)"RouteId:%d HaveDirChangePointAfterRoute \n", pRouteCfgDtStr->RouteId); + } + else + { + } + } + } + } + else + { + rtnvalue = CI_ERROR; + } if(CI_SUCCESS == rtnvalue) { @@ -5792,9 +5965,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 +6548,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) { @@ -6589,6 +6829,37 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS { } #endif + + if (CI_SUCCESS == rtnvalue) + { + if ((0u < pLSRouteStr->wSidePretecGroupID)&&(UINT16_MAX > pLSRouteStr->wSidePretecGroupID)) + { + pRouteCfgDtStr->RouteSideProtecData.GroupID = pLSRouteStr->wSidePretecGroupID; + for (i = 0u; i < LSDataLen.LSRouteSideProtecStruLen; i++) /**/ + { + if (LSData.pLSSideProtecGroupStru[i].GroupID == pRouteCfgDtStr->RouteSideProtecData.GroupID) + { + CommonMemCpy(&pRouteCfgDtStr->RouteSideProtecData, sizeof(SideProtecGroupStru), &LSData.pLSSideProtecGroupStru[i], sizeof(SideProtecGroupStru)); + break; + } + } + + if (0U < LSDataLen.LSRouteSideProtecStruLen) + { + if (LSDataLen.LSRouteSideProtecStruLen == i) + {/*δҵ*/ + rtnvalue = 0u;/*ѯ*/ + } + else + {/*޴*/ + } + } + else + { + rtnvalue = 0u;/*ѯ*/ + } + } + } } else { @@ -6800,11 +7071,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); @@ -6822,7 +7090,6 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) callFun *= InitRelay_DCAgreeStru(FSName);/*ʼ̵ͬ*/ callFun *= InitLS_SGBJStru(FSName); /*ʼⱨ*/ callFun *= InitLS_TransRouteRtnDataStruct(FSName); /*ʼת۷źŻ*/ - /*ӵͼʼʧܣʧ˳*/ if(0u == callFun) { @@ -6892,7 +7159,7 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) {/*úʧܣ0*/ rtnvalue = 0u; } - + if (1U == rtnvalue) { @@ -6949,12 +7216,53 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) { rtnvalue = 0u; } - if ((CI_TYPE_ZX == (UINT8)dsuStaticHeadStru.pCIStruStru[dsuCIIndex[dquCICfgDtStr.RouteCfgDtStr[i].BelongCiId]].wType) - || (CI_TYPE_SCX == (UINT8)dsuStaticHeadStru.pCIStruStru[dsuCIIndex[dquCICfgDtStr.RouteCfgDtStr[i].BelongCiId]].wType)) + else { - execRet = RouteMainProConfigDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.RouteCfgDtStr[i])); + callFun = GetdsuStaticDataCiType(dquCICfgDtStr.RouteCfgDtStr[i].BelongCiId); + if (CI_ERROR != callFun) + { + if ((CI_TYPE_ZX == callFun) || (CI_TYPE_SCX == callFun)) + { + execRet = RouteMainProConfigDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.RouteCfgDtStr[i])); + if (execRet > 0u) + { + } + else + {/*úʧܣ0*/ + rtnvalue = 0u; + } + if (1U != rtnvalue) + { + break; + } + } + else + { + dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.RouteBelMainSum = 0U; + dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.RouteSubSum = 0U; + dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.MainRouteProperty = ROUTE_INIT_PROPERTY; /*ĬΪͨ·*/ + } + } + else + { + rtnvalue = 0u; /*ͻȡʧ*/ + } + } + } + } + + /*߼ι·*/ + if (1u == rtnvalue) + { + if (DATA_TYPE_NEW == chDataType) + { + 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*/ @@ -6965,34 +7273,12 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) break; } } - else - { - dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.RouteBelMainSum = 0U; - dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.RouteSubSum = 0U; - dquCICfgDtStr.RouteCfgDtStr[i].MainOrSubData.MainRouteProperty = ROUTE_INIT_PROPERTY; /*ĬΪͨ·*/ - } } - } - - /*߼ι·*/ - if (1u == rtnvalue) - { - for (i = 0u; i < dquCICfgDtStr.lgcSctCfgDtStrLen; i++) + else { - 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; - } + /*28.0.0.14ݽṹݲ֧߼ι·*/ + /*Ӱ칦ܣ߼· ֽ· ߼Դ*/ + rtnvalue = 1U; } } @@ -7076,7 +7362,7 @@ UINT8 TransmitRelationDataStruFrmSZ(UINT16 Data[]) UINT8 tmpCiId=0u; /*ʱci id*/ UINT8 tmpOtherSysType =0u;/*ʱϵͳ*/ UINT8 findFlag = 0u; /*ҵ־*/ - + UINT16 chRcType = 0U; /*ڲ*/ if(NULL == Data) { @@ -7086,8 +7372,15 @@ UINT8 TransmitRelationDataStruFrmSZ(UINT16 Data[]) else { } - - if((0x3c00u != (Data[0]&0xFF00u))) + if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI) + { + chRcType = 0x3C00U; + } + else + { + chRcType = 0x3D00U; + } + if((chRcType != (Data[0]&0xFF00u))) { rtnvalue = 1u; return rtnvalue; @@ -7230,58 +7523,87 @@ 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 = GetdsuStaticDataCiType(pRouteCfgDtStr->BelongCiId); /*·*/ /*ִ·ID (ֶ)*/ pRouteCfgDtStr->OpposedRouteSum = 0u; - for(i=0u; iRoutePhySecSum; i++) - {/*·*/ + if (CI_ERROR !=chRouteCitype) + { + 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++) - {/*ý·*/ + 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) - {/*ͬ*/ + if (pRouteCfgDtStr->RoutePhySectionStru[i].PhysicalSectionId == RouteCfgDtStr[j].RoutePhySectionStru[k].PhysicalSectionId) + {/*ͬ*/ - Flag = 0u; - for (n = 0u; n < ROUTE_OPPOSED_ROUTE_SUM_MAX; n++) - {/*ִ·飬ǷѾӸõִ·*/ + 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 (pRouteCfgDtStr->OpposedRouteIdBuf[n] == RouteCfgDtStr[j].RouteId) - { - Flag = 1u; - break; - /*Ѿ*/ } } - if (Flag == 1u) + if (0U == rtnvalue) { - /*Ѿڣ*/ + break; } - else - { - /*ӵִ·*/ - pRouteCfgDtStr->OpposedRouteIdBuf[index] = RouteCfgDtStr[j].RouteId;/*ִ*/ - index++; - } - } + } } - } + + pRouteCfgDtStr->OpposedRouteSum = index; + } + else + { + /*ԶԽ·*/ + rtnvalue = 1u; } } - - pRouteCfgDtStr->OpposedRouteSum = index; + else + { + rtnvalue = 0U; + } return rtnvalue; } @@ -7935,6 +8257,8 @@ UINT8 ReadSpksConfigDataFromDquData(SpksDataConfigStruct* pSpksDataConfig) pSpksDataConfig->cutDisplayRelayId = 0u; pSpksDataConfig->menjinJSRelayId = 0u; /*SPKSŽ̵ID */ pSpksDataConfig->VirtualAttribute = SPKS_VIRTUAL_ATTR_NO;/*ʼΪ*/ + pSpksDataConfig->buzzRelayId = 0u; + pSpksDataConfig->cutBuzzRelayId = 0u; if (NULL != RelayData.pRelaySpksStr) { for (i=0u;i < RelayDataLen.RelaySpksStrLen; i++) @@ -7992,6 +8316,24 @@ UINT8 ReadSpksConfigDataFromDquData(SpksDataConfigStruct* pSpksDataConfig) { /*޲*/ } + + if ((0x0U != RelayData.pRelaySpksStr[i].buzzRelayId) && (0xffffU != RelayData.pRelaySpksStr[i].buzzRelayId)) + { + pSpksDataConfig->buzzRelayId = RelayData.pRelaySpksStr[i].buzzRelayId;/*spks̵*/ + } + else + { + /*޲*/ + } + + if ((0x0U != RelayData.pRelaySpksStr[i].cutBuzzRelayId) && (0xffffU != RelayData.pRelaySpksStr[i].cutBuzzRelayId)) + { + pSpksDataConfig->cutBuzzRelayId = RelayData.pRelaySpksStr[i].cutBuzzRelayId;/*spksг̵*/ + } + else + { + /*޲*/ + } pSpksDataConfig->VirtualAttribute = SPKS_VIRTUAL_ATTR_NO;/*̵вҵΪSPKSΪ*/ if (0u == pSpksDataConfig->colRelayId) @@ -8087,7 +8429,7 @@ UINT8 ReadMJConfigDataFromDquData( MJDataConfigStruct* pMJDataConfig) if ((0x0u != RelayData.pMjStr[i].mjjsRelayId) && (0xffffu != RelayData.pMjStr[i].mjjsRelayId)) { pMJDataConfig[i].mjjsRelayId = RelayData.pMjStr[i].mjjsRelayId; - pMJDataConfig[i].belongCiId = (UINT8)GetCiIdByOcId(RelayData.pMjStr[i].ocId); + pMJDataConfig[i].belongCiId = GetCiIdByOcId(RelayData.pMjStr[i].ocId); } else { @@ -8338,103 +8680,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 +8834,10 @@ UINT8 ReadDquCiTransmitInfoToConfig(DquCiTransmitStruct *pDquCiTransmitStr) pTmpCiTransConfig->autoRouteNum++; rtnValue = 1u; } + else + { + debug_infor_printf((const)"ReadDquCiTransmitInfoToConfig: Read AutoRoute Error\n"); + } break; default: rtnValue = 0u; @@ -8736,7 +9130,7 @@ UINT8 CiPatternInit(CHAR* FSName) SetLocalCiCTNearUnLockTime(val); SetLocalWaysidePattern(pDataAddr[11]); - rtnValue = SetLocalRcWorkMode(pDataAddr[12]); + rtnValue = SetSystemWorkType(pDataAddr[12]); } findFlag = 1u; @@ -9468,6 +9862,77 @@ UINT8 OCSwitchConfigDataStructInit(CHAR *FSName) return rtnValue; } +/********************************************* +*ܣʼOC ת޻״ָ̬ʾƱ +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 OCSwitchCfgZzjDataStuInit(CHAR* FSName) +{ + UINT8 rtnValue = 0u; + UINT8* pDataAddr = NULL; /*ݵַ*/ + UINT32 DataSize = 0u; /*ݴСֽ*/ + UINT8 funcRtn = 0u; + UINT16 realRowCount = 0u; /*ʵʱݵ*/ + UINT16 i = 0u; + UINT16 wDataLen = 0u; /*ݿ*/ + + /*ڲ*/ + if (NULL == FSName) + { + ; /*ڲϷ*/ + } + else + { + /*ȡת޻״ָ̬ʾƱ*/ + funcRtn = dquGetConfigDataNew(FSName, OC_DATA_TYPE, OC_SWITCH_ZZJ_POWER_ID, &pDataAddr, &DataSize, &realRowCount); + if (0u == funcRtn) + { + rtnValue = 0u; + } + else + { + rtnValue = 1u; + for (i = 0u; i < SWITCH_SUM_MAX; i++) + { + funcRtn &= CommonMemSet(dquCICfgDtStr.SwchCfgDtStr[i].ZzjPowerData, (UINT32)(SWITCH_ZZJ_POWER_STATE_MAX_NUM * sizeof(ZzjPowerConfigDataStruct)), 0u, (UINT32)(SWITCH_ZZJ_POWER_STATE_MAX_NUM * sizeof(ZzjPowerConfigDataStruct))); + } + + if (1u == funcRtn) + { + /**/ + } + if ((0u != DataSize) && (0u != realRowCount)) + { + if (0u == (DataSize % realRowCount)) + { + /*ÿֽڳ*/ + wDataLen = (UINT16)(DataSize / realRowCount); + + for (i = 0u; i < realRowCount; i++) + { + /*ת޻״ָ̬ʾƱñ*/ + (void)R_OCSwitchZzjCfgDataFromChar(pDataAddr); + pDataAddr += wDataLen; + } + } + else + { + /*ݴ*/ + rtnValue = 0u; + } + } + else + { + ; /**/ + } + + } + + } + + return rtnValue; +} /********************************************* *ܣʼOC ñݡOC2.1.6 @@ -9841,13 +10306,13 @@ UINT8 OCPhySecConfigDataStructInit(CHAR *FSName) * ˵ * UINT16 ocIdoc * ֵ -* UINT16id +* UINT8id */ -UINT16 GetCiIdByOcId(UINT16 ocId) +UINT8 GetCiIdByOcId(UINT16 ocId) { UINT16 i = 0u; /*ѭ*/ UINT16 j = 0u; /*ѭ*/ - UINT16 ciId = 0u; /*CI ID*/ + UINT8 ciId = 0u; /*CI ID*/ UINT8 isBreak = 0u; /*Ƿ˳*/ for (i = 0u; i < dquCICfgDtStr.TrsmtRlsDtStrLen; i++) @@ -10357,6 +10822,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++) { @@ -11129,6 +11595,55 @@ void R_OCSwitchConfigDataFromChar(UINT8* pDataAddr) } } +/********************************************* +*ܣOC ת޻״ָ̬ʾƱ +*˵pDataAddr ݵַ +*ֵ0ʧܣ1ɹ +*********************************************/ +void R_OCSwitchZzjCfgDataFromChar(UINT8* pDataAddr) +{ + UINT8* pData = NULL; + UINT16 SwitchIdTemp = 0u; + UINT8 i = 0U; + + ZzjPowerConfigDataStruct* zzjPowerTempData = NULL; /*ת޻*/ + + + if (NULL == pDataAddr) + { + ; /*ڲΪգн*/ + } + else + { + + pData = pDataAddr; + SwitchIdTemp = ShortFromChar(pData); + + zzjPowerTempData = dquCICfgDtStr.SwchCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuPointIndex[SwitchIdTemp]].ZzjPowerData; + if (SwitchIdTemp < SWITCH_SUM_MAX) + { + /*ID--2ֽ*/ + // pOCSwitchZzjPowerCfgDtStr->SwitchId = SwitchIdTemp; + pData += 2u; + for (i = 0u; i < SWITCH_ZZJ_POWER_STATE_MAX_NUM; i++) + { + /*ת޻J1_1--2ֽ*/ + zzjPowerTempData[i].ZzjDingweiPower1 = ShortFromChar(pData); + pData += 2u; + /*ת޻J1_2--2ֽ*/ + zzjPowerTempData[i].ZzjDingweiPower2 = ShortFromChar(pData); + pData += 2u; + /*ת޻J1_1--2ֽ*/ + zzjPowerTempData[i].ZzjFanweiPower1 = ShortFromChar(pData); + pData += 2u; + /*ת޻J1_2--2ֽ*/ + zzjPowerTempData[i].ZzjFanweiPower2 = ShortFromChar(pData); + pData += 2u; + } + + } + } +} /********************************************* *ܣ·ӽ·ݳʼ *˵pRouteCfgDtStr·ݽṹָ @@ -11142,13 +11657,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 +11710,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 +11744,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 +11900,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 +11910,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 +11958,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 +11985,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 +13003,113 @@ 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; +} +/* +*: ȡԣ +*: CHAR * FSName ļָ +*: +*ֵ: CI_TYPE_ZX 1 + CI_TYPE_CLD 4 + CI_TYPE_SCX 2 Գ + CI_TYPE_TCC 3 ͣ + CI_ERROR 0 ʧ +* ڵgEmapCiConfigStrusʼ֮ǰ +* by fan 20250909 +*/ +UINT8 GetdsuStaticDataCiType(UINT8 chCiID) +{ + UINT8 chType = 0U; + UINT8 chFindRc = CI_ERROR; + UINT8 i = 0U; + if (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI) + { + if ((NULL != g_dsuEmapStru->dsuDataLenStru) + && (0U != g_dsuEmapStru->dsuDataLenStru->wRCLen)) + { + for (i = 0U; i < g_dsuEmapStru->dsuDataLenStru->wRCLen; i++) + { + if (chCiID == (UINT8)dsuStaticHeadStru.pRCStruStru[i].wID) + { + chType = (UINT8)dsuStaticHeadStru.pRCStruStru[i].wType; + chFindRc = CI_SUCCESS; + break; + } + } + } + else + { + chType = CI_ERROR;/*RCģʽδRCش*/ + } + } + if ((RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI) || + ((RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI)&&(CI_ERROR == chFindRc))) + { + /*ģʽ RCδø*/ + if ((NULL != g_dsuEmapStru->dsuDataLenStru) + && (0U != g_dsuEmapStru->dsuDataLenStru->wCILen)) + { + for (i = 0U; i < g_dsuEmapStru->dsuDataLenStru->wCILen; i++) + { + if (chCiID == (UINT8)dsuStaticHeadStru.pCIStruStru[i].wID) + { + chType = (UINT8)dsuStaticHeadStru.pCIStruStru[i].wType; + break; + } + } + } + else + { + chType = CI_ERROR;/*ش*/ + } + } + + if ((CI_TYPE_ZX == chType) || (CI_TYPE_CLD == chType) + || (CI_TYPE_SCX == chType) || (CI_TYPE_TCC == chType)) + { + ; /*Ϸֵ*/ + } + else + { + /*Ƿֵ*/ + (void)debug_infor_printf((const)"GetdsuStaticDataCiType fail: CI ID :%d ; Type :%d\n", chCiID, chType); + chType = CI_ERROR; + } + return chType; +} + diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h index 08a6680..8050e6c 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,10 @@ /*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 AXIS_TYPE_STANDARD_INTERFACE ((UINT8)(0x04)) /*ưǹ׼ӿ*/ #define INDICATOR_MAX_SIZE ((UINT16)2000) /*С*/ @@ -82,6 +85,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]; /*̵*/ @@ -578,6 +585,13 @@ UINT8 OCConfigDataStructInit(UINT16* len, CHAR* FSName, UINT32 DataTypeID, UINT3 *********************************************/ UINT8 OCSwitchConfigDataStructInit(CHAR *FSName); +/********************************************* +*ܣʼOC ת޻״ָ̬ʾƱ +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 OCSwitchCfgZzjDataStuInit(CHAR* FSName); + /********************************************* *ܣʼOC ñݡOC2.1.6 *˵FSNameļָ @@ -619,9 +633,9 @@ UINT8 OCPhySecConfigDataStructInit(CHAR *FSName); * ˵ * UINT16 ocIdoc * ֵ -* UINT16id +* UINT8id */ -UINT16 GetCiIdByOcId(UINT16 ocId); +UINT8 GetCiIdByOcId(UINT16 ocId); /********************************************* *ܣʼվ̨ſݽṹ----ṹ @@ -815,6 +829,12 @@ UINT8 EaConfigDataStructInit(CHAR * FSName); *עcgh-ϲCID-2539-5޸ijʼOC_ݱСģñźŻģñģñijʼʽijʼʽһ *********************************************/ void R_OCSwitchConfigDataFromChar(UINT8* pDataAddr); +/********************************************* +*ܣOC ת޻״ָ̬ʾƱ +*˵pDataAddr ݵַ +*ֵ0ʧܣ1ɹ +*********************************************/ +void R_OCSwitchZzjCfgDataFromChar(UINT8* pDataAddr); /********************************************* *ܣ·ӽ·ݳʼ @@ -931,5 +951,20 @@ UINT8 AgLinkExistRelCGFlagCalc(LinkDataConfigStru* pLinkScCfgDtStr); *********************************************/ UINT8 BGLinkRelAGLinkCal(LinkDataConfigStru* pLinkScCfgDtStr); +/* +*: ȡԣ +*: CHAR * FSName ļָ +*: +*ֵ: +CI_TYPE_ZX 1 +CI_TYPE_CLD 4 +CI_TYPE_SCX 2 Գ +CI_TYPE_TCC 3 ͣ +CI_ERROR 0 ʧ +* ڵgEmapCiConfigStrusʼ֮ǰ +* by fan 20250909 +*/ +UINT8 GetdsuStaticDataCiType(UINT8 chCiID); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c index d3be220..5a41ba1 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c @@ -2432,14 +2432,9 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst /*OC-TMCͨŹжʱ䣨ms*/ SystemParameterStru->TmcOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.TmcOcCommunicationErrorTime; - if (CI_TYPE_TCC == dsuStaticHeadStru.pCIStruStru[dsuCIIndex[ciId]].wType) - { - SystemParameterStru->CiType = CI_TYPE_CLD; - } - else - { - SystemParameterStru->CiType = (UINT8)dsuStaticHeadStru.pCIStruStru[dsuCIIndex[ciId]].wType; - } + + /*ͣTCCתCLDѾReadEmapCiConfig*/ + SystemParameterStru->CiType = gEmapCiConfigStrus[ciId].ciType; SystemParameterStru->dwLineMinTrainLength = dquCICfgDtStr.SystemParaStrNew.dwLineMinTrainLength; @@ -3260,6 +3255,7 @@ static void CIInitEmap(DSU_EMAP_STRU dsuEmapStruPar) dsuAROutIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuAROutIndex; /*۷˳Ϣ*/ dsuATSIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuATSIndex; /*ATSϢ*/ dsuCIIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuCIIndex; /*CIϢ*/ + dsuRCIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuRCIndex; /*CIϢ*/ dsuARIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuARIndex; /*ӵĽṹԶ۷Ӧ*/ dsuZCComZoneIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuZCComZoneIndex; /*ӵZC򣬶Ӧ 2012.1.5*/ dsuConResSpeedIndex = dsuEmapStruPar.dsuEmapIndexStru->dsuConResSpeedIndex; /*ͳһ*/ @@ -3458,50 +3454,127 @@ UINT8 ReadVirtualDevicesInit(PsdConfigDataStruct* psdCfgData, EsbConfigDataStruc */ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[]) { - UINT16 ciStruSum = 0u; + UINT16 wCIStruSum = 0u; + UINT16 wRCStruSum = 0u; UINT16 i; UINT8 ciId; UINT8 jj = 0U; if (NULL != emapVerArr) { - ciStruSum = dsuDataLenStru.wCILen; + wCIStruSum = dsuDataLenStru.wCILen; - for (i = 0u;i < ciStruSum;i++) + for (i = 0u; i < wCIStruSum; i++) { - ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID); + ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID & 0x00FF); emapVerArr[ciId].devId = ciId; emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wType); if (CI_TYPE_TCC == dsuStaticHeadStru.pCIStruStru[i].wType) { emapVerArr[ciId].ciType = CI_TYPE_CLD; } - emapVerArr[ciId].dataVerCheckCIAndVOBC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToVOBC; - emapVerArr[ciId].dataVerCheckCIAndZC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToZC; - emapVerArr[ciId].dataVerCheckCIAndATS = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToATS; - emapVerArr[ciId].dataVerCheckCIAndTMC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToTMC; - - /*УϢ*/ - emapVerArr[ciId].chAdjoinCICount = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCICount; - for (jj = 0U; jj < CI_TRAINSMIT_CI_MAX_NUM; jj++) + if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI) { - emapVerArr[ciId].wAdjoinCIId[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCIId[jj]; - emapVerArr[ciId].dwAdjoinCIShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCIShareCheckData[jj]; - } + emapVerArr[ciId].dataVerCheckCIAndVOBC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToVOBC; + emapVerArr[ciId].dataVerCheckCIAndZC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToZC; + emapVerArr[ciId].dataVerCheckCIAndATS = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToATS; + emapVerArr[ciId].dataVerCheckCIAndTMC = dsuStaticHeadStru.pCIStruStru[i].dwVersionOfCIToTMC; - for (jj = 0U; jj < CI_TRAINSMIT_AXIS_MAX_NUM; jj++) - { - emapVerArr[ciId].ciTransmitAxisId[jj] = dsuStaticHeadStru.pCIStruStru[i].dwCIToAxleID[jj]; - emapVerArr[ciId].ciTransmitAxisCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwCIToAxleShareCheckData[jj]; - } + /*CIУϢ*/ + emapVerArr[ciId].chAdjoinCICount = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCICount; + for (jj = 0U; jj < CI_TRAINSMIT_CI_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinCIId[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCIId[jj]; + emapVerArr[ciId].dwAdjoinCIShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinCIShareCheckData[jj]; + } - /*OCϵͳУϢ*/ - emapVerArr[ciId].chAdjoinOcCount = dsuStaticHeadStru.pCIStruStru[i].chAdjoinOcCount; - for (jj = 0U; jj < CI_TRAINSMIT_OC_MAX_NUM; jj++) - { - emapVerArr[ciId].wAdjoinOcId[jj] = dsuStaticHeadStru.pCIStruStru[i].wAdjoinOcId[jj]; - emapVerArr[ciId].dwAdjoinOcShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinOcShareCheckData[jj]; + /*RCУϢ*/ + emapVerArr[ciId].chAdjoinRCCount = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinRCCount; + for (jj = 0U; jj < CI_TRAINSMIT_CI_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinRCId[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinRCId[jj]; + emapVerArr[ciId].dwAdjoinRCShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinRCShareCheckData[jj]; + } + + /*뱾RC/CIУϢ*/ + emapVerArr[ciId].dwLocalShareCheckData = dsuStaticHeadStru.pCIStruStru[i].dwLocalShareCheckData; + + for (jj = 0U; jj < CI_TRAINSMIT_AXIS_MAX_NUM; jj++) + { + emapVerArr[ciId].ciTransmitAxisId[jj] = dsuStaticHeadStru.pCIStruStru[i].dwCIToAxleID[jj]; + emapVerArr[ciId].ciTransmitAxisCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwCIToAxleShareCheckData[jj]; + } + + /*OCϵͳУϢ*/ + emapVerArr[ciId].chAdjoinOcCount = dsuStaticHeadStru.pCIStruStru[i].chAdjoinOcCount; + for (jj = 0U; jj < CI_TRAINSMIT_OC_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinOcId[jj] = dsuStaticHeadStru.pCIStruStru[i].wAdjoinOcId[jj]; + emapVerArr[ciId].dwAdjoinOcShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinOcShareCheckData[jj]; + } } + else + { + ; /*RCģʽУϢRCʼ*/ + } + } + + if (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI) + { + wRCStruSum = dsuDataLenStru.wRCLen; + for (i = 0u; i < wRCStruSum; i++) + { + /*RCδRCʱCIʼ*/ + ciId = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wID & 0x00FF); + emapVerArr[ciId].devId = ciId; + emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wType); + if (CI_TYPE_TCC == dsuStaticHeadStru.pRCStruStru[i].wType) + { + emapVerArr[ciId].ciType = CI_TYPE_CLD; + } + emapVerArr[ciId].dataVerCheckCIAndVOBC = dsuStaticHeadStru.pRCStruStru[i].dwVersionOfCIToVOBC; + emapVerArr[ciId].dataVerCheckCIAndZC = dsuStaticHeadStru.pRCStruStru[i].dwVersionOfCIToZC; + emapVerArr[ciId].dataVerCheckCIAndATS = dsuStaticHeadStru.pRCStruStru[i].dwVersionOfCIToATS; + emapVerArr[ciId].dataVerCheckCIAndTMC = dsuStaticHeadStru.pRCStruStru[i].dwVersionOfCIToTMC; + + /*CIУϢ*/ + emapVerArr[ciId].chAdjoinCICount = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinCICount; + for (jj = 0U; jj < CI_TRAINSMIT_CI_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinCIId[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinCIId[jj]; + emapVerArr[ciId].dwAdjoinCIShareCheckData[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinCIShareCheckData[jj]; + } + + /*RCУϢ*/ + emapVerArr[ciId].chAdjoinRCCount = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinRCCount; + for (jj = 0U; jj < CI_TRAINSMIT_CI_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinRCId[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinRCId[jj]; + emapVerArr[ciId].dwAdjoinRCShareCheckData[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinRCShareCheckData[jj]; + } + + /*뱾RC/CIУϢ*/ + emapVerArr[ciId].dwLocalShareCheckData = dsuStaticHeadStru.pRCStruStru[i].dwLocalShareCheckData; + + /*ϵͳУϢ*/ + for (jj = 0U; jj < CI_TRAINSMIT_AXIS_MAX_NUM; jj++) + { + emapVerArr[ciId].ciTransmitAxisId[jj] = dsuStaticHeadStru.pRCStruStru[i].dwCIToAxleID[jj]; + emapVerArr[ciId].ciTransmitAxisCheckData[jj] = dsuStaticHeadStru.pRCStruStru[i].dwCIToAxleShareCheckData[jj]; + } + + /*OCϵͳУϢ*/ + emapVerArr[ciId].chAdjoinOcCount = dsuStaticHeadStru.pRCStruStru[i].chAdjoinOcCount; + for (jj = 0U; jj < CI_TRAINSMIT_OC_MAX_NUM; jj++) + { + emapVerArr[ciId].wAdjoinOcId[jj] = dsuStaticHeadStru.pRCStruStru[i].wAdjoinOcId[jj]; + emapVerArr[ciId].dwAdjoinOcShareCheckData[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinOcShareCheckData[jj]; + } + } + } + else + { + ; /*ѳʼ*/ } } } @@ -3569,7 +3642,7 @@ UINT8 dquDevName2HlhtId(const UINT16 LocalDevName, const UINT16 logId, UINT32 *p UINT8 retVal = CI_ERROR; /*ֵ*/ UINT8 retOfQueryDevId = 0u; /*ѯֵ*/ UINT32 hlhtId = 0u; /*ͨID*/ - UINT32 szHlhtIdBuf[2] = {0u, 0u}; /*VOBCITEĻͨID*/ + UINT32 szHlhtIdBuf[2] = {0u, 0u}; UINT32 dwIdIndex = 0u; /**/ UINT8 devType = 0u; /*豸*/ UINT8 devId = 0u; /*豸ID*/ @@ -3590,8 +3663,19 @@ UINT8 dquDevName2HlhtId(const UINT16 LocalDevName, const UINT16 logId, UINT32 *p case DEVTYPE_CI: retOfQueryDevId = dquQueryOutDevId(QFUN_IDMAP_CI_ID, devId, &hlhtId); break; + case DEVTYPE_RC: + retOfQueryDevId = dquQueryOutDevId(QFUN_IDMAP_RC_ID, devId, &hlhtId); + break; case DEVTYPE_VOBC: - retOfQueryDevId = dquQueryOutVobcDevId(devId, szHlhtIdBuf); + case DEVTYPE_IVOC: + if (DEVTYPE_VOBC == devType) + { + retOfQueryDevId = dquQueryOutVobcDevId(devId, szHlhtIdBuf); + } + else + { + retOfQueryDevId = dquQueryOutIvocDevId(devId, szHlhtIdBuf); + } switch(logId) { @@ -3612,7 +3696,21 @@ UINT8 dquDevName2HlhtId(const UINT16 LocalDevName, const UINT16 logId, UINT32 *p retOfQueryDevId = dquQueryOutDevId(IDMAP_DSU_ID, devId, &hlhtId); break; case DEVTYPE_AXLE: - retOfQueryDevId = dquQueryOutDevId(IDMAP_AXLE_ID, devId, &hlhtId); + retOfQueryDevId = dquQueryOutAxleDevId(devId, szHlhtIdBuf); + switch (logId) + { + case 1U: + dwIdIndex = 0U; + break; + case 2U: + dwIdIndex = 1U; + break; + default: + dwIdIndex = 0U; + break; + } + hlhtId = szHlhtIdBuf[dwIdIndex]; + break; break; case DEVTYPE_ITE: retOfQueryDevId = dquQueryOutIteDevId((UINT16)devId, szHlhtIdBuf); @@ -3671,21 +3769,14 @@ UINT8 dquHlhtId2VobcName(IN UINT32 EtcsId, OUT UINT16 *pDevName, OUT UINT16 *pEn UINT8 ret = 0U; UINT8 endId = 0U; UINT16 index = 0U; - RSSP2_DEVICE_TYPE type = DEVICE_TYPE_UNKNOWN; + UINT8 type = 0U; if ((NULL != pDevName) && (NULL != pEndId)) { - *pDevName = 0; - *pEndId = 0; - ret = 1; - } - else - { - ret = 0; - } + *pDevName = 0U; + *pEndId = 0U; + ret = 1U; - if (1U == ret) - { endId = GET_VOBC_END_ID(EtcsId); switch (endId) { @@ -3702,40 +3793,63 @@ UINT8 dquHlhtId2VobcName(IN UINT32 EtcsId, OUT UINT16 *pDevName, OUT UINT16 *pEn *pEndId = VOBC_ENDID_REDUN; break; default: - ret = 0; + ret = 0U; break; } - } - (void)GetEtcsTypeFromEtcsId(EtcsId, &type); - if ((DEVICE_TYPE_ATP != type) && (DEVICE_TYPE_AOM != type)) - { - ret = 0; - } - - if (1U == ret) - { - if (DEVICE_TYPE_ATP == type) + if (1U == ret) { - ret = dquQueryVobcDevLgId2Index(EtcsId, ETCSID_MASK, &index, pEndId); + type = (UINT8)((EtcsId / 256U / 256U / 256U) & 0x1FU); /*ͨIDתΪ豸*/ + if ((HLHT_DEVTYPE_VOBC == type) || (HLHT_DEVTYPE_IVOC == type) || (HLHT_DEVTYPE_AOM == type)) + { + if (HLHT_DEVTYPE_VOBC == type) + { + ret = dquQueryVobcDevLgId2Index(EtcsId, ETCSID_MASK, &index, pEndId); + } + else if (HLHT_DEVTYPE_IVOC == type) + { + ret = dquQueryIvocDevLgId2Index(EtcsId, ETCSID_MASK, &index, pEndId); + } + else + { + ret = dquQueryAOMDevBits2Index(EtcsId, ETCSID_MASK, &index); + } + + if (1U == ret) + { + if (HLHT_DEVTYPE_VOBC == type) + { + *pDevName = DEVTYPE_VOBC * 256U + index; + } + else if (HLHT_DEVTYPE_IVOC == type) + { + *pDevName = DEVTYPE_IVOC * 256U + index; + } + else + { + *pDevName = DEVTYPE_AOM * 256U + index; + } + } + else + { + ret = 0U; + } + } + else + { + ret = 0U; + } } else { - ret = dquQueryAOMDevBits2Index(EtcsId, ETCSID_MASK, &index); + ret = 0U; } } + else + { + ret = 0U; + } - if (1U == ret) - { - if (DEVICE_TYPE_ATP == type) - { - *pDevName = DEVTYPE_VOBC * 256U + index; - } - else - { - *pDevName = DEVTYPE_AOM * 256U + index; - } - } return ret; } @@ -4054,14 +4168,13 @@ UINT8 dquQueryVobcDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16 *pInDevInde for (index = 0U; index < DataCount; index++) { pwVobcDevId = dquGetVobcDevIdArray(index); - if (((devId&bitMask) == (pwVobcDevId[0] & bitMask)) - ) + if ((devId & bitMask) == (pwVobcDevId[0] & bitMask)) { *pInDevIndex = dquGetVobcIndex(index); *wLogicId = 1U; tempCount++; } - else if ((devId&bitMask) == (pwVobcDevId[1] & bitMask)) + else if ((devId & bitMask) == (pwVobcDevId[1] & bitMask)) { *pInDevIndex = dquGetVobcIndex(index); *wLogicId = 2U; @@ -4089,6 +4202,64 @@ UINT8 dquQueryVobcDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16 *pInDevInde return bRetVal; } +/************************************************** +* ܣȡIvoc豸ӦλѯIvoc +* ˵UINT32 devId ͨ +* UINT32 bitMask λ +* UINT16* pInDevIndex λãΣ +* UINT16* wLogicId ߼IDΣ +* ֵ0-ʧ +* 1-ɹ +* Created By LQ 2025.08.28 +***************************************************/ +UINT8 dquQueryIvocDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16* pInDevIndex, UINT16* wLogicId) +{ + UINT8 bRetVal = 0U; + UINT16 index = 0U; + UINT16 DataCount = 0U; + UINT32* pwVobcDevId = NULL; + UINT16 tempCount = 0U;/*ҵ豸ֵҵĸӦΪ1ʧ*/ + + if ((NULL != pInDevIndex) && (NULL != wLogicId)) + { + DataCount = dquGetIvocNumLen(); + for (index = 0U; index < DataCount; index++) + { + pwVobcDevId = dquGetIvocDevIdArray(index); + if ((devId & bitMask) == (pwVobcDevId[0] & bitMask)) + { + *pInDevIndex = dquGetIvocIndex(index); + *wLogicId = 1U; + tempCount++; + } + else if ((devId & bitMask) == (pwVobcDevId[1] & bitMask)) + { + *pInDevIndex = dquGetIvocIndex(index); + *wLogicId = 2U; + tempCount++; + } + else + { + /*޲*/ + } + } + if (1U == tempCount) + { + bRetVal = 1U; + } + else + { + ; + } + } + else + { + ; + } + + return bRetVal; +} + /* * CRC32£ע⣺CRCǴݵһֽڵBITʼ * õĶʽ0x4c10db7LʼֵΪ0x00000000,δ񣬽ϵΪ0x00000000 @@ -4279,10 +4450,18 @@ INT16 ReadEaConfigData(EaConfigStru* pEaConfigAddr) *********************************************/ UINT8 GetWLScreenTypeById(const UINT8 ciId) { - UINT8 cRetVal = TIOC_WLSCTEEN_VALID; - - cRetVal = dsuStaticHeadStru.pCIStruStru[dsuCIIndex[ciId]].cWLScreenType; - + UINT8 cRetVal = TIOC_WLSCTEEN_UNVALID; + UINT16 wRCStruSum = 0U; + UINT16 i = 0U; + wRCStruSum = dsuDataLenStru.wRCLen; + for (i = 0u; i < wRCStruSum; i++) + { + if ((UINT16)ciId == (0x00FF &dsuStaticHeadStru.pRCStruStru[i].wID)) + { + cRetVal = dsuStaticHeadStru.pRCStruStru[i].cWLScreenType; + break; + } + } return cRetVal; } @@ -4560,3 +4739,121 @@ 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; +} + +/* +* LINK +* ˵void +* ֵ CI_SUCCESS,ɹ +* CI_ERROR,ʧ +*/ +UINT16 QueryTrackBelongLink(void) +{ + UINT16 i = 0u; + UINT16 j = 0u; + UINT16 wLinkId = 0u; + UINT16 phySec = 0u; + UINT8 chSysType = 0U; + UINT32 trackSecId = 0U; + UINT16 sum = 0u; + UINT8 retVal = CI_ERROR; + + retVal = CI_SUCCESS; + for (i = 0u; i < dsuIdmapStru.dsuIdmapLenStru->wTrackSecNumLen; i++) + { + for (j = 0u; j < dsuIdmapStru.dsuStaticIdmapStru->pTrackSecNumStru[i].wTrackNum; j++) + { + trackSecId = dsuIdmapStru.dsuStaticIdmapStru->pTrackSecNumStru[i].dwTrackSecId[j]; + if (0u!= trackSecId) + { + if (TRCAK_SECTION_SUM_MAX > sum) + { + gTrackSecConfigDataStru[sum].trackSecId = trackSecId; + gTrackSecConfigDataStru[sum].linkId = dsuIdmapStru.dsuStaticIdmapStru->pTrackSecNumStru[i].wLinkId; + sum++; + } + else + { + retVal = CI_ERROR; + break; + } + } + } + } + + gTrackSectionCurSum = sum; + + + return retVal; +} + diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h index 2a5813f..8ef7beb 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.h @@ -434,6 +434,18 @@ UINT8 dquHlhtId2VobcName(IN UINT32 EtcsId, OUT UINT16 *pDevName, OUT UINT16 *pEn ***************************************************/ UINT8 dquQueryVobcDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16 *pInDevIndex, UINT16 *wLogicId); +/************************************************** +* ܣȡIvoc豸ӦλѯIvoc +* ˵UINT32 devId ͨ +* UINT32 bitMask λ +* UINT16* pInDevIndex λãΣ +* UINT16* wLogicId ߼IDΣ +* ֵ0-ʧ +* 1-ɹ +* Created By LQ 2025.08.28 +***************************************************/ +UINT8 dquQueryIvocDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16* pInDevIndex, UINT16* wLogicId); + /* * CRC32£ע⣺CRCǴݵһֽڵBITʼ * õĶʽ0x4c10db7LʼֵΪ0x00000000,δ񣬽ϵΪ0x00000000 @@ -497,6 +509,22 @@ 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); +/* +* LINK +* ˵void +* ֵ CI_SUCCESS,ɹ +* CI_ERROR,ʧ +*/ +UINT16 QueryTrackBelongLink(void); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c index 967b32c..52de136 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.c @@ -52,7 +52,7 @@ UINT8 RelayConfigDataStruFromChar(UINT8 * pDataAddr,RelayConfigDataStruct* pRela { /*OC ID (ֶ)*/ OcIdBuff = dquCiShortFromChar(pData); - pRelayCfgDtStr->BelongCiId = (UINT8)(GetCiIdByOcId(OcIdBuff)); + pRelayCfgDtStr->BelongCiId = GetCiIdByOcId(OcIdBuff); pRelayCfgDtStr->BelongOcId = OcIdBuff; pRelayCfgDtStr->BelongDrvOcId = pRelayCfgDtStr->BelongOcId; pRelayCfgDtStr->BelongVirCIid = GetOCBelongVirCIid((UINT8)OcIdBuff); @@ -223,6 +223,8 @@ UINT8 R_ScreenStructFromChar(UINT8 * pDataAddr,Relay_ScreenStruct* pScrnStr, UIN } pScrnStr->wRelayCloseDoorId = dquCiShortFromChar(pData); /*ż̵ID */ pData += 2u; + pScrnStr->wRelayThreeEditGroupOpenDoorId = dquCiShortFromChar(pData); /*3鿪ż̵ID */ + pData += 2u; pScrnStr->wRelayFourEditGroupOpenDoorId = dquCiShortFromChar(pData); /*4鿪ż̵ID */ pData += 2u; pScrnStr->wRelaySixEditGroupOpenDoorId = dquCiShortFromChar(pData); /*6鿪ż̵ID */ @@ -233,6 +235,126 @@ UINT8 R_ScreenStructFromChar(UINT8 * pDataAddr,Relay_ScreenStruct* pScrnStr, UIN pData += 2u; pScrnStr->doorReopenRelayId = dquCiShortFromChar(pData); /*վ̨ٴοż̵ID*/ pData += 2u; + pScrnStr->doorReopenRelayId2 = dquCiShortFromChar(pData); /*վ̨ٴοż̵ID2*/ + pData += 2u; + + pScrnStr->departureConfirmRelayId = dquCiShortFromChar(pData); /*ȷϼ̵ID*/ + pData += 2u; + pScrnStr->detectStartRelayId = dquCiShortFromChar(pData); /*̵̽ID*/ + pData += 2u; + pScrnStr->detectStopRelayId = dquCiShortFromChar(pData); /*̵ֹͣ̽ID*/ + pData += 2u; + pScrnStr->obstacleRelayId = dquCiShortFromChar(pData); /*ϰ̵ID*/ + pData += 2u; + pScrnStr->gapDetMuLockRelayId = dquCiShortFromChar(pData); /*϶̽⻥̵ID*/ + pData += 2u; + pScrnStr->closeStateRelayId = dquCiShortFromChar(pData); /*״̵̬ID*/ + pData += 2u; + + if (40U < rowLen) + { + pScrnStr->wClearPasseSteadyLightRelayId = dquCiShortFromChar(pData); /*ȷϰťָʾȵƼ̵ID*/ + pData += 2u; + pScrnStr->wClearPasseFlashLightRelayId = dquCiShortFromChar(pData); /*ȷϰťָʾƼ̵ID*/ + pData += 2u; + pScrnStr->wClearPassengerButtonRelayId = dquCiShortFromChar(pData); /*ȷϰť̵ID*/ + pData += 2u; + } + + if (46U < rowLen) + { + pScrnStr->wCleFarePCBButtonRelayId = dquCiShortFromChar(pData); /*ȷPCBť̵*/ + pData += 2u; + pScrnStr->wCleFarePDBFlaLigRelayId = dquCiShortFromChar(pData); /*ȷPDBťָʾƼ̵*/ + pData += 2u; + } + + if (50U < rowLen) + { + pScrnStr->wPobBsdRelayId = dquCiShortFromChar(pData); /*վ̨ٿŰťָʾƼ̵*/ + pData += 2u; + pScrnStr->wPcbBsdRelayId = dquCiShortFromChar(pData); /*վ̨ٹŰťָʾƼ̵*/ + pData += 2u; + } + + if (54U < rowLen) + { + pScrnStr->wVideoQkLight1RelayId = dquCiShortFromChar(pData); /*ͰťƵָʾ1̵̣*/ + pData += 2U; + pScrnStr->wVideoQkLight2RelayId = dquCiShortFromChar(pData); /*ͰťƵָʾ2죩̵*/ + pData += 2U; + } + + if (58U < rowLen) + { + pScrnStr->chControlType = *pData; /*ſ*/ + pData += 1U; + } + else + {/*ûһ*/ + pScrnStr->chControlType = PSD_CONTROL_TYPE_RCI; /*RCI*/ + } + + rtnvalue = 1u; + } + + return rtnvalue; +} +/********************************************* +*ܣݵż̵ṹ +*˵pDataAddrݵַ pScrnStrż̵ݽṹָ,UINT16 rowLen һݵij +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 R_ScreenStructFromCharT(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen) +{ + UINT8* pData = pDataAddr; + UINT8 rtnvalue = 0u; + UINT8 localCiPattern = 0u; /*CIģʽ*/ + + if ((NULL == pDataAddr) || (NULL == pScrnStr)) + { + rtnvalue = 0u; + } + else + { + localCiPattern = GetLocalCiPattern(); + pScrnStr->wScreenId = dquCiShortFromChar(pData); /*ID (ֶ)*/ + pData += 2u; + if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) + { + pScrnStr->wOcId = dquCiShortFromChar(pData); /*OC ID*/ + pData += 2u; + } + pScrnStr->wRelayRelatedId = dquCiShortFromChar(pData); /*̵ID */ + pData += 2u; + + if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) + { + pScrnStr->wRelayRelatedId2 = dquCiShortFromChar(pData); /*̵ID2 */ + pData += 2; + } + pScrnStr->wRelayDoorClosedId = dquCiShortFromChar(pData); /*Źؼ̵ID */ + pData += 2u; + + if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) + { + pScrnStr->wRelayDoorClosedId2 = dquCiShortFromChar(pData); /*Źؼ̵ID2 */ + pData += 2; + } + pScrnStr->wRelayCloseDoorId = dquCiShortFromChar(pData); /*ż̵ID */ + pData += 2u; + + pScrnStr->wRelayFourEditGroupOpenDoorId = dquCiShortFromChar(pData); /*4鿪ż̵ID */ + pData += 2u; + pScrnStr->wRelaySixEditGroupOpenDoorId = dquCiShortFromChar(pData); /*6鿪ż̵ID */ + pData += 2u; + pScrnStr->wRelayEightEditGroupOpenDoorId = dquCiShortFromChar(pData); /*8鿪ż̵ID */ + pData += 2u; + pScrnStr->wRelayDoorButtonId = dquCiShortFromChar(pData); /*PSDť̵*/ + pData += 2u; + pScrnStr->doorReopenRelayId = dquCiShortFromChar(pData); /*վ̨ٴοż̵ID*/ + pData += 2u; + pScrnStr->departureConfirmRelayId = dquCiShortFromChar(pData); /*ȷϼ̵ID*/ pData += 2u; pScrnStr->detectStartRelayId = dquCiShortFromChar(pData); /*̵̽ID*/ @@ -280,6 +402,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 +761,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; @@ -679,7 +797,7 @@ UINT8 R_BaoJingDengStruFromChar(UINT8 * pDataAddr,Relay_BaoJingDengStruct* pBjdS if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern) { OCid = pBjdStr->wBelongCiId;/*ӦȫȡOCid*/ - pBjdStr->wBelongCiId = GetCiIdByOcId(pBjdStr->wBelongCiId);/*ҵ0CidӦid*/ + pBjdStr->wBelongCiId = (UINT16)GetCiIdByOcId(pBjdStr->wBelongCiId);/*ҵ0CidӦid*/ if(FUNC_SWITCH_ON == includeVirFlag) { pBjdStr->wBelongVirCIid = GetOCBelongVirCIid((UINT8)OCid);/*ҵ0CidӦid*/ @@ -832,6 +950,18 @@ UINT8 R_SpksDataFromChar(UINT8 * pDataAddr,RelaySpksStruct* pSpksStr, UINT16 rea pSpksStr->outsideRelayId = dquCiShortFromChar(pData); /*SPKSָʾƼ̵*/ pData += 2u; + if (14U < realRowLen) + { + pSpksStr->buzzRelayId = dquCiShortFromChar(pData); /*̵*/ + pData += 2u; + + pSpksStr->cutBuzzRelayId = dquCiShortFromChar(pData); /*г̵*/ + pData += 2u; + } + else + { + ;/*δõ*/ + } } else if (CI_PATTERN_TRADITIONAL == localCiPattern) @@ -969,23 +1099,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; @@ -1092,7 +1236,7 @@ UINT8 R_OCIndicStruFromChar(UINT8* pDataAddr, OCStationIndicConfigDataStru* pInd pData += 2; /*ID*/ ocid = dquCiShortFromChar(pData); /*ID*/ pData += 2; - belongCiId = (UINT8)GetCiIdByOcId(ocid); + belongCiId = GetCiIdByOcId(ocid); if (localCiId == belongCiId) { diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h index f630921..cd55736 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruFrmChar.h @@ -36,6 +36,12 @@ UINT8 R_EmegencyStopStructFromChar(UINT8 * pDataAddr,Relay_EmgcyStpStruct* pEmgc *ֵ0ʧܣ1ɹ *********************************************/ UINT8 R_ScreenStructFromChar(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen); +/********************************************* +*ܣݵż̵ṹ +*˵pDataAddrݵַ pScrnStrż̵ݽṹָ,UINT16 rowLen һݵij +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 R_ScreenStructFromCharT(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen); /********************************************* *ܣݵμ̵ṹ diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c index 1def5dd..26c7c5f 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIJDQStruInit.c @@ -348,95 +348,108 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName) UINT32 DataSize = 0U; /*ݴСֽ*/ UINT16 j = 0U; UINT16 wRealRowCount = 0U; - UINT8 rtnValue = 0u; - UINT32 excelId = 0u; /*excel id*/ - UINT32 sheetId = 0u; /*sheet id*/ - UINT32 rowLen = 0u; /*г*/ - UINT8 localCiPattern = 0u; /*CIģʽ*/ - - /*Ѿʼˣǵִй*/ + UINT8 rtnValue = 0U; + UINT32 excelId = 0U; /*excel id*/ + UINT32 sheetId = 0U; /*sheet id*/ + UINT32 rowLen = 0U; /*г*/ + UINT8 localCiPattern = 0U; /*CIģʽ*/ + UINT8 chOcPattern = 0U; + /*Ѿʼˣǵִй*/ if (RelayData.pRelayScreenStr != NULL) { - rtnValue = 1u; - return rtnValue; - } - localCiPattern = GetLocalCiPattern(); - if (CI_PATTERN_TRADITIONAL == localCiPattern) - { - excelId = CI_DATA_TYPE; - sheetId = RELAY_SCREEN_ID; + rtnValue = 1U; /*ѳʼֱӷ1*/ } else { - excelId = OC_DATA_TYPE; - sheetId = OC_RELAY_SCREEN_ID; - } - /*ȡ Ĭг */ - funcRtn = dquGetConfigDataNew(CIDataName, excelId, sheetId, &pDataAddr, &DataSize, &wRealRowCount); - if (funcRtn == 0u) - { - /*ʧ*/ - rtnValue = 0u; - } - else - { - rtnValue = 1u; - } - - if (1U == rtnValue) - {/*ø*/ - if (DataSize%wRealRowCount != 0u) + localCiPattern = GetLocalCiPattern(); + if (CI_PATTERN_TRADITIONAL == localCiPattern) { - debug_infor_printf((const)"\nCI_RELAY_DATA,SCREEN_RELAY len %d not equal to fs", rowLen); - DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (excelId << 8) + sheetId, PRINT_ONCE); - rtnValue = 0u; + excelId = CI_DATA_TYPE; + sheetId = RELAY_SCREEN_ID; } else { - ; /**/ + excelId = OC_DATA_TYPE; + sheetId = OC_RELAY_SCREEN_ID; } - } - - if (1U == rtnValue) - { - RelayDataLen.RelayScreenStrLen = wRealRowCount; - rowLen = DataSize / wRealRowCount; - if (DataSize < rowLen) + /*ȡ Ĭг */ + funcRtn = dquGetConfigDataNew(CIDataName, excelId, sheetId, &pDataAddr, &DataSize, &wRealRowCount); + if (funcRtn == 0U) { + /*ʧ*/ rtnValue = 0U; - } else { - /*̬ռ*/ - RelayData.pRelayScreenStr = (Relay_ScreenStruct *)MyNew((UINT32)(sizeof(Relay_ScreenStruct) * RelayDataLen.RelayScreenStrLen)); - /*̬ռʧ*/ - if (NULL == RelayData.pRelayScreenStr) + rtnValue = 1U; + if ((0U != DataSize) && (0U != wRealRowCount)) { - RelayDataLen.RelayScreenStrLen = 0u; - rtnValue = 0u; + if (DataSize % wRealRowCount != 0U) + { + debug_infor_printf((const)"\nCI_RELAY_DATA,SCREEN_RELAY len %d not equal to fs", rowLen); + DebugPrintAppError(ERROR_fs_columns_len_not_equal_to_ci_software, CI_DEVICE_TYPE_FS_TABLE, (excelId << 8) + sheetId, PRINT_ONCE); + rtnValue = 0u; + } + else + { + ; /**/ + } + if (1U == rtnValue) + { + RelayDataLen.RelayScreenStrLen = wRealRowCount; + rowLen = DataSize / wRealRowCount; + if (DataSize < rowLen) + { + rtnValue = 0U; + + } + else + { + /*̬ռ*/ + RelayData.pRelayScreenStr = (Relay_ScreenStruct*)MyNew((UINT32)(sizeof(Relay_ScreenStruct) * RelayDataLen.RelayScreenStrLen)); + /*̬ռʧ*/ + if (NULL == RelayData.pRelayScreenStr) + { + RelayDataLen.RelayScreenStrLen = 0U; + rtnValue = 0U; + } + else + { + /*ڴΪЧ*/ + (void)memset(RelayData.pRelayScreenStr, 0x00, sizeof(Relay_ScreenStruct) * RelayDataLen.RelayScreenStrLen); + /*ݵ Ĭг ṹ */ + for (j = 0u; j < RelayDataLen.RelayScreenStrLen; j++) + { + pScreenStr = RelayData.pRelayScreenStr + j; + + /*ݽṹ*/ + chOcPattern = GetLocalOcPattern(); + if(DATA_TYPE_NEW == chOcPattern) + { + rtnValue &= R_ScreenStructFromChar(pDataAddr, pScreenStr, (UINT16)rowLen); + } + else + { + rtnValue &= R_ScreenStructFromCharT(pDataAddr, pScreenStr, (UINT16)rowLen); + } + + pDataAddr += rowLen; + + } + } + } + } + else + { + ; /**/ + } } else { - /*ڴΪЧ*/ - (void)memset(RelayData.pRelayScreenStr, 0x00, sizeof(Relay_ScreenStruct) * RelayDataLen.RelayScreenStrLen); - /*ݵ Ĭг ṹ */ - for (j = 0u; jDataSize ) - {/*һ*/ - 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..1d2db27 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h @@ -67,7 +67,7 @@ #define OTHER_CI_DATA_LEN ((UINT8)42) #define ROUTE_DATA_ID ((UINT32)1) /*CI -- ·*/ -#define ROUTE_DATA_LEN ((UINT32)53) /*51:ӲΪӽʱǷʱ +2 CBTC迪*/ +#define ROUTE_DATA_LEN ((UINT32)55) /*51:ӲΪӽʱǷʱ +2 CBTC迪 +2*/ #define OVERLAP_LOCK_COND_DATA_ID ((UINT8)16) /*CI -- */ #define OVERLAP_LOCK_COND_DATA_LEN ((UINT8)44)/*һУIDUDE2*/ @@ -96,6 +96,10 @@ #define TRANSROUTE_ZHEFANSIG_ID ((UINT8)27) /*CI -- ת·۷źŻid*/ +#define SideProtecGroup_ID ((UINT8)28) /*CI -- ID*/ + +#define SideProtec_ID ((UINT8)29) /*CI -- ID*/ + #define CONTACT_DATA_LEN ((UINT8)12U) /*ʹ*/ @@ -312,6 +316,8 @@ typedef struct S_RouteStruct UINT16 wBLCKOtherCIID; /*ʽID*/ UINT16 wFloodGateIdBuf[ROUTE_MAX_FLOOD_GATE_NUM]; /**/ UINT8 wNeedDelayUnlock; /*·˽⡢ȡҪʱ*/ + UINT16 wSidePretecGroupID; /*ID*/ + } LS_RouteStruct; /*ȫԶ۷·ݽṹ*/ typedef struct S_AllAutoRtnRouteStruct @@ -331,6 +337,9 @@ 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*/ + UINT16 wSidePretectGroupId; /*βID*/ } LS_OveralpLockCondStru; /*·ڶ࿪ݽṹ*/ diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c index beab3d9..e9f4fb2 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c @@ -12,6 +12,8 @@ ************************************************************************/ #include "dquCILSStruFrmChar.h" #include "dquCIReadCommonChar.h" +#include "dquCIInit.h" + /********************************************* *ܣݵ·ת *˵pDataAddrݵַ pLongRouteStr·ݽṹָ @@ -637,6 +639,11 @@ UINT8 LS_RouteStruFromChar(UINT8 * pDataAddr,LS_RouteStruct* pRouteStr) pRouteStr->wNeedDelayUnlock = *pData; pData++; + pRouteStr->wSidePretecGroupID = dquCiShortFromChar(pData); + pData += 2u; + + + rtnvalue = 1u; return rtnvalue; } @@ -733,6 +740,18 @@ 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; + + /*βID*/ + pOverlapLockCondStru->wSidePretectGroupId = dquCiShortFromChar(pData); + pData += LS_DATA_DUAL_BYTE_ELEM_LEN; + rtnvalue = 1u; } return rtnvalue; @@ -1057,4 +1076,171 @@ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRo rtnvalue = 1u; } return rtnvalue; +} + +/********************************************* +* ܣжȡ +* ˵pDataAddrݵַ +* pSideProtecGroupStru +* ֵ0ʧܣ1ɹ +* fan +*********************************************/ +UINT8 LS_read_SideProtecGroupData(UINT8* pDataAddr, SideProtecGroupStru* pSideProtecGroupStru) +{ + UINT8* pData = pDataAddr; + UINT16 i = 0u; + UINT8 rtnvalue = 0u; + UINT8 j = 0u; + UINT8 flag = 0u; + + if ((NULL == pDataAddr) || (NULL == pSideProtecGroupStru)) + { + rtnvalue = 0u; + } + else + { + rtnvalue = 1u; + + pSideProtecGroupStru->GroupID = dquCiShortFromChar(pData); + pData += 2u; + + for (j = 0u; j < SIDE_PROTECT_NUM_MAX; j++) + { + pSideProtecGroupStru->RouteSideProtecBuf[j].SideProtecID = dquCiShortFromChar(pData); + pData += 2u; + + if ((0u < pSideProtecGroupStru->RouteSideProtecBuf[j].SideProtecID) && (UINT16_MAX > pSideProtecGroupStru->RouteSideProtecBuf[j].SideProtecID)) + { + if (1u == flag) + {/*ЧֵٴγЧֵʧ*/ + rtnvalue = 0u; + break; + } + else + { + pSideProtecGroupStru->RouteSideProtecNum++; + } + } + else + { + flag = 1u; + } + } + + } + return rtnvalue; +} + +/********************************************* +* ܣжȡ +* ˵pDataAddrݵַ +* pSideProtecStru +* ֵ0ʧܣ1ɹ +* fan +*********************************************/ +UINT8 LS_read_SideProtecData(UINT8* pDataAddr, SideProtecStru* pSideProtecStru) +{ + UINT8* pData = pDataAddr; + UINT8 rtnvalue = 0u; + UINT8 j = 0u; + UINT8 flag = 0u; + + if ((NULL == pDataAddr) || (NULL == pSideProtecStru)) + { + rtnvalue = 0u; + } + else + { + rtnvalue = 1u; + + pSideProtecStru->SideProtecID = dquCiShortFromChar(pData); + pData += 2u; + + pSideProtecStru->KeysSwitchID = dquCiShortFromChar(pData); + pData += 2u; + + pSideProtecStru->KeysSwicthPos =*pData; + pData ++; + + pSideProtecStru->SideProtecSignalID = dquCiShortFromChar(pData); + pData += 2u; + + for (j = 0u; j < SIDE_PROTECT_SWITCH_NUM_MAX; j++) + { + pSideProtecStru->SideProtecSwitchBuf[j].SideProtecSwitchID = dquCiShortFromChar(pData); + pData += 2u; + + pSideProtecStru->SideProtecSwitchBuf[j].SideProtecSwitchPos = *pData; + pData++; + + if ((0u < pSideProtecStru->SideProtecSwitchBuf[j].SideProtecSwitchID) && (UINT16_MAX > pSideProtecStru->SideProtecSwitchBuf[j].SideProtecSwitchID)) + { + if (1u == flag) + {/*ЧֵٴγЧֵʧ*/ + rtnvalue = 0u; + break; + } + else + { + pSideProtecStru->SideProtecSwitchNum++; + } + } + else + { + flag = 1u; + } + } + if (0u == rtnvalue) + { + ;/*ѾʧˣͲҪ*/ + } + else + { + flag = 0u; + for (j = 0u; j < SIDE_PROTECT_PHYSEC_NUM_MAX; j++) + { + pSideProtecStru->SideProtecPhyBuf[j].SideProtecPhySecID = dquCiShortFromChar(pData); + pData += 2u; + + pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect = *pData; + pData++; + + if ((0u < pSideProtecStru->SideProtecPhyBuf[j].SideProtecPhySecID) && (UINT16_MAX > pSideProtecStru->SideProtecPhyBuf[j].SideProtecPhySecID)) + { + if ((CI_SYSTEM_DIRECTION_DOWN == pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect) + || (CI_SYSTEM_DIRECTION_UP == pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect)) + { + if (pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect == dquCICfgDtStr.SystemParaStrNew.LinkLogicDirUpAndDown) + { + pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect = CI_SYSTEM_DIRECTION_DOWN; + } + else + { + pSideProtecStru->SideProtecPhyBuf[j].SideProtecDirect = CI_SYSTEM_DIRECTION_UP; + } + } + else + { + flag = 1u; + } + + + if (1u == flag) + {/*ЧֵٴγЧֵʧ*/ + rtnvalue = 0u; + break; + } + else + { + pSideProtecStru->SideProtecPhyNum++; + } + } + else + { + flag = 1u; + } + } + } + } + return rtnvalue; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h index 4b39b27..550727d 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h @@ -201,5 +201,21 @@ UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pL * fan *********************************************/ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRouteZFSigStru); +/********************************************* +* ܣжȡ +* ˵pDataAddrݵַ +* pSideProtecGroupStru +* ֵ0ʧܣ1ɹ +* fan +*********************************************/ +UINT8 LS_read_SideProtecGroupData(UINT8* pDataAddr, SideProtecGroupStru* pSideProtecGroupStru); +/********************************************* +* ܣжȡ +* ˵pDataAddrݵַ +* pSideProtecStru +* ֵ0ʧܣ1ɹ +* fan +*********************************************/ +UINT8 LS_read_SideProtecData(UINT8* pDataAddr, SideProtecStru* pSideProtecStru); #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c index 04600fa..fd38d46 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", OVERLAP_LOCK_COND_DATA_ID); + 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); } } @@ -2351,4 +2359,284 @@ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName) } } return rtnValue; +} +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLSSideProtec(CHAR* LSDataName) +{ + UINT8 rtnValue = 0U; + UINT16 i = 0U; + UINT8 j = 0U; + UINT16 k = 0U; + UINT16 wRouteSideProtecNum = 0U; + UINT16 wSideProtecID = 0U; + + if (NULL != LSDataName) + { + /*ȳʼ*/ + rtnValue = InitLS_SideProtecGroupStru(LSDataName); + } + else + { + /*ʧ*/ + } + + /*ٳʼ*/ + if (1U == rtnValue) + { + rtnValue = InitLS_SideProtecStru(LSDataName); + } + else + { + /*ʧ*/ + } + + /*IDΪƥ*/ + if (1U == rtnValue) + { + for (i = 0u; i < LSDataLen.LSSideProtecGroupStruLen; i++)/**/ + { + wRouteSideProtecNum = LSData.pLSSideProtecGroupStru[i].RouteSideProtecNum; + for (j = 0u; j < wRouteSideProtecNum; j++)/*ÿ*/ + { + wSideProtecID = LSData.pLSSideProtecGroupStru[i].RouteSideProtecBuf[j].SideProtecID; + if (0u < wSideProtecID)/*еIJID0*/ + { + for (k = 0u; k < LSDataLen.LSRouteSideProtecStruLen; k++) + { + if (wSideProtecID == LSData.pLSRouteSideProtecStru[k].SideProtecID) + { + CommonMemCpy(&LSData.pLSSideProtecGroupStru[i].RouteSideProtecBuf[j], sizeof(SideProtecStru), &LSData.pLSRouteSideProtecStru[k], sizeof(SideProtecStru)); + break;/*ҵ*/ + } + else + { + /**/ + } + } + if (k == LSDataLen.LSRouteSideProtecStruLen) + { + rtnValue = 0u; + } + } + else + { + break; + } + } + } + } + else + { + /*ʧ*/ + } + + return rtnValue; +} + + + +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLS_SideProtecGroupStru(CHAR* LSDataName) +{ + UINT8 funcRtn = 0U; + SideProtecGroupStru* pSideProtecGroupStru = NULL; /**/ + UINT8* pDataAddr = NULL; /*ݵַ*/ + UINT32 DataSize = 0U; /*ݴСֽ*/ + UINT16 i = 0U; + UINT16 realRowCount = 0U; /*ʵʱݵ*/ + UINT16 realRowLen = 0U; /*ʵʱݵһеij*/ + UINT8 rtnValue = 0U; + + /*Ѿʼˣǵִй*/ + if (NULL != LSData.pLSSideProtecGroupStru) + { + rtnValue = 1U; + } + else + { + rtnValue = 1U; + /*ȡ*/ + funcRtn = dquGetConfigDataNew(LSDataName, LS_DATA_TYPE, SideProtecGroup_ID, &pDataAddr, &DataSize, &realRowCount); + + if (0U == funcRtn) + { + /*ʧ*/ + rtnValue = 0U; + debug_infor_printf((const)"\n SideProtecGroup_ID_TABLE NO IN FS\n"); + } + else + { + if ((0U != DataSize) && (0U != realRowCount)) + { + if (0U != (DataSize % realRowCount)) + { + debug_infor_printf((const)"\nTIOC_LS_DATA,SideProtecGroup_ID_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 << 8U) + SideProtecGroup_ID, PRINT_ONCE); + rtnValue = 0U; + } + else + { + /*ʵһеֽڳ*/ + realRowLen = (UINT16)(DataSize / realRowCount); + LSDataLen.LSSideProtecGroupStruLen = realRowCount; + + /*̬ռ*/ + LSData.pLSSideProtecGroupStru = (SideProtecGroupStru*)MyNew((UINT32)(sizeof(SideProtecGroupStru) * LSDataLen.LSSideProtecGroupStruLen)); + if (NULL == LSData.pLSSideProtecGroupStru) + { + LSDataLen.LSSideProtecGroupStruLen = 0U; /*̬ռʧܣ0*/ + rtnValue = 0U; + } + else + { + /*ڴΪЧ*/ + (void)CommonMemSet(LSData.pLSSideProtecGroupStru, sizeof(SideProtecGroupStru) * LSDataLen.LSSideProtecGroupStruLen, 0U, sizeof(SideProtecGroupStru) * LSDataLen.LSSideProtecGroupStruLen); + /*ݵ·ṹ */ + for (i = 0U; i < LSDataLen.LSSideProtecGroupStruLen; i++) + { + pSideProtecGroupStru = LSData.pLSSideProtecGroupStru + i; + + /*ݽṹ*/ + rtnValue = LS_read_SideProtecGroupData(pDataAddr, pSideProtecGroupStru); + pDataAddr += realRowLen; + + if (0U == rtnValue) + { + debug_infor_printf((const)"\nRead SideProtecGroup_ID_TABLE Error: Error RowCount %d\n ", (i + 1U)); + break; + } + else + { + /*ȡ*/ + } + } + } + } + } + else + { + debug_infor_printf((const)"\SideProtecGroup_ID_TABLE_ERR DataSize %d realRowCount %d\n ", DataSize, realRowCount); + } + } + } + return rtnValue; +} + +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLS_SideProtecStru(CHAR* LSDataName) +{ + UINT8 funcRtn = 0U; + SideProtecStru* pSideProtecStru = NULL; /**/ + UINT8* pDataAddr = NULL; /*ݵַ*/ + UINT32 DataSize = 0U; /*ݴСֽ*/ + UINT16 i = 0U; + UINT16 realRowCount = 0U; /*ʵʱݵ*/ + UINT16 realRowLen = 0U; /*ʵʱݵһеij*/ + UINT8 rtnValue = 0U; + + /*Ѿʼˣǵִй*/ + if (NULL != LSData.pLSRouteSideProtecStru) + { + rtnValue = 1U; + } + else + { + rtnValue = 1U; + /*ȡ*/ + funcRtn = dquGetConfigDataNew(LSDataName, LS_DATA_TYPE, SideProtec_ID, &pDataAddr, &DataSize, &realRowCount); + + if (0U == funcRtn) + { + /*ʧ*/ + rtnValue = 0U; + debug_infor_printf((const)"\n SideProtec_ID_TABLE NO IN FS\n"); + } + else + { + if ((0U != DataSize) && (0U != realRowCount)) + { + if (0U != (DataSize % realRowCount)) + { + debug_infor_printf((const)"\nTIOC_LS_DATA,SideProtec_ID_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 << 8U) + SideProtec_ID, PRINT_ONCE); + rtnValue = 0U; + } + else + { + /*ʵһеֽڳ*/ + realRowLen = (UINT16)(DataSize / realRowCount); + LSDataLen.LSRouteSideProtecStruLen = realRowCount; + + /*̬ռ*/ + LSData.pLSRouteSideProtecStru = (SideProtecStru*)MyNew((UINT32)(sizeof(SideProtecStru) * LSDataLen.LSRouteSideProtecStruLen)); + if (NULL == LSData.pLSRouteSideProtecStru) + { + LSDataLen.LSRouteSideProtecStruLen = 0U; /*̬ռʧܣ0*/ + rtnValue = 0U; + } + else + { + /*ڴΪЧ*/ + (void)CommonMemSet(LSData.pLSRouteSideProtecStru, sizeof(SideProtecStru) * LSDataLen.LSRouteSideProtecStruLen, 0U, sizeof(SideProtecStru) * LSDataLen.LSRouteSideProtecStruLen); + /*ݵת·۷źŻidṹ */ + for (i = 0U; i < LSDataLen.LSRouteSideProtecStruLen; i++) + { + pSideProtecStru = LSData.pLSRouteSideProtecStru + i; + + /*ݽṹ*/ + rtnValue = LS_read_SideProtecData(pDataAddr, pSideProtecStru); + pDataAddr += realRowLen; + + if (0U == rtnValue) + { + debug_infor_printf((const)"\nRead SideProtec_ID_TABLE Error: Error RowCount %d\n ", (i + 1U)); + break; + } + else + { + /*ȡ*/ + } + } + } + } + } + else + { + debug_infor_printf((const)"\SideProtec_ID_TABLE_ERR DataSize %d realRowCount %d\n ", DataSize, realRowCount); + } + } + } + return rtnValue; +} + +/********************************************* +* ܣȡ +* ˵void +* ֵ +*********************************************/ +UINT16 GetLSSideProtecStruLen(void) +{ + return LSDataLen.LSRouteSideProtecStruLen; +} + +/********************************************* +* ܣȡ +* ˵void +* ֵ +*********************************************/ +const SideProtecStru* GetLSSideProtecData(void) +{ + return LSData.pLSRouteSideProtecStru; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h index 7011f7f..7a79917 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h @@ -44,6 +44,8 @@ typedef struct S_LSDataStruct LS_ContactLineStruct* pLSContactLineStr; /*߼ι豸ṹ*/ LS_EachLgcIntrudeStruct* pLSLgcInvEachStru;/*߼λޱ*/ LS_TransRouteZFSigStruct* pLSTransRouteZFSigStru; /*ת۷źŻṹ*/ + SideProtecGroupStru* pLSSideProtecGroupStru; /*·ṹ*/ + SideProtecStru* pLSRouteSideProtecStru;/*·ʼ*/ }LSDataStruct; /*ݽṹ*/ typedef struct S_LSDataStructLen @@ -75,6 +77,8 @@ typedef struct S_LSDataStructLen UINT16 LSContactStruLen; /*߼ι豸*/ UINT16 LSLgcInvEachLen; /*߼λ*/ UINT16 LSTransRouteZFSigStruLen; /*ת۷źŻ*/ + UINT16 LSSideProtecGroupStruLen;/**/ + UINT16 LSRouteSideProtecStruLen;/**/ }LSDataStructLen; /*********ȫֵϢݱ*******/ @@ -262,5 +266,36 @@ UINT8 InitLS_ContactConfigDataStruct(CHAR* LSDataName); *********************************************/ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName); +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLSSideProtec(CHAR* LSDataName); + +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLS_SideProtecStru(CHAR* LSDataName); +/********************************************* +* ܣʼ +* ˵LSDataNameָ +* ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 InitLS_SideProtecGroupStru(CHAR* LSDataName); +/********************************************* +* ܣȡ +* ˵void +* ֵ +*********************************************/ +UINT16 GetLSSideProtecStruLen(void); +/********************************************* +* ܣȡ +* ˵void +* ֵ +*********************************************/ +const SideProtecStru* GetLSSideProtecData(void); #endif 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..8285e5f 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.c @@ -34,7 +34,9 @@ MaskConfigDataStruct ConfigCiToLeuMaskConfigDataStru[CI_SUM_MAX][CI_TO_LEU_MASK_ UINT8 MaskCfgDtStruFrmCI2ZCLogSgmt(UINT8 * FSDataName); +UINT8 MaskCfgDtStruFrmCI2ZCLogSgmtT(UINT8* FSDataName); UINT8 MaskCfgDtStruFrmZC2CiRouteMask(UINT8 * FSDataName); +UINT8 MaskCfgDtStruFrmZC2CiRouteMaskT(UINT8* FSDataName); /********************************************* *ܣCIATSλ *˵FSDataNameָ @@ -172,15 +174,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 +296,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 +405,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); @@ -513,9 +519,131 @@ UINT8 MaskCfgDtStruFrmCIATSEsbMask(UINT8* FSDataName) funcRtn = 1u; return funcRtn; } - /********************************************* -*ܣCI-ATS߼λ +*ܣCI-ATS߼λ- +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName) +{ + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr, * pDataLin; + UINT32 DataSize = 0u; + UINT16 MaskRow = 0u; + UINT16 DeviceID = 0u; + UINT16 residue = 0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + UINT16 rowCount = 0u; + UINT8 rowLenth = 0u;/*ֽ*/ + + UINT8 MaskType[] = { 1u,MASK_TYPE_LOGICSECTION_CTOCCUPY, + MASK_TYPE_LOGICSECTION_UTOCCUPY, + MASK_TYPE_LOGICSECTION_LINSHIXIANSU_SET, + MASK_TYPE_LOGICSECTION_ROUTELOCK, + MASK_TYPE_LOGICSECTION_PROTECTLOCK, + MASK_TYPE_LOGICSECTION_FAULTLOCK, + MASK_TYPE_LOGICSECTION_JUMPLOCK, + MASK_TYPE_UPWARD_DIRECTION, + MASK_TYPE_DOWNWARD_DIRECTION, + MASK_TYPE_LOGICSECTION_ARB, + MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u }; + UINT16 BuChang = 0u; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_LOGIC_SGMT_MASK_ID, &pDataAddr, &DataSize, &rowCount); + if (0u == funcRtn) + { + funcRtn = CI_ERROR; + } + else + { + funcRtn = CI_SUCCESS; + if ((0u < DataSize) && (0u < rowCount)) + { + if (0u == DataSize % rowCount) + { + /*һֽ*/ + rowLenth = (UINT16)(DataSize / rowCount); + for (; DataSize > 0u; DataSize -= 2u) + { + residue = (UINT16)(BuChang % ((UINT16)rowLenth / 2U)); + if (0u == residue) + { + DeviceID = ShortFromChar(pDataAddr); + + pDataLin = pDataAddr + rowLenth - 2u; + MaskRow = ShortFromChar(pDataLin); + + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX > MaskRow) + { + pDataAddr += 2u; + BuChang++; + } + else + { + funcRtn = CI_ERROR; + break; + } + + } + else if (residue < (UINT16)((rowLenth / 2u) - 1u)) + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + /*00xFFFFЧλ*/ + if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*ǷΪЧλֵ*/ + { + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_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 + { + funcRtn = CI_ERROR; + break; + } + } + + pDataAddr += 2u; + BuChang++; + } + else + { + pDataAddr += 2u; + BuChang++; + } + } + } + else + { + funcRtn = CI_ERROR; + } + } + else + { + funcRtn = CI_SUCCESS; + } + } + return funcRtn; +} +/********************************************* +*ܣCI-ATS߼λ- *˵FSDataNameָ *ֵ0ʧܣ1ɹ *********************************************/ @@ -541,7 +669,8 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName) MASK_TYPE_UPWARD_DIRECTION, MASK_TYPE_DOWNWARD_DIRECTION, MASK_TYPE_LOGICSECTION_ARB, - MASK_TYPE_LOGICSECTION_SPKS_FLOCK,1u}; + MASK_TYPE_LOGICSECTION_SPKS_FLOCK, + 1u}; UINT16 BuChang = 0u; funcRtn = dquGetConfigDataNew(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize,&rowCount); if(0u == funcRtn) @@ -580,38 +709,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 +845,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,12 +1794,11 @@ 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ʱ*/ - UINT8 MaskType[]={1u,MASK_TYPE_SWITCH_DINGWEI_LOGIC,MASK_TYPE_SWITCH_FANWEI_LOGIC,MASK_TYPE_SWITCH_LOCKSTATE,1u}; + UINT8 MaskType[]={1u,MASK_TYPE_SWITCH_DINGWEI_LOGIC,MASK_TYPE_SWITCH_FANWEI_LOGIC,MASK_TYPE_SWITCH_LOCKSTATE,MASK_TYPE_SWITCH_QINGXIAN,1u}; UINT16 BuChang = 0u; funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_SWITCH_MASK_ID,&pDataAddr,&DataSize); if(0u == funcRtn) @@ -1750,7 +1903,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 +2047,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 +2284,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 +2376,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 +2427,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ʱ*/ @@ -2138,89 +2514,227 @@ UINT8 MaskCfgDtStruFrmCIZCEsbMask(UINT8 * FSDataName) *********************************************/ UINT8 MaskCfgDtStruFrmCI2ZCLogSgmt(UINT8 * FSDataName) { - UINT8 funcRtn = 1u; - UINT8* pDataAddr,*pDataLin; + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr = NULL; + UINT8* pDataLin = NULL; 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) + UINT16 rowCount = 0u; + UINT16 rowLenth = 0u;/*ֽ*/ + funcRtn = dquGetConfigDataNew(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_LOGIC_SGMT_MASK_ID,&pDataAddr,&dataSize, &rowCount); + if (0U == funcRtn) { - if(dataSize > 0u) - { - if(dataSize%CI_ZC_LOGIC_SGMT_MASK_LEN != 0u) - { - funcRtn = 0u; /* һݵı˵ݲ߲һ */ - } - } - else - { - funcRtn = 1u; /* */ - } - + funcRtn = CI_ERROR; /* ʧ */ } else { - funcRtn = 0u; /* ʧ */ - } - - if ((funcRtn ==1u) && (dataSize > 0u)) - { - for(;dataSize>0u;dataSize-=2u) + if ((0u < dataSize) && (0u < rowCount)) { - buChang = buChang%(CI_ZC_LOGIC_SGMT_MASK_LEN/2u); - if(buChang == 0u) + if (0u == dataSize % rowCount) { - deviceID = ShortFromChar(pDataAddr); - pDataLin = pDataAddr + CI_ZC_LOGIC_SGMT_MASK_LEN -2u; - maskRow = ShortFromChar(pDataLin); - - if (maskRow >= CI_SUM_MAX) - { /* ʧ*/ - funcRtn = 0u; - break; - } - } - else if( (4u 0u; dataSize -= 2u) { - ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; - ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; - ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].MaskId = tempMaskId; - ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].MaskType = (UINT8)(MaskType[buChang%(CI_ZC_LOGIC_SGMT_MASK_LEN/2u)]); + buChang = buChang % ((UINT16)rowLenth / 2u); + if (buChang == 0u) + { + deviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + maskRow = ShortFromChar(pDataLin); - - /*ͳЧλ*/ - if(ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].MaskId > ConfigCiToZcMaskIdMax[maskRow]) - { - ConfigCiToZcMaskIdMax[maskRow] = ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].MaskId; + if (CI_SUM_MAX > maskRow) + { + /* */ + } + else + { + /* ʧ*/ + funcRtn = CI_ERROR; + + } } - ConfigCiToZcMaskCurSum[maskRow]++; - } + else if ((4u < buChang) && (8U > buChang)) + { /* CIZCλ 5,67*/ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + if ((CI_TO_ZC_MASK_SUM_MAX > tempMaskId) && (CI_SUM_MAX > maskRow)) + { + ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; + ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; + 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; + } + ConfigCiToZcMaskCurSum[maskRow]++; + } + else + { + funcRtn = CI_ERROR; + + + } + + } + } + else + { + /* ԼϢ */ + } + pDataAddr += 2u; + buChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } } else { - /* ԼϢ */ + funcRtn = CI_ERROR; } - pDataAddr+=2u; - buChang++; - } + + } + else + { + funcRtn = CI_SUCCESS; + /* */ + } } + + return funcRtn; } +/********************************************* +*ܣCI-ZC߼λ-ݽṹ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCI2ZCLogSgmtT(UINT8* FSDataName) +{ + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr = NULL; + UINT8* pDataLin = NULL; + UINT32 dataSize = 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_DOWN,MASK_TYPE_LOGICSECTION_DIR_UP,MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u }; + UINT16 buChang = 0u; + UINT16 rowCount = 0u; + UINT16 rowLenth = 0u;/*ֽ*/ + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_LOGIC_SGMT_MASK_ID, &pDataAddr, &dataSize, &rowCount); + if (0U == funcRtn) + { + funcRtn = CI_ERROR; /* ʧ */ + } + else + { + if ((0u < dataSize) && (0u < rowCount)) + { + if (0u == dataSize % rowCount) + { + /*һֽ*/ + rowLenth = (UINT16)(dataSize / rowCount); + for (; dataSize > 0u; dataSize -= 2u) + { + buChang = buChang % ((UINT16)rowLenth / 2u); + if (buChang == 0u) + { + deviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + maskRow = ShortFromChar(pDataLin); + + if (CI_SUM_MAX > maskRow) + { + /* */ + } + else + { + /* ʧ*/ + funcRtn = CI_ERROR; + + } + } + else if ((4u < buChang) && (9U > buChang)) + { /* CIZCλ 5,67,8*/ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + if ((CI_TO_ZC_MASK_SUM_MAX > tempMaskId) && (CI_SUM_MAX > maskRow)) + { + ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; + ConfigCiToZcMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; + 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; + } + ConfigCiToZcMaskCurSum[maskRow]++; + } + else + { + funcRtn = CI_ERROR; + + + } + + } + } + else + { + /* ԼϢ */ + } + pDataAddr += 2u; + buChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } + } + else + { + funcRtn = CI_ERROR; + } + + } + else + { + funcRtn = CI_SUCCESS; + /* */ + } + } + + + + return funcRtn; +} /********************************************* *ܣZC-CI߼λ *˵FSDataNameָ @@ -2228,101 +2742,121 @@ UINT8 MaskCfgDtStruFrmCI2ZCLogSgmt(UINT8 * FSDataName) *********************************************/ UINT8 MaskCfgStruFrmZCCILogSgmtMask(UINT8 * FSDataName) { - UINT8 funcRtn = 0u; - UINT8* pDataAddr,*pDataLin; - UINT32 DataSize = 0u; - UINT16 i =0u; - UINT16 MaskRow=0u; - UINT16 DeviceID=0u; + UINT8 funcRtn = CI_ERROR; + UINT8* pDataAddr = NULL; + UINT8* pDataLin = NULL; + UINT32 dataSize = 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}; - UINT16 BuChang = 0u; - funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize); - if(0u == funcRtn) + MASK_TYPE_LOGICSECTION_LOCK,MASK_TYPE_LOGICSECTION_DIR_DOWN,MASK_TYPE_LOGICSECTION_DIR_UP,MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u}; + UINT16 buChang = 0u; + UINT16 rowCount = 0u; + UINT16 rowLenth = 0u;/*ֽ*/ + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_LOGIC_SGMT_MASK_ID, &pDataAddr, &dataSize, &rowCount); + if (0U == funcRtn) { - funcRtn = 0u; - return funcRtn; + funcRtn = CI_ERROR; /* ʧ */ } else { - } - - if(0u != DataSize%CI_ZC_LOGIC_SGMT_MASK_LEN) - { - funcRtn = 0u; - return funcRtn; - } - else - { - } - if(0u == DataSize) - { - /**/ - funcRtn = 1u; - return funcRtn; - } - else - { - } - for(;DataSize>0u;DataSize-=2u) - { - BuChang = BuChang%(CI_ZC_LOGIC_SGMT_MASK_LEN/2u); - if(0u == BuChang) + if ((0u < dataSize) && (0u < rowCount)) { - DeviceID = ShortFromChar(pDataAddr); - pDataLin = pDataAddr + CI_ZC_LOGIC_SGMT_MASK_LEN -2u; - MaskRow = ShortFromChar(pDataLin); - /*鲻Խ磬Խֱӷʧ*/ - if(CI_SUM_MAX <= MaskRow) + if (0u == dataSize % rowCount) { - funcRtn = 0u; - return funcRtn; - } - else - { - } - } - - else if (5u > BuChang ) - { /* ZCCIλ 1,2,3*/ - /*ȡλID*/ - tempMaskId = ShortFromChar(pDataAddr); - - /*00xFFFFЧλ*/ - if((0xFFFFu != tempMaskId)&&(0u != tempMaskId)) - { - ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; - ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; - ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; - ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang%(CI_ZC_LOGIC_SGMT_MASK_LEN/2u)]); + /*һֽ*/ + rowLenth = (UINT16)(dataSize / rowCount); + for (; dataSize > 0u; dataSize -= 2u) + { + buChang = buChang % (rowLenth / 2u); + if (0u == buChang) + { + deviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + maskRow = ShortFromChar(pDataLin); + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX > maskRow) + { + /* */ + } + else + { + /* ʧ*/ + funcRtn = CI_ERROR; + + } + } - - /*ͳЧλ*/ - if(ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[MaskRow]) - { - ConfigZcToCiMaskIdMax[MaskRow] = ConfigZcToCiMaskConfigDataStru[MaskRow][tempMaskId].MaskId; - } - else - { - /*do nothing*/ - } - - ConfigZcToCiMaskCurSum[MaskRow]++; - } + else if (5u > buChang) + { /* ZCCIλ 1,2,3,4*/ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + if ((ZC_TO_CI_MASK_SUM_MAX > tempMaskId) && (CI_SUM_MAX > maskRow)) + { + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId = tempMaskId; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskType = (UINT8)(MaskType[buChang % (rowLenth / 2u)]); + + + /*ͳЧλ*/ + if (ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[maskRow]) + { + ConfigZcToCiMaskIdMax[maskRow] = ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigZcToCiMaskCurSum[maskRow]++; + } + else + { + funcRtn = CI_ERROR; + + } + + } + else + { + /* */ + } + } + else + { + /* */ + } + pDataAddr += 2u; + buChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } + } else { - } + funcRtn = CI_ERROR; + } + } else { - /* */ + funcRtn = CI_SUCCESS; + /* */ } - pDataAddr+=2u; - BuChang++; - } - funcRtn = 1u; + + } + + + return funcRtn; } /********************************************* @@ -2335,83 +2869,211 @@ 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ʱ*/ - - const UINT8 MaskType[]={1u,MASK_TYPE_ROUTE_LOCKSTATE,MASK_TYPE_ROUTE_STOPE_APPLY,MASK_TYPE_ROUTE_STOPENABLEE_STATUS,1u}; + UINT16 rowCount = 0U; + UINT16 rowLenth = 0u;/*ֽ*/ + const UINT8 MaskType[]={1u,MASK_TYPE_ROUTE_LOCKSTATE,MASK_TYPE_ROUTE_STOPE_APPLY,MASK_TYPE_ROUTE_STOPENABLEE_STATUS, + MASK_TYPE_ROUTE_COUPLIN_SUCCESS,MASK_TYPE_ROUTE_COUPLIN_ERROR,1u}; UINT16 buChang = 0u; - funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_ROUTE_MASK_ID,&pDataAddr,&dataSize); - if(funcRtn== 1u) + funcRtn = dquGetConfigDataNew(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_ROUTE_MASK_ID,&pDataAddr,&dataSize, &rowCount); + if (0U == funcRtn) { - if (dataSize > 0u) - { - if(dataSize%CI_ZC_ROUTE_MASK_LEN != 0u) - { /* ݲһΪݴ */ - funcRtn = 0u; - dataSize = 0u; - } - } - else - { - /**/ - funcRtn = 1u; - } + funcRtn = CI_ERROR; /* ʧ */ } else { - funcRtn = 0u; - dataSize = 0u; - } - - for(;dataSize>0u;dataSize-=2u) - { - buChang = buChang%(CI_ZC_ROUTE_MASK_LEN/2u); - if(buChang == 0u) + if ((0u < dataSize) && (0u < rowCount)) { - deviceID = ShortFromChar(pDataAddr); - pDataLin = pDataAddr + CI_ZC_ROUTE_MASK_LEN -2u; - maskRow = ShortFromChar(pDataLin); - /*鲻Խ磬Խֱӷʧ*/ - if(maskRow >= CI_SUM_MAX) + if (0u == dataSize % rowCount) { - funcRtn = 0u; - break; - } - - } - else if(buChang == 3u) - {/* 3 */ - /*ȡλID*/ - tempMaskId = ShortFromChar(pDataAddr); - - /*00xFFFFЧλ*/ - if((0xFFFFu != tempMaskId)&&(0U != tempMaskId)) - { - ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; - ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; - ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId = tempMaskId; - ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskType = MaskType[buChang]; - - - /*ͳЧλ*/ - if(ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[maskRow]) + /*һֽ*/ + rowLenth = (UINT16)(dataSize / rowCount); + for (; dataSize > 0u; dataSize -= 2u) { - ConfigZcToCiMaskIdMax[maskRow] = ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId; - } + buChang = buChang % (rowLenth / 2u); + if (buChang == 0u) + { + deviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + maskRow = ShortFromChar(pDataLin); + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX > maskRow) + { + /* */ + } + else + { + /* ʧ*/ + funcRtn = CI_ERROR; + + } - ConfigZcToCiMaskCurSum[maskRow]++; + } + else if ((3U == buChang) || (4U == buChang) || (5U == buChang)) + {/* 3,4,5 */ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0U != tempMaskId)) + { + if (ZC_TO_CI_MASK_SUM_MAX > tempMaskId) + { + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId = tempMaskId; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskType = MaskType[buChang]; + + + /*ͳЧλ*/ + if (ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[maskRow]) + { + ConfigZcToCiMaskIdMax[maskRow] = ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId; + } + + ConfigZcToCiMaskCurSum[maskRow]++; + } + else + { + funcRtn = CI_ERROR; + + } + + } + } + else + { + /* λ */ + } + pDataAddr += 2u; + buChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } + } + else + { + funcRtn = CI_ERROR; } } else { - /* λ */ + funcRtn = CI_SUCCESS; + /* */ } - pDataAddr+=2u; - buChang++; } + return funcRtn; +} +/********************************************* +*ܣZC-CI ·λ +*˵FSNameļָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmZC2CiRouteMaskT(UINT8* FSDataName) +{ + UINT8 funcRtn = 1u; + UINT8* pDataAddr, * pDataLin; + UINT32 dataSize = 0u; + UINT16 maskRow = 0u; + UINT16 deviceID = 0u; + UINT16 tempMaskId = 0u; /*λIDʱ*/ + UINT16 rowCount = 0U; + UINT16 rowLenth = 0u;/*ֽ*/ + const UINT8 MaskType[] = { 1u,MASK_TYPE_ROUTE_LOCKSTATE,MASK_TYPE_ROUTE_STOPE_APPLY,MASK_TYPE_ROUTE_STOPENABLEE_STATUS,1u }; + UINT16 buChang = 0u; + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_ROUTE_MASK_ID, &pDataAddr, &dataSize, &rowCount); + if (0U == funcRtn) + { + funcRtn = CI_ERROR; /* ʧ */ + } + else + { + if ((0u < dataSize) && (0u < rowCount)) + { + if (0u == dataSize % rowCount) + { + /*һֽ*/ + rowLenth = (UINT16)(dataSize / rowCount); + for (; dataSize > 0u; dataSize -= 2u) + { + buChang = buChang % (rowLenth / 2u); + if (buChang == 0u) + { + deviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + maskRow = ShortFromChar(pDataLin); + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX > maskRow) + { + /* */ + } + else + { + /* ʧ*/ + funcRtn = CI_ERROR; + + } + } + else if (3U == buChang) + {/* 3 */ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0U != tempMaskId)) + { + if (ZC_TO_CI_MASK_SUM_MAX > tempMaskId) + { + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceId = deviceID; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId = tempMaskId; + ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskType = MaskType[buChang]; + + + /*ͳЧλ*/ + if (ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId > ConfigZcToCiMaskIdMax[maskRow]) + { + ConfigZcToCiMaskIdMax[maskRow] = ConfigZcToCiMaskConfigDataStru[maskRow][tempMaskId].MaskId; + } + + ConfigZcToCiMaskCurSum[maskRow]++; + } + else + { + funcRtn = CI_ERROR; + + } + + } + } + else + { + /* λ */ + } + pDataAddr += 2u; + buChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } + } + else + { + funcRtn = CI_ERROR; + } + } + else + { + funcRtn = CI_SUCCESS; + /* */ + } + } return funcRtn; } /********************************************* @@ -2423,99 +3085,110 @@ UINT8 MaskCfgStruFrmCIZCRouteMask(UINT8 * FSDataName) { UINT8 funcRtn = 0u; UINT8* pDataAddr,*pDataLin; - UINT32 DataSize = 0u; - UINT16 i =0u; + UINT32 dataSize = 0u; UINT16 MaskRow=0u; UINT16 DeviceID=0u; UINT16 tempMaskId = 0u; /*λIDʱ*/ - - UINT8 MaskType[]={1u,MASK_TYPE_ROUTE_LOCKSTATE,MASK_TYPE_ROUTE_STOPE_APPLY,MASK_TYPE_ROUTE_STOPENABLEE_STATUS,1u}; + UINT16 rowCount = 0U; + UINT16 rowLenth = 0u;/*ֽ*/ + UINT8 MaskType[]={1u,MASK_TYPE_ROUTE_LOCKSTATE,MASK_TYPE_ROUTE_STOPE_APPLY,MASK_TYPE_ROUTE_STOPENABLEE_STATUS, + MASK_TYPE_ROUTE_COUPLIN_SUCCESS,MASK_TYPE_ROUTE_COUPLIN_ERROR,1u}; UINT16 BuChang = 0u; - funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_ROUTE_MASK_ID,&pDataAddr,&DataSize); - if(0u == funcRtn) + funcRtn = dquGetConfigDataNew(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_ROUTE_MASK_ID,&pDataAddr,&dataSize, &rowCount); + if (0U == funcRtn) { - funcRtn = 0u; - return funcRtn; + funcRtn = CI_ERROR; /* ʧ */ } else { - } - - if(0u != DataSize%CI_ZC_ROUTE_MASK_LEN) - { - funcRtn = 0u; - return funcRtn; - } - else - { - } - if(0u == DataSize) - { - /**/ - funcRtn = 1u; - return funcRtn; - } - else - { - } - for(;DataSize>0u;DataSize-=2u) - { - BuChang = BuChang%(CI_ZC_ROUTE_MASK_LEN/2u); - if(0u == BuChang) + if ((0u < dataSize) && (0u < rowCount)) { - DeviceID = ShortFromChar(pDataAddr); - pDataLin = pDataAddr + CI_ZC_ROUTE_MASK_LEN -2u; - MaskRow = ShortFromChar(pDataLin); - /*鲻Խ磬Խֱӷʧ*/ - if(CI_SUM_MAX <= MaskRow) + if (0u == dataSize % rowCount) { - funcRtn = 0u; - return funcRtn; - } - else - { - } + rowLenth = (UINT16)(dataSize / rowCount); + for (; dataSize > 0u; dataSize -= 2u) + { + BuChang = BuChang % (rowLenth / 2u); + if (0u == BuChang) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + MaskRow = ShortFromChar(pDataLin); + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX <= MaskRow) + { + funcRtn = CI_ERROR; - } - else if (3u > BuChang) - {/* 1,2 */ - /*ȡλID*/ - tempMaskId = ShortFromChar(pDataAddr); + } + else + { + } - /*00xFFFFЧλ*/ - if((0xFFFFu != tempMaskId)&&(0u != tempMaskId)) - { - ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; - ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; - ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; - ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskType = MaskType[BuChang]; + } + else if (3u > BuChang) + {/* 1,2 */ + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); - - /*ͳЧλ*/ - if(ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToZcMaskIdMax[MaskRow]) - { - ConfigCiToZcMaskIdMax[MaskRow] = ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId; - } - else - { - /*do nothing*/ - } - - ConfigCiToZcMaskCurSum[MaskRow]++; + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + if (CI_TO_ZC_MASK_SUM_MAX > tempMaskId) + { + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_ROUTE; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskType = MaskType[BuChang]; + + + /*ͳЧλ*/ + if (ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToZcMaskIdMax[MaskRow]) + { + ConfigCiToZcMaskIdMax[MaskRow] = ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].MaskId; + } + else + { + /*do nothing*/ + } + + ConfigCiToZcMaskCurSum[MaskRow]++; + } + else + { + funcRtn = CI_ERROR; + } + + } + else + { + + } + } + else + { + /* ID */ + } + pDataAddr += 2u; + BuChang++; + if (CI_ERROR == funcRtn) + { + break; + } + } } else { + funcRtn = CI_ERROR; } } else { - /* ID */ + funcRtn = CI_SUCCESS; + /* */ } - pDataAddr+=2u; - BuChang++; } - funcRtn = 1u; - return funcRtn; + + return funcRtn; } /********************************************* @@ -2532,7 +3205,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 +3320,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 +3583,6 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName) } - /********************************************* *ܣCI-ZCλ *˵FSNameļָ @@ -2803,7 +3593,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 +3707,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 +3833,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 +4157,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 +4246,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 +4570,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λ*/ @@ -3797,13 +4596,21 @@ UINT8 MaskInit(UINT8 * FSDataName) /*CI-ATSͣťλ*/ funcRtn *= MaskCfgDtStruFrmCIATSEsbMask( FSDataName); /*CI-ATS߼λ*/ - funcRtn *= MaskCfgDtStruFrmCIATSLogSgmt( FSDataName); + if (DATA_TYPE_NEW == chPulicData) + { + /**/ + funcRtn *= MaskCfgDtStruFrmCIATSLogSgmt(FSDataName); + } + else + { + /**/ + funcRtn *= MaskCfgDtStruFrmCIATSLogSgmtT(FSDataName); + } + /*CI-ATS·λ*/ funcRtn *= MaskCfgDtStruFrmCIATSRouteMask( FSDataName); /*ci-atsԶ۷λ*/ funcRtn *= MaskCfgDtStruFrmCIATSARRtMask(FSDataName); - /*CI-ATSλ*/ - funcRtn *= MaskCfgDtStruFrmCIATSPhySecMask( FSDataName); /*CI-ATSԶͨ·λ*/ funcRtn *= MaskCfgDtStruFrmCIATSARtMask(FSDataName); /*ci-atsȫԶ۷λ*/ @@ -3834,32 +4641,65 @@ UINT8 MaskInit(UINT8 * FSDataName) ciPattern = GetLocalRcWorkMode(); if(RC_WORK_MODE_CI == ciPattern) { - /*CI-ZCλ*/ - funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask( FSDataName); - /* zt ɾش 2022-02-15 */ - /*CI-ZCźŻλ*/ - funcRtn *= MaskCfgDtStruFrmCIZCSignalMask( FSDataName); + + if (DATA_TYPE_NEW == chPulicData) + { + /*CI-ZCλ*/ + funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask(FSDataName); + /*CI-ZCźŻλ*/ + funcRtn *= MaskCfgDtStruFrmCIZCSignalMask(FSDataName); + /*ZC-CIźŻλ*/ + funcRtn *= MaskCfgDtStruFrmZCCISignalMask(FSDataName); + /*CI-ZCλ*/ + funcRtn *= MaskCfgStruFrmCIZCAxleSgmtMask(FSDataName); + /*ZC-CIλ*/ + funcRtn *= MaskCfgStruFrmZCCIAxleSgmtMask(FSDataName); + } + else + { + /*CI-ZCλ*/ + funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask2(FSDataName); + /*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 *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName); + funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName); + /*CI-ZC߼λ*/ + if (DATA_TYPE_NEW == chPulicData) + { + funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName); + } + else + { + funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmtT(FSDataName); + } + /*CI-ZC·λ*/ funcRtn *= MaskCfgStruFrmCIZCRouteMask( FSDataName); - funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName); - /*CI-ZCλ*/ - funcRtn *= MaskCfgStruFrmCIZCAxleSgmtMask( FSDataName); + /*ZC-CI·λ*/ + if (DATA_TYPE_NEW == chPulicData) + { + funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName); + } + else + { + funcRtn *= MaskCfgDtStruFrmZC2CiRouteMaskT(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 +4876,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 +5236,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 +5324,493 @@ 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; + +} + +/***** +******CIZCλ +********/ +/********************************************* +*ܣCI-ZCλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIZCSwitchMask2(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_SWITCH_DINGWEI_LOGIC,MASK_TYPE_SWITCH_FANWEI_LOGIC,MASK_TYPE_SWITCH_LOCKSTATE,1u }; + UINT16 BuChang = 0u; + UINT16 realRow = 0U; + UINT16 rowLenth = 0U; + + funcRtn = dquGetConfigDataNew(FSDataName, CI_ZC_MASK_TYPE, CI_ZC_SWITCH_MASK_ID, &pDataAddr, &DataSize, &realRow); + if (0u == funcRtn) + { + funcRtn = 0u; + return funcRtn; + } + else + { + } + + if (0u != DataSize % realRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + rowLenth = (UINT16)(DataSize / realRow); + } + if (0u == DataSize) + { + /**/ + funcRtn = 1u; + return funcRtn; + } + else + { + } + for (; DataSize > 0u; DataSize -= 2u) + { + BuChang = BuChang % (rowLenth / 2u); + if (0u == BuChang) + { + DeviceID = ShortFromChar(pDataAddr); + pDataLin = pDataAddr + rowLenth - 2u; + MaskRow = ShortFromChar(pDataLin); + /*鲻Խ磬Խֱӷʧ*/ + if (CI_SUM_MAX <= MaskRow) + { + funcRtn = 0u; + return funcRtn; + } + else + { + } + } + + /* ID */ + else if (BuChang < ((rowLenth / 2u) - 1u)) + { + /*ȡλID*/ + tempMaskId = ShortFromChar(pDataAddr); + + /*00xFFFFЧλ*/ + if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) + { + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; + ConfigCiToZcMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_SWITCH; + 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]++; + } + else + { + } + } + else + { + /* ȡID:˶δΪʱʹ */ + UINT16 tmpCiId = ShortFromChar(pDataAddr); + if (MaskRow != tmpCiId) + { + /* IDôʱش */ + } + } + 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..11ae2b9 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquMaskInit.h @@ -35,22 +35,22 @@ /*CI-ZCλID*/ #define CI_ZC_MASK_TYPE ((UINT32)0xB3) #define CI_ZC_SWITCH_MASK_ID ((UINT32)1) /*CI-ZCλ*/ -#define CI_ZC_SWITCH_MASK_LEN ((UINT32)10) /*CI-ZCλֽڳ--1г*/ +#define CI_ZC_SWITCH_MASK_LEN ((UINT32)12) /*CI-ZCλֽڳ--1г*/ #define CI_ZC_SIGNAL_MASK_ID ((UINT32)2) /*CI-ZCźŻλ*/ #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г*/ #define CI_ZC_LOGIC_SGMT_MASK_ID ((UINT32)6) /*CI-ZC߼λ*/ -#define CI_ZC_LOGIC_SGMT_MASK_LEN ((UINT32)18) /*CI-ZC߼λֽڳ--1г*/ +#define CI_ZC_LOGIC_SGMT_MASK_LEN ((UINT32)20) /*CI-ZC߼λֽڳ--1г*/ #define CI_ZC_ROUTE_MASK_ID ((UINT32)7) /*CI-ZC·λ*/ -#define CI_ZC_ROUTE_MASK_LEN ((UINT32)10) /*CI-ZC·λֽڳ--1г*/ +#define CI_ZC_ROUTE_MASK_LEN ((UINT32)14) /*CI-ZC·λֽڳ--1г*/ #define CI_ZC_AXLE_SGMT_MASK_ID ((UINT32)5) /*CI-ZCλ*/ #define CI_ZC_AXLE_SGMT_MASK_LEN ((UINT32)26) /*CI-ZCλֽڳ--1гȣModified 20151015*/ @@ -180,6 +180,12 @@ UINT8 MaskCfgDtStruFrmCIATSEsbMask(UINT8 * FSDataName); *********************************************/ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName); /********************************************* +*ܣCI-ATS߼λ- +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName); +/********************************************* *ܣCI-ATS·λ *˵FSDataNameָ *ֵ0ʧܣ1ɹ @@ -263,6 +269,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 +428,40 @@ 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); +/***** +******CIZCλ +********/ +/********************************************* +*ܣCI-ZCλ +*˵FSDataNameָ +*ֵ0ʧܣ1ɹ +*********************************************/ +UINT8 MaskCfgDtStruFrmCIZCSwitchMask2(UINT8* FSDataName); + #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h index 69f1b50..cffda6d 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dqucijdqstru.h @@ -98,6 +98,10 @@ /***OC_ݱID**/ #define OC_DATA_TYPE ((UINT8)0x73) +/*ת޻״ָ̬ʾƱ*/ +#define OC_SWITCH_ZZJ_POWER_ID ((UINT8)41) +#define LEN_OC_SWITCH_ZZJ_POWER ((UINT8)21) + /*̵ñID*/ #define OC_RELAY_RELAY_CONFIG_ID ((UINT8)1) #define OC_LEN_RELAY_RELAY_CONFIG ((UINT8)46) @@ -191,6 +195,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 { @@ -219,6 +226,7 @@ typedef struct S_Relay_ScreenStruct UINT16 wRelayRelatedId; /*̵ID*/ UINT16 wRelayRelatedId2; /*̵ID2*/ UINT16 wRelayCloseDoorId; /*ż̵ID*/ + UINT16 wRelayThreeEditGroupOpenDoorId; /*鿪ż̵ID*/ UINT16 wRelayFourEditGroupOpenDoorId; /*ı鿪ż̵ID*/ UINT16 wRelaySixEditGroupOpenDoorId; /*鿪ż̵ID*/ UINT16 wRelayEightEditGroupOpenDoorId; /*˱鿪ż̵ID*/ @@ -226,7 +234,8 @@ typedef struct S_Relay_ScreenStruct UINT16 wRelayDoorClosedId2; /*Źؼ̵ID2*/ UINT16 wRelayDoorButtonId; /*PSDť̵*/ UINT16 doorReopenRelayId; /*վ̨ٴοż̵ID*/ - UINT16 departureConfirmRelayId; /*ȷϼ̵ID*/ + UINT16 doorReopenRelayId2; /*վ̨ٴοż̵ID2*/ + UINT16 departureConfirmRelayId; /*ȷϼ̵ID*/ UINT16 detectStartRelayId; /*϶̵̽ID*/ UINT16 detectStopRelayId; /*ֹͣ϶̵̽ID*/ UINT16 obstacleRelayId; /*ϰ̵ID*/ @@ -241,6 +250,7 @@ typedef struct S_Relay_ScreenStruct UINT16 wPcbBsdRelayId; /*ٹŰťָʾƼ̵*/ UINT16 wVideoQkLight1RelayId; /*ͰťƵָʾ1̵̣*/ UINT16 wVideoQkLight2RelayId; /*ͰťƵָʾ2죩̵*/ + UINT8 chControlType; /*ſ*/ } Relay_ScreenStruct; /*μ̵ṹ*/ @@ -339,9 +349,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; /*ʾƼ̵ṹ*/ @@ -392,6 +399,8 @@ typedef struct SRelaySpksStruct UINT16 cutDisRelayId; /*·ָʾƼ̵ID*/ UINT16 repRelayId; /*ʾ̵ID*/ UINT16 outsideRelayId; /*spksʾƼ̵*/ + UINT16 buzzRelayId; /*̵ID*/ + UINT16 cutBuzzRelayId; /*г̵*/ } RelaySpksStruct; /* Žݽṹ */ @@ -448,6 +457,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..daae5b1 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; @@ -1181,8 +1182,15 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID) */ void rrm_SetRRMResult(UINT16 trainID,UINT8 rrmReply,UINT8 rrmReason,UINT8 nextOCId) { - UINT16 wRcIdWithType = 0x3c00U; - + UINT16 wRcIdWithType = 0U; + if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI) + { + wRcIdWithType = 0x3C00U; + } + else + { + wRcIdWithType = 0x3D00U; + } wRcIdWithType |= (UINT16)nextOCId; SetTrainRrmState(trainID,rrmReply); diff --git a/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c b/TSCP/src/APP/ciapp/RemoteRM/RRMManageAPI.c index 1a26b59..4d5dfb3 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 { @@ -1289,7 +1334,7 @@ void rrm_GetInfToATSUCTInfo(OUT ATSTrainInfoStru* pInfo) if (0u != secTail) { - pInfo->TrainID[pInfo->trainCnt] = (UINT16)(cycle & 0x00ffu) + (UINT16)(DEVTYPE_VOBC << 8u); + pInfo->TrainID[pInfo->trainCnt] = (UINT16)(cycle & 0x00ffU) + (UINT16)(CI_SYSTEM_TYPE_IVOC << 8U); pInfo->TailSecID[pInfo->trainCnt] = secTail; pInfo->trainCnt++; } @@ -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/ReverseRoute/ReverseRouteDefine.h b/TSCP/src/APP/ciapp/ReverseRoute/ReverseRouteDefine.h index c09cf31..38ae730 100644 --- a/TSCP/src/APP/ciapp/ReverseRoute/ReverseRouteDefine.h +++ b/TSCP/src/APP/ciapp/ReverseRoute/ReverseRouteDefine.h @@ -17,7 +17,7 @@ /*·ֵ*/ -#define REVERSE_ROUTE_SUM_MAX ((UINT16)150) /*巴·ֵ*/ +#define REVERSE_ROUTE_SUM_MAX ((UINT16)300) /*巴·ֵ*/ /*ֵ*/ diff --git a/TSCP/src/APP/ciapp/Route/DynamicRouteDataManage.c b/TSCP/src/APP/ciapp/Route/DynamicRouteDataManage.c index 9a0c729..060363a 100644 --- a/TSCP/src/APP/ciapp/Route/DynamicRouteDataManage.c +++ b/TSCP/src/APP/ciapp/Route/DynamicRouteDataManage.c @@ -2136,10 +2136,12 @@ static UINT8 LockDrSubRouteSwitchCheck(UINT16 wSubRouteId, UINT8 functionId, UIN } } +#if 0 /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(wSubRouteId, &devId, &devState); + /*ע⣺һʹãֶ֧ʱżֶ֧ʱɲλúͿɶ*/ + checkResult = RouteSideProtectConditionCheck(wSubRouteId, functionId, sendLevel); if (CI_SUCCESS == checkResult) { /* ͨ */ @@ -2147,8 +2149,7 @@ static UINT8 LockDrSubRouteSwitchCheck(UINT16 wSubRouteId, UINT8 functionId, UIN } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); + /* ʧܷ */ reResult = CI_ERROR; } @@ -2158,6 +2159,7 @@ static UINT8 LockDrSubRouteSwitchCheck(UINT16 wSubRouteId, UINT8 functionId, UIN /* ʧܷ */ reResult = CI_ERROR; } +#endif if (CI_SUCCESS == reResult) { @@ -3866,10 +3868,12 @@ static UINT8 SetDrSubRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 se } } +#if 0 /*·*/ if (CI_SUCCESS == reResult) { - checkResult = RouteAllLtrlDfncSwitchCheck(routeId, &devId, &devState); + /*ע⣺һʹãֶ֧ʱżֶ֧ʱɲλúͿɶ*/ + checkResult = RouteSideProtectConditionCheck(routeId, functionId, sendLevel); if (CI_SUCCESS == checkResult) { /* ͨ */ @@ -3877,8 +3881,7 @@ static UINT8 SetDrSubRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 se } else { - /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_NO_UT_CT_OCU_STATE, devState, sendLevel); + /* ʧܷ */ reResult = CI_ERROR; } @@ -3888,6 +3891,7 @@ static UINT8 SetDrSubRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 se /* ʧܷ */ reResult = CI_ERROR; } +#endif if (CI_SUCCESS == reResult) { diff --git a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.c index 35d15f3..8e9a331 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 { ; /**/ } @@ -2417,7 +2394,7 @@ void LgcSecLogicalUnlockProc(const UINT16 logRouteId, const UINT16 logSectionId, LogsecSwitchStruct* pstLogicSecSwitchBuf = NULL; /*߼εĵṹ*/ UINT16 wTrainId = 0U; UINT16 wLgcBufIndex = 0U; - LogicSectionDataStruct *pstLgcSecInfo = GetLogicSecData(); + LogicSectionDataStructCC *pstLgcSecInfo = GetLogicSecDataCC(); LogicTrainResStruct * pstTrainResInfo = NULL; UINT8 checkPre = 0U; UINT8 chLogSecReleaseFlag = 0U; /*ȡ߼Դгͷű־*/ @@ -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,189 @@ UINT8 LogSecLockInLogRouteProcess(const UINT16 wLogRouteId,const UINT16 wLogSecI } return funcRet; -} \ No newline at end of file +} + +/* +* ҵ߼·ڵһ߼յ߼ +* ˵ 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; + +} + +/* +* ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ CI_ERROR + CI_SUCCESS +*/ +UINT8 SetLogRoutSidePrtectData(const UINT16 wLogRouteId) +{ + UINT16* pLogRouteLogSecIdBuf = NULL; + UINT16 wLogicalRouteInLogSecSum = 0u; + UINT16 i = 0u; + UINT16 j = 0u; + UINT16 wLogSecId = 0u; + LogsecSwitchStruct* pLogsecSwitchData = NULL; + UINT8 chLogsecSwitchDataNum = 0u; + UINT8 retVal = CI_ERROR; + SideProtecStru sideProtectdata = { 0u }; + + pLogRouteLogSecIdBuf = GetLogicalRouteInLogSecId(wLogRouteId); + wLogicalRouteInLogSecSum = GetLogicalRouteInLogSecSum(wLogRouteId); + + for (i = 0u; i < wLogicalRouteInLogSecSum; i++) + { + wLogSecId = pLogRouteLogSecIdBuf[i]; + /*߼IDҵ߼*/ + pLogsecSwitchData = GetLogicSecSwitchIdStru(wLogSecId); + chLogsecSwitchDataNum = GetLogicSecSwitchSum(wLogSecId); + if ((NULL != pLogsecSwitchData)&&(0u wBufIndex) + { + retVal = CI_SUCCESS; + sideProtectNum = LogicalRouteDataStru[wBufIndex].LogRouteSideProtecNum; + if (SIDE_PROTECT_NUM_MAX > sideProtectNum) + { + LogicalRouteDataStru[wBufIndex].LogRouteSideProtecData[sideProtectNum] = sideProtect; + LogicalRouteDataStru[wBufIndex].LogRouteSideProtecNum++; + } + else + { + retVal = CI_ERROR; + } + } + else + { + ; /* */ + } + return retVal; +} + + +/* +* ȡ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ +*/ +const SideProtecStru* GetLogRoutSidePrtectData(const UINT16 wLogRouteId) +{ + SideProtecStru* retVal = {0u}; + UINT16 wBufIndex = 0U; + + wBufIndex = GetLogRouteBufIndex(wLogRouteId); + + + if (ROUTE_LOGICAL_SUM_MAX > wBufIndex) + { + retVal = LogicalRouteDataStru[wBufIndex].LogRouteSideProtecData; + } + + return retVal; +} + +/* +* ȡ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ +*/ +UINT8 GetLogRoutSidePrtectDataNum(const UINT16 wLogRouteId) +{ + UINT16 wBufIndex = 0U; + UINT8 retVal = 0U; + + wBufIndex = GetLogRouteBufIndex(wLogRouteId); + + if (ROUTE_LOGICAL_SUM_MAX > wBufIndex) + { + retVal = LogicalRouteDataStru[wBufIndex].LogRouteSideProtecNum; + } + + return retVal; +} + diff --git a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h index 8addcd1..29a652b 100644 --- a/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h +++ b/TSCP/src/APP/ciapp/Route/LogicalRouteDataManage.h @@ -60,6 +60,9 @@ typedef struct S_LogicalRouteDataStruct UINT16 routeOutLogSecSum; /*·ιķǽ·ҷǵ߼ */ UINT16 routeOutLogSecSumIdBuf[MAX_ROUTE_IN_LT_NUM]; /*·ιķǽ·ҷǵ߼ID */ + UINT8 LogRouteSideProtecNum;/*·*/ + SideProtecStru LogRouteSideProtecData[SIDE_PROTECT_NUM_MAX];/*·*/ + } LogicalRouteDataStruct; /*******************************ȫֱ*******************************/ @@ -792,6 +795,40 @@ 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); +/* +* ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ CI_ERROR + CI_SUCCESS +*/ +UINT8 SetLogRoutSidePrtectData(const UINT16 wLogRouteId); +/* +* ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ CI_ERROR + CI_SUCCESS +*/ +UINT8 SaveLogRoutSidePrtectData(const UINT16 wLogRouteId, SideProtecStru sideProtect); +/* +* ȡ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ +*/ +const SideProtecStru* GetLogRoutSidePrtectData(const UINT16 wLogRouteId); +/* +* ȡ߼· +* ˵ const UINT16 wLogRouteId ߼·ID +* ֵ +*/ +UINT8 GetLogRoutSidePrtectDataNum(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..792dbfa 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 @@ -3574,4 +3524,180 @@ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId,UINT8* chCiId) } return chRetVal; +} + +/* +* ȡ· +* ˵ const UINT16 wRouteId, ·ID +* +* ֵ · +* +* BY 20250917 +*/ +UINT8 GetRouteCouplinkType(const UINT16 wRouteId) +{ + UINT8 chRetVal = 0U; + UINT16 bufIndex = 0U; + bufIndex = GetRouteConfigBufIndex(wRouteId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + chRetVal = RouteConfigDataStru[bufIndex].chRouteCouplinkType; + } + else + { + /**/ + } + + return chRetVal; +} + + +/* +* ȡָ· +* ˵ const UINT16 wRouteId, ·ID +* ֵ ز +*/ +SideProtecGroupStru GetRouteSideProtecGroupData(const UINT16 wRouteId) +{ + SideProtecGroupStru cRetVal = {0u}; + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(wRouteId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + cRetVal = RouteConfigDataStru[bufIndex].RouteSideProtecData; + } + else + { + /*޴*/ + } + + return cRetVal; +} + + +/* +* IDλ,ز +* ˵ UINT16 switchId ID + UINT8 postion λ +* ֵ +*/ +SideProtecStru GetSideProtectID(UINT16 switchId,UINT8 postion) +{ + UINT16 wSideProtecStruLen = 0u; + SideProtecStru* pSideProtecData = NULL; + UINT16 i = 0u; + SideProtecStru retVal = { 0u }; + + + wSideProtecStruLen = GetLSSideProtecStruLen(); + pSideProtecData = GetLSSideProtecData(); + if (NULL != pSideProtecData) + { + for (i = 0u; i < wSideProtecStruLen; i++) + { + if ((pSideProtecData[i].KeysSwitchID == switchId) && (pSideProtecData[i].KeysSwicthPos))/*ݹؼIDλƥ*/ + { + retVal = pSideProtecData[i]; + break; + } + } + } + return retVal; +} + +/* +* ȡ·ָķλ +* ˵ const UINT16 wRouteId, ·ID +* const UINT16 wSwitchId ID +* +* ֵ 12Ϊλ,0u Ƿֵ +* +*/ +UINT8 GetRouteThisPortecSwitchPos(const UINT16 wRouteId, const UINT16 wSwitchId) +{ + UINT8 chRetVal = 0U; + UINT16 bufIndex = 0U; + UINT8 i = 0u; + + bufIndex = GetRouteConfigBufIndex(wRouteId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + for (i = 0u; i < RouteConfigDataStru[bufIndex].RouteProtectSwitchSum; i++) + { + if (RouteConfigDataStru[bufIndex].RouteProtectSwitchStru[i].ProtectSwitchId == wSwitchId) + { + chRetVal = RouteConfigDataStru[bufIndex].RouteProtectSwitchStru[i].ProtectPosition; + break; + } + } + } + else + { + /**/ + } + + if ((SWITCH_POSITION_DINGWEI == chRetVal) || (SWITCH_POSITION_FANWEI == chRetVal)) + { + /*Уͨ*/ + } + else + { + chRetVal = 0u; + } + + return chRetVal; +} + + +/* +* ȡڽ·еλ +* ˵const UINT16 routeId ·ID +* const UINT16 phySectionId ID +* ֵROUTE_PHYSICALSECTION_SUM_MAX 16 ʧ +* λ +*/ +UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId) +{ + UINT16 retVal = ROUTE_PHYSICALSECTION_SUM_MAX; + UINT16 bufIndex = 0U; + UINT8 cIncPhySecNum = 0U; /*·*/ + UINT8 ii = 0U; + + bufIndex = GetRouteConfigBufIndex(routeId); + + if (ROUTE_SUM_MAX > bufIndex) + { + cIncPhySecNum = RouteConfigDataStru[bufIndex].RoutePhySecSum; + + if ((0U < cIncPhySecNum) && (ROUTE_PHYSICALSECTION_SUM_MAX >= cIncPhySecNum)) + { + /*Σڽ·еλ*/ + for (ii = 0U; ii < cIncPhySecNum; ii++) + { + if (phySectionId == RouteConfigDataStru[bufIndex].RoutePhySectionStru[ii].PhysicalSectionId) + { + retVal = ii; + break; + } + else + { + /**/ + } + } + } + else + { + retVal = ROUTE_PHYSICALSECTION_SUM_MAX; /*ʧ*/ + } + } + else + { + retVal = ROUTE_PHYSICALSECTION_SUM_MAX; /*ʧ*/ + } + + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h index e2e4598..dc3daaa 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h @@ -148,6 +148,40 @@ typedef struct S_Route_MainOrSub_ConfigData UINT16 RouteBelMainIdBuf[ROUTE_MAIN_BELONG_SUM_MAX];/*ӽ··ID add by cgh 20230428*/ }RouteMainOrSubConfigData; +typedef struct SideProtecSwitch_Stru +{ + UINT16 SideProtecSwitchID;/*ID*/ + UINT8 SideProtecSwitchPos;/*λ*/ +}SideProtecSwitchData; + +typedef struct SideProtecPhy_Stru +{ + UINT16 SideProtecPhySecID;/*ID*/ + UINT8 SideProtecDirect;/**/ +}SideProtecPhyData; + + + +typedef struct S__Route_SideProtec_Stru +{ + UINT16 SideProtecID;/*ID*/ + UINT16 SideProtecSignalID;/*źŻ*/ + UINT16 KeysSwitchID;/*ؼID*/ + UINT8 KeysSwicthPos;/*ؼλ*/ + SideProtecSwitchData SideProtecSwitchBuf[SIDE_PROTECT_SWITCH_NUM_MAX];/**/ + UINT8 SideProtecSwitchNum; + SideProtecPhyData SideProtecPhyBuf[SIDE_PROTECT_PHYSEC_NUM_MAX]; + UINT8 SideProtecPhyNum; +}SideProtecStru; + + +typedef struct S__Route_SideProtecGroup_Stru +{ + UINT16 GroupID;/*ID*/ + SideProtecStru RouteSideProtecBuf[SIDE_PROTECT_NUM_MAX];/*·*/ + UINT8 RouteSideProtecNum;/*·*/ +}SideProtecGroupStru; + /*·ݽṹ*/ typedef struct S_RouteConfigDataStruct { @@ -199,9 +233,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 +281,7 @@ typedef struct S_RouteConfigDataStruct RouteTriggerLogicSectionStruct CbtcTriggerLogSecStru[1]; /*CBTC·߼νṹ (ֶ)Ԥ*/ UINT16 DCRouteDCQJId;/*·̵ID*/ + UINT16 DCRouteDCQJTwoId;/*·̵2ID*/ UINT16 DCRouteTAJId;/*·ͬⰴť̵ID*/ UINT8 RouteNeedDelayUnlock; /* ·״̬/쳣/Ԥգȡ˽ҪʱֶΣ*/ @@ -282,6 +314,8 @@ typedef struct S_RouteConfigDataStruct UINT8 cCbtcProperty; /*·CBTCԣ0x55CBTC0xAACBTC*/ UINT16 wRelatedTransZFSigId; /*·ת۷źŻid δĬ0*/ UINT8 cRouteRukuProperty; /*ǷΪ·0x55 ·0xaa ·*/ + SideProtecGroupStru RouteSideProtecData;/*·*/ + UINT8 chRouteCouplinkType; /*·ԣ0x55 ԣ0xaa δ*/ }RouteConfigDataStruct; /*******************************ȫֱ*******************************/ @@ -987,6 +1021,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 +1288,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 @@ -1361,6 +1377,47 @@ UINT8 CheckRouteSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); * BY CGH 20241203 */ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); +/* +* ȡ· +* ˵ const UINT16 wRouteId, ·ID +* +* ֵ · +* +* BY 20250917 +*/ +UINT8 GetRouteCouplinkType(const UINT16 wRouteId); + +/* +* ȡָ· +* ˵ const UINT16 wRouteId, ·ID +* ֵ ز +*/ +SideProtecGroupStru GetRouteSideProtecGroupData(const UINT16 wRouteId); +/* +* IDλ,ز +* ˵ UINT16 switchId ID + UINT8 postion λ +* ֵ +*/ +SideProtecStru GetSideProtectID(UINT16 switchId, UINT8 postion); +/* +* ȡ·ָķλ +* ˵ const UINT16 wRouteId, ·ID +* const UINT16 wSwitchId ID +* +* ֵ λ +* +*/ +UINT8 GetRouteThisPortecSwitchPos(const UINT16 wRouteId, const UINT16 wSwitchId); + +/* +* ȡڽ·еλ +* ˵const UINT16 routeId ·ID +* const UINT16 phySectionId ID +* ֵROUTE_PHYSICALSECTION_SUM_MAX 16 ʧ +* λ +*/ +UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Route/RouteDataManage.c b/TSCP/src/APP/ciapp/Route/RouteDataManage.c index a11d4a7..142c54d 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteDataManage.c @@ -17,7 +17,7 @@ #include "InterlockCommonManage.h" RouteDataStruct RouteDataStru[ROUTE_SUM_MAX]; /*·ݽṹ*/ - +RouteDataStructCC RouteDataStruCC[ROUTE_SUM_MAX]; /*·ݽṹ-*/ /* * ȡָID· @@ -29,7 +29,16 @@ RouteDataStruct *GetRouteData(void) { return RouteDataStru; } - +/* +* ȡָID·- +* ˵ +* ֵ + RouteDataStruct * +*/ +RouteDataStructCC* GetRouteDataCC(void) +{ + return RouteDataStruCC; +} /* * ȡָID·״̬ @@ -123,10 +132,14 @@ UINT8 SetRouteState(const UINT16 routeId, const UINT8 routeState) RouteDataStru[bufIndex].StopKeepCheckFlag = ROUTE_STOPCHECK_SET_NO; /*·ֹͣ־*/ RouteDataStru[bufIndex].BelongLongRouteId = 0u; /*··*/ RouteDataStru[bufIndex].StopensureFlag = ROUTE_STOPENSURE_NO; /*·֤ͣ־*/ + RouteDataStruCC[bufIndex].StopensureFlag = ROUTE_STOPENSURE_NO; /*·֤ͣ־CC*/ RouteDataStru[bufIndex].RecoverOpenState = ROUTE_RECOVER_STA_INIT;/*Ҳ·ָ״̬һν·״̬ת*/ - RouteDataStru[bufIndex].cResReqOtherCIId = 0u; - RouteDataStru[bufIndex].dwFirstElockStartCycNum = 0u; + RouteDataStruCC[bufIndex].cResReqOtherCIId = 0u; + RouteDataStruCC[bufIndex].dwFirstElockStartCycNum = 0u; RouteDataStru[bufIndex].dwDelayOpenStartCycNum = 0U; /*ⱨ·ʱʼ*/ + RouteDataStru[bufIndex].chRoutCouplinkFlag = ROUTE_COUPLINK_FLAG_NO;/*·ұ־*/ + RouteDataStru[bufIndex].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*·ҳɹ־*/ + RouteDataStru[bufIndex].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*·ʧܱ־*/ ClearRouteResReqTrainBuf(routeId); } else if ((ROUTE_STATE_FIRST_XUANPAI == routeState) @@ -159,7 +172,7 @@ UINT8 SetRouteState(const UINT16 routeId, const UINT8 routeState) else if (ROUTE_STATE_DELAY_UNLOCK == routeState) { /*ʱ*/ - RouteDataStru[bufIndex].cResReqOtherCIId = 0u; + RouteDataStruCC[bufIndex].cResReqOtherCIId = 0u; ClearRouteResReqTrainBuf(routeId); RouteDataStru[bufIndex].DelayUnlockStartCycNum = dwCurCycleNum; /*ý·ʱʼں*/ } @@ -178,13 +191,16 @@ UINT8 SetRouteState(const UINT16 routeId, const UINT8 routeState) { /*Ԥȿ||ӽ||*/ RouteDataStru[bufIndex].RepeatOpenFlag = ROUTE_REPEATOPEN_SET_NO; /*·źؿ־*/ + /*ҽ·׷ҽ·źſ֮ҽ*/ + RouteDataStru[bufIndex].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*·ҳɹ־*/ + RouteDataStru[bufIndex].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*·ʧܱ־*/ } if (ROUTE_STATE_HALF_UNLOCKDELAY == routeState) { /*гȫպ󣬻гʧͨź󵹼ʱʼ״̬*/ - if (0U == RouteDataStru[bufIndex].dwFirstElockStartCycNum) + if (0U == RouteDataStruCC[bufIndex].dwFirstElockStartCycNum) { - RouteDataStru[bufIndex].dwFirstElockStartCycNum = dwCurCycleNum; /*ý·һյ߼ʱιʼں*/ + RouteDataStruCC[bufIndex].dwFirstElockStartCycNum = dwCurCycleNum; /*ý·һյ߼ʱιʼں*/ } else { @@ -2449,14 +2465,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 +2480,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 +2519,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 +2534,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; } /* @@ -2827,7 +2835,7 @@ UINT16 GetRouteStopEnassureTrainId(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].wStopEnsureTrainId; + retVal = RouteDataStruCC[bufIndex].wStopEnsureTrainId; } else { @@ -2849,7 +2857,7 @@ void SetRouteStopEnsureTrainId(const UINT16 routeId, const UINT16 wTrainId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].wStopEnsureTrainId = wTrainId; + RouteDataStruCC[bufIndex].wStopEnsureTrainId = wTrainId; } else { @@ -2872,7 +2880,7 @@ UINT16 GetRouteResourceCancelTrainId(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].wResourceCancelTrainId; + retVal = RouteDataStruCC[bufIndex].wResourceCancelTrainId; } else { @@ -2894,7 +2902,7 @@ void SetRouteResourceCancelTrainId(const UINT16 routeId, const UINT16 wTrainId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].wResourceCancelTrainId = wTrainId; + RouteDataStruCC[bufIndex].wResourceCancelTrainId = wTrainId; } else { @@ -2917,7 +2925,7 @@ UINT16 GetRouteZhefanJiesuoTrainId(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].wZhefanjiesuoTrainId; + retVal = RouteDataStruCC[bufIndex].wZhefanjiesuoTrainId; } else { @@ -2939,7 +2947,7 @@ void SetRouteZhefanJiesuoTrainId(const UINT16 routeId, const UINT16 wTrainId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].wZhefanjiesuoTrainId = wTrainId; + RouteDataStruCC[bufIndex].wZhefanjiesuoTrainId = wTrainId; } else { @@ -3279,7 +3287,7 @@ UINT8 GetRouteResReqOtherCIId(const UINT16 routeId) if (bufIndex < ROUTE_SUM_MAX) { - retVal = RouteDataStru[bufIndex].cResReqOtherCIId; + retVal = RouteDataStruCC[bufIndex].cResReqOtherCIId; } else { @@ -3304,7 +3312,7 @@ void SetRouteResReqOtherCIId(const UINT16 routeId, const UINT8 cOtherCiId) if (bufIndex < ROUTE_SUM_MAX) { - RouteDataStru[bufIndex].cResReqOtherCIId = cOtherCiId; + RouteDataStruCC[bufIndex].cResReqOtherCIId = cOtherCiId; } else { @@ -3327,7 +3335,7 @@ UINT16 * GetRouteResReqTrainIdBuf(const UINT16 routeId) if (bufIndex < ROUTE_SUM_MAX) { - retVal = RouteDataStru[bufIndex].wszResReqTrainId; + retVal = RouteDataStruCC[bufIndex].wszResReqTrainId; } else { @@ -3353,13 +3361,13 @@ void SetRouteResReqTrainId(const UINT16 routeId, const UINT16 wTrainId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (( ROUTE_SUM_MAX> bufIndex )&& (0u != wTrainId)) { - chReqTrainSum = RouteDataStru[bufIndex].chResReqTrainSum; + chReqTrainSum = RouteDataStruCC[bufIndex].chResReqTrainSum; if ((ROUTE_APPLY_RECD_TRAIN_SUM_MAX - 1U) > chReqTrainSum) { for (ii = 0U; ii < chReqTrainSum; ii++) { - if (RouteDataStru[bufIndex].wszResReqTrainId[ii] == wTrainId) + if (RouteDataStruCC[bufIndex].wszResReqTrainId[ii] == wTrainId) { break; } @@ -3371,8 +3379,8 @@ void SetRouteResReqTrainId(const UINT16 routeId, const UINT16 wTrainId) if (ii == chReqTrainSum) { - RouteDataStru[bufIndex].wszResReqTrainId[chReqTrainSum] = wTrainId; - RouteDataStru[bufIndex].chResReqTrainSum = chReqTrainSum + 1U; + RouteDataStruCC[bufIndex].wszResReqTrainId[chReqTrainSum] = wTrainId; + RouteDataStruCC[bufIndex].chResReqTrainSum = chReqTrainSum + 1U; } else { @@ -3406,11 +3414,11 @@ void ClearRouteResReqTrainBuf(const UINT16 routeId) for (ii = 0U; ii < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; ii++) { - RouteDataStru[bufIndex].wszResReqTrainId[ii] = 0; + RouteDataStruCC[bufIndex].wszResReqTrainId[ii] = 0; } - RouteDataStru[bufIndex].chResReqTrainSum = 0U; + RouteDataStruCC[bufIndex].chResReqTrainSum = 0U; } else { @@ -3434,13 +3442,13 @@ void RemoveRouteReqResTrain(UINT16 routeId, UINT16 wTrainId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX> bufIndex) { - chReqTrainSum = RouteDataStru[bufIndex].chResReqTrainSum; + chReqTrainSum = RouteDataStruCC[bufIndex].chResReqTrainSum; if ((ROUTE_APPLY_RECD_TRAIN_SUM_MAX - 1U) > chReqTrainSum) { for (ii = 0U; ii < chReqTrainSum; ii++) { - if (RouteDataStru[bufIndex].wszResReqTrainId[ii] == wTrainId) + if (RouteDataStruCC[bufIndex].wszResReqTrainId[ii] == wTrainId) { break; } @@ -3458,16 +3466,16 @@ void RemoveRouteReqResTrain(UINT16 routeId, UINT16 wTrainId) { for (jj = ii + 1U; jj < chReqTrainSum; jj++) { - RouteDataStru[bufIndex].wszResReqTrainId[jj - 1U] = RouteDataStru[bufIndex].wszResReqTrainId[jj]; + RouteDataStruCC[bufIndex].wszResReqTrainId[jj - 1U] = RouteDataStruCC[bufIndex].wszResReqTrainId[jj]; } - RouteDataStru[bufIndex].wszResReqTrainId[jj] = 0U; + RouteDataStruCC[bufIndex].wszResReqTrainId[jj] = 0U; - RouteDataStru[bufIndex].chResReqTrainSum -= 1U; + RouteDataStruCC[bufIndex].chResReqTrainSum -= 1U; - if (0u == RouteDataStru[bufIndex].chResReqTrainSum) + if (0u == RouteDataStruCC[bufIndex].chResReqTrainSum) { - RouteDataStru[bufIndex].cResReqOtherCIId = 0U; + RouteDataStruCC[bufIndex].cResReqOtherCIId = 0U; } else { @@ -3504,9 +3512,9 @@ UINT8 GetRouteResReqTrainSum(const UINT16 wRouteId) if (ROUTE_SUM_MAX > wBufIndex) { - if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX > RouteDataStru[wBufIndex].chResReqTrainSum) + if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX > RouteDataStruCC[wBufIndex].chResReqTrainSum) { - chRetVal = RouteDataStru[wBufIndex].chResReqTrainSum; + chRetVal = RouteDataStruCC[wBufIndex].chResReqTrainSum; } else { @@ -3534,7 +3542,7 @@ UINT32 GetRouteStopEnassureCyc(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].dwStopEnsureCyc; + retVal = RouteDataStruCC[bufIndex].dwStopEnsureCyc; } else { @@ -3556,7 +3564,7 @@ void SetRouteStopEnsureCyc(const UINT16 routeId, const UINT32 dwCyc) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].dwStopEnsureCyc = dwCyc; + RouteDataStruCC[bufIndex].dwStopEnsureCyc = dwCyc; } else { @@ -3578,7 +3586,7 @@ UINT32 GetRouteResourceCancelCyc(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].dwResourceCancelCyc; + retVal = RouteDataStruCC[bufIndex].dwResourceCancelCyc; } else { @@ -3600,7 +3608,7 @@ void SetRouteResourceCancelCyc(const UINT16 routeId, const UINT32 dwCyc) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].dwResourceCancelCyc = dwCyc; + RouteDataStruCC[bufIndex].dwResourceCancelCyc = dwCyc; } else { @@ -3622,7 +3630,7 @@ UINT32 GetRouteZhefanJiesuoCyc(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].dwRouteZhefanjiesuoCyc; + retVal = RouteDataStruCC[bufIndex].dwRouteZhefanjiesuoCyc; } else { @@ -3644,7 +3652,7 @@ void SetRouteZhefanJiesuoCyc(const UINT16 routeId, const UINT32 dwCyc) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].dwRouteZhefanjiesuoCyc = dwCyc; + RouteDataStruCC[bufIndex].dwRouteZhefanjiesuoCyc = dwCyc; } else { @@ -3665,10 +3673,10 @@ void SetITSRouteApplyTrainIDInfo(const UINT16 routeId, const UINT16 trainId) UINT8 trainIdSum = 0u; /** μ*/ - if ((0u < routeId) && (ROUTE_SUM_MAX > routeId) && (TRAIN_ID_MIN < trainId) && (TRAIN_ID_MAX > trainId)) + if ((0u < routeId) && (ROUTE_SUM_MAX > routeId) && (TRAIN_ID_MIN_IVOC < trainId) && (TRAIN_ID_MAX_IVOC > trainId)) { bufIndex = GetRouteConfigBufIndex(routeId); /** ȡ·±*/ - trainIdSum = RouteDataStru[bufIndex].ITSRouteApplyTrainIdSum; /** ȡITS·гID¼*/ + trainIdSum = RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdSum; /** ȡITS·гID¼*/ /** ±ϷгIDϷ*/ if (ROUTE_APPLY_RECD_TRAIN_SUM_MAX >= trainIdSum) { @@ -3676,8 +3684,8 @@ void SetITSRouteApplyTrainIDInfo(const UINT16 routeId, const UINT16 trainId) if (0u == trainIdSum) { /*δ¼гId*/ - RouteDataStru[bufIndex].ITSRouteApplyTrainIdBuf[trainIdSum] = trainId; /** ¼гID*/ - RouteDataStru[bufIndex].ITSRouteApplyTrainIdSum++; /** гID1*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdBuf[trainIdSum] = trainId; /** ¼гID*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdSum++; /** гID1*/ } /** м¼гId*/ else @@ -3687,7 +3695,7 @@ void SetITSRouteApplyTrainIDInfo(const UINT16 routeId, const UINT16 trainId) for (i = 0u; i < trainIdSum; i++) { /** ѯѼ¼гIdǷ뵱ǰ¼гIdͬ*/ - if (trainId == RouteDataStru[bufIndex].ITSRouteApplyTrainIdBuf[i]) + if (trainId == RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdBuf[i]) { break; /** Ѽ¼гId¼гIDͬѭ*/ } @@ -3701,8 +3709,8 @@ void SetITSRouteApplyTrainIDInfo(const UINT16 routeId, const UINT16 trainId) if ((i == trainIdSum) && (ROUTE_APPLY_RECD_TRAIN_SUM_MAX > trainIdSum)) { /*гIdδ¼гIDδޣ*/ - RouteDataStru[bufIndex].ITSRouteApplyTrainIdBuf[trainIdSum] = trainId; /** ¼гID*/ - RouteDataStru[bufIndex].ITSRouteApplyTrainIdSum++; /** гID1*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdBuf[trainIdSum] = trainId; /** ¼гID*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdSum++; /** гID1*/ } else { @@ -3739,7 +3747,7 @@ UINT8 GetITSRouteApplyTrainIdSum(const UINT16 routeId) { bufIndex = GetRouteConfigBufIndex(routeId); /** ȡ·±*/ /** ±Ϸ*/ - retVal = RouteDataStru[bufIndex].ITSRouteApplyTrainIdSum; /** ؼ¼гID*/ + retVal = RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdSum; /** ؼ¼гID*/ } else @@ -3767,7 +3775,7 @@ UINT16 * GetITSRouteApplyTrainIdBuf(const UINT16 routeId) { bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ /** ±Ϸ*/ - retVal = RouteDataStru[bufIndex].ITSRouteApplyTrainIdBuf; /** ؼ¼гIDָ*/ + retVal = RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdBuf; /** ؼ¼гIDָ*/ } else @@ -3794,9 +3802,9 @@ void ClearITSRouteApplyTrainIDInfo(const UINT16 routeId) /** δԽ磬гID*/ for (i = 0u; i < ROUTE_APPLY_RECD_TRAIN_SUM_MAX; i++) { - RouteDataStru[bufIndex].ITSRouteApplyTrainIdBuf[i] = 0u; /** ͨITS·¼гID*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdBuf[i] = 0u; /** ͨITS·¼гID*/ } - RouteDataStru[bufIndex].ITSRouteApplyTrainIdSum = 0u; /** ITS·гID¼*/ + RouteDataStruCC[bufIndex].ITSRouteApplyTrainIdSum = 0u; /** ITS·гID¼*/ } else @@ -4153,7 +4161,7 @@ UINT8 GetHalfRouteSwitchMoveValid(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid; } else { @@ -4179,11 +4187,11 @@ void SetHalfRouteSwitchMoveValid(const UINT16 routeId, const UINT8 switchMoveVal { if ((ROUTE_HALF_SWITCH_MOVE_VALID == switchMoveValid) || (ROUTE_HALF_SWITCH_MOVE_INVALID == switchMoveValid)) { - RouteDataStru[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid = switchMoveValid; /*ÿɶ־*/ + RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid = switchMoveValid; /*ÿɶ־*/ } else { - RouteDataStru[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid = ROUTE_HALF_SWITCH_MOVE_INVALID; + RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfRouteSwitchMoveValid = ROUTE_HALF_SWITCH_MOVE_INVALID; } } } @@ -4202,7 +4210,7 @@ UINT16 GetHalfRouteResReqTrainId(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.HalfResReqTrainId; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfResReqTrainId; } else { @@ -4228,11 +4236,11 @@ void SetHalfRouteResReqTrainId(const UINT16 routeId, const UINT16 trainId) { if ((0U != trainId) && (UINT16_MAX!= trainId)) { - RouteDataStru[bufIndex].HalfRouteDataSt.HalfResReqTrainId = trainId; /*гID*/ + RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfResReqTrainId = trainId; /*гID*/ } else { - RouteDataStru[bufIndex].HalfRouteDataSt.HalfResReqTrainId = 0U; + RouteDataStruCC[bufIndex].HalfRouteDataSt.HalfResReqTrainId = 0U; } } } @@ -4251,7 +4259,7 @@ UINT8 GetHalfRouteLockLgcSecSum(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; } else { @@ -4275,7 +4283,7 @@ UINT16 * GetHalfRouteLockLgcSecIdBuf(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf; } else { @@ -4302,21 +4310,21 @@ void SetHalfRouteLockLgcSec(const UINT16 routeId,const UINT8 lgcSecNum, const UI { if ((NULL != pLgcSecIdBuf) && (MAX_ROUTE_IN_LT_NUM > lgcSecNum)) { - (void)CommonMemSet(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf,\ - (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf),\ - 0, (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf)); + (void)CommonMemSet(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf,\ + (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf),\ + 0, (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf)); for (ii = 0U; ii < lgcSecNum; ii++) { - RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii] = pLgcSecIdBuf[ii]; + RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii] = pLgcSecIdBuf[ii]; } - RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum = lgcSecNum; + RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum = lgcSecNum; } else { - (void)CommonMemSet(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf, \ - (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf), \ - 0, (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf)); - RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum = 0U; + (void)CommonMemSet(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf, \ + (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf), \ + 0, (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf)); + RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum = 0U; } } } @@ -4335,7 +4343,7 @@ UINT8 GetHalfRouteTrainLocLgcSecNum(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; } else { @@ -4359,7 +4367,7 @@ UINT16 * GetHalfRouteTrainLocLgcSecIdBuf(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf; + reVal = RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf; } else { @@ -4386,21 +4394,21 @@ void SetHalfRouteTrainLocLgcSec(const UINT16 routeId, const UINT8 lgcSecNum, con { if ((NULL != pLgcSecIdBuf) && (ROUTE_TRAIN_LOC_MAX_LGC_SUM > lgcSecNum)) { - (void)CommonMemSet(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf, \ - (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf), \ - 0, (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf)); + (void)CommonMemSet(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf, \ + (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf), \ + 0, (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf)); for (ii = 0U; ii < lgcSecNum; ii++) { - RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii] = pLgcSecIdBuf[ii]; + RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii] = pLgcSecIdBuf[ii]; } - RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum = lgcSecNum; + RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum = lgcSecNum; } else { - (void)CommonMemSet(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf, \ - (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf), \ - 0, (UINT32)sizeof(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf)); - RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum = 0U; + (void)CommonMemSet(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf, \ + (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf), \ + 0, (UINT32)sizeof(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf)); + RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum = 0U; } } } @@ -4431,9 +4439,9 @@ UINT8 GetRouteHalfPhysicalSecData(const UINT16 routeId,OUT UINT16 szRouteHalfPhy if (ROUTE_SUM_MAX > bufIndex) { /*·߼*/ - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) { - phySecId =GetLgcSecRelativePhySecId( RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); + phySecId =GetLgcSecRelativePhySecId(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); /*ȥ*/ for (jj = 0U; jj < phySecSum; jj++) @@ -4463,7 +4471,7 @@ UINT8 GetRouteHalfPhysicalSecData(const UINT16 routeId,OUT UINT16 szRouteHalfPhy } /*ִɣδԽ*/ - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) { reVal = phySecSum; for (ii = 0U; ii < phySecSum; ii++) @@ -4516,12 +4524,12 @@ UINT8 GetRouteTrainLocPhySecData(const UINT16 routeId, OUT UINT16 szRouteTrainLo if (ROUTE_SUM_MAX > bufIndex) { /*߼*/ - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) { - funcRet = CheckLgcSecInHalfRoute(routeId, RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); /*ڲֽ·е߼βż*/ + funcRet = CheckLgcSecInHalfRoute(routeId, RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); /*ڲֽ·е߼βż*/ if (CI_SUCCESS == funcRet) { - phySecId = GetLgcSecRelativePhySecId(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); + phySecId = GetLgcSecRelativePhySecId(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); /*ȥ*/ for (jj = 0U; jj < phySecSum; jj++) { @@ -4555,7 +4563,7 @@ UINT8 GetRouteTrainLocPhySecData(const UINT16 routeId, OUT UINT16 szRouteTrainLo } /*ִɣδԽ*/ - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) { reVal = phySecSum; for (ii = 0U; ii < phySecSum; ii++) @@ -4609,10 +4617,10 @@ UINT8 GetRouteHalfProSwData(const UINT16 routeId, OUT RouteProtectSwitchStruct s { keepWork = CI_SUCCESS; /*·߼*/ - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) { - proSwSum = GetLgcRelateProSwSum( RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); - pLgcProSwStru = GetLgcRelateProSwStru(RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); + proSwSum = GetLgcRelateProSwSum(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); + pLgcProSwStru = GetLgcRelateProSwStru(RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]); if (NULL != pLgcProSwStru) { @@ -4671,7 +4679,7 @@ UINT8 GetRouteHalfProSwData(const UINT16 routeId, OUT RouteProtectSwitchStruct s } /*ִɣδԽ*/ - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) { reVal = outTmpProSwSum; for (ii = 0U; ii < outTmpProSwSum;ii++) @@ -4712,9 +4720,9 @@ UINT8 CheckLgcSecNotInTrainLoc(const UINT16 routeId,const UINT16 lgcSecId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) { - if (lgcSecId == RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]) + if (lgcSecId == RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]) { break; } @@ -4724,7 +4732,7 @@ UINT8 CheckLgcSecNotInTrainLoc(const UINT16 routeId,const UINT16 lgcSecId) } } - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) { /*δҵͬ߼*/ reVal = CI_SUCCESS; @@ -4756,9 +4764,9 @@ void SetTrainLocRouteHalfUnlock(const UINT16 routeId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) { - rLockRouteId = GetLogSecLockBelongRoute(RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); + rLockRouteId = GetLogSecLockBelongRoute(RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]); SetRouteStateManage(rLockRouteId,ROUTE_STATE_HALF_UNLOCK); } @@ -4784,9 +4792,9 @@ UINT8 CheckLgcSecHaveTrainLoc(const UINT16 routeId, const UINT16 lgcSecId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum; ii++) { - if (lgcSecId == RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]) + if (lgcSecId == RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecIdBuf[ii]) { reVal = CI_SUCCESS; break; @@ -4797,7 +4805,7 @@ UINT8 CheckLgcSecHaveTrainLoc(const UINT16 routeId, const UINT16 lgcSecId) } } - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.TrainLocLgcSecNum) { /*δҵͬ߼*/ reVal = CI_ERROR; @@ -4832,9 +4840,9 @@ UINT8 CheckLgcSecInHalfRoute(const UINT16 routeId, const UINT16 lgcSecId) bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±,󷵻MAXֵ>0*/ if (ROUTE_SUM_MAX > bufIndex) { - for (ii = 0U; ii < RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) + for (ii = 0U; ii < RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum; ii++) { - if (lgcSecId == RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]) + if (lgcSecId == RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecIdBuf[ii]) { reVal = CI_SUCCESS; break; @@ -4845,7 +4853,7 @@ UINT8 CheckLgcSecInHalfRoute(const UINT16 routeId, const UINT16 lgcSecId) } } - if (ii == RouteDataStru[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) + if (ii == RouteDataStruCC[bufIndex].HalfRouteDataSt.RouteLockLgcSecNum) { /*δҵͬ߼*/ reVal = CI_ERROR; @@ -4878,7 +4886,7 @@ UINT16 GetRouteBelongDrId(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].wBelongDrId; + retVal = RouteDataStruCC[bufIndex].wBelongDrId; } else { @@ -4903,7 +4911,7 @@ void SetRouteBelongDrId(const UINT16 routeId, const UINT16 belongDrId) if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].wBelongDrId = belongDrId; /*·̬·ID*/ + RouteDataStruCC[bufIndex].wBelongDrId = belongDrId; /*·̬·ID*/ } else { @@ -4925,7 +4933,7 @@ UINT32 GetRouFirstElockStaCycNum(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - retVal = RouteDataStru[bufIndex].dwFirstElockStartCycNum; + retVal = RouteDataStruCC[bufIndex].dwFirstElockStartCycNum; } else { @@ -4949,7 +4957,7 @@ UINT8 SetRouFirstElockStaCycNum(const UINT16 routeId, const UINT32 startCycNum) if (ROUTE_SUM_MAX > bufIndex) { - RouteDataStru[bufIndex].dwFirstElockStartCycNum = startCycNum; + RouteDataStruCC[bufIndex].dwFirstElockStartCycNum = startCycNum; retVal = CI_SUCCESS; } else @@ -5130,7 +5138,7 @@ UINT8 GetRouteNearSecFitSwIndex(const UINT16 routeId,const UINT8 nearSecIndex) } /* -* ɾ·ڱгԴ +* ɾ·гԴ * ˵ const UINT16 routeId, ·ID * const UINT16 trainId, гID * ֵ @@ -5139,23 +5147,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); } } } @@ -5560,7 +5561,7 @@ void SetRouteNearSecSearchState(UINT16 routeId, UINT8 setFlag) { if ((ROUTE_NEAR_SEC_HAVE_UT == setFlag) || (ROUTE_NEAR_SEC_NOT_HAVE_UT == setFlag)) { - RouteDataStru[bufIndex].chRouteNearSecSearchState = setFlag; + RouteDataStruCC[bufIndex].chRouteNearSecSearchState = setFlag; } else { @@ -5589,7 +5590,7 @@ UINT8 GetRouteNearSecSearchState(const UINT16 routeId) if (ROUTE_SUM_MAX > bufIndex) { - reVal = RouteDataStru[bufIndex].chRouteNearSecSearchState; + reVal = RouteDataStruCC[bufIndex].chRouteNearSecSearchState; } else { @@ -5746,4 +5747,423 @@ 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; +} + +/* +* ָ·ұ־ +* ˵const UINT16 routeId õĽ·ID +* const UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCouplinkFlag(const UINT16 routeId, const UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + if ((ROUTE_COUPLINK_FLAG_YES == setFlag) || (ROUTE_COUPLINK_FLAG_NO == setFlag)) + { + RouteDataStru[bufIndex].chRoutCouplinkFlag = setFlag; + } + else + { + /**/ + } + } + else + { + /**/ + } +} +/* +* ȡָ·ұ־ +* ˵const UINT16 routeId ·ID +* ֵ·ұ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCouplinkFlag(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 chRetVal = ROUTE_COUPLINK_FLAG_NO; + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + chRetVal = RouteDataStru[bufIndex].chRoutCouplinkFlag; + } + else + { + /**/ + } + + return chRetVal; +} + +/* +* ָ·ҳɹ־ +* ˵const UINT16 routeId õĽ·ID +* const UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCoupSuccessFlag(const UINT16 routeId, const UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + if ((ROUTE_COUPLINK_RESULT_GET == setFlag) || (ROUTE_COUPLINK_RESULT_NOT == setFlag)) + { + RouteDataStru[bufIndex].chCouplinkSuccessFlag = setFlag; + } + else + { + /**/ + } + } + else + { + /**/ + } +} +/* +* ȡָ·ҳɹ־ +* ˵const UINT16 routeId ·ID +* ֵ·ҳɹ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCoupSuccessFlag(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 chRetVal = ROUTE_COUPLINK_RESULT_NOT; + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + chRetVal = RouteDataStru[bufIndex].chCouplinkSuccessFlag; + } + else + { + /**/ + } + + return chRetVal; +} +/* +* ָ·ʧܱ־ +* ˵const UINT16 routeId õĽ·ID +* const UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCoupErrorFlag(const UINT16 routeId, const UINT8 setFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + if ((ROUTE_COUPLINK_RESULT_GET == setFlag) || (ROUTE_COUPLINK_RESULT_NOT == setFlag)) + { + RouteDataStru[bufIndex].chCouplinkErrorFlag = setFlag; + } + else + { + /**/ + } + } + else + { + /**/ + } +} +/* +* ȡָ·ʧܱ־ +* ˵const UINT16 routeId ·ID +* ֵ·ʧܱ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCoupErrorFlag(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 chRetVal = ROUTE_COUPLINK_RESULT_NOT; + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + if (ROUTE_SUM_MAX > bufIndex) + { + chRetVal = RouteDataStru[bufIndex].chCouplinkErrorFlag; + } + else + { + /**/ + } + + return chRetVal; +} +/* +* ȡָ·ҽ +* ˵const UINT16 routeId ·ID +* ֵ·ҽ +* Created 2025.09.20 +*/ +UINT8 GetRouteCoupResult(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 chRetVal = ROUTE_COUPLINK_RESULT_INVALID; + UINT8 chcommState = 0U; + UINT8* deviceIdBuf = NULL; + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (ROUTE_SUM_MAX > bufIndex) + { + deviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_ZC); /*ȡͨzc豸ID*/ + if(NULL != deviceIdBuf) + { + chcommState = GetCiTransmitState(CI_SYSTEM_TYPE_ZC, deviceIdBuf[0]); + } + else + { + chcommState = NOT_IN_TRAINSMIT_LIST; + } + + /*ZCͨжϣΪʧ*/ + if (TRANSMIT_STATE_GOOD != chcommState) + { + chRetVal = ROUTE_COUPLINK_RESULT_ERROR; + } + else + { + if ((ROUTE_COUPLINK_RESULT_GET == RouteDataStru[bufIndex].chCouplinkSuccessFlag) && (ROUTE_COUPLINK_RESULT_NOT == RouteDataStru[bufIndex].chCouplinkErrorFlag)) + { + /*ҳɹ*/ + chRetVal = ROUTE_COUPLINK_RESULT_SUCCESS; + } + else if ((ROUTE_COUPLINK_RESULT_NOT == RouteDataStru[bufIndex].chCouplinkSuccessFlag) && (ROUTE_COUPLINK_RESULT_GET == RouteDataStru[bufIndex].chCouplinkErrorFlag)) + { + chRetVal = ROUTE_COUPLINK_RESULT_ERROR; + } + else + { + /*ҽЧ*/ + } + } + + } + else + { + /**/ + } + return chRetVal; +} + +/* +* ȡָID·֤ͣ־CC +* ˵const UINT16 routeId, ·ID +* ֵ0 ȡʧ +* 0x55 ֤ͣ +* 0xaa δ֤ͣ +* Created By LQ 2025.11.05 +*/ +UINT8 GetRouteStopensureFlagCC(const UINT16 routeId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 stopensureFlag = CI_ERROR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + stopensureFlag = RouteDataStruCC[bufIndex].StopensureFlag; + } + else + { + /*ʧ*/ + } + + return stopensureFlag; +} + +/* +* ָID·֤ͣ־CC +* ˵const UINT16 routeId, ·ID +* const UINT8 stopensureFlag ֤ͣ־ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetRouteStopensureFlagCC(const UINT16 routeId, const UINT8 stopensureFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + if ((ROUTE_STOPENSURE_YES == stopensureFlag) || (ROUTE_STOPENSURE_NO == stopensureFlag)) + { + RouteDataStruCC[bufIndex].StopensureFlag = stopensureFlag; /*֤ͣ־*/ + } + else + { + /**/ + } + } + else + { + /**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/RouteDataManage.h b/TSCP/src/APP/ciapp/Route/RouteDataManage.h index 1ae84d4..bebc945 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; /*ȡ·ʱ־*/ @@ -98,35 +99,47 @@ typedef struct S_RouteDataStruct UINT8 GroupRouteCmdFlag; /*·ǷϽ·־ն·ڸ·״̬ãк*/ UINT8 AutoTriggerFlag; /*·ǷԶ*/ - UINT16 wStopEnsureTrainId; /*·֤ͣгID*/ - UINT32 dwStopEnsureCyc; /* ֤ͣѯں */ - - UINT16 wResourceCancelTrainId; /*·ԴȡгID*/ - UINT32 dwResourceCancelCyc; /* Դȡѯں */ - - UINT16 wZhefanjiesuoTrainId; /*·ӽijҪг;۷ijID*/ - UINT32 dwRouteZhefanjiesuoCyc; /*·ӽijҪг;۷ں*/ - - UINT8 cResReqOtherCIId; /*ԴID*/ - UINT8 chResReqTrainSum; - UINT16 wszResReqTrainId[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*ԴгID*/ - UINT8 ITSRouteApplyTrainIdSum; /*ITS·гID¼*/ - UINT16 ITSRouteApplyTrainIdBuf[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*ͨITS·¼гID*/ - UINT8 chShareOverlapCiId; /*ID*/ + UINT8 chShareOverlapCiId; /*ID*/ UINT8 chRouteXiansuConfirm; /*·ȷ״̬*/ - HalfRouteDataStruct HalfRouteDataSt; /*·״̬*/ - UINT16 wBelongDrId; /*̬·ID*/ - UINT32 dwFirstElockStartCycNum; /*·һյ߼ʱιʼں*/ + UINT8 cRelZuHeRouteSGBJDelayFlag; /*Ͻ·ʱű־*/ UINT32 dwDelayOpenStartCycNum; /*ⱨ·ʱʱʼ*/ UINT8 cRouteNeedDriveSGBJFlag; /*·ⱨ־0x55 Ч0xAA Ч*/ UINT8 cRouteDrivedSGBJFlag; /*·ⱨ־0x55 δ0xAA */ - UINT8 chRouteNearSecSearchState; /*·ӽ״̬*/ + UINT8 chRouteApplySwitchCheckFlag; /*·ڿ־*/ + UINT8 cRouteToLeadFlag; /*ͨ·ת·־0x55-Ч0xAA-Чӡ־*/ + UINT8 chRoutCouplinkFlag; /*·ұ־*/ + UINT8 chCouplinkSuccessFlag; /*·ҳɹ*/ + UINT8 chCouplinkErrorFlag; /*·ʧ*/ } RouteDataStruct; +/*·̬ݽṹ-*/ +typedef struct S_RouteDataStructCC +{ + UINT16 RouteId; /*·ID (ʼֶ)*/ + UINT16 wStopEnsureTrainId; /*·֤ͣгID*/ + UINT32 dwStopEnsureCyc; /*֤ͣѯں */ + UINT16 wResourceCancelTrainId; /*·ԴȡгID*/ + UINT32 dwResourceCancelCyc; /*Դȡѯں */ + UINT16 wZhefanjiesuoTrainId; /*·ӽijҪг;۷ijID*/ + UINT32 dwRouteZhefanjiesuoCyc; /*·ӽijҪг;۷ں*/ + UINT8 cResReqOtherCIId; /*ԴID*/ + UINT8 chResReqTrainSum; /*Դг*/ + UINT16 wszResReqTrainId[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*ԴгID*/ + UINT8 ITSRouteApplyTrainIdSum; /*ITS·гID¼*/ + UINT16 ITSRouteApplyTrainIdBuf[ROUTE_APPLY_RECD_TRAIN_SUM_MAX]; /*ͨITS·¼гID*/ + HalfRouteDataStruct HalfRouteDataSt; /*·״̬*/ + UINT16 wBelongDrId; /*̬·ID*/ + UINT32 dwFirstElockStartCycNum; /*·һյ߼ʱιʼں*/ + UINT8 chRouteNearSecSearchState; /*·ӽ״̬*/ + UINT8 StopensureFlag; /*֤ͣ־CC(0x55ã0xAAδ) */ +}RouteDataStructCC; + + +extern RouteDataStruct RouteDataStru[ROUTE_SUM_MAX]; /*·ݽṹ*/ +extern RouteDataStructCC RouteDataStruCC[ROUTE_SUM_MAX]; /*·ݽṹ-*/ -extern RouteDataStruct RouteDataStru[ROUTE_SUM_MAX]; /*·ݽṹ*/ /* * ȡָID· * ˵ @@ -134,6 +147,13 @@ extern RouteDataStruct RouteDataStru[ROUTE_SUM_MAX]; /* RouteDataStruct * */ RouteDataStruct *GetRouteData(void); +/* +* ȡָID·- +* ˵ +* ֵ + RouteDataStruct * +*/ +RouteDataStructCC* GetRouteDataCC(void); /* * ȡָID·״̬ @@ -799,11 +819,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 +836,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 +1655,130 @@ 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 +* UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCouplinkFlag(UINT16 routeId, UINT8 setFlag); +/* +* ȡָ·ұ־ +* ˵UINT16 routeId ·ID +* ֵ·ұ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCouplinkFlag(UINT16 routeId); +/* +* ָ·ҳɹ־ +* ˵UINT16 routeId õĽ·ID +* UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCoupSuccessFlag(UINT16 routeId, UINT8 setFlag); +/* +* ȡָ·ҳɹ־ +* ˵UINT16 routeId ·ID +* ֵ·ҳɹ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCoupSuccessFlag(UINT16 routeId); +/* +* ָ·ʧܱ־ +* ˵UINT16 routeId õĽ·ID +* UINT8 setFlag ñ־ +* ֵ +* Created 2025.09.17 +*/ +void SetRouteCoupErrorFlag(UINT16 routeId, UINT8 setFlag); + +/* +* ȡָ·ʧܱ־ +* ˵UINT16 routeId ·ID +* ֵ·ʧܱ־ +* Created 2025.09.17 +*/ +UINT8 GetRouteCoupErrorFlag(UINT16 routeId); +/* +* ȡָ·ҽ +* ˵const UINT16 routeId ·ID +* ֵ·ҽ +* Created 2025.09.20 +*/ +UINT8 GetRouteCoupResult(const UINT16 routeId); + +/* +* ȡָID·֤ͣ־CC +* ˵const UINT16 routeId, ·ID +* ֵ0 ȡʧ +* 0x55 ֤ͣ +* 0xaa δ֤ͣ +* Created By LQ 2025.11.05 +*/ +UINT8 GetRouteStopensureFlagCC(const UINT16 routeId); + +/* +* ָID·֤ͣ־CC +* ˵const UINT16 routeId, ·ID +* const UINT8 stopensureFlag ֤ͣ־ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetRouteStopensureFlagCC(const UINT16 routeId, const UINT8 stopensureFlag); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteDefine.h b/TSCP/src/APP/ciapp/Route/RouteDefine.h index 26883bb..3720948 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) /* · */ @@ -99,6 +99,7 @@ #define ROUTE_TYPE_AIRSHAFT ((UINT8)0x33) /*羮·*/ #define ROUTE_TYPE_AUTO_TRIGGER ((UINT8)0x66) /*Զ·*/ #define ROUTE_TYPE_RUKU ((UINT8)0x77) /*·*/ +#define ROUTE_TYPE_COUPLINK ((UINT8)0x88) /*ҽ·*/ /*·״̬*/ #define ROUTE_STATE_IDLE ((UINT8)0x01) /*·*/ @@ -290,6 +291,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 +344,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 +384,22 @@ #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) /*ͨ·ת·־Ч*/ + +#define ROUTE_COUPLINK_FLAG_YES ((UINT8)0x55) /*·ұ־*/ +#define ROUTE_COUPLINK_FLAG_NO ((UINT8)0xaa) /*·ұ־*/ + +#define ROUTE_COUPLINK_RESULT_GET ((UINT8)0x55) /*յҽ*/ +#define ROUTE_COUPLINK_RESULT_NOT ((UINT8)0xaa) /*δյҽ*/ + +#define ROUTE_COUPLINK_RESULT_SUCCESS ((UINT8)0x55) /*ҳɹ*/ +#define ROUTE_COUPLINK_RESULT_ERROR ((UINT8)0xaa) /*ʧ*/ +#define ROUTE_COUPLINK_RESULT_INVALID ((UINT8)0xFF) /*ҽЧ*/ + + +#define SIDE_PROTECT_SWITCH_NUM_MAX ((UINT8)5) /**/ +#define SIDE_PROTECT_PHYSEC_NUM_MAX ((UINT8)10) /**/ +#define SIDE_PROTECT_NUM_MAX ((UINT8)10) /**/ #endif diff --git a/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.c b/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.c index 5e8f5a3..ed5fbdc 100644 --- a/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.c +++ b/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.c @@ -903,4 +903,46 @@ UINT8 CheckSpksRelSecBelongCI(const UINT16 wSpksId) retVal = UINT8_MAX; } return retVal; +} + +/* +* ȡָIDSPKSӦķ̵ +* ˵ UINT16 spksId SPKS ID +* ֵ 0: ȡʧ +* >0: ̵ID +*/ +UINT16 GetSpksBuzzRelayId(UINT16 spksId) +{ + UINT16 bufIndex = 0; /*±*/ + UINT16 ret = 0; + + bufIndex = GetSpksConfigBufIndex(spksId); /*ȡ±*/ + + if (SPKS_SUM_MAX > bufIndex) + { + ret = spksDataConfigBuff[bufIndex].buzzRelayId; + } + + return ret; +} + +/* +* ȡָIDSPKSӦг̵ +* ˵ UINT16 spksId SPKS ID +* ֵ 0: ȡʧ +* >0: ̵ID +*/ +UINT16 GetSpksCutBuzzRelayId(UINT16 spksId) +{ + UINT16 bufIndex = 0; /*±*/ + UINT16 ret = 0; + + bufIndex = GetSpksConfigBufIndex(spksId); /*ȡ±*/ + + if (SPKS_SUM_MAX > bufIndex) + { + ret = spksDataConfigBuff[bufIndex].cutBuzzRelayId; + } + + return ret; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.h b/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.h index 899d9fd..f95a051 100644 --- a/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.h +++ b/TSCP/src/APP/ciapp/SPKS/SpksConfigDataManage.h @@ -39,6 +39,8 @@ typedef struct UINT16 wSpksLogSecIdBuff[SPKS_MAX_LOG_SEC_NUM]; /* spksӦķ߼б,ӵͼ */ UINT16 wSpksLogSecNum; /* spksӦķ߼ */ UINT16 wSpksRelPlatFormId; /*SPKSվ̨ID*/ + UINT16 buzzRelayId; /*̵ID*/ + UINT16 cutBuzzRelayId; /*г̵*/ } SpksDataConfigStruct; @@ -342,6 +344,20 @@ UINT8 GetAreaSnowPlatFormBelongCiId(const UINT16 wPlatFormId); * Created By LQ 2023.11.14 */ UINT8 CheckSpksRelSecBelongCI(const UINT16 wSpksId); +/* +* ȡָIDSPKSӦķ̵ +* ˵ UINT16 spksId SPKS ID +* ֵ 0: ȡʧ +* >0: ̵ID +*/ +UINT16 GetSpksBuzzRelayId(UINT16 spksId); +/* +* ȡָIDSPKSӦг̵ +* ˵ UINT16 spksId SPKS ID +* ֵ 0: ȡʧ +* >0: ̵ID +*/ +UINT16 GetSpksCutBuzzRelayId(UINT16 spksId); #ifdef __cplusplus }; 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/AxisSectionDataManage.c b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c index 368b9d7..5cbca15 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c @@ -12,7 +12,8 @@ #include "AxisSectionDataManage.h" -AxisSectionDataStruct AxisSectionDataStru[AXIS_SECTION_SUM_MAX] = { 0 }; /*ݽṹ*/ +AxisSectionDataStruct AxisSectionDataStru[AXIS_SECTION_SUM_MAX] = { 0U }; /*ݽṹ*/ +AxisSectionDataStructCC AxisSectionDataStruCC[AXIS_SECTION_SUM_MAX] = { 0U }; /*ݽṹ-*/ /* * ȡ @@ -25,6 +26,16 @@ AxisSectionDataStruct *GetAxisSecData(void) return AxisSectionDataStru; } /* +* ȡ- +* ˵ +* ֵ + AxisSectionDataStructCC* +*/ +AxisSectionDataStructCC* GetAxisSecDataCC(void) +{ + return AxisSectionDataStruCC; +} +/* * ȡָIDID * ˵ const UINT16 axisSectionId, ID * ֵ 0: ȡʧ @@ -380,7 +391,7 @@ UINT8 GetAxisOccupyState(const UINT16 axisSectionId) if (AXIS_SECTION_SUM_MAX > bufIndex ) { - retVal = AxisSectionDataStru[bufIndex].AxisOccStatus; + retVal = AxisSectionDataStruCC[bufIndex].AxisOccStatus; } else { @@ -409,13 +420,13 @@ void SetAxisOccupyState(const UINT16 axisSectionId, const UINT8 occupyState) if ((AXIS_SECTION_OCCUPY_YES == occupyState) || (AXIS_SECTION_OCCUPY_NO == occupyState)) { - AxisSectionDataStru[bufIndex].AxisOccStatus = occupyState; /*ռÿ״̬*/ + AxisSectionDataStruCC[bufIndex].AxisOccStatus = occupyState; /*ռÿ״̬*/ if (AXIS_SECTION_OCCUPY_YES == occupyState) { - if (0U == AxisSectionDataStru[bufIndex].dwAxisOccCycNum) + if (0U == AxisSectionDataStruCC[bufIndex].dwAxisOccCycNum) { - AxisSectionDataStru[bufIndex].dwAxisOccCycNum = dwCycNum; + AxisSectionDataStruCC[bufIndex].dwAxisOccCycNum = dwCycNum; } else { @@ -424,7 +435,7 @@ void SetAxisOccupyState(const UINT16 axisSectionId, const UINT8 occupyState) } else { - AxisSectionDataStru[bufIndex].dwAxisOccCycNum = 0U; + AxisSectionDataStruCC[bufIndex].dwAxisOccCycNum = 0U; } } else @@ -569,7 +580,7 @@ UINT32 GetAxisSecOccCyc(const UINT16 axisSectionId) if (AXIS_SECTION_SUM_MAX > bufIndex) { - retVal = AxisSectionDataStru[bufIndex].dwAxisOccCycNum; + retVal = AxisSectionDataStruCC[bufIndex].dwAxisOccCycNum; } else { @@ -595,7 +606,7 @@ void SetAxisPosMonitorTrainId(const UINT16 wAxisSectionId, const UINT16 wTrainId { if (TRAIN_SUM_MAX > (wTrainId & 0x00FFU)) { - AxisSectionDataStru[bufIndex].wPosMonitorTrainId = wTrainId; + AxisSectionDataStruCC[bufIndex].wPosMonitorTrainId = wTrainId; } else { @@ -624,7 +635,7 @@ UINT16 GetAxisPosMonitorTrainId(const UINT16 wAxisSectionId) if (AXIS_SECTION_SUM_MAX > bufIndex) { - wRetVal = AxisSectionDataStru[bufIndex].wPosMonitorTrainId; + wRetVal = AxisSectionDataStruCC[bufIndex].wPosMonitorTrainId; } else { @@ -649,7 +660,7 @@ UINT32 GetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId) if (AXIS_SECTION_SUM_MAX > bufIndex) { - wRetVal = AxisSectionDataStru[bufIndex].dwUtOccupyCycNum; + wRetVal = AxisSectionDataStruCC[bufIndex].dwUtOccupyCycNum; } else { @@ -672,7 +683,7 @@ void SetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId, const UINT32 dwCycNum if (AXIS_SECTION_SUM_MAX > bufIndex) { - AxisSectionDataStru[bufIndex].dwUtOccupyCycNum = dwCycNum; + AxisSectionDataStruCC[bufIndex].dwUtOccupyCycNum = dwCycNum; } else { @@ -786,4 +797,61 @@ void AxisSecUtOccpyUpdate(void) ; /**/ } } +} + +/* +* ȡָIDARB״̬CC +* ˵const UINT16 axisSectionId, ID +* ֵ0 ȡʧ +* 0x55 δARB״̬ +* 0xaa ARB +* Created By LQ 2025.11.05 +*/ +UINT8 GetAxisSecArbStateCC(const UINT16 axisSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (bufIndex < AXIS_SECTION_SUM_MAX) + { + retVal = AxisSectionDataStruCC[bufIndex].AxisArbState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָIDARB״̬CC +* ˵const UINT16 axisSectionId, ID +* const UINT8 arbState, ARB״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (bufIndex < AXIS_SECTION_SUM_MAX) + { + if ((AXIS_SECTION_ARB_NO == arbState) || (AXIS_SECTION_ARB_YES == arbState)) + { + AxisSectionDataStruCC[bufIndex].AxisArbState = arbState; /*ARB״̬*/ + } + else + { + ; /**/ + } + } + else + { + ; /**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h index 3205076..8945181 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h @@ -40,14 +40,21 @@ typedef struct S_AxisSectionDataStruct UINT32 AxisJumpLockApplyCylce; /*Ծں*/ UINT8 AxisJumpLockState; /*Ծ״̬*/ - UINT8 AxisOccStatus; /*ռ״̬ */ - UINT32 dwAxisOccCycNum; /*ռʼ*/ - UINT16 wPosMonitorTrainId; /*ιλüලЧгID*/ - UINT32 dwUtOccupyCycNum; /*ռ*/ } AxisSectionDataStruct; +/*ݽṹ-*/ +typedef struct S_AxisSectionDataStructCC +{ + UINT16 AxisSectionId; /*ID (ʼֶ)*/ + UINT8 AxisOccStatus; /*ռ״̬ */ + UINT32 dwAxisOccCycNum; /*ռʼ*/ + UINT16 wPosMonitorTrainId; /*ιλüලЧгID*/ + UINT32 dwUtOccupyCycNum; /*ռ*/ + UINT8 AxisArbState; /*ARB״̬CC(0x55-δARB0xaa-ARB)*/ +}AxisSectionDataStructCC; extern AxisSectionDataStruct AxisSectionDataStru[AXIS_SECTION_SUM_MAX]; +extern AxisSectionDataStructCC AxisSectionDataStruCC[AXIS_SECTION_SUM_MAX]; /* * ȡ * ˵ @@ -56,6 +63,13 @@ extern AxisSectionDataStruct AxisSectionDataStru[AXIS_SECTION_SUM_MAX]; */ AxisSectionDataStruct *GetAxisSecData(void); /* +* ȡ- +* ˵ +* ֵ + AxisSectionDataStructCC* +*/ +AxisSectionDataStructCC* GetAxisSecDataCC(void); +/* * ȡָIDID * ˵ const UINT16 axisSectionId, ID * ֵ 0: ȡʧ @@ -255,6 +269,24 @@ void SetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId, const UINT32 dwCycNum */ void AxisSecUtOccpyUpdate(void); +/* +* ȡָIDARB״̬CC +* ˵const UINT16 axisSectionId, ID +* ֵ0 ȡʧ +* 0x55 δARB״̬ +* 0xaa ARB +* Created By LQ 2025.11.05 +*/ +UINT8 GetAxisSecArbStateCC(const UINT16 axisSectionId); + +/* +* ָIDARB״̬CC +* ˵const UINT16 axisSectionId, ID +* const UINT8 arbState, ARB״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c index d102c02..3efd084 100644 --- a/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LinkConfigDataManage.c @@ -21,6 +21,11 @@ LinkDataConfigStru g_szLinkConfigData[LINK_SUM_MAX] = { 0u }; UINT16 g_linkNum = 0u; +TrackSecDataStruct gTrackSecConfigDataStru[TRCAK_SECTION_SUM_MAX] = { 0u };/*洢ιLINKڼ*/ +UINT16 gTrackSectionCurSum = 0u;/*洢*/ + + + /** * @brief жгռѹ߼УǷҪж߼ελ * @param const UINT16 wLgcId ߼ID @@ -2033,7 +2038,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 +2219,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 +4305,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..3426df3 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 @@ -136,9 +139,19 @@ typedef struct POINT_IN_AREA_STRU str_AreaOfPointInfo SwitchInfo[MAX_POINT_IN_AREA]; }str_PointInArea, *p_strPointInArea; +/*LINKĶӦϵ*/ +typedef struct S_TrackSecDataStruct +{ + UINT16 linkId;/*Link ID*/ + UINT32 trackSecId; +}TrackSecDataStruct; + extern LinkDataConfigStru g_szLinkConfigData[LINK_SUM_MAX]; extern UINT16 g_linkNum; +extern TrackSecDataStruct gTrackSecConfigDataStru[TRCAK_SECTION_SUM_MAX];/*洢ιLINKڼ*/ +extern UINT16 gTrackSectionCurSum;/*洢*/ + /** * @brief GetLinkNum ȡLINK * @param void @@ -728,6 +741,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..6e7bc41 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c @@ -18,8 +18,10 @@ #include "AxisAssertManageAPI.h" #include "LogicalRouteDataManage.h" #include "InterlockCommonManage.h" +#include "ParsePackZcData.h" -LogicSectionDataStruct LogicSectionDataStru[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹ*/ +LogicSectionDataStruct LogicSectionDataStru[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹ*/ +LogicSectionDataStructCC LogicSectionDataStruCC[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹ-*/ static TsrDataStruct g_TsrDataStru[TSR_MAX_SUM] = { 0u }; /*ʱ*/ static UINT8 g_TsrSum = 0u; /* ʱ */ @@ -35,7 +37,16 @@ LogicSectionDataStruct* GetLogicSecData(void) { return LogicSectionDataStru; } - +/* +* ȡ߼- +* ˵ void +* ֵ 0: ȡʧ +* >0: ߼ǰ +*/ +LogicSectionDataStructCC* GetLogicSecDataCC(void) +{ + return LogicSectionDataStruCC; +} /* * ȡָID߼֮ǰռ״̬ * ˵ const UINT16 logSectionId, ߼ID @@ -267,26 +278,22 @@ void SetLogSecMask(const UINT16 logSectionId, const UINT8 occupyStateMask) LogicSectionDataStru[bufIndex].maskCount++; if (LogicSectionDataStru[bufIndex].maskCount == 2u) { + /*õZCṹ壬ٽں*/ if (LOGIC_MASK_CT == LogicSectionDataStru[bufIndex].zcMaskData) { - SetLogSecPreOccupyState(logSectionId, GetLogSecCurCtOrUtOccupyState(logSectionId)); - SetLogSecOccupyState(logSectionId, LOGICSECTION_OCCUPY_CT); - + SetLogSecOccupyStateZc(logSectionId, LOGICSECTION_OCCUPY_CT); } else if (LOGIC_MASK_UT == LogicSectionDataStru[bufIndex].zcMaskData) { - SetLogSecPreOccupyState(logSectionId, GetLogSecCurCtOrUtOccupyState(logSectionId)); - SetLogSecOccupyState(logSectionId, LOGICSECTION_OCCUPY_UT); + SetLogSecOccupyStateZc(logSectionId, LOGICSECTION_OCCUPY_UT); } else if (LOGIC_MASK_NO == LogicSectionDataStru[bufIndex].zcMaskData) { - SetLogSecPreOccupyState(logSectionId, GetLogSecCurCtOrUtOccupyState(logSectionId)); - SetLogSecOccupyState(logSectionId, LOGICSECTION_OCCUPY_NO); + SetLogSecOccupyStateZc(logSectionId, LOGICSECTION_OCCUPY_NO); } else { /* lλ֣CT UT ͬʱ㣬ΪZCʹUTռ */ - SetLogSecPreOccupyState(logSectionId, GetLogSecCurCtOrUtOccupyState(logSectionId)); - SetLogSecOccupyState(logSectionId, LOGICSECTION_OCCUPY_UT); + SetLogSecOccupyStateZc(logSectionId, LOGICSECTION_OCCUPY_UT); } LogicSectionDataStru[bufIndex].zcMaskData = 0u; @@ -990,9 +997,9 @@ UINT8 GetLogSecTrainInfoSum(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - if (LOGIC_SECTION_RES_SUM_MAX > LogicSectionDataStru[wBufIndex].chTrainInfoSum) + if (LOGIC_SECTION_RES_SUM_MAX > LogicSectionDataStruCC[wBufIndex].chTrainInfoSum) { - chRetVal = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chRetVal = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; } else { @@ -1022,7 +1029,7 @@ LogicTrainResStruct *GetLogSecTrainInfo(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - pRetVal = (LogicTrainResStruct *)LogicSectionDataStru[wBufIndex].szTrainResData; + pRetVal = (LogicTrainResStruct *)LogicSectionDataStruCC[wBufIndex].szTrainResData; } else { @@ -1050,14 +1057,14 @@ LogicTrainResStruct *GetLogSecTrainInfoById(const UINT16 wLogSectionId, const UI if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - pRetVal = (LogicTrainResStruct *)(&LogicSectionDataStru[wBufIndex].szTrainResData[ii]); + pRetVal = (LogicTrainResStruct *)(&LogicSectionDataStruCC[wBufIndex].szTrainResData[ii]); break; } else @@ -1097,21 +1104,21 @@ void RemoveLogSecTrainInfoById(const UINT16 wLogSectionId, const UINT16 wTrnId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { ; /*ִ*/ } else { - LogicSectionDataStru[wBufIndex].szTrainResData[chNeedKeepSum++] = LogicSectionDataStru[wBufIndex].szTrainResData[ii]; + LogicSectionDataStruCC[wBufIndex].szTrainResData[chNeedKeepSum++] = LogicSectionDataStruCC[wBufIndex].szTrainResData[ii]; } } - LogicSectionDataStru[wBufIndex].chTrainInfoSum = chNeedKeepSum; + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chNeedKeepSum; } else { @@ -1319,14 +1326,14 @@ void AddLogSecTrainRes(const UINT16 wLogSectionId, const UINT16 wTrnId) } if ((NULL == pLogicSecTrainResInfo) - && ((LOGIC_SECTION_RES_SUM_MAX-1U)> LogicSectionDataStru[wBufIndex].chTrainInfoSum)) + && ((LOGIC_SECTION_RES_SUM_MAX-1U)> LogicSectionDataStruCC[wBufIndex].chTrainInfoSum)) { /*ǰ߼Ϊ·գκг*/ - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].wTrainId = wTrnId; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; - LogicSectionDataStru[wBufIndex].chTrainInfoSum += 1U; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].wTrainId = wTrnId; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum += 1U; } else { @@ -1383,14 +1390,14 @@ void AddLogSecTrainResFromCI(const UINT16 wLogSectionId, const UINT16 wTrnId) } if ((NULL == pLogicSecTrainResInfo) - && ((LOGIC_SECTION_RES_SUM_MAX - 1U)> LogicSectionDataStru[wBufIndex].chTrainInfoSum)) + && ((LOGIC_SECTION_RES_SUM_MAX - 1U)> LogicSectionDataStruCC[wBufIndex].chTrainInfoSum)) { /*ǰ߼Ϊ·գκг*/ - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].wTrainId = wTrnId; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; - LogicSectionDataStru[wBufIndex].chTrainInfoSum += 1U; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].wTrainId = wTrnId; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum += 1U; } else { @@ -1449,18 +1456,18 @@ void SetLogRouteLogSecResTrainId(const UINT16 wLogRouteId, const UINT16 wTrainId if (LOGIC_SECTION_SUM_MAX > wBufIndex) { if ((NULL == pLogicSecTrainResInfo) - && ((LOGIC_SECTION_RES_SUM_MAX - 1U) > LogicSectionDataStru[wBufIndex].chTrainInfoSum)) + && ((LOGIC_SECTION_RES_SUM_MAX - 1U) > LogicSectionDataStruCC[wBufIndex].chTrainInfoSum)) { /*ǰ߼Ϊ·գκг*/ - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].wTrainId = wTrainId; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; - LogicSectionDataStru[wBufIndex].chTrainInfoSum += 1U; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].wTrainId = wTrainId; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum += 1U; } else { - LogicSectionDataStru[wBufIndex].szTrainResData[LogicSectionDataStru[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; + LogicSectionDataStruCC[wBufIndex].szTrainResData[LogicSectionDataStruCC[wBufIndex].chTrainInfoSum].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO; } } } @@ -1484,7 +1491,7 @@ void SetLogRouteLogSecResTrainId(const UINT16 wLogRouteId, const UINT16 wTrainId void AddLogSecOtherTIOCTrainRes(const UINT16 wLogSectionId, const UINT8 cTrainSum,UINT16* pTrainId) { UINT16 bufIndex = 0u; - LogicSectionDataStruct * tmpLogicSectionDataStru = NULL; + LogicSectionDataStructCC * tmpLogicSectionDataStru = NULL; UINT8 cTmpTrainSum = 0u; LogicTrainResStruct szTmpTrainResData[LOGIC_SECTION_RES_SUM_MAX] = {0u}; UINT8 i = 0u; @@ -1492,7 +1499,7 @@ void AddLogSecOtherTIOCTrainRes(const UINT16 wLogSectionId, const UINT8 cTrainSu if ((NULL != pTrainId) && (LOGIC_SECTION_RES_SUM_MAX >= cTrainSum)) { - tmpLogicSectionDataStru = GetLogicSecData();/*᷵NULL*/ + tmpLogicSectionDataStru = GetLogicSecDataCC();/*᷵NULL*/ bufIndex = GetlogSectionBufIndex(wLogSectionId); if (LOGIC_SECTION_SUM_MAX > bufIndex) { @@ -1595,13 +1602,13 @@ void ClearLgcSecResTrain(UINT16 wLogSecId) { for (ii = 0U; ii chIndex) { - wRetVal = LogicSectionDataStru[wBufIndex].szTrainResData[chIndex].wTrainId; + wRetVal = LogicSectionDataStruCC[wBufIndex].szTrainResData[chIndex].wTrainId; } else { @@ -2093,7 +2100,7 @@ void SetLogSecTrainUseState(const UINT16 wLogSectionId, const UINT16 wTrnId,cons chLogRouteLogicLockState = GetLogSecLogLockState(wLogSectionId); if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if ((LOG_SECTION_LOCK_PROTECT == LogicSectionDataStru[wBufIndex].LogLockState) || (LOG_SECTION_LOCK_NORMAL == LogicSectionDataStru[wBufIndex].LogLockState) || (LOG_SECTION_LOCK_DELAY == LogicSectionDataStru[wBufIndex].LogLockState) @@ -2107,9 +2114,9 @@ void SetLogSecTrainUseState(const UINT16 wLogSectionId, const UINT16 wTrnId,cons { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicResUsable = chUseState; + LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicResUsable = chUseState; break; } else @@ -2134,9 +2141,9 @@ void SetLogSecTrainUseState(const UINT16 wLogSectionId, const UINT16 wTrnId,cons { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; + LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE; break; } else @@ -2181,14 +2188,14 @@ UINT8 GetLogSecTrainApply(const UINT16 wLogSectionId, const UINT16 wTrnId) || (LOG_SECTION_LOGLOCK_NORMAL == chLogRouteLogicLockState)) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - chRetVal = LogicSectionDataStru[wBufIndex].szTrainResData[ii].chTrainApplyState; + chRetVal = LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chTrainApplyState; break; } else @@ -2241,16 +2248,16 @@ void SetLogSecTrainRelease(const UINT16 wLogSectionId, const UINT16 wTrnId, cons || (LOG_SECTION_LOCK_DELAY == LogicSectionDataStru[wBufIndex].LogLockState) || (LOG_SECTION_LOGLOCK_NORMAL == wLogSecLogLockState)) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicUnlockState = LOGIC_SECTION_TRAIN_UNLOCK_YES; - LogicSectionDataStru[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc = dwCurCycNum; - LogicSectionDataStru[wBufIndex].szTrainResData[ii].chTrainLevel = chTrainlevel; + LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicUnlockState = LOGIC_SECTION_TRAIN_UNLOCK_YES; + LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc = dwCurCycNum; + LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chTrainLevel = chTrainlevel; break; } else @@ -2300,17 +2307,17 @@ UINT8 GetLogSecTrainRelease(const UINT16 wLogSectionId, const UINT16 wTrnId) || (LOG_SECTION_LOGLOCK_NORMAL == wLogSecLogLockState)) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) { /*յ Ч*/ - chRetVal = LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicUnlockState; + chRetVal = LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicUnlockState; } else { @@ -2359,16 +2366,16 @@ UINT8 GetLogSecReleaseFlag(const UINT16 wLogSectionId) || (LOG_SECTION_LOCK_DELAY == LogicSectionDataStru[wBufIndex].LogLockState)) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if ((LogicSectionDataStru[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) - &&(LOGIC_SECTION_TRAIN_UNLOCK_YES == LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicUnlockState)) + if ((LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) + &&(LOGIC_SECTION_TRAIN_UNLOCK_YES == LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicUnlockState)) { /*յ Ч*/ - chRetVal = LogicSectionDataStru[wBufIndex].szTrainResData[ii].chLogicUnlockState; + chRetVal = LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chLogicUnlockState; break; } else @@ -2420,17 +2427,17 @@ UINT8 GetLogSecReleaseTrainLevel(const UINT16 wLogSectionId, const UINT16 wTrnId || (LOG_SECTION_LOGLOCK_NORMAL == wLogSecLogLockState)) { - chTrainSum = LogicSectionDataStru[wBufIndex].chTrainInfoSum; + chTrainSum = LogicSectionDataStruCC[wBufIndex].chTrainInfoSum; if (LOGIC_SECTION_RES_SUM_MAX > chTrainSum) { for (ii = 0U; ii < chTrainSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].wTrainId == wTrnId) { - if (LogicSectionDataStru[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) + if (LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].dwRcvUnlockCmdCyc == dwCurCycNum) { /*յ Ч*/ - chRetVal = LogicSectionDataStru[wBufIndex].szTrainResData[ii].chTrainLevel; + chRetVal = LogicSectionDataStruCC[wBufIndex].szTrainResData[ii].chTrainLevel; } else { @@ -2642,7 +2649,7 @@ UINT8 GetLogSecResReqOtherCIId(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - chRetVal = LogicSectionDataStru[wBufIndex].cResReqOtherCIId; + chRetVal = LogicSectionDataStruCC[wBufIndex].cResReqOtherCIId; } else { @@ -2663,7 +2670,7 @@ void SetLogSecResReqOtherCIId(const UINT16 wLogSectionId, const UINT8 cOtherId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - LogicSectionDataStru[wBufIndex].cResReqOtherCIId = cOtherId; + LogicSectionDataStruCC[wBufIndex].cResReqOtherCIId = cOtherId; } else { @@ -2686,7 +2693,7 @@ UINT16 GetLogSecResReqTrainId(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - chRetVal = LogicSectionDataStru[wBufIndex].wResReqTrainId; + chRetVal = LogicSectionDataStruCC[wBufIndex].wResReqTrainId; } else { @@ -2707,7 +2714,7 @@ void SetLogSecResReqTrainId(const UINT16 wLogSectionId, const UINT16 wTrainId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - LogicSectionDataStru[wBufIndex].wResReqTrainId = wTrainId; + LogicSectionDataStruCC[wBufIndex].wResReqTrainId = wTrainId; } else { @@ -2764,24 +2771,24 @@ void SetAllLgcOccupyState(void) chLgcStatus = ssp_GetSecStatus(wLgcId); if (STATUS_CT == chLgcStatus) {/* ߼VBTCռãͨų */ - SetLogSecOccupyState(wLgcId, LOGICSECTION_OCCUPY_CT); - SetLogSecTXOccupyState(wLgcId, LOGICSECTION_OCCUPY_TX); + SetLogSecOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_CT); + SetLogSecTXOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_TX); } else if (STATUS_FREE == chLgcStatus) {/* ߼οУͨų */ - SetLogSecOccupyState(wLgcId, LOGICSECTION_OCCUPY_NO); - SetLogSecTXOccupyState(wLgcId, LOGICSECTION_OCCUPY_NO_TX); + SetLogSecOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_NO); + SetLogSecTXOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_NO_TX); } else if(STATUS_AT == chLgcStatus) {/* ߼ͨRMռãUTͨų */ - SetLogSecOccupyState(wLgcId, LOGICSECTION_OCCUPY_UT); - SetLogSecTXOccupyState(wLgcId, LOGICSECTION_OCCUPY_TX); + SetLogSecOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_UT); + SetLogSecTXOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_TX); } else {/* ߼UTռ */ - SetLogSecOccupyState(wLgcId, LOGICSECTION_OCCUPY_UT); - SetLogSecTXOccupyState(wLgcId, LOGICSECTION_OCCUPY_NO_TX); + SetLogSecOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_UT); + SetLogSecTXOccupyStateCC(wLgcId, LOGICSECTION_OCCUPY_NO_TX); } } } @@ -2805,7 +2812,7 @@ UINT8 GetLogSecResShareFlag(const UINT16 wLgcSecId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /*ش洢±*/ - funRetVal = LogicSectionDataStru[bufIndex].chResShareFlag; + funRetVal = LogicSectionDataStruCC[bufIndex].chResShareFlag; } else { @@ -2835,7 +2842,7 @@ void SetLogSecResShareFlag(const UINT16 wLgcSecId, const UINT8 chShrFlag) (LOGIC_SECTION_RES_SHARE_NO == chShrFlag)) { /*ñ־λ*/ - LogicSectionDataStru[bufIndex].chResShareFlag = chShrFlag; /*߼ιԴ־*/ + LogicSectionDataStruCC[bufIndex].chResShareFlag = chShrFlag; /*߼ιԴ־*/ } else { @@ -2863,9 +2870,9 @@ void RemoveLgcSecResTrain(UINT16 wLogSecId, UINT16 wTrainId) UINT16 wLgcBufIndex = 0U; UINT8 chNeedKeepSum = 0U; - LogicSectionDataStruct *pstLgcSecInfo = NULL; + LogicSectionDataStructCC *pstLgcSecInfo = NULL; chLgcResTrainSum = GetLogSecTrainInfoSum(wLogSecId); - pstLgcSecInfo = GetLogicSecData(); + pstLgcSecInfo = GetLogicSecDataCC(); wLgcBufIndex = GetlogSectionBufIndex(wLogSecId); if ((NULL!=pstLgcSecInfo) &&(CI_ERROR != chLgcResTrainSum)) @@ -3052,10 +3059,11 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt UINT8 cLogSecSwitchSum = 0u; LogsecSwitchStruct* pLgcSecSwitchStru = NULL; UINT8 cLogSecPosFlag = FLAG_UNSET; /*߼ζλ־*/ + UINT8 cWorkMode = 0U; /*ģʽ*/ if ((TSR_MAX_SUM >= cTsrSum) && (NULL != pTsrData)) { - + cWorkMode = GetLocalRcWorkMode(); /* ȫʱϢ */ if (0xAAu == cAllLineTsrState) { @@ -3099,7 +3107,14 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt { /* жǷʱ */ cRetVal = IsInTsrLogSecIdBuf(wLogSecId); - cLogSecTsrState = GetLogSecLinShiXianSuSetState(wLogSecId); + if (RC_WORK_MODE_TIOC == cWorkMode) + { + cLogSecTsrState = GetLogSecLinShiXianSuStateCC(wLogSecId); + } + else + { + cLogSecTsrState = GetLogSecLinShiXianSuStateZc(wLogSecId); + } /*ʱ*/ if (0U != cRetVal) { @@ -3108,8 +3123,18 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt /* Ҫʱ */ if (LOGSEC_LSXS_SET_STATE_YES != cLogSecTsrState) { - SetLogSecLinShiXianSuState(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); + if (RC_WORK_MODE_TIOC == cWorkMode) + { + SetLogSecLinShiXianSuStateCC(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); /*RC߼ʱ״̬*/ + } + else + { + SetLogSecLinShiXianSuStateZc(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); /*ZC߼ʱ״̬*/ + } + /*ںںʱ·ȷ״̬*/ +#if 0 ClearLgcSecBelongRtXsCfm(wLogSecId); +#endif } } else @@ -3138,8 +3163,18 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt if ((FLAG_UNSET == cLogSecPosFlag) && (LOGSEC_LSXS_SET_STATE_YES != cLogSecTsrState)) { /*߼δλʱٱ־Чʱٱ־Ч*/ - SetLogSecLinShiXianSuState(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); + if (RC_WORK_MODE_TIOC == cWorkMode) + { + SetLogSecLinShiXianSuStateCC(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); /*RC߼ʱ״̬*/ + } + else + { + SetLogSecLinShiXianSuStateZc(wLogSecId, LOGSEC_LSXS_SET_STATE_YES); /*ZC߼ʱ״̬*/ + } + /*ںںʱ·ȷ״̬*/ +#if 0 ClearLgcSecBelongRtXsCfm(wLogSecId); /*ʱȷ״̬*/ +#endif } else { @@ -3156,7 +3191,14 @@ UINT8 SetLocalTsrData(UINT8 cTsrSum, TsrDataStruct* pTsrData,UINT8 cAllLineTsrSt /*δʱȫʱЧ߼ʱЧ*/ if (LOGSEC_LSXS_SET_STATE_NO != cLogSecTsrState) { - SetLogSecLinShiXianSuState(wLogSecId, LOGSEC_LSXS_SET_STATE_NO); + if (RC_WORK_MODE_TIOC == cWorkMode) + { + SetLogSecLinShiXianSuStateCC(wLogSecId, LOGSEC_LSXS_SET_STATE_NO); /*RC߼ʱ״̬*/ + } + else + { + SetLogSecLinShiXianSuStateZc(wLogSecId, LOGSEC_LSXS_SET_STATE_NO); /*ZC߼ʱ״̬*/ + } } } } @@ -3194,7 +3236,7 @@ UINT16 GetLogSecJumpLockTrainId(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ȡͷԾгID */ - retVal = LogicSectionDataStru[bufIndex].JumpLockTrainId; + retVal = LogicSectionDataStruCC[bufIndex].JumpLockTrainId; } else { @@ -3222,11 +3264,11 @@ void SetLogSecJumpLockTrainId(const UINT16 logSectionId, const UINT16 trainId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** гͷŹԾ */ - if (((TRAIN_ID_MIN < trainId) && (TRAIN_ID_MAX > trainId)) - && (0u == LogicSectionDataStru[bufIndex].JumpLockTrainId)) + if (((TRAIN_ID_MIN_IVOC < trainId) && (TRAIN_ID_MAX_IVOC > trainId)) + && (0u == LogicSectionDataStruCC[bufIndex].JumpLockTrainId)) { /** ͷԾгID */ - LogicSectionDataStru[bufIndex].JumpLockTrainId = trainId; + LogicSectionDataStruCC[bufIndex].JumpLockTrainId = trainId; } else { @@ -3256,7 +3298,7 @@ void ClearLogSecJumpLockTrainId(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ԾгID */ - LogicSectionDataStru[bufIndex].JumpLockTrainId = 0u; + LogicSectionDataStruCC[bufIndex].JumpLockTrainId = 0u; } else { @@ -3285,7 +3327,7 @@ UINT8 JudgeLogSecJumpLockRelTrainId(const UINT16 logSectionId, const UINT16 trai if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ԾͷггIDͬ */ - if ((TRAIN_ID_MIN < trainId) && (TRAIN_ID_MAX > trainId)) + if ((TRAIN_ID_MIN_IVOC < trainId) && (TRAIN_ID_MAX_IVOC > trainId)) { logSecTrainId = GetLogSecJumpLockTrainId(logSectionId); if (trainId == logSecTrainId) @@ -3489,7 +3531,7 @@ UINT8 GetLogSecJumpLockState(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { - retVal = LogicSectionDataStru[bufIndex].LogJumpLockState; /*߼Ծ״̬*/ + retVal = LogicSectionDataStruCC[bufIndex].LogJumpLockState; /*߼Ծ״̬*/ } else { @@ -3515,7 +3557,7 @@ void SetLogSecJumpLockState(const UINT16 logSectionId, const UINT8 jumpLockState { if ((LOGIC_SECTION_JUMP_LOCK_NO == jumpLockState) || (LOGIC_SECTION_JUMP_LOCK_YES == jumpLockState)) { - LogicSectionDataStru[bufIndex].LogJumpLockState = jumpLockState; /*߼Ծ״̬*/ + LogicSectionDataStruCC[bufIndex].LogJumpLockState = jumpLockState; /*߼Ծ״̬*/ } else { @@ -3546,7 +3588,7 @@ UINT32 GetLogSecJumpDelayUnlocStartCyc(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ȡ߼Ծʱʼں */ - retVal = LogicSectionDataStru[bufIndex].LogSecJumpDelayUnlockStartCyc; + retVal = LogicSectionDataStruCC[bufIndex].LogSecJumpDelayUnlockStartCyc; } else { @@ -3575,7 +3617,7 @@ void SetLogSecJumpDelayUnlocStartCyc(const UINT16 logSectionId, const UINT32 sta if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ߼Ծʱʼں */ - LogicSectionDataStru[bufIndex].LogSecJumpDelayUnlockStartCyc = startCycNum; + LogicSectionDataStruCC[bufIndex].LogSecJumpDelayUnlockStartCyc = startCycNum; } else { @@ -3601,7 +3643,7 @@ UINT8 GetLogSecJumpDelayUnlockFlag(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ȡ߼Ծʱʼں */ - retVal = LogicSectionDataStru[bufIndex].LogJumpLockDelayUnlockFlag; + retVal = LogicSectionDataStruCC[bufIndex].LogJumpLockDelayUnlockFlag; } else { @@ -3633,7 +3675,7 @@ void SetLogSecJumpDelayUnlockFlag(const UINT16 logSectionId, const UINT8 jumpDel if ((LOGIC_JUMPUNLOCK_DELAY_SET_NO == jumpDelayUnlockFlag) || (LOGIC_JUMPUNLOCK_DELAY_SET_YES == jumpDelayUnlockFlag)) { /** ߼Ծʱñ־ */ - LogicSectionDataStru[bufIndex].LogJumpLockDelayUnlockFlag = jumpDelayUnlockFlag; + LogicSectionDataStruCC[bufIndex].LogJumpLockDelayUnlockFlag = jumpDelayUnlockFlag; } else { @@ -3664,7 +3706,7 @@ UINT8 GetLogSecJumpLockPermFlag(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ȡ߼Ծ־ */ - retVal = LogicSectionDataStru[bufIndex].LogSecJumpLockPermFlag; + retVal = LogicSectionDataStruCC[bufIndex].LogSecJumpLockPermFlag; } else { @@ -3696,7 +3738,7 @@ void SetLogSecJumpLockPermFlag(const UINT16 logSectionId, const UINT8 jumpLockPe if ((LOGIC_JUMPUNLOCK_PERMISSIVE_YES == jumpLockPermFlag) || (LOGIC_JUMPUNLOCK_PERMISSIVE_NO == jumpLockPermFlag)) { /** ߼Ծʱñ־ */ - LogicSectionDataStru[bufIndex].LogSecJumpLockPermFlag = jumpLockPermFlag; + LogicSectionDataStruCC[bufIndex].LogSecJumpLockPermFlag = jumpLockPermFlag; } else { @@ -4358,7 +4400,7 @@ UINT32 GetLogDelayErrlockStartCycNum(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { - retVal = LogicSectionDataStru[bufIndex].LogErrlockStartCycNum; + retVal = LogicSectionDataStruCC[bufIndex].LogErrlockStartCycNum; } else { @@ -4382,13 +4424,13 @@ void SetLogDelayErrlockStartCycNum(const UINT16 logSectionId, const UINT32 start { if (0U == startCycNum) { - LogicSectionDataStru[bufIndex].LogErrlockStartCycNum = 0U; + LogicSectionDataStruCC[bufIndex].LogErrlockStartCycNum = 0U; } else { - if (0U == LogicSectionDataStru[bufIndex].LogErrlockStartCycNum) + if (0U == LogicSectionDataStruCC[bufIndex].LogErrlockStartCycNum) { - LogicSectionDataStru[bufIndex].LogErrlockStartCycNum = startCycNum; + LogicSectionDataStruCC[bufIndex].LogErrlockStartCycNum = startCycNum; } else { @@ -4693,7 +4735,7 @@ UINT8 GetLogSecLockBelLogRouteSum(const UINT16 wLgcId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - retVal = LogicSectionDataStru[wBufIndex].chLogSecLockBelLogRouteSum; + retVal = LogicSectionDataStruCC[wBufIndex].chLogSecLockBelLogRouteSum; } else { @@ -4718,7 +4760,7 @@ LogSecLockBelLogRouteStruct* GetLogSecLockBelLogRouteData(const UINT16 wLgcId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - pRetVal = LogicSectionDataStru[wBufIndex].szLogSecLockBelLogRouteData; + pRetVal = LogicSectionDataStruCC[wBufIndex].szLogSecLockBelLogRouteData; } else { @@ -4749,8 +4791,8 @@ UINT8 CheckLogRouteIdBelLogSec(const UINT16 logSectionId, const UINT16 wLogRoute if (LOGIC_SECTION_SUM_MAX > bufIndex) { - logRoutBuf = LogicSectionDataStru[bufIndex].szLogSecLockBelLogRouteData; - logRoutSum = LogicSectionDataStru[bufIndex].chLogSecLockBelLogRouteSum; + logRoutBuf = LogicSectionDataStruCC[bufIndex].szLogSecLockBelLogRouteData; + logRoutSum = LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum; for (ii = 0U; ii < logRoutSum; ii++) { if (logRoutBuf[ii].wLogSecLockBelLogRouteId == wLogRouteId) @@ -4793,13 +4835,13 @@ UINT8 DelLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout if (LOGIC_SECTION_SUM_MAX > bufIndex) { - logRoutBuf = LogicSectionDataStru[bufIndex].szLogSecLockBelLogRouteData; - logRoutSum = LogicSectionDataStru[bufIndex].chLogSecLockBelLogRouteSum; + logRoutBuf = LogicSectionDataStruCC[bufIndex].szLogSecLockBelLogRouteData; + logRoutSum = LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum; if (LOGSEC_RELATE_ROUTE_SUM_MAX >= logRoutSum) { for (ii = 0U; ii < logRoutSum; ii++) { - if (LogicSectionDataStru[bufIndex].szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId == wLogRouteId) + if (LogicSectionDataStruCC[bufIndex].szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId == wLogRouteId) { ; /*ִ*/ } @@ -4811,7 +4853,7 @@ UINT8 DelLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout } /* 0ֹ*/ (void)ComMemSet(&logRoutBuf[chNeedKeepSum], (UINT16)sizeof(LogSecLockBelLogRouteStruct), 0U); - LogicSectionDataStru[bufIndex].chLogSecLockBelLogRouteSum = chNeedKeepSum;/*޸߼·*/ + LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum = chNeedKeepSum;/*޸߼·*/ retVal = CI_SUCCESS; } else @@ -4847,14 +4889,14 @@ UINT8 AddLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout if (LOGIC_SECTION_SUM_MAX > bufIndex) { - logRoutSum = LogicSectionDataStru[bufIndex].chLogSecLockBelLogRouteSum; + logRoutSum = LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum; if (LOGSEC_RELATE_ROUTE_SUM_MAX > logRoutSum) { - logRoutBuf = LogicSectionDataStru[bufIndex].szLogSecLockBelLogRouteData; + logRoutBuf = LogicSectionDataStruCC[bufIndex].szLogSecLockBelLogRouteData; logRoutBuf[logRoutSum].wLogSecLockBelLogRouteId = wLogRouteId; logRoutBuf[logRoutSum].wLogSecLockBelLogRouteId = 0U; logRoutBuf[logRoutSum].chLogSecLockBelLogRouteState = LOG_SECTION_LOGLOCK_NO; - LogicSectionDataStru[bufIndex].chLogSecLockBelLogRouteSum++; + LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum++; retVal = CI_SUCCESS; } else @@ -4889,7 +4931,7 @@ UINT8 GetLogSecLogLockState(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - retVal = LogicSectionDataStru[wBufIndex].LogSecLogLockState; + retVal = LogicSectionDataStruCC[wBufIndex].LogSecLogLockState; } else { @@ -4916,7 +4958,7 @@ UINT8 GetLogSecLogLockDir(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - retVal = LogicSectionDataStru[wBufIndex].LogSecLogLockDir; + retVal = LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir; } else { @@ -4944,8 +4986,8 @@ void SetLogSecLogLockState(const UINT16 wLogSectionId, const UINT8 chLogLockStat { if (LOG_SECTION_LOGLOCK_NO == chLogLockState) { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = 0U; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = 0U; LogSecLockBelongRouteId = GetLogSecLockBelongRoute(wLogSectionId); if (0U != LogSecLockBelongRouteId) @@ -4954,27 +4996,28 @@ void SetLogSecLogLockState(const UINT16 wLogSectionId, const UINT8 chLogLockStat } else { - LogicSectionDataStru[wBufIndex].chTrainInfoSum = 0U; - (void)CommonMemSet(LogicSectionDataStru[wBufIndex].szTrainResData, \ - (UINT32)sizeof(LogicSectionDataStru[wBufIndex].szTrainResData), \ - 0U, (UINT32)sizeof(LogicSectionDataStru[wBufIndex].szTrainResData)); + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = 0U; + (void)CommonMemSet(LogicSectionDataStruCC[wBufIndex].szTrainResData, \ + (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData), \ + 0U, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData)); } } else if (LOG_SECTION_LOGLOCK_NORMAL == chLogLockState) { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = chLogLockDir; } else if (LOG_SECTION_LOGLOCK_EXCEPT == chLogLockState) - { /**/ - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + { + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = chLogLockDir; + + SetLogSecRelAllLogRouteState(wLogSectionId); } else { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + ; /*ɴ֧*/ } } else @@ -5090,13 +5133,13 @@ void SetLogSecRelateLogRouteData(const UINT16 wLogRouteId, const UINT16 wLogSecI if ((LOGIC_SECTION_SUM_MAX > wBufIndex)&& (0U != wLogRouteId)) { - chLogSecRelateLogRouteSum = LogicSectionDataStru[wBufIndex].chLogSecLockBelLogRouteSum; + chLogSecRelateLogRouteSum = LogicSectionDataStruCC[wBufIndex].chLogSecLockBelLogRouteSum; if (LOGSEC_RELATE_ROUTE_SUM_MAX > chLogSecRelateLogRouteSum) { for (ii = 0U; ii < chLogSecRelateLogRouteSum; ii++) { - if (LogicSectionDataStru[wBufIndex].szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId == wLogRouteId) + if (LogicSectionDataStruCC[wBufIndex].szLogSecLockBelLogRouteData[ii].wLogSecLockBelLogRouteId == wLogRouteId) { break; } @@ -5108,8 +5151,8 @@ void SetLogSecRelateLogRouteData(const UINT16 wLogRouteId, const UINT16 wLogSecI if (chLogSecRelateLogRouteSum == ii) { - LogicSectionDataStru[wBufIndex].szLogSecLockBelLogRouteData[chLogSecRelateLogRouteSum].wLogSecLockBelLogRouteId = wLogRouteId; - LogicSectionDataStru[wBufIndex].chLogSecLockBelLogRouteSum = chLogSecRelateLogRouteSum + 1U; + LogicSectionDataStruCC[wBufIndex].szLogSecLockBelLogRouteData[chLogSecRelateLogRouteSum].wLogSecLockBelLogRouteId = wLogRouteId; + LogicSectionDataStruCC[wBufIndex].chLogSecLockBelLogRouteSum = chLogSecRelateLogRouteSum + 1U; } else { @@ -5147,15 +5190,15 @@ void SetLogSecLogLockStateOtherCi(const UINT16 wLogSectionId, const UINT8 chLogL { if (LOG_SECTION_LOGLOCK_NO == chLogLockState) { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = 0U; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = 0U; cLogSecLockState = GetLogSecLockState(wLogSectionId); if (LOG_SECTION_LOCK_NO == cLogSecLockState) { /*·պ߼վδգ߼ԴгϢ*/ - LogicSectionDataStru[wBufIndex].chTrainInfoSum = 0U; - (void)CommonMemSet(LogicSectionDataStru[wBufIndex].szTrainResData, (UINT32)sizeof(LogicSectionDataStru[wBufIndex].szTrainResData), 0U, (UINT32)sizeof(LogicSectionDataStru[wBufIndex].szTrainResData)); + LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = 0U; + (void)CommonMemSet(LogicSectionDataStruCC[wBufIndex].szTrainResData, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData), 0U, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData)); } else { @@ -5164,13 +5207,13 @@ void SetLogSecLogLockStateOtherCi(const UINT16 wLogSectionId, const UINT8 chLogL } else if (LOG_SECTION_LOGLOCK_NORMAL == chLogLockState) { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = chLogLockDir; } else if (LOG_SECTION_LOGLOCK_EXCEPT == chLogLockState) { - LogicSectionDataStru[wBufIndex].LogSecLogLockState = chLogLockState; - LogicSectionDataStru[wBufIndex].LogSecLogLockDir = chLogLockDir; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockState = chLogLockState; + LogicSectionDataStruCC[wBufIndex].LogSecLogLockDir = chLogLockDir; } else { @@ -5178,7 +5221,7 @@ void SetLogSecLogLockStateOtherCi(const UINT16 wLogSectionId, const UINT8 chLogL } /*߼·ڿֽ·׷߼·ֽ·߼ʱ߼·Ϊ1Added By LQ 2025.03.10*/ - LogicSectionDataStru[wBufIndex].chLogSecLockBelLogRouteSum = cLogLockBelLogRouteSum; + LogicSectionDataStruCC[wBufIndex].chLogSecLockBelLogRouteSum = cLogLockBelLogRouteSum; } else { @@ -5295,7 +5338,7 @@ UINT8 GetLogSecAblUseFlag(const UINT16 logSectionId) if (LOGIC_SECTION_SUM_MAX > bufIndex) { /** ȡABLг߼ʹñ־ */ - retVal = LogicSectionDataStru[bufIndex].chAblRelLogSecUsableFlag; + retVal = LogicSectionDataStruCC[bufIndex].chAblRelLogSecUsableFlag; } else { @@ -5327,7 +5370,7 @@ void SetLogSecAblUseFlag(const UINT16 logSectionId, const UINT8 ablUseFlag) if ((LOGIC_ABLNEAR_USE_FLAG_YES == ablUseFlag) || (LOGIC_ABLNEAR_USE_FLAG_NO == ablUseFlag)) { /** ָID߼ABLӽñ־*/ - LogicSectionDataStru[bufIndex].chAblRelLogSecUsableFlag = ablUseFlag; + LogicSectionDataStruCC[bufIndex].chAblRelLogSecUsableFlag = ablUseFlag; } else { @@ -5537,7 +5580,7 @@ void SetRouteLeaveLogSecFlag(UINT16 wLogSectionId, UINT8 setFlag) { if ((LOGSEC_LEAVE_LOGSEC_REPLY_YES == setFlag) || (LOGSEC_LEAVE_LOGSEC_REPLY_NO == setFlag)) { - LogicSectionDataStru[wBufIndex].cRouteLeaveLogFlag = setFlag; + LogicSectionDataStruCC[wBufIndex].cRouteLeaveLogFlag = setFlag; } } @@ -5558,7 +5601,7 @@ UINT8 GetRouteLeaveLogFlag(const UINT16 wLogSectionId) if (LOGIC_SECTION_SUM_MAX > wBufIndex) { - wRetVal = LogicSectionDataStru[wBufIndex].cRouteLeaveLogFlag; /*߼εABLг־*/ + wRetVal = LogicSectionDataStruCC[wBufIndex].cRouteLeaveLogFlag; /*߼εABLг־*/ } else { @@ -5583,8 +5626,8 @@ UINT8 GetLogSecLockBelLogRouteBuf(const UINT16 wLgcId,OUT LogSecLockBelLogRouteS if ((LOGIC_SECTION_SUM_MAX > wBufIndex) && (NULL != szLogSecLockBelLogRouteData)) { - chReval = LogicSectionDataStru[wBufIndex].chLogSecLockBelLogRouteSum; - (void)CommonMemCpy((void*)(szLogSecLockBelLogRouteData), (UINT32)(LOGSEC_RELATE_ROUTE_SUM_MAX * (UINT32)sizeof(LogSecLockBelLogRouteStruct)), (void*)(LogicSectionDataStru[wBufIndex].szLogSecLockBelLogRouteData), (UINT32)(LOGSEC_RELATE_ROUTE_SUM_MAX * (UINT32)sizeof(LogSecLockBelLogRouteStruct))); + chReval = LogicSectionDataStruCC[wBufIndex].chLogSecLockBelLogRouteSum; + (void)CommonMemCpy((void*)(szLogSecLockBelLogRouteData), (UINT32)(LOGSEC_RELATE_ROUTE_SUM_MAX * (UINT32)sizeof(LogSecLockBelLogRouteStruct)), (void*)(LogicSectionDataStruCC[wBufIndex].szLogSecLockBelLogRouteData), (UINT32)(LOGSEC_RELATE_ROUTE_SUM_MAX * (UINT32)sizeof(LogSecLockBelLogRouteStruct))); } else { @@ -5730,4 +5773,311 @@ 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 + { + + } +} + +/* +* ߼νʱ +* ˵const UINT16 wLogSectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 20250916 +*/ +void SetLogSecEmergXianSu(const UINT16 wLogSectionId,const UINT8 chExiansuState) +{ + UINT16 wBufIndex = 0U; /*±*/ + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*ȡ±*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + if ((LOGSEC_EMERG_XS_SET_NO == chExiansuState)|| (LOGSEC_EMERG_XS_SET_YES == chExiansuState)) + { + LogicSectionDataStru[wBufIndex].chLogSecEmergXianSu = chExiansuState; + } + else + { + /**/ + } + + } + else + { + /**/ + } + +} + +/* +* ȡ߼νʱ +* ˵UINT16 wLogSectionId ߼ID +* ֵʱ״̬ +* by 20250916d +*/ +UINT8 GetLogSecEmergXianSu(const UINT16 wLogSectionId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chExiansuState = LOGSEC_EMERG_XS_SET_YES; + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*ȡ±*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + chExiansuState = LogicSectionDataStru[wBufIndex].chLogSecEmergXianSu; + } + else + { + /**/ + } + + return chExiansuState; +} +/* +* ߼νʱ +* ˵const UINT16 wLogSectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 20250916 +*/ +void SetLogEmergXianSuOtherCi(const UINT16 wLogSectionId, const UINT8 chExiansuState) +{ + UINT16 wBufIndex = 0U; /*±*/ + wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*ȡ±*/ + if (LOGIC_SECTION_SUM_MAX > wBufIndex) + { + if ((LOGSEC_EMERG_XS_SET_YES != LogicSectionDataStru[wBufIndex].chLogSecEmergXianSu) && (LOGSEC_EMERG_XS_SET_YES == chExiansuState)) + { + ClearLgcSecBelongRtXsCfm(wLogSectionId); + } + else + { + /**/ + } + if ((LOGSEC_EMERG_XS_SET_NO == chExiansuState) || (LOGSEC_EMERG_XS_SET_YES == chExiansuState)) + { + LogicSectionDataStru[wBufIndex].chLogSecEmergXianSu = chExiansuState; + } + else + { + /**/ + } + + } + else + { + /**/ + } + +} + +/* +* ȡָID߼ʱ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0: ȡʧ +* 0x55 δʱ +* 0xAA ʱ +* 0xFF ʱЧ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecLinShiXianSuStateCC(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 cRetVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + cRetVal = LogicSectionDataStruCC[bufIndex].LinShiXianSuSetFlag; + } + else + { + cRetVal = CI_ERROR; + } + + return cRetVal; +} + +/* +* ָID߼ʱ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 linShiXianSuSetState, ʱ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecLinShiXianSuStateCC(const UINT16 logSectionId, const UINT8 linShiXianSuSetState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ߼±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGSEC_LSXS_SET_STATE_NO == linShiXianSuSetState) || + (LOGSEC_LSXS_SET_STATE_YES == linShiXianSuSetState) || + (LOGSEC_LSXS_SET_STATE_INVALID == linShiXianSuSetState)) + { + LogicSectionDataStruCC[bufIndex].LinShiXianSuSetFlag = linShiXianSuSetState; /*߼ʱ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָ߼γʼռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δռ +* 0xAA ͨųռ +* 0xBB ͨųռ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecOccupyStateCC(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (bufIndex < LOGIC_SECTION_SUM_MAX) + { + retVal = LogicSectionDataStruCC[bufIndex].OccupyState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָID߼γʼռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGICSECTION_OCCUPY_UT == curOccupyState) || + (LOGICSECTION_OCCUPY_CT == curOccupyState) || + (LOGICSECTION_OCCUPY_NO == curOccupyState)) + { + LogicSectionDataStruCC[bufIndex].OccupyState = curOccupyState; /*߼εǰռ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָID߼ͨųռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 ޳ͨųռ +* 0xAA ͨųռ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecTXOccupyStateCC(const UINT16 logSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + retVal = LogicSectionDataStruCC[bufIndex].TXOccupyState; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָID߼ͨųռ״̬CC +* ˵ const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetlogSectionBufIndex(logSectionId); /*ȡ±*/ + + if (LOGIC_SECTION_SUM_MAX > bufIndex) + { + if ((LOGICSECTION_OCCUPY_TX == curOccupyState) || + (LOGICSECTION_OCCUPY_NO_TX == curOccupyState)) + { + LogicSectionDataStruCC[bufIndex].TXOccupyState = curOccupyState; /*߼εǰռ״̬*/ + } + 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..ae4e4c0 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.h @@ -50,47 +50,57 @@ typedef struct S_LogSecLockBelLogRouteStruct typedef struct S_LogicSectionDataStruct { - UINT16 LogicSectionId; /*߼ID (ʼֶ)*/ - UINT16 BelongAxisSecId; /*ID (ʼֶ)*/ - UINT8 PreOccupyState; /*߼֮ǰռ״̬(/ռ) (ֶ̬)*/ - UINT8 CurOccupyState; /*߼εǰռ״̬(/ռ) (ֶ̬)*/ - UINT8 LinShiXianSuSetFlag; /*߼ʱ״̬(Ч//δ)(ֶ̬)*/ - UINT8 chLinShiXianSuSetSpeed; /*߼ʱٶֵ(ֶ̬)*/ - UINT8 zcMaskData; /* ZCλ״̬,bit0:UT bit1:CT */ - UINT8 maskCount; /* ߼ռõҪλһλۼ1Σ2 */ - UINT8 OccupyState; /*߼γʼ״̬/ռãֶ̬Σ*/ - UINT8 TXOccupyState; /*߼ͨųռóʼ״̬/ռãֶ̬Σ*/ /*TSCIϲ 20221208-lc*/ - UINT8 LogLockState; /*߼״̬*/ - UINT8 LogLockDir; /*շ*/ - UINT16 LogLockBelongRoute; /*߼·*/ - UINT32 LogUnlockStartCycNum; /*߼ʱʼں*/ - UINT16 wPLockBelongRouteId; /*յĽ·*/ + UINT16 LogicSectionId; /*߼ID (ʼֶ)*/ + UINT16 BelongAxisSecId; /*ID (ʼֶ)*/ + UINT8 PreOccupyState; /*߼֮ǰռ״̬(/ռ) (ֶ̬)*/ + UINT8 CurOccupyState; /*߼εǰռ״̬(/ռ) (ֶ̬)*/ + UINT8 LinShiXianSuSetFlag; /*߼ʱ״̬(Ч//δ)(ֶ̬)*/ + UINT8 chLinShiXianSuSetSpeed; /*߼ʱٶֵ(ֶ̬)*/ + UINT8 zcMaskData; /* ZCλ״̬,bit0:UT bit1:CT */ + UINT8 maskCount; /* ߼ռõҪλһλۼ1Σ2 */ + UINT8 OccupyState; /*߼γʼ״̬/ռãֶ̬Σ*/ + UINT8 TXOccupyState; /*߼ͨųռóʼ״̬/ռãֶ̬Σ*/ /*TSCIϲ 20221208-lc*/ + UINT8 LogLockState; /*߼״̬*/ + UINT8 LogLockDir; /*շ*/ + UINT16 LogLockBelongRoute; /*߼·*/ + UINT32 LogUnlockStartCycNum; /*߼ʱʼں*/ + UINT16 wPLockBelongRouteId; /*յĽ·*/ UINT16 OtherCiPLockBelongRouteId; /*͵η·ID (ֶ̬)*/ - UINT8 chTrainInfoSum; /*add by qw.liu 2022-02-23 гϢ*/ - LogicTrainResStruct szTrainResData[LOGIC_SECTION_RES_SUM_MAX]; /*add by qw.liu 2022-02-23 гԴϢṹ*/ + + UINT8 chXianSuRemoveState; /*г״̬*/ + UINT8 chArbState; /*߼ARB״̬*/ + + UINT8 chLogicProResUsable; /*߼ηԴ״̬ 0x55 0xaa */ + UINT8 chLogicSpksFLockState; /*߼αSPKS״̬ 0x55 δ 0xaa */ + UINT8 chLogSecEmergXianSu; /*߼νʱ*/ +} LogicSectionDataStruct; + +/*߼νṹ-*/ +typedef struct S_LogicSectionDataStructCC +{ + UINT16 LogicSectionId; /*߼ID (ʼֶ)*/ + UINT8 chTrainInfoSum; /*add by qw.liu 2022-02-23 гϢ*/ + LogicTrainResStruct szTrainResData[LOGIC_SECTION_RES_SUM_MAX]; /*add by qw.liu 2022-02-23 гԴϢṹ*/ UINT8 cResReqOtherCIId; /*ԴID*/ UINT16 wResReqTrainId; /*ԴгID*/ UINT8 chResShareFlag; /*Դ־ 0x55 Դ 0xAAǹԴ*/ - UINT16 JumpLockTrainId; /*ԾгIDֶ̬Σ*/ - UINT8 LogJumpLockState; /*߼Ծ״̬ 0x55 δգ0xAA գֶ̬Σ*/ - UINT8 LogJumpLockDelayUnlockFlag; /*߼Ծʱñ־ 0x55 δã0xaa ãֶ̬Σ*/ - UINT32 LogSecJumpDelayUnlockStartCyc; /*߼Ծʱʼں (ֶ̬)*/ - UINT8 LogSecJumpLockPermFlag; /*߼Ծ־ 0x55 0xaa ֹ (ֶ̬)*/ - UINT8 chXianSuRemoveState; /*г״̬*/ - UINT8 chArbState; /*߼ARB״̬*/ - UINT32 LogErrlockStartCycNum; /*߼ʱùʼں*/ - UINT8 chLogicProResUsable; /*߼ηԴ״̬ 0x55 0xaa */ - UINT8 chLogicSpksFLockState; /*߼αSPKS״̬ 0x55 δ 0xaa */ - UINT8 chLogSecLockBelLogRouteSum; /*߼߼·*//* add 20231010 cgh*/ + UINT16 JumpLockTrainId; /*ԾгIDֶ̬Σ*/ + UINT8 LogJumpLockState; /*߼Ծ״̬ 0x55 δգ0xAA գֶ̬Σ*/ + UINT8 LogJumpLockDelayUnlockFlag; /*߼Ծʱñ־ 0x55 δã0xaa ãֶ̬Σ*/ + UINT32 LogSecJumpDelayUnlockStartCyc; /*߼Ծʱʼں (ֶ̬)*/ + UINT8 LogSecJumpLockPermFlag; /*߼Ծ־ 0x55 0xaa ֹ (ֶ̬)*/ + UINT32 LogErrlockStartCycNum; /*߼ʱùʼں*/ + UINT8 chLogSecLockBelLogRouteSum; /*߼߼·*//* add 20231010 cgh*/ LogSecLockBelLogRouteStruct szLogSecLockBelLogRouteData[LOGSEC_RELATE_ROUTE_SUM_MAX];/*߼߼·*//* add 20231010 cgh*/ - - UINT8 LogSecLogLockState; /*߼߼״̬*//* add 20231012 cgh*/ - UINT8 LogSecLogLockDir; /*߼߼շ*//* add 20231013 cgh*/ - - UINT8 chAblRelLogSecUsableFlag; /*ABLг߼ʹñ־*/ - UINT8 cRouteLeaveLogFlag; /*һȥABLгǷͨͷ*/ -} LogicSectionDataStruct; + UINT8 LogSecLogLockState; /*߼߼״̬*//* add 20231012 cgh*/ + UINT8 LogSecLogLockDir; /*߼߼շ*//* add 20231013 cgh*/ + UINT8 chAblRelLogSecUsableFlag; /*ABLг߼ʹñ־*/ + UINT8 cRouteLeaveLogFlag; /*һȥABLгǷͨͷ*/ + UINT8 LinShiXianSuSetFlag; /*߼ʱ״̬CC(0x55-δʱ٣0xAA-ʱ٣0xFF-ʱЧ)*/ + UINT8 OccupyState; /*߼γʼռ״̬CC(0x55-δռã0xAA-ͨųռã0xBB-ͨųռ)*/ + UINT8 TXOccupyState; /*߼ͨųռ״̬CC(0x55-޳ͨųռã0xAA-ͨųռ)*/ +}LogicSectionDataStructCC; /* ʱٽṹ */ typedef struct S_TsrDataStruct @@ -102,6 +112,7 @@ typedef struct S_TsrDataStruct /*******************************ȫֱ*******************************/ extern LogicSectionDataStruct LogicSectionDataStru[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹ*/ +extern LogicSectionDataStructCC LogicSectionDataStruCC[LOGIC_SECTION_SUM_MAX]; /*߼ݽṹ-*/ extern UINT8 WholeLineLinShiXianSuFlag; /*ȫʱٱ־Ĭ*/ /* * ȡ߼ @@ -110,6 +121,13 @@ extern UINT8 WholeLineLinShiXianSuFlag; /*ȫ * >0: ߼ǰ */ LogicSectionDataStruct* GetLogicSecData(void); +/* +* ȡ߼- +* ˵ void +* ֵ 0: ȡʧ +* >0: ߼ǰ +*/ +LogicSectionDataStructCC* GetLogicSecDataCC(void); /* * ȡָID߼֮ǰռ״̬ @@ -1294,6 +1312,96 @@ 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); +/* +* ߼νʱ +* ˵const UINT16 wLogSectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 20250916 +*/ +void SetLogSecEmergXianSu(const UINT16 wLogSectionId, const UINT8 chExiansuState); +/* +* ȡ߼νʱ +* ˵UINT16 wLogSectionId ߼ID +* ֵʱ״̬ +* by 20250916 +*/ +UINT8 GetLogSecEmergXianSu(const UINT16 wLogSectionId); +/* +* ߼νʱ +* ˵const UINT16 wLogSectionId ߼ID +* const UINT8 chExiansuState ״̬ +* ֵ +* by 20250916 +*/ +void SetLogEmergXianSuOtherCi(const UINT16 wLogSectionId, const UINT8 chExiansuState); + +/* +* ȡָID߼ʱ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0: ȡʧ +* 0x55 δʱ +* 0xAA ʱ +* 0xFF ʱЧ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecLinShiXianSuStateCC(const UINT16 logSectionId); + +/* +* ָID߼ʱ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 linShiXianSuSetState, ʱ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecLinShiXianSuStateCC(const UINT16 logSectionId, const UINT8 linShiXianSuSetState); + +/* +* ȡָ߼γʼռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 δռ +* 0xAA ͨųռ +* 0xBB ͨųռ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecOccupyStateCC(const UINT16 logSectionId); + +/* +* ָID߼γʼռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupyState); + +/* +* ȡָID߼ͨųռ״̬CC +* ˵const UINT16 logSectionId, ߼ID +* ֵ0 ȡʧ +* 0x55 ޳ͨųռ +* 0xAA ͨųռ +* Created By LQ 2025.11.05 +*/ +UINT8 GetLogSecTXOccupyStateCC(const UINT16 logSectionId); + +/* +* ָID߼ͨųռ״̬CC +* ˵ const UINT16 logSectionId, ߼ID +* const UINT8 curOccupyState, ǰռ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupyState); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c index 1358e09..156f8b1 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c @@ -20,6 +20,7 @@ INT16 PhysicalSectionCurSum = 0; /* UINT16 totalPhysicalSectionNum = 0u;/*͸*/ + /* * ȡָID * ˵ const UINT16 phySectionId, ID @@ -1565,4 +1566,72 @@ 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; +} + +/* +* ȡLINK +* ˵ UINT32 trackId id +* ֵ 0:ʧ +* >0:link id +*/ +UINT16 GetTrackBelongLink(UINT32 trackId) +{ + UINT16 i = 0u; + UINT16 linkId = 0u; + for (i = 0u; i < gTrackSectionCurSum;i++) + { + if (gTrackSecConfigDataStru[i].trackSecId == trackId) + { + linkId = gTrackSecConfigDataStru[i].linkId; + break; + } + } + + return linkId; + } \ 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..4ef2a7c 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; @@ -87,6 +88,9 @@ typedef struct S_OC_PhysicalSectionConfigDataStruct }OCPhysicalSectionConfigDataStruct; + + + /*******************************ȫֱ*******************************/ extern PhysicalSectionConfigDataStruct PhysicalSectionConfigDataStru[PHYSICAL_SECTION_SUM_MAX]; /*ýṹ,cgh-ϲCID-2539-1˴гʼͳһŵInitAllStaticDataStrнгʼΪں˹*/ extern UINT16 LocalCiPhysicalSectionIdBuf[PHYSICAL_SECTION_SUM_MAX]; /*屾IDӳ*/ @@ -500,6 +504,23 @@ 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); +/* +* ȡLINK +* ˵ UINT32 trackId id +* ֵ 0:ʧ +* >0:link id +*/ +UINT16 GetTrackBelongLink(UINT32 trackId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c index 5e17407..93222dc 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.c @@ -12,11 +12,11 @@ #include "PhysicalSectionDataManage.h" #include "AxisAssertManageAPI.h" +#include "ParsePackZcData.h" - -PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ*/ - +PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ*/ +PhysicalSectionDataStructCC PhysicalSectionDataStruCC[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ峵*/ /* * ȡָID @@ -29,6 +29,16 @@ PhysicalSectionDataStruct* GetPhySecData(void) return PhysicalSectionDataStru; } +/* +* ȡָIDCC +* ˵ +* ֵγ̬ +*/ +PhysicalSectionDataStructCC* GetPhySecDataCC(void) +{ + return PhysicalSectionDataStruCC; +} + /* * ȡָID״̬ * ˵ const UINT16 phySectionId, ID @@ -135,7 +145,7 @@ void SetPhySecUseState(const UINT16 phySectionId, const UINT8 useState, const UI retVal = CI_ERROR; } - if((CI_SUCCESS == retVal)&&(0u == PhysicalSectionDataStru[bufIndex].SecProUseBelongRouteId)&&(0u == PhysicalSectionDataStru[bufIndex].SecUseBelongRouteId) && (0u == PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId)) + if((CI_SUCCESS == retVal)&&(0u == PhysicalSectionDataStru[bufIndex].SecProUseBelongRouteId)&&(0u == PhysicalSectionDataStru[bufIndex].SecUseBelongRouteId) && (0u == PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId)) { PhysicalSectionDataStru[bufIndex].SecUseState = PHYSICAL_SECTION_USING_NO; /*δ״̬*/ } @@ -225,14 +235,14 @@ UINT8 SetPhySecUseStateByLogRoute(const UINT16 phySectionId, const UINT8 useStat if (0U == logrouteId) { /*·*/ - PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId = 0u; /*߼·ID*/ + PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId = 0u; /*߼·ID*/ PhysicalSectionDataStru[bufIndex].SecProUseBelongRouteId = 0u; /*ս·ID*/ PhysicalSectionDataStru[bufIndex].SecUseBelongRouteId = 0u; /*ս·ID*/ } - else if (logrouteId == PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId) + else if (logrouteId == PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId) { /*·*/ - PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId = 0u; /*߼·ID*/ + PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId = 0u; /*߼·ID*/ } else { @@ -242,17 +252,17 @@ UINT8 SetPhySecUseStateByLogRoute(const UINT16 phySectionId, const UINT8 useStat if ((CI_SUCCESS == retVal) && (0U == PhysicalSectionDataStru[bufIndex].SecProUseBelongRouteId) && (0U == PhysicalSectionDataStru[bufIndex].SecUseBelongRouteId) - && (0U == PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId)) + && (0U == PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId)) { PhysicalSectionDataStru[bufIndex].SecUseState = PHYSICAL_SECTION_USING_NO; /*δ״̬*/ } } else if (PHYSICAL_SECTION_USING_YES == useState) { /**/ - if ((0U == PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId) || - (logrouteId == PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId)) + if ((0U == PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId) || + (logrouteId == PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId)) { - PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId = logrouteId; /*ս·ID*/ + PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId = logrouteId; /*ս·ID*/ PhysicalSectionDataStru[bufIndex].SecUseState = PHYSICAL_SECTION_USING_YES; /*״̬*/ } else @@ -415,7 +425,7 @@ UINT16 GetPhySecUseLogRouteId(const UINT16 phySectionId) if (bufIndex < PHYSICAL_SECTION_SUM_MAX) { - retVal = PhysicalSectionDataStru[bufIndex].SecUseBelongLogRouteId; + retVal = PhysicalSectionDataStruCC[bufIndex].SecUseBelongLogRouteId; } else { @@ -2308,6 +2318,8 @@ void ResetPhySecStopSteadyInfo(void) { phySectionId = GetPhySecId(ii);/*ȡļиµID*/ PhysicalSectionDataStru[phySectionId].StopSteadyFlag = PHYSICAL_SECTION_STOPSTEADY_NO; + PhysicalSectionDataStruCC[phySectionId].StopSteadyFlag = PHYSICAL_SECTION_STOPSTEADY_NO; + gZcToCiDymDataStru.PhysicalSectionDataStruZc[phySectionId].StopSteadyFlag = PHYSICAL_SECTION_STOPSTEADY_NO; } } } @@ -2665,7 +2677,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 +2690,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 +2708,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 +2727,15 @@ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId) break; } } - + if (CI_ERROR == chFindOccupy) + { + /*м߼ξռ*/ + retVal = LOGICSECTION_OCCUPY_NO; + } + else + { + ;/*ctutռ*/ + } return retVal; } @@ -2897,6 +2920,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 +4042,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 +4060,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 +4200,215 @@ 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 + { + /**/ + } +} + +/* +* ָIDθλǩ +* ˵ const UINT16 wPhySectionId, ID +* ֵ +* by cgh 20250826 +*/ +void SetPhySecResetCmdTag(const UINT16 wPhySectionId) +{ + UINT16 wBufIndex = 0U; /*±*/ + + wBufIndex = GetPhySecConfigBufIndex(wPhySectionId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if (PHY_SEC_RESET_CMD_FLAG_SUM_MAX == PhysicalSectionDataStru[wBufIndex].chResetCmdTag) + { + PhysicalSectionDataStru[wBufIndex].chResetCmdTag = 1U; /*Ԥλ״̬*/ + } + else + { + PhysicalSectionDataStru[wBufIndex].chResetCmdTag += 1U; + } + } + else + { + /**/ + } +} + +/* +* ȡָIDθλǩ +* ˵ const UINT16 wPhySecId, ID +* ֵ UINT8_MAX: ȡʧ +* 0-15: ǰθλǩ +* by cgh 20250826 +*/ +UINT8 GetPhySecResetCmdTag(const UINT16 wPhySecId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chRetVal = CI_ERROR; + + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + chRetVal = PhysicalSectionDataStru[wBufIndex].chResetCmdTag; /*ȡθλǩ*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָIDθλǩ +* ˵ const UINT16 wPhySectionId, ID +* ֵ +* by cgh 20250826 +*/ +void SetPhySecResetCmdTagBack(const UINT16 wPhySectionId,const UINT8 chPhySecResetCmdTagBack) +{ + UINT16 wBufIndex = 0U; /*±*/ + + wBufIndex = GetPhySecConfigBufIndex(wPhySectionId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if (PHY_SEC_RESET_CMD_FLAG_SUM_MAX >= chPhySecResetCmdTagBack) + { + PhysicalSectionDataStru[wBufIndex].chResetCmdTagBack = chPhySecResetCmdTagBack; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡָIDθλǩ +* ˵ const UINT16 wPhySecId, ID +* ֵ ǰθλǩ +* by cgh 20250826 +*/ +UINT8 GetPhySecResetCmdTagBack(const UINT16 wPhySecId) +{ + UINT16 wBufIndex = 0U; /*±*/ + UINT8 chRetVal = CI_ERROR; + + wBufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + + if (wBufIndex < PHYSICAL_SECTION_SUM_MAX) + { + chRetVal = PhysicalSectionDataStru[wBufIndex].chResetCmdTagBack; /*ȡθλǩ*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ȡָIDͣ״̬CC +* ˵const UINT16 phySectionId, ID +* ֵ0 ȡʧ +* 0x55 δͣ +* 0xAA ͣ +* Created By LQ 2025.11.05 +*/ +UINT8 GetPhySecStopSteadyFlagCC(const UINT16 phySectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*ȡ±*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + retVal = PhysicalSectionDataStruCC[bufIndex].StopSteadyFlag; + } + else + { + retVal = CI_ERROR; + } + + return retVal; +} + +/* +* ָIDͣ״̬CC +* ˵const UINT16 phySectionId, ID +* const UINT8 stopSteadyState, ͣ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPhySecStopSteadyFlagCC(const UINT16 phySectionId, const UINT8 stopSteadyState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetPhySecConfigBufIndex(phySectionId); /*ȡ±*/ + + if (bufIndex < PHYSICAL_SECTION_SUM_MAX) + { + if ((PHYSICAL_SECTION_STOPSTEADY_NO == stopSteadyState) || (PHYSICAL_SECTION_STOPSTEADY_YES == stopSteadyState)) + { + PhysicalSectionDataStruCC[bufIndex].StopSteadyFlag = stopSteadyState; /*ͣ״̬*/ + } + else + { + /**/ + } + } + 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..370c037 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionDataManage.h @@ -37,7 +37,6 @@ typedef struct S_PhysicalSectionDataStruct UINT16 SecUseBelongRouteId; /*ν··ID (ֶ̬)*/ UINT16 SecProUseBelongRouteId; /*η·ID (ֶ̬)ͬһν·úͷõĽ·id*/ - UINT16 SecUseBelongLogRouteId; /*ν·߼·ID (ֶ̬)*/ UINT8 LockState; /*״̬ (ֶ̬)*/ UINT8 FLockState; /*η״̬ (ֶ̬)*/ UINT16 RLockBelongRouteId; /*ν··ID (ֶ̬)*/ @@ -66,10 +65,15 @@ typedef struct S_PhysicalSectionDataStruct UINT32 FaultUnlockStartCycNum; /*ʽʱʼ (ֶ̬)*/ UINT8 SectionResetType; /*μḴλ*/ UINT32 SectionResetStartCycNum; /*μḴλʼ (ֶ̬)*/ + UINT8 chResetCmdTag; /*λǩ*/ + UINT8 chResetCmdTagBack; /*λǩ*/ UINT8 ProtectSecLockDelayTimeFlag;/*ʱ־(ֶ̬)*/ UINT8 StopCheckFlag; /*ֹͣ־(δ/) (ֶ̬)*/ UINT8 JumpLockState; /*Ծ״̬ (ֶ̬)*/ UINT8 PhySecPreResetState; /*Ԥλ״̬ (ֶ̬)*/ + UINT8 chPreResetBack; /*Ԥλ*/ + UINT8 chDirectResetRst; /*ֱӸλ*/ + UINT8 chDirectResetBack; /*ֱӸλ*/ UINT32 SecJumpDelayUnlockStartCycNum; /*Ծʱʼ (ֶ̬)*/ UINT8 JumpLockDelayUnlockFlag; /*Ծʱñ־ֶ̬Σ*/ UINT32 LockDelayStartCycNum; /* ʱʼں(ֶ̬) */ @@ -87,8 +91,16 @@ typedef struct S_PhysicalSectionDataStruct UINT8 cPhySecInHumidRailFlag; /*ʪ־0x55 Ч0xAA Ч*/ } PhysicalSectionDataStruct; -extern PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ*/ +/*ݽṹ-*/ +typedef struct S_PhysicalSectionDataStructCC +{ + UINT16 PhysicalSectionId; /*ID (ʼֶ)*/ + UINT16 SecUseBelongLogRouteId; /*ν·߼·ID (ֶ̬)*/ + UINT8 StopSteadyFlag; /*ͣϢCC(0x55-δͣȣ0xAA-ͣ)*/ +}PhysicalSectionDataStructCC; +extern PhysicalSectionDataStruct PhysicalSectionDataStru[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ*/ +extern PhysicalSectionDataStructCC PhysicalSectionDataStruCC[PHYSICAL_SECTION_SUM_MAX]; /*ݽṹ峵*/ /* * η״̬ * ˵ const UINT16 phySectionId, ID @@ -105,6 +117,13 @@ UINT16 ClearPhySecPLock(const UINT16 phySectionId); */ PhysicalSectionDataStruct* GetPhySecData(void); +/* +* ȡָIDCC +* ˵ +* ֵγ̬ +*/ +PhysicalSectionDataStructCC* GetPhySecDataCC(void); + /* * ȡָID״̬ * ˵ const UINT16 phySectionId, ID @@ -677,7 +696,7 @@ UINT32 GetSecUtOrCtOccuStartCycNum(const UINT16 phySectionId); * ȡָIDεǰCTUTռ״̬ * ˵ const UINT16 phySecId, ID * ֵ 0: ȡʧ -* >0: ǰռ״̬ +* 0x55 ޳ռ 0xaaUT 0xbbCT */ UINT8 GetPhySecCurCtOrUtOccupyState(const UINT16 phySecId); @@ -723,6 +742,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 +1056,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 +1086,67 @@ 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); + +/* +* ָIDθλǩ +* ˵ const UINT16 wPhySectionId, ID +* ֵ +* by cgh 20250826 +*/ +void SetPhySecResetCmdTag(const UINT16 wPhySectionId); + +/* +* ȡָIDθλǩ +* ˵ const UINT16 wPhySecId, ID +* ֵ UINT8_MAX: ȡʧ +* 0-15: ǰθλǩ +* by cgh 20250826 +*/ +UINT8 GetPhySecResetCmdTag(const UINT16 wPhySecId); + +/* +* ָIDθλǩ +* ˵ const UINT16 wPhySectionId, ID +* ֵ +* by cgh 20250826 +*/ +void SetPhySecResetCmdTagBack(const UINT16 wPhySectionId, const UINT8 chPhySecResetCmdTagBack); + +/* +* ȡָIDθλǩ +* ˵ const UINT16 wPhySecId, ID +* ֵ ǰθλǩ +* by cgh 20250826 +*/ +UINT8 GetPhySecResetCmdTagBack(const UINT16 wPhySecId); + +/* +* ȡָIDͣ״̬CC +* ˵const UINT16 phySectionId, ID +* ֵ0 ȡʧ +* 0x55 δͣ +* 0xAA ͣ +* Created By LQ 2025.11.05 +*/ +UINT8 GetPhySecStopSteadyFlagCC(const UINT16 phySectionId); + +/* +* ָIDͣ״̬CC +* ˵const UINT16 phySectionId, ID +* const UINT8 stopSteadyState, ͣ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetPhySecStopSteadyFlagCC(const UINT16 phySectionId, const UINT8 stopSteadyState); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Section/SectionDefine.h b/TSCP/src/APP/ciapp/Section/SectionDefine.h index 93f8746..da3d0e1 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*/ @@ -39,12 +39,15 @@ #define PHYSEC_RELATE_ROUTE_SUM_MAX ((UINT16)24) /*ι·ֵ*//* add 20231113 lq*/ #define LOGSEC_RELATE_PSD_MAX ((UINT8)0X04U) /*߼ιֵ*//* add 20240410 fan*/ #define LOGSEC_RELATE_ESB_MAX ((UINT8)0X04U) /*߼ιťֵ*//* add 20240410 fan*/ +#define TRCAK_SECTION_SUM_MAX ((UINT16)5000) /*ֵ*/ #define QINXIAN_SWITCH_MAX_NUM ((UINT8)0X16U) /*ι add 20240607 LC */ #define PHYSEC_ADJACENT_SEC_SUM_MAX ((UINT8)15) /*ֱ*//* add 20240821 fan*/ #define PHYSEC_INDIRECTNEAR_SEC_SUM_MAX ((UINT8)100) /*һΧڼڽ*//* add 20240821 fan*/ +#define PHY_SEC_RESET_CMD_FLAG_SUM_MAX ((UINT8)15) /*θλǩֵ*/ + /**/ #define PHYSICAL_SEC_TYPE_NOSWITCH ((UINT8)0x55) /*޲*/ #define PHYSICAL_SEC_TYPE_SWITCH ((UINT8)0xaa) /*в*/ @@ -204,6 +207,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 +359,16 @@ #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ԣ*/ + +/*߼νʱ״̬*/ +#define LOGSEC_EMERG_XS_SET_NO ((UINT8)0x55) /*δýʱ*/ +#define LOGSEC_EMERG_XS_SET_YES ((UINT8)0xAA) /*˽ʱ*/ + #endif diff --git a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c index a9072a4..462a6f5 100644 --- a/TSCP/src/APP/ciapp/Signal/SignalDataManage.c +++ b/TSCP/src/APP/ciapp/Signal/SignalDataManage.c @@ -19,8 +19,8 @@ #include "TrainOnAcManage.h" #include "EnvelopeManage.h" -SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*źŻݽṹ*/ - +SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*źŻݽṹ*/ +SignalDataStructCC SignalDataStruCC[SIGNAL_SUM_MAX]; /*źŻݽṹ-*/ /* * ȡָIDź @@ -32,7 +32,16 @@ SignalDataStruct *GetSignalData(void) { return SignalDataStru; } - +/* +* ȡָIDź- +* ˵ +* ֵ + SignalDataStruct* +*/ +SignalDataStructCC* GetSignalDataCC(void) +{ + return SignalDataStruCC; +} /* * ȡָIDźŻ״̬ * ˵ const UINT16 signalId, źŻID @@ -1574,12 +1583,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 +1600,7 @@ UINT8 SetNearCISignalCurColor(const UINT16 signalId, const UINT8 curColor) } else { - reVal = CI_ERROR; + reVal = CI_ERROR; } } else @@ -1599,6 +1609,7 @@ UINT8 SetNearCISignalCurColor(const UINT16 signalId, const UINT8 curColor) } return reVal; } + /* * ȡָIDźŻ֮ǰʾɫ * ˵ const UINT16 signalId, źŻID @@ -1684,12 +1695,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 +1797,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 +1893,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 @@ -3087,7 +3118,7 @@ void SetSignalLightUpTrainId(const UINT16 signalId, const UINT16 wTrainId) if (SIGNAL_SUM_MAX > bufIndex) { - SignalDataStru[bufIndex].wSignalLightUpTrainId = wTrainId; + SignalDataStruCC[bufIndex].wSignalLightUpTrainId = wTrainId; } } @@ -3106,7 +3137,7 @@ UINT16 GetSignalLightUpTrainId(const UINT16 signalId) if (SIGNAL_SUM_MAX > bufIndex) { - reVal = SignalDataStru[bufIndex].wSignalLightUpTrainId; + reVal = SignalDataStruCC[bufIndex].wSignalLightUpTrainId; } else { @@ -3130,7 +3161,7 @@ UINT16 GetSignalLightUpLinkIdSum(const UINT16 signalId) if (SIGNAL_SUM_MAX > bufIndex) { - reVal = SignalDataStru[bufIndex].wSignalLightUpLinkIdSum; + reVal = SignalDataStruCC[bufIndex].wSignalLightUpLinkIdSum; } return reVal; } @@ -3150,7 +3181,7 @@ UINT16 * GetSignalLightUpLinkIdBuf(const UINT16 signalId) if (SIGNAL_SUM_MAX > bufIndex) { - reVal = SignalDataStru[bufIndex].szSignalLightUpLinkIdBuf; + reVal = SignalDataStruCC[bufIndex].szSignalLightUpLinkIdBuf; } return reVal; } @@ -3388,7 +3419,7 @@ UINT8 SetSignalLightUpLinkIdBuf(const UINT16 wSignalId, UINT16 wLinkSum, const /*źŻ*/ for (jj = 0u; jj < MAX_SIGNAL_LIGHTUPLINK_NUM; jj++) { - SignalDataStru[wSignalIndex].szSignalLightUpLinkIdBuf[jj] = 0u; + SignalDataStruCC[wSignalIndex].szSignalLightUpLinkIdBuf[jj] = 0u; } if (wLinkSum < MAX_SIGNAL_LIGHTUPLINK_NUM) @@ -3397,9 +3428,9 @@ UINT8 SetSignalLightUpLinkIdBuf(const UINT16 wSignalId, UINT16 wLinkSum, const { for (ii = 0u; ii < wLinkSum; ii++) { - SignalDataStru[wSignalIndex].szSignalLightUpLinkIdBuf[ii] = szLinkBuf[ii]; + SignalDataStruCC[wSignalIndex].szSignalLightUpLinkIdBuf[ii] = szLinkBuf[ii]; } - SignalDataStru[wSignalIndex].wSignalLightUpLinkIdSum = wLinkSum; + SignalDataStruCC[wSignalIndex].wSignalLightUpLinkIdSum = wLinkSum; cRetVal = CI_SUCCESS; } } @@ -3515,7 +3546,7 @@ UINT8 RefreshSignalLightUpLink(void) /** * @brief ˢźŻ״̬ * @return CI_SUCCESSɹCI_ERRORʧ -* @create 2022.3.4 +* @create edit cgh 20251115 */ UINT8 RefreshSignalLightUpState(void) { @@ -3594,7 +3625,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 +3653,7 @@ UINT8 RefreshSignalLightUpState(void) ; /*ûз任㣬DZ䷽*/ } } + else { ; /*linkⷽһlinkҪת*/ } @@ -3719,15 +3751,15 @@ UINT8 RefreshSignalLightUpState(void) if (SIGNAL_LIGHT_CONFIG_LIGHT == chFlag) { /* */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); if (FLAG_SET == chOtherFlag) /*źŻֽij*/ { wCfpId = GetCfpIdByPoint(wLink, dwOffset); strCfpOther = GetCfpOtherOcTrainInfo(wCfpId); - chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_CI, chLinkOcId); + chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, 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*/ } @@ -3744,32 +3776,32 @@ UINT8 RefreshSignalLightUpState(void) {/* CBTC */ if (SIGNAL_LIGHT_CONFIG_CBTC_LIGHT == chFlag) { - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } else { /* źŻβѯĵһгΪVBTCźŻ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); } } else {/* OCΪVBTC */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } } else if ((SECTION_OCCUPY_YES == chOccState) && (0u != chTrainNum)) {/* ռãδѯгϢ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } else if (FLAG_SET == chOtherFlag) { wCfpId = GetCfpIdByPoint(wLink, dwOffset); strCfpOther = GetCfpOtherOcTrainInfo(wCfpId); - chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_CI, chLinkOcId); + chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, chLinkOcId); dwLeftLen = dwDdLen - dwUsedLen; if ((0u == wCfpId) || (TRANSMIT_STATE_GOOD != chTransmitStat)) {/* TIOCͨŹϣ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } else { @@ -3777,35 +3809,35 @@ UINT8 RefreshSignalLightUpState(void) if ((0u == strCfpOther.wTrainId) && (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE != chFlag)) /*RC޳ռãźŻΪ̬ʱ߼*/ {/* TIOC޳ռã */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + SetSignalLightExtinctStateCC(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ѳƾ룬źŻΪ̬ʱ߼*/ { - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); } else { - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } } else if (TRAIN_LEVEL_VBTC == strCfpOther.chTrainLevel) {/*TIOCVBTCռãҪ鿴ǷΪ̬ƣCBTCӽ*/ if (SIGNAL_LIGHT_CONFIG_CBTC_LIGHT == chFlag) { - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } else { /* źŻβѯĵһгΪVBTCźŻ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); } } else {/* */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } } } @@ -3815,12 +3847,12 @@ UINT8 RefreshSignalLightUpState(void) if ((0u != wSignalLightUpLinkIdSum) && (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE != chFlag)) { /* ÿźŻƣݵǷзͨųռжϵ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_NO); } else { /* Ϊ0߳źŻ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } } @@ -3831,14 +3863,14 @@ UINT8 RefreshSignalLightUpState(void) { /*źŻⷽһλRCͨRCӿе߳źŻ־źŻ*/ - cCommState = GetCiTransmitState(CI_SYSTEM_TYPE_CI, cPhySecBelongCiId); + cCommState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, cPhySecBelongCiId); if (TRANSMIT_STATE_GOOD == cCommState) { /*źŻⷽһRCͨͨ߳źŻ־ˢźŻ״̬*/ cSleepTrainLightUpFlag = GetSleepTrainLightUpSignalFlag(wSignalId); if (SIGNAL_SLEEP_TRAIN_LIGHTUP_YES == cSleepTrainLightUpFlag) { - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } else { @@ -3858,7 +3890,7 @@ UINT8 RefreshSignalLightUpState(void) else { /* ѯʧ */ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); } } else @@ -4027,21 +4059,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 +4114,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 +4128,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; @@ -4613,9 +4637,9 @@ UINT8 GetLogRouteSignalErrCloseFlag(const UINT16 signalId) if (bufIndex < SIGNAL_SUM_MAX) { - if ((LOG_ROUTE_SIGNAL_CLOSE_ERR == SignalDataStru[bufIndex].LogRouteSignalErrCloseFlag) || (LOG_ROUTE_SIGNAL_CLOSE_NOERR == SignalDataStru[bufIndex].LogRouteSignalErrCloseFlag)) + if ((LOG_ROUTE_SIGNAL_CLOSE_ERR == SignalDataStruCC[bufIndex].LogRouteSignalErrCloseFlag) || (LOG_ROUTE_SIGNAL_CLOSE_NOERR == SignalDataStruCC[bufIndex].LogRouteSignalErrCloseFlag)) { - reVal = SignalDataStru[bufIndex].LogRouteSignalErrCloseFlag; + reVal = SignalDataStruCC[bufIndex].LogRouteSignalErrCloseFlag; } } @@ -4639,7 +4663,7 @@ void SetLogRouteSignalErrCloseFlag(const UINT16 signalId, const UINT8 wFlag) { if ((LOG_ROUTE_SIGNAL_CLOSE_ERR == wFlag) || (LOG_ROUTE_SIGNAL_CLOSE_NOERR == wFlag)) { - SignalDataStru[bufIndex].LogRouteSignalErrCloseFlag = wFlag; /*źŻ쳣رձ־*/ + SignalDataStruCC[bufIndex].LogRouteSignalErrCloseFlag = wFlag; /*źŻ쳣رձ־*/ } } } @@ -4929,7 +4953,7 @@ void SleepTrainSignalLightUpProc(const UINT16 wSignalId) if (cSignalBelongCiId == cLocalCiId) { /*źŻźŻ*/ - (void)SetSignalLightExtinctState(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); + SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); SetSleepTrainLightUpSignalFlag(wSignalId, SIGNAL_SLEEP_TRAIN_LIGHTUP_YES); /*߳źŻ־Ч*/ } else @@ -4994,7 +5018,7 @@ UINT8 GetSleepTrainLightUpSignalFlag(const UINT16 signalId) if (bufIndex < SIGNAL_SUM_MAX) { - cRetVal = SignalDataStru[bufIndex].cSleepTrainLightUpFlag; + cRetVal = SignalDataStruCC[bufIndex].cSleepTrainLightUpFlag; } else { @@ -5021,7 +5045,7 @@ void SetSleepTrainLightUpSignalFlag(const UINT16 signalId, const UINT8 cLightUpF { if ((SIGNAL_SLEEP_TRAIN_LIGHTUP_YES == cLightUpFlag) || (SIGNAL_SLEEP_TRAIN_LIGHTUP_NO == cLightUpFlag)) { - SignalDataStru[bufIndex].cSleepTrainLightUpFlag = cLightUpFlag; /*߳źŻ־*/ + SignalDataStruCC[bufIndex].cSleepTrainLightUpFlag = cLightUpFlag; /*߳źŻ־*/ } else { @@ -5088,4 +5112,655 @@ 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; +} + +/* +* ȡָIDźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.05 +*/ +UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 lightExtinctState = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + lightExtinctState = SignalDataStruCC[bufIndex].LightExtinctState; + } + else + { + /**/ + } + + return lightExtinctState; +} + +/* +* ָIDźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* const UINT8 ligheCloseState, ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetSignalLightExtinctStateCC(const UINT16 signalId, const UINT8 lightExtinctState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_LIGHT_EXTICT_STATE_ALL_YES == lightExtinctState) || (SIGNAL_LIGHT_EXTICT_STATE_YES == lightExtinctState)) + { + SignalDataStruCC[bufIndex].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; + } + else if(SIGNAL_LIGHT_EXTICT_STATE_NO == lightExtinctState) + { + SignalDataStruCC[bufIndex].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_NO; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* ȡͨųѹͨźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.05 +*/ +UINT8 GetSignalCrossStateCC(const UINT16 signalId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 reVal = CI_ERROR; + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_CROSS_STATE_NO == SignalDataStru[bufIndex].SignalCrossState) || (SIGNAL_CROSS_STATE_YES == SignalDataStru[bufIndex].SignalCrossState)) + { + reVal = SignalDataStruCC[bufIndex].SignalCrossState; + } + else + { + /**/ + } + } + else + { + /**/ + } + return reVal; +} + +/* +* ͨųѹͨźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetSignalConfigBufIndex(signalId); /*ȡ±*/ + + if (bufIndex < SIGNAL_SUM_MAX) + { + if ((SIGNAL_CROSS_STATE_NO == signalCrossState) || (SIGNAL_CROSS_STATE_YES == signalCrossState)) + { + SignalDataStruCC[bufIndex].SignalCrossState = signalCrossState; /*ͨųѹͨźŻ״̬*/ + } + else + { + /**/ + } + } + else + { + /**/ + } } \ 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..35220c4 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Ч*/ @@ -84,21 +85,38 @@ typedef struct S_SignalDataStruct UINT8 RelayDetainCmd; /*Ӳ߿۳*/ UINT8 NeighbourSignalDetainDrive;/*վźŻ۳*/ UINT8 MaintainLightState; /*źŻά޵״̬*/ - UINT16 wSignalLightUpLinkIdSum; /*link*/ /* add 2022.3.4 */ - UINT16 szSignalLightUpLinkIdBuf[MAX_SIGNAL_LIGHTUPLINK_NUM];/*linkID*//* add 2022.3.4 */ - UINT16 wSignalLightUpTrainId; /*źŻνӽгID*/ + UINT8 EngineerVehicleNearState; /*̳ӽ״̬*/ UINT8 EngineerVehicleCrossClose; /*̳ѹر*/ UINT16 EnginVehicCroCloBelongRoute;/*̳ѹر·*/ UINT8 SignalBoardState; /*OCźŻ忨״̬*/ UINT32 OcSignalStartCycNum; /*OCźŻȫ̿ʼ*/ - UINT8 LogRouteSignalErrCloseFlag; /*߼·źŻ쳣رձ־(߼·쳣رʹ)*/ 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]; /*źŻݽṹ*/ +/*źŻ̬ݽṹ*/ +typedef struct S_SignalDataStructCC +{ + UINT16 SignalId; /*źŻID (ֶ)*/ + UINT16 wSignalLightUpLinkIdSum; /*link*//* add 2022.3.4 */ + UINT16 szSignalLightUpLinkIdBuf[MAX_SIGNAL_LIGHTUPLINK_NUM]; /*linkID*//* add 2022.3.4 */ + UINT16 wSignalLightUpTrainId; /*źŻνӽгID*/ + UINT8 LogRouteSignalErrCloseFlag; /*߼·źŻ쳣رձ־(߼·쳣رʹ)*/ + UINT8 cSleepTrainLightUpFlag; /*߳źŻ־0x55 Ч0xAA Ч*/ + UINT8 LightExtinctState; /*źŻ״̬CC(0x55ƣ0xaa)*/ + UINT8 SignalCrossState; /*ͨųѹͨźŻ״̬CC(0x55δѹ0xaaѹ)*/ +}SignalDataStructCC; + +extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*źŻݽṹ*/ +extern SignalDataStructCC SignalDataStruCC[SIGNAL_SUM_MAX]; /*źŻݽṹ-*/ + +/* /* * ȡָIDź * ˵ @@ -106,6 +124,13 @@ extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /* SignalDataStruct* */ SignalDataStruct *GetSignalData(void); +/* +* ȡָIDź- +* ˵ +* ֵ + SignalDataStruct* +*/ +SignalDataStructCC* GetSignalDataCC(void); /* * ȡָIDźŻ״̬ @@ -248,6 +273,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 +1061,183 @@ 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); + +/* +* ȡָIDźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.05 +*/ +UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId); + +/* +* ָIDźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* const UINT8 ligheCloseState, ״̬ +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetSignalLightExtinctStateCC(const UINT16 signalId, const UINT8 lightExtinctState); + +/* +* ȡͨųѹͨźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ0 ȡʧ +* 0x55 δѹ +* 0xaa ѹ +* Created By LQ 2025.11.05 +*/ +UINT8 GetSignalCrossStateCC(const UINT16 signalId); + +/* +* ͨųѹͨźŻ״̬CC +* ˵const UINT16 signalId, źŻID +* ֵ +* Created By LQ 2025.11.05 +*/ +void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState); + #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/SwitchConfigDataManage.c b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c index ff335b6..32922f2 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.c @@ -1421,4 +1421,27 @@ UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId) retVal = CI_ERROR; } return retVal; -} \ No newline at end of file +} +/* +* ȡָIDת޻̵ +* ˵ const UINT16 switchId, ID +* ֵ NULL: ȡʧ +* NULL: ȡݳɹ +*/ +ZzjPowerConfigDataStruct* GetSwitchZzjPowerConfigData(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*±*/ + ZzjPowerConfigDataStruct* pRetVal = NULL; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + + if (bufIndex < SWITCH_SUM_MAX) + { + pRetVal = SwitchConfigDataStru[bufIndex].ZzjPowerData; + } + else + { + pRetVal = NULL; + } + return pRetVal; +} diff --git a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h index e081d29..7378b03 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchConfigDataManage.h @@ -25,6 +25,13 @@ extern "C" { #endif +typedef struct S_ZzjPowerConfigDataStruct +{ + UINT16 ZzjDingweiPower1; /*ת޻J1_1*/ + UINT16 ZzjDingweiPower2; /*ת޻J1_2*/ + UINT16 ZzjFanweiPower1; /*ת޻J1_1*/ + UINT16 ZzjFanweiPower2; /*ת޻J1_2*/ +}ZzjPowerConfigDataStruct; typedef struct S_SwitchConfigDataStruct { @@ -89,8 +96,12 @@ typedef struct S_SwitchConfigDataStruct UINT16 DsDrvRelayId; /*̵ID (ֶ-ʹ)*/ UINT16 DsDrvQRelayId; /*ǰڵ̵ID (ֶ-ʹ)*/ UINT16 DsDrvHRelayId; /*ڵ̵ID (ֶ-ʹ)*/ + + ZzjPowerConfigDataStruct ZzjPowerData[SWITCH_ZZJ_POWER_STATE_MAX_NUM]; /*ת޻*/ + } SwitchConfigDataStruct; + typedef struct S_OC_SwitchConfigDataStruct { UINT16 SwitchId; /*ID(ֶ)*/ @@ -562,6 +573,17 @@ UINT16 GetSwitchDbDrvRelayId(const UINT16 switchId); * >0: λ̵ID */ UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId); + + + +/* +* ȡָIDת޻̵ +* ˵ const UINT16 switchId, ID +* ֵ NULL: ȡʧ +* NULL: ȡݳɹ +*/ +ZzjPowerConfigDataStruct* GetSwitchZzjPowerConfigData(const UINT16 switchId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c index e9760f2..36c7602 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.c @@ -14,8 +14,8 @@ -SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /*ݽṹ*/ - +SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /*ݽṹ*/ +SwitchDataStructCC SwitchDataStruCC[SWITCH_SUM_MAX]; /*ݽṹ-*/ @@ -30,7 +30,16 @@ SwitchDataStruct *GetSwitchData(void) { return SwitchDataStru; } - +/* +* ȡָIDݳ +* ˵ +* ֵ + SwitchDataStructCC * +*/ +SwitchDataStructCC* GetSwitchDataCC(void) +{ + return SwitchDataStruCC; +} /* * ȡָID״̬ * ˵ const UINT16 switchId, ID @@ -395,13 +404,13 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16 SwitchDataStru[bufIndex].PLockedRouteNum = 0u; SwitchDataStru[bufIndex].PLockedOverlapNum = 0u; SwitchDataStru[bufIndex].PLockedNonRouteNum = 0u; - SwitchDataStru[bufIndex].PLockedLogRouteNum = 0u; + SwitchDataStruCC[bufIndex].PLockedLogRouteNum = 0u; for (ii=0u;ii 0u) + SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum > 0u) {/*յ豸Ŀ0*/ SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP; } @@ -442,7 +451,7 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16 else {/**/ if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum + - SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStru[bufIndex].PLockedLogRouteNum > 0u) + SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum > 0u) {/*յ豸Ŀ0*/ SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; } @@ -508,13 +517,13 @@ void SetSwitchLockStaUseByLogRoute(const UINT16 pLockLogRouteId, const UINT16 sw { if (emptyIndex < 0)/*λС0Ųҿλ*/ { - if (0U == SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii]) + if (0U == SwitchDataStruCC[bufIndex].PLockedLogRouteIdArr[ii]) { emptyIndex = (INT16)ii;/*λֵΪ0ʾΪλס*/ } } - if (pLockLogRouteId == SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii]) + if (pLockLogRouteId == SwitchDataStruCC[bufIndex].PLockedLogRouteIdArr[ii]) {/*ҵյid*/ findFlag = 1u; } @@ -524,8 +533,8 @@ void SetSwitchLockStaUseByLogRoute(const UINT16 pLockLogRouteId, const UINT16 sw {/*ûҵid*/ if (emptyIndex >= 0) {/*ҿλ*/ - SwitchDataStru[bufIndex].PLockedLogRouteIdArr[emptyIndex] = pLockLogRouteId;/*ñid*/ - SwitchDataStru[bufIndex].PLockedLogRouteNum++; /*id1*/ + SwitchDataStruCC[bufIndex].PLockedLogRouteIdArr[emptyIndex] = pLockLogRouteId;/*ñid*/ + SwitchDataStruCC[bufIndex].PLockedLogRouteNum++; /*id1*/ } else {/*ֵ֧豸ĿӡϢ*/ @@ -540,19 +549,19 @@ void SetSwitchLockStaUseByLogRoute(const UINT16 pLockLogRouteId, const UINT16 sw /*ҵΪ0Ұ-1*/ for (ii = 0; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++) { - if (SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii] == pLockLogRouteId) + if (SwitchDataStruCC[bufIndex].PLockedLogRouteIdArr[ii] == pLockLogRouteId) { targetIndex = (INT16)ii; - SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii] = 0;/*Ϊ0*/ + SwitchDataStruCC[bufIndex].PLockedLogRouteIdArr[ii] = 0;/*Ϊ0*/ break; } } if (targetIndex >= 0)/*ҵ*/ { - if (SwitchDataStru[bufIndex].PLockedLogRouteNum > 0U) + if (SwitchDataStruCC[bufIndex].PLockedLogRouteNum > 0U) { - SwitchDataStru[bufIndex].PLockedLogRouteNum--;/*1*/ + SwitchDataStruCC[bufIndex].PLockedLogRouteNum--;/*1*/ } } } @@ -960,6 +969,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 +987,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 +2756,7 @@ UINT32 GetSwitchCollTolerateCycNum(const UINT16 switchId) { retVal = SwitchDataStru[bufIndex].SwitchCollTolerateCycNum; } - return(retVal); + return retVal; } /* @@ -2774,5 +2791,281 @@ 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Ƿ*/ + } +} + +/* +* OCת޻״̬ +* ˵const UINT16 switchId ID + const UINT8 chSwitchIncldeZzjNum ת޻ + UINT8* szSwitchIncldeZzjState ת޻״̬ +* ֵ + +*/ +void SetOcSwitchZzjState(const UINT16 switchId,const UINT8 chSwitchIncldeZzjNum,UINT8* szSwitchIncldeZzjState) +{ + + UINT16 bufIndex = 0U; /*±*/ + UINT8 ii = 0U; + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if (NULL == szSwitchIncldeZzjState) + { + ; /*ָΪգ*/ + } + else + { + if (SWITCH_SUM_MAX > bufIndex) + { + SwitchDataStru[bufIndex].chSwitchIncldeZzjNum = chSwitchIncldeZzjNum; /*õת޻Ŀ*/ + /*õת޻ļ̵״̬*/ + for (ii = 0; ii < chSwitchIncldeZzjNum; ii++) + { + SwitchDataStru[bufIndex].szSwitchIncldeZzjState[ii] = szSwitchIncldeZzjState[ii]; + } + } + else + { + /*IDǷ*/ + } + } +} +/* +* ȡת޻״̬ +* ˵const UINT16 switchId ID +* ֵUINT8* ת޻״̬ +*/ +UINT8* GetSwitchZzjState(const UINT16 switchId) +{ + + UINT16 bufIndex = 0U; /*±*/ + UINT8 ii = 0U; + UINT8 *retVal = NULL; /*ֵ*/ + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if (SWITCH_SUM_MAX > bufIndex) + { + retVal = SwitchDataStru[bufIndex].szSwitchIncldeZzjState; + } + return retVal; +} +/* +* OCת޻̵ +* ˵const UINT16 switchId ID + const UINT16 zzjIndex ת޻ + const UINT8 zzjState ̵״̬ +* ֵ +*/ +void SetSwitchZzjState(const UINT16 switchId, const UINT8 zzjIndex, const UINT8 zzjState) +{ + + UINT16 relaydingwei1 = 0U; /*̵λ1ID*/ + UINT16 relaydingwei2 = 0U; /*̵λ2ID*/ + + UINT16 relayfanwei1 = 0U; /*̵λ1ID*/ + UINT16 relayfanwei2 = 0U; /*̵λ2ID*/ + + ZzjPowerConfigDataStruct* zzjPowerConfigData = NULL; /*ת޻̵ݽṹָ*/ + + zzjPowerConfigData = GetSwitchZzjPowerConfigData(switchId); /*ȡת޻̵ݽṹָ*/ + + relaydingwei1 = zzjPowerConfigData[zzjIndex].ZzjDingweiPower1; + relaydingwei2 = zzjPowerConfigData[zzjIndex].ZzjDingweiPower2; + relayfanwei1 = zzjPowerConfigData[zzjIndex].ZzjFanweiPower1; + relayfanwei2 = zzjPowerConfigData[zzjIndex].ZzjFanweiPower2; + + /* ̵ID */ + if((RELAY_SUM_MAX > relaydingwei1)&&(RELAY_SUM_MAX > relaydingwei2) + &&(RELAY_SUM_MAX > relayfanwei1)&&(RELAY_SUM_MAX > relayfanwei2)) + { + switch (zzjState) + { + case OC_SWITCH_POSITION_DINGWEI: + /*ת޻λλ̵,λ̵£̵*/ + SetRelayDriveState(relaydingwei1, RELAY_DRIVE_STATE_UP); + SetRelayDriveState(relaydingwei2, RELAY_DRIVE_STATE_UP); + SetRelayDriveState(relayfanwei1, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relayfanwei2, RELAY_DRIVE_STATE_DOWN); + break; + case OC_SWITCH_POSITION_FANWEI: + /*ת޻λλλ̵𣬷λ̵£Ƶ*/ + SetRelayDriveState(relaydingwei1, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relaydingwei2, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relayfanwei1, RELAY_DRIVE_STATE_UP); + SetRelayDriveState(relayfanwei2, RELAY_DRIVE_STATE_UP); + break; + default: + /*ת޻Ƕλλλλ̵£*/ + SetRelayDriveState(relaydingwei1, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relaydingwei2, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relayfanwei1, RELAY_DRIVE_STATE_DOWN); + SetRelayDriveState(relayfanwei2, RELAY_DRIVE_STATE_DOWN); + break; + } + } + else + { + /*ʧܣ*/ + } + +} + +/* +* OCת޻ʶ״̬ +* ˵UINT16 switchId ID +* ֵ + +*/ +void SetOcSwitchIndicatorLightStatus(UINT16 switchId) +{ + UINT8 szSwitchZzjStateNum = 0U; /*ת޻Ŀ*/ + UINT8 ii = 0U; + UINT8 *switchzzjState = NULL; /*ת޻״ָ̬*/ + switchzzjState = GetSwitchZzjState(switchId); /*ȡת޻״ָ̬*/ + if(NULL == switchzzjState) + { + /*ȡת޻״ָ̬ʧܣ*/ + } + else + { + szSwitchZzjStateNum = SwitchDataStru[switchId].chSwitchIncldeZzjNum; + /*õת޻ļ̵״̬*/ + for (ii = 0; ii < szSwitchZzjStateNum; ii++) + { + SetSwitchZzjState(switchId, ii, switchzzjState[ii]); + } + + } + +} + +/* +* ȡϢ +* ˵ const UINT16 switchId, ID +* ֵ ս·ID +*/ +const UINT16* GetSwitchPLockedRouteIdArr(const UINT16 switchId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT16* retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if (SWITCH_SUM_MAX >bufIndex ) + { + retVal = SwitchDataStru[bufIndex].PLockedRouteIdArr; + } + + return retVal; +} + + +/* +* ȡս· +* ˵ const UINT16 switchId, ID +* ֵ ս· +*/ +UINT8 GetSwitchPLockedRouteNum(const UINT16 switchId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if (bufIndex < SWITCH_SUM_MAX) + { + retVal = SwitchDataStru[bufIndex].PLockedRouteNum; + } + return retVal; +} + + +/* +* ȡǷָ· +* ˵ const UINT16 switchId, ID +* ֵ CI_SUCCESS ѾջβϷCI_ERROR δý· +*/ +UINT8 GetSwitchThisRoutePLocked(const UINT16 switchId, const UINT16 routeId) +{ + + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if ((SWITCH_SUM_MAX >bufIndex)&&(0u < routeId)) + { + for (i = 0u; i < SwitchDataStru[bufIndex].PLockedRouteNum; i++) + { + if (routeId == SwitchDataStru[bufIndex].PLockedRouteIdArr[i]) + { + retVal = CI_SUCCESS; + break; + } + } + } + else + { + retVal = CI_SUCCESS;/*βϷ*/ + } + + return retVal; +} + +/* +* ȡǷָη +* ˵ const UINT16 switchId, ID +* ֵ CI_SUCCESS ѾջβϷCI_ERROR δñη +*/ +UINT8 GetSwitchThisOverlapPLocked(const UINT16 switchId, const UINT16 overlapId) +{ + + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = CI_ERROR; + UINT8 i = 0u; + + bufIndex = GetSwitchConfigBufIndex(switchId); /*ȡ±*/ + if ((SWITCH_SUM_MAX > bufIndex) && (0u < overlapId)) + { + for (i = 0u; i < SwitchDataStru[bufIndex].PLockedOverlapNum; i++) + { + if (overlapId == SwitchDataStru[bufIndex].PLockedOverlapIdArr[i]) + { + retVal = CI_SUCCESS; + break; + } + } + } + else + { + retVal = CI_SUCCESS;/*βϷ*/ + } + + return retVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h index 94c8c69..db8527c 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDataManage.h @@ -68,9 +68,6 @@ typedef struct S_SwitchDataStruct UINT8 PLockedNonRouteNum;/*յķǽ·idֻڱļʹ*/ UINT16 PLockedNonRouteIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM];/*յķǽ·id飬ֻڱļʹ*/ - UINT8 PLockedLogRouteNum;/*յ߼·idֻڱļʹ*/ - UINT16 PLockedLogRouteIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM];/*յ߼·id飬ֻڱļʹ*/ - UINT32 DFHRelayValidCycNum; /*DFH̵ЧDFH̵״̬Ч*/ UINT32 SigleDFHRelayValidCycNum; /*DFH̵ЧDFH̵״̬Ч*/ UINT32 YCRelayValidCycNum; /*YC̵ЧYC̵״̬Ч*/ @@ -82,11 +79,22 @@ typedef struct S_SwitchDataStruct UINT8 chSwitchJichaState; /*״̬*/ UINT8 cSwitchUsingState; /*״̬0x11δã0x22ã0x44ã0x88ȡ*/ UINT32 SwitchCollTolerateCycNum; /*ɼĿ*/ + + + UINT8 chSwitchIncldeZzjNum; /*Ӧת޻Ŀ豸ΪźŻʱ,˸Ϊ0*/ + UINT8 szSwitchIncldeZzjState[SWITCH_ZZJ_POWER_STATE_MAX_NUM];/*ת޻״̬*/ } SwitchDataStruct; +/*ݽṹ*/ +typedef struct S_SwitchDataStructCC +{ + UINT16 SwitchId; /*ID (ֶ)*/ + UINT8 PLockedLogRouteNum; /*յ߼·idֻڱļʹ*/ + UINT16 PLockedLogRouteIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM]; /*յ߼·id飬ֻڱļʹ*/ +}SwitchDataStructCC; /*******************************ȫֱ*******************************/ extern SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /*ݽṹ*/ - +extern SwitchDataStructCC SwitchDataStruCC[SWITCH_SUM_MAX]; /*ݽṹ*/ /* * ȡָID * ˵ @@ -94,6 +102,13 @@ extern SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /* SwitchDataStruct * */ SwitchDataStruct *GetSwitchData(void); +/* +* ȡָIDݳ +* ˵ +* ֵ + SwitchDataStructCC * +*/ +SwitchDataStructCC* GetSwitchDataCC(void); /* * ȡָID״̬ @@ -679,6 +694,61 @@ 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); + + +/* +* OCת޻״̬ +* ˵const UINT16 switchId ID + const UINT8 chSwitchIncldeZzjNum ת޻ + UINT8* szSwitchIncldeZzjState ת޻״̬ +* ֵ +*/ +void SetOcSwitchZzjState(const UINT16 switchId, const UINT8 chSwitchIncldeZzjNum, UINT8* szSwitchIncldeZzjState); + +/* +* ȡת޻״̬ +* ˵const UINT16 switchId ID +* ֵUINT8* ת޻״̬ +*/ +UINT8* GetSwitchZzjState(const UINT16 switchId); +/* +* OCת޻̵ +* ˵const UINT16 switchId ID + const UINT16 zzjIndex ת޻ + const UINT8 zzjState ̵״̬ +* ֵ +*/ +void SetSwitchZzjState(const UINT16 switchId, const UINT8 zzjIndex, const UINT8 zzjState); + + +/* +* OCת޻ʶ״̬ +* ˵UINT16 switchId ID +* ֵ +*/ +void SetOcSwitchIndicatorLightStatus(UINT16 switchId); + +/* +* ȡǷָ· +* ˵ const UINT16 switchId, ID +* ֵ CI_SUCCESS ѾջβϷCI_ERROR δý· +*/ +UINT8 GetSwitchThisRoutePLocked(const UINT16 switchId, const UINT16 routeId); +/* +* ȡǷָη +* ˵ const UINT16 switchId, ID +* ֵ CI_SUCCESS ѾջβϷCI_ERROR δñη +*/ +UINT8 GetSwitchThisOverlapPLocked(const UINT16 switchId, const UINT16 overlapId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h index 1db219f..e249e95 100644 --- a/TSCP/src/APP/ciapp/Switch/SwitchDefine.h +++ b/TSCP/src/APP/ciapp/Switch/SwitchDefine.h @@ -69,7 +69,6 @@ #define OC_SWITCH_POSITION_FANWEI ((UINT8)0xaa) /*ocλ*/ #define OC_SWITCH_POSITION_SIKAI ((UINT8)0xcc) /*ocĿ*/ #define OC_SWITCH_POSITION_MOVE ((UINT8)0x3c) /*ocƶ*/ -#define OC_SWITCH_POSITION_UNKNOW ((UINT8)0x33) /*ocδ֪*/ /*OCλ*/ #define OC_SWITCH_DRIVE_POS_DINGWEI ((UINT16)0x5555) /*λ*/ @@ -141,5 +140,12 @@ #define COLLTOLERATE_CYCNUM 2U /*ɼ*/ +#define SEND_CIM_COLLTOLERATE_DW 0x55u /*λ*/ +#define SEND_CIM_COLLTOLERATE_FW 0xAAu /*λ*/ +#define SEND_CIM_COLLTOLERATE_NO 0xffu /*޲*/ + + +#define SWITCH_ZZJ_POWER_STATE_MAX_NUM 5U /*ת޻ʶ״̬*/ + #endif diff --git a/TSCP/src/APP/ciapp/System/CiSystemDefine.h b/TSCP/src/APP/ciapp/System/CiSystemDefine.h index 24b43d8..aa4fff3 100644 --- a/TSCP/src/APP/ciapp/System/CiSystemDefine.h +++ b/TSCP/src/APP/ciapp/System/CiSystemDefine.h @@ -10,23 +10,24 @@ * ޸ļ¼ * ********************************************************/ - #ifndef _CI_SYSTEM_DEFINE_H_ #define _CI_SYSTEM_DEFINE_H_ - +#include "CommonTypes.h" +#pragma once /*CIվĿֵ*/ #define CI_SUM_MAX ((UINT16)25) /*CIվĿֵ*/ #define CI_COM_CI_MAX_NUM ((UINT16)5) /*ͨ*/ - - +extern UINT8 CI_SYSTEM_TYPE_RCI; /*ϵͳ*/ -#define CI_SYSTEM_TYPE_CI ((UINT8)0x3C) /*CI*/ +//#define CI_SYSTEM_TYPE_RCI (LocalRcWorkMode) #define CI_SYSTEM_TYPE_ZC ((UINT8)0x1E) /*ZC*/ #define CI_SYSTEM_TYPE_ATS ((UINT8)0x03) /*ATS*/ #define CI_SYSTEM_TYPE_TMC ((UINT8)0x2B) /*TMC*/ #define CI_SYSTEM_TYPE_XIANDI ((UINT8)0x4d) /*ֵ*/ #define CI_SYSTEM_TYPE_LEU ((UINT8)0x5e) /*LEU*/ -#define CI_SYSTEM_TYPE_VOBC ((UINT8)0x14) /*VOBC*/ +#define CI_SYSTEM_TYPE_VOBC ((UINT8)0x14) /*VOBCFAO*/ +#define CI_SYSTEM_TYPE_IVOC ((UINT8)0x10) /*IVOC*/ +#define CI_SYSTEM_TYPE_IVOC_TO_ATS ((UINT8)0x15) /*IVOCATSӿã*/ #define CI_SYSTEM_TYPE_VOBC_BACKUP ((UINT8)0x13) /*ͨVOBC*/ #define CI_SYSTEM_TYPE_PLATFORM ((UINT8)0x9f) /*PSD*/ #define CI_SYSTEM_TYPE_PSC ((UINT8)0x61) /*PSC*/ @@ -34,6 +35,8 @@ #define CI_SYSTEM_TYPE_AXIS ((UINT8)0xa0) /*ϵͳ*/ #define CI_SYSTEM_TYPE_ATS_INTERFACE ((UINT8)0x7d) /*ATS*/ #define CI_SYSTEM_TYPE_ITE ((UINT8)0x2F) /*ITE*/ +#define CI_SYSTEM_TYPE_CI RC_WORK_MODE_CI /*CI*/ +#define CI_SYSTEM_TYPE_RC RC_WORK_MODE_TIOC /*RC*/ /*ϵձ־*/ #define CI_START_LOCK_YES ((UINT8)0xAA) /*ϵ*/ @@ -90,6 +93,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 +155,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 +225,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 +254,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ֵ*/ @@ -270,6 +280,7 @@ #define OC_SUM_MAX ((UINT16)100) /*CIͨŵOC IDֵ*/ #define AXLE_SUM_MAX ((UINT16)100) /*CIͨŵļϵͳ IDֵ*/ +#define ATS_SUM_MAX ((UINT16)255) /*CIͨŵATSϵͳ IDֵ*/ #define TIOCFS_VERSION_LENGTH 4U /*汾ų*/ diff --git a/TSCP/src/APP/ciapp/System/SystemConfigDefine.h b/TSCP/src/APP/ciapp/System/SystemConfigDefine.h index a71feb5..9a08edb 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)24) /*ϵͳ汾*/ #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_RETURN_SUBCI_CI_CID ((UINT8)0) /*ϵͳع汾*/ #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)24) /*汾*/ +#define VER_SOFT_SUBVERSION ((UINT8)1) /*Ӱ汾*/ #endif /*ɼݵĹݽṹ汾*/ -#define VER_1_PUBLIC_FS_1 ((UINT8)30) -#define VER_1_PUBLIC_FS_2 ((UINT8)14) +#define VER_1_PUBLIC_FS_1 ((UINT8)31) +#define VER_1_PUBLIC_FS_2 ((UINT8)1) #define VER_1_PUBLIC_FS_3 ((UINT8)0) #define VER_1_PUBLIC_FS_4 ((UINT8)0) @@ -91,14 +91,14 @@ #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)17) /*ɼݵ˽ݽṹ汾*/ -#define VER_1_PRIVATE_FS_1 ((UINT8)39) +#define VER_1_PRIVATE_FS_1 ((UINT8)47) #define VER_1_PRIVATE_FS_2 ((UINT8)0) #define VER_2_PRIVATE_FS_1 ((UINT8)0xFF) @@ -108,9 +108,9 @@ #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)33) /*oc 3.0 ݰ汾*/ #define VER_1_OCDATA_FS_2 ((UINT8)0) -#define VER_2_OCDATA_FS_1 ((UINT8)24) /*oc 2.1.6*/ -#define VER_2_OCDATA_FS_2 ((UINT8)1) +#define VER_2_OCDATA_FS_1 ((UINT8)29) /*oc 2.1.11*/ +#define VER_2_OCDATA_FS_2 ((UINT8)0) #endif diff --git a/TSCP/src/APP/ciapp/System/SystemParameterManage.c b/TSCP/src/APP/ciapp/System/SystemParameterManage.c index 0f93563..efd7642 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.c +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.c @@ -24,12 +24,12 @@ static UINT16 LocalUTNearUnLockTime = 0u;/* static UINT16 LocalCTNearUnLockTime = 0u;/*CTӽʱʱ䣨s*/ static UINT8 LocalWaysidePattern = 0u; /*Լ̵ӿ*/ /* RCϲTIOCܻ */ -static UINT8 LocalRcWorkMode = 0u; /* RCģʽ */ +UINT8 CI_SYSTEM_TYPE_RCI = 0u; /*ģʽ0x3C-CI,0x3D-RC*/ static UINT8 gLocalRcLinkLineAttr = 0u; /* RC */ - +static UINT8 gSystemWorkType = 0u; /* RC/CIϵͳ */ UINT8 gLocalOcType = 0u; /*OCݽṹ*/ - - +UINT8 gLocalPublicDataType = 0u; /*ͣ28.0.0.11¹ݽṹʹã*/ +UINT8 localBackUpFlag = 0U; /*/ģʽ*/ SystemParameterStructNew SystemParameterStruNew;/*ϵͳ*/ DquCiFuncSwitchStructNew CiFuncSwitConfStruNew[CI_FUNCTION_SWITCH_SUM_MAX];/*ܿؽṹ*/ @@ -108,6 +108,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; /*-·С*/ @@ -115,6 +116,7 @@ CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci oc static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOCݰ汾 */ +UINT32 gSystemUpdateMainUseCycNum = 0U; /*ϵͳʼں*/ /* * ϵͳʱת * ˵ void @@ -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*/ } /* @@ -907,6 +912,7 @@ UINT32 GetCiAndVobcTransBadEnsureTime(void) return SystemParameterStruNew.CiAndVobcTransmitBadEnsureTime; } + /* * ȡZCͨжȷʱ䵥λ * ˵ @@ -1335,7 +1341,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 +1354,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 +1422,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 +2356,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) @@ -2453,7 +2476,7 @@ UINT8 SetLocalRcWorkMode(UINT8 localRcWorkMode) if ((RC_WORK_MODE_CI == localRcWorkMode) || (RC_WORK_MODE_TIOC == localRcWorkMode)) { - LocalRcWorkMode = localRcWorkMode; + CI_SYSTEM_TYPE_RCI = localRcWorkMode; rtn = 1u; } @@ -2467,7 +2490,7 @@ UINT8 SetLocalRcWorkMode(UINT8 localRcWorkMode) */ UINT8 GetLocalRcWorkMode(void) { - return LocalRcWorkMode; + return CI_SYSTEM_TYPE_RCI; } /* * ȡ˹ʱ @@ -2720,7 +2743,7 @@ UINT8 SetOtherCiPara(UINT8* pDataAddr) { if (((CI_PATTERN_TRADITIONAL == pDataAddr[1]) || (CI_PATTERN_FULL_ELECTRONIC == pDataAddr[1])) && ((CI_CENTER_IO == pDataAddr[2]) || (CI_DISTRIBUTED_IO == pDataAddr[2])) - && ((RC_WORK_MODE_CI == pDataAddr[12]) || (RC_WORK_MODE_TIOC == pDataAddr[12]))) + && ((SYSTEM_WORK_MODE_ONLY == pDataAddr[12]) || (SYSTEM_WORK_MODE_ALL == pDataAddr[12]))) { SystemParameterStruNew.otherCICiParaStru[*pDataAddr].chOtherCiId = pDataAddr[0]; SystemParameterStruNew.otherCICiParaStru[*pDataAddr].chOtherCiType = pDataAddr[1]; @@ -2782,7 +2805,7 @@ OtherCiParaStruct GetOtherCiPara(const UINT8 chOtherCiId) } /* -* ȡCվBUTǿ׷ٹܿ +* ȡCվBUTʱ׷ٹܿ * ˵ * ֵaaر 55 * by cgh 20240815 @@ -2835,7 +2858,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 +2873,7 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern) * ֵ0x55 °汾 0xaa Ͼɰ汾 * Create: fan 20250210 */ -UINT8 GetLocalOcPattern() +UINT8 GetLocalOcPattern(void) { return gLocalOcType; } @@ -2886,4 +2909,218 @@ 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; +} + +/* +* ϵͳ +* ˵UINT8 chSystemWorkTypeϵͳ +* ֵCI_SUCCESS ɹ CI_ERROR ʧ +* BY CGH 20250825 +*/ +UINT8 SetSystemWorkType(UINT8 chSystemWorkType) +{ + UINT8 chReval = CI_ERROR; /*ֵ*/ + + if ((SYSTEM_WORK_MODE_ONLY == chSystemWorkType) || (SYSTEM_WORK_MODE_ALL == chSystemWorkType)) + { + gSystemWorkType = chSystemWorkType; + chReval = CI_SUCCESS; + } + else + { + ; + } + + return chReval; +} + +/* +* ȡϵͳ +* ˵ +* ֵϵͳ +* BY CGH 20250825 +*/ +UINT8 GetSystemWorkType(void) +{ + return gSystemWorkType; +} + +/* +* ȡֵܿ +* ˵ +* ֵFUNC_SWITCH_ON 0xAA ֶ֧ +* FUNC_SWITCH_OFF 0x55 ֶ֧ +* Created By LQ 2025.09.28 +*/ +UINT8 GetSndSideProtectFuncSwitch(void) +{ + UINT8 retVal = FUNC_SWITCH_OFF; + UINT8 cCiType = 0U; + + cCiType = GetLocalCiType(); + if ((CI_TYPE_ZX == cCiType) || (CI_TYPE_SCX == cCiType)) + { + retVal = GetCiFunctionSwitchConfig(FUNC_SWITCH_SND_SIDE_PROTECT); + } + else + { + retVal = FUNC_SWITCH_OFF; /*ĬϷ0x55ֶ֧*/ + } + + return retVal; +} + +/* +* ȡATSϵͳͨжȷ +* ˵ void +* ֵ ATSϵͳͨжȷ +* by cgh 20251104 +*/ +UINT32 GetCiAndAtsTransBadEnsureCnt(void) +{ + /*Ĭ12Sд*/ + return 40U; +} + +/* +* ȡATSϵͳͨжȷʱ䵥λ +* ˵ + +* ֵ ATSϵͳͨжȷʱ䵥λ +* BY CGH 20251104 +*/ +UINT32 GetCiAndAtsTransBadEnsureTime(void) +{ + /*Ĭ12Sд*/ + return 12000U; +} + + +/* +* ȡģʽ 0x55 0xAA 0xFF +* ˵void +* ֵģʽ +*/ +UINT8 GetLocalCiBackUpPattern(void) +{ + UINT8 localStatus = SYSTEM_WORK_MODE_UNAVAILABLE; + UINT8 chWorkType = GetSystemWorkType(); /*˫ϵģʽ*/ + ENUM_AREA_STATE_T retState = MSCP_GetLastLocalAreaState(); + if (SYSTEM_WORK_MODE_ONLY == chWorkType) + { + localStatus = SYSTEM_WORK_MODE_MAIN; + } + else + { +#if (kPLATFORM==kVXWORKS) + + + + switch (retState) + { + case ENUM_AREA_MASTER: + localStatus = SYSTEM_WORK_MODE_MAIN; + break; + case ENUM_AREA_SLAVE: + localStatus = SYSTEM_WORK_MODE_BACKUP; + break; + default: + localStatus = SYSTEM_WORK_MODE_UNAVAILABLE; + break; + } +#else + switch (localBackUpFlag) + { + case 0x55: + localStatus = SYSTEM_WORK_MODE_MAIN; + break; + case 0xaa: + localStatus = SYSTEM_WORK_MODE_BACKUP; + break; + default: + localStatus = SYSTEM_WORK_MODE_UNAVAILABLE; + break; + } +#endif + } + + return localStatus; +} + +/** +* @brief ϵͳʼں +* @param[in] void +* @return +* @note by cgh 20251110 +*/ +void UpdateSystemMainUseCyc(void) +{ + UINT32 dwCurCycNum = Get2oo2CurCycleNum(); /*ǰ*/ + UINT8 chLocalAreaState = 0U; /*ǰ״̬*/ + + chLocalAreaState = GetLocalCiBackUpPattern(); + + if (SYSTEM_WORK_MODE_MAIN == chLocalAreaState) + { + if (0U != gSystemUpdateMainUseCycNum) + { + /*ѾùһֱάãͲ*/ + } + else + { + gSystemUpdateMainUseCycNum = dwCurCycNum; + } + } + else + { + /*Ϊϵ˾øںΪ0*/ + gSystemUpdateMainUseCycNum = 0U; + } +} + +/** +* @brief ȡϵͳʼں +* @param[in] void +* @return +* @note by cgh 20251110 +*/ +UINT32 GetSystemUpdateMainUseCycNum(void) +{ + return gSystemUpdateMainUseCycNum; } \ 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..eafb0a6 100644 --- a/TSCP/src/APP/ciapp/System/SystemParameterManage.h +++ b/TSCP/src/APP/ciapp/System/SystemParameterManage.h @@ -19,6 +19,12 @@ #include "../System/CiSystemDefine.h" #include "../2oo2/2oo2InterfaceDataManage.h" #include "DebugPrintInterface.h" +#if (kPLATFORM == kVXWORKS) + +#include "MSCP_APP_Interface.h" + +#endif + #ifdef __cplusplus @@ -34,6 +40,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 +99,11 @@ 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_SWITCH_SND_SIDE_PROTECT ((UINT8)70) /*أ0xAA-ֶ֧ 0x55-ֶ֧*/ +#define FUNC_ATS_INTERFACE_IDENTIFIER ((UINT8)71) /*ATSӿڱʶ01GALͷ 02GALͷ*/ #define CiSum_ID ((UINT16)1)/*ʵվ */ @@ -166,10 +178,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+ͨ»*/ @@ -180,6 +194,9 @@ extern "C" { #define SCX_CLD_INTERFACE_RELAY ((UINT8)0x55) /*Գ복βü̵ӿ*/ #define SCX_CLD_SERIAL_PORT_COMM ((UINT8)0x5A) /*Գ복βôڽӿ*/ #define SCX_NONELOCAL_MODE ((UINT8)0xA5) /*Գ*/ +#define ATS_INTERFACE_NO_GAL ((UINT8)0x01) /*ATSӿGAL*/ +#define ATS_INTERFACE_EXIST_GAL ((UINT8)0x02) /*ATSӿڴGAL*/ + #define UP_VALID ((UINT8)0x55) /*۳̵Ч*/ #define DOWN_VALID ((UINT8)0xaa) /*۳̵Ч*/ @@ -190,14 +207,21 @@ extern "C" { #define CI_CENTER_IO ((UINT8)0x55)/*ʽIO*/ #define CI_DISTRIBUTED_IO ((UINT8)0xAA)/*ֲʽIO*/ -#define Oc_Max_Board_Num (20U) /*һOC忨Ŀ*/ +#define Oc_Max_Board_Num (57U) /*һOC忨Ŀϲ8+3*16=56飩*/ #define CI_SIGNAL_MAX ((UINT16)300) /*һCIźŻĿ*/ #define CI_SWITCH_MAX ((UINT16)100) /*һCIĿ*/ #define CI_GD_MAX ((UINT16)700) /**/ -#define RC_WORK_MODE_CI ((UINT8)0x55u) /*ģʽ*/ -#define RC_WORK_MODE_TIOC ((UINT8)0xAAu) /*TIOCģʽ*/ +#define RC_WORK_MODE_CI ((UINT8)0x3Cu) /*ģʽ*/ +#define RC_WORK_MODE_TIOC ((UINT8)0x3Du) /*TIOCģʽ*/ + +#define SYSTEM_WORK_MODE_ONLY ((UINT8)0x55u) /*RC/CIϵͳģʽ*/ +#define SYSTEM_WORK_MODE_ALL ((UINT8)0xAAu) /*RC/CI˫ϵͳģʽ*/ + +#define SYSTEM_WORK_MODE_MAIN ((UINT8)0x55u) /*RCģʽ*/ +#define SYSTEM_WORK_MODE_BACKUP ((UINT8)0xAAu) /*RCģʽ*/ +#define SYSTEM_WORK_MODE_UNAVAILABLE ((UINT8)0xFFu) /*RCã˫ϵͳģʽδжʱ*/ #define RELAY_PATTERN_TRADITIONAL 0x55U /*̵ӿ*/ #define RELAY_PATTERN_FULL_ELECTRONIC 0xAAU /*Ǽ̵ӿ*/ @@ -208,8 +232,14 @@ 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 OC300_VER2_0_ANDAFTER ((UINT8)0x05U)/*ܿ7Ϊ5OC300 2.0汾Ժӿ*/ #define RC_LINK_LINE_YES ((UINT8)0x55U) /*߱*/ #define RC_LINK_LINE_NO ((UINT8)0xAAU) /*߱*/ @@ -387,6 +417,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,9 +492,11 @@ 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ϵ*/ - +extern UINT32 gSystemUpdateMainUseCycNum; /*ϵͳʼں*/ +extern UINT8 localBackUpFlag; /*/ģʽ*/; /* ԭڴϵֱ־*/ /* * ϵͳʱת * ˵ void @@ -479,7 +513,7 @@ void SystemParaTimeToCycleCount(void); UINT32 TimeToCycleCount(const UINT32 deviceTime, const UINT32 appTime); /* -* ȡں +* ȡʱ * ˵ void * ֵ UINT8 */ @@ -1138,6 +1172,7 @@ extern UINT8 SetLocalRcWorkMode(UINT8 localRcWorkMode); * ֵRCģʽ */ extern UINT8 GetLocalRcWorkMode(void); + /* * ȡ˹ʱ * ˵ void @@ -1360,7 +1395,7 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern); * ֵ0x55 °汾 0xaa Ͼɰ汾 * Create: fan 20250210 */ -UINT8 GetLocalOcPattern(); +UINT8 GetLocalOcPattern(void); /* * ܣRC @@ -1377,6 +1412,95 @@ 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); + +/* +* ϵͳ +* ˵UINT8 chSystemWorkTypeϵͳ +* ֵCI_SUCCESS ɹ CI_ERROR ʧ +* BY CGH 20250825 +*/ +UINT8 SetSystemWorkType(UINT8 chSystemWorkType); + +/* +* ȡϵͳ +* ˵ +* ֵϵͳ +* BY CGH 20250825 +*/ +UINT8 GetSystemWorkType(void); + +/* +* ȡֵܿ +* ˵ +* ֵFUNC_SWITCH_ON 0xAA ֶ֧ +* FUNC_SWITCH_OFF 0x55 ֶ֧ +* Created By LQ 2025.09.28 +*/ +UINT8 GetSndSideProtectFuncSwitch(void); + +/* +* ȡATSϵͳͨжȷ +* ˵ void +* ֵ ATSϵͳͨжȷ +* by cgh 20251104 +*/ +UINT32 GetCiAndAtsTransBadEnsureCnt(void); + +/* +* ȡATSϵͳͨжȷʱ䵥λ +* ˵ + +* ֵ ATSϵͳͨжȷʱ䵥λ +* BY CGH 20251104 +*/ +UINT32 GetCiAndAtsTransBadEnsureTime(void); + +/* +* ȡģʽ +* ˵void +* ֵģʽ +*/ +UINT8 GetLocalCiBackUpPattern(void); + +/** +* @brief ϵͳʼں +* @param[in] void +* @return +* @note by cgh 20251110 +*/ +void UpdateSystemMainUseCyc(void); + +/** +* @brief ȡϵͳʼں +* @param[in] void +* @return +* @note by cgh 20251110 +*/ +UINT32 GetSystemUpdateMainUseCycNum(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c b/TSCP/src/APP/ciapp/Train/EvacuationAreaManage.c index fc79fc2..6d5fe44 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]); @@ -3421,7 +3534,7 @@ UINT8 AxisSecAddProAreaCheck(const UINT16 wAxisSecId,const UINT8 chSetAreaType,c if ((0U < wAxisSecId) && (AXIS_SECTION_SUM_MAX > wAxisSecId) && ((PA_TYPE_DA == chSetAreaType) || (PA_TYPE_EA == chSetAreaType)) - && (((0U < wTrainId) && (TRAIN_SUM_MAX > wTrainId)) || ((TRAIN_ID_MIN < wTrainId) && (TRAIN_ID_MAX > wTrainId)))) + && (((0U < wTrainId) && (TRAIN_SUM_MAX > wTrainId)) || ((TRAIN_ID_MIN_IVOC < wTrainId) && (TRAIN_ID_MAX_IVOC > wTrainId)))) { wAxisIncLinkBuf = EaGetAcLinkId(wAxisSecId); @@ -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..d25b316 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDataManage.c +++ b/TSCP/src/APP/ciapp/Train/TrainDataManage.c @@ -27,9 +27,11 @@ 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 };/*ɳ崻г*/ +InputTrainInfoStru gTrainInfoTemp[TRAIN_SUM_MAX] = { 0 };/*ݴVOBC-RCгݣ迼2*/ + /** * @brief гǰȫϢгȫλú * @param UINT16 trainID @@ -205,15 +207,27 @@ UINT8 TrainDataModuleInit(void) UINT8 chCycle = 0U; UINT8 cRetVal = CI_ERROR; UINT8 ii = 0U; + UINT8 cWorkMode = 0U; /*егϢṹ*/ (void)CommonMemSet((void*)&gstTrainInfo, (UINT32)(sizeof(TrainInfoStru)*TRAIN_SUM_MAX), 0U, (UINT32)(sizeof(TrainInfoStru)*TRAIN_SUM_MAX)); + /*егϢṹ*/ + (void)CommonMemSet((void*)&gTrainInfoTemp, (UINT32)(sizeof(InputTrainInfoStru) * TRAIN_SUM_MAX), 0U, (UINT32)(sizeof(InputTrainInfoStru) * TRAIN_SUM_MAX)); + /*еггδ*/ for (chCycle = 1U; chCycle < TRAIN_SUM_MAX; chCycle++) { cRetVal = CI_SUCCESS; - gstTrainInfo[chCycle].wTrainId = (UINT16)((((UINT16)CI_SYSTEM_TYPE_VOBC) << 8) + chCycle); + cWorkMode = GetLocalRcWorkMode(); + if (RC_WORK_MODE_CI == cWorkMode) + { + gstTrainInfo[chCycle].wTrainId = TRAIN_ID_MIN + (UINT16)chCycle; + } + else + { + gstTrainInfo[chCycle].wTrainId = TRAIN_ID_MIN_IVOC + (UINT16)chCycle; /*㰲ȫλûȡгʱҪʹгͣڴ˴ʼ*/ + } gstTrainInfo[chCycle].dwIvocCycle = 0U; gstTrainInfo[chCycle].chTrainDir = DIR_INVALID; gstTrainInfo[chCycle].chTrainDir_MaxTail = DIR_INVALID; @@ -291,7 +305,7 @@ UINT8 TrainDataModuleInit(void) /*еĺгABLϢṹ*/ (void)CommonMemSet((void*)&gstTrainInfo[chCycle].strAblTrainNeedData, (UINT32)sizeof(ABLTrainInfoStru), 0U, (UINT32)sizeof(ABLTrainInfoStru)); gstTrainInfo[chCycle].wTrainHeadSigId = 0U; - gstTrainInfo[chCycle].wTrainHeadTrainId = TRAIN_ID_MAX; + gstTrainInfo[chCycle].wTrainHeadTrainId = TRAIN_ID_INVAL; gstTrainInfo[chCycle].chTrainLocReverseRouteFlag = TRAIN_LOC_REV_ROUTE_FLAG_NONE; gstTrainInfo[chCycle].chAblTrainDir = DIR_INVALID; @@ -309,11 +323,69 @@ 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;/*ʼĬк*/ + + + gstTrainInfo[chCycle].chtrainControlMode = 0U; /*ǰسģʽ0κοģʽ1:IVOCأ2VOBC*/ + + + gstTrainInfo[chCycle].chTrainPostionMode = 0U; /*гλģʽ*/ + + + gszTrainId[gTrainSum] = gstTrainInfo[chCycle].wTrainId; gTrainSum++; + + + + gTrainInfoTemp[chCycle].wTrainId = (UINT16)chCycle; + + gTrainInfoTemp[chCycle].chVobcTrainDir = DIR_INVALID; + gTrainInfoTemp[chCycle].chVobcTrainDir_MaxTail = DIR_INVALID; + gTrainInfoTemp[chCycle].chVobcTrainDir_MaxHead = DIR_INVALID; + gTrainInfoTemp[chCycle].chVobcTrainDir_MinHead = DIR_INVALID; + gTrainInfoTemp[chCycle].wVobcTrainMaxHeadLink = 0U; + gTrainInfoTemp[chCycle].dwVobcTrainMaxHeadOffset = UINT32_MAX; + gTrainInfoTemp[chCycle].wVobcTrainMinTailLink = 0U; + gTrainInfoTemp[chCycle].dwVobcTrainMinTailOffset = UINT32_MAX; + gTrainInfoTemp[chCycle].wVobcTrainMinHeadLink = 0U; + gTrainInfoTemp[chCycle].dwVobcTrainMinHeadOffset = UINT32_MAX; + gTrainInfoTemp[chCycle].wVobcTrainMaxTailLink = 0U; + gTrainInfoTemp[chCycle].dwVobcTrainMaxTailOffset = UINT32_MAX; + gTrainInfoTemp[chCycle].chVobcSpeedDir = 0U; + gTrainInfoTemp[chCycle].wVobcTrainSpeed = 0U; + gTrainInfoTemp[chCycle].dwVobcDelayTime = 0U; /*Ϣӳʱ*/ + gTrainInfoTemp[chCycle].chVobcControlMode = 0U; /*Vobcģʽ*/ + gTrainInfoTemp[chCycle].chVobcTrainLevel = 0U; /*гм*/ + gTrainInfoTemp[chCycle].chVobcTrainModel = 0U; /*гģʽ*/ + + + + gTrainInfoTemp[chCycle].chIvocControlMode = 0u; /*Ivocģʽ*/ + gTrainInfoTemp[chCycle].chIvocTrainLevel = 0u; /*Ivocгм*/ + gTrainInfoTemp[chCycle].chIvocTrainModel = 0u; /*Ivocгģʽ*/ + gTrainInfoTemp[chCycle].wIvocTrainMaxHeadLink = 0u; /*IvocгȫǰLink*/ + gTrainInfoTemp[chCycle].dwIvocTrainMaxHeadOffset = UINT32_MAX; /*Ivocгȫǰƫ*/ + gTrainInfoTemp[chCycle].wIvocTrainMinHeadLink = 0u; /*IvocгСȫǰlink*/ + gTrainInfoTemp[chCycle].dwIvocTrainMinHeadOffset = UINT32_MAX; /*IvocгСȫǰƫ*/ + gTrainInfoTemp[chCycle].wIvocTrainMaxTailLink = 0u; /*IvocгȫLink*/ + gTrainInfoTemp[chCycle].dwIvocTrainMaxTailOffset = UINT32_MAX; /*Ivocгȫƫ*/ + gTrainInfoTemp[chCycle].wIvocTrainMinTailLink = 0u; /*IvocгСȫlink*/ + gTrainInfoTemp[chCycle].dwIvocTrainMinTailOffset = UINT32_MAX; /*IvocгСȫƫ*/ + gTrainInfoTemp[chCycle].chIvocTrainDir = DIR_INVALID; /*IvocгзСȫָͷ*/ + gTrainInfoTemp[chCycle].chIvocTrainDir_MaxTail = DIR_INVALID; /*Ivocгзȫˣ*/ + gTrainInfoTemp[chCycle].chIvocTrainDir_MinHead = DIR_INVALID; /*IvocгзСȫǰˣ*/ + gTrainInfoTemp[chCycle].chIvocTrainDir_MaxHead = DIR_INVALID; /*Ivocгзȫǰˣ*/ + gTrainInfoTemp[chCycle].chIvocSpeedDir = 0u; /*Ivocٶȷ*/ + gTrainInfoTemp[chCycle].wIvocTrainSpeed = 0u; /*Ivocгٶ*/ + gTrainInfoTemp[chCycle].dwIvocDelayTime = 0u; /*IvocϢӳʱ*/ + } + return cRetVal; } @@ -338,6 +410,8 @@ UINT16 GetTrainSum(void) return wRetVal; } + + /* * ȡָ±ӦгID * ˵ const UINT16 bufIndex, ± @@ -391,7 +465,8 @@ UINT16 GetTrainBufIndex(const UINT16 wTrainId) { UINT16 wRetVal = TRAIN_SUM_MAX; - if ((TRAIN_ID_MIN < wTrainId) && (TRAIN_ID_MAX > wTrainId)) + if (((TRAIN_ID_MIN < wTrainId) && (TRAIN_ID_MAX > wTrainId)) + || ((TRAIN_ID_MIN_IVOC < wTrainId) && (TRAIN_ID_MAX_IVOC > wTrainId))) { wRetVal = wTrainId & 0x00FFU; } @@ -2264,7 +2339,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); @@ -2310,6 +2384,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 +2421,7 @@ static void CalHeadTrainSafePosFromUnSafe(UINT16 wTrainId, UINT32 dwHeadDistance /*ȫλڲѯʧ*/ (void)SetTrainSafeHeadLink(wTrainId, 0U); (void)SetTrainSafeHeadOffset(wTrainId, UINT32_MAX); + ClearTrainSafeHeadDir(wTrainId); } } (void)SetTrainSafeHeadFlag(wTrainId); @@ -2439,6 +2515,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 +2553,7 @@ static void CalTailTrainSafePosFromUnSafe(UINT16 trainID, UINT32 tailDistance, { (void)SetTrainSafeTailLink(trainID, 0U); (void)SetTrainSafeTailOffset(trainID, UINT32_MAX); + ClearTrainSafeTailDir(trainID); } } } @@ -2637,6 +2715,8 @@ static void CalTrainSafePosition(void) else { /*аȫͨгķǰȫλü*/ + ClearTrainSafeHeadDir(wTrainId); + ClearTrainSafeTailDir(wTrainId); chResult = SetTrainSafeHeadLink(wTrainId, 0u); chResult &= SetTrainSafeHeadOffset(wTrainId, UINT32_MAX); chResult &= SetTrainSafeTailLink(wTrainId, 0u); @@ -2763,7 +2843,7 @@ void ClearTrainInfo(UINT16 wTrainId) /*еĺгABLϢṹ*/ (void)CommonMemSet((void*)&gstTrainInfo[wBufIndex].strAblTrainNeedData, (UINT32)sizeof(ABLTrainInfoStru), 0U, (UINT32)sizeof(ABLTrainInfoStru)); gstTrainInfo[wBufIndex].wTrainHeadSigId = 0U; - gstTrainInfo[wBufIndex].wTrainHeadTrainId = TRAIN_ID_MAX; + gstTrainInfo[wBufIndex].wTrainHeadTrainId = TRAIN_ID_INVAL; gstTrainInfo[wBufIndex].chTrainLocReverseRouteFlag = TRAIN_LOC_REV_ROUTE_FLAG_NONE; gstTrainInfo[wBufIndex].chAblTrainDir = DIR_INVALID; @@ -2782,6 +2862,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 { @@ -3275,10 +3358,11 @@ UINT8 GetTrainSafeHeadFlag(const UINT16 wTrainId) /** * @brief Ϣӳʱ -* @param UINT16 wTrainId +* @param UINT16 wTrainId гID +* UINT8 trainType г * @return Ϣӳʱ */ -UINT32 GetVobcMsgDelayTime(UINT16 wTrainId) +UINT32 CalTrainMsgDelayTime(UINT16 wTrainId, UINT8 trainType) { UINT32 RemainValidity = 0u; INT32 dwFunRtn = 0; @@ -3294,10 +3378,10 @@ UINT32 GetVobcMsgDelayTime(UINT16 wTrainId) CurrentOwnSN = Get2oo2CurCycleNum(); SNPeriod = GetSystemParaAppCycleTime(); - srcRecvCiMsgSN = GetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_VOBC, chId); - srcCrntOwnMsgSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_VOBC, chId); - srcPreOwnMsgSN = GetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_VOBC, chId); - srcPeriod = GetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_VOBC, chId); + srcRecvCiMsgSN = GetHLHTHeadCtxSrcOppSN(trainType, chId); + srcCrntOwnMsgSN = GetHLHTHeadCtxSrcCrntSN(trainType, chId); + srcPreOwnMsgSN = GetHLHTHeadCtxSrcOwnSN(trainType, chId); + srcPeriod = GetHLHTHeadCtxComPeriod(trainType, chId); dwFunRtn = CalVobcMsgDelayTime(CurrentOwnSN, SNPeriod, srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); @@ -3305,7 +3389,6 @@ UINT32 GetVobcMsgDelayTime(UINT16 wTrainId) return RemainValidity; } - /** * @brief ȡг * @param UINT8 *pDataBuff ݴ洢 @@ -3483,7 +3566,7 @@ UINT8 SetGroupTrainOtherId(const UINT16 wTrainId, const UINT16 wGroupOtherTrainI wBufIndex = GetTrainBufIndex(wTrainId); if (TRAIN_SUM_MAX > wBufIndex) { - if (((TRAIN_ID_MIN < wGroupOtherTrainId) && (TRAIN_ID_MAX > wGroupOtherTrainId)) + if (((TRAIN_ID_MIN_IVOC < wGroupOtherTrainId) && (TRAIN_ID_MAX_IVOC > wGroupOtherTrainId)) || (TRAIN_ID_INVAL == wGroupOtherTrainId)) { gstTrainInfo[wBufIndex].wGroupOtherTrainId = wGroupOtherTrainId; @@ -3505,7 +3588,7 @@ UINT8 SetGroupTrainOtherId(const UINT16 wTrainId, const UINT16 wGroupOtherTrainI /* * ȡָгʱһгID * ˵ const UINT16 wTrainId, гID -* ֵ ȡɹ0x1400-0x14ff0xffff +* ֵ ȡɹ0x1000-0x10ff0xffff * ȡʧܣ0 * : wsd 2022-06-16 */ @@ -3666,8 +3749,8 @@ UINT8 isTwoGroupRunTrain(const UINT16 wTrainA, const UINT16 wTrainB) UINT8 chGroupRelateB = 0u; UINT8 chRetVal = CI_ERROR; - if ((TRAIN_ID_MIN >= wTrainA) || (TRAIN_ID_MAX <= wTrainA) || - (TRAIN_ID_MIN >= wTrainB) || (TRAIN_ID_MAX <= wTrainB)) + if ((TRAIN_ID_MIN_IVOC >= wTrainA) || (TRAIN_ID_MAX_IVOC <= wTrainA) || + (TRAIN_ID_MIN_IVOC >= wTrainB) || (TRAIN_ID_MAX_IVOC <= wTrainB)) { chRetVal = CI_ERROR; } @@ -4032,13 +4115,17 @@ void NeighborGoodTrainProc(UINT8 chTiocId) UINT16 wTrainId = 0u; UINT8 chFromId = 0u; UINT32 dwCurCyc = 0u; - UINT32 dwRecvCyc = 0u; UINT8 chCtNum = 0u; UINT16 *pCtIds = NULL; UINT8 chCtIndex = 0u; UINT16 dwCycTime = 0u; UINT32 dwDelayTime = 0u; UINT8 chLocalId = 0u; + UINT32 SNPeriod = 0u; + UINT32 srcRecvCiMsgSN = 0u; + UINT32 srcCrntOwnMsgSN = 0u; + UINT32 srcPreOwnMsgSN = 0u; + UINT32 srcPeriod = 0u; chLocalId = GetSystemParaLocalCiId(); dwCycTime = GetSystemParaValue(AppCycleTime_ID); @@ -4049,7 +4136,6 @@ void NeighborGoodTrainProc(UINT8 chTiocId) chFromId = GetTrainMsgFromTiocId(wTrainId); if (chFromId == chTiocId) { - dwRecvCyc = GetCiTransmitRecvDataCycNum(chLocalId, CI_SYSTEM_TYPE_CI, chTiocId); dwDelayTime = GetTrainMsgDelayTime(wTrainId); chCtNum = GetTiocTransmitCtNum(chTiocId); pCtIds = GetTiocTransmitCtIds(chTiocId); @@ -4072,7 +4158,14 @@ void NeighborGoodTrainProc(UINT8 chTiocId) } else { - dwDelayTime += ((dwCurCyc - dwRecvCyc) * ((UINT32)(dwCycTime))); + /*ȻCTݣʹûͨͷϢӳ*/ + SNPeriod = GetSystemParaAppCycleTime(); + srcRecvCiMsgSN = GetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_RCI, chTiocId); + srcCrntOwnMsgSN = GetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_RCI, chTiocId); + srcPreOwnMsgSN = GetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_RCI, chTiocId); + srcPeriod = GetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_RCI, chTiocId); + /*ͨͷӳ*/ + dwDelayTime += (UINT32)CalVobcMsgDelayTime(dwCurCyc, SNPeriod, srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); (void)SetTrainMsgDelayTime(wTrainId, dwDelayTime); } } @@ -5095,6 +5188,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 +5239,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 +5338,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 +5436,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 +5521,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 +5566,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 +5601,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 +5650,6 @@ static void TrainAtsScreenSnd(void) {/* ͨȷϳɹ */ strCfmSnd->chOpStatus = CONFIRM_FIRST_SUCCESS; - SetTrainAtsScreenProc(); } else @@ -6820,13 +6930,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 +6978,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 +7006,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 +7024,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI { cErrStep = 2U; retVal = CI_ERROR; /*쳣0ʧ*/ - } + } if (CI_SUCCESS == retVal) { @@ -6928,12 +7049,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 +7072,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 +7120,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 +7169,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_IVOC_TO_ATS, (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 +7316,7 @@ UINT8 TrainResAndDirCheck(const UINT16 wTrainId, const UINT8 cQueryDir, const UI } else { - /*Чֱӷسɹ*/ + /*Чֱӷسɹ*/ } } else @@ -7069,7 +7330,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 +7358,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 +7385,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 +7406,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 +7679,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 +7690,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; } @@ -8959,7 +9263,7 @@ void SetTrainHeadTrainId(const UINT16 wTrainId, const UINT16 wHeadTrainId) */ UINT16 GetTrainHeadTrainId(const UINT16 wTrainId) { - UINT16 wRetVal = TRAIN_ID_MAX; + UINT16 wRetVal = TRAIN_ID_INVAL; UINT16 wBufIndex = 0U; wBufIndex = GetTrainBufIndex(wTrainId); @@ -8977,7 +9281,7 @@ UINT16 GetTrainHeadTrainId(const UINT16 wTrainId) /* * гǷCT -* ˵const UINT16 wTrainId гID0x14 +* ˵const UINT16 wTrainId гID0x10 * ֵCI_SUCCESS 1 CT * CI_ERROR 0 CT * Created By LQ 2024.07.25 @@ -9555,6 +9859,7 @@ void TrainPosMonitorProc(void) UINT16* pPhySecIncAxleSecId = NULL; /*ΰļ*/ UINT8 cPreMonitorState = TRAIN_POS_MONITOR_INVALID; /*һгλüල״̬*/ UINT8 cMonitorFailState = TRAIN_POS_MONITOR_INVALID; /*ʧܺҪõļල״̬*/ + UINT8 chAgTrainLeaveAgCheck = 0U; for (cTrainIndex = 0U; cTrainIndex < TRAIN_SUM_MAX; cTrainIndex++) { @@ -9624,11 +9929,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 { @@ -9893,6 +10207,18 @@ UINT8 ZXorSCXTrainPosMonitorCheck(const UINT16 wTrainId, UINT16* pMonitorLinkId, } } + /*гලλǷ*/ + cFuncRet = TrainPosMonitorIdleCheck(wTrainId); + if (CI_SUCCESS == cFuncRet) + { + /*ලλռãάԭ*/ + } + else + { + cMonitorFailState = TRAIN_POS_MONITOR_INVALID; + cRetVal = CI_ERROR; /*ලλÿУʧܣüලЧ*/ + } + *pMonitorFailState = cMonitorFailState; } else @@ -10370,6 +10696,18 @@ UINT8 CLDTrainPosMonitorCheck(const UINT16 wTrainId, UINT16* pMonitorLinkId, UIN } } + /*гලλǷ*/ + cFuncRet = TrainPosMonitorIdleCheck(wTrainId); + if (CI_SUCCESS == cFuncRet) + { + /*ලλռãάԭ*/ + } + else + { + cMonitorFailState = TRAIN_POS_MONITOR_INVALID; + cRetVal = CI_ERROR; /*ලλÿУʧܣüලЧ*/ + } + if (CI_SUCCESS == cRetVal) { *pMonitorLinkId = wTrainPosMonitorInLink; /*λüලЧʱlink*/ @@ -10847,3 +11185,2270 @@ 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 +* ֵ0 ʧ +* 1 ɹ +* Created By LQ 2025.08.08 +*/ +UINT8 TrainPosMonitorIdleCheck(const UINT16 wTrainId) +{ + UINT8 cRetVal = CI_ERROR; + UINT16 wTrainIndex = 0U; + UINT16 wTrainPosMonitorInLink = 0U; /*гλüල״̬Чʱlink*/ + UINT16 wTrainPosMonitorPhySec = 0U; /*гλüල*/ + UINT8 cPhySecOccState = 0U; + + wTrainIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wTrainIndex) + { + wTrainPosMonitorInLink = GetTrainPosMonitorInLink(wTrainId); + if (0U != wTrainPosMonitorInLink) + { + wTrainPosMonitorPhySec = GetLinkRelatedPhySec(wTrainPosMonitorInLink); + cPhySecOccState = GetPhySecCurMergeState(wTrainPosMonitorPhySec); + + if (SECTION_OCCUPY_YES == cPhySecOccState) + { + cRetVal = CI_SUCCESS; /*سɹ*/ + } + else + { + cRetVal = CI_ERROR; /*ʧ*/ + } + } + else + { + cRetVal = CI_SUCCESS; /*ලЧسɹ*/ + } + } + else + { + cRetVal = CI_ERROR; /*μʧܣʧ*/ + } + + return cRetVal; +} + +/* +* гȫͷ +* ˵ const UINT16 wTrainId, гID +* ֵ 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 + { + ; + } +} + + +/* +* ָVOBCгȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainHeadLinkId) + { + gTrainInfoTemp[wBufIndex].wVobcTrainMaxHeadLink = wTrainHeadLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָVOBCгȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwVobcTrainMaxHeadOffset = dwTrainHeadOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainTailLinkId) + { + gTrainInfoTemp[wBufIndex].wVobcTrainMaxTailLink = wTrainTailLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwVobcTrainMaxTailOffset = dwTrainTailOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + + +/* +* ָгСȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainHeadLinkId) + { + gTrainInfoTemp[wBufIndex].wVobcTrainMinHeadLink = wTrainHeadLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгСȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwVobcTrainMinHeadOffset = dwTrainHeadOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгСȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainTailLinkId) + { + gTrainInfoTemp[wBufIndex].wVobcTrainMinTailLink = wTrainTailLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгСȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwVobcTrainMinTailOffset = dwTrainTailOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainLevel геȼ +* ֵ 0: ȡʧ + 1: ݳɹ +*/ +UINT8 SetVobcTrainLevel(const UINT16 wTrainId, const UINT8 chTrainLevel) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((VOBC_TRAIN_LEVEL_CBTC == chTrainLevel) + || (VOBC_TRAIN_LEVEL_ITC == chTrainLevel) + || (VOBC_VOBC_TRAIN_LEVEL_IL == chTrainLevel) + || (VOBC_TRAIN_LEVEL_ABL == chTrainLevel) + || (TRAIN_LEVEL_BACKUP_UNKNOWN == chTrainLevel) + ) + { + gTrainInfoTemp[wBufIndex].chVobcTrainLevel = chTrainLevel; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* ֵ :гȼ +*/ +UINT8 GetVobcTrainLevel(const UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + chRetVal = gTrainInfoTemp[wBufIndex].chVobcTrainLevel; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetVobcTrainMode(const UINT16 wTrainId, const UINT8 chMode) +{ + UINT16 wBufIndex = 0U; + UINT8 chVobctrainMode = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + /*геļʻģʽVOBCʻģʽ궨岻ͬҪװ*/ + if (VOBC_TRAIN_MODE_AM == chMode) + { + chVobctrainMode = TRAIN_MODE_AM; + } + else if (VOBC_TRAIN_MODE_CM == chMode) + { + chVobctrainMode = TRAIN_MODE_CM; + } + else if (VOBC_TRAIN_MODE_RM == chMode) + { + chVobctrainMode = TRAIN_MODE_RM; + } + else if (VOBC_TRAIN_MODE_EUM == chMode) + { + chVobctrainMode = TRAIN_MODE_EUM; + } + else if (VOBC_TRAIN_MODE_FAM == chMode) + { + chVobctrainMode = TRAIN_MODE_FAM; + } + else if (VOBC_TRAIN_MODE_CAM == chMode) + { + chVobctrainMode = TRAIN_MODE_CAM; + } + else + { + chVobctrainMode = TRAIN_MODE_DEFAULT; + } + + gTrainInfoTemp[wBufIndex].chVobcTrainModel = chVobctrainMode; + } + else + { + ; + } + + + +} + +/* +* ָVOBCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetVobcControlMode(const UINT16 wTrainId, const UINT8 chMode) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) + && ((TRAIN_MAIN_MODE == chMode) + || (TRAIN_STANDBY_MODE == chMode) + ||(0u == chMode) + )) + { + gTrainInfoTemp[wBufIndex].chVobcControlMode = chMode; + } + else + { + ; + } +} + +/* +* ȡָVOBCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ سģʽ +*/ +UINT8 GetVobcControlMode(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + UINT8 rtVal = 0u; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + rtVal = gTrainInfoTemp[wBufIndex].chVobcControlMode; + } + else + { + /*޴*/ + } + return rtVal; +} + + +/* +* ָVOBCгСȫָͷз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гз +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainDir(const UINT16 wTrainId, const UINT8 chTrainDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 chDir = 0u; + UINT8 chLinkLogicDirUpAndDown = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_DIR_UP == chTrainDir) || (TRAIN_DIR_DOWN == chTrainDir)) + { + chLinkLogicDirUpAndDown = GetLinkLogicDirUpAndDown(); + + if (chLinkLogicDirUpAndDown == chTrainDir) + { + chDir = DIR_CONVERT; + } + else + { + chDir = DIR_SAME; + } + + /*гСȫ˵з*/ + gTrainInfoTemp[wBufIndex].chVobcTrainDir = chDir; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָVOBCгٶȷ +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainSpeedDir(const UINT16 wTrainId, const UINT8 chSpdDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_SPEED_DIR_BACKWARD == chSpdDir) + || (TRAIN_SPEED_DIR_FORWARD == chSpdDir)) + { + gTrainInfoTemp[wBufIndex].chVobcSpeedDir = chSpdDir; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָVobcгٶ +* ˵ const UINT16 wTrainId, гID +* const UINT16 wTrainSpd гٶ +* ֵ 0: ȡʧ +* 1 : ݳɹ +*/ +UINT8 SetVobcTrainSpeed(const UINT16 wTrainId, const UINT16 wTrainSpd) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainSpd) + { + gTrainInfoTemp[wBufIndex].wVobcTrainSpeed = wTrainSpd; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* гз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гзѻȡӪСָͷ +* ֵ CI_ERROR ʧ CI_SUCCESS óɹ +*/ +UINT8 SetVobcTrainOtherPointDir(const UINT16 wTrainId, const UINT8 chTrainDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wTrainIndex = 0U; + UINT16 linknum_MaxHead = 0u; + UINT16 linknum_MinHead = 0u; + UINT16 linknum_MaxTail = 0u; + LOD_STRU pMaxHead = { 0u }; /*ȫǰλ*/ + LOD_STRU pMinHead = { 0u }; /*Сȫǰλ*/ + LOD_STRU pMaxTail = { 0u }; /*ȫλ*/ + LOD_STRU pMinTail = { 0u }; /*Сȫλ*/ + UINT8 changerPNumtoMaxHead = 0u;/*Сȫλõȫǰλþķ仯*/ + UINT8 changerPNumtoMinHead = 0u;/*СȫλõСȫǰλþķ仯*/ + UINT8 changerPNumtoMaxTail = 0u;/*Сȫλõȫλþķ仯*/ + UINT32 dwlen_tomaxhead = 0u; + UINT32 dwlen_tominhead = 0u; + UINT32 dwlen_tomaxtail = 0u; + UINT16 linkID_maxhead[AS_LINK_MAX] = { 0u }; + UINT16 linkID_minhead[AS_LINK_MAX] = { 0u }; + UINT16 linkID_maxtail[AS_LINK_MAX] = { 0u }; + UINT8 dirToMaxhead = 0u; + UINT8 dirToMinhead = 0u; + UINT8 dirToMaxTail = 0u; + + UINT8 dirLogic = 0u; + + dirLogic = ConvertDirectionToLogic(chTrainDir); + wTrainIndex = GetTrainBufIndex(wTrainId); + pMaxHead.Lnk = gTrainInfoTemp[wTrainIndex].wVobcTrainMaxHeadLink; + pMaxHead.Off = gTrainInfoTemp[wTrainIndex].dwVobcTrainMaxHeadOffset; + pMinHead.Lnk = gTrainInfoTemp[wTrainIndex].wVobcTrainMinHeadLink; + pMinHead.Off = gTrainInfoTemp[wTrainIndex].dwVobcTrainMinHeadOffset; + pMaxTail.Lnk = gTrainInfoTemp[wTrainIndex].wVobcTrainMaxTailLink; + pMaxTail.Off = gTrainInfoTemp[wTrainIndex].dwVobcTrainMaxTailOffset; + pMinTail.Lnk = gTrainInfoTemp[wTrainIndex].wVobcTrainMinTailLink; + pMinTail.Off = gTrainInfoTemp[wTrainIndex].dwVobcTrainMinTailOffset; + + if ((0u == pMinTail.Lnk) && (UINT32_MAX == pMinTail.Off)) + { + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxHead = dirLogic; + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MinHead = dirLogic; + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxTail = dirLogic; + chRetVal = CI_SUCCESS; + } + else + { + /*鳵βȫǰ˵link*/ + dwlen_tomaxhead = dsuLenByPoint_GetDir(&pMinTail, &pMaxHead, &linknum_MaxHead, linkID_maxhead, &dirToMaxhead, &changerPNumtoMaxHead); + dwlen_tominhead = dsuLenByPoint_GetDir(&pMinTail, &pMinHead, &linknum_MinHead, linkID_minhead, &dirToMinhead, &changerPNumtoMinHead); + dwlen_tomaxtail = dsuLenByPoint_GetDir(&pMinTail, &pMaxTail, &linknum_MaxTail, linkID_maxtail, &dirToMaxTail, &changerPNumtoMaxTail); + + if ((TRAIN_SUM_MAX > wTrainIndex) + && (UINT32_MAX != dwlen_tomaxhead) && (UINT32_MAX != dwlen_tominhead) && (UINT32_MAX != dwlen_tomaxtail)) + { + + if ((0u != linknum_MaxHead) && (0u != linknum_MinHead) && (0u != linknum_MaxTail) + && (dirToMaxhead == dirLogic) && (dirToMinhead == dirLogic) && (dirToMaxTail == dirLogic)) + { + if (0u == changerPNumtoMaxHead % 2u) + {/*гβȫǰż仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxHead = dirLogic; + } + else + {/*гβȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxHead = ConvertTrainDir(dirLogic); + } + + if (0u == changerPNumtoMinHead % 2u) + {/*гβСȫǰż仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MinHead = dirLogic; + } + else + {/*гβСȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MinHead = ConvertTrainDir(dirLogic); + } + + if (0u == changerPNumtoMaxTail % 2u) + {/*гβȫż仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxTail = dirLogic; + } + else + {/*гβȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chVobcTrainDir_MaxTail = ConvertTrainDir(dirLogic); + + } + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + } + return chRetVal; +} + + +/* +* гз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гзѻȡӪСָͷ +* ֵ CI_ERROR ʧ CI_SUCCESS óɹ +*/ +UINT8 SetIvocTrainOtherPointDir(const UINT16 wTrainId, const UINT8 chTrainDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wTrainIndex = 0U; + UINT16 linknum_MaxHead = 0u; + UINT16 linknum_MinHead = 0u; + UINT16 linknum_MaxTail = 0u; + LOD_STRU pMaxHead = { 0u }; /*ȫǰλ*/ + LOD_STRU pMinHead = { 0u }; /*Сȫǰλ*/ + LOD_STRU pMaxTail = { 0u }; /*ȫλ*/ + LOD_STRU pMinTail = { 0u }; /*Сȫλ*/ + UINT8 changerPNumtoMaxHead = 0u;/*Сȫλõȫǰλþķ仯*/ + UINT8 changerPNumtoMinHead = 0u;/*СȫλõСȫǰλþķ仯*/ + UINT8 changerPNumtoMaxTail = 0u;/*Сȫλõȫλþķ仯*/ + UINT32 dwlen_tomaxhead = 0u; + UINT32 dwlen_tominhead = 0u; + UINT32 dwlen_tomaxtail = 0u; + UINT16 linkID_maxhead[AS_LINK_MAX] = { 0u }; + UINT16 linkID_minhead[AS_LINK_MAX] = { 0u }; + UINT16 linkID_maxtail[AS_LINK_MAX] = { 0u }; + UINT8 dirToMaxhead = 0u; + UINT8 dirToMinhead = 0u; + UINT8 dirToMaxTail = 0u; + + UINT8 dirLogic = 0u; + + dirLogic = ConvertDirectionToLogic(chTrainDir); + wTrainIndex = GetTrainBufIndex(wTrainId); + pMaxHead.Lnk = gTrainInfoTemp[wTrainIndex].wIvocTrainMaxHeadLink; + pMaxHead.Off = gTrainInfoTemp[wTrainIndex].dwIvocTrainMaxHeadOffset; + pMinHead.Lnk = gTrainInfoTemp[wTrainIndex].wIvocTrainMinHeadLink; + pMinHead.Off = gTrainInfoTemp[wTrainIndex].dwIvocTrainMinHeadOffset; + pMaxTail.Lnk = gTrainInfoTemp[wTrainIndex].wIvocTrainMaxTailLink; + pMaxTail.Off = gTrainInfoTemp[wTrainIndex].dwIvocTrainMaxTailOffset; + pMinTail.Lnk = gTrainInfoTemp[wTrainIndex].wIvocTrainMinTailLink; + pMinTail.Off = gTrainInfoTemp[wTrainIndex].dwIvocTrainMinTailOffset; + + if ((0u == pMinTail.Lnk) && (UINT32_MAX == pMinTail.Off)) + { + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxHead = dirLogic; + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MinHead = dirLogic; + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxTail = dirLogic; + chRetVal = CI_SUCCESS; + } + else + { + /*鳵βȫǰ˵link*/ + dwlen_tomaxhead = dsuLenByPoint_GetDir(&pMinTail, &pMaxHead, &linknum_MaxHead, linkID_maxhead, &dirToMaxhead, &changerPNumtoMaxHead); + dwlen_tominhead = dsuLenByPoint_GetDir(&pMinTail, &pMinHead, &linknum_MinHead, linkID_minhead, &dirToMinhead, &changerPNumtoMinHead); + dwlen_tomaxtail = dsuLenByPoint_GetDir(&pMinTail, &pMaxTail, &linknum_MaxTail, linkID_maxtail, &dirToMaxTail, &changerPNumtoMaxTail); + + if ((TRAIN_SUM_MAX > wTrainIndex) + && (UINT32_MAX != dwlen_tomaxhead) && (UINT32_MAX != dwlen_tominhead) && (UINT32_MAX != dwlen_tomaxtail)) + { + + if ((0u != linknum_MaxHead) && (0u != linknum_MinHead) && (0u != linknum_MaxTail) + && (dirToMaxhead == dirLogic) && (dirToMinhead == dirLogic) && (dirToMaxTail == dirLogic)) + { + if (0u == changerPNumtoMaxHead % 2u) + {/*гβȫǰż仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxHead = dirLogic; + } + else + {/*гβȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxHead = ConvertTrainDir(dirLogic); + } + + if (0u == changerPNumtoMinHead % 2u) + {/*гβСȫǰż仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MinHead = dirLogic; + } + else + {/*гβСȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MinHead = ConvertTrainDir(dirLogic); + } + + if (0u == changerPNumtoMaxTail % 2u) + {/*гβȫż仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxTail = dirLogic; + } + else + {/*гβȫǰ仯*/ + gTrainInfoTemp[wTrainIndex].chIvocTrainDir_MaxTail = ConvertTrainDir(dirLogic); + + } + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + } + return chRetVal; +} + +/* +* ȡָгȫǰlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMaxHeadLink(const UINT16 wTrainId) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + wRetVal = gTrainInfoTemp[wBufIndex].wVobcTrainMaxHeadLink; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* ȡָгȫlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMaxTailLink(const UINT16 wTrainId) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + wRetVal = gTrainInfoTemp[wBufIndex].wVobcTrainMaxTailLink; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* ȡָгСȫǰlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMinHeadLink(const UINT16 wTrainId) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + wRetVal = gTrainInfoTemp[wBufIndex].wVobcTrainMinHeadLink; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* ȡָгСȫlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMinTailLink(const UINT16 wTrainId) +{ + UINT16 wRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + wRetVal = gTrainInfoTemp[wBufIndex].wVobcTrainMinTailLink; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* ȡָгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* ֵ Ϣӳʱ +*/ +UINT32 GetVobcTrainMsgDelayTime(const UINT16 wTrainId) +{ + UINT32 wRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + wRetVal = gTrainInfoTemp[wBufIndex].dwVobcDelayTime; + } + else + { + wRetVal = CI_ERROR; + } + + return wRetVal; +} + +/* +* ȡָгȫǰƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMaxHeadOffset(const UINT16 wTrainId) +{ + UINT32 dwRetVal = UINT32_MAX; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + dwRetVal = gTrainInfoTemp[wBufIndex].dwVobcTrainMaxHeadOffset; + } + else + { + dwRetVal = UINT32_MAX; + } + + return dwRetVal; +} + +/* +* ȡָгȫƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMaxTailOffset(const UINT16 wTrainId) +{ + UINT32 dwRetVal = UINT32_MAX; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + dwRetVal = gTrainInfoTemp[wBufIndex].dwVobcTrainMaxTailOffset; + } + else + { + dwRetVal = UINT32_MAX; + } + + return dwRetVal; +} + +/* +* ȡָгСȫǰƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMinHeadOffset(const UINT16 wTrainId) +{ + UINT32 dwRetVal = UINT32_MAX; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + dwRetVal = gTrainInfoTemp[wBufIndex].dwVobcTrainMinHeadOffset; + } + else + { + dwRetVal = UINT32_MAX; + } + + return dwRetVal; +} + +/* +* ȡָгСȫƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMinTailOffset(const UINT16 wTrainId) +{ + UINT32 dwRetVal = UINT32_MAX; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + dwRetVal = gTrainInfoTemp[wBufIndex].dwVobcTrainMinTailOffset; + } + else + { + dwRetVal = UINT32_MAX; + } + + return dwRetVal; +} + +/* +* ָгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* const UINT32 dwDelayTime +* ֵ CI_ERROR: ʧ +CI_SUCCESS:ݳɹ +*/ +UINT8 SetVobcTrainMsgDelayTime(const UINT16 wTrainId, const UINT32 dwDelayTime) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT32_MAX != dwDelayTime) + { + gTrainInfoTemp[wBufIndex].dwVobcDelayTime = dwDelayTime; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгسģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetTrainControlMode(const UINT16 wTrainId, const UINT8 chMode) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) + && ((TRAIN_IVOC_MODE == chMode) + || (TRAIN_VOBC_MODE == chMode) + || (TRAIN_NO_MODE == chMode) + )) + { + gstTrainInfo[wBufIndex].chtrainControlMode = chMode; + } + else + { + ; + } +} + +/* +* ȡָгسģʽ +* ˵ const UINT16 wTrainId, гID +* ֵ +*/ +UINT8 GetTrainControlMode(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + UINT8 rtVal = 0u; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + rtVal = gstTrainInfo[wBufIndex].chtrainControlMode; + } + else + { + /*޴*/ + } + return rtVal; +} + +/** +* @brief سλϢڰȫλü +* @param гID +* @return +*/ +void InputMainTrainInformation(UINT16 wTrainId) +{ + UINT8 chTrainControlMode = 0u; + UINT16 wBufIndex = 0U; + UINT8 chIvocCtxValid = 0u; + UINT8 chVobcCtxValid = 0u; + UINT8 chInputFlag = 0u; + UINT8 chVobcLevel = 0u; + UINT8 chTrainPostionMode = 0U; + UINT8 chIvocLevel = 0u; + + chTrainControlMode = GetTrainControlMode(wTrainId); + chIvocCtxValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)wTrainId); + chVobcCtxValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)wTrainId); + if (TRAIN_IVOC_MODE == chTrainControlMode) + { + if (CI_SUCCESS == chIvocCtxValid) + { + /*ʹIVOCλ,¼־*/ + chInputFlag = 2u; + SetTrainPostionMode(wTrainId, CI_SYSTEM_TYPE_IVOC); + /*سȼ*/ + chIvocLevel = GetIvocTrainLevel(wTrainId); + SetTrainLevel(wTrainId, chIvocLevel); + } + else if (CI_SUCCESS == chVobcCtxValid) + { + /*ʹVOBCλ,¼־*/ + chInputFlag = 1u; + SetTrainPostionMode(wTrainId, CI_SYSTEM_TYPE_VOBC); + /*δʹسλãгȼΪUR*/ + SetTrainLevel(wTrainId, TRAIN_LEVEL_UR); + } + else + {/*ΪЧֵ*/ + + SetTrainPostionMode(wTrainId, 0U); + SetTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + } + + } + else if (TRAIN_VOBC_MODE == chTrainControlMode) + { + if (CI_SUCCESS == chVobcCtxValid) + { + chInputFlag = 1u; + SetTrainPostionMode(wTrainId, CI_SYSTEM_TYPE_VOBC); + /*سȼ*/ + chVobcLevel = GetVobcTrainLevel(wTrainId); + SetTrainLevel(wTrainId, chVobcLevel); + } + else if (CI_SUCCESS == chIvocCtxValid) + { + /*ʹIVOCλ,¼־*/ + chInputFlag = 2u; + + /*ֱʹIVOCϢɣ֮ǰѾùˣٴ*/ + SetTrainPostionMode(wTrainId, CI_SYSTEM_TYPE_IVOC); + /*δʹسλãгȼΪUR*/ + SetTrainLevel(wTrainId, TRAIN_LEVEL_UR); + } + else + {/*ΪЧֵ*/ + SetTrainPostionMode(wTrainId, 0U); + + SetTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + } + } + else + { + /*޴*/ + SetTrainPostionMode(wTrainId, 0U); + + SetTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + } + + /*λϢת*/ + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (1u == chInputFlag) + {/*ʹVOBCϢ*/ + gstTrainInfo[wBufIndex].chTrainDir = gTrainInfoTemp[wBufIndex].chVobcTrainDir; /*гзСȫָͷ*/ + gstTrainInfo[wBufIndex].chTrainDir_MaxTail = gTrainInfoTemp[wBufIndex].chVobcTrainDir_MaxTail; /*гзȫˣ*/ + gstTrainInfo[wBufIndex].chTrainDir_MinHead = gTrainInfoTemp[wBufIndex].chVobcTrainDir_MinHead; /*гзСȫǰˣ*/ + gstTrainInfo[wBufIndex].chTrainDir_MaxHead = gTrainInfoTemp[wBufIndex].chVobcTrainDir_MaxHead; /*гзȫǰˣ*/ + gstTrainInfo[wBufIndex].wTrainMaxHeadLink = gTrainInfoTemp[wBufIndex].wVobcTrainMaxHeadLink; /*гȫǰLink*/ + gstTrainInfo[wBufIndex].dwTrainMaxHeadOffset = gTrainInfoTemp[wBufIndex].dwVobcTrainMaxHeadOffset; /*гȫǰƫ*/ + gstTrainInfo[wBufIndex].wTrainMinHeadLink = gTrainInfoTemp[wBufIndex].wVobcTrainMinHeadLink; /*гСȫǰlink*/ + gstTrainInfo[wBufIndex].dwTrainMinHeadOffset = gTrainInfoTemp[wBufIndex].dwVobcTrainMinHeadOffset; /*гСȫǰƫ*/ + gstTrainInfo[wBufIndex].wTrainMaxTailLink = gTrainInfoTemp[wBufIndex].wVobcTrainMaxTailLink; /*гȫLink*/ + gstTrainInfo[wBufIndex].dwTrainMaxTailOffset = gTrainInfoTemp[wBufIndex].dwVobcTrainMaxTailOffset; /*гȫƫ*/ + gstTrainInfo[wBufIndex].wTrainMinTailLink = gTrainInfoTemp[wBufIndex].wVobcTrainMinTailLink; /*гСȫlink*/ + gstTrainInfo[wBufIndex].dwTrainMinTailOffset = gTrainInfoTemp[wBufIndex].dwVobcTrainMinTailOffset; /*гСȫƫ*/ + gstTrainInfo[wBufIndex].chSpeedDir = gTrainInfoTemp[wBufIndex].chVobcSpeedDir; /*ٶȷ*/ + gstTrainInfo[wBufIndex].wTrainSpeed = gTrainInfoTemp[wBufIndex].wVobcTrainSpeed; /*ٶ*/ + gstTrainInfo[wBufIndex].dwDelayTime = gTrainInfoTemp[wBufIndex].dwVobcDelayTime; /*ʱʱ*/ + gstTrainInfo[wBufIndex].chTrainModel = gTrainInfoTemp[wBufIndex].chVobcTrainModel; /*ʻģʽ*/ + + + } + else if (2u == chInputFlag) + {/*ʹIVOCϢ*/ + gstTrainInfo[wBufIndex].chTrainDir = gTrainInfoTemp[wBufIndex].chIvocTrainDir; /*гзСȫָͷ*/ + gstTrainInfo[wBufIndex].chTrainDir_MaxTail = gTrainInfoTemp[wBufIndex].chIvocTrainDir_MaxTail; /*гзȫˣ*/ + gstTrainInfo[wBufIndex].chTrainDir_MinHead = gTrainInfoTemp[wBufIndex].chIvocTrainDir_MinHead; /*гзСȫǰˣ*/ + gstTrainInfo[wBufIndex].chTrainDir_MaxHead = gTrainInfoTemp[wBufIndex].chIvocTrainDir_MaxHead; /*гзȫǰˣ*/ + gstTrainInfo[wBufIndex].wTrainMaxHeadLink = gTrainInfoTemp[wBufIndex].wIvocTrainMaxHeadLink; /*гȫǰLink*/ + gstTrainInfo[wBufIndex].dwTrainMaxHeadOffset = gTrainInfoTemp[wBufIndex].dwIvocTrainMaxHeadOffset; /*гȫǰƫ*/ + gstTrainInfo[wBufIndex].wTrainMinHeadLink = gTrainInfoTemp[wBufIndex].wIvocTrainMinHeadLink; /*гСȫǰlink*/ + gstTrainInfo[wBufIndex].dwTrainMinHeadOffset = gTrainInfoTemp[wBufIndex].dwIvocTrainMinHeadOffset; /*гСȫǰƫ*/ + gstTrainInfo[wBufIndex].wTrainMaxTailLink = gTrainInfoTemp[wBufIndex].wIvocTrainMaxTailLink; /*гȫLink*/ + gstTrainInfo[wBufIndex].dwTrainMaxTailOffset = gTrainInfoTemp[wBufIndex].dwIvocTrainMaxTailOffset; /*гȫƫ*/ + gstTrainInfo[wBufIndex].wTrainMinTailLink = gTrainInfoTemp[wBufIndex].wIvocTrainMinTailLink; /*гСȫlink*/ + gstTrainInfo[wBufIndex].dwTrainMinTailOffset = gTrainInfoTemp[wBufIndex].dwIvocTrainMinTailOffset; /*гСȫƫ*/ + gstTrainInfo[wBufIndex].chSpeedDir = gTrainInfoTemp[wBufIndex].chIvocSpeedDir; /*ٶȷ*/ + gstTrainInfo[wBufIndex].wTrainSpeed = gTrainInfoTemp[wBufIndex].wIvocTrainSpeed; /*ٶ*/ + gstTrainInfo[wBufIndex].dwDelayTime = gTrainInfoTemp[wBufIndex].dwIvocDelayTime; /*ʱʱ*/ + gstTrainInfo[wBufIndex].chTrainModel = gTrainInfoTemp[wBufIndex].chIvocTrainModel; /*ʻģʽ*/ + } + else + {/*޴*/ + + } + } + + + + chTrainPostionMode = GetTrainPostionMode(wTrainId); + if (0u == chTrainPostionMode) + { + /*ǰκгλÿʹãλϢ*/ + (void)SetTrainMaxHeadLink(wTrainId, 0u); + (void)SetTrainMaxHeadOffset(wTrainId, UINT32_MAX); + (void)SetTrainMinHeadLink(wTrainId, 0u); + (void)SetTrainMinHeadOffset(wTrainId, UINT32_MAX); + (void)SetTrainMaxTailLink(wTrainId, 0u); + (void)SetTrainMaxTailOffset(wTrainId, UINT32_MAX); + (void)SetTrainMinTailLink(wTrainId, 0u); + (void)SetTrainMinTailOffset(wTrainId, UINT32_MAX); + + + (void)SetTrainSpeed(wTrainId, 0u); + (void)SetTrainLevel(wTrainId, TRAIN_LEVEL_BACKUP_UNKNOWN); + (void)SetTrainControlMode(wTrainId, TRAIN_NO_MODE);/*سģʽ*/ + (void)SetTrainMsgDelayTime(wTrainId, 0u);/*гϢӳʱ*/ + (void)SetTrainMode(wTrainId, TRAIN_MODE_DEFAULT);/*гʻģʽ*/ + } +} + +/* +* жϵǰгسģʽ +* ˵ UINT16 wTrainIdгID +* ֵ void +*/ +void JugeTrianControlMode(const UINT16 wTrainId) +{ + UINT8 chIvocControlMode = 0U; + UINT8 chVobcControlMode = 0U; + UINT8 chTrainControlMode = 0U; + + chIvocControlMode = GetIvocControlMode(wTrainId); + chVobcControlMode = GetVobcControlMode(wTrainId); + chTrainControlMode = GetTrainControlMode(wTrainId); + + + if (TRAIN_MAIN_MODE == chIvocControlMode) + { + if ((TRAIN_STANDBY_MODE == chVobcControlMode) + || (0u == chVobcControlMode)) + {/*VOBCDZػδ֪*/ + SetTrainControlMode(wTrainId, TRAIN_IVOC_MODE); + } + else + {/*أʹ֮ǰĿسģʽ*/ + SetTrainControlMode(wTrainId, chTrainControlMode); + } + } + else if (TRAIN_MAIN_MODE == chVobcControlMode) + { + if ((TRAIN_STANDBY_MODE == chIvocControlMode) + || (0u == chIvocControlMode)) + {/*VOBCأIVOCDZػδ֪*/ + SetTrainControlMode(wTrainId, TRAIN_VOBC_MODE); + } + else + { + /*أʹ֮ǰĿسģʽ*/ + SetTrainControlMode(wTrainId, chTrainControlMode); + } + } + else + { + if ((0u == chIvocControlMode) && (0u == chVobcControlMode)) + { + /*ͨж*/ + SetTrainControlMode(wTrainId, TRAIN_NO_MODE); + } + else + {/*DZأһһδͨϣʹ*/ + SetTrainControlMode(wTrainId, chTrainControlMode); + } + + } +} + +/** +* @brief г +* @param +* @return +*/ +void MainTrainInformationManage(void) +{ + UINT16 ii = 0u;/*гѭƱ*/ + UINT16 wTrainId = 0U; + UINT8 chIvocCtxValid = 0U; + UINT8 chVobcCtxValid = 0U; + UINT8 chTransmitStat = 0U; + + /*г*/ + for (ii = 0u; ii < TRAIN_SUM_MAX; ii++) + { + wTrainId = GetTrainId(ii); + if (0u < wTrainId) + { + chIvocCtxValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_IVOC, (UINT8)wTrainId); + chVobcCtxValid = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)wTrainId); + if ((CI_ERROR == chIvocCtxValid) && (CI_ERROR == chVobcCtxValid)) + {/*IVOC,VOBCͨжϣΪͨж*/ + chTransmitStat = GetTrainTransitmitStat(wTrainId); + if (TRAIN_COMM_STATE_GOOD == chTransmitStat) + { + SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD); + } + } + else + {/*һͨ*/ + SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD); + } + + + JugeTrianControlMode(wTrainId);/*ٲõǰسģʽ*/ + + InputMainTrainInformation(wTrainId);/*ٲýгλϢ*/ + + + + } + } +} + +/* +* ָгλģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chPos λ +* ֵ +*/ +void SetTrainPostionMode(const UINT16 wTrainId, const UINT8 chPos) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) + && ((CI_SYSTEM_TYPE_VOBC == chPos) + || (CI_SYSTEM_TYPE_IVOC == chPos) + ||(0u == chPos) + )) + { + gstTrainInfo[wBufIndex].chTrainPostionMode = chPos; + } + else + { + ; + } +} + +/* +* ȡָгλģʽ +* ˵ const UINT16 wTrainId, гID +* ֵ +*/ +UINT8 GetTrainPostionMode(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + UINT8 rtVal = 0u; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + rtVal = gstTrainInfo[wBufIndex].chTrainPostionMode; + } + else + { + /*޴*/ + } + return rtVal; +} + + +/* +* ָгСȫָͷз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гз +* ֵ 0: ȡʧ +1: ݳɹ +* 0x55: з +* 0xAA: з +* 0xFF: гĬз +*/ +UINT8 SetIvocTrainDir(const UINT16 wTrainId, const UINT8 chTrainDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + UINT8 chDir = 0u; + UINT8 chLinkLogicDirUpAndDown = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_DIR_UP == chTrainDir) || (TRAIN_DIR_DOWN == chTrainDir)) + { + chLinkLogicDirUpAndDown = GetLinkLogicDirUpAndDown(); + + if (chLinkLogicDirUpAndDown == chTrainDir) + { + chDir = DIR_CONVERT; + } + else + { + chDir = DIR_SAME; + } + + /*гСȫ˵з*/ + gTrainInfoTemp[wBufIndex].chIvocTrainDir = chDir; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгٶ +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1 : ݳɹ +*/ +UINT8 SetIvocTrainSpeed(const UINT16 wTrainId, const UINT16 wTrainSpd) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainSpd) + { + gTrainInfoTemp[wBufIndex].wIvocTrainSpeed = wTrainSpd; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгٶȷ +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainSpeedDir(const UINT16 wTrainId, const UINT8 chSpdDir) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if ((TRAIN_SPEED_DIR_BACKWARD == chSpdDir) + || (TRAIN_SPEED_DIR_FORWARD == chSpdDir)) + { + gTrainInfoTemp[wBufIndex].chIvocSpeedDir = chSpdDir; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainLevel геȼ +* ֵ 0: ȡʧ + 1: ݳɹ +* 0x03: UR +* 0x04: ABL +* 0x01: VBTC +* 0x02: ITC +* 0xff : Ĭ/״̬ +*/ +UINT8 SetIvocTrainLevel(const UINT16 wTrainId, const UINT8 chTrainLevel) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + /*RC16.0 ñͳһмֵ*/ + if ((TRAIN_LEVEL_UR == chTrainLevel) + || (TRAIN_LEVEL_ABL == chTrainLevel) + || (TRAIN_LEVEL_VBTC == chTrainLevel) + || (TRAIN_LEVEL_ITC == chTrainLevel) + || (TRAIN_LEVEL_BACKUP_UNKNOWN == chTrainLevel)) + { + gTrainInfoTemp[wBufIndex].chIvocTrainLevel = chTrainLevel; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainHeadLinkId) + { + gTrainInfoTemp[wBufIndex].wIvocTrainMaxHeadLink = wTrainHeadLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainTailLinkId) + { + gTrainInfoTemp[wBufIndex].wIvocTrainMaxTailLink = wTrainTailLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwIvocTrainMaxHeadOffset = dwTrainHeadOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwIvocTrainMaxTailOffset = dwTrainTailOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָгСȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainHeadLinkId) + { + gTrainInfoTemp[wBufIndex].wIvocTrainMinHeadLink = wTrainHeadLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгСȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT16_MAX != wTrainTailLinkId) + { + gTrainInfoTemp[wBufIndex].wIvocTrainMinTailLink = wTrainTailLinkId; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгСȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwIvocTrainMinHeadOffset = dwTrainHeadOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} +/* +* ָгСȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + gTrainInfoTemp[wBufIndex].dwIvocTrainMinTailOffset = dwTrainTailOff; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + + +/* +* ָIVOCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetIvocControlMode(const UINT16 wTrainId, const UINT8 chMode) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) + && ((TRAIN_MAIN_MODE == chMode) + || (TRAIN_STANDBY_MODE == chMode) + ||(0u == chMode) + )) + { + gTrainInfoTemp[wBufIndex].chIvocControlMode = chMode; + } + else + { + ; + } +} + +/* +* ȡָIVOCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ سģʽ +*/ +UINT8 GetIvocControlMode(const UINT16 wTrainId) +{ + UINT16 wBufIndex = 0U; + UINT8 rtVal = 0u; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + rtVal = gTrainInfoTemp[wBufIndex].chIvocControlMode; + } + else + { + /*޴*/ + } + return rtVal; +} +/* +* ָIovcгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetIvocTrainMode(const UINT16 wTrainId, const UINT8 chMode) +{ + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if ((TRAIN_SUM_MAX > wBufIndex) + && ( + (VOBC_TRAIN_MODE_AM == chMode) + || (VOBC_TRAIN_MODE_CM == chMode) + || (VOBC_TRAIN_MODE_RM == chMode) + || (VOBC_TRAIN_MODE_EUM == chMode) + || (VOBC_TRAIN_MODE_FAM == chMode) + || (VOBC_TRAIN_MODE_CAM == chMode) + ||(0u == chMode) + )) + { + gTrainInfoTemp[wBufIndex].chIvocTrainModel = chMode; + } + else + { + ; + } +} + +/* +* ָIvocгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* const UINT32 dwDelayTime +* ֵ CI_ERROR: ʧ +CI_SUCCESS:ݳɹ +*/ +UINT8 SetIvocTrainMsgDelayTime(const UINT16 wTrainId, const UINT32 dwDelayTime) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + if (UINT32_MAX != dwDelayTime) + { + gTrainInfoTemp[wBufIndex].dwIvocDelayTime = dwDelayTime; + chRetVal = CI_SUCCESS; + } + else + { + chRetVal = CI_ERROR; + } + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} + +/* +* ָIvocгеȼ +* ˵ const UINT16 wTrainId, гID +* ֵ :гȼ +*/ +UINT8 GetIvocTrainLevel(const UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 wBufIndex = 0U; + + wBufIndex = GetTrainBufIndex(wTrainId); + if (TRAIN_SUM_MAX > wBufIndex) + { + chRetVal = gTrainInfoTemp[wBufIndex].chIvocTrainLevel; + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; +} \ 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..5e75efd 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,8 +275,63 @@ typedef struct S_TrainInfoStru UINT16 wTrainPosMonitorInLink; /*гλüලЧʱlink*/ UINT32 dwStartFlyCycNum; /*гɳʼں*/ UINT8 chEaCmdState; /*ɢ״̬*/ + JumpBackInfoStru strJumpBackData; /*гԾ*/ + + UINT8 chtrainControlMode; /*ǰسģʽ0κοģʽ1:IVOCأ2VOBC*/ + UINT8 chTrainPostionMode; /*гλģʽ0λã1ʹIVOCλã2ʹVOBCλ*/ + }TrainInfoStru; + + +/*гϢṹ*/ +typedef struct S_VobcTrainInfoStru +{ + UINT8 wTrainId; + + UINT8 chVobcControlMode; /*Vobcģʽ*/ + UINT8 chVobcTrainLevel; /*гм*/ + UINT8 chVobcTrainModel; /*гģʽ*/ + UINT16 wVobcTrainMaxHeadLink; /*VOBCгȫǰLink*/ + UINT32 dwVobcTrainMaxHeadOffset; /*VOBCгȫǰƫ*/ + UINT16 wVobcTrainMinHeadLink; /*VOBCгСȫǰlink*/ + UINT32 dwVobcTrainMinHeadOffset; /*VOBCгСȫǰƫ*/ + UINT16 wVobcTrainMaxTailLink; /*VOBCгȫLink*/ + UINT32 dwVobcTrainMaxTailOffset; /*VOBCгȫƫ*/ + UINT16 wVobcTrainMinTailLink; /*VOBCгСȫlink*/ + UINT32 dwVobcTrainMinTailOffset; /*VOBCгСȫƫ*/ + UINT8 chVobcTrainDir; /*гзСȫָͷ*/ + UINT8 chVobcTrainDir_MaxTail; /*гзȫˣ*/ + UINT8 chVobcTrainDir_MinHead; /*гзСȫǰˣ*/ + UINT8 chVobcTrainDir_MaxHead; /*гзȫǰˣ*/ + UINT8 chVobcSpeedDir; /*ٶȷ*/ + UINT16 wVobcTrainSpeed; /*гٶ*/ + UINT32 dwVobcDelayTime; /*Ϣӳʱ*/ + + UINT8 chIvocControlMode; /*Ivocģʽ*/ + UINT8 chIvocTrainLevel; /*Ivocгм*/ + UINT8 chIvocTrainModel; /*Ivocгģʽ*/ + UINT16 wIvocTrainMaxHeadLink; /*IvocгȫǰLink*/ + UINT32 dwIvocTrainMaxHeadOffset; /*Ivocгȫǰƫ*/ + UINT16 wIvocTrainMinHeadLink; /*IvocгСȫǰlink*/ + UINT32 dwIvocTrainMinHeadOffset; /*IvocгСȫǰƫ*/ + UINT16 wIvocTrainMaxTailLink; /*IvocгȫLink*/ + UINT32 dwIvocTrainMaxTailOffset; /*Ivocгȫƫ*/ + UINT16 wIvocTrainMinTailLink; /*IvocгСȫlink*/ + UINT32 dwIvocTrainMinTailOffset; /*IvocгСȫƫ*/ + UINT8 chIvocTrainDir; /*IvocгзСȫָͷ*/ + UINT8 chIvocTrainDir_MaxTail; /*Ivocгзȫˣ*/ + UINT8 chIvocTrainDir_MinHead; /*IvocгзСȫǰˣ*/ + UINT8 chIvocTrainDir_MaxHead; /*Ivocгзȫǰˣ*/ + UINT8 chIvocSpeedDir; /*Ivocٶȷ*/ + UINT16 wIvocTrainSpeed; /*Ivocгٶ*/ + UINT32 dwIvocDelayTime; /*IvocϢӳʱ*/ + +}InputTrainInfoStru; + + + + /*̬Խṹ*/ typedef struct { @@ -905,12 +968,6 @@ TRAIN_HEAD_FLAG_NO: */ UINT8 GetTrainSafeHeadFlag(const UINT16 wTrainId); -/** -* @brief Ϣӳʱ -* @param UINT16 wTrainId -* @return Ϣӳʱ -*/ -UINT32 GetVobcMsgDelayTime(UINT16 wTrainId); /** * @brief ȡг @@ -940,7 +997,7 @@ UINT8 SetGroupTrainOtherId(const UINT16 wTrainId, const UINT16 wGroupOtherTrainI /* * ȡָгʱһгID * ˵ const UINT16 wTrainId, гID -* ֵ ȡɹ0x1400-0x14ff0xffff +* ֵ ȡɹ0x1000-0x10ff0xffff * ȡʧܣ0 * : wsd 2022-06-16 */ @@ -1475,13 +1532,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); /* * гԴ @@ -2091,7 +2151,7 @@ UINT16 GetTrainHeadTrainId(const UINT16 wTrainId); /* * гǷCT -* ˵const UINT16 wTrainId гID0x14 +* ˵const UINT16 wTrainId гID0x10 * ֵCI_SUCCESS 1 CT * CI_ERROR 0 CT * Created By LQ 2024.07.25 @@ -2448,6 +2508,500 @@ 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 +* ֵ0 ʧ +* 1 ɹ +* Created By LQ 2025.08.08 +*/ +UINT8 TrainPosMonitorIdleCheck(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); + +/* +* ָVOBCгȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId); + +/* +* ָVOBCгȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff); +/* +* ָгȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId); +/* +* ָгȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMaxTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff); +/* +* ָгСȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId); +/* +* ָгСȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff); +/* +* ָгСȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId); +/* +* ָгСȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainMinTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff); +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainLevel геȼ +* ֵ 0: ȡʧ + 1: ݳɹ +*/ +UINT8 SetVobcTrainLevel(const UINT16 wTrainId, const UINT8 chTrainLevel); +/* +* ָгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetVobcTrainMode(const UINT16 wTrainId, const UINT8 chMode); +/* +* ָVOBCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetVobcControlMode(const UINT16 wTrainId, const UINT8 chMode); +/* +* ָVOBCгСȫָͷз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гз +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainDir(const UINT16 wTrainId, const UINT8 chTrainDir); +/* +* ָVOBCгٶȷ +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetVobcTrainSpeedDir(const UINT16 wTrainId, const UINT8 chSpdDir); + +/* +* ָVobcгٶ +* ˵ const UINT16 wTrainId, гID +* const UINT16 wTrainSpd гٶ +* ֵ 0: ȡʧ +* 1 : ݳɹ +*/ +UINT8 SetVobcTrainSpeed(const UINT16 wTrainId, const UINT16 wTrainSpd); +/* +* гз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гзѻȡӪСָͷ +* ֵ CI_ERROR ʧ CI_SUCCESS óɹ +*/ +UINT8 SetVobcTrainOtherPointDir(const UINT16 wTrainId, const UINT8 chTrainDir); +/* +* гз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гзѻȡӪСָͷ +* ֵ CI_ERROR ʧ CI_SUCCESS óɹ +*/ +UINT8 SetIvocTrainOtherPointDir(const UINT16 wTrainId, const UINT8 chTrainDir); +/* +* ȡָVOBCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +UINT8 GetVobcControlMode(const UINT16 wTrainId); + +/* +* ȡָгȫǰlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMaxHeadLink(const UINT16 wTrainId); +/* +* ȡָгȫlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMaxTailLink(const UINT16 wTrainId); +/* +* ȡָгСȫǰlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMinHeadLink(const UINT16 wTrainId); +/* +* ȡָгСȫlinkId +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkID +*/ +UINT16 GetVobcTrainMinTailLink(const UINT16 wTrainId); +/* +* ȡָгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* ֵ Ϣӳʱ +*/ +UINT32 GetVobcTrainMsgDelayTime(const UINT16 wTrainId); +/* +* ȡָгȫǰƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMaxHeadOffset(const UINT16 wTrainId); +/* +* ȡָгȫƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMaxTailOffset(const UINT16 wTrainId); +/* +* ȡָгСȫǰƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMinHeadOffset(const UINT16 wTrainId); +/* +* ȡָгСȫƫ +* ˵ const UINT16 wTrainId, гID +* ֵ 0: ȡʧ +* linkƫ +*/ +UINT32 GetVobcTrainMinTailOffset(const UINT16 wTrainId); +/* +* ָгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* const UINT32 dwDelayTime +* ֵ CI_ERROR: ʧ +CI_SUCCESS:ݳɹ +*/ +UINT8 SetVobcTrainMsgDelayTime(const UINT16 wTrainId, const UINT32 dwDelayTime); +/* +* ָгسģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetTrainControlMode(const UINT16 wTrainId, const UINT8 chMode); +/* +* ȡָгسģʽ +* ˵ const UINT16 wTrainId, гID +* ֵ +*/ +UINT8 GetTrainControlMode(const UINT16 wTrainId); + +/** +* @brief سλϢڰȫλü +* @param гID +* @return +*/ +void InputMainTrainInformation(UINT16 wTrainId); + +/* +* жϵǰгسģʽ +* ˵ UINT16 wTrainIdгID +* ֵ void +*/ +void JugeTrianControlMode(const UINT16 wTrainId); +/** +* @brief гϢ +* @param +* @return +*/ +void MainTrainInformationManage(void); +/** +* @brief Ϣӳʱ +* @param UINT16 wTrainId гID +* UINT8 trainType г +* @return Ϣӳʱ +*/ +UINT32 CalTrainMsgDelayTime(UINT16 wTrainId, UINT8 trainType); +/* +* ָгλģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chPos λ +* ֵ +*/ +void SetTrainPostionMode(const UINT16 wTrainId, const UINT8 chPos); +/* +* ȡָгλģʽ +* ˵ const UINT16 wTrainId, гID +* ֵ +*/ +UINT8 GetTrainPostionMode(const UINT16 wTrainId); +/* +* ָIVOCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetIvocControlMode(const UINT16 wTrainId, const UINT8 chMode); +/* +* ȡָIVOCгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ سģʽ +*/ +UINT8 GetIvocControlMode(const UINT16 wTrainId); +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* ֵ :гȼ +*/ +UINT8 GetVobcTrainLevel(const UINT16 wTrainId); +/* +* ָгСȫָͷз +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainDir гз +* ֵ 0: ȡʧ +1: ݳɹ +* 0x55: з +* 0xAA: з +* 0xFF: гĬз +*/ +UINT8 SetIvocTrainDir(const UINT16 wTrainId, const UINT8 chTrainDir); +/* +* ָгٶ +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1 : ݳɹ +*/ +UINT8 SetIvocTrainSpeed(const UINT16 wTrainId, const UINT16 wTrainSpd); +/* +* ָгٶȷ +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainSpeedDir(const UINT16 wTrainId, const UINT8 chSpdDir); +/* +* ָгеȼ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chTrainLevel геȼ +* ֵ 0: ȡʧ + 1: ݳɹ +* 0x03: UR +* 0x04: ABL +* 0x01: VBTC +* 0x02: ITC +* 0xff : Ĭ/״̬ +*/ +UINT8 SetIvocTrainLevel(const UINT16 wTrainId, const UINT8 chTrainLevel); +/* +* ָгȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId); +/* +* ָгȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId); +/* +* ָгȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff); +/* +* ָгȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMaxTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff); +/* +* ָгСȫǰLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainHeadLinkId гȫǰLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinHeadLink(const UINT16 wTrainId, const UINT16 wTrainHeadLinkId); +/* +* ָгСȫLinkId +* ˵ const UINT16 wTrainId, гID +* const UINT8 wTrainTailLinkId гȫLk +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinTailLink(const UINT16 wTrainId, const UINT16 wTrainTailLinkId); +/* +* ָгСȫǰLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainHeadOff гȫǰOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinHeadOffset(const UINT16 wTrainId, const UINT32 dwTrainHeadOff); +/* +* ָгСȫLinkId Off +* ˵ const UINT16 wTrainId, гID +* const UINT8 dwTrainTailOff гȫOff +* ֵ 0: ȡʧ +* 1: ݳɹ +*/ +UINT8 SetIvocTrainMinTailOffset(const UINT16 wTrainId, const UINT32 dwTrainTailOff); +/* +* ָIovcгģʽ +* ˵ const UINT16 wTrainId, гID +* const UINT8 chMode ģʽ +* ֵ +*/ +void SetIvocTrainMode(const UINT16 wTrainId, const UINT8 chMode); +/* +* ָIvocгϢӳʱ +* ˵ const UINT16 wTrainId, гID +* const UINT32 dwDelayTime +* ֵ CI_ERROR: ʧ +CI_SUCCESS:ݳɹ +*/ +UINT8 SetIvocTrainMsgDelayTime(const UINT16 wTrainId, const UINT32 dwDelayTime); +/* +* ָIvocгеȼ +* ˵ const UINT16 wTrainId, гID +* ֵ :гȼ +*/ +UINT8 GetIvocTrainLevel(const UINT16 wTrainId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/TrainDefine.h b/TSCP/src/APP/ciapp/Train/TrainDefine.h index bdb35cb..9995f4f 100644 --- a/TSCP/src/APP/ciapp/Train/TrainDefine.h +++ b/TSCP/src/APP/ciapp/Train/TrainDefine.h @@ -29,10 +29,21 @@ #define TRAIN_DIR_DOWN ((UINT8)0xAAU) /*гзΪ*/ #define TRAIN_DIR_DEF ((UINT8)0xffU) /*гзΪĬ*/ + +#define TRAIN_LEVEL_VBTC ((UINT8)0x01U) /*геȼCBTC*/ +#define TRAIN_LEVEL_ITC ((UINT8)0x02U) /*геȼITC*/ #define TRAIN_LEVEL_UR ((UINT8)0x03U) /*геȼUR*/ #define TRAIN_LEVEL_ABL ((UINT8)0x04U) /*геȼABL*/ -#define TRAIN_LEVEL_VBTC ((UINT8)0x01U) /*геȼCBTC*/ -#define TRAIN_LEVEL_ITC ((UINT8)0x02U) /*геȼITC*/ + + +#define VOBC_TRAIN_LEVEL_CBTC ((UINT8)0x01U) /*510геȼCBTC*/ +#define VOBC_TRAIN_LEVEL_ITC ((UINT8)0x02U) /*510геȼITC*/ +#define VOBC_VOBC_TRAIN_LEVEL_IL ((UINT8)0x03U) /*510геȼIL*/ +#define VOBC_TRAIN_LEVEL_ABL ((UINT8)0x04U) /*510геȼABL*/ + + + + #define TRAIN_LEVEL_BACKUP_LIANXU ((UINT8)0x01U) /*ʽгƼ*/ #define TRAIN_LEVEL_BACKUP_BLOCK ((UINT8)0x02U) /*ʽгƼ*/ @@ -43,8 +54,10 @@ #define TRAIN_SPEED_DIR_FORWARD ((UINT8)0x55U) /*IVOCCIгٶȷǰ*/ #define TRAIN_SPEED_DIR_BACKWARD ((UINT8)0xAAU) /*IVOCCIгٶȷ*/ -#define TRAIN_ID_MIN ((UINT16)0x1400U) /*гIDСֵ*/ -#define TRAIN_ID_MAX ((UINT16)0x14FFU) /*гIDֵ*/ +#define TRAIN_ID_MIN ((UINT16)0x1400U) /*гIDСֵ(VOBC)*/ +#define TRAIN_ID_MAX ((UINT16)0x14FFU) /*гIDֵ(VOBC)*/ +#define TRAIN_ID_MIN_IVOC ((UINT16)0x1000U) /*гIDСֵ(IVOC)*/ +#define TRAIN_ID_MAX_IVOC ((UINT16)0x10FFU) /*гIDֵ(IVOC)*/ #define TRAIN_ID_INVAL ((UINT16)0xFFFFU) /*гIDĬֵ*/ #define TRAIN_IN_CTRL_ZONE ((UINT8)0x55U) /*гڱ*/ @@ -96,6 +109,13 @@ #define TRAIN_MODE_RRM ((UINT8)9) /*RRMģʽ*/ #define TRAIN_MODE_VCM ((UINT8)10) /*VCMģʽ*/ +#define VOBC_TRAIN_MODE_AM ((UINT8)1) /*AMģʽ*/ +#define VOBC_TRAIN_MODE_CM ((UINT8)2) /*CMģʽ*/ +#define VOBC_TRAIN_MODE_RM ((UINT8)3) /*RMģʽ*/ +#define VOBC_TRAIN_MODE_EUM ((UINT8)4) /*EUMģʽ*/ +#define VOBC_TRAIN_MODE_FAM ((UINT8)5) /*FAMģʽ*/ +#define VOBC_TRAIN_MODE_CAM ((UINT8)6) /*CAMģʽ*/ + #define TRAIN_HEAD_CONFIRM_YES ((UINT8)0x55u) /*˹ǰɸȷ*/ #define TRAIN_HEAD_CONFIRM_NO ((UINT8)0xffu) /*˹ǰɸδȷ(Ĭֵ)*/ @@ -231,13 +251,34 @@ #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ԾظĬֵ*/ + +#define TRAIN_MAIN_MODE ((UINT8)0x55U) /*г*/ +#define TRAIN_STANDBY_MODE ((UINT8)0xAAU) /*г*/ + + + +#define TRAIN_NO_MODE ((UINT8)0x00U) /*г*/ +#define TRAIN_IVOC_MODE ((UINT8)0x01U) /*гIVOC*/ +#define TRAIN_VOBC_MODE ((UINT8)0x02U) /*гVOBC*/ + +#define TRAIN_NO_POSTION ((UINT8)0x00U) /*г*/ +#define TRAIN_IVOC_POSTION ((UINT8)0x01U) /*ʹIVOCλ*/ +#define TRAIN_VOBC_POSTION ((UINT8)0x02U) /*ʹVOBCλ*/ + +/*ؿس״̬*/ +#define VEHICLE_CONTROL_STATUS_YES ((UINT8)0x55) /*ؿس״̬-س*/ +#define VEHICLE_CONTROL_STATUS_NO ((UINT8)0xaa) /*ؿس״̬-ǿس*/ #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Train/TrainOnAcManage.c b/TSCP/src/APP/ciapp/Train/TrainOnAcManage.c index 3a008e2..a708c32 100644 --- a/TSCP/src/APP/ciapp/Train/TrainOnAcManage.c +++ b/TSCP/src/APP/ciapp/Train/TrainOnAcManage.c @@ -610,7 +610,7 @@ static UINT8 ToaGetAcInTrain(UINT16 wTrainId, UINT16 szAcId[MAX_AC_IN_TRAIN]) static UINT8 ToaGetTrainLoc(UINT16 wTrainId, TrainLocStruct * pLoc) { UINT8 chRtnVal = CI_ERROR; - UINT16 wTrainID = (UINT16)(0x1400u + (wTrainId & 0x00ffu)); + UINT16 wTrainID = (UINT16)(TRAIN_ID_MIN_IVOC + (wTrainId & 0x00ffu)); if (NULL != pLoc) { 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..14b6a6b 100644 --- a/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c +++ b/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.c @@ -12,7 +12,7 @@ ********************************************************/ #include "TransmitStateDataManage.h" - +#include "../HLHTMsgHead/HLHTHeadContexManage.h" @@ -54,6 +54,7 @@ UINT8 GetCiTransmitSpecifySysDevSum(const UINT8 systemType) { if ((CI_SYSTEM_TYPE_ATS != systemType) && (CI_SYSTEM_TYPE_CI != systemType) && + (CI_SYSTEM_TYPE_RC != systemType) && (CI_SYSTEM_TYPE_ZC != systemType) && (CI_SYSTEM_TYPE_LEU != systemType) && (CI_SYSTEM_TYPE_XIANDI != systemType) && @@ -110,6 +111,7 @@ UINT8* GetCiTransmitSpecifySysDevBuf(const UINT8 systemType) { if ((CI_SYSTEM_TYPE_ATS != systemType) && (CI_SYSTEM_TYPE_CI != systemType) && + (CI_SYSTEM_TYPE_RC != systemType) && (CI_SYSTEM_TYPE_ZC != systemType) && (CI_SYSTEM_TYPE_LEU != systemType) && (CI_SYSTEM_TYPE_XIANDI != systemType) && @@ -164,8 +166,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++) { @@ -177,7 +179,7 @@ UINT32 GetCiTransmitRecvDataCycNum(const UINT8 localCiId, const UINT8 DeviceType } } } - else if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) + else if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) || (CI_SYSTEM_TYPE_LEU == DeviceType) || (CI_SYSTEM_TYPE_AXIS == DeviceType) || (CI_SYSTEM_TYPE_OC == DeviceType)) { @@ -243,7 +245,7 @@ UINT8 SetCiTransmitRecvDataCycNum(const UINT8 localCiId, const UINT8 DeviceType, } } - else if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType)|| + else if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType)|| (CI_SYSTEM_TYPE_PSC == DeviceType) || (CI_SYSTEM_TYPE_LEU == DeviceType) || (CI_SYSTEM_TYPE_OC == DeviceType) || (CI_SYSTEM_TYPE_AXIS == DeviceType)) { @@ -282,10 +284,10 @@ UINT8 GetCiTransmitState(const UINT8 DeviceType, const UINT8 DeviceId) UINT8 ii = 0u; UINT8 retVal = CI_ERROR; - if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) + if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) || (CI_SYSTEM_TYPE_AXIS == DeviceType) || (CI_SYSTEM_TYPE_LEU == DeviceType) || (CI_SYSTEM_TYPE_OC == DeviceType) || (CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_XIANDI == DeviceType) || (CI_SYSTEM_TYPE_ZC == DeviceType) - || (CI_SYSTEM_TYPE_VOBC == DeviceType) || (CI_SYSTEM_TYPE_TMC == DeviceType)) + || (CI_SYSTEM_TYPE_VOBC == DeviceType) || (CI_SYSTEM_TYPE_IVOC == DeviceType) || (CI_SYSTEM_TYPE_TMC == DeviceType)) { for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { @@ -325,10 +327,40 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const { UINT8 ii = 0u; UINT8 retVal = CI_ERROR; + UINT8 getResult = CI_ERROR; UINT32 badComCycNum = 0u; UINT32 dwRedBadComCycNum = 0U; UINT32 dwBlueBadComCycNum = 0U; - UINT32 badEnsureCount = 0u; + UINT32 badEnsureCount = 0u; + UINT32 transmitBadEnsureTime = 0U;/*ͨжʱ*/ + UINT32 dwCurCycNum = 0U;/*ǰ*/ + UINT32 srcRecvCiMsgSN = 0U; + UINT32 srcCrntOwnMsgSN = 0U; + UINT32 srcPreOwnMsgSN = 0U; + UINT32 srcPeriod = 0U; + UINT8 chMainWorckMode = GetLocalCiBackUpPattern();/*ģʽ*/ + HLHTHeadContextStru* pstrHlhtHeadCtx = NULL; /*ͨͷ*/ + INT32 InfoRemainValidiy = 0;/*ͨŰͷɿУ*/ + INT32 CiRecordInfoRemainValidiy = 0;/*CIͬͨŰͷɿУ*/ + UINT32 dwUpToMainCyc = 0U;/*ں*/ + dwCurCycNum = Get2oo2CurCycleNum(); + dwUpToMainCyc = GetSystemUpdateMainUseCycNum(); + if ((CI_SYSTEM_TYPE_ZC == DeviceType) + || (CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_XIANDI == DeviceType) + ||(CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) + || (CI_SYSTEM_TYPE_OC == DeviceType) + || (CI_SYSTEM_TYPE_TMC == DeviceType) + || (CI_SYSTEM_TYPE_AXIS == DeviceType)) + { + srcRecvCiMsgSN = GetHLHTHeadCtxSrcOppSN(DeviceType, DeviceId); + srcCrntOwnMsgSN = GetHLHTHeadCtxSrcCrntSN(DeviceType, DeviceId); + srcPreOwnMsgSN = GetHLHTHeadCtxSrcOwnSN(DeviceType, DeviceId); + srcPeriod = GetHLHTHeadCtxComPeriod(DeviceType, DeviceId); + } + else + { + ; /*ݲʹûͨͷͨУ*/ + } if ((0u == localCiId) || (CI_SUM_MAX < localCiId)) { retVal = CI_ERROR; @@ -337,24 +369,28 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const { if (CI_SYSTEM_TYPE_ZC == DeviceType) { + transmitBadEnsureTime = GetCiAndZcTransmitBadEnsureTime(); + badEnsureCount = GetCiAndZcTransBadEnsureCnt(); for(ii = 0u; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) && (TransmitStateDataStru[ii].DeviceType == DeviceType) && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - badEnsureCount = GetCiAndZcTransBadEnsureCnt(); - if (badComCycNum > badEnsureCount) - { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; - } - else + /*ʹûͨͷжЧ*/ + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_ZC, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if ((CI_SUCCESS == getResult)&&(0U < InfoRemainValidiy)) { /*ͨ*/ TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } + else + { + /*ͨųʱ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; TransmitStateDataStru[ii].RecvDataBlueCycNum = gBlueTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataBlueCycNum : gBlueTransmitObjRcvCyc[ii]; @@ -382,25 +418,29 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const } else if ((CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_XIANDI == DeviceType)) { + transmitBadEnsureTime = GetCiAndAtsTransBadEnsureTime(); + badEnsureCount = GetCiAndAtsTransBadEnsureCnt(); for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) && (TransmitStateDataStru[ii].DeviceType == DeviceType) && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - /*CIATSͨжʼ510ݽṹ޴ãдΪ20*/ - badEnsureCount = 20U; - if (badComCycNum > badEnsureCount) - { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; - } - else + + /*CIATSͨжʼ510ݽṹ޴ãдΪ40-12000ms*/ + getResult = GetHLHTHeadCtxValid(DeviceType, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if ((CI_SUCCESS == getResult) && (0U < InfoRemainValidiy)) { /*ͨ*/ TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } + else + { + /*ͨųʱ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; TransmitStateDataStru[ii].RecvDataBlueCycNum = gBlueTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataBlueCycNum : gBlueTransmitObjRcvCyc[ii]; @@ -426,27 +466,29 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const } } } - else if(CI_SYSTEM_TYPE_CI == DeviceType) + else if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType)) { - for (ii = 0u; ii < TransmitStateDataCurSum; ii++) + transmitBadEnsureTime = GetCiAndCiTransmitBadEnsureTime(); + badEnsureCount = GetCiAndCiTransBadEnsureCnt(); + for (ii = 0U; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) && (TransmitStateDataStru[ii].DeviceType == DeviceType) && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { - /*ͨ*/ - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - badEnsureCount = GetCiAndCiTransBadEnsureCnt(); - if ((badComCycNum > badEnsureCount) || (0u == TransmitStateDataStru[ii].RecvDataCycNum)) + getResult = GetHLHTHeadCtxValid(DeviceType, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if ((CI_SUCCESS == getResult) && (0U < InfoRemainValidiy)) { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + /*ͨ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } else { - /*ͨ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; - } + /*ͨųʱ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; TransmitStateDataStru[ii].RecvDataBlueCycNum = gBlueTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataBlueCycNum : gBlueTransmitObjRcvCyc[ii]; dwRedBadComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataRedCycNum; @@ -565,6 +607,8 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const } else if (CI_SYSTEM_TYPE_AXIS == DeviceType) { + badEnsureCount = GetCiAndAxleTransBadEnsureCnt(); + transmitBadEnsureTime = GetCiAndAxleTransBadEnsureTime(); for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) @@ -572,17 +616,20 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { /*ͨ*/ - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - badEnsureCount = GetCiAndAxleTransBadEnsureCnt(); - if (badComCycNum > badEnsureCount) + + /*ʹûͨͷжЧ*/ + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_AXIS, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if ((CI_SUCCESS == getResult) && (0U < InfoRemainValidiy)) { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + /*ͨ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } else { - /*ͨ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; + /*ͨųʱ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; @@ -611,36 +658,87 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const } else if (CI_SYSTEM_TYPE_OC == DeviceType) { + badEnsureCount = GetCiAndOcTransmitBadEnsureCnt(); + transmitBadEnsureTime = GetCiAndOcTransmitBadEnsureTime(); for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) && (TransmitStateDataStru[ii].DeviceType == DeviceType) && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { - /*ͨ*/ - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - badEnsureCount = GetCiAndOcTransmitBadEnsureCnt(); - if (badComCycNum > badEnsureCount) + /*ʹûͨͷжЧ*/ + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_OC, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI) { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + if ((CI_SUCCESS == getResult) &&( 0< InfoRemainValidiy)) + { + /*ͨ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; + } + else + { + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } } else { - /*ͨ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; + /*RCģʽ*/ + pstrHlhtHeadCtx = GetCiToRcHLHTOcHeadCtx(DeviceId); + if(NULL != pstrHlhtHeadCtx) + { + CiRecordInfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), pstrHlhtHeadCtx->sourceRecvOppMsgSN, pstrHlhtHeadCtx->sourceCrntOwnMsgSN, pstrHlhtHeadCtx->sourcePreOwnMsgSN, srcPeriod); + } + else + { + CiRecordInfoRemainValidiy = 0; + } + if (SYSTEM_WORK_MODE_MAIN == chMainWorckMode) + { + /*RCãͨΪ:*/ + /*1.RCֱӽOCݱЧң(ڵںţ򣨱ͬCIݸ)*/ + /*2. ͬCIȻЧ*/ + if (((0 < InfoRemainValidiy) && ((srcRecvCiMsgSN >= dwUpToMainCyc) || (pstrHlhtHeadCtx->sourceCrntOwnMsgSN < srcCrntOwnMsgSN)))/*RC-OC·Ч*/ + || (0 < CiRecordInfoRemainValidiy))/*CIͬЧ*/ + { + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; + } + else + { + debug_infor_printf((const)"CiRecordInfoRemainValidiy: %d srcRecvCiMsgSN =%d sourceCrntOwnMsgSN=%d \n", CiRecordInfoRemainValidiy, srcRecvCiMsgSN, srcCrntOwnMsgSN);/*Ч*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } + } + else + { + /*RC ȫCIݵЧ*/ + if (0 < CiRecordInfoRemainValidiy) + { + /*ͨ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; + } + else + { + debug_infor_printf((const)"\nCiRecordInfoRemainValidiy: %d sourceRecvOppMsgSN %d ,sourceCrntOwnMsgSN %d,sourcePreOwnMsgSN %d srcPeriod %d\n", CiRecordInfoRemainValidiy, pstrHlhtHeadCtx->sourceRecvOppMsgSN, pstrHlhtHeadCtx->sourceCrntOwnMsgSN, pstrHlhtHeadCtx->sourcePreOwnMsgSN, srcPeriod);/*Ч*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } + } } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; 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; @@ -704,25 +802,28 @@ UINT8 UpdateCiTransmitState(const UINT8 localCiId, const UINT8 DeviceType, const } else if (CI_SYSTEM_TYPE_TMC == DeviceType) { + transmitBadEnsureTime = GetTiocAndTmcTransBadEnsureTime(); + badEnsureCount = GetTiocAndTmcTransBadEnsureCnt(); for (ii = 0u; ii < TransmitStateDataCurSum; ii++) { if ((TransmitStateDataStru[ii].chLocalCiId == localCiId) && (TransmitStateDataStru[ii].DeviceType == DeviceType) && (TransmitStateDataStru[ii].DeviceId == DeviceId)) { - /*ͨ*/ - badComCycNum = Get2oo2CurCycleNum() - TransmitStateDataStru[ii].RecvDataCycNum; - badEnsureCount = GetTiocAndTmcTransBadEnsureCnt(); - if ((badComCycNum > badEnsureCount) || (0u == TransmitStateDataStru[ii].RecvDataCycNum)) - { - /*ͨųʱ*/ - TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; - } - else + /*ʹûͨͷжЧ*/ + getResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_OC, DeviceId); + InfoRemainValidiy = HLHTCommonMsgRemainingValidity(transmitBadEnsureTime, dwCurCycNum, + GetSystemParaAppCycleTime(), srcRecvCiMsgSN, srcCrntOwnMsgSN, srcPreOwnMsgSN, srcPeriod); + if ((CI_SUCCESS == getResult) && (0U < InfoRemainValidiy)) { /*ͨ*/ TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_GOOD; } + else + { + /*ͨųʱ*/ + TransmitStateDataStru[ii].transmitState = TRANSMIT_STATE_BAD; + } TransmitStateDataStru[ii].RecvDataRedCycNum = gRedTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataRedCycNum : gRedTransmitObjRcvCyc[ii]; TransmitStateDataStru[ii].RecvDataBlueCycNum = gBlueTransmitObjRcvCyc[ii] == 0U ? TransmitStateDataStru[ii].RecvDataBlueCycNum : gBlueTransmitObjRcvCyc[ii]; @@ -820,30 +921,14 @@ UINT8 GetLocalCiAndOtherCiTransSta(const UINT8 otherCiId) { UINT8 ii = 0u; UINT8 retVal = CI_ERROR; - UINT8 localCi = GetSystemParaLocalCiId(); - UINT32 curCycle = Get2oo2CurCycleNum(); - for (ii = 0u; ii < TransmitStateDataCurSum; ii++) + UINT8 chTransState = 0U; + chTransState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, otherCiId); + if ((TRANSMIT_STATE_GOOD == chTransState)||(TRANSMIT_STATE_BAD == chTransState)) { - if ((TransmitStateDataStru[ii].chLocalCiId == localCi) - && (TransmitStateDataStru[ii].DeviceType == CI_SYSTEM_TYPE_CI) - && (TransmitStateDataStru[ii].DeviceId == otherCiId)) - { - /*ͨ*/ - if (curCycle - TransmitStateDataStru[ii].RecvDataCycNum > GetCiAndCiTransBadEnsureCnt()) - { - /*ͨųʱ*/ - retVal = TRANSMIT_STATE_BAD; - } - else - { - /*ͨ*/ - retVal = TRANSMIT_STATE_GOOD; - } - break; - } + retVal = chTransState; } - if (CI_ERROR == retVal) - {/*ͨб*/ + else + { retVal = NOT_IN_TRAINSMIT_LIST; } return retVal; @@ -900,7 +985,7 @@ UINT8 SetCiTrnsmitCycNumByNetType(const UINT8 DeviceType, const UINT8 DeviceId, } else { - if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || + if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) || (CI_SYSTEM_TYPE_LEU == DeviceType) || (CI_SYSTEM_TYPE_OC == DeviceType) || (CI_SYSTEM_TYPE_AXIS == DeviceType) || (CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_ZC == DeviceType) || @@ -956,10 +1041,10 @@ UINT8 Get2oo2CiAndOtherSysCommState(const UINT8 DeviceType,const UINT8 chIndex) if (TRANSMIT_OBJECT_DEVICE_SUM_MAX > chIndex) { DeviceId = TransmitRelaDataStru[ii].DeviceIdBuf[chIndex]; - if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) + if ((CI_SYSTEM_TYPE_CI == DeviceType) || (CI_SYSTEM_TYPE_RC == DeviceType) || (CI_SYSTEM_TYPE_PLATFORM == DeviceType) || (CI_SYSTEM_TYPE_PSC == DeviceType) || (CI_SYSTEM_TYPE_AXIS == DeviceType) || (CI_SYSTEM_TYPE_LEU == DeviceType) || (CI_SYSTEM_TYPE_OC == DeviceType) || (CI_SYSTEM_TYPE_ATS == DeviceType) || (CI_SYSTEM_TYPE_XIANDI == DeviceType) || (CI_SYSTEM_TYPE_ZC == DeviceType) - || (CI_SYSTEM_TYPE_VOBC == DeviceType) || (CI_SYSTEM_TYPE_TMC == DeviceType)) + || (CI_SYSTEM_TYPE_VOBC == DeviceType) || (CI_SYSTEM_TYPE_IVOC == DeviceType) || (CI_SYSTEM_TYPE_TMC == DeviceType)) { for (jj = 0u; jj < TransmitStateDataCurSum; jj++) { @@ -1024,4 +1109,4 @@ UINT16 GetATSInterfaceTypeId(void) } return retVal; -} +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.h b/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.h index 349d35c..0292663 100644 --- a/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.h +++ b/TSCP/src/APP/ciapp/Transmit/TransmitStateDataManage.h @@ -52,8 +52,6 @@ typedef struct S_TransmitStateDataStruct UINT32 RecvDataBlueCycNum; /*ں (ֶ̬)*/ } TransmitStateDataStruct; - - /* * ȡָCIָ豸豸 * ˵ const UINT8 systemType, ϵͳ 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..df2fcd8 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.c +++ b/TSCP/src/DRV/imx8_drv_gpio.c @@ -9,20 +9,56 @@ 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); + +static struct ifdrv2{ + struct ifdrv ifd; + phy_access_t req; +}phycmd; + +char drv_vsr[4] = {93, 8, 0, 11}; /*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 +69,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 +80,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 +91,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 +102,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 +113,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 +689,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 +714,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 +744,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 +811,9 @@ void* timer_25( void * arg) ret = InterruptUnmask(IMX_GPT0_IRQ, val); } + /*you will never reach here*/ + ret = NULL; + return ret; } @@ -788,7 +839,6 @@ int imx8_create_timer_pthread_25(void) } /************************************************************************/ - int imx8_gpio_release(void) { int ret = 0; @@ -860,3 +910,716 @@ 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; + s_CapInfo[2U].isLocked = 0; + + for (i=0;i<(int)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)((uint8_t)(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; + uint16_t n = 0; + /*uint16_t regInfo[12u] = {0u};*/ + uint8_t regList[12] = {0u,1u,4u,5u,6u,7u,8u,9u,10u,15u,21u,31u}; + uint16_t i = 0u; + + if ((NULL == fecx) || (NULL == Info) || (0u == infoLen)) + { + return rtn; + } + + /*- 创建DGRAM类型套接字*/ + sockfd = socket(AF_INET, SOCK_DGRAM, 0); + if (-1 == sockfd) + { + rtn = -1; + } + else + { + /*- 配置网络接口名称*/ + (void)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)? 12u : infoLen); + + for(i = 0u;i < n;i++) + { + phycmd.req.phy_reg = regList[i]; /* PHY状态寄存器地址 */ + /*- 发送驱动控制命令获取PHY状态*/ + (void)devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),NULL); + Info[i] = phycmd.req.phy_data; + } + rtn = (int)n; + (void)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) + { + rtn = -1; + } + else + { + /*- 配置网络接口名称*/ + (void)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状态*/ + (void)devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),NULL); + + (void)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..acfe8da 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 + +#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; + + #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/MSCP/CFM/CFM_Net.c b/TSCP/src/MSCP/CFM/CFM_Net.c index 34cff21..026d64b 100644 --- a/TSCP/src/MSCP/CFM/CFM_Net.c +++ b/TSCP/src/MSCP/CFM/CFM_Net.c @@ -47,7 +47,7 @@ #define CFM_INNET_SAFE_MSG_SIZE (5120u) #define CFM_INNET_RAW_MSG_SIZE (2048u) -#define CFM_OUTNET_SAFE_MSG_SIZE (5120u) +#define CFM_OUTNET_SAFE_MSG_SIZE (6144u) #define CFM_OUTNET_RAW_MSG_SIZE (5120u) #define CFM_OUTNET_HEART_MSG_SIZE (1000u) #define CFM_SYN_MSG_SIZE (1000u) @@ -99,11 +99,16 @@ typedef struct /** 2乘线程控制*/ static STRU_CFM_RECV_CTRL_T s_CFM_Rx2x2; /**< 2x2数据通信接收线程控制 */ static STRU_CFM_RECV_CTRL_T s_CFM_State2x2; /**< 2x2数据通信接收线程控制 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Area2x2; /**< 2x2数据通信接收线程控制 */ +/** 区域线程控制 */ +static STRU_CFM_RECV_CTRL_T s_CFM_RxArea; /** 2取线程控制*/ static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2; /**< 2oo2数据通信接收线程控制 */ static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_App; /**< 应用2oo2数据通信接收线程控制 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_Area; /**< 区域2oo2数据通信接收线程控制 */ static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2Mainteance; /**< 2oo2维护数据通信接收线程控制 */ static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_State; /**< 2oo2维护数据通信接收线程控制 */ +static STRU_CFM_RECV_CTRL_T s_CFM_Rx2oo2_Assert; /**< 2oo2宕机数据通信接收线程控制 */ /** 其他通信线程控制*/ static STRU_CFM_RECV_CTRL_T s_CFM_RxInnetSafe; /**< 内网安全通信接收线程控制 */ static STRU_CFM_RECV_CTRL_T s_CFM_RxRemoteUpdate; /**< 内网远程部署安全通信接收线程控制 */ @@ -134,7 +139,6 @@ typedef struct ENUM_CM_RETURN isOK; /* 校时成功标志 */ CM_INT64 delay; /* 延迟时间 */ CM_INT64 offset; /* 偏移时间 */ - }STRU_CFM_TIME_CTRL_T; /** 周期同步控制 */ @@ -160,11 +164,18 @@ typedef struct CM_SOCKET Sock_2oo2_Data_App; /**< 应用2oo2数据通信socket */ CM_SOCKET Sock_2oo2_Maintenance; /**< 2oo2维护模式socket */ CM_SOCKET Sock_2oo2_2x2_State; /**< 2oo2上电同步socket */ + CM_SOCKET Sock_2oo2_Data_Area; /**< 2oo2交互区域数据socket */ + CM_SOCKET Sock_2oo2_Assert; /**< 宕机二取 */ CM_SOCKET Sock_2x2_Time; /**< 2x2校时socket */ CM_SOCKET Sock_2x2_Data; /**< 2x2数据通信socket */ CM_SOCKET Sock_2x2_Syn; /**< 2x2周期同步socket */ CM_SOCKET Sock_2x2_State; /**< 2x2状态切换socket */ + CM_SOCKET Sock_2x2_Area; /**< 2x2区域数据socket */ + CM_SOCKET Sock_Area_Send; /**< 区域组播发送socket */ + CM_SOCKET Sock_Area_Recv; /**< 区域组播接收socket */ + CM_SOCKET Sock_Area_Time; /**< 2x2校时socket */ + CM_SOCKET Sock_InnetSafe; /**< 内网安全通信socket */ CM_SOCKET Sock_OutnetSafe; /**< 外网安全通信socket */ @@ -186,6 +197,7 @@ static STRU_CFM_SOCKS_T s_CFM_Sock; /**< 通信层socket管理 */ static STRU_CFM_TIME_CTRL_T s_CFM_2oo2_Time; /**< 2oo2时钟同步控制 */ static STRU_CFM_TIME_CTRL_T s_CFM_2x2_Time; /**< 2x2时钟同步控制 */ static STRU_CFM_SYN_CTRL_T s_CFM_2x2_Syn; /**< 2x2周期同步控制 */ +static STRU_CFM_TIME_CTRL_T s_CFM_Area_Time; /**< 区域时钟同步控制 */ static CM_UINT8 s_CFM_UDP_Cache[65535]; /**< 临时缓冲区 */ @@ -222,6 +234,11 @@ static ENUM_CM_RETURN CFM_2oo2_SendARQ_Currency(STRU_2OO2_NET_NO_PACK_T *p_2oo2_ */ static void s_NetInit_2x2(void); +/** +* @brief 区域相关网络通信初始化 +*/ +static void s_NetInit_Area(void); + /** * @brief 周期同步线程 * @param arg 指向STRU_CFM_SYN_CTRL的指针 @@ -310,6 +327,19 @@ static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* ar * @see :: CFM_2oo2_TimeGet */ static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg); +/** +* @brief 时钟同步线程 +* @param arg 指向STRU_CFM_TIME_CTRL的指针 +* @return 线程函数返回值(实际永远不会返回) +* @details +* 创建本线程之前应先配置好STRU_CFM_TIME_CTRL,包括创建阻塞通信的socket +* 本线程将以阻塞方式接收时钟同步报文并作出应答 +* 收到请求报文时立即给出应答 +* 收到应答报文时记录并计算延迟时间、偏移时间 +* @see :: CFM_2x_TimeReq +* @see :: CFM_2x_TimeGet +*/ +static CM_THREAD_FUNC_T t_TimeThread_Area(IN CM_Thread_Arg_Struct_T* arg); /** * @brief 远程部署接收线程 @@ -321,7 +351,62 @@ static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg); static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg); static CM_THREAD_FUNC_T t_ClearArpThread(void); + +/* 2取使用socket的初始化*/ +static void s_SockInit_2oo2(void); /*********************************2取相关*****************************************/ +/* 2取使用socket的初始化*/ +static void s_SockInit_2oo2(void) +{ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 临时变量 */ + CM_INT32 val = 0; /* 临时变量 */ + val = (CM_INT32)NET_UDP_BUF_DOUBLESIZE; + + /*- 创建时间同步socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Time, CM_FALSE,(CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Time, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); + /*- 创建平台数据2取socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); + /*- 创建应用数据2取socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data_App, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_App, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); + /*- 创建2x状态2取socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_2x2_State,0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + /*- 创建区域数据2取socket */ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data_Area, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_Area,0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_25); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_Area, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_Area, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + } + else + { + /* 无处理*/ + } + /*- 宕机二取*/ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Assert, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Assert,0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_26); + + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) + { + /*- 创建维护模式下的2取socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Maintenance, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance, 0u, ENUM_UNICAST); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_18); + } + else + { + /*- 无处理 */ + } + + /*- 配置socket */ + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); +} /** * @brief 2oo2相关网络通信初始化 */ @@ -331,37 +416,11 @@ static void s_NetInit_2oo2(void) ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 临时变量 */ CM_INT32 val = 0; /* 临时变量 */ CM_BOOL rtCheck = CM_FALSE; /* 临时变量 */ + val = (CM_INT32)NET_UDP_BUF_DOUBLESIZE; - /*- 创建时间同步socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Time, CM_FALSE,(CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Time, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); - /*- 创建平台数据2取socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); - /*- 创建应用数据2取socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Data_App, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_App, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - /*- 创建2x状态2取socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_2x2_State,0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + /*SOCK初始化*/ + s_SockInit_2oo2(); - if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) - { - /*- 创建维护模式下的2取socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Maintenance, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance, 0u, (CM_UINT8)0u); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_18); - } - else - { - /*- 无处理 */ - } - - /*- 配置socket */ - val = (CM_INT32)NET_UDP_BUF_DOUBLESIZE; - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_RCVBUF, (void*)(&val), (unsigned int)sizeof(val)); - (void)setsockopt(s_CFM_Sock.Sock_2oo2_Data_App, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); /*- 初始化控制信息 */ CM_NM_ASSERT(s_CFM_2oo2_Time.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_7); (void)sprintf(s_CFM_2oo2_Time.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); @@ -387,6 +446,19 @@ static void s_NetInit_2oo2(void) rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2); CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_12); + /*- 配置宕机接收线程 */ + CM_NM_ASSERT(s_CFM_Rx2oo2_Assert.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_27); + (void)sprintf(s_CFM_Rx2oo2_Assert.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Assert.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Assert; + s_CFM_Rx2oo2_Assert.pSock = &s_CFM_Sock.Sock_2oo2_Assert; + s_CFM_Rx2oo2_Assert.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Assert.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Assert; + rt = CM_MQ_Init(&s_CFM_Rx2oo2_Assert.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_28); + /*- 启动2oo2接收线程 */ + rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_Assert); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_29); + if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id)) { CM_NM_ASSERT(s_CFM_Rx2oo2Mainteance.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_19); @@ -420,6 +492,26 @@ static void s_NetInit_2oo2(void) rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx_App", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_App); CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_16); + /*- 配置接收线程 */ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + CM_NM_ASSERT(s_CFM_Rx2oo2_Area.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); + (void)sprintf(s_CFM_Rx2oo2_Area.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Area.port = g_PFM_Cfg.Local_Cfg.Port_2oo2_Data_Area; + s_CFM_Rx2oo2_Area.pSock = &s_CFM_Sock.Sock_2oo2_Data_Area; + s_CFM_Rx2oo2_Area.rmtIP = inet_addr(g_PFM_Cfg.Peer_Cfg.IP_2oo2); + s_CFM_Rx2oo2_Area.rmtPort = g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data_Area; + rt = CM_MQ_Init(&s_CFM_Rx2oo2_Area.MsgQ, (CM_UINT16)CFM_2oo2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2OO2_BUF_SIZE); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_26); + /*- 启动2oo2接收线程 */ + rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx_Area", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_Area); + CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_27); + } + else + { + + } + /*- 配置接收线程 */ CM_NM_ASSERT(s_CFM_Rx2oo2_State.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_22); (void)sprintf(s_CFM_Rx2oo2_State.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2); @@ -525,6 +617,7 @@ ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) { /*- 变量初始化 */ ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; /*- 锁定互斥锁 */ rt = CM_Mutex_Lock(s_CFM_2oo2_Time.mutex); @@ -537,7 +630,7 @@ ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) *pOffset = s_CFM_2oo2_Time.offset; /*- 清除时钟同步结果 */ s_CFM_2oo2_Time.isOK = ENUM_CM_FALSE; - rt = ENUM_CM_TRUE; + ret = ENUM_CM_TRUE; } else { @@ -547,7 +640,7 @@ ENUM_CM_RETURN CFM_2oo2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) rt = CM_Mutex_Unlock(s_CFM_2oo2_Time.mutex); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_2); /*- 返回执行结果 */ - return rt; + return ret; } /** * @brief 通用2oo2数据发送 @@ -704,6 +797,56 @@ CM_INT32 CFM_2oo2_DataRecv_App(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) } /** * @brief 2oo2数据发送 +* @param pBuf 发送报文指针 取值范围:非空 +* @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF +* @return 发送结果 +* - ENUM_CM_TRUE 成功 +* - ENUM_CM_FALSE 失败 +*/ +ENUM_CM_RETURN CFM_2oo2_DataSend_Area(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) +{ + /*- 入参指针防空 */ + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_42, TSCP_DARK_ASSERT_1); + /*- 返回发送结果 */ + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data_Area,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data_Area); +} + +/** +* @brief 2oo2数据接收 +* @param pBuf 接收报文指针 取值范围:非空 +* @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF +* @return 接收报文长度 +* - 1~0xFFFFFFFF 接收报文长度 +* - 0 接收失败 +*/ +CM_INT32 CFM_2oo2_DataRecv_Area(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) +{ + /*- 指针防空*/ + /*- 变量初始化 */ + CM_UINT16 len = (CM_UINT16)((BufSize > 65535u) ? 65535u : BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 指针防空*/ + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_33, TSCP_DARK_ASSERT_1); + /*- 从接收线程获取输入报文 */ + rt = CM_MQ_Read(&s_CFM_Rx2oo2_Area.MsgQ, s_CFM_Rx2oo2_Area.cache_buf, &len); + /*- 是否获取成功 */ + if ((ENUM_CM_TRUE == rt) && (6u < len)) + { + /*- 输出接收数据 */ + len -= 6u; + rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2_Area.cache_buf + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_33, TSCP_DARK_ASSERT_2); + } + else + { + /*- 接收长度为0 */ + len = 0u; + } + /*- 返回接收长度 */ + return (CM_INT32)len; +} +/** +* @brief 2oo2数据发送 * @param pBuf 发送报文指针 * @param BufLen 发送报文长度 * @return 发送结果 @@ -812,7 +955,7 @@ CM_INT32 CFM_2oo2_DataRecv_Crash(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) ENUM_CM_RETURN CFM_2oo2_DataSend_ASSERT(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) { /*- 返回发送结果 */ - return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Data,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Data); + return CFM_2oo2_Send_Currency(s_CFM_Sock.Sock_2oo2_Assert,pBuf, BufLen,g_PFM_Cfg.Peer_Cfg.Port_2oo2_Assert); } /** @@ -831,13 +974,13 @@ CM_INT32 CFM_2oo2_DataRecv_ASSERT(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize) /*- 指针防空*/ CM_ASSERT_MAINTAIN(NULL != pBuf); /*- 从接收线程获取输入报文 */ - rt = CM_MQ_Read(&s_CFM_Rx2oo2.MsgQ, s_CFM_Rx2oo2.cache_buf, &len); + rt = CM_MQ_Read(&s_CFM_Rx2oo2_Assert.MsgQ, s_CFM_Rx2oo2_Assert.cache_buf, &len); /*- 是否获取成功 */ if ((ENUM_CM_TRUE == rt) && (6u < len)) { /*- 输出接收数据 */ len -= 6u; - (void)CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2.cache_buf + 6), (CM_SIZE_T)len); + (void)CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Rx2oo2_Assert.cache_buf + 6), (CM_SIZE_T)len); } else { @@ -1000,15 +1143,15 @@ static void s_NetInit_2x2(void) CM_INT32 val = 0; /* 临时变量 */ CM_BOOL rtCheck = CM_FALSE; /* 临时变量 */ /*- 创建socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Time, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Time, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Data, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Data, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Data, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Syn, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Syn, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Syn, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Syn, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); /*- 创建2x状态切换独立线程socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_State, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_State, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_State, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_13); /*- 初始化控制信息 */ @@ -1070,7 +1213,192 @@ static void s_NetInit_2x2(void) CM_Sleep(100u);/* 延时等待线程启动 */ } +/** +* @brief 区域相关网络通信初始化 +*/ +static void s_NetInit_Area(void) +{ + /*- 变量初始化 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 临时变量 */ + CM_INT32 val = 0; /* 临时变量 */ + CM_BOOL rtCheck = CM_FALSE; /* 临时变量 */ + /*- 创建区域数据切换独立线程socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2x2_Area, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_2x2_Area, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_1); + /*- 创建区域通信组播发送socket*/ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_Area_Send, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_Area_Send, (CM_UINT32)inet_addr(g_PFM_Cfg.Area_Cfg.IP_Multicast_Dest), ENUM_MULTICAST_SEND); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_2); + /*- 创建区域通信组播接收socket*/ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_Area_Recv, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_Area_Recv, (CM_UINT32)inet_addr(g_PFM_Cfg.Area_Cfg.IP_Multicast_Mine), ENUM_MULTICAST_RCV); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_3); + printf("multi dest:%s, multi mine:%s\n", g_PFM_Cfg.Area_Cfg.IP_Multicast_Dest, g_PFM_Cfg.Area_Cfg.IP_Multicast_Mine); + /*- 创建socket */ + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_Area_Time, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2x2), g_PFM_Cfg.Local_Cfg.Port_Area_Time, 0u, ENUM_UNICAST); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_4); + CM_ASSERT(s_CFM_Area_Time.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_5); + (void)sprintf(s_CFM_Area_Time.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_Area_Time.port = g_PFM_Cfg.Local_Cfg.Port_Area_Time; + s_CFM_Area_Time.pSock = &s_CFM_Sock.Sock_Area_Time; + rt = CM_Mutex_Init(&s_CFM_Area_Time.mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_6); + + val = (CM_INT32)(NET_UDP_BUF_DOUBLESIZE); + (void)setsockopt(s_CFM_Sock.Sock_Area_Send, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_Area_Recv, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2x2_Area, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + (void)setsockopt(s_CFM_Sock.Sock_2x2_Area, SOL_SOCKET, SO_SNDBUF, (void*)(&val), (unsigned int)sizeof(val)); + + /*- 配置接收线程 */ + CM_ASSERT(s_CFM_Area2x2.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_7); + (void)sprintf(s_CFM_Area2x2.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_Area2x2.port = g_PFM_Cfg.Local_Cfg.Port_2x2_Area; + s_CFM_Area2x2.pSock = &s_CFM_Sock.Sock_2x2_Area; + s_CFM_Area2x2.rmtIP = inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2); + s_CFM_Area2x2.rmtPort = g_PFM_Cfg.Partner_Cfg.Port_2x2_Area; + rt = CM_MQ_Init(&s_CFM_Area2x2.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2X2_BUF_SIZE); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_8); + + CM_ASSERT(s_CFM_RxArea.IP != NULL, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_9); + (void)sprintf(s_CFM_RxArea.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2x2); + s_CFM_RxArea.port = g_PFM_Cfg.Local_Cfg.Port_Area_Recv; + s_CFM_RxArea.pSock = &s_CFM_Sock.Sock_Area_Recv; + s_CFM_RxArea.rmtIP = 0; + s_CFM_RxArea.rmtPort = g_PFM_Cfg.Local_Cfg.Port_Area_Send; + s_CFM_RxArea.threadNumBer = (CM_UINT8)ENUM_THREAD_AREA_RECV; + rt = CM_MQ_Init(&s_CFM_RxArea.MsgQ, (CM_UINT16)CFM_2X2_MSG_NUM_MAX, (CM_UINT16)NET_UDP_2X2_BUF_SIZE); + CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_10); + + /*- 启动区域时钟同步线程 */ + rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_TimeThread_Area, "Area_T", 0, CM_TASK_PRIORITY_76, (CM_Thread_Arg_Struct_T*)&s_CFM_Area_Time); + CM_ASSERT(CM_TRUE == rtCheck,NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_11); + CM_Sleep(100u);/* 延时等待线程启动 */ + + /*- 区域接收线程*/ + rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "Area_Rx", 0, CM_TASK_PRIORITY_77,(CM_Thread_Arg_Struct_T*)&s_CFM_RxArea); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_12); + + /*- 启动2x2区域数据接收线程 */ + rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2x2_RxArea", 0, CM_TASK_PRIORITY_77, (CM_Thread_Arg_Struct_T*)&s_CFM_Area2x2); + CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_49, TSCP_DARK_ASSERT_13); +} + +/** +* @brief 区域数据发送 +* @param pBuf 发送报文指针 取值范围:非空 +* @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF +* @return 发送结果 +* - ENUM_CM_TRUE 成功 +* - ENUM_CM_FALSE 失败 +*/ +ENUM_CM_RETURN CFM_Area_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) +{ + /*- 变量初始化 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 入参指针防空 */ + if(NULL != pBuf) + { + /*- 2x状态切换UDP通信通道向对系发送 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_Area_Send, pBuf, BufLen, inet_addr(g_PFM_Cfg.Area_Cfg.IP_Multicast_Dest),g_PFM_Cfg.Local_Cfg.Port_Area_Recv); + } + else + { + /*空指针返回失败*/ + } + /*- 返回发送结果 */ + return rt; +} + +/** +* @brief 区域数据接收 +* @param pBuf 接收报文指针 取值范围:非空 +* @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF +* @return 接收报文长度 +* - 1~0xFFFFFFFF 接收报文长度 +* - 0 接收失败 +*/ +CM_INT32 CFM_Area_DataRecv(CM_UINT8* pBuf, IN CM_UINT32 BufSize) +{ + /*- 变量初始化 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + CM_RE_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_51, TSCP_DARK_ASSERT_1); + /*- 从接收线程获取输入报文 */ + rt = CM_MQ_Read(&s_CFM_RxArea.MsgQ, s_CFM_RxArea.cache_buf, &len); + /*- 是否获取成功 */ + if ((rt == ENUM_CM_TRUE) && (len > 6u)) + { + /*- 输出接收数据 */ + rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)s_CFM_RxArea.cache_buf, (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_51, TSCP_DARK_ASSERT_2); + } + else + { + /*- 接收长度为0 */ + len = 0u; + } + /*- 返回接收长度 */ + return (CM_INT32)len; +} + +/** +* @brief 2x区域数据发送 +* @param pBuf 发送报文指针 取值范围:非空 +* @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF +* @return 发送结果 +* - ENUM_CM_TRUE 成功 +* - ENUM_CM_FALSE 失败 +*/ +ENUM_CM_RETURN CFM_2x2_Area_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen) +{ + /*- 变量初始化 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 入参指针防空 */ + if(NULL != pBuf) + { + /*- 2x状态切换UDP通信通道向对系发送 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_2x2_Area, pBuf, BufLen, inet_addr(g_PFM_Cfg.Partner_Cfg.IP_2x2),g_PFM_Cfg.Partner_Cfg.Port_2x2_Area); + } + else + { + /*空指针返回失败*/ + } + /*- 返回发送结果 */ + return rt; +} + +/** +* @brief 2x区域数据接收 +* @param pBuf 接收报文指针 取值范围:非空 +* @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF +* @return 接收报文长度 +* - 1~0xFFFFFFFF 接收报文长度 +* - 0 接收失败 +*/ +CM_INT32 CFM_2x2_Area_DataRecv(CM_UINT8* pBuf, IN CM_UINT32 BufSize) +{ + /*- 变量初始化 */ + CM_UINT16 len = (BufSize > 65535u) ? (CM_UINT16)(65535u) : (CM_UINT16)(BufSize); + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + CM_ASSERT(NULL != pBuf, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_50, TSCP_DARK_ASSERT_1); + /*- 从接收线程获取输入报文 */ + rt = CM_MQ_Read(&s_CFM_Area2x2.MsgQ, s_CFM_Area2x2.cache_buf, &len); + /*- 是否获取成功 */ + if ((rt == ENUM_CM_TRUE) && (len > 6u)) + { + /*- 输出接收数据 */ + len -= 6; + rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_Area2x2.cache_buf + 6), (CM_SIZE_T)len); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_50, TSCP_DARK_ASSERT_2); + } + else + { + /*- 接收长度为0 */ + len = 0u; + } + /*- 返回接收长度 */ + return (CM_INT32)len; +} /** * @brief 2x2状态数据发送 * @param pBuf 发送报文指针 取值范围:非空 @@ -1165,6 +1493,42 @@ void CFM_2x2_TimeReq(void) } } /** +* @brief 发起一次区域时钟同步 +* @details +* 发送一个区域时钟同步请求报文 +* 由双方的时钟同步线程完成一次NTP校时操作 +* 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 +* @see :: CFM_2x2_TimeGet +* @see :: t_TimeThread +*/ +void CFM_Area_TimeReq(void) +{ + /*- 变量初始化 */ + CM_UINT8 buf[100]; + CM_INT32 len = 0; + CM_ATOMIC CM_UINT64 tick = 0u; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + /*- 生成时钟同步请求报文 */ + len = 9; + buf[0] = (CM_UINT8)ENUM_TIME_REQ; + + tick = DFM_GetCycTick(); + + CM_64ToChar(tick, buf + 1); + /*- 发送时钟同步请求报文 */ + rt = CM_UDP_Send_Msg(s_CFM_Sock.Sock_Area_Time, buf, len, inet_addr(g_PFM_Cfg.Area_Cfg.IP_Area_A), g_PFM_Cfg.Partner_Cfg.Port_Area_Time); + rt |= CM_UDP_Send_Msg(s_CFM_Sock.Sock_Area_Time, buf, len, inet_addr(g_PFM_Cfg.Area_Cfg.IP_Area_B), g_PFM_Cfg.Partner_Cfg.Port_Area_Time); + if(ENUM_CM_TRUE != rt) + { + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1)); + MSCP_LOG_MSG("CFM_2x2_TimeReq UDP_SEND Error!\n"); + } + else + { + /*- 不处理 */ + } +} +/** * @brief 读取2x2时钟同步结果 * @param pDelay 延迟时间 * @param pOffset 偏移时间 @@ -1177,6 +1541,7 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) /*- 变量初始化 */ ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; /*- 指针不为空 */ if((NULL != pDelay) && (NULL != pOffset)) { @@ -1191,7 +1556,7 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) *pOffset = s_CFM_2x2_Time.offset; /*- 清除时钟同步结果 */ s_CFM_2x2_Time.isOK = ENUM_CM_FALSE; - rt = ENUM_CM_TRUE; + ret = ENUM_CM_TRUE; } else { @@ -1204,13 +1569,62 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_2); } else + { + //TSCP_DARK_CFMNET_2x2TIMEGET_REDNULL + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_2)); + MSCP_LOG_MSG("pDelay == NULL || pOffset == NULL\n"); + } + /*- 返回执行结果 */ + return ret; +} +/** +* @brief 读取区域时钟同步结果 +* @param pDelay 延迟时间 +* @param pOffset 偏移时间 +* @return 执行结果 +* - ENUM_CM_TRUE 成功 +* - ENUM_CM_FALSE 失败 +*/ +ENUM_CM_RETURN CFM_Area_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) +{ + + /*- 变量初始化 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + /*- 指针不为空 */ + if((NULL != pDelay) && (NULL != pOffset)) + { + /*- 锁定互斥锁 */ + rt = CM_Mutex_Lock(s_CFM_Area_Time.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_43, TSCP_DARK_ASSERT_1); + /*- 是否保存了时钟同步结果 */ + if (ENUM_CM_TRUE == s_CFM_Area_Time.isOK) + { + /*- 读取时钟同步结果 */ + *pDelay = s_CFM_Area_Time.delay; + *pOffset = s_CFM_Area_Time.offset; + /*- 清除时钟同步结果 */ + s_CFM_Area_Time.isOK = ENUM_CM_FALSE; + ret = ENUM_CM_TRUE; + } + else + { + //TSCP_DARK_CFMNET_2x2TIMEGET_REDERROR + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1)); + MSCP_LOG_MSG("s_CFM_Area_Time.isOK != ENUM_CM_TRUE\n"); + } + /*- 释放互斥锁 */ + rt = CM_Mutex_Unlock(s_CFM_Area_Time.mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_43, TSCP_DARK_ASSERT_2); + } + else { //TSCP_DARK_CFMNET_2x2TIMEGET_REDNULL (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2)); MSCP_LOG_MSG("pDelay == NULL || pOffset == NULL\n"); } /*- 返回执行结果 */ - return rt; + return ret; } /** * @brief 周期同步线程 @@ -1428,7 +1842,7 @@ static void s_NetInit_Innet(void) CM_INT32 rcv_val = 0; /* 临时变量 */ CM_INT32 send_val = 0; /* 临时变量 */ CM_INT32 i = 0; /* 循环变量 */ - CM_INT32 bCast = 1; + ENUM_ETHERENT_TYPE bCast = ENUM_BROADCAST; CM_CHAR *p_tmpIPCom; CM_BOOL rtCheck = CM_FALSE; rcv_val = (CM_INT32)NET_UDP_BUF_SIZE; @@ -1436,7 +1850,7 @@ static void s_NetInit_Innet(void) STRU_PFM_INNET_CFG_T *pCom = NULL; /*- 创建安全通信socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Com), g_PFM_Cfg.Local_Cfg.Port_Innet_Safe, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Com), g_PFM_Cfg.Local_Cfg.Port_Innet_Safe, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_RCVBUF, (void*)(&rcv_val), (unsigned int)sizeof(rcv_val)); (void)setsockopt(s_CFM_Sock.Sock_InnetSafe, SOL_SOCKET, SO_SNDBUF, (void*)(&send_val), (unsigned int)sizeof(send_val)); @@ -1496,17 +1910,17 @@ static void s_NetInit_Innet(void) /*UDP通信*/ if (RAW_COM_BROADCAST == g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Type_Enable) { - bCast = 1;/*广播模式*/ + bCast = ENUM_BROADCAST;/*广播模式*/ } else { - bCast = 0;/*默认单播组播模式*/ + bCast = ENUM_UNICAST;/*默认单播组播模式*/ } rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_InnetRaw[i], CM_FALSE, (CM_UINT32)inet_addr(p_tmpIPCom), g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].Port_Innet_Raw, - (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].IP_InnetRaw_maddr), (CM_UINT8)bCast); + (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.Innet_Raw_Parameter[i].IP_InnetRaw_maddr), bCast); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_7); rcv_val = (CM_INT32)NET_UDP_BUF_SIZE*60;/*此处必须开大,用于接收GIGE大数据*/ (void)setsockopt(s_CFM_Sock.Sock_InnetRaw[i], SOL_SOCKET, SO_RCVBUF, (void*)(&rcv_val), (unsigned int)sizeof(rcv_val)); @@ -2179,7 +2593,7 @@ static void s_NetInit_Outnet(void) CM_BOOL rtCheck; /* 临时变量 */ /*- 创建socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetSafe, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Safe, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); /*- 配置socket */ @@ -2201,7 +2615,7 @@ static void s_NetInit_Outnet(void) CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_4); /*- 创建外网心跳socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetHeart, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetHeart, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Heart, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_9); /*- 配置接收线程 */ @@ -2220,7 +2634,7 @@ static void s_NetInit_Outnet(void) if(0x55u == (CM_UINT32)g_PFM_Cfg.M_OutnetRaw_Enable) { /*- 创建socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetRaw, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Raw, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_OutnetRaw, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Out), g_PFM_Cfg.Local_Cfg.Port_Outnet_Raw, 0u, ENUM_UNICAST); CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_5); @@ -2315,11 +2729,11 @@ static void s_NetInit_Maintain(void) ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 临时变量 */ CM_INT32 val = 0; /* 临时变量 */ /*- 创建socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogBase, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Base, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogBase, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Base, 0u, ENUM_UNICAST); CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1); s_CFM_Send_LogStr.pSock = &s_CFM_Sock.Sock_LogBase; - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogCiphertext, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_LogCiphertext, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Log_Ciphertext, 0u, ENUM_UNICAST); CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_2); s_Log_CtrlQ.pSock = &s_CFM_Sock.Sock_LogCiphertext; @@ -2446,6 +2860,7 @@ void CFM_LogCiphertextSend(void) CM_UINT8 appType = 0u; /* 应用类型 */ CM_UINT32 crc = 0u; CM_UINT8 typeBoard = 1u; /* id = 1代表主机板 */ + CM_UINT8 outnetid = (CM_UINT8)(g_PFM_Cfg.OUTNET_ID >> 8); (void)CM_Mutex_Lock(ciphertextCtrl.mutex); dataLen = CM_QueueStatus(&s_Log_CtrlQ.MsgQ); @@ -2469,7 +2884,20 @@ void CFM_LogCiphertextSend(void) } else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "RCOCI")) { - appType = 2u; + if(0x3Du == outnetid) + { + /* 倒切RC*/ + appType = 2u; + } + else if(0x3Cu == outnetid) + { + /* 倒切CI*/ + appType = 3u; + } + else + { + + } } else if(0 == strcmp(g_PFM_Cfg.APP_NAME, "CI")) { @@ -2506,7 +2934,6 @@ void CFM_LogCiphertextSend(void) /*- crc */ crc = CM_Crc32(&sendBuf[0], sendOffset); CM_LongToChar(crc, &sendBuf[sendOffset]); - /*- 发送一整包,后面可能都是0,由上位机解析 */ (void)CM_UDP_Send_Msg((CM_SOCKET)*s_Log_CtrlQ.pSock, (CM_UINT8*)sendBuf, (CM_INT32)CM_UNSIGNED_INT_EXP(sendOffset+4u), (CM_UINT32)inet_addr(s_Log_CtrlQ.rmtIP), s_Log_CtrlQ.rmtPort); } @@ -2778,7 +3205,7 @@ static void s_NetInit_RemoteUpdate(void) } /*- 创建socket */ - rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_Remote_Update, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Remote_Update, 0u, (CM_UINT8)0); + rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_Remote_Update, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_Maintain), g_PFM_Cfg.Local_Cfg.Port_Remote_Update, 0u, ENUM_UNICAST); CM_NM_ASSERT(ENUM_CM_TRUE == rt,NET_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); /*- 配置socket */ @@ -2849,6 +3276,15 @@ void CFM_Net_Init(void) { /*- 无处理 */ } + /* 区域功能是否开启*/ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + s_NetInit_Area(); + } + else + { + /* 无处理*/ + } /* 内网通信初始化 */ s_NetInit_Innet(); /* 外网通信初始化 */ @@ -2926,7 +3362,7 @@ static CM_THREAD_FUNC_T t_UdpRecvThread(IN CM_Thread_Arg_Struct_T* arg) || ((srcIP == pCtrl->rmtIP) && (srcPort== pCtrl->rmtPort))) { /*- @alias 将收到的报文写入线程接收队列 */ - if((CM_UINT8)ENUM_THREAD_2x2_StateRecv == pCtrl->threadNumBer) + if(((CM_UINT8)ENUM_THREAD_2x2_StateRecv == pCtrl->threadNumBer) || ((CM_UINT8)ENUM_THREAD_AREA_RECV == pCtrl->threadNumBer)) { /*接收数据时间戳ms数记录*/ CM_LongToChar((CM_UINT32)(CM_GetTick()/CM_UNSIGNED_MILLION), rcvBuf); @@ -3032,7 +3468,7 @@ static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* ar /*- 防御性清空*/ /* MSCP_LOG_MSG("port %d rx overflow(msgLen=%d)\n", pCtrl->port, len);*/ rt = CM_MQ_Clear(&pCtrl->MsgQ); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_1); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_1); } } @@ -3041,21 +3477,21 @@ static CM_THREAD_FUNC_T t_UdpRecvMaintenanceThread(IN CM_Thread_Arg_Struct_T* ar /*- 来自非预期IP端口的数据*/ srcaddr.sin_addr.s_addr = srcIP; MSCP_LOG_MSG("rx err want port:%d src [%s:%d]:%d \n", pCtrl->rmtPort, inet_ntoa(srcaddr.sin_addr), srcPort, len); - CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_2); + CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_2); } } else { /*- 接收出错 */ MSCP_LOG_MSG("port %d rx err(len=%d)\n", pCtrl->port, len); - CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_3); + CM_NM_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_3); } } else { /*获取队列指针失败,清空队列*/ rt = CM_MQ_Clear(&pCtrl->MsgQ); - CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_38, TSCP_DARK_ASSERT_4); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_52, TSCP_DARK_ASSERT_4); } } return NULL; @@ -3144,7 +3580,7 @@ static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg) pCtrl->offset = (CM_INT64)((T2 + T3) - (T4 + T1)) / 2; rt = CM_Mutex_Unlock(pCtrl->mutex); CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); - + /*MSCP_LOG_MSG("%lld\t%lld\n%lld\t%lld\n%lld\t%lld\n",T1,T2,T4,T3, pCtrl->delay, pCtrl->offset);*/ } else { @@ -3167,7 +3603,135 @@ static CM_THREAD_FUNC_T t_TimeThread(IN CM_Thread_Arg_Struct_T* arg) /*- 不处理 */ } } - return NULL; + return arg; +} +/** +* @brief 时钟同步线程 +* @param arg 指向STRU_CFM_TIME_CTRL的指针 +* @return 线程函数返回值(实际永远不会返回) +* @details +* 创建本线程之前应先配置好STRU_CFM_TIME_CTRL,包括创建阻塞通信的socket +* 本线程将以阻塞方式接收时钟同步报文并作出应答 +* 收到请求报文时立即给出应答 +* 收到应答报文时记录并计算延迟时间、偏移时间 +* @see :: CFM_2x_TimeReq +* @see :: CFM_2x_TimeGet +*/ +static CM_THREAD_FUNC_T t_TimeThread_Area(IN CM_Thread_Arg_Struct_T* arg) +{ + /*- 变量初始化 */ + STRU_CFM_TIME_CTRL_T* pCtrl = (STRU_CFM_TIME_CTRL_T*)arg; /* 线程参数 */ + CM_UINT8 buf[100] = { 0u }; /* 接收缓冲区 */ + CM_INT32 len; /* 数据长度 */ + CM_UINT32 srcIP; /* 源IP */ + CM_UINT16 srcPort; /* 源端口 */ + CM_UINT64 tick = 0u; /* 精确时间 */ + CM_UINT64 T1 = 0u; /* 时钟同步参数 */ + CM_UINT64 T2 = 0u; /* 时钟同步参数 */ + CM_UINT64 T3 = 0u; /* 时钟同步参数 */ + CM_UINT64 T4 = 0u; /* 时钟同步参数 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + ENUM_2x2_STATE_T state = ENUM_2x2_SHUTDOWN; +#if QNX + void* pmask = NULL; + /*- 本线程锁定在 A53 core 1 */ + pmask = (void*)(0x01u|0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); +#endif + MSCP_LOG_MSG("IP:%s:%d Time Service Start\n", pCtrl->IP, (CM_INT32)pCtrl->port); + /*- 循环执行接收线程 */ + while (1) + { + /*- 阻塞接收时钟同步报文 */ + len = CM_UDP_Recv_Msg(*(pCtrl->pSock), buf, (CM_INT32)sizeof(buf), &srcIP, &srcPort); + tick = DFM_GetCycTick(); + state = SFM_2x2_GetLocal2x2State(); + /*- 是否收到有效报文 */ + if (len > 0) + { + /*- 报文类型 */ + switch ((ENUM_TIME_MSG_T)buf[0]) + { + case ENUM_TIME_REQ: /*-< 时钟同步请求 */ + /*- 长度是否合法 */ + if (9 == len) + { + /*- 解析请求报文 */ + T1 = CM_64FromChar(buf + 1); + /*- 生成应答报文 */ + T2 = tick; + buf[0] = (CM_UINT8)ENUM_TIME_ACK; + CM_64ToChar(T1, buf + 1); + CM_64ToChar(T2, buf + 9); + T3 = DFM_GetCycTick(); + CM_64ToChar(T3, buf + 17); + /*- 发送应答报文 */ + if( ENUM_2x2_MASTER == state) + { + (void)CM_UDP_Send_Msg(*(pCtrl->pSock), buf, (CM_INT32)25, srcIP, srcPort); + } + } + else + { + /*- 无处理 */ + } + /*- 返回 */ + break; + case ENUM_TIME_ACK:/*-< 时钟同步应答 */ + /*- 长度是否合法 */ + if (25 == len) + { + /*- 解析应答报文 */ + buf[0] = ENUM_TIME_ACK_AG; + T4 = tick; + CM_64ToChar(T4, buf + 25); + /*- 发送应答报文 */ + (void)CM_UDP_Send_Msg(*(pCtrl->pSock), buf, (CM_INT32)33, srcIP, srcPort); + } + else + { + /*- 无处理 */ + } + /*- 返回 */ + break; + case ENUM_TIME_ACK_AG:/*时钟同步应答T4*/ + /*- 长度是否合法 */ + if (33 == len) + { + T1 = CM_64FromChar(buf + 1); + T2 = CM_64FromChar(buf + 9); + T3 = CM_64FromChar(buf + 17); + T4 = CM_64FromChar(buf + 25); + /*- 记录延迟时间和偏移时间 */ + rt = CM_Mutex_Lock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_44, TSCP_DARK_ASSERT_1); + pCtrl->isOK = ENUM_CM_TRUE; + pCtrl->delay = (CM_INT64)((T4 - T1) - (T3 - T2)) / 2; + pCtrl->offset = (CM_INT64)((T4 + T1) - (T2 + T3)) / 2; + rt = CM_Mutex_Unlock(pCtrl->mutex); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_44, TSCP_DARK_ASSERT_2); + } + else + { + ; + } + break; + case ENUM_TIME_ERROR:/*-< 保留字 */ + /*- 宕机 */ + CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_44, TSCP_DARK_ASSERT_3); + /*- 返回 */ + break; + default: + /*- 返回 */ + break; + } + } + else + { + /*- 不处理 */ + } + } + return arg; } /** @@ -3360,7 +3924,24 @@ void CFM_Net2XFlush(void) { /*- 2x2接收缓冲区清空 */ rt = CM_MQ_Flush(&s_CFM_Rx2x2.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_45, TSCP_DARK_ASSERT_1); + } + else + { + /*- 无处理 */ + } +} +/** +* @brief 清空接收缓冲区 +*/ +void CFM_NetAreaFlush(void) +{ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + if (0x00u != g_PFM_Cfg.M_Area_Enable) + { + /*- 2x2接收缓冲区清空 */ + rt = CM_MQ_Flush(&s_CFM_RxArea.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_46, TSCP_DARK_ASSERT_1); } else { @@ -3376,9 +3957,26 @@ void CFM_Net2X_State_Flush(void) if (0x55u == g_PFM_Cfg.M_2x2_Enable) { rt = CM_MQ_Flush(&s_CFM_State2x2.MsgQ); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_11); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_47, TSCP_DARK_ASSERT_11); rt = CM_Com_OtherDataClear(); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_27, TSCP_DARK_ASSERT_9); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_47, TSCP_DARK_ASSERT_9); + } + else + { + /*- 无处理 */ + } +} +/** +* @brief 清空接收缓冲区 +*/ +void CFM_Net2X_Area_Flush(void) +{ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + if (0x00u != g_PFM_Cfg.M_Area_Enable) + { + /*- 2x2接收缓冲区清空 */ + rt = CM_MQ_Flush(&s_CFM_Area2x2.MsgQ); + CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_48, TSCP_DARK_ASSERT_1); } else { @@ -3396,6 +3994,8 @@ void CFM_NetFlush(void) /*- 2x2功能是否开启 */ CFM_Net2XFlush(); CFM_Net2X_State_Flush(); + CFM_NetAreaFlush(); + CFM_Net2X_Area_Flush(); /*- 内网安全接收缓冲区清空 */ rt = CM_MQ_Flush(&s_CFM_RxInnetSafe.MsgQ); @@ -4040,6 +4640,7 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) { static STRU_HARDWARE_BOOT_COM_T lastComRecord; CM_UINT32 cycle = DFM_GetBirthCount(); + CM_UINT8 cmdBuf[100] = {0}; #if QNX void* pmask = NULL; /*- 本线程锁定在 A53 core 1 */ @@ -4052,14 +4653,9 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) if((cycle > (g_Hardware_boot_com_state.CCU_A_Count + 100u))&&(lastComRecord.CCU_A_Count != g_Hardware_boot_com_state.CCU_A_Count)) { lastComRecord.CCU_A_Count = g_Hardware_boot_com_state.CCU_A_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.60"); - } - else - { - (void)system("arp -d 192.168.2.60"); - } + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_R_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_A_Count=%d,lastComRecord.CCU_A_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_A_Count,lastComRecord.CCU_A_Count); } else @@ -4070,14 +4666,9 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) if((cycle > (g_Hardware_boot_com_state.CCU_B_Count + 100u))&&(lastComRecord.CCU_B_Count != g_Hardware_boot_com_state.CCU_B_Count)) { lastComRecord.CCU_B_Count = g_Hardware_boot_com_state.CCU_B_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.61"); - } - else - { - (void)system("arp -d 192.168.2.61"); - } + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_B_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_B_Count=%d,lastComRecord.CCU_B_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_B_Count,lastComRecord.CCU_B_Count); } else @@ -4094,14 +4685,9 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) if((cycle > (g_Hardware_boot_com_state.SEB_A_Count + 100u))&&(lastComRecord.SEB_A_Count != g_Hardware_boot_com_state.SEB_A_Count)) { lastComRecord.SEB_A_Count = g_Hardware_boot_com_state.SEB_A_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.70"); - } - else - { - (void)system("arp -d 192.168.2.70"); - } + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_R_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_A_Count=%d,lastComRecord.SEB_A_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_A_Count,lastComRecord.SEB_A_Count); } else @@ -4112,14 +4698,9 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) if((cycle > (g_Hardware_boot_com_state.SEB_B_Count + 100u))&&(lastComRecord.SEB_B_Count != g_Hardware_boot_com_state.SEB_B_Count)) { lastComRecord.SEB_B_Count = g_Hardware_boot_com_state.SEB_B_Count; - if(g_PFM_Cfg.CPU_ID == 1u) - { - (void)system("arp -d 192.168.1.71"); - } - else - { - (void)system("arp -d 192.168.2.71"); - } + snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_B_IP); + (void)system(cmdBuf); + MSCP_LOG_MSG("%s\n", cmdBuf); MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_B_Count=%d,lastComRecord.SEB_B_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_B_Count,lastComRecord.SEB_B_Count); } else @@ -4132,6 +4713,38 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void) } return NULL; } +/** + * @brief 获取明文和暗文日志队列是否均为空 + * @return 获取结果 + * - ENUM_CM_TRUE 均为空 + * - ENUM_CM_FALSE 不均为空 + */ +ENUM_CM_RETURN CFM_LogQ_isEmpty() +{ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT32 len1 = 0u, len2 = 0u; + len1 = CM_QueueStatus(&s_Log_CtrlQ.MsgQ); + len2 = CM_MQ_Get_Msg_Num(&s_CFM_Send_LogStr.MsgQ); + if(0u == len1 && 0u == len2) + { + ret = ENUM_CM_TRUE; + } + else + { + + } + return ret; +} +/** + * @brief 判断收到宕机后的2取,立即执行宕机操作 + */ +void CFM_AssertRecved() +{ + CM_INT32 assertMsgNum = 0; + /*- 指针防空*/ + assertMsgNum = CM_MQ_Get_Msg_Num(&s_CFM_Rx2oo2_Assert.MsgQ); + CM_ASSERT((0u == assertMsgNum),NET_MODE,DARK_FAULT_CODE_FUN_ORDER_41,TSCP_DARK_ASSERT_1); +} /* diff --git a/TSCP/src/MSCP/CFM/CFM_Net.h b/TSCP/src/MSCP/CFM/CFM_Net.h index 72b6b64..834aea0 100644 --- a/TSCP/src/MSCP/CFM/CFM_Net.h +++ b/TSCP/src/MSCP/CFM/CFM_Net.h @@ -52,7 +52,8 @@ extern "C" { ENUM_TIME_ERROR = 0, /**< 保留 */ ENUM_TIME_REQ, /**< 时钟同步请求 */ - ENUM_TIME_ACK /**< 时钟同步应答 */ + ENUM_TIME_ACK, /**< 时钟同步应答 */ + ENUM_TIME_ACK_AG }ENUM_TIME_MSG_T; typedef struct @@ -68,7 +69,8 @@ extern "C" ENUM_THREAD_ERROR = 0, /**< 保留 */ ENUM_THREAD_OutnetS_Rx = 1, /**< 外网安全线程 */ ENUM_THREAD_2oo2_AppRecv = 2, /**< 应用2取线程 */ - ENUM_THREAD_2x2_StateRecv = 3 /**< 状态2x线程 */ + ENUM_THREAD_2x2_StateRecv = 3, /**< 状态2x线程 */ + ENUM_THREAD_AREA_RECV = 4 /**< 区域接收线程 */ }ENUM_THREAD_NUM_T; /* 暗文发送控制变量 */ @@ -504,6 +506,14 @@ extern "C" * @brief 清空接收缓冲区 */ void CFM_NetFlush(void); + /** + * @brief 清空接收缓冲区 + */ + void CFM_Net2X_Area_Flush(void); + /** + * @brief 清空接收缓冲区 + */ + void CFM_NetAreaFlush(void); /** * @brief 内网安全通信数据接收 @@ -656,7 +666,90 @@ extern "C" * - ENUM_CM_FALSE 失败 */ ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN ENUM_OUTNET_CHN_T Chn); - + /** + * @brief 区域数据发送 + * @param pBuf 发送报文指针 取值范围:非空 + * @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF + * @return 发送结果 + * - ENUM_CM_TRUE 成功 + * - ENUM_CM_FALSE 失败 + */ + ENUM_CM_RETURN CFM_Area_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + /** + * @brief 区域数据接收 + * @param pBuf 接收报文指针 取值范围:非空 + * @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF + * @return 接收报文长度 + * - 1~0xFFFFFFFF 接收报文长度 + * - 0 接收失败 + */ + CM_INT32 CFM_Area_DataRecv(CM_UINT8* pBuf, IN CM_UINT32 BufSize); + /** + * @brief 2oo2数据发送 + * @param pBuf 发送报文指针 取值范围:非空 + * @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF + * @return 发送结果 + * - ENUM_CM_TRUE 成功 + * - ENUM_CM_FALSE 失败 + */ + ENUM_CM_RETURN CFM_2oo2_DataSend_Area(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + /** + * @brief 2oo2数据接收 + * @param pBuf 接收报文指针 取值范围:非空 + * @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF + * @return 接收报文长度 + * - 1~0xFFFFFFFF 接收报文长度 + * - 0 接收失败 + */ + CM_INT32 CFM_2oo2_DataRecv_Area(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize); + /** + * @brief 2x区域数据接收 + * @param pBuf 接收报文指针 取值范围:非空 + * @param BufLen 接收报文缓冲区大小 取值范围:0~0xFFFFFFFF + * @return 接收报文长度 + * - 1~0xFFFFFFFF 接收报文长度 + * - 0 接收失败 + */ + CM_INT32 CFM_2x2_Area_DataRecv(CM_UINT8* pBuf, IN CM_UINT32 BufSize); + /** + * @brief 2x区域数据发送 + * @param pBuf 发送报文指针 取值范围:非空 + * @param BufLen 发送报文长度 取值范围:0~0x7FFFFFFF + * @return 发送结果 + * - ENUM_CM_TRUE 成功 + * - ENUM_CM_FALSE 失败 + */ + ENUM_CM_RETURN CFM_2x2_Area_DataSend(IN const CM_UINT8* pBuf, IN CM_INT32 BufLen); + /** + * @brief 发起一次区域时钟同步 + * @details + * 发送一个区域时钟同步请求报文 + * 由双方的时钟同步线程完成一次NTP校时操作 + * 操作完成后本方的时钟同步线程会记录到延迟时间和偏移时间 + * @see :: CFM_2x2_TimeGet + * @see :: t_TimeThread + */ + void CFM_Area_TimeReq(void); + /** + * @brief 读取区域时钟同步结果 + * @param pDelay 延迟时间 + * @param pOffset 偏移时间 + * @return 执行结果 + * - ENUM_CM_TRUE 成功 + * - ENUM_CM_FALSE 失败 + */ + ENUM_CM_RETURN CFM_Area_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset); + /** + * @brief 获取明文和暗文日志队列是否均为空 + * @return 获取结果 + * - ENUM_CM_TRUE 均为空 + * - ENUM_CM_FALSE 不均为空 + */ + ENUM_CM_RETURN CFM_LogQ_isEmpty(); + /** + * @brief 判断收到宕机后的2取,立即执行宕机操作 + */ + void CFM_AssertRecved(); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/CM/CM_CRC32.c b/TSCP/src/MSCP/CM/CM_CRC32.c index ab74be7..47fbf99 100644 --- a/TSCP/src/MSCP/CM/CM_CRC32.c +++ b/TSCP/src/MSCP/CM/CM_CRC32.c @@ -14,6 +14,110 @@ */ #include "CM_CRC32.h" +/*CRC32查找表,copy from RSSP(RsspCommon.c) by lmy 20170416*/ +const CM_UINT32 CM_CrcmTab[2][256u] = { +{ + 0x00000000u, 0x1942B361u, 0x328566C2u, 0x2BC7D5A3u, 0x650ACD84u, 0x7C487EE5u, 0x578FAB46u, 0x4ECD1827u, + 0xCA159B08u, 0xD3572869u, 0xF890FDCAu, 0xE1D24EABu, 0xAF1F568Cu, 0xB65DE5EDu, 0x9D9A304Eu, 0x84D8832Fu, + 0x18CE5601u, 0x018CE560u, 0x2A4B30C3u, 0x330983A2u, 0x7DC49B85u, 0x648628E4u, 0x4F41FD47u, 0x56034E26u, + 0xD2DBCD09u, 0xCB997E68u, 0xE05EABCBu, 0xF91C18AAu, 0xB7D1008Du, 0xAE93B3ECu, 0x8554664Fu, 0x9C16D52Eu, + 0x319CAC02u, 0x28DE1F63u, 0x0319CAC0u, 0x1A5B79A1u, 0x54966186u, 0x4DD4D2E7u, 0x66130744u, 0x7F51B425u, + 0xFB89370Au, 0xE2CB846Bu, 0xC90C51C8u, 0xD04EE2A9u, 0x9E83FA8Eu, 0x87C149EFu, 0xAC069C4Cu, 0xB5442F2Du, + 0x2952FA03u, 0x30104962u, 0x1BD79CC1u, 0x02952FA0u, 0x4C583787u, 0x551A84E6u, 0x7EDD5145u, 0x679FE224u, + 0xE347610Bu, 0xFA05D26Au, 0xD1C207C9u, 0xC880B4A8u, 0x864DAC8Fu, 0x9F0F1FEEu, 0xB4C8CA4Du, 0xAD8A792Cu, + 0x63395804u, 0x7A7BEB65u, 0x51BC3EC6u, 0x48FE8DA7u, 0x06339580u, 0x1F7126E1u, 0x34B6F342u, 0x2DF44023u, + 0xA92CC30Cu, 0xB06E706Du, 0x9BA9A5CEu, 0x82EB16AFu, 0xCC260E88u, 0xD564BDE9u, 0xFEA3684Au, 0xE7E1DB2Bu, + 0x7BF70E05u, 0x62B5BD64u, 0x497268C7u, 0x5030DBA6u, 0x1EFDC381u, 0x07BF70E0u, 0x2C78A543u, 0x353A1622u, + 0xB1E2950Du, 0xA8A0266Cu, 0x8367F3CFu, 0x9A2540AEu, 0xD4E85889u, 0xCDAAEBE8u, 0xE66D3E4Bu, 0xFF2F8D2Au, + 0x52A5F406u, 0x4BE74767u, 0x602092C4u, 0x796221A5u, 0x37AF3982u, 0x2EED8AE3u, 0x052A5F40u, 0x1C68EC21u, + 0x98B06F0Eu, 0x81F2DC6Fu, 0xAA3509CCu, 0xB377BAADu, 0xFDBAA28Au, 0xE4F811EBu, 0xCF3FC448u, 0xD67D7729u, + 0x4A6BA207u, 0x53291166u, 0x78EEC4C5u, 0x61AC77A4u, 0x2F616F83u, 0x3623DCE2u, 0x1DE40941u, 0x04A6BA20u, + 0x807E390Fu, 0x993C8A6Eu, 0xB2FB5FCDu, 0xABB9ECACu, 0xE574F48Bu, 0xFC3647EAu, 0xD7F19249u, 0xCEB32128u, + 0xC672B008u, 0xDF300369u, 0xF4F7D6CAu, 0xEDB565ABu, 0xA3787D8Cu, 0xBA3ACEEDu, 0x91FD1B4Eu, 0x88BFA82Fu, + 0x0C672B00u, 0x15259861u, 0x3EE24DC2u, 0x27A0FEA3u, 0x696DE684u, 0x702F55E5u, 0x5BE88046u, 0x42AA3327u, + 0xDEBCE609u, 0xC7FE5568u, 0xEC3980CBu, 0xF57B33AAu, 0xBBB62B8Du, 0xA2F498ECu, 0x89334D4Fu, 0x9071FE2Eu, + 0x14A97D01u, 0x0DEBCE60u, 0x262C1BC3u, 0x3F6EA8A2u, 0x71A3B085u, 0x68E103E4u, 0x4326D647u, 0x5A646526u, + 0xF7EE1C0Au, 0xEEACAF6Bu, 0xC56B7AC8u, 0xDC29C9A9u, 0x92E4D18Eu, 0x8BA662EFu, 0xA061B74Cu, 0xB923042Du, + 0x3DFB8702u, 0x24B93463u, 0x0F7EE1C0u, 0x163C52A1u, 0x58F14A86u, 0x41B3F9E7u, 0x6A742C44u, 0x73369F25u, + 0xEF204A0Bu, 0xF662F96Au, 0xDDA52CC9u, 0xC4E79FA8u, 0x8A2A878Fu, 0x936834EEu, 0xB8AFE14Du, 0xA1ED522Cu, + 0x2535D103u, 0x3C776262u, 0x17B0B7C1u, 0x0EF204A0u, 0x403F1C87u, 0x597DAFE6u, 0x72BA7A45u, 0x6BF8C924u, + 0xA54BE80Cu, 0xBC095B6Du, 0x97CE8ECEu, 0x8E8C3DAFu, 0xC0412588u, 0xD90396E9u, 0xF2C4434Au, 0xEB86F02Bu, + 0x6F5E7304u, 0x761CC065u, 0x5DDB15C6u, 0x4499A6A7u, 0x0A54BE80u, 0x13160DE1u, 0x38D1D842u, 0x21936B23u, + 0xBD85BE0Du, 0xA4C70D6Cu, 0x8F00D8CFu, 0x96426BAEu, 0xD88F7389u, 0xC1CDC0E8u, 0xEA0A154Bu, 0xF348A62Au, + 0x77902505u, 0x6ED29664u, 0x451543C7u, 0x5C57F0A6u, 0x129AE881u, 0x0BD85BE0u, 0x201F8E43u, 0x395D3D22u, + 0x94D7440Eu, 0x8D95F76Fu, 0xA65222CCu, 0xBF1091ADu, 0xF1DD898Au, 0xE89F3AEBu, 0xC358EF48u, 0xDA1A5C29u, + 0x5EC2DF06u, 0x47806C67u, 0x6C47B9C4u, 0x75050AA5u, 0x3BC81282u, 0x228AA1E3u, 0x094D7440u, 0x100FC721u, + 0x8C19120Fu, 0x955BA16Eu, 0xBE9C74CDu, 0xA7DEC7ACu, 0xE913DF8Bu, 0xF0516CEAu, 0xDB96B949u, 0xC2D40A28u, + 0x460C8907u, 0x5F4E3A66u, 0x7489EFC5u, 0x6DCB5CA4u, 0x23064483u, 0x3A44F7E2u, 0x11832241u, 0x08C19120u}, +{ + 0x00000000u, 0x1EF09C7Eu, 0x3DE138FCu, 0x2311A482u, 0x7BC271F8u, 0x6532ED86u, 0x46234904u, 0x58D3D57Au, + 0xF784E3F0u, 0xE9747F8Eu, 0xCA65DB0Cu, 0xD4954772u, 0x8C469208u, 0x92B60E76u, 0xB1A7AAF4u, 0xAF57368Au, + 0xFF048983u, 0xE1F415FDu, 0xC2E5B17Fu, 0xDC152D01u, 0x84C6F87Bu, 0x9A366405u, 0xB927C087u, 0xA7D75CF9u, + 0x08806A73u, 0x1670F60Du, 0x3561528Fu, 0x2B91CEF1u, 0x73421B8Bu, 0x6DB287F5u, 0x4EA32377u, 0x5053BF09u, + 0xEE045D65u, 0xF0F4C11Bu, 0xD3E56599u, 0xCD15F9E7u, 0x95C62C9Du, 0x8B36B0E3u, 0xA8271461u, 0xB6D7881Fu, + 0x1980BE95u, 0x077022EBu, 0x24618669u, 0x3A911A17u, 0x6242CF6Du, 0x7CB25313u, 0x5FA3F791u, 0x41536BEFu, + 0x1100D4E6u, 0x0FF04898u, 0x2CE1EC1Au, 0x32117064u, 0x6AC2A51Eu, 0x74323960u, 0x57239DE2u, 0x49D3019Cu, + 0xE6843716u, 0xF874AB68u, 0xDB650FEAu, 0xC5959394u, 0x9D4646EEu, 0x83B6DA90u, 0xA0A77E12u, 0xBE57E26Cu, + 0xCC05F4A9u, 0xD2F568D7u, 0xF1E4CC55u, 0xEF14502Bu, 0xB7C78551u, 0xA937192Fu, 0x8A26BDADu, 0x94D621D3u, + 0x3B811759u, 0x25718B27u, 0x06602FA5u, 0x1890B3DBu, 0x404366A1u, 0x5EB3FADFu, 0x7DA25E5Du, 0x6352C223u, + 0x33017D2Au, 0x2DF1E154u, 0x0EE045D6u, 0x1010D9A8u, 0x48C30CD2u, 0x563390ACu, 0x7522342Eu, 0x6BD2A850u, + 0xC4859EDAu, 0xDA7502A4u, 0xF964A626u, 0xE7943A58u, 0xBF47EF22u, 0xA1B7735Cu, 0x82A6D7DEu, 0x9C564BA0u, + 0x2201A9CCu, 0x3CF135B2u, 0x1FE09130u, 0x01100D4Eu, 0x59C3D834u, 0x4733444Au, 0x6422E0C8u, 0x7AD27CB6u, + 0xD5854A3Cu, 0xCB75D642u, 0xE86472C0u, 0xF694EEBEu, 0xAE473BC4u, 0xB0B7A7BAu, 0x93A60338u, 0x8D569F46u, + 0xDD05204Fu, 0xC3F5BC31u, 0xE0E418B3u, 0xFE1484CDu, 0xA6C751B7u, 0xB837CDC9u, 0x9B26694Bu, 0x85D6F535u, + 0x2A81C3BFu, 0x34715FC1u, 0x1760FB43u, 0x0990673Du, 0x5143B247u, 0x4FB32E39u, 0x6CA28ABBu, 0x725216C5u, + 0x8806A731u, 0x96F63B4Fu, 0xB5E79FCDu, 0xAB1703B3u, 0xF3C4D6C9u, 0xED344AB7u, 0xCE25EE35u, 0xD0D5724Bu, + 0x7F8244C1u, 0x6172D8BFu, 0x42637C3Du, 0x5C93E043u, 0x04403539u, 0x1AB0A947u, 0x39A10DC5u, 0x275191BBu, + 0x77022EB2u, 0x69F2B2CCu, 0x4AE3164Eu, 0x54138A30u, 0x0CC05F4Au, 0x1230C334u, 0x312167B6u, 0x2FD1FBC8u, + 0x8086CD42u, 0x9E76513Cu, 0xBD67F5BEu, 0xA39769C0u, 0xFB44BCBAu, 0xE5B420C4u, 0xC6A58446u, 0xD8551838u, + 0x6602FA54u, 0x78F2662Au, 0x5BE3C2A8u, 0x45135ED6u, 0x1DC08BACu, 0x033017D2u, 0x2021B350u, 0x3ED12F2Eu, + 0x918619A4u, 0x8F7685DAu, 0xAC672158u, 0xB297BD26u, 0xEA44685Cu, 0xF4B4F422u, 0xD7A550A0u, 0xC955CCDEu, + 0x990673D7u, 0x87F6EFA9u, 0xA4E74B2Bu, 0xBA17D755u, 0xE2C4022Fu, 0xFC349E51u, 0xDF253AD3u, 0xC1D5A6ADu, + 0x6E829027u, 0x70720C59u, 0x5363A8DBu, 0x4D9334A5u, 0x1540E1DFu, 0x0BB07DA1u, 0x28A1D923u, 0x3651455Du, + 0x44035398u, 0x5AF3CFE6u, 0x79E26B64u, 0x6712F71Au, 0x3FC12260u, 0x2131BE1Eu, 0x02201A9Cu, 0x1CD086E2u, + 0xB387B068u, 0xAD772C16u, 0x8E668894u, 0x909614EAu, 0xC845C190u, 0xD6B55DEEu, 0xF5A4F96Cu, 0xEB546512u, + 0xBB07DA1Bu, 0xA5F74665u, 0x86E6E2E7u, 0x98167E99u, 0xC0C5ABE3u, 0xDE35379Du, 0xFD24931Fu, 0xE3D40F61u, + 0x4C8339EBu, 0x5273A595u, 0x71620117u, 0x6F929D69u, 0x37414813u, 0x29B1D46Du, 0x0AA070EFu, 0x1450EC91u, + 0xAA070EFDu, 0xB4F79283u, 0x97E63601u, 0x8916AA7Fu, 0xD1C57F05u, 0xCF35E37Bu, 0xEC2447F9u, 0xF2D4DB87u, + 0x5D83ED0Du, 0x43737173u, 0x6062D5F1u, 0x7E92498Fu, 0x26419CF5u, 0x38B1008Bu, 0x1BA0A409u, 0x05503877u, + 0x5503877Eu, 0x4BF31B00u, 0x68E2BF82u, 0x761223FCu, 0x2EC1F686u, 0x30316AF8u, 0x1320CE7Au, 0x0DD05204u, + 0xA287648Eu, 0xBC77F8F0u, 0x9F665C72u, 0x8196C00Cu, 0xD9451576u, 0xC7B58908u, 0xE4A42D8Au, 0xFA54B1F4u } +}; +/*反转表,copy from RSSP(RsspCommon.c) by lmy 20170416*/ +const CM_UINT8 CM_Reflected_Byte[256u] = { + 0x00u, 0x80u, 0x40u, 0xC0u, 0x20u, 0xA0u, 0x60u, 0xE0u, + 0x10u, 0x90u, 0x50u, 0xD0u, 0x30u, 0xB0u, 0x70u, 0xF0u, + 0x08u, 0x88u, 0x48u, 0xC8u, 0x28u, 0xA8u, 0x68u, 0xE8u, + 0x18u, 0x98u, 0x58u, 0xD8u, 0x38u, 0xB8u, 0x78u, 0xF8u, + 0x04u, 0x84u, 0x44u, 0xC4u, 0x24u, 0xA4u, 0x64u, 0xE4u, + 0x14u, 0x94u, 0x54u, 0xD4u, 0x34u, 0xB4u, 0x74u, 0xF4u, + 0x0Cu, 0x8Cu, 0x4Cu, 0xCCu, 0x2Cu, 0xACu, 0x6Cu, 0xECu, + 0x1Cu, 0x9Cu, 0x5Cu, 0xDCu, 0x3Cu, 0xBCu, 0x7Cu, 0xFCu, + 0x02u, 0x82u, 0x42u, 0xC2u, 0x22u, 0xA2u, 0x62u, 0xE2u, + 0x12u, 0x92u, 0x52u, 0xD2u, 0x32u, 0xB2u, 0x72u, 0xF2u, + 0x0Au, 0x8Au, 0x4Au, 0xCAu, 0x2Au, 0xAAu, 0x6Au, 0xEAu, + 0x1Au, 0x9Au, 0x5Au, 0xDAu, 0x3Au, 0xBAu, 0x7Au, 0xFAu, + 0x06u, 0x86u, 0x46u, 0xC6u, 0x26u, 0xA6u, 0x66u, 0xE6u, + 0x16u, 0x96u, 0x56u, 0xD6u, 0x36u, 0xB6u, 0x76u, 0xF6u, + 0x0Eu, 0x8Eu, 0x4Eu, 0xCEu, 0x2Eu, 0xAEu, 0x6Eu, 0xEEu, + 0x1Eu, 0x9Eu, 0x5Eu, 0xDEu, 0x3Eu, 0xBEu, 0x7Eu, 0xFEu, + 0x01u, 0x81u, 0x41u, 0xC1u, 0x21u, 0xA1u, 0x61u, 0xE1u, + 0x11u, 0x91u, 0x51u, 0xD1u, 0x31u, 0xB1u, 0x71u, 0xF1u, + 0x09u, 0x89u, 0x49u, 0xC9u, 0x29u, 0xA9u, 0x69u, 0xE9u, + 0x19u, 0x99u, 0x59u, 0xD9u, 0x39u, 0xB9u, 0x79u, 0xF9u, + 0x05u, 0x85u, 0x45u, 0xC5u, 0x25u, 0xA5u, 0x65u, 0xE5u, + 0x15u, 0x95u, 0x55u, 0xD5u, 0x35u, 0xB5u, 0x75u, 0xF5u, + 0x0Du, 0x8Du, 0x4Du, 0xCDu, 0x2Du, 0xADu, 0x6Du, 0xEDu, + 0x1Du, 0x9Du, 0x5Du, 0xDDu, 0x3Du, 0xBDu, 0x7Du, 0xFDu, + 0x03u, 0x83u, 0x43u, 0xC3u, 0x23u, 0xA3u, 0x63u, 0xE3u, + 0x13u, 0x93u, 0x53u, 0xD3u, 0x33u, 0xB3u, 0x73u, 0xF3u, + 0x0Bu, 0x8Bu, 0x4Bu, 0xCBu, 0x2Bu, 0xABu, 0x6Bu, 0xEBu, + 0x1Bu, 0x9Bu, 0x5Bu, 0xDBu, 0x3Bu, 0xBBu, 0x7Bu, 0xFBu, + 0x07u, 0x87u, 0x47u, 0xC7u, 0x27u, 0xA7u, 0x67u, 0xE7u, + 0x17u, 0x97u, 0x57u, 0xD7u, 0x37u, 0xB7u, 0x77u, 0xF7u, + 0x0Fu, 0x8Fu, 0x4Fu, 0xCFu, 0x2Fu, 0xAFu, 0x6Fu, 0xEFu, + 0x1Fu, 0x9Fu, 0x5Fu, 0xDFu, 0x3Fu, 0xBFu, 0x7Fu, 0xFFu +}; /** * @brief CRC32函数 * @param pData 数据指针 @@ -86,3 +190,92 @@ CM_UINT32 CM_Crc32(IN const CM_UINT8 pData[],IN CM_UINT32 dataLen) /*- 返回CRC结果 */ return crc; } +/************************************************************* +* 功能描述: Crc32计算函数,使用CRC32查找表1 +* 参数说明: +* pData, 数据指针 +* DataLen, 数据长度(字节) +* 返回值: 返回值crc32Result为CRC值 +* 说明: 为保障平台小型化系统处理的安全性增加该CRC算法 +* add by lmy 20180411 +**************************************************************/ +CM_UINT32 CM_Crc32_1(const CM_UINT8 *pData, CM_UINT32 DataLen) +{ + CM_UINT32 crc32Result = 0u; + + /*入口参数检查*/ + if ((NULL != pData) && (0u < DataLen)) + { + crc32Result = CM_Crc32_common(pData, DataLen, CM_CrcmTab[0u]);/*使用CRC32查找表计算CRC值*/ + } + else + { + /*入口参数不合法*/ + crc32Result = 0u; + } + + return crc32Result; +} + +/************************************************************* +* 功能描述: Crc32函数,使用CRC32查找表2 +* 参数说明: +* pData, 数据指针 +* DataLen, 数据长度(字节) +* 返回值: 返回值crc32Result为CRC值 +* 说明: 为保障平台小型化系统处理的安全性增加该CRC算法 +* add by lmy 20180411 +**************************************************************/ +CM_UINT32 CM_Crc32_2(const CM_UINT8 *pData, CM_UINT32 DataLen) +{ + CM_UINT32 crc32Result = 0u; + + /*入口参数检查*/ + if ((NULL != pData) && (0u < DataLen)) + { + crc32Result = CM_Crc32_common(pData, DataLen, CM_CrcmTab[1u]);/*使用CRC32查找表计算CRC值*/ + } + else + { + /*入口参数不合法*/ + crc32Result = 0u; + } + + return crc32Result; +} + +/************************************************************* +* 功能描述: Crc32计算函数 +* 参数说明: +* pData, 数据指针 +* DataLen, 数据长度(字节) +* CRC32Table, CRC32查找表 +* 返回值: 返回值crc32Result为CRC值 +* 说明: 为保障平台小型化系统处理的安全性增加该CRC算法, +* 该函数与RSSP-I协议中的(RsspCommon.c)CRC_Compute_Crc函数功能相同, +* 但是参数不一样,需要注意。 +* add by lmy 20180411 +**************************************************************/ +CM_UINT32 CM_Crc32_common(const CM_UINT8 *pData, CM_UINT32 DataLen, const CM_UINT32 *CRC32Table) +{ + CM_UINT32 index = 0u; + CM_UINT32 crc32Result = 0u; + + /*入口参数检查*/ + if ((NULL != pData) && (0u < DataLen) && (NULL != CRC32Table)) + { + /*依据相应的查找表计算CRC*/ + for(index = 0u; index < DataLen; index++) + { + crc32Result = (crc32Result >> 8u) ^ CRC32Table[(crc32Result ^ CM_Reflected_Byte[*pData]) & CM_UINT8_MAX]; + pData++; + } + } + else + { + /*入口参数不合法*/ + crc32Result = 0u; + } + + return crc32Result; +} diff --git a/TSCP/src/MSCP/CM/CM_CRC32.h b/TSCP/src/MSCP/CM/CM_CRC32.h index 9d673c8..e73cbd6 100644 --- a/TSCP/src/MSCP/CM/CM_CRC32.h +++ b/TSCP/src/MSCP/CM/CM_CRC32.h @@ -26,7 +26,18 @@ extern "C" /* 计算CRC */ CM_UINT32 CM_Crc32(IN const CM_UINT8 pData[],IN CM_UINT32 dataLen); - + /************************************************************* + * 功能描述: Crc32计算函数,使用CRC32查找表1 + **************************************************************/ + CM_UINT32 CM_Crc32_1(const CM_UINT8 *pData, CM_UINT32 DataLen); + /************************************************************* + * 功能描述: Crc32函数,使用CRC32查找表2 + **************************************************************/ + CM_UINT32 CM_Crc32_2(const CM_UINT8 *pData, CM_UINT32 DataLen); + /************************************************************* + * 功能描述: Crc32计算函数 + **************************************************************/ + CM_UINT32 CM_Crc32_common(const CM_UINT8 *pData, CM_UINT32 DataLen, const CM_UINT32 *CRC32Table); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/CM/CM_Com.c b/TSCP/src/MSCP/CM/CM_Com.c index 188b5f8..f85e908 100644 --- a/TSCP/src/MSCP/CM/CM_Com.c +++ b/TSCP/src/MSCP/CM/CM_Com.c @@ -410,7 +410,6 @@ ENUM_CM_RETURN CM_Com_LocalDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT16 BufSize) CM_UINT32 len = 0u; /* 数据长度 */ CM_UINT64 now_time = 0u; CM_UINT64 start_time = CM_GetTick(); - CM_UINT32 recvNum = 0u; /*- 循环执行接收线程 */ do { @@ -419,7 +418,6 @@ ENUM_CM_RETURN CM_Com_LocalDataRecv(OUT CM_UINT8* pBuf, IN CM_UINT16 BufSize) /*- 是否收到有效报文 */ if(1 == ret) { - recvNum++; rtnValue = CM_FFFEDecode(&g_COM[1u].prtclFFFEStru,data,buf,&len); /*接收到完整包写入接收队列*/ if(ENUM_CM_TRUE == rtnValue) diff --git a/TSCP/src/MSCP/CM/CM_UDP.c b/TSCP/src/MSCP/CM/CM_UDP.c index 6c1ef2a..2c4f2c7 100644 --- a/TSCP/src/MSCP/CM/CM_UDP.c +++ b/TSCP/src/MSCP/CM/CM_UDP.c @@ -170,7 +170,7 @@ ENUM_CM_RETURN CM_UDP_Is_Write_Ready(IN CM_SOCKET sock) * - ENUM_CM_TRUE 成功 * - ENUM_CM_FALSE 失败 */ -ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN CM_UINT8 broadFlag) +ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN ENUM_ETHERENT_TYPE broadType) { /*- 变量初始化 */ CM_SOCKADDR_T addrHost; /* 主机地址 */ @@ -198,54 +198,51 @@ ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockM retError = CM_Memset((void*) &addrHost, (CM_UINT8)0U, (size_t)(sizeof(CM_SOCKADDR_T)), (size_t)(sizeof(CM_SOCKADDR_T))); addrHost.sin_family = (CM_INT16)AF_INET; addrHost.sin_port = htons(portNumber); -#ifdef WIN32 - addrHost.sin_addr.s_addr = addrIP; - if(1 == broadFlag) + /*组播发送*/ + switch(broadType) { - /*广播*/ - setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); - } - else - { - /*单播-组播*/ - } -#else - if(1u == broadFlag) - { - /*广播*/ - addrHost.sin_addr.s_addr = INADDR_ANY; - (void)setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); - } - else - { - if (0u != maddr) - { - /*组播*/ - addrHost.sin_addr.s_addr = INADDR_ANY; - /*设置端口复用*/ - (void)setsockopt(*pSock,SOL_SOCKET,SO_REUSEPORT ,(void*)(&bCast), (unsigned int)sizeof(bCast)); - /*- 配置组播地址 */ - multiCast.imr_interface.s_addr = addrIP; - multiCast.imr_multiaddr.s_addr = maddr; - ret = setsockopt(*pSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)(&multiCast), (unsigned int)sizeof(multiCast)); - } - else - { + case ENUM_UNICAST: /*单播*/ addrHost.sin_addr.s_addr = addrIP; - } - } -#endif + break; + case ENUM_MULTICAST_SEND: + /*组播发送*/ + addrHost.sin_addr.s_addr = addrIP; + (void)setsockopt(*pSock, IPPROTO_IP, IP_MULTICAST_IF, &addrHost.sin_addr, sizeof(addrHost.sin_addr)); + break; + case ENUM_MULTICAST_RCV: + /*组播接收*/ + if (0u != maddr) + { + /*组播*/ + addrHost.sin_addr.s_addr = INADDR_ANY; + /*设置端口复用*/ + (void)setsockopt(*pSock,SOL_SOCKET,SO_REUSEPORT ,(void*)(&bCast), (unsigned int)sizeof(bCast)); + /*- 配置组播地址 */ + multiCast.imr_interface.s_addr = addrIP; + multiCast.imr_multiaddr.s_addr = maddr; + (void)setsockopt(*pSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)(&multiCast), (unsigned int)sizeof(multiCast)); + } + else + { + printf("maddr is null!!\n"); + } + break; + case ENUM_BROADCAST: + /*广播*/ + addrHost.sin_addr.s_addr = INADDR_ANY; + (void)setsockopt(*pSock, SOL_SOCKET, SO_BROADCAST, (void*)(&bCast), (unsigned int)sizeof(bCast)); + break; + default: + /*参数错误宕机*/ + break; + } ret = (CM_INT32)bind(*pSock, (CM_SOCKADDR*) &addrHost, (unsigned int)sizeof(CM_SOCKADDR)); /*- 绑定是否成功 */ if ((ret != CM_SOCKET_ERROR) && (ENUM_CM_TRUE == retError)) { /*- 设置socket的阻塞模式 */ -#ifdef WIN32 - ret = ioctlsocket(*pSock, (long)FIONBIO, (unsigned long *)&isNonBlockMode); -#else/*Linux Vxworks常用PIOX标准*/ ret = ioctl(*pSock, FIONBIO, &isNonBlockMode); -#endif /*- 设置socket的阻塞模式是否失败 */ if (CM_SOCKET_ERROR == ret) { diff --git a/TSCP/src/MSCP/CM/CM_UDP.h b/TSCP/src/MSCP/CM/CM_UDP.h index 3eae6ed..2ebd870 100644 --- a/TSCP/src/MSCP/CM/CM_UDP.h +++ b/TSCP/src/MSCP/CM/CM_UDP.h @@ -28,6 +28,15 @@ extern "C" /** @brief UDP传输时分包的大小 */ #define CM_UDP_LAN_MSG_SIZE_MAX (1472) /**< 局域网下每条UDP消息大小 */ #define CM_UDP_WAN_MSG_SIZE_MAX (548) /**< 广域网下每条UDP消息大小 */ +typedef enum +{ + ENUM_DISENABLE = 0u, /**< 禁用 */ + ENUM_UNICAST = 1u, /**< 单播 */ + ENUM_BROADCAST = 2u, /**< 广播 */ + ENUM_MULTICAST_SEND = 3u, /**< 组播发送 */ + ENUM_MULTICAST_RCV = 4u, /**< 组播接收 */ + ENUM_COM_TCP = 5u /**< TCP协议 */ +}ENUM_ETHERENT_TYPE; /** * @brief CM_UDP_Init @@ -48,7 +57,7 @@ extern "C" * @param[in] maddr * @return ENUM_CM_RETURN */ - ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN CM_UINT8 broadFlag); + ENUM_CM_RETURN CM_UDP_Socket_Create(OUT CM_SOCKET* pSock, IN CM_BOOL isNonBlockMode, IN CM_UINT32 addrIP, IN CM_UINT16 portNumber, IN CM_UINT32 maddr, IN ENUM_ETHERENT_TYPE broadType); /** * @brief CM_UDP_Send_Msg diff --git a/TSCP/src/MSCP/DFM/DFM_DRV.h b/TSCP/src/MSCP/DFM/DFM_DRV.h index c82b049..1988bf3 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV.h +++ b/TSCP/src/MSCP/DFM/DFM_DRV.h @@ -10,6 +10,22 @@ #include "CM_Types.h" #define LEDON (1u) #define LEDOFF (0u) + +typedef enum{ + ENUM_PULSE_ERROR = 0, + ENUM_PULSE_INIT = 1, + ENUM_PULSE_UNAVAILABLE = 2, + ENUM_PULSE_SLAVE = 3, + ENUM_PULSE_MASTER = 4, +}ENUM_PULSE_TYPE_T; + +typedef enum{ + ENUM_SWITCH_ERROR = 0, + ENUM_SWITCH_CI, + ENUM_SWITCH_RC, + ENUM_SWITCH_AUTO +}ENUM_SWITCH_MODE_T; + void DFM_drv_Init(void); CM_UINT8 getBoardID(void); @@ -81,8 +97,50 @@ CM_INT32 DFM_SetIO_OutPut(CM_UINT8 level); */ ENUM_CM_RETURN DFM_GetQNX_Verion(CM_UINT8 *buf); +/* +* 脉冲初始化 +*/ +void DFM_Pulse_Init(); +/* +* 脉冲启动 +*/ +void DFM_Pulse_Start(); +/* +* 脉冲停止 +*/ +void DFM_Pulse_Stop(); +/* +* 脉冲设置 +*/ +void DFM_Pulse_Set(ENUM_PULSE_TYPE_T type); +/* +* 脉冲获取两系 +*/ +void DFM_Pulse_Get(ENUM_PULSE_TYPE_T *p_pulseA, ENUM_PULSE_TYPE_T *p_pulseB); +/* +* 脉冲回读 +* @return 表示回读与设置是否匹配 +*/ +ENUM_CM_RETURN DFM_Pulse_FeedBack(ENUM_PULSE_TYPE_T *p_pulse); +/* +* 开关模式获取 +**/ +ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get(); +/* +* 区域状态指示灯控制 +**/ +void DFM_ledAREA(CM_UINT8 light); +/** + * @brief 获取脉冲计数 + * @param index 0-对方A系通道 1-对方B系通道 2-自身反馈通道 + * @param 返回计数 + * @return 0成功,1入参错误 + */ +CM_UINT8 DFM_PulseCnt_Get(CM_UINT8 index, OUT CM_UINT32* pPulseCnt); /* * 用来检测fec0 fec1 up/down状态 */ void DFM_Network_Check(void); +/* 记录fec0,fec1 状态*/ +void DFM_PhyLog(void); #endif /* SRC_MSCP_DFM_DFM_DRV_H_ */ diff --git a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c index 61a54f0..26d40fc 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c +++ b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c @@ -19,6 +19,12 @@ extern char drv_vsr[4]; extern CM_UINT8 MSCP_DRV_VERION[4]; CM_UINT8 g_OutIoLog = 0; CM_UINT16 g_InIoLog = 0; + +/** 脉冲类型转换 */ +static ENUM_PULSE_TYPE_T s_PulseConvert(ABSynMsgType type); +/* 超过5kb截断PhyLog.txt*/ +static void s_ManagePhyLog(void); + /** * @brief 驱动初始化 * @@ -641,3 +647,294 @@ void DFM_Network_Check(void) return; } + +/* +* 脉冲初始化 +*/ +void DFM_Pulse_Init() +{ + int ret = -1; + ret = imx8_create_gpio_irq_pthread(); + CM_ASSERT(0 == ret, QNX_DRV_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); + DFM_Pulse_Set(ENUM_PULSE_INIT); + DFM_Pulse_Start(); +} +/* +* 脉冲启动 +*/ +void DFM_Pulse_Start() +{ + drvStartABSynSwitch(); +} +/* +* 脉冲停止 +*/ +void DFM_Pulse_Stop() +{ + drvStopABSynSwitch(); +} +/* +* 脉冲设置 +*/ +void DFM_Pulse_Set(ENUM_PULSE_TYPE_T type) +{ + ABSynMsgType tmp = ABSynMsgType_0; + switch(type) + { + case ENUM_PULSE_INIT: + tmp = ABSynMsgType_4; /* 初始化500Hz*/ + break; + case ENUM_PULSE_SLAVE: + tmp = ABSynMsgType_3; /* 备用400Hz*/ + break; + case ENUM_PULSE_MASTER: + tmp = ABSynMsgType_1; /* 主用200Hz*/ + break; + case ENUM_PULSE_UNAVAILABLE: + tmp = ABSynMsgType_2; /* 不可用300Hz*/ + break; + default: + MSCP_LOG_MSG("This Pulse is Undefined!!!!\n"); + break; + } + drvSetABSynMsg(tmp); +} +/* +* 脉冲类型转换 从驱动提供的脉冲类型转换为平台的四种脉冲类型 +* @param type 驱动提供的脉冲类型 +* @return ENUM_PULSE_TYPE_T 4种脉冲类型 +**/ +static ENUM_PULSE_TYPE_T s_PulseConvert(ABSynMsgType type) +{ + ENUM_PULSE_TYPE_T rt = ENUM_PULSE_ERROR; + switch(type) + { + case ABSynMsgType_0: + rt = ENUM_PULSE_ERROR; + MSCP_LOG_MSG("Pulse is not detected\n"); + break; + case ABSynMsgType_1: + rt = ENUM_PULSE_MASTER; + break; + case ABSynMsgType_2: + rt = ENUM_PULSE_UNAVAILABLE; + break; + case ABSynMsgType_3: + rt = ENUM_PULSE_SLAVE; + break; + case ABSynMsgType_4: + rt = ENUM_PULSE_INIT; + break; + default: + rt = ENUM_PULSE_ERROR; + MSCP_LOG_MSG("This Pulse is Not Used\n"); + break; + } + + return rt; +} +/* +* 脉冲获取两系 +*/ +void DFM_Pulse_Get(ENUM_PULSE_TYPE_T *p_pulseA, ENUM_PULSE_TYPE_T *p_pulseB) +{ + ABSynMsgType type[2] = {ABSynMsgType_0}; + CM_UINT32 cnt[2] = {0}; + if(NULL != p_pulseA && NULL != p_pulseB) + { + drvGetABSynMsg(type, cnt); + *p_pulseA = s_PulseConvert(type[0]); + *p_pulseB = s_PulseConvert(type[1]); + } + else + { + MSCP_LOG_MSG("PulseA or PulseB is NULL\n"); + } +} +/* +* 脉冲回读 +* @return ENUM_CM_TRUE表示回读与设置匹配 +*/ +ENUM_CM_RETURN DFM_Pulse_FeedBack(ENUM_PULSE_TYPE_T *p_pulse) +{ + ABSynMsgType tmp; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + CM_UINT8 rt = -1; + if(NULL != p_pulse) + { + *p_pulse = ENUM_PULSE_ERROR; + rt = drvFeedbackkABSynMsg(&tmp); + *p_pulse = s_PulseConvert(tmp); + if(0 == rt){ + ret = ENUM_CM_TRUE; + } + else{ + MSCP_LOG_MSG("Pulse FeedBack Wrong: %d\n", rt); + } + } + + return ret; +} +/* +* 开关模式获取 +**/ +ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get() +{ + CM_UINT8 in = 0x00u; + ENUM_SWITCH_MODE_T ret = ENUM_SWITCH_ERROR; + if(1 == imx8_input_collect(8)) + { + in |= (0x01u << 2); + } + if(1 == imx8_input_collect(9)) + { + in |= (0x01u << 1); + } + if(1 == imx8_input_collect(10)) + { + in |= 0x01u; + } + switch(in){ + case 0x01u: + ret = ENUM_SWITCH_RC; + break; + case 0x02u: + ret = ENUM_SWITCH_AUTO; + break; + case 0x04u: + ret = ENUM_SWITCH_CI; + break; + default: + ret = ENUM_SWITCH_ERROR; + MSCP_LOG_MSG("ERROR!!!! in = 0x%x\n", in); + break; + } + return ret; +} +/* +* 区域状态指示灯控制 +**/ +void DFM_ledAREA(CM_UINT8 light) +{ + switch(light) + { + case 0x01u: + imx8_output(6, 1); + imx8_output(7, 0); + break; + case 0x02u: + imx8_output(6, 0); + imx8_output(7, 1); + break; + case 0x03u: + imx8_output(6, 0); + imx8_output(7, 0); + break; + default: + imx8_output(6, 0); + imx8_output(7, 0); + break; + } +} +/** + * @brief 获取脉冲计数 + * @param index 0-对方A系通道 1-对方B系通道 2-自身反馈通道 + * @param 返回计数 + * @return 0成功,1入参错误 + */ +CM_UINT8 DFM_PulseCnt_Get(CM_UINT8 index, OUT CM_UINT32* pPulseCnt) +{ + CM_UINT8 rt = 1u; + rt = drvCheckABSynPulCnt(index,pPulseCnt); + return rt; +} +/* 记录fec0,fec1 状态*/ +void DFM_PhyLog(void) +{ + CM_UINT8 phyinfo[12] = {0}; + CM_UINT8 buf[256]; // 统一的 buffer + CM_UINT8* fecNames[2] = {"fec0", "fec1"}; + CM_UINT8 fec[10] = {0}; + CM_INT32 ret = -1; + CM_INT32 cnt = 0; + CM_INT32 pos = 0; + FILE *fp = NULL; + CM_UINT32 i = 0u, j = 0u; + + for(j = 0u; j < (sizeof(fecNames) / sizeof(fecNames[0])); j++) + { + pos = 0; + strncpy(fec, fecNames[j], sizeof(fec)); + cnt = drvPhyRegInfoUpdate(fec, phyinfo, sizeof(phyinfo)); + ret = phytool(fec); + + pos += snprintf(buf + pos, sizeof(buf) - pos, + "CYC:%d, %s-phylog[%d]_%s:", + g_MSCP_BirthCount, fec, cnt, ((ret == -1) ? "Error" : "Correct")); + + for (i = 0; i < 12; i++) + { + pos += snprintf(buf + pos, sizeof(buf) - pos, + ((i == 11) ? "%02X\n" : "%02X,"), + phyinfo[i]); + } + + if (ret == -1) + { + fp = fopen("PhyLog.txt", "a"); + if (NULL != fp) + { + fwrite(buf, 1, pos, fp); + fclose(fp); + } + s_ManagePhyLog(); + } + + MSCP_LOG_MSG("%s", buf); + } +} +/* 超过5kb截断PhyLog.txt*/ +static void s_ManagePhyLog(void) +{ + FILE* fp = NULL; + CM_UINT32 fileCurrentSize = 0u; + CM_UINT8 historyBuf[2048] = {0}; + CM_UINT8 tempBuf[2048] = {0}; + CM_UINT32 i = 0u; + + fp = fopen("PhyLog.txt", "r"); + if (fp != NULL) + { + fseek(fp, 0, SEEK_END); + /*- 获取当前文件字节数 */ + fileCurrentSize = ftell(fp); + /*- 文件超过5kb,则保留1kb */ + if(fileCurrentSize >= 5120u) + { + fseek(fp, fileCurrentSize-1024, SEEK_SET); + fileCurrentSize = fread(historyBuf, 1024, 1, fp); + (void)fclose(fp); + /*- 处理字符串 */ + for(i = 0u; i < 1024u; i++) + { + if('\n' == historyBuf[i]) + { + (void)CM_Memcpy(tempBuf,1024,&historyBuf[i+1],1024-i); + break; + } + } + + fp = fopen("PhyLog.txt", "w"); + fileCurrentSize = fwrite(tempBuf, 1024-i, 1, fp); + } + else + { + /*- 无处理 */ + } + (void)fclose(fp); + } + else + { + /*- 文件不存在空指针为正常情况*/ + } +} \ No newline at end of file diff --git a/TSCP/src/MSCP/MSCP_APP_API.c b/TSCP/src/MSCP/MSCP_APP_API.c index 0316222..a828ee3 100644 --- a/TSCP/src/MSCP/MSCP_APP_API.c +++ b/TSCP/src/MSCP/MSCP_APP_API.c @@ -14,6 +14,7 @@ #include "CFM_Net.h" #include "PFM_RemoteUpdate.h" #include "MSCP_APP_API.h" +#include "SFM_Area.h" #ifdef QNX #include #include @@ -32,6 +33,10 @@ CM_UINT8 gCpuUsageParaFlag; CM_UINT8 gSetTempFlag; CM_FLOAT32 gMinTemperature; CM_FLOAT32 gMaxTemperature; + +/* RC使用CI数据,设置同步数据的函数指针 返回执行结果,0失败,1成功*/ +CM_UINT8 (*RC_API_FollowUp)(const CM_UINT8*, CM_UINT32) = NULL; + /** 需应用注册的版本号 */ extern STRU_APP_VERSON g_App_Verson; @@ -74,14 +79,12 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, case ENUM_MSG_OUTNET_SAFE: /*-< 外网安全通信 */ /*- 从外网安全协议读取应用接收报文 */ *pRxLen = Prtcl_OutnetSafe_AppRecv(pSrcName, pSrcLogicID, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_INNET_SAFE: /*-< 内网安全通信 */ *pSrcLogicID = 0u; /*- 从内网安全协议读取应用接收报文 */ *pRxLen = Prtcl_InnetSafe_AppRecv(pSrcName, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_INNET_MAINTENANCE: /*-< 远程部署功能内网安全通信 */ @@ -89,7 +92,6 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 从内网安全协议读取应用接收报文 */ *pRxLen = Prtcl_InnetSafe_RmRecv(pSrcName, pLifeTime, rxBuf, rxSize); MSCP_LOG_BIN(rxBuf,*pRxLen); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_ERROR: /*-< 保留字 */ @@ -103,7 +105,14 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 返回 */ break; } - + if(0u < *pRxLen) + { + rt = 1u; + } + else + { + rt = 0u; + } } else { @@ -348,6 +357,18 @@ CM_UINT32 MSCP_GetSysCount(void) return SFM_2x2_GetSysCount(); } +/** +* @brief 获取系统区域周期号 +* @return 当前的系统周期号 +* @note +* 一个固定周期自增的周期号; +* 对于双系统,区域双系统的周期号会被自动同步到与主用一致。 +*/ +CM_UINT32 MSCP_GetAreaSysCount(void) +{ + return SFM_Area_GetSysCount(); +} + /** * @brief 获取本机外网ID * @return 本机外网ID @@ -891,3 +912,39 @@ void MSCP_SetAppCheck(CM_INT32 appCheck) { PFM_SetAppCheck(appCheck); } +/** + * @brief 设置同步数据函数指针(指针返回值表示设置是否成功,0失败,1成功) + */ +void MSCP_SetRCFollowUpFunc(CM_UINT8 (*func)(const CM_UINT8*, CM_UINT32)) +{ + RC_API_FollowUp = func; +} +/** +* @brief 获取上一周期的本区域状态 +* @return 本系区域状态 +* - ENUM_AREA_MASTER 主用 +* - ENUM_AREA_SLAVE 备用 +* - ENUM_AREA_UNAVAILABLE 不可用 +*/ +ENUM_AREA_STATE_T MSCP_GetLastLocalAreaState(void) +{ + return SFM_Area_GetLastLocalAreaState(); +} +/** +* @brief 获取另一区域上一周期的区域状态 +* @return 对系区域状态 +* - ENUM_AREA_MASTER 主用 +* - ENUM_AREA_SLAVE 备用 +* - ENUM_AREA_UNAVAILABLE 不可用 +*/ +ENUM_AREA_STATE_T MSCP_GetLastAnotherAreaState(void) +{ + return SFM_Area_GetLastAnotherAreaState(); +} +/** + * @brief CI设置发送需发送区域数据 + */ +void MSCP_CISendAppData(CM_UINT8* pData, CM_UINT32 dataLen) +{ + PFM_CISendAppData(pData, dataLen); +} diff --git a/TSCP/src/MSCP/MSCP_APP_API.h b/TSCP/src/MSCP/MSCP_APP_API.h index a7a25eb..946ea2e 100644 --- a/TSCP/src/MSCP/MSCP_APP_API.h +++ b/TSCP/src/MSCP/MSCP_APP_API.h @@ -211,6 +211,15 @@ extern "C" */ CM_UINT32 MSCP_GetSysCount(void); + /** + * @brief 获取系统区域周期号 + * @return 当前的系统周期号 + * @note + * 一个固定周期自增的周期号; + * 对于双系统,区域双系统的周期号会被自动同步到与主用一致。 + */ + CM_UINT32 MSCP_GetAreaSysCount(void); + /** * @brief 获取本机外网ID * @return 本机外网ID @@ -469,6 +478,32 @@ extern "C" * @brief 设置应用运行步骤(周期中调用) */ void MSCP_SetAppCheck(CM_INT32 appCheck); + /** + * @brief 设置同步数据函数指针 + * 函数指针return 0失败,1成功 + */ + void MSCP_SetRCFollowUpFunc(CM_UINT8 (*func)(const CM_UINT8*, CM_UINT32)); + /** + * @brief 获取上一周期的本区域状态 + * @return 本区域状态 + * - ENUM_AREA_MASTER 主用 + * - ENUM_AREA_SLAVE 备用 + * - ENUM_AREA_UNAVAILABLE 不可用 + */ + ENUM_AREA_STATE_T MSCP_GetLastLocalAreaState(void); + + /** + * @brief 获取另一区域上一周期的区域状态 + * @return 对区域状态 + * - ENUM_AREA_MASTER 主用 + * - ENUM_AREA_SLAVE 备用 + * - ENUM_AREA_UNAVAILABLE 不可用 + */ + ENUM_AREA_STATE_T MSCP_GetLastAnotherAreaState(void); + /** + * @brief CI设置发送需发送区域数据 + */ + void MSCP_CISendAppData(CM_UINT8* pData, CM_UINT32 dataLen); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/MSCP_APP_Interface.h b/TSCP/src/MSCP/MSCP_APP_Interface.h index 4e3cfec..a6d235f 100644 --- a/TSCP/src/MSCP/MSCP_APP_Interface.h +++ b/TSCP/src/MSCP/MSCP_APP_Interface.h @@ -23,6 +23,10 @@ extern "C" #define CFM_INNET_LOG_SIZE (1024u * 5u) /* 明文日志大小 */ #define CFM_INNET_LOG_BIN_SIZE (CFM_INNET_LOG_SIZE-3U) /* 明文二进制日志大小 */ #define CFM_INNET_LOG_BIN_TEST_SIZE ((CFM_INNET_LOG_SIZE-10U)/5U) /* 明文日志大小 */ + +/* RC使用CI数据,设置同步数据的函数指针*/ +extern CM_UINT8 (*RC_API_FollowUp)(const CM_UINT8*, CM_UINT32); + /** @} */ /** 2x2oo2的接收通道 */ typedef ENUM_CM_RETURN(*pSetAppfunc)(void); /* 应用周期调用函数 */ @@ -45,6 +49,13 @@ typedef ENUM_CM_RETURN(*pSetAppfunc)(void); /* 应用周期调用函数 */ ENUM_2x2_MASTER, /**< 主系 */ ENUM_2x2_SLAVE /**< 备系 */ } ENUM_2x2_STATE_T; + /** 区域状态 */ + typedef enum + { + ENUM_AREA_UNAVAILABLE, + ENUM_AREA_MASTER, + ENUM_AREA_SLAVE, + }ENUM_AREA_STATE_T; /** 应用通信通道 */ typedef enum { diff --git a/TSCP/src/MSCP/MSCP_main.c b/TSCP/src/MSCP/MSCP_main.c index 9b87c60..284165f 100644 --- a/TSCP/src/MSCP/MSCP_main.c +++ b/TSCP/src/MSCP/MSCP_main.c @@ -39,6 +39,7 @@ #include "PFM_CPUUsage.h" #include "SFM_Prtcl.h" #include "PFM_RemoteUpdate.h" +#include "SFM_Area.h" #if QNX #include #include @@ -188,6 +189,8 @@ static void MSCP_Init(void) PFM_LOG_SET_STOPTIMER(TSCP_DARK_TSCPINIT); /*- 应用版本号初始化,必须在应用软件初始化前 */ PFM_CFG_RegisterVerson_Init(); + /*- 初始化读取main id,在应用初始化之前*/ + PFM_CFG_MAINID_Init(); /*- 应用软件初始化内网安全协议参数-以及配置文件参数 */ APP_API_Data_Init(); PFM_LOG_SET_INIT_STAGE(ENUM_INIT_API_DATA); @@ -278,6 +281,7 @@ static void MSCP_Init(void) /*- 2x2上电比较和计算时钟修正量 */ SFM_2x2_Init(vitalBuf, vitalLen, &cycTick); PFM_LOG_SET_INIT_STAGE(ENUM_INIT_2X2); + SFM_Area_Init(); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_SOFTTNIT, 1U, &state); PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); /*- 保存周期基准时刻 */ @@ -299,6 +303,7 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) CM_UINT64 leftTime = 0u; /* 剩余时间 */ CM_INT64 offset_2oo2 = 0; /* 2oo2时钟修正量 */ CM_INT64 offset_2x2 = 0; /* 2x2时钟修正量 */ + CM_INT64 offset_area = 0; /* 区域时钟修正量*/ CM_INT32 i = 0; /* 循环变量 */ ENUM_2x2_STATE_T localState = ENUM_2x2_SHUTDOWN; ENUM_2x2_STATE_T peerState = ENUM_2x2_SHUTDOWN; @@ -340,6 +345,7 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) { /*- 更新周期号*/ g_MSCP_SysCount++; + g_MSCP_AreaCount++; localState = SFM_2x2_GetLocal2x2State(); peerState = SFM_2x2_GetPartner2x2State(); MSCP_LOG_MSG("time left:%lld us\n", leftTime); @@ -352,6 +358,7 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) (void)CFM_DarkLog_Storage(DARK_LOG_STRING, TSCP_DARK_DOCVERION, 4U, TSCP_DOC_VERION); PFM_CFG_SendDarkCfg(); PFM_GetAllCpuUsageInterface();/*发送cpu使用率接口*/ + DFM_PhyLog(); /*记录fec0,fec1的phy日志*/ #if QNX CM_RE_ASSERT(leftTime > 1000u, MAIN_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); #endif @@ -435,8 +442,26 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) { MSCP_LOG_MSG("0 == offset_2x2\n"); } + offset_area = SFM_Area_GetTimeOffset(); + if (0 != offset_area) + { + CM_ATOMIC_ADD(&g_CycBaseTick, offset_area); /* parasoft-suppress GJB8114-R_1_7_2 "QNX宏不符合编码规范" */ + MSCP_LOG_MSG("[%d]areafix=%lld\n", g_MSCP_SysCount, offset_area); + if ((CM_ABS(offset_area)) >= (CM_INT64)u_64temp) + { + offset_area = 0; + } + else + { + /*- 无处理 */ + } + } + else + { + MSCP_LOG_MSG("0 == offset_area\n"); + } MSCP_LOG_MSG("g_CycBaseTick = %lld\n",g_CycBaseTick); - g_CycTick += (CM_UINT64)CM_SIGNED_LONG_INT_EXP(u_64temp + offset_2oo2 + offset_2x2); + g_CycTick += (CM_UINT64)CM_SIGNED_LONG_INT_EXP(u_64temp + offset_2oo2 + offset_2x2 + offset_area); /*- 冗余喂狗,防止误判超时 */ PFM_CFC_WatchDog(); /**************↓↓↓↓↓↓禁止添加代码,包括打印!***************/ @@ -444,8 +469,8 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) /*- 喂狗 */ PFM_CFC_WatchDog(); g_MSCP_BirthCount++; - MSCP_LOG_MSG("-----MSCP_BirthCount:%d,M/S:0x%x--Partner:0x%x,N/D:%d/%d-err_cut:%d,err_cyc:%d,apperr_cut:%d,apperr_cyc:%d---version:%d.%d.%d.%d\n", - g_MSCP_BirthCount,SFM_2x2_GetLocal2x2State(),SFM_2x2_GetPartner2x2State(), + MSCP_LOG_MSG("-----MSCP_BirthCount:%d,M/S:0x%x--Partner:0x%x,AreaCyc:%d,Area State = 0x%d, Another State=0x%d,N/D:%d/%d-err_cut:%d,err_cyc:%d,apperr_cut:%d,apperr_cyc:%d---version:%d.%d.%d.%d\n", + g_MSCP_BirthCount,SFM_2x2_GetLocal2x2State(),SFM_2x2_GetPartner2x2State(),g_MSCP_AreaCount,SFM_Area_GetLocalAreaState(), SFM_Area_GetAnotherAreaState(), MSCP_Get_AutoRbootCut(),g_PFM_Cfg.M_AutoReboot_Count, s_2oo2_Ctrl.FrameCtrl.err_cut,s_2oo2_Ctrl.FrameCtrl.err_cyc, s_2oo2_Ctrl_App.FrameCtrl.err_cut,s_2oo2_Ctrl_App.FrameCtrl.err_cyc, @@ -453,6 +478,7 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) DFM_Drv_CycLog(); /*TODO 发送2x状态起始信号量*/ SFM_2x2_Thread_PostStart(); + SFM_AREA_Thread_PostStart(); PFM_CFC_Check(24); /*- @alias 2oo2周期校时 */ if (0x55u == g_PFM_Cfg.M_2oo2_Enable) @@ -475,6 +501,17 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void) { /* 无处理 */ } + if(0x00 != g_PFM_Cfg.M_Area_Enable) + { + MSCP_LOG_MSG("AREA start\n"); + SFM_Area_Sync(g_CycTick, &offset_area); + SFM_Area_SetTimeOffset(offset_area); + } + else + { + /* 无处理*/ + } + costlog[1] = CM_GetTick(); /**************↑↑↑↑↑禁止添加代码,包括打印!***************/ delayTime = (CM_INT32)CM_UNSIGNED_LONG_INT_EXP((costlog[0] - g_CycTick) / 1000u); diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.c b/TSCP/src/MSCP/PFM/PFM_Cfg.c index 870673b..73c683f 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.c +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.c @@ -40,11 +40,11 @@ CM_CHAR FS_FILE_PATH[100]; /** 平台软件版本号 */ -const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 54u }; +const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 56u }; /** 驱动软件版本号 */ CM_UINT8 MSCP_DRV_VERION[4] = {0}; /** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */ -CM_UINT16 TSCP_DOC_VERION[2] = {31u,0u}; +CM_UINT16 TSCP_DOC_VERION[2] = {35u,0u}; /** 操作系统版本号 */ CM_UINT8 TSCP_QNX_VERION[10] = {0u}; @@ -62,6 +62,34 @@ STRU_APP_VERSON g_App_Verson; static STRU_APP_CFG_T g_AppCfgInterface; static void s_str2md5(IN const CM_CHAR* str, OUT CM_UINT8 md5[16]); static void PFM_CFG_Check_BoardID(void); +/** + * @brief 初始化读取mainid + */ +void PFM_CFG_MAINID_Init(void) +{ + /*- 读取ID信息 */ + g_PFM_Cfg.CPU_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI,"ID","CPU_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.CPU_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + g_PFM_Cfg.BOARD_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI, "ID", "BOARD_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.BOARD_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + + /*检查配置文件ID与硬件ID是否一致*/ + PFM_CFG_Check_BoardID(); + + g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_4); + + g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); + MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ + sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, + sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, + sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); +} /** * @brief 平台配置文件初始化 */ @@ -78,28 +106,7 @@ void PFM_CFG_Init(void) MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3], __DATE__, __TIME__); (void)printf("MSCP start version:%d.%d.%d.%d \n", MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3]); - /*- 读取ID信息 */ - g_PFM_Cfg.CPU_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI,"ID","CPU_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.CPU_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); - g_PFM_Cfg.BOARD_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI, "ID", "BOARD_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.BOARD_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); - /*检查配置文件ID与硬件ID是否一致*/ - PFM_CFG_Check_BoardID(); - - g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); - - g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); - MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ - sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, - sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, - sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); (void)strcpy(FS_FILE_PATH,g_AppCfgInterface.FS_NAME); (void)strcpy(g_PFM_Cfg.APP_NAME,g_AppCfgInterface.APP_NAME); MSCP_LOG_MSG("FS_NAME:%s\n",FS_FILE_PATH); @@ -129,6 +136,15 @@ void PFM_CFG_Init(void) g_PFM_Cfg.M_OutnetRaw_Enable = g_AppCfgInterface.M_OutnetRaw_Enable; g_PFM_Cfg.M_CpuUsageGet_Enable = g_AppCfgInterface.M_CpuUsageGet_Enable; g_PFM_Cfg.M_RemoteUpdate_Enable = g_AppCfgInterface.M_RemoteUpdate_Enable; + /* 区域开关为2x开关的子开关,只在2x打开时有效*/ + if(0x55u == g_PFM_Cfg.M_2x2_Enable) + { + g_PFM_Cfg.M_Area_Enable = g_AppCfgInterface.M_Area_Enable; + } + else + { + g_PFM_Cfg.M_Area_Enable = 0x00u; + } (void)strcpy(g_PFM_Cfg.Start_Path,g_AppCfgInterface.Start_Path); g_PFM_Cfg.reboot_replycount = g_AppCfgInterface.reboot_replycount; g_PFM_Cfg.M_AutoReboot_Count = g_AppCfgInterface.M_AutoReboot_Count; @@ -138,6 +154,7 @@ void PFM_CFG_Init(void) MSCP_LOG_MSG("CC_VER:%d\n",g_PFM_Cfg.CC_VER); MSCP_LOG_MSG("M_2oo2_Enable:0x%x\n",g_PFM_Cfg.M_2oo2_Enable); MSCP_LOG_MSG("M_2x2_Enable:0x%x\n",g_PFM_Cfg.M_2x2_Enable); + MSCP_LOG_MSG("M_Area_Enable:%d\n",g_PFM_Cfg.M_Area_Enable); MSCP_LOG_MSG("M_InnetSafe_Enable:0x%x\n",g_PFM_Cfg.M_InnetSafe_Enable); MSCP_LOG_MSG("M_InnetRaw_Enable:0x%x\n",g_PFM_Cfg.M_InnetRaw_Enable); MSCP_LOG_MSG("M_OutnetSafe_Enable:0x%x\n",g_PFM_Cfg.M_OutnetSafe_Enable); @@ -171,11 +188,19 @@ void PFM_CFG_Init(void) g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Time = 51002; g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Maintenance = 51004; + g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Data_Area = 51007; + + g_PFM_Cfg.CPU_CFG[cpuID].Port_2oo2_Assert = 51008; + (void)strcpy(g_PFM_Cfg.CPU_CFG[cpuID].IP_2x2,g_AppCfgInterface.CPU[cpuID-1].IP_2x2); g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Data = 52001; g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Time = 52002; g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Syn = 52003; g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_State = 52004; + g_PFM_Cfg.CPU_CFG[cpuID].Port_Area_Send = 52005; + g_PFM_Cfg.CPU_CFG[cpuID].Port_Area_Recv = 52015; + g_PFM_Cfg.CPU_CFG[cpuID].Port_2x2_Area = 52006; + g_PFM_Cfg.CPU_CFG[cpuID].Port_Area_Time = 52007; (void)strcpy(g_PFM_Cfg.CPU_CFG[cpuID].IP_Maintain, g_AppCfgInterface.CPU[cpuID-1].IP_Maintain); (void)strcpy(g_PFM_Cfg.CPU_CFG[cpuID].IP_Com, g_AppCfgInterface.CPU[cpuID-1].IP_Com); @@ -260,6 +285,8 @@ void PFM_CFG_Init(void) (void)strcpy(g_PFM_Cfg.CC_B_IP,g_AppCfgInterface.OutNetBlue.CC_G_IP); (void)strcpy(g_PFM_Cfg.EXTEND_R_IP,g_AppCfgInterface.OutNetRed.EXTEND_G_IP); (void)strcpy(g_PFM_Cfg.EXTEND_B_IP,g_AppCfgInterface.OutNetBlue.EXTEND_G_IP); + rt = CM_Memcpy(&g_PFM_Cfg.Area_Cfg, sizeof(STRU_AREA_IP_CFG_T), &g_AppCfgInterface.AREA_CPU[0], sizeof(STRU_AREA_IP_CFG_T)); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_13); } else { @@ -267,6 +294,8 @@ void PFM_CFG_Init(void) (void)strcpy(g_PFM_Cfg.CC_B_IP,g_AppCfgInterface.OutNetBlue.CC_P_IP); (void)strcpy(g_PFM_Cfg.EXTEND_R_IP,g_AppCfgInterface.OutNetRed.EXTEND_P_IP); (void)strcpy(g_PFM_Cfg.EXTEND_B_IP,g_AppCfgInterface.OutNetBlue.EXTEND_P_IP); + rt = CM_Memcpy(&g_PFM_Cfg.Area_Cfg, sizeof(STRU_AREA_IP_CFG_T), &g_AppCfgInterface.AREA_CPU[1], sizeof(STRU_AREA_IP_CFG_T)); + CM_NM_ASSERT(ENUM_CM_TRUE == rt, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_14); } /*- 读取通控的端口配置 */ g_PFM_Cfg.CC_R_OutnetSafe_Port = g_AppCfgInterface.OutNetRed.OutnetSafe_Port; @@ -274,7 +303,7 @@ void PFM_CFG_Init(void) g_PFM_Cfg.CC_R_InnetRaw_Port = g_AppCfgInterface.OutNetRed.InnetRaw_Port; g_PFM_Cfg.CC_R_Heart_Port = 53003; - g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port;; + g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port; g_PFM_Cfg.CC_B_OutnetRaw_Port = g_AppCfgInterface.OutNetBlue.OutnetRaw_Port; g_PFM_Cfg.CC_B_InnetRaw_Port = g_AppCfgInterface.OutNetBlue.InnetRaw_Port; g_PFM_Cfg.CC_B_Heart_Port = 53003; @@ -341,6 +370,13 @@ void PFM_CFG_Init(void) TSCP_DOC_VERION[0] = CM_ShortFromChar(&TSCP_DOC_VERION[0]); TSCP_DOC_VERION[1] = CM_ShortFromChar(&TSCP_DOC_VERION[1]); + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + /* 脉冲初始化*/ + DFM_Pulse_Init(); + DFM_ledAREA(0x0u); + } + (void)DFM_GetQNX_Verion(TSCP_QNX_VERION); MSCP_LOG_MSG("TSCP_QNX_VERION : %d.%d.%d.%d\n",TSCP_QNX_VERION[0],TSCP_QNX_VERION[1],TSCP_QNX_VERION[2],TSCP_QNX_VERION[3]); (void)printf("TSCP_QNX_VERION : %d.%d.%d.%d\n",TSCP_QNX_VERION[0],TSCP_QNX_VERION[1],TSCP_QNX_VERION[2],TSCP_QNX_VERION[3]); @@ -790,7 +826,7 @@ static void PFM_CFG_Check_BoardID(void) case 0x33U: case 0x63U: case 0x03U: - case 0x43U: + case 0x43U: 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; @@ -799,7 +835,7 @@ static void PFM_CFG_Check_BoardID(void) case 0x35U: case 0x65U: case 0x05U: - case 0x45U: + case 0x45U: 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; @@ -808,7 +844,7 @@ static void PFM_CFG_Check_BoardID(void) case 0xC6U: case 0x96U: case 0xF6U: - case 0xB6U: + case 0xB6U: 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; @@ -817,7 +853,7 @@ static void PFM_CFG_Check_BoardID(void) case 0xCAU: case 0x9AU: case 0xFAU: - case 0xBAU: + case 0xBAU: 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/MSCP/PFM/PFM_Cfg.h b/TSCP/src/MSCP/PFM/PFM_Cfg.h index d2b7f7a..a5bcb88 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.h +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.h @@ -58,6 +58,14 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ CM_UINT16 INNET_2x2_RAW; /**< 透传通道2乘开关 */ CM_CHAR IP_InnetRaw_maddr[32]; /**< 内网透传的组播IP */ }STRU_PFM_INNET_RAW_T; + /**< 倒切IP配置,记录对面插箱 */ + typedef struct + { + CM_CHAR IP_Area_A[32]; + CM_CHAR IP_Area_B[32]; + CM_CHAR IP_Multicast_Mine[32]; /**< 所在组播域 */ + CM_CHAR IP_Multicast_Dest[32]; /**< 目标组播域 */ + }STRU_AREA_IP_CFG_T; /**< CPU通信配置 */ typedef struct { @@ -65,15 +73,21 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ CM_CHAR IP_2oo2[32]; /**< 2oo2通信IP */ CM_UINT16 Port_2oo2_Data; /**< 2oo2数据通信端口 */ CM_UINT16 Port_2oo2_Data_App; /**< 应用2oo2数据通信端口 */ + CM_UINT16 Port_2oo2_Data_Area; /**< 区域数据2取通信端口 */ CM_UINT16 Port_2oo2_Time; /**< 2oo2校时端口 */ CM_UINT16 Port_2oo2_Maintenance; /**< 2oo2维护端口 */ + CM_UINT16 Port_2oo2_Assert; CM_UINT16 Port_2oo2_2x2_State; /**< 2oo2 2x状态交互端口 */ CM_CHAR IP_2x2[32]; /**< 2x2通信IP */ CM_UINT16 Port_2x2_Data; /**< 2x2数据通信端口 */ CM_UINT16 Port_2x2_Time; /**< 2x2校时端口 */ + CM_UINT16 Port_Area_Time; /**< 区域校时端口 */ CM_UINT16 Port_2x2_Syn; /**< 2x2同步端口 */ CM_UINT16 Port_2x2_State; /**< 2x2状态交互端口 */ + CM_UINT16 Port_2x2_Area; /**< 2x2区域数据交互端口 */ + CM_UINT16 Port_Area_Send; /**< 区域通信组播发送 */ + CM_UINT16 Port_Area_Recv; /**< 区域通信组播接收 */ CM_CHAR IP_Com[32]; /**< 通用通信IP */ CM_CHAR IP_Out[32]; /**< 外网通信IP */ @@ -131,6 +145,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ CM_UINT32 M_OutnetRaw_Enable;/**< 外网透传通信功能开关 */ CM_UINT8 M_CpuUsageGet_Enable; /**< CPU使用率获取功能开关 */ CM_UINT32 M_RemoteUpdate_Enable; /**< 远程部署内网安全通信功能开关 */ + CM_UINT8 M_Area_Enable; /**< 倒切配置,0x00为兼容的主线版本,0x55为CI,0xAA为RC */ CM_CHAR Start_Path[32]; /**< 程序启动路径 */ CM_INT32 reboot_replycount; /**< 重启确认报文回复次数 */ CM_UINT8 M_AutoReboot_Count; /**< 自动重启次数 */ @@ -139,6 +154,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ STRU_PFM_CPU_CFG_T Local_Cfg; /*本机通信配置*/ STRU_PFM_CPU_CFG_T Peer_Cfg; /*2oo2邻机通信配置*/ STRU_PFM_CPU_CFG_T Partner_Cfg; /*2x2对机(对系)通信配置*/ + STRU_AREA_IP_CFG_T Area_Cfg; /*区域通信配置(只记录必要的)*/ CM_CHAR CC_R_IP[32]; /**< 红网通控的内网IP */ CM_CHAR EXTEND_R_IP[32]; /**< 红网扩展板卡的内网IP */ @@ -225,6 +241,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ CM_UINT32 M_OutnetRaw_Enable; /**< 外网透传通信功能开关 */ CM_UINT8 M_CpuUsageGet_Enable; /**< CPU使用率获取功能开关 */ CM_UINT32 M_RemoteUpdate_Enable;/**< 远程部署内网安全通信功能开关 */ + CM_UINT8 M_Area_Enable; /**< 倒切配置,0x00为兼容的主线版本,0x55为CI,0xAA为RC */ CM_UINT16 ID_Maintenance; /*维护终端ID*/ CM_CHAR Start_Path[32]; /**< 程序启动路径 */ CM_INT32 reboot_replycount; /**< 重启确认报文回复次数 */ @@ -232,6 +249,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ CM_UINT16 M_AutoClear_Days; /**< 连续运行多久清空宕机次数的天数 */ /*IP配置*/ STRU_APP_CPU_CFG_T CPU[4]; /*每个CPU的IP配置*/ + STRU_AREA_IP_CFG_T AREA_CPU[2]; /*另一个插箱的IP配置(只记录必要的)*/ /*通用端口配置*/ CM_UINT16 Port_Outnet_Safe; /**< 外网安全通信端口 */ CM_UINT16 Port_Innet_Safe; /**< 内网安全通信端口 */ @@ -346,6 +364,10 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */ void PFM_CFG_IfconfigIp(void); void PFM_CFG_SendDarkCfg(void); + /** + * @brief 初始化读取mainid 必须在函数PFM_CFG_Init前执行 + */ + void PFM_CFG_MAINID_Init(void); #ifdef __cplusplus } #endif diff --git a/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c b/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c index 6344855..96f715e 100644 --- a/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c +++ b/TSCP/src/MSCP/PFM/PFM_ControlFlowCheck.c @@ -240,6 +240,8 @@ void PFM_CFC_Monitor(void) { /*- 无处理 */ } + /* 判断收到宕机后的2取消息,立即执行宕机操作*/ + CFM_AssertRecved(); /*- 计算喂狗至当前的时间 */ CM_Sleep(WATCH_DOG_POLL_TIME); diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.c b/TSCP/src/MSCP/PFM/PFM_InputOutput.c index dd59bb6..13107c2 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.c +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.c @@ -31,10 +31,12 @@ #include "CM_Com.h" #include "DFM_Time.h" #include "PFM_RemoteUpdate.h" +#include "SFM_Area.h" /*平台通信容量*/ #define PFM_INNETRAW_BUFF_SIZE (1024u*1024u*10u) /* 内网透传通信透传UDP缓冲区大小 1M*5,应用许用量为2M */ #define PFM_OUTNETRAW_BUFF_SIZE (1024u*1024u*10u) /* 外网安全通信通道UDP缓冲区大小 1M*10,应用许用量为500k */ + /* * 通信通道涉及的内容: * CFM建立通信层通道,通信报文的接收、发送 @@ -51,12 +53,12 @@ static const CM_INT32 s_2x2oo2_InnetSafe = 1; /* 内网安全通信的通道 static const CM_INT32 s_2x2oo2_OutnetSafe = 2; /* 外网安全通信的通道索引 */ static const CM_INT32 s_2x2oo2_OutnetRaw = 3; /* 外网透传通道的通道索引 */ static const CM_INT32 s_2x2oo2_RemoteUpdate = 4; /* 远程部署通道的通道索引 */ -static const CM_INT32 s_2x2oo2_OutnetHeart = 5; /* 外网心跳通道的通道索引 */ +static const CM_INT32 s_2x2oo2_AreaData = 5; /* 区域数据通道的通道索引 */ +static const CM_INT32 s_2x2oo2_OutnetHeart = 6; /* 外网心跳通道的通道索引 */ static CM_INT32 s_2x2oo2_InnetRaw_num = 0; /* 内网透传通道的数量 */ static CM_INT32 s_2x2oo2_InnetRaw_Extend_num = 0;/* 内网透传通道的数量 */ static CM_INT32 s_2x2oo2_InnetRaw[INNET_RAW_DOUBLE_PASS_NUM];/* 内网透传通道的通道索引们 */ -/*2x分帧接收临时缓冲区*/ -CM_UINT8 g_2x2oo2_Frame_TempBuf[SFM_OUTNETSAFE_BUFF_SIZE] = {0u}; + /* 透传收发通道的简化宏 */ #define APP_RAW_TX(ch) (g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_InnetRaw[(ch)]]) #define APP_RAW_RX(ch) (g_2x2oo2_rx[s_2x2oo2_app][s_2x2oo2_InnetRaw[(ch)]]) @@ -207,6 +209,7 @@ void PFM_Init(void) g_2x2oo2_rx[base][s_2x2oo2_RemoteUpdate].buf_size = (CM_UINT32)SFM_INNETSAFE_RM_BUFF_SIZE; rt = CM_Mutex_Init(&g_2x2oo2_rx[base][s_2x2oo2_RemoteUpdate].app_mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_18); + /*- 初始化区域应用数据接收配置 */ /*- 初始化外网心跳信息接收配置 */ g_2x2oo2_rx[base][s_2x2oo2_OutnetHeart].b_2oo2_Enable = (CM_UINT32)CM_TRUE; g_2x2oo2_rx[base][s_2x2oo2_OutnetHeart].b_2x2_Enable = (CM_UINT32)CM_TRUE; @@ -239,6 +242,23 @@ void PFM_Init(void) g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].b_2x2_Enable = (CM_UINT32)CM_FALSE; rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_RemoteUpdate].mutex); CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_17); + /*- 初始化区域应用数据信息发送配置 */ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + g_2x2oo2_tx[base][s_2x2oo2_AreaData].b_2oo2_Enable = (CM_UINT32)CM_FALSE; /* 在周期末发送前做2取校验,不在输出微周期做2取校验*/ + g_2x2oo2_tx[base][s_2x2oo2_AreaData].b_2x2_Enable = (CM_UINT32)CM_TRUE; + g_2x2oo2_tx[base][s_2x2oo2_AreaData].buf_size = (CM_UINT32)SFM_AREA_DATA_BUFF_SIZE; + rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_AreaData].mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_21); + } + else + { + g_2x2oo2_tx[base][s_2x2oo2_AreaData].b_2oo2_Enable = (CM_UINT32)CM_FALSE; /* 在周期末发送前做2取校验,不在输出微周期做2取校验*/ + g_2x2oo2_tx[base][s_2x2oo2_AreaData].b_2x2_Enable = (CM_UINT32)CM_FALSE; + g_2x2oo2_tx[base][s_2x2oo2_AreaData].buf_size = (CM_UINT32)0u; + rt = CM_Mutex_Init(&g_2x2oo2_tx[base][s_2x2oo2_AreaData].mutex); + CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_21); + } /*- 初始化外网心跳信息发送配置 */ g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].b_2oo2_Enable = (CM_UINT32)CM_TRUE; g_2x2oo2_tx[base][s_2x2oo2_OutnetHeart].b_2x2_Enable = (CM_UINT32)CM_FALSE; @@ -643,6 +663,7 @@ void PFM_OutputProc(void) CM_UINT8 buf_peer[500] = { 0u }; /* 邻机接收缓冲区 */ CM_INT32 ret = 0; /* 临时变量 */ ENUM_2x2_STATE_T state_2x2 = ENUM_2x2_SHUTDOWN; /* 本系热备状态 */ + ENUM_AREA_STATE_T state_area = ENUM_AREA_UNAVAILABLE; /* 本系区域状态 */ /*########################从协议适配层获取输出数据########################*/ @@ -733,10 +754,11 @@ void PFM_OutputProc(void) PFM_CFC_Check(16); /*- 获取当前热备状态 */ state_2x2 = SFM_2x2_GetLocal2x2State(); + state_area = SFM_Area_GetLocalAreaState(); MSCP_LOG_MSG("SFM_2x2_GetSysCount() = %d, s_txSn = %d\n", SFM_2x2_GetSysCount(), SFM_GetTxSn()); MSCP_LOG_MSG("timecurr 16.1 = %lld us\n", NOW_USED_TIME); /*- 本系是否为主 */ - if (ENUM_2x2_MASTER == state_2x2) + if (ENUM_2x2_MASTER == state_2x2 && ENUM_AREA_UNAVAILABLE != state_area) { MSCP_LOG_MSG("Out:innetSafe = %d, innetRaw = %d, outnetSafe = %d\n", (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_InnetSafe].buf_len, (CM_UINT32)PFM_RAW_TX(i).buf_len, (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][s_2x2oo2_OutnetSafe].buf_len); /*- 发送内网安全输出数据 */ @@ -803,9 +825,8 @@ void PFM_EndProc(void) if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { /*- 生成跟随数据的特征信息 */ - crc = CM_Crc32(g_TxAppFollow, (CM_UINT32)g_TxAppFollow_len); CM_LongToChar((CM_UINT32)g_TxAppFollow_len, mybuf); - CM_LongToChar(crc, mybuf + 4); + (void)CM_Memcpy(mybuf + 4, 4, g_TxAppFollow, 4); /*- 2oo2交换特征信息 */ len = SFM_2oo2_Exchange_Currency(mybuf, 8, peerbuf, 8u, ENUM_2oo2_OUTPUT_CHECK); /*- 2oo2严格比较特征信息 */ @@ -860,7 +881,37 @@ void PFM_EndProc(void) /*- 无处理 */ } - + /*- 是否开启了区域功能 */ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + /* 周期末区域同步处理*/ + SFM_Area_EndProc(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].p_buf, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].buf_len, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].buf_size); + } + else + { + + } + + if (0x55u == g_PFM_Cfg.M_2x2_Enable) + { + /*- 周期末协程结束后同步周期号 */ + SFM_2x2_UpdateCYC(); + } + else + { + + /*- 无处理 */ + } + if (0x00u != g_PFM_Cfg.M_Area_Enable) + { + /*- 周期末协程结束后同步区域周期号 */ + SFM_Area_UpdateCYC(); + } + else + { + + /*- 无处理 */ + } } /** @@ -989,6 +1040,7 @@ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSi { len = (CM_UINT32)g_2x2oo2_tx[g_2x2oo2_base][ch].buf_len; crc = CM_Crc32(g_2x2oo2_tx[g_2x2oo2_base][ch].p_buf, len); + MSCP_LOG_MSG("ch = %d, len = %d\n", ch, len); CM_LongToChar(len, &buf[i]); i += 4; CM_LongToChar(crc, &buf[i]); @@ -1831,5 +1883,30 @@ void PFM_GetRciTempBuf(OUT CM_UINT16* RedBuf, OUT CM_UINT16* BlueBuf) MSCP_LOG_MSG("RED or BLUE Buf is NULL\n"); } } +/** + * @brief CI设置应用数据, 发送给RC + */ +void PFM_CISendAppData(CM_UINT8* pData, CM_UINT32 dataLen) +{ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + if(0x55u == g_PFM_Cfg.M_Area_Enable) + { + /** + * 4字节长度 + * n字节应用数据 + * 4字节长度 + * 1字节板卡ID + * 1字节区域状态 + * 1字节2x状态 + * 4字节区域周期号 + * 8字节双CRC(发送时填) + */ + rt = CM_Memcpy(g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].p_buf + 4, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].buf_size - 4u, pData, dataLen); + CM_ASSERT(ENUM_CM_TRUE == rt, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_18, TSCP_DARK_ASSERT_1); + CM_LongToChar(dataLen, g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].p_buf); + g_2x2oo2_tx[s_2x2oo2_app][s_2x2oo2_AreaData].buf_len = dataLen + 4; + } + +} diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.h b/TSCP/src/MSCP/PFM/PFM_InputOutput.h index 2735779..94b8b18 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.h +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.h @@ -63,6 +63,11 @@ extern "C" /* 维护模式输出微周期处理(无宕机函数) */ void PFM_OutputProc_Crash(void); + /** + * @brief CI设置应用数据, 发送给RC + */ + void PFM_CISendAppData(CM_UINT8* pData, CM_UINT32 dataLen); + void PFM_GetRciTempBuf(OUT CM_UINT16* RedBuf, OUT CM_UINT16* BlueBuf); #ifdef __cplusplus } diff --git a/TSCP/src/MSCP/PFM/PFM_Log.c b/TSCP/src/MSCP/PFM/PFM_Log.c index 124f091..21a0871 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.c +++ b/TSCP/src/MSCP/PFM/PFM_Log.c @@ -28,6 +28,7 @@ #include #include #include "CM_IniFile.h" +#include "SFM_Area.h" extern CM_UINT32 g_MSCP_SysCount; ENUM_INIT_STAGE_FLAG g_InitUpdateFlag = ENUM_ERROR;/*- 初始化阶段标志*/ @@ -44,7 +45,14 @@ static STRU_2OO2_NET_NO_PACK_T s_2oo2_AutoReboot = { static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, const CM_CHAR *filename, const CM_CHAR *func, CM_INT32 line); static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T boardState, CM_UINT32 MaintenanceFlag); -static void PFM_LOG_ManageCrashlog(void); +/* @brief 通用循环日志管理 +* @param file_type 文件类型标识 +* 0: 宕机日志 (crashlog) +* 1: 跟踪日志 (.kev) +* 2: 线程日志 (threads) +* @return 无 +*/ +static void PFM_LOG_ManageFiles(CM_UINT8 file_type); /** * @brief 设置初始化阶段标志 * @param ENUM_INIT_STAGE_FLAG stage 设置初始化阶段 @@ -132,7 +140,7 @@ void MSCP_PFM_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_ #ifdef WIN32 Bootprintf("%s", msgBuf + headLen); #endif - /* printf("%s", msgBuf + headLen);*/ + // printf("%s", msgBuf + headLen); /*- 输出日志信息 */ (void)CFM_BaseLog_Send((CM_UINT8*)msgBuf, headLen + msgLen); } @@ -219,6 +227,47 @@ void MSCP_PFM_LOG_DARK(IN const CM_UINT8 infoType, IN const CM_UINT16 code, IN c (void)CFM_DarkLog_Storage(infoType, code, infoLen, info); } +/** + * @brief 宕机时启用 QNX Profiler 录制,获取宕机时刻各线程以及互斥锁、信号量状态 + * @return 无 +*/ +void MSCP_ASSERT_TraceLog(void) +{ + CM_CHAR trace_cmd[256] = {0}; + CM_CHAR pidin_cmd[256] = {0}; + CM_UINT32 ret = 0; + + /* tracelogger 生成*/ + (void)sprintf(trace_cmd, + "tracelogger -c -n %d -s%d -f %s &", PFM_RECORD_BUF, PFM_RECORD_TIME_S, PFM_LATEST_TRACE_NAME); + ret = system(trace_cmd); + if (-1 == ret) + { + (void)printf("ERROR: Failed to start tracelogger: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's tracelogger or threads_log system fail\n"); + } + else + { + ; + } + + /* pidin 生成线程状态*/ + (void)sprintf(pidin_cmd, + "pidin -p %d threads >> %s &", getpid(),PFM_LATEST_THREADS_NAME); + + ret = system(pidin_cmd); + + if (-1 == ret) + { + (void)printf("ERROR: Failed to start pidin: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's pidin or threads_log system fail\n"); + } + else + { + ; + } + CM_Sleep(PFM_RECORD_TIME_S + 1u); +} /** * @brief 断言 @@ -249,6 +298,7 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo ENUM_2x2_STATE_T localState = ENUM_2x2_SHUTDOWN; CM_UINT8 countFalse = 0xff; CM_UINT8 tmepIndex = 0u; + ENUM_CM_RETURN LogQisEmpty = ENUM_CM_FALSE; /* 明文与暗文日志队列是否均为空*/ /*- 全局宕机标志是否有效 */ if(0x55u == s_stopflag) { @@ -269,7 +319,16 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo { /*- 置位全局宕机标志 */ s_stopflag = 0x55u; + if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) + { + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + /* 脉冲停止必须放在前面,避免延时导致的脉冲停止不及时*/ + DFM_Pulse_Stop(); + } + } SFM_2x2_LOG_Transition(); + SFM_AREA_LOG_Transition(); /*- 控制台输出断言失效信息 */ MSCP_LOG_MSG("ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); (void)printf("ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); @@ -309,14 +368,21 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo (void)fclose(fp_historical); /*- 关闭所有TCP连接 */ (void)CM_TCP_Socket_Close_shutdown(); - CM_Sleep(500u); + // CM_Sleep(500u); /*- 安全关断*/ DFM_saftyOff(); + /* 启动跟踪录制 */ + MSCP_ASSERT_TraceLog(); + /*- 设置LED指示灯*/ if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) { /*- 设置LED指示灯*/ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + DFM_ledAREA(0x03u); + } DFM_ledError(); DFM_ledMS(0u); DFM_ledMonitor(2); @@ -337,6 +403,14 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo CFM_LogCiphertextSend(); } + /*- 等待日志队列全部发送*/ + LogQisEmpty = CFM_LogQ_isEmpty(); + while (ENUM_CM_FALSE == LogQisEmpty) + { + LogQisEmpty = CFM_LogQ_isEmpty(); + CM_Sleep(10u); + } + /*- 退出运营故障码*/ if(darkBuf == 0x0D0404) { @@ -400,6 +474,7 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh CM_UINT32 darkBuf = (Mode<<16u)|(faultCode<<8u)|funNum; ENUM_2x2_STATE_T localState = ENUM_2x2_SHUTDOWN; CM_UINT8 lightPs = 0x55; + ENUM_CM_RETURN LogQisEmpty = ENUM_CM_FALSE; /* 明文与暗文日志队列是否均为空*/ /*- 全局宕机标志是否有效 */ if(0x55u == s_stopflag) { @@ -420,19 +495,33 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { /*- 置位全局宕机标志 */ s_stopflag = 0x55u; + if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) + { + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + /* 脉冲停止必须放在前面,避免延时操作导致的脉冲停止不及时*/ + DFM_Pulse_Stop(); + } + } SFM_2x2_LOG_Transition(); + SFM_AREA_LOG_Transition(); + /*- 控制台输出断言失效信息 */ MSCP_LOG_MSG("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); (void)printf("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); AutoReboot_Flag = PFM_LOG_SHUTDOWN(darkBuf, MaintenanceFlag, filename, func, line); /*- 关闭所有TCP连接 */ (void)CM_TCP_Socket_Close_shutdown(); - CM_Sleep(500u); + // CM_Sleep(500u); /*- 安全关断*/ DFM_saftyOff(); if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) { /*- 设置LED指示灯*/ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + DFM_ledAREA(0x03u); + } DFM_ledError(); DFM_ledMS(0u); DFM_ledMonitor(2); @@ -452,6 +541,13 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { CFM_LogCiphertextSend(); } + /*- 等待日志队列全部发送*/ + LogQisEmpty = CFM_LogQ_isEmpty(); + while (ENUM_CM_FALSE == LogQisEmpty) + { + LogQisEmpty = CFM_LogQ_isEmpty(); + CM_Sleep(2u); + } /*- 是否执行重启命令*/ if(AutoReboot_Flag == 0x55u) { @@ -464,6 +560,8 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { (void)printf("Please check err!!!\n"); } + /* 启动跟踪录制 */ + MSCP_ASSERT_TraceLog(); /*- 设置故障模式*/ PFM_SetBoardState(ENUM_BOARDSTATE_DEFAULT); @@ -575,7 +673,9 @@ void MSCP_Read_Del_Logfile(void) } /*- 关闭文件描述符 */ (void)fclose(pfile); - PFM_LOG_ManageCrashlog(); + PFM_LOG_ManageFiles(0u); + PFM_LOG_ManageFiles(1u); + PFM_LOG_ManageFiles(2u); } else { @@ -820,7 +920,7 @@ static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, c * @param darkBuf 故障码 取值范围:0~0xffffffff * @return 无 */ -static void PFM_LOG_MaintenanceMode(CM_UINT32 MaintenanceFlag, CM_UINT32 darkBuf) +static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T MaintenanceFlag, CM_UINT32 darkBuf) { /*- 变量初始化 */ CM_UINT64 sMaintenanceTack = CM_GetTick()/CM_UNSIGNED_MILLION; @@ -860,6 +960,10 @@ static void PFM_LOG_MaintenanceMode(CM_UINT32 MaintenanceFlag, CM_UINT32 darkBuf DFM_ledError(); DFM_ledMS(0u); DFM_ledMonitor(1u); + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + DFM_ledAREA(0x0u); + } (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PSLIGHT, 1U, &lightPs); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_LOCAL, 1U, &localState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_INFO_ERR_TYPE, 4u, &darkBuf); @@ -895,51 +999,100 @@ void PFM_SendLastAssertLog(void) { MSCP_LOG_MSG("Last crashlog:%s \n", s_crashlogBuf); } - /** -* @brief 宕机日志管理 +* @brief 通用循环日志管理 +* @param file_type 文件类型标识 +* 0: 宕机日志 (crashlog) +* 1: 跟踪日志 (.kev) +* 2: 线程日志 (threads) * @return 无 */ -static void PFM_LOG_ManageCrashlog(void) +static void PFM_LOG_ManageFiles(CM_UINT8 file_type) { - /*- 读宕机文件*/ - FILE *pcrash_num = NULL; - CM_CHAR str_crash_new_name[256] = {0}; - CM_CHAR str_crash_old_name[256] = {0}; - CM_UINT32 i = 0; - /*- 查找第一个不存在的文件名 */ - for(i = 0u;i<10u;i++) + FILE *p_file = NULL; + CM_CHAR str_new_name[256] = {0}; + CM_CHAR str_old_name[256] = {0}; + CM_CHAR final_name[256] = {0}; + CM_CHAR base_name[64] = {0}; + CM_CHAR extension[16] = {0}; + CM_CHAR latest_file[128] = {0}; + CM_UINT32 max_count = 0u; + CM_UINT32 i = 0u; + CM_UINT8 typeValid = 1u; + + /* 根据文件类型设置参数 */ + switch(file_type) + { + case 0u: /* 宕机日志 */ + (void)strcpy(base_name, "crashlog_"); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, "crashlog.txt"); + max_count = PFM_MAX_TRACE_COUNT; + break; + + case 1u: /* 跟踪日志 */ + (void)strcpy(base_name, PFM_BASE_TRACE_NAME); + (void)strcpy(extension, ".kev"); + (void)strcpy(latest_file, PFM_LATEST_TRACE_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + + case 2u: /* 线程日志 */ + (void)strcpy(base_name, PFM_BASE_THREADS_NAME); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, PFM_LATEST_THREADS_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + + default: + typeValid = 0u; + break; /* 无效的文件类型 */ + } + if(1u == typeValid) { - /*- 通过打开文件成功检测文件是否存在 */ - sprintf(str_crash_new_name,"crashlog_%d.txt",i + 1u); - pcrash_num = fopen(str_crash_new_name,"r"); - /*- 找到第一个不存在的文件名 */ - if(NULL == pcrash_num) + /* 查找第一个不存在的文件名 */ + for(i = 1u; i <= max_count; i++) { - /*- 跳出 */ - break; + /* 通过打开文件成功检测文件是否存在 */ + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + p_file = fopen(str_new_name, "r"); + + if(NULL == p_file) + { + (void)strcpy(final_name, str_new_name); + break; + } + else + { + (void)fclose(p_file); + } } - else + + /* 如果所有文件名都存在,删除最旧的日志并进行文件轮转 */ + if(i > max_count) { - /*- 关闭文件 */ - fclose(pcrash_num); + /* 构建最旧文件名 */ + (void)sprintf(str_old_name,"%s%d%s", base_name, 1u, extension); + (void)remove(str_old_name); + + /* 文件轮转:将每个文件重命名为前一个编号 */ + for(i = 2u; i <= max_count; i++) + { + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + (void)sprintf(str_old_name, "%s%d%s", base_name, i - 1u, extension); + (void)rename(str_new_name, str_old_name); + } + + /* 设置最终文件名为最大编号的文件 */ + (void)strcpy(final_name, str_new_name); + } + + /* 对当前日志文件进行重命名 */ + if(final_name[0] != 0) + { + (void)rename(latest_file, final_name); } } - - /*- 如果所有文件名都存在,删除最旧的日志(crashlog_1.txt)*/ - if(10u == i) - { - (void)strcpy(str_crash_old_name,"crashlog_1.txt"); - (void)remove(str_crash_old_name); - for(i = 2u;i <= 10u; i++) - { - (void)sprintf(str_crash_new_name,"crashlog_%d.txt",i); - (void)rename(str_crash_new_name,str_crash_old_name); - (void)strcpy(str_crash_old_name,str_crash_new_name); - } - } - /*- 对文件重新命名 */ - (void)rename("crashlog.txt",str_crash_new_name); } /* * @brief 暗文日志故障码生成指针函数 diff --git a/TSCP/src/MSCP/PFM/PFM_Log.h b/TSCP/src/MSCP/PFM/PFM_Log.h index 90a9f06..ce69c50 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.h +++ b/TSCP/src/MSCP/PFM/PFM_Log.h @@ -29,6 +29,8 @@ extern "C" #define TSCP_DARK_OUTTIME (0x10u) #define TSCP_DARK_2OO2 (0x11u) #define TSCP_DARK_2x2 (0x12u) +#define TSCP_DARK_AREA (0x13u) +#define TSCP_DARK_AREA_SWITCH (0x14u) #define TSCP_DARK_VERION (0x19u) #define TSCP_DARK_EEPROMCPU (0x1au) #define TSCP_DARK_EEPROMIO12S (0x1bu) @@ -169,6 +171,16 @@ void MSCP_PFM_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_ /* 记录二进制日志 */ #define MSCP_LOG_BIN(buf,len) (MSCP_PFM_LOG_BIN(__FILE__,__FUNCTION__,(CM_INT32)__LINE__,(buf),(len))) + +/* 宕机情况跟踪模块 */ +#define PFM_MAX_TRACE_COUNT (10u) +#define PFM_BASE_TRACE_NAME "trace_log_" // 文件名前缀 (trace_crash_1.kev) +#define PFM_LATEST_TRACE_NAME "trace_log_latest.kev" +#define PFM_BASE_THREADS_NAME "threads_state_" // 文件名前缀 (threads_state_1.txt) +#define PFM_LATEST_THREADS_NAME "threads_state_latest.txt" +#define PFM_RECORD_TIME_S (5u) +#define PFM_RECORD_BUF (1024) /* 1024 * 16KB = 16MB*/ + /* 函数实现 */ void MSCP_PFM_LOG_BIN(IN const CM_CHAR *filename, IN const CM_CHAR *func, IN CM_INT32 line, IN const CM_UINT8 *Buf, IN CM_UINT32 Len); @@ -202,6 +214,8 @@ void MSCP_LOG_DATALEN(IN CM_UINT8 *Buf, IN CM_UINT32 Len, IN char *Annotation); CM_UINT8 PFM_LOG_GET_STOP_FLAG(void); void PFM_SendLastAssertLog(void); + +void MSCP_ASSERT_TraceLog(void); CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define DARK_FAULT_CODE_MERGE(Mode,faultCode,funNum) (PFM_DarkLogGenerate(Mode,faultCode,funNum)) /***************************暗文日志故障码信息编码表****************************/ @@ -232,6 +246,7 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define TIME_MODE (0x16u) /*时钟相关模块*/ #define LOG_MODE (0x17u) /*日志相关模块*/ #define REMOTE_UPDATE (0x18u) /*维护软件升级模块*/ +#define SFM_AREA_MODE (0x19u) /*区域通信模块*/ /*************模块内函数顺序编码*************/ @@ -275,6 +290,26 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define DARK_FAULT_CODE_FUN_ORDER_38 (0x26u) #define DARK_FAULT_CODE_FUN_ORDER_39 (0x27u) #define DARK_FAULT_CODE_FUN_ORDER_40 (0x28u) +#define DARK_FAULT_CODE_FUN_ORDER_41 (0x29u) +#define DARK_FAULT_CODE_FUN_ORDER_42 (0x2Au) +#define DARK_FAULT_CODE_FUN_ORDER_43 (0x2Bu) +#define DARK_FAULT_CODE_FUN_ORDER_44 (0x2Cu) +#define DARK_FAULT_CODE_FUN_ORDER_45 (0x2Du) +#define DARK_FAULT_CODE_FUN_ORDER_46 (0x2Eu) +#define DARK_FAULT_CODE_FUN_ORDER_47 (0x2Fu) +#define DARK_FAULT_CODE_FUN_ORDER_48 (0x30u) +#define DARK_FAULT_CODE_FUN_ORDER_49 (0x31u) +#define DARK_FAULT_CODE_FUN_ORDER_50 (0x32u) +#define DARK_FAULT_CODE_FUN_ORDER_51 (0x33u) +#define DARK_FAULT_CODE_FUN_ORDER_52 (0x34u) +#define DARK_FAULT_CODE_FUN_ORDER_53 (0x35u) +#define DARK_FAULT_CODE_FUN_ORDER_54 (0x36u) +#define DARK_FAULT_CODE_FUN_ORDER_55 (0x37u) +#define DARK_FAULT_CODE_FUN_ORDER_56 (0x38u) +#define DARK_FAULT_CODE_FUN_ORDER_57 (0x39u) +#define DARK_FAULT_CODE_FUN_ORDER_58 (0x3Au) +#define DARK_FAULT_CODE_FUN_ORDER_59 (0x3Bu) +#define DARK_FAULT_CODE_FUN_ORDER_60 (0x3Cu) /**************具体宕机原因编码(函数内的宕机顺序)***************/ diff --git a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c index dd9d423..9812572 100644 --- a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c +++ b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c @@ -2219,16 +2219,24 @@ static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 MSCP_LOG_MSG("error pack 0xa8 localState = %d partnerState = %d\n", localState, partnerState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_9)); } + else if(s_packFirstRecvTimer != s_packFirstSendTimer) + { + /*- 二次请求时间戳与一次不匹配 */ + s_packSwitchAccredit = 1u; + s_switchAuthorization = 12u; + MSCP_LOG_MSG("error pack 0xa8 s_firstTimer = %d packTimer = %d\n", s_packFirstSendTimer, s_packFirstRecvTimer); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_10)); + } else { /*- 二次至切系状态状态 */ s_switchRmFlag = 0x55u; s_packSwitchAccredit = 0u; s_switchAuthorization = 0u; + s_firstState = ENUM_2x2_SHUTDOWN; } /*再次应答*/ recvType = 0x58u; - s_firstState = ENUM_2x2_SHUTDOWN; } /*- 切系命令请求回复 */ PFM_RemoteSwitch_Send(recvType,packTimer,s_packSwitchAccredit,s_switchAuthorization); diff --git a/TSCP/src/MSCP/SFM/SFM_2oo2.c b/TSCP/src/MSCP/SFM/SFM_2oo2.c index ab77765..9355d02 100644 --- a/TSCP/src/MSCP/SFM/SFM_2oo2.c +++ b/TSCP/src/MSCP/SFM/SFM_2oo2.c @@ -41,6 +41,8 @@ STRU_2OO2_CTRL_T s_2oo2_Ctrl; /**< 平台通信控制 */ STRU_2OO2_CTRL_T s_2oo2_Ctrl_App; /**< 应用通信控制 */ +STRU_2OO2_CTRL_T s_2oo2_Ctrl_Area; /**< 区域通信控制 */ + /* 2oo2发送 */ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msgType,CM_UINT16 FrameStart); @@ -54,6 +56,8 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E static void s_2oo2_Send_Crash(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msgType); /* 维护模式2oo2接收 */ static CM_INT32 s_2oo2_Recv_Crash(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT ENUM_2oo2_MSG_T *pMsgType,STRU_2OO2_CTRL_T *p_2oo2_Ctrl); +/* 通过二取消息类型,判断是否计算CRC*/ +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type); /** * @brief 2oo2上电初始化 * @param vitalBuf 关键数据数组 @@ -245,6 +249,9 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ CM_UINT16 FrameIndex = 0u; /* 帧序号 */ CM_UINT32 FrameLen = 0u; /* 帧长度 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*系统周期号*/ + CM_UINT32 crc = 0u; + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 判断是否计算CRC*/ + clacCrcFlag = s_isClac2oo2Crc(msgType); PFM_LOG_SET_STOPTIMER(TSCP_DARK_2OO2); /*- 入口检查 */ CM_ASSERT(((DataLen >= 0) && (NULL != Data) && (NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); @@ -281,9 +288,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ { CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 23); /* 帧序号 */ (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25),(CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)NET_20K_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(25u + NET_20K_SIZE)); /* 交给通信层发送 */ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(NET_20K_SIZE + 25u, p_2oo2_Ctrl->UDP_Cache); /* 长度(填写满帧) */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, NET_20K_SIZE + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[NET_20K_SIZE + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(29u + NET_20K_SIZE)); /* 交给通信层发送 */ + } + else + { + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(25u + NET_20K_SIZE)); /* 交给通信层发送 */ + } } /*- 发送尾帧 */ @@ -291,8 +306,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ CM_LongToChar(21u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*长度*/ - - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(25u + FrameLen)); /* 交给通信层发送 */ + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(25u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*长度*/ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, FrameLen + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[FrameLen + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(29u + FrameLen)); /* 交给通信层发送 */ + } + else + { + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(25u + FrameLen)); /* 交给通信层发送 */ + } PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); } else @@ -313,6 +337,7 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg { /*- 变量初始化 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*系统周期号*/ + CM_UINT32 crc = 0u; /*- 入口检查 */ CM_ASSERT(((NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); /* @@ -327,15 +352,17 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg 4字节 CRC(含长度) */ /*- 填充报文头 */ - CM_LongToChar(19u, p_2oo2_Ctrl->UDP_Cache); /* 长度(暂时填写满帧) */ + CM_LongToChar(23u, p_2oo2_Ctrl->UDP_Cache); /* 长度(暂时填写满帧) */ CM_LongToChar(p_2oo2_Ctrl->LocalID, p_2oo2_Ctrl->UDP_Cache + 4); /* 源ID */ CM_LongToChar(p_2oo2_Ctrl->PeerID, p_2oo2_Ctrl->UDP_Cache + 8); /* 目的ID */ CM_LongToChar(SysCyc, p_2oo2_Ctrl->UDP_Cache + 12); /* 周期号 */ CM_LongToChar(p_2oo2_Ctrl->SN, p_2oo2_Ctrl->UDP_Cache + 16); /* 序列号 */ p_2oo2_Ctrl->UDP_Cache[20] = (CM_UINT8)msgType; /* 类型 */ CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 21); /* 重传序号 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, 23); + CM_LongToChar(crc, p_2oo2_Ctrl->UDP_Cache + 23); - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)23); /* 交给通信层发送 */ + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)27); /* 交给通信层发送 */ } /** * @brief 2oo2接收支持重传 @@ -366,7 +393,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E CM_INT32 allLen = 0; /* 收到的报文总长度 */ CM_UINT8 type = 0u; /* 报文类型 */ CM_UINT16 ARQ_Cut = 0u; /* 记录重传请求次数 */ - + CM_UINT32 msgCrc = 0u; /* 报文CRC */ + CM_UINT32 calcCrc = 0u; /* 本地计算CRC */ + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 判断是否计算CRC*/ CM_UINT16 ARQ_FrameStart = 0u;/* 重传帧序号 */ CM_UINT8 MineRcvSuccessFlag = CM_FALSE;/*本机接收完成标志*/ CM_UINT8 PeerRcvSuccessFlag = CM_FALSE;/*对系接收完成标志*/ @@ -383,9 +412,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E while(1) { /*- 从通信层接收2oo2报文 */ - rxLen = p_2oo2_Ctrl->DataRecv(p_2oo2_Ctrl->UDP_Cache, (CM_UINT32)sizeof(p_2oo2_Ctrl->UDP_Cache)); - /*- 收到的报文长度是否大于23 */ - if (23 <= rxLen) + rxLen = p_2oo2_Ctrl->DataRecv(p_2oo2_Ctrl->UDP_Cache, (CM_UINT32)sizeof(p_2oo2_Ctrl->UDP_Cache)); + /*- 收到的报文长度是否大于25(不含CRC数据帧头为25字节,含CRC数据帧头部为29字节,重传请求长度27字节) */ + if (25 <= rxLen) { /*- 解析2oo2报文头 */ @@ -408,11 +437,22 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E msgCyc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 12); msgSN = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 16); type = p_2oo2_Ctrl->UDP_Cache[20]; + clacCrcFlag = s_isClac2oo2Crc(type); + if(ENUM_CM_TRUE == clacCrcFlag) + { + msgCrc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + msgLen); + calcCrc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, msgLen); + } + else + { + calcCrc = msgCrc; + } if (((msgLen + 4u) == (CM_UINT32)rxLen) && (SrcID == p_2oo2_Ctrl->PeerID) && (DstID == p_2oo2_Ctrl->LocalID) && (msgCyc == sysCyc) - && (msgSN == p_2oo2_Ctrl->SN)) + && (msgSN == p_2oo2_Ctrl->SN) + && (msgCrc == calcCrc)) { switch(type) { @@ -444,7 +484,15 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E if (CM_FALSE == MineRcvSuccessFlag) { pData = p_2oo2_Ctrl->UDP_Cache + 25; - DataLen = (CM_INT32)msgLen - 21; + if(ENUM_CM_TRUE == clacCrcFlag) + { + DataLen = (CM_INT32)msgLen - 25; + } + else + { + DataLen = (CM_INT32)msgLen - 21; + } + /*- 分帧接收2oo2报文 */ ret = SFM_FrameSave(&p_2oo2_Ctrl->FrameCtrl, type, FrameNum, FrameIndex, pData, DataLen, RxData, &allLen, RxSize); /*- 是否收齐了完整2oo2报文 */ @@ -477,9 +525,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E } else { - MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d\n", + MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d, crc:%d, calcrc:%d\n", rxLen, msgLen, SrcID, p_2oo2_Ctrl->PeerID, DstID, p_2oo2_Ctrl->LocalID, - msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type); + msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type, msgCrc, calcCrc); (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2OO2_RCV_ERR,11u, sizeof(CM_INT32),rxLen, sizeof(CM_UINT32),msgLen, @@ -603,6 +651,37 @@ CM_INT32 SFM_2oo2_Currency_App(IN const CM_UINT8 pMyData[], IN CM_INT32 DataLen, /*- 返回收到的报文长度 */ return rxLen; } +/** +* @breif 应用全双工2oo2数据交换支持重传 +* @param pMyData 本机数据指针 取值范围:非空 +* @param DataLen 本剧数据长度 取值范围:0~0x7FFFFFFF +* @param pPeerData 邻机数据指针 取值范围:非空 +* @param DataSize 邻机数据缓冲区大小 取值范围:0~0xFFFFFFFF +* @return 收到的邻机数据长度 取值范围:0~0x7FFFFFFF +*/ +CM_INT32 SFM_2oo2_Currency_Area(IN const CM_UINT8 pMyData[], IN CM_INT32 DataLen, OUT CM_UINT8 pPeerData[], IN CM_UINT32 DataSize) +{ + /*- 变量初始化 */ + CM_INT32 rxLen = -1; + ENUM_2oo2_MSG_T rxType = ENUM_2oo2_ERROR; + + /*- 入口检查 */ + CM_ASSERT(DataLen >= 0, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); + CM_ASSERT((NULL != pMyData) && (NULL != pPeerData), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_3); + + /*- 更新2oo2通信序列号 */ + s_2oo2_Ctrl_Area.SN++; + + /*- 发送2oo2数据 */ + s_2oo2_Send(pMyData, DataLen,&s_2oo2_Ctrl_Area, ENUM_2oo2_AREA_DATA,1u); + /*等待接收端应答*/ + rxLen = s_2oo2_ARQ_Recv(pPeerData, DataSize, &rxType,pMyData, DataLen, &s_2oo2_Ctrl_Area,ENUM_2oo2_AREA_DATA); + + CM_ASSERT(0 <= rxLen, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2); + + /*- 返回收到的报文长度 */ + return rxLen; +} /** * @brief 2oo2同步 @@ -975,7 +1054,7 @@ void SFM_2oo2_Reset_AutoRbootCut(void) RM_Reset_FaultRbootCut(0); CM_RE_ASSERT(cut == 0u, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); /*- 同时修改时间阈值*/ - g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u;; + g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u; } else { @@ -983,6 +1062,21 @@ void SFM_2oo2_Reset_AutoRbootCut(void) } } } +/* 通过二取消息类型,判断是否计算CRC*/ +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type){ + ENUM_CM_RETURN rt = ENUM_CM_TRUE; + switch (type) + { + case ENUM_2oo2_INPUT_EX: + case ENUM_2oo2_END_EX: + case ENUM_2oo2_AREA_DATA: + rt = ENUM_CM_FALSE; + break; + default: + break; + } + return rt; +} /** * @brief 初始化2取控制数据以及清空2取缓冲区 @@ -1014,4 +1108,16 @@ void SFM_2oo2_CtrlInit(void) s_2oo2_Ctrl_App.DataSend = CFM_2oo2_DataSend_App; /*- 清空2取缓冲区 */ (void)memset(s_2oo2_Ctrl_App.UDP_Cache, 0, sizeof(s_2oo2_Ctrl_App.UDP_Cache)); + /*- 初始化应用2取结构体参数*/ + s_2oo2_Ctrl_Area.LocalID = s_2oo2_Ctrl.LocalID; + s_2oo2_Ctrl_Area.PeerID = s_2oo2_Ctrl.PeerID; + s_2oo2_Ctrl_Area.SN = 0u; + s_2oo2_Ctrl_Area.FrameCtrl.FramIndex = 0u; + s_2oo2_Ctrl_Area.FrameCtrl.FrameNum = 0u; + s_2oo2_Ctrl_Area.FrameCtrl.RxLen = 0; + s_2oo2_Ctrl_Area.FrameCtrl.type = 0u; + s_2oo2_Ctrl_Area.DataRecv = CFM_2oo2_DataRecv_Area; + s_2oo2_Ctrl_Area.DataSend = CFM_2oo2_DataSend_Area; + /*- 清空2取缓冲区 */ + (void)memset(s_2oo2_Ctrl_Area.UDP_Cache, 0, sizeof(s_2oo2_Ctrl_Area.UDP_Cache)); } diff --git a/TSCP/src/MSCP/SFM/SFM_2oo2.h b/TSCP/src/MSCP/SFM/SFM_2oo2.h index 4efc030..3167ad6 100644 --- a/TSCP/src/MSCP/SFM/SFM_2oo2.h +++ b/TSCP/src/MSCP/SFM/SFM_2oo2.h @@ -34,7 +34,7 @@ extern "C" ENUM_2oo2_INPUT_MS, /**< 输入热备状态交换 */ ENUM_2oo2_OUTPUT_EX, /**< 输出交换 */ ENUM_2oo2_END_EX, /**< 周期末交换 */ - ENUM_2oo2_OUTPUT_CHECK, /**< 输出比较 */ + ENUM_2oo2_OUTPUT_CHECK, /**< 输出比较 */ ENUM_2oo2_RAW_INFO, ENUM_2oo2_SHUTDOWNQUIT, /**< 维护模式下的2取交换 */ ENUM_2oo2_RESET_AUTOREBOOT,/*重置自动重启*/ @@ -42,6 +42,7 @@ extern "C" ENUM_2oo2_RCV_SUCCESS, /*接收成功标志*/ ENUM_2oo2_APP, /*应用二取类型*/ NUM_2oo2_FIRSTSYNC, /**< 同步 */ + ENUM_2oo2_AREA_DATA, /*区域数据*/ }ENUM_2oo2_MSG_T; /** 2oo2通信控制 */ @@ -67,6 +68,15 @@ extern "C" /* 半双工2oo2数据交换 */ CM_INT32 SFM_2oo2_Exchange_Currency(IN const CM_UINT8 * pMyData, IN CM_INT32 DataLen, OUT CM_UINT8 * pPeerData, IN CM_UINT32 DataSize, IN ENUM_2oo2_MSG_T msgType); CM_INT32 SFM_2oo2_Currency_App(IN const CM_UINT8 pMyData[], IN CM_INT32 DataLen, OUT CM_UINT8 pPeerData[], IN CM_UINT32 DataSize); + /** + * @breif 区域全双工2oo2数据交换支持重传 + * @param pMyData 本机数据指针 取值范围:非空 + * @param DataLen 本剧数据长度 取值范围:0~0x7FFFFFFF + * @param pPeerData 邻机数据指针 取值范围:非空 + * @param DataSize 邻机数据缓冲区大小 取值范围:0~0xFFFFFFFF + * @return 收到的邻机数据长度 取值范围:0~0x7FFFFFFF + */ + CM_INT32 SFM_2oo2_Currency_Area(IN const CM_UINT8 pMyData[], IN CM_INT32 DataLen, OUT CM_UINT8 pPeerData[], IN CM_UINT32 DataSize); /*2oo2同步*/ CM_UINT64 SFM_2oo2_Sync(OUT CM_INT64* pOffset); /* 2oo2关键数据初始化 */ diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index e0b4823..3797232 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.c +++ b/TSCP/src/MSCP/SFM/SFM_2x2.c @@ -31,13 +31,14 @@ #include "DFM_DRV.h" #include "PFM_SelfCheck.h" #include "stdarg.h" +#include "SFM_Area.h" /*通信中断时间和同步超时时间可以相同,此时优先执行通信中断切系*/ CM_INT32 g_2x2oo2_base = 0; /**< 2x2oo2双缓冲区的平台索引 */ CM_INT32 g_2x2oo2_data_num = 0; /**< 2x2oo2的通道总数 */ -STRU_2x2oo2_rx_T g_2x2oo2_rx[2][24]; /**< 2x2oo2的接收双缓冲区 */ -STRU_2x2oo2_tx_T g_2x2oo2_tx[2][24]; /**< 2x2oo2的发送双缓冲区 */ +STRU_2x2oo2_rx_T g_2x2oo2_rx[2][25]; /**< 2x2oo2的接收双缓冲区 */ +STRU_2x2oo2_tx_T g_2x2oo2_tx[2][25]; /**< 2x2oo2的发送双缓冲区 */ CM_UINT8 g_2x2RcvMaxNum[2] = {0}; /**< 2x2双缓冲区接收最大序号*/ /* @@ -71,7 +72,10 @@ CM_UINT8 g_TxAppFollow[MSCP_FOLLOW_BUFF_SIZE*2]; /**< 发送的应用跟随数 #define SFM_2x2_TM_RING_SIZE (10) /**< 2x2时钟同步累计的周期数 */ #define SFM_2x2_TM_FIX_VAL (10) /**< 最小调整偏差 */ +#define SFM_Area_TM_RING_SIZE (10) /**< 区域时钟同步累计的周期数 */ +#define SFM_Area_TM_FIX_VAL (10) /**< 区域最小调整偏差 */ static STRU_CM_RING_T s_2x2_TmRing; /**< 2x2时钟同步数据 */ +static STRU_CM_RING_T s_Area_TmRing; /**< 区域时钟同步数据 */ static STRU_2X2_CTRL_T s_2x2_Ctrl; /**< 主线程2x2控制 */ static STRU_2X2_STATE_CTRL_T s_2x2_state_Ctrl; /**< 子线程2x2状态控制 */ STRU_2X2_STATE_THRRAD_T s_2x2_thread_Ctrl;/**< 子线程2x2参数 */ @@ -96,7 +100,36 @@ static CM_BOOL s_State_2x2_Analysis(OUT STRU_2X2_STATE_CTRL_T *p_partner_state,C /*2x状态同步*/ static ENUM_CM_RETURN s_State_2x2Sync(OUT STRU_2X2_STATE_CTRL_T *p_partner_state); static void s_State_Transition(void); - +/* 倒切按钮消抖 在2x微周期执行*/ +static void s_Area_Switch_Get(); +/* 脉冲获取 在2x微周期执行*/ +static void s_Area_Pulse_Get(); +/** 4个CPU脉冲同步 在2x后的2取执行*/ +static void s_Pulse_Sync(); +/* 4个CPU开关状态判断 在2x后的2取执行 */ +static void s_AreaSwitch_Sync(); +/* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/ +static void s_Area_Transition(); +/** + * @brief 通过脉冲计数,判断脉冲是否停止 + * @param index 0-A系,1-B系 + * @return ENUM_CM_TRUE-停止 ENUM_CM_FALSE-未停止 + * */ +static ENUM_CM_RETURN s_isPulseStopped(CM_UINT8 index); +/** + * 统一置切系标志 + */ +static void s_2x2_CloseSwitchFlag(); +/* 校时计算offset时的2取双CPU计算*/ +static ENUM_CM_RETURN s_TimeSync_2oo2(INOUT CM_INT64 *myOffset, OUT CM_INT64 *peerOffset); +/* 校时计算时钟调整量*/ +static CM_INT64 s_TimeSync_CalcOffset(IN CM_INT64 offset, IN CM_INT64 MinOffset); +/** + * @brief 更新区域校时标志 + * @param offset-时钟偏移 + * @param threshold-认为校时成功阈值(单位ms) + * */ +static void s_TimeSync_AreaSyncFlag(IN CM_INT64 offset, IN CM_INT64 threshold); /** * @brief 2X状态切换独立线程 */ @@ -206,7 +239,7 @@ static void s_State_Switch(void) { s_timeSecond = CM_GetTick(); /*- 当次按下时间距第一次按下时间相差3s,则判断是否需要切系 */ - if(s_timeSecond - s_timeFirst >= MSCP_2X2_SWITCH_3S) + if((s_timeSecond - s_timeFirst) >= MSCP_2X2_SWITCH_3S) { /*- 如果未切系则准备切系,如果以切系则休眠后继续等待松开按钮,防止持续按压 */ if((s_LocalState == s_2x2_state_Ctrl.LocalState) && (s_PartnerState == s_2x2_state_Ctrl.PartnerState)) @@ -239,6 +272,82 @@ static void s_State_Switch(void) } } +/* 倒切按钮消抖*/ +static void s_Area_Switch_Get() +{ + /*- 变量初始化 */ + static CM_UINT64 s_timeFirst = 0u; + static CM_UINT64 s_timeSecond = 0u; + static ENUM_SWITCH_MODE_T modeFirst = ENUM_SWITCH_ERROR; + static ENUM_SWITCH_MODE_T modeSecond = ENUM_SWITCH_ERROR; + + modeSecond = DFM_Switch_Mode_Get(); + SFM_LOG_MSG_2X("ModeSecond:%d, ModeFirst:%d\n", modeSecond, modeFirst); + + if(modeSecond != modeFirst) + { + s_timeFirst = CM_GetTick(); + modeFirst = modeSecond; + } + else + { + s_timeSecond = CM_GetTick(); + if(MSCP_AREA_SWITCH_3S <= (s_timeSecond - s_timeFirst)) + { + /* 开关持续3s,更新开关状态*/ + s_2x2_state_Ctrl.LocalAreaSwitchMode = modeFirst; + } + else + { + + } + + SFM_LOG_MSG_2X("Area Switch, SecondTime - FirstTime:%u ms\n", (CM_UINT32)((s_timeSecond - s_timeFirst) / CM_UNSIGNED_MILLION)); + } +} +/* 脉冲获取 在2x微周期执行*/ +static void s_Area_Pulse_Get() +{ + static ENUM_CM_RETURN pulseAStopped = ENUM_CM_FALSE; + static ENUM_CM_RETURN pulseBStopped = ENUM_CM_FALSE; + ENUM_CM_RETURN feedbackrt = ENUM_CM_FALSE; + if(0u == s_2x2_state_Ctrl.MicroCyc) + { + pulseAStopped = ENUM_CM_FALSE; + pulseBStopped = ENUM_CM_FALSE; + } + if(ENUM_CM_FALSE == pulseAStopped) + { + pulseAStopped = s_isPulseStopped(0u); + } + if(ENUM_CM_FALSE == pulseBStopped) + { + pulseBStopped = s_isPulseStopped(1u); + } + + if(s_2x2_state_Ctrl.MicroCyc == (s_2x2_thread_Ctrl.number_Cyc - 1u)) + { + /* 只在最后一个周期检测脉冲*/ + DFM_Pulse_Get(&s_2x2_state_Ctrl.pulse[1][0], &s_2x2_state_Ctrl.pulse[1][1]); + feedbackrt = DFM_Pulse_FeedBack(&s_2x2_state_Ctrl.pulseFeedBack); + SFM_LOG_MSG_2X("pulseA:%d, pulseB:%d, pulse feedback:%d, rt:%d\n", s_2x2_state_Ctrl.pulse[1][0], s_2x2_state_Ctrl.pulse[1][1], s_2x2_state_Ctrl.pulseFeedBack, feedbackrt); + /*脉冲回读失败宕机*/ + CM_ASSERT(ENUM_CM_TRUE == feedbackrt, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); + } + else + { + + } + /* 脉冲中断,覆盖检测结果*/ + if(ENUM_CM_TRUE == pulseAStopped) + { + s_2x2_state_Ctrl.pulse[1][0] = ENUM_PULSE_ERROR; + } + if(ENUM_CM_TRUE == pulseBStopped) + { + s_2x2_state_Ctrl.pulse[1][1] = ENUM_PULSE_ERROR; + } +} /** * @brief 2x交互前的系内热备状态同步 * @param pPeerCtrl 邻机热备信息 @@ -270,6 +379,15 @@ static void s_State_2xBefore_2oo2Sync(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,OUT S SFM_LOG_MSG_2X("2oo2:MyoffLineCut = %d, OtheroffLineCut = %d\n",s_2x2_state_Ctrl.offLineCounter,p_peer_state->offLineCounter); CM_RE_ASSERT(s_2x2_state_Ctrl.offLineCounter == p_peer_state->offLineCounter, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_5); CM_RE_ASSERT(s_2x2_state_Ctrl.preMasterCounter == p_peer_state->preMasterCounter, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_6); + SFM_LOG_MSG_2X("2oo2:MyMasterCounter = %d, OtherMasterCounter = %d, MySlaveCounter = %d, OtherSlaveCounter = %d\n", s_2x2_state_Ctrl.areaHealthCounter + , p_peer_state->areaHealthCounter + , s_2x2_state_Ctrl.areaHealthCounter + , p_peer_state->areaHealthCounter); + CM_RE_ASSERT(s_2x2_state_Ctrl.areaHealthCounter == p_peer_state->areaHealthCounter, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_15); + CM_RE_ASSERT(s_2x2_state_Ctrl.LocalAreaState == p_peer_state->LocalAreaState, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_18); + CM_RE_ASSERT(s_2x2_state_Ctrl.AnotherAreaState == p_peer_state->AnotherAreaState, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_20); + CM_RE_ASSERT(s_2x2_state_Ctrl.AreaIsAllowed == p_peer_state->AreaIsAllowed, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_21); + CM_RE_ASSERT(s_2x2_state_Ctrl.AreaCounter == p_peer_state->AreaCounter, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_22); /* 本地通信状态,主线程2取同步过*/ CM_RE_ASSERT(s_2x2_state_Ctrl.LastRxInputSysCyc == p_peer_state->LastRxInputSysCyc, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_7); CM_RE_ASSERT(s_2x2_state_Ctrl.LastFollowCyc == p_peer_state->LastFollowCyc, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_8); @@ -282,6 +400,9 @@ static void s_State_2xBefore_2oo2Sync(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,OUT S /*同步按钮状态*/ s_2x2_state_Ctrl.PeerSwitchState = p_peer_state->LocalSwitchState; s_2x2_state_Ctrl.PeerAIDSwitchState = p_peer_state->LocalAIDSwitchState; + s_2x2_state_Ctrl.PeerAreaSwitchMode = p_peer_state->LocalAreaSwitchMode; + s_2x2_state_Ctrl.pulse[2][0] = p_peer_state->pulse[1][0]; + s_2x2_state_Ctrl.pulse[2][1] = p_peer_state->pulse[1][1]; /*同步输入IO*/ (void)CM_Memcpy(s_2x2_state_Ctrl.PeerInputIoState,10,p_peer_state->MineInputIoState,10); } @@ -331,6 +452,16 @@ static void s_State_2xAfter_2oo2Sync(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,OUT ST s_2x2_state_Ctrl.PartPeerSwitchState = p_peer_state->PartPeerSwitchState; s_2x2_state_Ctrl.PartnerAIDSwitchState = p_peer_state->PartnerAIDSwitchState; s_2x2_state_Ctrl.PartPeerAIDSwitchState = p_peer_state->PartPeerAIDSwitchState; + s_2x2_state_Ctrl.LocalAreaState = p_peer_state->LocalAreaState; + s_2x2_state_Ctrl.AnotherAreaState = p_peer_state->AnotherAreaState; + s_2x2_state_Ctrl.PartnerAreaSwitchMode = p_peer_state->PartnerAreaSwitchMode; + s_2x2_state_Ctrl.PartPeerAreaSwitchMode = p_peer_state->PartPeerAreaSwitchMode; + s_2x2_state_Ctrl.AreaIsAllowed = p_peer_state->AreaIsAllowed; + s_2x2_state_Ctrl.AreaCounter = p_peer_state->AreaCounter; + s_2x2_state_Ctrl.pulse[3][0] = p_peer_state->pulse[3][0]; + s_2x2_state_Ctrl.pulse[3][1] = p_peer_state->pulse[3][1]; + s_2x2_state_Ctrl.pulse[4][0] = p_peer_state->pulse[4][0]; + s_2x2_state_Ctrl.pulse[4][1] = p_peer_state->pulse[4][1]; /*更新对系IO状态*/ (void)CM_Memcpy(s_2x2_state_Ctrl.RmtMineInputIoState,10,p_peer_state->RmtMineInputIoState,10); (void)CM_Memcpy(s_2x2_state_Ctrl.RmtPeerInputIoState,10,p_peer_state->RmtPeerInputIoState,10); @@ -370,6 +501,11 @@ static void s_State_2xAfter_2oo2Sync(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,OUT ST s_2x2_state_Ctrl.ctrSwitchFlag = 0u; s_2x2_state_Ctrl.aidSwitchFlag = 0u; } + /*判断倒切按钮状态*/ + s_AreaSwitch_Sync(); + + /* 同步脉冲状态*/ + s_Pulse_Sync(); } /** * @brief 2x热备状态解析 @@ -409,6 +545,22 @@ static CM_BOOL s_State_2x2_Analysis(OUT STRU_2X2_STATE_CTRL_T *p_partner_state,C p_partner_state->PeerSwitchState = recvbuf[rcv_offset++]; p_partner_state->LocalAIDSwitchState = recvbuf[rcv_offset++]; p_partner_state->PeerAIDSwitchState = recvbuf[rcv_offset++]; + /* 区域状态*/ + p_partner_state->LocalAreaState = (ENUM_AREA_STATE_T)recvbuf[rcv_offset++]; + p_partner_state->AnotherAreaState = (ENUM_AREA_STATE_T)recvbuf[rcv_offset++]; + /* 倒切状态*/ + p_partner_state->LocalAreaSwitchMode = (ENUM_SWITCH_MODE_T)recvbuf[rcv_offset++]; + p_partner_state->PeerAreaSwitchMode = (ENUM_SWITCH_MODE_T)recvbuf[rcv_offset++]; + /* 脉冲状态*/ + p_partner_state->pulse[1][0] = (ENUM_PULSE_TYPE_T)recvbuf[rcv_offset++]; + p_partner_state->pulse[1][1] = (ENUM_PULSE_TYPE_T)recvbuf[rcv_offset++]; + p_partner_state->pulse[2][0] = (ENUM_PULSE_TYPE_T)recvbuf[rcv_offset++]; + p_partner_state->pulse[2][1] = (ENUM_PULSE_TYPE_T)recvbuf[rcv_offset++]; + /* 区域允许升主用标志*/ + p_partner_state->AreaIsAllowed = recvbuf[rcv_offset++]; + /* 区域升主用计数器*/ + p_partner_state->AreaCounter = CM_LongFromChar(&recvbuf[rcv_offset]); + rcv_offset += 4; /*接收IO数据*/ (void)CM_Memcpy(&p_partner_state->RmtMineInputIoState[0],10,&recvbuf[rcv_offset],10); rcv_offset += 10u; @@ -451,6 +603,22 @@ static CM_BOOL s_State_2x2_Analysis(OUT STRU_2X2_STATE_CTRL_T *p_partner_state,C s_2x2_state_Ctrl.PartPeerSwitchState = p_partner_state->PeerSwitchState; s_2x2_state_Ctrl.PartnerAIDSwitchState = p_partner_state->LocalAIDSwitchState; s_2x2_state_Ctrl.PartPeerAIDSwitchState = p_partner_state->PeerAIDSwitchState; + /* 倒切按钮状态*/ + s_2x2_state_Ctrl.PartnerAreaSwitchMode = p_partner_state->LocalAreaSwitchMode; + s_2x2_state_Ctrl.PartPeerAreaSwitchMode = p_partner_state->PeerAreaSwitchMode; + /* 脉冲状态*/ + s_2x2_state_Ctrl.pulse[3][0] = p_partner_state->pulse[1][0]; + s_2x2_state_Ctrl.pulse[3][1] = p_partner_state->pulse[1][1]; + s_2x2_state_Ctrl.pulse[4][0] = p_partner_state->pulse[2][0]; + s_2x2_state_Ctrl.pulse[4][1] = p_partner_state->pulse[2][1]; + /*非主系记录状态*/ + if(ENUM_2x2_MASTER == SFM_2x2_GetPartner2x2State()) + { + s_2x2_state_Ctrl.LocalAreaState = p_partner_state->LocalAreaState; + s_2x2_state_Ctrl.AnotherAreaState = p_partner_state->AnotherAreaState; + s_2x2_state_Ctrl.AreaIsAllowed = p_partner_state->AreaIsAllowed; + s_2x2_state_Ctrl.AreaCounter = p_partner_state->AreaCounter; + } /*记录对系IO状态*/ (void)CM_Memcpy(s_2x2_state_Ctrl.RmtMineInputIoState,10,p_partner_state->RmtMineInputIoState,10); (void)CM_Memcpy(s_2x2_state_Ctrl.RmtPeerInputIoState,10,p_partner_state->RmtPeerInputIoState,10); @@ -535,6 +703,22 @@ static ENUM_CM_RETURN s_State_2x2Sync(OUT STRU_2X2_STATE_CTRL_T *p_partner_state /*AID切系状态*/ sendbuf[send_offset++] = s_2x2_state_Ctrl.LocalAIDSwitchState; sendbuf[send_offset++] = s_2x2_state_Ctrl.PeerAIDSwitchState; + /*区域状态*/ + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.LocalAreaState; + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.AnotherAreaState; + /* 倒切按钮状态*/ + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.LocalAreaSwitchMode; + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.PeerAreaSwitchMode; + /* 脉冲状态*/ + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.pulse[1][0]; + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.pulse[1][1]; + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.pulse[2][0]; + sendbuf[send_offset++] = (CM_UINT8)s_2x2_state_Ctrl.pulse[2][1]; + /* 区域允许升主标志*/ + sendbuf[send_offset++] = s_2x2_state_Ctrl.AreaIsAllowed; + /* 区域升主计数器*/ + CM_LongToChar(s_2x2_state_Ctrl.AreaCounter, &sendbuf[send_offset]); + send_offset += 4; /*IO状态组包*/ (void)CM_Memcpy(&sendbuf[send_offset],10,s_2x2_state_Ctrl.MineInputIoState,10); send_offset += 10u; @@ -686,6 +870,7 @@ static void s_State_Transition(void) s_2x2_state_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN; /*通信SN号清空-防止对系重新上电后不接收新的SN号*/ s_2x2_state_Ctrl.RxSN = 0u; + s_2x2_state_Ctrl.RxStateSysCyc = 0u; } else { @@ -765,7 +950,7 @@ static void s_State_Transition(void) /*如果自己将离开离线状态,复位离线计时器*/ s_2x2_state_Ctrl.offLineCounter = 0u; } - else if ((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || (ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState)) + else if (((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || (ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState)) && (CM_TRUE == s_2x2_state_Ctrl.preMasterAllowed)) { /*如果对系宕机或离线,累积离线计时*/ if (s_2x2_state_Ctrl.offLineCounter <= (MSCP_2x2_OFFLINE_WAIT * (s_2x2_thread_Ctrl.number_Cyc - 1u))) @@ -842,22 +1027,22 @@ static void s_State_Transition(void) /*- 返回 */ break; case ENUM_2x2_MASTER:/*-< 主系 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; /* 主系降离线后,之后出现双离线可通过预升主升主*/ + if(s_2x2_state_Ctrl.flag_Mf_Ss == 1u && ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) + { + s_2x2_state_Ctrl.areaHealthCounter++; + } + else + { + s_2x2_state_Ctrl.areaHealthCounter = 0u; + } /*如果健康度表示需要切系,则自己降离线*/ /*- 自己是否健康度不足 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { /*- 本系降离线 */ s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); #if 0 s_2x2_state_Ctrl.RxBaseFollowSysCyc = 0u; /**< 收到的对系跟随数据的周期号,2oo2交换 */ s_2x2_state_Ctrl.RxAppFollowSysCyc = 0u; /**< 收到的对系应用跟随数据的周期号,2oo2交换 */ @@ -899,46 +1084,47 @@ static void s_State_Transition(void) } } - else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && + else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LastPartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.PartnerSwitchState) && (1u == s_2x2_state_Ctrl.ctrSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 检测到对系是备系,且双系切系按钮状态为ENUM_2x2_SWITCH_OPEN,主系降为备系*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(SWITCH)\n"); } else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (1u == s_2x2_state_Ctrl.aidSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 检测到对系是备系,且允许AID切系, 主系降为备系*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(AID SWITCH)\n"); } + else if(s_2x2_state_Ctrl.areaHealthCounter >= (10u * (s_2x2_thread_Ctrl.number_Cyc - 1u))) + { + /* 主系通信健康度切系*/ + s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; + SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(Area Unhealthy)\n"); + } else { /*- 无处理 */ } + if(ENUM_2x2_MASTER != s_2x2_state_Ctrl.LocalState) + { + s_2x2_state_Ctrl.areaHealthCounter = 0u; + } /*- 返回 */ break; case ENUM_2x2_SLAVE:/*-< 备系 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_FALSE; /* 备系降离线后,禁止通过预升主升主*/ + if(s_2x2_state_Ctrl.flag_Mf_Ss == 1u && ENUM_2x2_MASTER == s_2x2_state_Ctrl.PartnerState) + { + s_2x2_state_Ctrl.areaHealthCounter++; + } + else + { + s_2x2_state_Ctrl.areaHealthCounter = 0u; + } /*- 自己是否健康度不足 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { @@ -958,6 +1144,7 @@ static void s_State_Transition(void) (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineUartOKCount[0],0u)) && (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u))) { + /*前两个周期是否存在中断-本周期串口是否正常-并且对系不是主系则升主*/ if( /*与当前周期差3-5认为正常,超过阈值认为不同时断线,通信故障*/ (MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) && @@ -967,6 +1154,11 @@ static void s_State_Transition(void) { /*不存在断线,判断为宕机或断电升主*/ /*- 本系升主 */ + if(ENUM_2x2_SLAVE != s_2x2_state_Ctrl.LastLocalState && ENUM_2x2_MASTER != s_2x2_state_Ctrl.LastLocalState) + { + /* 升备后应用还没有成功跟随过,禁止升主,主系宕机,跟随宕机*/ + CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_6); + } s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; @@ -980,6 +1172,7 @@ static void s_State_Transition(void) s_2x2_state_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN; /*通信SN号清空-防止对系重新上电后不接收新的SN号*/ s_2x2_state_Ctrl.RxSN = 0u; + s_2x2_state_Ctrl.RxStateSysCyc = 0u; SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER!!!(ALL interrupt)\n"); } else @@ -994,42 +1187,37 @@ static void s_State_Transition(void) CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); } } - else if((ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) || - ((ENUM_2x2_MASTER != s_2x2_state_Ctrl.PartnerState) &&/*TODO 对系状态必须是最新的*/ - (ENUM_2x2_MASTER == s_2x2_state_Ctrl.LastLocalState))) + else if((ENUM_2x2_MASTER != s_2x2_state_Ctrl.PartnerState) &&/*TODO 对系状态必须是最新的*/ + (ENUM_2x2_MASTER == s_2x2_state_Ctrl.LastLocalState)) { s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(ROLLBACK\n"); } + else if(ENUM_2x2_OFFLINE == s_2x2_state_Ctrl.PartnerState) + { + if(ENUM_2x2_SLAVE != s_2x2_state_Ctrl.LastLocalState) + { + s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; + SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(Master OFFLINE SLAVE DOWN\n"); + } + else + { + s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; + s_2x2_CloseSwitchFlag(); + SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(Master OFFLINE SLAVE UP\n"); + } + } /*- 与主系输出不一致 或应用跟随数据不一致*/ else if((1u == s_2x2_state_Ctrl.OutPutCheckFailFlag) || (1u == s_2x2_state_Ctrl.AppFollowCmpFlag)) { s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>OFFLINE(OutPut failed)\n"); - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); } else if((ENUM_2x2_MASTER == s_2x2_state_Ctrl.PartnerState) && ((1u == s_2x2_state_Ctrl.aidSwitchFlag)||(1u == s_2x2_state_Ctrl.ctrSwitchFlag)) && - (0u == s_2x2_state_Ctrl.MicroCyc)) + (0u == s_2x2_state_Ctrl.MicroCyc) && (ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LastLocalState)) { /*是否满足至少一个以太网和任一通道*/ if(((ENUM_CM_TRUE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineComOKCount[0],0u)) && @@ -1051,16 +1239,14 @@ static void s_State_Transition(void) /*报警禁止切系*/ SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>SLAVE(NOT MASTER)\n"); } - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); + } + else if(s_2x2_state_Ctrl.areaHealthCounter >= (10u * (s_2x2_thread_Ctrl.number_Cyc - 1u))) + { + /* 备系通信健康度切系*/ + s_2x2_state_Ctrl.LocalState = ENUM_2x2_MASTER; + SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>MASTER(Area Unhealthy)\n"); + s_2x2_CloseSwitchFlag(); } /*- 与对系是否同步超时 */ else if ((s_2x2_state_Ctrl.SysCyc - s_2x2_state_Ctrl.LastCheckOKCount) >= MSCP_2X2_SYNC_TIMEOUT_CYC) @@ -1078,6 +1264,10 @@ static void s_State_Transition(void) { /* 无处理 */ } + if(ENUM_2x2_SLAVE != s_2x2_state_Ctrl.LocalState) + { + s_2x2_state_Ctrl.areaHealthCounter = 0u; + } SFM_LOG_MSG_2X("Transition:SLAVE:live time:%d\n", s_2x2_state_Ctrl.SysCyc - s_2x2_state_Ctrl.LastCheckOKCount); /*- 返回 */ break; @@ -1123,10 +1313,18 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 无处理*/ } /*微小周期执行*/ - for(s_2x2_state_Ctrl.MicroCyc = 0;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) + for(s_2x2_state_Ctrl.MicroCyc = 0u;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) { /*- 记录起始时间*/ sTick = CM_GetTick(); + /*获取脉冲状态*/ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + /*获取脉冲状态*/ + s_Area_Pulse_Get(); + /* 检查区域按钮状态*/ + s_Area_Switch_Get(); + } /*检查按钮状态*/ s_State_Switch(); curTick[0] = CM_GetTick(); @@ -1175,12 +1373,13 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 记录当前时间*/ CM_Sleep(1); curTick[5] = CM_GetTick(); - }while(((curTick[5] - sTick) < MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION) && (s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc-1u) /*ms*/); + }while(((curTick[5] - sTick) < (MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION)) && (s_2x2_state_Ctrl.MicroCyc < (s_2x2_thread_Ctrl.number_Cyc-1u)) /*ms*/); SFM_LOG_MSG_2X("2x2_StateChange_Thread[%d],ST:%dms,2T1:%dms,XT:%dms,2T2:%dms,TT:%dms,OT:%dms,M:%d,S:%d\n",s_2x2_state_Ctrl.MicroCyc, (curTick[0] - sTick)/CM_UNSIGNED_MILLION,(curTick[1] - sTick)/CM_UNSIGNED_MILLION, (curTick[2] - sTick)/CM_UNSIGNED_MILLION,(curTick[3] - sTick)/CM_UNSIGNED_MILLION, (curTick[4] - sTick)/CM_UNSIGNED_MILLION,(curTick[5] - sTick)/CM_UNSIGNED_MILLION, s_2x2_state_Ctrl.LocalState,s_2x2_state_Ctrl.PartnerState); + SFM_LOG_MSG_2X("sTick:%llu, Tick4:%llu, Tick5:%llu\n", sTick, curTick[4], curTick[5]); /*记录暗文日志*/ (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2X2_THREAD_SHOWTIME,7u, sizeof(CM_UINT8),s_2x2_state_Ctrl.MicroCyc, @@ -1193,7 +1392,6 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 板卡硬件自检 3次*/ PFM_BoardCheck_TolerateThreetimes(); } - /*发送2x状态结束信号量*/ CM_Sem_Post(s_2x2_thread_Ctrl.m_Stop); } @@ -1284,9 +1482,23 @@ void SFM_2x2_ChangeState(void) { static CM_UINT8 AIDEnable_Cut = 0u; STRU_2X2_CTRL_T peerCtrl = { 0 }; /* 邻机热备状态 */ + STRU_AREA_STATE_CTRL_T* AreaStateCtrl = SFM_Area_BackPointer_Ctrl(); /* 区域状态控制*/ /*- 等待结束信号量*/ CM_Sem_Wait(s_2x2_thread_Ctrl.m_Stop); MSCP_LOG_MSG("SFM_2x2_ChangeState start\n"); + + if(0x00 != g_PFM_Cfg.M_Area_Enable) + { + /* 区域状态转换*/ + s_2x2_Ctrl.AreaSwitchMode = s_2x2_state_Ctrl.AreaSwitchMode; + s_Area_Transition(); + } + else + { + /* 无处理*/ + } + + /*- 执行最后的切系逻辑*/ s_2x2_Ctrl.MineComState = MSCP_Get_2X_VagueCom_State(&s_2x2_state_Ctrl.MineComOKCount[0]); /**< 本机通信状态,2oo2交换 */ s_2x2_Ctrl.PeerComState = MSCP_Get_2X_VagueCom_State(&s_2x2_state_Ctrl.PeerComOKCount[0]); /**< 邻机通信状态,2oo2交换 */ @@ -1345,6 +1557,31 @@ void SFM_2x2_ChangeState(void) s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_DISABLE; s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_DISABLE; + + /* 同步区域状态*/ + /* 主线程->区域协程*/ + AreaStateCtrl->LastLocalAreaState = s_2x2_Ctrl.LocalAreaState; + AreaStateCtrl->LastAnotherAreaState = s_2x2_Ctrl.AnotherAreaState; + /* 区域状态与校时状态同步*/ + s_2x2_state_Ctrl.LocalAreaState = AreaStateCtrl->LocalAreaState; + s_2x2_state_Ctrl.AnotherAreaState = AreaStateCtrl->AnotherAreaState; + s_2x2_Ctrl.LocalAreaState = AreaStateCtrl->LocalAreaState; + s_2x2_Ctrl.AnotherAreaState = AreaStateCtrl->AnotherAreaState; + + /* 2x线程->区域协程*/ + AreaStateCtrl->Local2x2State = s_2x2_state_Ctrl.LocalState; + AreaStateCtrl->Partner2x2State = s_2x2_state_Ctrl.PartnerState; + AreaStateCtrl->TimeSyncFlag_2x2 = s_2x2_state_Ctrl.TimeSyncFlag; + if(1u == AreaStateCtrl->AllInterrupt && ENUM_AREA_UNAVAILABLE == s_2x2_Ctrl.LocalAreaState) + { + /* 若区域通信完全(脉冲与udp)中断,更新区域校时标志为校时失败(防止通信中断导致的校时标志不更新)*/ + s_2x2_Ctrl.TimeSyncFlag_Area = 0u; + } + AreaStateCtrl->TimeSyncFlag_Area = s_2x2_Ctrl.TimeSyncFlag_Area; + /* 区域协程->2x线程*/ + s_2x2_state_Ctrl.flag_Mf_Ss = AreaStateCtrl->flag_Mf_Ss; + SFM_SetPulse(s_2x2_Ctrl.LocalAreaState); + /*- 如果对系宕机,清空本系接收标志*/ if(ENUM_2x2_SHUTDOWN == s_2x2_Ctrl.PartnerState) { @@ -1364,11 +1601,20 @@ void SFM_2x2_ChangeState(void) MSCP_LOG_MSG("timecurr 16.0.0 = %lld us\n", NOW_USED_TIME); /*- 更新系统周期号*/ s_2x2_state_Ctrl.SysCyc = SFM_2x2_GetSysCount(); /*系统周期号*/ + s_2x2_state_Ctrl.AreaCyc = SFM_Area_GetSysCount(); + AreaStateCtrl->SysCyc = SFM_Area_GetSysCount(); MSCP_LOG_MSG("timecurr 16.0.3 = %lld us\n", NOW_USED_TIME); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_LOCAL, 1U, &s_2x2_Ctrl.LocalState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PARTNER, 1U, &s_2x2_Ctrl.PartnerState); + if(0x00 != g_PFM_Cfg.M_Area_Enable && ENUM_2x2_MASTER == s_2x2_Ctrl.LocalState) + { + /* 主系发送区域状态与倒切开关状态*/ + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_AREA, 1U, &s_2x2_Ctrl.LocalAreaState); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_AREA_SWITCH, 1U, &s_2x2_Ctrl.AreaSwitchMode); + } SFM_2x2_LOG_Transition(); + SFM_AREA_LOG_Transition(); MSCP_LOG_MSG("timecurr 16.0.4 = %lld us\n", NOW_USED_TIME); MSCP_LOG_MSG("SFM_2x2_ChangeState stop\n"); } @@ -1393,6 +1639,7 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U CM_UINT8 peerBuf[100] = { 0u }; /* 邻机报文缓冲区 */ ENUM_CM_RETURN checkRet = ENUM_CM_NULL; CM_BOOL rtnThread = CM_FALSE; + CM_UINT8 i = 0u; /* 循环变量*/ /*- 入参检查 */ CM_ASSERT((NULL != VitalBuf) && (NULL != pCycTick), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_7); /*- 是否开启2x2功能 */ @@ -1435,12 +1682,42 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U CM_Sem_Init(&s_2x2_thread_Ctrl.m_Start); CM_Sem_Init(&s_2x2_thread_Ctrl.m_Stop); + /* 区域状态有关初始化*/ + s_2x2_Ctrl.AreaCycSync = 0u; + s_2x2_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + s_2x2_Ctrl.AnotherAreaState = ENUM_AREA_UNAVAILABLE; + s_2x2_Ctrl.LastLocalAreaState = s_2x2_Ctrl.LocalAreaState; + s_2x2_Ctrl.LastAnotherAreaState = s_2x2_Ctrl.AnotherAreaState; + s_2x2_Ctrl.TimeSyncFlag_Area = 0u; + s_2x2_Ctrl.AreaTimeOffset = 0; + + s_2x2_state_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + s_2x2_state_Ctrl.AnotherAreaState = ENUM_AREA_UNAVAILABLE; + for(i = 0u; i < 5u; i++) + { + s_2x2_state_Ctrl.pulse[i][0u] = ENUM_PULSE_ERROR; + s_2x2_state_Ctrl.pulse[i][1u] = ENUM_PULSE_ERROR; + } + s_2x2_state_Ctrl.pulseFeedBack = ENUM_PULSE_ERROR; + s_2x2_state_Ctrl.flag_Mf_Ss = 0u; + s_2x2_state_Ctrl.LocalAreaSwitchMode = ENUM_SWITCH_ERROR; + s_2x2_state_Ctrl.PeerAreaSwitchMode = ENUM_SWITCH_ERROR; + s_2x2_state_Ctrl.PartnerAreaSwitchMode = ENUM_SWITCH_ERROR; + s_2x2_state_Ctrl.PartPeerAreaSwitchMode = ENUM_SWITCH_ERROR; + s_2x2_state_Ctrl.AreaSwitchMode = ENUM_SWITCH_ERROR; + s_2x2_state_Ctrl.AreaIsAllowed = 1u; + s_2x2_state_Ctrl.AreaCounter = 0u; + s_2x2_state_Ctrl.areaHealthCounter = 0u; + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; + /*初始化应用跟随数据缓冲区*/ g_TxAppFollow_len = 4; CM_LongToChar(0u, g_TxAppFollow); checkRet = CM_RB_Init(&s_2x2_TmRing, (CM_UINT32)SFM_2x2_TM_RING_SIZE); CM_ASSERT(ENUM_CM_TRUE == checkRet, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + checkRet = CM_RB_Init(&s_Area_TmRing, (CM_UINT32)SFM_Area_TM_RING_SIZE); + CM_ASSERT(ENUM_CM_TRUE == checkRet, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_10); /* 系间时钟同步 */ /*- 生成系间同步报文 */ /* @@ -1499,11 +1776,11 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U { offset = (myOffset + peerOffset) / 2u; } - else if (myOffset < MSCP_CYC_TIME * CM_UNSIGNED_MILLION) + else if (myOffset < (MSCP_CYC_TIME * CM_UNSIGNED_MILLION)) { offset = myOffset; } - else if (peerOffset < MSCP_CYC_TIME * CM_UNSIGNED_MILLION) + else if (peerOffset < (MSCP_CYC_TIME * CM_UNSIGNED_MILLION)) { offset = peerOffset; } @@ -1614,7 +1891,6 @@ void SFM_2x2_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_2x2_MSG (void)CFM_2x2_DataSend(s_2x2_Cache,(CM_INT32)CM_UNSIGNED_INT_EXP(29u + FrameLen)); /*交给通信层发送*/ PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); } - /** * @brief 2x2周期同步 * @param cycTick 周期开始时刻 @@ -1846,6 +2122,151 @@ void SFM_2x2_Sync(IN CM_UINT64 cycTick, OUT CM_INT64 *pOffset) } } +/** +* @brief 区域周期同步 +* @param cycTick 周期开始时刻 +*/ +void SFM_Area_Sync(IN CM_UINT64 cycTick, OUT CM_INT64 *pOffset) +{ + /*本周期同步标志*/ + static ENUM_CM_RETURN g_syncFlag = ENUM_CM_FALSE; + static CM_INT32 s_count = 0; + static CM_INT64 s_sum = 0; + static CM_INT32 s_nsub = 0; + static CM_INT32 s_nadd = 0; + if(NULL == pOffset) + { + MSCP_LOG_MSG("ERROR: NULL !!! \n"); + CM_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); + /*- 无需操作 */ + } + else + { + /*- 变量初始化 */ + CM_INT64 myDelay = 0; /* 本机延迟 */ + CM_INT64 myOffset = 0; /* 本机偏移 */ + CM_INT64 peerOffset = 0; /* 本机偏移 */ + CM_INT64 aveOffset = 0; /* 平均偏移量 */ + CM_INT64 offset = 0; /* 修正量 */ + CM_INT64 cyctime_ns = 0; /* 周期时间ns值 */ + CM_INT64 val = 0; /* 临时变量 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 函数返回值 */ + ENUM_2x2_STATE_T state_2x2 = SFM_2x2_GetLocal2x2State(); /* 本系热备状态 */ + ENUM_AREA_STATE_T state_area = SFM_Area_GetLocalAreaState(); /* 本系热备状态 */ + *pOffset = 0; + MSCP_LOG_MSG("area:Obtain department status Obtain department status = %d\n",state_2x2); + if(ENUM_2x2_MASTER == state_2x2 && ENUM_AREA_MASTER == state_area) + { + /* 主用主系发请求*/ + /*发送时间同步请求T1-1v2*/ + CFM_Area_TimeReq(); + s_2x2_Ctrl.TimeSyncFlag_Area = CM_TRUE; + } + else if(ENUM_2x2_MASTER == state_2x2) + { + /*非主用主系校时*/ + /*计算偏差时间*/ + /*TODO 统计、调整*/ + myOffset = CM_INT64_MAX; + rt = CFM_Area_TimeGet(&myDelay, &myOffset); + /*- 是不是修正完的下一周期,如果是则offset无效 */ + if(ENUM_CM_TRUE == g_syncFlag) + { + myOffset = CM_INT64_MAX; + g_syncFlag = ENUM_CM_FALSE; + } + else + { + /*- 无需操作 */ + } + MSCP_LOG_MSG("area:myOffset = %lld\n",myOffset); + if (g_PFM_Cfg.M_2oo2_Enable == 0x55u) + { + rt = s_TimeSync_2oo2(&myOffset, &peerOffset); + } + else + { + /*- 无需操作 */ + } + if (ENUM_CM_TRUE == rt) + { + s_TimeSync_AreaSyncFlag(myOffset, (CM_INT64)20); + /*快速时间同步,如果是离线不算历史累计*/ + if(ENUM_AREA_UNAVAILABLE == s_2x2_Ctrl.LocalAreaState) + { + aveOffset = myOffset; + g_syncFlag = ENUM_CM_TRUE; + } + else + { + (void)CM_RB_Get(&s_Area_TmRing, (CM_UINT16)SFM_Area_TM_RING_SIZE, &val); + s_sum -= val; + (void)CM_RB_Write(&s_Area_TmRing, myOffset); + s_sum += myOffset; + s_count++; + MSCP_LOG_MSG("area:Whether effective calibration results have been achieved %lld(ns)\n",s_sum); + if (s_count >= SFM_Area_TM_RING_SIZE) + { + aveOffset = (s_sum) / (CM_INT64)SFM_Area_TM_RING_SIZE; + g_syncFlag = ENUM_CM_TRUE; + } + else + { + + } + } + if (ENUM_CM_TRUE == g_syncFlag) + { + if (aveOffset >= (SFM_Area_TM_FIX_VAL * CM_MILLION)) + { + offset = -aveOffset; + MSCP_LOG_MSG("area:offset = %lld\n",offset); + s_nsub++; + s_count = 0; + } + else if (aveOffset <= (-SFM_Area_TM_FIX_VAL * CM_MILLION)) + { + offset = -aveOffset; + MSCP_LOG_MSG("area:offset = %lld\n",offset); + s_nadd++; + s_count = 0; + } + else + { + /*- 无需操作 */ + } + *pOffset = s_TimeSync_CalcOffset(offset, (CM_INT64)SFM_Area_TM_FIX_VAL); + + /*- 记录同步结果 */ + MSCP_LOG_MSG("area:sync:%lld,%lld,%lld(us)\n", myOffset / 1000, peerOffset / 1000, *pOffset/1000); + MSCP_LOG_MSG("area:offset_sum:%lld(us),%d,%d\n", s_sum / 1000, s_nadd, s_nsub); + /*记录暗文日志*/ + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2X2_SYNC_TIME,8u, + sizeof(CM_UINT8),s_2x2_Ctrl.TimeSyncFlag_Area, + sizeof(CM_UINT32),SFM_2x2_GetSysCount(), + sizeof(CM_UINT32),myOffset / 1000, + sizeof(CM_UINT32),peerOffset / 1000, + sizeof(CM_UINT32),*pOffset / 1000, + sizeof(CM_UINT32),s_sum / 1000, + sizeof(CM_UINT32),s_nadd, + sizeof(CM_UINT32),s_nsub); + } + else + { + /*- 无需操作 */ + } + } + else + { + /*- 无需操作 */ + } + } + else + { + + } + } +} /** * @brief 2x2接收 * @see :: SFM_2x2_Send @@ -1926,7 +2347,7 @@ static void s_2x2_Recv(void) /*- 分帧接收跟随报文 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_2); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_3); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxBaseFollow, &g_RxBaseFollow_len, (CM_UINT32)sizeof(g_RxBaseFollow)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxBaseFollow, &g_RxBaseFollow_len, (CM_UINT32)sizeof(g_RxBaseFollow)); /*- 是否收齐了跟随报文 */ if (ENUM_CM_TRUE == ret) { @@ -1960,7 +2381,7 @@ static void s_2x2_Recv(void) /*- 分帧接收跟随报文 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_5); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_6); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollow, &g_RxAppFollow_len, (CM_UINT32)sizeof(g_RxAppFollow)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollow, &g_RxAppFollow_len, (CM_UINT32)sizeof(g_RxAppFollow)); /*- 是否收齐了跟随报文 */ if (ENUM_CM_TRUE == ret) { @@ -1993,7 +2414,7 @@ static void s_2x2_Recv(void) /*- 分帧接收跟随报文 */ CM_RE_ASSERT(FrameNum <= (SFM_FOLLOW_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_17); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_19); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW_CRC, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollowCrc, &g_RxAppFollowCrc_len, (CM_UINT32)sizeof(g_RxAppFollowCrc)); + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_APP_FOLLOW_CRC, FrameNum, FrameIndex, pData, DataLen, g_RxAppFollowCrc, &g_RxAppFollowCrc_len, (CM_UINT32)sizeof(g_RxAppFollowCrc)); /*- 是否收齐了跟随报文 */ if (ENUM_CM_TRUE == ret) { @@ -2061,7 +2482,7 @@ static void s_2x2_Recv(void) /*- 分帧接收数据同步报文 */ CM_RE_ASSERT(FrameNum <= (SFM_OUTNETSAFE_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_11); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_12); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, g_2x2oo2_rx[g_2x2oo2_base][type].p_rmt_mine_buf, &g_2x2oo2_rx[g_2x2oo2_base][type].rmt_mine_len, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][type].buf_size); @@ -2104,7 +2525,7 @@ static void s_2x2_Recv(void) /*- 分帧接收数据同步报文 */ CM_RE_ASSERT(FrameNum <= (SFM_OUTNETSAFE_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_15); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_16); - ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, + ret = SFM_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].p_rmt_peer_buf, &g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].rmt_peer_len, (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].buf_size); @@ -2186,9 +2607,11 @@ void SFM_2x2_InputProc(void) STRU_2X2_CTRL_T peerCtrl; /* 邻机热备状态 */ CM_INT32 ret = 0; /* 临时变量 */ CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 系统周期号 */ + CM_UINT32 areaCyc = SFM_Area_GetSysCount(); /* 区域周期号*/ CM_UINT32 len_prtcl = 0u; /* 协议跟随数据长度 */ CM_UINT32 len_sfprtcl = 0u; /* 协议跟随数据长度 */ CM_UINT32 len_pfm = 0u; /* 平台跟随数据长度 */ + CM_UINT32 offset = 0u; /* 解包时使用offset*/ CM_UINT64 sTick = 0u; /* 起始Tick */ CM_UINT64 delta_Tick = 0u; /* Tickze增量 */ CM_UINT64 curTick = 0u; /* 当前Tick */ @@ -2207,11 +2630,17 @@ void SFM_2x2_InputProc(void) g_TxBaseFollow_len += len; /*- 填写平台跟随数据 */ /*- 填写平台跟随数据 */ - CM_RE_ASSERT(g_TxBaseFollow_len <= ((CM_INT32)sizeof(g_TxBaseFollow) - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_9);/*输出缓冲至少空闲8字节*/ - CM_LongToChar(8u, g_TxBaseFollow + g_TxBaseFollow_len); - CM_LongToChar(sysCyc, g_TxBaseFollow + g_TxBaseFollow_len + 4u); - CM_LongToChar(SFM_GetTxSn(), g_TxBaseFollow + g_TxBaseFollow_len + 8u); - g_TxBaseFollow_len += 12u; + CM_RE_ASSERT(g_TxBaseFollow_len <= ((CM_INT32)sizeof(g_TxBaseFollow) - 25u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_9);/*输出缓冲至少空闲8字节*/ + CM_LongToChar(21u, g_TxBaseFollow + g_TxBaseFollow_len); + CM_LongToChar(sysCyc, g_TxBaseFollow + g_TxBaseFollow_len + 4); + CM_LongToChar(SFM_GetTxSn(), g_TxBaseFollow + g_TxBaseFollow_len + 8); + g_TxBaseFollow_len += 12; + /*- 填写区域周期号*/ + CM_LongToChar(areaCyc, g_TxBaseFollow + g_TxBaseFollow_len); + g_TxBaseFollow_len += 4; + g_TxBaseFollow[g_TxBaseFollow_len++] = s_2x2_Ctrl.TimeSyncFlag_Area; + CM_64ToChar((CM_UINT64)s_2x2_Ctrl.AreaTimeOffset, g_TxBaseFollow + g_TxBaseFollow_len); + g_TxBaseFollow_len += 8; /*- 发送 */ SFM_2x2_Send(g_TxBaseFollow, (CM_UINT32)g_TxBaseFollow_len, ENUM_2x2_MSG_BASE_FOLLOW); } @@ -2304,6 +2733,7 @@ void SFM_2x2_InputProc(void) { if ((g_RxBaseFollow_len >= 12u) && (s_2x2_Ctrl.RxBaseFollowSysCyc > 0u))/*通过数据长度判断是否有新数据*/ { + offset = 0u; /*- 适配层协议数据跟随*/ len_prtcl = CM_LongFromChar(g_RxBaseFollow); CM_RE_ASSERT(len_prtcl <= ((CM_UINT32)g_RxBaseFollow_len - 4u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_3); @@ -2315,12 +2745,21 @@ void SFM_2x2_InputProc(void) SFM_SetSfpPrtclFollowData(len_sfprtcl, g_RxBaseFollow + 4u + len_prtcl + 4u); /*- 平台数据跟随*/ - len_pfm = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl + 4u); + len_pfm = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl + 4u + len_sfprtcl); CM_RE_ASSERT(len_pfm == ((CM_UINT32)g_RxBaseFollow_len - len_prtcl - len_sfprtcl - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_4); - CM_RE_ASSERT(len_pfm == 8u, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_5); + CM_RE_ASSERT(len_pfm == 21u, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_5); /*此处使用临时周期号接收,在周期末同步*/ - s_2x2_Ctrl.SysCycSync = CM_LongFromChar(g_RxBaseFollow + 12u + len_prtcl + len_sfprtcl); /* parasoft-suppress BD-PB-CHECKRET "此处无需检查CM_LongFromChar()的返回值" */ - SFM_SetTxSn(CM_LongFromChar(g_RxBaseFollow + 12u + len_prtcl + len_sfprtcl + 4u)); + offset = 12u + len_prtcl + len_sfprtcl; + s_2x2_Ctrl.SysCycSync = CM_LongFromChar(&g_RxBaseFollow[offset]); /* parasoft-suppress BD-PB-CHECKRET "此处无需检查CM_LongFromChar()的返回值" */ + offset += 4u; + SFM_SetTxSn(CM_LongFromChar(&g_RxBaseFollow[offset])); + offset += 4u; + s_2x2_Ctrl.AreaCycSync = CM_LongFromChar(&g_RxBaseFollow[offset]); + offset += 4u; + s_2x2_Ctrl.TimeSyncFlag_Area = g_RxBaseFollow[offset]; + offset += 1u; + s_2x2_Ctrl.AreaTimeOffset = (CM_INT64)CM_64FromChar(&g_RxBaseFollow[offset]); + offset += 8u; /*- 本周期是否跟随成功 */ /*- 记录本次跟随时间 */ @@ -2413,6 +2852,7 @@ void SFM_2x2_OutputProc(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLen) if (s_2x2_Ctrl.RxCheckSysCyc >= sysCyc) { /*- 退出循环 */ + MSCP_LOG_MSG("s_2x2_Ctrl.RxCheckSysCyc:%d, sysCyc:%d\n", s_2x2_Ctrl.RxCheckSysCyc, sysCyc); break; } else @@ -2590,7 +3030,7 @@ static void SFM_2x2_RecvAppFollowData(CM_UINT32 sysCyc, ENUM_2x2_STATE_T stat) ret = SFM_2oo2_Exchange_Currency(g_RxAppFollow, g_RxAppFollow_len, g_RxAppFollow, 0u, ENUM_2oo2_END_EX); } - CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT(0 == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1); } /*- 是否需要从邻机接收应用同步数据 */ else if (s_2x2_Ctrl.RxAppFollowSysCyc < peerCtrl.RxAppFollowSysCyc) @@ -2649,7 +3089,7 @@ void SFM_2x2_EndProc(void) else { SFM_2x2_Send(g_TxAppFollow + 4, (CM_UINT32)g_TxAppFollow_len, ENUM_2x2_MSG_APP_FOLLOW); - MSCP_LOG_MSG("Iam master partner is offline send appfollow\n"); + MSCP_LOG_MSG("Iam master partner is offline send appfollow, cyc:%d, len = %d, reallen = %d\n", g_MSCP_SysCount, g_TxAppFollow_len, CM_LongFromChar(g_TxAppFollow + 4)); } curTickTest[1] = CM_GetTick(); break; @@ -2702,15 +3142,6 @@ void SFM_2x2_EndProc(void) break; } MSCP_LOG_MSG("slef stata is %d use time = %lld\n",stat,(curTickTest[1] - curTickTest[0]) / 1000u); - /*更新周期号*/ - if ((s_2x2_Ctrl.RxBaseFollowSysCyc >= sysCyc) && (ENUM_2x2_MASTER != stat)) - { - g_MSCP_SysCount = s_2x2_Ctrl.SysCycSync; - } - else - { - ; - } /*记录暗文日志*/ (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2X2_APP_FOLLOW_HANDLE,2u, sizeof(CM_UINT32),s_2x2_Ctrl.RxAppFollowSysCyc, @@ -2718,6 +3149,8 @@ void SFM_2x2_EndProc(void) /*主线程状态同步到应用*/ s_2x2_Ctrl.LastLocalState = s_2x2_Ctrl.LocalState; s_2x2_Ctrl.LastPartnerState = s_2x2_Ctrl.PartnerState; + s_2x2_Ctrl.LastLocalAreaState = s_2x2_Ctrl.LocalAreaState; + s_2x2_Ctrl.LastAnotherAreaState = s_2x2_Ctrl.AnotherAreaState; (void)SFM_2x2_SyncIoInput(s_2x2_InputIoState,40u); /*- 清空待发送的应用跟随数据,待应用下周期填写 */ g_TxAppFollow_len = 4; @@ -2790,6 +3223,49 @@ ENUM_2x2_STATE_T SFM_2x2_GetLocal2x2State(void) /*- 输出本系热备状态 */ return CM_ATOMIC_LOAD(&s_2x2_Ctrl.LocalState); } +/** +* @brief 获取本区域状态 +* @return 本系区域状态 +* @details +*/ +ENUM_AREA_STATE_T SFM_Area_GetLocalAreaState(void) +{ + /*- 输出本系热备状态 */ + ENUM_AREA_STATE_T state = CM_ATOMIC_LOAD(&s_2x2_Ctrl.LocalAreaState); + SFM_SetAreaLed(state); + return state; +} +/** +* @brief 获取上一周期本区域状态 +* @return 本系区域状态 +* @details +*/ +ENUM_AREA_STATE_T SFM_Area_GetLastLocalAreaState(void) +{ + /*- 输出本系热备状态 */ + ENUM_AREA_STATE_T state = CM_ATOMIC_LOAD(&s_2x2_Ctrl.LastLocalAreaState); + return state; +} +/** +* @brief 获取另一区域状态 +* @return 区域状态 +* @details +*/ +ENUM_AREA_STATE_T SFM_Area_GetAnotherAreaState(void) +{ + ENUM_AREA_STATE_T state = CM_ATOMIC_LOAD(&s_2x2_Ctrl.AnotherAreaState); + return state; +} +/** +* @brief 获取另一区域状态 +* @return 区域状态 +* @details +*/ +ENUM_AREA_STATE_T SFM_Area_GetLastAnotherAreaState(void) +{ + ENUM_AREA_STATE_T state = CM_ATOMIC_LOAD(&s_2x2_Ctrl.LastAnotherAreaState); + return state; +} /** * @brief 获取对系热备状态 @@ -3063,7 +3539,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, 0, ENUM_2oo2_INPUT_EX); - CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_2); } else { @@ -3094,7 +3570,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_peer_buf, 0, ENUM_2oo2_INPUT_EX); - CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_3); } else if(peerCtrl->InPutDoublePassLen[i][0] > s_2x2_Ctrl.InPutDoublePassLen[i][1]) @@ -3121,7 +3597,7 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl) g_2x2oo2_rx[g_2x2oo2_base][i].p_rmt_mine_buf, 0, ENUM_2oo2_INPUT_EX); - CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_1); + CM_RE_ASSERT((0 == len), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_4); } else if(peerCtrl->InPutDoublePassLen[i][1] > s_2x2_Ctrl.InPutDoublePassLen[i][0]) { @@ -3403,4 +3879,327 @@ void SFM_2x2_SemPost(void) /* 无处理 */ } } +/** 4个CPU脉冲同步*/ +static void s_Pulse_Sync() +{ + CM_UINT32 i = 0u, j = 0u, jmax = 0u; /* 循环变量*/ + CM_INT32 pulseNum[5] = {0}; + CM_INT32 pulseNumMax = 0; + CM_INT32 errorThreshold = 0; + /*判断脉冲*/ + for(i = 0u; i <= 1u; i++) + { + /*下标0无脉冲,1初始化脉冲,2不可用,3备用,4主用,记录每种结果个数*/ + pulseNumMax = 0; + pulseNum[0] = 0; + pulseNum[1] = 0; + pulseNum[2] = 0; + pulseNum[3] = 0; + pulseNum[4] = 0; + if(ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState) + { + jmax = 3u; + errorThreshold = 2; + } + else + { + jmax = 5u; + errorThreshold = 3; + } + /* 记录4个CPU结果*/ + SFM_LOG_MSG_2X("Pulse mine:%d, peer:%d, partner:%d, partpeer:%d\n", s_2x2_state_Ctrl.pulse[1][i], s_2x2_state_Ctrl.pulse[2][i], + s_2x2_state_Ctrl.pulse[3][i], s_2x2_state_Ctrl.pulse[4][i]); + for(j = 1u; j < jmax; j++) + { + pulseNum[(CM_UINT32)s_2x2_state_Ctrl.pulse[j][i]] += 1; + } + /* 根据结果数量判断脉冲*/ + if(0 < pulseNum[4]) + { + /* 存在主用脉冲,认为主用*/ + s_2x2_state_Ctrl.pulse[0][i] = ENUM_PULSE_MASTER; + } + else if(errorThreshold <= pulseNum[0]) + { + /* 不存在主用脉冲,有3个及以上(一系宕机则2个)CPU没检测到脉冲,认为脉冲中断*/ + s_2x2_state_Ctrl.pulse[0][i] = ENUM_PULSE_ERROR; + } + else + { + s_2x2_state_Ctrl.pulse[0][i] = ENUM_PULSE_ERROR; + /* 不存在主用脉冲,至少2个CPU检测到脉冲*/ + for(j = 1u; j <= 3u; j++) + { + if(pulseNum[j] > pulseNumMax) + { + s_2x2_state_Ctrl.pulse[0][i] = (ENUM_PULSE_TYPE_T)j; + pulseNumMax = pulseNum[j]; + } + } + } + } +} +/* 4个CPU开关状态判断 在2x后的2取执行*/ +static void s_AreaSwitch_Sync() +{ + if(ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState) + { + /* 对系宕机*/ + if(s_2x2_state_Ctrl.LocalAreaSwitchMode == s_2x2_state_Ctrl.PeerAreaSwitchMode) + { + s_2x2_state_Ctrl.AreaSwitchMode = s_2x2_state_Ctrl.LocalAreaSwitchMode; + } + + } + else if((s_2x2_state_Ctrl.LocalAreaSwitchMode == s_2x2_state_Ctrl.PeerAreaSwitchMode) && + (s_2x2_state_Ctrl.PeerAreaSwitchMode == s_2x2_state_Ctrl.PartnerAreaSwitchMode) && + (s_2x2_state_Ctrl.PartnerAreaSwitchMode == s_2x2_state_Ctrl.PartPeerAreaSwitchMode)) + { + /* 无CPU宕机,四个CPU检测倒切状态均有效且相同*/ + s_2x2_state_Ctrl.AreaSwitchMode = s_2x2_state_Ctrl.LocalAreaSwitchMode; + } + else if((s_2x2_state_Ctrl.LocalAreaSwitchMode == s_2x2_state_Ctrl.PeerAreaSwitchMode) && + (ENUM_SWITCH_ERROR == s_2x2_state_Ctrl.PartnerAreaSwitchMode) && + (ENUM_SWITCH_ERROR == s_2x2_state_Ctrl.PartPeerAreaSwitchMode)) + { + /* 无CPU宕机,本系开关状态相同且对系开关状态均为ERROR,认为对系启动未达3s,未表决出开关状态,使用本系开关状态*/ + s_2x2_state_Ctrl.AreaSwitchMode = s_2x2_state_Ctrl.LocalAreaSwitchMode; + } + else if((s_2x2_state_Ctrl.PartnerAreaSwitchMode == s_2x2_state_Ctrl.PartPeerAreaSwitchMode) && + (ENUM_SWITCH_ERROR == s_2x2_state_Ctrl.LocalAreaSwitchMode) && + (ENUM_SWITCH_ERROR == s_2x2_state_Ctrl.PeerAreaSwitchMode)) + { + /* 无CPU宕机,对系开关状态相同且本系开关状态均为ERROR,认为本系启动未达3s,未表决出开关状态,使用对系开关状态*/ + s_2x2_state_Ctrl.AreaSwitchMode = s_2x2_state_Ctrl.PartnerAreaSwitchMode; + } + else{ + /* 不同则使用上次的相同状态*/ + SFM_LOG_MSG_2X("AREA SWITCH NOT SAME!!!!!!\n"); + } + SFM_LOG_MSG_2X("AREA SWITCH, AREA CYC:%d, CYC:%d, MICRO CYC:%d, MODE:%d, LOCAL:%d, Peer:%d, Partner:%d, Partpeer:%d\n", s_2x2_state_Ctrl.AreaCyc, + s_2x2_state_Ctrl.SysCyc, + s_2x2_state_Ctrl.MicroCyc, + s_2x2_state_Ctrl.AreaSwitchMode, + s_2x2_state_Ctrl.LocalAreaSwitchMode, + s_2x2_state_Ctrl.PeerAreaSwitchMode, + s_2x2_state_Ctrl.PartnerAreaSwitchMode, + s_2x2_state_Ctrl.PartPeerAreaSwitchMode); +} +/** + * 记录主系区域校时offset,备系同步offset校时 + */ +void SFM_Area_SetTimeOffset(CM_INT64 offset) +{ + s_2x2_Ctrl.AreaTimeOffset = offset; +} + +/** + * 获取主系区域校时offset,备系同步offset校时 + */ +CM_INT64 SFM_Area_GetTimeOffset(void) +{ + CM_INT64 offset = s_2x2_Ctrl.AreaTimeOffset; + s_2x2_Ctrl.AreaTimeOffset = 0; + return offset; +} +/* 通过脉冲计数,判断脉冲是否停止*/ +static ENUM_CM_RETURN s_isPulseStopped(CM_UINT8 index) +{ + ENUM_CM_RETURN rt = ENUM_CM_TRUE; + CM_UINT8 ret = 1u; + CM_UINT32 pulseCnt = 0u; + ENUM_PULSE_TYPE_T pulseA, pusleB; + static CM_UINT32 lastPulseCnt[2] = {0u}; + + ret = DFM_PulseCnt_Get(index, &pulseCnt); + SFM_LOG_MSG_2X("PULSE CNT:%d:%d\n", index, pulseCnt); + /* 该函数每40ms执行一次,两次脉冲计数相差应大于等于5,最低频率200Hz脉冲40ms应计数8次,考虑误差, 小于5则认为脉冲停止*/ + if(0u == s_2x2_state_Ctrl.MicroCyc) + { + rt = ENUM_CM_FALSE; + } + else if((pulseCnt > 0u) && (pulseCnt >= lastPulseCnt[index]) && (pulseCnt - lastPulseCnt[index] >= 5u)) + { + rt = ENUM_CM_FALSE; + } + else + { + SFM_LOG_MSG_2X("pulse stopped %d\n", index); + } + + lastPulseCnt[index] = pulseCnt; + return rt; +} + +/* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/ +static void s_Area_Transition() +{ + STRU_AREA_STATE_CTRL_T* AreaStateCtrl = SFM_Area_BackPointer_Ctrl(); /* 区域状态控制*/ + if(1u == s_2x2_state_Ctrl.AreaIsAllowed && + ENUM_PULSE_MASTER != s_2x2_state_Ctrl.pulse[0][0] && + ENUM_PULSE_MASTER != s_2x2_state_Ctrl.pulse[0][1] && + ENUM_PULSE_MASTER != s_2x2_state_Ctrl.pulseFeedBack && + ENUM_AREA_MASTER != s_2x2_state_Ctrl.AnotherAreaState) + { + s_2x2_state_Ctrl.AreaCounter++; + SFM_LOG_MSG_2X("Area Counter:%d, PulseA:%d, PulseB:%d, FeedBack:%d\n", s_2x2_state_Ctrl.AreaCounter, + s_2x2_state_Ctrl.pulse[0][0], + s_2x2_state_Ctrl.pulse[0][1], + s_2x2_state_Ctrl.pulseFeedBack); + } + else + { + /* 初始化后第一次主用表决完成,此后该标志无效*/ + s_2x2_state_Ctrl.AreaIsAllowed = 0u; + s_2x2_state_Ctrl.AreaCounter = 0u; + } + /* 状态转换前,必要同步*/ + AreaStateCtrl->pulseA = s_2x2_state_Ctrl.pulse[0][0]; + AreaStateCtrl->pulseB = s_2x2_state_Ctrl.pulse[0][1]; + if(ENUM_SWITCH_ERROR != s_2x2_state_Ctrl.AreaSwitchMode) + { + /* 仅在非error时更新区域所使用倒切挡位*/ + AreaStateCtrl->AreaSwitchMode = s_2x2_state_Ctrl.AreaSwitchMode; + } + AreaStateCtrl->isAllowed = s_2x2_state_Ctrl.AreaIsAllowed; + AreaStateCtrl->WaitCounter = s_2x2_state_Ctrl.AreaCounter; + if(ENUM_AREA_MASTER == s_2x2_state_Ctrl.LocalAreaState) + { + /* 若主系为主用,直接同步主用状态,其余状态(备用)自己表决*/ + AreaStateCtrl->LocalAreaState = s_2x2_state_Ctrl.LocalAreaState; + } + SFM_Area_State_Transition(); +} +/** + * @brief 同步周期号 + */ +void SFM_2x2_UpdateCYC(void) +{ + /*- 变量初始化 */ + CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 系统周期号 */ + ENUM_2x2_STATE_T stat = SFM_2x2_GetLocal2x2State(); /* 本机热备状态 */ + /*更新周期号*/ + if ((s_2x2_Ctrl.SysCycSync >= sysCyc) && (ENUM_2x2_MASTER != stat)) + { + g_MSCP_SysCount = s_2x2_Ctrl.SysCycSync; + /* 主用非主系同步*/ + /* 未收到区域数据时非主用非主系同步*/ + g_MSCP_AreaCount = s_2x2_Ctrl.AreaCycSync; + MSCP_LOG_MSG("Area Set CYC(2x2):%d->%d\n", g_MSCP_AreaCount, s_2x2_Ctrl.AreaCycSync); + } + else + { + MSCP_LOG_MSG("Area Set Cyc Fail, 2x2:%d, AreaCyc:%d, Cyc:%d\n", stat, g_MSCP_AreaCount, g_MSCP_SysCount); + } +} +/** + * 统一置切系标志 + */ +static void s_2x2_CloseSwitchFlag() +{ + s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.ctrSwitchFlag = 0u; + s_2x2_state_Ctrl.aidSwitchFlag = 0u; +} +/* 校时计算offset时的2取双CPU计算*/ +static ENUM_CM_RETURN s_TimeSync_2oo2(INOUT CM_INT64 *myOffset, OUT CM_INT64 *peerOffset) +{ + CM_UINT8 myBuf[32] = {0u}; /* 2oo2缓冲区 */ + CM_UINT8 peerBuf[32] = {0u}; /* 2oo2缓冲区 */ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + + CM_64ToChar(*myOffset, myBuf); + MSCP_LOG_MSG("area:ENUM_2oo2_SYNC_ST\n"); + (void)SFM_2oo2_Exchange_Currency(myBuf, 8, peerBuf, 8u, (CM_UINT32)ENUM_2oo2_SYNC); + MSCP_LOG_MSG("area:ENUM_2oo2_SYNC_end\n"); + *peerOffset = CM_64FromChar(peerBuf); + if ((*myOffset < CM_INT64_MAX) && (*peerOffset < CM_INT64_MAX) && (*myOffset > CM_INT64_MIN) && (*peerOffset > CM_INT64_MIN)) + { + *myOffset = (*myOffset + *peerOffset) / 2; + MSCP_LOG_MSG("area:myOffset = %d,The calibration result is the average value of 2OO2 dual machines\n", *myOffset); + rt = ENUM_CM_TRUE; + } + else if ((*myOffset < CM_INT64_MAX) && (*myOffset > CM_INT64_MIN)) + { + MSCP_LOG_MSG("area:The calibration result is the local calibration result\n"); + rt = ENUM_CM_TRUE; + } + else if ((*peerOffset < CM_INT64_MAX) && (*peerOffset > CM_INT64_MIN)) + { + MSCP_LOG_MSG("area:The calibration result is the calibration result of the neighboring machine\n"); + *myOffset = *peerOffset; + rt = ENUM_CM_TRUE; + } + else + { + rt = ENUM_CM_FALSE; + MSCP_LOG_MSG("area:Failed to calibrate this period\n"); + } +} +/* 校时计算时钟调整量*/ +static CM_INT64 s_TimeSync_CalcOffset(IN CM_INT64 offset, IN CM_INT64 MinOffset) +{ + CM_INT64 calcoffset = 0; + CM_INT64 cyctime_ns = (CM_INT64)(g_PFM_Cfg.CYC_TIME) * CM_MILLION; + /*- 是否需要调大时钟超过一周期 */ + if (offset >= cyctime_ns) + { + /*- 本次只做周期基准时间调整,不调整周期定时器 (将偏移量四舍五入到整周期)*/ + calcoffset = ((CM_INT64)(offset + cyctime_ns / 2) / cyctime_ns) * cyctime_ns; + MSCP_LOG_MSG("Increase the clock by more than one cycle *pOffset = %lld\n",calcoffset); + } + /*- 是否需要调小时钟超过一周期 */ + else if (offset <= -cyctime_ns) + { + /*- 本次只做周期基准时间调整,不调整周期定时器 (将偏移量四舍五入到整周期) */ + calcoffset = ((CM_INT64)(offset - cyctime_ns / 2) / cyctime_ns) * cyctime_ns; + MSCP_LOG_MSG("Set the clock more than one cycle*pOffset = %lld\n",calcoffset); + } + /*- 是否需要调大时钟不超过一周期 */ + else if (offset >= (CM_INT64)MinOffset * CM_MILLION) + { + /*- 本周期定时器延长10ms */ + calcoffset = MinOffset * CM_MILLION; + MSCP_LOG_MSG("The interval timer is extended by 10ms\n"); + } + /*- 是否需要调小时钟不超过一周期 */ + else if (offset <= (CM_INT64)0 - MinOffset * CM_MILLION) + { + /*- 本周期定时器缩短10ms */ + calcoffset = (CM_INT64)0 - MinOffset * CM_MILLION; + MSCP_LOG_MSG("The interval timer is shortened by 10ms\n"); + } + else + { + /*- 不需要调整时钟 */ + calcoffset = 0; + } + return calcoffset; +} +/** + * @brief 更新区域校时标志 + * @param offset-时钟偏移 + * @param threshold-认为校时成功阈值 + * */ +static void s_TimeSync_AreaSyncFlag(IN CM_INT64 offset, IN CM_INT64 threshold) +{ + if((offset >= (threshold * CM_MILLION)) || (offset <= -(threshold * CM_MILLION))) + { + MSCP_LOG_MSG("area:WARING[%d][%lldms]:area offset deviation is too large\n",SFM_2x2_GetSysCount(),offset/CM_MILLION); + s_2x2_Ctrl.TimeSyncFlag_Area = CM_FALSE; + } + else + { + /*- 无需操作 */ + MSCP_LOG_MSG("area:WARING[%d][%lldms]:area offset sync success\n",SFM_2x2_GetSysCount(),offset/CM_MILLION); + s_2x2_Ctrl.TimeSyncFlag_Area = CM_TRUE; + } +} \ No newline at end of file diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.h b/TSCP/src/MSCP/SFM/SFM_2x2.h index fb51f6a..a19111a 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.h +++ b/TSCP/src/MSCP/SFM/SFM_2x2.h @@ -22,6 +22,7 @@ #include "CM_MultiThread.h" #include "CM_MQ.h" #include "PFM_Cfg.h" +#include "DFM_DRV.h" #ifdef __cplusplus extern "C" { @@ -40,6 +41,7 @@ extern CM_UINT32 g_MSCP_SysCount; #define MSCP_2X2_COM_THIS_STATE_NUM (2u) /*本周期状态序号*/ #define MSCP_2X2_SWITCH_3S (3000000000u) /*切系按钮持续时间*/ +#define MSCP_AREA_SWITCH_3S (3000000000u) /*倒切按钮持续时间*/ #define MSCP_2X2_THREAD_TIME (40U) /*2x线程运行时间*/ #define MSCP_2X2_STATE_OVER_TIME (MSCP_2X2_THREAD_TIME + 25U) /*2x线程判断数据超时时间*/ #define MSCP_2X2_STATE_RCV_WITETIME (MSCP_2X2_THREAD_TIME - 20U) /*2x线程等待对系数据时间*/ @@ -151,11 +153,17 @@ extern CM_UINT32 g_MSCP_SysCount; CM_UINT32 TxSN; /**< 发送序列号 */ CM_UINT32 RxSN; /**< 接收序列号 */ CM_UINT32 SysCycSync;/**< 系统周期号 */ + CM_UINT32 AreaCycSync; /**< 主用主系的周期号(用于同步) */ ENUM_2x2_STATE_T LocalState; /**< 本系热备状态,2oo2比较 */ ENUM_2x2_STATE_T PartnerState; /**< 收到的对系热备状态,2oo2交换 */ ENUM_2x2_STATE_T LastLocalState; /**< 本系上一周期的热备状态,2oo2比较 */ ENUM_2x2_STATE_T LastPartnerState; /**< 收到的对系上一周期热备状态,2oo2交换 */ + + ENUM_AREA_STATE_T LocalAreaState; /**< 本区域状态 */ + ENUM_AREA_STATE_T LastLocalAreaState; /**< 本上一周期的区域状态 */ + ENUM_AREA_STATE_T AnotherAreaState; /* 另一区域状态*/ + ENUM_AREA_STATE_T LastAnotherAreaState; /* 另一区域上一周期状态*/ /*通信状态 */ CM_BOOL MineComState; /**< 本机通信状态,2oo2交换 */ CM_BOOL PeerComState; /**< 邻机通信状态,2oo2交换 */ @@ -188,6 +196,10 @@ extern CM_UINT32 g_MSCP_SysCount; CM_UINT8 RxCheckFrame[100]; /**< 收到的输出校验帧报文,2oo2交换 */ ENUM_2x2_AID_SWITCH_STATE AIDSwitchState;/**< aid切系控制标志 */ CM_UINT8 TimeSyncFlag; /**< 时间同步完成标志 */ + CM_UINT8 TimeSyncFlag_Area; /**< 区域时间同步标志 */ + CM_INT64 AreaTimeOffset; /**< 区域校时offset */ + /* 倒切按钮状态*/ + ENUM_SWITCH_MODE_T AreaSwitchMode; }STRU_2X2_CTRL_T; /*2x状态切换线程参数*/ @@ -199,6 +211,7 @@ extern CM_UINT32 g_MSCP_SysCount; CM_UINT8 MicroCyc; /**< 微周期号 */ CM_UINT32 TxSN; /**< 发送序列号 */ CM_UINT32 RxSN; /**< 接收序列号 */ + CM_UINT32 AreaCyc; /**< 区域周期号 */ /*双系热备状态*/ ENUM_2x2_STATE_T LocalState; /**< 本系热备状态,2oo2比较 */ @@ -247,6 +260,32 @@ extern CM_UINT32 g_MSCP_SysCount; ENUM_2x2_AID_SWITCH_STATE PartnerAIDSwitchState; /**< 对系的主动切系按钮状态 */ ENUM_2x2_AID_SWITCH_STATE PartPeerAIDSwitchState; /**< 对系的邻机的主动切系按钮状态 */ CM_UINT8 aidSwitchFlag; /**< aid切系控制标志 */ + + /*脉冲*/ + ENUM_PULSE_TYPE_T pulse[5][2]; /* [][0]A系, [][1]B系, [0]四个CPU一致的脉冲,[1]1-1, [2]1-2, [3]2-1, [4]2-2(TODO 下标使用宏定义)*/ + ENUM_PULSE_TYPE_T pulseFeedBack; /*本系回读*/ + + /*区域状态*/ + ENUM_AREA_STATE_T LocalAreaState; /**< 本区域状态*/ + ENUM_AREA_STATE_T AnotherAreaState; /* 另一区域状态*/ + + /* 区域允许升主用标志 2x同步*/ + CM_UINT8 AreaIsAllowed; + CM_UINT32 AreaCounter; /**< 区域计数器,用于启动后的升主用判断 */ + + /*主系通信失败,备系成功标志*/ + CM_UINT8 flag_Mf_Ss; + CM_UINT32 areaHealthCounter; /*区域健康度切系计数器*/ + + /* 倒切按钮状态*/ + ENUM_SWITCH_MODE_T AreaSwitchMode; + ENUM_SWITCH_MODE_T LocalAreaSwitchMode; /**< 自己的主动切系按钮状态 */ + ENUM_SWITCH_MODE_T PeerAreaSwitchMode; /**< 邻机的主动切系按钮状态 */ + ENUM_SWITCH_MODE_T PartnerAreaSwitchMode; /**< 对系的主动切系按钮状态 */ + ENUM_SWITCH_MODE_T PartPeerAreaSwitchMode; /**< 对系的邻机的主动切系按钮状态 */ + + /* 离线是否允许升预升主*/ + CM_BOOL preMasterAllowed; }STRU_2X2_STATE_CTRL_T; /*2x状态切换线程参数*/ typedef struct @@ -261,8 +300,8 @@ extern CM_UINT32 g_MSCP_SysCount; extern CM_INT32 g_2x2oo2_base; extern CM_INT32 g_2x2oo2_data_num; - extern STRU_2x2oo2_rx_T g_2x2oo2_rx[2][24]; - extern STRU_2x2oo2_tx_T g_2x2oo2_tx[2][24]; + extern STRU_2x2oo2_rx_T g_2x2oo2_rx[2][25]; + extern STRU_2x2oo2_tx_T g_2x2oo2_tx[2][25]; extern CM_UINT8 g_2x2RcvMaxNum[2]; /**< 2x2双缓冲区接收最大序号*/ extern CM_INT32 g_TxAppFollow_len; @@ -457,6 +496,49 @@ extern CM_UINT32 g_MSCP_SysCount; void SFM_2x2_ChangeState(void); /*时间同步失败清空消息队列*/ void SFM_2x2_ClearRcvMsgQ(void); + /** + * @brief 区域周期同步 + * @param cycTick 周期开始时刻 + */ + void SFM_Area_Sync(IN CM_UINT64 cycTick, OUT CM_INT64 *pOffset); + /** + * @brief 获取本区域状态 + * @return 本系区域状态 + * @details + */ + ENUM_AREA_STATE_T SFM_Area_GetLocalAreaState(void); + /** + * @brief 获取上一周期本区域状态 + * @return 本系区域状态 + * @details + */ + ENUM_AREA_STATE_T SFM_Area_GetLastLocalAreaState(void); + /** + * @brief 获取另一区域状态 + * @return 区域状态 + * @details + */ + ENUM_AREA_STATE_T SFM_Area_GetAnotherAreaState(void); + /** + * @brief 获取上一周期另一区域状态 + * @return 区域状态 + * @details + */ + ENUM_AREA_STATE_T SFM_Area_GetLastAnotherAreaState(void); + + /** + * 记录主系区域校时offset,备系同步offset校时 + */ + void SFM_Area_SetTimeOffset(CM_INT64 offset); + + /** + * 获取主系区域校时offset,备系同步offset校时 + */ + CM_INT64 SFM_Area_GetTimeOffset(void); + /** + * @brief 同步周期号 + */ + void SFM_2x2_UpdateCYC(void); void SFM_2x2_SemPost(void); #ifdef __cplusplus diff --git a/TSCP/src/MSCP/SFM/SFM_Area.c b/TSCP/src/MSCP/SFM/SFM_Area.c new file mode 100644 index 0000000..a17487b --- /dev/null +++ b/TSCP/src/MSCP/SFM/SFM_Area.c @@ -0,0 +1,1497 @@ +/* + * SFM_Area.c + * + * Created on: 2025年8月28日 + * Author: hisun + */ +#include "SFM_Area.h" +#include "SFM_2x2.h" +#include "SFM_2oo2.h" +#include "SFM_package.h" +#include "CM_CRC32.h" +#include "CM_Time.h" +#include "CM_Memory.h" +#include "DFM_Time.h" +#include "stdarg.h" +#include "SFM_Prtcl.h" + +/*区域周期号*/ +CM_UINT32 g_MSCP_AreaCount; + +/* 开关状态第一次检测需等待3s(约10个周期)*/ +#define RC_WAIT (100) /* RC等待CI启动*/ +#define CI_WAIT (15) /* CI等待检测RC脉冲*/ + + +#define SFM_LOG_MSG_AREA(fmt, ...) (SFM_AREA_LOG_MSG(FILENAME(__FILE__),(CM_INT32)__LINE__,(fmt), ##__VA_ARGS__)) +/** +* @brief 平台记录格式化字符串日志 +* @param filename 文件路径 +* @param func 函数名 +* @param line 行号 +* @param fmt 格式化字符串 +*/ +static void SFM_AREA_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_CHAR* fmt, ...); +static CM_UINT8 g_Area_State_Cache[100]; +static CM_INT32 g_Area_State_Cache_Len = 0; +/*应用数据*/ +static CM_UINT8 g_Area_App_DATA[SFM_AREA_DATA_BUFF_SIZE]; /* 本机收到的数据 */ +static CM_INT32 g_Area_App_Data_Len = 0; +static CM_UINT8 g_2oo2_Area_App_DATA[SFM_AREA_DATA_BUFF_SIZE]; /* 2取交互收到的数据*/ +static CM_INT32 g_2oo2_Area_App_Data_Len = 0; + +static CM_UINT8 g_2x2_Area_App_DATA[SFM_AREA_DATA_BUFF_SIZE]; /* 2x交互收到的数据*/ +static CM_INT32 g_2x2_Area_App_Data_Len = 0; +static CM_UINT8 g_2x2oo2_Area_App_DATA[SFM_AREA_DATA_BUFF_SIZE]; /* 2x后2取收到的数据*/ +static CM_INT32 g_2x2oo2_Area_App_Data_Len = 0; + +static CM_UINT8* p_Area_App_Master_DATA; /* 指向四个缓冲区中的来自主系的最新buf*/ +static CM_INT32 g_Area_App_Master_Len; /* 指向的缓冲区的长度*/ +static CM_UINT8* p_Area_App_Slave_DATA; /* 指向四个缓冲区中的来自备系的最新buf*/ +static CM_INT32 g_Area_App_Slave_Len; /* 指向的缓冲区的长度*/ + +#define AREA_2X_RECV_WAIT (40u) /* 2x接收等待时间*/ + +static CM_UINT8 s_area_Cache[NET_UDP_BUF_SIZE]; /**< 区域通信缓冲区 */ +/* 区域线程控制*/ +static STRU_AREA_THREAD_T s_Area_Thread_Ctrl; +/* 区域状态控制*/ +static STRU_AREA_STATE_CTRL_T s_area_state_Ctrl; +/* 区域数据接收*/ +static void s_Area_Recv(void); +/*获取最新的区域数据buf*/ +static CM_INT32 s_Get_LatestAreaBuf(IN CM_UINT8* data1, IN CM_INT32 len1,IN CM_UINT8* data2, IN CM_INT32 len2,OUT CM_UINT8** dataOut); +/* CI状态机*/ +static void s_Area_CI_Transition(); +/* RC状态机*/ +static void s_Area_RC_Transition(); +/* 区域状态机*/ +static void s_Area_State_Transition(); +/* 从AB两系的脉冲选择有效的脉冲*/ +static void s_Area_GetValidPulse(); +/* 区域协程的2oo2x交互*/ +static void s_Area_2oo2x2(); +/* 根据脉冲状态获取区域状态 状态转换前进行*/ +static void s_Area_GetStateFromPulse(); +/* 主备系接收情况判断*/ +static void s_Area_GetMasterData(); +/** + * @brief 直接从脉冲状态转换出区域状态 + * */ +static ENUM_AREA_STATE_T s_ConvertPulseToState(ENUM_PULSE_TYPE_T pulse); +/** +* @brief 区域接收 +* @see :: SFM_2x2_Send +* @see :: s_2x2_SendState +*/ +static void s_2x2_Area_Recv(void); +/** + * 区域通信处理线程 + */ +static CM_THREAD_FUNC_T t_AreaThread(void); +/** + * 发送区域数据时,先2取计算双CRC后发送 + */ +static void s_2oo2Before_AreaSend(CM_UINT8 *buf, CM_INT32 len, CM_UINT32 bufsize, ENUM_AREA_MSG_T msg_typ); +/** + * 初始化 + */ +void SFM_Area_Init() +{ + CM_BOOL rt = CM_FALSE; + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + ENUM_PULSE_TYPE_T pulse; /* 接收脉冲回读结果*/ + CM_UINT32 i = 0u; /* 循环变量*/ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + MSCP_LOG_MSG("Area Init Start\n"); + g_MSCP_AreaCount = 0u; + /* 初始化信号量*/ + ret = CM_Sem_Init(&s_Area_Thread_Ctrl.m_Start); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1); + ret = CM_Sem_Init(&s_Area_Thread_Ctrl.m_Stop); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2); + ret = CM_Mutex_Init(&s_Area_Thread_Ctrl.mutex); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); + ret = CM_MQ_Init((CM_MQ_Struct_T*)&s_Area_Thread_Ctrl.LogMsgQ, (CM_UINT16)CFM_INNET_LOG_SIZE, (CM_UINT16)(CFM_INNET_LOG_SIZE)); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); + + /* 初始化脉冲回读失败*/ + ret = DFM_Pulse_FeedBack(&pulse); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); + + s_area_state_Ctrl.SysCyc = 0u; + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + s_area_state_Ctrl.AnotherAreaState = ENUM_AREA_UNAVAILABLE; + s_area_state_Ctrl.LastLocalAreaState = s_area_state_Ctrl.LocalAreaState; + s_area_state_Ctrl.LastAnotherAreaState = s_area_state_Ctrl.AnotherAreaState; + s_area_state_Ctrl.Local2x2State = ENUM_2x2_OFFLINE; + s_area_state_Ctrl.Partner2x2State = ENUM_2x2_SHUTDOWN; + s_area_state_Ctrl.TimeSyncFlag_2x2 = 0u; + s_area_state_Ctrl.TimeSyncFlag_Area = 0u; + s_area_state_Ctrl.RxAreaSysCyc = 0u; + s_area_state_Ctrl.Rx2x2DataSysCyc = 0u; + s_area_state_Ctrl.flag_Mf_Ss = 0u; + s_area_state_Ctrl.pulseA = ENUM_PULSE_ERROR; + s_area_state_Ctrl.pulseB = ENUM_PULSE_ERROR; + s_area_state_Ctrl.pulse = ENUM_PULSE_ERROR; + s_area_state_Ctrl.AnotherBoardID = 1u; + s_area_state_Ctrl.isAllowed = 1u; + s_area_state_Ctrl.WaitCounter = 0u; + s_area_state_Ctrl.AreaRecved = 0u; + s_area_state_Ctrl.AreaAppRecved = 0u; + s_area_state_Ctrl.AllInterrupt = 1u; + s_area_state_Ctrl.RCFollowFlag = 0u; + s_area_state_Ctrl.AreaSwitchMode = ENUM_SWITCH_ERROR; + for(i = 0u; i < sizeof(s_area_state_Ctrl.healthFlag); i++) + { + s_area_state_Ctrl.healthFlag[i] = 0u; + } + + /*-启动区域交互独立线程 */ + rt = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_AreaThread, "area_state", 0, CM_TASK_PRIORITY_73, NULL); + CM_ASSERT(CM_TRUE == rt, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_5); + } + else + { + SFM_LOG_MSG_AREA("Area is not enabled\n"); + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + s_area_state_Ctrl.AnotherAreaState = ENUM_AREA_UNAVAILABLE; + s_area_state_Ctrl.LastLocalAreaState = s_area_state_Ctrl.LocalAreaState; + s_area_state_Ctrl.LastAnotherAreaState = s_area_state_Ctrl.AnotherAreaState; + s_area_state_Ctrl.flag_Mf_Ss = 0u; + } +} +/** + * 发送起始信号量 + */ +void SFM_AREA_Thread_PostStart() +{ + if(0x00 != g_PFM_Cfg.M_Area_Enable) + { + CM_Sem_Post(s_Area_Thread_Ctrl.m_Start); + } + else + { + /* 无处理 */ + } +} +/** + * 等待结束信号量 + */ +void SFM_AREA_Thread_WaitStop() +{ + if(0x00 != g_PFM_Cfg.M_Area_Enable) + { + CM_Sem_Wait(s_Area_Thread_Ctrl.m_Stop); + } + else + { + /* 无处理 */ + } +} +/** + * 区域通信处理线程 + */ +static CM_THREAD_FUNC_T t_AreaThread(void) +{ +#if QNX + void* pmask = NULL; + /*- 本线程锁定在 A53 core 1|2 */ + pmask = (void*)(0x01u | 0x02u); + (void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask); +#endif + CM_UINT8 sendBuf[100]; + CM_UINT32 offset = 0u; + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + static CM_UINT32 Slave_sysCyc = 0; + static CM_UINT32 Master_sysCyc = 0; + CM_UINT64 delta_Tick = 0u; /* 区域接收超时时间*/ + CM_INT32 ret = 0; + CM_UINT32 appLen = 0u; + if(0xAA == g_PFM_Cfg.M_Area_Enable) + { + delta_Tick = g_PFM_Cfg.CYC_TIME - 160u; + } + else + { + /* CI接收40ms超时退出*/ + delta_Tick = 40u; + } + while(1) + { + CM_Sem_Wait(s_Area_Thread_Ctrl.m_Start); + SFM_LOG_MSG_AREA("Area Cyc:%d\n", s_area_state_Ctrl.SysCyc); + + if(0xAA == g_PFM_Cfg.M_Area_Enable) + { + /* RC主系发送状态数据*/ + offset = 0u; + CM_LongToChar(0u, &sendBuf[offset]); /* 填充应用数据长度*/ + offset += 4u; + CM_LongToChar(AREA_DATA_STATE_LEN, &sendBuf[offset]); + offset += 4u; + sendBuf[offset] = g_PFM_Cfg.BOARD_ID; + offset += 1u; + sendBuf[offset] = s_area_state_Ctrl.LocalAreaState; + offset += 1u; + sendBuf[offset] = s_area_state_Ctrl.Local2x2State; + offset += 1u; + CM_LongToChar(g_MSCP_AreaCount, &sendBuf[offset]); + offset += 4u; + if(ENUM_2x2_MASTER == s_area_state_Ctrl.Local2x2State) + { + s_2oo2Before_AreaSend(sendBuf, offset, sizeof(sendBuf), ENUM_AREA_MSG_MASTER); + } + else + { + s_2oo2Before_AreaSend(sendBuf, offset, sizeof(sendBuf), ENUM_AREA_MSG_SLAVE); + } + } + /*- 延时接收区域数据 */ + CM_Sleep(delta_Tick); + s_Area_Recv(); + /* 2oo2x交互收到的数据*/ + s_Area_2oo2x2(); + /* 使用主系接收数据*/ + s_Area_GetMasterData(); + SFM_LOG_MSG_AREA("Sync Data Recv %d, rxCyc:%d, cyc:%d\n", s_area_state_Ctrl.AreaRecved, s_area_state_Ctrl.RxAreaSysCyc, s_area_state_Ctrl.SysCyc); + SFM_LOG_MSG_AREA("flag_Mf_Ss = %d, Master_syscyc=%d, Slave_syscyc=%d, AreaRecved:%d, AnotherAreaState:%d, AnotherBoardID:%d\n", + s_area_state_Ctrl.flag_Mf_Ss, Master_sysCyc, Slave_sysCyc, + s_area_state_Ctrl.AreaRecved, + s_area_state_Ctrl.AnotherAreaState, + s_area_state_Ctrl.AnotherBoardID); + CM_Sem_Post(s_Area_Thread_Ctrl.m_Stop); + } +} +/** +* @brief 区域发送 +* @param Data 发送报文指针 +* @param DataLen 发送报文长度 +* param msgType 报文类型 +* @details +* @see :: s_2x2_Recv +* @see :: SFM_FrameSave +*/ +void SFM_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_AREA_MSG_T msgType) +{ + + /*- 变量初始化 */ + CM_UINT16 FrameNum = 0u; /* 帧数 */ + CM_UINT16 FrameIndex = 0u; /* 帧序号 */ + CM_UINT32 FrameLen = 0u; /* 帧长度 */ + CM_UINT32 crc = 0u; /* CRC */ + CM_UINT32 SysCyc = SFM_Area_GetSysCount(); /* 系统周期号 */ + ENUM_CM_RETURN checkRet = ENUM_CM_NULL; + CM_UINT32 offset = 0u; + PFM_LOG_SET_STOPTIMER(TSCP_DARK_AREA); + /*- 入口检查 */ + CM_ASSERT(NULL != Data, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + + /*- 计算帧数 */ + FrameNum = (CM_UINT16)(((CM_UINT32)DataLen <= NET_20K_SIZE) ? (1u) : ((((CM_UINT32)DataLen + NET_20K_SIZE) - 1u) / NET_20K_SIZE)); + /* + 2x2通信帧格式: + 4字节 长度(不含自身) + 4字节 周期号 + 1字节 类型 + 2字节 帧总数 + 2字节 帧序号 + n字节 数据 + 4字节 CRC(含长度) + */ + /*- 填充报文头 */ + CM_LongToChar(NET_20K_SIZE + 13u, &s_area_Cache[offset]); /*长度(暂时填写满帧)*/ + offset += 4u; + CM_LongToChar(SysCyc, &s_area_Cache[offset]); /*周期号*/ + offset += 4u; + s_area_Cache[offset] = (CM_UINT8)msgType; /*类型*/ + offset += 1u; + CM_ShortToChar(FrameNum, &s_area_Cache[offset]); /*帧总数*/ + offset += 2u; + /* s_area_Cache + 11 */ /*帧序号(后面填写)*/ + + /*- @alias 循环发送完整帧 */ + for (FrameIndex = 1u; FrameIndex < FrameNum; FrameIndex++) + { + offset = 11u; + CM_ShortToChar(FrameIndex, &s_area_Cache[offset]); /*帧序号*/ + offset += 2u; + checkRet = CM_Memcpy((void*)(&s_area_Cache[offset]), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)NET_20K_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + CM_RE_ASSERT(checkRet == ENUM_CM_TRUE, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + crc = CM_Crc32(s_area_Cache, NET_20K_SIZE + offset); + CM_LongToChar(crc, &s_area_Cache[offset + NET_20K_SIZE]); /*CRC*/ + offset += 4u; + + (void)CFM_Area_DataSend(s_area_Cache, (CM_INT32)(offset + NET_20K_SIZE)); /*交给通信层发送*/ + } + + offset = 11u; + /*- 发送尾帧*/ + CM_ShortToChar(FrameIndex, &s_area_Cache[offset]); /*帧序号*/ + offset += 2u; + FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); + checkRet = CM_Memcpy((void*)(&s_area_Cache[offset]), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + CM_RE_ASSERT(checkRet == ENUM_CM_TRUE, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + CM_LongToChar(offset + FrameLen, s_area_Cache); /*长度*/ + crc = CM_Crc32(s_area_Cache, offset + FrameLen); + CM_LongToChar(crc, &s_area_Cache[offset + FrameLen]); /*CRC*/ + offset += 4u; + (void)CFM_Area_DataSend(s_area_Cache,(CM_INT32)CM_UNSIGNED_INT_EXP(offset + FrameLen)); /*交给通信层发送*/ + PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); +} +/** +* @brief 区域接收 +* @see :: SFM_2x2_Send +* @see :: s_2x2_SendState +*/ +static void s_Area_Recv(void) +{ + /*- 变量初始化 */ + static STRU_FrameCtrl_T s_Area_FrameCtrl[2]; /**< 分帧接收控制 */ + CM_INT32 rxLen = 0; /* 网络接收长度 */ + CM_UINT32 msgLen = 0u; /* 报文长度 */ + CM_UINT32 SrcID = 0u; /* 源ID */ + CM_UINT32 DstID = 0u; /* 目的ID */ + CM_UINT32 msgCyc = 0u; /* 报文周期号 */ + CM_UINT32 msgSN = 0u; /* 报文序列号 */ + CM_UINT16 FrameNum = 0u; /* 帧数目 */ + CM_UINT16 FrameIndex = 0u;/* 帧序号 */ + CM_UINT32 msgCrc = 0u, msgCrc1 = 0u, msgCrc2 = 0u; /* 报文CRC */ + CM_UINT32 calcCrc = 0u, calcCrc1 = 0u, calcCrc2 = 0u; /* 本地计算CRC */ + CM_UINT8 *pData = NULL; /* 指向帧数据的指针 */ + CM_INT32 DataLen = 0; /* 帧数据长度 */ + ENUM_AREA_MSG_T type = ENUM_AREA_MSG_ERROR; /* 报文类型 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 临时变量 */ + CM_UINT32 offset = 0u; + CM_UINT32 current_time; + CM_UINT32 time_stamp; + CM_UINT8* Buff_Area = NULL; + CM_UINT32* Buff_Len = NULL; + STRU_FrameCtrl_T* Buff_FrameCtrl = NULL; + PFM_LOG_SET_STOPTIMER(TSCP_DARK_AREA); + /*- 以太网循环接收2x2数据 */ + if(CM_TRUE == s_area_state_Ctrl.TimeSyncFlag_Area) + { + do + { + /*- 从通信层接收2x2报文 */ + rxLen = CFM_Area_DataRecv(s_area_Cache, (CM_UINT32)sizeof(s_area_Cache)); + /*- 收到的报文长度是否大于0 */ + if ((17u + 6u)<= rxLen) + { + current_time = (CM_UINT32)(CM_GetTick()/CM_UNSIGNED_MILLION);/*当前时间戳ms*/ + time_stamp = CM_LongFromChar(&s_area_Cache[0]);/*接收时间戳ms*/ + SFM_LOG_MSG_AREA("area current:%u, recv:%u\n", current_time, time_stamp); + if((current_time - time_stamp) <= MSCP_AREA_OVER_TIME) + { + /*- 解析2x2报文头 */ + /* + 2x2通信帧格式: + 4字节 长度(不含自身) + 4字节 周期号 + 1字节 类型 + 2字节 帧总数 + 2字节 帧序号 + n字节 数据 + 4字节 CRC + */ + rxLen -= 6u; + offset = 6u; + msgLen = CM_LongFromChar(&s_area_Cache[offset]); + offset += 4u; + SFM_LOG_MSG_AREA("MSGLEN:%d, rxlen:%d\n", msgLen, rxLen); + CM_RE_ASSERT((msgLen + 4u) == (CM_UINT32)rxLen, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); + msgCyc = CM_LongFromChar(&s_area_Cache[offset]); + offset += 4u; + type = (ENUM_AREA_MSG_T)s_area_Cache[offset]; + offset += 1u; + FrameNum = CM_ShortFromChar(&s_area_Cache[offset]); + offset += 2u; + FrameIndex = CM_ShortFromChar(&s_area_Cache[offset]); + offset += 2u; + msgCrc = CM_LongFromChar(s_area_Cache + msgLen + 6u); + calcCrc = CM_Crc32(s_area_Cache + 6u, msgLen); + /*- 校验报文头是否合法 */ + if ((msgCrc == calcCrc) && + ((msgCyc >= s_area_state_Ctrl.RxAreaSysCyc) || (msgCyc >= s_area_state_Ctrl.SysCyc))) + { + pData = s_area_Cache + offset; + DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset + 6); + switch(type) + { + case ENUM_AREA_MSG_MASTER: + Buff_Area = g_Area_App_DATA; + Buff_Len = &g_Area_App_Data_Len; + Buff_FrameCtrl = &s_Area_FrameCtrl[0]; + break; + case ENUM_AREA_MSG_SLAVE: + Buff_Area = g_Area_State_Cache; + Buff_Len = &g_Area_State_Cache_Len; + Buff_FrameCtrl = &s_Area_FrameCtrl[1]; + break; + default: + break; + } + /*- 分帧接收跟随报文 */ + CM_RE_ASSERT(FrameNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); + CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); + ret = SFM_FrameSave(Buff_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, Buff_Area, Buff_Len, sizeof(g_Area_App_DATA)); + /*- 是否收齐了跟随报文 */ + if (ENUM_CM_TRUE == ret && 8u <= *Buff_Len) + { + *Buff_Len -= 8; + msgCrc1 = CM_LongFromChar(Buff_Area + *Buff_Len); + msgCrc2 = CM_LongFromChar(Buff_Area + *Buff_Len + 4); + calcCrc1 = CM_Crc32_1(Buff_Area, *Buff_Len); + calcCrc2 = CM_Crc32_2(Buff_Area, *Buff_Len); + if(calcCrc1 != msgCrc1 || calcCrc2 != msgCrc2) + { + SFM_LOG_MSG_AREA("Recv %d double crc fail\n", type); + *Buff_Len = 0u; + } + else + { + SFM_LOG_MSG_AREA("Recv Success, cyc:%d\n", msgCyc); + } + } + else + { + + } + } + else + { + SFM_LOG_MSG_AREA("crc:%d, recvCrc:%d, cyc:%d, rxcyc:%d, syscyc:%d\n", msgCrc, calcCrc, msgCyc, s_area_state_Ctrl.RxAreaSysCyc, s_area_state_Ctrl.SysCyc); + /*- 无处理 */ + } + } + else + { + + } + }/* end if (0 < rxLen)*/ + else + { + /*- 无处理 */ + } + } while (0 < rxLen); + } + else + { + /*时间同步未完成,清空所有2x接收数据*/ + SFM_LOG_MSG_AREA("TimeSyncFlag_Area = %d\n", s_area_state_Ctrl.TimeSyncFlag_Area); + SFM_AREA_ClearRcvMsgQ(); + } + PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); +} + +/** +* @brief 时间同步失败清空消息队列 +* @param 无 +* @return 无 +*/ +void SFM_AREA_ClearRcvMsgQ(void) +{ + if(CM_FALSE == s_area_state_Ctrl.TimeSyncFlag_Area) + { + /*误差过大,清空2x缓冲区*/ + CFM_NetAreaFlush(); + } + else + { + /*无处理*/ + } +} +/** +* @brief 区域发送 +* @param Data 发送报文指针 +* @param DataLen 发送报文长度 +* param msgType 报文类型 +* @details +* @see :: s_2x2_Recv +* @see :: SFM_FrameSave +*/ +void SFM_2x2_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_2x2_AREA_MSG_T msgType) +{ + + /*- 变量初始化 */ + CM_UINT16 FrameNum = 0u; /* 帧数 */ + CM_UINT16 FrameIndex = 0u; /* 帧序号 */ + CM_UINT32 FrameLen = 0u; /* 帧长度 */ + CM_UINT32 crc = 0u; /* CRC */ + CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /* 系统周期号 */ + ENUM_CM_RETURN checkRet = ENUM_CM_NULL; + CM_UINT32 offset = 0u; + PFM_LOG_SET_STOPTIMER(TSCP_DARK_AREA); + /*- 入口检查 */ + CM_ASSERT(NULL != Data, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_1); + + /*- 计算帧数 */ + FrameNum = (CM_UINT16)(((CM_UINT32)DataLen <= NET_20K_SIZE) ? (1u) : ((((CM_UINT32)DataLen + NET_20K_SIZE) - 1u) / NET_20K_SIZE)); + /* + 2x2通信帧格式: + 4字节 长度(不含自身) + 4字节 周期号 + 1字节 类型 + 2字节 帧总数 + 2字节 帧序号 + n字节 数据 + 4字节 CRC(含长度) + */ + /*- 填充报文头 */ + CM_LongToChar(NET_20K_SIZE + 13u, &s_area_Cache[offset]); /*长度(暂时填写满帧)*/ + offset += 4u; + CM_LongToChar(SysCyc, &s_area_Cache[offset]); /*周期号*/ + offset += 4u; + s_area_Cache[offset] = (CM_UINT8)msgType; /*类型*/ + offset += 1u; + CM_ShortToChar(FrameNum, &s_area_Cache[offset]); /*帧总数*/ + offset += 2u; + /* s_area_Cache + 11 */ /*帧序号(后面填写)*/ + + /*- @alias 循环发送完整帧 */ + for (FrameIndex = 1u; FrameIndex < FrameNum; FrameIndex++) + { + offset = 11u; + CM_ShortToChar(FrameIndex, &s_area_Cache[offset]); /*帧序号*/ + offset += 2u; + checkRet = CM_Memcpy((void*)(&s_area_Cache[offset]), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)NET_20K_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + CM_RE_ASSERT(checkRet == ENUM_CM_TRUE, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + crc = CM_Crc32(s_area_Cache, NET_20K_SIZE + offset); + CM_LongToChar(crc, &s_area_Cache[offset + NET_20K_SIZE]); /*CRC*/ + offset += 4u; + + (void)CFM_2x2_Area_DataSend(s_area_Cache, (CM_INT32)(offset + NET_20K_SIZE)); /*交给通信层发送*/ + } + + offset = 11u; + /*- 发送尾帧*/ + CM_ShortToChar(FrameIndex, &s_area_Cache[offset]); /*帧序号*/ + offset += 2u; + FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); + checkRet = CM_Memcpy((void*)(&s_area_Cache[offset]), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ + CM_RE_ASSERT(checkRet == ENUM_CM_TRUE, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + CM_LongToChar(offset + FrameLen, s_area_Cache); /*长度*/ + crc = CM_Crc32(s_area_Cache, offset + FrameLen); + CM_LongToChar(crc, &s_area_Cache[offset + FrameLen]); /*CRC*/ + offset += 4u; + (void)CFM_2x2_Area_DataSend(s_area_Cache,(CM_INT32)CM_UNSIGNED_INT_EXP(offset + FrameLen)); /*交给通信层发送*/ + PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); +} +/** +* @brief 区域接收 +* @see :: SFM_2x2_Send +* @see :: s_2x2_SendState +*/ +static void s_2x2_Area_Recv(void) +{ + /*- 变量初始化 */ + static STRU_FrameCtrl_T s_2x2_Area_FrameCtrl; /**< 分帧接收控制 */ + CM_INT32 rxLen = 0; /* 网络接收长度 */ + CM_UINT32 msgLen = 0u; /* 报文长度 */ + CM_UINT32 SrcID = 0u; /* 源ID */ + CM_UINT32 DstID = 0u; /* 目的ID */ + CM_UINT32 msgCyc = 0u; /* 报文周期号 */ + CM_UINT32 msgSN = 0u; /* 报文序列号 */ + CM_UINT16 FrameNum = 0u; /* 帧数目 */ + CM_UINT16 FrameIndex = 0u;/* 帧序号 */ + CM_UINT32 msgCrc = 0u; /* 报文CRC */ + CM_UINT32 calcCrc = 0u; /* 本地计算CRC */ + CM_UINT8 *pData = NULL; /* 指向帧数据的指针 */ + CM_INT32 DataLen = 0; /* 帧数据长度 */ + ENUM_2x2_MSG_T type = ENUM_2x2_MSG_ERROR; /* 报文类型 */ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; /* 临时变量 */\ + CM_UINT32 offset = 0u; + PFM_LOG_SET_STOPTIMER(TSCP_DARK_AREA); + /*- 以太网循环接收2x2数据 */ + if(CM_TRUE == s_area_state_Ctrl.TimeSyncFlag_2x2) + { + do + { + /*- 从通信层接收2x2报文 */ + rxLen = CFM_2x2_Area_DataRecv(s_area_Cache, (CM_UINT32)sizeof(s_area_Cache)); + /*- 收到的报文长度是否大于0 */ + if ((17u <= rxLen)) + { + /*- 解析2x2报文头 */ + /* + 2x2通信帧格式: + 4字节 长度(不含自身) + 4字节 周期号 + 1字节 类型 + 2字节 帧总数 + 2字节 帧序号 + n字节 数据 + 4字节 CRC + */ + offset = 0u; + msgLen = CM_LongFromChar(&s_area_Cache[offset]); + offset += 4u; + CM_RE_ASSERT((msgLen + 4u) == (CM_UINT32)rxLen, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1); + msgCyc = CM_LongFromChar(&s_area_Cache[offset]); + offset += 4u; + type = (ENUM_AREA_MSG_T)s_area_Cache[offset]; + offset += 1u; + FrameNum = CM_ShortFromChar(&s_area_Cache[offset]); + offset += 2u; + FrameIndex = CM_ShortFromChar(&s_area_Cache[offset]); + offset += 2u; + msgCrc = CM_LongFromChar(s_area_Cache + msgLen); + calcCrc = CM_Crc32(s_area_Cache, msgLen); + /*- 校验报文头是否合法 */ + if (/* msgCyc*/ + msgCrc == calcCrc) + { + pData = s_area_Cache + offset; + DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset); + /*- 报文类型 */ + switch (type) + { + case ENUM_2x2_AREA_MSG_DATA: + if(msgCyc > s_area_state_Ctrl.Rx2x2DataSysCyc) + { + /*- 分帧接收跟随报文 */ + CM_RE_ASSERT(FrameNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_5); + CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_6); + ret = SFM_FrameSave(&s_2x2_Area_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_2x2_Area_App_DATA, &g_2x2_Area_App_Data_Len, (CM_UINT32)sizeof(g_2x2_Area_App_DATA)); + /*- 是否收齐了跟随报文 */ + if (ENUM_CM_TRUE == ret) + { + s_area_state_Ctrl.Rx2x2DataSysCyc = msgCyc; + + } + else + { + + } + } + break; + default: + /* 无处理*/ + break; + }/* end switch */ + } + else + { + /*- 无处理 */ + } + }/* end if (0 < rxLen)*/ + else + { + /*- 无处理 */ + } + } while (0 < rxLen); + } + else + { + /*时间同步未完成,清空所有2x接收数据*/ + SFM_LOG_MSG_AREA("2X Time is Not Ok\n"); + SFM_2X2_AREA_ClearRcvMsgQ(); + } + PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); +} +/** +* @brief 时间同步失败清空消息队列 +* @param 无 +* @return 无 +*/ +void SFM_2X2_AREA_ClearRcvMsgQ(void) +{ + if(CM_FALSE == s_area_state_Ctrl.TimeSyncFlag_2x2) + { + /*误差过大,清空2x缓冲区*/ + CFM_Net2X_Area_Flush(); + } + else + { + /*无处理*/ + } +} +/*获取最新的区域数据buf*/ +static CM_INT32 s_Get_LatestAreaBuf(IN CM_UINT8* data1, IN CM_INT32 len1,IN CM_UINT8* data2, IN CM_INT32 len2,OUT CM_UINT8** dataOut) +{ + /** + * 4字节长度 + * n字节应用数据 + * 4字节长度 + * 1字节板卡ID + * 1字节区域状态 + * 1字节2x状态 + * 4字节区域周期号 + */ + CM_INT32 dataLen = 0; + CM_UINT32 statelen1 = 0u, statelen2 = 0u, applen1 = 0u, applen2 = 0u; + ENUM_2x2_STATE_T state2x2_1 = ENUM_2x2_OFFLINE, state2x2_2 = ENUM_2x2_OFFLINE; + CM_UINT32 cyc1 = 0u; + CM_UINT32 cyc2 = 0u; + if((NULL != data1) && (NULL != data2) && (NULL != dataOut)) + { + *dataOut = data1; /* 防空指针*/ + if((8 < len1) && (8 < len2)) + { + applen1 = CM_LongFromChar(data1); + applen2 = CM_LongFromChar(data2); + statelen1 = CM_LongFromChar(data1 + applen1 + 4u); + statelen2 = CM_LongFromChar(data2 + applen2 + 4u); + SFM_LOG_MSG_AREA("applen1:%d, applen2:%d, statelen1:%d, statelen2:%d\n", applen1, applen2, statelen1, statelen2); + if((statelen1 != AREA_DATA_STATE_LEN) && (statelen2 != AREA_DATA_STATE_LEN)) + { + /* 状态段长度错误*/ + dataLen = 0; + } + else if((statelen1 == AREA_DATA_STATE_LEN) && (statelen2 == AREA_DATA_STATE_LEN)) + { + /* 状态段长度均合法*/ + state2x2_1 = (ENUM_2x2_STATE_T)data1[10 + applen1]; + state2x2_2 = (ENUM_2x2_STATE_T)data2[10 + applen2]; + cyc1 = CM_LongFromChar(data1 + 11 + applen1); + cyc2 = CM_LongFromChar(data2 + 11 + applen2); + SFM_LOG_MSG_AREA("cyc1:%d, cyc2:%d\n",cyc1, cyc2); + /* 热备状态不一致,选择主系*/ + if((ENUM_2x2_MASTER == state2x2_1) && (ENUM_2x2_MASTER != state2x2_2)) + { + *dataOut = data1; + dataLen = len1; + } + else if((ENUM_2x2_MASTER != state2x2_1) && (ENUM_2x2_MASTER == state2x2_2)) + { + *dataOut = data2; + dataLen = len2; + } + else if(cyc1 >= cyc2) + { + /* 热备状态一致,根据周期号选择*/ + *dataOut = data1; + dataLen = len1; + } + else + { + /* 热备状态一致,根据周期号选择*/ + *dataOut = data2; + dataLen = len2; + } + } + else if(statelen1 == AREA_DATA_STATE_LEN) + { + /* 一个状态段长度合法*/ + *dataOut = data1; + dataLen = len1; + } + else + { + *dataOut = data2; + dataLen = len2; + } + } + else if(8 < len1) + { + *dataOut = data1; + dataLen = len1; + } + else + { + *dataOut = data2; + dataLen = len2; + } + } + else + { + + } + + return dataLen; +} +/** + * 获取区域数据缓冲区指针 + */ +CM_UINT32 SFM_GetAreaData(OUT CM_UINT8** data) +{ + CM_UINT32 len = 0u; + if(g_Area_App_Master_Len >= AREA_DATA_STATE_LEN + 8u) + { + len = g_Area_App_Master_Len - AREA_DATA_STATE_LEN - 4; + } + *data = p_Area_App_Master_DATA; + return len; +} +/* 区域状态切换*/ +void SFM_Area_State_Transition() +{ + s_Area_GetStateFromPulse(); + + if((ENUM_AREA_MASTER == s_area_state_Ctrl.AnotherAreaState) && (ENUM_AREA_MASTER == s_area_state_Ctrl.LocalAreaState)) + { + /*双主用防护*/ + if(0xAAu == g_PFM_Cfg.M_Area_Enable) + { + /* RC直接宕机*/ + CM_RE_ASSERT(0, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_1); + } + else + { + + } + } + else + { + + } + + /* 状态转换*/ + if( 0x00u == g_PFM_Cfg.M_Area_Enable) + { + /* 区域开关未开启*/ + SFM_LOG_MSG_AREA("Area is not Enabled\n"); + } + else if(ENUM_AREA_MASTER == s_area_state_Ctrl.AnotherAreaState) + { + /* 另一区域主用,不判断开关状态*/ + SFM_LOG_MSG_AREA("mode:Unknown, Local is 0x%x, Transition Start\n", g_PFM_Cfg.M_Area_Enable); + s_Area_State_Transition(); + } + else + { + /* 另一区域非主用,判断开关状态*/ + switch(s_area_state_Ctrl.AreaSwitchMode) + { + case ENUM_SWITCH_RC: + /* RC挡位*/ + if(0xAAu == g_PFM_Cfg.M_Area_Enable) + { + /* RC */ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + SFM_LOG_MSG_AREA("mode:RC, Local is 0x%x, State>>>>>>Master\n", g_PFM_Cfg.M_Area_Enable); + } + else if(0x55u == g_PFM_Cfg.M_Area_Enable) + { + /* CI */ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + SFM_LOG_MSG_AREA("mode:RC, Local is 0x%x, State>>>>>>Unavailable\n", g_PFM_Cfg.M_Area_Enable); + } + else + { + + } + break; + case ENUM_SWITCH_CI: + /* CI挡位*/ + if(0xAAu == g_PFM_Cfg.M_Area_Enable) + { + /* RC */ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + SFM_LOG_MSG_AREA("mode:CI, Local is 0x%x, State>>>>>>Unavailable\n", g_PFM_Cfg.M_Area_Enable); + } + else if(0x55u == g_PFM_Cfg.M_Area_Enable) + { + /* CI */ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + SFM_LOG_MSG_AREA("mode:CI, Local is 0x%x, State>>>>>>Master\n", g_PFM_Cfg.M_Area_Enable); + } + else + { + + } + break; + case ENUM_SWITCH_AUTO: + /* 自动挡位*/ + SFM_LOG_MSG_AREA("mode:AUTO, Local is 0x%x, Transition Start\n", g_PFM_Cfg.M_Area_Enable); + s_Area_State_Transition(); + break; + default: + /* 开关获取模式获取失败,无处理 */ + SFM_LOG_MSG_AREA("Area Switch is Error\n"); + break; + } + } +} +/* 区域状态机*/ +static void s_Area_State_Transition() +{ + ENUM_AREA_STATE_T tempState; + SFM_LOG_MSG_AREA("pulse is %d\n", s_area_state_Ctrl.pulse); + if(0x55u == g_PFM_Cfg.M_Area_Enable) + { + s_Area_CI_Transition(); + } + else + { + s_Area_RC_Transition(); + } +} +/** +* @brief 平台记录格式化字符串日志 +* @param filename 文件路径 +* @param func 函数名 +* @param line 行号 +* @param fmt 格式化字符串 +*/ +static void SFM_AREA_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_CHAR* fmt, ...) +{ + /*- 变量初始化 */ + va_list argList; + CM_CHAR msgBuf[1024]; + CM_INT32 headLen = 0; + CM_INT32 msgLen = 0; + if(NULL == fmt) + { + /* 无处理 */ + } + else + { + /*- 记录文件名、函数名、行号 */ + headLen = snprintf(msgBuf, sizeof(msgBuf), "ps:%s:%d:", filename, line); + va_start(argList, (fmt)); + /*- 记录日志内容 */ + msgLen += vsnprintf(msgBuf + headLen, sizeof(msgBuf) - (CM_SIZE_T)headLen, fmt, argList); + va_end(argList); +#ifdef WIN32 + Bootprintf("%s", msgBuf + headLen); +#endif + // printf("%s", msgBuf + headLen); + /*- 输出日志信息 */ + CM_MQ_Write((CM_MQ_Struct_T*)&s_Area_Thread_Ctrl.LogMsgQ, (CM_UINT8*)msgBuf, (CM_UINT16)headLen + msgLen); + } +} +/*日志转换*/ +void SFM_AREA_LOG_Transition(void) +{ + ENUM_CM_RETURN rt = ENUM_CM_FALSE; + CM_UINT8 buf[1024] = {0}; + CM_UINT16 len = 1024; + while(1) + { + len = 1024; + rt = CM_MQ_Read(&s_Area_Thread_Ctrl.LogMsgQ, buf, (CM_UINT16*)&len); + if(ENUM_CM_TRUE == rt) + { + /*- 输出日志信息 */ + (void)CFM_BaseLog_Send((CM_UINT8*)buf, len); + } + else + { + /*无处理*/ + break; + } + } +} +/*协程状态控制接口*/ +STRU_AREA_STATE_CTRL_T* SFM_Area_BackPointer_Ctrl(void) +{ + /**< 主线程2x2控制 */ + return &s_area_state_Ctrl; +} +/* 根据状态设置脉冲*/ +void SFM_SetPulse(ENUM_AREA_STATE_T state) +{ + ENUM_PULSE_TYPE_T pulseA, pulseB; + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + switch(state) + { + case ENUM_AREA_MASTER: + DFM_Pulse_Set(ENUM_PULSE_MASTER); + break; + case ENUM_AREA_SLAVE: + DFM_Pulse_Set(ENUM_PULSE_SLAVE); + break; + case ENUM_AREA_UNAVAILABLE: + DFM_Pulse_Set(ENUM_PULSE_UNAVAILABLE); + break; + default: + DFM_Pulse_Set(ENUM_PULSE_ERROR); + break; + } + /* 此处读取操作用于清空脉冲计数,不关注返回值*/ + (void)DFM_Pulse_FeedBack(&pulseA); + (void)DFM_Pulse_Get(&pulseA, &pulseB); + } +} +/* 根据状态设置主备用灯*/ +void SFM_SetAreaLed(ENUM_AREA_STATE_T state) +{ + if(0x00u != g_PFM_Cfg.M_Area_Enable) + { + switch(state) + { + case ENUM_AREA_MASTER: + DFM_ledAREA(0x01u); + break; + case ENUM_AREA_SLAVE: + DFM_ledAREA(0x02u); + break; + case ENUM_AREA_UNAVAILABLE: + DFM_ledAREA(0x03u); + break; + default: + DFM_ledAREA(0x03u); + break; + } + } +} +/* 获取接收到的周期号*/ +CM_UINT32 SFM_Area_GetRxSysCount() +{ + return s_area_state_Ctrl.RxAreaSysCyc; +} +/* 获取区域周期号*/ +CM_UINT32 SFM_Area_GetSysCount() +{ + return g_MSCP_AreaCount; +} +/* 从AB两系的脉冲选择有效的脉冲 +* 必须在状态转换(SFM_Area_State_Transition)前进行 +*/ +static void s_Area_GetValidPulse() +{ + s_area_state_Ctrl.AllInterrupt = 0u; + /* 更新亚健康标志*/ + s_area_state_Ctrl.healthFlag[2] = s_area_state_Ctrl.healthFlag[1]; + s_area_state_Ctrl.healthFlag[1] = s_area_state_Ctrl.healthFlag[0]; + s_area_state_Ctrl.healthFlag[0] = 0u; + + if((ENUM_PULSE_ERROR == s_area_state_Ctrl.pulseA) && (ENUM_PULSE_ERROR == s_area_state_Ctrl.pulseB)) + { + /* 检测双系脉冲均无效*/ + s_area_state_Ctrl.pulse = ENUM_PULSE_ERROR; + if((0u == s_area_state_Ctrl.AreaRecved) && (1u == s_area_state_Ctrl.TimeSyncFlag_Area)) + { + /* 脉冲无效,且UDP未收到,认为另一区域两系宕机*/ + s_area_state_Ctrl.RxAreaSysCyc = 0u; /* 清空接收周期号,避免另一区域再起后不接收*/ + s_area_state_Ctrl.AllInterrupt = 1u; + s_area_state_Ctrl.healthFlag[0] = 1u; /* 通信全中断时,认为健康*/ + SFM_LOG_MSG_AREA("Area All Interruptted!!!!!!!\n"); + } + else + { + + } + } + else if(1u == s_area_state_Ctrl.AreaRecved) + { + /* 根据协程接收到的板卡号选择脉冲*/ + /* 本周期收到区域数据,根据板卡号选择脉冲*/ + if(2u == s_area_state_Ctrl.AnotherBoardID) + { + s_area_state_Ctrl.pulse = s_area_state_Ctrl.pulseB; + } + else + { + s_area_state_Ctrl.pulse = s_area_state_Ctrl.pulseA; + } + + if(s_area_state_Ctrl.AnotherAreaState == s_ConvertPulseToState(s_area_state_Ctrl.pulse)) + { + /* 脉冲与UDP接收状态一致,健康状态*/ + s_area_state_Ctrl.healthFlag[0] = 1u; + } + else + { + SFM_LOG_MSG_AREA("Area Pulse State Unhealthy!!!!!!\n"); + } + } + else + { + /* 未收到UDP则选择更高优先级脉冲*/ + if(s_area_state_Ctrl.pulseA >= s_area_state_Ctrl.pulseB) + { + s_area_state_Ctrl.pulse = s_area_state_Ctrl.pulseA; + } + else + { + s_area_state_Ctrl.pulse = s_area_state_Ctrl.pulseB; + } + } +} +/* 区域协程的2oo2x交互*/ +static void s_Area_2oo2x2() +{ + /* 清空缓冲区长度*/ + g_Area_App_Master_Len = 0; + g_Area_App_Slave_Len = 0; + g_2oo2_Area_App_Data_Len = 0u; + g_2x2_Area_App_Data_Len = 0u; + g_2x2oo2_Area_App_Data_Len = 0u; + + if(g_Area_App_Data_Len < AREA_DATA_STATE_LEN + 8) + { + /* 未收到另一区域主系数据*/ + (void)CM_Memcpy(g_Area_App_DATA, sizeof(g_Area_App_DATA), g_Area_State_Cache, g_Area_State_Cache_Len); + SFM_LOG_MSG_AREA("Area Recv Another Master Fail\n"); + g_Area_App_Data_Len = g_Area_State_Cache_Len; + } + /* 2取交互*/ + g_2oo2_Area_App_Data_Len = SFM_2oo2_Currency_Area(g_Area_App_DATA, g_Area_App_Data_Len, g_2oo2_Area_App_DATA, sizeof(g_2oo2_Area_App_DATA)); + SFM_LOG_MSG_AREA("Area 2x2 Send Data 111, len=%d-%d\n", g_Area_App_Data_Len, g_2oo2_Area_App_Data_Len); + g_Area_App_Master_Len = s_Get_LatestAreaBuf(g_Area_App_DATA, g_Area_App_Data_Len, g_2oo2_Area_App_DATA, g_2oo2_Area_App_Data_Len, &p_Area_App_Master_DATA); + + SFM_2x2_AREA_Send(p_Area_App_Master_DATA, g_Area_App_Master_Len, ENUM_2x2_AREA_MSG_DATA); + SFM_LOG_MSG_AREA("Area 2x2 Send Data, len=%d\n", g_Area_App_Master_Len); + + /* 2x接收*/ + CM_Sleep(AREA_2X_RECV_WAIT); + s_2x2_Area_Recv(); + SFM_LOG_MSG_AREA("Area 2x2 Data Recv, len=%d\n", g_2x2_Area_App_Data_Len); + /* 2取2x接收的数据*/ + g_2x2oo2_Area_App_Data_Len = SFM_2oo2_Currency_Area(g_2x2_Area_App_DATA, g_2x2_Area_App_Data_Len, g_2x2oo2_Area_App_DATA, sizeof(g_2x2oo2_Area_App_DATA)); + SFM_LOG_MSG_AREA("Area 2oo2 After 2x2 Data Recv, len=%d\n", g_2x2oo2_Area_App_Data_Len); + + if(ENUM_2x2_MASTER == s_area_state_Ctrl.Local2x2State) + { + /* 主系只使用自己的数据*/ + g_Area_App_Master_Len = s_Get_LatestAreaBuf(g_Area_App_DATA, g_Area_App_Data_Len, g_2oo2_Area_App_DATA, g_2oo2_Area_App_Data_Len, &p_Area_App_Master_DATA); + g_Area_App_Slave_Len = s_Get_LatestAreaBuf(g_2x2_Area_App_DATA, g_2x2_Area_App_Data_Len, g_2x2oo2_Area_App_DATA, g_2x2oo2_Area_App_Data_Len, &p_Area_App_Slave_DATA); + } + else + { + /* 非主系使用主系同步数据*/ + g_Area_App_Master_Len = s_Get_LatestAreaBuf(g_2x2_Area_App_DATA, g_2x2_Area_App_Data_Len, g_2x2oo2_Area_App_DATA, g_2x2oo2_Area_App_Data_Len, &p_Area_App_Master_DATA); + g_Area_App_Slave_Len = s_Get_LatestAreaBuf(g_Area_App_DATA, g_Area_App_Data_Len, g_2oo2_Area_App_DATA, g_2oo2_Area_App_Data_Len, &p_Area_App_Slave_DATA); + } + g_Area_App_Data_Len = 0; + g_Area_State_Cache_Len = 0; + SFM_LOG_MSG_AREA("Master Data Len:%d, Slave Data Len:%d\n",g_Area_App_Master_Len ,g_Area_App_Slave_Len ); +} +/* 根据脉冲状态获取区域状态 状态转换前进行*/ +static void s_Area_GetStateFromPulse() +{ + /* 获取有效脉冲*/ + static CM_UINT32 notSameCnt = 0u; + ENUM_AREA_STATE_T state = ENUM_AREA_UNAVAILABLE; + s_Area_GetValidPulse(); + if(1u == s_area_state_Ctrl.AreaRecved) + { + state = s_ConvertPulseToState(s_area_state_Ctrl.pulse); + if(state != s_area_state_Ctrl.AnotherAreaState) + { + notSameCnt++; + SFM_LOG_MSG_AREA("Area Pulse State Not Same Pulse is %d State is %d\n", state, s_area_state_Ctrl.AnotherAreaState); + } + else + { + + } + } + else if(0u == s_area_state_Ctrl.AreaRecved) + { + /* 本周期未收到udp通信,则使用脉冲状态作为对区域状态*/ + s_area_state_Ctrl.AnotherAreaState = s_ConvertPulseToState(s_area_state_Ctrl.pulse); + } + else + { + + } + // printf("Area Pulse State Not Same Cnt = %d", notSameCnt); + SFM_LOG_MSG_AREA("Area Pulse State Not Same Cnt = %d\n", notSameCnt); +} +/** + * @brief 周期末区域同步 + * @param CI_Buf CI待发送区域数据 + * @param buf_len CI_Buf待发送数据长度 + * @param buf_size CI_Buf缓冲区最大容量 + * */ +void SFM_Area_EndProc(CM_UINT8* CI_Buf, CM_INT32 buf_len, CM_UINT32 buf_size) +{ + CM_UINT8* p_areaData = NULL; /*区域数据指针*/ + CM_UINT32 areaDataLen = 0; /*区域数据长度*/ + CM_UINT8 sendBuf[100] = {0u}; + CM_UINT32 offset = 0u; /* 组包使用的offset*/ + ENUM_CM_RETURN ret = ENUM_CM_FALSE; + ENUM_AREA_STATE_T state_area = SFM_Area_GetLocalAreaState(); + ENUM_2x2_STATE_T state_2x2 = SFM_2x2_GetLocal2x2State(); + /* 区域数据设置*/ + MSCP_LOG_MSG("Local Area is %d\n", g_PFM_Cfg.M_Area_Enable); + SFM_AREA_Thread_WaitStop(); + if(0xAAu == g_PFM_Cfg.M_Area_Enable) + { + /* 仅RC设置*/ + areaDataLen = SFM_GetAreaData(&p_areaData); + if(NULL != RC_API_FollowUp && 4u < areaDataLen) + { + s_area_state_Ctrl.RCFollowFlag = RC_API_FollowUp(p_areaData, areaDataLen); + } + else + { + MSCP_LOG_MSG("RC:Set App Func Fail, len = %d\n", areaDataLen); + } + MSCP_LOG_MSG("RC:Set App Data, alllen=%d, len=%d, time:%llums\n", areaDataLen, CM_LongFromChar(p_areaData), NOW_USED_TIME / 1000u); + } + else if(0x55u == g_PFM_Cfg.M_Area_Enable) + { + /* CI*/ + if(buf_len <= (CM_INT32)buf_size - AREA_DATA_STATE_LEN - 12) + { + offset = buf_len; + CM_LongToChar(AREA_DATA_STATE_LEN, &CI_Buf[offset]); + offset += 4u; + CI_Buf[offset] = g_PFM_Cfg.BOARD_ID; + offset += 1u; + CI_Buf[offset] = state_area; + offset += 1u; + CI_Buf[offset] = state_2x2; + offset += 1u; + CM_LongToChar(g_MSCP_AreaCount, &CI_Buf[offset]); + offset += 4u; + if((state_area == ENUM_AREA_MASTER) && (state_2x2 == ENUM_2x2_MASTER)) + { + /* 主用主系发送应用同步数据与状态*/ + s_2oo2Before_AreaSend(CI_Buf, offset, buf_size, ENUM_AREA_MSG_MASTER); + MSCP_LOG_MSG("CI:Send App Data and State, len = %d\n", offset + 8); + } + else + { + /* 非主用主发送状态数据*/ + offset -= buf_len; + ret = CM_Memcpy(sendBuf + 4, sizeof(sendBuf), CI_Buf + buf_len, offset); + CM_ASSERT(ENUM_CM_TRUE == ret, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); + CM_LongToChar(0u, sendBuf); + offset += 4u; + s_2oo2Before_AreaSend(sendBuf, offset, sizeof(sendBuf), ENUM_AREA_MSG_SLAVE); + MSCP_LOG_MSG("CI:Send State\n"); + } + } + else + { + /* 无处理*/ + MSCP_LOG_MSG("CI:Send App Data too Long\n"); + } + MSCP_LOG_MSG("CI Recv Send Used:%llums\n", NOW_USED_TIME / 1000u); + } + else + { + /* 区域开关未开,无处理*/ + } +} +/** + * @brief 直接从脉冲状态转换出区域状态 + * */ +static ENUM_AREA_STATE_T s_ConvertPulseToState(ENUM_PULSE_TYPE_T pulse) +{ + ENUM_AREA_STATE_T state = ENUM_AREA_UNAVAILABLE; + switch (pulse) + { + case ENUM_PULSE_MASTER: + state = ENUM_AREA_MASTER; + break; + case ENUM_PULSE_SLAVE: + state = ENUM_AREA_SLAVE; + break; + default: + state = ENUM_AREA_UNAVAILABLE; + break; + } + + return state; +} +/** + * 发送区域数据时,先2取计算双CRC后发送 + */ +static void s_2oo2Before_AreaSend(CM_UINT8 *buf, CM_INT32 len, CM_UINT32 bufsize, ENUM_AREA_MSG_T msg_type) +{ + CM_UINT8 mybuf[12] = { 0u }; /* 本机2oo2缓冲区 */ + CM_UINT8 peerbuf[12] = { 0u };/* 邻机2oo2缓冲区 */ + CM_UINT32 crc = 0u, crc1 = 0u, crc2 = 0u; /* crc值 */ + CM_INT32 ret = 0u; + + crc = CM_Crc32(buf, len); + if(1u == g_PFM_Cfg.CPU_ID) + { + crc1 = CM_Crc32_1(buf, len); + CM_LongToChar(crc1, mybuf + 8); + } + else + { + crc2 = CM_Crc32_2(buf, len); + CM_LongToChar(crc2, mybuf + 8); + } + + CM_LongToChar(len, mybuf); + CM_LongToChar(crc, mybuf + 4); + ret = SFM_2oo2_Currency_Area(mybuf, 12u, peerbuf, 12u); + /*- 2oo2严格比较特征信息 */ + CM_RE_ASSERT(12 == ret, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_6); + ret = CM_Memcmp(mybuf, peerbuf, (CM_SIZE_T)8); + CM_RE_ASSERT(0 == ret, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_7); + if(1u == g_PFM_Cfg.CPU_ID) + { + crc2 = CM_LongFromChar(peerbuf + 8); + } + else + { + crc1 = CM_LongFromChar(peerbuf + 8); + } + if(bufsize >= len + 8) + { + CM_LongToChar(crc1, &buf[len]); + len += 4; + CM_LongToChar(crc2, &buf[len]); + len += 4; + SFM_AREA_Send(buf, len, msg_type); + } + else + { + SFM_LOG_MSG_AREA("Area Send Buf too long!!!\n"); + } + +} +/* 主备系接收情况判断*/ +static void s_Area_GetMasterData() +{ + CM_UINT32 appLen = 0u; + static CM_UINT32 Slave_sysCyc = 0; + static CM_UINT32 Master_sysCyc = 0; + appLen = 0u; + if(g_Area_App_Slave_Len >= AREA_DATA_STATE_LEN + 8) + { + appLen = CM_LongFromChar(&p_Area_App_Slave_DATA[0]); + Slave_sysCyc = CM_LongFromChar(&p_Area_App_Slave_DATA[appLen + 11u]); + } + else + { + + } + /*使用主系的数据*/ + s_area_state_Ctrl.AreaRecved = 0u; + s_area_state_Ctrl.AreaAppRecved = 0u; + if(g_Area_App_Master_Len >= AREA_DATA_STATE_LEN + 8) + { + appLen = CM_LongFromChar(&p_Area_App_Master_DATA[0]); + Master_sysCyc = CM_LongFromChar(&p_Area_App_Master_DATA[appLen + 11u]); + s_area_state_Ctrl.AreaRecved = 1u; + if(appLen > 0u) + { + /* 接收到区域应用数据*/ + s_area_state_Ctrl.AreaAppRecved = 1u; + } + /* 更新接收周期号为主系的接收周期号*/ + s_area_state_Ctrl.RxAreaSysCyc = Master_sysCyc; + s_area_state_Ctrl.AnotherBoardID = p_Area_App_Master_DATA[appLen + 8u]; + s_area_state_Ctrl.AnotherAreaState = p_Area_App_Master_DATA[appLen + 9u]; + } + else + { + /* 主系没收到数据*/ + s_area_state_Ctrl.AnotherAreaState = ENUM_AREA_UNAVAILABLE; + } + + /* 备系收到最新区域数据,主系未收到,设置标志位*/ + if(Slave_sysCyc > Master_sysCyc && Slave_sysCyc >= s_area_state_Ctrl.SysCyc && CM_TRUE == s_area_state_Ctrl.TimeSyncFlag_2x2) + { + s_area_state_Ctrl.flag_Mf_Ss = 1u; + } + else + { + s_area_state_Ctrl.flag_Mf_Ss = 0u; + } +} +/** + * @brief 同步周期号 + */ +void SFM_Area_UpdateCYC(void) +{ + ENUM_AREA_STATE_T state_area = SFM_Area_GetLocalAreaState(); + if((ENUM_AREA_MASTER != state_area) && (1u == s_area_state_Ctrl.AreaRecved)) + { + /* 非主用更新周期号*/ + MSCP_LOG_MSG("Area Set CYC:%d->%d\n", g_MSCP_AreaCount, s_area_state_Ctrl.RxAreaSysCyc); + g_MSCP_AreaCount = s_area_state_Ctrl.RxAreaSysCyc; + + } + else + { + + } +} +/* CI状态机*/ +static void s_Area_CI_Transition() +{ + switch(s_area_state_Ctrl.LocalAreaState) + { + case ENUM_AREA_UNAVAILABLE: + + if((s_area_state_Ctrl.WaitCounter >= CI_WAIT) && (1u == s_area_state_Ctrl.isAllowed)) + { + /* RC也为不可用,则CI升主用*/ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + SFM_LOG_MSG_AREA("CI:Unavailable>>>>>>Master\n"); + } + else + { + SFM_LOG_MSG_AREA("CI:Unavailable>>>>>>Master, WC:%d, IA:%d\n", s_area_state_Ctrl.WaitCounter, s_area_state_Ctrl.isAllowed); + } + + break; + case ENUM_AREA_SLAVE: + /* CI无备用状态,永远无法进入该分支*/ + break; + case ENUM_AREA_MASTER: + /* 双主用在此函数前防护*/ + SFM_LOG_MSG_AREA("0x%x:MASTER>>>>>>>>>MASTER\n", g_PFM_Cfg.M_Area_Enable); + break; + default: + /*无处理*/ + break; + } +} +/* RC状态机*/ +static void s_Area_RC_Transition() +{ + switch(s_area_state_Ctrl.LocalAreaState) + { + case ENUM_AREA_UNAVAILABLE: + /*RC*/ + if((s_area_state_Ctrl.RxAreaSysCyc == s_area_state_Ctrl.SysCyc) && + (1u == s_area_state_Ctrl.AreaAppRecved) && + (ENUM_AREA_MASTER == s_area_state_Ctrl.AnotherAreaState) && + (1u == s_area_state_Ctrl.RCFollowFlag)) + { + /* RC收到CI主用的应用同步数据,且完成时间同步,RC升备*/ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_SLAVE; + SFM_LOG_MSG_AREA("RC:Unavailable>>>>>>Slave(sync success)\n"); + } + else if((s_area_state_Ctrl.WaitCounter >= RC_WAIT) && (1u == s_area_state_Ctrl.isAllowed)) + { + /*CI未启动,RC升主*/ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + SFM_LOG_MSG_AREA("RC:Unavailable>>>>>>Master(CI is not started)\n"); + } + else + { + /*无处理,维持不可用*/ + SFM_LOG_MSG_AREA("RC:Unavailable>>>>>>Slave(TS_A=%d, RxCYC=%d, CYC=%d, WC:%d, IA:%d, AAR:%d, AAS:%d, RF:%d)\n", + s_area_state_Ctrl.TimeSyncFlag_Area, s_area_state_Ctrl.RxAreaSysCyc, s_area_state_Ctrl.SysCyc, + s_area_state_Ctrl.WaitCounter, s_area_state_Ctrl.isAllowed, s_area_state_Ctrl.AreaAppRecved, + s_area_state_Ctrl.AnotherAreaState, s_area_state_Ctrl.RCFollowFlag); + } + + break; + case ENUM_AREA_SLAVE: + /*RC*/ + if((1u == s_area_state_Ctrl.AreaAppRecved) && (1u == s_area_state_Ctrl.RCFollowFlag)) + { + SFM_LOG_MSG_AREA("RC:SLAVE>>>>>>>>>SLAVE\n"); + } + else if((1u == s_area_state_Ctrl.AllInterrupt) && ((s_area_state_Ctrl.healthFlag[1] + s_area_state_Ctrl.healthFlag[2]) >= 1u)) + { + /*CI故障,降为不可用,则RC升为主用(上周期不为亚健康状态)*/ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_MASTER; + SFM_LOG_MSG_AREA("RC:SLAVE>>>>>>>>>Master(CI is unavailable), pulse:%d, CYC:%d, RXCYC:%d\n", s_area_state_Ctrl.pulse, s_area_state_Ctrl.SysCyc, s_area_state_Ctrl.RxAreaSysCyc); + } + else + { + /*RC未收到CI主用的应用同步数据(脉冲正常)*/ + s_area_state_Ctrl.LocalAreaState = ENUM_AREA_UNAVAILABLE; + SFM_LOG_MSG_AREA("RC:SLAVE>>>>>>>>>Unavailable(sync data recv failed), pulse:%d, CYC:%d, RXCYC:%d, healthy:%d, last health:%d, last last health:%d, RF:%d\n", + s_area_state_Ctrl.pulse, s_area_state_Ctrl.SysCyc, s_area_state_Ctrl.RxAreaSysCyc, + s_area_state_Ctrl.healthFlag[0], s_area_state_Ctrl.healthFlag[1], s_area_state_Ctrl.healthFlag[2], s_area_state_Ctrl.RCFollowFlag); + } + break; + case ENUM_AREA_MASTER: + /* 双主用在此函数前防护*/ + SFM_LOG_MSG_AREA("0x%x:MASTER>>>>>>>>>MASTER\n", g_PFM_Cfg.M_Area_Enable); + break; + default: + /*无处理*/ + break; + } +} \ No newline at end of file diff --git a/TSCP/src/MSCP/SFM/SFM_Area.h b/TSCP/src/MSCP/SFM/SFM_Area.h new file mode 100644 index 0000000..56b5cdb --- /dev/null +++ b/TSCP/src/MSCP/SFM/SFM_Area.h @@ -0,0 +1,182 @@ +/* + * SFM_Area.h + * + * Created on: 2025年8月28日 + * Author: hisun + */ + +#ifndef MSCP_SFM_SFM_AREA_H_ +#define MSCP_SFM_SFM_AREA_H_ +#include "CM_Mutex.h" +#include "MSCP_APP_Interface.h" +#include "CM_Sem.h" +#include "CM_MultiThread.h" +#include "CM_MQ.h" +#include "PFM_Log.h" +#include "CFM_Net.h" +#include "CM_Convert.h" +#include "DFM_DRV.h" + +extern CM_UINT32 g_MSCP_AreaCount; + + +/** + * 区域数据中状态部分结构 + * 1字节板卡ID + * 1字节区域状态 + * 1字节2x状态 + * 4字节周期号 + */ +#define AREA_DATA_STATE_LEN (7) + +#define MSCP_AREA_OVER_TIME (g_PFM_Cfg.CYC_TIME) /*区域协程判断数据超时时间*/ + +typedef enum{ + ENUM_AREA_MSG_SLAVE = 0, + ENUM_AREA_MSG_MASTER, + ENUM_AREA_MSG_ERROR +}ENUM_AREA_MSG_T; + +typedef enum{ + ENUM_2x2_AREA_MSG_DATA = 0, +}ENUM_2x2_AREA_MSG_T; + +typedef struct +{ + CM_SEM_T m_Start; /* 2x状态切换开始信号量 */ + CM_SEM_T m_Stop; /* 2x状态切换结束信号量 */ + CM_MUTEX_T mutex; /**< 互斥信号量 */ + CM_MQ_Struct_T LogMsgQ; /**< 日志消息队列 */ +}STRU_AREA_THREAD_T; + +/*2x状态切换线程参数*/ +typedef struct +{ + CM_UINT32 SysCyc; /**< 系统区域周期号 */ + + /*区域状态*/ + ENUM_AREA_STATE_T LocalAreaState; /**< 本区域状态*/ + ENUM_AREA_STATE_T LastLocalAreaState; /**< 本上一周期的区域状态*/ + ENUM_AREA_STATE_T AnotherAreaState; /* 另一区域状态*/ + ENUM_AREA_STATE_T LastAnotherAreaState; /* 另一区域上一周期状态*/ + + /* 记录区域状态发送板卡ID(与脉冲比较)*/ + CM_UINT8 AnotherBoardID; + + /* 2x状态 */ + ENUM_2x2_STATE_T Local2x2State; /**< 本系2x热备状态 */ + ENUM_2x2_STATE_T Partner2x2State; /**< 对系2x热备状态 */ + + /* 时间同步标志*/ + CM_UINT8 TimeSyncFlag_Area; + CM_UINT8 TimeSyncFlag_2x2; + + /* 接收周期号*/ + CM_UINT32 RxAreaSysCyc; + CM_UINT32 Rx2x2DataSysCyc; + + /* 区域接收完成标志位*/ + CM_UINT8 AreaRecved; + CM_UINT8 AreaAppRecved; + + CM_UINT8 AllInterrupt; /* 脉冲与udp均中断标志*/ + + CM_UINT8 RCFollowFlag; /* 周期末交给应用进行跟随,返回失败*/ + + /*脉冲信号*/ + ENUM_PULSE_TYPE_T pulse; /* 另一区域脉冲,设置时通过板卡ID区分A系还是B系*/ + ENUM_PULSE_TYPE_T pulseA; /* 另一区域脉冲,设置时通过板卡ID区分A系还是B系*/ + ENUM_PULSE_TYPE_T pulseB; /* 另一区域脉冲,设置时通过板卡ID区分A系还是B系*/ + + /*主系通信失败,备系成功标志*/ + CM_UINT8 flag_Mf_Ss; + + /* 允许升主标志*/ + CM_UINT8 isAllowed; /* 0u不允许升主,1u允许升主(计数足够)*/ + /* 升主计数*/ + CM_UINT32 WaitCounter; + /* 倒切按钮状态*/ + ENUM_SWITCH_MODE_T AreaSwitchMode; + /* 亚健康标志,0亚健康,1正常(脉冲与UDP接收状态不一致,亚健康,以UDP接收状态为准,且可维持备用,仅不能备升主用)*/ + CM_UINT8 healthFlag[3]; /* 记录最近三周期脉冲与通信健康状况,0为当前周期,1为上周期,2为上上周期,值0亚健康,1健康*/ +}STRU_AREA_STATE_CTRL_T; + +/** + * 发送起始信号量 + */ +void SFM_AREA_Thread_PostStart(); +/** + * 等待结束信号量 + */ +void SFM_AREA_Thread_WaitStop(); +/** +* @brief 时间同步失败清空消息队列 +* @param 无 +* @return 无 +*/ +void SFM_AREA_ClearRcvMsgQ(void); +/** +* @brief 时间同步失败清空消息队列 +* @param 无 +* @return 无 +*/ +void SFM_2X2_AREA_ClearRcvMsgQ(void); +/** + * 初始化 + */ +void SFM_Area_Init(); +/** +* @brief 区域发送 +* @param Data 发送报文指针 +* @param DataLen 发送报文长度 +* param msgType 报文类型 +* @details +* @see :: s_2x2_Recv +* @see :: SFM_FrameSave +*/ +void SFM_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_AREA_MSG_T msgType); +/** +* @brief 区域发送 +* @param Data 发送报文指针 +* @param DataLen 发送报文长度 +* param msgType 报文类型 +* @details +* @see :: s_2x2_Recv +* @see :: SFM_FrameSave +*/ +void SFM_2x2_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_2x2_AREA_MSG_T msgType); +/** + * 获取区域数据缓冲区指针 + */ +CM_UINT32 SFM_GetAreaData(OUT CM_UINT8** data); +/* 区域状态切换 必须在2x线程结束后进行*/ +void SFM_Area_State_Transition(); +/*日志转换*/ +void SFM_AREA_LOG_Transition(void); +/*协程状态控制接口*/ +STRU_AREA_STATE_CTRL_T* SFM_Area_BackPointer_Ctrl(void); +/* 根据状态设置脉冲*/ +void SFM_SetPulse(ENUM_AREA_STATE_T state); +/* 根据状态设置主备用灯*/ +void SFM_SetAreaLed(ENUM_AREA_STATE_T state); +/* 获取接收到的周期号*/ +CM_UINT32 SFM_Area_GetRxSysCount(); +/* 获取区域周期号*/ +CM_UINT32 SFM_Area_GetSysCount(); +/** + * @brief 周期末区域同步 + * @param CI_Buf CI待发送区域数据 + * @param buf_len CI_Buf待发送数据长度 + * @param buf_size CI_Buf缓冲区最大容量 + * */ +void SFM_Area_EndProc(CM_UINT8* CI_Buf, CM_INT32 buf_len, CM_UINT32 buf_size); +/** + * @brief 同步周期号 + */ +void SFM_Area_UpdateCYC(void); + + + + + +#endif /* MSCP_SFM_SFM_AREA_H_ */ diff --git a/TSCP/src/MSCP/SFM/SFM_Prtcl.c b/TSCP/src/MSCP/SFM/SFM_Prtcl.c index bb32bbc..9c7ae2e 100644 --- a/TSCP/src/MSCP/SFM/SFM_Prtcl.c +++ b/TSCP/src/MSCP/SFM/SFM_Prtcl.c @@ -94,8 +94,8 @@ void SFM_PrtclOutInit(void) s_OutnetPrtcl.LocalID = (CM_UINT8)(OutnetID % 256u); s_OutnetPrtcl.LocalType = (CM_UINT8)(OutnetID / 256u); s_OutnetPrtcl.CycleNum = &g_MSCP_SysCount; - s_OutnetPrtcl.InputSize = 6000u; - s_OutnetPrtcl.OutputSize = 6000u; + s_OutnetPrtcl.InputSize = 7200u; + s_OutnetPrtcl.OutputSize = 7200u; s_OutnetPrtcl.RecordArraySize = 30000u; s_OutnetPrtcl.MaxNumPerCycle = 35u; /* 以zc举例:包数*4*2*2*2 */ #if QNX @@ -711,11 +711,13 @@ CM_UINT32 Prtcl_OutnetSafe_AppRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT16* pSrcL else { /*- 无处理*/ + MSCP_LOG_MSG("Outnet Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); } } else { /*- 无处理*/ + MSCP_LOG_MSG("Outnet Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); } /*- 解锁接收队列 */ @@ -836,11 +838,13 @@ CM_UINT32 Prtcl_InnetSafe_AppRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTi else { /*- 无处理*/ + MSCP_LOG_MSG("Innet Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); } } else { /*- 无处理*/ + MSCP_LOG_MSG("Innet Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); } /*- 解锁接收队列 */ @@ -984,12 +988,14 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim else { /*- 无处理*/ + MSCP_LOG_MSG("Rm Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); break; } } else { /*- 无处理*/ + MSCP_LOG_MSG("Rm Recv, msglen:%d, qstatus:%d, rxsize:%d\n",msgLen, qStatus, rxSize); break; } }while(1); diff --git a/TSCP/src/MSCP/SFM/SFM_Prtcl.h b/TSCP/src/MSCP/SFM/SFM_Prtcl.h index 58a2f6e..03b3f7d 100644 --- a/TSCP/src/MSCP/SFM/SFM_Prtcl.h +++ b/TSCP/src/MSCP/SFM/SFM_Prtcl.h @@ -32,6 +32,7 @@ extern "C" #define SFM_OUTNETSAFE_BUFF_SIZE (1024u*1024u*10u) /* 外网安全通信通道UDP缓冲区大小 512k*20,应用许用量为500k */ #define SFM_COM485_RECV_SIZE (1024u*10u*10u) /*接收485串口通道空间*/ #define SFM_INNETSAFE_RM_BUFF_SIZE (1024u*10u) /* 远程部署内网安全通信通道UDP缓冲区大小 10k */ +#define SFM_AREA_DATA_BUFF_SIZE (1024u*200u) /* 区域数据通道UDP缓冲区大小 200k */ #if SFM_OUTNETSAFE_BUFF_SIZE > SFM_INNETSAFE_BUFF_SIZE #define SFM_TMP_CACHE_SIZE SFM_OUTNETSAFE_BUFF_SIZE diff --git a/TSCP/src/MSCP/SFM/SFM_package.c b/TSCP/src/MSCP/SFM/SFM_package.c index b89746c..e4747d3 100644 --- a/TSCP/src/MSCP/SFM/SFM_package.c +++ b/TSCP/src/MSCP/SFM/SFM_package.c @@ -105,160 +105,3 @@ ENUM_CM_RETURN SFM_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, /*- 输出返回值*/ return rt; } -/** -* @brief 2X分帧接收 -* @param pCtrl 控制结构体 -* @param type 帧类型 -* @param FrameNum 帧数目 -* @param FrameIndex 帧序号 -* @param pFrameData 分帧数据报文指针 -* @param FrameDataLen 分帧数据报文长度 -* @param pRxBuf 接收缓冲区指针 -* @param pRxLen 接收报文总长度 -* @param RxSize 接收缓冲区大小 -* @return 处理结果 -* - ENUM_CM_FALSE 处理出错 -* - ENUM_CM_TRUE 处理完成(收齐完整报文) -* - ENUM_CM_NULL 处理中(接收有效,但尚未收齐完整报文) -* @details 收齐完整报文后才会置位接收报文总长度,否则为0 -*/ -ENUM_CM_RETURN SFM_2X_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize) -{ - /*- 变量初始化 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 函数返回值 */ - /*- 指针防空 */ - CM_ASSERT((NULL != pRxBuf) && (NULL != pFrameData) && (NULL != pCtrl), PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - /*- 是否收到新报文 */ - if (1u == FrameIndex) - { - /*- 初始化控制结构体 */ - pCtrl->type = type; - pCtrl->FrameNum = FrameNum; - pCtrl->FramIndex = 0u; - pCtrl->RxLen = 0; - /*- 接收报文总长度置0 */ - *pRxLen = 0; - } - else - { - /*- 无处理 */ - } - /*- 检查收到的分帧帧头信息是否合法 */ - if ((type == pCtrl->type) - && (FrameNum == pCtrl->FrameNum) - && (FrameIndex == (pCtrl->FramIndex + 1u))) - { - /*- 收到的帧序号累加 */ - pCtrl->FramIndex++; - - /*- 保存本帧数据 */ - rt = CM_Memcpy((void*)(g_2x2oo2_Frame_TempBuf + pCtrl->RxLen), (CM_SIZE_T)CM_SIGNED_INT_EXP((CM_INT32)RxSize - pCtrl->RxLen), (const void*)pFrameData, (CM_SIZE_T)FrameDataLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - CM_RE_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); - pCtrl->RxLen += FrameDataLen; - - /*- 是否是最后一帧 */ - if (FrameIndex == FrameNum) - { - /*- 输出报文总长度 */ - *pRxLen = pCtrl->RxLen; - rt = CM_Memcpy(pRxBuf,RxSize,g_2x2oo2_Frame_TempBuf,pCtrl->RxLen); - CM_RE_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3); - /*- 返回值置ENUM_CM_TRUE */ - rt = ENUM_CM_TRUE; - } - else - { - /*- 返回值置ENUM_CM_NULL */ - rt = ENUM_CM_NULL; - } - } - else - { - MSCP_LOG_MSG("SFM_2X_FrameSave error:\n type = %d, pCtrl->type = %d, FrameNum = %d, pCtrl->FrameNum = %d, FrameIndex = %d, pCtrl->FramIndex = %d\n",type,pCtrl->type,FrameNum,pCtrl->FrameNum,FrameIndex,pCtrl->FramIndex); - /*- 出错后复位接收控制 */ - pCtrl->type = 0u; - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_SFM_2X2FRAME,6u, - sizeof(CM_UINT8),type, - sizeof(CM_UINT8),pCtrl->type, - sizeof(CM_UINT16),FrameNum, - sizeof(CM_UINT16),pCtrl->FrameNum, - sizeof(CM_UINT16),FrameIndex, - sizeof(CM_UINT16),pCtrl->FramIndex); - } - /*- 输出返回值*/ - return rt; -} -/** -* @brief 应用分帧接收 -* @param pCtrl 控制结构体 取值范围:非空 -* @param FrameNum 帧数目 取值范围:0~0xFFFF -* @param FrameIndex 帧序号 取值范围:0~0xFFFF -* @param pFrameData 分帧数据报文指针 取值范围:非空 -* @param FrameDataLen 分帧数据报文长度 取值范围:0~0x7FFFFFFFF -* @param pRxBuf 接收缓冲区指针 取值范围:非空 -* @param pRxLen 接收报文总长度 取值范围:非空 -* @param RxSize 接收缓冲区大小 取值范围:0~0xFFFFFFFFF -* @return 处理结果 -* - ENUM_CM_FALSE 处理出错 -* - ENUM_CM_TRUE 处理完成(收齐完整报文) -* - ENUM_CM_NULL 处理中(接收有效,但尚未收齐完整报文) -* @details 收齐完整报文后才会置位接收报文总长度,否则为0 -*/ -ENUM_CM_RETURN SFM_FrameSave_App(INOUT STRU_FrameCtrl_T *pCtrl, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize) -{ - /*- 变量初始化 */ - ENUM_CM_RETURN rt = ENUM_CM_FALSE; /* 函数返回值 */ - /*- 指针防空 */ - CM_ASSERT((NULL != pRxBuf) && (NULL != pFrameData) && (NULL != pCtrl), PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); - /*- 是否收到新报文 */ - if (1u == FrameIndex) - { - /*- 初始化控制结构体 */ - pCtrl->FrameNum = FrameNum; - pCtrl->FramIndex = 0u; - pCtrl->RxLen = 0; - /*- 接收报文总长度置0 */ - *pRxLen = 0; - } - else - { - /*- 无处理 */ - } - /*- 检查收到的分帧帧头信息是否合法 */ - if ((FrameNum == pCtrl->FrameNum) - && (FrameIndex == (pCtrl->FramIndex + 1u))) - { - /*- 收到的帧序号累加 */ - pCtrl->FramIndex++; - - /*- 保存本帧数据 */ - rt = CM_Memcpy((void*)(pRxBuf + pCtrl->RxLen), (CM_SIZE_T)CM_SIGNED_INT_EXP((CM_INT32)RxSize - pCtrl->RxLen), (const void*)pFrameData, (CM_SIZE_T)FrameDataLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - CM_ASSERT(ENUM_CM_TRUE == rt, PACKAGE_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); - pCtrl->RxLen += FrameDataLen; - - /*- 是否是最后一帧 */ - if (FrameIndex == FrameNum) - { - /*- 输出报文总长度 */ - *pRxLen = pCtrl->RxLen; - /*- 返回值置ENUM_CM_TRUE */ - rt = ENUM_CM_TRUE; - } - else - { - /*- 返回值置ENUM_CM_NULL */ - rt = ENUM_CM_NULL; - } - } - else - { - /*- 出错后复位接收控制 */ - pCtrl->type = 0u; - } - /*- 输出返回值*/ - return rt; -} diff --git a/TSCP/src/MSCP/SFM/SFM_package.h b/TSCP/src/MSCP/SFM/SFM_package.h index 7f8f32c..73a9cc0 100644 --- a/TSCP/src/MSCP/SFM/SFM_package.h +++ b/TSCP/src/MSCP/SFM/SFM_package.h @@ -30,18 +30,17 @@ typedef struct CM_UINT32 err_cyc; /** 丢包周期号*/ }STRU_FrameCtrl_T; -extern CM_UINT8 g_2x2oo2_Frame_TempBuf[SFM_OUTNETSAFE_BUFF_SIZE]; /* 分帧接收 */ ENUM_CM_RETURN SFM_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); -/* 2x分帧接收 */ -ENUM_CM_RETURN SFM_2X_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); -/* 应用分帧接收 */ -ENUM_CM_RETURN SFM_FrameSave_App(INOUT STRU_FrameCtrl_T *pCtrl, - IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, - INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); +// /* 2x分帧接收 */ +// ENUM_CM_RETURN SFM_2X_FrameSave(INOUT STRU_FrameCtrl_T *pCtrl, IN CM_UINT8 type, +// IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, +// INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); +// /* 应用分帧接收 */ +// ENUM_CM_RETURN SFM_FrameSave_App(INOUT STRU_FrameCtrl_T *pCtrl, +// IN CM_UINT16 FrameNum, IN CM_UINT16 FrameIndex, IN const CM_UINT8 *pFrameData, IN CM_INT32 FrameDataLen, +// INOUT CM_UINT8 *pRxBuf, OUT CM_INT32 *pRxLen, IN CM_UINT32 RxSize); #endif diff --git a/TSCP/src/commoncode/commoncode_config_vxworks/CommonConfig.h b/TSCP/src/commoncode/commoncode_config_vxworks/CommonConfig.h index 620413a..cfea87f 100644 --- a/TSCP/src/commoncode/commoncode_config_vxworks/CommonConfig.h +++ b/TSCP/src/commoncode/commoncode_config_vxworks/CommonConfig.h @@ -25,6 +25,8 @@ #define kMOTOROLA 1 #define kVXWORKS 2 +#define LIB_MEM_PROCESS + /*在这里定义应用平台*/ /***********************************************************/ #ifdef WIN32 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/dfsDataRead.c b/TSCP/src/dqu_common/dqu_dfs_common/dfsDataRead.c index f4ae4f0..b751575 100644 --- a/TSCP/src/dqu_common/dqu_dfs_common/dfsDataRead.c +++ b/TSCP/src/dqu_common/dqu_dfs_common/dfsDataRead.c @@ -610,7 +610,7 @@ UINT8 dataReadExp(CHAR *dataName, DQU_READ_DATA_STOR_STRU *FsStorStu,UINT8 check else if (READ_MODE_TIMES == FsStorStu->ReadMode) { -#if CBTC_MOTOROLA +#if 0 if (1U == MainIndex) { /*ֲȡ*/ diff --git a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h index ea3c7b4..b73691b 100644 --- a/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h +++ b/TSCP/src/dqu_common/dqu_dfs_common/dquDataTypeDefine.h @@ -80,7 +80,7 @@ #define EMAP_NOP_58 58 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ #define EMAP_LOGSEC_SPKS_BUTTON_ID 59 /*߼SPKSر*/ #define EMAP_NOP_60 60 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ -#define EMAP_NOP_61 61 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ +#define EMAP_RC_ID 61 /*ӵͼ-RCID*/ #define EMAP_NOP_62 62 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ #define EMAP_NOP_63 63 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ #define EMAP_NOP_64 64 /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID tqf*/ @@ -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*/ @@ -124,6 +125,7 @@ #define DSU_DATA_IP_ZCDSU_COMM_ID 4 /*ZCDSUͨŹϵñtableId*/ #define DSU_DATA_IP_GATEWAY_ID 5 /*hxq,豸رtableId*/ #define DSU_CI_ATS_DEVICE_IP_ADDR 6 /*CI_ATS豸IPַ add by qxt 20160811 */ +#define DSU_DATA_REDUNT_IP_ID 10 /*豸ipñ*/ /*ATP/ATO 궨*/ #define VOBC_CONFIGDATA_TYPE 0x50 /*ATP/ATOϵͳ*/ @@ -199,6 +201,8 @@ #define IDMAP_PHYSEC_ID 19 /*αID add by slm 2018-6-14*/ #define IDMAP_AXLE_ID 21 /*ϵͳID add by lq 2023-12-08*/ #define IDMAP_ITE_ID 22 /*ITEID add by lq 2024-06-06*/ +#define IDMAP_RC_ID 23 /*RCID 10*/ +#define IDMAP_IVOC_ID 24 /*IVOCID 10*/ /*VOBCص ͨ add by qxt 20160811*/ #define VOBC_OVERLAP_CONFIGDATA_TYPE 0xF3 /*VOBCصݱID*/ diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c index 35e6951..4c45ced 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c +++ b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.c @@ -35,7 +35,7 @@ static UINT16 g_wCurMainIndex=0U; /* static UINT8 g_EmapInitMode=0x01; /*ӵͼʼģʽ*/ static UINT8 g_IsEmapAllocMemory = 0x01; /*ļʽӿϵʼڴ*/ static UINT32 g_FilterStopPointAttr = 0x0; /*ҪͣʱʹõͣԹֵϲӦ add by sds 2019-10-22*/ - +extern UINT8 gLocalPublicDataType; /*ݰ汾*/ /*----------ڲʼ--------------*/ /*wManageZCwManagePhysicalCIwManageLogicCIͨLINKȡ*/ UINT8 CalcSwitchStruExpItem(); @@ -160,8 +160,8 @@ static INIT_TASK_TAB_STRU g_struInitTaskTab[]= {DQU_QFUN_TRUE, EMAP_NOP_57, initNop, 5,1,0}, /*ȫ ID sds */ /*57*/ {DQU_QFUN_TRUE, EMAP_NOP_58, initNop, 5,1,0}, /*ȫ ID sds */ /*58*/ {DQU_QFUN_TRUE, EMAP_LOGSEC_SPKS_BUTTON_ID, initLogSecSpksButton,5,1,0}, /*߼SPKSر*/ /*59*/ - {DQU_QFUN_TRUE, EMAP_NOP_60, initNop, 5,1,0}, /*ȫ ID sds */ /*60*/ - {DQU_QFUN_TRUE, EMAP_NOP_61, initNop, 5,1,0}, /*ȫ ID sds */ /*61*/ + { DQU_QFUN_FASLE, EMAP_NOP_60, initNop, 5,1,0}, /*ȫ ID sds*/ /*60*/ + {DQU_QFUN_TRUE, EMAP_RC_ID, initRC, 5,1,0}, /*RCID */ /*61*/ {DQU_QFUN_TRUE, EMAP_NOP_62, initNop, 5,1,0}, /*ȫ ID sds */ /*62*/ {DQU_QFUN_TRUE, EMAP_NOP_63, initNop, 5,1,0}, /*ȫ ID sds */ /*63*/ {DQU_QFUN_TRUE, EMAP_NOP_64, initNop, 5,1,0}, /*ȫ ID sds */ /*64*/ @@ -222,9 +222,7 @@ static UINT8 initConfigEmapTaskTab() UINT8 loopIndex = 0U; UINT8 rtnValue = 0U; UINT8 cbtcVersionType=0U; - cbtcVersionType = GetCbtcSysType(); - /*ΪʵݱʵʱֵһһӦԴ0ʼ ȫ ID Ϊǿձòжȡ add by sds 2019-10-22*/ g_struInitTaskTab[EMAP_NOP_0].bIsEffective = DQU_QFUN_FASLE;/*ΪȫݱռλĿձ0*/ @@ -247,11 +245,19 @@ static UINT8 initConfigEmapTaskTab() { g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*ΪȫݱռλĿձ56~58*/ } - for (loopIndex = EMAP_NOP_60; loopIndex <= EMAP_NOP_80; loopIndex++) + for (loopIndex = EMAP_NOP_62; loopIndex <= EMAP_NOP_80; loopIndex++) { g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*ΪȫݱռλĿձ60~80*/ } - + g_struInitTaskTab[EMAP_NOP_60].bIsEffective = DQU_QFUN_FASLE;/*ΪȫݱռλĿձ54*/ + if (0x55 != gLocalPublicDataType)/*28.0.0.14*/ + { + g_struInitTaskTab[EMAP_RC_ID].bIsEffective = DQU_QFUN_FASLE;/*28.0.0.14߱ӵͼRC*/ + } + else + { + g_struInitTaskTab[EMAP_RC_ID].bIsEffective = DQU_QFUN_TRUE;/*߱ӵͼRC*/ + } if (DQU_CBTC_CPK == cbtcVersionType)/*ǰ汾ϿⲻҪݱ*/ { g_struInitTaskTab[EMAP_SPKS_BUTTON_ID].bIsEffective = DQU_QFUN_FASLE;/*SPKS*/ @@ -2576,6 +2582,7 @@ static UINT8 AxleSgmtStru_CC() /*ʼlinkĩlinkڣwMiddleLinkIdΪ0xFFFF*/ if (pTempAxleSgmtStru->wTmnlLkId == linkId1) { + /*мlink*/ pTempAxleSgmtStru->wMiddleLinkId[0] = UINT16_MAX; } else @@ -2593,10 +2600,10 @@ static UINT8 AxleSgmtStru_CC() } if (0U != rtnValue) - { - /*мlinkΪlinkId1*/ + { if (pTempAxleSgmtStru->wTmnlLkId == linkId2) { + /*мlinkΪlinkId1*/ pTempAxleSgmtStru->wMiddleLinkId[0] = linkId1; } else @@ -2614,10 +2621,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 +2643,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 +9164,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 +9240,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ָ*/ @@ -12477,6 +12484,169 @@ UINT8 initCI(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) return rtnValue; } +/********************************************** +ܣʼ[ӵͼ-RCϢ]: +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initRC(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 2U; + UINT8 *pData = NULL; + UINT8 initFlag = 0U; + UINT8 checkFlag = 0U; + DSU_CI_STRU *pCurrentStru = NULL; /*ṹʱָ*/ + DSU_CI_STRU stru = { 0 }; /*ṹʱָ*/ + UINT16 j = 0U; + static UINT32 rowDataLen = 0U; + UINT16 wStruDataLen = 0U; + UINT16 wDataIndexLen = 0U; + + /*ӵͼ*/ + DSU_EMAP_INDEX_STRU *dsuEmapIndexStru = NULL; + DSU_STATIC_HEAD_STRU *dsuStaticHeadStru = NULL; + DSU_DATA_LEN_STRU *dsuDataLenStru = NULL; + + + if ((NULL != pDataAddr) && (NULL != g_dsuEmapStru)) + { + dsuEmapIndexStru = g_dsuEmapStru->dsuEmapIndexStru; + dsuStaticHeadStru = g_dsuEmapStru->dsuStaticHeadStru; + dsuDataLenStru = g_dsuEmapStru->dsuDataLenStru; + } + else + { + /*ӵͼָΪ*/ + rtnValue = 0U; + } + + initFlag = EmapInitFunStepCtrl(0x01); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + dsuDataLenStru->wRCLen = rowCount; + + if (0U == rowCount) + { + rtnValue = 1; + } + else + { + rowDataLen = dataSize / rowCount; + + /*鳤ȼ*/ + initFlag = RC_STRU_init(pDataAddr + dataSize - rowDataLen, &stru); + if (0U != initFlag) + { + /*ΪID + 1*/ + dsuEmapIndexStru->RCINDEXNUM = stru.wIndex; + } + else + { + rtnValue = 0U;/*initָ*/ + } + } + } + + initFlag = EmapInitFunStepCtrl(0x02); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + if (0x01 == g_IsEmapAllocMemory) + { + /*̬ռ*/ + dsuEmapIndexStru->dsuRCIndex = (UINT16*)MyNew(sizeof(UINT16) * dsuEmapIndexStru->RCINDEXNUM + 2); + + /*̬ռʧ*/ + if (NULL == dsuEmapIndexStru->dsuRCIndex) + { + rtnValue = 0U; + } + else + { + /*ʼΪ0xFF*/ + CommonMemSet(dsuEmapIndexStru->dsuRCIndex, (UINT32)(dsuEmapIndexStru->RCINDEXNUM * 2U + 2U), 0XFF, (UINT32)(dsuEmapIndexStru->RCINDEXNUM * 2U + 2U)); + } + + if (2U == rtnValue) + { + /*̬ռ*/ + dsuStaticHeadStru->pRCStruStru = (DSU_CI_STRU *)MyNew(sizeof(DSU_CI_STRU) * dsuDataLenStru->wRCLen); + + /*̬ռʧ*/ + if (NULL == dsuStaticHeadStru->pRCStruStru) + { + rtnValue = 0U; + } + else + { + /*ڴΪЧ*/ + memset(dsuStaticHeadStru->pRCStruStru, 0xFF, sizeof(DSU_CI_STRU) * dsuDataLenStru->wRCLen); + } + } + } + else/*ڴռⲿƷ*/ + { + /*ӵͼӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetEmapDataStruArrayLen(EMAP_RC_ID, &wStruDataLen); + + if (((0U != wStruDataLen) && (dsuDataLenStru->wRCLen >= wStruDataLen)) + || (0U == wStruDataLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*ӵͼжӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetEmapDataIndexArrayLen(EMAP_RC_ID, &wDataIndexLen); + if (((0U != wDataIndexLen) && (dsuEmapIndexStru->RCINDEXNUM >= wDataIndexLen)) + || (0U == wDataIndexLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + } + } + } + + initFlag = EmapInitFunStepCtrl(0x03); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + /*ݵ ṹ */ + for (j = g_struInitTaskTab[g_wCurInitStruProg].wCurInitPos; j < dsuDataLenStru->wRCLen; j++) + { + pCurrentStru = dsuStaticHeadStru->pRCStruStru + j; + + pData = pDataAddr + rowDataLen*j; + /*ݽṹ*/ + initFlag = RC_STRU_init(pData, pCurrentStru); + if (0U == initFlag) + { + /*initָ*/ + rtnValue = 0U; + } + else + { + /*ɶӦ*/ + dsuEmapIndexStru->dsuRCIndex[pCurrentStru->wIndex] = j; + initFlag = EmapInitLoopStepLenCtrl(j); + } + /*ѭֲи*/ + if ((0U == rtnValue) || (DQU_QFUN_TRUE == initFlag)) + { + break; + } + } + + if ((0U != rtnValue) && (j == dsuDataLenStru->wRCLen)) + { + rtnValue = 1; + } + } + + return rtnValue; +} + /********************************************** ܣʼ[ATSϢ]: pDataAddr:׵ַ @@ -16618,7 +16788,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 +16798,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/dquEmapInit.h b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h index 7bb7540..545c7a7 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dquEmapInit.h @@ -428,6 +428,16 @@ rowCount: **********************************************/ UINT8 initCI(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); +/********************************************** +ܣʼ[ӵͼ-RCϢ]: +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initRC(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); + /********************************************** ܣʼ[ATSϢ]: pDataAddr:׵ַ diff --git a/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c b/TSCP/src/dqu_common/dqu_emap_common/dquStructInit.c index 8baba03..0d59221 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,65 +3358,65 @@ 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 = 0U; /*ָ*/ if ((NULL != pDataAdd) && (NULL != pCIStru)) { - UINT8 * pData = pDataAdd; - UINT16 i = 0; - /**/ pCIStru->wIndex = ShortFromChar(pData); - pData += 2; + pData += 2U; /*RCI豸ID*/ pCIStru->wID = ShortFromChar(pData); - pData += 2; + pData += 2U; /**/ pCIStru->wType = ShortFromChar(pData); - pData += 2; + pData += 2U; /*RCI-VOBCУϢ*/ pCIStru->dwVersionOfCIToVOBC = LongFromChar(pData); - pData += 4; + pData += 4U; /*RCI-TMCУϢ*/ pCIStru->dwVersionOfCIToTMC = LongFromChar(pData); - pData += 4; + pData += 4U; /*RCI-ZCУϢ*/ pCIStru->dwVersionOfCIToZC = LongFromChar(pData); - pData += 4; + pData += 4U; /*RCI-ATSУϢ*/ pCIStru->dwVersionOfCIToATS = LongFromChar(pData); - pData += 4; + pData += 4U; /*CI*/ pCIStru->dwAdjoinCICount = *pData; - pData += 1; + pData += 1U; - for (i = 0; i<6; i++) + for (i = 0U; i<6U; i++) { /*CI[1-6]ID*/ pCIStru->dwAdjoinCIId[i] = ShortFromChar(pData); - pData += 2; + pData += 2U; /*CI[1-6]ĹУϢ*/ pCIStru->dwAdjoinCIShareCheckData[i] = LongFromChar(pData); - pData += 4; + pData += 4U; } - for (i = 0; i < 3; i++) + for (i = 0U; i < 3U; i++) { /*CIͨżϵͳ[1-3]ID*/ pCIStru->dwCIToAxleID[i] = ShortFromChar(pData); - pData += 2; + pData += 2U; /*ϵͳ[1-3]ĹУϢ*/ pCIStru->dwCIToAxleShareCheckData[i] = LongFromChar(pData); - pData += 4; + pData += 4U; } @@ -3378,11 +3439,159 @@ static UINT8 CI_STRU_init_CC(UINT8 * pDataAdd, DSU_CI_STRU * pCIStru) pCIStru->RCIEntraceType = *pData; pData += 1; #endif + if (0x55U == chDataType)/*°*/ + { + /*28.0.0.14߱½ṹ*/ + /*ȫɸ*/ + pCIStru->cWLScreenType = *pData; + pData += 1U; - /*ȫɸ*/ - pCIStru->cWLScreenType = *pData; + /*RC*/ + pCIStru->dwAdjoinRCCount = *pData; + pData += 1U; + + for (i = 0U; i<6U; i++) + { + /*RC[1-6]ID*/ + pCIStru->dwAdjoinRCId[i] = ShortFromChar(pData); + pData += 2U; + + /*CI[1-6]ĹУϢ*/ + pCIStru->dwAdjoinRCShareCheckData[i] = LongFromChar(pData); + pData += 4U; + + } + /*뱾RC/CIУϢ*/ + pCIStru->dwLocalShareCheckData = LongFromChar(pData); + pData += 4U; + } + else + { + ; + } + rtnValue = 1; + } + return rtnValue; +} + +/************************************** +ܣRCϢݽṹʼ +˵[in] pDataAdd ݵַļ +[out]pCIStruʼĽṹָ +ֵ0=ʧܣ1=ɹ +ע10RCУ顢RC/CIУϢ + +***************************/ +UINT8 RC_STRU_init(UINT8 * pDataAdd, DSU_CI_STRU * pCIStru) +{ + UINT8 rtnValue = 0U; + UINT8 chDataType = gLocalPublicDataType; + UINT8 * pData = pDataAdd; + UINT16 i = 0U; + /*ָ*/ + if ((NULL != pDataAdd) && (NULL != pCIStru)) + { + /**/ + pCIStru->wIndex = ShortFromChar(pData); + pData += 2U; + + /*RCI豸ID*/ + pCIStru->wID = ShortFromChar(pData); + pData += 2U; + + /**/ + pCIStru->wType = ShortFromChar(pData); + pData += 2U; + + /*RCI-VOBCУϢ*/ + pCIStru->dwVersionOfCIToVOBC = LongFromChar(pData); + pData += 4U; + + /*RCI-TMCУϢ*/ + pCIStru->dwVersionOfCIToTMC = LongFromChar(pData); + pData += 4U; + + /*RCI-ATSУϢ*/ + pCIStru->dwVersionOfCIToATS = LongFromChar(pData); + pData += 4U; + + /*CI*/ + pCIStru->dwAdjoinCICount = *pData; + pData += 1U; + + for (i = 0U; i<6U; i++) + { + /*CI[1-6]ID*/ + pCIStru->dwAdjoinCIId[i] = ShortFromChar(pData); + pData += 2U; + + /*CI[1-6]ĹУϢ*/ + pCIStru->dwAdjoinCIShareCheckData[i] = LongFromChar(pData); + pData += 4U; + + } + + for (i = 0U; i < 3U; i++) + { + /*CIͨżϵͳ[1-3]ID*/ + pCIStru->dwCIToAxleID[i] = ShortFromChar(pData); + pData += 2U; + + /*ϵͳ[1-3]ĹУϢ*/ + pCIStru->dwCIToAxleShareCheckData[i] = LongFromChar(pData); + pData += 4U; + + } + + pCIStru->chAdjoinOcCount = *pData; + pData += 1U; + + for (i = 0U; i < 10U; i++) + { + /*OC[1-10]ID*/ + pCIStru->wAdjoinOcId[i] = ShortFromChar(pData); + pData += 2U; + + /*ͨŵOC[1-10]ĹУϢ*/ + pCIStru->dwAdjoinOcShareCheckData[i] = LongFromChar(pData); + pData += 4u; + } + +#if 0 + /*RCI*/ + pCIStru->RCIEntraceType = *pData; pData += 1; +#endif + if (0x55U == chDataType)/*°*/ + { + /*28.0.0.14߱½ṹ*/ + /*ȫɸ*/ + pCIStru->cWLScreenType = *pData; + pData += 1U; + /*CI*/ + pCIStru->dwAdjoinRCCount = *pData; + pData += 1U; + + for (i = 0U; i<6U; i++) + { + /*RC[1-6]ID*/ + pCIStru->dwAdjoinRCId[i] = ShortFromChar(pData); + pData += 2U; + + /*CI[1-6]ĹУϢ*/ + pCIStru->dwAdjoinRCShareCheckData[i] = LongFromChar(pData); + pData += 4U; + + } + /*뱾RC/CIУϢ*/ + pCIStru->dwLocalShareCheckData = LongFromChar(pData); + pData += 4U; + } + else + { + ; + } rtnValue = 1; } return rtnValue; @@ -3601,17 +3810,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 +3861,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 +3902,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 +4287,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 +4738,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 +4753,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 +4864,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..f748f21 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); /************************************** @@ -468,6 +470,16 @@ static UINT8 ROUTE_STRU_init_CC(UINT8* pDataAdd, DSU_ROUTE_STRU* pRouteStru); ***************************/ UINT8 DSU_LOGSEC_SPKS_BUTTON_STRU_init(UINT8* pDataAdd, DSU_LOGSEC_SPKS_BUTTON_STRU* pSpksButtonStru); +/************************************** +ܣRCϢݽṹʼ +˵[in] pDataAdd ݵַļ +[out]pCIStruʼĽṹָ +ֵ0=ʧܣ1=ɹ +ע10RCУ顢RC/CIУϢ + +***************************/ +UINT8 RC_STRU_init(UINT8 * pDataAdd, DSU_CI_STRU * pCIStru); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/dqu_common/dqu_emap_common/dsuEmapDefine.h b/TSCP/src/dqu_common/dqu_emap_common/dsuEmapDefine.h index 6d2ebd2..1478639 100644 --- a/TSCP/src/dqu_common/dqu_emap_common/dsuEmapDefine.h +++ b/TSCP/src/dqu_common/dqu_emap_common/dsuEmapDefine.h @@ -297,9 +297,11 @@ #define MA_OTHER_END 3 /*յ*/ #define DEVTYPE_CI 0x3c /*CIͺ*/ +#define DEVTYPE_RC 0x3d /*CIͺ*/ #define DEVTYPE_ZC 0x1e /*ZCݺ*/ #define DEVTYPE_ATS 0x03 /*ATSݺ*/ #define DEVTYPE_VOBC 0x14U /*VOBCݺ*/ +#define DEVTYPE_IVOC 0x10U /*IVOCݺ*/ #define DEVTYPE_NDSU 0x2a /*NDSUݺ*/ #define DEVTYPE_DSU 0x2b /*DSUݺ*/ #define DEVTYPE_NTP 0x33 /*NTPݺ*/ @@ -325,4 +327,8 @@ #define LINK_DIRCHANGE_END 0x55U /*ԸlinkյΪ߼仯*/ #define LINK_DIRCHANGE_NONE 0xFFU /*linkû߼仯*/ +#define HLHT_DEVTYPE_VOBC (UINT8)0x02U /*ͨŶӦVOBC豸*/ +#define HLHT_DEVTYPE_AOM (UINT8)0x03U /*ͨŶӦAOM豸*/ +#define HLHT_DEVTYPE_IVOC (UINT8)0x1DU /*ͨŶӦIVOC豸*/ + #endif diff --git a/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h b/TSCP/src/dqu_common/dqu_emap_common/dsuStruct.h index d8c0393..4666f9c 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" { @@ -166,6 +170,7 @@ typedef struct DSU_Data_Len UINT16 wATSLen; /*ݿATSĽṹ*/ UINT16 wCILen; /*ݿCIĽṹ*/ + UINT16 wRCLen; /*ݿRCĽṹ*/ UINT16 wRunLevelLen; /*ݿмṹ*/ UINT16 wARInLen; /*ݿ۷ṹ*/ UINT16 wAROutLen; /*ݿ۷˳ṹ*/ @@ -330,8 +335,6 @@ typedef struct DSU_AxleStruct UINT16 wLkId; /*link*/ UINT32 dwLkOfst; /*linkƫ(cm)*/ UINT8 dwAxleKiloPlueMinusSign; /*ű־*/ - - }DSU_AXLE_STRU; @@ -343,8 +346,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 +434,7 @@ typedef struct DSU_AxleSgmtStruct { UINT16 wId; /**/ - CHAR szCaption [16]; /**/ + CHAR szCaption [32]; /**/ UINT16 wOrgnAxleId; /**/ UINT16 wTmnlAxleId; /*յ*/ UINT16 wOrgnLkId; /*link*/ @@ -465,7 +469,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*/ @@ -735,6 +739,9 @@ typedef struct DSU_CIStruct UINT8 dwAdjoinCICount; /*CI----ݻͨݽṹV16.0.0 by sds 2019-1-21*/ UINT16 dwAdjoinCIId[6]; /*CI[1-6]ID----ݻͨݽṹV16.0.0 by sds 2019-1-21*/ UINT32 dwAdjoinCIShareCheckData[6]; /*CI[1-6]ĹУϢ----ݻͨݽṹV16.0.0 by sds 2019-1-21*/ + UINT8 dwAdjoinRCCount; /*RC----2025082710*/ + UINT16 dwAdjoinRCId[6]; /*RC[1-6]ID----2025082710*/ + UINT32 dwAdjoinRCShareCheckData[6]; /*RC[1-6]ĹУϢ----2025082710*/ UINT16 dwCIToAxleID[3]; /*CIͨżϵͳ[1-3]ID*/ UINT32 dwCIToAxleShareCheckData[3]; /*ϵͳ[1-3]ĹУϢ*/ UINT8 chAdjoinOcCount; /*CIͨŵocby cgh OCݰ汾УϢ 20221222*/ @@ -742,6 +749,7 @@ typedef struct DSU_CIStruct UINT32 dwAdjoinOcShareCheckData[10]; /*OC[1-10]ĹУϢ----by cgh OCݰ汾УϢ 20221222*/ UINT8 RCIEntraceType; /*RCI*/ UINT8 cWLScreenType; /* ȫɸЧ 0x55Ч 0xAAЧ */ + UINT32 dwLocalShareCheckData; /*뱾RC/CIУϢ----2025082710 */ }DSU_CI_STRU; @@ -854,7 +862,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 +872,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 +1000,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/*ž̬ݸݽṹͷָ*/ @@ -1028,7 +1036,7 @@ typedef struct DSU_StaticHead/* DSU_ZC_DIVID_POINT_STRU *pZCDividPointStru;/*ZCֽϢṹָ*/ DSU_ATS_STRU *pATSStruStru;/*ATSϢṹָ*/ DSU_CI_STRU *pCIStruStru;/*CIϢṹָ*/ - + DSU_CI_STRU *pRCStruStru;/*ӵͼ-RCϢṹָ*/ DSU_AR_STRU *pARStru; /*۷Ϣṹָ*/ /*Ӧṹ*/ DSU_ZC_COM_ZONE_STRU *pZCComZoneStru;/*ZC*/ /*ǰzcֽ*/ @@ -1200,6 +1208,9 @@ typedef struct DSU_EmapIndexStruct UINT16 CIINDEXNUM ; /*CIռС*/ UINT16 *dsuCIIndex; /*CIϢ*/ + UINT16 RCINDEXNUM; /*RCռС*/ + UINT16 *dsuRCIndex; /*RCϢ*/ + UINT16 ARNUM ; /*۷С*/ UINT16 *dsuARIndex; /*ӵĽṹԶ۷Ӧ*/ diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.c b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.c index 530a3e9..b6631ef 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.c +++ b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.c @@ -32,7 +32,7 @@ static UINT16 g_wCurMainIndex=0U; /* static UINT8 g_IdmapInitMode=0x01; /*Ŷձʼģʽ*/ static UINT8 g_IsIdmapAllocMemory = 0x01; /*ļʽӿϵʼڴ*/ static UINT8 IdmapInitFunStepCtrl(UINT16 wStep);/*ӵͼʼֲƺ*/ - +extern UINT8 gLocalPublicDataType; /*ݰ汾*/ /*ʼǼDZ*/ static INIT_TASK_TAB_STRU g_struInitTaskTab[]= { @@ -57,6 +57,8 @@ static INIT_TASK_TAB_STRU g_struInitTaskTab[]= {DQU_QFUN_TRUE, IDMAP_PHYSEC_ID, initPhySecNum,5,1,0 }, {DQU_QFUN_TRUE, IDMAP_AXLE_ID, initAxleNum, 5,1,0 }, {DQU_QFUN_TRUE, IDMAP_ITE_ID, initIteNum, 5,1,0 }, + {DQU_QFUN_TRUE, IDMAP_RC_ID, initRCNum, 5,1,0 }, + {DQU_QFUN_TRUE, IDMAP_IVOC_ID, initIvocNum, 5,1,0 }, }; /*ʼǼDZĿ*/ static const UINT16 MAX_INITTASK_COUNT=sizeof(g_struInitTaskTab)/sizeof(INIT_TASK_TAB_STRU); @@ -77,10 +79,13 @@ UINT8 dfsIdmapInit(CHAR * FSName) UINT8 *pDataAddr=NULL; UINT32 DataSize=0U; UINT16 rowCount = 0; - + UINT8 szFSPUBVersionFS[DFS_VERSION_LENGTH] = { 0U }; + UINT8 chUseTable = 0U; /*ʼϢ¼*/ memset(initIdMapErrNo, 0, INIT_IDMAP_ERR_NUM); - + /*28.0.0.14߱RC/IVOCŶձ*/ + funcRtn = dquGetPublicFSVersion(FSName, szFSPUBVersionFS); + funcRtn &= CheckTiocPublicFsVersion(szFSPUBVersionFS); if (NULL!=g_dsuIdmapStru) { /*ʼһξ*/ @@ -147,22 +152,36 @@ UINT8 dfsIdmapInit(CHAR * FSName) { /*ȡ*/ DataID=g_struInitTaskTab[wIndex].DataTypeId; - funcRtn=dquGetConfigDataNew( FSName, IDMAP_DATA_TYPE, DataID, &pDataAddr, &DataSize, &rowCount); - if (funcRtn != 1) + if ((0x55 != gLocalPublicDataType) + && ((IDMAP_RC_ID == DataID) || (IDMAP_IVOC_ID == DataID))) { - /*ʧ*/ - initIdMapErrNo[DataID] |= DEBUG_GET_DATA_FAIL; - rtnValue = 0U;; - return rtnValue; + /*0x55Ϊ 28.0.0.14ʼRC&IVOCŶձ*/ + chUseTable = 0U; } - funcRtn=g_struInitTaskTab[wIndex].pExeFun(pDataAddr,DataSize,rowCount); - if (0U == funcRtn) + else { - rtnValue = 0U;; - return rtnValue; + /*°ݽṹݱ*/ + chUseTable = 1U; } - else/*ִ*/ + if (1U == chUseTable) { + funcRtn &= dquGetConfigDataNew(FSName, IDMAP_DATA_TYPE, DataID, &pDataAddr, &DataSize, &rowCount); + if (funcRtn != 1) + { + /*ʧ*/ + initIdMapErrNo[DataID] |= DEBUG_GET_DATA_FAIL; + rtnValue = 0U;; + return rtnValue; + } + funcRtn = g_struInitTaskTab[wIndex].pExeFun(pDataAddr, DataSize, rowCount); + if (0U == funcRtn) + { + rtnValue = 0U;; + return rtnValue; + } + else/*ִ*/ + { + } } } @@ -761,6 +780,169 @@ UINT8 initCINum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) return rtnValue; } +/********************************************** +ܣʼ[Ŷձ-RC]: +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initRCNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 2U; + UINT8 *pData = NULL; + UINT8 initFlag = 0U; + UINT8 checkFlag = 0U; + DSU_CI_NUM_STRU *pCurrentStru = NULL; /*ṹʱָ*/ + DSU_CI_NUM_STRU stru = { 0 }; /*ṹʱָ*/ + UINT16 j = 0U; + static UINT32 rowDataLen = 0; + UINT16 wStruDataLen = 0; + UINT16 wDataIndexLen = 0; + + /*Ŷձ*/ + DSU_IDMAP_INDEX_STRU *dsuIdmapIndexStru = NULL; + DSU_STATIC_IDMAP_STRU *dsuStaticIdmapStru = NULL; + DSU_IDMAP_LEN_STRU *dsuIdmapLenStru = NULL; + + + if ((NULL != g_dsuIdmapStru) && (NULL != pDataAddr)) + { + dsuIdmapIndexStru = g_dsuIdmapStru->dsuIdmapIndexStru; + dsuStaticIdmapStru = g_dsuIdmapStru->dsuStaticIdmapStru; + dsuIdmapLenStru = g_dsuIdmapStru->dsuIdmapLenStru; + } + else + { + /*ָΪ*/ + rtnValue = 0U;; + } + + initFlag = IdmapInitFunStepCtrl(0x01); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + dsuIdmapLenStru->wRCNumLen = rowCount; + + if (0U == rowCount) + { + rtnValue = 1U; + } + else + { + rowDataLen = dataSize / rowCount; + + /*鳤ȼ*/ + initFlag = CINumStru_init(pDataAddr + dataSize - rowDataLen, &stru); + if (0U != initFlag) + { + /*ΪID + 1*/ + dsuIdmapIndexStru->RCNUMINDEXSIZE = stru.wIndexId; + } + else + { + rtnValue = 0U;;/*initָ*/ + } + } + } + + initFlag = IdmapInitFunStepCtrl(0x02); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + if (0x01 == g_IsIdmapAllocMemory) + { + /*̬ռ*/ + dsuIdmapIndexStru->dsuRCNumIndex = (UINT16*)MyNew(sizeof(UINT16) * dsuIdmapIndexStru->RCNUMINDEXSIZE + 2); + + /*̬ռʧ*/ + if (NULL == dsuIdmapIndexStru->dsuRCNumIndex) + { + rtnValue = 0U;; + } + else + { + /*ʼΪ0xFF*/ + (void)CommonMemSet(dsuIdmapIndexStru->dsuRCNumIndex, (UINT32)(dsuIdmapIndexStru->RCNUMINDEXSIZE * 2 + 2), 0xFF, (UINT32)(dsuIdmapIndexStru->RCNUMINDEXSIZE * 2 + 2)); + } + + if (2U == rtnValue) + { + /*̬ռ*/ + dsuStaticIdmapStru->pRCNumStru = (DSU_CI_NUM_STRU *)MyNew(sizeof(DSU_CI_NUM_STRU) * dsuIdmapLenStru->wRCNumLen); + + /*̬ռʧ*/ + if (NULL == dsuStaticIdmapStru->pRCNumStru) + { + rtnValue = 0U;; + } + else + { + /*ڴΪЧ*/ + (void)CommonMemSet(dsuStaticIdmapStru->pRCNumStru, (UINT32)(sizeof(DSU_CI_NUM_STRU) * dsuIdmapLenStru->wRCNumLen), 0xFF, (UINT32)(sizeof(DSU_CI_NUM_STRU) * dsuIdmapLenStru->wRCNumLen)); + } + } + } + else/*ڴռⲿƷ*/ + { + /*ӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetIdmapDataStruArrayLen(IDMAP_RC_ID, &wStruDataLen); + + if (((0U != wStruDataLen) && (dsuIdmapLenStru->wRCNumLen >= wStruDataLen)) + || (0U == wStruDataLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*ӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetIdmapDataIndexArrayLen(IDMAP_RC_ID, &wDataIndexLen); + if (((0U != wDataIndexLen) && (dsuIdmapIndexStru->RCNUMINDEXSIZE >= wDataIndexLen)) + || (0U == wDataIndexLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + } + } + } + + initFlag = IdmapInitFunStepCtrl(0x03); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + /*ݵṹ */ + for (j = g_struInitTaskTab[g_wCurInitStruProg].wCurInitPos; j < dsuIdmapLenStru->wRCNumLen; j++) + { + pCurrentStru = dsuStaticIdmapStru->pRCNumStru + j; + + pData = pDataAddr + rowDataLen*j; + /*ݽṹ*/ + initFlag = CINumStru_init(pData, pCurrentStru); + if (0U == initFlag) + { + /*initָ*/ + rtnValue = 0U;; + } + else + { + /*ɶӦ*/ + dsuIdmapIndexStru->dsuRCNumIndex[pCurrentStru->wIndexId] = j; + initFlag = IdmapInitLoopStepLenCtrl(j); + } + /*ѭֲи*/ + if ((0U == initFlag) || (DQU_QFUN_TRUE == initFlag)) + { + break; + } + } + + if ((0U != rtnValue) && (j == dsuIdmapLenStru->wRCNumLen)) + { + rtnValue = 1; + } + } + + return rtnValue; +} + /********************************************** ܣʼ[ATS]: pDataAddr:׵ַ @@ -2219,6 +2401,169 @@ UINT8 initVobcNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) return rtnValue; } +/********************************************** +ܣʼ[ŶձIVOC]:򱱾10 +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initIvocNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) +{ + UINT8 rtnValue = 2U; + UINT8 *pData = NULL; + UINT8 initFlag = 0U; + UINT8 checkFlag = 0U; + DSU_VOBC_NUM_STRU *pCurrentStru = NULL; /*ṹʱָ*/ + DSU_VOBC_NUM_STRU stru = { 0 }; /*ṹʱָ*/ + UINT16 j = 0U; + static UINT32 rowDataLen = 0; + UINT16 wStruDataLen = 0; + UINT16 wDataIndexLen = 0; + + /*Ŷձ*/ + DSU_IDMAP_INDEX_STRU *dsuIdmapIndexStru = NULL; + DSU_STATIC_IDMAP_STRU *dsuStaticIdmapStru = NULL; + DSU_IDMAP_LEN_STRU *dsuIdmapLenStru = NULL; + + + if ((NULL != g_dsuIdmapStru) && (NULL != pDataAddr)) + { + dsuIdmapIndexStru = g_dsuIdmapStru->dsuIdmapIndexStru; + dsuStaticIdmapStru = g_dsuIdmapStru->dsuStaticIdmapStru; + dsuIdmapLenStru = g_dsuIdmapStru->dsuIdmapLenStru; + } + else + { + /*ָΪ*/ + rtnValue = 0U;; + } + + initFlag = IdmapInitFunStepCtrl(0x01); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + dsuIdmapLenStru->wIvocNumLen = rowCount; + + if (0U == rowCount) + { + rtnValue = 1U; + } + else + { + rowDataLen = dataSize / rowCount; + + /*鳤ȼ*/ + initFlag = VOBCNumStru_init(pDataAddr + dataSize - rowDataLen, &stru); + if (0U != initFlag) + { + /*ΪID + 1*/ + dsuIdmapIndexStru->IVOCNUMINDEXSIZE = stru.wIndexId; + } + else + { + rtnValue = 0U;;/*initָ*/ + } + } + } + + initFlag = IdmapInitFunStepCtrl(0x02); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + if (0x01 == g_IsIdmapAllocMemory) + { + /*̬ռ*/ + dsuIdmapIndexStru->dsuIvocNumIndex = (UINT16*)MyNew(sizeof(UINT16) * dsuIdmapIndexStru->IVOCNUMINDEXSIZE + 2); + + /*̬ռʧ*/ + if (NULL == dsuIdmapIndexStru->dsuIvocNumIndex) + { + rtnValue = 0U;; + } + else + { + /*ʼΪ0xFF*/ + (void)CommonMemSet(dsuIdmapIndexStru->dsuIvocNumIndex,(UINT32)(dsuIdmapIndexStru->IVOCNUMINDEXSIZE * 2 + 2),0xFF, (UINT32)(dsuIdmapIndexStru->IVOCNUMINDEXSIZE * 2 + 2)); + } + + if (2U == rtnValue) + { + /*̬ռ*/ + dsuStaticIdmapStru->pIvocNumStru = (DSU_VOBC_NUM_STRU *)MyNew(sizeof(DSU_VOBC_NUM_STRU) * dsuIdmapLenStru->wIvocNumLen); + + /*̬ռʧ*/ + if (NULL == dsuStaticIdmapStru->pIvocNumStru) + { + rtnValue = 0U;; + } + else + { + /*ڴΪЧ*/ + (void)CommonMemSet(dsuStaticIdmapStru->pIvocNumStru, (UINT32)(sizeof(DSU_VOBC_NUM_STRU) * dsuIdmapLenStru->wIvocNumLen), 0xFF, (UINT32)(sizeof(DSU_VOBC_NUM_STRU) * dsuIdmapLenStru->wIvocNumLen)); + } + } + } + else/*ڴռⲿƷ*/ + { + /*ӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetIdmapDataStruArrayLen(IDMAP_IVOC_ID, &wStruDataLen); + + if (((0U != wStruDataLen) && (dsuIdmapLenStru->wIvocNumLen >= wStruDataLen)) + || (0U == wStruDataLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + else + { + /*ӦĸǷ񳬳ڴ䷶Χ*/ + checkFlag = dquGetIdmapDataIndexArrayLen(IDMAP_IVOC_ID, &wDataIndexLen); + if (((0U != wDataIndexLen) && (dsuIdmapIndexStru->IVOCNUMINDEXSIZE >= wDataIndexLen)) + || (0U == wDataIndexLen) || (0U == checkFlag)) + { + rtnValue = 0U; + } + } + } + } + + initFlag = IdmapInitFunStepCtrl(0x03); + if ((2U == rtnValue) && (DQU_QFUN_TRUE == initFlag)) + { + /*ݵṹ */ + for (j = g_struInitTaskTab[g_wCurInitStruProg].wCurInitPos; j < dsuIdmapLenStru->wIvocNumLen; j++) + { + pCurrentStru = dsuStaticIdmapStru->pIvocNumStru + j; + + pData = pDataAddr + rowDataLen*j; + /*ݽṹ*/ + initFlag = VOBCNumStru_init(pData, pCurrentStru); + if (0U == initFlag) + { + /*initָ*/ + rtnValue = 0U;; + } + else + { + /*ɶӦ*/ + dsuIdmapIndexStru->dsuIvocNumIndex[pCurrentStru->wIndexId] = j; + initFlag = IdmapInitLoopStepLenCtrl(j); + } + /*ѭֲи*/ + if ((0U == rtnValue) || (DQU_QFUN_TRUE == initFlag)) + { + break; + } + } + + if ((0U != rtnValue) && (j == dsuIdmapLenStru->wIvocNumLen)) + { + rtnValue = 1; + } + } + + return rtnValue; +} + /********************************************** ܣʼ[]: pDataAddr:׵ַ @@ -4222,10 +4567,11 @@ UINT8 AxleNumStru_init(UINT8* pDataAdd, DSU_AXLE_NUM_STRU* pAxleNumStru) pAxleNumStru->wIndexId = ShortFromChar(pData); /**/ pData += 2U; - pAxleNumStru->dwAxleId = LongFromChar(pData); /*ϵͳ1*/ + pAxleNumStru->dwAxleId[0] = LongFromChar(pData); /*ϵͳ1*/ pData += 4U; - pData += 4U; /*TMCõļϵͳ2ͨID*/ + pAxleNumStru->dwAxleId[1] = LongFromChar(pData); /*ϵͳ2*/ + pData += 4U; rtnValue = 1U; } diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.h b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.h index 5c95b61..86bdce0 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.h +++ b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapInit.h @@ -74,6 +74,16 @@ UINT8 initZCNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); **********************************************/ UINT8 initCINum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); +/********************************************** +ܣʼ[Ŷձ-RC]: +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initRCNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); + /********************************************** ܣʼ[ATS]: pDataAddr:׵ַ @@ -164,6 +174,16 @@ UINT8 initPSDoorNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); **********************************************/ UINT8 initVobcNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); +/********************************************** +ܣʼ[ŶձIVOC]:򱱾10 +pDataAddr:׵ַ +dataSize:ֽڳ +rowCount: + +ֵ:2,1ɹ,0ʧ +**********************************************/ +UINT8 initIvocNum(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); + /********************************************** ܣʼ[]: pDataAddr:׵ַ diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c index dc80c43..a9e039d 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c +++ b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.c @@ -20,6 +20,7 @@ #define QFUN_IDMAP_TRACKSEC_ID 5 #define QFUN_IDMAP_VOBC_ID 11 #define QFUN_IDMAP_AOM_ID 15 /*AOMID*/ +#define QFUN_IDMAP_IVOC_ID 24 #define DQU_IDMAP_INIT_TRUE 0x55 #define DQU_IDMAP_INIT_FALSE 0xAA @@ -187,10 +188,36 @@ UINT16 dquGetPhySecNumLen(void) { return ((NULL == qds_dsuIdmapLenStru) ? 0 : qds_dsuIdmapLenStru->wPhySecNumLen); } +/************************************************** +*ܣȡRCͨųϢ +* +* +* +* +*ֵλͨųϢ +* עڲʹú 10 +***************************************************/ +UINT16 dquGetRCNumLen(void) +{ + return ((NULL == qds_dsuIdmapLenStru) ? 0 : qds_dsuIdmapLenStru->wRCNumLen); +} +/************************************************** +*ܣȡIVOCͨųϢ +* +* +* +* +*ֵλͨųϢ +* עڲʹú 10 +***************************************************/ +UINT16 dquGetIvocNumLen(void) +{ + return ((NULL == qds_dsuIdmapLenStru) ? 0 : qds_dsuIdmapLenStru->wIvocNumLen); +} /*עб*/ const DQU_GETFUN_LIST_VDrW dquGetDataLen={NULL,dquGetZCNumLen,dquGetCINumLen,dquGetATSNumLen,dquGetSignalNumLen,dquGetTrackSecNumLen,dquGetSwitchNumLen, dquGetStationNumLen,dquGetEmergBtnNumLen,dquGetBaliseNumLen,dquGetPSDoorNumLen,dquGetVobcNumLen,dquGetFPDoorNumLen,dquGetDsuNumLen,dquGetLogicSecNumLen, - dquGetAomSecNumLen,dquGetSpksSecNumLen,dquGetGodSecNumLen,dquGetStaSecNumLen,dquGetPhySecNumLen, NULL, dquGetAxleNumLen, dquGetIteNumLen }; + dquGetAomSecNumLen,dquGetSpksSecNumLen,dquGetGodSecNumLen,dquGetStaSecNumLen,dquGetPhySecNumLen, NULL, dquGetAxleNumLen, dquGetIteNumLen,dquGetRCNumLen,dquGetIvocNumLen}; /*豸λãȡ豸*/ UINT32 dquGetZCDevId(UINT16 dataPos) { @@ -210,6 +237,15 @@ UINT32 dquGetCIDevId(UINT16 dataPos) } return dwRetVal; } +UINT32 dquGetRCDevId(UINT16 dataPos) +{ + UINT32 dwRetVal = 0U; + if (dataPospRCNumStru[dataPos].dwCIDevId; + } + return dwRetVal; +} UINT32 dquGetATSDevId(UINT16 dataPos) { UINT32 dwRetVal=0U; @@ -396,9 +432,9 @@ UINT32 dquGetPhySecDevId(UINT16 dataPos) } /*עб*/ -const DQU_GETFUN_LIST_WrWD dquGetDevId={NULL,dquGetZCDevId,dquGetCIDevId,dquGetATSDevId,dquGetSigDevId,dquGetTrackDevId,dquGetSwiDevId,dquGetStationDevId, +const DQU_GETFUN_LIST_WrWD dquGetDevId = { NULL,dquGetZCDevId,dquGetCIDevId,dquGetATSDevId,dquGetSigDevId,dquGetTrackDevId,dquGetSwiDevId,dquGetStationDevId, dquGetEmergBtnDevId,dquGetBaliseDevId,dquGetPSDoorDevId,dquGetVobcDevId,dquGetFPDoorDevId,dquGetDsuDevId,dquGetLogicSecDevId,NULL, - dquGetSpksSecDevId,dquGetGodSecDevId,dquGetStaSecDevId,dquGetPhySecDevId, NULL, dquGetAxleDevId }; + dquGetSpksSecDevId,dquGetGodSecDevId,dquGetStaSecDevId,dquGetPhySecDevId, NULL, dquGetAxleDevId,NULL,dquGetRCDevId, NULL }; /*ݴĽṹλãȡ豸ֵ*/ UINT16 dquGetZCIndex(UINT16 dataPos) @@ -674,6 +710,19 @@ UINT16 dquGetCINumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru,UINT16 devInd } return dataPos; } + +UINT16 dquGetRCNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru, UINT16 devIndex) +{ + UINT16 dataPos = 0xffff; + if (NULL != pDsuIdmapIndexStru) + { + if (devIndex <= pDsuIdmapIndexStru->RCNUMINDEXSIZE) + { + dataPos = pDsuIdmapIndexStru->dsuRCNumIndex[devIndex]; + } + } + return dataPos; +} UINT16 dquGetATSNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru,UINT16 devIndex) { UINT16 dataPos=0xffff; @@ -782,6 +831,26 @@ UINT16 dquGetVobcNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru,UINT16 devI } return dataPos; } + +/************************************************** +*ܣ豸λãȡIvocλ +*dataPos豸ṹλ +* +*ֵ0 ȡʧ +* Ivocλ +***************************************************/ +UINT16 dquGetIvocNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru, UINT16 devIndex) +{ + UINT16 dataPos = 0xffff; + if (NULL != pDsuIdmapIndexStru) + { + if (devIndex <= pDsuIdmapIndexStru->IVOCNUMINDEXSIZE) + { + dataPos = pDsuIdmapIndexStru->dsuIvocNumIndex[devIndex]; + } + } + return dataPos; +} UINT16 dquGetFPDoorNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru,UINT16 devIndex) { UINT16 dataPos=0xffff; @@ -938,7 +1007,7 @@ UINT16 dquGetPhySecNumStruPos(DSU_IDMAP_INDEX_STRU *pDsuIdmapIndexStru, UINT16 d /*עб*/ const DQU_GETFUN_LIST_IxWtW dquGetDevNumStruPos={NULL,dquGetZCNumStruPos,dquGetCINumStruPos,dquGetATSNumStruPos,dquGetSignalNumStruPos,dquGetTrackSecNumStruPos,dquGetSwitchNumStruPos, dquGetStationNumStruPos,dquGetEmergBtnStruPos,dquGetBaliseNumStruPos,dquGetPSDoorNumStruPos,dquGetVobcNumStruPos,dquGetFPDoorNumStruPos,dquGetDsuNumStruPos,dquGetLogicSecNumStruPos, -dquGetAomSecNumStruPos,dquGetSpksSecNumStruPos,dquGetGodSecNumStruPos,dquGetStaSecNumStruPos ,dquGetPhySecNumStruPos, NULL, dquGetAxleNumStruPos, dquGetIteNumStruPos }; +dquGetAomSecNumStruPos,dquGetSpksSecNumStruPos,dquGetGodSecNumStruPos,dquGetStaSecNumStruPos ,dquGetPhySecNumStruPos, NULL, dquGetAxleNumStruPos, dquGetIteNumStruPos,dquGetRCNumStruPos,dquGetIvocNumStruPos}; /*---------------------------------------ⲿõĽӿںʹ㷨ʵ--------------------------------------------*/ @@ -1201,6 +1270,25 @@ UINT32* dquGetVobcDevIdArray(UINT16 dataPos) return pwRetVal; } +/************************************************** +*ܣ豸λãȡIVOC +* +* dataPos豸ṹλ +* +* +*ֵvobcָ +* עڲʹú 10 +***************************************************/ +UINT32* dquGetIvocDevIdArray(UINT16 dataPos) +{ + UINT32 *pwRetVal = NULL; + if (dataPospIvocNumStru[dataPos].dwVobcId; + } + return pwRetVal; +} + /************************************************** *ܣ豸λãȡAOM * @@ -1320,6 +1408,44 @@ UINT8 dquQueryOutVobcDevId(UINT16 devIndex, UINT32 arOutDevIds[]) return bRetVal; } +/************************************************** +* ܣѯIvoc豸ţ +* devIndex 豸ֵ +* UINT32 arOutDevIds[] ͨ豸 +* ֵ1ɹ0ʧ +* Created By LQ 2025.08.27 +***************************************************/ +UINT8 dquQueryOutIvocDevId(UINT16 devIndex, UINT32 arOutDevIds[]) +{ + UINT8 bRetVal = 0U; + UINT16 dataPos = 0xffffU; + UINT32* dquVobcDevIdArrayData = NULL; + + if ((DQU_IDMAP_INIT_TRUE == qds_IsInitIdMapStruPtr) && (NULL != arOutDevIds)) + { + dataPos = dquGetDevNumStruPos[QFUN_IDMAP_IVOC_ID](qds_dsuIdmapIndexStru, devIndex); + if (0xffffU != dataPos) + { + dquVobcDevIdArrayData = dquGetIvocDevIdArray(dataPos); + if (NULL != dquVobcDevIdArrayData) + { + (void)CommonMemCpy((void*)arOutDevIds, sizeof(UINT32) * 2U, (void*)dquVobcDevIdArrayData, sizeof(UINT32) * 2U); + if ((0U != arOutDevIds[0]) || (0U != arOutDevIds[1])) + { + bRetVal = 1U; + } + + } + else + { + bRetVal = 0U; + } + } + } + + return bRetVal; +} + /************************************************** *ܣѯAOM @@ -1591,13 +1717,13 @@ UINT8 dquQueryInBaliseDevIndex(UINT16 lineId,UINT32 devId, UINT16 *pInDevIndex) *ܣ豸λãȡϵͳͨ *dataPos 豸ṹλ * -*ֵ0U ȡʧ -* ϵͳͨ -*Created by LQ 20231211 +*ֵNULL ȡʧ +* !=NULL ϵͳͨ +*Created by CGH 20250903 ***************************************************/ -UINT32 dquGetAxleDevId(UINT16 dataPos) +UINT32* dquGetAxleDevId(UINT16 dataPos) { - UINT32 pwRetVal = 0U; + UINT32* pwRetVal = NULL; if (dataPos < dquGetDataLen[QFUN_IDMAP_AXLE_ID]()) { @@ -1800,5 +1926,80 @@ UINT8 dquQueryOutIteDevId(UINT16 devIndex, UINT32 szOutDevId[2U]) /*0ʧ*/ } + return cRetVal; +} + +/************************************************** +*ܣ豸λãȡIvoc ID +*dataPos豸ṹλ +* +*ֵ0 ȡʧ +* Ivoc ID +*Created by LQ 2025.08.29 +***************************************************/ +UINT16 dquGetIvocIndex(UINT16 dataPos) +{ + UINT16 wRetVal = 0U; + + if (dataPos < dquGetDataLen[QFUN_IDMAP_IVOC_ID]()) + { + wRetVal = qds_dsuStaticIdmapStru->pIvocNumStru[dataPos].wIndexId; + } + else + { + /*ηǷ0*/ + } + + return wRetVal; +} + +/************************************************** +*ܣѯ豸 +*UINT16 devIndex 豸ֵ +*UINT32 szOutDevId[2U] ụͨ豸 +* ֵ0 ʧ +* 1 ɹ +* by cgh 20250903 +***************************************************/ +UINT8 dquQueryOutAxleDevId(UINT16 devIndex, UINT32 szOutDevId[2U]) +{ + UINT8 cRetVal = 0U; + UINT16 wDataPos = 0xFFFFU; + UINT32* dquAxleDevIdArrayData = NULL; + + if ((DQU_IDMAP_INIT_TRUE == qds_IsInitIdMapStruPtr) && (NULL != szOutDevId)) + { + wDataPos = dquGetDevNumStruPos[QFUN_IDMAP_AXLE_ID](qds_dsuIdmapIndexStru, devIndex); /*ȡĿITEڱŶձе*/ + if (0xFFFFU != wDataPos) + { + dquAxleDevIdArrayData = dquGetAxleDevId(wDataPos); /*ȡITEͨID*/ + if (NULL != dquAxleDevIdArrayData) + { + (void)CommonMemCpy(szOutDevId, sizeof(UINT32) * 2U, dquAxleDevIdArrayData, sizeof(UINT32) * 2U); /*ITEͨID鿽*/ + + if ((0U != szOutDevId[0U]) && (0U != szOutDevId[1U])) + { + cRetVal = 1U; + } + else + { + cRetVal = 0U; /*ʧܣ0ʧ*/ + } + } + else + { + cRetVal = 0U; + } + } + else + { + /*ȡλʧܣ0ʧ*/ + } + } + else + { + /*0ʧ*/ + } + return cRetVal; } \ No newline at end of file diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.h b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.h index 1eca888..9d5df55 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.h +++ b/TSCP/src/dqu_common/dqu_idmap_common/dquIdmapQuery.h @@ -45,6 +45,7 @@ #define QFUN_IDMAP_PHY_ID 19 /*αID*/ #define QFUN_IDMAP_AXLE_ID 21 /*ϵͳID*/ #define QFUN_IDMAP_ITE_ID 22 /*ITEID*/ +#define QFUN_IDMAP_RC_ID 23 /*RCID*/ #define IDMAP_TYPE_MIN 1 /*ѯṹСֵ add by qxt 20170509*/ #define IDMAP_TYPE_MAX 21 /*ѯṹֵڷѯstruTypeķΧ*/ @@ -118,6 +119,17 @@ UINT8 dquQueryTrackIdOffset(UINT16 linkId, UINT32 linkOffset, UINT32 *pTrackSecI ***************************************************/ UINT32* dquGetVobcDevIdArray(UINT16 dataPos); +/************************************************** +*ܣ豸λãȡIVOC +* +* dataPos豸ṹλ +* +* +*ֵvobcָ +* עڲʹú 10 +***************************************************/ +UINT32* dquGetIvocDevIdArray(UINT16 dataPos); + /************************************************** *ܣ豸λãȡAOM * @@ -151,6 +163,15 @@ UINT8 dquQueryInVobcDevIndex(UINT32 devId, UINT16 *pInDevIndex); ***************************************************/ UINT8 dquQueryOutVobcDevId(UINT16 devIndex, UINT32 arOutDevIds[]); +/************************************************** +* ܣѯIvoc豸ţ +* devIndex 豸ֵ +* UINT32 arOutDevIds[] ͨ豸 +* ֵ1ɹ0ʧ +* Created By LQ 2025.08.27 +***************************************************/ +UINT8 dquQueryOutIvocDevId(UINT16 devIndex, UINT32 arOutDevIds[]); + /************************************************** *ܣѯAOM * @@ -227,11 +248,11 @@ UINT8 dquQueryInBaliseDevIndex(UINT16 lineId,UINT32 devId, UINT16 *pInDevIndex); *ܣ豸λãȡϵͳͨ *dataPos 豸ṹλ * -*ֵ0U ȡʧ -* ϵͳͨ -*Created by LQ 20231211 +*ֵNULL ȡʧ +* !=NULL ϵͳͨ +*Created by CGH 20250903 ***************************************************/ -UINT32 dquGetAxleDevId(UINT16 dataPos); +UINT32* dquGetAxleDevId(UINT16 dataPos); /************************************************** *ܣ豸λãȡϵͳID @@ -303,6 +324,57 @@ UINT32* dquGetIteDevIdArray(UINT16 dataPos); ***************************************************/ UINT8 dquQueryOutIteDevId(UINT16 devIndex, UINT32 szOutDevId[2U]); +/************************************************** +*ܣȡRCͨųϢ +* +* +* +* +*ֵλͨųϢ +* עڲʹú 10 +***************************************************/ +UINT16 dquGetRCNumLen(void); + +/************************************************** +*ܣȡIVOCͨųϢ +* +* +* +* +*ֵλͨųϢ +* עڲʹú 10 +***************************************************/ +UINT16 dquGetIvocNumLen(void); + +/************************************************** +*ܣ豸λãȡIvocλ +*dataPos豸ṹλ +* +*ֵ0 ȡʧ +* Ivocλ +***************************************************/ +UINT16 dquGetIvocNumStruPos(DSU_IDMAP_INDEX_STRU* pDsuIdmapIndexStru, UINT16 devIndex); + +/************************************************** +*ܣ豸λãȡIvoc ID +*dataPos豸ṹλ +* +*ֵ0 ȡʧ +* Ivoc ID +*Created by LQ 2025.08.29 +***************************************************/ +UINT16 dquGetIvocIndex(UINT16 dataPos); + +/************************************************** +*ܣѯ豸 +*UINT16 devIndex 豸ֵ +*UINT32 szOutDevId[2U] ụͨ豸 +* ֵ0 ʧ +* 1 ɹ +* by cgh 20250903 +***************************************************/ +UINT8 dquQueryOutAxleDevId(UINT16 devIndex, UINT32 szOutDevId[2U]); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/dqu_common/dqu_idmap_common/dsuIdmapStruct.h b/TSCP/src/dqu_common/dqu_idmap_common/dsuIdmapStruct.h index 374dd64..c6a5f21 100644 --- a/TSCP/src/dqu_common/dqu_idmap_common/dsuIdmapStruct.h +++ b/TSCP/src/dqu_common/dqu_idmap_common/dsuIdmapStruct.h @@ -49,6 +49,8 @@ typedef struct DSU_NumMap_Len UINT16 wPhySecNumLen; /*ݿαűṹ add by slm 2019-1-15 */ UINT16 wAxleNumLen; /*ݿмϵͳűṹ add by lq 2023-12-08 */ UINT16 wIteNumLen; /*ݿITEűṹ add by lq 2024-06-06 */ + UINT16 wRCNumLen; /*ݿ/CIűĽṹ*/ + UINT16 wIvocNumLen; /*ݿIVOCűĽṹ*/ }DSU_IDMAP_LEN_STRU; /*̬ݿṹ*/ @@ -188,11 +190,11 @@ typedef struct DSU_PHYSecIdStruct UINT32 dwPhySecId; /*λͨ豸 */ }DSU_PHYSEC_NUM_STRU; -/*ϵͳű-------add by lq 2023-12-08 */ +/*ϵͳű-------add by cgh 20250903 */ typedef struct DSU_AxleIdStruct { UINT16 wIndexId; /**/ - UINT32 dwAxleId; /*ϵͳͨ豸 */ + UINT32 dwAxleId[2]; /*ϵͳͨ豸 */ }DSU_AXLE_NUM_STRU; /*ITEű*/ @@ -226,6 +228,8 @@ typedef struct DSU_StaticIDMap DSU_PHYSEC_NUM_STRU *pPhySecNumStru; /*αűṹָ add by slm 2019-1-16 */ DSU_AXLE_NUM_STRU *pAxleNumStru; /*ϵͳűṹָ add by lq 2023-12-08 */ DSU_ITE_NUM_STRU *pIteNumStru; /*ITEűṹָ add by lq 2024-06-06*/ + DSU_CI_NUM_STRU *pRCNumStru; /*RCűṹָ*/ + DSU_VOBC_NUM_STRU *pIvocNumStru; /*IVOCűṹָ*/ }DSU_STATIC_IDMAP_STRU; /*Ϊȫ*/ @@ -235,10 +239,10 @@ typedef struct DSU_IdmapIndexStruct UINT16* dsuZCNumIndex; /*linkϢ*/ UINT16 CINUMINDEXSIZE; /*CIűռС*/ - UINT16* dsuCINumIndex; /*Ϣ*/ + UINT16* dsuCINumIndex; /*Ϣ*/ UINT16 ATSNUMINDEXSIZE; /*ATSűռС*/ - UINT16* dsuATSNumIndex; /*ӦϢ*/ + UINT16* dsuATSNumIndex; /*ATSϢ*/ UINT16 SIGNALNUMINDEXSIZE; /*źŻűռС*/ UINT16* dsuSignalNumIndex; /*źŻϢ*/ @@ -262,7 +266,7 @@ typedef struct DSU_IdmapIndexStruct UINT16* dsuPSDoorNumIndex; /*ͣϢ*/ UINT16 VOBCNUMINDEXSIZE; /*VOBCűռС*/ - UINT16* dsuVobcNumIndex; /*Ϣ*/ + UINT16* dsuVobcNumIndex; /*Ϣ*/ UINT16 FPDNUMINDEXSIZE; /*űűռС*/ UINT16* dsuFPDoorNumIndex; /*˳CBTCϢ*/ @@ -294,6 +298,12 @@ typedef struct DSU_IdmapIndexStruct UINT16 ITENUMINDEXSIZE; /*ITEűռС add by lq 2024-06-06*/ UINT16* dsuIteNumIndex; /*ITEϢ*/ + UINT16 RCNUMINDEXSIZE; /*RCűռС*/ + UINT16* dsuRCNumIndex; /*RCϢ*/ + + UINT16 IVOCNUMINDEXSIZE; /*IvocűռС*/ + UINT16* dsuIvocNumIndex; /*Ϣ*/ + }DSU_IDMAP_INDEX_STRU; /*Ŷձܽṹ*/ 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..026b38e 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 *--------------------------------------------------------------------*/ @@ -131,8 +132,8 @@ UINT8 FsfbOutputReplaceLnkNode(UINT16 locName,UINT16 destName,UINT8 applyCat,Fsf FSFB_INFO_STRU *pFsfbStruct) { UINT8 ret = 0,chcRet = 0; - DSU_FSFB_LINK_RINFO_STRU rcvLnkInfo; /* ΪܽڵϢ */ - DSU_FSFB_LINK_SINFO_STRU outLnkInfo; /* ΪͽڵϢ*/ + DSU_FSFB_LINK_RINFO_STRU rcvLnkInfo = { 0 }; /* ΪܽڵϢ */ + DSU_FSFB_LINK_SINFO_STRU outLnkInfo = { 0 }; /* ΪͽڵϢ*/ Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo = NULL; /* * ݱ豸ƺͶԷ豸ƻȡΪܽڵϢ @@ -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,67 +459,97 @@ 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 92844e1..0e619ee 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c @@ -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; @@ -394,7 +443,7 @@ void LnkInfoBuildFrame(UINT16 devName,UINT16 msgLen,UINT8* pOutDataBuff) /*********************************************************************** * ������ : FsfbAnalysisSseMsg - * �������� : ���������յ���SSE��Ϣ���н�֡����ȡ�������Ϣ�� + * �������� : ���������յ���SSE��Ϣ���н�֡������ȡ�������Ϣ�� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -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; @@ -474,7 +525,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** * ������ : FsfbAnalysisSsrMsg - * �������� : ���������յ���SSR��Ϣ���н�֡����ȡ�������Ϣ�� + * �������� : ���������յ���SSR��Ϣ���н�֡������ȡ�������Ϣ�� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -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 /* ���ͨ�� */ @@ -525,13 +576,11 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO retVal = FsfbUptLnkNodeInfoBySsr(pAppData,applyCat,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ���³���˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ + /* ���³�����˵�����Ƕ�Ӧ��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 + } 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 } @@ -571,7 +622,7 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** * ������ : FsfbAnalysisAbtMsg - * �������� : ���������յ���ABT��Ϣ���н�֡����ȡ�������Ϣ�� + * �������� : ���������յ���ABT��Ϣ���н�֡������ȡ�������Ϣ�� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -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 } @@ -631,12 +682,9 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO retVal = FsfbUptLnkNodeInfoByAbt(pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ���³���˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ + /* ���³�����˵�����Ƕ�Ӧ��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 } @@ -675,7 +725,7 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** * ������ : FsfbAnalysisEbtMsg - * �������� : ���������յ���EBT��Ϣ���н�֡����ȡ�������Ϣ�� + * �������� : ���������յ���EBT��Ϣ���н�֡������ȡ�������Ϣ�� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -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 /* ���ͨ�� */ @@ -734,13 +784,11 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO retVal = FsfbUptLnkNodeInfoByEbt(devName,pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ���³���˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ + /* ���³�����˵�����Ƕ�Ӧ��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 + } 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 } @@ -776,7 +826,7 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** * ������ : FsfbAnalysisBtdMsg - * �������� : ���������յ���BTD��Ϣ���н�֡����ȡ�������Ϣ, + * �������� : ���������յ���BTD��Ϣ���н�֡������ȡ�������Ϣ, �Լ������ݰ�һ���ĸ�ʽ����� * ������� : * ������ ���� ������� ���� @@ -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); /*����BTD�ij��ȴ���*/ + 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 /* ���ͨ�� */ @@ -845,7 +899,7 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO retLnkNodePtr->FsfbLinInfo.NoRecvDataCycleNum = 0; retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; retLnkNodePtr->IsSendFlag = 1; - /* ����ɹ� */ + /* �����ɹ� */ retVal =1; } 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); /*����BTD��SVC����*/ + 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); /*����BTD��SVC����*/ + 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 261d5f6..a43e1b9 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c @@ -27,16 +27,16 @@ ��Ϊ:LongToChar(0, pFsfbStruct->AppArray); 2014.5.30 ������ - �޸�����: ��FsfbStructInit()�������pFsfbStruct->VarArray�ij����ֶεij�ʼ�� + �޸�����: ��FsfbStructInit()��������pFsfbStruct->VarArray�ij����ֶεij�ʼ�� �޸�����: ��ʼ��ʱ����Ӧ�ñ���ʼ�� 2014.5.30 ������ - �޸�����:��FsfbStructInit()�е�"������·������ջ�ռ�"ģ�� + �޸�����:��FsfbStructInit()�е�"������·��������ջ�ռ�"ģ�� �����˶�ջ��ʼ������������ɶ�ջ��ʼ�� �޸�����:������ʹ�����������ģ�黯 2014.5.30 ������ - �޸�����:��FsfbStructInit()�е�"��ʱ���Ļ�����"ģ������� + �޸�����:��FsfbStructInit()�е�"��ʱ���Ļ�����"ģ�������� ��ʱ�������ڴ�ռ�ij�ʼ�� �޸�����:�¿��ٵ��ڴ�ռ�Ӧ�ý��г�ʼ�� 2014.8.05 ������ @@ -126,7 +126,7 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) /* ʲô���� */ } - /* ͨ����·������ʼ�� */ + /* ͨ����·��������ʼ�� */ if(!FsfbInitLnkMngr(pFsfbStruct)) { retVal =0; @@ -153,7 +153,7 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) } else { - /* ����㴦��ɹ� */ + /* ����㴦���ɹ� */ } return retVal; @@ -161,7 +161,7 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) /****************************************************************************************** * �������� : Э�������Ԫ��������,����Э��Ĺ���,��Ӧ�ô�����������֡, - ��Ϊ���ݱȽϵ�Ԫ׼���ñ��������,ͬʱά����·����� + ��Ϊ���ݱȽϵ�Ԫ׼���ñ��������,ͬʱά����·������ * ������� : * ����������� : FSFB_INFO_STRU* pFsfbStruct Э��ͳһ�ṹ��ָ�� : * ����ֵ : ��ȷ����1�����󷵻�0 @@ -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,8 +265,8 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) *******************************************************/ fsfbVarLen = FsfbWriteToVarArray(&pFsfbStruct->VarArray[2],pFsfbStruct); - redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru); - /*�����ദ��ṹ���е��м����������FSFBЭ���м������*/ + 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; } } @@ -278,7 +294,7 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) /*********************************************************************** * ������ : FsfbProtclReceiveData - * �������� : �Ժ������������ݽ���FSFB��İ�ȫ��������ȫ���ݽ���Ӧ�á� + * �������� : �Ժ������������ݽ���FSFB��İ�ȫ����������ȫ���ݽ���Ӧ�á� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -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); @@ -596,7 +618,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /* ������ */ + /* �������� */ } if(pFsfbStruct->AppArray != NULL) @@ -649,180 +671,172 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) return retVal; } -/*-------------------------------------------------------------------- - * FSFBЭ���ⲿ�ӿں��� End - *--------------------------------------------------------------------*/ -/*-------------------------------------------------------------------- - * FSFBЭ���ڲ��ӿں��� Start - *--------------------------------------------------------------------*/ -/*********************************************************************** - * ������ : FsfbStructInit - * �������� : ͨ���ú�����ʵ�ֶ�RSR��ij�ʼ������������Ӧ���趨�Ļ���ֵ����������еĴ�С�� - * ������� : - * ������ ���� ������� ���� - * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB��ͳһ�ṹ�壬����г�ʼֵ���á� - * ����ֵ : UINT8 1���������� 0�����󷵻� - ***********************************************************************/ -static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) +/** +* @brief FsfbStructInit ����ABT������Ϣ����ͨ�Žڵ���Ϣ +* @param pLnkNode ��·�ڵ� ȡֵ��Χ:�ο��ṹ��Fsfb_Lnk_Info_Node_Stru +* @return 0:ʧ��;1�ɹ� +*/ +static UINT8 FsfbStructInit(FSFB_INFO_STRU* pFsfbStruct) { - UINT8 retVal = 0; - UINT16 inputSize = 0; - UINT16 outputSize = 0; - UINT16 maxMsgNum=0; - UINT16 maxMsg = 0; + /*- ����ֲ�����*/ + UINT8 retVal = 0u; /*-< ���ú�������ֵΪ0*/ + UINT16 inputSize = 0u; + UINT16 outputSize = 0u; + UINT16 maxMsgNum = 0u; + UINT16 maxMsg = 0u; inputSize = pFsfbStruct->InputSize; outputSize = pFsfbStruct->OutputSize; - /* ��������� */ - maxMsg = pFsfbStruct->InputSize > pFsfbStruct->OutputSize? - pFsfbStruct->InputSize:pFsfbStruct->OutputSize; - maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* �źŲ���й̶�����(2+4) + RSSP��̶����� + 32���� */ + /*- �õ���������� */ + maxMsg = pFsfbStruct->InputSize > pFsfbStruct->OutputSize ? + pFsfbStruct->InputSize : pFsfbStruct->OutputSize; + maxMsg += 2u + 4u + FSFB_FIXED_LEN + 32u; /*-< �źŲ���й̶�����(2+4) + RSSP��̶����� + 32���� */ - /* ���������ʼ�� */ - maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* ������� */ + /*- ���������ʼ�� */ + maxMsgNum = pFsfbStruct->MaxNumLink * (pFsfbStruct->MaxNumPerCycle + 2u); /* ������� */ - /* FSFB�����ģ��������� */ - pFsfbStruct->AppArraySize = (pFsfbStruct->OutputSize+11+26)*(pFsfbStruct->MaxNumPerCycle)*(pFsfbStruct->MaxNumLink)+2; - pFsfbStruct->AppArray = (UINT8 *)malloc(pFsfbStruct->AppArraySize); - if(pFsfbStruct->AppArray == NULL) + /*- FSFB�����ģ������������*/ + pFsfbStruct->AppArraySize = (pFsfbStruct->OutputSize + 11 + 26) * (pFsfbStruct->MaxNumPerCycle) * (pFsfbStruct->MaxNumLink) + 2; + pFsfbStruct->AppArray = (UINT8*)malloc(pFsfbStruct->AppArraySize); + if (pFsfbStruct->AppArray == NULL) /*-< ����ʧ��*/ { - retVal = 0; - return retVal; + retVal = 0u; /*-< ���ú�������ֵΪ0*/ + return retVal; /*-< ���غ�������ֵ*/ } else { - LongToChar(0, pFsfbStruct->AppArray); + LongToChar(0, pFsfbStruct->AppArray); /*-< ����������鳤��Ϊ0*/ } - /* FSFB���ģ������м���������С */ - pFsfbStruct->VarArraySize = FSFB_VAR_NODE_LEN * pFsfbStruct->MaxNumLink+32; + /*- ����FSFB���ģ������м���������С */ + pFsfbStruct->VarArraySize = FSFB_VAR_NODE_LEN * pFsfbStruct->MaxNumLink + 32u; pFsfbStruct->VarArray = (UINT8*)malloc(pFsfbStruct->VarArraySize); - if( NULL == pFsfbStruct->VarArray) + if (NULL == pFsfbStruct->VarArray) /*-< ����ʧ��*/ { /* ��¼ */ - retVal =0; - return retVal; + retVal = 0u; /*-< ���ú�������ֵΪ0*/ + return retVal; /*-< ���غ�������ֵ*/ } else { - ShortToChar(0, pFsfbStruct->VarArray); + ShortToChar(0u, pFsfbStruct->VarArray); /*-< �����м�������鳤��Ϊ0*/ } - /* Э�������Ӧ�õ����ݶ��г��� */ - pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* Э�������Ӧ�õ����ݶ��г��� */ - retVal = QueueInitial(&pFsfbStruct->DataToApp,pFsfbStruct->DataToAppSize); - if(0 == retVal) + /*- ��ʼ��Э�������Ӧ�õ����ݶ���*/ + pFsfbStruct->DataToAppSize = (inputSize + 6u) * maxMsgNum; /* Э�������Ӧ�õ����ݶ��г��� */ + retVal = QueueInitial(&pFsfbStruct->DataToApp, pFsfbStruct->DataToAppSize); + if (0u == retVal) /*-< ��������ֵ�Ƿ�Ϊʧ��*/ { - return retVal; + return retVal; /*-< ���غ�������ֵ*/ } else { /* ʲô���� */ } - /* Ӧ�ø�Э����������ݶ��г��� */ - pFsfbStruct->OutputDataQueueSize= (outputSize + 8 )*maxMsgNum; - retVal = QueueInitial(&pFsfbStruct->OutputDataQueue,pFsfbStruct->OutputDataQueueSize); - if(0 == retVal) + /*- ��ʼ��Ӧ�ø�Э����������ݶ���*/ + pFsfbStruct->OutputDataQueueSize = (outputSize + 8u) * maxMsgNum; + retVal = QueueInitial(&pFsfbStruct->OutputDataQueue, pFsfbStruct->OutputDataQueueSize); + if (0u == retVal) /*-< ��������ֵ�Ƿ�Ϊʧ��*/ { - return retVal; + return retVal; /*-< ���غ�������ֵ*/ } else { /* ʲô���� */ } - /* �������ܶ��г��� */ - pFsfbStruct->OutnetQueueSize = (pFsfbStruct->InputSize + 2 + 11)*pFsfbStruct->MaxNumPerCycle*pFsfbStruct->MaxNumLink; - /* �������� */ - retVal = QueueInitial(&pFsfbStruct->OutnetQueueR,pFsfbStruct->OutnetQueueSize); - if(0 == retVal) + /*- ��ʼ���������ܶ���*/ + pFsfbStruct->OutnetQueueSize = (pFsfbStruct->InputSize + 2u + 11u) * pFsfbStruct->MaxNumPerCycle * pFsfbStruct->MaxNumLink; + /*- ��ʼ���������� */ + retVal = QueueInitial(&pFsfbStruct->OutnetQueueR, pFsfbStruct->OutnetQueueSize); + if (0u == retVal) /*-< ��������ֵ�Ƿ�Ϊʧ��*/ { - return retVal; + return retVal; /*-< ���غ�������ֵ*/ } else { /* ʲô���� */ } - /* �������� */ - retVal = QueueInitial(&pFsfbStruct->OutnetQueueB,pFsfbStruct->OutnetQueueSize); - if(0 == retVal) + /*- ��ʼ���������� */ + retVal = QueueInitial(&pFsfbStruct->OutnetQueueB, pFsfbStruct->OutnetQueueSize); + if (0u == retVal) /*-< ��������ֵ�Ƿ�Ϊʧ��*/ { - return retVal; + return retVal; /*-< ���غ�������ֵ*/ } else { /* ʲô���� */ } - /* ��¼���� */ + /*- �����¼����*/ pFsfbStruct->RecordArray = (UINT8*)malloc(pFsfbStruct->RecordArraySize); - if( NULL == pFsfbStruct->RecordArray) + if (NULL == pFsfbStruct->RecordArray) /*-< ����ʧ��*/ { /* ��¼ */ - retVal =0; - return retVal; + retVal = 0u; /*-< ���ú�������ֵΪ0*/ + return retVal; /*-< ���غ�������ֵ*/ } else { - ComMemSet(pFsfbStruct->RecordArray ,pFsfbStruct->RecordArraySize,0x0); + ComMemSet(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 0x0); /*-< �����¼����*/ } - /* ������·������ջ�ռ� */ + /*- ��ʼ����·��������ջ*/ pFsfbStruct->LnkStack.maxNodeNum = pFsfbStruct->MaxNumLink; - retVal = StackInitial(&pFsfbStruct->LnkStack.stack,pFsfbStruct->LnkStack.maxNodeNum); - - if (0 == retVal) + retVal = StackInitial(&pFsfbStruct->LnkStack.stack, pFsfbStruct->LnkStack.maxNodeNum); + + if (0u == retVal) /*-< ��������ֵ�Ƿ�Ϊʧ��*/ { - return retVal; + return retVal; /*-< ���غ�������ֵ*/ } else { /* �������� */ } - /* ��ʱ���Ļ����� */ - pFsfbStruct->TmpDataBuff = (UINT8 *)malloc(maxMsg); - if( NULL == pFsfbStruct->TmpDataBuff) + /*- ������ʱ���Ļ�����*/ + pFsfbStruct->TmpDataBuff = (UINT8*)malloc(maxMsg); + if (NULL == pFsfbStruct->TmpDataBuff) /*-< ����ʧ��*/ { - retVal =0; - return retVal; + retVal = 0u; /*-< ���ú�������ֵΪ0*/ + return retVal; /*-< ���غ�������ֵ*/ } else { - ComMemSet(pFsfbStruct->TmpDataBuff ,maxMsg,0x0); + ComMemSet(pFsfbStruct->TmpDataBuff, maxMsg, 0x0u); /*-< ������ʱ���Ļ�����*/ } - pFsfbStruct->NetsRecvPkgNums = (FsfbNetsRecvPkgNum*)malloc(sizeof(FsfbNetsRecvPkgNum) * pFsfbStruct->MaxNumLink); - if (NULL == pFsfbStruct->NetsRecvPkgNums) + pFsfbStruct->NetsRecvPkgNumsLen = 0u; /*-< ���ø����յ��������鳤��Ϊ0*/ + pFsfbStruct->NetsRecvPkgNums = (FsfbNetsRecvPkgNum*)malloc(sizeof(FsfbNetsRecvPkgNum) * pFsfbStruct->MaxNumLink); /*-< ��������յ���������*/ + if (NULL == pFsfbStruct->NetsRecvPkgNums) /*-< ����ʧ��*/ { - retVal = 0; - return retVal; + retVal = 0u; /*-< ���ú�������ֵΪ0*/ + return retVal; /*-< ���غ�������ֵ*/ } else { - ComMemSet((UINT8*)pFsfbStruct->NetsRecvPkgNums, sizeof(FsfbNetsRecvPkgNum)* pFsfbStruct->MaxNumLink, 0u); + ComMemSet((UINT8*)pFsfbStruct->NetsRecvPkgNums, sizeof(FsfbNetsRecvPkgNum) * pFsfbStruct->MaxNumLink, 0u); /*-< ��������յ���������*/ } - retVal = 1; - return retVal; + retVal = 1; /*-< ���ú�������ֵΪ1*/ + return retVal; /*-< ���غ�������ֵ*/ } /****************************************************************************************** -* �������� : ��ʼ��ͨ����·����������(����һ��ָ��ͷ�ڵ��һά����) - 1. ��̬������·������ջ�ռ䣬��������г�ʼ���� - 2. ����·������ͷָ����Ϊ�գ� +* �������� : ��ʼ��ͨ����·������������(����һ��ָ��ͷ�ڵ��һά����) + 1. ��̬������·��������ջ�ռ䣬��������г�ʼ���� + 2. ����·��������ͷָ����Ϊ�գ� * ������� : * ����������� : FSFB_INFO_STRU* pFsfbStruct Э��ʹ�õ�ͳһ�ṹ��ָ�� * ������� : * ȫ�ֱ��� : * ����ֵ : �ɹ�����1,ʧ�ܷ���0 *******************************************************************************************/ -static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*��·������ʼ������*/ +static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*��·��������ʼ������*/ { UINT8 retVal =0; @@ -840,8 +854,8 @@ static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*��·��� } /****************************************************************************************** -* �������� : ��ʼ����·������ջ -* ��ʼ���ض���С�ض��ṹ�Ķ�ջ,��ͬ�Ľṹ��ֻ��Ҫ����ѹ�벻ͬ��ָ��ʹ�÷�ʽ��������ɲ�ͬ�Ĺ����ջ +* �������� : ��ʼ����·��������ջ +* ��ʼ���ض���С�ض��ṹ�Ķ�ջ,��ͬ�Ľṹ��ֻ��Ҫ����ѹ�벻ͬ��ָ��ʹ�÷�ʽ��������ɲ�ͬ�Ĺ�����ջ * ������� : ComStackElement* s ��ջ��ָ�� * ����������� : * ������� : @@ -884,7 +898,7 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ /*********************************************************************** * ������ : ReadQueueData - * �������� : �Խ��յ������ݽ�����ش��� + * �������� : �Խ��յ������ݽ�����ش����� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -893,7 +907,7 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ * RecordArray UINT8* INOUT ��¼���� * RecordArraySize UINT16 * pFsfbStruct FSFB_INFO_STRU * INOUT FSFBЭ��ͳһ�ṹ�� - * ����ֵ : DataNode_WL* ��ʱ���������ͷ + * ����ֵ : DataNode_WL* ��ʱ����������ͷ ***********************************************************************/ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordArray, UINT16 RecordSize, const UINT8 netIdx,FSFB_INFO_STRU *pFsfbStruct) { @@ -937,7 +951,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 +975,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 +1081,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; @@ -1065,7 +1091,7 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr /*********************************************************************** * ������ : InitRedunStruct - * �������� : ������ͳһ�ṹ����г�ʼ������ + * �������� : ������ͳһ�ṹ����г�ʼ�������� * ������� : * ������ ���� ������� ���� * -------------------------------------------------------------- @@ -1091,7 +1117,7 @@ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INF } /* -*��������: ��������հ��� +*��������: ���������հ��� *�������: FSFB_INFO_STRU* fsfb fsfb���� *�������: �� *�������: �� @@ -1133,7 +1159,7 @@ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, con break; } } - if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*δ�ҵ�,���һ�豸*/ + if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*δ�ҵ�,����һ�豸*/ { fsfb->NetsRecvPkgNums[fsfb->NetsRecvPkgNumsLen].DstDevName = dstDevName; ComMemSet((UINT8*)fsfb->NetsRecvPkgNums[i].NetsPkgNum, 2 * sizeof(UINT16), 0u); 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/protocol_cbtc/common_dqu_protocol/dsuProtclFun.c b/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.c index 64c1e9f..f6f171e 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.c +++ b/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.c @@ -29,111 +29,122 @@ typedef struct { UINT32 Id; /**/ - UINT32 Len; /**/ - UINT32 StartIdx; /*excelʼַ*/ - UINT32 RowCount; /**/ - UINT8* Data; /*excel*/ + UINT32 Len; /**/ + UINT16 RowCount; /**/ + UINT32 ColLen; /*ֽڳ*/ + UINT8* Data; /**/ } SheetInfo; -static void InitSheet(SheetInfo* sheetInfo, const UINT32 dataLen, UINT8 data[], const UINT32 excelId, const UINT32 sheetId); +static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId); +static void StDsuPtclFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId); +static UINT8 StDsuPtclFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId); +static void StDsuPtclSetDevNum(UINT8 locType, UINT8 oppType, SheetInfo* outDevIpSheet, SheetInfo* inDevIpSheet, UINT16* dupOppHlhtIdLen, UINT32* dupOppHlhtId, UINT16 outInDevIpRowCount, UINT8* devNum); static UINT8 GetCommOppDevTypes(SheetInfo* commSheet, UINT8 locType, UINT8* oppTypes, UINT8* oppTypePtls, UINT16* oppTypeNum, const UINT16 maxOppTypeNum); static void GetCommOppDevNum(SheetInfo* devIpSheet, UINT8 oppType, UINT16* dupOppHlhtIdsLen, UINT32* dupOppHlhtIds, const UINT16 maxDupOppHlhtIdsLen, UINT8* devNum); -/* -*: DsuCommonInfoInit -*: ѯʼ -*: UINT8 *pFsName FSļ -*: DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo ʹñ -*: -*ֵ: 1:ɹ;0ʧ -*/ -UINT8 DsuCommonInfoInit(UINT8 *pFsName, DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo) +/** + * @brief DsuCommonInfoInit ѯʼ + * @param pFsName FSļ· ȡֵΧ:ֽ + * @param pDsuProtclBookIpInfo ѯϢ ȡֵΧ:οṹDSU_PROTCL_BOOK_IP_INFO_STRU + * @param 0:ʧ;1:ɹ + */ +UINT8 DsuCommonInfoInit(UINT8* pFsName, DSU_PROTCL_BOOK_IP_INFO_STRU* pDsuProtclBookIpInfo) { - UINT8 rtn = 0; /*ֵ*/ - UINT8 readRtn = 0; /*ȡFSֵ*/ - UINT8 *pData = NULL; /**/ - UINT32 dataLen = 0; /*ݳ*/ - UINT32 mallocLen = 0; /*ռС*/ - UINT32 offset = 0; /*ƫ*/ - UINT32 i = 0; /*ѭ*/ + /*- ֲ*/ + UINT8 rtn = 0u; /*-< úֵΪʧ*/ + UINT8 readRtn = 0u; /*ȡFSֵ*/ + UINT8* pData = NULL; /**/ + UINT32 dataLen = 0u; /*ݳ*/ + UINT32 mallocLen = 0u; /*ռС*/ + UINT32 offset = 0u; /*ƫ*/ + UINT32 i = 0u; /*ѭ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ - if ((NULL != pFsName) && (NULL != pDsuProtclBookIpInfo)) /*ηǿ*/ + if ((NULL != pFsName) && (NULL != pDsuProtclBookIpInfo)) /*-< Ƿǿ*/ { - readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID, &pData, &dataLen); /*ȡ豸IPַ*/ - if ((1 == readRtn) && (DSU_IP_INFO_STRU_SIZE <= dataLen)) + readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID, &pData, &dataLen); /*-< úȡ豸IPַ*/ + if ((1u == readRtn) && (DSU_IP_INFO_STRU_SIZE <= dataLen)) /*-< Ƿ*/ { - pDsuProtclBookIpInfo->IpDevLen = (UINT16)(dataLen / DSU_IP_INFO_STRU_SIZE); /**/ - mallocLen = sizeof(UINT16)*(pDsuProtclBookIpInfo->IpDevLen); /*ռС*/ - pDsuProtclBookIpInfo->IpDevTypeIds = (UINT16*)malloc(mallocLen); /*ռ*/ - if (NULL != pDsuProtclBookIpInfo->IpDevTypeIds) + pDsuProtclBookIpInfo->IpDevLen = (UINT16)(dataLen / DSU_IP_INFO_STRU_SIZE); /*-< õ*/ + mallocLen = sizeof(UINT16) * (pDsuProtclBookIpInfo->IpDevLen); /*-< õIDռС*/ + pDsuProtclBookIpInfo->IpDevTypeIds = (UINT16*)malloc(mallocLen); /*-< ռ*/ + if (NULL != pDsuProtclBookIpInfo->IpDevTypeIds) /*-< Ƿɹ*/ { - CommonMemSet(pDsuProtclBookIpInfo->IpDevTypeIds, mallocLen, 0, mallocLen); /*ʼ*/ + CommonMemSet(pDsuProtclBookIpInfo->IpDevTypeIds, mallocLen, 0u, mallocLen); /*-< ʼ*/ - mallocLen = sizeof(UINT32)*(pDsuProtclBookIpInfo->IpDevLen); /*ռС*/ + mallocLen = sizeof(UINT32) * (pDsuProtclBookIpInfo->IpDevLen); /*-< õͨIDռС*/ #ifndef DEV_IP_TABLE_NO_HLHT - pDsuProtclBookIpInfo->IpDevHlhtIds = (UINT32*)malloc(mallocLen); /*ռ*/ - if (NULL != pDsuProtclBookIpInfo->IpDevHlhtIds) + pDsuProtclBookIpInfo->IpDevHlhtIds = (UINT32*)malloc(mallocLen); /*-< ռ*/ + if (NULL != pDsuProtclBookIpInfo->IpDevHlhtIds) /*-< Ƿɹ*/ { - CommonMemSet(pDsuProtclBookIpInfo->IpDevHlhtIds, mallocLen, 0, mallocLen); /*ʼ*/ + CommonMemSet(pDsuProtclBookIpInfo->IpDevHlhtIds, mallocLen, 0u, mallocLen); /*-< ʼ*/ #endif - for (i = 0; i < pDsuProtclBookIpInfo->IpDevLen; i++) + for (i = 0u; i < pDsuProtclBookIpInfo->IpDevLen; i++) /*-< 豸ID±ǷС*/ { - /*2ֽ豸ID*/ + /*- õ2ֽ豸ID*/ pDsuProtclBookIpInfo->IpDevTypeIds[i] = ShortFromChar(&pData[offset]); #ifndef DEV_IP_TABLE_NO_HLHT - /*4ֽڻͨID*/ - pDsuProtclBookIpInfo->IpDevHlhtIds[i] = LongFromChar(&pData[offset + 2]); + /*- õ4ֽڻͨID*/ + pDsuProtclBookIpInfo->IpDevHlhtIds[i] = LongFromChar(&pData[offset + 2u]); #endif - offset += DSU_IP_INFO_STRU_SIZE; + offset += DSU_IP_INFO_STRU_SIZE; /*-< ±ݳ*/ } - if (offset == dataLen) /*豸IDֵɹ*/ + if (offset == dataLen) /*-< 豸IDֵɹ*/ { - readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID, &pData, &dataLen); /*ȡ豸ͨЭ*/ - if ((1 == readRtn) && (DSU_COMM_PROTCL_STRU_SIZE <= dataLen)) - { - pDsuProtclBookIpInfo->CommProtclStruLen = (UINT16)(dataLen / DSU_COMM_PROTCL_STRU_SIZE); /**/ - mallocLen = sizeof(DSU_PROTCL_COMM_PROTCL_STRU)*(pDsuProtclBookIpInfo->CommProtclStruLen); /*ռС*/ - pDsuProtclBookIpInfo->pCommProtclStru = (DSU_PROTCL_COMM_PROTCL_STRU*)malloc(mallocLen); /*ռ*/ - if (NULL != pDsuProtclBookIpInfo->pCommProtclStru) - { - CommonMemSet(pDsuProtclBookIpInfo->pCommProtclStru, mallocLen, 0, mallocLen); /*ʼ*/ - - offset = 0; /*ƫƴ㿪ʼ*/ - for (i = 0; i < pDsuProtclBookIpInfo->CommProtclStruLen; i++) - { - /*1ֽڱ*/ - pDsuProtclBookIpInfo->pCommProtclStru[i].EmitterType = pData[offset]; - offset++; - /*1ֽڶԷ*/ - pDsuProtclBookIpInfo->pCommProtclStru[i].ReceptorType = pData[offset]; - offset++; - /*1ֽЭ*/ - if ((DSU_PROTCL_RSSP2 + 4) == pData[offset]) /*RSSPIIЭΪ9,õ±Ϊ5*/ - { - pDsuProtclBookIpInfo->pCommProtclStru[i].CommuType = DSU_PROTCL_RSSP2; - } - else - { - pDsuProtclBookIpInfo->pCommProtclStru[i].CommuType = pData[offset]; - } - offset++; - } - if (offset == dataLen) /*豸ͨЭֵɹ*/ - { - rtn = 1; - } - } - } + deepPro = 1u; /*-< ô־Ϊ*/ } + #ifndef DEV_IP_TABLE_NO_HLHT } #endif } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + pDsuProtclBookIpInfo->pCommProtclStru = NULL; /*-< ͨͱΪ*/ + readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID, &pData, &dataLen); /*-< úȡ豸ͨЭ*/ + if ((1u == readRtn) && (DSU_COMM_PROTCL_STRU_SIZE <= dataLen)) /*-< Ƿ*/ + { + pDsuProtclBookIpInfo->CommProtclStruLen = (UINT16)(dataLen / DSU_COMM_PROTCL_STRU_SIZE); /*-< õ*/ + mallocLen = sizeof(DSU_PROTCL_COMM_PROTCL_STRU) * (pDsuProtclBookIpInfo->CommProtclStruLen); /*-< õռС*/ + pDsuProtclBookIpInfo->pCommProtclStru = (DSU_PROTCL_COMM_PROTCL_STRU*)malloc(mallocLen); /*-< ռ*/ + } + if (NULL != pDsuProtclBookIpInfo->pCommProtclStru) /*-< ͨͱǷǿ*/ + { + CommonMemSet(pDsuProtclBookIpInfo->pCommProtclStru, mallocLen, 0u, mallocLen); /*-< ʼ*/ + + offset = 0u; /*-< ƫƴ㿪ʼ*/ + for (i = 0u; i < pDsuProtclBookIpInfo->CommProtclStruLen; i++) /*-< ͨID±ǷС*/ + { + /*- 1ֽڱ*/ + pDsuProtclBookIpInfo->pCommProtclStru[i].EmitterType = pData[offset]; + offset++; /*-< ±1*/ + /*- 1ֽڶԷ*/ + pDsuProtclBookIpInfo->pCommProtclStru[i].ReceptorType = pData[offset]; + offset++; /*-< ±1*/ + /*1ֽЭ*/ + if ((DSU_PROTCL_RSSP2 + 4u) == pData[offset]) /*-< ǷRSSPII*//*RSSPIIЭΪ9,õ±Ϊ5*/ + { + pDsuProtclBookIpInfo->pCommProtclStru[i].CommuType = DSU_PROTCL_RSSP2; /*-< ͨΪRSSPII*/ + } + else + { + pDsuProtclBookIpInfo->pCommProtclStru[i].CommuType = pData[offset]; /*-< ͨõͨ*/ + } + offset++; /*-< ±1*/ + } + if (offset == dataLen) /*-< 豸ͨЭֵɹ*/ + { + rtn = 1u; /*-< úֵΪɹ*/ + } + } + } + } } - return rtn; + return rtn; /*-< غֵ*/ } /* @@ -173,30 +184,30 @@ UINT8 DsuProtclGetProtclType(UINT16 locTypeId, UINT16 oppTypeId, UINT8 *pProtclT return rtn; } -/* -*: DsuGetProtclTypeInfo -*: ݱIDԷͨʱʹЭͨ豸(·) -*: UINT16 locTypeId ID -* DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo ʹñ -* UINT32 inDataLen ݳ -* UINT8 inData[] -* UINT16 globalVarOppTypePtlLen ͨŵĶԷ豸Э鳤 -*: UINT8 globalVarOppTypePtl[UINT8_MAX] ͨŵĶԷ豸Э -*: DSU_PROTCL_TYPE_STRU *dsuProtclTypeInfo Эͨ豸 -*ֵ: 1:ɹ;0ʧ -*/ -UINT8 DsuGetProtclTypeInfo(UINT16 locTypeId, DSU_PROTCL_TYPE_STRU* dsuProtclTypeInfo, DSU_PROTCL_BOOK_IP_INFO_STRU* pDsuProtclBookIpInfo,UINT8 globalVarOppTypePtl[], UINT16 globalVarOppTypePtlLen, UINT32 inDataLen, UINT8 inData[]) +/** + * @brief DsuGetProtclTypeInfo ݱIDԷͨʱʹЭͨ豸(·) + * @param locTypeId ID ȡֵΧ:0x0000-0xFFFF + * @param dsuProtclTypeInfo Э ȡֵΧ:οṹDSU_PROTCL_TYPE_STRU + * @param pDsuProtclBookIpInfo ʹñ ȡֵΧ:οṹDSU_PROTCL_BOOK_IP_INFO_STRU + * @param globalVarOppTypePtl ԷЭ ȡֵΧ:ֽ + * @param globalVarOppTypePtlLen ԷЭ鳤 ȡֵΧ:0x0000-0xFFFF + * @param inDataLen ڲݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @return 0:ʧ 1:ɹ + */ +UINT8 DsuGetProtclTypeInfo(UINT16 locTypeId, DSU_PROTCL_TYPE_STRU* dsuProtclTypeInfo, DSU_PROTCL_BOOK_IP_INFO_STRU* pDsuProtclBookIpInfo, UINT8 globalVarOppTypePtl[], UINT16 globalVarOppTypePtlLen, UINT32 inDataLen, UINT8 inData[]) { - UINT8 rtn = 0; /*ֵ*/ + /*- ֲ*/ + UINT8 rtn = 0u; /*ֵ*/ UINT8 locType = (UINT8)(locTypeId >> 8); /**/ - UINT32 i = 0; /*ѭ*/ - UINT8 outCanGetComm = 0; /*Ƿô*/ - UINT8 inCanGetComm = 0; /*Ƿô*/ - UINT16 oppTypeNum = 0; /*Է*/ - UINT16 dupOppHlhtIdLen = 0; /*ظԷID*/ - UINT8 devNum = 0; /*豸*/ - UINT32 oppTypeSpLen = 0; /*Է豸ռ䳤*/ - UINT32 dupOppHlhtIdSpLen = 0; /*ظԷͨIDռ䳤*/ + UINT32 i = 0u; /*ѭ*/ + UINT8 outCanGetComm = 0u; /*Ƿô*/ + UINT8 inCanGetComm = 0u; /*Ƿô*/ + UINT16 oppTypeNum = 0u; /*Է*/ + UINT16 dupOppHlhtIdLen = 0u; /*ظԷID*/ + UINT8 devNum = 0u; /*豸*/ + UINT32 oppTypeSpLen = 0u; /*Է豸ռ䳤*/ + UINT32 dupOppHlhtIdSpLen = 0u; /*ظԷͨIDռ䳤*/ UINT8* oppType = NULL; /*Է豸*/ UINT8* oppTypePtl = NULL; /*Է豸Э*/ UINT32* dupOppHlhtId = NULL; /*ظԷͨID*/ @@ -207,88 +218,76 @@ UINT8 DsuGetProtclTypeInfo(UINT16 locTypeId, DSU_PROTCL_TYPE_STRU* dsuProtclType UINT32 outInCommRowCount = 0u; /*ͨЭsheetҳ*/ UINT32 outInDevIpRowCount = 0u; /*豸IPַsheetҳ*/ - if ((NULL != dsuProtclTypeInfo) && (NULL != pDsuProtclBookIpInfo)) + if ((NULL != dsuProtclTypeInfo) && (NULL != pDsuProtclBookIpInfo) && (NULL != globalVarOppTypePtl)) /*-< Ƿǿ*/ { - InitSheet(&outCommSheet, g_DataBufLen, g_pDataBuf, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); - InitSheet(&inCommSheet, inDataLen, inData, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); - InitSheet(&outDevIpSheet, g_DataBufLen, g_pDataBuf, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID); - InitSheet(&inDevIpSheet, inDataLen, inData, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID); + /*- ȡⲿڲ*/ + InitSheet(&outCommSheet, g_pDataBuf, g_DataBufLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); + InitSheet(&inCommSheet, inData, inDataLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); + InitSheet(&outDevIpSheet, g_pDataBuf, g_DataBufLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID); + InitSheet(&inDevIpSheet, inData, inDataLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID); - outInCommRowCount = pDsuProtclBookIpInfo->CommProtclStruLen + inCommSheet.RowCount; - outInDevIpRowCount = pDsuProtclBookIpInfo->IpDevLen + inDevIpSheet.RowCount; + outInCommRowCount = pDsuProtclBookIpInfo->CommProtclStruLen + inCommSheet.RowCount; /*-< õڲͨ*/ + outInDevIpRowCount = pDsuProtclBookIpInfo->IpDevLen + inDevIpSheet.RowCount; /*-< õڲ豸IP*/ - oppTypeSpLen = sizeof(UINT8) * (outInCommRowCount); /*Էռ䳤*/ - dupOppHlhtIdSpLen = sizeof(UINT32) * (outInDevIpRowCount); /*ظԷIDռ䳤*/ - oppType = (UINT8*)malloc(oppTypeSpLen); /*Է*/ - oppTypePtl = (UINT8*)malloc(oppTypeSpLen); /*ԷʹЭ*/ - dupOppHlhtId = (UINT32*)malloc(dupOppHlhtIdSpLen); /*ظԷID*/ + oppTypeSpLen = sizeof(UINT8) * (outInCommRowCount); /*-< Էռ䳤*/ + dupOppHlhtIdSpLen = sizeof(UINT32) * (outInDevIpRowCount); /*-< ظԷIDռ䳤*/ + oppType = (UINT8*)malloc(oppTypeSpLen); /*-< Է*/ + oppTypePtl = (UINT8*)malloc(oppTypeSpLen); /*-< ԷʹЭ*/ + dupOppHlhtId = (UINT32*)malloc(dupOppHlhtIdSpLen); /*-< ظԷID*/ - if ((NULL != oppType) && (NULL != oppTypePtl) && (NULL != dupOppHlhtId)) /*ǿ*/ + if ((NULL != oppType) && (NULL != oppTypePtl) && (NULL != dupOppHlhtId)) /*-< ǿ*/ { - CommonMemSet(oppType, oppTypeSpLen, 0, oppTypeSpLen); /*ʼ*/ - CommonMemSet(oppTypePtl, oppTypeSpLen, 0, oppTypeSpLen); /*ʼ*/ - CommonMemSet(dupOppHlhtId, dupOppHlhtIdSpLen, 0, dupOppHlhtIdSpLen); /*ʼ*/ + CommonMemSet(oppType, oppTypeSpLen, 0u, oppTypeSpLen); /*-< Էͳʼ*/ + CommonMemSet(oppTypePtl, oppTypeSpLen, 0u, oppTypeSpLen); /*-< Էͳʼ*/ + CommonMemSet(dupOppHlhtId, dupOppHlhtIdSpLen, 0u, dupOppHlhtIdSpLen); /*-< ԷͨIDʼ*/ - outCanGetComm = GetCommOppDevTypes(&outCommSheet, locType, oppType, oppTypePtl, &oppTypeNum, (UINT16)(outInCommRowCount)); - if (1u == outCanGetComm) /**/ + outCanGetComm = GetCommOppDevTypes(&outCommSheet, locType, oppType, oppTypePtl, &oppTypeNum, (UINT16)(outInCommRowCount)); /*-< ûȡͨŵĶԷ豸麯*/ + if (1u == outCanGetComm) /*-< Ƿ*/ { - inCanGetComm = GetCommOppDevTypes(&inCommSheet, locType, oppType, oppTypePtl, &oppTypeNum, (UINT16)(outInCommRowCount)); - if ((1u == outCanGetComm) && ((0 == inCommSheet.RowCount) || (0 < inCommSheet.RowCount && 1u == inCanGetComm))) /**/ + inCanGetComm = GetCommOppDevTypes(&inCommSheet, locType, oppType, oppTypePtl, &oppTypeNum, (UINT16)(outInCommRowCount)); /*-< ûȡͨŵĶԷ豸麯*/ + if ((1u == outCanGetComm) && ((0u == inCommSheet.RowCount) || (0u < inCommSheet.RowCount && 1u == inCanGetComm))) /*-< */ { - for (i = 0; i < oppTypeNum; i++) /*Է*/ + for (i = 0u; i < oppTypeNum; i++) /*-< Է±ǷС*/ { - if (oppType[i] < globalVarOppTypePtlLen) + if (oppType[i] < globalVarOppTypePtlLen) /*-< ԷЭǷϷ*/ { - globalVarOppTypePtl[oppType[i]] = oppTypePtl[i]; /*ȫͨŵĶԷ豸Э*/ + globalVarOppTypePtl[oppType[i]] = oppTypePtl[i]; /*-< ȫͨŵĶԷ豸Э*/ } - devNum = 0; - if ((VOBC_TYPE == locType) && ((AOM_TYPE == oppType[i]) || (ITE_TYPE == oppType[i]))) - { - /*ATPԷAOM,ITEʱ̶ͨΪ2*/ - devNum = 2; - } - else if ((VOBC_TYPE == locType) && ((CI_TYPE == oppType[i]) || (ZC_TYPE == oppType[i]) || (ATS_TYPE == oppType[i]) || (PSC_TYPE == oppType[i]))) - { - /*ATPԷCI,ZC,ATSʱ̶ͨΪ3*/ - devNum = 3; - } - else - { - GetCommOppDevNum(&outDevIpSheet, oppType[i], &dupOppHlhtIdLen, dupOppHlhtId, (UINT16)(outInDevIpRowCount), &devNum); - GetCommOppDevNum(&inDevIpSheet, oppType[i], &dupOppHlhtIdLen, dupOppHlhtId, (UINT16)(outInDevIpRowCount), &devNum); - } + devNum = 0u; /*-< 豸Ϊ0*/ + StDsuPtclSetDevNum(locType, oppType[i], &outDevIpSheet, &inDevIpSheet, &dupOppHlhtIdLen, dupOppHlhtId, (UINT16)(outInDevIpRowCount), &devNum); /*-< 豸*/ + /*ӵӦЭ͵ͨ豸*/ - switch (oppTypePtl[i]) + switch (oppTypePtl[i]) /*-< ж϶ԷЭ*/ { - case DSU_PROTCL_SFP: - (dsuProtclTypeInfo->sfpProtclNum) += devNum; + case DSU_PROTCL_SFP: /*-< ԷЭǷSFP*/ + (dsuProtclTypeInfo->sfpProtclNum) += devNum; /*-< SFPԼ豸*/ break; - case DSU_PROTCL_RSSP: - (dsuProtclTypeInfo->rsspProtclNum) += devNum; + case DSU_PROTCL_RSSP: /*-< ԷЭǷRSSP*/ + (dsuProtclTypeInfo->rsspProtclNum) += devNum; /*-< RSSPIԼ豸*/ break; - case DSU_PROTCL_RSR: - (dsuProtclTypeInfo->rsrProtclNum) += devNum; + case DSU_PROTCL_RSR: /*-< ԷЭǷRSR*/ + (dsuProtclTypeInfo->rsrProtclNum) += devNum; /*-< RSRԼ豸*/ break; - case DSU_PROTCL_RP: - (dsuProtclTypeInfo->redunProtclNum) += devNum; + case DSU_PROTCL_RP: /*-< ԷЭǷRP*/ + (dsuProtclTypeInfo->redunProtclNum) += devNum; /*-< RPԼ豸*/ break; - case DSU_PROTCL_RSSP2: - (dsuProtclTypeInfo->rssp2ProtclNum) += devNum; + case DSU_PROTCL_RSSP2: /*-< ԷЭǷRSSPII*/ + (dsuProtclTypeInfo->rssp2ProtclNum) += devNum; /*-< RSSPIIԼ豸*/ break; - case DSU_PROTCL_FSFB: - (dsuProtclTypeInfo->fsfbProtclNum) += devNum; + case DSU_PROTCL_FSFB: /*-< ԷЭǷFSFB*/ + (dsuProtclTypeInfo->fsfbProtclNum) += devNum; /*-< FSFBԼ豸*/ break; - default: + default: /*-< */ break; } } - rtn = 1; /*ִгɹ*/ + rtn = 1u; /*-< úֵΪ1*/ } } - /*ͷŶ̬ڴ*/ + /*- ͷŶ̬ڴ*/ free(oppType); oppType = NULL; free(oppTypePtl); @@ -298,237 +297,355 @@ UINT8 DsuGetProtclTypeInfo(UINT16 locTypeId, DSU_PROTCL_TYPE_STRU* dsuProtclType } } - return rtn; + return rtn; /*-< غֵ*/ } -/* -*: ʼsheetҳϢ -*: const UINT32 dataLen ݳ -* UINT8 data[] -* const UINT32 excelId excel -* const UINT32 sheetId sheetҳ -*: SheetInfo* sheetInfo sheetҳϢ -*: -*ֵ: -*/ -static void InitSheet(SheetInfo* sheetInfo, const UINT32 dataLen, UINT8 data[], const UINT32 excelId, const UINT32 sheetId) +/** + * @brief InitSheet ʼsheetҳϢ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId) { + /*- ֲ*/ UINT32 idx = 0u; /*±*/ UINT32 crcVal = 0u; /*crcֵ*/ UINT32 crc = 0u; /*crc*/ UINT32 curLen = 0u; /*ǰ*/ UINT32 excelCount = 0u; /*excel*/ - UINT32 excelIdx = 0u; /*excel±*/ - UINT32 curExcelId = 0u; /*ǰexcel*/ - UINT32 curExcelPos = 0u; /*ǰexcelλ*/ - UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ - UINT32 sheetCount = 0u; /*sheet*/ - UINT32 sheetIdx = 0u; /*sheet±*/ - UINT32 curSheetId = 0u; /*ǰsheet*/ - UINT8 isBreak = 0u; /*Ƿ˳*/ - UINT8 isFind = 0u; /*Ƿҵ*/ - if ((0u < dataLen) && (NULL != data) && (NULL != sheetInfo)) /**/ + if ((NULL != sheetInfo) && (0u < dataLen) && (NULL != data)) /*-< Ƿǿ*/ { - if ((idx + 40) <= dataLen) /*DH±*/ + sheetInfo->Id = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->Len = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->RowCount = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->ColLen = 0u; /*-< sheetҳϢֽڳΪ0*/ + sheetInfo->Data = NULL; /*-< sheetҳϢΪNULL*/ + + if ((idx + 40u) <= dataLen) /*-< ʹݳǷϷ*/ { - /*4ֽCRC*/ - crcVal = LongFromChar(&data[idx]); - idx += 4; + crcVal = LongFromChar(&data[idx]); /*-< õCRCֵ*/ + idx += 4u; /*-< ǰ±4*/ + /*4ֽڰ汾*/ - idx += 4; - /*4ֽڳ*/ - curLen = LongFromChar(&data[idx]); - idx += 4; + idx += 4u; /*-< ǰ±4*/ - if ((curLen == dataLen) && (4 < curLen)) + curLen = LongFromChar(&data[idx]); /*-< õг*/ + idx += 4u; /*-< ǰ±4*/ + + if ((curLen == dataLen) && (4u < curLen)) /*-< гǷϷ*/ { - crc = Crc32(&data[4], curLen - 4); - if (crc == crcVal) + crc = Crc32(&data[4u], curLen - 4u); /*-< CRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷCRC*/ { - /*4ֽexcel*/ - excelCount = LongFromChar(&data[idx]); - idx += 4; + excelCount = LongFromChar(&data[idx]); /*-< õexcel*/ + idx += 4u; /*-< ǰ±4*/ + /*24ֽԤ*/ - idx += 24; + idx += 24u; /*-< ǰ±24*/ - for (excelIdx = 0; excelIdx < excelCount; excelIdx++) - { - if ((idx + 24) <= dataLen) /*DI±*/ - { - /*4ֽexcel*/ - curExcelId = LongFromChar(&data[idx]); - idx += 4; - if (curExcelId == excelId) - { - /*4ֽڳ*/ - idx += 4; - /*4ֽexcelλ*/ - curExcelPos = LongFromChar(&data[idx]); - curExcelStartPos = curExcelPos; - idx += 4; - /*12ֽԤ*/ - idx += 12; - - if ((curExcelPos + 40) <= dataLen) /*DH±*/ - { - /*4ֽexcel CRC*/ - crcVal = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*4ֽexcel汾*/ - curExcelPos += 4; - /*4ֽexcel*/ - curLen = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - - if (4 < curLen) - { - crc = Crc32(&data[curExcelStartPos + 4], curLen - 4); - if (crc == crcVal) - { - /*4ֽsheet*/ - sheetCount = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*24ֽԤ*/ - curExcelPos += 24; - - for (sheetIdx = 0; sheetIdx < sheetCount; sheetIdx++) - { - if ((curExcelPos + 24) <= dataLen) /*DH±*/ - { - /*4ֽsheet*/ - curSheetId = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - if (curSheetId == sheetId) - { - sheetInfo->Id = curSheetId; - /*4ֽڳ*/ - sheetInfo->Len = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*4ֽsheetexcelλ*/ - sheetInfo->StartIdx = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*2ֽ*/ - sheetInfo->RowCount = ShortFromChar(&data[curExcelPos]); - curExcelPos += 2; - /*2ֽ*/ - curExcelPos += 2; - /*8ֽԤ*/ - curExcelPos += 8; - - sheetInfo->Data = &data[curExcelStartPos]; - isFind = 1u; - } - else - { - curExcelPos += 20; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if ((1u == isFind) || (1u == isBreak)) - { - break; - } - } - } - else /*crc*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /**/ - { - idx += 20; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if ((1u == isFind) || (1u == isBreak)) - { - break; - } - } + StDsuPtclFindExcel(sheetInfo, data, dataLen, idx, excelCount, excelId, sheetId); /*-< ҶӦexcleݺ*/ } } } } } -/* -*: ȡͨŵĶԷ豸 -*: SheetInfo* commSheet 豸ͨЭ -* UINT8 locType -*: UINT8* oppTypes Է -* UINT8* oppTypePtls ԷЭ -* UINT16* oppTypeNum Է -* const UINT16 maxOppTypeNum Է -*: -*ֵ: -*/ +/** + * @brief StDsuPtclFindExcel ҶӦexcle + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param idx ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelCount excle ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StDsuPtclFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT32 excelIdx = 0u; /*excel±*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ + UINT32 curExcelId = 0u; /*ǰexcel*/ + UINT32 curExcelPos = 0u; /*ǰexcelλ*/ + UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ + UINT32 crcVal = 0u; /*crcֵ*/ + UINT32 crc = 0u; /*crc*/ + UINT32 curLen = 0u; /*ǰ*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ + UINT32 sheetCount = 0u; /*sheet*/ + + if ((NULL != sheetInfo) && (NULL != data)) /*-< Ƿǿ*/ + { + for (excelIdx = 0u; excelIdx < excelCount; excelIdx++) /*-< excel±ǷСexcel*/ + { + deepPro = 0u; /*-< ô־Ϊ*/ + + if ((idx + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curExcelId = LongFromChar(&data[idx]); /*-< õǰexcleID*/ + idx += 4u; /*-< ǰ±4*/ + + if (curExcelId == excelId) /*-< õǰexcleIDǷΪҪҵ*/ + { + /*4ֽڳ*/ + idx += 4u; /*-< ǰ±4*/ + + /*4ֽexcelλ*/ + curExcelPos = LongFromChar(&data[idx]); /*-< õǰexcelλ*/ + curExcelStartPos = curExcelPos; /*-< ¼ǰexcelλΪexcelʼλ*/ + idx += 4u; /*-< ǰ±4*/ + + /*12ֽԤ*/ + idx += 12u; /*-< ǰ±12*/ + + if ((curExcelPos + 40u) <= dataLen) /*-< ʹݳǷϷ*/ + { + crcVal = LongFromChar(&data[curExcelPos]); /*-< õCRCֵ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*4ֽexcel汾*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + curLen = LongFromChar(&data[curExcelPos]); /*-< õexcel*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + if ((4u < curLen) && ((curExcelStartPos + curLen) <= dataLen)) /*-< excelȴ4 excelʼλüӳСڵݳ*/ + { + deepPro = 1u; /*-< ô־Ϊ*/ + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /**/ + { + idx += 20u; /*-< ǰ±20*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + crc = Crc32(&data[curExcelStartPos + 4u], curLen - 4u); /*-< excelCRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷ*/ + { + sheetCount = LongFromChar(&data[curExcelPos]); /*-< õsheetҳ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*24ֽԤ*/ + curExcelPos += 24u; /*-< ǰexcelλ24*/ + + isBreak = StDsuPtclFindSheet(sheetInfo, data, dataLen, curExcelStartPos, &curExcelPos, sheetCount, sheetId); /*-< ҶӦsheetҳݺ*/ + } + else /*crc*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + + if (1u == isBreak) /*-< ˳ʶΪǷΪ*/ + { + break; /*-< ˳*/ + } + } + } +} + +/** + * @brief StDsuPtclFindSheet ҶӦsheetҳ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelStartPos excelʼλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelPos ǰexcelλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetCount sheetҳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StDsuPtclFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ˳*/ + UINT32 sheetIdx = 0u; /*sheet±*/ + UINT32 curSheetId = 0u; /*ǰsheet*/ + UINT32 curSheetStartPos = 0u; /*ǰsheetʼλ*/ + + if ((NULL != sheetInfo) && (NULL != data) && (NULL != curExcelPos)) /*-< Ƿǿ*/ + { + for (sheetIdx = 0u; sheetIdx < sheetCount; sheetIdx++) /*-< sheetҳ±Ƿsheetҳ*/ + { + if (((*curExcelPos) + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curSheetId = LongFromChar(&data[*curExcelPos]); /*-< õǰsheetҳID*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + if (curSheetId == sheetId) /*-< õǰsheetҳIDǷΪҪҵ*/ + { + sheetInfo->Id = curSheetId; /*-< õǰsheetҳIDsheetҳϢ*/ + + sheetInfo->Len = LongFromChar(&data[*curExcelPos]); /*-< óȵsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + curSheetStartPos = LongFromChar(&data[*curExcelPos]); /*-< sheetexcelλõsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + sheetInfo->RowCount = ShortFromChar(&data[*curExcelPos]); /*-< sheetҳϢ*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + + /*2ֽ-*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + /*8ֽԤ*/ + (*curExcelPos) += 8u; /*-< ǰexcelλ8*/ + + sheetInfo->Data = &data[curExcelStartPos + curSheetStartPos]; /*-< sheetҳʼݵsheetҳϢ*/ + + if (0u < sheetInfo->RowCount) /*-< Ƿ*/ + { + if ((0u < sheetInfo->Len) && (0u == (sheetInfo->Len % sheetInfo->RowCount))) /*-< Ƿݳ*/ + { + sheetInfo->ColLen = sheetInfo->Len / sheetInfo->RowCount; /*-< õݳ*/ + } + else /*ݴ*/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->RowCount = 0u; /*-< Ϊ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + } + else /**/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + + rtnVal = 1u; /*-< úֵΪ˳*/ + } + else + { + (*curExcelPos) += 20u; /*-< ǰexcelλ20*/ + } + } + else /*ȴ*/ + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + + if (1u == rtnVal) /*-< ֵǷΪ˳*/ + { + break; /*-< ˳*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} + +/** + * @brief StDsuPtclSetDevNum 豸 + * @param locType ȡֵΧ:0x00-0xFF + * @param oppType Է ȡֵΧ:0x00-0xFF + * @param outDevIpSheet ⲿ豸IP ȡֵΧ:οṹSheetInfo + * @param inDevIpSheet ڲ豸IP ȡֵΧ:οṹSheetInfo + * @param dupOppHlhtIdLen ԷͨID鳤 ȡֵΧ:0x0000-0xFFFF + * @param dupOppHlhtId ԷͨID ȡֵΧ:0x0000-0xFFFF + * @param outInDevIpRowCount 豸IP ȡֵΧ:0x00000000-0xFFFFFFFF + * @param devNum 豸 ȡֵΧ:0x00-0xFF + */ +static void StDsuPtclSetDevNum(UINT8 locType, UINT8 oppType, SheetInfo* outDevIpSheet, SheetInfo* inDevIpSheet, UINT16* dupOppHlhtIdLen, UINT32* dupOppHlhtId, UINT16 outInDevIpRowCount, UINT8* devNum) +{ + if (NULL != devNum) /*-< Ƿǿ*/ + { + (*devNum) = 0u; /*-< 豸Ϊ0*/ + + if (((VOBC_TYPE == locType) || (IVOC_TYPE == locType)) && ((AOM_TYPE == oppType) || (IVOC_AOM_TYPE == oppType) || (ITE_TYPE == oppType))) /*-< ΪCBTCIVOC ҶԷΪCBTCAOMIVOCAOMITE*/ + { + /*- ATPԷAOM,ITEʱ̶ͨΪ2*/ + (*devNum) = 2u; + } + else if (((VOBC_TYPE == locType) || (IVOC_TYPE == locType)) && ((CI_TYPE == oppType) || (RC_TYPE == oppType) || (ZC_TYPE == oppType) || (ATS_TYPE == oppType) || (PSC_TYPE == oppType) || (OC_TYPE == oppType))) /*-< ΪCBTCIVOC ҶԷΪCIRCZCATSPSCOC*/ + { + /*- ATPԷCI,ZC,ATS,PSC,OCʱ̶ͨΪ3*/ + (*devNum) = 3u; + } + else + { + GetCommOppDevNum(outDevIpSheet, oppType, dupOppHlhtIdLen, dupOppHlhtId, outInDevIpRowCount, devNum); /*- úȡⲿͨŵĶԷ豸*/ + GetCommOppDevNum(inDevIpSheet, oppType, dupOppHlhtIdLen, dupOppHlhtId, outInDevIpRowCount, devNum); /*- úȡڲͨŵĶԷ豸*/ + } + } +} + +/** + * @brief GetCommOppDevTypes ȡͨŵĶԷ豸 + * @param commSheet 豸ͨЭ ȡֵΧ:οṹSheetInfo + * @param locType ȡֵΧ:0x00-0xFF + * @param oppTypes Է ȡֵΧ:ֽ + * @param oppTypePtls ԷЭ ȡֵΧ:ֽ + * @param oppTypeNum Է ȡֵΧ:0x0000-0xFFFF + * @param maxOppTypeNum Է ȡֵΧ:0x0000-0xFFFF + * @return 0:ʧ 1:ɹ + */ static UINT8 GetCommOppDevTypes(SheetInfo* commSheet, UINT8 locType, UINT8* oppTypes, UINT8* oppTypePtls, UINT16* oppTypeNum, const UINT16 maxOppTypeNum) { - UINT8 retVal = 0u; /*ֵ*/ - UINT32 rowLen = 0u; /*г*/ + /*- ֲ*/ + const UINT32 commColLen = 3u; /*Ҫ豸ͨЭг*/ + UINT8 retVal = 0u; /*-< úֵΪ0*/ UINT32 i = 0u; /*ѭ*/ UINT32 j = 0u; /*ѭ*/ UINT8 locDevType = 0u; /*豸*/ UINT8 oppDevType = 0u; /*Է豸*/ UINT8 ptlType = 0u; /*Э*/ - UINT8 isAddOppType = 0; /*ǷӶԷ*/ + UINT8 isAddOppType = 0u; /*ǷӶԷ*/ UINT8 isConfigErr = 0u; /*Ƿô*/ - if ((NULL != commSheet) && (NULL != oppTypes) && (NULL != oppTypePtls) && (NULL != oppTypeNum) && (0u < commSheet->Len) && (0u < commSheet->RowCount) && (0 == commSheet->Len % commSheet->RowCount)) /*sheet*/ + if ((NULL != commSheet) && (NULL != oppTypes) && (NULL != oppTypePtls) && (NULL != oppTypeNum) && (NULL != commSheet->Data) && (commSheet->ColLen >= commColLen)) /*-< ǿ */ { - rowLen = commSheet->Len / commSheet->RowCount; - for (i = 0; i < commSheet->RowCount; i++) /*豸ͨЭ*/ + for (i = 0u; i < commSheet->RowCount; i++) /*-< ±ǷС*/ { - locDevType = commSheet->Data[commSheet->StartIdx + (i * rowLen)]; - oppDevType = commSheet->Data[commSheet->StartIdx + (i * rowLen) + 1]; - ptlType = commSheet->Data[commSheet->StartIdx + (i * rowLen) + 2]; - if (9 == ptlType) /*RSSPII9Ϊ5*/ + locDevType = commSheet->Data[i * commSheet->ColLen]; /*-< õID*/ + oppDevType = commSheet->Data[(i * commSheet->ColLen) + 1u]; /*-< õԷID*/ + ptlType = commSheet->Data[(i * commSheet->ColLen) + 2u]; /*-< õЭID*/ + if (9u == ptlType) /*-< RSSPIIǷΪ9*/ { - ptlType = DSU_PROTCL_RSSP2; + ptlType = DSU_PROTCL_RSSP2; /*-< ڲRSSPIIΪ5*/ } - if (locDevType == locType)/* Ϊͷ */ + if (locDevType == locType) /*-< ǷΪ*/ { - isAddOppType = 0; - for (j = 0; j < (*oppTypeNum); j++) /*鿴ǷظԷ*/ + isAddOppType = 0u; /*-< ǷΪ*/ + for (j = 0u; j < (*oppTypeNum); j++) /*-< 鿴ǷظԷ*/ { - if (oppTypes[j] == oppDevType) /*ظԷ*/ + if (oppTypes[j] == oppDevType) /*-< ظԷ*/ { - if (oppTypePtls[j] != ptlType) /*ʹЭͲͬ,ô*/ + if (oppTypePtls[j] != ptlType) /*-< ʹЭͲͬ*/ { - isConfigErr = 1u; + isConfigErr = 1u; /*-< ô*/ } break; } } - if (j == (*oppTypeNum)) /*Ͳظ,*/ + if (j == (*oppTypeNum)) /*-< Ͳظ*/ { - isAddOppType = 1u; + isAddOppType = 1u; /*-< ǷΪ*/ } - if (0u == isConfigErr) /**/ + if (0u == isConfigErr) /*-< */ { - if ((1u == isAddOppType) && ((*oppTypeNum) < maxOppTypeNum)) /*ֵ*/ + if ((1u == isAddOppType) && ((*oppTypeNum) < maxOppTypeNum)) /*-< */ { - oppTypes[*oppTypeNum] = oppDevType; /*Է*/ - oppTypePtls[*oppTypeNum] = ptlType; /*ʹЭ*/ - (*oppTypeNum)++; + oppTypes[*oppTypeNum] = oppDevType; /*-< öԷ*/ + oppTypePtls[*oppTypeNum] = ptlType; /*-< ʹЭ*/ + (*oppTypeNum)++; /*-< ʹЭ1*/ } } else /*ô,˳*/ @@ -537,69 +654,66 @@ static UINT8 GetCommOppDevTypes(SheetInfo* commSheet, UINT8 locType, UINT8* oppT } } } - if (0 == isConfigErr) /**/ + if (0u == isConfigErr) /*-< */ { - retVal = 1u; + retVal = 1u; /*-< úֵΪ1*/ } } - return retVal; + return retVal; /*-< غֵ*/ } -/* -*: ȡͨŵĶԷ豸 -*: SheetInfo* devIpSheet 豸IP -* UINT8 oppType Է -* UINT16* dupOppHlhtIdLen ظĶԷͨID -* UINT32* dupOppHlhtId ظĶԷͨID -*: UINT16* dupOppHlhtIdLen ظĶԷͨID -* UINT32* dupOppHlhtId ظĶԷͨID -* UINT8* devNum 豸 -*: -*ֵ: -*/ +/** + * @brief GetCommOppDevNum ȡͨŵĶԷ豸 + * @param devIpSheet 豸IP ȡֵΧ:οṹSheetInfo + * @param oppType Է ȡֵΧ:0x00-0xFF + * @param dupOppHlhtIdsLen ظĶԷͨID ȡֵΧ:0x0000-0xFFFF + * @param dupOppHlhtIds ظĶԷͨID ȡֵΧ:ֽ + * @param maxDupOppHlhtIdsLen ظĶԷͨID ȡֵΧ:0x0000-0xFFFF + * @param devNum 豸 ȡֵΧ:0x00-0xFF + */ static void GetCommOppDevNum(SheetInfo* devIpSheet, UINT8 oppType, UINT16* dupOppHlhtIdsLen, UINT32* dupOppHlhtIds, const UINT16 maxDupOppHlhtIdsLen, UINT8* devNum) { - UINT32 rowLen = 0u; /*г*/ + /*- ֲ*/ + const UINT32 devIpColLen = 6u; /*Ҫ豸IPַг*/ UINT32 i = 0u; /*ѭ*/ UINT32 j = 0u; /*ѭ*/ UINT16 devId = 0u; /*豸ID*/ UINT32 hlhtId = 0u; /*HLHT ID*/ - if ((NULL != devIpSheet) && (NULL != dupOppHlhtIdsLen) && (NULL != dupOppHlhtIds) && (NULL != devNum) && (0u < devIpSheet->Len) && (0u < devIpSheet->RowCount) && (0 == devIpSheet->Len % devIpSheet->RowCount)) /*sheet*/ + if ((NULL != devIpSheet) && (NULL != dupOppHlhtIdsLen) && (NULL != dupOppHlhtIds) && (NULL != devNum) && (NULL != devIpSheet->Data) && (devIpSheet->ColLen >= devIpColLen)) /*-< ǿ */ { - rowLen = devIpSheet->Len / devIpSheet->RowCount; - for (i = 0; i < devIpSheet->RowCount; i++) /*豸ͨЭ*/ + for (i = 0u; i < devIpSheet->RowCount; i++) /*-< ±ǷС*/ { - devId = ShortFromChar(&devIpSheet->Data[devIpSheet->StartIdx + (i * rowLen)]); - hlhtId = LongFromChar(&devIpSheet->Data[devIpSheet->StartIdx + (i * rowLen) + 2]); - if (((UINT8)(devId >> 8)) == oppType) /*豸ͬ*/ + devId = ShortFromChar(&devIpSheet->Data[i * devIpSheet->ColLen]); /*-< õ豸ID*/ + hlhtId = LongFromChar(&devIpSheet->Data[(i * devIpSheet->ColLen) + 2]); /*-< õͨID*/ + if (((UINT8)(devId >> 8)) == oppType) /*-< 豸ǷԷ*/ { - for (j = 0; j < (*dupOppHlhtIdsLen); j++) + for (j = 0u; j < (*dupOppHlhtIdsLen); j++) /*-< 豸ǷԷ*/ { #ifdef DEV_IP_TABLE_NO_HLHT - if (dupOppHlhtIds[j] == devId) /*HLHT IDظ,˳*/ + if (dupOppHlhtIds[j] == devId) /*-< HLHT IDظ,˳*/ { break; } #else - if (dupOppHlhtIds[j] == hlhtId) /*HLHT IDظ,˳*/ + if (dupOppHlhtIds[j] == hlhtId) /*-< HLHT IDظ,˳*/ { break; } #endif } - if ((j == (*dupOppHlhtIdsLen)) && ((*dupOppHlhtIdsLen) < maxDupOppHlhtIdsLen)) /*HLHT IDظ*/ + if ((j == (*dupOppHlhtIdsLen)) && ((*dupOppHlhtIdsLen) < maxDupOppHlhtIdsLen)) /*-< HLHT IDظ*/ { #ifdef DEV_IP_TABLE_NO_HLHT - dupOppHlhtIds[*dupOppHlhtIdsLen] = devId; /*HLHT ID*/ + dupOppHlhtIds[*dupOppHlhtIdsLen] = devId; /*-< HLHT ID*/ #else - dupOppHlhtIds[*dupOppHlhtIdsLen] = hlhtId; /*HLHT ID*/ + dupOppHlhtIds[*dupOppHlhtIdsLen] = hlhtId; /*-< HLHT ID*/ #endif - (*dupOppHlhtIdsLen)++; /*ȽϵHLHT ID1*/ - (*devNum)++; /*豸1*/ + (*dupOppHlhtIdsLen)++; /*-< ȽϵHLHT ID1*/ + (*devNum)++; /*-< 豸1*/ } } } } -} \ No newline at end of file +} diff --git a/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.h b/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.h index 811cbc5..a670c48 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.h +++ b/TSCP/src/protocol/protocol_cbtc/common_dqu_protocol/dsuProtclFun.h @@ -37,12 +37,16 @@ extern "C" { #define PROTCL_MGECFG_MAXCNT ((UINT8)0x06) /*Э*/ #define VOBC_TYPE ((UINT8)0x14) /*VOBC豸*/ +#define IVOC_TYPE ((UINT8)0x10) /*IVOC豸*/ #define AOM_TYPE ((UINT8)0x15) /*AOM豸*/ +#define IVOC_AOM_TYPE ((UINT8)0x11) /*IVOC-AOM豸*/ #define CI_TYPE ((UINT8)0x3C) /*CI豸*/ +#define RC_TYPE ((UINT8)0x3D) /*RC豸*/ #define ZC_TYPE ((UINT8)0x1E) /*ZC豸*/ #define ATS_TYPE ((UINT8)0x03) /*ATS豸*/ #define PSC_TYPE ((UINT8)0x61) /*PSC豸*/ #define ITE_TYPE ((UINT8)0x18) /*ITE豸*/ +#define OC_TYPE ((UINT8)0x64) /*OCC豸*/ /*豸ͨЭ0x4002*/ typedef struct @@ -71,20 +75,18 @@ extern "C" { { UINT8 sfpProtclNum; /*SFPͨ豸*/ UINT8 rsrProtclNum; /*RSRͨ豸*/ - UINT8 rsspProtclNum; /*RSSPIͨ豸*/ + UINT16 rsspProtclNum; /*RSSPIͨ豸*/ UINT8 redunProtclNum; /*RPͨ豸*/ UINT8 rssp2ProtclNum; /*RSSPIIͨ豸*/ UINT8 fsfbProtclNum; /*FSFBͨ豸*/ }DSU_PROTCL_TYPE_STRU; - /* - *: DsuCommonInfoInit - *: ѯʼ - *: UINT8 *pFsName FSļ - *: DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo ʹñ - *: - *ֵ: 1:ɹ;0ʧ - */ + /** + * @brief DsuCommonInfoInit ѯʼ + * @param pFsName FSļ· ȡֵΧ:ֽ + * @param pDsuProtclBookIpInfo ѯϢ ȡֵΧ:οṹDSU_PROTCL_BOOK_IP_INFO_STRU + * @param 0:ʧ;1:ɹ + */ UINT8 DsuCommonInfoInit(UINT8 *pFsName, DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo); /* @@ -99,18 +101,17 @@ extern "C" { */ UINT8 DsuProtclGetProtclType(UINT16 locTypeId, UINT16 oppTypeId, UINT8 *pProtclType, DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo); - /* - *: DsuGetProtclTypeInfo - *: ݱIDԷͨʱʹЭͨ豸(·) - *: UINT16 locTypeId ID - * DSU_PROTCL_BOOK_IP_INFO_STRU *pDsuProtclBookIpInfo ʹñ - * UINT32 inDataLen ݳ - * UINT8 inData[] - * UINT16 globalVarOppTypePtlLen ͨŵĶԷ豸Э鳤 - *: UINT8 globalVarOppTypePtl[UINT8_MAX] ͨŵĶԷ豸Э - *: DSU_PROTCL_TYPE_STRU *dsuProtclTypeInfo Эͨ豸 - *ֵ: 1:ɹ;0ʧ - */ + /** + * @brief DsuGetProtclTypeInfo ݱIDԷͨʱʹЭͨ豸(·) + * @param locTypeId ID ȡֵΧ:0x0000-0xFFFF + * @param dsuProtclTypeInfo Э ȡֵΧ:οṹDSU_PROTCL_TYPE_STRU + * @param pDsuProtclBookIpInfo ʹñ ȡֵΧ:οṹDSU_PROTCL_BOOK_IP_INFO_STRU + * @param globalVarOppTypePtl ԷЭ ȡֵΧ:ֽ + * @param globalVarOppTypePtlLen ԷЭ鳤 ȡֵΧ:0x0000-0xFFFF + * @param inDataLen ڲݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @return 0:ʧ 1:ɹ + */ UINT8 DsuGetProtclTypeInfo(UINT16 locTypeId, DSU_PROTCL_TYPE_STRU* dsuProtclTypeInfo, DSU_PROTCL_BOOK_IP_INFO_STRU* pDsuProtclBookIpInfo, UINT8 globalVarOppTypePtl[], UINT16 globalVarOppTypePtlLen, UINT32 inDataLen, UINT8 inData[]); #ifdef __cplusplus diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.c b/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.c index 3346f9a..d4680dc 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.c +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.c @@ -26,6 +26,7 @@ #include "ProtclManage.h" #include "Convert.h" #include "dfsDataRead.h" +#include #ifdef USE_SFP #include "sfpPrtclCommon.h" @@ -47,12 +48,12 @@ /***********Эʼغ**************************************************************/ static UINT8 InitProtclInfoStru(ProtclConfigInfoStru* pUnifyInfo, UINT16 maxLnkNum); -static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); -static UINT8 InitRpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); -static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); -static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); -static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); -static UINT8 InitFsfbProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitRpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); +static UINT8 InitFsfbProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo); static void GetSfpNetsRecvPkgNum(ProtclConfigInfoStru* pUnifyInfo, const UINT8 dstType, const UINT8 dstId, const UINT16 dstLogicId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum); static void GetRsspiNetsRecvPkgNum(ProtclConfigInfoStru* pUnifyInfo, const UINT8 dstType, const UINT8 dstId, const UINT16 dstLogicId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum); static void GetRsspiiNetsRecvPkgNum(ProtclConfigInfoStru* pUnifyInfo, const UINT8 dstType, const UINT8 dstId, const UINT16 dstLogicId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum); @@ -60,6 +61,9 @@ static void GetFsfbNetsRecvPkgNum(ProtclConfigInfoStru* pUnifyInfo, const UINT8 static void TypeIdToDevName(UINT8 type, UINT8 id, UINT16* pDevName); static PROTCL_APP_TO_STRU* NewProtclAppToStru(const UINT16 outputSize, const UINT16 inputSize); static UINT8* NewAppData(UINT16* appDataMaxLen, const UINT16 outputSize, const UINT16 inputSize); +static UINT8 StPtclMgtSetOutnetQue(ProtclConfigInfoStru* pUnifyInfo, UINT16 locDevName, UINT8 queType); +static void StPtclMgtSetRecSize(ProtclConfigInfoStru* pUnifyInfo, UINT16 pProtclNumBuff[7], UINT32 curDevRecordLen[PROTCL_MGECFG_MAXCNT]); +static UINT8 StPtclMgtSetRecvDataBuff(ProtclConfigInfoStru* pUnifyInfo, UINT16 maxLinkNum, PROTCL_SND_CFG_STRU* protclSndCfgStru, PROTCL_RCV_DATA_TYPE* ptemProtclRcvDataStru, UINT8 ptclType, UINT8** pRcvDataBuff, UINT16* pRcvDataBuffLen); /* Э麯ָñ */ static PROTCL_MGECFG_STRU protclCfgStruBuff[PROTCL_MGECFG_MAXCNT + 1] = { @@ -102,520 +106,242 @@ static PROTCL_MGECFG_STRU protclCfgStruBuff[PROTCL_MGECFG_MAXCNT + 1] = { #endif }; -/* -* ļȡӦЭ -*/ +/** + * @brief Init ļȡӦЭ + * @param fileName ļ· ȡֵΧ:ֽ + * @param inDataLen ڲݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @param pUnifyInfo ͳһṹ ȡֵΧ:οṹProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ UINT8 Init(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], ProtclConfigInfoStru* pUnifyInfo) { - UINT8 retVal = 0; - UINT8 tempProtclCnt = 0; - UINT8 tmpI = 0; - UINT8 flag = 0; - UINT8 rslt = 0; + /*- ֲ*/ + UINT8 retVal = 0u; /*-< úֵΪ0*/ + UINT8 tempProtclCnt = 0u; + UINT8 tmpI = 0u; + UINT8 flag = 0u; + UINT8 rslt = 0u; F_INIT tmpInit; - /* 豸ʹ־ȱ*/ - UINT32 curDevRecordLenRatio[PROTCL_MGECFG_MAXCNT] = { 0 }; - /* 豸ʹ־ܳ*/ - UINT32 curDevRecordTotalLen = 0; - /* 豸һ·*/ - UINT32 devRecFitLen[PROTCL_MGECFG_MAXCNT] = { 0 }; /* ʱ*/ - UINT32 tmpVal = 0; - PROTCL_APP_TO_STRU* pCurRcvProtclAppStru = NULL; /*յ֡Ϣ*/ PROTCL_RCV_DATA_TYPE* ptemProtclRcvDataStru = NULL; /*ʱЭݵĽṹ*/ - PROTCL_APP_TO_STRU* pCurSndProtclAppStru = NULL; /*͵֡Ϣ*/ PROTCL_SND_CFG_STRU* protclSndCfgStru = NULL; /*ͽṹ*/ - UINT8* pProtclNumBuff = NULL; /*Э·*/ + UINT16* pProtclNumBuff = NULL; /*Э·*/ UINT32* curDevRecordLen = NULL; /*豸ʹ־*/ DSU_PROTCL_TYPE_STRU* protclTypeInfoStru = NULL; /*Эͨ*/ - UINT32 i = 0u; /*ѭ*/ - UINT8 funRtn = 0u; /*úֵ*/ /* VOBCļ¼ݴС */ - if ((NULL == pUnifyInfo)) + if ((NULL == pUnifyInfo)) /*-< Ƿǿ*/ { - return retVal; + return retVal; /*-< غֵ*/ } - pUnifyInfo->GlobalVar = (GlobalVar*)malloc(sizeof(GlobalVar)); - if (NULL != pUnifyInfo->GlobalVar) + pUnifyInfo->GlobalVar = (GlobalVar*)malloc(sizeof(GlobalVar)); /*-< ȫֱռ*/ + if (NULL != pUnifyInfo->GlobalVar) /*-< Ƿɹ*/ { /*ʼЭݵĽṹ*/ - CommonMemSet(pUnifyInfo->GlobalVar, sizeof(GlobalVar), 0, sizeof(GlobalVar)); + CommonMemSet(pUnifyInfo->GlobalVar, sizeof(GlobalVar), 0, sizeof(GlobalVar)); /*-< ȫֱռ*/ - protclSndCfgStru = pUnifyInfo->GlobalVar->protclSndCfgStru; /*ͽṹ*/ - pProtclNumBuff = pUnifyInfo->GlobalVar->pProtclNumBuff; /*Э·*/ - curDevRecordLen = pUnifyInfo->GlobalVar->curDevRecordLen; /*豸ʹ־*/ + protclSndCfgStru = pUnifyInfo->GlobalVar->protclSndCfgStru; /*-< õͽṹ*/ + pProtclNumBuff = pUnifyInfo->GlobalVar->pProtclNumBuff; /*-< õЭ·*/ + curDevRecordLen = pUnifyInfo->GlobalVar->curDevRecordLen; /*-< õ豸ʹ־*/ } else { - return retVal; + return retVal; /*-< غֵ*/ } - tempProtclCnt = InitGetCfgInfo(fileName, inDataLen, inData, &pProtclNumBuff[1], pUnifyInfo); + tempProtclCnt = InitGetCfgInfo(fileName, inDataLen, inData, &pProtclNumBuff[1], pUnifyInfo); /*-< óʼļȡӦЭݺ*/ - if (tempProtclCnt == 0) + if (tempProtclCnt == 0u) /*-< úʧ*/ { - retVal = 0; - return retVal; + retVal = 0u; /*-< úֵΪ0*/ + return retVal; /*-< غֵ*/ } - protclTypeInfoStru = &pUnifyInfo->GlobalVar->protclTypeInfoStru; + protclTypeInfoStru = &pUnifyInfo->GlobalVar->protclTypeInfoStru; /*-< õЭϢ*/ - if (2 < pUnifyInfo->RecordArraySize) /*ȴ2,־ռ䴦*/ - { - /*ʷ־ռ*/ - devRecFitLen[0] = SFP_PER_LNK_RECORD_MAX_LEN; - devRecFitLen[1] = RP_PER_LNK_RECORD_MAX_LEN; - devRecFitLen[2] = RSR_PER_LNK_RECORD_MAX_LEN; - devRecFitLen[3] = RSSPI_PER_LNK_RECORD_MAX_LEN; - devRecFitLen[4] = RSSPII_PER_LNK_RECORD_MAX_LEN; - devRecFitLen[5] = FSFB_PER_LNK_RECORD_MAX_LEN; - for (tmpI = 0; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) - { - if (pProtclNumBuff[tmpI + 1] > 0) - { - curDevRecordLenRatio[tmpI] = devRecFitLen[tmpI] * pProtclNumBuff[tmpI + 1]; - curDevRecordTotalLen += curDevRecordLenRatio[tmpI]; - } - } - for (tmpI = 0; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) - { - if (pProtclNumBuff[tmpI + 1] > 0) - { - curDevRecordLen[tmpI] = (pUnifyInfo->RecordArraySize - 2) * curDevRecordLenRatio[tmpI] / curDevRecordTotalLen; - /*С־*/ - tmpVal += devRecFitLen[tmpI]; - } - } - /*־ռ.ܷ־СС־:ʷ; :ڰʷ,ʹһЭ־ȲСһ·*/ - if ((pUnifyInfo->RecordArraySize - 2) >= tmpVal) - { - /*,ij*/ - tmpVal = 0; - for (tmpI = 0; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) - { - /*ֻЭ־*/ - if (pProtclNumBuff[tmpI + 1] > 0) - { - if (curDevRecordLen[tmpI] < devRecFitLen[tmpI]) /*Сһ·,Ϊһ·,ۼij*/ - { - tmpVal += (devRecFitLen[tmpI] - curDevRecordLen[tmpI]); - curDevRecordLen[tmpI] = devRecFitLen[tmpI]; - } - else - { - /*ij*/ - if (tmpVal > 0) - { - if ((curDevRecordLen[tmpI] > tmpVal) && (curDevRecordLen[tmpI] - tmpVal >= devRecFitLen[tmpI])) /*ɼ*/ - { - curDevRecordLen[tmpI] -= tmpVal; - tmpVal = 0; - } - else /*ɼ,Ϊһ·,ۼij*/ - { - tmpVal += (devRecFitLen[tmpI] - curDevRecordLen[tmpI]); - curDevRecordLen[tmpI] = devRecFitLen[tmpI]; - } - } - } - } - } - /*ij*/ - if (tmpVal > 0) - { - for (tmpI = 0; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) - { - /*־ȿɼij*/ - if ((pProtclNumBuff[tmpI + 1] > 0) && (curDevRecordLen[tmpI] > tmpVal) && (curDevRecordLen[tmpI] - tmpVal >= devRecFitLen[tmpI])) - { - curDevRecordLen[tmpI] -= tmpVal; - tmpVal = 0; - break; - } - } - } - } - } + StPtclMgtSetRecSize(pUnifyInfo, pProtclNumBuff, curDevRecordLen); /*-< øЭ־С*/ /* ʼЭ*/ - for (tmpI = 0; tmpI < tempProtclCnt + 1; tmpI++) + for (tmpI = 0u; tmpI < tempProtclCnt + 1; tmpI++) /*-< Э±ǷСЭ*/ { - if (0 < pProtclNumBuff[tmpI]) /*Эͨ,ʼ*/ + if (0u < pProtclNumBuff[tmpI]) /*-< Эͨ*/ { - tmpInit = protclCfgStruBuff[tmpI].fInit; - if (NULL != tmpInit) + tmpInit = protclCfgStruBuff[tmpI].fInit; /*-< õЭʼ*/ + if (NULL != tmpInit) /*-< ЭʼǷǿ*/ { - retVal = tmpInit(fileName, inDataLen, inData, pProtclNumBuff[tmpI], pUnifyInfo); + retVal = tmpInit(fileName, inDataLen, inData, pProtclNumBuff[tmpI], pUnifyInfo); /*-< ôЭʼ*/ } else /*޴Э*/ { - retVal = 1u; + retVal = 1u; /*-< úֵΪ1*/ } - if (0 == retVal) + if (0u == retVal) /*-< úǷʧ*/ { /* һʼʧܣټ */ - return retVal; + return retVal; /*-< غֵ*/ } } else /*ʼ*/ { - retVal = 1; + retVal = 1u; /*-< úֵΪ1*/ } } - /* ʱЭݵĽṹռ */ - pUnifyInfo->GlobalVar->RcvData = (PROTCL_RCV_DATA_TYPE*)malloc(sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1)); + /*- ʱЭݵĽṹռ */ + pUnifyInfo->GlobalVar->RcvData = (PROTCL_RCV_DATA_TYPE*)malloc(sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1u)); ptemProtclRcvDataStru = pUnifyInfo->GlobalVar->RcvData; /* ݵʱ浵ݵĽṹռ */ - if (ptemProtclRcvDataStru != NULL) + if (ptemProtclRcvDataStru != NULL) /*-< Ƿɹ*/ { - /*ʼЭݵĽṹ*/ - CommonMemSet(ptemProtclRcvDataStru, sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1), 0, sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1)); + /*- ʼЭݵĽṹ*/ + CommonMemSet(ptemProtclRcvDataStru, sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1u), 0u, sizeof(PROTCL_RCV_DATA_TYPE) * (PROTCL_MGECFG_MAXCNT + 1u)); - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_SFP].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->sfpProtclNum); CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_SFP].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->sfpProtclNum, 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->sfpProtclNum); - /*涨Эݽṹ2ռSFP,һΪptemProtclRcvDataStru[0],Ĭϲʹ*/ + /*- 涨Эݽṹ2ռSFP,һΪptemProtclRcvDataStru[0],Ĭϲʹ*/ ptemProtclRcvDataStru[DSU_PROTCL_SFP].proType = DSU_PROTCL_SFP; - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_RP].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->redunProtclNum); CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_RP].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->redunProtclNum, 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->redunProtclNum); - /*涨Эݽṹ3ռredun*/ + /*- 涨Эݽṹ3ռredun*/ ptemProtclRcvDataStru[DSU_PROTCL_RP].proType = DSU_PROTCL_RP; - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_RSR].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsrProtclNum); CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_RSR].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsrProtclNum, 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsrProtclNum); - /*涨Эݽṹ4ռredun*/ + /*- 涨Эݽṹ4ռredun*/ ptemProtclRcvDataStru[DSU_PROTCL_RSR].proType = DSU_PROTCL_RSR; - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_RSSP].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsspProtclNum); CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_RSSP].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsspProtclNum, 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rsspProtclNum); - /*涨Эݽṹ5ռRSSP*/ + /*- 涨Эݽṹ5ռRSSP*/ ptemProtclRcvDataStru[DSU_PROTCL_RSSP].proType = DSU_PROTCL_RSSP; - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_RSSP2].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rssp2ProtclNum); CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_RSSP2].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rssp2ProtclNum, 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->rssp2ProtclNum); - /*涨Эݽṹ5ռRSSP*/ + /*- 涨Эݽṹ5ռRSSP*/ ptemProtclRcvDataStru[DSU_PROTCL_RSSP2].proType = DSU_PROTCL_RSSP2; - /*벢ʼЭݽṹĽݻ*/ + /*- 벢ʼЭݽṹĽݻ*/ ptemProtclRcvDataStru[DSU_PROTCL_FSFB].pData = (UINT8*)malloc(sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->fsfbProtclNum); - CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_FSFB].pData, sizeof(UINT8)* pUnifyInfo->InputSize* pUnifyInfo->MaxNumPerCycle* protclTypeInfoStru->fsfbProtclNum, - 0, pUnifyInfo->InputSize* pUnifyInfo->MaxNumPerCycle* protclTypeInfoStru->fsfbProtclNum); - /*涨Эݽṹ5ռRSSP*/ + CommonMemSet(ptemProtclRcvDataStru[DSU_PROTCL_FSFB].pData, sizeof(UINT8) * pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->fsfbProtclNum, + 0, pUnifyInfo->InputSize * pUnifyInfo->MaxNumPerCycle * protclTypeInfoStru->fsfbProtclNum); + /*- 涨Эݽṹ5ռRSSP*/ ptemProtclRcvDataStru[DSU_PROTCL_FSFB].proType = DSU_PROTCL_FSFB; } else { /* */ - retVal = 0; - return retVal; + retVal = 0u; /*-< úֵΪ0*/ + return retVal; /*-< غֵ*/ } - /*ʼյ֡Ӧ*/ + /*- ʼյ֡Ӧ*/ pUnifyInfo->GlobalVar->pRcvProtclAppStru = NewProtclAppToStru(pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->pRcvProtclAppStru) + if (NULL == pUnifyInfo->GlobalVar->pRcvProtclAppStru) /*-< Ƿʧ*/ { - retVal = 0; - return retVal; + retVal = 0u; /*-< úֵΪ0*/ + return retVal; /*-< غֵ*/ } - /*ʼ͵֡Ӧ*/ + /*- ʼ͵֡Ӧ*/ pUnifyInfo->GlobalVar->pSndProtclAppStru = NewProtclAppToStru(pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->pSndProtclAppStru) + if (NULL == pUnifyInfo->GlobalVar->pSndProtclAppStru) /*-< Ƿʧ*/ { - retVal = 0; - return retVal; + retVal = 0u; /*-< úֵΪ0*/ + return retVal; /*-< غֵ*/ } - for (tmpI = 0; tmpI < PROTCL_MGECFG_MAXCNT + 1; tmpI++) + for (tmpI = 0u; tmpI < PROTCL_MGECFG_MAXCNT + 1; tmpI++) /*-< Э±ǷСЭ*/ { /* ֹҰָ */ - protclSndCfgStru[tmpI].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * 0); - protclSndCfgStru[tmpI].DevDataCnt = 0; + protclSndCfgStru[tmpI].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * 0u); /*-< ЭӦñռ*/ + protclSndCfgStru[tmpI].DevDataCnt = 0u; /*-< 豸Ϊ0*/ } /* ݵʱ浵ݵĽṹռ */ - if (0 < protclTypeInfoStru->sfpProtclNum) + if (0u < protclTypeInfoStru->sfpProtclNum) /*-< SPFЭǷ0*/ { #ifdef USE_SFP - tmpVal = pUnifyInfo->GlobalVar->gpsfpUnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) *tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_SFP].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU)* tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU)* tmpVal); - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_SFP].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpSfpRcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gSfpRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpSfpRcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpsfpUnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_SFP, &pUnifyInfo->GlobalVar->gpSfpRcvDataBuff, &pUnifyInfo->GlobalVar->gSfpRcvDataBuffLen); /*-< SFPݻ溯*/ #endif } - if (protclTypeInfoStru->redunProtclNum > 0) + if (protclTypeInfoStru->redunProtclNum > 0u) /*-< RPЭǷ0*/ { #ifdef USE_RP - tmpVal = pUnifyInfo->GlobalVar->gpRedunUnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_RP].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU)* tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU)* tmpVal); - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_RP].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpRpRcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gRpRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpRpRcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpRedunUnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_RP, &pUnifyInfo->GlobalVar->gpRpRcvDataBuff, &pUnifyInfo->GlobalVar->gRpRcvDataBuffLen); /*-< RPݻ溯*/ #endif } - if (protclTypeInfoStru->rsrProtclNum > 0) + if (protclTypeInfoStru->rsrProtclNum > 0u) /*-< RSRЭǷ0*/ { #ifdef USE_RSR - tmpVal = pUnifyInfo->GlobalVar->gpRsrUnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_RSR].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU) * tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU) * tmpVal); - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_RSR].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpRsrRcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gRsrRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpRsrRcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpRsrUnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_RSR, &pUnifyInfo->GlobalVar->gpRsrRcvDataBuff, &pUnifyInfo->GlobalVar->gRsrRcvDataBuffLen); /*-< RSRݻ溯*/ #endif } - if (protclTypeInfoStru->rsspProtclNum > 0) + if (protclTypeInfoStru->rsspProtclNum > 0u) /*-< RSSPIЭǷ0*/ { #ifdef USE_RSSPI - tmpVal = pUnifyInfo->GlobalVar->gpRsspUnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_RSSP].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU)* tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU)* tmpVal); - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_RSSP].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpRsspRcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gRsspRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpRsspRcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpRsspUnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_RSSP, &pUnifyInfo->GlobalVar->gpRsspRcvDataBuff, &pUnifyInfo->GlobalVar->gRsspRcvDataBuffLen); /*-< RSSPIݻ溯*/ #endif } - if (protclTypeInfoStru->rssp2ProtclNum > 0) + if (protclTypeInfoStru->rssp2ProtclNum > 0u) /*-< RSSPIIЭǷ0*/ { #ifdef USE_RSSPII - tmpVal = pUnifyInfo->GlobalVar->gpRssp2UnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - Prtcl_RSSP2_CheckInit(&pUnifyInfo->GlobalVar->Rssp2PrtclHead); + Prtcl_RSSP2_CheckInit(&pUnifyInfo->GlobalVar->Rssp2PrtclHead); /*-< RSSPIIʼ*/ /* add 20161017 xb */ - for (tmpI = 0; tmpI < PRTCL_RQ_NUM; tmpI++) + for (tmpI = 0u; tmpI < PRTCL_RQ_NUM; tmpI++) /*-< RSSPII±ǷС*/ { - rslt = (UINT8)QUEUE_RING_Init(&Prtcl_RQ[tmpI].RingQue, PRTCL_RQ_SIZE); - if (CM_TRUE != rslt) + rslt = (UINT8)QUEUE_RING_Init(&Prtcl_RQ[tmpI].RingQue, PRTCL_RQ_SIZE); /*-< RSSPIIʼк*/ + if (CM_TRUE != rslt) /*-< úǷʧ*/ { - flag = 1; - break; + flag |= 1u; /*-< ˳־Ϊ˳*/ + break; /*-< ˳*/ } + /*- öֵ*/ Prtcl_RQ[tmpI].RingQue.m_bIsInited = CM_TRUE; Prtcl_RQ[tmpI].RingQue.m_IfCoverQueueFull = CM_TRUE; Prtcl_RQ[tmpI].RingQue.m_QueueState = QUEUE_RING_STATE_Empty; } - protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_RSSP2].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU)* tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU)* tmpVal); - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_RSSP2].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpRssp2RcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gRssp2RcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpRssp2RcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpRssp2UnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_RSSP2, &pUnifyInfo->GlobalVar->gpRssp2RcvDataBuff, &pUnifyInfo->GlobalVar->gRssp2RcvDataBuffLen); /*-< RSSPIIݻ溯*/ #endif } - if (protclTypeInfoStru->fsfbProtclNum > 0) + if (protclTypeInfoStru->fsfbProtclNum > 0u) /*-< FSFBЭǷ0*/ { #ifdef USE_FSFB - tmpVal = pUnifyInfo->GlobalVar->gpFsfbUnitInfo->MaxNumLink * pUnifyInfo->MaxNumPerCycle; - protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); - if ((NULL == protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[DSU_PROTCL_FSFB].pData)) - { - flag = 1; - } - else - { - /*Ϊķʱ洢ʼ*/ - CommonMemSet(protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU)* tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU)* tmpVal); - - - /*ʼ֡Ӧ*/ - for (i = 0; i < tmpVal; i++) - { - protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru[i].pAppData) - { - break; - } - } - if (i == tmpVal) - { - pUnifyInfo->GlobalVar->gpFsfbRcvDataBuff = NewAppData(&pUnifyInfo->GlobalVar->gFsfbRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); - if (NULL == pUnifyInfo->GlobalVar->gpFsfbRcvDataBuff) - { - flag = 1; - } - } - else - { - flag = 1; - } - - } + flag |= StPtclMgtSetRecvDataBuff(pUnifyInfo, pUnifyInfo->GlobalVar->gpFsfbUnitInfo->MaxNumLink, protclSndCfgStru, ptemProtclRcvDataStru, DSU_PROTCL_FSFB, &pUnifyInfo->GlobalVar->gpFsfbRcvDataBuff, &pUnifyInfo->GlobalVar->gFsfbRcvDataBuffLen); /*-< FSFBݻ溯*/ #endif } - if (1 == flag) + if (0u != flag) /*-< ˳־Ƿ˳*/ { - retVal = 0; + retVal = 0u; /*-< úֵΪ0*/ } - return retVal; + return retVal; /*-< غֵ*/ } /* @@ -642,12 +368,12 @@ UINT8 SendAppData(ProtclConfigInfoStru* pUnifyInfo) UINT16 lnkDataLen = 0; UINT16 recordDataLen = 0; - UINT8 tmpDevDataCnt = 0; + UINT32 tmpDevDataCnt = 0; UINT8 tmpI = 0; F_SND tmpSndF; UINT8 tmpSign = 0; PROTCL_SND_CFG_STRU* protclSndCfgStru = NULL; - UINT8* pProtclNumBuff = NULL; /*Э·*/ + UINT16* pProtclNumBuff = NULL; /*Э·*/ if ((NULL != pUnifyInfo) && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->pSndProtclAppStru) && (NULL != pUnifyInfo->GlobalVar->protclSndCfgStru) && (NULL != pUnifyInfo->GlobalVar->pProtclNumBuff)) { @@ -759,53 +485,48 @@ UINT8 SendAppData(ProtclConfigInfoStru* pUnifyInfo) return ret; } - -/* -* ܣЭ -* -* ProtclConfigInfoStru * pUnifyInfo ͳһṹ -* ֵ -* 1ݳɹ -* 0ʧ -* 2:崻 -*/ +/** + * @brief ReceiveAppData Э + * @param pUnifyInfo ͳһṹ ȡֵΧ:οṹProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ UINT8 ReceiveAppData(ProtclConfigInfoStru* pUnifyInfo) { - UINT8 ret = 0; - UINT8 flag = 0; - UINT8 lnkState = 0; - UINT8 i = 0; /* ѭʹ */ - UINT16 locDevName = 0; - UINT8 DevType = 0; - UINT8 DevId = 0; - UINT8 LogId = 0; - PROTCL_RCV_DATA_TYPE *ptemProtclRcvDataStru = NULL; - DSU_PROTCL_TYPE_STRU *protclTypeInfoStru = NULL; - + /*- ֲ*/ + UINT8 ret = 0u; /*-< úֵΪ0*/ + UINT8 flag = 0u; + UINT8 lnkState = 0u; + UINT8 i = 0u; /* ѭʹ */ + UINT16 locDevName = 0u; + UINT8 DevType = 0u; + UINT8 DevId = 0u; + UINT8 LogId = 0u; + DSU_PROTCL_TYPE_STRU* protclTypeInfoStru = NULL; + #ifdef USE_SFP - struc_Unify_Info* gpsfpUnitInfo = NULL; /*SFPЭṹ*/ + struc_Unify_Info* gpsfpUnitInfo = NULL; /*SFPЭṹ*/ #endif #ifdef USE_RP - RP_INFO_STRU* gpRedunUnitInfo = NULL; /*Эṹ*/ + RP_INFO_STRU* gpRedunUnitInfo = NULL; /*Эṹ*/ #endif #ifdef USE_RSR - RSR_INFO_STRU* gpRsrUnitInfo = NULL; /*RSRЭṹ*/ + RSR_INFO_STRU* gpRsrUnitInfo = NULL; /*RSRЭṹ*/ #endif #ifdef USE_RSSPI - RSSP_INFO_STRU* gpRsspUnitInfo = NULL; /*RSSPЭṹ*/ + RSSP_INFO_STRU* gpRsspUnitInfo = NULL; /*RSSPЭṹ*/ #endif #ifdef USE_RSSPII - RSSP2_INFO_STRU* gpRssp2UnitInfo = NULL; /*RSSP2Эṹ*/ + RSSP2_INFO_STRU* gpRssp2UnitInfo = NULL; /*RSSP2Эṹ*/ #endif #ifdef USE_FSFB - FSFB_INFO_STRU* gpFsfbUnitInfo = NULL; /*FSFBЭṹ*/ + FSFB_INFO_STRU* gpFsfbUnitInfo = NULL; /*FSFBЭṹ*/ #endif - if ((NULL!= pUnifyInfo)&&(NULL != pUnifyInfo->GlobalVar)) + if ((NULL != pUnifyInfo) && (NULL != pUnifyInfo->GlobalVar)) /*-< Ƿǿ*/ { - ptemProtclRcvDataStru = pUnifyInfo->GlobalVar->RcvData; /*ʱЭݵĽṹ*/ - protclTypeInfoStru = &pUnifyInfo->GlobalVar->protclTypeInfoStru; /*Эͨ*/ + protclTypeInfoStru = &pUnifyInfo->GlobalVar->protclTypeInfoStru; /*-< õЭͨ*/ + /*- õЭṹ*/ #ifdef USE_SFP gpsfpUnitInfo = pUnifyInfo->GlobalVar->gpsfpUnitInfo; /*SFPЭṹ*/ #endif @@ -825,293 +546,198 @@ UINT8 ReceiveAppData(ProtclConfigInfoStru* pUnifyInfo) gpFsfbUnitInfo = pUnifyInfo->GlobalVar->gpFsfbUnitInfo; /*FSFBЭṹ*/ #endif - QueueClear(&pUnifyInfo->DataToApp); - if (protclTypeInfoStru->sfpProtclNum > 0) + QueueClear(&pUnifyInfo->DataToApp); /*-< ݵӦö*/ + if (protclTypeInfoStru->sfpProtclNum > 0u) /*-< SFPЭǷ0*/ { #ifdef USE_SFP - QueueClear(&gpsfpUnitInfo->OutnetQueueA); - QueueClear(&gpsfpUnitInfo->OutnetQueueB); + QueueClear(&gpsfpUnitInfo->OutnetQueueA); /*-< SFPЭ*/ + QueueClear(&gpsfpUnitInfo->OutnetQueueB); /*-< SFPЭ*/ #endif } - if (protclTypeInfoStru->redunProtclNum > 0) + if (protclTypeInfoStru->redunProtclNum > 0u) /*-< RPЭǷ0*/ { #ifdef USE_RP - QueueClear(&gpRedunUnitInfo->OutnetQueueA); - QueueClear(&gpRedunUnitInfo->OutnetQueueB); + QueueClear(&gpRedunUnitInfo->OutnetQueueA); /*-< RPЭ*/ + QueueClear(&gpRedunUnitInfo->OutnetQueueB); /*-< SFPЭ*/ #endif } - if (protclTypeInfoStru->rsrProtclNum > 0) + if (protclTypeInfoStru->rsrProtclNum > 0u) /*-< RSRЭǷ0*/ { #ifdef USE_RSR - QueueClear(&gpRsrUnitInfo->OutnetQueueA); - QueueClear(&gpRsrUnitInfo->OutnetQueueB); + QueueClear(&gpRsrUnitInfo->OutnetQueueA); /*-< RSRЭ*/ + QueueClear(&gpRsrUnitInfo->OutnetQueueB); /*-< SFPЭ*/ #endif } - if (protclTypeInfoStru->rsspProtclNum > 0) + if (protclTypeInfoStru->rsspProtclNum > 0u) /*-< RSSPIЭǷ0*/ { #ifdef USE_RSSPI - QueueClear(&gpRsspUnitInfo->OutnetQueueA); - QueueClear(&gpRsspUnitInfo->OutnetQueueB); + QueueClear(&gpRsspUnitInfo->OutnetQueueA); /*-< RSSPIЭ*/ + QueueClear(&gpRsspUnitInfo->OutnetQueueB); /*-< SFPЭ*/ #endif } - if (protclTypeInfoStru->rssp2ProtclNum > 0) + if (protclTypeInfoStru->rssp2ProtclNum > 0u) /*-< RSSPIIЭǷ0*/ { #ifdef USE_RSSPII - QueueClear(&gpRssp2UnitInfo->OutnetQueueA); - QueueClear(&gpRssp2UnitInfo->OutnetQueueB); + QueueClear(&gpRssp2UnitInfo->OutnetQueueA); /*-< RSSPIIЭ*/ + QueueClear(&gpRssp2UnitInfo->OutnetQueueB); /*-< SFPЭ*/ #endif } - TypeIdToDevName(pUnifyInfo->LocalType, pUnifyInfo->LocalID, &locDevName); + TypeIdToDevName(pUnifyInfo->LocalType, pUnifyInfo->LocalID, &locDevName); /*-< IDת豸*/ - /* ȡ */ - ret = readQueueDataToApp(&pUnifyInfo->OutnetQueueA, 1, locDevName, ptemProtclRcvDataStru, pUnifyInfo); - if (0 == ret) + ret = StPtclMgtSetOutnetQue(pUnifyInfo, locDevName, 1u); /*-< к*/ + if (0u == ret) /*-< úǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } - for (i = 1; i < PROTCL_MGECFG_MAXCNT + 1; i++) + ret = StPtclMgtSetOutnetQue(pUnifyInfo, locDevName, 2u); /*-< к*/ + if (0u == ret) /*-< úǷʧ*/ { - if (ptemProtclRcvDataStru[i].rcvDataLen > 0) - { - switch (ptemProtclRcvDataStru[i].proType) - { - case DSU_PROTCL_SFP: -#ifdef USE_SFP - /* SFPЭĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpsfpUnitInfo->OutnetQueueA); -#endif - break; - case DSU_PROTCL_RP: -#ifdef USE_RP - /* RPЭĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRedunUnitInfo->OutnetQueueA); -#endif - break; - case DSU_PROTCL_RSR: -#ifdef USE_RSR - /* RSRЭĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRsrUnitInfo->OutnetQueueA); -#endif - break; - case DSU_PROTCL_RSSP: -#ifdef USE_RSSPI - /* RSSPЭĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRsspUnitInfo->OutnetQueueA); -#endif - break; - case DSU_PROTCL_RSSP2: -#ifdef USE_RSSPII - /* RSSP2Эĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRssp2UnitInfo->OutnetQueueA); -#endif - break; - case DSU_PROTCL_FSFB: -#ifdef USE_FSFB - /* FSFBЭĺݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpFsfbUnitInfo->OutnetQueueR); -#endif - break; - default: - break; - } - } + return ret; /*-< غֵ*/ } - /* ȡ */ - ret = readQueueDataToApp(&pUnifyInfo->OutnetQueueB, 2, locDevName, ptemProtclRcvDataStru, pUnifyInfo); - if (0 == ret) - { - return ret; - } - /* TO BE DONE switch ŲreadQueueDataToApp */ - for (i = 1; i < PROTCL_MGECFG_MAXCNT + 1; i++) - { - if (ptemProtclRcvDataStru[i].rcvDataLen > 0) - { - switch (ptemProtclRcvDataStru[i].proType) - { - case DSU_PROTCL_SFP: -#ifdef USE_SFP - /* SFPЭݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpsfpUnitInfo->OutnetQueueB); -#endif - break; - case DSU_PROTCL_RP: -#ifdef USE_RP - /* RPЭݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRedunUnitInfo->OutnetQueueB); -#endif - break; - case DSU_PROTCL_RSR: -#ifdef USE_RSR - /* RSRЭݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRsrUnitInfo->OutnetQueueB); -#endif - break; - case DSU_PROTCL_RSSP: -#ifdef USE_RSSPI - /* RSSPЭݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRsspUnitInfo->OutnetQueueB); -#endif - break; - case DSU_PROTCL_RSSP2: -#ifdef USE_RSSPII - /* RSSP2Эݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpRssp2UnitInfo->OutnetQueueB); -#endif - break; - case DSU_PROTCL_FSFB: -#ifdef USE_FSFB - /* RSSP2Эݵ֡ʽ */ - SetDataToQue(ptemProtclRcvDataStru[i].rcvDataLen, ptemProtclRcvDataStru[i].pData, &gpFsfbUnitInfo->OutnetQueueB); -#endif - break; - default: - break; - } - } - } - if (protclTypeInfoStru->sfpProtclNum > 0) + + if (protclTypeInfoStru->sfpProtclNum > 0u) /*-< SFPЭǷ0*/ { #ifdef USE_SFP /* SFPЭ */ - gpsfpUnitInfo->RadamSN = *gpsfpUnitInfo->CycleNum; + gpsfpUnitInfo->RadamSN = *gpsfpUnitInfo->CycleNum; /*-< SFPõ*/ #ifdef CI_TASKLOCK taskLock(); - ret = ProtclReceive(gpsfpUnitInfo); + ret = ProtclReceive(gpsfpUnitInfo); /*-< SFP뺯*/ taskUnlock(); #else - ret = ProtclReceive(gpsfpUnitInfo); + ret = ProtclReceive(gpsfpUnitInfo); /*-< SFP뺯*/ #endif - if (ret == 1) + if (ret == 1u) /*-< úǷɹ*/ { - SfpRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + SfpRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< SFPݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } #endif } - if (protclTypeInfoStru->redunProtclNum > 0) + if (protclTypeInfoStru->redunProtclNum > 0u) /*-< RPЭǷ0*/ { #ifdef USE_RP /* RPЭ */ - ret = RpReceive(gpRedunUnitInfo); - if (ret == 1) + ret = RpReceive(gpRedunUnitInfo); /*-< RP뺯*/ + if (ret == 1u) /*-< úǷɹ*/ { - RpRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + RpRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< RPݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } #endif } - if (protclTypeInfoStru->rsrProtclNum > 0) + if (protclTypeInfoStru->rsrProtclNum > 0u) /*-< RSRЭǷ0*/ { #ifdef USE_RSR /* RSRЭ */ - ret = RsrReceive(gpRsrUnitInfo); - if (ret == 1) + ret = RsrReceive(gpRsrUnitInfo); /*-< RSR뺯*/ + if (ret == 1u) /*-< úǷɹ*/ { - ret = RsrRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + ret = RsrRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< RSRݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } #endif } - if (protclTypeInfoStru->rsspProtclNum > 0) + if (protclTypeInfoStru->rsspProtclNum > 0u) /*-< RSSPIЭǷ0*/ { #ifdef USE_RSSPI /* RSSPЭ */ - ret = Rssp2Receive(gpRsspUnitInfo); - if (ret == 1) + ret = Rssp2Receive(gpRsspUnitInfo); /*-< RSSPI뺯*/ + if (ret == 1u) /*-< úǷɹ*/ { - RsspRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + RsspRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< RSSPIݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } #endif } - if (protclTypeInfoStru->rssp2ProtclNum > 0) + if (protclTypeInfoStru->rssp2ProtclNum > 0u) /*-< RSSPIIЭǷ0*/ { #ifdef USE_RSSPII /* RSSP2Э */ - ret = RsspIIReceive(gpRssp2UnitInfo); - if (ret == 1) + ret = RsspIIReceive(gpRssp2UnitInfo); /*-< RSSPII뺯*/ + if (ret == 1u) /*-< úǷɹ*/ { - Rssp2RcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + Rssp2RcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< RSSPIIݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } #endif } #ifdef USE_RSSPII /* ζ */ - for (i = 0; i < PRTCL_RQ_NUM; i++) + for (i = 0u; i < PRTCL_RQ_NUM; i++) /*-< RSSPII±ǷС*/ { - if (Prtcl_RQ[i].bIsInit == CM_TRUE) + if (Prtcl_RQ[i].bIsInit == CM_TRUE) /*-< RSSPIIǷʼ*/ { + /*- RSSPIIò*/ DevType = (UINT8)(Prtcl_RQ[i].SourceID / 256 / 256 / 256); DevId = (UINT8)(Prtcl_RQ[i].SourceID / 256 / 256 % 256); LogId = (UINT8)(Prtcl_RQ[i].SourceID % 256); - lnkState = GetLnkStatus(DevType, DevId, (UINT16)LogId, pUnifyInfo); - if (lnkState == 0) + lnkState = GetLnkStatus(DevType, DevId, (UINT16)LogId, pUnifyInfo); /*-< RSSPIIúõ·״̬*/ + if (lnkState == 0u) /*-< RSSPII·״̬ǷΪ0*/ { - Prtcl_Manage_DelRQ(Prtcl_RQ[i].SourceID); + Prtcl_Manage_DelRQ(Prtcl_RQ[i].SourceID); /*-< RSSPIIɾк*/ } } } #endif - if (protclTypeInfoStru->fsfbProtclNum > 0) + if (protclTypeInfoStru->fsfbProtclNum > 0u) /*-< FSFBЭǷ0*/ { #ifdef USE_FSFB - if ((NULL != pUnifyInfo->CycleNum) && (0u == ((*pUnifyInfo->CycleNum) % 2)))/*FSFBЭΪ600ms*/ + if ((NULL != pUnifyInfo->CycleNum) && (0u == ((*pUnifyInfo->CycleNum) % 2u))) /*-< FSFBЭΪ600ms*/ { - ret = FsfbProtclReceiveData(gpFsfbUnitInfo); /*FSFBЭ*/ - if (ret == 1) + ret = FsfbProtclReceiveData(gpFsfbUnitInfo); /*-< FSFB뺯*/ + if (ret == 1u) /*-< úǷɹ*/ { - FsfbRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); + FsfbRcvData(&pUnifyInfo->DataToApp, pUnifyInfo); /*-< FSFBݺ*/ } else { - flag = 1; + flag = 1u; /*-< ˳*/ } /*ͨ*/ - QueueClear(&gpFsfbUnitInfo->OutnetQueueR); - QueueClear(&gpFsfbUnitInfo->OutnetQueueB); + QueueClear(&gpFsfbUnitInfo->OutnetQueueR); /*-< */ + QueueClear(&gpFsfbUnitInfo->OutnetQueueB); /*-< */ } #endif } - if (flag == 1) + if (flag == 1u) /*-< Ƿ˳*/ { - ret = 0; + ret = 0u; /*-< úֵΪ0*/ } } - return ret; + return ret; /*-< غֵ*/ } /* @@ -1224,78 +850,93 @@ UINT8 DelLnkFunc(UINT8 destType, UINT8 destId, UINT16 logId, ProtclConfigInfoStr return retVal; } - -/* -* ܣˢ·״̬ -* -* -* UINT8* pLnkStatusData Э״̬ -* ֵ -* 0ˢ·ʧ -* 1ˢ·ɹ -*/ +/** + * @brief ReFresh ʹ·ˢ·״̬ + * @param pLnkStatusData · ȡֵΧ:ֽ + * @param pUnifyInfo ṹ ȡֵΧ:οṹ:ProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ UINT8 ReFresh(UINT8* pLnkStatusData, ProtclConfigInfoStru* pUnifyInfo) { - UINT8 retVal = 0; - UINT16 inLnkLen = 0; - UINT16 evrLnkLen = 0; - UINT16 index = 0;/* ƫ */ - UINT8 flag = 0; + /*- ֲ*/ + UINT8 retVal = 0U; /*-< úֵΪʧ*/ + UINT16 inLnkLen = 0U; /*·ܳ*/ + UINT16 evrLnkLen = 0U; /*·*/ + UINT16 index = 0U; /*ƫ*/ + UINT8 flag = 0U; /*-< ·Ƿ־Ϊ*/ + UINT8 ftnRtn = 0U; /*úֵ*/ - UINT8 i = 0;/* ѭʹ */ - F_REFRESHLNK tmpReFreshLnk; + UINT8 i = 0U; /*ѭʹ*/ + F_REFRESHLNK tmpReFreshLnk = NULL; /*ˢָ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ - inLnkLen = ShortFromChar(&pLnkStatusData[0]); - for (i = 1; i < PROTCL_MGECFG_MAXCNT + 1; i++) + if ((NULL != pLnkStatusData) && (NULL != pUnifyInfo) && (NULL != pUnifyInfo->VarArray)) /*-< Ƿǿ*/ { - evrLnkLen = ShortFromChar(&pLnkStatusData[2 + index]); - index += 2; - if (evrLnkLen > 0) + inLnkLen = ShortFromChar(&pLnkStatusData[0]); /*-< õ·*/ + + ftnRtn = CommonMemCpy(&pUnifyInfo->VarArray[0], pUnifyInfo->VarArraySize, &pLnkStatusData[0], 2u + inLnkLen); /*-< øƺ·*/ + if (1u == ftnRtn) /*-< úǷɹ*/ { - if (evrLnkLen + 2 <= inLnkLen) + for (i = 1U; i < PROTCL_MGECFG_MAXCNT + 1U; i++) /*-< Э±ǷСЭ*/ { - /* þЭˢ· */ - tmpReFreshLnk = protclCfgStruBuff[i].fReFreshLnk; - if (NULL != tmpReFreshLnk) + deepPro = 0u; /*-< ô־Ϊ*/ + + evrLnkLen = ShortFromChar(&pLnkStatusData[2 + index]); /*-< õǰЭ±Э·ݳ*/ + index += 2U; /*-< ·±2*/ + if (evrLnkLen > 0U) /*-< ǰЭ±ЭǷ·*/ { - if (DSU_PROTCL_FSFB == i) /*FSFBˢ2ֵ*/ + if (evrLnkLen + 2U <= inLnkLen) /*-< ǰЭ±Э·ݳǷȷ*/ { - retVal = tmpReFreshLnk(evrLnkLen, &pLnkStatusData[index], pUnifyInfo); + deepPro = 1u; /*-< ô־Ϊ*/ } - else /*FSFB*/ + else { - retVal = tmpReFreshLnk(evrLnkLen, &pLnkStatusData[2 + index], pUnifyInfo); + flag = 1U; /*-< ·Ƿ־Ϊ*/ + break; /*-< ˳*/ } } - else /*޴Э*/ + else { - retVal = 1u; + retVal = 1U; /*-< úֵΪɹ*/ + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + /* þЭˢ· */ + tmpReFreshLnk = protclCfgStruBuff[i].fReFreshLnk; /*-< õǰЭ±Эˢ*/ + if (NULL != tmpReFreshLnk) /*-< ǰЭ±ЭˢǷǿ*/ + { + if (DSU_PROTCL_FSFB == i) /*-< ǰЭ±ЭǷFSFB(ˢ2ֵ)*/ + { + retVal = tmpReFreshLnk(evrLnkLen, &pLnkStatusData[index], pUnifyInfo); /*-< õǰЭ±Эˢ*/ + } + else /*FSFB*/ + { + retVal = tmpReFreshLnk(evrLnkLen, &pLnkStatusData[2 + index], pUnifyInfo); /*-< õǰЭ±Эˢ*/ + } + } + else /*޴Э*/ + { + retVal = 1U; /*-< úֵΪɹ*/ + } + index += evrLnkLen; /*-< ·±ǰЭ±Э·*/ + } + + inLnkLen = inLnkLen - evrLnkLen - 2U; /*-< ʣ·ݳ*/ + if (retVal == 0U) /*-< ֵǷΪʧ*/ + { + flag = 1U; /*-< ·Ƿ־Ϊ*/ } - index += evrLnkLen; - } - else - { - flag = 1; - break; } - } - else - { - retVal = 1; - } - inLnkLen = inLnkLen - evrLnkLen - 2; - if (retVal == 0) - { - flag = 1; + if (flag == 1U) /*-< ·Ƿ־ǷΪ*/ + { + retVal = 0U; /*-< úֵΪɹ*/ + } } } - if (flag == 1) - { - retVal = 0; - } - return retVal; + return retVal; /*-< غֵ*/ } @@ -1385,7 +1026,7 @@ UINT8 SendTcpCtrl(UINT16* pTcpCtrlDataLen, UINT8* pTcpCtrlData, ProtclConfigInfo * ȫֱ : * ֵ : ɹ,Э;ʧܷ0 */ -UINT8 InitGetCfgInfo(UINT8* pFileName, UINT32 inDataLen, UINT8 inData[], UINT8* pEvenPrtclNumBuff, ProtclConfigInfoStru* pUnifyInfo) +UINT8 InitGetCfgInfo(UINT8* pFileName, UINT32 inDataLen, UINT8 inData[], UINT16* pEvenPrtclNumBuff, ProtclConfigInfoStru* pUnifyInfo) { UINT8 ret = 0; UINT16 locDevName = 0; @@ -1562,7 +1203,7 @@ static UINT8 InitProtclInfoStru(ProtclConfigInfoStru* pUnifyInfo, UINT16 maxLnkN * ֵ : ɹ1,ʧܷ0 *******************************************************************************************/ -static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { UINT8 ret = 0; @@ -1587,7 +1228,7 @@ static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[] gpsfpUnitInfo->TimeCounter = pUnifyInfo->CycleNum; gpsfpUnitInfo->LocalID = pUnifyInfo->LocalID; /* 豸ID*/ gpsfpUnitInfo->LocalType = pUnifyInfo->LocalType; /* 豸type*/ - gpsfpUnitInfo->MaxNumLink = typeNum; /* ͨŵĶ*/ + gpsfpUnitInfo->MaxNumLink = (UINT8)typeNum; /* ͨŵĶ*/ gpsfpUnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; /* һÿЧ*/ gpsfpUnitInfo->InputSize = pUnifyInfo->InputSize; /* һ֡Ӧݳ*/ gpsfpUnitInfo->OutputSize = pUnifyInfo->OutputSize; /* һ֡Ӧݳ*/ @@ -1620,68 +1261,68 @@ static UINT8 InitSfpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[] return ret; } - -/****************************************************************************************** -* : ʼRpЭṹ -1. ̬RPЭṹռ䣬гʼ -* :UINT8 typeNum 豸ͨʹRPЭĸ - -* : -* ȫֱ : -* ֵ : ɹ1,ʧܷ0 -*******************************************************************************************/ -static UINT8 InitRpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +/** + * @brief InitRpProtclStru ʼRP + * @param fileName FSļ ȡֵΧ:ֽ + * @param inDataLen FSݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData FS ȡֵΧ:ֽ + * @param typeNum · ȡֵΧ:0x00-0xFF + * @param pUnifyInfo · ȡֵΧ:οṹ:ProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ +static UINT8 InitRpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { - UINT8 ret = 0; + UINT8 ret = 0U; /*-< úֵΪʧ*/ -#ifdef USE_RP - UINT32* curDevRecordLen = pUnifyInfo->GlobalVar->curDevRecordLen; - RP_INFO_STRU* gpRedunUnitInfo = NULL; /*Эṹ*/ +#ifdef USE_RP /*ǷʹRP꿪*/ + UINT32* curDevRecordLen = pUnifyInfo->GlobalVar->curDevRecordLen; /*õЭ־*/ + RP_INFO_STRU* gpRedunUnitInfo = NULL; /*RPʵ*/ - if (typeNum != 0) + if (0U != typeNum) /*-< ·Ƿ񲻵0*/ { - if (gpRedunUnitInfo == NULL) + if (gpRedunUnitInfo == NULL) /*-< RPʵǷΪ*/ { - gpRedunUnitInfo = (RP_INFO_STRU*)malloc(sizeof(RP_INFO_STRU)); + gpRedunUnitInfo = (RP_INFO_STRU*)malloc(sizeof(RP_INFO_STRU)); /*-< RPʵռ*/ } - if (gpRedunUnitInfo != NULL) + if (gpRedunUnitInfo != NULL) /*-< RPʵǷǿ*/ { pUnifyInfo->GlobalVar->gpRedunUnitInfo = gpRedunUnitInfo; /*Эṹ*/ - CommonMemSet(gpRedunUnitInfo, sizeof(RP_INFO_STRU), 0, sizeof(RP_INFO_STRU)); + (void)CommonMemSet(gpRedunUnitInfo, sizeof(RP_INFO_STRU), 0U, sizeof(RP_INFO_STRU)); /* Эʼ */ /* ʼֵ趨 */ - gpRedunUnitInfo->LocalID = pUnifyInfo->LocalID; /* 豸ID*/ - gpRedunUnitInfo->LocalType = pUnifyInfo->LocalType; /* 豸type*/ - gpRedunUnitInfo->MaxNumLink = typeNum; /* ͨŵĶ*/ - gpRedunUnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; /* һÿЧ*/ - gpRedunUnitInfo->InputSize = pUnifyInfo->InputSize; /* һ֡Ӧݳ*/ - gpRedunUnitInfo->OutputSize = pUnifyInfo->OutputSize; /* 㷢һ֡Ӧݳ*/ - gpRedunUnitInfo->RecordArraySize = (UINT16)curDevRecordLen[1]; /* ¼С*/ - gpRedunUnitInfo->OutnetQueueSize = typeNum * (pUnifyInfo->InputSize + 23) * 3 * 2 + 100; + gpRedunUnitInfo->LocalID = pUnifyInfo->LocalID; /*-< ʵIDֵRPʵID*/ + gpRedunUnitInfo->LocalType = pUnifyInfo->LocalType; /*-< ʵ͸ֵRPʵ*/ + gpRedunUnitInfo->MaxNumLink = (UINT8)typeNum; /*-< ʵ·ֵRPʵ·*/ + gpRedunUnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; /*-< ʵÿֵRPʵÿ*/ + gpRedunUnitInfo->InputSize = pUnifyInfo->InputSize; /*-< ʵӦóȸֵRPʵӦó*/ + gpRedunUnitInfo->OutputSize = pUnifyInfo->OutputSize; /*-< ʵӦóȸֵRPʵӦó*/ + gpRedunUnitInfo->RecordArraySize = (UINT16)curDevRecordLen[1]; /*-< ʵ־ȸֵRPʵ־*/ + gpRedunUnitInfo->OutnetQueueSize = typeNum * (pUnifyInfo->InputSize + 23U) * 3U * 2U + 100U; /*-< ʵӦøЭгȸֵRPʵӦøЭг*/ + gpRedunUnitInfo->interfaceType = pUnifyInfo->rpInterfaceType; /*-< ýӿ*/ - ret = RpInit(fileName, gpRedunUnitInfo); + ret = RpInit(fileName, gpRedunUnitInfo); /*-< óʼRP,ֵֵ*/ - if (ret != 1) + if (ret != 1U) /*-< ֵǷdzɹ*/ { - return ret; + return ret; /*-< غֵ*/ } } else { - ret = 0; - return ret; + ret = 0U; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } } else { - /* */ + /*-< */ } - ret = 1; + ret = 1U; /*-< úֵΪɹ*/ #endif - return ret; + return ret; /*-< غֵ*/ } /****************************************************************************************** @@ -1693,7 +1334,7 @@ static UINT8 InitRpProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], * ȫֱ : * ֵ : ɹ1,ʧܷ0 *******************************************************************************************/ -static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { UINT8 ret = 0; @@ -1724,7 +1365,7 @@ static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[ gpRsspUnitInfo->OutputSize = pUnifyInfo->OutputSize; /* һ֡Ӧݳ*/ gpRsspUnitInfo->RecordArraySize = (UINT16)curDevRecordLen[3]; /* ¼С*/ - gpRsspUnitInfo->OutnetQueueSize = typeNum * (pUnifyInfo->InputSize + 23) * 3 * 2 + 100; + gpRsspUnitInfo->OutnetQueueSize = typeNum * (pUnifyInfo->InputSize + 25u) * gpRsspUnitInfo->MaxNumPerCycle * 2u; ret = Rssp2Init(fileName, inDataLen, inData, gpRsspUnitInfo); @@ -1758,7 +1399,7 @@ static UINT8 InitRsspProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[ * ȫֱ : * ֵ : ɹ1,ʧܷ0 *******************************************************************************************/ -static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { UINT8 ret = 0; #ifdef USE_RSSPII @@ -1786,7 +1427,7 @@ static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData gpRssp2UnitInfo->RandomNum = pUnifyInfo->CycleNum; /* add 20160819 xb */ gpRssp2UnitInfo->LocalID = pUnifyInfo->LocalID; /* 豸ID*/ gpRssp2UnitInfo->LocalType = pUnifyInfo->LocalType; /* 豸type*/ - gpRssp2UnitInfo->MaxNumLink = typeNum; /* ͨŵĶ*/ + gpRssp2UnitInfo->MaxNumLink = (UINT8)typeNum; /* ͨŵĶ*/ gpRssp2UnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; /* һÿЧ*/ if ((pUnifyInfo->InputSize > RSSP2_MAX_LEN) || (pUnifyInfo->OutputSize > RSSP2_MAX_LEN)) { @@ -1836,7 +1477,7 @@ static UINT8 InitRssp2ProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData * ȫֱ : * ֵ : ɹ1,ʧܷ0 *******************************************************************************************/ -static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { UINT8 ret = 0; @@ -1859,7 +1500,7 @@ static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[] gpRsrUnitInfo->CycleNum = pUnifyInfo->CycleNum; gpRsrUnitInfo->LocalID = pUnifyInfo->LocalID; /* 豸ID*/ gpRsrUnitInfo->LocalType = pUnifyInfo->LocalType; /* 豸type*/ - gpRsrUnitInfo->MaxNumLink = typeNum; /* ͨŵĶ*/ + gpRsrUnitInfo->MaxNumLink = (UINT8)typeNum; /* ͨŵĶ*/ gpRsrUnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; /* һÿЧ*/ if ((pUnifyInfo->InputSize > RSR_RSSP_MAX_LEN) || (pUnifyInfo->OutputSize > RSR_RSSP_MAX_LEN)) { @@ -1908,7 +1549,7 @@ static UINT8 InitRsrProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[] * ȫֱ : * ֵ : ɹ1,ʧܷ0 *******************************************************************************************/ -static UINT8 InitFsfbProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT8 typeNum, ProtclConfigInfoStru* pUnifyInfo) +static UINT8 InitFsfbProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], UINT16 typeNum, ProtclConfigInfoStru* pUnifyInfo) { UINT8 rtn = 0; @@ -1927,7 +1568,7 @@ static UINT8 InitFsfbProtclStru(UINT8* fileName, UINT32 inDataLen, UINT8 inData[ fsfbUnitInfo->CycleNum = pUnifyInfo->CycleNum; fsfbUnitInfo->LocalType = pUnifyInfo->LocalType; fsfbUnitInfo->LocalID = pUnifyInfo->LocalID; - fsfbUnitInfo->MaxNumLink = typeNum; + fsfbUnitInfo->MaxNumLink = (UINT8)typeNum; fsfbUnitInfo->MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; if ((pUnifyInfo->InputSize > FSFB_MAX_LEN) || (pUnifyInfo->OutputSize > FSFB_MAX_LEN)) /*ÿ֡Ӧ󳤶*/ { @@ -2051,12 +1692,12 @@ UINT8 sfpInputPackFms(const PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQ * ֵ * UINT8 1 */ -UINT8 sfpSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 sfpSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 ret = 0; #ifdef USE_SFP - UINT8 i = 0;/* ѭʹ */ + UINT32 i = 0;/* ѭʹ */ UINT32 len = 0; UINT32 dataLen = 0; UINT16 lenInput = 0; @@ -2214,12 +1855,12 @@ UINT8 RsspInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueueD * ֵ * UINT8 1 */ -UINT8 RsspSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 RsspSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 ret = 0; #ifdef USE_RSSPI - UINT8 i = 0;/* ѭʹ */ + UINT32 i = 0;/* ѭʹ */ UINT32 len = 0; UINT16 varlen = 0; UINT16 tempRecordSize = 0; @@ -2374,11 +2015,11 @@ UINT8 Rssp2InputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueue * ֵ * UINT8 1 */ -UINT8 Rssp2SendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 Rssp2SendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 ret = 0; #ifdef USE_RSSPII - UINT8 i = 0;/* ѭʹ */ + UINT32 i = 0;/* ѭʹ */ UINT32 len = 0; UINT16 varlen = 0; UINT16 recordLen = 0; @@ -2549,12 +2190,12 @@ UINT8 RsrInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueueDa * ֵ * UINT8 1 */ -UINT8 RsrSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 RsrSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 ret = 0; #ifdef USE_RSR - UINT8 i = 0; + UINT32 i = 0; UINT16 len = 0; UINT16 varlen = 0; UINT16 tempRecordSize = 0; @@ -2710,12 +2351,12 @@ UINT8 RpInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueueDat * ֵ * UINT8 1 */ -UINT8 RpSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 RpSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 ret = 0; #ifdef USE_RP - UINT8 i = 0; + UINT32 i = 0; UINT16 len = 0; UINT16 varlen = 0; UINT16 tempRecordSize = 0; @@ -2841,30 +2482,29 @@ UINT8 FsfbInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueueD return retVal; } -/* -* ܣFSFBЭ鷢 -* -* -* devDataCount 豸ݸ UINT8 -* sendDataLen ݳ UINT32* -* pSndData UINT8* -* pLnkStatusData Э״̬ UINT8* -* lnkDataLen Э״̬ݳ UINT16* -* recordArray Э¼ UINT8* -* recordDataLen Э¼ݳ UINT16* -* ֵ -* UINT8 1 -*/ -UINT8 FsfbSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +/** + * @brief FsfbSendData FSFBЭ鷢 + * @param pUnifyInfo FSFBʵ ȡֵΧ:οṹProtclConfigInfoStru + * @param devDataCount 豸ݸ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param pSndData ȡֵΧ:ֽ + * @param sendDataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param pLnkStatusData Э״̬ ȡֵΧ:ֽ + * @param lnkDataLen ݳ Э״̬ݳ:0x00000000-0xFFFFFFFF + * @param recordArray Э¼ ȡֵΧ:ֽ + * @param recordDataLen Э¼ݳ Э״̬ݳ:0x0000-0xFFFF + * @return 0:ʧ 1:ɹ + */ +UINT8 FsfbSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { - UINT8 retVal = 0u; + /*- ֲ*/ + UINT8 retVal = 0u; /*-< úֵΪʧ*/ #ifdef USE_FSFB UINT32* curCycleNum = NULL; /*ǰ*/ PROTCL_APP_TO_STRU* appToStru = NULL; /*ӦõЭݽṹ*/ FSFB_INFO_STRU* fsfbInfo = NULL; /*FSFBЭṹ*/ - UINT8 i = 0u;/*ѭ*/ + UINT32 i = 0u;/*ѭ*/ UINT32 outQueDataLen = 0u; /*FSFBݳ*/ UINT8 outQueData[FSFB_MAX_LEN * 16] = { 0 }; /*FSFB*/ UINT32 outQueIdx = 0u; /*FSFBλ*/ @@ -2879,130 +2519,130 @@ UINT8 FsfbSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* if ((NULL != pUnifyInfo) && (NULL != pSndData) && (NULL != sendDataLen) && (NULL != pLnkStatusData) && (NULL != lnkDataLen) && (NULL != recordArray) && (NULL != recordDataLen) && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->gpFsfbUnitInfo) && (NULL != pUnifyInfo->GlobalVar->protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru) - && (NULL != pUnifyInfo->CycleNum)) + && (NULL != pUnifyInfo->CycleNum)) /*-< ǷϷ*/ { - curCycleNum = pUnifyInfo->CycleNum; - appToStru = pUnifyInfo->GlobalVar->protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru; - fsfbInfo = pUnifyInfo->GlobalVar->gpFsfbUnitInfo; + curCycleNum = pUnifyInfo->CycleNum; /*-< õں*/ + appToStru = pUnifyInfo->GlobalVar->protclSndCfgStru[DSU_PROTCL_FSFB].pProtclAppStru; /*-< õӦø*/ + fsfbInfo = pUnifyInfo->GlobalVar->gpFsfbUnitInfo; /*-< õFSFB*/ - QueueClear(&fsfbInfo->OutputDataQueue); - LongToChar(0u, fsfbInfo->AppArray); + QueueClear(&fsfbInfo->OutputDataQueue); /*-< */ + LongToChar(0u, fsfbInfo->AppArray); /*-< Ӧ*/ - if (0u == ((*curCycleNum) % 2))/*FSFBЭΪ600ms*/ + if (0u == ((*curCycleNum) % 2)) /*-< ںǷ2*/ { - for (i = 0; i < devDataCount; i++) /*Ŀ豸ݵ*/ + for (i = 0; i < devDataCount; i++) /*-< Ŀ豸ݵ*/ { - FsfbInputPackFms(appToStru[i], &fsfbInfo->OutputDataQueue); + FsfbInputPackFms(appToStru[i], &fsfbInfo->OutputDataQueue); /*-< */ } - if (0 == ((*curCycleNum) % 50)) /*CI300msһ,50,15sһBTC*/ + if (0 == ((*curCycleNum) % 50)) /*-< ںǷ50*/ { - outQueDataLen = QueueStatus(&fsfbInfo->OutputDataQueue); - if (outQueDataLen <= FSFB_MAX_LEN * 16) /*δ󳤶*/ + outQueDataLen = QueueStatus(&fsfbInfo->OutputDataQueue); /*-< õг*/ + if (outQueDataLen <= FSFB_MAX_LEN * 16) /*-< δ󳤶*/ { - QueueScan(outQueDataLen, outQueData, &fsfbInfo->OutputDataQueue); - while ((outQueIdx + 4) < outQueDataLen) + QueueScan(outQueDataLen, outQueData, &fsfbInfo->OutputDataQueue); /*-< ɨг*/ + while ((outQueIdx + 4) < outQueDataLen) /*-< г*/ { - outQueFramLen = ShortFromChar(&outQueData[outQueIdx]); /*2ֽڳ*/ - outQueIdx += 2; - ShortToChar((UINT16)3, &btmHead[0]); /*2ֽBTM֡ͷ*/ - memcpy(&btmHead[2], &outQueData[outQueIdx], 2); /*2ֽĿLEUID*/ - btmHead[4] = 0x10; /*BTM֡*/ + outQueFramLen = ShortFromChar(&outQueData[outQueIdx]); /*-< õ2ֽڳ*/ + outQueIdx += 2; /*-< ±*/ + ShortToChar((UINT16)3, &btmHead[0]); /*-< 2ֽBTM֡ͷ*/ + memcpy(&btmHead[2], &outQueData[outQueIdx], 2); /*-< 2ֽĿLEUID*/ + btmHead[4] = 0x10; /*-< BTM֡*/ - queWriteRtn = QueueWrite(5, btmHead, &fsfbInfo->OutputDataQueue); - if (1u == queWriteRtn) + queWriteRtn = QueueWrite(5, btmHead, &fsfbInfo->OutputDataQueue); /*-< д5ֽͷ*/ + if (1u == queWriteRtn) /*-< дгɹ*/ { - outQueIdx += outQueFramLen; + outQueIdx += outQueFramLen; /*-< ±*/ } else { - break; + break; /*-< ˳*/ } } } else /*󳤶*/ { - QueueClear(&fsfbInfo->OutputDataQueue); + QueueClear(&fsfbInfo->OutputDataQueue); /*-< */ } } - retVal = FsfbProtclOutPut(fsfbInfo); + retVal = FsfbProtclOutPut(fsfbInfo); /*-< */ - if (1u == retVal) + if (1u == retVal) /*-< úɹ*/ { - dataLen = 4 + LongFromChar(&fsfbInfo->AppArray[dataIdx]); - dataIdx += 4; - while ((dataIdx + 4) < dataLen) + dataLen = 4 + LongFromChar(&fsfbInfo->AppArray[dataIdx]); /*-< õݳ*/ + dataIdx += 4; /*-< ±4*/ + while ((dataIdx + 4) < dataLen) /*-< */ { /*2ֽڳ*/ - frameLen = ShortFromChar(&fsfbInfo->AppArray[dataIdx]); - dataIdx += 2; - ShortToChar(frameLen + 3, &pSndData[*sendDataLen]); - *sendDataLen += 2; + frameLen = ShortFromChar(&fsfbInfo->AppArray[dataIdx]); /*-< õ2ֽڳ*/ + dataIdx += 2; /*-< ±2*/ + ShortToChar(frameLen + 3, &pSndData[*sendDataLen]); /*-< óȵ*/ + *sendDataLen += 2; /*-< ±2*/ /*1ֽЭ*/ - pSndData[*sendDataLen] = DSU_PROTCL_FSFB; - *sendDataLen += 1; + pSndData[*sendDataLen] = DSU_PROTCL_FSFB; /*-< FSFB͵*/ + *sendDataLen += 1; /*-< ±1*/ /*2ֽĿID*/ - dstTypeId = ShortFromChar(&fsfbInfo->AppArray[dataIdx]); - dataIdx += 2; - ShortToChar(dstTypeId, &pSndData[*sendDataLen]); - *sendDataLen += 2; + dstTypeId = ShortFromChar(&fsfbInfo->AppArray[dataIdx]); /*-< õID*/ + dataIdx += 2; /*-< ±2*/ + ShortToChar(dstTypeId, &pSndData[*sendDataLen]); /*-< FSFB͵*/ + *sendDataLen += 2; /*-< ±2*/ /*2ֽĿ߼ID*/ - ShortToChar(0u, &pSndData[*sendDataLen]); - *sendDataLen += 2; + ShortToChar(0u, &pSndData[*sendDataLen]); /*-< ߼ID*/ + *sendDataLen += 2; /*-< ±2*/ - if ((2 <= frameLen) && ((dataIdx + frameLen - 2) <= dataLen)) /*֡*/ + if ((2 <= frameLen) && ((dataIdx + frameLen - 2) <= dataLen)) /*-< ֡Ƿ*/ { - frameLen -= 2; - CommonMemCpy(&pSndData[*sendDataLen], frameLen, &fsfbInfo->AppArray[dataIdx], frameLen); + frameLen -= 2; /*-< ֡Լ2*/ + CommonMemCpy(&pSndData[*sendDataLen], frameLen, &fsfbInfo->AppArray[dataIdx], frameLen); /*-< Ӧݵ*/ - dataIdx += frameLen; - *sendDataLen += frameLen; + dataIdx += frameLen; /*-< ±֡*/ + *sendDataLen += frameLen; /*-< ±֡*/ } else { - break; + break; /*-< ˳*/ } } /*м*/ - *lnkDataLen = 2 + ShortFromChar(fsfbInfo->VarArray); - CommonMemCpy(pLnkStatusData, *lnkDataLen, fsfbInfo->VarArray, *lnkDataLen); + *lnkDataLen = 2 + ShortFromChar(fsfbInfo->VarArray); /*-< õм*/ + CommonMemCpy(pLnkStatusData, *lnkDataLen, fsfbInfo->VarArray, *lnkDataLen); /*-< мȵм*/ } - if (fsfbInfo->RecordArraySize > 3) /*м¼ռ*/ + if (fsfbInfo->RecordArraySize > 3) /*-< м¼ռ*/ { - recordLen = ShortFromChar(fsfbInfo->RecordArray); /*־*/ - if ((2 + recordLen + 1) <= fsfbInfo->RecordArraySize) /*ɴ־,1ֽΪַ*/ + recordLen = ShortFromChar(fsfbInfo->RecordArray); /*-< õ־*/ + if ((2 + recordLen + 1) <= fsfbInfo->RecordArraySize) /*-< ɴ־,1ֽΪַ*/ { - ShortToChar(recordLen + 1, &recordArray[0]); - CommonMemCpy(&recordArray[2], recordLen, &fsfbInfo->RecordArray[2], recordLen); - recordArray[2 + recordLen] = '\0'; + ShortToChar(recordLen + 1, &recordArray[0]); /*-< ü¼ȵ¼*/ + CommonMemCpy(&recordArray[2], recordLen, &fsfbInfo->RecordArray[2], recordLen); /*-< Ƽ¼¼*/ + recordArray[2 + recordLen] = '\0'; /*-< ַ*/ - *recordDataLen = 2 + recordLen + 1; + *recordDataLen = 2 + recordLen + 1; /*-< ü¼*/ } else /*ɴ־*/ { - ShortToChar(fsfbInfo->RecordArraySize - 2, &recordArray[0]); - CommonMemCpy(&recordArray[2], fsfbInfo->RecordArraySize - 3, &fsfbInfo->RecordArray[2], fsfbInfo->RecordArraySize - 3); - recordArray[fsfbInfo->RecordArraySize - 1] = '\0'; + ShortToChar(fsfbInfo->RecordArraySize - 2, &recordArray[0]); /*-< ܼ¼*/ + CommonMemCpy(&recordArray[2], fsfbInfo->RecordArraySize - 3, &fsfbInfo->RecordArray[2], fsfbInfo->RecordArraySize - 3); /*-< ܼ¼*/ + recordArray[fsfbInfo->RecordArraySize - 1] = '\0'; /*-< ַ*/ - *recordDataLen = fsfbInfo->RecordArraySize; + *recordDataLen = fsfbInfo->RecordArraySize; /*-< ü¼*/ } } } else { - retVal = 1u; + retVal = 1u; /*-< úֵΪɹ*/ } } #endif - return retVal; + return retVal; /*-< غֵ*/ } @@ -3415,10 +3055,18 @@ UINT8 FsfbRcvData(QueueStruct* pOutToApp, ProtclConfigInfoStru* pUnifyInfo) } -/* ȡе */ +/** + * @brief readQueueDataToApp ʱƽ̨Э + * @param rcvQueueData ƽ̨ݶ ȡֵΧ:οṹQueueStruct + * @param OutNetFlag ־ ȡֵΧ:1:;2: + * @param locDevName ID ȡֵΧ:0x0000-0xFFFF + * @param pDataToApp ڸЭ ȡֵΧ:οṹPROTCL_RCV_DATA_TYPE + * @param pUnifyInfo ṹ ȡֵΧ:οṹProtclConfigInfoStru + * @return 0:ʧ;1:ɹ + */ UINT8 readQueueDataToApp(QueueStruct* rcvQueueData, UINT8 OutNetFlag, UINT16 locDevName, PROTCL_RCV_DATA_TYPE* pDataToApp, ProtclConfigInfoStru* pUnifyInfo) { - UINT8 ret = 0; + UINT8 ret = 0; /*-< úֵΪ0*/ UINT8 retFun = 0; UINT8 i = 0; /* ѭʹ */ UINT16 destDevName = 0; @@ -3427,119 +3075,119 @@ UINT8 readQueueDataToApp(QueueStruct* rcvQueueData, UINT8 OutNetFlag, UINT16 loc #ifdef USE_RSSPII QueueRingID pRingQue = NULL; - CM_BOOL mbRet = CM_FALSE; + CM_BOOL mbRet = CM_FALSE; /*-< ýΪ*/ UINT32 len = 0; #endif - if ((NULL != rcvQueueData) && (NULL != pDataToApp) && (NULL != pUnifyInfo) && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->pRcvProtclAppStru)) + if ((NULL != rcvQueueData) && (NULL != pDataToApp) && (NULL != pUnifyInfo) && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->pRcvProtclAppStru)) /*-< Ƿǿ*/ { - tempProtclAppStru = pUnifyInfo->GlobalVar->pRcvProtclAppStru; + tempProtclAppStru = pUnifyInfo->GlobalVar->pRcvProtclAppStru; /*-< ЭӦݽṹ*/ - for (i = 0; i < PROTCL_MGECFG_MAXCNT + 1; i++) + for (i = 0; i < PROTCL_MGECFG_MAXCNT + 1; i++) /*-< Э±ǷСЭ*/ { /*Ϣ,;*/ - pDataToApp[i].rcvDataLen = 0; + pDataToApp[i].rcvDataLen = 0; /*-< õݳΪ0*/ } - while (2 < QueueStatus(rcvQueueData)) + while (2 < QueueStatus(rcvQueueData)) /*-< ݶгǷ2*/ { - retFun = 0; - ret = AppReceiveDataAnalysis(rcvQueueData, tempProtclAppStru); - if (ret == 1) + retFun = 0; /*-< õúֵΪ0*/ + ret = AppReceiveDataAnalysis(rcvQueueData, tempProtclAppStru); /*-< ýӦòݽ,ֵֵֵ*/ + if (ret == 1) /*-< ֵǷΪ1*/ { - TypeIdToDevName(tempProtclAppStru->devType, tempProtclAppStru->devId, &destDevName); - retFun = DsuProtclGetProtclType(locDevName, destDevName, &protclType, &pUnifyInfo->GlobalVar->DsuProtclBookIpInfo); + TypeIdToDevName(tempProtclAppStru->devType, tempProtclAppStru->devId, &destDevName); /*-< IDת豸*/ + retFun = DsuProtclGetProtclType(locDevName, destDevName, &protclType, &pUnifyInfo->GlobalVar->DsuProtclBookIpInfo); /*-< øݱIDԷIDʹõЭͺ,ֵֵúֵ*/ } else { - break; + break; /*-< ˳*/ } - if (1 == retFun) + if (1 == retFun) /*-< úǷɹ*/ { - if (DSU_PROTCL_RSSP2 == protclType)/* RSSP-IIЭûĿ豸ID */ + if (DSU_PROTCL_RSSP2 == protclType) /*-< ЭǷRSSPII*/ { #ifdef USE_RSSPII pRingQue = NULL; - Prtcl_Manage_GetRQ(tempProtclAppStru->devType * 256 * 256 * 256 + tempProtclAppStru->devId * 256 * 256 + OutNetFlag * 256 + tempProtclAppStru->devLogId, &pRingQue); - QUEUE_RING_Write(pRingQue, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); - mbRet = CM_TRUE; - while (CM_TRUE == mbRet) + Prtcl_Manage_GetRQ(tempProtclAppStru->devType * 256 * 256 * 256 + tempProtclAppStru->devId * 256 * 256 + OutNetFlag * 256 + tempProtclAppStru->devLogId, &pRingQue); /*-< ûȡζ*/ + QUEUE_RING_Write(pRingQue, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); /*-< ýджӵβ*/ + mbRet = CM_TRUE; /*-< ýΪ*/ + while (CM_TRUE == mbRet) /*-< ǷΪ*/ { - mbRet = Prtcl_Base_Check(pRingQue, &pUnifyInfo->GlobalVar->Rssp2PrtclHead, tempProtclAppStru->pAppData, pUnifyInfo->GlobalVar->gRssp2RcvDataBuffLen, &len); - if (CM_TRUE == mbRet) + mbRet = Prtcl_Base_Check(pRingQue, &pUnifyInfo->GlobalVar->Rssp2PrtclHead, tempProtclAppStru->pAppData, pUnifyInfo->GlobalVar->gRssp2RcvDataBuffLen, &len); /*-< ôӻλһϢ,ֵ*/ + if (CM_TRUE == mbRet) /*-< ǷΪ*/ { - tempProtclAppStru->appDataLen = (UINT16)len;/* ͨݳ */ + tempProtclAppStru->appDataLen = (UINT16)len; /*-< Ӧݳ*/ /*һ֡βд*/ - ShortToChar(tempProtclAppStru->appDataLen + 4, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen);/*֡=ͨݳ+4ֽ֡ͷ*/ + ShortToChar(tempProtclAppStru->appDataLen + 4, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen); /*-< дӦݳȵӦЭ黺*/ /*޸Ļܳ*/ - pDataToApp[protclType].rcvDataLen += 2; + pDataToApp[protclType].rcvDataLen += 2; /*-< ӦЭݳԼ2*/ /* ӷͷ豸 */ - *(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen) = tempProtclAppStru->devType; - pDataToApp[protclType].rcvDataLen++; + *(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen) = tempProtclAppStru->devType; /*-< 豸͵ӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen++; /*-< ӦЭݳԼ1*/ /* ӷͷ豸ID */ - *(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen) = tempProtclAppStru->devId; - pDataToApp[protclType].rcvDataLen++; + *(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen) = tempProtclAppStru->devId; /*-< 豸IDӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen++; /*-< ӦЭݳԼ1*/ /* ߼ID */ - ShortToChar(tempProtclAppStru->devLogId, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen); - pDataToApp[protclType].rcvDataLen += 2; + ShortToChar(tempProtclAppStru->devLogId, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen); /*-< 豸߼IDӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen += 2; /*-< ӦЭݳԼ2*/ /*β*/ - CommonMemCpy(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen, tempProtclAppStru->appDataLen, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); + CommonMemCpy(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen, tempProtclAppStru->appDataLen, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); /*-< ӦݵӦݳȵӦЭ黺*/ /*»ܳ*/ - pDataToApp[protclType].rcvDataLen += tempProtclAppStru->appDataLen; + pDataToApp[protclType].rcvDataLen += tempProtclAppStru->appDataLen; /*-< ӦЭݳԼӦݳ*/ } } #endif } else { - if ((DSU_PROTCL_RSSP == protclType) || (DSU_PROTCL_FSFB == protclType)) /*RSSPIFSFBЭ*/ + if ((DSU_PROTCL_RSSP == protclType) || (DSU_PROTCL_FSFB == protclType)) /*-< ЭǷRSSPIFSFB2*/ { /*2ֽܳ*/ - ShortToChar(tempProtclAppStru->appDataLen + 4, &pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen]); - pDataToApp[protclType].rcvDataLen += 2; + ShortToChar(tempProtclAppStru->appDataLen + 4, &pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen]); /*-< дӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen += 2; /*-< ӦЭݳԼ2*/ /*1ֽ*/ - pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen] = tempProtclAppStru->devType; - pDataToApp[protclType].rcvDataLen++; + pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen] = tempProtclAppStru->devType; /*-< 豸͵ӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen++; /*-< ӦЭݳԼ1*/ /*1ֽID*/ - pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen] = tempProtclAppStru->devId; - pDataToApp[protclType].rcvDataLen++; + pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen] = tempProtclAppStru->devId; /*-< 豸IDӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen++; /*-< ӦЭݳԼ1*/ /*2ֽ߼ID*/ - ShortToChar(tempProtclAppStru->devLogId, &pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen]); - pDataToApp[protclType].rcvDataLen += 2; + ShortToChar(tempProtclAppStru->devLogId, &pDataToApp[protclType].pData[pDataToApp[protclType].rcvDataLen]); /*-< 豸߼IDӦݳȵӦЭ黺*/ + pDataToApp[protclType].rcvDataLen += 2; /*-< ӦЭݳԼ2*/ } else /*Э*/ { /*ЭͲд,ʹȫֹ涨ĸЭ*/ /*pDataToApp[protclType].proType = protclType;*/ /*һ֡βд*/ - ShortToChar(tempProtclAppStru->appDataLen, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen); + ShortToChar(tempProtclAppStru->appDataLen, pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen); /*-< дӦݳȵӦЭ黺*/ /*޸Ļܳ*/ - pDataToApp[protclType].rcvDataLen += 2; + pDataToApp[protclType].rcvDataLen += 2; /*-< ӦЭݳԼ2*/ } /*β*/ - CommonMemCpy(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen, tempProtclAppStru->appDataLen, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); + CommonMemCpy(pDataToApp[protclType].pData + pDataToApp[protclType].rcvDataLen, tempProtclAppStru->appDataLen, tempProtclAppStru->pAppData, tempProtclAppStru->appDataLen); /*-< ӦݵӦݳȵӦЭ黺*/ /*»ܳ*/ - pDataToApp[protclType].rcvDataLen += tempProtclAppStru->appDataLen; + pDataToApp[protclType].rcvDataLen += tempProtclAppStru->appDataLen; /*-< ӦЭݳԼӦݳ*/ } } else { - break; + break; /*-< ˳*/ } } - ret = 1; + ret = 1; /*-< úֵΪ0*/ } - return ret; + return ret; /*-< غֵ*/ } @@ -4318,14 +3966,14 @@ UINT8 FreeSpaceFunc(ProtclConfigInfoStru* pUnifyInfo) * Ҫںָ㡣 * ֹ쳣ʹÿյĺָµIJ **************************************************/ -UINT8 protcl_nul_Init(UINT8* nul_FileName, UINT32 inDataLen, UINT8 inData[], UINT8 nul_Num, ProtclConfigInfoStru* pUnifyInfo) +UINT8 protcl_nul_Init(UINT8* nul_FileName, UINT32 inDataLen, UINT8 inData[], UINT16 nul_Num, ProtclConfigInfoStru* pUnifyInfo) { UINT8 retval = 1; return retval; } -UINT8 protcl_nul_Snd(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) +UINT8 protcl_nul_Snd(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen) { UINT8 retval = 1; @@ -4645,4 +4293,339 @@ static UINT8* NewAppData(UINT16* appDataMaxLen, const UINT16 outputSize, const U } return appData; +} + +/** + * @brief StPtclMgtSetOutnetQue + * @param pUnifyInfo Ϣ ȡֵΧ:οṹProtclConfigInfoStru + * @param locDevName 豸 ȡֵΧ:0x0000-0xFFFF + * @param queType ȡֵΧ:0:;1: + * @return 0:ʧ 1:ɹ + */ +static UINT8 StPtclMgtSetOutnetQue(ProtclConfigInfoStru* pUnifyInfo, UINT16 locDevName, UINT8 queType) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ0*/ + UINT8 funRtn = 0u; + UINT8 i = 0u; /* ѭʹ */ + QueueStruct* pQue = NULL; + PROTCL_RCV_DATA_TYPE* pRcvData = NULL; + +#ifdef USE_SFP + struc_Unify_Info* gpsfpUnitInfo = NULL; /*SFPЭṹ*/ +#endif +#ifdef USE_RP + RP_INFO_STRU* gpRedunUnitInfo = NULL; /*Эṹ*/ +#endif +#ifdef USE_RSR + RSR_INFO_STRU* gpRsrUnitInfo = NULL; /*RSRЭṹ*/ +#endif +#ifdef USE_RSSPI + RSSP_INFO_STRU* gpRsspUnitInfo = NULL; /*RSSPЭṹ*/ +#endif +#ifdef USE_RSSPII + RSSP2_INFO_STRU* gpRssp2UnitInfo = NULL; /*RSSP2Эṹ*/ +#endif +#ifdef USE_FSFB + FSFB_INFO_STRU* gpFsfbUnitInfo = NULL; /*FSFBЭṹ*/ +#endif + + if ((NULL != pUnifyInfo) && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->RcvData) && ((1u == queType) || (2u == queType))) /*-< ǷϷ*/ + { + /*- õЭ*/ +#ifdef USE_SFP + gpsfpUnitInfo = pUnifyInfo->GlobalVar->gpsfpUnitInfo; /*SFPЭṹ*/ +#endif +#ifdef USE_RP + gpRedunUnitInfo = pUnifyInfo->GlobalVar->gpRedunUnitInfo; /*Эṹ*/ +#endif +#ifdef USE_RSR + gpRsrUnitInfo = pUnifyInfo->GlobalVar->gpRsrUnitInfo; /*RSRЭṹ*/ +#endif +#ifdef USE_RSSPI + gpRsspUnitInfo = pUnifyInfo->GlobalVar->gpRsspUnitInfo; /*RSSPЭṹ*/ +#endif +#ifdef USE_RSSPII + gpRssp2UnitInfo = pUnifyInfo->GlobalVar->gpRssp2UnitInfo; /*RSSP2Эṹ*/ +#endif +#ifdef USE_FSFB + gpFsfbUnitInfo = pUnifyInfo->GlobalVar->gpFsfbUnitInfo; /*FSFBЭṹ*/ +#endif + + pRcvData = pUnifyInfo->GlobalVar->RcvData; /*-< ʱЭݵĽṹ*/ + if (1u == queType) /*-< Ƿ*/ + { + pQue = &pUnifyInfo->OutnetQueueA; /*-< õ*/ + } + else + { + pQue = &pUnifyInfo->OutnetQueueB; /*-< õ*/ + } + funRtn = readQueueDataToApp(pQue, queType, locDevName, pRcvData, pUnifyInfo); /*-< ʱƽ̨Эݺ*/ + } + + if (1u == funRtn) /*-< úǷɹ*/ + { + for (i = 1u; i < PROTCL_MGECFG_MAXCNT + 1u; i++) /*-< Э±ǷСЭ*/ + { + if (0u < pRcvData[i].rcvDataLen) /*-< ݳǷ0*/ + { + pQue = NULL; /*-< öΪ*/ + + switch (pRcvData[i].proType) /*-< жЭ*/ + { + case DSU_PROTCL_SFP: /*-< ЭǷSFP*/ +#ifdef USE_SFP + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpsfpUnitInfo->OutnetQueueA; /*-< öΪ*/ + } + else + { + pQue = &gpsfpUnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + case DSU_PROTCL_RP: /*-< ЭǷRP*/ +#ifdef USE_RP + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpRedunUnitInfo->OutnetQueueA; /*-< öΪ*/ + } + else + { + pQue = &gpRedunUnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + case DSU_PROTCL_RSR: /*-< ЭǷRSR*/ +#ifdef USE_RSR + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpRsrUnitInfo->OutnetQueueA; /*-< öΪ*/ + } + else + { + pQue = &gpRsrUnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + case DSU_PROTCL_RSSP: /*-< ЭǷRSSPI*/ +#ifdef USE_RSSPI + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpRsspUnitInfo->OutnetQueueA; /*-< öΪ*/ + } + else + { + pQue = &gpRsspUnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + case DSU_PROTCL_RSSP2: /*-< ЭǷRSSPII*/ +#ifdef USE_RSSPII + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpRssp2UnitInfo->OutnetQueueA; /*-< öΪ*/ + } + else + { + pQue = &gpRssp2UnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + case DSU_PROTCL_FSFB: /*-< ЭǷFSFB*/ +#ifdef USE_FSFB + if (1u == queType) /*-< Ƿ*/ + { + pQue = &gpFsfbUnitInfo->OutnetQueueR; /*-< öΪ*/ + } + else + { + pQue = &gpFsfbUnitInfo->OutnetQueueB; /*-< öΪ*/ + } +#endif + break; /*-< ˳*/ + default: /*-< */ + break; /*-< ˳*/ + } + + if (NULL != pQue) /*-< Ƿǿ*/ + { + SetDataToQue(pRcvData[i].rcvDataLen, pRcvData[i].pData, pQue); /*-< ݵ*/ + } + } + } + + rtnVal = 1u; /*-< úֵΪ1*/ + } + + return rtnVal; /*-< غֵ*/ +} + +/** + * @brief StPtclMgtSetRecSize øЭ־С + * @param pUnifyInfo ͳһṹ ȡֵΧ:οṹProtclConfigInfoStru + * @param pProtclNumBuff Э ȡֵΧ:UINT16 + * @param curDevRecordLen 豸ʹ־ ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StPtclMgtSetRecSize(ProtclConfigInfoStru* pUnifyInfo, UINT16 pProtclNumBuff[7], UINT32 curDevRecordLen[PROTCL_MGECFG_MAXCNT]) +{ + /*- ֲ*/ + /* 豸ʹ־ȱ*/ + UINT32 curDevRecordLenRatio[PROTCL_MGECFG_MAXCNT] = { 0u }; + /* 豸ʹ־ܳ*/ + UINT32 curDevRecordTotalLen = 0u; + /* 豸һ·*/ + UINT32 devRecFitLen[PROTCL_MGECFG_MAXCNT] = { 0u }; + /* ʱ*/ + UINT32 tmpVal = 0u; + UINT8 tmpI = 0u; + UINT32 allDevRecordLen = 0u; /*Э־С*/ + UINT8 borrowIdxNum = 0u; /*豸±*/ + UINT8 borrowIdx[PROTCL_MGECFG_MAXCNT] = { 0u }; /*豸±*/ + UINT32 borrowLen[PROTCL_MGECFG_MAXCNT] = { 0u }; /*豸*/ + UINT32 curBorrowNeedLen = 0u; /*ǰ賤*/ + UINT8 i = 0u; /*ѭ*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ + + if ((NULL != pUnifyInfo) && (NULL != pProtclNumBuff) && (NULL != curDevRecordLen) && (2u < pUnifyInfo->RecordArraySize)) /*-< ȴ2,־ռ䴦*/ + { + /*- ʷ־ռ*/ + devRecFitLen[0] = SFP_PER_LNK_RECORD_MAX_LEN; + devRecFitLen[1] = RP_PER_LNK_RECORD_MAX_LEN; + devRecFitLen[2] = RSR_PER_LNK_RECORD_MAX_LEN; + devRecFitLen[3] = RSSPI_PER_LNK_RECORD_MAX_LEN; + devRecFitLen[4] = RSSPII_PER_LNK_RECORD_MAX_LEN; + devRecFitLen[5] = FSFB_PER_LNK_RECORD_MAX_LEN; + for (tmpI = 0u; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) /*-< Э±ǷС*/ + { + if (pProtclNumBuff[tmpI + 1] > 0u) /*-< ǷдЭ*/ + { + curDevRecordLenRatio[tmpI] = devRecFitLen[tmpI] * pProtclNumBuff[tmpI + 1u]; /*-< Э־С*/ + curDevRecordTotalLen += curDevRecordLenRatio[tmpI]; /*-< ־СۼӴЭ־С*/ + } + } + for (tmpI = 0u; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) /*-< Э±ǷС*/ + { + if (pProtclNumBuff[tmpI + 1] > 0u) /*-< ǷдЭ*/ + { + curDevRecordLen[tmpI] = (pUnifyInfo->RecordArraySize - 2u) * curDevRecordLenRatio[tmpI] / curDevRecordTotalLen; /*-< Э־С*/ + allDevRecordLen += curDevRecordLen[tmpI]; /*-< Э־С*/ + tmpVal += devRecFitLen[tmpI]; /*-< С־ۼӴЭ־С*/ + } + } + /*־ռ.ܷ־СС־:ʷ; :ڰʷ,ʹһЭ־ȲСһ·*/ + if (allDevRecordLen >= tmpVal) /*-< Э־СǷڵС־*/ + { + deepPro = 1u; /*-< ô־Ϊ*/ + } + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + for (tmpI = 0u; tmpI < PROTCL_MGECFG_MAXCNT; tmpI++) /*-< Э±ǷС*/ + { + /*ֻЭ־*/ + if ((pProtclNumBuff[tmpI + 1] > 0u) && (curDevRecordLen[tmpI] < devRecFitLen[tmpI])) /*-< ǷдЭ ҳСһ·*/ + { + curBorrowNeedLen = devRecFitLen[tmpI] - curDevRecordLen[tmpI]; /*-< õ賤*/ + borrowIdxNum = 0u; /*-< 豸±*/ + isBreak = 0u; /*-< Ƿ˳ʶΪ*/ + for (i = 0u; i < PROTCL_MGECFG_MAXCNT; i++) /*-< Э±ǷС*/ + { + if ((i != tmpI) && (curDevRecordLen[i] > devRecFitLen[i])) /*-< ǵǰЭ ҿɽ־*/ + { + if ((curDevRecordLen[i] - devRecFitLen[i]) >= curBorrowNeedLen) /*-< ɽ賤ȴڵ賤*/ + { + borrowLen[borrowIdxNum] = curBorrowNeedLen; /*-< 賤ȸ豸*/ + + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + else + { + borrowLen[borrowIdxNum] = curDevRecordLen[i] - devRecFitLen[i]; /*-< ÿɽ賤ȸ豸*/ + } + curBorrowNeedLen -= borrowLen[borrowIdxNum]; /*-< 賤*/ + + borrowIdx[borrowIdxNum] = i; /*-< ý豸±豸±*/ + borrowIdxNum++; /*-< ý豸±1*/ + } + if (1u == isBreak) /*-< Ƿ˳ʶΪ*/ + { + break; /*-< ˳*/ + } + } + if (1u == isBreak) /*-< 蹻־*/ + { + for (i = 0u; i < borrowIdxNum; i++) /*-< 豸±±С*/ + { + curDevRecordLen[borrowIdx[i]] -= borrowLen[i]; /*-< 豸־*/ + } + curDevRecordLen[tmpI] = devRecFitLen[tmpI]; /*-< 豸Ϊһ·*/ + } + } + } + } +} + +/** + * @brief StPtclMgtSetRecvDataBuff ݻ + * @param pUnifyInfo ͳһṹ ȡֵΧ:οṹProtclConfigInfoStru + * @param maxLinkNum · ȡֵΧ:0x0000-0xFFFF + * @param protclSndCfgStru ñ ȡֵΧ:οṹPROTCL_SND_CFG_STRU + * @param ptemProtclRcvDataStru ȡֵΧ:οṹPROTCL_RCV_DATA_TYPE + * @param ptclType Э ȡֵΧ:0x00-0xFF + * @param pRcvDataBuff ȡֵΧ:ֽ + * @param pRcvDataBuffLen ݳ ȡֵΧ:0x0000-0xFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StPtclMgtSetRecvDataBuff(ProtclConfigInfoStru* pUnifyInfo, UINT16 maxLinkNum, PROTCL_SND_CFG_STRU* protclSndCfgStru, PROTCL_RCV_DATA_TYPE* ptemProtclRcvDataStru, UINT8 ptclType, UINT8** pRcvDataBuff, UINT16* pRcvDataBuffLen) +{ + /*- ֲ*/ + UINT8 rtnVal = 1u; /*-< úֵΪ˳*/ + UINT32 i = 0u; /*ѭ*/ + UINT32 tmpVal = 0u; + + tmpVal = maxLinkNum * pUnifyInfo->MaxNumPerCycle; /*-< õ*/ + protclSndCfgStru[ptclType].pProtclAppStru = (PROTCL_APP_TO_STRU*)malloc(sizeof(PROTCL_APP_TO_STRU) * tmpVal); /*-< ݿռ*/ + if ((NULL == protclSndCfgStru[ptclType].pProtclAppStru) || (NULL == ptemProtclRcvDataStru[ptclType].pData)) /*-< ʧ*/ + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + else + { + /*Ϊķʱ洢ʼ*/ + CommonMemSet(protclSndCfgStru[ptclType].pProtclAppStru, sizeof(PROTCL_APP_TO_STRU) * tmpVal, 0u, sizeof(PROTCL_APP_TO_STRU) * tmpVal); /*-< ݿռ*/ + + /*ʼ֡Ӧ*/ + for (i = 0u; i < tmpVal; i++) /*-< ǷС*/ + { + protclSndCfgStru[ptclType].pProtclAppStru[i].pAppData = NewAppData(&protclSndCfgStru[ptclType].pProtclAppStru[i].appDataMaxLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); /*-< 䵥ݿռ*/ + if (NULL == protclSndCfgStru[ptclType].pProtclAppStru[i].pAppData) /*-< ʧ*/ + { + break; /*-< ˳*/ + } + } + if (i == tmpVal) /*-< ɹ*/ + { + (*pRcvDataBuff) = NewAppData(pRcvDataBuffLen, pUnifyInfo->OutputSize, pUnifyInfo->InputSize); /*-< Ӧݿռ*/ + if (NULL == (*pRcvDataBuff)) /*-< ʧ*/ + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + else + { + rtnVal = 0u; /*-< úֵΪ˳*/ + } + } + else + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + + } + + return rtnVal; /*-< غֵ*/ } \ No newline at end of file diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.h b/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.h index fcb6d46..8364ba6 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.h +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/ProtclManage.h @@ -54,10 +54,14 @@ extern "C" { #define ERR_PRTCL_MANAGE_TYPE_ERR 0x00000001 #define ERR_PRTCL_MANAGE_DATA_ANALYSIS_ERR 0x00000002 - -/* - * Эʼ - * + +/** + * @brief Init ļȡӦЭ + * @param fileName ļ· ȡֵΧ:ֽ + * @param inDataLen ڲݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @param pUnifyInfo ͬṹ ȡֵΧ:οṹProtclConfigInfoStru + * @return 0:ʧ 1:ɹ */ UINT8 Init(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], ProtclConfigInfoStru* pUnifyInfo); @@ -71,15 +75,11 @@ UINT8 Init(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], ProtclConfigInfoSt */ UINT8 SendAppData(ProtclConfigInfoStru *pUnifyInfo); -/* -* ܣЭ -* -* ProtclConfigInfoStru * pUnifyInfo ͳһṹ -* ֵ -* 1ݳɹ -0ʧ -*/ - +/** + * @brief ReceiveAppData Э + * @param pUnifyInfo ͳһṹ ȡֵΧ:οṹProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ UINT8 ReceiveAppData(ProtclConfigInfoStru* pUnifyInfo); /* @@ -113,15 +113,12 @@ UINT8 GetLnkStatus (UINT8 destType,UINT8 destId,UINT16 logId,ProtclConfigInfoStr */ UINT8 DelLnkFunc(UINT8 destType,UINT8 destId,UINT16 logId,ProtclConfigInfoStru *pUnifyInfo); -/* -* ܣˢ·״̬ -* -* -* UINT8* pLnkStatusData Э״̬ -* ֵ -* 0ˢ·ʧ -* 1ˢ·ɹ -*/ +/** + * @brief ReFresh ʹ·ˢ·״̬ + * @param pLnkStatusData · ȡֵΧ:ֽ + * @param pUnifyInfo ṹ ȡֵΧ:οṹ:ProtclConfigInfoStru + * @return 0:ʧ 1:ɹ + */ UINT8 ReFresh(UINT8 *pLnkStatusData, ProtclConfigInfoStru *pUnifyInfo); /* @@ -137,26 +134,26 @@ UINT8 FreeSpace(ProtclConfigInfoStru *pUnifyInfo); UINT8 ReceiveTcpState(UINT16 TcpStateDataLen,UINT8* pTcpStateData, ProtclConfigInfoStru *pUnifyInfo); UINT8 SendTcpCtrl(UINT16 *pTcpCtrlDataLen,UINT8 *pTcpCtrlData, ProtclConfigInfoStru *pUnifyInfo); -UINT8 InitGetCfgInfo(UINT8* pFileName, UINT32 inDataLen, UINT8 inData[], UINT8* pEvenPrtclNumBuff, ProtclConfigInfoStru* pUnifyInfo); +UINT8 InitGetCfgInfo(UINT8* pFileName, UINT32 inDataLen, UINT8 inData[], UINT16* pEvenPrtclNumBuff, ProtclConfigInfoStru* pUnifyInfo); /***********Э鷢غ**************************************************************/ UINT8 AppSendInputDataAnalysis(QueueStruct *pAppQueueData,PROTCL_APP_TO_STRU *pProtclAppStru); UINT8 sfpInputPackFms(const PROTCL_APP_TO_STRU protclAppStru, QueueStruct *pAppQueueData); -UINT8 sfpSendData(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8 * pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 sfpSendData(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8 * pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); UINT8 RsspInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct *pAppQueueData); -UINT8 RsspSendData(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 RsspSendData(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); #ifdef USE_RSR UINT8 RsrInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct *pAppQueueData, RSR_INFO_STRU *gpRsrUnitInfo); #endif -UINT8 RsrSendData(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 RsrSendData(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); UINT8 RpInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct *pAppQueueData); -UINT8 RpSendData(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 RpSendData(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); UINT8 RsrAndRpAppArrayPage(UINT8* pInAppArray,UINT32 appDtaLen,UINT8* pOutAppArray,UINT32* outAppLen); UINT8 Rssp2InputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct *pAppQueueData); -UINT8 Rssp2SendData(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 Rssp2SendData(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8* pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); UINT8 FsfbInputPackFms(PROTCL_APP_TO_STRU protclAppStru, QueueStruct* pAppQueueData); -UINT8 FsfbSendData(ProtclConfigInfoStru* pUnifyInfo, UINT8 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen); +UINT8 FsfbSendData(ProtclConfigInfoStru* pUnifyInfo, UINT32 devDataCount, UINT8* pSndData, UINT32* sendDataLen, UINT8* pLnkStatusData, UINT16* lnkDataLen, UINT8* recordArray, UINT16* recordDataLen); /***********Эغ**************************************************************/ UINT8 SfpRcvData(QueueStruct* pOutToApp, ProtclConfigInfoStru *pUnifyInfo); UINT8 RpRcvData(QueueStruct* pOutToApp, ProtclConfigInfoStru *pUnifyInfo); @@ -213,8 +210,8 @@ UINT8 FsfbFreeSpaceFunc(ProtclConfigInfoStru* pUnifyInfo); /***********Getting**&**Setting****װ***********************************************/ /***********쳣**************************************************************/ -UINT8 protcl_nul_Init(UINT8* nul_FileName, UINT32 inDataLen, UINT8 inData[], UINT8 nul_Num, ProtclConfigInfoStru* pUnifyInfo); -UINT8 protcl_nul_Snd(ProtclConfigInfoStru *pUnifyInfo, UINT8 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8 * pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); +UINT8 protcl_nul_Init(UINT8* nul_FileName, UINT32 inDataLen, UINT8 inData[], UINT16 nul_Num, ProtclConfigInfoStru* pUnifyInfo); +UINT8 protcl_nul_Snd(ProtclConfigInfoStru *pUnifyInfo, UINT32 devDataCount,UINT8* pSndData,UINT32* sendDataLen,UINT8 * pLnkStatusData,UINT16* lnkDataLen,UINT8* recordArray,UINT16* recordDataLen); UINT8 protcl_nul_Rcv(QueueStruct* PQueueStru, ProtclConfigInfoStru *pUnifyInfo); UINT8 protcl_nul_Lnk(UINT8 destType,UINT8 destId,UINT16 logId, ProtclConfigInfoStru *pUnifyInfo); void protcl_nul_NetsRecvPkgNum(ProtclConfigInfoStru* pUnifyInfo, const UINT8 dstType, const UINT8 dstId, const UINT16 dstLogicId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum); diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.c b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.c index 80c7f0e..d704df1 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.c +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.c @@ -5,6 +5,7 @@ #include "dsuRsspFunc.h" #include "CommonMemory.h" #include "CommonRecord.h" +#include #define RSSPI_OPP_IDS_NUM (255) /*RSSPIĶԷΨһID*/ @@ -28,8 +29,6 @@ #define DATA2_STAGING_NO (19u) /*TwoDevRepeatݴ޿ռ*/ #define NO_DATA_NET1_LEN_ILLEGAL (20u) /*TwoDevRepeat1ʱݳȷǷ*/ -static UINT16 DelRsspiNotOppId(UINT16 linkDataLen, UINT8 linkData[], UINT16 singleLinkLen, UINT16 oppIdIdx, UINT8 oppIdsNum, const UINT32 oppIds[]); - static UINT8 ProtclTwoRepeatParam(ProtclConfigInfoStru* protcl, UINT8* data1, UINT8* data2, UINT32* data2Len, UINT8* data2Staging); static UINT8 RepeatDataFormatCheck(UINT8* data, const UINT32 dataLen); static UINT8 DevDataFormatCheck(UINT8* data, const UINT32 dataLen, UINT32* dataIdx, UINT32* netLen); @@ -262,180 +261,6 @@ UINT8 ProtclSendTcpCtrlFunc(UINT16 *pTcpCtrlDataLen,UINT8 *pTcpCtrlData, ProtclC return ret; } -/* -*: DelRsspiNotOppId -*: ɾRSSPI·зָĶԷַ· -*: UINT16 linkDataLen ·ݳ -* UINT8 linkData[] · -* UINT16 singleLinkLen · -* UINT16 oppIdIdx ԷΨһID·λ -* UINT8 oppIdsNum ԷΨһID -* const UINT32 oppIds[] ԷΨһID -*: -*: -*ֵ: UINT16 aftLinkDataLen ·ݳ -*/ -static UINT16 DelRsspiNotOppId(UINT16 linkDataLen, UINT8 linkData[], UINT16 singleLinkLen, UINT16 oppIdIdx, UINT8 oppIdsNum, const UINT32 oppIds[]) -{ - UINT16 aftLinkDataLen = linkDataLen; /*·ݳ*/ - UINT16 i = 0; /*ѭ*/ - UINT16 j = 0; /*ѭ*/ - UINT16 linkNum = linkDataLen / singleLinkLen; /*ĵ·*/ - UINT32 oppIdLink = 0; /*·ϢжԷΨһID*/ - UINT16 curIdx = 0; /*ǰ·±λ*/ - - if (( NULL != linkData)&&( NULL != oppIds)) - { - for (i = 0; i < linkNum; i++) /*·Ϣ*/ - { - oppIdLink = LongFromChar(&linkData[curIdx + oppIdIdx]); /*·жԷΨһID*/ - for (j = 0; j < oppIdsNum; j++) - { - if (oppIds[j] == oppIdLink) /*ҵ˳ѭ*/ - { - break; - } - } - if (j == oppIdsNum) /*δҵ,ɾ˶ԷΨһID·*/ - { - if (i < (linkNum - 1)) /*һ,ƶ·Ϣ*/ - { - CommonMemCpy(&linkData[curIdx], linkDataLen - (singleLinkLen * (i + 1)), &linkData[curIdx + singleLinkLen], linkDataLen - (singleLinkLen * (i + 1))); - } - aftLinkDataLen -= singleLinkLen; /*󳤶*/ - } - else - { - curIdx += singleLinkLen; /*±ƫһ·*/ - } - } - - } - - return aftLinkDataLen; -} - -/* -*: AdjustRsspiVarArray -*: RSSPI·,ָֻĶԷַ· -*: UINT8 oppIdsNum ԷID߼ID -* const UINT16 oppTypeIds[] ԷID -* const UINT16 oppLogicIds[] Է߼ID -* ProtclConfigInfoStru *pUnifyInfo ṹ -*: -*: -*ֵ: -*/ -void AdjustRsspiVarArray(UINT8 oppIdsNum, const UINT16 oppTypeIds[], const UINT16 oppLogicIds[], ProtclConfigInfoStru *pUnifyInfo) -{ - const UINT16 oppIdSafeIdx = 7; /*ԷΨһIDڰȫλ*/ - const UINT16 oppIdRedundIdx = 0; /*ԷΨһIDλ*/ - - UINT32 oppIds[RSSPI_OPP_IDS_NUM] = { 0 }; /*ԷΨһID*/ - UINT32 i = 0; /*ѭ*/ - UINT8 *linkData = NULL; /*·Ϣ*/ - UINT16 totalLen = 0; /*·ܳ*/ - UINT16 curIdx = 0; /*ǰ·±λ*/ - UINT32 curProtcl = 1; /*ǰЭʶ*/ - UINT16 curLen = 0; /*ǰЭ·*/ - UINT16 curLenIdx = 0; /*ǰЭ·λ*/ - UINT16 safeLen = 0; /*RSSPIȫ·*/ - UINT16 safeLenIdx = 0; /*RSSPIȫ·λ*/ - UINT16 aftSafeLen = 0; /*RSSPIȫ·*/ - UINT16 redundLen = 0; /*RSSPI·*/ - UINT16 redundLenIdx = 0; /*RSSPI·λ*/ - UINT16 aftRedundLen = 0; /*RSSPI·*/ - UINT8 isAdjustRear = 0; /*Ƿβ*/ - -#ifdef USE_RSSPI - if ((0 < oppIdsNum) && (RSSPI_OPP_IDS_NUM > oppIdsNum) && (NULL != oppTypeIds) && (NULL != oppLogicIds) && (NULL != pUnifyInfo) && (NULL != pUnifyInfo->VarArray) - && (NULL != pUnifyInfo->GlobalVar) && (NULL != pUnifyInfo->GlobalVar->gpRsspUnitInfo) && (NULL != pUnifyInfo->GlobalVar->gpRsspUnitInfo->pDsuRsspInfoStruWL)) /**/ - { - for (i = 0; i < oppIdsNum; i++) /*ȡRSSPIԷΨһID*/ - { -#ifdef RSSP_NO_HLHT - oppIds[i] = oppTypeIds[i]; -#else - oppIds[i] = DquTypeIdToHlhtId(oppTypeIds[i], oppLogicIds[i], pUnifyInfo->GlobalVar->gpRsspUnitInfo->pDsuRsspInfoStruWL); /*ԷΨһID*/ -#endif - } - - linkData = pUnifyInfo->VarArray; /*·Ϣ*/ - /*·ܳ*/ - totalLen = 2 + ShortFromChar(linkData); - curIdx += 2; - - for (curProtcl = 1; curProtcl <= PROTCL_MGECFG_MAXCNT; curProtcl++) /*Э*/ - { - /*ǰ·±λ*/ - curLen = ShortFromChar(&linkData[curIdx]); - curLenIdx = curIdx; - curIdx += 2; - - if ((curIdx + curLen) <= totalLen) /*Э·Ч*/ - { - if ((DSU_PROTCL_RSSP == curProtcl) && (2 < curLen)) /*ǰRSSPIЭ,·Ϣ*/ - { - safeLen = ShortFromChar(&linkData[curIdx]); /*ȫ·*/ - if (((2 + safeLen) <= curLen) && (0 == (safeLen%RSSP_VAR_NODE_LEN_WL))) /*ȫ·Ч*/ - { - safeLenIdx = curIdx; /*ȫ·λ*/ - curIdx += 2; - - if (0 < safeLen) /*аȫ·Ϣ*/ - { - aftSafeLen = DelRsspiNotOppId(safeLen, &linkData[curIdx], RSSP_VAR_NODE_LEN_WL, oppIdSafeIdx, oppIdsNum, oppIds); - } - - redundLenIdx = curIdx + safeLen; - redundLen = curLen - 2 - safeLen; - if ((0 < redundLen) && (0 == (redundLen % RP_LINK_LEN))) - { - aftRedundLen = DelRsspiNotOppId(redundLen, &linkData[redundLenIdx], RP_LINK_LEN, oppIdRedundIdx, oppIdsNum, oppIds); - } - - if ((aftSafeLen <= safeLen) && (aftRedundLen <= redundLen)) /*󳤶Ч*/ - { - curIdx += aftSafeLen; /*㿪ʼλ*/ - if (aftSafeLen < safeLen) /*ȫ*/ - { - CommonMemCpy(&linkData[curIdx], aftRedundLen, &linkData[redundLenIdx], aftRedundLen); /**/ - ShortToChar(aftSafeLen, &linkData[safeLenIdx]); /*ôİȫ㳤*/ - isAdjustRear = 1; - } - else - { - if (aftRedundLen < redundLen) /**/ - { - isAdjustRear = 1; - } - } - curIdx += aftRedundLen; /*βݿʼλ*/ - if (1 == isAdjustRear) /*β*/ - { - CommonMemCpy(&linkData[curIdx], totalLen - curLenIdx - 2 - curLen, &linkData[curLenIdx + 2 + curLen], totalLen - curLenIdx - 2 - curLen); /*β*/ - ShortToChar(2 + aftSafeLen + aftRedundLen, &linkData[curLenIdx]); /*ôRSSPI·*/ - ShortToChar(totalLen - 2 - (safeLen - aftSafeLen) - (redundLen - aftRedundLen), linkData); /*·ܳ*/ - } - } - } - - break; /*ҵRSSPI·˳ѭ*/ - } - else /*RSSPIЭѭ*/ - { - curIdx += curLen; - } - } - else /*Э·Ч,˳ѭ*/ - { - break; - } - } - } -#endif -} - /* *: ȡյ *: ProtclConfigInfoStru* pUnifyInfo @@ -505,17 +330,14 @@ void ProtclGetSwapData(UINT8 swapData[], const UINT16 swapDataMaxLen, ProtclConf } } -/* -*: ProtclSetSwapData -*: ˫CPU -*: UINT8 swapData[] 2ֽܳ+SFP(2ֽڳ+N[4ֽCRC])+RSSPI(2ֽڳ+N[4ֽSVC]) -* ProtclConfigInfoStru* protcl Эṹ -*: -*: -*ֵ: -*/ +/** + * @brief ProtclSetSwapData ˫CPU + * @param swapData 2ֽܳ+SFP(2ֽڳ+N[4ֽCRC])+RSSPI(2ֽڳ+N[4ֽSVC]) ȡֵΧ:ֽ + * @param protcl Эṹ ȡֵΧ:οṹProtclConfigInfoStru + */ void ProtclSetSwapData(UINT8 swapData[], ProtclConfigInfoStru* protcl) { + /*- ֲ*/ UINT16 swapDataLen = 0u; /*ݳ*/ UINT32 allLen = 0u; /*ܳ*/ UINT32 outAppIdx = 0u; /*Ӧλ*/ @@ -526,106 +348,115 @@ void ProtclSetSwapData(UINT8 swapData[], ProtclConfigInfoStru* protcl) UINT16 rsspiLen = 0u; /*RSSPI*/ UINT16 sfpStartIdx = 0u; /*SFPʼλ*/ UINT16 rsspiStartIdx = 0u; /*RSSPIʼλ*/ - UINT8 isProSfp = 0u; /*ǷSFP*/ - UINT8 isProRsspi = 0u; /*ǷRSSPI*/ + UINT8 isProSfp = 0u; /*-< ǷSFPΪ*/ + UINT8 isProRsspi = 0u; /*-< ǷRSSPIΪ*/ UINT8* record = NULL; /*־*/ UINT16 recordSize = 0u; /*־鳤*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ - if ((NULL != swapData) && (NULL != protcl) && (NULL != protcl->GlobalVar)) + if ((NULL != swapData) && (NULL != protcl) && (NULL != protcl->GlobalVar)) /*-< Ƿǿ*/ { + /*- ¼ú־*/ record = protcl->RecordArray; recordSize = protcl->RecordArraySize; PrintRecArrayByte(record, recordSize, 0xD2u); - swapDataLen = ShortFromChar(&swapData[0]); /*ܳ*/ + swapDataLen = ShortFromChar(&swapData[0]); /*-< õܳ*/ - sfpStartIdx = 2u; /*RSSPIʼλ*/ - sfpLen = ShortFromChar(&swapData[2]); - rsspiStartIdx = 2u + sfpStartIdx + sfpLen; /*RSSPIʼλ*/ - rsspiLen = ShortFromChar(&swapData[rsspiStartIdx]); - if (((2u + sfpLen + 2u + rsspiLen) == swapDataLen) && (0u == (sfpLen % 4u)) && (0u == (rsspiLen % 4u))) /*ȼ*/ + sfpStartIdx = 2u; /*-< RSSPIʼλΪ2*/ + sfpLen = ShortFromChar(&swapData[2]); /*-< õ*/ + rsspiStartIdx = 2u + sfpStartIdx + sfpLen; /*-< RSSPIʼλ*/ + rsspiLen = ShortFromChar(&swapData[rsspiStartIdx]); /*-< RSSPIʼλ*/ + if (((2u + sfpLen + 2u + rsspiLen) == swapDataLen) && (0u == (sfpLen % 4u)) && (0u == (rsspiLen % 4u))) /*-< ȼ*/ { /*AppArray:4ֽܳ+|&2ֽڳ+1ֽЭ+1ֽĿ+1ֽĿID+2ֽԤ+Ϸ(Э)*/ - allLen = LongFromChar(&protcl->AppArray[0]); - if (0u < allLen) /**/ + allLen = LongFromChar(&protcl->AppArray[0]); /*-< õӦó*/ + if (0u < allLen) /*-< Ƿ*/ { - outAppData = &protcl->AppArray[4]; - while (outAppIdx < allLen) /*Ӧ*/ - { - pkgLen = 2u + ShortFromChar(&outAppData[outAppIdx]); - if ((outAppIdx + pkgLen) <= allLen) /*ǰӦλüӳСڵӦó,Ϸ*/ - { - protclType = outAppData[outAppIdx + 2u]; /*Э*/ - if ((DSU_PROTCL_SFP == protclType) || (DSU_PROTCL_RSSP == protclType)) /*SFPRSSPI*/ - { - if (DSU_PROTCL_SFP == protclType) /*SFP*/ - { - if (0u == isProSfp) /*ֻһ,,SFPһ*/ - { -#ifdef USE_SFP - SfpSetSwapDataForOut(&swapData[sfpStartIdx], &outAppData[outAppIdx], protcl->GlobalVar->gpsfpUnitInfo); -#endif - isProSfp = 1u; - } - } - else /*RSSPI*/ - { - if (0u == isProRsspi) /*ֻһ,,RSSPIһ*/ - { -#ifdef USE_RSSPI - RsspiSetSwapDataForOut(&swapData[rsspiStartIdx], &outAppData[outAppIdx], protcl->GlobalVar->gpRsspUnitInfo); -#endif - isProRsspi = 1u; - } - } - } - - outAppIdx += pkgLen; - } - else /*ȷǷ*/ - { - PrintRecArrayByte(record, recordSize, 3u); - PrintRecArray2ByteB(record, recordSize, pkgLen); - PrintRecArray4ByteB(record, recordSize, outAppIdx); - PrintRecArray4ByteB(record, recordSize, allLen); - - break; - } - } + deepPro = 1u; /*-< ô־Ϊ*/ } else /**/ { + /*- ¼Ӧóȴ־*/ PrintRecArrayByte(record, recordSize, 2u); PrintRecArrayByte(record, recordSize, 0u); } } else /*ȼ*/ { + /*- ¼ȼ־*/ PrintRecArrayByte(record, recordSize, 1u); PrintRecArray2ByteB(record, recordSize, swapDataLen); PrintRecArray2ByteB(record, recordSize, sfpLen); PrintRecArray2ByteB(record, recordSize, rsspiLen); } } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + outAppData = &protcl->AppArray[4]; /*-< õ*/ + while (outAppIdx < allLen) /*-< Ӧ*/ + { + pkgLen = 2u + ShortFromChar(&outAppData[outAppIdx]); /*-< õ*/ + if ((outAppIdx + pkgLen) <= allLen) /*-< ǰӦλüӳСڵӦó,Ϸ*/ + { + protclType = outAppData[outAppIdx + 2u]; /*-< õЭ*/ + if ((DSU_PROTCL_SFP == protclType) || (DSU_PROTCL_RSSP == protclType)) /*-< ЭǷSFPRSSPI*/ + { + if (DSU_PROTCL_SFP == protclType) /*-< ЭSFP*/ + { + if (0u == isProSfp) /*-< SFPǷΪ*//*ֻһ,,SFPһ*/ + { +#ifdef USE_SFP + SfpSetSwapDataForOut(&swapData[sfpStartIdx], &outAppData[outAppIdx], protcl->GlobalVar->gpsfpUnitInfo); /*-< ָ˫CPUݺ*/ +#endif + isProSfp = 1u; /*-< ǷSFPΪ*/ + } + } + else /*RSSPI*/ + { + if (0u == isProRsspi) /*-< RSSPIǷΪ*//*ֻһ,,RSSPIһ*/ + { +#ifdef USE_RSSPI + RsspiSetSwapDataForOut(&swapData[rsspiStartIdx], &outAppData[outAppIdx], protcl->GlobalVar->gpRsspUnitInfo); /*-< ˫CPUݺ*/ +#endif + isProRsspi = 1u; /*-< ǷRSSPIΪ*/ + } + } + } + + outAppIdx += pkgLen; /*-< ±*/ + } + else /*ȷǷ*/ + { + /*- ¼ȼ־*/ + PrintRecArrayByte(record, recordSize, 3u); + PrintRecArray2ByteB(record, recordSize, pkgLen); + PrintRecArray4ByteB(record, recordSize, outAppIdx); + PrintRecArray4ByteB(record, recordSize, allLen); + + break; + } + } + } } -/* -*: ProtclDelAllLink -*: ɾ· -*: ProtclConfigInfoStru* protcl Эṹ -*: -*: -*ֵ: -*/ +/** + * @brief ProtclDelAllLink ɾ· + * @param protcl Эṹ ȡֵΧ:οṹProtclConfigInfoStru + */ void ProtclDelAllLink(ProtclConfigInfoStru* protcl) { - if ((NULL != protcl) && (NULL != protcl->GlobalVar)) /**/ + if ((NULL != protcl) && (NULL != protcl->GlobalVar)) /*-< Ƿǿ*/ { #ifdef USE_SFP - SfpDelAllLink(protcl->GlobalVar->gpsfpUnitInfo); + SfpDelAllLink(protcl->GlobalVar->gpsfpUnitInfo); /*-< SFPɾ·*/ #endif #ifdef USE_RSSPI - RsspiDelAllLink(protcl->GlobalVar->gpRsspUnitInfo); + RsspiDelAllLink(protcl->GlobalVar->gpRsspUnitInfo); /*-< RSSPIɾ·*/ +#endif +#ifdef USE_RP + RpDelAllLink(protcl->GlobalVar->gpRedunUnitInfo); /*-< RPɾ·*/ #endif } } @@ -1047,30 +878,27 @@ static UINT8 TwoNetRepeatParam(ProtclConfigInfoStru* protcl, UINT8* data1, UINT3 return rtnVal; } -/* -*: TwoDevRepeat -*: 豸ݱȽȥظ -*: -* ProtclConfigInfoStru* protcl Эṹ -* UINT8* data1 һ(ʽ:{4ֽڳ+{2ֽڳ+2ֽ豸ID+2ֽ߼ID+ݰ}+{N}}+{N}) -* const UINT32 data1IdxNet 1ǰ± -* const UINT32 data1Len һݳ -* UINT8* data2 (ʽ:ͬ) -* const UINT32 data2Len ݳ -* const UINT32 net2Len 2 -* const UINT32 data2StagingMaxLen ݴ󳤶 -*: -* UINT32* data1Idx 1± -* UINT32* data2Idx 2± -* UINT32* net2Idx 2± -* UINT8* data2Staging ݴ -* UINT32* data2StagingIdx ݴ± -*: -*ֵ: ɹ:1 ʧ:1 -*/ +/** + * @brief TwoDevRepeat 豸ݱȽȥظ(ֻƽ̨ʹ) + * @param protcl Эṹ ȡֵΧ:οṹProtclConfigInfoStru + * @param data1 һ(ʽ:{4ֽڳ+{2ֽڳ+2ֽ豸ID+2ֽ߼ID+ݰ}+{N}}+{N}) ȡֵΧ:ֽ + * @param data1IdxNet 1ǰ± ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data1Idx 1± ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data1Len һݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data2 (ʽ:ͬһ) ȡֵΧ:ֽ + * @param data2Idx 2± ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data2Len ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param net2Idx 2± ȡֵΧ:0x00000000-0xFFFFFFFF + * @param net2Len 2 ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data2Staging ݴ ȡֵΧ:ֽ + * @param data2StagingIdx ݴ± ȡֵΧ:0x00000000-0xFFFFFFFF + * @param data2StagingMaxLen ݴ󳤶 ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 1:ɹ :ʧ + */ static UINT8 TwoDevRepeat(ProtclConfigInfoStru* protcl, UINT8* data1, const UINT32 data1IdxNet, UINT32* data1Idx, const UINT32 data1Len, UINT8* data2, UINT32* data2Idx, const UINT32 data2Len, UINT32* net2Idx, const UINT32 net2Len, UINT8* data2Staging, UINT32* data2StagingIdx, const UINT32 data2StagingMaxLen) { - UINT8 rtnVal = 0u; /*ֵ*/ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ0*/ UINT16 dev2Len = 0u; /*豸ݳ*/ UINT32 dev2UniqueId = 0u; /*豸ΨһID(ID+߼ID)*/ UINT8 dev2oppTypePtl = 0u; /*Է豸Э*/ @@ -1078,95 +906,101 @@ static UINT8 TwoDevRepeat(ProtclConfigInfoStru* protcl, UINT8* data1, const UINT UINT32 net1Idx = 0u; /*1±*/ UINT8 funRtn = 0u; /*úֵ*/ UINT8 isErr = 0u; /*Ƿ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ - funRtn = TwoDevRepeatParam(protcl, data1, data1Idx, data2, data2Idx, net2Idx, data2Staging, data2StagingIdx); - if (1u == funRtn) /*ú*/ + funRtn = TwoDevRepeatParam(protcl, data1, data1Idx, data2, data2Idx, net2Idx, data2Staging, data2StagingIdx); /*-< 豸ݱȽȥظݺ麯*/ + if (1u == funRtn) /*-< úǷ񷵻*/ { - if (*data2Idx + 6u < data2Len) /*±Ϸ.6Ϊ2ֽ豸ݳ+4ֽ豸ΨһID*/ + if (*data2Idx + 6u < data2Len) /*-< ±Ϸ.6Ϊ2ֽ豸ݳ+4ֽ豸ΨһID*/ { - dev2Len = 2u + ShortFromChar(&data2[*data2Idx]); /*豸ݳ*/ - if ((6u < (UINT32)dev2Len) && (4u + (UINT32)dev2Len <= net2Len)) /*豸ݳȺϷ*/ + dev2Len = 2u + ShortFromChar(&data2[*data2Idx]); /*-< õ豸2ݳ*/ + if ((6u < (UINT32)dev2Len) && (4u + (UINT32)dev2Len <= net2Len)) /*-< 豸2ݳȺϷ*/ { - dev2oppTypePtl = protcl->GlobalVar->oppTypePtl[data2[*data2Idx + 2u]]; - dev2UniqueId = LongFromChar(&data2[*data2Idx + 2u]); /*豸ΨһID*/ - if ((data1IdxNet + 4u) <= data1Len) /*λúϷ*/ + dev2oppTypePtl = protcl->GlobalVar->oppTypePtl[data2[*data2Idx + 2u]]; /*-< õ豸2ԷЭ*/ + dev2UniqueId = LongFromChar(&data2[*data2Idx + 2u]); /*-< õ豸2ΨһID*/ + if ((data1IdxNet + 4u) <= data1Len) /*-< 1λǷϷ*/ { - net1Len = 4u + LongFromChar(&data1[data1IdxNet]); /**/ - if (net1Len <= data1Len) /*ȺϷ*/ + net1Len = 4u + LongFromChar(&data1[data1IdxNet]); /*-< õ1*/ + if (net1Len <= data1Len) /*-< 1ȺϷ*/ { - net1Idx += 4u; - if (4u < net1Len) /*豸*/ - { - funRtn = RepeatCheck(dev2oppTypePtl, dev2UniqueId, &data2[*data2Idx], dev2Len, data1, data1Idx, data1Len, data1IdxNet, &net1Idx, net1Len, data2Staging, data2StagingIdx, data2StagingMaxLen); - if (1u == funRtn) /*úֵ*/ - { - *net2Idx += dev2Len; - *data2Idx += dev2Len; - rtnVal = 1u; - } - else /*úֵ*/ - { - rtnVal = funRtn; - } - } - else /*豸*/ - { - if (data1IdxNet == *data1Idx) /*һ*/ - { - if (net1Idx == net1Len) /*-< ǷϷ*/ - { - *data1Idx += net1Len; /*-< һ±*/ - } - else /*ȷǷ*/ - { - isErr = 1u; /*-< ô־Ϊ1*/ - } - } - if (0u == isErr) /*-< Ƿ޴*/ - { - if (*data2StagingIdx + dev2Len <= data2StagingMaxLen) /*-< ݴǷпռ*/ - { - (void)CommonMemCpy(&data2Staging[*data2StagingIdx], data2StagingMaxLen - (*data2StagingIdx), &data2[*data2Idx], dev2Len); /*-< 豸ݸƵݴ*/ - *data2StagingIdx += dev2Len; /*-< öݴ泤豸*/ - - *net2Idx += dev2Len; /*-< ö±豸*/ - *data2Idx += dev2Len; /*-< ö±豸*/ - - rtnVal = 1u; /*-< úֵΪ1*/ - } - else /*ݴ޿ռ*/ - { - rtnVal = DATA2_STAGING_NO; /*-< úֵΪ19*/ - } - } - else /*д*/ - { - rtnVal = NO_DATA_NET1_LEN_ILLEGAL; /*-< úֵΪ20*/ - } - } + deepPro = 1u; /*-< ô־Ϊ*/ } else /*ȷǷ*/ { - rtnVal = NET1_LEN_ILLEGAL; + rtnVal = NET1_LEN_ILLEGAL; /*-< úֵΪ18*/ } } else /*λ÷Ƿ*/ { - rtnVal = DATA1_IDX_ILLEGAL; + rtnVal = DATA1_IDX_ILLEGAL; /*-< úֵΪ12*/ } } else /*豸ݳȷǷ*/ { - rtnVal = DATA2_DEV_LEN_ILLEGAL; + rtnVal = DATA2_DEV_LEN_ILLEGAL; /*-< úֵΪ11*/ } } else /*±Ƿ*/ { - rtnVal = DATA2_IDX_ILLEGAL; + rtnVal = DATA2_IDX_ILLEGAL; /*-< úֵΪ10*/ } } - return rtnVal; + if (1u == deepPro) /*-< ־ǷΪ*/ + { + net1Idx += 4u; /*-< 1±4*/ + if (4u < net1Len) /*-< 1豸*/ + { + funRtn = RepeatCheck(dev2oppTypePtl, dev2UniqueId, &data2[*data2Idx], dev2Len, data1, data1Idx, data1Len, data1IdxNet, &net1Idx, net1Len, data2Staging, data2StagingIdx, data2StagingMaxLen); /*-< ظ麯*/ + if (1u == funRtn) /*-< úֵǷ*/ + { + *net2Idx += dev2Len; /*-< 2豸2*/ + *data2Idx += dev2Len; /*-< 2豸2*/ + rtnVal = 1u; /*-< úֵΪ1*/ + } + else /*úֵ*/ + { + rtnVal = funRtn; /*-< úֵΪúֵ*/ + } + } + else /*豸*/ + { + if (data1IdxNet == *data1Idx) /*-< Ƿһ*/ + { + if (net1Idx == net1Len) /*-< ǷϷ*/ + { + *data1Idx += net1Len; /*-< һ±*/ + } + else /*ȷǷ*/ + { + isErr = 1u; /*-< ô־Ϊ1*/ + } + } + if (0u == isErr) /*-< Ƿ޴*/ + { + if (*data2StagingIdx + dev2Len <= data2StagingMaxLen) /*-< ݴǷпռ*/ + { + (void)CommonMemCpy(&data2Staging[*data2StagingIdx], data2StagingMaxLen - (*data2StagingIdx), &data2[*data2Idx], dev2Len); /*-< 豸ݸƵݴ*/ + *data2StagingIdx += dev2Len; /*-< öݴ泤豸*/ + + *net2Idx += dev2Len; /*-< ö±豸*/ + *data2Idx += dev2Len; /*-< ö±豸*/ + + rtnVal = 1u; /*-< úֵΪ1*/ + } + else /*ݴ޿ռ*/ + { + rtnVal = DATA2_STAGING_NO; /*-< úֵΪ19*/ + } + } + else /*д*/ + { + rtnVal = NO_DATA_NET1_LEN_ILLEGAL; /*-< úֵΪ20*/ + } + } + } + + return rtnVal; /*-< غֵ*/ } /* @@ -1546,4 +1380,4 @@ static UINT8 RepeatValCheckParam(UINT8* isRepeat, UINT8* devData, UINT16 devLen, } return rtnVal; -} \ No newline at end of file +} diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.h b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.h index 123e986..0bd7afa 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.h +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclInterFun.h @@ -147,19 +147,6 @@ UINT8 ProtclReceiveTcpStateFunc(UINT16 TcpStateDataLen,UINT8* pTcpStateData, Pro ************************************************************************/ UINT8 ProtclSendTcpCtrlFunc(UINT16 *pTcpCtrlDataLen,UINT8 *pTcpCtrlData, ProtclConfigInfoStru *pUnifyInfo); -/* -*: AdjustRsspiVarArray -*: RSSPI·,ָֻĶԷַ· -*: UINT8 oppIdsNum ԷID߼ID -* const UINT16 oppTypeIds[] ԷID -* const UINT16 oppLogicIds[] Է߼ID -* ProtclConfigInfoStru *pUnifyInfo ṹ -*: -*: -*ֵ: -*/ -void AdjustRsspiVarArray(UINT8 oppIdsNum, const UINT16 oppTypeIds[], const UINT16 oppLogicIds[], ProtclConfigInfoStru *pUnifyInfo); - /* *: ȡյ *: ProtclConfigInfoStru* pUnifyInfo @@ -196,14 +183,10 @@ void ProtclGetSwapData(UINT8 swapData[], const UINT16 swapDataMaxLen, ProtclConf */ void ProtclSetSwapData(UINT8 swapData[], ProtclConfigInfoStru* protcl); -/* -*: ProtclDelAllLink -*: ɾ· -*: ProtclConfigInfoStru* protcl Эṹ -*: -*: -*ֵ: -*/ +/** + * @brief ProtclDelAllLink ɾ· + * @param protcl Эṹ ȡֵΧ:οṹProtclConfigInfoStru + */ void ProtclDelAllLink(ProtclConfigInfoStru* protcl); /* diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclMgeCfg.h b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclMgeCfg.h index d30f899..d113089 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclMgeCfg.h +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclMgeCfg.h @@ -29,8 +29,8 @@ extern "C" { /****#Ͷ#*************************************************************/ /* ָ */ -typedef UINT8 (*F_INIT)(UINT8*, UINT32, UINT8*, UINT8, ProtclConfigInfoStru*); /* װ֮INIT */ -typedef UINT8 (*F_SND)(ProtclConfigInfoStru*, UINT8, UINT8*, UINT32*, UINT8*, UINT16*, UINT8*, UINT16*); /* װ֮SND */ +typedef UINT8 (*F_INIT)(UINT8*, UINT32, UINT8*, UINT16, ProtclConfigInfoStru*); /* װ֮INIT */ +typedef UINT8 (*F_SND)(ProtclConfigInfoStru*, UINT32, UINT8*, UINT32*, UINT8*, UINT16*, UINT8*, UINT16*); /* װ֮SND */ typedef UINT8 (* F_RCV)(QueueStruct*, ProtclConfigInfoStru*); /* װ֮RCV */ typedef UINT8 (* F_LNK)(UINT8,UINT8,UINT16, ProtclConfigInfoStru*); /* װ֮GETLNK */ typedef void (*F_NETPKGNUM)(ProtclConfigInfoStru*, const UINT8, const UINT8, const UINT16, UINT16*, UINT16*); /* װ֮NetsRecvPkgNum */ diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclStruct.h b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclStruct.h index 76a46d7..768309e 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol/protclStruct.h +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol/protclStruct.h @@ -71,7 +71,7 @@ extern "C" { typedef struct { PROTCL_APP_TO_STRU* pProtclAppStru; - UINT8 DevDataCnt; + UINT32 DevDataCnt; }PROTCL_SND_CFG_STRU; @@ -116,7 +116,7 @@ extern "C" { PROTCL_RCV_DATA_TYPE *RcvData; /*ʱЭݵĽṹ*/ PROTCL_APP_TO_STRU* pSndProtclAppStru; /*͵֡Ϣ*/ PROTCL_SND_CFG_STRU protclSndCfgStru[PROTCL_MGECFG_MAXCNT + 1]; /*Ϣṹ*/ - UINT8 pProtclNumBuff[PROTCL_MGECFG_MAXCNT + 1]; /*Э·*/ + UINT16 pProtclNumBuff[PROTCL_MGECFG_MAXCNT + 1]; /*Э·*/ UINT32 curDevRecordLen[PROTCL_MGECFG_MAXCNT]; /*豸ʹ־*/ DSU_PROTCL_TYPE_STRU protclTypeInfoStru; /*ѯϢṹ*/ UINT8 oppTypePtl[UINT8_MAX + 1]; /*ͨŵĶԷ豸Э*/ @@ -147,6 +147,7 @@ typedef struct UINT16 RecordArraySize; /* Э¼С */ GlobalVar *GlobalVar; /*õȫֱ*/ UINT8 MaxNumPerCycle; /*һÿЧݣӦðĵڳʼʱд*/ + UINT8 rpInterfaceType; /*RPЭӿ0x55:/ձʶΪ4ֽ;(Ĭֵ):/ձʶΪ2ֽ,ʼʱ*/ }ProtclConfigInfoStru; #ifdef __cplusplus diff --git a/TSCP/src/protocol/protocol_cbtc/common_protocol_config/protocolConfig.h b/TSCP/src/protocol/protocol_cbtc/common_protocol_config/protocolConfig.h index 7a391a9..3df043b 100644 --- a/TSCP/src/protocol/protocol_cbtc/common_protocol_config/protocolConfig.h +++ b/TSCP/src/protocol/protocol_cbtc/common_protocol_config/protocolConfig.h @@ -4,7 +4,7 @@ * Ȩ˵ * 汾 1.0 * ʱ 2019.03.07 -* +* * ļΪЭļ * ʹע @@ -19,10 +19,7 @@ /*#define CI_TASKLOCK*/ /*CItaskLock()ֶ֧߳*/ #define USE_SFP /*ʹSFP*/ -#define USE_RP /*ʹRP*/ -#define USE_RSR /*ʹRSR*/ #define USE_RSSPI /*ʹRSSPI*/ -#define USE_RSSPII /*ʹRSSPII*/ #define USE_FSFB /*ʹFSFB*/ #endif diff --git a/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.c b/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.c index b111921..63780ce 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.c +++ b/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.c @@ -17,60 +17,91 @@ #include "dquDataTypeDefine.h" #define DSU_COMM_PROTCL_STRU_SIZE 3 +#define DSU_IP_INFO_STRU_SIZE 30 /*豸IPַռֽڳ*/ DSU_BOOK_IP_INFO_STRU DsuBookIpInfoStru; /*ʼ֮ڱʼ֮ݵı*/ -/* -*: dsuIpInit -*: RPѯʼ -*: UINT8 *pFsName FSļ -*: -*: -*ֵ: 1:ɹ;0ʧ -*/ -UINT8 dsuIpInit(UINT8 *pFsName) +/** + * @brief dsuIpInit ʼȡݲ + * @param pFsName FSļ ȡֵΧֽ + * @param interfaceType ӿ ȡֵΧ:0x55:/ձʶΪ4ֽ;(Ĭֵ):/ձʶΪ2ֽ + * @return 0:ʧ 1:ɹ + */ +UINT8 dsuIpInit(UINT8* pFsName, UINT8 interfaceType) { - UINT8 rtn = 0; /*ֵ*/ - UINT8 readRtn = 0; /*ȡFSֵ*/ - UINT8 *pData = NULL; /**/ - UINT32 dataLen = 0; /*ݳ*/ - UINT32 mallocLen = 0; /*ռС*/ - UINT32 offset = 0; /*ƫ*/ - UINT32 i = 0; /*ѭ*/ + UINT8 rtn = 0U; /*-< úֵΪʧ*/ + UINT8 readRtn = 0U; /*úֵ*/ + UINT8* pData = NULL; /**/ + UINT32 dataLen = 0U; /*ݳ*/ + UINT32 mallocLen = 0U; /*ռС*/ + UINT32 offset = 0U; /*-< ±Ϊ0*/ + UINT32 i = 0U; /*ѭ*/ - if (NULL != pFsName) /*ηǿ*/ + if (NULL != pFsName) /*-< Ƿǿ*/ { - readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID, &pData, &dataLen); /*ȡ豸ͨЭ*/ - if ((1 == readRtn) && (DSU_COMM_PROTCL_STRU_SIZE <= dataLen)) + readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID, &pData, &dataLen); /*-< úȡ豸ͨЭ*/ + if ((1U == readRtn) && (DSU_COMM_PROTCL_STRU_SIZE <= dataLen) && (0U == (dataLen % DSU_COMM_PROTCL_STRU_SIZE))) /*-< úǷɹ ݳ*/ { - DsuBookIpInfoStru.CommProtclStruLen = (UINT16)(dataLen / DSU_COMM_PROTCL_STRU_SIZE); /**/ - mallocLen = sizeof(DSU_COMM_PROTCL_STRU)*(DsuBookIpInfoStru.CommProtclStruLen); /*ռС*/ - DsuBookIpInfoStru.pCommProtclStru = (DSU_COMM_PROTCL_STRU*)malloc(mallocLen); /*Ϊṹռ*/ - if (NULL != DsuBookIpInfoStru.pCommProtclStru) + DsuBookIpInfoStru.CommProtclStruLen = (UINT16)(dataLen / DSU_COMM_PROTCL_STRU_SIZE); /*-< õ*/ + mallocLen = sizeof(DSU_COMM_PROTCL_STRU) * (DsuBookIpInfoStru.CommProtclStruLen); /*-< ռС*/ + DsuBookIpInfoStru.pCommProtclStru = (DSU_COMM_PROTCL_STRU*)malloc(mallocLen); /*-< úռ*/ + if (NULL != DsuBookIpInfoStru.pCommProtclStru) /*-< úǷɹ*/ { - CommonMemSet(DsuBookIpInfoStru.pCommProtclStru, mallocLen, 0, mallocLen); + CommonMemSet(DsuBookIpInfoStru.pCommProtclStru, mallocLen, 0, mallocLen); /*-< 豸ͨЭ*/ - for (i = 0; i < DsuBookIpInfoStru.CommProtclStruLen; i++) + for (i = 0U; i < DsuBookIpInfoStru.CommProtclStruLen; i++) /*-< ±ǷС*/ { - /*1ֽڱ*/ - DsuBookIpInfoStru.pCommProtclStru[i].EmitterType = pData[offset]; - offset++; - /*1ֽڶԷ*/ - DsuBookIpInfoStru.pCommProtclStru[i].ReceptorType = pData[offset]; - offset++; - /*1ֽЭ*/ - DsuBookIpInfoStru.pCommProtclStru[i].CommuType = pData[offset]; - offset++; + DsuBookIpInfoStru.pCommProtclStru[i].EmitterType = pData[offset]; /*-< ñ豸*/ + offset++; /*-< ±1*/ + + DsuBookIpInfoStru.pCommProtclStru[i].ReceptorType = pData[offset]; /*-< öԷ豸*/ + offset++; /*-< ±1*/ + + DsuBookIpInfoStru.pCommProtclStru[i].CommuType = pData[offset]; /*-< Э*/ + offset++; /*-< ±1*/ } - if (offset == dataLen) /*豸ͨЭֵɹ*/ + if (offset == dataLen) /*-< ±Ƿڱݳ*/ { - rtn = 1; + rtn = 1U; /*-< úֵΪɹ*/ + } + } + } + + if ((1U == rtn) && (INTERFACE_TYPE_FOUR == interfaceType)) /*-< ֵǷɹ ҽӿǷ/ձʶΪ4ֽ*/ + { + rtn = 0U; /*-< úֵΪʧ*/ + offset = 0U; /*-< ±Ϊ0*/ + + readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_IP_ID, &pData, &dataLen); /*-< úȡ豸IPñ*/ + if ((1U == readRtn) && (DSU_IP_INFO_STRU_SIZE <= dataLen) && (0U == (dataLen % DSU_IP_INFO_STRU_SIZE))) /*-< úǷɹ ݳ*/ + { + DsuBookIpInfoStru.devTypeIdHlhtIdLen = (UINT16)(dataLen / DSU_IP_INFO_STRU_SIZE); /*-< õ*/ + mallocLen = sizeof(DEV_TYPE_ID_HLHT_ID) * (DsuBookIpInfoStru.devTypeIdHlhtIdLen); /*-< ռС*/ + DsuBookIpInfoStru.pDevTypeIdHlhtId = (DEV_TYPE_ID_HLHT_ID*)malloc(mallocLen); /*-< úռ*/ + if (NULL != DsuBookIpInfoStru.pDevTypeIdHlhtId) /*-< úǷɹ*/ + { + CommonMemSet(DsuBookIpInfoStru.pDevTypeIdHlhtId, mallocLen, 0, mallocLen); /*-< 豸ͨЭ*/ + + for (i = 0; i < DsuBookIpInfoStru.devTypeIdHlhtIdLen; i++) /*-< ±ǷС*/ + { + DsuBookIpInfoStru.pDevTypeIdHlhtId[i].devTypeId = ShortFromChar(&pData[offset]); /*-< 豸ID*/ + offset += 2u; /*-< ±2*/ + + DsuBookIpInfoStru.pDevTypeIdHlhtId[i].hlhtId = LongFromChar(&pData[offset]); /*-< ûͨID*/ + offset += 4u; /*-< ±4*/ + + offset += (DSU_IP_INFO_STRU_SIZE - 6u); /*-< ±г*/ + } + if (offset == dataLen) /*-< ±Ƿڱݳ*/ + { + rtn = 1U; /*-< úֵΪɹ*/ + } } } } } - return rtn; + return rtn; /*-< غֵ*/ } /* @@ -149,3 +180,53 @@ UINT8 dsurRpGetProtclType(UINT16 LocalName, UINT16 DestName,UINT8* protclTye) chReturnValue =1; return chReturnValue; } + +/** + * @brief GetHlhtId 豸IDȡͨID + * @param devTypeId 豸ID ȡֵΧ:0x0000-0xFFFF + * @return ͨID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +UINT32 GetHlhtId(UINT16 devTypeId) +{ + UINT32 rtnVal = 0U; /*-< õúֵΪ0*/ + UINT16 i = 0U; /*-< 豸IDӦͨID±Ϊ0*/ + + if (NULL != DsuBookIpInfoStru.pDevTypeIdHlhtId) /*-< 豸IDӦͨIDǷǿ*/ + { + for (i = 0U; i < DsuBookIpInfoStru.devTypeIdHlhtIdLen; i++) /*-< 豸IDӦͨID±ǷС豸IDӦͨID鳤*/ + { + if (DsuBookIpInfoStru.pDevTypeIdHlhtId[i].devTypeId == devTypeId) /*-< 豸IDӦͨID±豸IDǷڴ豸ID*/ + { + rtnVal = DsuBookIpInfoStru.pDevTypeIdHlhtId[i].hlhtId; /*-< 豸IDӦͨID±ĻͨIDֵֵ*/ + break; /*-< ˳*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} + +/** + * @brief GetDevTypeId ݻͨIDȡ豸ID + * @param hlhtId ͨID ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 豸ID ȡֵΧ:0x0000-0xFFFF + */ +UINT16 GetDevTypeId(UINT32 hlhtId) +{ + UINT16 rtnVal = 0U; /*-< õúֵΪ0*/ + UINT16 i = 0U; /*-< 豸IDӦͨID±Ϊ0*/ + + if (NULL != DsuBookIpInfoStru.pDevTypeIdHlhtId) /*-< 豸IDӦͨIDǷǿ*/ + { + for (i = 0U; i < DsuBookIpInfoStru.devTypeIdHlhtIdLen; i++) /*-< 豸IDӦͨID±ǷС豸IDӦͨID鳤*/ + { + if (DsuBookIpInfoStru.pDevTypeIdHlhtId[i].hlhtId == hlhtId) /*-< 豸IDӦͨID±ĻͨIDǷڴĻͨID*/ + { + rtnVal = DsuBookIpInfoStru.pDevTypeIdHlhtId[i].devTypeId; /*-< 豸IDӦͨID±豸IDֵֵ*/ + break; /*-< ˳*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} \ No newline at end of file diff --git a/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.h b/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.h index 802dd78..f6cefa4 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.h +++ b/TSCP/src/protocol/redun_record_cbtc/common_dqu_rp/dsuRpFunc.h @@ -20,6 +20,8 @@ extern "C" { #include "CommonTypes.h" +#define INTERFACE_TYPE_FOUR (0x55) /*ӿ0x55:/ձʶΪ4ֽ*/ + /*豸ͨЭ0x4002*/ typedef struct { @@ -28,22 +30,30 @@ extern "C" { UINT8 CommuType; /*ʹõͨЭ飬1ΪSfp2ΪRp3ΪRsr4ΪRSSPI,5ΪRSSPII*/ }DSU_COMM_PROTCL_STRU; + /*豸IDӦͨID*/ + typedef struct + { + UINT16 devTypeId; /*豸ID*/ + UINT32 hlhtId; /*ͨID*/ + }DEV_TYPE_ID_HLHT_ID; + /*豸ͨЭϢ*/ typedef struct { UINT16 CommProtclStruLen; /*豸ͨЭ*/ DSU_COMM_PROTCL_STRU *pCommProtclStru; /*豸ͨЭ*/ + + UINT16 devTypeIdHlhtIdLen; /*豸IDӦͨID鳤*/ + DEV_TYPE_ID_HLHT_ID* pDevTypeIdHlhtId; /*豸IDӦͨID*/ }DSU_BOOK_IP_INFO_STRU; - /* - *: dsuIpInit - *: RPѯʼ - *: UINT8 *pFsName FSļ - *: - *: - *ֵ: 1:ɹ;0ʧ - */ - UINT8 dsuIpInit(UINT8 *pFsName); + /** + * @brief dsuIpInit ʼȡݲ + * @param pFsName FSļ ȡֵΧֽ + * @param interfaceType ӿ ȡֵΧ:0x55:/ձʶΪ4ֽ;(Ĭֵ):/ձʶΪ2ֽ + * @return 0:ʧ 1:ɹ + */ + UINT8 dsuIpInit(UINT8* pFsName, UINT8 interfaceType); /* *: dsuRpGetDevType @@ -77,6 +87,20 @@ extern "C" { */ UINT8 dsurRpGetProtclType(UINT16 LocalName, UINT16 DestName, UINT8* protclTye); + /** + * @brief GetHlhtId 豸IDȡͨID + * @param devTypeId 豸ID ȡֵΧ:0x0000-0xFFFF + * @return ͨID ȡֵΧ:0x00000000-0xFFFFFFFF + */ + UINT32 GetHlhtId(UINT16 devTypeId); + + /** + * @brief GetDevTypeId ݻͨIDȡ豸ID + * @param hlhtId ͨID ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 豸ID ȡֵΧ:0x0000-0xFFFF + */ + UINT16 GetDevTypeId(UINT32 hlhtId); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.c b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.c index 4682be2..756bc4a 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.c +++ b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.c @@ -12,7 +12,6 @@ #include "RpInterface.h" #include "Convert.h" #include "CommonRecord.h" -#include "CommonStack.h" #include "RpPlatform.h" #include "RpDeclare.h" #include "dsuRpFunc.h" @@ -20,156 +19,157 @@ /*崻¼Ϣ*/ UINT32 gRpErrorInfo; -UINT8 RpMemSet(UINT8 *pDestAdd, UINT16 Len, UINT8 Val); +UINT8 RpMemSet(UINT8 *pDestAdd, UINT16 Len, UINT8 Val); +static UINT8 StackInitial(CommonStackRp* pStack, UINT16 TotalSize); +static UINT8 StackPop(CommonStackRp* pStack, STACK_DATA_TYPE_RP* pData); +static UINT8 StackPush(CommonStackRp* pStack, STACK_DATA_TYPE_RP Data); +static UINT8 StackFree(CommonStackRp* pStack); -/************************************************************************* -* : -* ͨúʵڴռ -* ˵: -* [in]RP_INFO_STRU *pRpStruct ͬһṹ; -* ֵ: -* return 1 -* return 0쳣 -**************************************************************************/ -UINT8 RpInit(UINT8* fileName,RP_INFO_STRU *pRpStruct)/* %RELAX */ +/** + * @brief RpInit ʼRP + * @param fileName FSļ ȡֵΧ:ֽ + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ +UINT8 RpInit(UINT8* fileName, RP_INFO_STRU* pRpStruct)/* %RELAX */ { - UINT32 temp; /*¼ҪĿռС*/ - UINT8 ret = 0; /*ֵ*/ + UINT32 temp; /*¼ҪĿռС*/ + UINT8 ret = 0; /*-< úֵΪʧ*/ - if(pRpStruct == NULL) /* ǿռ */ + if (pRpStruct == NULL) /*-< Ƿǿ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /* */ + /*-< */ } - ret = dsuIpInit(fileName); - if (ret == 0) + ret = dsuIpInit(fileName, pRpStruct->interfaceType); /*-< óʼȡݲ*/ + if (ret == 0) /*-< úǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } /*ʼڲݴ*/ - temp = pRpStruct->OutputSize>pRpStruct->InputSize?pRpStruct->OutputSize:pRpStruct->InputSize; - temp += 20; - pRpStruct->Buff_Rp = (UINT8 *)malloc(temp); - if(pRpStruct->Buff_Rp == NULL) + temp = pRpStruct->OutputSize > pRpStruct->InputSize ? pRpStruct->OutputSize : pRpStruct->InputSize; /*-< Ӧøݳ*/ + temp += 20; /*-< Ӧøݳ20*/ + pRpStruct->Buff_Rp = (UINT8*)malloc(temp); /*-< úӦøݿռ*/ + if (pRpStruct->Buff_Rp == NULL) /*-< úǷʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { /*޲*/ - CommonMemSet(pRpStruct->Buff_Rp,sizeof(UINT8)*temp,0,sizeof(UINT8)*temp); + CommonMemSet(pRpStruct->Buff_Rp, sizeof(UINT8) * temp, 0, sizeof(UINT8) * temp); /*-< Ӧø*/ } - + /*Ϊ¼ռ*/ - pRpStruct->RecordArray = (UINT8 *)malloc(pRpStruct->RecordArraySize+2); - if(pRpStruct->RecordArray == NULL) + pRpStruct->RecordArray = (UINT8*)malloc(pRpStruct->RecordArraySize + 2); /*-< ú־¼ռ*/ + if (pRpStruct->RecordArray == NULL) /*-< úǷʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - CommonMemSet(pRpStruct->RecordArray,sizeof(UINT8)*(pRpStruct->RecordArraySize+2),0,sizeof(UINT8)*(pRpStruct->RecordArraySize+2)); + CommonMemSet(pRpStruct->RecordArray, sizeof(UINT8) * (pRpStruct->RecordArraySize + 2), 0, sizeof(UINT8) * (pRpStruct->RecordArraySize + 2)); /*-< ־¼*/ } /*ΪAppArrayռ*/ - pRpStruct->AppArraySize= (pRpStruct->OutputSize+11+26)*(pRpStruct->MaxNumPerCycle)*(pRpStruct->MaxNumLink)+2; - pRpStruct->AppArray = (UINT8 *)malloc(pRpStruct->AppArraySize); - if(pRpStruct->AppArray == NULL) + pRpStruct->AppArraySize = (pRpStruct->OutputSize + 15 + 26) * (pRpStruct->MaxNumPerCycle) * (pRpStruct->MaxNumLink) + 2; /*-< ʱЭӦݳ*/ + pRpStruct->AppArray = (UINT8*)malloc(pRpStruct->AppArraySize); /*-< úЭӦݿռ*/ + if (pRpStruct->AppArray == NULL) /*-< úǷʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - CommonMemSet(pRpStruct->AppArray,sizeof(UINT8)*pRpStruct->AppArraySize,0,sizeof(UINT8)*pRpStruct->AppArraySize); + CommonMemSet(pRpStruct->AppArray, sizeof(UINT8) * pRpStruct->AppArraySize, 0, sizeof(UINT8) * pRpStruct->AppArraySize); /*-< ЭӦ*/ } /*ΪVarArrayռ*/ - pRpStruct->VarArraySize= 68 * (pRpStruct->MaxNumLink+2); /*68Ϊ·Ϣ*/ - pRpStruct->VarArray = (UINT8 *)malloc(pRpStruct->VarArraySize); - if(pRpStruct->VarArray == NULL) + pRpStruct->VarArraySize = 68 * (pRpStruct->MaxNumLink + 2); /*-< ·ݳ*/ + pRpStruct->VarArray = (UINT8*)malloc(pRpStruct->VarArraySize); /*-< ú·ݿռ*/ + if (pRpStruct->VarArray == NULL) /*-< úǷʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - CommonMemSet(pRpStruct->VarArray,sizeof(UINT8)*pRpStruct->VarArraySize,0,sizeof(UINT8)*pRpStruct->VarArraySize); + CommonMemSet(pRpStruct->VarArray, sizeof(UINT8) * pRpStruct->VarArraySize, 0, sizeof(UINT8) * pRpStruct->VarArraySize); /*-< ·*/ } /*ΪӦõĶDataToAppռ*/ - pRpStruct->DataToAppSize = (pRpStruct->InputSize + 4)*pRpStruct->MaxNumPerCycle*pRpStruct->MaxNumLink; - ret = QueueInitial(&pRpStruct->DataToApp, pRpStruct->DataToAppSize); - if(ret == 0) + pRpStruct->DataToAppSize = (pRpStruct->InputSize + 4) * pRpStruct->MaxNumPerCycle * pRpStruct->MaxNumLink; /*-< ʱЭӦöг*/ + ret = QueueInitial(&pRpStruct->DataToApp, pRpStruct->DataToAppSize); /*-< úʼЭӦö,ֵֵ*/ + if (ret == 0) /*-< ֵǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*-< ޲*/ } /*ΪӦøĶOutputDataQueueռ*/ - pRpStruct->OutputDataQueueSize = (pRpStruct->OutputSize + 4)*pRpStruct->MaxNumPerCycle*pRpStruct->MaxNumLink; - ret = QueueInitial(&pRpStruct->OutputDataQueue, pRpStruct->OutputDataQueueSize); - if(ret == 0) + pRpStruct->OutputDataQueueSize = (pRpStruct->OutputSize + 4) * pRpStruct->MaxNumPerCycle * pRpStruct->MaxNumLink; /*-< ʱӦøЭг*/ + ret = QueueInitial(&pRpStruct->OutputDataQueue, pRpStruct->OutputDataQueueSize); /*-< úʼʱӦøЭ,ֵֵ*/ + if (ret == 0) /*-< ֵǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*-< ޲*/ } /*ΪӦøĶOutnetQueueAռ*/ - pRpStruct->OutnetQueueSize = (pRpStruct->InputSize + 2 + 11)*pRpStruct->MaxNumPerCycle*pRpStruct->MaxNumLink; - ret = QueueInitial(&pRpStruct->OutnetQueueA, pRpStruct->OutnetQueueSize); - if(ret == 0) + pRpStruct->OutnetQueueSize = (pRpStruct->InputSize + 2 + 15) * pRpStruct->MaxNumPerCycle * pRpStruct->MaxNumLink; /*-< ʱӦøЭ1*/ + ret = QueueInitial(&pRpStruct->OutnetQueueA, pRpStruct->OutnetQueueSize); /*-< úʼʱӦøЭ1,ֵֵ*/ + if (ret == 0) /*-< ֵǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*-< ޲*/ } /*ΪӦøĶOutnetQueueBռ*/ - pRpStruct->OutnetQueueSize = (pRpStruct->InputSize + 2 +11)*pRpStruct->MaxNumPerCycle*pRpStruct->MaxNumLink; - ret = QueueInitial(&pRpStruct->OutnetQueueB, pRpStruct->OutnetQueueSize); - if(ret == 0) + pRpStruct->OutnetQueueSize = (pRpStruct->InputSize + 2 + 15) * pRpStruct->MaxNumPerCycle * pRpStruct->MaxNumLink; /*-< ʱӦøЭ2*/ + ret = QueueInitial(&pRpStruct->OutnetQueueB, pRpStruct->OutnetQueueSize); /*-< úʼʱӦøЭ2,ֵֵ*/ + if (ret == 0) /*-< ֵǷʧ*/ { - return ret; + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*-< ޲*/ } /*кŻջռ*/ - StackInitial(&pRpStruct->SnLnkStack, (UINT16)pRpStruct->MaxNumLink); + StackInitial(&pRpStruct->SnLnkStack, (UINT16)pRpStruct->MaxNumLink); /*-< úʼ·ջ*/ /*·ڵ洢ռ*/ - if(!Rp_init_SnStack(pRpStruct)) + if (!Rp_init_SnStack(pRpStruct)) /*-< óʼкŻջ*/ { - ret = 0; - return ret; - } + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ + } else { - /*޲*/ + /*-< ޲*/ } - pRpStruct->SnLinkhead = NULL; + pRpStruct->SnLinkhead = NULL; /*-< ·ջΪ*/ - ret = 1; - return ret; + ret = 1; /*-< úֵΪɹ*/ + return ret; /*-< غֵ*/ } /*********************************************************************** @@ -200,7 +200,7 @@ UINT8 RpLnkDelete(UINT16 devName,RP_INFO_STRU *pdelDevSn) curIndex->DestDevName = 0; curIndex->SnLink_Info.DestDevName = 0; RpMemSet((UINT8 *)curIndex->SnLink_Info.SnArray,sizeof(curIndex->SnLink_Info.SnArray),0); - if( StackPush(&pdelDevSn->SnLnkStack,(UINT32)curIndex) == 0) + if( StackPush(&pdelDevSn->SnLnkStack,(STACK_DATA_TYPE_RP)curIndex) == 0) { ret = 0; return ret; @@ -217,7 +217,7 @@ UINT8 RpLnkDelete(UINT16 devName,RP_INFO_STRU *pdelDevSn) curIndex->DestDevName = 0; curIndex->SnLink_Info.DestDevName = 0; RpMemSet((UINT8 *)curIndex->SnLink_Info.SnArray,sizeof(curIndex->SnLink_Info.SnArray),0); - if( StackPush(&pdelDevSn->SnLnkStack,(UINT32)curIndex) == 0) + if( StackPush(&pdelDevSn->SnLnkStack,(STACK_DATA_TYPE_RP)curIndex) == 0) { ret = 0; return ret; @@ -315,522 +315,538 @@ UINT8 RpFreeSpace(RP_INFO_STRU *pRpStruct)/* %RELAX */ return ret; } -/***************************************************************************************** -*: -* ӺݣдDataToApp -*˵: -* RP_INFO_STRU *pRpStruct ͳһṹ -*ֵ: -* ȷ1󷵻0; -*****************************************************************************************/ -UINT8 RpReceive(RP_INFO_STRU *pRpStruct)/* %RELAX */ +/** + * @brief RpReceive RP봦 + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ +UINT8 RpReceive(RP_INFO_STRU* pRpStruct)/* %RELAX */ { - UINT16 Length; /*¼ݳ*/ - UINT16 LocalDevNameInFrame; - UINT16 DestDevNameInFrame; - UINT32 SnInFrame; /*¼к*/ - UINT8 len[10]; - UINT8 temp[10]; + /** ֲ*/ + UINT16 Length; /*¼ݳ*/ + UINT16 LocalDevNameInFrame; /*ID*/ + UINT16 DestDevNameInFrame; /*ԷID*/ + UINT32 SnInFrame; /*к*/ + UINT8 len[10]; /*10ֽڳ*/ + UINT8 temp[10]; /*10ֽʱ*/ UINT16 lenthofData; /*ݳ*/ - UINT16 lenthofRcvA = 0; - UINT16 lenthofRcvB = 0;/*յÿ֡ݵij(len[2]ַתõ)*/ - UINT8 ToBeContinue = 0; /*1 Դ֡ݣֱӴ֡ݣ0*/ - UINT8 QueueReadFlag; /*¼ϴζȡǺ/еĸ*/ - UINT8 QueueAvailable; /*ȡʶ*/ - UINT8 RVQueueRead; /*жȡֵ*/ - UINT8 RcvQueueReadLenth; - UINT8 i = 0; - RpSNLINK_STRU* CurrentSnNode; - UINT8 ret; - UINT32 QueueCnt; + UINT16 lenthofRcvA = 0; /*յAг*/ + UINT16 lenthofRcvB = 0; /*յBг*/ + UINT8 ToBeContinue = 0; /*-< üִб־Ϊ0 1 Դ֡ݣֱӴ֡ݣ0*/ + UINT8 QueueReadFlag; /*¼ϴζȡǺ/еĸ*/ + UINT8 QueueAvailable; /*ȡʶ*/ + UINT8 RVQueueRead; /*жȡֵ*/ + UINT8 RcvQueueReadLenth; /*նг*/ + UINT8 i = 0; /*ѭ*/ + RpSNLINK_STRU* CurrentSnNode; /*Żб*/ + UINT8 ret; /*-< úֵΪ0*/ + UINT32 QueueCnt; /**/ + UINT8 fitFrameLen = 0u; /*-< ù̶֡Ϊ0*/ + UINT32 oppHlhtId = 0u; /*ԷͨID*/ + UINT32 locHlhtId = 0u; /*ͨID*/ + UINT8 oppTypeIdArr[2] = { 0 }; /*ԷIDֽ*/ - QueueReadFlag = 0x55; - RVQueueRead = 0xFF; - QueueAvailable = 0; /*пñ־*/ - CurrentSnNode = NULL; - - if(pRpStruct == NULL) /* ǿռ */ - { - ret = 0; - return ret; - } - else - { - /* */ - } + QueueReadFlag = 0x55; /*-< Ƿ־Ϊ*/ + RVQueueRead = 0xFF; /*-< նбʶΪ*/ + QueueAvailable = 0; /*-< пñ־*/ + CurrentSnNode = NULL; /*-< ŻбΪ*/ - ShortToChar(0, pRpStruct->RecordArray); + if (pRpStruct == NULL) /*-< ηǿռ*/ + { + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ + } + else + { + /*-< */ + } + + ShortToChar(0, pRpStruct->RecordArray); /*-< ־¼*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Cycle:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"LName:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->LocalType,1); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->LocalID,1); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Rcv:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Cycle:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "LName:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->LocalType, 1); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->LocalID, 1); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Rcv:\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*ڿʼ־*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0xf0); - /*뵥Ԫʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0xf2); - /*TypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->LocalID); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0xf0); /*-< ¼ڿʼʶ־*/ + /*뵥Ԫʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0xf2); /*-< ¼봦־*/ + /*TypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ #endif - for(i = 0; i < 10; i++) + for (i = 0; i < 10; i++) /*-< ǰѭ±ǷС10*/ { - len[i] = 0; + len[i] = 0; /*-< óֵΪ0*/ } - while(1) + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ { - QueueAvailable = 0; + fitFrameLen = 15u; /*-< ֡Ϊ15*/ + } + else + { + fitFrameLen = 11u; /*-< ֡Ϊ11*/ + } + + while (1) /*-< Ƿѭ*/ + { + QueueAvailable = 0; /*-< öв*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"IN:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "IN:\n"); #endif /*жϺǷ*/ - if(QueueScan(5,len,&pRpStruct->OutnetQueueA) != 0) /*ɨȣ4ֽ*/ - { - lenthofRcvA = ShortFromChar(len);/*֡ij*/ - lenthofData = ShortFromChar(&len[3]);/*ݵij*/ - - if((lenthofRcvA > (pRpStruct->InputSize + 11))||(lenthofRcvA != (lenthofData + 11))) + if (QueueScan(5, len, &pRpStruct->OutnetQueueA) != 0) /*-< AǷɨ*/ + { + lenthofRcvA = ShortFromChar(len); /*-< õ֡ij*/ + lenthofData = ShortFromChar(&len[3]); /*-< õݵij*/ + + if ((lenthofRcvA > (pRpStruct->InputSize + fitFrameLen)) || (lenthofRcvA != (lenthofData + fitFrameLen))) /*-< ǷǷ*/ { /*յݳ,ǴӶж֡ݣһ֡Ķȡ*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_INTEGRITY_R); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_INTEGRITY_R); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_INTEGRITY_R); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_INTEGRITY_R); /*-< ¼AгȷǷ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_INTEGRITY_R; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_INTEGRITY_R; /*-< ¼*/ /*lenthofRcvA+2ֽݴӶж´ζȡ*/ - QueueElementDiscard( (UINT16)(lenthofRcvA + 2), &pRpStruct->OutnetQueueA); + QueueElementDiscard((UINT16)(lenthofRcvA + 2), &pRpStruct->OutnetQueueA); /*-< úɾд˳*/ - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ + ToBeContinue = 1; /*-< Ƿѭ־Ϊ*/ } else { - QueueAvailable |= 0x0F; /*пñ־*/ - } + QueueAvailable |= 0x0F; /*-< Aпñ־*/ + } } else { - /*޲*/ + /*-< ޲*/ } /*жǷ*/ - if(QueueScan(5,len,&pRpStruct->OutnetQueueB) != 0) /*ɨȣ4ֽ*/ - { - lenthofRcvB = ShortFromChar(len);/*֡ij*/ - lenthofData = ShortFromChar(&len[3]);/*ݵij*/ - - if((lenthofRcvB> (pRpStruct->InputSize + 11))||(lenthofRcvB != (lenthofData + 11))) + if (QueueScan(5, len, &pRpStruct->OutnetQueueB) != 0) /*-< BǷɨ*/ + { + lenthofRcvB = ShortFromChar(len); /*-< õ֡ij*/ + lenthofData = ShortFromChar(&len[3]); /*-< õݵij*/ + + if ((lenthofRcvB > (pRpStruct->InputSize + fitFrameLen)) || (lenthofRcvB != (lenthofData + fitFrameLen))) /*-< ǷǷ*/ { /*¼¼յݳ*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_INTEGRITY_B); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_INTEGRITY_B); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_INTEGRITY_B); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_INTEGRITY_B); /*-< ¼BгȷǷ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_INTEGRITY_B; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_INTEGRITY_B; /*-< ¼*/ /*lenthofRcvB+2ֽݴӶж´ζȡ*/ - QueueElementDiscard( (UINT16)(lenthofRcvB + 2), &pRpStruct->OutnetQueueB); + QueueElementDiscard((UINT16)(lenthofRcvB + 2), &pRpStruct->OutnetQueueB); /*-< úɾд˳*/ - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ + ToBeContinue = 1; /*-< Ƿѭ־Ϊ*/ } else { - QueueAvailable |= 0xF0; /*пñ־*/ + QueueAvailable |= 0xF0; /*-< Aпñ־*/ } } else { - /*޲*/ + /*-< ޲*/ } - if(ToBeContinue == 0) + if (ToBeContinue == 0) /*-< Ƿѭ־ǷΪ*/ { - if(QueueAvailable == 0xFF)/*жɶ*/ - { - if(QueueReadFlag == 0x55)/*ϴζĶǺ*/ + if (QueueAvailable == 0xFF) /*-< Ƿж*/ + { + if (QueueReadFlag == 0x55) /*-< ϴζĶǷA*/ { /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueB); - if(RcvQueueReadLenth != 1) + RcvQueueReadLenth = QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueB); /*-< úȡB2ֽڳ*/ + if (RcvQueueReadLenth != 1) /*-< úǷʧ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼Bгʧ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; /*-< ô*/ - break; + break; /*-< ˳*/ } - RVQueueRead = QueueRead( (UINT16)(lenthofRcvB),pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueB); - QueueReadFlag = 0xAA;/*ζ*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvB), pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueB); /*-< úȡBг*/ + QueueReadFlag = 0xAA; /*-< ôζĶΪB*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"BNet:"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "BNet:"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x40|0x0A); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x40 | 0x0A); /*-< ¼Bб־־*/ #endif } else { /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueA); - if(RcvQueueReadLenth != 1) + RcvQueueReadLenth = QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueA); /*-< úȡA2ֽڳ*/ + if (RcvQueueReadLenth != 1) /*-< úǷʧ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼Aгʧ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; /*-< ô*/ - break; + break; /*-< ˳*/ } - RVQueueRead = QueueRead( (UINT16)(lenthofRcvA),pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueA); - QueueReadFlag = 0x55;/*ζ*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvA), pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueA); /*-< úȡAг*/ + QueueReadFlag = 0x55; /*-< ôζĶΪA*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"RNet:"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "RNet:"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x40|0x05); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x40 | 0x05); /*-< ¼Aб־־*/ #endif - } - } - else if(QueueAvailable == 0x0F)/*пɶ*/ + } + } + else if (QueueAvailable == 0x0F) /*-< ǷAж*/ { /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueA); - if(RcvQueueReadLenth != 1) + RcvQueueReadLenth = QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueA); /*-< úȡA2ֽڳ*/ + if (RcvQueueReadLenth != 1) /*-< úǷʧ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼Aгʧ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; /*-< ô*/ - break;/*˳ѭ*/ + break; /*-< ˳*/ } - RVQueueRead = QueueRead( (UINT16)(lenthofRcvA),pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueA); - QueueReadFlag = 0x55;/*ζǺ*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvA), pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueA); /*-< ¼Aб־־*/ + QueueReadFlag = 0x55; /*-< ôζĶΪA*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"RNet:"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "RNet:"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x40|0x05); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x40 | 0x05); /*-< ¼Aб־־*/ #endif - } - else if(QueueAvailable == 0xF0)/*пɶ*/ + } + else if (QueueAvailable == 0xF0) /*-< ǷBж*/ { /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueB); - if(RcvQueueReadLenth != 1) + RcvQueueReadLenth = QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueB); /*-< úȡB2ֽڳ*/ + if (RcvQueueReadLenth != 1) /*-< úǷʧ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼Bгʧ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; /*-< ô*/ - break;/*˳ѭ*/ + break; /*-< ˳*/ } - RVQueueRead = QueueRead( (UINT16)(lenthofRcvB),pRpStruct->Buff_Rp,&pRpStruct->OutnetQueueB); - QueueReadFlag = 0xAA;/*ζ*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvB), pRpStruct->Buff_Rp, &pRpStruct->OutnetQueueB); /*-< úȡBг*/ + QueueReadFlag = 0xAA; /*-< ôζĶΪB*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"BNet:"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "BNet:"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x40|0x0A); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x40 | 0x0A); /*-< ¼Bб־־*/ #endif - } + } else { - break; /*˳whileѭ*/ + break; /*-< ˳*/ } - if(RVQueueRead == 1) /*жǷԶ֡*/ + if (RVQueueRead == 1) /*-< жǷԶ֡*/ { - if(pRpStruct->Buff_Rp[0] != 0xFF) + if (pRpStruct->Buff_Rp[0] != 0xFF) /*-< ǷRP֡ʶ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_EDITION_ILLEGAL|RP_ERROR_NULL); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_EDITION_ILLEGAL | RP_ERROR_NULL); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_EDITION_ILLEGAL|RP_ERROR_NULL); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_EDITION_ILLEGAL | RP_ERROR_NULL); /*-< ¼RP֡ʶ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_EDITION_ILLEGAL; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_EDITION_ILLEGAL; /*-< ô*/ } else { - Length = ShortFromChar(&pRpStruct->Buff_Rp[1]); + Length = ShortFromChar(&pRpStruct->Buff_Rp[1]); /*-< õ֡*/ - DestDevNameInFrame = ShortFromChar(&pRpStruct->Buff_Rp[3]); - LocalDevNameInFrame = ShortFromChar(&pRpStruct->Buff_Rp[5]); - if(LocalDevNameInFrame != pRpStruct->LocalType*0x100 + pRpStruct->LocalID) + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + oppHlhtId = LongFromChar(&pRpStruct->Buff_Rp[3]); /*-< õԷͨID*/ + locHlhtId = LongFromChar(&pRpStruct->Buff_Rp[7]); /*-< õͨID*/ + DestDevNameInFrame = GetDevTypeId(oppHlhtId); /*-< õԷ豸ID*/ + LocalDevNameInFrame = GetDevTypeId(locHlhtId); /*-< õ豸ID*/ + + SnInFrame = LongFromChar(&pRpStruct->Buff_Rp[12]); /*-< õк*/ + } + else + { + DestDevNameInFrame = ShortFromChar(&pRpStruct->Buff_Rp[3]); /*-< õԷ豸ID*/ + LocalDevNameInFrame = ShortFromChar(&pRpStruct->Buff_Rp[5]); /*-< õ豸ID*/ + + SnInFrame = LongFromChar(&pRpStruct->Buff_Rp[7]); /*-< õк*/ + } + ShortToChar(DestDevNameInFrame, &oppTypeIdArr[0]); /*-< öԷIDֽ*/ + + if (LocalDevNameInFrame != pRpStruct->LocalType * 0x100 + pRpStruct->LocalID) /*-< Ƿ񷢱*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_DESTNAME_ERR|RP_ERROR_NULL); - PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize," \n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_DESTNAME_ERR | RP_ERROR_NULL); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " \n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_DESTNAME_ERR|RP_ERROR_NULL); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_DESTNAME_ERR | RP_ERROR_NULL); /*-< ¼ݷǷ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_DESTNAME_ERR; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_DESTNAME_ERR; /*-< ô*/ } else { - SnInFrame = LongFromChar(&pRpStruct->Buff_Rp[7]); #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DN:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,DestDevNameInFrame); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"LN:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,LocalDevNameInFrame); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,SnInFrame); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[11],2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DN:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, DestDevNameInFrame); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "LN:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, LocalDevNameInFrame); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, SnInFrame); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[fitFrameLen], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - /*¼շ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[5]); - /*¼շID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[6]); - /*¼ͷ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[3]); - /*¼ͷID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[4]); + /*¼շID*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, LocalDevNameInFrame); /*-< ¼ID־*/ + /*¼ͷID*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, DestDevNameInFrame); /*-< ¼ԷID־*/ /*¼ͷSn*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,SnInFrame); + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, SnInFrame); /*-< ¼к־*/ /*¼Ӧݳ*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); /*-< ¼ݳ־*/ #endif - CurrentSnNode = Rp_SearchSnLnk(DestDevNameInFrame,pRpStruct); - if(CurrentSnNode == NULL) + CurrentSnNode = Rp_SearchSnLnk(DestDevNameInFrame, pRpStruct); /*-< úѯ豸ͨ·*/ + if (CurrentSnNode == NULL) /*-< úǷʧ*/ { - CurrentSnNode = Rp_InsertLnk(DestDevNameInFrame,pRpStruct); - if(CurrentSnNode != NULL) + CurrentSnNode = Rp_InsertLnk(DestDevNameInFrame, pRpStruct); /*-< ú·*/ + if (CurrentSnNode != NULL) /*-< úǷɹ*/ { - if(SnInFrame != 0x00) + if (SnInFrame != 0x00) /*-< Ƿ0*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_SN_ILLEGAL|RP_ERROR_NULL); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_SN_ILLEGAL | RP_ERROR_NULL); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_SN_ILLEGAL|RP_ERROR_NULL); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_SN_ILLEGAL | RP_ERROR_NULL); /*-< ¼־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_SN_ILLEGAL; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_SN_ILLEGAL; /*-< ô*/ - CurrentSnNode->SnLink_Info.SnArray[CurrentSnNode->SnLink_Info.SnArrayIndex++] = SnInFrame; - QueueCnt = QueueStatus(&pRpStruct->DataToApp); - QueueCnt = pRpStruct->DataToApp.qsize - QueueCnt; - if(QueueCnt >= (UINT32)(2 + 2 + Length)) + CurrentSnNode->SnLink_Info.SnArray[CurrentSnNode->SnLink_Info.SnArrayIndex++] = SnInFrame; /*-< ŵ·*/ + QueueCnt = QueueStatus(&pRpStruct->DataToApp); /*-< õЭӦöпռ䳤*/ + QueueCnt = pRpStruct->DataToApp.qsize - QueueCnt; /*-< õЭӦöпռʣ೤*/ + if (QueueCnt >= (UINT32)(2 + 2 + Length)) /*-< õЭӦöпռʣ೤Ƿ*/ { - ShortToChar((UINT16)(Length + 2), temp); - ret =QueueWrite(2, temp, &pRpStruct->DataToApp); + ShortToChar((UINT16)(Length + 2), temp); /*-< óֵֽ*/ + (void)QueueWrite(2, temp, &pRpStruct->DataToApp); /*-< дֽ鵽ЭӦö*/ - ret =QueueWrite(1, &pRpStruct->Buff_Rp[3], &pRpStruct->DataToApp); + (void)QueueWrite(2, &oppTypeIdArr[0], &pRpStruct->DataToApp); /*-< д豸IDֽ鵽ЭӦö*/ - ret =QueueWrite(1, &pRpStruct->Buff_Rp[4], &pRpStruct->DataToApp); + (void)QueueWrite(Length, &pRpStruct->Buff_Rp[fitFrameLen], &pRpStruct->DataToApp); /*-< дӦݵЭӦö*/ - ret =QueueWrite(Length, &pRpStruct->Buff_Rp[11], &pRpStruct->DataToApp); #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"SrcNm:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[3],2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[11],2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "SrcNm:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[3], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[fitFrameLen], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼дݵϢʼ־*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*¼ͷ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[3]); - /*¼ͷID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[4]); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼дӦݱ־־*/ + /*¼ͷID*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, DestDevNameInFrame); /*-< ¼ԷID־*/ /*¼Ӧݳ*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); /*-< ¼ݳ־*/ #endif } else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_QUEUE_OVLOAD|RP_ERROR_NULL); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_QUEUE_OVLOAD | RP_ERROR_NULL); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_QUEUE_OVLOAD|RP_ERROR_NULL); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_QUEUE_OVLOAD | RP_ERROR_NULL); /*-< ¼пռ䲻־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; /*-< ô*/ } } else { - /*֡*/ + /*-< ֡*/ } } else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"E:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_ERR|RP_RECEIVE|RP_ERROR_NULL|RP_LNK_POP); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "E:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_ERR | RP_RECEIVE | RP_ERROR_NULL | RP_LNK_POP); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_ERR|RP_RECEIVE|RP_ERROR_NULL|RP_LNK_POP); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_ERR | RP_RECEIVE | RP_ERROR_NULL | RP_LNK_POP); /*-< ¼·ʧ־*/ #endif - gRpErrorInfo |= RP_ERR_RECEIVE_RP_LNK_POP; + gRpErrorInfo |= RP_ERR_RECEIVE_RP_LNK_POP; /*-< ô*/ - } + } } else { - if(SnInFrame == 0) + if (SnInFrame == 0) /*-< ǷΪ0*/ { - /*ýڵк飬0*/ - for(i = 0; i < 15; i++) + /*ýڵк飬0*/ + for (i = 0; i < 15; i++) /*-< ±ǷС15*/ { - CurrentSnNode->SnLink_Info.SnArray[i] = 0; + CurrentSnNode->SnLink_Info.SnArray[i] = 0; /*-< ±ֵΪ0*/ } - CurrentSnNode->SnLink_Info.SnArrayIndex = 0; + CurrentSnNode->SnLink_Info.SnArrayIndex = 0; /*-< ±Ϊ0*/ } else { - ret = Rp_IsSnExit(SnInFrame, CurrentSnNode); - if(ret == 1) + ret = Rp_IsSnExit(SnInFrame, CurrentSnNode); /*-< жкڻǷѾ洢*/ + if (ret == 1) /*-< úǷʧ*/ { - /*֡*/ + /*-< ֡*/ } else { - if(CurrentSnNode->SnLink_Info.SnArrayIndex > 14) + if (CurrentSnNode->SnLink_Info.SnArrayIndex > 14) /*-< ±Ƿ14*/ { - CurrentSnNode->SnLink_Info.SnArrayIndex = 0; + CurrentSnNode->SnLink_Info.SnArrayIndex = 0; /*-< ±Ϊ0*/ } - CurrentSnNode->SnLink_Info.SnArray[CurrentSnNode->SnLink_Info.SnArrayIndex++] = SnInFrame; - QueueCnt = QueueStatus(&pRpStruct->DataToApp); - QueueCnt = pRpStruct->DataToApp.qsize - QueueCnt; - if(QueueCnt >= (UINT32)(2 + 2 + Length)) + CurrentSnNode->SnLink_Info.SnArray[CurrentSnNode->SnLink_Info.SnArrayIndex++] = SnInFrame; /*-< 鵱ǰ±Ϊǰ*/ + QueueCnt = QueueStatus(&pRpStruct->DataToApp); /*-< õЭӦöпռ䳤*/ + QueueCnt = pRpStruct->DataToApp.qsize - QueueCnt; /*-< õЭӦöпռʣ೤*/ + if (QueueCnt >= (UINT32)(2 + 2 + Length)) /*-< õЭӦöпռʣ೤Ƿ*/ { - ShortToChar((UINT16)(Length + 2), temp); - ret =QueueWrite(2, temp, &pRpStruct->DataToApp); + ShortToChar((UINT16)(Length + 2), temp); /*-< óֵֽ*/ + (void)QueueWrite(2, temp, &pRpStruct->DataToApp); /*-< дֽ鵽ЭӦö*/ - ret =QueueWrite(1, &pRpStruct->Buff_Rp[3], &pRpStruct->DataToApp); + (void)QueueWrite(2, &oppTypeIdArr[0], &pRpStruct->DataToApp); /*-< д豸IDֽ鵽ЭӦö*/ - ret =QueueWrite(1, &pRpStruct->Buff_Rp[4], &pRpStruct->DataToApp); + (void)QueueWrite(Length, &pRpStruct->Buff_Rp[fitFrameLen], &pRpStruct->DataToApp); /*-< дӦݵЭӦö*/ - ret =QueueWrite(Length, &pRpStruct->Buff_Rp[11], &pRpStruct->DataToApp); #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"SrcNm:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[3],2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[11],2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "SrcNm:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[3], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[fitFrameLen], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼дݵϢʼ־*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*¼ͷ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[3]); - /*¼ͷID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->Buff_Rp[4]); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼дӦݱ־־*/ + /*¼ͷID*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, DestDevNameInFrame); /*-< ¼ԷID־*/ /*¼Ӧݳ*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); /*-< ¼ݳ־*/ #endif } else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_QUEUE_OVLOAD|RP_ERROR_NULL); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_QUEUE_OVLOAD | RP_ERROR_NULL); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_QUEUE_OVLOAD|RP_ERROR_NULL); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_QUEUE_OVLOAD | RP_ERROR_NULL); /*-< ¼пռ䲻־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; /*-< ô*/ } } @@ -842,539 +858,599 @@ UINT8 RpReceive(RP_INFO_STRU *pRpStruct)/* %RELAX */ else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_RECEIVE|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_RECEIVE | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼пռ䲻־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_READ; /*-< ô*/ - break; + break; /*-< ˳*/ } } else { - ToBeContinue = 0; + ToBeContinue = 0; /*-< üѭ־ǷΪ*/ } } - ret = 1; - return ret; + ret = 1; /*-< úֵΪɹ*/ + return ret; /*-< غֵ*/ } -/***************************************************************************************** -*: -* ӦôOutputDataQueue֡дAppArrayVarArray -*˵: -* RP_INFO_STRU *pRpStruct ͳһṹ -*ֵ: -* ȷ1󷵻0; -*****************************************************************************************/ -UINT8 RpOutput(RP_INFO_STRU *pRpStruct)/* %RELAX */ +/** + * @brief RpOutput RP + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ +UINT8 RpOutput(RP_INFO_STRU* pRpStruct)/* %RELAX */ { - UINT32 QueueLength; - UINT16 Length; - UINT16 DestDevNameInFrame; - UINT16 LocalDevName; - RpSNLINK_STRU *CurrentSnLink; /*дAppArrayУָڵ*/ - RpSNLINK_STRU *CurNumLink; /*дVarArrayУָڵ*/ - UINT16 i = 0; - UINT16 j = 0; - UINT16 NumOfLink = 0; + /** ֲ*/ + UINT32 QueueLength; /*г*/ + UINT16 Length; /*ݳ*/ + UINT16 DestDevNameInFrame; /*Է豸ID*/ + UINT16 LocalDevName; /*豸ID*/ + RpSNLINK_STRU* CurrentSnLink; /*дAppArrayУָڵ*/ + RpSNLINK_STRU* CurNumLink; /*дVarArrayУָڵ*/ + UINT16 i = 0; /*ѭ*/ + UINT16 j = 0; /*ѭ*/ + UINT16 NumOfLink = 0; /*·*/ UINT16 AppArray_Len = 0; /*AppAarryѴݳ*/ - UINT16 AppArray_Temp = 0; - UINT8 ret; - UINT8 RpGetLnkInfoRet; - UINT16 locDevName = 0; - UINT16 destDevName = 0; - UINT8 protclType =0; - - if(pRpStruct == NULL) /* ǿռ */ - { - ret = 0; - return ret; - } - else - { - /* */ - } + UINT16 AppArray_Temp = 0; /*Ӧʱ*/ + UINT8 ret; /*-< úֵΪʧ*/ + UINT8 RpGetLnkInfoRet; /*ȡ·ֵ*/ + UINT16 locDevName = 0; /*ID*/ + UINT16 destDevName = 0; /*ԷID*/ + UINT8 protclType = 0; /*Э*/ + UINT8 outPutDstTypeIdIdx = 0u; /*-< ĿIDλ*/ + UINT8 outPutSnIdx = 0u; /*-< λ*/ + UINT8 outPutTextIdx = 0u; /*-< Ӧλ*/ + UINT8 fitFrameLen = 0u; /*-< ̶֡*/ + UINT32 oppHlhtId = 0u; /*ԷͨID*/ + UINT32 locHlhtId = 0u; /*ͨID*/ + + if (pRpStruct == NULL) /*-< Ƿǿ*/ + { + ret = 0;/*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ + } + else + { + /*-< */ + } #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Output:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Output:\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - /*Ԫʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0xf3); - /*TypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,pRpStruct->LocalID); + /*Ԫʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0xf3); /*-< ¼ʶ־*/ + /*TypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ #endif /*ӦõĽӿ*/ - ShortToChar(0, pRpStruct->AppArray); - - QueueLength = QueueStatus(&pRpStruct->OutputDataQueue); + ShortToChar(0, pRpStruct->AppArray); /*-< Ӧ*/ + + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + outPutDstTypeIdIdx = OUTPUT_LOC_TYPEID + 4u; /*-< ĿIDλ*/ + outPutSnIdx = outPutDstTypeIdIdx + 4u; /*-< λ*/ + fitFrameLen = 15u; /*-< ù̶֡*/ + } + else + { + outPutDstTypeIdIdx = OUTPUT_LOC_TYPEID + 2u; /*-< ĿIDλ*/ + outPutSnIdx = outPutDstTypeIdIdx + 2u; /*-< λ*/ + fitFrameLen = 11u; /*-< ù̶֡*/ + } + outPutTextIdx = outPutSnIdx + 4u; /*-< Ӧλλ*/ + + + QueueLength = QueueStatus(&pRpStruct->OutputDataQueue); /*-< úõ״̬*/ #ifdef RP_RECORD_SIMPLIFY_BIN /*Ӧ÷ݶܳ*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,QueueLength); + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, QueueLength); /*-< ¼־*/ #endif - while(QueueLength > 2) + while (QueueLength > 2) /*-< Ƿ*/ { - if(QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutputDataQueue)) + if (QueueRead(2, pRpStruct->Buff_Rp, &pRpStruct->OutputDataQueue)) /*-< Ƿ*/ { - Length = ShortFromChar(pRpStruct->Buff_Rp); + Length = ShortFromChar(pRpStruct->Buff_Rp); /*-< õݳ*/ - if(Length > pRpStruct->OutputSize + 2) + if (Length > pRpStruct->OutputSize + 2) /*-< ݳǷǷ*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_OVERLONG); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_OVERLONG); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_OVERLONG); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_OVERLONG); /*-< ¼ݷǷ־*/ #endif - gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; + gRpErrorInfo |= RP_WARN_RECEIVE_RP_QUEUE_OVLOAD; /*-< ô*/ + - /*LengthֽݴӶж´ζȡ*/ - QueueElementDiscard( Length, &pRpStruct->OutputDataQueue); + QueueElementDiscard(Length, &pRpStruct->OutputDataQueue); /*-< úɾ*/ } - else if((UINT32)(Length + 2) > QueueLength) + else if ((UINT32)(Length + 2) > QueueLength) /*-< ݳǷ񳬳г*/ { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_INTEGRITY); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_INTEGRITY); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_INTEGRITY); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_INTEGRITY); /*-< ¼г־*/ #endif - gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_INTEGRITY; + gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_INTEGRITY; /*-< ô*/ - break; + break; /*-< ˳*/ } else - { - if(QueueRead(Length, pRpStruct->Buff_Rp, &pRpStruct->OutputDataQueue)) + { + if (QueueRead(Length, pRpStruct->Buff_Rp, &pRpStruct->OutputDataQueue)) /*-< Ƿܶ*/ { - DestDevNameInFrame = ShortFromChar(pRpStruct->Buff_Rp); - LocalDevName = pRpStruct->LocalType * 0x100 + pRpStruct->LocalID; + DestDevNameInFrame = ShortFromChar(pRpStruct->Buff_Rp); /*-< õԷID*/ + LocalDevName = pRpStruct->LocalType * 0x100 + pRpStruct->LocalID; /*-< õID*/ + oppHlhtId = GetHlhtId(DestDevNameInFrame); /*-< ȡԷͨID*/ + locHlhtId = GetHlhtId(LocalDevName); /*-< ȡԷͨID*/ + #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"IN:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length -2)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,DestDevNameInFrame); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[2], 2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "IN:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, DestDevNameInFrame); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[2], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - /*Ӷжݵʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x40|0x00); - /*ĿTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - /*֡дӦݵij*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length - 2)); + /*Ӷжݵʼʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x40 | 0x00); /*-< ¼ݱʶ־*/ + /*ĿTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼Ŀ־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ĿID־*/ + /*֡дӦݵij*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); /*-< ¼־*/ #endif /*ȡͷͽշ豸ʶ*/ - dsuRpTypeId2DevName(pRpStruct->LocalType, pRpStruct->LocalID, &locDevName); - dsuRpTypeId2DevName(pRpStruct->Buff_Rp[0], pRpStruct->Buff_Rp[1], &destDevName); - /*ݷͷͽշ豸ʶȡЭ*/ - dsurRpGetProtclType(locDevName, destDevName, &protclType); + dsuRpTypeId2DevName(pRpStruct->LocalType, pRpStruct->LocalID, &locDevName); /*-< úõID*/ + dsuRpTypeId2DevName(pRpStruct->Buff_Rp[0], pRpStruct->Buff_Rp[1], &destDevName); /*-< úõԷID*/ + /*ݷͷͽշ豸ʶȡЭ*/ + dsurRpGetProtclType(locDevName, destDevName, &protclType); /*-< úõʹЭ*/ - /*ȡɹ*/ - CurrentSnLink = Rp_SearchSnLnk(DestDevNameInFrame,pRpStruct); - if(CurrentSnLink != NULL) + /*ȡɹ*/ + CurrentSnLink = Rp_SearchSnLnk(DestDevNameInFrame, pRpStruct); /*-< úõ·*/ + if (CurrentSnLink != NULL) /*-< úǷɹ*/ + { + /*жǷ񷢳к0.LastSnΪ0ûзк0*/ + if (CurrentSnLink->SnLink_Info.LastSn == 0) /*-< ǰǷ0*/ { - /*жǷ񷢳к0.LastSnΪ0ûзк0*/ - if(CurrentSnLink->SnLink_Info.LastSn == 0) + for (i = 0; i < 3; i++) /*-< ǰ±ǷС3*/ { - for(i = 0; i < 3; i ++) + /*ȡѴݳ*/ + AppArray_Len = ShortFromChar(pRpStruct->AppArray); /*-< õӦݳ*/ + /*дкΪ0*/ + LongToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + outPutSnIdx]); /*-< дŵӦ*/ + /*д֡*/ + AppArray_Temp = 5 + fitFrameLen; /*-< õд֡*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); /*-< д֡ȵӦ*/ + /*дЭ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; /*-< дЭ͵Ӧ*/ + + /*дĿͺĿID*/ + ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); /*-< дĿIDӦ*/ + /*Ԥֽ*/ + ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); /*-< дԤӦ*/ + /*д汾*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; /*-< дRP֡ʶӦ*/ + /*дϢij*/ + AppArray_Temp = 0; /*-< ӦóΪ0*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); /*-< дӦóȵӦ*/ + + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + LongToChar(locHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID]); /*-< ñͨIDӦ*/ + LongToChar(oppHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx]); /*-< ñͨIDӦ*/ + } + else { - /*ȡѴݳ*/ - AppArray_Len = ShortFromChar(pRpStruct->AppArray); - /*дкΪ0*/ - LongToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_SN]); - /*д֡*/ - AppArray_Temp = 5 + 11; /*5 Э͡Ŀ豸ͺIDԤкΪ0дӦ*/ - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); - /*дЭ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; - - /*дĿͺĿID*/ - ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); - /*Ԥֽ*/ - ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); - /*д汾*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; - /*дϢij*/ - AppArray_Temp = 0; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); /*д뷢ͷʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; /*-< ñ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; /*-< ñIDӦ*/ /*дշʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID] = pRpStruct->Buff_Rp[0]; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID + 1] = pRpStruct->Buff_Rp[1]; + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx] = pRpStruct->Buff_Rp[0]; /*-< öԷ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx + 1] = pRpStruct->Buff_Rp[1]; /*-< öԷIDӦ*/ + } - - AppArray_Temp = 7 + 11 + AppArray_Len; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); - CurrentSnLink->SnLink_Info.LastSn = 0; + AppArray_Temp = 7 + fitFrameLen + AppArray_Len; /*-< ܳ*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); /*-< ܳȵӦ*/ + + CurrentSnLink->SnLink_Info.LastSn = 0; /*-< Ϊ0*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,ShortFromChar(pRpStruct->Buff_Rp)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, ShortFromChar(pRpStruct->Buff_Rp)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - /*緢͵ʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*շTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - /*ͷTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalID); - /*к*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - /*֡дӦݵij*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0); + /*緢͵ʼʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼ʶ־*/ + /*շTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼Է־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ԷID־*/ + /*ͷTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ + /*к*/ + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); /*-< ¼־*/ + /*֡дӦݵij*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0); /*-< ¼־*/ #endif - } } - /*ȡѴݳ*/ - AppArray_Len = ShortFromChar(pRpStruct->AppArray); - /*дк*/ - if(CurrentSnLink->SnLink_Info.LastSn == 0xFFFFFFFF) - { - CurrentSnLink->SnLink_Info.LastSn = 0; - } - LongToChar((CurrentSnLink->SnLink_Info.LastSn + 1), &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_SN]); - /*д֡*/ - AppArray_Temp = 5 + Length - 2 + 11; /*5 Э͡Ŀ豸ͺIDԤlength -2Ǵݳ*/ - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); - /*дЭ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; - /*дĿͺĿID*/ - ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); - /*Ԥֽ*/ - ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); - /*д汾*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; - /*дϢij*/ - AppArray_Temp = Length - 2; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); - /*д뷢ͷʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; - /*дշʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID] = pRpStruct->Buff_Rp[0]; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID + 1] = pRpStruct->Buff_Rp[1]; - /*дϢ*/ - for(i = 0; i < Length - 2; i++) - { - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT + i] = pRpStruct->Buff_Rp[2 + i]; - } - - AppArray_Temp = 7 + 11 + Length - 2 + AppArray_Len; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); + } + /*ȡѴݳ*/ + AppArray_Len = ShortFromChar(pRpStruct->AppArray); /*-< õӦݳ*/ + /*дк*/ + if (CurrentSnLink->SnLink_Info.LastSn == 0xFFFFFFFF) /*-< Ƿ*/ + { + CurrentSnLink->SnLink_Info.LastSn = 0; /*-< Ϊ0*/ + } + LongToChar((CurrentSnLink->SnLink_Info.LastSn + 1), &pRpStruct->AppArray[AppArray_Len + 2 + outPutSnIdx]); /*-< ŵӦ*/ + /*д֡*/ + AppArray_Temp = 5 + Length - 2 + fitFrameLen; /*-< õд֡*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); /*-< д֡ȵӦ*/ + /*дЭ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; /*-< дЭ͵Ӧ*/ + /*дĿͺĿID*/ + ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); /*-< дĿIDӦ*/ + /*Ԥֽ*/ + ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); /*-< дԤӦ*/ + /*д汾*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; /*-< дRP֡ʶӦ*/ + /*дϢij*/ + AppArray_Temp = Length - 2; /*-< Ӧó*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); /*-< дӦóȵӦ*/ - CurrentSnLink->SnLink_Info.LastSn++; -#ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length -2)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,ShortFromChar(pRpStruct->Buff_Rp)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[2], 2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); -#endif -#ifdef RP_RECORD_SIMPLIFY_BIN - /*緢͵ʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*շTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - /*ͷTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalID); - /*к*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - /*֡дӦݵij*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length - 2)); -#endif + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + LongToChar(locHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID]); /*-< ñͨIDӦ*/ + LongToChar(oppHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx]); /*-< ñͨIDӦ*/ } else { - CurrentSnLink = Rp_InsertLnk(DestDevNameInFrame,pRpStruct); - if(CurrentSnLink != NULL) - { - for(i = 0; i < 3; i ++) - { - /*ȡѴݳ*/ - AppArray_Len = ShortFromChar(pRpStruct->AppArray); - /*дкΪ0*/ - LongToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_SN]); - /*д֡*/ - AppArray_Temp = 5 + 11; /*5 Э͡Ŀ豸ͺIDԤкΪ0дӦ*/ - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); - /*дЭ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; + /*д뷢ͷʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; /*-< ñ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; /*-< ñIDӦ*/ + /*дշʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx] = pRpStruct->Buff_Rp[0]; /*-< öԷ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx + 1] = pRpStruct->Buff_Rp[1]; /*-< öԷIDӦ*/ + } - /*дĿͺĿID*/ - ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); - /*Ԥֽ*/ - ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); - /*д汾*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; - /*дϢij*/ - AppArray_Temp = 0; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); - /*д뷢ͷʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; - /*дշʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID] = pRpStruct->Buff_Rp[0]; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID + 1] = pRpStruct->Buff_Rp[1]; + /*дϢ*/ + for (i = 0; i < Length - 2; i++) /*-< ±ǷСӦó*/ + { + pRpStruct->AppArray[AppArray_Len + 2 + outPutTextIdx + i] = pRpStruct->Buff_Rp[2 + i]; /*-< Ӧֵ*/ + } - - AppArray_Temp = 7 + 11 + AppArray_Len; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); + AppArray_Temp = 7 + fitFrameLen + Length - 2 + AppArray_Len; /*-< ܳ*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); /*-< ܳȵӦ*/ - CurrentSnLink->SnLink_Info.LastSn = 0; + CurrentSnLink->SnLink_Info.LastSn++; /*-< 1*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,ShortFromChar(pRpStruct->Buff_Rp)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); -#endif -#ifdef RP_RECORD_SIMPLIFY_BIN - /*緢͵ʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*շTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - /*ͷTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalID); - /*к*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - /*֡дӦݵij*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0); -#endif - } - /*ȡѴݳ*/ - AppArray_Len = ShortFromChar(pRpStruct->AppArray); - /*дкΪ1*/ - LongToChar(1, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_SN]); - /*д֡*/ - AppArray_Temp = 5 + Length - 2 + 11; /*5 Э͡Ŀ豸ͺIDԤlength -2Ǵݳ*/ - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); - /*дЭ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; - - /*дĿͺĿID*/ - ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); - /*Ԥֽ*/ - ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); - /*д汾*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; - /*дϢij*/ - AppArray_Temp = Length - 2; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); - /*д뷢ͷʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; - /*дշʶ*/ - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID] = pRpStruct->Buff_Rp[0]; - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_TYPEID + 1] = pRpStruct->Buff_Rp[1]; - /*дϢ*/ - for(i = 0; i < Length - 2; i++) - { - pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT + i] = pRpStruct->Buff_Rp[2 + i]; - } - - AppArray_Temp = 7 + 11 + Length - 2 + AppArray_Len; - ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); - - CurrentSnLink->SnLink_Info.LastSn = 1; -#ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"OUT:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Len:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length -2)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,ShortFromChar(pRpStruct->Buff_Rp)); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Data:"); - PrintFileHex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,&pRpStruct->Buff_Rp[2], 2); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, ShortFromChar(pRpStruct->Buff_Rp)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[2], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif +#ifdef RP_RECORD_SIMPLIFY_BIN + /*緢͵ʼʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼ʶ־*/ + /*շTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼Է־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ԷID־*/ + /*ͷTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ + /*к*/ + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); /*-< ¼־*/ + /*֡дӦݵij*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); /*-< ¼־*/ +#endif + } + else + { + CurrentSnLink = Rp_InsertLnk(DestDevNameInFrame, pRpStruct); /*-< ú·Ƿɹ*/ + if (CurrentSnLink != NULL) /*-< úǷɹ*/ + { + for (i = 0; i < 3; i++) /*-< ǰ±ǷС3*/ + { + /*ȡѴݳ*/ + AppArray_Len = ShortFromChar(pRpStruct->AppArray); /*-< õӦݳ*/ + /*дкΪ0*/ + LongToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + outPutSnIdx]); /*-< дŵӦ*/ + /*д֡*/ + AppArray_Temp = 5 + fitFrameLen; /*-< õд֡*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); /*-< д֡ȵӦ*/ + /*дЭ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; /*-< дЭ͵Ӧ*/ + + /*дĿͺĿID*/ + ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); /*-< дĿIDӦ*/ + /*Ԥֽ*/ + ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); /*-< дԤӦ*/ + /*д汾*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; /*-< дRP֡ʶӦ*/ + /*дϢij*/ + AppArray_Temp = 0; + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); /*-< дӦóȵӦ*/ + + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + LongToChar(locHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID]); /*-< ñͨIDӦ*/ + LongToChar(oppHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx]); /*-< ñͨIDӦ*/ + } + else + { + /*д뷢ͷʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; /*-< ñ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; /*-< ñIDӦ*/ + /*дշʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx] = pRpStruct->Buff_Rp[0]; /*-< öԷ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx + 1] = pRpStruct->Buff_Rp[1]; /*-< öԷIDӦ*/ + } + + + AppArray_Temp = 7 + fitFrameLen + AppArray_Len; /*-< ܳ*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); /*-< ܳȵӦ*/ + + CurrentSnLink->SnLink_Info.LastSn = 0; /*-< Ϊ0*/ +#ifdef RP_RECORD_ERR_ASC + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, ShortFromChar(pRpStruct->Buff_Rp)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); +#endif #ifdef RP_RECORD_SIMPLIFY_BIN /*緢͵ʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize,0x80|0x00); - /*շTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - /*ͷTypeID*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalType); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->LocalID); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼ʶ־*/ + /*շTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼Է־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ԷID־*/ + /*ͷTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ /*к*/ - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurrentSnLink->SnLink_Info.LastSn); + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); /*-< ¼־*/ /*֡дӦݵij*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,(UINT16)(Length-2)); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0); /*-< ¼־*/ #endif } + /*ȡѴݳ*/ + AppArray_Len = ShortFromChar(pRpStruct->AppArray); /*-< õӦݳ*/ + /*дкΪ1*/ + LongToChar(1, &pRpStruct->AppArray[AppArray_Len + 2 + outPutSnIdx]); /*-< 1Ӧ*/ + /*д֡*/ + AppArray_Temp = 5 + Length - 2 + fitFrameLen; /*-< õд֡*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_FRAME_LEN]); /*-< д֡ȵӦ*/ + /*дЭ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_PTOTCL_TYPE] = protclType; /*-< дЭ͵Ӧ*/ + + /*дĿͺĿID*/ + ShortToChar(DestDevNameInFrame, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_DEST_DEVTYPE]); /*-< дĿIDӦ*/ + /*Ԥֽ*/ + ShortToChar(0, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_RESERVED]); /*-< дԤӦ*/ + /*д汾*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_EDITION] = 0xFF; /*-< дRP֡ʶӦ*/ + /*дϢij*/ + AppArray_Temp = Length - 2; /*-< Ӧó*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_TEXT_LEN]); /*-< дӦóȵӦ*/ + + if (INTERFACE_TYPE_FOUR == pRpStruct->interfaceType) /*-< ӿǷ/ձʶΪ4ֽ*/ + { + LongToChar(locHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID]); /*-< ñͨIDӦ*/ + LongToChar(oppHlhtId, &pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx]); /*-< ñͨIDӦ*/ + } else { + /*д뷢ͷʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID] = pRpStruct->LocalType; /*-< ñ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + OUTPUT_LOC_TYPEID + 1] = pRpStruct->LocalID; /*-< ñIDӦ*/ + /*дշʶ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx] = pRpStruct->Buff_Rp[0]; /*-< öԷ͵Ӧ*/ + pRpStruct->AppArray[AppArray_Len + 2 + outPutDstTypeIdIdx + 1] = pRpStruct->Buff_Rp[1]; /*-< öԷIDӦ*/ + } + + /*дϢ*/ + for (i = 0; i < Length - 2; i++) /*-< ±ǷСӦó*/ + { + pRpStruct->AppArray[AppArray_Len + 2 + outPutTextIdx + i] = pRpStruct->Buff_Rp[2 + i]; /*-< Ӧֵ*/ + } + + AppArray_Temp = 7 + fitFrameLen + Length - 2 + AppArray_Len; /*-< ܳ*/ + ShortToChar(AppArray_Temp, &pRpStruct->AppArray[0]); /*-< ܳȵӦ*/ + + CurrentSnLink->SnLink_Info.LastSn = 1; /*-< Ϊ1*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"E:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_ERR|RP_OUTPUT|RP_ERROR_NULL|RP_LNK_POP); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "OUT:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Len:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, ShortFromChar(pRpStruct->Buff_Rp)); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Data:"); + PrintFileHex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, &pRpStruct->Buff_Rp[2], 2); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); +#endif +#ifdef RP_RECORD_SIMPLIFY_BIN + /*緢͵ʼʶ*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0x80 | 0x00); /*-< ¼ʶ־*/ + /*շTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼Է־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ԷID־*/ + /*ͷTypeID*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalType); /*-< ¼־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->LocalID); /*-< ¼ID־*/ + /*к*/ + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurrentSnLink->SnLink_Info.LastSn); /*-< ¼־*/ + /*֡дӦݵij*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(Length - 2)); /*-< ¼־*/ +#endif + } + else + { +#ifdef RP_RECORD_ERR_ASC + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "E:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_ERR | RP_OUTPUT | RP_ERROR_NULL | RP_LNK_POP); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_ERR|RP_OUTPUT|RP_ERROR_NULL|RP_LNK_POP); + /*¼*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_ERR | RP_OUTPUT | RP_ERROR_NULL | RP_LNK_POP); /*-< ¼·ʧ־*/ #endif - gRpErrorInfo |= RP_ERR_OUTPUT_RP_LNK_POP; + gRpErrorInfo |= RP_ERR_OUTPUT_RP_LNK_POP; /*-< ô*/ - } } + } } else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼δ־*/ #endif - gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_READ; /*-< ô*/ - break; + break; /*-< ˳*/ } } } else { #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"W:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_READ); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "W:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_READ); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*¼*/ - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize,RP_WARN|RP_OUTPUT|RP_ERROR_NULL|RP_QUEUE_READ); + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, RP_WARN | RP_OUTPUT | RP_ERROR_NULL | RP_QUEUE_READ); /*-< ¼δ־*/ #endif - gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_READ; + gRpErrorInfo |= RP_WARN_OUTPUT_RP_QUEUE_READ; /*-< ô*/ - break; + break; /*-< ˳*/ } - QueueLength = QueueStatus(&pRpStruct->OutputDataQueue); + QueueLength = QueueStatus(&pRpStruct->OutputDataQueue); /*-< õӦøЭг*/ } - - CurNumLink = pRpStruct->SnLinkhead; - NumOfLink = 0; - while(CurNumLink != NULL) + CurNumLink = pRpStruct->SnLinkhead; /*-< õǰŶջ*/ + NumOfLink = 0; /*-< ·Ϊ0*/ + + while (CurNumLink != NULL) /*-< ǰŶջǷǿ*/ { - ShortToChar(CurNumLink->DestDevName, &pRpStruct->VarArray[2 + 68 * NumOfLink]); - ShortToChar(CurNumLink->SnLink_Info.SnArrayIndex, &pRpStruct->VarArray[4 + 68 * NumOfLink]); - LongToChar(CurNumLink->SnLink_Info.LastSn, &pRpStruct->VarArray[6 + 68 * NumOfLink]); + ShortToChar(CurNumLink->DestDevName, &pRpStruct->VarArray[2 + 68 * NumOfLink]); /*-< öԷIDм*/ + ShortToChar(CurNumLink->SnLink_Info.SnArrayIndex, &pRpStruct->VarArray[4 + 68 * NumOfLink]); /*-< ±굽м*/ + LongToChar(CurNumLink->SnLink_Info.LastSn, &pRpStruct->VarArray[6 + 68 * NumOfLink]); /*-< ŵм*/ #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Lnk:\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"DstNm:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurNumLink->DestDevName); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"Sn:"); - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurNumLink->SnLink_Info.LastSn); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Lnk:\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "DstNm:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurNumLink->DestDevName); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "Sn:"); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.LastSn); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif #ifdef RP_RECORD_SIMPLIFY_BIN /*һ·ʼʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, 0xC0|0x00); - ShortToChar(CurNumLink->DestDevName, pRpStruct->Buff_Rp); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.LastSn); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0xC0 | 0x00); /*-< ¼ʶ־*/ + ShortToChar(CurNumLink->DestDevName, pRpStruct->Buff_Rp); /*-< ¼ԷID־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[0]); /*-< ¼ID־*/ + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, pRpStruct->Buff_Rp[1]); /*-< ¼ID־*/ + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.LastSn); /*-< ¼־*/ #endif #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"SnArray:"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "SnArray:"); #endif - for(i = 0; i < 15; i++) + for (i = 0; i < 15; i++) /*-< ǰ±ǷС15*/ { - LongToChar(CurNumLink->SnLink_Info.SnArray[i], &pRpStruct->VarArray[10 + i *4 + 68 * NumOfLink]); + LongToChar(CurNumLink->SnLink_Info.SnArray[i], &pRpStruct->VarArray[10 + i * 4 + 68 * NumOfLink]); /*-< Ÿм*/ #ifdef RP_RECORD_ERR_ASC - PrintFileU32Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,CurNumLink->SnLink_Info.SnArray[i]); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize," "); + PrintFileU32Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.SnArray[i]); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, " "); #endif #ifdef RP_RECORD_SIMPLIFY_BIN - PrintRecArray4ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.SnArray[i]); + PrintRecArray4ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, CurNumLink->SnLink_Info.SnArray[i]); /*-< ¼־*/ #endif } #ifdef RP_RECORD_ERR_ASC - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif - NumOfLink++; - CurNumLink = CurNumLink->NextNode; + NumOfLink++; /*-< ·1*/ + CurNumLink = CurNumLink->NextNode; /*-< һ·øǰ·*/ } - ShortToChar((UINT16)(68 * NumOfLink), pRpStruct->VarArray); + ShortToChar((UINT16)(68 * NumOfLink), pRpStruct->VarArray); /*-< мȵм*/ #ifdef RP_RECORD_SIMPLIFY_BIN /*Ԫʶ*/ - PrintRecArrayByte(pRpStruct->RecordArray,pRpStruct->RecordArraySize, 0xE0|0x00); - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize, AppArray_Temp); - PrintRecArray2ByteB(pRpStruct->RecordArray,pRpStruct->RecordArraySize, (UINT16)(68 * NumOfLink)); + PrintRecArrayByte(pRpStruct->RecordArray, pRpStruct->RecordArraySize, 0xE0 | 0x00); /*-< ¼·־*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, AppArray_Temp); /*-< ¼·־*/ + PrintRecArray2ByteB(pRpStruct->RecordArray, pRpStruct->RecordArraySize, (UINT16)(68 * NumOfLink)); /*-< ¼·־*/ #endif #ifdef RP_RECORD_ERR_ASC Length = ShortFromChar(pRpStruct->RecordArray); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"RcdLen:"); - PrintFileU16Hex(pRpStruct->RecordArray,pRpStruct->RecordArraySize,Length); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); - PrintFiles(pRpStruct->RecordArray,pRpStruct->RecordArraySize,"\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "RcdLen:"); + PrintFileU16Hex(pRpStruct->RecordArray, pRpStruct->RecordArraySize, Length); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); + PrintFiles(pRpStruct->RecordArray, pRpStruct->RecordArraySize, "\n"); #endif - ret = 1; - return ret; + ret = 1; /*-< úֵΪɹ*/ + return ret; /*-< غֵ*/ } /***************************************************************************************** @@ -1392,7 +1468,7 @@ UINT8 RpRefresh(UINT16 sLen_Input, UINT8 *Input_Data_LnkMes,RP_INFO_STRU *pRpStr UINT8 NumOfLink, i = 0, j = 0, ret = 0; RpSNLINK_STRU *TempIndex=NULL; RpSNLINK_STRU *LastIndex=NULL; - STACK_DATA_TYPE pData; + STACK_DATA_TYPE_RP pData; UINT8 popret; if((pRpStruct == NULL)||(Input_Data_LnkMes == NULL)) /* ǿռ */ @@ -1409,7 +1485,7 @@ UINT8 RpRefresh(UINT16 sLen_Input, UINT8 *Input_Data_LnkMes,RP_INFO_STRU *pRpStr TempIndex = pRpStruct->SnLinkhead; while(TempIndex != NULL) { - StackPush(&pRpStruct->SnLnkStack,(STACK_DATA_TYPE)TempIndex); + StackPush(&pRpStruct->SnLnkStack,(STACK_DATA_TYPE_RP)TempIndex); TempIndex = TempIndex->NextNode; } pRpStruct->SnLinkhead = NULL; @@ -1511,7 +1587,7 @@ UINT8 Rp_init_SnStack(RP_INFO_STRU *pRpStruct) } for (i = 0;i < pRpStruct->SnLnkStack.TotalSize;i++) { /*ѹtotalsizeڵ*/ - if(StackPush(&pRpStruct->SnLnkStack,(UINT32)&SnLnk_stack[i]) != 1) + if(StackPush(&pRpStruct->SnLnkStack,(STACK_DATA_TYPE_RP)&SnLnk_stack[i]) != 1) { ret = 0; return ret;/*ѹڵʧ*/ @@ -1585,7 +1661,7 @@ RpSNLINK_STRU* Rp_InsertLnk( UINT16 Dest_DevName,RP_INFO_STRU *pRpStruct) RpSNLINK_STRU *LastIndex; RpSNLINK_STRU *CurIndex; RpSNLINK_STRU *TempIndex; - STACK_DATA_TYPE pData; + STACK_DATA_TYPE_RP pData; UINT8 i; UINT8 popret; @@ -1799,3 +1875,164 @@ UINT32 ReSetRpErrorInfo(void) return ret; } +/** + * @brief RpDelAllLink RPɾ· + * @param rp RPṹ ȡֵΧ:οṹRP_INFO_STRU + */ +void RpDelAllLink(RP_INFO_STRU* rp) +{ + RpSNLINK_STRU* curLink = NULL; /*ǰ·*/ + + if (NULL != rp) /*-< Ƿǿ*/ + { + curLink = rp->SnLinkhead; /*-< õǰ·*/ + while (NULL != curLink) /*-< ǰ·Ƿǿ*/ + { + rp->SnLinkhead = curLink->NextNode; /*-< ͷָ*/ + + (void)CommonMemSet(curLink, sizeof(RpSNLINK_STRU), 0u, sizeof(RpSNLINK_STRU)); /*-< ·Ϣ*/ + (void)PushStack(&rp->SnLnkStack, curLink); /*-< ·ڵѹջ*/ + + curLink = rp->SnLinkhead; /*-< µǰ·Ϊһ·*/ + } + + if (NULL != rp->RecordArray) /*-< ¼־Ƿǿ*/ + { + (void)PrintRecArray2ByteB(rp->RecordArray, rp->RecordArraySize, (UINT16)0xF0F0u); /*-< ¼ɾ·־*/ + } + } +} + +/* +* ջʼڳʼһջStackFreeʹ +* ҪΪջռ䣬жջڲʼ +* ˵ CommonStackRp *pStack, ʼĵĶջ +* UINT32 TotalSize, ջС +* ֵ 1ɹ +* 0ʧ +*/ +static UINT8 StackInitial(CommonStackRp* pStack, UINT16 TotalSize) +{ + UINT8 bRet = 0;/*ں*/ + + /*ֵж*/ + if ((NULL != pStack) && (0 != TotalSize)) + { + /*ֵϷ*/ + + /*ջݳʼ */ + pStack->TotalSize = TotalSize; + pStack->Top = 0; + + /*ջռ*/ + pStack->pStackData = (STACK_DATA_TYPE_RP*)malloc(sizeof(STACK_DATA_TYPE_RP) * (pStack->TotalSize)); + if (pStack->pStackData != NULL) + { + /*ɹʼ*/ + bRet = 1; + } + else + { + /*ջʼռʧܣʧ*/ + bRet = 0; + } + } + else + { + /*ֵϷʧ*/ + + bRet = 0; + } + + return bRet; + +} + +/****************************************************************************************** +* : ӶջеջԪأ +* : +* : CommonStackRp *pStack ջָ +* : STACK_DATA_TYPE_RP* pData ջԪ +* ȫֱ : +* ֵ : ɹ1򷵻0 +*******************************************************************************************/ +static UINT8 StackPop(CommonStackRp* pStack, STACK_DATA_TYPE_RP* pData)/* %RELAX */ +{ + UINT8 ret;/*ں*/ + + if (pStack->Top > 0) + { + /*ջ*/ + + /*ջԪ*/ + pStack->Top--; + *pData = pStack->pStackData[pStack->Top]; + + /*ִгɹ*/ + ret = 1; + return ret; + } + else + { + /*ջݣʧ*/ + ret = 0; + return ret; + } +} + +/****************************************************************************************** +* : ջѹһ +* : STACK_DATA_TYPE_RP Data ջ +* : CommonStackRp *pStack ջָ +* : +* ȫֱ : +* ֵ : ɹ1,ʧܷ0 +*******************************************************************************************/ +static UINT8 StackPush(CommonStackRp* pStack, STACK_DATA_TYPE_RP Data)/* %RELAX */ +{ + UINT8 ret;/*ں*/ + + if (pStack->Top < pStack->TotalSize) + { + /*ջССڶջֵʱѹջ*/ + + /*ѹջ*/ + pStack->pStackData[pStack->Top] = Data; + pStack->Top++; + + ret = 1; + return ret; + } + else + { + /*ջСڶջֵ,ѹջ.*/ + + ret = 0; + return ret;/*޷ѹջԪ*/ + } +} + +/* +* ջ洢ռͷź +* ڲҪijջʱ򣬰Ѷջݴ洢ռͷŵ,StackInitialʹ +* ˵ CommonStackRp *pStack, ջָ +* ֵ 1ɹ +*/ +static UINT8 StackFree(CommonStackRp* pStack) +{ + + UINT8 ret = 1;/*ں*/ + + /*ջָλ*/ + pStack->Top = 0; + pStack->TotalSize = 0; + + /*ͷŶջռ*/ + if (pStack->pStackData != NULL) + { + free(pStack->pStackData); + pStack->pStackData = NULL; + } + + return ret; +} diff --git a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.h b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.h index cb45263..7c3461a 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.h +++ b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpInterface.h @@ -18,9 +18,6 @@ #define OUTPUT_EDITION (OUTPUT_RESERVED+2) /**/ #define OUTPUT_TEXT_LEN (OUTPUT_EDITION+1) /**/ #define OUTPUT_LOC_TYPEID (OUTPUT_TEXT_LEN+2) /**/ -#define OUTPUT_DEST_TYPEID (OUTPUT_LOC_TYPEID+2) /**/ -#define OUTPUT_SN (OUTPUT_DEST_TYPEID+2) /**/ -#define OUTPUT_TEXT (OUTPUT_SN+4) /**/ #ifdef __cplusplus extern "C" { diff --git a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpPlatform.h b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpPlatform.h index e99ab51..0d7a137 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpPlatform.h +++ b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpPlatform.h @@ -12,7 +12,6 @@ #include "CommonTypes.h" #include "CommonQueue.h" -#include "CommonStack.h" #include "RpStruct.h" #include "RpConfig.h" @@ -26,6 +25,17 @@ extern "C" { #endif + typedef void* STACK_DATA_TYPE_RP; + + /*ջṹ嶨*/ + typedef struct + { + STACK_DATA_TYPE_RP* pStackData; /*нڵֵʾǴ洢ݵĿռ*/ + UINT16 Top; /*ĿǰջĴС.ͬʱֵҲǰջ,дԪҪŵ±. + ڱջһ˳ջ,˳ջдֵӦdzʼΪ, + ֮,0STACK_MAXSIZE-1.*/ + UINT16 TotalSize; /*˶ջܹŽڵ*/ + } CommonStackRp; /*ͳһṹ*/ typedef struct Rp_Info @@ -50,20 +60,18 @@ typedef struct Rp_Info QueueStruct OutnetQueueB; /*նB(->)*/ UINT32 OutnetQueueSize; /*նгȣЭʼʱд*/ RpSNLINK_STRU *SnLinkhead; /*кŻͷָ*/ - CommonStack SnLnkStack; /*кŻջ*/ + CommonStackRp SnLnkStack; /*кŻջ*/ UINT32 *pSnStack; /*ָջռ䣬ͷſռʱʹ*/ UINT8 *Buff_Rp; /*ʱݻ*/ + UINT8 interfaceType; /*ӿ0x55:/ձʶΪ4ֽ;(Ĭֵ):/ձʶΪ2ֽ,ʼʱ*/ } RP_INFO_STRU ; -/************************************************************************* -* : -* ͨúʵڴռ -* ˵: -* [in]RP_INFO_STRU *pRpStruct ͬһṹ; -* ֵ: -* return 1 -* return 0쳣 -**************************************************************************/ +/** + * @brief RpInit ʼRP + * @param fileName FSļ ȡֵΧ:ֽ + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ UINT8 RpInit(UINT8* fileName,RP_INFO_STRU *pRpStruct); /*********************************************************************** @@ -89,24 +97,18 @@ UINT8 RpLnkDelete(UINT16 devName,RP_INFO_STRU *pdelDevSn); ***************************************************************************************/ UINT8 RpFreeSpace(RP_INFO_STRU *pRpStruct); -/***************************************************************************************** -*: -* ӺݣдDataToApp -*˵: -* RP_INFO_STRU *pRpStruct ͳһṹ -*ֵ: -* ȷ1󷵻0; -*****************************************************************************************/ +/** + * @brief RpReceive RP봦 + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ UINT8 RpReceive(RP_INFO_STRU *pRpStruct); -/***************************************************************************************** -*: -* ӦôOutputDataQueue֡дAppArrayVarArray -*˵: -* RP_INFO_STRU *pRpStruct ͳһṹ -*ֵ: -* ȷ1󷵻0; -*****************************************************************************************/ +/** + * @brief RpOutput RP + * @param pRpStruct RPʵ ȡֵΧ:οṹRP_INFO_STRU + * @return 0:ʧ 1:ɹ + */ UINT8 RpOutput(RP_INFO_STRU *pRpStruct); /***************************************************************************************** @@ -121,6 +123,12 @@ UINT8 RpOutput(RP_INFO_STRU *pRpStruct); *****************************************************************************************/ UINT8 RpRefresh(UINT16 sLen_Input, UINT8 *Input_Data_LnkMes,RP_INFO_STRU *pRpStruct); +/** + * @brief RpDelAllLink RPɾ· + * @param rp RPṹ ȡֵΧ:οṹRP_INFO_STRU + */ +void RpDelAllLink(RP_INFO_STRU* rp); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpStruct.h b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpStruct.h index 7f5b9fc..0b99da1 100644 --- a/TSCP/src/protocol/redun_record_cbtc/common_redun/RpStruct.h +++ b/TSCP/src/protocol/redun_record_cbtc/common_redun/RpStruct.h @@ -10,7 +10,6 @@ #include "CommonTypes.h" #include "CommonQueue.h" -#include "CommonStack.h" #ifdef __cplusplus extern "C" { diff --git a/TSCP/src/protocol/rssp2_record_cbtc/dqu_rsspii_cbtc/dsuRssp2Func.c b/TSCP/src/protocol/rssp2_record_cbtc/dqu_rsspii_cbtc/dsuRssp2Func.c index 83109cc..159e715 100644 --- a/TSCP/src/protocol/rssp2_record_cbtc/dqu_rsspii_cbtc/dsuRssp2Func.c +++ b/TSCP/src/protocol/rssp2_record_cbtc/dqu_rsspii_cbtc/dsuRssp2Func.c @@ -330,6 +330,9 @@ UINT8 dquDevName2EtcsId(IN UINT16 DevName, IN UINT16 LogId, OUT UINT32 *pEtcsId) } } break; + case DEVTYPE_RC: + ret = dquQueryOutDevId(QFUN_IDMAP_RC_ID, devId, &hlhtId); + break; case DEVTYPE_VOBC: ret = dquVobcName2OutDevId(DevName, (UINT8)LogId, &hlhtId); break; diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspDataStru.h b/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspDataStru.h index acdbf9c..d0ef405 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspDataStru.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspDataStru.h @@ -82,18 +82,27 @@ extern "C" { UINT16 CiRowNum; /*CIŶձ*/ DSU_DEV_HLHTID *CiHlhtids; /*CIŶձ*/ + UINT16 RcRowNum; /*RCŶձ*/ + DSU_DEV_HLHTID* RcHlhtids; /*RCŶձ*/ + UINT16 AtsRowNum; /*ATSŶձ*/ DSU_DEV_HLHTID *AtsHlhtids; /*ATSŶձ*/ UINT16 VobcRowNum; /*VOBCŶձ*/ DSU_DEV_HLHTID *VobcHlhtids; /*VOBCŶձ*/ + UINT16 IvocRowNum; /*IVOCŶձ*/ + DSU_DEV_HLHTID* IvocHlhtids; /*IVOCŶձ*/ + UINT16 DsuRowNum; /*DSUŶձ*/ DSU_DEV_HLHTID *DsuHlhtids; /*DSUŶձ*/ UINT16 AomRowNum; /*AOMŶձ*/ DSU_DEV_HLHTID *AomHlhtids; /*AOMŶձ*/ + UINT16 IvocAomRowNum; /*IVOC-AOMŶձ*/ + DSU_DEV_HLHTID* IvocAomHlhtids; /*IVOC-AOMŶձ*/ + UINT16 TdtRowNum; /*TDTŶձ*/ DSU_DEV_HLHTID *TdtHlhtids; /*TDTŶձ*/ diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspFunc.c b/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspFunc.c index 7028268..503e16c 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspFunc.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_dqu_rssp/dsuRsspFunc.c @@ -38,6 +38,9 @@ #define IDMAP_TDT_ID (20) /*TDTŶձID*/ #define IDMAP_AXLE_ID (21) /*ϵͳŶձID*/ #define IDMAP_ITE_ID (22) /*ITEŶձID*/ +#define IDMAP_RC_ID (23) /*RCŶձID*/ +#define IDMAP_IVOC_ID (24) /*IVOCŶձID*/ +#define IDMAP_IVOC_AOM_ID (25) /*AOM(IVOC)ŶձID*/ #define ID_MAP_SIZE 6 /*豸Ŷձռֽڳ*/ #define VOBC_ID_MAP_SIZE 10 /*豸Ŷձռֽڳ*/ @@ -47,10 +50,13 @@ #define ZC_TYPE 0x1E /*ZC豸*/ #define CI_TYPE 0x3C /*CI豸*/ +#define RC_TYPE (0x3Du) /*RC豸*/ #define ATS_TYPE 0x03 /*ATS豸*/ #define VOBC_TYPE 0x14 /*VOBC豸*/ +#define IVOC_TYPE (0x10u) /*IVOC豸*/ #define DSU_TYPE 0x2B /*DSU豸*/ #define AOM_TYPE 0x15 /*AOM豸*/ +#define IVOC_AOM_TYPE (0x11u) /*IVOC-AOM豸*/ #define TDT_TYPE 0x2C /*TDT豸*/ #define AXLE_TYPE 0xA0 /*ϵͳ豸*/ #define ITE_DEVTYPE (0x2F) /*ITE豸*/ @@ -63,9 +69,9 @@ typedef struct { UINT32 Id; /**/ UINT32 Len; /**/ - UINT32 StartIdx; /*excelʼַ*/ - UINT32 RowCount; /**/ - UINT8* Data; /*excel*/ + UINT16 RowCount; /**/ + UINT32 ColLen; /*ֽڳ*/ + UINT8* Data; /**/ } SheetInfo; /*ȫУ*/ @@ -78,7 +84,9 @@ typedef struct UINT32 Dataver[CHANNEL_NUM]; /*ͨ汾*/ } SafeParam; -static void InitSheet(SheetInfo* sheetInfo, const UINT32 dataLen, UINT8 data[], const UINT32 excelId, const UINT32 sheetId); +static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId); +static void StDsuRsspiFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId); +static UINT8 StDsuRsspiFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId); static UINT32 PrecSinit(UINT32 sinit, UINT32 sid, UINT8 channel, UINT8 addTimes); static UINT32 PrecRxdata(UINT32 sinit, UINT32 sid, UINT8 channel, UINT8 addTimes); static UINT8 CheckInOutParamSheet(const UINT32 inDataLen, UINT8 inData[], const UINT32 outDataLen, UINT8 outData[], SheetInfo* inParamSheet, SheetInfo* outParamSheet); @@ -87,186 +95,274 @@ static UINT8 GetDevSafeParamFromSheet(const UINT32 locHlhtId, SheetInfo* paramSh static UINT8 GetDevSafeParam(const UINT32 locHlhtId, SheetInfo* outParamSheet, SheetInfo* inParamSheet, SafeParam* safeParam); static void GetCommTypes(const UINT16 locTypeId, SheetInfo* commSheet, UINT16* commTypesLen, UINT8 commTypes[], const UINT16 maxCommTypesLen); static UINT8 GetOppSafeParams(const UINT16 locAddr, const UINT8 oppDevType, SheetInfo* paramSheet, UINT32* oppSafeParamsNum, SafeParam sfeParamsNum[], const UINT32 maxOppSafeParamsNum, SheetInfo* otherParamSheet, DSU_RSSP_INFO_STRU_WL* dsuRsspInfo); +static UINT8 SetOppSafeParam(SheetInfo* paramSheet, UINT32* oppSafeParamsNum, SafeParam sfeParamsNum[], const UINT32 maxOppSafeParamsNum, UINT32 hlhtId, UINT32 curCmpVal[2][6], SheetInfo* otherParamSheet); static UINT8 CheckSafeParamOnly(SafeParam* safeParam, SheetInfo* sheetInfo); #ifndef RSSP_NO_HLHT + +static void DquInitAllHlhtId(UINT8* pFsName, DSU_RSSP_INFO_STRU_WL* pDsuRsspInfo); + static UINT8 DquInitHlhtId(UINT8 *pFsName, UINT8 sheetId, UINT8 colUseLen, UINT8 hlhtIdNum, UINT16 *pRowNum, DSU_DEV_HLHTID **pDsuDevHlhtids); static UINT32 DquGetHlhtId(UINT8 type, UINT8 id, UINT16 logicId, UINT16 rowNum, const DSU_DEV_HLHTID *pDevHlhtids); static UINT32 DquGetDevHlhtId(UINT8 devType, UINT8 devId, UINT16 logicId, DSU_RSSP_INFO_STRU_WL *pDsuRssp); -static UINT8 DquGetDevId(UINT32 hlhtId, UINT16 rowNum, const DSU_DEV_HLHTID *pDevHlhtids, UINT8 hlhtIdNum); +static UINT8 DquGetDevId(const UINT32 hlhtId, const UINT16 rowNum, const DSU_DEV_HLHTID* pDevHlhtids, const UINT8 hlhtIdNum, const UINT8 needSetDevType, UINT8* devType); #endif -/* -*: ʼsheetҳϢ -*: const UINT32 dataLen ݳ -* UINT8 data[] -* const UINT32 excelId excel -* const UINT32 sheetId sheetҳ -*: SheetInfo* sheetInfo sheetҳϢ -*: -*ֵ: -*/ -static void InitSheet(SheetInfo* sheetInfo, const UINT32 dataLen, UINT8 data[], const UINT32 excelId, const UINT32 sheetId) +/** + * @brief InitSheet ʼsheetҳϢ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId) { + /*- ֲ*/ UINT32 idx = 0u; /*±*/ UINT32 crcVal = 0u; /*crcֵ*/ UINT32 crc = 0u; /*crc*/ UINT32 curLen = 0u; /*ǰ*/ UINT32 excelCount = 0u; /*excel*/ - UINT32 excelIdx = 0u; /*excel±*/ - UINT32 curExcelId = 0u; /*ǰexcel*/ - UINT32 curExcelPos = 0u; /*ǰexcelλ*/ - UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ - UINT32 sheetCount = 0u; /*sheet*/ - UINT32 sheetIdx = 0u; /*sheet±*/ - UINT32 curSheetId = 0u; /*ǰsheet*/ - UINT8 isBreak = 0u; /*Ƿ˳*/ - UINT8 isFind = 0u; /*Ƿҵ*/ - if ((0u < dataLen) && (NULL != data) && (NULL != sheetInfo)) /**/ + if ((NULL != sheetInfo) && (0u < dataLen) && (NULL != data)) /*-< Ƿǿ*/ { - if ((idx + 40) <= dataLen) /*DH±*/ + sheetInfo->Id = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->Len = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->RowCount = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->ColLen = 0u; /*-< sheetҳϢֽڳΪ0*/ + sheetInfo->Data = NULL; /*-< sheetҳϢΪNULL*/ + + if ((idx + 40u) <= dataLen) /*-< ʹݳǷϷ*/ { - /*4ֽCRC*/ - crcVal = LongFromChar(&data[idx]); - idx += 4; + crcVal = LongFromChar(&data[idx]); /*-< õCRCֵ*/ + idx += 4u; /*-< ǰ±4*/ + /*4ֽڰ汾*/ - idx += 4; - /*4ֽڳ*/ - curLen = LongFromChar(&data[idx]); - idx += 4; + idx += 4u; /*-< ǰ±4*/ - if ((curLen == dataLen) && (4 < curLen)) + curLen = LongFromChar(&data[idx]); /*-< õг*/ + idx += 4u; /*-< ǰ±4*/ + + if ((curLen == dataLen) && (4u < curLen)) /*-< гǷϷ*/ { - crc = Crc32(&data[4], curLen - 4); - if (crc == crcVal) + crc = Crc32(&data[4u], curLen - 4u); /*-< CRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷCRC*/ { - /*4ֽexcel*/ - excelCount = LongFromChar(&data[idx]); - idx += 4; + excelCount = LongFromChar(&data[idx]); /*-< õexcel*/ + idx += 4u; /*-< ǰ±4*/ + /*24ֽԤ*/ - idx += 24; + idx += 24u; /*-< ǰ±24*/ - for (excelIdx = 0; excelIdx < excelCount; excelIdx++) - { - if ((idx + 24) <= dataLen) /*DI±*/ - { - /*4ֽexcel*/ - curExcelId = LongFromChar(&data[idx]); - idx += 4; - if (curExcelId == excelId) - { - /*4ֽڳ*/ - idx += 4; - /*4ֽexcelλ*/ - curExcelPos = LongFromChar(&data[idx]); - curExcelStartPos = curExcelPos; - idx += 4; - /*12ֽԤ*/ - idx += 12; - - if ((curExcelPos + 40) <= dataLen) /*DH±*/ - { - /*4ֽexcel CRC*/ - crcVal = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*4ֽexcel汾*/ - curExcelPos += 4; - /*4ֽexcel*/ - curLen = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - - if (4 < curLen) - { - crc = Crc32(&data[curExcelStartPos + 4], curLen - 4); - if (crc == crcVal) - { - /*4ֽsheet*/ - sheetCount = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*24ֽԤ*/ - curExcelPos += 24; - - for (sheetIdx = 0; sheetIdx < sheetCount; sheetIdx++) - { - if ((curExcelPos + 24) <= dataLen) /*DH±*/ - { - /*4ֽsheet*/ - curSheetId = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - if (curSheetId == sheetId) - { - sheetInfo->Id = curSheetId; - /*4ֽڳ*/ - sheetInfo->Len = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*4ֽsheetexcelλ*/ - sheetInfo->StartIdx = LongFromChar(&data[curExcelPos]); - curExcelPos += 4; - /*2ֽ*/ - sheetInfo->RowCount = ShortFromChar(&data[curExcelPos]); - curExcelPos += 2; - /*2ֽ*/ - curExcelPos += 2; - /*8ֽԤ*/ - curExcelPos += 8; - - sheetInfo->Data = &data[curExcelStartPos]; - isFind = 1u; - } - else - { - curExcelPos += 20; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if ((1u == isFind) || (1u == isBreak)) - { - break; - } - } - } - else /*crc*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /**/ - { - idx += 20; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if ((1u == isFind) || (1u == isBreak)) - { - break; - } - } + StDsuRsspiFindExcel(sheetInfo, data, dataLen, idx, excelCount, excelId, sheetId); /*-< ҶӦexcleݺ*/ } } } } } +/** + * @brief StDsuRsspiFindExcel ҶӦexcle + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param idx ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelCount excle ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StDsuRsspiFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT32 excelIdx = 0u; /*excel±*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ + UINT32 curExcelId = 0u; /*ǰexcel*/ + UINT32 curExcelPos = 0u; /*ǰexcelλ*/ + UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ + UINT32 crcVal = 0u; /*crcֵ*/ + UINT32 crc = 0u; /*crc*/ + UINT32 curLen = 0u; /*ǰ*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ + UINT32 sheetCount = 0u; /*sheet*/ + + if ((NULL != sheetInfo) && (NULL != data)) /*-< Ƿǿ*/ + { + for (excelIdx = 0u; excelIdx < excelCount; excelIdx++) /*-< excel±ǷСexcel*/ + { + deepPro = 0u; /*-< ô־Ϊ*/ + + if ((idx + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curExcelId = LongFromChar(&data[idx]); /*-< õǰexcleID*/ + idx += 4u; /*-< ǰ±4*/ + + if (curExcelId == excelId) /*-< õǰexcleIDǷΪҪҵ*/ + { + /*4ֽڳ*/ + idx += 4u; /*-< ǰ±4*/ + + /*4ֽexcelλ*/ + curExcelPos = LongFromChar(&data[idx]); /*-< õǰexcelλ*/ + curExcelStartPos = curExcelPos; /*-< ¼ǰexcelλΪexcelʼλ*/ + idx += 4u; /*-< ǰ±4*/ + + /*12ֽԤ*/ + idx += 12u; /*-< ǰ±12*/ + + if ((curExcelPos + 40u) <= dataLen) /*-< ʹݳǷϷ*/ + { + crcVal = LongFromChar(&data[curExcelPos]); /*-< õCRCֵ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*4ֽexcel汾*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + curLen = LongFromChar(&data[curExcelPos]); /*-< õexcel*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + if ((4u < curLen) && ((curExcelStartPos + curLen) <= dataLen)) /*-< excelȴ4 excelʼλüӳСڵݳ*/ + { + deepPro = 1u; /*-< ô־Ϊ*/ + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /**/ + { + idx += 20u; /*-< ǰ±20*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + crc = Crc32(&data[curExcelStartPos + 4u], curLen - 4u); /*-< excelCRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷ*/ + { + sheetCount = LongFromChar(&data[curExcelPos]); /*-< õsheetҳ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*24ֽԤ*/ + curExcelPos += 24u; /*-< ǰexcelλ24*/ + + isBreak = StDsuRsspiFindSheet(sheetInfo, data, dataLen, curExcelStartPos, &curExcelPos, sheetCount, sheetId); /*-< ҶӦsheetҳݺ*/ + } + else /*crc*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + + if (1u == isBreak) /*-< ˳ʶΪǷΪ*/ + { + break; /*-< ˳*/ + } + } + } +} + +/** + * @brief StDsuRsspiFindSheet ҶӦsheetҳ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelStartPos excelʼλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelPos ǰexcelλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetCount sheetҳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StDsuRsspiFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ˳*/ + UINT32 sheetIdx = 0u; /*sheet±*/ + UINT32 curSheetId = 0u; /*ǰsheet*/ + UINT32 curSheetStartPos = 0u; /*ǰsheetʼλ*/ + + if ((NULL != sheetInfo) && (NULL != data) && (NULL != curExcelPos)) /*-< Ƿǿ*/ + { + for (sheetIdx = 0u; sheetIdx < sheetCount; sheetIdx++) /*-< sheetҳ±Ƿsheetҳ*/ + { + if (((*curExcelPos) + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curSheetId = LongFromChar(&data[*curExcelPos]); /*-< õǰsheetҳID*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + if (curSheetId == sheetId) /*-< õǰsheetҳIDǷΪҪҵ*/ + { + sheetInfo->Id = curSheetId; /*-< õǰsheetҳIDsheetҳϢ*/ + + sheetInfo->Len = LongFromChar(&data[*curExcelPos]); /*-< óȵsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + curSheetStartPos = LongFromChar(&data[*curExcelPos]); /*-< sheetexcelλõsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + sheetInfo->RowCount = ShortFromChar(&data[*curExcelPos]); /*-< sheetҳϢ*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + + /*2ֽ-*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + /*8ֽԤ*/ + (*curExcelPos) += 8u; /*-< ǰexcelλ8*/ + + sheetInfo->Data = &data[curExcelStartPos + curSheetStartPos]; /*-< sheetҳʼݵsheetҳϢ*/ + + if (0u < sheetInfo->RowCount) /*-< Ƿ*/ + { + if ((0u < sheetInfo->Len) && (0u == (sheetInfo->Len % sheetInfo->RowCount))) /*-< Ƿݳ*/ + { + sheetInfo->ColLen = sheetInfo->Len / sheetInfo->RowCount; /*-< õݳ*/ + } + else /*ݴ*/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->RowCount = 0u; /*-< Ϊ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + } + else /**/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + + rtnVal = 1u; /*-< úֵΪ˳*/ + } + else + { + (*curExcelPos) += 20u; /*-< ǰexcelλ20*/ + } + } + else /*ȴ*/ + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + + if (1u == rtnVal) /*-< ֵǷΪ˳*/ + { + break; /*-< ˳*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} + /* *: PrecSinit *: UINT32 sinit @@ -313,102 +409,103 @@ static UINT32 PrecRxdata(UINT32 sinit, UINT32 sid, UINT8 channel, UINT8 addTimes } } -/* -*: -*: const UINT32 inDataLen ݳ -* UINT8 inData[] -* const UINT32 outDataLen ݳ -* UINT8 outData[] -*: SheetInfo* inParamSheet sheetϢ -* SheetInfo* outParamSheet sheetϢ -*: -*ֵ: UINT8 Ƿɹ.0:ɹ,1:ɹ -*/ +/** + * @brief CheckInOutParamSheet + * @param inDataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ȡֵΧ:ֽ + * @param outDataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param outData ȡֵΧ:ֽ + * @param inParamSheet Ϣ ȡֵΧ:οṹSheetInfo + * @param outParamSheet Ϣ ȡֵΧ:οṹSheetInfo + * @return 0:ʧ 1:ɹ + */ static UINT8 CheckInOutParamSheet(const UINT32 inDataLen, UINT8 inData[], const UINT32 outDataLen, UINT8 outData[], SheetInfo* inParamSheet, SheetInfo* outParamSheet) { - UINT8 retVal = 0u; /*ֵ*/ - UINT32 inParamRowLen = 0u; /*г*/ + /*- ֲ*/ + const UINT32 paramColLen = 25u; /*ҪRSSPϢг*/ + UINT8 retVal = 0u; /*-< úֵΪʧ*/ UINT32 inParamRowIdx = 0u; /*±*/ UINT32 inParamDevId = 0u; /*豸ID*/ UINT32 inParamSid = 0u; /*SID*/ UINT32 inParamSinit = 0u; /*SINIT*/ UINT32 inParamDataver = 0u; /*DATAVER*/ - UINT8 isBreak = 0u; /*Ƿ˳*/ - UINT32 outParamRowLen = 0u; /*г*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ UINT32 outParamRowIdx = 0u; /*±*/ UINT32 outParamDevId = 0u; /*豸ID*/ UINT32 outParamSid = 0u; /*SID*/ UINT32 outParamSinit = 0u; /*SINIT*/ UINT32 outParamDataver = 0u; /*DATAVER*/ - UINT8 funRtn = 0u; /*-< úֵ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ - if ((NULL != outData) && (NULL != outParamSheet)) + if ((NULL != outData) && (NULL != outParamSheet)) /*-< Ƿǿ*/ { - InitSheet(outParamSheet, outDataLen, outData, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_RSSP_LNK_ID); + InitSheet(outParamSheet, outData, outDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_RSSP_LNK_ID); /*-< ȡⲿRSSPϢ*/ - if (0u < inDataLen) /**/ + if (0u < inDataLen) /*-< */ { - if ((NULL != inData) && (NULL != inParamSheet)) /**/ + if ((NULL != inData) && (NULL != inParamSheet)) /*-< ǿ*/ { - InitSheet(inParamSheet, inDataLen, inData, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_RSSP_LNK_ID); - if ((0u < inParamSheet->Len) && (0u < inParamSheet->RowCount)) /*-RSSPϢ-*/ + InitSheet(inParamSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_RSSP_LNK_ID); /*-< ȡڲRSSPϢ*/ + if ((NULL != inParamSheet->Data) && (inParamSheet->ColLen >= paramColLen)) /*-< -RSSPϢ-ȺϷ*/ { - if (0u == (inParamSheet->Len % inParamSheet->RowCount)) /**/ - { - inParamRowLen = inParamSheet->Len / inParamSheet->RowCount; - for (inParamRowIdx = 0u; inParamRowIdx < inParamSheet->RowCount; inParamRowIdx++) /*-RSSPϢ*/ - { - inParamDevId = LongFromChar(&inParamSheet->Data[inParamSheet->StartIdx + (inParamRowIdx * inParamRowLen) + 2u]); - inParamSid = LongFromChar(&inParamSheet->Data[inParamSheet->StartIdx + (inParamRowIdx * inParamRowLen) + 12u]); - inParamSinit = LongFromChar(&inParamSheet->Data[inParamSheet->StartIdx + (inParamRowIdx * inParamRowLen) + 16u]); - inParamDataver = LongFromChar(&inParamSheet->Data[inParamSheet->StartIdx + (inParamRowIdx * inParamRowLen) + 21u]); - if ((0u < outParamSheet->Len) && (0u < outParamSheet->RowCount) && (0u == (outParamSheet->Len % outParamSheet->RowCount)))/*-RSSPϢ-*/ - { - outParamRowLen = outParamSheet->Len / outParamSheet->RowCount; - if (outParamRowLen == inParamRowLen) - { - for (outParamRowIdx = 0u; outParamRowIdx < outParamSheet->RowCount; outParamRowIdx++) /*-RSSPϢ*/ - { - outParamDevId = LongFromChar(&outParamSheet->Data[outParamSheet->StartIdx + (outParamRowIdx * outParamRowLen) + 2u]); - outParamSid = LongFromChar(&outParamSheet->Data[outParamSheet->StartIdx + (outParamRowIdx * outParamRowLen) + 12u]); - outParamSinit = LongFromChar(&outParamSheet->Data[outParamSheet->StartIdx + (outParamRowIdx * outParamRowLen) + 16u]); - outParamDataver = LongFromChar(&outParamSheet->Data[outParamSheet->StartIdx + (outParamRowIdx * outParamRowLen) + 21u]); - if ((outParamDevId == inParamDevId) && (outParamSid == inParamSid) && (outParamSinit == inParamSinit) && (outParamDataver == inParamDataver)) /*ͬ*/ - { - isBreak = 1u; /*˳*/ - break; - } - } - } - else /*гȲͬ*/ - { - isBreak = 1u; - } - } - if (1u == isBreak) /*˳*/ - { - break; - } - } - if (0u == isBreak) /*ͬ*/ - { - retVal = 1u; - } - } + deepPro = 1u; /*-< ô־Ϊ*/ } else /*RSSPϢ */ { - retVal = 1u; + retVal = 1u; /*-< úֵΪɹ*/ } } } else /**/ { - retVal = 1u; + retVal = 1u; /*-< úֵΪɹ*/ } } - return retVal; + if (1u == deepPro) /*-< ־ǷΪ*/ + { + for (inParamRowIdx = 0u; inParamRowIdx < inParamSheet->RowCount; inParamRowIdx++) /*-< -RSSPϢ*/ + { + /*- õַ,SID,SINIT,DATAVER*/ + inParamDevId = LongFromChar(&inParamSheet->Data[(inParamRowIdx * inParamSheet->ColLen) + 2u]); + inParamSid = LongFromChar(&inParamSheet->Data[(inParamRowIdx * inParamSheet->ColLen) + 12u]); + inParamSinit = LongFromChar(&inParamSheet->Data[(inParamRowIdx * inParamSheet->ColLen) + 16u]); + inParamDataver = LongFromChar(&inParamSheet->Data[(inParamRowIdx * inParamSheet->ColLen) + 21u]); + if ((NULL != outParamSheet->Data) && (outParamSheet->ColLen >= paramColLen)) /*-< -RSSPϢ-ǷϷ*/ + { + if (outParamSheet->ColLen == inParamSheet->ColLen) /*-< -RSSPϢ-Ƿ*/ + { + for (outParamRowIdx = 0u; outParamRowIdx < outParamSheet->RowCount; outParamRowIdx++) /*-< -RSSPϢ*/ + { + /*- õַ,SID,SINIT,DATAVER*/ + outParamDevId = LongFromChar(&outParamSheet->Data[(outParamRowIdx * outParamSheet->ColLen) + 2u]); + outParamSid = LongFromChar(&outParamSheet->Data[(outParamRowIdx * outParamSheet->ColLen) + 12u]); + outParamSinit = LongFromChar(&outParamSheet->Data[(outParamRowIdx * outParamSheet->ColLen) + 16u]); + outParamDataver = LongFromChar(&outParamSheet->Data[(outParamRowIdx * outParamSheet->ColLen) + 21u]); + if ((outParamDevId == inParamDevId) && (outParamSid == inParamSid) && (outParamSinit == inParamSinit) && (outParamDataver == inParamDataver)) /*-< Ƿͬ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + break; /*-< ˳ѭ*/ + } + } + } + else /*гȲͬ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + if (1u == isBreak) /*-< Ƿ˳ʶǷΪ*/ + { + break; /*-< ˳ѭ*/ + } + } + if (0u == isBreak) /*ͬ*/ + { + retVal = 1u; /*-< úֵΪɹ*/ + } + } + + return retVal; /*-< غֵ*/ } /* @@ -495,47 +592,51 @@ static void GenerateParamsRow(SafeParam* locSafeParam, SafeParam* oppSafeParam, */ static UINT8 GetDevSafeParamFromSheet(const UINT32 locHlhtId, SheetInfo* paramSheet, SafeParam* safeParam) { + /*- ֲ*/ +#ifdef RSSP_NO_HLHT + const UINT32 paramColLen = 23u; /*ҪRSSPϢг*/ +#else + const UINT32 paramColLen = 27u; /*ҪRSSPϢг*/ +#endif UINT8 rtnVal = 0u; /*-< úֵΪʧ*/ - UINT32 colLen = 0u; /*ֽڳ*/ UINT32 curIdx = 0u; /*±*/ UINT32 devId = 0u; /*豸ID*/ UINT32 channelIdx = 0u; /*ֵͨλ*/ UINT32 i = 0u; /*ͨ±*/ UINT32 paramVal[2][6] = { 0 }; /*ڱȽֵ*/ - if ((NULL != paramSheet) && (NULL != safeParam) && (0u < paramSheet->Len) && (0u < paramSheet->RowCount) && (0u == paramSheet->Len % paramSheet->RowCount) && (0u == (paramSheet->RowCount % 2u))) /*-< ǷǿұݳǷ00Ϊ2ݳ*/ + if ((NULL != paramSheet) && (NULL != safeParam) && (NULL != paramSheet->Data) && (paramSheet->ColLen >= paramColLen)) /*-< Ƿǿ ұֽڳȺϷ*/ { - colLen = paramSheet->Len / paramSheet->RowCount; /*-< г*/ for (curIdx = 0u; curIdx < paramSheet->RowCount; curIdx += 2) /*-< ǰȽ±ǷС*/ { #ifdef RSSP_NO_HLHT - devId = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + (curIdx * colLen) + 2]); /*-< õǰΨһID*/ + devId = ShortFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ #else - devId = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + (curIdx * colLen) + 2]); /*-< õǰΨһID*/ + devId = LongFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ #endif if (devId == locHlhtId) /*-< ǰΨһIDǷΪ豸ΨһID*/ { for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ { #ifdef RSSP_NO_HLHT - paramVal[i][1] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + 2u]); /*-< õǰΨһID*/ + paramVal[i][1] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + 2u]); /*-< õǰΨһID*/ channelIdx = 6u; /*-< ͨ±*/ #else - paramVal[i][1] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + 2u]); /*-< õǰΨһID*/ + paramVal[i][1] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + 2u]); /*-< õǰΨһID*/ channelIdx = 10u; /*-< ͨ±*/ #endif - paramVal[i][0] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx]); /*-< õǰͨ*/ - paramVal[i][2] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 2u]); /*-< õǰSID*/ - paramVal[i][3] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 6u]); /*-< õǰSINIT*/ - paramVal[i][4] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ - paramVal[i][5] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 15u]); /*-< õǰADDR*/ + paramVal[i][0] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx]); /*-< õǰͨ*/ + paramVal[i][2] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 2u]); /*-< õǰSID*/ + paramVal[i][3] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 6u]); /*-< õǰSINIT*/ + paramVal[i][4] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ + paramVal[i][5] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 15u]); /*-< õǰADDR*/ } if ((1u == paramVal[0][0]) && (2u == paramVal[1][0]) && (paramVal[0][1] == paramVal[1][1]) && (paramVal[0][5] == paramVal[1][5])) /*-< ͨ,ΨһID,ADDRǷȷ*/ { safeParam->DevId = paramVal[0][1]; /*-< ΨһID*/ - safeParam->Addr = paramVal[0][5]; /*-< ADDR*/ + safeParam->Addr = (UINT16)paramVal[0][5]; /*-< ADDR*/ for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ { safeParam->Sid[i] = paramVal[i][2]; /*-< SID*/ @@ -592,48 +693,46 @@ static UINT8 GetDevSafeParam(const UINT32 locHlhtId, SheetInfo* outParamSheet, S return rtnVal; /*-< غֵ*/ } -/* -*: ȡͨŵ豸б -*: const UINT16 locTypeId ID -* SheetInfo* commSheet 豸ͨЭ -* UINT16 maxCommTypesLen ͨ豸鳤 -*: UINT16* commTypesLen 豸鳤 -* UINT8 commTypes[] 豸 -*: -*ֵ: -*/ +/** + * @brief GetCommTypes ȡͨŵ豸б + * @param locTypeId ID ȡֵΧ:0x0000-0xFFFF + * @param commSheet 豸ͨЭϢ ȡֵΧ:οṹSheetInfo + * @param commTypesLen 豸б ȡֵΧ:0x0000-0xFFFF + * @param commTypes 豸б ȡֵΧ:ֽ + * @param maxCommTypesLen 豸б ȡֵΧ:0x0000-0xFFFF + */ static void GetCommTypes(const UINT16 locTypeId, SheetInfo* commSheet, UINT16* commTypesLen, UINT8 commTypes[], const UINT16 maxCommTypesLen) { + /*- ֲ*/ + const UINT32 commColLen = 3u; /*Ҫ豸ͨЭг*/ UINT8 locType = 0u; /**/ - UINT32 rowLen = 0u; /*г*/ UINT32 rowIdx = 0u; /*±*/ UINT8 locDevType = 0u; /*豸*/ UINT8 oppDevType = 0u; /*Է豸*/ UINT8 ptclType = 0u; /*Э*/ UINT32 i = 0u; /*ѭ*/ - if ((NULL != commSheet) && (NULL != commTypesLen) && (NULL != commTypes) && (0u < commSheet->Len) && (0u < commSheet->RowCount) && (0u == commSheet->Len % commSheet->RowCount)) /*ⲿ-豸IPַ-*/ + if ((NULL != commSheet) && (NULL != commTypesLen) && (NULL != commTypes) && (NULL != commSheet->Data) && (commSheet->ColLen >= commColLen)) /*-< ⲿ-豸IPַ-ǷϷ*/ { - locType = (UINT8)((locTypeId >> 8) & 0xFF); - rowLen = commSheet->Len / commSheet->RowCount; - for (rowIdx = 0u; rowIdx < commSheet->RowCount; rowIdx++) /*豸IPַ*/ + locType = (UINT8)((locTypeId >> 8) & 0xFF); /*-< õ*/ + for (rowIdx = 0u; rowIdx < commSheet->RowCount; rowIdx++) /*-< 豸IPַ*/ { - locDevType = commSheet->Data[commSheet->StartIdx + (rowIdx * rowLen)]; - oppDevType = commSheet->Data[commSheet->StartIdx + (rowIdx * rowLen) + 1]; - ptclType = commSheet->Data[commSheet->StartIdx + (rowIdx * rowLen) + 2]; - if ((locDevType == locType) && (4u == ptclType)) /*DZ豸RSSPI*/ + locDevType = commSheet->Data[(rowIdx * commSheet->ColLen)]; /*-< õ豸*/ + oppDevType = commSheet->Data[(rowIdx * commSheet->ColLen) + 1]; /*-< õԷ豸*/ + ptclType = commSheet->Data[(rowIdx * commSheet->ColLen) + 2]; /*-< õЭ*/ + if ((locDevType == locType) && (4u == ptclType)) /*-< DZ豸RSSPI*/ { - for (i = 0; i < (*commTypesLen); i++) + for (i = 0; i < (*commTypesLen); i++) /*-< 豸б±С豸б*/ { - if (commTypes[i] == oppDevType) + if (commTypes[i] == oppDevType) /*-< ǷԷ豸*/ { - break; + break; /*-< ˳*/ } } - if ((i == (*commTypesLen)) && ((*commTypesLen) < maxCommTypesLen)) /*ظ,*/ + if ((i == (*commTypesLen)) && ((*commTypesLen) < maxCommTypesLen)) /*-< ظ ҿ*/ { - commTypes[*commTypesLen] = oppDevType; - (*commTypesLen)++; + commTypes[*commTypesLen] = oppDevType; /*-< 豸бӶԷ豸*/ + (*commTypesLen)++; /*-< 豸бԼ1*/ } } } @@ -654,115 +753,77 @@ static void GetCommTypes(const UINT16 locTypeId, SheetInfo* commSheet, UINT16* c */ static UINT8 GetOppSafeParams(const UINT16 locAddr, const UINT8 oppDevType, SheetInfo* paramSheet, UINT32* oppSafeParamsNum, SafeParam sfeParamsNum[], const UINT32 maxOppSafeParamsNum, SheetInfo* otherParamSheet, DSU_RSSP_INFO_STRU_WL* dsuRsspInfo) { + /*- ֲ*/ +#ifdef RSSP_NO_HLHT + const UINT32 paramColLen = 23u; /*ҪRSSPϢг*/ +#else + const UINT32 paramColLen = 27u; /*ҪRSSPϢг*/ +#endif UINT8 rtnVal = 0u; /*-< úֵΪʧ*/ - UINT32 colLen = 0u; /*ֽڳ*/ UINT32 curIdx = 0u; /*ǰ±*/ UINT32 hlhtId = 0u; /*ΨһͨID*/ UINT16 devTypeId = 0u; /*豸ID*/ UINT32 i = 0u; /*ѭ*/ UINT32 channelIdx = 0u; /*ֵͨλ*/ - UINT16 curAddr = 0u; /*ǰADDR*/ + UINT16 curLocAddr = 0u; /*ǰADDR*/ + UINT16 curOppAddr = 0u; /*ǰԷADDR*/ UINT32 curCmpVal[2][6] = { 0 }; /*ǰڱȽֵ*/ - UINT8 funRtn = 0u; /*õúֵΪʧ*/ UINT8 isErr = 0u; /*Ƿд*/ if ((NULL != paramSheet) && (NULL != oppSafeParamsNum) && (NULL != sfeParamsNum) && (NULL != otherParamSheet) && (NULL != dsuRsspInfo)) /*-< Ƿǿ*/ { - if ((0u < paramSheet->Len) && (0u < paramSheet->RowCount)) /*-< Ƿ*/ + if ((NULL != paramSheet->Data) && (paramSheet->ColLen >= paramColLen)) /*-< Ƿ*/ { - if (0u == paramSheet->Len % paramSheet->RowCount) /*-< ݳǷ*/ + for (curIdx = 0u; curIdx < paramSheet->RowCount; curIdx += 2) /*-< ǰ±ǷС*/ { - colLen = paramSheet->Len / paramSheet->RowCount; /*-< г*/ - for (curIdx = 0u; curIdx < paramSheet->RowCount; curIdx += 2) /*-< ǰ±ǷС*/ - { #ifdef RSSP_NO_HLHT - hlhtId = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + (curIdx * colLen) + 2]); /*-< õǰΨһID*/ - devTypeId = (UINT16)hlhtId; - channelIdx = 6u; /*-< ͨ±*/ + hlhtId = ShortFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ + devTypeId = (UINT16)hlhtId; /*-< ȡ豸ID*/ + channelIdx = 6u; /*-< ͨ±*/ #else - hlhtId = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + (curIdx * colLen) + 2]); /*-< õǰΨһID*/ - devTypeId = DquToDevTypeId(hlhtId, dsuRsspInfo); /*-< ȡ豸ID*/ - channelIdx = 10u; /*-< ͨ±*/ + hlhtId = LongFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ + devTypeId = DquToDevTypeId(hlhtId, dsuRsspInfo); /*-< ȡ豸ID*/ + channelIdx = 10u; /*-< ͨ±*/ #endif - curAddr = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + (curIdx * colLen) + channelIdx + 19u]); /*-< õǰADDR*/ - if (((UINT8)((devTypeId >> 8) & 0xFF) == oppDevType) && ((curAddr == locAddr) || (0u == curAddr))) /*-< ǷĿ豸 ҵǰADDRΪADDRΪ0*/ + curLocAddr = ShortFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + channelIdx + 15u]); /*-< õǰADDR*/ + curOppAddr = ShortFromChar(¶mSheet->Data[(curIdx * paramSheet->ColLen) + channelIdx + 19u]); /*-< õǰADDR*/ + if (((UINT8)((devTypeId >> 8) & 0xFF) == oppDevType) && (curLocAddr != locAddr) && ((curOppAddr == locAddr) || (0u == curOppAddr))) /*-< ǷĿ豸 ҵǰADDRΪADDRΪ0*/ + { + for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ { - for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ - { - curCmpVal[i][0] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx]); /*-< õǰͨ*/ + curCmpVal[i][0] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx]); /*-< õǰͨ*/ #ifdef RSSP_NO_HLHT - curCmpVal[i][1] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + 2]); /*-< õǰΨһID*/ + curCmpVal[i][1] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ #else - curCmpVal[i][1] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + 2]); /*-< õǰΨһID*/ + curCmpVal[i][1] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + 2]); /*-< õǰΨһID*/ #endif - curCmpVal[i][2] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 2u]); /*-< õǰSID*/ - curCmpVal[i][3] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 6u]); /*-< õǰSINIT*/ - curCmpVal[i][4] = LongFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ - curCmpVal[i][5] = ShortFromChar(¶mSheet->Data[paramSheet->StartIdx + ((curIdx + i) * colLen) + channelIdx + 15u]); /*-< õǰADDR*/ - } - - if ((1u == curCmpVal[0][0]) && (2u == curCmpVal[1][0]) && (curCmpVal[0][1] == curCmpVal[1][1]) && (curCmpVal[0][5] == curCmpVal[1][5])) /*-< ǰͨǷȷ*/ - { - for (i = 0; i < (*oppSafeParamsNum); i++) /*-< ǰԷȫ±ǷСڲ*/ - { - if (sfeParamsNum[i].DevId == hlhtId) /*-< ȫбǷд˲*/ - { - break; /*-< ˳*/ - } - } - if (i == (*oppSafeParamsNum)) /*-< Ƿ޴˲*/ - { - if ((*oppSafeParamsNum) < maxOppSafeParamsNum) /*-< ǷӰȫ*/ - { - sfeParamsNum[*oppSafeParamsNum].DevId = hlhtId; /*-< ΨһID*/ - sfeParamsNum[*oppSafeParamsNum].Addr = curCmpVal[0][5]; /*-< ADDR*/ - for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ - { - sfeParamsNum[*oppSafeParamsNum].Sid[i] = curCmpVal[i][2]; /*-< SID*/ - sfeParamsNum[*oppSafeParamsNum].Sinit[i] = curCmpVal[i][3]; /*-< SINIT*/ - sfeParamsNum[*oppSafeParamsNum].Dataver[i] = curCmpVal[i][4]; /*-< DATAVER*/ - } - - funRtn = CheckSafeParamOnly(&sfeParamsNum[*oppSafeParamsNum], paramSheet); /*-< ûȡ鰲ȫΨһ,ֵúֵ*/ - if (1u == funRtn) /*-< úǷɹ*/ - { - funRtn = CheckSafeParamOnly(&sfeParamsNum[*oppSafeParamsNum], otherParamSheet); /*-< ûȡ鰲ȫΨһ,ֵúֵ*/ - if (1u != funRtn) /*-< úǷdzɹ*/ - { - isErr = 1u; /*-< д*/ - } - } - else - { - isErr = 1u; /*-< д*/ - } - - (*oppSafeParamsNum)++; /*-< ԷȫԼ1*/ - } - else - { - isErr = 1u; /*-< д*/ - } - } - } - else - { - isErr = 1u; /*-< д*/ - } + curCmpVal[i][2] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 2u]); /*-< õǰSID*/ + curCmpVal[i][3] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 6u]); /*-< õǰSINIT*/ + curCmpVal[i][4] = LongFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ + curCmpVal[i][5] = ShortFromChar(¶mSheet->Data[((curIdx + i) * paramSheet->ColLen) + channelIdx + 15u]); /*-< õǰADDR*/ } - if (1u == isErr) /*-< Ƿд*/ + if ((1u == curCmpVal[0][0]) && (2u == curCmpVal[1][0]) && (curCmpVal[0][1] == curCmpVal[1][1]) && (curCmpVal[0][5] == curCmpVal[1][5])) /*-< ǰͨǷȷ*/ { - break; /*-< ˳*/ + isErr = SetOppSafeParam(paramSheet, oppSafeParamsNum, sfeParamsNum, maxOppSafeParamsNum, hlhtId, curCmpVal, otherParamSheet); /*-< ͨŵĶԷ豸ȫ*/ + } + else + { + isErr = 1u; /*-< д*/ } } - if (0u == isErr) /*-< Ƿ޴*/ + + if (1u == isErr) /*-< Ƿд*/ { - rtnVal = 1u; /*-< úֵΪɹ*/ + break; /*-< ˳*/ } } + if (0u == isErr) /*-< Ƿ޴*/ + { + rtnVal = 1u; /*-< úֵΪɹ*/ + } } else { @@ -773,6 +834,68 @@ static UINT8 GetOppSafeParams(const UINT16 locAddr, const UINT8 oppDevType, Shee return rtnVal; /*-< غֵ*/ } +/** + * @brief SetOppSafeParam ͨŵĶԷ豸ȫ + * @param paramSheet ڲҵRSSPϢ ȡֵΧ:οṹSheetInfo + * @param oppSafeParamsNum Է豸ȫб ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sfeParamsNum Է豸ȫб ȡֵΧ:SafeParam + * @param maxOppSafeParamsNum Է豸ȫб ȡֵΧ:0x00000000-0xFFFFFFFF + * @param hlhtId ΨһͨID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curCmpVal ǰڱȽֵ ȡֵΧ:ֽ + * @param otherParamSheet ڲҵRSSPϢ ȡֵΧ:οṹSheetInfo + * @return 0:޴;1:д + */ +static UINT8 SetOppSafeParam(SheetInfo* paramSheet, UINT32* oppSafeParamsNum, SafeParam sfeParamsNum[], const UINT32 maxOppSafeParamsNum, UINT32 hlhtId, UINT32 curCmpVal[2][6], SheetInfo* otherParamSheet) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ޴*/ + UINT32 i = 0u; /*ѭ*/ + UINT8 funRtn = 0u; /*õúֵΪʧ*/ + + if ((NULL != oppSafeParamsNum) && (NULL != sfeParamsNum) && (NULL != curCmpVal)) /*-< Ƿǿ*/ + { + for (i = 0; i < (*oppSafeParamsNum); i++) /*-< ǰԷȫ±ǷСڲ*/ + { + if (sfeParamsNum[i].DevId == hlhtId) /*-< ȫбǷд˲*/ + { + break; /*-< ˳*/ + } + } + if (i == (*oppSafeParamsNum)) /*-< Ƿ޴˲*/ + { + if ((*oppSafeParamsNum) < maxOppSafeParamsNum) /*-< ǷӰȫ*/ + { + sfeParamsNum[*oppSafeParamsNum].DevId = hlhtId; /*-< ΨһID*/ + sfeParamsNum[*oppSafeParamsNum].Addr = (UINT16)curCmpVal[0][5]; /*-< ADDR*/ + for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ + { + sfeParamsNum[*oppSafeParamsNum].Sid[i] = curCmpVal[i][2]; /*-< SID*/ + sfeParamsNum[*oppSafeParamsNum].Sinit[i] = curCmpVal[i][3]; /*-< SINIT*/ + sfeParamsNum[*oppSafeParamsNum].Dataver[i] = curCmpVal[i][4]; /*-< DATAVER*/ + } + + funRtn = CheckSafeParamOnly(&sfeParamsNum[*oppSafeParamsNum], paramSheet); /*-< ûȡ鰲ȫΨһ,ֵúֵ*/ + if (1u == funRtn) /*-< úǷɹ*/ + { + funRtn = CheckSafeParamOnly(&sfeParamsNum[*oppSafeParamsNum], otherParamSheet); /*-< ûȡ鰲ȫΨһ,ֵúֵ*/ + } + if (1u != funRtn) /*-< úǷdzɹ*/ + { + rtnVal = 1u; /*-< д*/ + } + + (*oppSafeParamsNum)++; /*-< ԷȫԼ1*/ + } + else + { + rtnVal = 1u; /*-< д*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} + /** * @brief DsuRsspInitWl RSSPIЭѯʼ,ֻڳʼʱʹ * @param pFsName FSļ ȡֵΧ:ļַ @@ -785,18 +908,17 @@ static UINT8 GetOppSafeParams(const UINT16 locAddr, const UINT8 oppDevType, Shee */ UINT8 DsuRsspInitWl(UINT8* pFsName, UINT32 inDataLen, UINT8 inData[], UINT16 localTypeId, UINT16 localLogicId, DSU_RSSP_INFO_STRU_WL* pDsuRsspInfo) { - UINT8 rtn = 0; /*-< úֵΪʧ*/ - UINT8 readRtn = 0; /*ȡFSֵ*/ + /*- ֲ*/ + const UINT32 configColLen = 11u; /*Ҫ豸ͨԱг*/ + UINT8 rtn = 0u; /*-< úֵΪʧ*/ + UINT8 readRtn = 0u; /*ȡFSֵ*/ UINT8* pData = NULL; /**/ - UINT32 dataLen = 0; /*ݳ*/ - UINT16 rsspILinkLen = 0; /*- 뱾豸ͨŵЭͨŹϵ*/ - UINT32 mallocLen = 0; /*ռС*/ - UINT32 offset = 0; /*ƫ*/ - UINT32 i = 0; /*ѭ*/ - UINT32 j = 0; /*ѭ*/ - UINT32 localId = 0; /*ΨһID*/ - UINT32 locId = 0; /*õıΨһID*/ - UINT32 oppId = 0; /*õĶԷΨһID*/ + UINT32 dataLen = 0u; /*ݳ*/ + UINT32 mallocLen = 0u; /*ռС*/ + UINT32 offset = 0u; /*ƫ*/ + UINT32 i = 0u; /*ѭ*/ + UINT32 j = 0u; /*ѭ*/ + UINT32 localId = 0u; /*ΨһID*/ SheetInfo inParamSheet = { 0 }; SheetInfo outParamSheet = { 0 }; @@ -815,59 +937,18 @@ UINT8 DsuRsspInitWl(UINT8* pFsName, UINT32 inDataLen, UINT8 inData[], UINT16 loc UINT8 isBreak = 0u; /*Ƿ˳*/ SheetInfo configSheet = { 0 }; /*豸ͨsheetҳ*/ - UINT32 rowLen = 0u; /*г*/ UINT8 hasSame = 0u; /*ͬ*/ UINT16 inLocDevType = 0u; /*ڲ豸*/ UINT16 inOppDevType = 0u; /*ڲԷ豸*/ UINT16 rowCount = 0u; /**/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ if (NULL != pDsuRsspInfo) /*-< Ƿǿ*/ { #ifdef RSSP_NO_HLHT localId = localTypeId; /*-< ñΨһID*/ -#else - /*ȡZCŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_ZC_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->ZcRowNum, &pDsuRsspInfo->ZcHlhtids); /*-< óʼŶձZC*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡCIŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_CI_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->CiRowNum, &pDsuRsspInfo->CiHlhtids); /*-< óʼŶձCI*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡATSŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_ATS_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->AtsRowNum, &pDsuRsspInfo->AtsHlhtids); /*-< óʼŶձATS*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡVOBCŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_VOBC_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->VobcRowNum, &pDsuRsspInfo->VobcHlhtids); /*-< óʼŶձVOBC*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡDSUŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_DSU_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->DsuRowNum, &pDsuRsspInfo->DsuHlhtids); /*-< óʼŶձDSU*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡAOMŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_AOMSEC_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->AomRowNum, &pDsuRsspInfo->AomHlhtids); /*-< óʼŶձAOM*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡTDTŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_TDT_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->TdtRowNum, &pDsuRsspInfo->TdtHlhtids); /*-< óʼŶձTDT*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡϵͳŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_AXLE_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->AxleRowNum, &pDsuRsspInfo->AxleHlhtids); /*-< óʼŶձļϵͳ*/ - if (1 == readRtn) /*-< úǷɹ*/ - { - /*ȡITEŶձ*/ - readRtn = DquInitHlhtId(pFsName, IDMAP_ITE_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->IteRowNum, &pDsuRsspInfo->IteHlhtids); /*-< óʼŶձITE*/ - } - } - } - } - } - } - } - } +#else + DquInitAllHlhtId(pFsName, pDsuRsspInfo); /*-< óʼлͨID*/ localId = DquTypeIdToHlhtId(localTypeId, localLogicId, pDsuRsspInfo); /*-< ñΨһID*/ #endif paramCheckRtn = CheckInOutParamSheet(inDataLen, inData, g_DataBufLen, g_pDataBuf, &inParamSheet, &outParamSheet); /*-< ü*/ @@ -875,175 +956,180 @@ UINT8 DsuRsspInitWl(UINT8* pFsName, UINT32 inDataLen, UINT8 inData[], UINT16 loc { mallocLen = sizeof(SafeParam) * COMM_DEV_MAX_NUM; /*-< ͨŵİȫС*/ oppSafeParams = (SafeParam*)malloc(mallocLen); /*-< ͨŵİȫ*/ - if (NULL != oppSafeParams) /*-< ͨŵİȫǷɹ*/ - { - CommonMemSet(oppSafeParams, mallocLen, 0, mallocLen); /*-< ͨŵİȫ*/ + } + if (NULL != oppSafeParams) /*-< ͨŵİȫǷɹ*/ + { + CommonMemSet(oppSafeParams, mallocLen, 0u, mallocLen); /*-< ͨŵİȫ*/ - funRtn = GetDevSafeParam(localId, &outParamSheet, &inParamSheet, &locSafeParam); /*-< ûȡȫ,ֵúֵ*/ + funRtn = GetDevSafeParam(localId, &outParamSheet, &inParamSheet, &locSafeParam); /*-< ûȡȫ,ֵúֵ*/ + } + if (1u == funRtn) /*-< úǷɹ*/ + { + InitSheet(&outCommSheet, g_pDataBuf, g_DataBufLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); /*-< ʼ豸ͨЭ*/ + InitSheet(&inCommSheet, inData, inDataLen, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); /*-< ʼ豸ͨЭ*/ + GetCommTypes(localTypeId, &outCommSheet, &commTypesLen, commTypes, COMM_DEV_TYPE_MAX_NUM); /*-< 豸ͨЭлȡͨ豸*/ + GetCommTypes(localTypeId, &inCommSheet, &commTypesLen, commTypes, COMM_DEV_TYPE_MAX_NUM); /*-< 豸ͨЭлȡͨ豸*/ + } + if (0u < commTypesLen) /*-< Ƿͨ豸*/ + { + funRtn = 0u; /*-< õúֵΪ0*/ + + for (i = 0u; i < commTypesLen; i++) /*-< ͨ豸±ǷСͨ豸*/ + { + funRtn = GetOppSafeParams(locSafeParam.Addr, commTypes[i], &outParamSheet, &oppSafeParamsNum, oppSafeParams, COMM_DEV_MAX_NUM, &inParamSheet, pDsuRsspInfo); /*-< ûȡԷȫ,ֵúֵ*/ if (1u == funRtn) /*-< úǷɹ*/ { - InitSheet(&outCommSheet, g_DataBufLen, g_pDataBuf, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); /*-< ʼ豸ͨЭ*/ - InitSheet(&inCommSheet, inDataLen, inData, DSU_DEVICE_IP_CONFIG_TYPE, DSU_DATA_IP_COMM_PROTCL_ID); /*-< ʼ豸ͨЭ*/ - GetCommTypes(localTypeId, &outCommSheet, &commTypesLen, commTypes, COMM_DEV_TYPE_MAX_NUM); /*-< 豸ͨЭлȡͨ豸*/ - GetCommTypes(localTypeId, &inCommSheet, &commTypesLen, commTypes, COMM_DEV_TYPE_MAX_NUM); /*-< 豸ͨЭлȡͨ豸*/ - if (0u < commTypesLen) /*-< Ƿͨ豸*/ + funRtn = GetOppSafeParams(locSafeParam.Addr, commTypes[i], &inParamSheet, &oppSafeParamsNum, oppSafeParams, COMM_DEV_MAX_NUM, &outParamSheet, pDsuRsspInfo); /*-< ûȡԷȫ,ֵúֵ*/ + if (0u == funRtn) /*-< úǷʧ*/ { - for (i = 0u; i < commTypesLen; i++) /*-< ͨ豸±ǷСͨ豸*/ - { - funRtn = GetOppSafeParams(locSafeParam.Addr, commTypes[i], &outParamSheet, &oppSafeParamsNum, oppSafeParams, COMM_DEV_MAX_NUM, &inParamSheet, pDsuRsspInfo); /*-< ûȡԷȫ,ֵúֵ*/ - if (1 == funRtn) /*-< úǷɹ*/ - { - funRtn = GetOppSafeParams(locSafeParam.Addr, commTypes[i], &inParamSheet, &oppSafeParamsNum, oppSafeParams, COMM_DEV_MAX_NUM, &outParamSheet, pDsuRsspInfo); /*-< ûȡԷȫ,ֵúֵ*/ - if (0 == funRtn) /*-< úǷʧ*/ - { - isBreak = 1u; /*-< ˳־Ϊ˳*/ - } - } - else - { - isBreak = 1u; /*-< ˳־Ϊ˳*/ - } - if (1u == isBreak) /*-< ˳־ǷΪ˳*/ - { - break; /*-< ˳*/ - } - } - - if ((1u == funRtn) && (0 < oppSafeParamsNum)) /*-< úǷɹ ͨŰȫ*/ - { - pDsuRsspInfo->RsspInfoStruLen = 4u * oppSafeParamsNum; /*-< RSSPϢ,һԷ豸Ҫ4*/ - mallocLen = sizeof(DSU_RSSP_LNK_INFO_STRU_WL) * pDsuRsspInfo->RsspInfoStruLen; /*-< SSPϢС*/ - pDsuRsspInfo->pRsspLnkInfoStru = (DSU_RSSP_LNK_INFO_STRU_WL*)malloc(mallocLen); /*-< RSSPϢ*/ - if (NULL != pDsuRsspInfo->pRsspLnkInfoStru) /*-< RSSPϢǷɹ*/ - { - CommonMemSet(pDsuRsspInfo->pRsspLnkInfoStru, mallocLen, 0, mallocLen); /*-< RSSPϢ*/ - - for (i = 0u; i < oppSafeParamsNum; i++) /*-< ǰͨŰȫ±ǷСͨŰȫ*/ - { - GenerateParamsRow(&locSafeParam, &oppSafeParams[i], &curLnkInfosLen, pDsuRsspInfo->pRsspLnkInfoStru, pDsuRsspInfo->RsspInfoStruLen); /*-< òк,ԷͨŲ*/ - GenerateParamsRow(&oppSafeParams[i], &locSafeParam, &curLnkInfosLen, pDsuRsspInfo->pRsspLnkInfoStru, pDsuRsspInfo->RsspInfoStruLen); /*-< òк,ԷͨŲ*/ - } - free(oppSafeParams); /*-< ͷŶ̬ͨŰȫб*/ - oppSafeParams = NULL; /*-< ͨŰȫбΪ*/ - oppSafeParamsNum = 0u; /*-< ͨŰȫбΪ0*/ - - InitSheet(&configSheet, inDataLen, inData, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_COMM_INFO_ID); /*-< ʼFS豸ͨԱ*/ - /*ȡ豸ͨԱ*/ - readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_COMM_INFO_ID, &pData, &dataLen); /*-< úȡFS豸ͨԱ*/ - if ((1 == readRtn) && (DSU_DEVICE_COMM_INFO_STRU_SIZE_WL <= dataLen)) /*-< úǷɹ*/ - { - pDsuRsspInfo->DeviceCommStruLen = (UINT16)(dataLen / DSU_DEVICE_COMM_INFO_STRU_SIZE_WL); /*-< ñݵĸ*/ - mallocLen = sizeof(DSU_DEVICE_COMM_INFO_STRU_WL) * (pDsuRsspInfo->DeviceCommStruLen + configSheet.RowCount); /*-< ÷ռС*/ - pDsuRsspInfo->pDevCommInfoStru = (DSU_DEVICE_COMM_INFO_STRU_WL*)malloc(mallocLen); /*-< 豸ͨԱռ*/ - if (NULL != pDsuRsspInfo->pDevCommInfoStru) /*-< 豸ͨԱǷɹ*/ - { - CommonMemSet(pDsuRsspInfo->pDevCommInfoStru, mallocLen, 0, mallocLen); /*-< 豸ͨԱ*/ - - offset = 0; /*-< ±Ϊ0*/ - for (i = 0; i < pDsuRsspInfo->DeviceCommStruLen; i++) - { - /*2ֽڱ*/ - pDsuRsspInfo->pDevCommInfoStru[i].EmitterType = ShortFromChar(&pData[offset]); /*-< ñ*/ - offset += 2; /*-< ±2*/ - /*2ֽڶԷ*/ - pDsuRsspInfo->pDevCommInfoStru[i].ReceptorType = ShortFromChar(&pData[offset]); /*-< öԷ*/ - offset += 2; /*-< ±2*/ - /*1ֽ󶪰*/ - pDsuRsspInfo->pDevCommInfoStru[i].MaxLost = pData[offset]; /*-< 󶪰*/ - offset++; /*-< ±1*/ - /*1ֽղ*/ - pDsuRsspInfo->pDevCommInfoStru[i].DLost = pData[offset]; /*-< ղ*/ - offset++; /*-< ±1*/ - /*1ֽڵȴظSSR*/ - pDsuRsspInfo->pDevCommInfoStru[i].WSsrOut = pData[offset]; /*-< õȴظSSR*/ - offset++; /*-< ±1*/ - /*1ֽڶͬ*/ - pDsuRsspInfo->pDevCommInfoStru[i].AntiDelayCount = pData[offset]; /*-< öͬ*/ - offset++; /*-< ±1*/ - /*1ֽڱijʱ*/ - pDsuRsspInfo->pDevCommInfoStru[i].TOut = pData[offset]; /*-< ñijʱ*/ - offset++; /*-< ±1*/ - - if ((UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].MaxLost) - && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].DLost) - && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].WSsrOut) - && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].AntiDelayCount) - && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].TOut)) /*-< 󶪰,Ч,SSR,ʱʱУ,ʱǷ񶼷0xFF(ֹUINT8ֵȽϴС)*/ - { - /*1ֽϢID*/ - pDsuRsspInfo->pDevCommInfoStru[i].MsgId = pData[offset]; /*-< ϢID*/ - offset++; /*-< ±1*/ - /*1ֽڽӿڰ汾*/ - pDsuRsspInfo->pDevCommInfoStru[i].IftVer = pData[offset]; /*-< ýӿڰ汾*/ - offset++; /*-< ±1*/ - } - else - { - break; /*-< ˳*/ - } - } - if (offset == dataLen) /*-< 豸ͨԱֵǷɹ*/ - { - if ((0u < configSheet.Len) && (0 == configSheet.Len % configSheet.RowCount)) /*-< FS豸ͨԱֵǷɹ*/ - { - rowLen = configSheet.Len / configSheet.RowCount; /*-< FS豸ͨԱг*/ - if (DSU_DEVICE_COMM_INFO_STRU_SIZE_WL == rowLen) /*-< FS豸ͨԱгǷȷ*/ - { - rowCount = pDsuRsspInfo->DeviceCommStruLen; /*-< õǰ*/ - for (i = 0; i < configSheet.RowCount; i++) /*-< ǰ±ǷС*/ - { - hasSame = 0u; /*-< ظ־Ϊ0*/ - inLocDevType = ShortFromChar(&configSheet.Data[configSheet.StartIdx + (i * rowLen)]); /*-< */ - inOppDevType = ShortFromChar(&configSheet.Data[configSheet.StartIdx + (i * rowLen) + 2]); /*-< Է*/ - for (j = 0; j < pDsuRsspInfo->DeviceCommStruLen; j++) /*-< ǰǷСڱ*/ - { - if ((inLocDevType == pDsuRsspInfo->pDevCommInfoStru[j].EmitterType) && (inOppDevType == pDsuRsspInfo->pDevCommInfoStru[j].ReceptorType)) /*-< ԷǷͬ*/ - { - hasSame = 1u; /*-< ظ־Ϊ1*/ - } - } - if (0u == hasSame) /*-< ظ־ǷΪ0*/ - { - pDsuRsspInfo->pDevCommInfoStru[rowCount].EmitterType = inLocDevType; /*-< ñ*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].ReceptorType = inOppDevType; /*-< öԷ*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].MaxLost = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 4]; /*-< 󶪰*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].DLost = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 5]; /*-< ղ*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].WSsrOut = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 6]; /*-< õȴظSSR*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].AntiDelayCount = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 7]; /*-< öͬ*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].TOut = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 8]; /*-< ñijʱ*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].MsgId = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 9]; /*-< ϢID*/ - pDsuRsspInfo->pDevCommInfoStru[rowCount].IftVer = configSheet.Data[configSheet.StartIdx + (i * rowLen) + 10]; /*-< ýӿڰ汾*/ - - rowCount++; /*-< 1*/ - } - } - pDsuRsspInfo->DeviceCommStruLen = rowCount; /*-< */ - } - } - - for (i = 0; i < pDsuRsspInfo->RsspInfoStruLen; i++) /*-< ǰ±ǷС*/ - { - if (pDsuRsspInfo->pRsspLnkInfoStru[i].EmitterName == localId) /*-< ΨһIDǷΪΨһID*/ - { - pDsuRsspInfo->LocEmitterName = pDsuRsspInfo->pRsspLnkInfoStru[i].EmitterName; /*-< ñΨһID*/ - pDsuRsspInfo->LocRsspiAddr = pDsuRsspInfo->pRsspLnkInfoStru[i].RsspAddr; /*-< ñЭַ*/ - break; /*-< ˳*/ - } - } - - rtn = 1; /*-< úֵΪɹ*/ - } - } - } - } - } - + isBreak = 1u; /*-< ˳־Ϊ˳*/ } } + else + { + isBreak = 1u; /*-< ˳־Ϊ˳*/ + } + if (1u == isBreak) /*-< ˳־ǷΪ˳*/ + { + break; /*-< ˳*/ + } + } + + pDsuRsspInfo->pRsspLnkInfoStru = NULL; /*-< RSSPϢ*/ + if ((1u == funRtn) && (0u < oppSafeParamsNum)) /*-< úǷɹ ͨŰȫ*/ + { + pDsuRsspInfo->RsspInfoStruLen = 4u * (UINT16)oppSafeParamsNum; /*-< RSSPϢ,һԷ豸Ҫ4*/ + mallocLen = sizeof(DSU_RSSP_LNK_INFO_STRU_WL) * pDsuRsspInfo->RsspInfoStruLen; /*-< SSPϢС*/ + pDsuRsspInfo->pRsspLnkInfoStru = (DSU_RSSP_LNK_INFO_STRU_WL*)malloc(mallocLen); /*-< RSSPϢ*/ + } + if (NULL != pDsuRsspInfo->pRsspLnkInfoStru) /*-< RSSPϢǷɹ*/ + { + CommonMemSet(pDsuRsspInfo->pRsspLnkInfoStru, mallocLen, 0u, mallocLen); /*-< RSSPϢ*/ + + for (i = 0u; i < oppSafeParamsNum; i++) /*-< ǰͨŰȫ±ǷСͨŰȫ*/ + { + GenerateParamsRow(&locSafeParam, &oppSafeParams[i], &curLnkInfosLen, pDsuRsspInfo->pRsspLnkInfoStru, pDsuRsspInfo->RsspInfoStruLen); /*-< òк,ԷͨŲ*/ + GenerateParamsRow(&oppSafeParams[i], &locSafeParam, &curLnkInfosLen, pDsuRsspInfo->pRsspLnkInfoStru, pDsuRsspInfo->RsspInfoStruLen); /*-< òк,ԷͨŲ*/ + } + free(oppSafeParams); /*-< ͷŶ̬ͨŰȫб*/ + oppSafeParams = NULL; /*-< ͨŰȫбΪ*/ + oppSafeParamsNum = 0u; /*-< ͨŰȫбΪ0*/ + + InitSheet(&configSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_COMM_INFO_ID); /*-< ʼFS豸ͨԱ*/ + /*ȡ豸ͨԱ*/ + readRtn = dquGetConfigData((CHAR*)pFsName, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_COMM_INFO_ID, &pData, &dataLen); /*-< úȡFS豸ͨԱ*/ + } + + pDsuRsspInfo->pDevCommInfoStru = NULL; /*-< 豸ͨԱ*/ + if ((1u == readRtn) && (DSU_DEVICE_COMM_INFO_STRU_SIZE_WL <= dataLen)) /*-< úǷɹ*/ + { + pDsuRsspInfo->DeviceCommStruLen = (UINT16)(dataLen / DSU_DEVICE_COMM_INFO_STRU_SIZE_WL); /*-< ñݵĸ*/ + mallocLen = sizeof(DSU_DEVICE_COMM_INFO_STRU_WL) * (pDsuRsspInfo->DeviceCommStruLen + configSheet.RowCount); /*-< ÷ռС*/ + pDsuRsspInfo->pDevCommInfoStru = (DSU_DEVICE_COMM_INFO_STRU_WL*)malloc(mallocLen); /*-< 豸ͨԱռ*/ + } + if (NULL != pDsuRsspInfo->pDevCommInfoStru) /*-< 豸ͨԱǷɹ*/ + { + CommonMemSet(pDsuRsspInfo->pDevCommInfoStru, mallocLen, 0u, mallocLen); /*-< 豸ͨԱ*/ + + offset = 0u; /*-< ±Ϊ0*/ + for (i = 0u; i < pDsuRsspInfo->DeviceCommStruLen; i++) /*-< 豸ͨԱ±С*/ + { + /*2ֽڱ*/ + pDsuRsspInfo->pDevCommInfoStru[i].EmitterType = ShortFromChar(&pData[offset]); /*-< ñ*/ + offset += 2u; /*-< ±2*/ + /*2ֽڶԷ*/ + pDsuRsspInfo->pDevCommInfoStru[i].ReceptorType = ShortFromChar(&pData[offset]); /*-< öԷ*/ + offset += 2u; /*-< ±2*/ + /*1ֽ󶪰*/ + pDsuRsspInfo->pDevCommInfoStru[i].MaxLost = pData[offset]; /*-< 󶪰*/ + offset++; /*-< ±1*/ + /*1ֽղ*/ + pDsuRsspInfo->pDevCommInfoStru[i].DLost = pData[offset]; /*-< ղ*/ + offset++; /*-< ±1*/ + /*1ֽڵȴظSSR*/ + pDsuRsspInfo->pDevCommInfoStru[i].WSsrOut = pData[offset]; /*-< õȴظSSR*/ + offset++; /*-< ±1*/ + /*1ֽڶͬ*/ + pDsuRsspInfo->pDevCommInfoStru[i].AntiDelayCount = pData[offset]; /*-< öͬ*/ + offset++; /*-< ±1*/ + /*1ֽڱijʱ*/ + pDsuRsspInfo->pDevCommInfoStru[i].TOut = pData[offset]; /*-< ñijʱ*/ + offset++; /*-< ±1*/ + + if ((UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].MaxLost) + && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].DLost) + && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].WSsrOut) + && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].AntiDelayCount) + && (UINT8_MAX != pDsuRsspInfo->pDevCommInfoStru[i].TOut)) /*-< 󶪰,Ч,SSR,ʱʱУ,ʱǷ񶼷0xFF(ֹUINT8ֵȽϴС)*/ + { + /*1ֽϢID*/ + pDsuRsspInfo->pDevCommInfoStru[i].MsgId = pData[offset]; /*-< ϢID*/ + offset++; /*-< ±1*/ + /*1ֽڽӿڰ汾*/ + pDsuRsspInfo->pDevCommInfoStru[i].IftVer = pData[offset]; /*-< ýӿڰ汾*/ + offset++; /*-< ±1*/ + } + else + { + break; /*-< ˳*/ + } + } + if (offset == dataLen) /*-< 豸ͨԱֵǷɹ*/ + { + deepPro = 1u; /*-< ô־Ϊ*/ + } } } } + if (1u == deepPro) /*-< ־ǷΪ*/ + { + if ((NULL != configSheet.Data) && (configSheet.ColLen >= configColLen)) /*-< FS豸ͨԱֵǷɹ*/ + { + rowCount = pDsuRsspInfo->DeviceCommStruLen; /*-< õǰ*/ + for (i = 0u; i < configSheet.RowCount; i++) /*-< ǰ±ǷС*/ + { + hasSame = 0u; /*-< ظ־Ϊ0*/ + inLocDevType = ShortFromChar(&configSheet.Data[(i * configSheet.ColLen)]); /*-< */ + inOppDevType = ShortFromChar(&configSheet.Data[(i * configSheet.ColLen) + 2]); /*-< Է*/ + for (j = 0u; j < pDsuRsspInfo->DeviceCommStruLen; j++) /*-< ǰǷСڱ*/ + { + if ((inLocDevType == pDsuRsspInfo->pDevCommInfoStru[j].EmitterType) && (inOppDevType == pDsuRsspInfo->pDevCommInfoStru[j].ReceptorType)) /*-< ԷǷͬ*/ + { + hasSame = 1u; /*-< ظ־Ϊ1*/ + } + } + if (0u == hasSame) /*-< ظ־ǷΪ0*/ + { + pDsuRsspInfo->pDevCommInfoStru[rowCount].EmitterType = inLocDevType; /*-< ñ*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].ReceptorType = inOppDevType; /*-< öԷ*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].MaxLost = configSheet.Data[(i * configSheet.ColLen) + 4]; /*-< 󶪰*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].DLost = configSheet.Data[(i * configSheet.ColLen) + 5]; /*-< ղ*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].WSsrOut = configSheet.Data[(i * configSheet.ColLen) + 6]; /*-< õȴظSSR*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].AntiDelayCount = configSheet.Data[(i * configSheet.ColLen) + 7]; /*-< öͬ*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].TOut = configSheet.Data[(i * configSheet.ColLen) + 8]; /*-< ñijʱ*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].MsgId = configSheet.Data[(i * configSheet.ColLen) + 9]; /*-< ϢID*/ + pDsuRsspInfo->pDevCommInfoStru[rowCount].IftVer = configSheet.Data[(i * configSheet.ColLen) + 10]; /*-< ýӿڰ汾*/ + + rowCount++; /*-< 1*/ + } + } + pDsuRsspInfo->DeviceCommStruLen = rowCount; /*-< */ + } + + for (i = 0u; i < pDsuRsspInfo->RsspInfoStruLen; i++) /*-< ǰ±ǷС*/ + { + if (pDsuRsspInfo->pRsspLnkInfoStru[i].EmitterName == localId) /*-< ΨһIDǷΪΨһID*/ + { + pDsuRsspInfo->LocEmitterName = pDsuRsspInfo->pRsspLnkInfoStru[i].EmitterName; /*-< ñΨһID*/ + pDsuRsspInfo->LocRsspiAddr = pDsuRsspInfo->pRsspLnkInfoStru[i].RsspAddr; /*-< ñЭַ*/ + break; /*-< ˳*/ + } + } + + rtn = 1u; /*-< úֵΪɹ*/ + } + return rtn; /*-< غֵ*/ } @@ -1345,8 +1431,13 @@ UINT8 dsuRsspRGetName_WL(UINT16 rsspSrcAddr,UINT16 rsspDestAddr,UINT32* destDevN */ static UINT8 CheckSafeParamOnly(SafeParam* safeParam, SheetInfo* sheetInfo) { + /*- ֲ*/ +#ifdef RSSP_NO_HLHT + const UINT32 paramColLen = 23u; /*ҪRSSPϢг*/ +#else + const UINT32 paramColLen = 27u; /*ҪRSSPϢг*/ +#endif UINT8 rtnVal = 0u; /*-< úֵΪʧ*/ - UINT32 colLen = 0u; /*ֽڳ*/ UINT32 cmpVal[2][6] = { 0 }; /*ڱȽֵ*/ UINT32 curIdx = 0u; /*-< ǰȽ±*/ UINT32 curCmpVal[2][6] = { 0 }; /*-< ǰڱȽֵ*/ @@ -1355,76 +1446,78 @@ static UINT8 CheckSafeParamOnly(SafeParam* safeParam, SheetInfo* sheetInfo) UINT32 j = 0u; /*Ƚֵ±*/ UINT8 hasSame = 0u; /*Ƿͬ־Ϊͬ*/ UINT8 hasNoSame = 0u; /*Ƿͬ־Ϊ޲ͬ*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ if ((NULL != safeParam) && (NULL != sheetInfo)) /*-< Ƿǿ*/ { - if ((0u < sheetInfo->Len) && (0u < sheetInfo->RowCount)) /*-< Ƿ*/ + if ((NULL != sheetInfo->Data) && (sheetInfo->ColLen >= paramColLen)) /*-< Ƿ*/ { - if ((0u == (sheetInfo->Len % sheetInfo->RowCount)) && (0u == (sheetInfo->RowCount % 2u))) /*-< ݳǷϷǷͨ*/ + for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ + { + cmpVal[i][1] = safeParam->DevId; /*-< ڱȽΨһID*/ + cmpVal[i][2] = safeParam->Sid[i]; /*-< ڱȽSID*/ + cmpVal[i][3] = safeParam->Sinit[i]; /*-< ڱȽSINIT*/ + cmpVal[i][4] = safeParam->Dataver[i]; /*-< ڱȽDATAVER*/ + cmpVal[i][5] = safeParam->Addr; /*-< ڱȽADDR*/ + } + + deepPro = 1u; /*-< ô־Ϊ*/ + } + else + { + rtnVal = 1u; /*-< úֵΪɹ*/ + } + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + for (curIdx = 0u; curIdx < sheetInfo->RowCount; curIdx += 2) /*-< ǰȽ±ǷС*/ + { + for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ + { +#ifdef RSSP_NO_HLHT + curCmpVal[i][1] = ShortFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + 2u]); /*-< õǰΨһID*/ + channelIdx = 6u; /*-< ͨ±*/ +#else + curCmpVal[i][1] = LongFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + 2u]); /*-< õǰΨһID*/ + channelIdx = 10u; /*-< ͨ±*/ +#endif + + curCmpVal[i][0] = ShortFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + channelIdx]); /*-< õǰͨ*/ + curCmpVal[i][2] = LongFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + channelIdx + 2u]); /*-< õǰSID*/ + curCmpVal[i][3] = LongFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + channelIdx + 6u]); /*-< õǰSINIT*/ + curCmpVal[i][4] = LongFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ + curCmpVal[i][5] = ShortFromChar(&sheetInfo->Data[((curIdx + i) * sheetInfo->ColLen) + channelIdx + 15u]); /*-< õǰADDR*/ + } + if ((1u == curCmpVal[0][0]) && (2u == curCmpVal[1][0]) && (curCmpVal[0][1] == curCmpVal[1][1]) && (curCmpVal[0][5] == curCmpVal[1][5])) /*-< ͨ,ΨһID,ADDRǷȷ*/ { for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ { - cmpVal[i][1] = safeParam->DevId; /*-< ڱȽΨһID*/ - cmpVal[i][2] = safeParam->Sid[i]; /*-< ڱȽSID*/ - cmpVal[i][3] = safeParam->Sinit[i]; /*-< ڱȽSINIT*/ - cmpVal[i][4] = safeParam->Dataver[i]; /*-< ڱȽDATAVER*/ - cmpVal[i][5] = safeParam->Addr; /*-< ڱȽADDR*/ - } - - colLen = sheetInfo->Len / sheetInfo->RowCount; /*-< г*/ - for (curIdx = 0u; curIdx < sheetInfo->RowCount; curIdx += 2) /*-< ǰȽ±ǷС*/ - { - for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ + hasSame = 0u; /*-< Ƿͬ־Ϊͬ*/ + hasNoSame = 0u; /*-< Ƿͬ־Ϊ޲ͬ*/ + for (j = 1u; j < 6u; j++) /*-< ǰȽֵ±ǷСֵ*/ { -#ifdef RSSP_NO_HLHT - curCmpVal[i][1] = ShortFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + 2u]); /*-< õǰΨһID*/ - channelIdx = 6u; /*-< ͨ±*/ -#else - curCmpVal[i][1] = LongFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + 2u]); /*-< õǰΨһID*/ - channelIdx = 10u; /*-< ͨ±*/ -#endif - - curCmpVal[i][0] = ShortFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + channelIdx]); /*-< õǰͨ*/ - curCmpVal[i][2] = LongFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + channelIdx + 2u]); /*-< õǰSID*/ - curCmpVal[i][3] = LongFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + channelIdx + 6u]); /*-< õǰSINIT*/ - curCmpVal[i][4] = LongFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + channelIdx + 11u]); /*-< õǰDATAVER*/ - curCmpVal[i][5] = ShortFromChar(&sheetInfo->Data[sheetInfo->StartIdx + ((curIdx + i) * colLen) + channelIdx + 15u]); /*-< õǰADDR*/ - } - if ((1u == curCmpVal[0][0]) && (2u == curCmpVal[1][0]) && (curCmpVal[0][1] == curCmpVal[1][1]) && (curCmpVal[0][5] == curCmpVal[1][5])) /*-< ͨ,ΨһID,ADDRǷȷ*/ - { - for (i = 0u; i < 2u; i++) /*-< ǰͨǷС2*/ + if (curCmpVal[i][j] == cmpVal[i][j]) /*-< ֵͬͨǷͬ*/ { - hasSame = 0u; /*-< Ƿͬ־Ϊͬ*/ - hasNoSame = 0u; /*-< Ƿͬ־Ϊ޲ͬ*/ - for (j = 1u; j < 6u; j++) /*-< ǰȽֵ±ǷСֵ*/ - { - if (curCmpVal[i][j] == cmpVal[i][j]) /*-< ֵͬͨǷͬ*/ - { - hasSame = 1u; /*-< Ƿͬ־Ϊͬ*/ - } - else - { - hasNoSame = 1u; /*-< Ƿͬ־Ϊвͬ*/ - } - } - if ((1u == hasSame) && (1u == hasNoSame))/*-< Ƿͬвͬ*/ - { - break; /*-< ˳*/ - } + hasSame = 1u; /*-< Ƿͬ־Ϊͬ*/ } - if (2u != i) /*-< ͨȽǷȽ*/ + else { - break; /*-< ˳*/ + hasNoSame = 1u; /*-< Ƿͬ־Ϊвͬ*/ } } + if ((1u == hasSame) && (1u == hasNoSame))/*-< Ƿͬвͬ*/ + { + break; /*-< ˳*/ + } } - if (curIdx == sheetInfo->RowCount) /*-< ǰȽǷȽ*/ + if (2u != i) /*-< ͨȽǷȽ*/ { - rtnVal = 1u; /*-< úֵΪɹ*/ + break; /*-< ˳*/ } } } - else + if (curIdx == sheetInfo->RowCount) /*-< ǰȽǷȽ*/ { rtnVal = 1u; /*-< úֵΪɹ*/ } @@ -1434,6 +1527,79 @@ static UINT8 CheckSafeParamOnly(SafeParam* safeParam, SheetInfo* sheetInfo) } #ifndef RSSP_NO_HLHT + +/** + * @brief DquInitAllHlhtId ʼлͨID + * @param pFsName ļ ȡֵΧ:ֽ + * @param pDsuRsspInfo Ϣ ȡֵΧ:οṹDSU_RSSP_INFO_STRU_WL + */ +static void DquInitAllHlhtId(UINT8* pFsName, DSU_RSSP_INFO_STRU_WL* pDsuRsspInfo) +{ + /*- ֲ*/ + UINT8 readRtn = 0u; /*ȡFSֵ*/ + + if ((NULL != pFsName) && (NULL != pDsuRsspInfo)) /*-< Ƿǿ*/ + { + /*ȡZCŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_ZC_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->ZcRowNum, &pDsuRsspInfo->ZcHlhtids); /*-< óʼŶձZC*/ + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡCIŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_CI_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->CiRowNum, &pDsuRsspInfo->CiHlhtids); /*-< óʼŶձCI*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡRCŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_RC_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->RcRowNum, &pDsuRsspInfo->RcHlhtids); /*-< óʼŶձRC*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡATSŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_ATS_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->AtsRowNum, &pDsuRsspInfo->AtsHlhtids); /*-< óʼŶձATS*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡVOBCŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_VOBC_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->VobcRowNum, &pDsuRsspInfo->VobcHlhtids); /*-< óʼŶձVOBC*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡIVOCŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_IVOC_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->IvocRowNum, &pDsuRsspInfo->IvocHlhtids); /*-< óʼŶձIVOC*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡDSUŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_DSU_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->DsuRowNum, &pDsuRsspInfo->DsuHlhtids); /*-< óʼŶձDSU*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡAOMŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_AOMSEC_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->AomRowNum, &pDsuRsspInfo->AomHlhtids); /*-< óʼŶձAOM*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡIVOC-AOMŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_IVOC_AOM_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->IvocAomRowNum, &pDsuRsspInfo->IvocAomHlhtids); /*-< óʼŶձIVOC-AOM*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡTDTŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_TDT_ID, ID_MAP_SIZE, DEV_HLHTID_NUM_ONE, &pDsuRsspInfo->TdtRowNum, &pDsuRsspInfo->TdtHlhtids); /*-< óʼŶձTDT*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡϵͳŶձ*/ + readRtn = DquInitHlhtId(pFsName, IDMAP_AXLE_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->AxleRowNum, &pDsuRsspInfo->AxleHlhtids); /*-< óʼŶձļϵͳ*/ + } + if (1u == readRtn) /*-< úǷɹ*/ + { + /*ȡITEŶձ*/ + (void)DquInitHlhtId(pFsName, IDMAP_ITE_ID, VOBC_ID_MAP_SIZE, DEV_HLHTID_NUM_TWO, &pDsuRsspInfo->IteRowNum, &pDsuRsspInfo->IteHlhtids); /*-< óʼŶձITE*/ + } + } +} + /* *: DquInitHlhtId *: ʼŶձ @@ -1534,42 +1700,50 @@ static UINT32 DquGetHlhtId(UINT8 type, UINT8 id, UINT16 logicId, UINT16 rowNum, return hlhtId; } -/* -*: DquGetDevId -*: ȡ豸ID -*: UINT32 hlhtId HLHTID -* UINT16 rowNum -* const DSU_DEV_HLHTID *pDevHlhtids ӦŶձϢ -* UINT8 hlhtIdNum һ豸Ӧhlhtid -*: -*: -*ֵ: ӦID +/** +* @brief DquGetDevId ݻͨIDȡ豸ID +* @param hlhtId ͨID ȡֵΧ:0x00000000-0xFFFFFFFF +* @param rowNum ȡֵΧ:0x0000-0xFFFF +* @param pDevHlhtids ӦŶձϢ ȡֵΧ:DSU_DEV_HLHTID +* @param hlhtIdNum һ豸Ӧhlhtid ȡֵΧ:0x00-0xFF +* @param needSetDevType õ豸 ȡֵΧ:0x00-0xFF +* @param devType 豸 ȡֵΧ:0x00-0xFF + * @return ID ȡֵΧ:0x00-0xFF */ -static UINT8 DquGetDevId(UINT32 hlhtId, UINT16 rowNum, const DSU_DEV_HLHTID *pDevHlhtids, UINT8 hlhtIdNum) +static UINT8 DquGetDevId(const UINT32 hlhtId, const UINT16 rowNum, const DSU_DEV_HLHTID* pDevHlhtids, const UINT8 hlhtIdNum, const UINT8 needSetDevType, UINT8* devType) { - UINT8 id = 0; /*豸ID*/ - UINT32 i = 0; /*ѭ*/ - UINT32 j = 0; /*ѭ*/ - UINT8 isBreak = 0; /*Ƿ˳ѭ*/ + /*- ֲ*/ + UINT8 id = 0u; /*-< ÷غֵ豸IDΪ0*/ + UINT16 i = 0u; /*ѭ*/ + UINT8 j = 0u; /*ѭ*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ - for (i = 0; i < rowNum; i++) + if (UINT32_MAX != hlhtId) /*-< ûͨID*/ { - for (j = 0; j < hlhtIdNum; j++) + for (i = 0u; i < rowNum; i++) /*-< ±С*/ { - if (pDevHlhtids[i].HlhtIds[j] == hlhtId) /*ҵHLHTID˳*/ + for (j = 0u; j < hlhtIdNum; j++) /*-< ͨIDС*/ { - id = (UINT8)pDevHlhtids[i].DevId; /*豸IDһֽڵ*/ - isBreak = 1; - break; + if (pDevHlhtids[i].HlhtIds[j] == hlhtId) /*-< ҵHLHTID˳*/ + { + id = (UINT8)pDevHlhtids[i].DevId; /*-< õ豸ID*/ + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + break; /*-< ˳*/ + } + } + if (1u == isBreak) /*-< ˳ʶΪǷΪ*/ + { + break; /*-< ˳*/ } } - if (1 == isBreak) /*ҵ˳ѭ*/ + + if (0u < id) /*-< ǷҵID*/ { - break; + (*devType) = needSetDevType; /*-< 豸Ϊõ豸*/ } } - return id; + return id; /*-< غֵ豸ID*/ } /** @@ -1588,43 +1762,55 @@ static UINT32 DquGetDevHlhtId(UINT8 devType, UINT8 devId, UINT16 logicId, DSU_RS switch (devType) /*-< ж*/ { case ZC_TYPE: /*-< ǷΪZC*/ - /*ZC*/ + /*ZC*/ hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->ZcRowNum, pDsuRssp->ZcHlhtids); /*-< ûȡZCͨID,ֵֵ*/ break; /*-< ˳*/ case CI_TYPE: /*-< ǷΪCI*/ - /*CI*/ + /*CI*/ hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->CiRowNum, pDsuRssp->CiHlhtids); /*-< ûȡCIͨID,ֵֵ*/ break; /*-< ˳*/ + case RC_TYPE: /*-< ǷΪRC*/ + /*RC*/ + hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->RcRowNum, pDsuRssp->RcHlhtids); /*-< ûȡRCͨID,ֵֵ*/ + break; /*-< ˳*/ case ATS_TYPE: /*-< ǷΪATS*/ - /*ATS*/ + /*ATS*/ hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->AtsRowNum, pDsuRssp->AtsHlhtids); /*-< ûȡATSͨID,ֵֵ*/ break; /*-< ˳*/ case VOBC_TYPE: /*-< ǷΪVOBC*/ - /*VOBC*/ + /*VOBC*/ hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->VobcRowNum, pDsuRssp->VobcHlhtids); /*-< ûȡVOBCͨID,ֵֵ*/ break; /*-< ˳*/ + case IVOC_TYPE: /*-< ǷΪIVOC*/ + /*IVOC*/ + hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->IvocRowNum, pDsuRssp->IvocHlhtids); /*-< ûȡIVOCͨID,ֵֵ*/ + break; /*-< ˳*/ case DSU_TYPE: /*-< ǷΪDSU*/ - /*DSU*/ + /*DSU*/ hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->DsuRowNum, pDsuRssp->DsuHlhtids); /*-< ûȡDSUͨID,ֵֵ*/ break; /*-< ˳*/ case AOM_TYPE: /*-< ǷΪAOM*/ - /*AOM*/ + /*AOM*/ hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->AomRowNum, pDsuRssp->AomHlhtids); /*-< ûȡAOMͨID,ֵֵ*/ break; /*-< ˳*/ + case IVOC_AOM_TYPE: /*-< ǷΪIVOC-AOM*/ + /*IVOC-AOM*/ + hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->IvocAomRowNum, pDsuRssp->IvocAomHlhtids); /*-< ûȡIVOC-AOMͨID,ֵֵ*/ + break; /*-< ˳*/ case TDT_TYPE: /*-< ǷΪTDT*/ - /*TDT*/ + /*TDT*/ hlhtId = DquGetHlhtId(0, devId, logicId, pDsuRssp->TdtRowNum, pDsuRssp->TdtHlhtids); /*-< ûȡTDTͨID,ֵֵ*/ break; /*-< ˳*/ case AXLE_TYPE: /*-< ǷΪϵͳ*/ - /*ϵͳ*/ + /*ϵͳ*/ hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->AxleRowNum, pDsuRssp->AxleHlhtids); /*-< ûȡϵͳͨID,ֵֵ*/ break; /*-< ˳*/ case ITE_DEVTYPE: /*-< ǷΪITE*/ - /*ITE*/ + /*ITE*/ hlhtId = DquGetHlhtId(1, devId, logicId, pDsuRssp->IteRowNum, pDsuRssp->IteHlhtids); /*-< ûȡITEͨID,ֵֵ*/ break; /*-< ˳*/ default: /*-< */ - /*޲*/ + /*޲*/ break; /*-< ˳*/ } } @@ -1694,88 +1880,80 @@ UINT32 DquTypeIdToHlhtId(UINT16 devTypeId, UINT16 logicId, DSU_RSSP_INFO_STRU_WL */ UINT16 DquToDevTypeId(UINT32 hlhtid, DSU_RSSP_INFO_STRU_WL* pDsuRssp) { - UINT16 typeId = 0; /*-< úֵΪ0*/ - UINT8 id = 0; /*豸ID*/ - UINT16 devName = 0U; /*-< 豸Ϊ0*/ - id = DquGetDevId(hlhtid, pDsuRssp->ZcRowNum, pDsuRssp->ZcHlhtids, DEV_HLHTID_NUM_ONE); /*-< ûȡZC豸ID,ֵ豸ID*/ - if (0 == id) /*-< ZCŶձǷδҵ*/ + /*- ֲ*/ + UINT16 typeId = 0u; /*-< úֵΪ0*/ + UINT8 id = 0u; /*豸ID*/ + UINT8 devType = 0u; /*-< 豸*/ + + if ((UINT32)UINT32_MAX != hlhtid) /*-< ûͨID*/ { - id = DquGetDevId(hlhtid, pDsuRssp->CiRowNum, pDsuRssp->CiHlhtids, DEV_HLHTID_NUM_ONE); /*-< ûȡCI豸ID,ֵ豸ID*/ + id = DquGetDevId(hlhtid, pDsuRssp->ZcRowNum, pDsuRssp->ZcHlhtids, DEV_HLHTID_NUM_ONE, ZC_TYPE, &devType); /*-< ûȡZC豸ID,ֵ豸ID*/ + + if (0 == id) /*-< ZCŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->CiRowNum, pDsuRssp->CiHlhtids, DEV_HLHTID_NUM_ONE, CI_TYPE, &devType); /*-< ûȡCI豸ID,ֵ豸ID*/ + } + if (0 == id) /*-< CIŶձǷδҵ*/ { - id = DquGetDevId(hlhtid, pDsuRssp->AtsRowNum, pDsuRssp->AtsHlhtids, DEV_HLHTID_NUM_ONE); /*-< ûȡATS豸ID,ֵ豸ID*/ - if (0 == id) /*-< ATSŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->VobcRowNum, pDsuRssp->VobcHlhtids, DEV_HLHTID_NUM_TWO); /*-< ûȡVOBC豸ID,ֵ豸ID*/ - if (0 == id) /*-< VOBCŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->DsuRowNum, pDsuRssp->DsuHlhtids, DEV_HLHTID_NUM_ONE); /*-< ûȡDSU豸ID,ֵ豸ID*/ - if (0 == id) /*-< DSUŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->AomRowNum, pDsuRssp->AomHlhtids, DEV_HLHTID_NUM_TWO); /*-< ûȡAOM豸ID,ֵ豸ID*/ - if (0 == id) /*-< AOMŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->TdtRowNum, pDsuRssp->TdtHlhtids, DEV_HLHTID_NUM_ONE); /*-< ûȡTDT豸ID,ֵ豸ID*/ - if (0 == id) /*-< TDTŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->AxleRowNum, pDsuRssp->AxleHlhtids, DEV_HLHTID_NUM_TWO); /*-< ûȡϵͳ豸ID,ֵ豸ID*/ - if (0 == id) /*-< AXLEŶձǷδҵ*/ - { - id = DquGetDevId(hlhtid, pDsuRssp->IteRowNum, pDsuRssp->IteHlhtids, DEV_HLHTID_NUM_TWO); /*-< ûȡITE豸ID,ֵ豸ID*/ - if (0 == id) /*-< ITEŶձǷδҵ*/ - { - typeId = 0; /*-< IDΪ0*/ - } - else - { - devName = (UINT8)ITE_DEVTYPE; /*-< 豸ΪITE豸*/ - } - } - else - { - devName = (UINT8)AXLE_TYPE; /*-< 豸Ϊϵͳ*/ - } - }/*ҵ,TDTID*/ - else - { - devName = (UINT8)TDT_TYPE; /*-< 豸ΪTDT*/ - } - } - else /*ҵ,AOMID*/ - { - devName = (UINT8)AOM_TYPE; /*-< 豸ΪAOM*/ - } - } - else /*ҵ,DSUID*/ - { - devName = (UINT8)DSU_TYPE; /*-< 豸ΪDSU*/ - } - } - else /*ҵ,VOBCID*/ - { - devName = (UINT8)VOBC_TYPE; /*-< 豸ΪVOBC*/ - } - } - else /*ҵ,ATSID*/ - { - devName = (UINT8)ATS_TYPE; /*-< 豸ΪATS*/ - } + id = DquGetDevId(hlhtid, pDsuRssp->RcRowNum, pDsuRssp->RcHlhtids, DEV_HLHTID_NUM_ONE, RC_TYPE, &devType); /*-< ûȡRC豸ID,ֵ豸ID*/ } - else /*ҵ,CIID*/ - { - devName = (UINT8)CI_TYPE; /*-< 豸ΪCI*/ - } - } - else /*ҵ,ZCID*/ - { - devName = (UINT8)ZC_TYPE; /*-< 豸ΪZC*/ - } - typeId = (UINT16)(((devName << 8) & 0xFF00) | id); /*-< ͨ豸ID*/ - if (0 == typeId) /*-< IDǷΪ0*/ - { - typeId = (UINT16)(hlhtid & 0x0000FFFF); /*-< ʹôRSSPIΨһIDΪ豸ID*/ + if (0 == id) /*-< RCŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->AtsRowNum, pDsuRssp->AtsHlhtids, DEV_HLHTID_NUM_ONE, ATS_TYPE, &devType); /*-< ûȡATS豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< ATSŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->VobcRowNum, pDsuRssp->VobcHlhtids, DEV_HLHTID_NUM_TWO, VOBC_TYPE, &devType); /*-< ûȡVOBC豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< VOBCŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->IvocRowNum, pDsuRssp->IvocHlhtids, DEV_HLHTID_NUM_TWO, IVOC_TYPE, &devType); /*-< ûȡIVOC豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< IVOCŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->DsuRowNum, pDsuRssp->DsuHlhtids, DEV_HLHTID_NUM_ONE, DSU_TYPE, &devType); /*-< ûȡDSU豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< DSUŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->AomRowNum, pDsuRssp->AomHlhtids, DEV_HLHTID_NUM_TWO, AOM_TYPE, &devType); /*-< ûȡAOM豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< AOMŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->IvocAomRowNum, pDsuRssp->IvocAomHlhtids, DEV_HLHTID_NUM_TWO, IVOC_AOM_TYPE, &devType); /*-< ûȡIVOC-AOM豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< AOMŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->TdtRowNum, pDsuRssp->TdtHlhtids, DEV_HLHTID_NUM_ONE, TDT_TYPE, &devType); /*-< ûȡTDT豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< TDTŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->AxleRowNum, pDsuRssp->AxleHlhtids, DEV_HLHTID_NUM_TWO, AXLE_TYPE, &devType); /*-< ûȡϵͳ豸ID,ֵ豸ID*/ + } + + if (0 == id) /*-< AXLEŶձǷδҵ*/ + { + id = DquGetDevId(hlhtid, pDsuRssp->IteRowNum, pDsuRssp->IteHlhtids, DEV_HLHTID_NUM_TWO, ITE_DEVTYPE, &devType); /*-< ûȡITE豸ID,ֵ豸ID*/ + } } + + if (0u == id) /*-< ITEŶձǷδҵ*/ + { + typeId = (UINT16)(hlhtid & 0x0000FFFFu); /*-< ʹôRSSPIΨһIDΪ豸ID*/ + } + else + { + typeId = (UINT16)(((devType << 8) & 0xFF00u) | id); /*-< ͨ豸ID*/ + } + return typeId; /*-< غֵ*/ } diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.c index 49dceaa..ec3243c 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.c @@ -803,21 +803,21 @@ UINT16 ComputeMsgCRC16_WL(const UINT8* pData, UINT16 size) * * -------------------------------------------------------------- * pDestAdd UINT8 * INOUT ڴռ俪ʼַ - * Len UINT16 IN ڴռС + * Len UINT32 IN ڴռС * Val UINT8 IN ֵָ * * ֵ : 1 ***********************************************************************/ -UINT8 RsspMemSet_WL(UINT8 *pDestAdd, UINT16 Len, UINT8 Val) +UINT8 RsspMemSet_WL(UINT8* pDestAdd, UINT32 Len, UINT8 Val) { - UINT16 index = 0; - - for(index = 0; index < Len; index++) - { - pDestAdd[index] = Val; - } + UINT32 index = 0u; - return (UINT8)1; + for (index = 0u; index < Len; index++) + { + pDestAdd[index] = Val; + } + + return (UINT8)1u; } /*********************************************************************** diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.h b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.h index 8a2b771..eb7aa73 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspCommonWl.h @@ -30,7 +30,9 @@ /* */ #define RSSP_TYPE_VOBC_BACK_WL (0x13) /*VOBC-ͨ*/ #define RSSP_TYPE_VOBC_WL 0x14 /*VOBC*/ +#define RSSP_TYPE_IVOC_WL (0x10u) /*IVOC*/ #define RSSP_TYPE_AOM_WL 0x15 /*AOM*/ +#define RSSP_TYPE_IVOC_AOM_WL (0x11u) /*IVOC-AOM*/ #define RSSP_TYPE_ATS_WL 0x03 /*ATS*/ #define RSSP_TYPE_TTIL_WL 0x17 /*β*/ @@ -98,9 +100,9 @@ #define RP_LINK_LEN (14) /*·*/ #ifdef RSSPI_SIMPLE_LINK_REFRESH -#define RSSP_VAR_NODE_LEN_WL (58) /*·ˢ,мһڵij*/ +#define RSSP_VAR_NODE_LEN_WL (59) /*·ˢ,мһڵij*/ #else -#define RSSP_VAR_NODE_LEN_WL (87) /*мһڵij*/ +#define RSSP_VAR_NODE_LEN_WL (88) /*мһڵij*/ #endif #ifdef __cplusplus @@ -319,20 +321,19 @@ UINT32 CRC_Compute_Crc_WL(const UINT8* pData, UINT16 size, UINT8 chan); ***********************************************************************/ UINT16 ComputeMsgCRC16_WL(const UINT8* pData, UINT16 size); - /*********************************************************************** - * : RsrMemSet + * : RsspMemSet_WL * : ָڴ趨ֵָ - * : - * + * : + * * -------------------------------------------------------------- - * pDestAdd UINT8 * INOUT ڴռ俪ʼַ - * Len UINT16 IN ڴռС - * Val UINT8 IN ֵָ - * - * ֵ : + * pDestAdd UINT8 * INOUT ڴռ俪ʼַ + * Len UINT32 IN ڴռС + * Val UINT8 IN ֵָ + * + * ֵ : 1 ***********************************************************************/ -UINT8 RsspMemSet_WL(UINT8 *pDestAdd, UINT16 Len, UINT8 Val); +UINT8 RsspMemSet_WL(UINT8* pDestAdd, UINT32 Len, UINT8 Val); /*********************************************************************** * : RsrMemSet diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspIFWl.h b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspIFWl.h index 1d7c3f2..64f92fb 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspIFWl.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspIFWl.h @@ -43,16 +43,11 @@ UINT8 RsspReceive_WL(RSSP_INFO_STRU* rssp); */ UINT8 RsspOutput_WL(QueueStruct *AppToRs,UINT8 *VarArray,RSSP_INFO_STRU *pRsspStru); -/*********************************************************************** - * : RsspInit_WL - * : ͨúʵֶRSSPijʼӦ趨ĻֵеĴС - * : - * - * -------------------------------------------------------------- - * pRsspStruct RSSP_INFO_STRU* INOUT RSSPͳһṹ壬гʼֵá - * - * ֵ : UINT8 1 0󷵻 - ***********************************************************************/ +/** +* @brief RsspInit_WL RSRSPʼ +* @param pRsspStruct RSSPIʵ ȡֵΧ:οṹRSSP_INFO_STRU +* @return 0:ʧ 1:ɹ +*/ UINT8 RsspInit_WL(RSSP_INFO_STRU *pRsspStruct); /*********************************************************************** diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspInitWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspInitWl.c index a9e89fb..d608f79 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspInitWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspInitWl.c @@ -27,107 +27,104 @@ extern "C" { #endif -/*********************************************************************** - * : RsspInit_WL - * : ͨúʵֶRSRSPijʼӦ趨ĻֵеĴС - * : - * - * -------------------------------------------------------------- - * pRsspStruct RSSP_INFO_STRU* INOUT RSSPͳһṹ壬гʼֵá - * - * ֵ : UINT8 1 0󷵻 - ***********************************************************************/ + /** +* @brief RsspInit_WL RSRSPʼ +* @param pRsspStruct RSSPIʵ ȡֵΧ:οṹRSSP_INFO_STRU +* @return 0:ʧ 1:ɹ +*/ UINT8 RsspInit_WL(RSSP_INFO_STRU* pRsspStruct) { - UINT8 rtn = 0; /*ֵ*/ + /*- ֲ*/ + UINT8 rtn = 0; /*-< úֵΪʧ*/ UINT32 mallocLen = 0u; /*ռ䳤*/ - if (NULL != pRsspStruct) /*ǿж*/ + if (NULL != pRsspStruct) /*-< Ƿǿ*/ { /*¼ռ*/ - pRsspStruct->RecordArray = (UINT8*)malloc(pRsspStruct->RecordArraySize + 2); - if (NULL != pRsspStruct->RecordArray) + pRsspStruct->RecordArray = (UINT8*)malloc(pRsspStruct->RecordArraySize + 2); /*-< ־*/ + if (NULL != pRsspStruct->RecordArray) /*-< ɹ*/ { - CommonMemSet(pRsspStruct->RecordArray, sizeof(UINT8) * (pRsspStruct->RecordArraySize + 2), 0, sizeof(UINT8) * (pRsspStruct->RecordArraySize + 2)); + CommonMemSet(pRsspStruct->RecordArray, sizeof(UINT8) * (pRsspStruct->RecordArraySize + 2), 0, sizeof(UINT8) * (pRsspStruct->RecordArraySize + 2)); /*-< ־*/ /*ЭӦAppArrayռ*/ - pRsspStruct->AppArraySize = (pRsspStruct->OutputSize + RSSP_FIXED_LEN_WL + 14 + 26) * (pRsspStruct->MaxNumLink) + 2; - pRsspStruct->AppArray = (UINT8*)malloc(pRsspStruct->AppArraySize); - if (NULL != pRsspStruct->AppArray) + pRsspStruct->AppArraySize = (pRsspStruct->OutputSize + RSSP_FIXED_LEN_WL + 14 + 26) * (pRsspStruct->MaxNumLink) + 2; /*-< õӦ鳤*/ + pRsspStruct->AppArray = (UINT8*)malloc(pRsspStruct->AppArraySize); /*-< Ӧ*/ + } + if (NULL != pRsspStruct->AppArray) /*-< ɹ*/ + { + CommonMemSet(pRsspStruct->AppArray, sizeof(UINT8) * pRsspStruct->AppArraySize, 0, sizeof(UINT8) * pRsspStruct->AppArraySize); /*-< Ӧ*/ + + /*·ռ*/ + pRsspStruct->VarArraySize = RSSP_VAR_NODE_LEN_WL * pRsspStruct->MaxNumLink + 32 + 14 * (pRsspStruct->MaxNumLink + 2) + 32; /*-< õ·鳤*/ + pRsspStruct->VarArray = (UINT8*)malloc(pRsspStruct->VarArraySize); /*-< ·*/ + } + if (NULL != pRsspStruct->VarArray) /*-< ɹ*/ + { + CommonMemSet(pRsspStruct->VarArray, sizeof(UINT8) * pRsspStruct->VarArraySize, 0, sizeof(UINT8) * pRsspStruct->VarArraySize); /*-< ·*/ + + /*֡ռ*/ + pRsspStruct->FrameDataMaxLen = 2 + 8 + RSSP_FIXED_LEN_WL + 32 + (pRsspStruct->InputSize > pRsspStruct->OutputSize ? pRsspStruct->InputSize : pRsspStruct->OutputSize); /*-< õ֡鳤*/ + pRsspStruct->FrameData = (UINT8*)malloc(pRsspStruct->FrameDataMaxLen); /*-< ֡*/ + } + if (NULL != pRsspStruct->FrameData) /*-< ɹ*/ + { + CommonMemSet(pRsspStruct->FrameData, sizeof(UINT8) * pRsspStruct->FrameDataMaxLen, 0, sizeof(UINT8) * pRsspStruct->FrameDataMaxLen); /*-< ֡*/ + + /*ݶջռ*/ + rtn = InitMsgNodeStack_WL(pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2) * 2, pRsspStruct->FrameDataMaxLen, &pRsspStruct->StackOfDataLink); /*-< úʼ·ջ*/ + if (1 == rtn) /*-< úǷɹ*/ { - CommonMemSet(pRsspStruct->AppArray, sizeof(UINT8) * pRsspStruct->AppArraySize, 0, sizeof(UINT8) * pRsspStruct->AppArraySize); - - /*·ռ*/ - pRsspStruct->VarArraySize = RSSP_VAR_NODE_LEN_WL * pRsspStruct->MaxNumLink + 32 + 14 * (pRsspStruct->MaxNumLink + 2) + 32; - pRsspStruct->VarArray = (UINT8*)malloc(pRsspStruct->VarArraySize); - if (NULL != pRsspStruct->VarArray) + rtn = InitLnkNodeArr_WL(pRsspStruct->MaxNumLink, pRsspStruct); /*-< úʼ··ڵ*/ + } + if (1 == rtn) /*-< úǷɹ*/ + { + rtn = 0; /*-< úֵΪʧ*/ + pRsspStruct->OutnetQueueSize = (pRsspStruct->OutputSize + 8) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); /*-< õݶг*/ + rtn = QueueInitial(&pRsspStruct->OutnetQueueA, pRsspStruct->OutnetQueueSize); /*-< ʼг*/ + if (1 == rtn) /*-< úǷɹ*/ { - CommonMemSet(pRsspStruct->VarArray, sizeof(UINT8) * pRsspStruct->VarArraySize, 0, sizeof(UINT8) * pRsspStruct->VarArraySize); - - /*֡ռ*/ - pRsspStruct->FrameDataMaxLen = 2 + 8 + RSSP_FIXED_LEN_WL + 32 + (pRsspStruct->InputSize > pRsspStruct->OutputSize ? pRsspStruct->InputSize : pRsspStruct->OutputSize); - pRsspStruct->FrameData = (UINT8*)malloc(pRsspStruct->FrameDataMaxLen); - if (NULL != pRsspStruct->FrameData) - { - CommonMemSet(pRsspStruct->FrameData, sizeof(UINT8) * pRsspStruct->FrameDataMaxLen, 0, sizeof(UINT8) * pRsspStruct->FrameDataMaxLen); - - /*ݶջռ*/ - rtn = InitMsgNodeStack_WL(pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2) * 2, pRsspStruct->FrameDataMaxLen, &pRsspStruct->StackOfDataLink); - if (1 == rtn) /*·ڵռ*/ - { - rtn = InitLnkNodeArr_WL(pRsspStruct->MaxNumLink, pRsspStruct); - } - if (1 == rtn) /*ӦøЭݶзռ*/ - { - rtn = 0; /*ĬϷ0*/ - pRsspStruct->OutnetQueueSize = (pRsspStruct->OutputSize + 8) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); - rtn = QueueInitial(&pRsspStruct->OutnetQueueA, pRsspStruct->OutnetQueueSize); - if (1 == rtn) - { - rtn = QueueInitial(&pRsspStruct->OutnetQueueB, pRsspStruct->OutnetQueueSize); - } - } - if (1 == rtn) /*ЭӦݶзռ*/ - { - pRsspStruct->DataToAppSize = (pRsspStruct->InputSize + 6) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); - rtn = QueueInitial(&pRsspStruct->DataToApp, pRsspStruct->DataToAppSize); - } - if (1 == rtn) /*ӦøЭݶзռ*/ - { - pRsspStruct->OutputDataQueueSize = (pRsspStruct->OutputSize + 8) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); - rtn = QueueInitial(&pRsspStruct->OutputDataQueue, pRsspStruct->OutputDataQueueSize); - } - if (1 == rtn) /*ӦøЭݶзռ*/ - { - rtn = 0; /*ĬϷ0*/ - /*Ӧ÷ݸĬֵΪ3*/ - pRsspStruct->NoSendAppData = NONE_SEND_APP_DATA_WL; - - pRsspStruct->NetsRecvPkgNums = (RsppiNetsRecvPkgNum*)malloc(sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink); - if (NULL != pRsspStruct->NetsRecvPkgNums) - { - CommonMemSet(pRsspStruct->NetsRecvPkgNums, sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink, 0, sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink); - - mallocLen = sizeof(UINT8) * ((pRsspStruct->OutputSize > pRsspStruct->InputSize) ? pRsspStruct->OutputSize : pRsspStruct->InputSize); - mallocLen += 32u; - pRsspStruct->gpSendSingleOutMsg = (UINT8*)malloc(mallocLen); - if (NULL != pRsspStruct->gpSendSingleOutMsg) - { - CommonMemSet(pRsspStruct->gpSendSingleOutMsg, mallocLen, 0u, mallocLen); - - rtn = 1; /*ʼ*/ - } - - } - - } - } + rtn = QueueInitial(&pRsspStruct->OutnetQueueB, pRsspStruct->OutnetQueueSize); /*-< ʼ*/ } } + if (1 == rtn) /*-< úǷɹ*/ + { + pRsspStruct->DataToAppSize = (pRsspStruct->InputSize + 6) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); /*-< õӦݶг*/ + rtn = QueueInitial(&pRsspStruct->DataToApp, pRsspStruct->DataToAppSize); /*-< ʼӦݶ*/ + } + if (1 == rtn) /*-< úǷɹ*/ + { + pRsspStruct->OutputDataQueueSize = (pRsspStruct->OutputSize + 8) * pRsspStruct->MaxNumLink * (pRsspStruct->MaxNumPerCycle + 2); /*-< õݶг*/ + rtn = QueueInitial(&pRsspStruct->OutputDataQueue, pRsspStruct->OutputDataQueueSize); /*-< ʼݶ*/ + } + if (1 == rtn) /*-< úǷɹ*/ + { + rtn = 0; /*-< úֵΪʧ*/ + /*Ӧ÷ݸĬֵΪ3*/ + pRsspStruct->NoSendAppData = NONE_SEND_APP_DATA_WL; /*-< ʱӦøЭӦ*/ + + pRsspStruct->NetsRecvPkgNumsLen = 0u; /*-< øյ鳤Ϊ0*/ + pRsspStruct->NetsRecvPkgNums = (RsppiNetsRecvPkgNum*)malloc(sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink); /*-< յ*/ + if (NULL != pRsspStruct->NetsRecvPkgNums) /*-< ɹ*/ + { + CommonMemSet(pRsspStruct->NetsRecvPkgNums, sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink, 0, sizeof(RsppiNetsRecvPkgNum) * pRsspStruct->MaxNumLink); /*-< յ*/ + + mallocLen = sizeof(UINT8) * ((pRsspStruct->OutputSize > pRsspStruct->InputSize) ? pRsspStruct->OutputSize : pRsspStruct->InputSize); /*-< õӦó*/ + mallocLen += 32u; /*-< õӦü֡ͷ*/ + pRsspStruct->gpSendSingleOutMsg = (UINT8*)malloc(mallocLen); /*-< Ӧü֡ͷ*/ + if (NULL != pRsspStruct->gpSendSingleOutMsg) /*-< ɹ*/ + { + CommonMemSet(pRsspStruct->gpSendSingleOutMsg, mallocLen, 0u, mallocLen); /*-< Ӧü֡ͷ*/ + + rtn = 1; /*-< úֵΪɹ*/ + } + + } + + } } } - return rtn; + return rtn; /*-< غֵ*/ } /*********************************************************************** diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.c index 5c7dedb..5dbcf1f 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.c @@ -38,7 +38,7 @@ extern "C" { *--------------------------------------------------------------------*/ static UINT8 InitRsspLnkInfoWl(const DSU_RSSP_LINK_RINFO_STRU_WL* pRecvDsuLnkInf, const DSU_RSSP_LINK_SINFO_STRU_WL* pOutputDsuLnkInf, RsspLinkInfoStru_WL* pRsspLnkInfo, DSU_RSSP_INFO_STRU_WL *pDsuRsspi); static UINT8 SetNodeParamWl(const DSU_RSSP_LINK_RINFO_STRU_WL* pRecvDsuLnkInf, const DSU_RSSP_LINK_SINFO_STRU_WL* pOutputDsuLnkInf, NodeParamInfoStru_WL *pNodeParam); -static void LnkNodeInfo2VarArray_WL(const Lnk_Info_Node_Stru_WL* pNode, const UINT8 lnkNodeIdx, UINT8* VarArray); +static void LnkNodeInfo2VarArray_WL(const Lnk_Info_Node_Stru_WL* pNode, const UINT16 lnkNodeIdx, UINT8* VarArray); static void VarArray2LnkNodeInfo_WL(const UINT8* VarArray, Lnk_Info_Node_Stru_WL* pNode); static UINT8 CheckRecvDsuLnkInfoWl(UINT16 LocalDevName, const DataNode_WL *pNode, const DSU_RSSP_LINK_RINFO_STRU_WL *pRecvLnkInfo, DSU_RSSP_INFO_STRU_WL *pDsuRsspi); static UINT8 CheckOutputDsuLnkInfoWl(UINT16 LocalDevName, const DataNode_WL *pNode, const DSU_RSSP_LINK_SINFO_STRU_WL *pOutputLnkInfo, DSU_RSSP_INFO_STRU_WL *pDsuRsspi); @@ -139,15 +139,16 @@ UINT8 RsspLnkDelete_WL(UINT32 destDevName,RSSP_INFO_STRU *pRsspStruct) */ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRsspStruct) { + /*- ֲ*/ UINT8 ret = 1u; /*-< úֵΪɹ*/ UINT8 NodeLen = 0u; /*ýڵ㳤Ϊ0*/ - UINT8 NodeNum = 0u; /*ýڵΪ0*/ - UINT8 index = 0u; /*±Ϊ0*/ + UINT16 NodeNum = 0u; /*ýڵΪ0*/ + UINT16 index = 0u; /*±Ϊ0*/ UINT16 offset = 0u; /*±Ϊ0*/ DSU_RSSP_LINK_RINFO_STRU_WL recvLnkInfo; /*ΪշʱĽڵϢ*/ DSU_RSSP_LINK_SINFO_STRU_WL outputLnkInfo; /*ΪͷʱĽڵϢ*/ - UINT8 lnkNodeIdx = 0u; /*·ڵ±Ϊ0*/ + UINT16 lnkNodeIdx = 0u; /*·ڵ±Ϊ0*/ NodeLen = RSSP_VAR_NODE_LEN_WL; /*-< úֵΪɹ*/ if ((0u == (VarLen % NodeLen)) && (UINT8_MAX >= (VarLen / NodeLen))) /*-< ·ݳǷ񵥽ڵ· СUINT8_MAXֵ*/ @@ -177,7 +178,7 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp { for (index = 0; index < NodeNum; index++) /*-< ǰ·±ǷС·*/ { - lnkNodeIdx = VarArray[offset]; /*-< ·ڵ±ΪҪˢ·ڵ±*/ + lnkNodeIdx = ShortFromChar(&VarArray[offset]); /*-< ·ڵ±ΪҪˢ·ڵ±*/ if (lnkNodeIdx < pRsspStruct->LnkNodeNum) /*-< Ҫˢǰ·ڵ±ǷС·*/ { VarArray2LnkNodeInfo_WL(&VarArray[offset], &pRsspStruct->LnkNodeArr[lnkNodeIdx]); /*-< ·ڵݺ*/ @@ -221,8 +222,8 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp else { PrintRecArray2ByteB(pRsspStruct->RecordArray, pRsspStruct->RecordArraySize, 0x8801u); /*-< ¼ˢ·±־*/ - PrintRecArrayByte(pRsspStruct->RecordArray, pRsspStruct->RecordArraySize, lnkNodeIdx); /*-< ¼ˢ·־־*/ - PrintRecArrayByte(pRsspStruct->RecordArray, pRsspStruct->RecordArraySize, pRsspStruct->LnkNodeNum); /*-< ¼ˢ·־־*/ + PrintRecArray2ByteB(pRsspStruct->RecordArray, pRsspStruct->RecordArraySize, lnkNodeIdx); /*-< ¼ˢ·־־*/ + PrintRecArray2ByteB(pRsspStruct->RecordArray, pRsspStruct->RecordArraySize, pRsspStruct->LnkNodeNum); /*-< ¼ˢ·־־*/ return 0u; /*-< غʧ*/ } @@ -251,7 +252,7 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp * * ֵ : ***********************************************************************/ - void GetLnkNodeArr_WL(Lnk_Info_Node_Stru_WL** pLnkInfoNodeArr,UINT8 *OutLen,RSSP_INFO_STRU *pRsspStruct) + void GetLnkNodeArr_WL(Lnk_Info_Node_Stru_WL** pLnkInfoNodeArr,UINT16 *OutLen,RSSP_INFO_STRU *pRsspStruct) { *pLnkInfoNodeArr = pRsspStruct->LnkNodeArr; *OutLen = pRsspStruct->LnkNodeNum; @@ -263,10 +264,11 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp * @param pRsspStruct RSSPIʵ ȡֵΧ:οṹ:RSSP_INFO_STRU * @return 0:ʧ 1:ɹ */ - UINT8 InitLnkNodeArr_WL(UINT8 num, RSSP_INFO_STRU* pRsspStruct) + UINT8 InitLnkNodeArr_WL(UINT16 num, RSSP_INFO_STRU* pRsspStruct) { + /*- ֲ*/ UINT8 ret = 1u; /*-< úֵΪɹ*/ - UINT8 index = 0u; /*·±*/ + UINT16 index = 0u; /*·±*/ UINT32 lnkNodeArrSize = 0u; /*·鳤*/ pRsspStruct->LnkNodeNum = num; /*-< ·RSSPIʵ·*/ lnkNodeArrSize = sizeof(Lnk_Info_Node_Stru_WL) * pRsspStruct->LnkNodeNum; /*-< ·鳤*/ @@ -278,13 +280,14 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp else { RsspMemSet_WL((UINT8*)pRsspStruct->LnkNodeArr, lnkNodeArrSize, 0); /*-< ·*/ - } - for (index = 0u; index < pRsspStruct->LnkNodeNum; index++) /*-< ǰ·±ǷС·*/ - { - pRsspStruct->LnkNodeArr[index].NodeStatus = Replace_WL; /*-< õǰ·ڵΪ*/ - pRsspStruct->LnkNodeArr[index].RecvKeepHaltCycleNum = 0u; /*-< ձHalt_WL״̬*/ - pRsspStruct->LnkNodeArr[index].RecvKeepSendSseCycleNum = 0u; /*-< ձSendSSE_WL״̬*/ + for (index = 0u; index < pRsspStruct->LnkNodeNum; index++) /*-< ǰ·±ǷС·*/ + { + pRsspStruct->LnkNodeArr[index].NodeStatus = Replace_WL; /*-< õǰ·ڵΪ*/ + + pRsspStruct->LnkNodeArr[index].RecvKeepHaltCycleNum = 0u; /*-< ձHalt_WL״̬*/ + pRsspStruct->LnkNodeArr[index].RecvKeepSendSseCycleNum = 0u; /*-< ձSendSSE_WL״̬*/ + } } return ret; /*-< غֵ*/ @@ -305,7 +308,7 @@ UINT8 RsspRefresh_WL(UINT16 VarLen, const UINT8* VarArray, RSSP_INFO_STRU* pRssp ***********************************************************************/ Lnk_Info_Node_Stru_WL* SearchLnkBsdNode_WL(UINT16 RsspSrcAddr,UINT16 DestBsdAdd,RSSP_INFO_STRU *pRsspStruct) { - UINT8 index = 0; + UINT16 index = 0; Lnk_Info_Node_Stru_WL* retNodePtr = NULL; for(index = 0; index < pRsspStruct->LnkNodeNum; index++) @@ -342,7 +345,7 @@ Lnk_Info_Node_Stru_WL* SearchLnkBsdNode_WL(UINT16 RsspSrcAddr,UINT16 DestBsdAdd, ***********************************************************************/ Lnk_Info_Node_Stru_WL* SearchLnkSse_SsrNode_WL(UINT16 RsspSrcAddr,UINT16 RsspDestAddr,RSSP_INFO_STRU *pRsspStruct) { - UINT8 index = 0; + UINT16 index = 0; Lnk_Info_Node_Stru_WL* retNodePtr = NULL; for(index = 0; index < pRsspStruct->LnkNodeNum; index++) @@ -380,7 +383,7 @@ Lnk_Info_Node_Stru_WL* SearchLnkSse_SsrNode_WL(UINT16 RsspSrcAddr,UINT16 RsspDes Lnk_Info_Node_Stru_WL* GetReplaceNode_WL(RSSP_INFO_STRU *pRsspStruct) /* wangpeipei 20111202 Add S */ { - UINT8 index = 0; + UINT16 index = 0; Lnk_Info_Node_Stru_WL* retNodePtr = NULL; for(index = 0; index < pRsspStruct->LnkNodeNum; index++) @@ -514,8 +517,8 @@ UINT8 outputReplaceLnkNode_WL(UINT16 SrcAddr,UINT16 BsdAddr,UINT16 DestAddr, RSSP_INFO_STRU *pRsspStruct) { UINT8 ret = 0,chcRet = 0; - DSU_RSSP_LINK_RINFO_STRU_WL recvLnkInfo; /* ΪշʱĽڵϢ */ - DSU_RSSP_LINK_SINFO_STRU_WL outputLnkInfo; /* ΪͷʱĽڵϢ */ + DSU_RSSP_LINK_RINFO_STRU_WL recvLnkInfo = { 0 }; /* ΪշʱĽڵϢ */ + DSU_RSSP_LINK_SINFO_STRU_WL outputLnkInfo = { 0 }; /* ΪͷʱĽڵϢ */ Lnk_Info_Node_Stru_WL *pLnkNodeInfo = NULL; /* ݲĿַԼBSDַȡñΪܽڵϢ */ @@ -579,7 +582,7 @@ UINT8 outputReplaceLnkNode_WL(UINT16 SrcAddr,UINT16 BsdAddr,UINT16 DestAddr, ***********************************************************************/ Lnk_Info_Node_Stru_WL* SearchNodeByAddr_WL(UINT32 destName,RSSP_INFO_STRU *pRsspStruct) { - UINT8 index = 0; + UINT16 index = 0; Lnk_Info_Node_Stru_WL* retLnkNodePtr = NULL; /* ָ */ for( index = 0; index < pRsspStruct->LnkNodeNum; index++) { @@ -677,7 +680,8 @@ static UINT8 InitRsspLnkInfoWl(const DSU_RSSP_LINK_RINFO_STRU_WL* pRecvDsuLnkInf */ UINT8 WriteToVarArray_WL(UINT8* VarArray, RSSP_INFO_STRU* pRsspStruct) { - UINT8 ret = 0u, index = 0u; /*-< úֵΪʧ*/ + UINT8 ret = 0u; + UINT16 index = 0u; /*-< úֵΪʧ*/ UINT8* pTmp = NULL; /*·*/ UINT8 NodeLen = 0u; /*ڵ㳤*/ UINT8 count = 0u; /*ýڵ*/ @@ -707,16 +711,18 @@ UINT8 WriteToVarArray_WL(UINT8* VarArray, RSSP_INFO_STRU* pRsspStruct) /** * @brief LnkNodeInfo2VarArray_WL ·ڵд· * @param pNode ·ڵ ȡֵΧ:οṹ:Lnk_Info_Node_Stru_WL - * @param lnkNodeIdx ·ڵ± ȡֵΧ:0x00-0xFF + * @param lnkNodeIdx ·ڵ± ȡֵΧ:0x0000-0xFFFF * @param VarArray · ȡֵΧ:ֽ */ -static void LnkNodeInfo2VarArray_WL(const Lnk_Info_Node_Stru_WL* pNode, const UINT8 lnkNodeIdx, UINT8* VarArray) +static void LnkNodeInfo2VarArray_WL(const Lnk_Info_Node_Stru_WL* pNode, const UINT16 lnkNodeIdx, UINT8* VarArray) { + /*- ֲ*/ UINT16 index = 0; /*·±*/ const RsspLinkInfoStru_WL* pRsspLnkInfo = &pNode->RsspLinInfo; /*ǰ·Ϣ*/ const TimeStampStru_WL* pTmStmp = &pNode->RsspLinInfo.TimeStmp; /*ǰ·ʱ*/ - VarArray[index++] = lnkNodeIdx; /*-< ·ڵ±·,±1*/ + ShortToChar(lnkNodeIdx, &VarArray[index]); /*-< ·ڵ±·*/ + index += 2; /*-< ·±2*/ LongToChar(pNode->CycleNum, &VarArray[index]); /*-< ںŸ·*/ index += 4; /*-< ·±4*/ @@ -816,11 +822,12 @@ static void LnkNodeInfo2VarArray_WL(const Lnk_Info_Node_Stru_WL* pNode, const UI */ static void VarArray2LnkNodeInfo_WL(const UINT8* VarArray, Lnk_Info_Node_Stru_WL* pNode) { + /*- ֲ*/ UINT16 index = 0; /*·±*/ RsspLinkInfoStru_WL* pRsspLnkInfo = &pNode->RsspLinInfo; /*ǰ·Ϣ*/ TimeStampStru_WL* pTmStmp = &pNode->RsspLinInfo.TimeStmp; /*ǰ·ʱ*/ - index += 1; /*-< ·±*/ + index += 2u; /*-< ·±2*/ pNode->CycleNum = LongFromChar(&VarArray[index]); /*-< ·ݸֵں*/ index += 4; /*-< ·±4*/ @@ -1082,47 +1089,41 @@ static UINT8 SetNodeParamWl(const DSU_RSSP_LINK_RINFO_STRU_WL* pRecvDsuLnkInf, return (UINT8)1; } -/*********************************************************************** - * : AdjustLnkCycle - * : ָ͡ںšǰ·ǰ·ںŲǷΪִڡ - * : - * - * ----------------------------------------------------------- - * localType UINT8 IN - * cycleNum UINT32 IN ں - * lnkNode Lnk_Info_Node_Stru_WL* IN ·ڵ - * - * ֵ : - ***********************************************************************/ + /** + * @brief AdjustLnkCycle ָ,ں,ǰ·,ǰ·ںŲǷΪִ + * @param localType ȡֵΧ:0x00-0xFF + * @param cycleNum ں ȡֵΧ:0x00000000-0xFFFFFFFF + * @param lnkNode ·ڵ ȡֵΧ:οṹLnk_Info_Node_Stru_WL + */ void AdjustLnkCycle(UINT8 localType, UINT32 cycleNum, Lnk_Info_Node_Stru_WL* lnkNode) { - if (lnkNode != NULL) + if (lnkNode != NULL) /*-< Ƿǿ*/ { - if (((RSSP_TYPE_VOBC_WL == localType) || (RSSP_TYPE_VOBC_BACK_WL == localType)) && (RSSP_TYPE_ATS_WL == (lnkNode->DestTypeId / 256))) /*VOBCATS*/ + if (((RSSP_TYPE_VOBC_WL == localType) || (RSSP_TYPE_IVOC_WL == localType) || (RSSP_TYPE_VOBC_BACK_WL == localType)) && (RSSP_TYPE_ATS_WL == (lnkNode->DestTypeId / 256))) /*-< ΪVOBCIVOC򳵱 ҶԷΪATS*/ { - if (0 == (cycleNum % VOBC_ATS_CYCLENUM_MULTIPLE)) /*ںű,·ںŲִ*/ + if (0 == (cycleNum % VOBC_ATS_CYCLENUM_MULTIPLE)) /*-< ںűΪATSںű*/ { - lnkNode->ExeCycle = 1; + lnkNode->ExeCycle = 1; /*-< Ϊִ*/ } else /*ںű,ִ*/ { - lnkNode->ExeCycle = 0; + lnkNode->ExeCycle = 0; /*-< Ϊִ*/ } } - else if ((RSSP_TYPE_AOM_WL == localType) && (RSSP_TYPE_ATS_WL == (lnkNode->DestTypeId / 256))) /*AOMATS*/ + else if (((RSSP_TYPE_AOM_WL == localType) || (RSSP_TYPE_IVOC_AOM_WL == localType)) && (RSSP_TYPE_ATS_WL == (lnkNode->DestTypeId / 256))) /*-< ΪAOMIVOCAOM ҶԷΪATS*/ { - if (0 == (cycleNum % AOM_ATS_CYCLENUM_MULTIPLE)) /*ںű,·ںŲִ*/ + if (0 == (cycleNum % AOM_ATS_CYCLENUM_MULTIPLE)) /*-< ںűΪAOMATSںű*/ { - lnkNode->ExeCycle = 1; + lnkNode->ExeCycle = 1; /*-< Ϊִ*/ } else /*ںű,ִ*/ { - lnkNode->ExeCycle = 0; + lnkNode->ExeCycle = 0; /*-< Ϊִ*/ } } else /*,õ·ڿִ*/ { - lnkNode->ExeCycle = 1; + lnkNode->ExeCycle = 1; /*-< Ϊִ*/ } } } diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.h b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.h index 8f7ebb8..8c4efca 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspLnkNodeMgrWl.h @@ -33,7 +33,7 @@ extern "C" { * @param pRsspStruct RSSPIʵ ȡֵΧ:οṹ:RSSP_INFO_STRU * @return 0:ʧ 1:ɹ */ -UINT8 InitLnkNodeArr_WL(UINT8 num,RSSP_INFO_STRU *pRsspStruct); +UINT8 InitLnkNodeArr_WL(UINT16 num,RSSP_INFO_STRU *pRsspStruct); /*********************************************************************** * : SearchLnkBsdNode_WL @@ -160,20 +160,14 @@ UINT8 WriteToVarArray_WL(UINT8 *VarArray,RSSP_INFO_STRU *pRsspStruct); * * ֵ : ***********************************************************************/ -void GetLnkNodeArr_WL(Lnk_Info_Node_Stru_WL** pLnkInfoNodeArr,UINT8 *OutLen,RSSP_INFO_STRU *pRsspStruct); +void GetLnkNodeArr_WL(Lnk_Info_Node_Stru_WL** pLnkInfoNodeArr,UINT16 *OutLen,RSSP_INFO_STRU *pRsspStruct); -/*********************************************************************** - * : AdjustLnkCycle - * : ָ͡ںšǰ·ǰ·ںŲǷΪִڡ - * : - * - * ----------------------------------------------------------- - * localType UINT8 IN - * cycleNum UINT32 IN ں - * lnkNode Lnk_Info_Node_Stru_WL* IN ·ڵ - * - * ֵ : - ***********************************************************************/ +/** + * @brief AdjustLnkCycle ָ,ں,ǰ·,ǰ·ںŲǷΪִ + * @param localType ȡֵΧ:0x00-0xFF + * @param cycleNum ں ȡֵΧ:0x00000000-0xFFFFFFFF + * @param lnkNode ·ڵ ȡֵΧ:οṹLnk_Info_Node_Stru_WL + */ void AdjustLnkCycle(UINT8 localType, UINT32 cycleNum, Lnk_Info_Node_Stru_WL *lnkNode); /*-------------------------------------------------------------------- diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspOutputWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspOutputWl.c index d3dbeb3..3a9b5d4 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspOutputWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspOutputWl.c @@ -27,6 +27,7 @@ #include "RsspLnkNodeMgrWl.h" #include "RsspRecordDelareWl.h" #include "CommonRecord.h" +#include "CommonMemory.h" #ifdef __cplusplus extern "C" { @@ -63,15 +64,16 @@ static void RecvLnkStatusMng_WL(RSSP_INFO_STRU* pRsspStru); UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRsspStru) { /** ֲ*/ - UINT8 ret = 0, index = 0; /*-< ÷ֵΪʧ*/ + UINT8 ret = 0; + UINT16 index = 0; /*-< ÷ֵΪʧ*/ UINT8 QueErrFlag = 0; /*-< öдʶΪ*/ - UINT8 LnkNodeNum = 0; /* ͨŽڵ */ + UINT16 LnkNodeNum = 0; /* ͨŽڵ */ UINT16 MaxMsgLen = 0; /* һнڵݳ */ UINT16 MsgLen = 0; /* Ϣ */ UINT8* TmpOutMsg = NULL; /* ɱݻ */ Lnk_Info_Node_Stru_WL* LnkNodeArr = NULL; /* ͨŽڵ */ Lnk_Info_Node_Stru_WL* pNode = NULL; /* ͨŽڵָ */ - /* ywlou20101118 Add S */ + /* ywlou20101118 Add S */ UINT8 appDataFlg = 0; /*-< ǷӦøݱʶΪ*/ /* ywlou20101118 Add E */ UINT32 destDevName = 0; /* Է豸ʶ */ @@ -97,15 +99,13 @@ UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRssp PrintRecArrayByte(RecordArray, RecordSize, RSSP_OUTPUT); /*-< ¼ʶ־*/ PrintRecArray2ByteB(RecordArray, RecordSize, (UINT16)QueueStatus(AppToRs)); /*-< ¼ܳ־*/ #endif - RsspMemSet_WL(&pRsspStru->AppArray[0], pRsspStru->AppArraySize, 0); /*-< ոӦݴŵ麯*/ + CommonMemSet(&pRsspStru->AppArray[0], pRsspStru->AppArraySize, 0u, pRsspStru->AppArraySize); /*-< ոӦݴŵ麯*/ /* ȡȫֵͨŽڵ */ GetLnkNodeArr_WL(&LnkNodeArr, &LnkNodeNum, pRsspStru); /*-< ȡͨŽڵ麯*/ /* ޷ۼ */ for (index = 0; index < LnkNodeNum; index++) /*-< ǰ·±ǷС·*/ { - LnkNodeArr[index].CycleNum++; /*-< Эۼ1*/ - AdjustLnkCycle(pRsspStru->LocalType, LnkNodeArr[index].CycleNum, &LnkNodeArr[index]); /*-< øָ͡ںšǰ·ǰ·ںŲǷΪִں*/ if (1 == LnkNodeArr[index].ExeCycle) /*-< ·Ƿִ*/ { LnkNodeArr[index].HasRsdBeforeSseOrSsr = 0; /*-< δɹRSDʶΪ*/ @@ -148,7 +148,7 @@ UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRssp { /* RSD */ ret = CreateRsdMsg_WL(pRsspStru->FrameData, (UINT16)(MsgLen + 2), TmpOutMsg, &pNode, pRsspStru); /*-< RSD֡*/ - RsspMemSet_WL(pRsspStru->FrameData, (UINT16)(MsgLen + 2), 0); /*-< Ӧø֡*/ + CommonMemSet(pRsspStru->FrameData, (UINT32)(MsgLen + 2u), 0u, (UINT32)(MsgLen + 2u)); /*-< Ӧø֡*/ /* RSDɳɹ */ if (1 == ret) /*-< úǷɹ*/ { @@ -224,7 +224,7 @@ UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRssp /*-< ʲô*/ } - if ((RSSP_TYPE_VOBC_WL == pRsspStru->LocalType) || (RSSP_TYPE_VOBC_BACK_WL == pRsspStru->LocalType) || (RSSP_TYPE_AOM_WL == pRsspStru->LocalType)) /*-< Ƿ񳵻򳵺󱸻AOM*/ + if ((RSSP_TYPE_VOBC_WL == pRsspStru->LocalType) || (RSSP_TYPE_IVOC_WL == pRsspStru->LocalType) || (RSSP_TYPE_VOBC_BACK_WL == pRsspStru->LocalType) || (RSSP_TYPE_AOM_WL == pRsspStru->LocalType) || (RSSP_TYPE_IVOC_AOM_WL == pRsspStru->LocalType)) /*-< ǷCBTC򳵳򳵺󱸻CBTC AOM򳵳AOM*/ { if (DisbaledReplace_WL == LnkNodeArr[index].NodeStatus) /*-< ǰ·Ƿ*/ { @@ -235,7 +235,7 @@ UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRssp dstType = DquToDevType(LnkNodeArr[index].DestDevName, pRsspStru->pDsuRsspInfoStruWL); /*-< øHLHTIDת豸ͺĿID*/ #endif } - if ((RSSP_TYPE_VOBC_WL == dstType) || (RSSP_TYPE_VOBC_BACK_WL == dstType) || (RSSP_TYPE_TTIL_WL == dstType)) /*-< ԷǷ񳵻򳵺󱸻βͨ*/ + if ((RSSP_TYPE_VOBC_WL == dstType) || (RSSP_TYPE_IVOC_WL == dstType) || (RSSP_TYPE_VOBC_BACK_WL == dstType) || (RSSP_TYPE_TTIL_WL == dstType)) /*-< ԷǷ񳵻򳵳򳵺󱸻βͨ*/ { appDataFlg = 1; /*-< ǷӦøݱʶΪ*/ } @@ -378,7 +378,7 @@ UINT8 RsspOutput_WL(QueueStruct* AppToRs, UINT8* VarArray, RSSP_INFO_STRU* pRssp PrintFiles(RecordArray, RecordSize, "\n"); #endif #ifdef RSSP_RECORD_SIMPLIFY_BIN /*Ƿƺ꿪*/ - PrintRecArrayByte(RecordArray, RecordSize, index); /*-< ¼ǰ·±־*/ + PrintRecArray2ByteB(RecordArray, RecordSize, index); /*-< ¼ǰ·±־*/ PrintRecArray2ByteB(RecordArray, RecordSize, LnkNodeArr[index].RsspLinInfo.RsspDestAddr); /*-< ¼RSSPIĿĵַ־*/ PrintRecArray2ByteB(RecordArray, RecordSize, LnkNodeArr[index].DestTypeId); /*-< ¼ĿID־*/ PrintRecArray2ByteB(RecordArray, RecordSize, LnkNodeArr[index].DestLogicId); /*-< ¼Ŀ߼ID־*/ @@ -839,22 +839,15 @@ static UINT8 WriteToAppArray(const UINT8* appData, const UINT16 appDataLen, Lnk_ return rtn; } -/*********************************************************************** - * : RecvLnkStatusMng_WL - * : ͨŽڵϢ״̬仯 - * : - * - * -------------------------------------------------------------- - * pBsdMsg const DataNod_WLe* IN Bsd - * pLnkNode Lnk_Info_Node_Stru_WL INOUT RSSPӦõ - * - - * ֵ : UINT8 1 - ***********************************************************************/ +/** +* @brief RecvLnkStatusMng_WL ͨŽڵϢ״̬仯 +* @param pRsspStru RSSPIṹ ȡֵΧ:οṹRSSP_INFO_STRU +*/ static void RecvLnkStatusMng_WL(RSSP_INFO_STRU* pRsspStru) { - UINT8 index = 0u; /*±*/ - UINT8 LnkNodeNum = 0u; /*·ڵ*/ + /*- ֲ*/ + UINT16 index = 0u; /*±*/ + UINT16 LnkNodeNum = 0u; /*·ڵ*/ UINT8 RecvStatus = 0u; /*״̬*/ UINT32 LastLocalRecTC = 0u; /*ϴյıں*/ UINT32 NoRecDataTc = 0u; /**/ @@ -869,64 +862,59 @@ static void RecvLnkStatusMng_WL(RSSP_INFO_STRU* pRsspStru) GetLnkNodeArr_WL(&LnkNodeArr, &LnkNodeNum, pRsspStru); /*-< úȡӽڵбб*/ for (index = 0u; index < LnkNodeNum; index++) /*-< ǰڵ±ǷСڽڵ*/ { + LnkNodeArr[index].CycleNum++; /*-< Эۼ1*/ + AdjustLnkCycle(pRsspStru->LocalType, LnkNodeArr[index].CycleNum, &LnkNodeArr[index]); /*-< øָ͡ںšǰ·ǰ·ںŲǷΪִں*/ if (1u == LnkNodeArr[index].ExeCycle) /*-< ·Ƿִ*/ { RecvStatus = LnkNodeArr[index].RsspLinInfo.RecvLinkStatus; /*-< õǰڵ״̬״̬*/ - if ((WaitSSR_WL == RecvStatus) || (RecvData_WL == RecvStatus)) /*-< ״̬ǷSSR״̬*/ + LastLocalRecTC = LnkNodeArr[index].RsspLinInfo.TimeStmp.LastLocalRecTC; /*-< õǰڵϴյЧʱںŸϴյЧʱں*/ + if (((WaitSSR_WL == RecvStatus) || (RecvData_WL == RecvStatus)) && (LnkNodeArr[index].RsspLinInfo.TimeStmp.TC != LastLocalRecTC)) /*-< ״̬ǷSSR״̬ ҵǰںǷ񲻵ϴյЧʱں*/ { - LastLocalRecTC = LnkNodeArr[index].RsspLinInfo.TimeStmp.LastLocalRecTC; /*-< õǰڵϴյЧʱںŸϴյЧʱں*/ - if (LnkNodeArr[index].RsspLinInfo.TimeStmp.TC != LastLocalRecTC) /*-< ǰںǷ񲻵ϴյЧʱں*/ + LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum += 1u; /*-< õǰڵ1*/ + NoRecDataTc = LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum; /*-< õǰڵ*/ + if (WaitSSR_WL == RecvStatus) /*-< ״̬ǷSSR״̬*/ { - LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum += 1u; /*-< õǰڵ1*/ - NoRecDataTc = LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum; /*-< õǰڵ*/ - if (WaitSSR_WL == RecvStatus) /*-< ״̬ǷSSR״̬*/ + if (LnkNodeArr[index].RsspLinInfo.LocalNode.SSDelay < NoRecDataTc) /*-< Ƿڵǰڵ̵ĵSSR*/ { - if (LnkNodeArr[index].RsspLinInfo.LocalNode.SSDelay < NoRecDataTc) /*-< Ƿڵǰڵ̵ĵSSR*/ + if (LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse >= SEND_SSE_NUM_WL) /*-< ǰڵ㷢SSEǷڵSSE*/ { - if (LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse >= SEND_SSE_NUM_WL) /*-< ǰڵ㷢SSEǷڵSSE*/ - { - LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = Halt_WL; /*-< õǰڵ״̬Ϊж*/ - LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum = 0; /*-< 㵱ǰڵ*/ - LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse = 0; /*-< 㵱ǰڵ㷢SSE*/ - } - else - { - LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = SendSSE_WL; /*-< õǰڵ״̬ΪSSE״̬*/ - LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse++; /*-< õǰڵ㷢SSE1*/ - } + LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = Halt_WL; /*-< õǰڵ״̬Ϊж*/ + LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum = 0; /*-< 㵱ǰڵ*/ + LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse = 0; /*-< 㵱ǰڵ㷢SSE*/ } else { - /*-< ʲô */ + LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = SendSSE_WL; /*-< õǰڵ״̬ΪSSE״̬*/ + LnkNodeArr[index].RsspLinInfo.TimeStmp.NumSendSse++; /*-< õǰڵ㷢SSE1*/ } } else { -#ifdef TIMED_SSE /*Ƿ嶨ʱSSEʱУ꿪*/ - AntiDelayTC = CheckTimeStamp_WL(LnkNodeArr[index].RsspLinInfo.TimeStmp.TC, LnkNodeArr[index].RsspLinInfo.TimeStmp.SsrTc, LnkNodeArr[index].RsspLinInfo.LocalNode.AntiDelayCount); /*-< úõǰSSRڲǷ*/ - if (AntiDelayTC < 0) /*-< ǰSSRڲǷ*/ - { - LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = SendSSE_WL; /*-< õǰڵ״̬ΪSSE״̬*/ - } - else - { - /*-< ʲô*/ - } -#endif - if (NoRecDataTc > LnkNodeArr[index].RsspLinInfo.LocalNode.DLost) /*-< Ƿڵǰڵ̵*/ - { - LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = Halt_WL; /*-< õǰڵ״̬Ϊж*/ - LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum = 0u; /*-< 㵱ǰڵ*/ - } - else - { - /*-< ʲô*/ - } + /*-< ʲô */ } } else { - /*-< ʲô*/ +#ifdef TIMED_SSE /*Ƿ嶨ʱSSEʱУ꿪*/ + AntiDelayTC = CheckTimeStamp_WL(LnkNodeArr[index].RsspLinInfo.TimeStmp.TC, LnkNodeArr[index].RsspLinInfo.TimeStmp.SsrTc, LnkNodeArr[index].RsspLinInfo.LocalNode.AntiDelayCount); /*-< úõǰSSRڲǷ*/ + if (AntiDelayTC < 0) /*-< ǰSSRڲǷ*/ + { + LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = SendSSE_WL; /*-< õǰڵ״̬ΪSSE״̬*/ + } + else + { + /*-< ʲô*/ + } +#endif + if (NoRecDataTc > LnkNodeArr[index].RsspLinInfo.LocalNode.DLost) /*-< Ƿڵǰڵ̵*/ + { + LnkNodeArr[index].RsspLinInfo.RecvLinkStatus = Halt_WL; /*-< õǰڵ״̬Ϊж*/ + LnkNodeArr[index].RsspLinInfo.NoRecvDataCycleNum = 0u; /*-< 㵱ǰڵ*/ + } + else + { + /*-< ʲô*/ + } } } else diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspReciveWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspReciveWl.c index 0b5334f..fef2357 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspReciveWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspReciveWl.c @@ -937,6 +937,7 @@ static void ReadNetData(QueueStruct* pInputQue, DataNode_WL** pHeadNode, RSSP_IN UINT16 dstTypeId = 0u; /*ĿID*/ UINT32 dstId = 0u; /*ĶԷΨһID*/ UINT32 recvDstId = 0u; /*յЭΨһIDӦΨһID*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ if ((NULL != pInputQue) && (NULL != pHeadNode) && (NULL != rssp) && (NULL != rssp->StackOfDataLink) && (NULL != rssp->pDsuRsspInfoStruWL) && (NULL != rssp->FrameData) && (NULL != rssp->RecordArray)) /*-< Ƿǿ*/ { @@ -945,9 +946,11 @@ static void ReadNetData(QueueStruct* pInputQue, DataNode_WL** pHeadNode, RSSP_IN /*,д*/ while (queLen > twoLen) /*-< Ƿ*/ { + deepPro = 0u; /*-< ô־Ϊ*/ + QueueScan(twoLen, rssp->FrameData, pInputQue); /*-< ɨֽڵ*/ pkgDataLen = ShortFromChar(rssp->FrameData); /*-< ʾĴ˵ݳ*/ - if ((twoLen + pkgDataLen) <= queLen) /*-< ʾĴ˵ݳǷ*/ + if (((UINT32)twoLen + (UINT32)pkgDataLen) <= queLen) /*-< ʾĴ˵ݳǷ*/ { if ((twoLen + twoLen + RSSP_HEAD_LEN_WL + TC_LEN_WL + CRC_16_LEN_WL) < pkgDataLen) /*-< 2ֽID+2ֽ߼ID+RSSPI֡,Сڰ,ʾ֡Ƿ*/ { @@ -977,113 +980,7 @@ static void ReadNetData(QueueStruct* pInputQue, DataNode_WL** pHeadNode, RSSP_IN if (dstAddr == rssp->pDsuRsspInfoStruWL->LocRsspiAddr) /*-< ǷǷ*/ { -#ifdef RSSP_NO_HLHT - dstId = dstTypeId; /*-< öԷΨһID*/ -#else - dstId = DquTypeIdToHlhtId(dstTypeId, dstLogicId, rssp->pDsuRsspInfoStruWL); /*-< öԷΨһID*/ -#endif - dsuRsspRGetName_WL(srcAddr, dstAddr, &recvDstId, rssp->pDsuRsspInfoStruWL); /*-< յԷΨһID*/ - if (recvDstId == dstId) /*-< ΨһIDΨһIDǷһ*/ - { - crcValid = IsRedunRcvMsg(pkgDataLen - twoLen - twoLen, &rssp->FrameData[twoLen + twoLen + twoLen], rssp->RecordArray, rssp->RecordArraySize); /*-< ü鵥ݱĺ*/ - if (1u == crcValid) /*-< úǷɹ*/ - { - pLastNode = NULL; /*-< һڵ*/ - pCurNode = (*pHeadNode); /*-< ǰڵͷڵ㿪ʼ*/ - isCover = 0u; /*-< ǽڵ*/ - isPop = 0u; /*-< δڵ*/ - isAddFull = 0u; /*-< Ƿӱ־Ϊ*/ - - isInBreak = 0u; /*-< ˳־Ϊ˳*/ - while (NULL != pCurNode) /*-< ǰڵǷǿ*/ - { - if ((srcAddr == pCurNode->SrcAddr) && (sn == pCurNode->TCr) && (frameType == pCurNode->FrameType)) /*-< Ƿֵͬڵ*/ - { - isCover = 1u; /*-< øDZ־Ϊ*/ - isInBreak = 1u; /*-< ˳־Ϊ˳*/ - } - else /*Դַ,,֡ С*/ - { - if ((srcAddr < pCurNode->SrcAddr) /*-< Դַ,,֡*/ - || ((srcAddr == pCurNode->SrcAddr) && (sn < pCurNode->TCr)) /*ٱȽ*/ - || ((srcAddr == pCurNode->SrcAddr) && (sn == pCurNode->TCr) && (frameType < pCurNode->FrameType)) /*ٱȽ֡*/ - ) - { - isInBreak = 1u; /*-< ˳־Ϊ˳*/ - } - } - - if (0 == isInBreak) /*-< ˳־ΪǷΪ˳*/ - { - pLastNode = pCurNode; /*-< һڵΪڵ*/ - pCurNode = pCurNode->pNextNode;/*-< õǰڵΪһڵ*/ - - } - else /*˳*/ - { - break;/*-< ˳*/ - } - } - - if (1u == isCover) /*-< ǽڵ־ǷΪ*/ - { - pNewNode = pCurNode; /*-< ½ڵΪǰڵ*/ - } - else /*ڵ*/ - { - isPop = StackPopWl(&rssp->StackOfDataLink->stack, (STACK_DATA_TYPE_WL*)&pNewNode); /*-< õ½ڵ㺯*/ - if (1u == isPop) /*-< úǷɹ*/ - { - if (NULL != pCurNode) /*-< ǰڵǷǿ*/ - { - pNewNode->pNextNode = pCurNode; /*-< һڵΪǰڵ*/ - } - if (NULL == pLastNode) /*-< һڵǷΪ*/ - { - *pHeadNode = pNewNode; /*-< ͷڵΪ½ڵ*/ - } - else /*һڵָ½ڵ*/ - { - pLastNode->pNextNode = pNewNode; /*-< һڵΪ½ڵ*/ - } - } - else /*ջ*/ - { - if ((NULL != (*pHeadNode)) && (NULL != pLastNode)) /*-< ͷڵǿһڵǿ*/ - { - pNewNode = (*pHeadNode); /*-< ½ڵΪͷڵ*/ - (*pHeadNode) = (*pHeadNode)->pNextNode; /*-< ͷڵΪһڵ*/ - pLastNode->pNextNode = pNewNode; /*-< һڵΪ½ڵ*/ - pNewNode->pNextNode = pCurNode; /*-< һڵΪǰڵ*/ - isAddFull = 1u; /*-< Ƿӱ־Ϊ*/ - } - - PrintRecArrayByte(rssp->RecordArray, rssp->RecordArraySize, RP_INPUT_STACK_NO); /*-< ¼־-ջ޿ռ־*/ - PrintRecArray4ByteB(rssp->RecordArray, rssp->RecordArraySize, queLen); /*-< ¼ݳ־*/ - } - } - if ((1u == isCover) || (1u == isPop) || (1u == isAddFull)) /*-< DZ־Ϊ ҵɹ ǷΪ*/ - { - pNewNode->FrameType = frameType; /*-< ֡*/ - pNewNode->SrcAddr = srcAddr; /*-< RSSPIԴַ*/ - dsuRsspRGetName_WL(srcAddr, dstAddr, &pNewNode->DevName, rssp->pDsuRsspInfoStruWL); /*-< öԷΨһID*/ -#ifdef RSSP_NO_HLHT - pNewNode->DestLogId = pNewNode->DevName & 0xff; /*-< Ŀ߼ID*/ -#else - pNewNode->DestLogId = DquToDevId(pNewNode->DevName, rssp->pDsuRsspInfoStruWL); /*-< Ŀ߼ID*/ -#endif - pNewNode->LocalLogId = rssp->LocalID; /*-< ñ߼ID*/ - pNewNode->DestLogicId = dstLogicId; /*-< öԷ߼ID*/ - pNewNode->DataLen = pkgDataLen - twoLen - twoLen - twoLen; /*-< ȥ2ֽCRC,pkgDataLen2ֽID,2ֽ߼ID*/ - pNewNode->TCr = sn; /*-< */ - RsspMemCopy_WL(&rssp->FrameData[twoLen + twoLen + twoLen], pNewNode->Data, pkgDataLen - twoLen); /*-< ֡*/ - } - } - } - else /*Ƿ*/ - { - PrintRecArrayByte(rssp->RecordArray, rssp->RecordArraySize, RP_INPUT_FRAME_ID_ERR); /*-< ¼ΨһID־*/ - } + deepPro = 1u; /*-< ô־Ϊ*/ } else /*Ƿ*/ { @@ -1107,8 +1004,128 @@ static void ReadNetData(QueueStruct* pInputQue, DataNode_WL** pHeadNode, RSSP_IN QueueElementDiscard(queLen, pInputQue); /*-< ն*/ PrintRecArrayByte(rssp->RecordArray, rssp->RecordArraySize, RP_INPUT_LEN_ERR); /*-< ¼볤ȴ־*/ } - queLen = QueueStatus(pInputQue); /*-< ȡʣݳ*/ + if (1u == deepPro) /*-< ־ǷΪ*/ + { + deepPro = 0u; /*-< ô־Ϊ*/ + +#ifdef RSSP_NO_HLHT + dstId = dstTypeId; /*-< öԷΨһID*/ +#else + dstId = DquTypeIdToHlhtId(dstTypeId, dstLogicId, rssp->pDsuRsspInfoStruWL); /*-< öԷΨһID*/ +#endif + dsuRsspRGetName_WL(srcAddr, dstAddr, &recvDstId, rssp->pDsuRsspInfoStruWL); /*-< յԷΨһID*/ + if (recvDstId == dstId) /*-< ΨһIDΨһIDǷһ*/ + { + crcValid = IsRedunRcvMsg(pkgDataLen - twoLen - twoLen, &rssp->FrameData[twoLen + twoLen + twoLen], rssp->RecordArray, rssp->RecordArraySize); /*-< ü鵥ݱĺ*/ + if (1u == crcValid) /*-< úǷɹ*/ + { + pLastNode = NULL; /*-< һڵ*/ + pCurNode = (*pHeadNode); /*-< ǰڵͷڵ㿪ʼ*/ + isCover = 0u; /*-< ǽڵ*/ + isPop = 0u; /*-< δڵ*/ + isAddFull = 0u; /*-< Ƿӱ־Ϊ*/ + + deepPro = 1u; /*-< ô־Ϊ*/ + } + } + else /*Ƿ*/ + { + PrintRecArrayByte(rssp->RecordArray, rssp->RecordArraySize, RP_INPUT_FRAME_ID_ERR); /*-< ¼ΨһID־*/ + } + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + deepPro = 0u; /*-< ô־Ϊ*/ + + isInBreak = 0u; /*-< ˳־Ϊ˳*/ + while (NULL != pCurNode) /*-< ǰڵǷǿ*/ + { + if ((srcAddr == pCurNode->SrcAddr) && (sn == pCurNode->TCr) && (frameType == pCurNode->FrameType)) /*-< Ƿֵͬڵ*/ + { + isCover = 1u; /*-< øDZ־Ϊ*/ + isInBreak = 1u; /*-< ˳־Ϊ˳*/ + } + else /*Դַ,,֡ С*/ + { + if ((srcAddr < pCurNode->SrcAddr) /*-< Դַ,,֡*/ + || ((srcAddr == pCurNode->SrcAddr) && (sn < pCurNode->TCr)) /*ٱȽ*/ + || ((srcAddr == pCurNode->SrcAddr) && (sn == pCurNode->TCr) && (frameType < pCurNode->FrameType)) /*ٱȽ֡*/ + ) + { + isInBreak = 1u; /*-< ˳־Ϊ˳*/ + } + } + + if (0 == isInBreak) /*-< ˳־ΪǷΪ˳*/ + { + pLastNode = pCurNode; /*-< һڵΪڵ*/ + pCurNode = pCurNode->pNextNode;/*-< õǰڵΪһڵ*/ + + } + else /*˳*/ + { + break;/*-< ˳*/ + } + } + + if (1u == isCover) /*-< ǽڵ־ǷΪ*/ + { + pNewNode = pCurNode; /*-< ½ڵΪǰڵ*/ + } + else /*ڵ*/ + { + isPop = StackPopWl(&rssp->StackOfDataLink->stack, (STACK_DATA_TYPE_WL*)&pNewNode); /*-< õ½ڵ㺯*/ + if (1u == isPop) /*-< úǷɹ*/ + { + if (NULL != pCurNode) /*-< ǰڵǷǿ*/ + { + pNewNode->pNextNode = pCurNode; /*-< һڵΪǰڵ*/ + } + if (NULL == pLastNode) /*-< һڵǷΪ*/ + { + *pHeadNode = pNewNode; /*-< ͷڵΪ½ڵ*/ + } + else /*һڵָ½ڵ*/ + { + pLastNode->pNextNode = pNewNode; /*-< һڵΪ½ڵ*/ + } + } + else /*ջ*/ + { + if ((NULL != (*pHeadNode)) && (NULL != pLastNode)) /*-< ͷڵǿһڵǿ*/ + { + pNewNode = (*pHeadNode); /*-< ½ڵΪͷڵ*/ + (*pHeadNode) = (*pHeadNode)->pNextNode; /*-< ͷڵΪһڵ*/ + pLastNode->pNextNode = pNewNode; /*-< һڵΪ½ڵ*/ + pNewNode->pNextNode = pCurNode; /*-< һڵΪǰڵ*/ + isAddFull = 1u; /*-< Ƿӱ־Ϊ*/ + } + + PrintRecArrayByte(rssp->RecordArray, rssp->RecordArraySize, RP_INPUT_STACK_NO); /*-< ¼־-ջ޿ռ־*/ + PrintRecArray4ByteB(rssp->RecordArray, rssp->RecordArraySize, queLen); /*-< ¼ݳ־*/ + } + } + if ((1u == isCover) || (1u == isPop) || (1u == isAddFull)) /*-< DZ־Ϊ ҵɹ ǷΪ*/ + { + pNewNode->FrameType = frameType; /*-< ֡*/ + pNewNode->SrcAddr = srcAddr; /*-< RSSPIԴַ*/ + dsuRsspRGetName_WL(srcAddr, dstAddr, &pNewNode->DevName, rssp->pDsuRsspInfoStruWL); /*-< öԷΨһID*/ +#ifdef RSSP_NO_HLHT + pNewNode->DestLogId = pNewNode->DevName & 0xff; /*-< Ŀ߼ID*/ +#else + pNewNode->DestLogId = DquToDevId(pNewNode->DevName, rssp->pDsuRsspInfoStruWL); /*-< Ŀ߼ID*/ +#endif + pNewNode->LocalLogId = rssp->LocalID; /*-< ñ߼ID*/ + pNewNode->DestLogicId = dstLogicId; /*-< öԷ߼ID*/ + pNewNode->DataLen = pkgDataLen - twoLen - twoLen - twoLen; /*-< ȥ2ֽCRC,pkgDataLen2ֽID,2ֽ߼ID*/ + pNewNode->TCr = sn; /*-< */ + RsspMemCopy_WL(&rssp->FrameData[twoLen + twoLen + twoLen], pNewNode->Data, pkgDataLen - twoLen); /*-< ֡*/ + } + } + + queLen = QueueStatus(pInputQue); /*-< ȡʣݳ*/ } } } diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspStructWl.h b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspStructWl.h index 7841261..00a2a48 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspStructWl.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspStructWl.h @@ -121,7 +121,7 @@ typedef struct UINT8 LocalType; /* 豸typeӦðĵڳʼʱд */ UINT16 LocalLogicId; /*߼ID*/ UINT32 *CycleNum; /* ںţӦðĵÿڿʼʱд */ - UINT8 MaxNumLink; /* RSSPͬʱͨŵӦðĵڳʼʱд */ + UINT16 MaxNumLink; /* RSSPͬʱͨŵӦðĵڳʼʱд */ UINT8 MaxNumPerCycle; /* RSSPһÿЧݣӦðĵڳʼʱд */ UINT16 InputSize; /* RSSPһ֡ӦݳȣӦðĵڳʼʱд */ UINT16 OutputSize; /* RSSP㷢һ֡ӦݳȣӦðĵڳʼʱд */ @@ -144,7 +144,7 @@ typedef struct UINT8* FrameData; /*֡*/ RsspStackElement_WL* StackOfDataLink; Lnk_Info_Node_Stru_WL* LnkNodeArr; /* ͨŽڵ */ - UINT8 LnkNodeNum; /* ͨŽڵ鳤 */ + UINT16 LnkNodeNum; /* ͨŽڵ鳤 */ DSU_RSSP_INFO_STRU_WL *pDsuRsspInfoStruWL; /*RSSPϢ*/ UINT8 NoSendAppData; /*ʱӦøЭӦ*/ UINT16 NetsRecvPkgNumsLen; /*յ鳤*/ diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.c b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.c index 5e5b73d..5ddfdd6 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.c +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.c @@ -658,29 +658,26 @@ void RsspiSetSwapDataForOut(UINT8 swapData[], UINT8 outData[], RSSP_INFO_STRU* r } } -/* -*: RsspiDelAllLink -*: RSSPIɾ· -*: RSSP_INFO_STRU* rsspi RSSPIṹ -*: -*: -*ֵ: -*/ +/** + * @brief RsspiDelAllLink RSSPIɾ· + * @param rsspi RSSPIṹ ȡֵΧ:οṹRSSP_INFO_STRU + */ void RsspiDelAllLink(RSSP_INFO_STRU* rsspi) { - UINT8 i = 0u; /*ѭ*/ + /*- ֲ*/ + UINT16 i = 0u; /*ѭ*/ - if ((NULL != rsspi) && (NULL != rsspi->LnkNodeArr)) /**/ + if ((NULL != rsspi) && (NULL != rsspi->LnkNodeArr)) /*-< Ƿǿ*/ { - for (i = 0; i < rsspi->LnkNodeNum; i++) /*·*/ + for (i = 0; i < rsspi->LnkNodeNum; i++) /*-< ·*/ { - RsspMemSet_WL((UINT8*)&rsspi->LnkNodeArr[i], sizeof(Lnk_Info_Node_Stru_WL), 0u); /*·Ϣ*/ - rsspi->LnkNodeArr[i].NodeStatus = Replace_WL; /*ڵ״̬ÿɸ*/ + RsspMemSet_WL((UINT8*)&rsspi->LnkNodeArr[i], sizeof(Lnk_Info_Node_Stru_WL), 0u); /*-< ·Ϣ*/ + rsspi->LnkNodeArr[i].NodeStatus = Replace_WL; /*-< ڵ״̬ÿɸ*/ } - if (NULL != rsspi->RecordArray) /*¼־*/ + if (NULL != rsspi->RecordArray) /*-< ¼־ǿ*/ { - PrintRecArray2ByteB(rsspi->RecordArray, rsspi->RecordArraySize, (UINT16)0xF0F0u); + PrintRecArray2ByteB(rsspi->RecordArray, rsspi->RecordArraySize, (UINT16)0xF0F0u); /*-< ¼ɾ־*/ } } } diff --git a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.h b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.h index 9cd5077..4f7b7e9 100644 --- a/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.h +++ b/TSCP/src/protocol/rssp_record_cbtc1/common_rssp/RsspWl.h @@ -179,14 +179,10 @@ void RsspiSetSwapData(UINT8 swapData[], RSSP_INFO_STRU* rsspi); */ void RsspiSetSwapDataForOut(UINT8 swapData[], UINT8 outData[], RSSP_INFO_STRU* rsspi); -/* -*: RsspiDelAllLink -*: RSSPIɾ· -*: RSSP_INFO_STRU* rsspi RSSPIṹ -*: -*: -*ֵ: -*/ +/** + * @brief RsspiDelAllLink RSSPIɾ· + * @param rsspi RSSPIṹ ȡֵΧ:οṹRSSP_INFO_STRU + */ void RsspiDelAllLink(RSSP_INFO_STRU* rsspi); /*-------------------------------------------------------------------- diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.c b/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.c index d31a848..62caaaf 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.c +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.c @@ -61,17 +61,19 @@ #define DSU_DATA_PROTCL_SAME_RELATION 0x05 /*DSUͬ豸ͨŹϵtableId*/ -/*FSsheetҳϢ*/ +/*FSsheetҳϢṹ*/ typedef struct { - UINT32 Id; /**/ - UINT32 Len; /**/ - UINT16 RowCount; /**/ - UINT32 ColLen; /*ֽڳ*/ - UINT8* Data; /**/ + UINT32 Id; /* ȡֵΧ:0x00000000-0xFFFFFFFF*/ + UINT32 Len; /* ȡֵΧ:0x00000000-0xFFFFFFFF*/ + UINT16 RowCount; /* ȡֵΧ:0x0000-0xFFFF*/ + UINT32 ColLen; /*ֽڳ ȡֵΧ:0x00000000-0xFFFFFFFF*/ + UINT8* Data; /* ȡֵΧ:ֽ*/ } SheetInfo; static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId); +static void StDsuSfpFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId); +static UINT8 StDsuSfpFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId); static void MergeParam(SheetInfo* sheetInfo, UINT8 outData[], UINT32* outDataIdx, UINT16 outDataLen, UINT8 mergeData[], UINT32* mergeDataIdx); /*************************************************************************************************************** @@ -791,213 +793,270 @@ UINT8 dsuSfpInit(UINT8* fileName,UINT8** pDataBase) #endif -/* -*: ʼsheetҳϢ -*: UINT8 data[] -* const UINT32 dataLen ݳ -* const UINT32 excelId excel -* const UINT32 sheetId sheetҳ -*: SheetInfo* sheetInfo sheetҳϢ -*: -*ֵ: -*/ +/** + * @brief InitSheet ʼsheetҳϢ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ static void InitSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, const UINT32 excelId, const UINT32 sheetId) { + /*- ֲ*/ UINT32 idx = 0u; /*±*/ UINT32 crcVal = 0u; /*crcֵ*/ UINT32 crc = 0u; /*crc*/ UINT32 curLen = 0u; /*ǰ*/ UINT32 excelCount = 0u; /*excel*/ - UINT32 excelIdx = 0u; /*excel±*/ - UINT32 curExcelId = 0u; /*ǰexcel*/ - UINT32 curExcelPos = 0u; /*ǰexcelλ*/ - UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ - UINT32 sheetCount = 0u; /*sheet*/ - UINT32 sheetIdx = 0u; /*sheet±*/ - UINT32 curSheetId = 0u; /*ǰsheet*/ - UINT32 curSheetStartPos = 0u; /*ǰsheetʼλ*/ - UINT8 isBreak = 0u; /*Ƿ˳*/ - if ((NULL != sheetInfo) && (NULL != data) && (0u < dataLen)) /**/ + if ((NULL != sheetInfo) && (0u < dataLen) && (NULL != data)) /*-< Ƿǿ*/ { - /*Ĭֵ*/ - sheetInfo->Id = 0u; - sheetInfo->Len = 0u; - sheetInfo->RowCount = 0u; - sheetInfo->ColLen = 0u; - sheetInfo->Data = NULL; + sheetInfo->Id = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->Len = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->RowCount = 0u; /*-< sheetҳϢΪ0*/ + sheetInfo->ColLen = 0u; /*-< sheetҳϢֽڳΪ0*/ + sheetInfo->Data = NULL; /*-< sheetҳϢΪNULL*/ - if ((idx + 40u) <= dataLen) /*DH±*/ + if ((idx + 40u) <= dataLen) /*-< ʹݳǷϷ*/ { - /*4ֽCRC*/ - crcVal = LongFromChar(&data[idx]); - idx += 4u; + crcVal = LongFromChar(&data[idx]); /*-< õCRCֵ*/ + idx += 4u; /*-< ǰ±4*/ + /*4ֽڰ汾*/ - idx += 4u; - /*4ֽڳ*/ - curLen = LongFromChar(&data[idx]); - idx += 4u; + idx += 4u; /*-< ǰ±4*/ - if ((curLen == dataLen) && (4u < curLen)) + curLen = LongFromChar(&data[idx]); /*-< õг*/ + idx += 4u; /*-< ǰ±4*/ + + if ((curLen == dataLen) && (4u < curLen)) /*-< гǷϷ*/ { - crc = Crc32(&data[4], curLen - 4u); - if (crc == crcVal) + crc = Crc32(&data[4u], curLen - 4u); /*-< CRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷCRC*/ { - /*4ֽexcel*/ - excelCount = LongFromChar(&data[idx]); - idx += 4u; + excelCount = LongFromChar(&data[idx]); /*-< õexcel*/ + idx += 4u; /*-< ǰ±4*/ + /*24ֽԤ*/ - idx += 24u; + idx += 24u; /*-< ǰ±24*/ - for (excelIdx = 0u; excelIdx < excelCount; excelIdx++) - { - if ((idx + 24u) <= dataLen) /*DI±*/ - { - /*4ֽexcel*/ - curExcelId = LongFromChar(&data[idx]); - idx += 4u; - if (curExcelId == excelId) - { - /*4ֽڳ*/ - idx += 4u; - /*4ֽexcelλ*/ - curExcelPos = LongFromChar(&data[idx]); - curExcelStartPos = curExcelPos; - idx += 4u; - /*12ֽԤ*/ - idx += 12u; - - if ((curExcelPos + 40u) <= dataLen) /*DH±*/ - { - /*4ֽexcel CRC*/ - crcVal = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - /*4ֽexcel汾*/ - curExcelPos += 4u; - /*4ֽexcel*/ - curLen = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - - if (4u < curLen) - { - crc = Crc32(&data[curExcelStartPos + 4u], curLen - 4u); - if (crc == crcVal) - { - /*4ֽsheet*/ - sheetCount = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - /*24ֽԤ*/ - curExcelPos += 24u; - - for (sheetIdx = 0u; sheetIdx < sheetCount; sheetIdx++) - { - if ((curExcelPos + 24u) <= dataLen) /*DH±*/ - { - /*4ֽsheet*/ - curSheetId = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - if (curSheetId == sheetId) - { - sheetInfo->Id = curSheetId; - /*4ֽڳ*/ - sheetInfo->Len = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - /*4ֽsheetexcelλ*/ - curSheetStartPos = LongFromChar(&data[curExcelPos]); - curExcelPos += 4u; - /*2ֽ*/ - sheetInfo->RowCount = ShortFromChar(&data[curExcelPos]); - curExcelPos += 2u; - /*2ֽ-*/ - curExcelPos += 2u; - /*8ֽԤ*/ - curExcelPos += 8u; - /*Lenֽ*/ - sheetInfo->Data = &data[curExcelStartPos + curSheetStartPos]; - - if (0u < sheetInfo->RowCount) /**/ - { - if ((0u < sheetInfo->Len) && (0u == (sheetInfo->Len % sheetInfo->RowCount))) /*ݳ*/ - { - sheetInfo->ColLen = sheetInfo->Len / sheetInfo->RowCount; - } - else /*ݴ*/ - { - sheetInfo->Len = 0u; - sheetInfo->RowCount = 0u; - sheetInfo->Data = NULL; - } - } - else /**/ - { - sheetInfo->Len = 0u; - sheetInfo->Data = NULL; - } - - isBreak = 1u; - } - else - { - curExcelPos += 20u; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if (1u == isBreak) - { - break; - } - } - } - else /*crc*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - } - else /**/ - { - idx += 20u; /*ƫһDI*/ - } - } - else /*ȴ*/ - { - isBreak = 1u; - } - if (1u == isBreak) - { - break; - } - } + StDsuSfpFindExcel(sheetInfo, data, dataLen, idx, excelCount, excelId, sheetId); /*-< ҶӦexcleݺ*/ } } } } } -/* -*: ϲ -*: SheetInfo* sheetInfo sheetҳϢ -* UINT8 outData[] ⲿ -* UINT32* outDataIdx ⲿλ -*: UINT8 mergeData[] ϲ -* UINT32* mergeDataIdx ϲλ -*: -*ֵ: -*/ +/** + * @brief StDsuSfpFindExcel ҶӦexcle + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param idx ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelCount excle ȡֵΧ:0x00000000-0xFFFFFFFF + * @param excelId excleID ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StDsuSfpFindExcel(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 idx, UINT32 excelCount, const UINT32 excelId, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT32 excelIdx = 0u; /*excel±*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ + UINT32 curExcelId = 0u; /*ǰexcel*/ + UINT32 curExcelPos = 0u; /*ǰexcelλ*/ + UINT32 curExcelStartPos = 0u; /*ǰexcelʼλ*/ + UINT32 crcVal = 0u; /*crcֵ*/ + UINT32 crc = 0u; /*crc*/ + UINT32 curLen = 0u; /*ǰ*/ + UINT8 isBreak = 0u; /*-< Ƿ˳ʶΪ*/ + UINT32 sheetCount = 0u; /*sheet*/ + + if ((NULL != sheetInfo) && (NULL != data)) /*-< Ƿǿ*/ + { + for (excelIdx = 0u; excelIdx < excelCount; excelIdx++) /*-< excel±ǷСexcel*/ + { + deepPro = 0u; /*-< ô־Ϊ*/ + + if ((idx + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curExcelId = LongFromChar(&data[idx]); /*-< õǰexcleID*/ + idx += 4u; /*-< ǰ±4*/ + + if (curExcelId == excelId) /*-< õǰexcleIDǷΪҪҵ*/ + { + /*4ֽڳ*/ + idx += 4u; /*-< ǰ±4*/ + + /*4ֽexcelλ*/ + curExcelPos = LongFromChar(&data[idx]); /*-< õǰexcelλ*/ + curExcelStartPos = curExcelPos; /*-< ¼ǰexcelλΪexcelʼλ*/ + idx += 4u; /*-< ǰ±4*/ + + /*12ֽԤ*/ + idx += 12u; /*-< ǰ±12*/ + + if ((curExcelPos + 40u) <= dataLen) /*-< ʹݳǷϷ*/ + { + crcVal = LongFromChar(&data[curExcelPos]); /*-< õCRCֵ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*4ֽexcel汾*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + curLen = LongFromChar(&data[curExcelPos]); /*-< õexcel*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + if ((4u < curLen) && ((curExcelStartPos + curLen) <= dataLen)) /*-< excelȴ4 excelʼλüӳСڵݳ*/ + { + deepPro = 1u; /*-< ô־Ϊ*/ + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + else /**/ + { + idx += 20u; /*-< ǰ±20*/ + } + } + else /*ȴ*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + + if (1u == deepPro) /*-< ־ǷΪ*/ + { + crc = Crc32(&data[curExcelStartPos + 4u], curLen - 4u); /*-< excelCRCֵ*/ + if (crc == crcVal) /*-< CRCֵǷ*/ + { + sheetCount = LongFromChar(&data[curExcelPos]); /*-< õsheetҳ*/ + curExcelPos += 4u; /*-< ǰexcelλ4*/ + + /*24ֽԤ*/ + curExcelPos += 24u; /*-< ǰexcelλ24*/ + + isBreak = StDsuSfpFindSheet(sheetInfo, data, dataLen, curExcelStartPos, &curExcelPos, sheetCount, sheetId); /*-< ҶӦsheetҳݺ*/ + } + else /*crc*/ + { + isBreak = 1u; /*-< Ƿ˳ʶΪ*/ + } + } + + if (1u == isBreak) /*-< ˳ʶΪǷΪ*/ + { + break; /*-< ˳*/ + } + } + } +} + +/** + * @brief StDsuSfpFindSheet ҶӦsheetҳ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param data ȡֵΧ:ֽ + * @param dataLen ݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelStartPos excelʼλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param curExcelPos ǰexcelλ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetCount sheetҳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param sheetId sheetҳID ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StDsuSfpFindSheet(SheetInfo* sheetInfo, UINT8 data[], const UINT32 dataLen, UINT32 curExcelStartPos, UINT32* curExcelPos, UINT32 sheetCount, const UINT32 sheetId) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ˳*/ + UINT32 sheetIdx = 0u; /*sheet±*/ + UINT32 curSheetId = 0u; /*ǰsheet*/ + UINT32 curSheetStartPos = 0u; /*ǰsheetʼλ*/ + + if ((NULL != sheetInfo) && (NULL != data) && (NULL != curExcelPos)) /*-< Ƿǿ*/ + { + for (sheetIdx = 0u; sheetIdx < sheetCount; sheetIdx++) /*-< sheetҳ±Ƿsheetҳ*/ + { + if (((*curExcelPos) + 24u) <= dataLen) /*-< ʹݳǷϷ*/ + { + curSheetId = LongFromChar(&data[*curExcelPos]); /*-< õǰsheetҳID*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + if (curSheetId == sheetId) /*-< õǰsheetҳIDǷΪҪҵ*/ + { + sheetInfo->Id = curSheetId; /*-< õǰsheetҳIDsheetҳϢ*/ + + sheetInfo->Len = LongFromChar(&data[*curExcelPos]); /*-< óȵsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + curSheetStartPos = LongFromChar(&data[*curExcelPos]); /*-< sheetexcelλõsheetҳϢ*/ + (*curExcelPos) += 4u; /*-< ǰexcelλ4*/ + + sheetInfo->RowCount = ShortFromChar(&data[*curExcelPos]); /*-< sheetҳϢ*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + + /*2ֽ-*/ + (*curExcelPos) += 2u; /*-< ǰexcelλ2*/ + /*8ֽԤ*/ + (*curExcelPos) += 8u; /*-< ǰexcelλ8*/ + + sheetInfo->Data = &data[curExcelStartPos + curSheetStartPos]; /*-< sheetҳʼݵsheetҳϢ*/ + + if (0u < sheetInfo->RowCount) /*-< Ƿ*/ + { + if ((0u < sheetInfo->Len) && (0u == (sheetInfo->Len % sheetInfo->RowCount))) /*-< Ƿݳ*/ + { + sheetInfo->ColLen = sheetInfo->Len / sheetInfo->RowCount; /*-< õݳ*/ + } + else /*ݴ*/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->RowCount = 0u; /*-< Ϊ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + } + else /**/ + { + sheetInfo->Len = 0u; /*-< ݳΪ0*/ + sheetInfo->Data = NULL; /*-< ΪNULL*/ + } + + rtnVal = 1u; /*-< úֵΪ˳*/ + } + else + { + (*curExcelPos) += 20u; /*-< ǰexcelλ20*/ + } + } + else /*ȴ*/ + { + rtnVal = 1u; /*-< úֵΪ˳*/ + } + + if (1u == rtnVal) /*-< ֵǷΪ˳*/ + { + break; /*-< ˳*/ + } + } + } + + return rtnVal; /*-< غֵ*/ +} + +/** + * @brief MergeParam ϲ + * @param sheetInfo sheetҳϢ ȡֵΧ:οṹSheetInfo + * @param outData ⲿ ȡֵΧ:ֽ + * @param outDataIdx ⲿλ ȡֵΧ:0x00000000--0xFFFFFFFF + * @param outDataLen ⲿݳ ȡֵΧ:0x0000-0xFFFF + * @param mergeData ϲ ȡֵΧ:ֽ + * @param mergeDataIdx ϲλ ȡֵΧ:0x00000000--0xFFFFFFFF + */ static void MergeParam(SheetInfo* sheetInfo, UINT8 outData[], UINT32* outDataIdx, UINT16 outDataLen, UINT8 mergeData[], UINT32* mergeDataIdx) { + /*- ֲ*/ UINT8* proOutData = NULL; /*ⲿ*/ UINT16 outRowCount = 0u; /*ⲿ*/ UINT16 mergeRowCount = 0u; /*ϲ*/ @@ -1013,91 +1072,87 @@ static void MergeParam(SheetInfo* sheetInfo, UINT8 outData[], UINT32* outDataIdx UINT16 inOppDev = 0u; /*ڲԷ豸*/ UINT16 outOppDev = 0u; /*ⲿԷ豸*/ - if ((NULL != sheetInfo) && (NULL != mergeData) && (NULL != mergeDataIdx)) /**/ + if ((NULL != sheetInfo) && (NULL != outData) && (NULL != outDataIdx) && (NULL != mergeData) && (NULL != mergeDataIdx)) /*-< Ƿǿ*/ { - proOutData = &outData[*outDataIdx]; - CommonMemCpy(&mergeData[*mergeDataIdx], outDataLen, &proOutData[0], outDataLen); /*Ʋͬ豸*/ - outRowCount = ShortFromChar(&proOutData[0]); /*ǰ*/ - mergeRowCount = outRowCount; - (*outDataIdx) += outDataLen; /*λ*/ + proOutData = &outData[*outDataIdx]; /*-< õⲿݿʼλ*/ + CommonMemCpy(&mergeData[*mergeDataIdx], outDataLen, &proOutData[0], outDataLen); /*-< ⲿݵϲ*/ + outRowCount = ShortFromChar(&proOutData[0]); /*-< õ*/ + mergeRowCount = outRowCount; /*-< ֵⲿϲ*/ + (*outDataIdx) += outDataLen; /*-< ⲿλ*/ - rowCountIdx = (*mergeDataIdx); /*³λ*/ - (*mergeDataIdx) += outDataLen; - if (NULL != sheetInfo->Data) /*,ϲ*/ + rowCountIdx = (*mergeDataIdx); /*-< ºϲλ*/ + (*mergeDataIdx) += outDataLen; /*-< ºϲλ*/ + if ((NULL != sheetInfo->Data) && ((DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) || (DSU_DATA_PROTCL_SAME_RELATION == sheetInfo->Id))) /*-< Ƿݺϲ ұDzͬͱͬͱ*/ { - if ((DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) || (DSU_DATA_PROTCL_SAME_RELATION == sheetInfo->Id)) /*sheetҳ*/ + if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*-< ǰǷDzͬͱ*/ { - if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*ͬͱ*/ + rowShouldLen = DSU_DIFF_RELATION_LENGTH; /*-< òͬͱгȸг*/ + oppDevIdx = 8u; /*-< õԷ豸±*/ + } + else + { + rowShouldLen = DSU_SAME_RELATION_LENGTH; /*-< ͬͱгȸг*/ + oppDevIdx = 9u; /*-< õԷ豸±*/ + } + colLen = sheetInfo->ColLen; /*-< õڲг*/ + if ((colLen == rowShouldLen)) /*-< ڲгǷг*/ + { + for (i = 0u; i < sheetInfo->RowCount; i++) /*-< ǰ±ǷСڲ*/ { - rowShouldLen = DSU_DIFF_RELATION_LENGTH; - oppDevIdx = 8u; - } - else - { - rowShouldLen = DSU_SAME_RELATION_LENGTH; - oppDevIdx = 9u; - } - colLen = sheetInfo->ColLen; - if ((colLen == rowShouldLen)) /*г*/ - { - for (i = 0; i < sheetInfo->RowCount; i++) /**/ + hasSame = 0u; /*-< Ƿͬ־Ϊ*/ + if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*-< ǰǷDzͬͱ*/ { - hasSame = 0u; - if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*ͬͱ*/ + inLocDev = sheetInfo->Data[i * colLen]; /*-< õڲݱ*/ + inOppDev = sheetInfo->Data[(i * colLen) + oppDevIdx]; /*-< õڲݶԷ*/ + } + else + { + inLocDev = ShortFromChar(&sheetInfo->Data[i * colLen]); /*-< õڲݱID*/ + inOppDev = ShortFromChar(&sheetInfo->Data[(i * colLen) + oppDevIdx]); /*-< õڲݶԷID*/ + } + for (j = 0u; j < outRowCount; j++) /*-< ǰ±ǷСⲿ*/ + { + if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*-< ǰǷDzͬͱ*/ { - inLocDev = sheetInfo->Data[i * colLen]; - inOppDev = sheetInfo->Data[(i * colLen) + oppDevIdx]; + outLocDev = proOutData[2u + (j * colLen)]; /*-< õⲿݱ*/ + outOppDev = proOutData[2u + (j * colLen) + oppDevIdx]; /*-< õⲿݶԷ*/ } else { - inLocDev = ShortFromChar(&sheetInfo->Data[i * colLen]); - inOppDev = ShortFromChar(&sheetInfo->Data[(i * colLen) + oppDevIdx]); + outLocDev = ShortFromChar(&proOutData[2u + (j * colLen)]); /*-< õⲿݱID*/ + outOppDev = ShortFromChar(&proOutData[(2u + (j * colLen)) + oppDevIdx]); /*-< õⲿݶԷID*/ } - for (j = 0; j < outRowCount; j++) + if ((inLocDev == outLocDev) && (inOppDev == outOppDev)) /*-< ݱԷǷͬ*/ { - if (DSU_DATA_PROTCL_DIFF_RELATION == sheetInfo->Id) /*ͬͱ*/ - { - outLocDev = proOutData[2u + (j * colLen)]; - outOppDev = proOutData[2u + (j * colLen) + oppDevIdx]; - } - else - { - outLocDev = ShortFromChar(&proOutData[2u + (j * colLen)]); - outOppDev = ShortFromChar(&proOutData[(2u + (j * colLen)) + oppDevIdx]); - } - if ((inLocDev == outLocDev) && (inOppDev == outOppDev)) /*ݱԷͬ*/ - { - hasSame = 1u; - break; - } - } - if (0u == hasSame) /*޲ͬ,*/ - { - CommonMemCpy(&mergeData[*mergeDataIdx], colLen, &sheetInfo->Data[i * colLen], colLen); - (*mergeDataIdx) += colLen; - mergeRowCount++; + hasSame = 1u; /*-< Ƿͬ־Ϊ*/ + break; /*-< ˳*/ } } - - ShortToChar(mergeRowCount, &mergeData[rowCountIdx]); + if (0u == hasSame) /*-< Ƿͬ־ǷΪ*/ + { + CommonMemCpy(&mergeData[*mergeDataIdx], colLen, &sheetInfo->Data[i * colLen], colLen); /*-< ƴڲݵϲ*/ + (*mergeDataIdx) += colLen; /*-< ϲλԼг*/ + mergeRowCount++; /*-< ϲԼ1*/ + } } + + ShortToChar(mergeRowCount, &mergeData[rowCountIdx]); /*-< úϲϲ*/ } } } } -/* -*: ϲ -*: const UINT32 inDataLen ڲ -* UINT8 inData[] ڲ -* struc_Unify_Info* sfp sfpṹ -*: -*: -*ֵ: Ƿɹ.1:ɹ;0:ʧ -*/ +/** + * @brief MergeDataBaseInParam ϲݿ + * @param inDataLen ڲ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @param sfp sfpṹ ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ UINT8 MergeDataBaseInParam(const UINT32 inDataLen, UINT8 inData[], struc_Unify_Info* sfp) { - UINT8 rtnVal = 0u; /*ֵ*/ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪʧ*/ SheetInfo diffSheet = { 0u }; /*ͬ豸sheetҳ*/ SheetInfo sameSheet = { 0u }; /*ͬ豸sheetҳ*/ UINT8* dataBase = NULL; /*ݲ*/ @@ -1110,49 +1165,49 @@ UINT8 MergeDataBaseInParam(const UINT32 inDataLen, UINT8 inData[], struc_Unify_I UINT16 diffRowNum = 0u; /*ͬ豸*/ UINT16 sameRowNum = 0u; /*ͬ豸*/ - if ((NULL != sfp) && (NULL != sfp->DataBase)) /**/ + if ((NULL != sfp) && (NULL != sfp->DataBase)) /*-< Ƿǿ*/ { - if ((0u < inDataLen) && (NULL != inData)) /**/ + if ((0u < inDataLen) && (NULL != inData)) /*-< */ { - InitSheet(&diffSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_DIFF_RELATION); - InitSheet(&sameSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_SAME_RELATION); - dataBase = sfp->DataBase; + InitSheet(&diffSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_DIFF_RELATION); /*-< õͬ豸ͨŹϵ*/ + InitSheet(&sameSheet, inData, inDataLen, DSU_DATA_PROTCL_TYPE, DSU_DATA_PROTCL_SAME_RELATION); /*-< õͬ豸ͨŹϵ*/ + dataBase = sfp->DataBase; /*-< õݿ*/ #ifdef SFP_CKECK_DSU_IP - relationNum = ShortFromChar(&dataBase[curDataBaseIdx]); /*IP*/ + relationNum = ShortFromChar(&dataBase[curDataBaseIdx]); /*-< õIP*/ curDataBaseIdx += 2u; - curDataBaseIdx = curDataBaseIdx + relationNum * DSU_OBJ_INFO_LENGTH; /*IP*/ + curDataBaseIdx = curDataBaseIdx + relationNum * DSU_OBJ_INFO_LENGTH; /*-< õIP*/ #endif - diffRowNum = ShortFromChar(&dataBase[curDataBaseIdx]); /*ͬ豸ͨŹϵ*/ - diffDataLen = 2u + diffRowNum * DSU_DIFF_RELATION_LENGTH; /*ͬ豸ݳ*/ - sameRowNum = ShortFromChar(&dataBase[curDataBaseIdx + +diffDataLen]); /*ͬ豸ݳ*/ - sameDataLen = 2u + sameRowNum * DSU_SAME_RELATION_LENGTH; /*ͬ豸ͨŹϵ*/ + diffRowNum = ShortFromChar(&dataBase[curDataBaseIdx]); /*-< õͬ豸ͨŹϵ*/ + diffDataLen = 2u + diffRowNum * DSU_DIFF_RELATION_LENGTH; /*-< õͬ豸ݳ*/ + sameRowNum = ShortFromChar(&dataBase[curDataBaseIdx + diffDataLen]); /*-< õͬ豸ݳ*/ + sameDataLen = 2u + sameRowNum * DSU_SAME_RELATION_LENGTH; /*-< õͬ豸ͨŹϵ*/ - mergeDataLen = curDataBaseIdx + diffDataLen + diffSheet.Len + sameDataLen + sameSheet.Len; /*ܳ*/ - mergeData = (UINT8*)malloc(sizeof(UINT8) * mergeDataLen); - if (NULL != mergeData) + mergeDataLen = curDataBaseIdx + diffDataLen + diffSheet.Len + sameDataLen + sameSheet.Len; /*-< ܳ*/ + mergeData = (UINT8*)malloc(sizeof(UINT8) * mergeDataLen); /*-< ϲ*/ + if (NULL != mergeData) /*-< ɹ*/ { - CommonMemSet(&mergeData[0], mergeDataLen, 0u, mergeDataLen); /**/ + CommonMemSet(&mergeData[0], mergeDataLen, 0u, mergeDataLen); /*-< ϲ*/ #ifdef SFP_CKECK_DSU_IP - CommonMemCpy(&mergeData[0], curDataBaseIdx, &dataBase[0], curDataBaseIdx); - curMergeDataIdx += curDataBaseIdx; + CommonMemCpy(&mergeData[0], curDataBaseIdx, &dataBase[0], curDataBaseIdx); /*-< Ƶǰ*/ + curMergeDataIdx += curDataBaseIdx; /*-< ۼӵǰݳ*/ #endif - MergeParam(&diffSheet, &dataBase[0], &curDataBaseIdx, diffDataLen, &mergeData[0], &curMergeDataIdx); - MergeParam(&sameSheet, &dataBase[0], &curDataBaseIdx, sameDataLen, &mergeData[0], &curMergeDataIdx); + MergeParam(&diffSheet, &dataBase[0], &curDataBaseIdx, diffDataLen, &mergeData[0], &curMergeDataIdx); /*-< úϲͬ豸Ͳ*/ + MergeParam(&sameSheet, &dataBase[0], &curDataBaseIdx, sameDataLen, &mergeData[0], &curMergeDataIdx); /*-< úϲͬ豸Ͳ*/ - sfp->DataBase = mergeData; + sfp->DataBase = mergeData; /*-< ݿ*/ - rtnVal = 1u; + rtnVal = 1u; /*-< úֵΪɹ*/ } } else /**/ { - rtnVal = 1u; + rtnVal = 1u; /*-< úֵΪɹ*/ } } - return rtnVal; + return rtnVal; /*-< غֵ*/ } diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.h b/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.h index f625711..39c8391 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.h +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_dqu_sfp/dsuRelatedDeal.h @@ -28,29 +28,31 @@ extern "C" { #endif + /*IP˿ڽṹ*/ typedef struct { - UINT8 RedIp[4]; /*IPַ*/ - UINT16 PortRed; /*˿ں*/ - UINT8 BlueIp[4]; /*IPַ*/ - UINT16 PortBlue; /*˿ں*/ + UINT8 RedIp[4]; /*IPַ ȡֵΧ:ֽ*/ + UINT16 PortRed; /*˿ں ȡֵΧ:0x0000-0xFFFF*/ + UINT8 BlueIp[4]; /*IPַ ȡֵΧ:ֽ*/ + UINT16 PortBlue; /*˿ں ȡֵΧ:0x0000-0xFFFF*/ } IP_PORT_STRU; + /*·ṹ*/ typedef struct { - UINT8 Role; /*ɫ*/ - UINT8 NCyclesPerPack; /*ͨŹϵϷ*/ - UINT16 LocalCycle; /*ڳ(ķڳ)*/ - UINT16 LocalMaxDelay; /*ʱ*/ - UINT8 LocalCommType; /*ͨͣҲǶԷݵͨͣ*/ - UINT16 DestCycle; /* Էķ*/ - UINT16 DestMaxDelay; /*ʱ*/ - UINT16 AckMaxDelay; /*շACKӳ*/ - UINT8 DestCommType; /*ԷͨͣҲDZݵͨͣ*/ + UINT8 Role; /*ɫ ȡֵΧ:0x00-0xFF*/ + UINT8 NCyclesPerPack; /*ͨŹϵϷ ȡֵΧ:0x00-0xFF*/ + UINT16 LocalCycle; /*ڳ(ķڳ) ȡֵΧ:0x0000-0xFFFF*/ + UINT16 LocalMaxDelay; /*ʱ ȡֵΧ:0x0000-0xFFFF*/ + UINT8 LocalCommType; /*ͨͣҲǶԷݵͨͣ ȡֵΧ:0x00-0xFF*/ + UINT16 DestCycle; /* Էķ ȡֵΧ:0x0000-0xFFFF*/ + UINT16 DestMaxDelay; /*ʱ ȡֵΧ:0x0000-0xFFFF*/ + UINT16 AckMaxDelay; /*շACKӳ ȡֵΧ:0x0000-0xFFFF*/ + UINT8 DestCommType; /*ԷͨͣҲDZݵͨͣ ȡֵΧ:0x00-0xFF*/ #ifdef SFP_CKECK_DSU_IP /*IP*/ - UINT8 dstNum; - IP_PORT_STRU DstIpInfo[2]; + UINT8 dstNum; /*ȡֵΧ : 0x00 - 0xFF*/ + IP_PORT_STRU DstIpInfo[2]; /*ȡֵΧ:ֽ*/ #endif } struc_LnkBasicInfo; @@ -112,18 +114,6 @@ UINT32 dsuIsDevExist(struc_Unify_Info * LocalInfo , UINT32 DevName); */ UINT16 dsuGetObjNum(struc_Unify_Info * LocalInfo); -/* -* :ͬʱõ淽Ϣ -* ˵: -* [out]INT8 *FollowDevInfo:¼淽Ϣͷָ (Ӧöһ1*9) -* ڲʽΪ -* Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6...... -* 淽 淽1Type 淽1ID 0 0 淽2Type 淽2ID ... -* [in] struc_Unify_Info * LocalInfo ǰеĶͳһṹ -* ֵ:ȷ1򷵻0 -*/ -UINT8 dsuSameTypeLnk(struc_Unify_Info * LocalInfo, UINT8 *FollowDevInfo); - #ifdef USE_DSU_SFP /* @@ -136,15 +126,13 @@ UINT8** pDataBase UINT8 dsuSfpInit(UINT8* fileName,UINT8** pDataBase); #endif -/* -*: ϲ -*: const UINT32 inDataLen ڲ -* UINT8 inData[] ڲ -* struc_Unify_Info* sfp sfpṹ -*: -*: -*ֵ: Ƿɹ.1:ɹ;0:ʧ -*/ +/** + * @brief MergeDataBaseInParam ϲݿ + * @param inDataLen ڲ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @param sfp sfpṹ ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ UINT8 MergeDataBaseInParam(const UINT32 inDataLen, UINT8 inData[], struc_Unify_Info* sfp); #ifdef __cplusplus diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclInit.c b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclInit.c index 522ee67..d6b7272 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclInit.c +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclInit.c @@ -43,305 +43,310 @@ #include "dsuRelatedDeal.h" -/****************************************************************************************** -* : Эʼ - 1. ڵô˺֮ǰӦҪͳһṹInputSizeOutputSize,MaxNumLink, - MaxNumPerCycle,OutnetQueueSizeȱֵ -* : UINT8 * fileName ݵļַ -* : UINT32 inDataLen ڲ -* : UINT8 inData[] ڲ -* : struc_Unify_Info* pUnifyInfo Эͳһṹָ -* : -* ȫֱ : -* ֵ : ʼ1򷵻0 -*******************************************************************************************/ -UINT8 ProtclInit(UINT8 *fileName, UINT32 inDataLen, UINT8 inData[], struc_Unify_Info *pUnifyInfo)/* %RELAX */ +/** + * @brief ProtclInit Эʼ + * @param fileName FSļ ȡֵΧ:ֽ + * @param inDataLen ڲݳ ȡֵΧ:0x00000000-0xFFFFFFFF + * @param inData ڲ ȡֵΧ:ֽ + * @param pUnifyInfo SFPʵ ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ +UINT8 ProtclInit(UINT8* fileName, UINT32 inDataLen, UINT8 inData[], struc_Unify_Info* pUnifyInfo)/* %RELAX */ { + /*- ֲ*/ UINT16 InputSize; /*ΪԽṹеһЩʵʱ*/ UINT16 OutputSize; UINT16 MaxNumLink; UINT16 MaxNumPerCycle; UINT32 lTemp; - UINT8 ret = 0; + UINT8 ret = 0; /*-< úֵΪʧ*/ - if(pUnifyInfo == NULL) + if (pUnifyInfo == NULL) /*-< Ƿǿ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else - {} - - /* wangpeipei 20120103 Mod S */ - if((fileName != NULL) && (pUnifyInfo->DataBase == NULL)) - { -#ifdef USE_DSU_SFP - ret = dsuSfpInit(fileName, &pUnifyInfo->DataBase); - if (ret == 0) - { - return ret; - } - else - { - /* */ - } -#else - ret = 1; -#endif - } - else if((fileName == NULL) && (pUnifyInfo->DataBase != NULL)) - { - /* */ - } - else - { - return ret; - } - - ret = MergeDataBaseInParam(inDataLen, inData, pUnifyInfo); - if (0u == ret) { - return ret; } - /* wangpeipei 20120103 Mod End */ - /*ͳһṹе4ʱ*/ + /* wangpeipei 20120103 Mod S */ + if ((fileName != NULL) && (pUnifyInfo->DataBase == NULL)) /*-< FSļǷǿ ݿǷ*/ + { +#ifdef USE_DSU_SFP + ret = dsuSfpInit(fileName, &pUnifyInfo->DataBase); /*-< óʼѯ*/ + if (ret == 0) /*-< úǷʧ*/ + { + return ret; /*-< غֵ*/ + } + else + { + /* */ + } +#else + ret = 1; /*-< غֵ*/ +#endif + } + else if ((fileName == NULL) && (pUnifyInfo->DataBase != NULL)) /*-< FSļǷ ݿǷǿ*/ + { + /* */ + } + else + { + return ret; /*-< غֵ*/ + } + + ret = MergeDataBaseInParam(inDataLen, inData, pUnifyInfo); /*-< úϲ*/ + if (0u == ret) /*-< úǷʧ*/ + { + return ret; /*-< غֵ*/ + } + + /* wangpeipei 20120103 Mod End */ + /*- ͳһṹе4ʱ*/ InputSize = pUnifyInfo->InputSize; OutputSize = pUnifyInfo->OutputSize; MaxNumLink = pUnifyInfo->MaxNumLink + 1; MaxNumPerCycle = pUnifyInfo->MaxNumPerCycle; - + /*ȸӦøĸ㲢ͳһṹеĶСֵ*/ /* DataToAppӿڶдС * ¹ʽЭ㣬ʼ - * [InputSize ÿ֡ݵֽ+ЭռֵֽΪ7]* + * [InputSize ÿ֡ݵֽ+ЭռֵֽΪ7]* * MaxNumLink·*/ - /*Ӧöпռ*/ + /*- Ӧöпռ*/ lTemp = (InputSize + 7) * MaxNumLink; - pUnifyInfo->DataToAppSize = lTemp; - - + pUnifyInfo->DataToAppSize = lTemp; + + /* OutputDataQueueĴС * ¹ʽԸֵгʼ - * [OutputSize (ÿ֡ݵֽ)+ЭֵֽΪ6]* + * [OutputSize (ÿ֡ݵֽ)+ЭֵֽΪ6]* * MaxNumLink· */ + /*- пռ*/ lTemp = (OutputSize + 6) * MaxNumLink; - pUnifyInfo->OutputDataQueueSize = lTemp; - + pUnifyInfo->OutputDataQueueSize = lTemp; + /* Э뵥ԪЭ൥ԪijС - * ܿռ = [InputSize ÿ֡ݵֽ+ЭռֵֽΪ15]* - * MaxNumLink·*ÿÿյֵοֵΪ5+ + * ܿռ = [InputSize ÿ֡ݵֽ+ЭռֵֽΪ15]* + * MaxNumLink·*ÿÿյֵοֵΪ5+ * ֵֽΪ2 */ - lTemp = (InputSize + 15) * MaxNumLink* MaxNumPerCycle + 2; + /*- пռ*/ + lTemp = (InputSize + 15) * MaxNumLink * MaxNumPerCycle + 2; pUnifyInfo->PrtclRcvSize = lTemp; - + /* PrtclSndBuffָĴС *ܿռ = [OutputSize ÿ֡ݵֽ+ЭռֽΪ49+ * ·ڵռֽ(οֵΪ48)]* MaxNumLink·+ - * ͷռֽ4.7ֱеģ鳤+鳤0 = 8 + * ͷռֽ4.7ֱеģ鳤+鳤0 = 8 */ + /*- пռ*/ lTemp = (OutputSize + 49 + 4 + LNKFRAMELEN) * MaxNumLink + 8; - pUnifyInfo->PrtclSndBuffSize = lTemp; - - + pUnifyInfo->PrtclSndBuffSize = lTemp; + + /**/ - pUnifyInfo->DataAfterReduntancy = NULL; - pUnifyInfo->DataAfterReduntancy =(UINT8*) malloc(pUnifyInfo->PrtclRcvSize); - if(pUnifyInfo->DataAfterReduntancy == NULL) + /*- ռ*/ + pUnifyInfo->DataAfterReduntancy = NULL; + pUnifyInfo->DataAfterReduntancy = (UINT8*)malloc(pUnifyInfo->PrtclRcvSize); + if (pUnifyInfo->DataAfterReduntancy == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { /*޲*/ - CommonMemSet(pUnifyInfo->DataAfterReduntancy,pUnifyInfo->PrtclRcvSize,0,pUnifyInfo->PrtclRcvSize); + CommonMemSet(pUnifyInfo->DataAfterReduntancy, pUnifyInfo->PrtclRcvSize, 0, pUnifyInfo->PrtclRcvSize); /*-< */ } - + /*Эڲʹʱռ*/ + /*- ڲʹʱռ*/ lTemp = InputSize + 20; pUnifyInfo->CommBuffer = (UINT8*)malloc(lTemp); - if (pUnifyInfo->CommBuffer ==NULL) - { - ret =0; - return ret; - } - else - { - CommonMemSet(pUnifyInfo->CommBuffer,lTemp,0,lTemp); - } - - /**/ - pUnifyInfo->PrtclSndBuff = NULL; - pUnifyInfo->PrtclSndBuff = (UINT8*)malloc(pUnifyInfo->PrtclSndBuffSize); - if(pUnifyInfo->PrtclSndBuff == NULL) + if (pUnifyInfo->CommBuffer == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ - CommonMemSet(pUnifyInfo->PrtclSndBuff,sizeof(UINT8)*pUnifyInfo->PrtclSndBuffSize,0,sizeof(UINT8)*pUnifyInfo->PrtclSndBuffSize); + CommonMemSet(pUnifyInfo->CommBuffer, lTemp, 0, lTemp); /*-< ʱ*/ + } + + /*- */ + pUnifyInfo->PrtclSndBuff = NULL; + pUnifyInfo->PrtclSndBuff = (UINT8*)malloc(pUnifyInfo->PrtclSndBuffSize); + if (pUnifyInfo->PrtclSndBuff == NULL) /*-< ռʧ*/ + { + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ + } + else + { + /*޲*/ + CommonMemSet(pUnifyInfo->PrtclSndBuff, sizeof(UINT8) * pUnifyInfo->PrtclSndBuffSize, 0, sizeof(UINT8) * pUnifyInfo->PrtclSndBuffSize); /*-< */ } #ifdef SWAP_CRC + /*- 佻CRC*/ lTemp = 2u + 4u * (pUnifyInfo->MaxNumLink + 2u); /*2ֽڳ+·(4ֽĿID+4ֽCRC)*/ pUnifyInfo->SwapCrcs = (UINT8*)malloc(lTemp); - if (pUnifyInfo->SwapCrcs == NULL) + if (pUnifyInfo->SwapCrcs == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { /*޲*/ - CommonMemSet(pUnifyInfo->SwapCrcs, sizeof(UINT8) * lTemp, 0, sizeof(UINT8) * lTemp); + CommonMemSet(pUnifyInfo->SwapCrcs, sizeof(UINT8) * lTemp, 0, sizeof(UINT8) * lTemp); /*-< 㽻CRC*/ } #endif - - /*¼Ŀռ*/ + + /*- ¼Ŀռ*/ pUnifyInfo->RecordArray = NULL; - pUnifyInfo->RecordArray = (UINT8*)malloc(pUnifyInfo->RecordArraySize+2); - if(pUnifyInfo->RecordArray == NULL) + pUnifyInfo->RecordArray = (UINT8*)malloc(pUnifyInfo->RecordArraySize + 2); + if (pUnifyInfo->RecordArray == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; - } - else - { - /*޲*/ - CommonMemSet(pUnifyInfo->RecordArray,sizeof(UINT8)*(pUnifyInfo->RecordArraySize+2),0,sizeof(UINT8)*(pUnifyInfo->RecordArraySize+2)); - } - - - /*·ջռ*/ - pUnifyInfo->LnkStack.pNode = NULL; - pUnifyInfo->LnkStack.pNode = (void**)malloc(MaxNumLink * sizeof(void*)); - pUnifyInfo->LnkStack.totalsize = (UINT16) MaxNumLink; - if(pUnifyInfo->LnkStack.pNode == NULL) - { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { /*޲*/ - CommonMemSet(pUnifyInfo->LnkStack.pNode,MaxNumLink * sizeof(void*),0,MaxNumLink * sizeof(void*)); + CommonMemSet(pUnifyInfo->RecordArray, sizeof(UINT8) * (pUnifyInfo->RecordArraySize + 2), 0, sizeof(UINT8) * (pUnifyInfo->RecordArraySize + 2)); /*-< ¼*/ } - - /*ջռ*/ + + + /*- ·ջռ*/ + pUnifyInfo->LnkStack.pNode = NULL; + pUnifyInfo->LnkStack.pNode = (void**)malloc(MaxNumLink * sizeof(void*)); + pUnifyInfo->LnkStack.totalsize = (UINT16)MaxNumLink; + if (pUnifyInfo->LnkStack.pNode == NULL) /*-< ռʧ*/ + { + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ + } + else + { + /*޲*/ + CommonMemSet(pUnifyInfo->LnkStack.pNode, MaxNumLink * sizeof(void*), 0, MaxNumLink * sizeof(void*)); /*-< ·ջ*/ + } + + /*- ջռ*/ pUnifyInfo->OutputStack.pNode = NULL; pUnifyInfo->OutputStack.pNode = (void**)malloc(MaxNumLink * sizeof(void*)); - pUnifyInfo->OutputStack.totalsize = (UINT16) MaxNumLink; - if(pUnifyInfo->OutputStack.pNode == NULL) + pUnifyInfo->OutputStack.totalsize = (UINT16)MaxNumLink; + if (pUnifyInfo->OutputStack.pNode == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ - CommonMemSet(pUnifyInfo->OutputStack.pNode,MaxNumLink * sizeof(void*),0,MaxNumLink * sizeof(void*)); - } - - /*ջռ*/ + /*޲*/ + CommonMemSet(pUnifyInfo->OutputStack.pNode, MaxNumLink * sizeof(void*), 0, MaxNumLink * sizeof(void*)); /*-< ջ*/ + } + + /*- ջռ*/ pUnifyInfo->InputStack.pNode = NULL; pUnifyInfo->InputStack.pNode = (void**)malloc((UINT16)MaxNumLink * MaxNumPerCycle * sizeof(void*)); - pUnifyInfo->InputStack.totalsize = (UINT16) MaxNumLink * MaxNumPerCycle; - if(pUnifyInfo->InputStack.pNode == NULL) + pUnifyInfo->InputStack.totalsize = (UINT16)MaxNumLink * MaxNumPerCycle; + if (pUnifyInfo->InputStack.pNode == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ - CommonMemSet(pUnifyInfo->InputStack.pNode,MaxNumLink * MaxNumPerCycle* sizeof(void*),0,MaxNumLink * MaxNumPerCycle* sizeof(void*)); + /*޲*/ + CommonMemSet(pUnifyInfo->InputStack.pNode, MaxNumLink * MaxNumPerCycle * sizeof(void*), 0, MaxNumLink * MaxNumPerCycle * sizeof(void*)); /*-< ջ*/ } - pUnifyInfo->NetsRecvPkgNums = (SfpNetsRecvPkgNum*)malloc(sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink); - if (NULL == pUnifyInfo->NetsRecvPkgNums) + pUnifyInfo->NetsRecvPkgNumsLen = 0u; /*-< øյ鳤Ϊ0*/ + pUnifyInfo->NetsRecvPkgNums = (SfpNetsRecvPkgNum*)malloc(sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink); /*-< յ*/ + if (NULL == pUnifyInfo->NetsRecvPkgNums) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - CommonMemSet(pUnifyInfo->NetsRecvPkgNums, sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink, 0, sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink); + CommonMemSet(pUnifyInfo->NetsRecvPkgNums, sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink, 0, sizeof(SfpNetsRecvPkgNum) * pUnifyInfo->MaxNumLink); /*-< յ*/ } - /*Ϣṹռ*/ + /*- Ϣṹռ*/ lTemp = dsuGetObjNum(pUnifyInfo); /*ݿнڵ*/ pUnifyInfo->NumBuildLink = NULL; - pUnifyInfo->NumBuildLink = (DuanLianInfo*) malloc(lTemp * sizeof(DuanLianInfo)); - if(pUnifyInfo->NumBuildLink == NULL) + pUnifyInfo->NumBuildLink = (DuanLianInfo*)malloc(lTemp * sizeof(DuanLianInfo)); + if (pUnifyInfo->NumBuildLink == NULL) /*-< ռʧ*/ { - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ - CommonMemSet(pUnifyInfo->NumBuildLink,lTemp * sizeof(DuanLianInfo),0,lTemp * sizeof(DuanLianInfo)); + /*޲*/ + CommonMemSet(pUnifyInfo->NumBuildLink, lTemp * sizeof(DuanLianInfo), 0, lTemp * sizeof(DuanLianInfo)); /*-< Ϣ*/ } - - if(!InitLnkMngr(pUnifyInfo)) /*ͨ·ʼ*/ + + if (!InitLnkMngr(pUnifyInfo)) /*-< ͨ·ʼ,ʧ*/ { #ifdef _DEBUG_ printf("InitLnkMngr error\n"); #endif - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*޲*/ } - - if(!RedundancyInitial(pUnifyInfo)) /*ͨദʼ*/ + + if (!RedundancyInitial(pUnifyInfo)) /*-< ͨദʼ,ʧ*/ { #ifdef _DEBUG_ printf("RedundancyInitial error\n"); #endif - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*޲*/ } - - if(!Prtcl_RecInitial(pUnifyInfo)) /*ͨЭʼ*/ + + if (!Prtcl_RecInitial(pUnifyInfo)) /*-< ͨЭʼ,ʧ*/ { #ifdef _DEBUG_ printf("Prtcl_RecInitial error\n"); #endif - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*޲*/ } - - if(!Prtcl_OutputInitial(pUnifyInfo)) /*ͨЭʼ*/ + + if (!Prtcl_OutputInitial(pUnifyInfo)) /*-< ͨЭʼ,ʧ*/ { #ifdef _DEBUG_ printf("Prtcl_OutputInitial error\n"); #endif - ret = 0; - return ret; + ret = 0; /*-< úֵΪʧ*/ + return ret; /*-< غֵ*/ } else { - /*޲*/ + /*޲*/ } - - ret = 1; - return ret; + + ret = 1; /*-< úֵΪɹ*/ + return ret; /*-< غֵ*/ } diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.c b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.c index 0b6b2f9..d9e2dd7 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.c +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.c @@ -70,6 +70,9 @@ static void ClearNetsRecvPkgNum(struc_Unify_Info* sfp); static void SetNetsRecvPkgNum(struc_Unify_Info* sfp, const UINT32 dstDevName, const UINT8 netIdx); +static void StSfpRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN); +static void StSfpSponRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN); +static void StSfpFlwRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN); /* peipei.wang20111011 mod S */ /* ɾԳʱʱ㣬׷Ӷ봦ʼʱ */ @@ -267,43 +270,14 @@ UINT8 RedundancyInitial(struc_Unify_Info *pUnifyInfo) return ret; } -/****************************************************************************************** -* : ݣദ Redundancy()е - 1Ӷжÿһ֡ - 2жϱԷ߼ַǷϷ - 3жCRCǷȷ - 4жϱ͡ - 5յRFC֡·ڣ·жϸRFCǷϷڣһά - 6յACK֡ͨ·жϸACKǷϷϷͨһάжǷ֡ - 7յDATA֡ͨ·жϸDATAǷϷϷͨһάжǷ֡ -* : -* : -* : -* ȫֱ : static struc_Lnk_Mngr *CurIndex_Lnk_Mngr = NULL; ǰ·еָ -* static StackElement *PointStack = NULL; ָһάڵջָ -* static UINT8 *Rcv = NULL; յÿ֡ݳ -* static struc_Unify_Info *pUnifyInfoForRedun; ģƽ̨ṹָ룬ģõƽ̨ṹָĶôָ -* static UINT32 AbsTimeoutPointForRedun; Գʱʱ -* ֵ : ɹ1,ʧܷ0 -*******************************************************************************************/ - -/* -*: RedundancyReceive -*: ݣദ -* 1Ӷжÿһ֡ -* 2жϱԷ߼ַǷϷ -* 3жCRCǷȷ -* 4жϱ͡ -* 5յRFC֡·ڣ·жϸRFCǷϷڣһά -* 6յACK֡ͨ·жϸACKǷϷϷͨһάжǷ֡ -* 7յDATA֡ͨ·жϸDATAǷϷϷͨһάжǷ֡ -*: struc_Unify_Info *pUnifyInfoForRedun SFPṹ -*: -*: -*ֵ: 1:ɹ;0ʧ -*/ -static UINT16 RedundancyReceive(struc_Unify_Info *pUnifyInfoForRedun) +/** + * @brief RedundancyReceive ݲദ + * @param pUnifyInfo sfp ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ +static UINT16 RedundancyReceive(struc_Unify_Info* pUnifyInfoForRedun) { + /*- ֲ*/ UINT32 DestSN; UINT32 LocalSN;/*ԷSNSN*/ UINT8 Dest_SN[4]; @@ -315,31 +289,29 @@ static UINT16 RedundancyReceive(struc_Unify_Info *pUnifyInfoForRedun) UINT16 lenthofRcvB;/*յÿ֡ݵij(len[2]ַתõ)*/ UINT16 FrameLenthOfRcvA; UINT16 FrameLenthOfRcvB;/*ͨſдĴյĵ֡ܳ*/ - UINT8 Link_Role;/*·ɫ*/ UINT16 i; - UINT16 ret; - - struc_InputBuffer *p_temp; /*ָһάʱָ*/ - + UINT16 ret = 0u; /*-< úֵΪ0*/ + + /*0x0F---(A)пɶ0xF0(B)пɶ *0xFF---˫ɶ0x00ɶֵ0x00*/ UINT8 QueueAvailable; - + /*0x55---ǰһζȡǺ(A)У0xAAǰһζ *ȡ(B)гʼĬϵǺмֵ0x55*/ - UINT8 QueueReadFlag; - /*öжȡķֵ洢*/ - UINT8 RVQueueRead; + UINT8 QueueReadFlag; + /*öжȡķֵ洢*/ + UINT8 RVQueueRead; UINT8 RcvQueueReadLenth; - - UINT32 LocalDevName; - + + UINT32 LocalDevName; + UINT8 ToBeContinue = 0; - StackElement *PointStack = &pUnifyInfoForRedun->InputStack; /*һάָջ*/ - UINT32 startTimePointForRedun = GetTick(pUnifyInfoForRedun); /*ȡദʼʱ*/ - struc_Lnk_Mngr *CurIndex_Lnk_Mngr = NULL; /*ǰ·еָ*/ - UINT8 *Rcv = pUnifyInfoForRedun->DataAfterReduntancy; /*RcvָЭ鹲û*/ + StackElement* PointStack = &pUnifyInfoForRedun->InputStack; /*һάָջ*/ + UINT32 startTimePointForRedun = GetTick(pUnifyInfoForRedun); /*ȡദʼʱ*/ + UINT8* Rcv = pUnifyInfoForRedun->DataAfterReduntancy; /*RcvָЭ鹲û*/ + UINT8 deepPro = 0u; /*-< ô־Ϊ*/ /*ֲʼ*/ DestSN = 0; @@ -349,897 +321,475 @@ static UINT16 RedundancyReceive(struc_Unify_Info *pUnifyInfoForRedun) QueueAvailable = 0; QueueReadFlag = 0x55; RVQueueRead = 0xFF; - LocalDevName = TypeIdToName(pUnifyInfoForRedun->LocalType,pUnifyInfoForRedun->LocalID); - - ClearNetsRecvPkgNum(pUnifyInfoForRedun); + LocalDevName = TypeIdToName(pUnifyInfoForRedun->LocalType, pUnifyInfoForRedun->LocalID); /*-< øIDõ豸*/ - while(1) + ClearNetsRecvPkgNum(pUnifyInfoForRedun); /*-< հ*/ + + while (1) /*-< */ { - /* peipei.wang20111011 mod S */ - /*ɾԭʱжϣ׷ӵǰʱ - ദʼʱģִʱ޵ж*/ - /*if(GetTick(pUnifyInfoForRedun) < AbsTimeoutPointForRedun)*/ - if(IsTimeOut(GetTick(pUnifyInfoForRedun),startTimePointForRedun,pUnifyInfoForRedun->RedundTimeout) == 0 ) - /* peipei.wang20111011 mod E*/ - { + deepPro = 0u; /*-< ô־Ϊ*/ + /* peipei.wang20111011 mod S */ + /*ɾԭʱжϣ׷ӵǰʱ - ദʼʱģִʱ޵ж*/ + /*if(GetTick(pUnifyInfoForRedun) < AbsTimeoutPointForRedun)*/ + if (IsTimeOut(GetTick(pUnifyInfoForRedun), startTimePointForRedun, pUnifyInfoForRedun->RedundTimeout) == 0) /*-< жϵǰǷʱ*/ + /* peipei.wang20111011 mod E*/ + { /*QueueScanɨ֡ij*/ - if(PointStack->size != 0)/*нڵ*/ - { - QueueAvailable = 0; /*пñ־*/ - - /*Ϊ֡ʽı䣬ԭ֡ʽǰ֡ȣҪȶֽ*/ + if (PointStack->size != 0) /*-< Ƿнڵ*/ + { + QueueAvailable = 0; /*-< пñ־*/ + + /*Ϊ֡ʽı䣬ԭ֡ʽǰ֡ȣҪȶֽ*/ /*жϺǷ*/ /*if(QueueStatus(&pUnifyInfoForRedun->OutnetQueueA) > 2)*/ /*õݳʣ2ֽ*/ - if(QueueScan(4,len,&pUnifyInfoForRedun->OutnetQueueA) != 0) /*ɨȣ4ֽ*/ - { - FrameLenthOfRcvA = ShortFromChar(len); /*֡ܳ*/ - - lenthofRcvA = ShortFromChar(&len[2]);/*֡ij*/ - - if(((FrameLenthOfRcvA - 2) != lenthofRcvA)||(lenthofRcvA < 21))/*Զһڵ*/ + if (QueueScan(4, len, &pUnifyInfoForRedun->OutnetQueueA) != 0) /*-< Ƿɨ4ֽ*/ + { + FrameLenthOfRcvA = ShortFromChar(len); /*-< ֡ܳ*/ + + lenthofRcvA = ShortFromChar(&len[2]); /*-< ֡ij*/ + + if (((FrameLenthOfRcvA - 2) != lenthofRcvA) || (lenthofRcvA < 21)) /*-< Ƿ񲻿Զһڵ*/ { #ifdef PRTCL_RECORD_ERR_ASC PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_INTEGRITY); + WARN | REDUN | ERROR_NULL | QUEUE_INTEGRITY); /*¼¼*/ #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_INTEGRITY); + /*- ¼Զһڵ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_INTEGRITY); #endif - /*FrameLenthOfRcvA+2ֽݴӶж´ζȡ*/ - QueueElementDiscard( (UINT16)(FrameLenthOfRcvA+2), &pUnifyInfoForRedun->OutnetQueueA); - - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ + /*- FrameLenthOfRcvA+2ֽݴӶж´ζȡ*/ + QueueElementDiscard((UINT16)(FrameLenthOfRcvA + 2), &pUnifyInfoForRedun->OutnetQueueA); + + ToBeContinue = 1; /*-< ֱӽһεĶȡѭ*/ } - else if(lenthofRcvA > (pUnifyInfoForRedun->InputSize + 21)) + else if (lenthofRcvA > (pUnifyInfoForRedun->InputSize + 21)) /*-< ǷݳȷǷ*/ { /*յݳ,ǴӶж֡ݣһ֡Ķȡ*/ #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OUTNETDATA_TOO_LONG|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize," RedNet "); + WARN | REDUN | OUTNETDATA_TOO_LONG | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, " RedNet "); PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, lenthofRcvA); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OUTNETDATA_TOO_LONG|ERROR_NULL); + /*- ¼ݳȷǷ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | OUTNETDATA_TOO_LONG | ERROR_NULL); #endif - /*FrameLenthOfRcvA+2ֽݴӶж´ζȡ*/ - QueueElementDiscard( (UINT16)(FrameLenthOfRcvA+2), &pUnifyInfoForRedun->OutnetQueueA); - - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ + /*- FrameLenthOfRcvA+2ֽݴӶж´ζȡ*/ + QueueElementDiscard((UINT16)(FrameLenthOfRcvA + 2), &pUnifyInfoForRedun->OutnetQueueA); + + ToBeContinue = 1; /*-< ֱӽһεĶȡѭ*/ } else { - QueueAvailable |= 0x0F; /*пñ־*/ - } + QueueAvailable |= 0x0F; /*-< úпñ־*/ + } } else { - /*޲*/ + /*޲*/ } - + /*жǷ*/ /*if(QueueStatus(&pUnifyInfoForRedun->OutnetQueueB) > 2)*/ /*õݳʣ2ֽ*/ - if(QueueScan(4,len,&pUnifyInfoForRedun->OutnetQueueB) != 0) /*ɨȣ4ֽ*/ + if (QueueScan(4, len, &pUnifyInfoForRedun->OutnetQueueB) != 0) /*-< Ƿɨ4ֽ*/ { - FrameLenthOfRcvB = ShortFromChar(len); /*֡ܳ*/ - - lenthofRcvB = ShortFromChar(&len[2]);/*֡ij*/ - - if(((FrameLenthOfRcvB - 2) != lenthofRcvB)||(lenthofRcvB < 21))/*Զһڵ,ĺôDzƻеĽṹ*/ - /*if(QueueStatus(&pUnifyInfoForRedun->OutnetQueueB) < (lenthofRcvB + 2))*/ + FrameLenthOfRcvB = ShortFromChar(len); /*-< ֡ܳ*/ + + lenthofRcvB = ShortFromChar(&len[2]); /*-< ֡ij*/ + + if (((FrameLenthOfRcvB - 2) != lenthofRcvB) || (lenthofRcvB < 21)) /*-< Ƿ񲻿Զһڵ,ĺôDzƻеĽṹ*/ + /*if(QueueStatus(&pUnifyInfoForRedun->OutnetQueueB) < (lenthofRcvB + 2))*/ { #ifdef PRTCL_RECORD_ERR_ASC PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_INTEGRITY); + WARN | REDUN | ERROR_NULL | QUEUE_INTEGRITY); /*¼¼*/ #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_INTEGRITY); + /*- ¼Զһڵ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_INTEGRITY); #endif - /*FrameLenthOfRcvB+2ֽݴӶж´ζȡ*/ - QueueElementDiscard( (UINT16)(FrameLenthOfRcvB+2), &pUnifyInfoForRedun->OutnetQueueB); + /*- FrameLenthOfRcvB+2ֽݴӶж´ζȡ*/ + QueueElementDiscard((UINT16)(FrameLenthOfRcvB + 2), &pUnifyInfoForRedun->OutnetQueueB); - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ - } - else if(lenthofRcvB > (pUnifyInfoForRedun->InputSize + 21)) + ToBeContinue = 1; /*-< ֱӽһεĶȡѭ*/ + } + else if (lenthofRcvB > (pUnifyInfoForRedun->InputSize + 21)) /*-< ǷݳȷǷ*/ { /*¼¼յݳ*/ #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OUTNETDATA_TOO_LONG|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize," BlueNet "); + WARN | REDUN | OUTNETDATA_TOO_LONG | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, " BlueNet "); PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, lenthofRcvB); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OUTNETDATA_TOO_LONG|ERROR_NULL); + /*- ¼ݳȷǷ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | OUTNETDATA_TOO_LONG | ERROR_NULL); #endif - /*FrameLenthOfRcvB+2ֽݴӶж´ζȡ*/ - QueueElementDiscard((UINT16)(FrameLenthOfRcvB+2), &pUnifyInfoForRedun->OutnetQueueB); - - ToBeContinue = 1; /*ֱӽһεĶȡѭ*/ + /*- FrameLenthOfRcvB+2ֽݴӶж´ζȡ*/ + QueueElementDiscard((UINT16)(FrameLenthOfRcvB + 2), &pUnifyInfoForRedun->OutnetQueueB); + + ToBeContinue = 1; /*-< ֱӽһεĶȡѭ*/ } else { - QueueAvailable |= 0xF0; /*пñ־*/ + QueueAvailable |= 0xF0; /*-< пñ־*/ } - + } else { - /*޲*/ + /*޲*/ } - if(ToBeContinue == 0) + if (ToBeContinue == 0) /*-< Ƿ*/ { - if(QueueAvailable == 0xFF)/*жɶ*/ - { - if(QueueReadFlag == 0x55)/*ϴζĶǺ*/ - { - /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,Rcv,&pUnifyInfoForRedun->OutnetQueueB); - if(RcvQueueReadLenth != 1) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - #endif - break;/*Ƴѭ*/ - } - - RVQueueRead = QueueRead( (UINT16)(lenthofRcvB + 2),Rcv,&pUnifyInfoForRedun->OutnetQueueB); - DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); - SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 1); - QueueReadFlag = 0xAA;/*ζ*/ - /*¼¼*/ - #ifdef PRTCL_RECORD_DATA_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"BNet:"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - 0x40|0x0A); - #endif - } - else - { - /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,Rcv,&pUnifyInfoForRedun->OutnetQueueA); - if(RcvQueueReadLenth != 1) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - #endif - break;/*Ƴѭ*/ - } - - RVQueueRead = QueueRead( (UINT16)(lenthofRcvA + 2),Rcv,&pUnifyInfoForRedun->OutnetQueueA); - DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); - SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 0); - QueueReadFlag = 0x55; - /*¼¼*/ - #ifdef PRTCL_RECORD_DATA_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"RNet:"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - 0x40|0x05); - #endif - } - } - else if(QueueAvailable == 0x0F)/*пɶ*/ - { - /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,Rcv,&pUnifyInfoForRedun->OutnetQueueA); - if(RcvQueueReadLenth != 1) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - #endif - break;/*˳ѭ*/ - } - - RVQueueRead = QueueRead( (UINT16)(lenthofRcvA + 2),Rcv,&pUnifyInfoForRedun->OutnetQueueA); - DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); - SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 0); - QueueReadFlag = 0x55;/*ζǺ*/ - /*¼¼*/ - #ifdef PRTCL_RECORD_DATA_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"RNet:"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - 0x40|0x05); - #endif - } - else if(QueueAvailable == 0xF0)/*пɶ*/ - { - /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ - RcvQueueReadLenth = QueueRead(2,Rcv,&pUnifyInfoForRedun->OutnetQueueB); - if(RcvQueueReadLenth != 1) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - #endif - break;/*˳ѭ*/ - } - - RVQueueRead = QueueRead( (UINT16)(lenthofRcvB + 2),Rcv,&pUnifyInfoForRedun->OutnetQueueB); - DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); - SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 1); - QueueReadFlag = 0xAA;/*ζ*/ - /*¼¼*/ - #ifdef PRTCL_RECORD_DATA_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"BNet:"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - /*һ֡ϢʼʶϢԴ*/ - PrintRecArrayByte(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - 0x40|0x0A); - #endif - } - else - { - break; /*˳whileѭ*/ - } - - if(RVQueueRead == 1) /*жǷԶ֡*/ - {/*Զ֡*/ - - /*Է豸ͱ豸ID*/ - LocalDevNameInFrame = LongFromCharLE(&Rcv[RCV_AIM_DN]); - DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); - /*ԼԷSN*/ - for(i = 0; i < 4;i++) - { - Dest_SN[i] = Rcv[RCV_SRC_SN + i]; - Local_SN[i] = Rcv[RCV_AIM_SN + i]; - } - DestSN = LongFromChar(Dest_SN); - LocalSN = LongFromChar(Local_SN); - /*¼¼*/ - #ifdef PRTCL_RECORD_DATA_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"AName:"); - PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - LocalDevNameInFrame); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"SName:"); - PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - DestDevNameInFrame); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"MType:"); - PrintFileHex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - &Rcv[RCV_FRAME_TYPE],1); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"LSN:"); - PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - LocalSN); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"DSN:"); - PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - DestSN); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"Len:"); - if(QueueReadFlag == 0x55) /*пɶ*/ - { - PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - (UINT32) lenthofRcvA - 21); - } - else if(QueueReadFlag == 0xAA) - { - PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - (UINT32) lenthofRcvB - 21); - } - else - { - /*޲*/ - } - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - /*֡ĿͺID*/ - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - (UINT16)((LocalDevNameInFrame >> 16) & 0xffff)); - /*֡ԴͺID*/ - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - (UINT16)((DestDevNameInFrame >> 16) & 0xffff)); - /*֡*/ - PrintRecArrayByte(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - Rcv[RCV_FRAME_TYPE]); - /*к*/ - PrintRecArray4ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - LocalSN); - /*Էк*/ - PrintRecArray4ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - DestSN); - /*֡*/ - if(QueueReadFlag == 0x55) /*пɶ*/ - { - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - (UINT16) lenthofRcvA - 21); - } - else if(QueueReadFlag == 0xAA) - { - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - (UINT16) lenthofRcvB - 21); - } - else - { - /*޲*/ - } - #endif - - - if(LocalDevNameInFrame == LocalDevName) /*Ŀ豸typeId뱾һ*/ - { - /*òѯ̬ñZCϵATSϵĺж϶ԷͨŶǷϷ;õɫLink_Role;*/ - if(dsuIsLnkLegal(pUnifyInfoForRedun,DestDevNameInFrame,&Link_Role))/*typeϷ && IDϷ*/ - { - if(JudgeCrc(Rcv,pUnifyInfoForRedun))/*CRCжϣȷֱӶ֡*/ - { - if(Link_Role == ROLE_SPON)/*ɫΪ*/ - { - if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)/*յRFC֡,*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_ROLE_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_ROLE_CONFLICT|ERROR_NULL); - #endif - }/*if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)*/ - else if(Rcv[RCV_FRAME_TYPE] == FRAME_ACK)/*յACK֡,һ*/ - { - /*òѯͨŹSearchLnkظڱеָ룻*/ - CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame,pUnifyInfoForRedun);/*·вѯ޸·*/ - if(CurIndex_Lnk_Mngr != NULL)/*ڸ·*/ - { - /*·֡ΪACKкͬ*/ - /*·WaitConյı͹ȥSN·ϲܶӦ!!!!!!!*/ - if(CurIndex_Lnk_Mngr->Lnk_Info.AckSN != DestSN ) - { - /*òҽڵ㺯ڵǷڸ豸typeID*/ - p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); - if(p_temp != NULL)/*ڸtypeIDڵ*/ - { - /*ɾнڵ㺯TYPEIDµSNڵȫɾ*/ - DelGroupNode(p_temp,pUnifyInfoForRedun); - /*òڵ㺯ACK֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - - #endif - - - } - else - { - /*޲*/ - } - } - else/*ڸtypeIDڵ*/ - { - /*òڵ㺯ACK֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - - #endif - - } - else - { - /*޲*/ - } - } - }/*·״̬ΪWCONACKҸ֡ıк·еһ*/ - else - { - /*޲*/ - } - }/*if(CurIndex_Lnk_Mngr != NULL)*/ - else - { - /*޲*/ - } - - }/*if(Rcv[RCV_FRAME_TYPE] == FRAME_ACK)*/ - else if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))/*֡ΪIdle̬data̬*/ - { - /*SearchLnkѯͨŹظڱе±ꣻ*/ - CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame,pUnifyInfoForRedun);/*·вѯ޸·*/ - if(CurIndex_Lnk_Mngr != NULL)/*ڸ·*/ - { - if(CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) - { - if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN, pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize))/*жкźϷԺJudgeSNظ֡кǷϷ*/ - { - /*òڵ㺯ýڵ*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - - #endif - - } - else - { - /*޲*/ - } - }/*if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN))*/ - else/*кŲϷ*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|SN_ILLEGAL|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|SN_ILLEGAL|ERROR_NULL); - - #endif - - } - }/*if(CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA)*/ - else/*·Ϊ״̬*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_STATUS_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_STATUS_CONFLICT|ERROR_NULL); - - #endif - - } - }/*if(CurIndex_Lnk_Mngr != NULL)*/ - else - { - /*޲*/ - } - }/*if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))*/ - else - { - /*޲*/ - } - }/*if(Link_Role == ROLE_SPON)*/ - else if(Link_Role == ROLE_FLW) - { - if(Rcv[RCV_FRAME_TYPE] == FRAME_ACK)/*淽յACK֡,*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_ROLE_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_ROLE_CONFLICT|ERROR_NULL); - #endif - } - else if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)/*淽յRFC֡,һ*/ - { - /*òѯͨŹSearchLnkظڱе±ꣻ*/ - CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame,pUnifyInfoForRedun);/*·вѯ޸·*/ - if(CurIndex_Lnk_Mngr != NULL)/*ͨŹдڸ·*/ - { - if(CurIndex_Lnk_Mngr->Lnk_Info.RfcSN == DestSN) - /*·֡ΪRFCкͬ*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|RE_RECV_RFC|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|RE_RECV_RFC|ERROR_NULL); - #endif - }/*if((CurIndex_Lnk_Mngr->Lnk_Info.lastframe == FRAME_RFC)&&(CurIndex_Lnk_Mngr->Lnk_Info.lDestSN == DestSN))*/ - else/*·֡ͲΪRFCкŲͬ*/ - { - /*òҽڵ㺯ڵǷڸ豸typeID*/ - p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); - if(p_temp != NULL)/*ڸtypeIDڵ*/ - { - /*ɾнڵ㺯TYPEIDµSNڵȫɾ*/ - DelGroupNode(p_temp,pUnifyInfoForRedun); - /*òڵ㺯ACK֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - - #endif - - } - else - { - /*޲*/ - } - }/*end if(p_temp ! = NULL)*/ - else/*ڸtypeIDڵ*/ - { - /*òڵ㺯RFC֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - #endif - - } - else - { - /*޲*/ - } - } - }/*·֡ͲΪRFCкŲͬ*/ - }/*if(CurIndex_Lnk_Mngr != NULL)*/ - else/*ͨŹдڸ·*/ - { - /*òҽڵ㺯ڵǷڸ豸typeID*/ - p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); - if(p_temp != NULL)/*ڸtypeIDڵ*/ - { - /*ɾнڵ㺯TYPEIDµSNڵȫɾ*/ - DelGroupNode(p_temp,pUnifyInfoForRedun); - /*òڵ㺯ACK֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - - #endif - } - else - { - /*޲*/ - } - }/*end if(p_temp != NULL)*/ - else/*ڸtypeIDڵ*/ - { - /*òڵ㺯RFC֡²뵽ڵ㻺*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - #endif - } - else - { - /*޲*/ - } - } - }/*ͨŹвڸ·*/ - }/*else if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)*/ - else if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))/*֡ΪIdle̬data̬*/ - { - /*òѯͨŹSearchLnkظڱе±ꣻ*/ - CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame,pUnifyInfoForRedun);/*·вѯ޸·*/ - if(CurIndex_Lnk_Mngr != NULL)/*ͨŹдڸ·*/ - { - if((CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) || (CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_HALT)) - { - if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN, pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize))/*жкźϷԺJudgeSNظ֡кǷϷ*/ - { - /*òڵ㺯ýڵ*/ - InsertNode(DestDevNameInFrame,&Rcv[RCV_SRC_SN],Rcv,pUnifyInfoForRedun); - if(pUnifyInfoForRedun->InputBufferHead == NULL) - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - #endif - - } - else - { - /*޲*/ - } - }/*if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN))*/ - else/*кŲϷ*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|SN_ILLEGAL|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|SN_ILLEGAL|ERROR_NULL); - #endif - } - }/*if((CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) || (CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_HALT))*/ - else/*·״̬Ϊ*/ - { - - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_STATUS_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|FRAMETYPE_STATUS_CONFLICT|ERROR_NULL); - #endif - - } - }/*if(CurIndex_Lnk_Mngr != NULL)*/ - else - { - /*޲*/ - } - }/*if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))*/ - else - { - /*޲*/ - } - }/*else if(Link_Role == ROLE_FLW)*/ - else - { - /*޲*/ - } - }/*if(JudgeCrc())*/ - else /*CRCжϲȷ,*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|CRC_ERR|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|CRC_ERR|ERROR_NULL); - #endif - } - }/*if(IsLnkLegal(Rcv[RCV_AIM_TYPE],Local_id,Rcv[RCV_SRC_TYPE],Dest_id,&Link_Role))*/ - else/*ԷͨŶ󲻺Ϸ*/ - { - - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OBJ_ILLEAGL|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|OBJ_ILLEAGL|ERROR_NULL); - #endif - } - }/*if(LocalDevNameInFrame == LocalDevName)*/ - else /*Ŀ豸typeId뱾زһ£*/ - { - - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|DESTNAME_ERR|ERROR_NULL); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|DESTNAME_ERR|ERROR_NULL); - #endif - } - }/*if( QueueRead((lenthofRcv + 2),Rcv,&innet_to_outnet_Queue) != 0)*/ - else/*֡*/ - { - /*¼¼*/ - #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - #endif - #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - WARN|REDUN|ERROR_NULL|QUEUE_READ); - #endif - break;/*˳ѭ*/ - }/*if(QueueScan(2,len,&innet_to_outnet_Queue) != 0)*/ + deepPro = 1u; /*-< ô־Ϊ*/ } else - { - ToBeContinue = 0; + { + ToBeContinue = 0; /*-< ǷΪ*/ } - + }/*нڵ*/ else { /*¼¼*/ #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|INPUT_LNK_POP); + /*- ¼ݳȷǷ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); #endif - break; + break; } } else { /*¼¼*/ #ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"E:"); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|TIMEOUT); - PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize,"\n"); - + ERR | REDUN | ERROR_NULL | TIMEOUT); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray,pUnifyInfoForRedun->RecordArraySize, - ERR|REDUN|ERROR_NULL|TIMEOUT); + /*- ¼ʱ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | TIMEOUT); #endif break; } - } - - ret = 1; - return ret; + if (1u == deepPro) /*-< ־ǷΪ*/ + { + if (QueueAvailable == 0xFF) /*-< Ƿжɶ*/ + { + if (QueueReadFlag == 0x55) /*-< ǷϴζĶǺ*/ + { + /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ + RcvQueueReadLenth = QueueRead(2, Rcv, &pUnifyInfoForRedun->OutnetQueueB); /*-< 2ֽ*/ + if (RcvQueueReadLenth != 1) /*-< Ƿʧ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); +#endif + break;/*˳ѭ*/ + } + /*- ,,־*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvB + 2), Rcv, &pUnifyInfoForRedun->OutnetQueueB); + DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); + SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 1); + QueueReadFlag = 0xAA;/*ζ*/ + /*¼¼*/ +#ifdef PRTCL_RECORD_DATA_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "BNet:"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼һ֡ϢʼʶϢԴ־*/ + PrintRecArrayByte(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + 0x40 | 0x0A); +#endif + } + else + { + /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ + RcvQueueReadLenth = QueueRead(2, Rcv, &pUnifyInfoForRedun->OutnetQueueA); /*-< 2ֽ*/ + if (RcvQueueReadLenth != 1) /*-< Ƿʧ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); +#endif + break;/*Ƴѭ*/ + } + /*- ,,־*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvA + 2), Rcv, &pUnifyInfoForRedun->OutnetQueueA); + DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); + SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 0); + QueueReadFlag = 0x55; + /*¼¼*/ +#ifdef PRTCL_RECORD_DATA_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "RNet:"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼һ֡ϢʼʶϢԴ־*/ + PrintRecArrayByte(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + 0x40 | 0x05); +#endif + } + } + else if (QueueAvailable == 0x0F) /*-< Ƿпɶ*/ + { + /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ + RcvQueueReadLenth = QueueRead(2, Rcv, &pUnifyInfoForRedun->OutnetQueueA); /*-< 2ֽ*/ + if (RcvQueueReadLenth != 1) /*-< Ƿʧ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); +#endif + break;/*˳ѭ*/ + } + /*- ,,־*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvA + 2), Rcv, &pUnifyInfoForRedun->OutnetQueueA); + DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); + SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 0); + QueueReadFlag = 0x55;/*ζǺ*/ + /*¼¼*/ +#ifdef PRTCL_RECORD_DATA_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "RNet:"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼һ֡ϢʼʶϢԴ־*/ + PrintRecArrayByte(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + 0x40 | 0x05); +#endif + } + else if (QueueAvailable == 0xF0) /*-< Ƿпɶ*/ + { + /*Ϊ֡ͷֽڣΪԴ򲻱䣬ȶֽڣ*/ + RcvQueueReadLenth = QueueRead(2, Rcv, &pUnifyInfoForRedun->OutnetQueueB); /*-< 2ֽ*/ + if (RcvQueueReadLenth != 1) /*-< Ƿʧ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); +#endif + break;/*˳ѭ*/ + } + /*- ,,־*/ + RVQueueRead = QueueRead((UINT16)(lenthofRcvB + 2), Rcv, &pUnifyInfoForRedun->OutnetQueueB); + DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); + SetNetsRecvPkgNum(pUnifyInfoForRedun, DestDevNameInFrame, 1); + QueueReadFlag = 0xAA;/*ζ*/ + /*¼¼*/ +#ifdef PRTCL_RECORD_DATA_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "BNet:"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼һ֡ϢʼʶϢԴ־*/ + PrintRecArrayByte(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + 0x40 | 0x0A); +#endif + } + else + { + break; /*˳whileѭ*/ + } + + if (RVQueueRead == 1) /*-< жǷԶ֡*/ + {/*Զ֡*/ + + /*- Է豸ͱ豸ID*/ + LocalDevNameInFrame = LongFromCharLE(&Rcv[RCV_AIM_DN]); + DestDevNameInFrame = LongFromCharLE(&Rcv[RCV_SRC_DN]); + /*ԼԷSN*/ + for (i = 0; i < 4; i++) /*-< СǷС4*/ + { + Dest_SN[i] = Rcv[RCV_SRC_SN + i]; /*-< öԷ*/ + Local_SN[i] = Rcv[RCV_AIM_SN + i]; /*-< ñ*/ + } + DestSN = LongFromChar(Dest_SN); /*-< õԷ*/ + LocalSN = LongFromChar(Local_SN); /*-< õ*/ + /*¼¼*/ +#ifdef PRTCL_RECORD_DATA_ASC + /*- ¼ַ־*/ + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "AName:"); + PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + LocalDevNameInFrame); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "SName:"); + PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + DestDevNameInFrame); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "MType:"); + PrintFileHex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + &Rcv[RCV_FRAME_TYPE], 1); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "LSN:"); + PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + LocalSN); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "DSN:"); + PrintFileU32Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + DestSN); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "Len:"); + if (QueueReadFlag == 0x55) /*-< Ƿпɶ*/ + { + /*- ¼֡־*/ + PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT32)lenthofRcvA - 21); + } + else if (QueueReadFlag == 0xAA) /*-< Ƿпɶ*/ + { + /*- ¼֡־*/ + PrintFileU32Int(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT32)lenthofRcvB - 21); + } + else + { + /*޲*/ + } + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼֡ĿͺID־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT16)((LocalDevNameInFrame >> 16) & 0xffff)); + /*- ¼֡ԴͺID־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT16)((DestDevNameInFrame >> 16) & 0xffff)); + /*- ¼֡־*/ + PrintRecArrayByte(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + Rcv[RCV_FRAME_TYPE]); + /*- ¼к־*/ + PrintRecArray4ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + LocalSN); + /*- ¼Էк־*/ + PrintRecArray4ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + DestSN); + /*¼֡־*/ + if (QueueReadFlag == 0x55) /*-< Ƿпɶ*/ + { + /*- ¼֡־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT16)lenthofRcvA - 21); + } + else if (QueueReadFlag == 0xAA) /*-< Ƿпɶ*/ + { + /*- ¼֡־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + (UINT16)lenthofRcvB - 21); + } + else + { + /*޲*/ + } +#endif + + + if (LocalDevNameInFrame == LocalDevName) /*-< Ŀ豸typeIdǷ뱾һ*/ + { + StSfpRecvData(pUnifyInfoForRedun, Rcv, DestDevNameInFrame, LocalSN, DestSN); /*-< ݴ*/ + }/*if(LocalDevNameInFrame == LocalDevName)*/ + else /*Ŀ豸typeId뱾زһ£*/ + { + + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | DESTNAME_ERR | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼Ŀ豸typeIdǷ뱾һ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | DESTNAME_ERR | ERROR_NULL); +#endif + } + }/*if( QueueRead((lenthofRcv + 2),Rcv,&innet_to_outnet_Queue) != 0)*/ + else/*֡*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼֡־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | ERROR_NULL | QUEUE_READ); +#endif + break;/*˳ѭ*/ + }/*if(QueueScan(2,len,&innet_to_outnet_Queue) != 0)*/ + } + } + + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } @@ -2317,35 +1867,33 @@ static void ClearNetsRecvPkgNum(struc_Unify_Info* sfp) } } -/* -*: øհ -*: struc_Unify_Info* sfp sfp -* const UINT32 dstDevName Ŀ豸 -* const UINT8 netIdx ± -*: -*: -*ֵ: -*/ +/** + * @brief SetNetsRecvPkgNum øհ + * @param sfp sfp ȡֵΧ:οṹstruc_Unify_Info + * @param dstDevName Ŀ豸 ȡֵΧ:0x00000000-0xFFFFFFFF + * @param netIdx ± ȡֵΧ:0:;1: + */ static void SetNetsRecvPkgNum(struc_Unify_Info* sfp, const UINT32 dstDevName, const UINT8 netIdx) { + /*- ֲ*/ UINT16 i = 0u; /*ѭ*/ - if ((NULL != sfp) && (NULL != sfp->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /**/ + if ((NULL != sfp) && (NULL != sfp->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*-< ǷϷ*/ { - for (i = 0; i < sfp->NetsRecvPkgNumsLen; i++) /**/ + for (i = 0u; i < sfp->NetsRecvPkgNumsLen; i++) /*-< ǰ豸±ǷС豸*/ { - if (dstDevName == sfp->NetsRecvPkgNums[i].DstDevName) /*ҵ*/ + if (dstDevName == sfp->NetsRecvPkgNums[i].DstDevName) /*-< ǰ豸ǷҪҵ*/ { - sfp->NetsRecvPkgNums[i].NetsPkgNum[netIdx]++; - break; + sfp->NetsRecvPkgNums[i].NetsPkgNum[netIdx]++; /*-< õǰ豸Ӧ1*/ + break; /*-< ˳*/ } } - if ((i == sfp->NetsRecvPkgNumsLen) && (sfp->NetsRecvPkgNumsLen < sfp->MaxNumLink)) /*δҵ,һ豸*/ + if ((i == sfp->NetsRecvPkgNumsLen) && (sfp->NetsRecvPkgNumsLen < sfp->MaxNumLink)) /*-< Ƿδҵ*/ { - sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].DstDevName = dstDevName; - CommonMemSet(&sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].NetsPkgNum, 2, 0, 2); - sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].NetsPkgNum[netIdx] = 1; - sfp->NetsRecvPkgNumsLen++; + sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].DstDevName = dstDevName; /*-< Ŀ豸*/ + CommonMemSet(&sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].NetsPkgNum, 2u * sizeof(UINT16), 0u, 2u * sizeof(UINT16)); /*-< 㵱ǰ豸*/ + sfp->NetsRecvPkgNums[sfp->NetsRecvPkgNumsLen].NetsPkgNum[netIdx] = 1u; /*-< õǰ豸ӦΪ1*/ + sfp->NetsRecvPkgNumsLen++; /*-< 豸1*/ } } } @@ -2381,3 +1929,514 @@ void ProtclGetNetsRecvPkgNum(struc_Unify_Info* sfp, const UINT8 dstType, const U } } } + +/** + * @brief StSfpRecvData ݴ + * @param pUnifyInfoForRedun sfp ȡֵΧ:οṹstruc_Unify_Info + * @param Rcv ȡֵΧ:ֽ + * @param DestDevNameInFrame Ŀ豸 ȡֵΧ:0x00000000-0xFFFFFFFF + * @param LocalSN ȡֵΧ:0x00000000-0xFFFFFFFF + * @param DestSN Է ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StSfpRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN) +{ + /*- ֲ*/ + UINT8 Link_Role = 0; /*·ɫ*/ + + /*òѯ̬ñZCϵATSϵĺж϶ԷͨŶǷϷ;õɫLink_Role;*/ + if (dsuIsLnkLegal(pUnifyInfoForRedun, DestDevNameInFrame, &Link_Role)) /*-< õõɫ*/ + { + if (JudgeCrc(Rcv, pUnifyInfoForRedun)) /*-< CRCжϣȷֱӶ֡*/ + { + if (Link_Role == ROLE_SPON) /*-< ɫΪ*/ + { + StSfpSponRecvData(pUnifyInfoForRedun, Rcv, DestDevNameInFrame, LocalSN, DestSN); /*-< ñΪݴ*/ + } + else if (Link_Role == ROLE_FLW) /*-< ɫΪ淽*/ + { + StSfpFlwRecvData(pUnifyInfoForRedun, Rcv, DestDevNameInFrame, LocalSN, DestSN); /*-< ñΪ淽ݴ*/ + }/*else if(Link_Role == ROLE_FLW)*/ + else + { + /*޲*/ + } + }/*if(JudgeCrc())*/ + else /*CRCжϲȷ,*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | CRC_ERR | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼CRCʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | CRC_ERR | ERROR_NULL); +#endif + } + }/*if(IsLnkLegal(Rcv[RCV_AIM_TYPE],Local_id,Rcv[RCV_SRC_TYPE],Dest_id,&Link_Role))*/ + else/*ԷͨŶ󲻺Ϸ*/ + { + + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | OBJ_ILLEAGL | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼úʧ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | OBJ_ILLEAGL | ERROR_NULL); +#endif + } +} + +/** + * @brief StSfpSponRecvData Ϊݴ + * @param pUnifyInfoForRedun sfp ȡֵΧ:οṹstruc_Unify_Info + * @param Rcv ȡֵΧ:ֽ + * @param DestDevNameInFrame Ŀ豸 ȡֵΧ:0x00000000-0xFFFFFFFF + * @param LocalSN ȡֵΧ:0x00000000-0xFFFFFFFF + * @param DestSN Է ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StSfpSponRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN) +{ + /*- ֲ*/ + struc_InputBuffer* p_temp = NULL; /*ָһάʱָ*/ + struc_Lnk_Mngr* CurIndex_Lnk_Mngr = NULL; /*ǰ·еָ*/ + + if (Rcv[RCV_FRAME_TYPE] == FRAME_RFC) /*-< ֡Ƿ֡*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_ROLE_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif + +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼֡ʹ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_ROLE_CONFLICT | ERROR_NULL); +#endif + }/*if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)*/ + else if (Rcv[RCV_FRAME_TYPE] == FRAME_ACK) /*-< ֡ǷӦ֡*/ + { + /*òѯͨŹSearchLnkظڱеָ룻*/ + CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame, pUnifyInfoForRedun); /*-< ú·вѯ޸·*/ + if (CurIndex_Lnk_Mngr != NULL) /*-< ڸ·*/ + { + /*·֡ΪACKкͬ*/ + /*·WaitConյı͹ȥSN·ϲܶӦ!!!!!!!*/ + if (CurIndex_Lnk_Mngr->Lnk_Info.AckSN != DestSN) /*-< Ƿͬ*/ + { + /*òҽڵ㺯ڵǷڸ豸typeID*/ + p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); /*-< úҽڵ*/ + if (p_temp != NULL) /*-< ڸtypeIDڵ*/ + { + /*- ɾнڵ㺯TYPEIDµSNڵȫɾ*/ + DelGroupNode(p_temp, pUnifyInfoForRedun); + /*- òڵ㺯ACK֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif + +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + +#endif + + + } + else + { + /*޲*/ + } + } + else/*ڸtypeIDڵ*/ + { + /*- òڵ㺯ACK֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + +#endif + + } + else + { + /*޲*/ + } + } + }/*·״̬ΪWCONACKҸ֡ıк·еһ*/ + else + { + /*޲*/ + } + }/*if(CurIndex_Lnk_Mngr != NULL)*/ + else + { + /*޲*/ + } + + }/*if(Rcv[RCV_FRAME_TYPE] == FRAME_ACK)*/ + else if ((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE)) /*-< ֡Ƿ֡֡*/ + { + /*SearchLnkѯͨŹظڱе±ꣻ*/ + CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame, pUnifyInfoForRedun); /*-< ú·вѯ޸·*/ + if (CurIndex_Lnk_Mngr != NULL) /*-< ڸ·*/ + { + if (CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) /*-< ·״̬Ƿ*/ + { + if (JudgeSN(CurIndex_Lnk_Mngr, LocalSN, DestSN, pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize)) /*-< жкźϷԺJudgeSN,ظ֡кǷϷ*/ + { + /*- òڵ㺯ýڵ*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif + +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + +#endif + + } + else + { + /*޲*/ + } + }/*if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN))*/ + else/*кŲϷ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | SN_ILLEGAL | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼кŲϷ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | SN_ILLEGAL | ERROR_NULL); + +#endif + + } + }/*if(CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA)*/ + else/*·Ϊ״̬*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_STATUS_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼·״̬־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_STATUS_CONFLICT | ERROR_NULL); + +#endif + + } + }/*if(CurIndex_Lnk_Mngr != NULL)*/ + else + { + /*޲*/ + } + }/*if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))*/ + else + { + /*޲*/ + } +} + +/** + * @brief StSfpFlwRecvData Ϊ淽ݴ + * @param pUnifyInfoForRedun sfp ȡֵΧ:οṹstruc_Unify_Info + * @param Rcv ȡֵΧ:ֽ + * @param DestDevNameInFrame Ŀ豸 ȡֵΧ:0x00000000-0xFFFFFFFF + * @param LocalSN ȡֵΧ:0x00000000-0xFFFFFFFF + * @param DestSN Է ȡֵΧ:0x00000000-0xFFFFFFFF + */ +static void StSfpFlwRecvData(struc_Unify_Info* pUnifyInfoForRedun, UINT8* Rcv, UINT32 DestDevNameInFrame, UINT32 LocalSN, UINT32 DestSN) +{ + /*- ֲ*/ + struc_InputBuffer* p_temp = NULL; /*ָһάʱָ*/ + struc_Lnk_Mngr* CurIndex_Lnk_Mngr = NULL; /*ǰ·еָ*/ + + if (Rcv[RCV_FRAME_TYPE] == FRAME_ACK) /*-< ֡ǷӦ֡*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_ROLE_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼֡ʹ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_ROLE_CONFLICT | ERROR_NULL); +#endif + } + else if (Rcv[RCV_FRAME_TYPE] == FRAME_RFC) /*-< ֡Ƿ֡*/ + { + /*òѯͨŹSearchLnkظڱе±ꣻ*/ + CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame, pUnifyInfoForRedun); /*-< ú·вѯ޸·*/ + if (CurIndex_Lnk_Mngr != NULL) /*-< ͨŹдڸ·*/ + { + if (CurIndex_Lnk_Mngr->Lnk_Info.RfcSN == DestSN) /*-< Ƿͬ*/ + /*·֡ΪRFCкͬ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | RE_RECV_RFC | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ͬ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | RE_RECV_RFC | ERROR_NULL); +#endif + }/*if((CurIndex_Lnk_Mngr->Lnk_Info.lastframe == FRAME_RFC)&&(CurIndex_Lnk_Mngr->Lnk_Info.lDestSN == DestSN))*/ + else/*·֡ͲΪRFCкŲͬ*/ + { + /*òҽڵ㺯ڵǷڸ豸typeID*/ + p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); /*-< úҽڵ*/ + if (p_temp != NULL) /*-< ڸtypeIDڵ*/ + { + /*- ɾнڵ㺯TYPEIDµSNڵȫɾ*/ + DelGroupNode(p_temp, pUnifyInfoForRedun); + /*- òڵ㺯ACK֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + +#endif + + } + else + { + /*޲*/ + } + }/*end if(p_temp ! = NULL)*/ + else/*ڸtypeIDڵ*/ + { + /*- òڵ㺯RFC֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*-< ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); +#endif + + } + else + { + /*޲*/ + } + } + }/*·֡ͲΪRFCкŲͬ*/ + }/*if(CurIndex_Lnk_Mngr != NULL)*/ + else/*ͨŹдڸ·*/ + { + /*- òҽڵ㺯ڵǷڸ豸typeID*/ + p_temp = SearchGroupNode(DestDevNameInFrame, pUnifyInfoForRedun); + if (p_temp != NULL)/*- ڸtypeIDڵ*/ + { + /*- ɾнڵ㺯TYPEIDµSNڵȫɾ*/ + DelGroupNode(p_temp, pUnifyInfoForRedun); + /*- òڵ㺯ACK֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + +#endif + } + else + { + /*޲*/ + } + }/*end if(p_temp != NULL)*/ + else/*ڸtypeIDڵ*/ + { + /*- òڵ㺯RFC֡²뵽ڵ㻺*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); +#endif + } + else + { + /*޲*/ + } + } + }/*ͨŹвڸ·*/ + }/*else if(Rcv[RCV_FRAME_TYPE] == FRAME_RFC)*/ + else if ((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE)) /*-< ֡Ƿ֡֡*/ + { + /*- òѯͨŹSearchLnkظڱе±ꣻ*/ + CurIndex_Lnk_Mngr = SearchLnk(DestDevNameInFrame, pUnifyInfoForRedun); /*-< ú·вѯ޸·*/ + if (CurIndex_Lnk_Mngr != NULL) /*-< ͨŹдڸ·*/ + { + if ((CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) || (CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_HALT)) /*-< ·״̬Ƿ״̬ж״̬*/ + { + if (JudgeSN(CurIndex_Lnk_Mngr, LocalSN, DestSN, pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize)) /*-< жкźϷԺJudgeSN,ظ֡кǷϷ*/ + { + /*- òڵ㺯ýڵ*/ + InsertNode(DestDevNameInFrame, &Rcv[RCV_SRC_SN], Rcv, pUnifyInfoForRedun); + if (pUnifyInfoForRedun->InputBufferHead == NULL) /*-< ͷڵǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ͷڵΪ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + ERR | REDUN | ERROR_NULL | INPUT_LNK_POP); +#endif + + } + else + { + /*޲*/ + } + }/*if(JudgeSN(CurIndex_Lnk_Mngr,LocalSN,DestSN))*/ + else/*кŲϷ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | SN_ILLEGAL | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼УŷǷ־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | SN_ILLEGAL | ERROR_NULL); +#endif + } + }/*if((CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_DATA) || (CurIndex_Lnk_Mngr->Lnk_Info.chStatus == STATUS_HALT))*/ + else/*·״̬Ϊ*/ + { + + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_STATUS_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼·״̬־*/ + PrintRecArray2ByteB(pUnifyInfoForRedun->RecordArray, pUnifyInfoForRedun->RecordArraySize, + WARN | REDUN | FRAMETYPE_STATUS_CONFLICT | ERROR_NULL); +#endif + + } + }/*if(CurIndex_Lnk_Mngr != NULL)*/ + else + { + /*޲*/ + } + }/*if((Rcv[RCV_FRAME_TYPE] == FRAME_DATA) || (Rcv[RCV_FRAME_TYPE] == FRAME_IDLE))*/ + else + { + /*޲*/ + } +} \ No newline at end of file diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.h b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.h index 5cb1ca7..4f6fcf4 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.h +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtclReceive.h @@ -56,21 +56,6 @@ static UINT8 Redundancy(struc_Unify_Info *pUnifyInfo); *******************************************************************************************/ UINT8 RedundancyInitial(struc_Unify_Info *pUnifyInfo); -/* -*: RedundancyReceive -*: ݣദ -* 1Ӷжÿһ֡ -* 2жϱԷ߼ַǷϷ -* 3жCRCǷȷ -* 4жϱ͡ -* 5յRFC֡·ڣ·жϸRFCǷϷڣһά -* 6յACK֡ͨ·жϸACKǷϷϷͨһάжǷ֡ -* 7յDATA֡ͨ·жϸDATAǷϷϷͨһάжǷ֡ -*: struc_Unify_Info *pUnifyInfoForRedun SFPṹ -*: -*: -*ֵ: 1:ɹ;0ʧ -*/ static UINT16 RedundancyReceive(struc_Unify_Info *pUnifyInfoForRedun); /* diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtcl_Output.c b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtcl_Output.c index 6108d3d..0a2ea65 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtcl_Output.c +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpPrtcl_Output.c @@ -32,6 +32,9 @@ #include "dsuRelatedDeal.h" #include "CommonMemory.h" +static UINT8 StSfpOutProData(struc_Unify_Info* pUnifyInfoForOutput, struc_OutputDataBuff** pCurDataBuffItem, struc_OutputDataBuff* pLastDataBuffItem, struc_Lnk_Mngr** pCurProc_Lnk, UINT32* nNumsPrtclSnd); +static UINT8 StSfpOutProDataLink(struc_Unify_Info* pUnifyInfoForOutput, struc_OutputDataBuff* pCurDataBuffItem, struc_Lnk_Mngr* pCurProc_Lnk, UINT32* nNumsPrtclSnd); + /* *: Insert_OutputDataBuff *: ڵ֮һڵ,ӶջƳһԪ洢 @@ -1156,31 +1159,20 @@ static INT8 FillLnkMngr_into_PrtclSnd(struc_Lnk_Mngr *CurLnk, UINT32 *nNumsPrtcl return ret; } - -/****************************************************************************************** -* : ЭԪ,ЭĹ,Ӧô֡, - ΪݱȽϵԪ׼ñ,ͬʱά· -* : -* : struc_Unify_Info* pUnifyInfo Эͳһṹָ -* : -* ȫֱ : UINT32 nNumsPrtclSnd Эݵĸ(ֽΪλ) - struc_Lnk_Mngr *pCurProc_Lnk ·еǰĵ·ָ,ָ룬ʵ* - UINT8 chCurProcItemSrc ǰҪԪصԴ ITEMSRC_BOTH (ݶк·) 0x17;ITEMSRC_DATAQUEUE (ݶ) 0x33;ITEMSRC_LNKMNGR(·) 0x55 - struc_OutputDataBuff *pLastDataBuffItem ʾǰݴ洢Ԫָ - struc_OutputDataBuff *pCurDataBuffItem ʾһδݴ洢Ԫָ - struc_Unify_Info *pUnifyInfoForOutput ƽ̨ṹָ -* ֵ : ȷ1󷵻0 -*******************************************************************************************/ +/** + * @brief ProtclOutput ЭԪ,ЭĹ,Ӧô֡ + * @param pUnifyInfo sfp ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ { + /*- ֲ*/ UINT8 blNeedToInit; UINT8 temp_char[4]; struc_Lnk_Mngr *CurFillLnk;/*嵱ǰָ;*/ - UINT8 Role; /*UINT8 index;*/ INT8 ResultofGet;/*GetNextItem2ProcĴ*/ INT32 i; - UINT16 DSUNumNodes; /*ݿнڵ*/ /*struc_LnkBasicInfo BasicInfoForLocal;*/ /* peipei.wang20111011 mod S */ @@ -1190,38 +1182,38 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ /* peipei.wang20111011 mod E */ UINT32 LocalDevName; - UINT8 ret = 0; + UINT8 ret = 0; /*-< úֵΪ0*/ UINT8 chCurProcItemSrc = 0; /*ǰҪԪصԴ ITEMSRC_BOTH (ݶк·) 0x17;ITEMSRC_DATAQUEUE (ݶ) 0x33;ITEMSRC_LNKMNGR(·) 0x55*/ struc_Lnk_Mngr *pCurProc_Lnk = NULL; /*·еǰĵ·ָ,ָ룬ʵ*/ struc_OutputDataBuff *pLastDataBuffItem = NULL; /*ʾһδݴ洢Ԫָ*/ struc_OutputDataBuff *pCurDataBuffItem = NULL; /*ʾǰݴ洢Ԫָ*/ UINT32 nNumsPrtclSnd = 0; /*Эݵĸ(ֽΪλ)*/ struc_Unify_Info *pUnifyInfoForOutput = pUnifyInfo; /*SFPṹ*/ + UINT8 funRtn = 0u; - if(pUnifyInfo == NULL) + if(pUnifyInfo == NULL) /*-< Ƿǿ*/ { - return ret; + return ret; /*-< غֵ*/ } else {} #ifdef SWAP_CRC - ShortToChar(0u, &pUnifyInfoForOutput->SwapCrcs[0]); /**/ + ShortToChar(0u, &pUnifyInfoForOutput->SwapCrcs[0]); /*-< սCRCֵ*/ #endif - blNeedToInit = 1;/*Ҫʼ*/ + blNeedToInit = 1;/*-< Ҫʼ*/ /*豸ֵ*/ - LocalDevName = TypeIdToName(pUnifyInfoForOutput->LocalType,pUnifyInfoForOutput->LocalID); - nNumsPrtclSnd = 8;/*Э֡ȳʼ,ӵλʼд*/ + LocalDevName = TypeIdToName(pUnifyInfoForOutput->LocalType,pUnifyInfoForOutput->LocalID); /*-< øIDõ豸*/ + nNumsPrtclSnd = 8; /*-< Э֡ȳΪ8*/ /* peipei.wang20111011 mod S */ /*ɾģԳʱʱ䣬׷ӻȡʼʱ*/ /*AbsTimeoutForOutput = GetTick(pUnifyInfoForOutput) + pUnifyInfoForOutput->OutputTimeout;*/ /*ȡʼʱ*/ - startTimeoutForOutput = GetTick(pUnifyInfoForOutput); + startTimeoutForOutput = GetTick(pUnifyInfoForOutput); /*-< õʼʱ*/ /* peipei.wang20111011 mod E */ - - DSUNumNodes = dsuGetObjNum(pUnifyInfoForOutput); /*ݿнڵ*/ + #ifdef PRTCL_RECORD_ERR_ASC /*ǰTick࿪ʼ*/ PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"Output: "); @@ -1239,6 +1231,7 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ID־*/ PrintRecArrayByte(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,0x03); PrintRecArrayByte(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, pUnifyInfoForOutput->LocalType); @@ -1247,315 +1240,82 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ #endif - - /*鳤Ⱥ鳤0*/ - for(i = 0;i < 8; i++) + + for(i = 0;i < 8; i++) /*-< ±ǷС8*/ { - pUnifyInfoForOutput->PrtclSndBuff[i] = 0; + pUnifyInfoForOutput->PrtclSndBuff[i] = 0; /*-< 鳤Ⱥ鳤0*/ } /*ݴݶжȡ䵽ݻȥ*/ - if( Queue2Buff(pUnifyInfoForOutput) == -1)/*ʧܣش*/ + if( Queue2Buff(pUnifyInfoForOutput) == -1) /*-< Ƿʧ*/ { - ret = 1; - return ret; + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } else { /*ɹ*/ } - ResultofGet = GetNextItem2Proc(blNeedToInit, &chCurProcItemSrc, &pCurProc_Lnk, &pLastDataBuffItem, &pCurDataBuffItem, pUnifyInfoForOutput); - if(ResultofGet < 0)/**/ + ResultofGet = GetNextItem2Proc(blNeedToInit, &chCurProcItemSrc, &pCurProc_Lnk, &pLastDataBuffItem, &pCurDataBuffItem, pUnifyInfoForOutput); /*-< ¸Ԫغ*/ + if(ResultofGet < 0) /*-< úǷʧ*/ { - ret = 1; - return ret; + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } else { /*õһȷ*/ } - while(1)/*ǰĴԪزΪ,˵Ҫ,˵*/ + while(1) /*-< *//*ǰĴԪزΪ,˵Ҫ,˵*/ { /* peipei.wang20111011 mod S */ /*ɾʱжϣ׷Ϊǰʱ - ʼʱģִʱ޵ж*/ /*if(GetTick(pUnifyInfoForOutput) < AbsTimeoutForOutput)*/ - if(IsTimeOut(GetTick(pUnifyInfoForOutput),startTimeoutForOutput,pUnifyInfoForOutput->OutputTimeout) == 0) + if(IsTimeOut(GetTick(pUnifyInfoForOutput),startTimeoutForOutput,pUnifyInfoForOutput->OutputTimeout) == 0) /*-< жϵǰǷʱ*/ /* peipei.wang20111011 mod E */ { /*ݱnametypeidݿлϢ*/ - if(ResultofGet != 0) + if(ResultofGet != 0) /*-< ǷһԪش*/ { - blNeedToInit = 0;/*Ҫʼü*/ + blNeedToInit = 0;/*-< Ҫʼü*/ /* wangpeipei 20120306 Add S */ /* wangpeipei 20120306 Add E */ - switch(chCurProcItemSrc)/*ݵǰҪͨŶԴз*/ + switch(chCurProcItemSrc)/*-< ݵǰҪͨŶԴз*/ { - case ITEMSRC_DATABUFF:/*ֻݻ֣·޴˶*/ - if(pCurDataBuffItem->DataCycleNum == *pUnifyInfoForOutput->CycleNum)/*µ,˵Ҫ뽨*/ + case ITEMSRC_DATABUFF: /*-< Ƿ*//*ֻݻ֣·޴˶*/ + /**/ + funRtn = StSfpOutProData(pUnifyInfoForOutput, &pCurDataBuffItem, pLastDataBuffItem, &pCurProc_Lnk, &nNumsPrtclSnd); /*-< ôݺ*/ + if (1u == funRtn) /*-< úǷɹ*/ { - - if(dsuIsLnkLegal(pUnifyInfoForOutput,pCurDataBuffItem->DevName,&Role)) - {/*Ϸ*/ - if(Role == ROLE_SPON)/*Ϊ*/ - { - /*·Ӵ·൱ԭ·֮ǰһ·pCurProc_LnkǵǰҪͨŶӦ·Ľڵ*/ - /*·ڵ㣬أһ֡*/ - pCurProc_Lnk = InsertLnk(pCurDataBuffItem->DevName,pUnifyInfoForOutput); - if(pCurProc_Lnk == NULL) - { - /*¼¼*/ -#ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ERROR_NULL|LNKMANAGE_POP); - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); - -#endif -#ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ERROR_NULL|LNKMANAGE_POP); - -#endif - - } - else - { - /*·״̬ΪwConAck¼кţ*/ - pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; - pCurProc_Lnk->Lnk_Info.chStatus = STATUS_WCONACK; - /*¼RFCʼк*/ - pCurProc_Lnk->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; - BuildFrame(FRAME_RFC, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput);/*֯RFC֡*/ - /*ԭǰҪ·ʹĽͬɾһ,ԱGetNextItem2Procͳһ*/ - pCurProc_Lnk = pCurProc_Lnk->NextNode; - } - } - else - {} - }/*Ϸκβ*/ - else - { - /*¼¼*/ -#ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"W:"); - PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - WARN|OUTPUT|OBJ_ILLEAGL|ERROR_NULL); - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); -#endif -#ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray,pUnifyInfoForOutput->RecordArraySize, - WARN|OUTPUT|OBJ_ILLEAGL|ERROR_NULL); -#endif - - } + ret = 1u; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } - else/*,ɾڵ*/ - { - /*ɾڵݻԶ˽ڵǰڵ*/ - pCurDataBuffItem = Delete_OutputDataBuff(pLastDataBuffItem, pCurDataBuffItem, pUnifyInfoForOutput); - if(pCurDataBuffItem == NULL_ITEM) - { - /*¼¼*/ -#ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ERROR_NULL|OUTPUT_LNK_PUSH); - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); - -#endif -#ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ERROR_NULL|OUTPUT_LNK_PUSH); - -#endif - - - ret = 1; - return ret; - } - else - {} - } - break; - case ITEMSRC_LNKMNGR: /*ֻ·дڣݻв:ΪݻвڵIJѾGetNextItem2Proc, + break; /*-< ˳ѭ*/ + case ITEMSRC_LNKMNGR: /*-< Ƿ·*//*ֻ·дڣݻв:ΪݻвڵIJѾGetNextItem2Proc, Ӧ·״̬в,˿Բ߶вһµĴ*/ - case ITEMSRC_BOTH: /*߶ʱ,Ҫ·״״̬ۺϿ*/ - switch(pCurProc_Lnk->Lnk_Info.chStatus)/*·״̬*/ + case ITEMSRC_BOTH: /*-< Ƿ·*//*߶ʱ,Ҫ·״״̬ۺϿ*/ + /*Ƿ·*/ + funRtn = StSfpOutProDataLink(pUnifyInfoForOutput, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd); /*-< ô·*/ + if (1u == funRtn) /*-< úǷɹ*/ { - case STATUS_DATA:/*״̬*/ - /*кҪй0*/ - if( (pCurProc_Lnk->Lnk_Info.lLocalSN + 1) == 0 ) - { - pCurProc_Lnk->Lnk_Info.lLocalSN = 1; - } - else - { - pCurProc_Lnk->Lnk_Info.lLocalSN = (pCurProc_Lnk->Lnk_Info.lLocalSN + 1); - } - switch(pCurDataBuffItem->DataStatus)/*ݴ洢ռ״̬*/ - { - case SENT:/*Ѿ*/ - /*֯IDLE֡*/ - BuildFrame(FRAME_IDLE, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput); - break; - case NEED2SEND: - /*ݵǰݴ洢ռ齨DATA֡*/ - BuildFrame(FRAME_DATA, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput); - pCurDataBuffItem->DataStatus = SENT; - break; - default: - break; - } - break; - case STATUS_HALT:/*ͨж״̬*/ - if(pCurProc_Lnk->Lnk_Info.chRole == ROLE_SPON)/*Ϊ*/ - { - /*˵¶һǼⷢ𷽶״*/ - for( i = 0;i < DSUNumNodes;i++)/*ҶӦͼϢ*/ - {/*ǵԭȴӿյλÿʼд,Ѿй·䵥Ԫ,·䵥Ԫ*/ - if (pUnifyInfoForOutput->NumBuildLink[i].DevName == 0x00)/*˵ǿհ׵Ԫ*/ - { - pUnifyInfoForOutput->NumBuildLink[i].DevName = pCurDataBuffItem->DevName; - pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++;/*ۻ+1*/ - break;/**/ - } - else - { - /**/ - } - if (pUnifyInfoForOutput->NumBuildLink[i].DevName == pCurDataBuffItem->DevName)/*ҵȵļ*/ - { - pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++;/*ۻ+1*/ - break; - } - else - { - /*ûҵ*/ - } - } - /*·״̬ΪwConAck¼к,½ճʱ*/ - pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; - pCurProc_Lnk->Lnk_Info.chStatus = STATUS_WCONACK; - pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle = 0; - /*¼RFCʼк*/ - pCurProc_Lnk->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; - /*֯RFC֡*/ - BuildFrame(FRAME_RFC, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput); - } - else - {} - break; - case STATUS_PRECON:/*յRFC׼ACK״̬*/ - if(pCurProc_Lnk->Lnk_Info.chRole == ROLE_FLW)/*Ϊ淽*/ - { - /*Ǽ淽״*/ - /*˵¶һλǵһν,ڵһη䵥ԪʱûбҪ++*/ - for(i = 0;i < DSUNumNodes;i++)/*ҶӦͼϢ*/ - {/*ǵԭȴӿյλÿʼд,Ѿй·䵥Ԫ,·䵥Ԫ*/ - if (pUnifyInfoForOutput->NumBuildLink[i].DevName == 0x00)/*˵ǿհ׵Ԫ*/ - { - pUnifyInfoForOutput->NumBuildLink[i].DevName = pCurDataBuffItem->DevName; - pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++;/*ۻ+1*/ - break;/**/ - } - else - { - /**/ - } - if (pUnifyInfoForOutput->NumBuildLink[i].DevName == pCurDataBuffItem->DevName)/*ҵȵļ*/ - { - pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++;/*ۻ+1*/ - break; - } - else - { - /*ûҵ*/ - } - } - /*·״̬ΪDATA¼кţ*/ - pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; - pCurProc_Lnk->Lnk_Info.chStatus = STATUS_DATA; - /*¼ACK֡ʼк*/ - pCurProc_Lnk->Lnk_Info.AckSN = pUnifyInfoForOutput->RadamSN; - /*RFC齨ACK֡*/ - BuildFrame(FRAME_ACK, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput); - } - else - { - /*Ϊ𷽣*/ -#ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ROLE_STATUS_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); - -#endif -#ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ROLE_STATUS_CONFLICT|ERROR_NULL); - -#endif - - } - break; - case STATUS_WCONACK: /*ȴACK״̬*/ - /*ҪACKǷʱжǷҪؽ*/ - if( pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle >= pCurProc_Lnk->Lnk_Info.nACKTOut ) - {/*½*/ - if(pCurProc_Lnk->Lnk_Info.chRole != ROLE_SPON)/*Ƿδ֪*/ - { - /*¼¼*/ -#ifdef PRTCL_RECORD_ERR_ASC - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"E:"); - PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ROLE_STATUS_CONFLICT|ERROR_NULL); - PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"\n"); - -#endif -#ifdef PRTCL_RECORD_SIMPLIFY_BIN - PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, - ERR|OUTPUT|ROLE_STATUS_CONFLICT|ERROR_NULL); - -#endif - - ret = 1; - return ret;/**/ - } - else - { - /*Ƿ𷽣ִIJ*/ - } - /*·״̬ΪwConAck¼к,½ճʱ*/ - pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; - pCurProc_Lnk->Lnk_Info.chStatus = STATUS_WCONACK; - pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle = 0; - /*¼RFCʼк*/ - pCurProc_Lnk->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; - /*֯RFC֡*/ - BuildFrame(FRAME_RFC, pCurDataBuffItem, pCurProc_Lnk, &nNumsPrtclSnd, pUnifyInfoForOutput); - } - else - { - /*ûгʱ*/ - } - break; - default: - break; + ret = 1u; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } - break; - default: - break; + break; /*-< ˳ѭ*/ + default: /*-< */ + /*Ƿ·*/ + break; /*-< ˳ѭ*/ } - ResultofGet = GetNextItem2Proc(blNeedToInit, &chCurProcItemSrc, &pCurProc_Lnk, &pLastDataBuffItem, &pCurDataBuffItem, pUnifyInfoForOutput); - if(ResultofGet < 0) /*Ϊһεѭ׼*/ + ResultofGet = GetNextItem2Proc(blNeedToInit, &chCurProcItemSrc, &pCurProc_Lnk, &pLastDataBuffItem, &pCurDataBuffItem, pUnifyInfoForOutput); /*-< ¸Ԫغ*/ + if(ResultofGet < 0) /*-< úǷʧ*/ { - ret = 1; - return ret; + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } else { @@ -1564,7 +1324,7 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ } else { - break;/*ȡϣѭ*/ + break; /*-< ˳ѭ*/ } } else @@ -1578,31 +1338,32 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ʱ־*/ PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, ERR|OUTPUT|ERROR_NULL|TIMEOUT); #endif - break; + break; /*-< ˳ѭ*/ } } - /*ݳ,λȽ*/ + /*- ӵ֡ݳ*/ LongToChar( (UINT32)(nNumsPrtclSnd - 8),temp_char); - /*ݳ0*/ + /*ݳ0*/ pUnifyInfoForOutput->PrtclSndBuff[4] = temp_char[0]; pUnifyInfoForOutput->PrtclSndBuff[5] = temp_char[1]; pUnifyInfoForOutput->PrtclSndBuff[6] = temp_char[2]; pUnifyInfoForOutput->PrtclSndBuff[7] = temp_char[3]; - /*·Ϣ*/ + /*- ·Ϣ*/ CurFillLnk = pUnifyInfoForOutput->LnkHead;/*λ·ͷָ*/ /*¼¼*/ #ifdef PRTCL_RECORD_DATA_ASC PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,"Links:\n"); #endif - while (CurFillLnk != NULL) + while (CurFillLnk != NULL) /*-< ǰ·Ƿǿ*/ { - if((pUnifyInfoForOutput->PrtclSndBuffSize - nNumsPrtclSnd) < LNKFRAMELEN) + if((pUnifyInfoForOutput->PrtclSndBuffSize - nNumsPrtclSnd) < LNKFRAMELEN) /*-< ǷС·ݳ*/ { /*¼¼*/ #ifdef PRTCL_RECORD_ERR_ASC @@ -1618,27 +1379,27 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ #endif - /*֡*/ + /*- ֡*/ LongToChar( (UINT32)(nNumsPrtclSnd - 4),temp_char);/*ݳȵĸֽ*/ - /*鳤Ȳ¼ij*/ + /*- 鳤Ȳ¼ij*/ pUnifyInfoForOutput->PrtclSndBuff[0] = temp_char[0]; pUnifyInfoForOutput->PrtclSndBuff[1] = temp_char[1]; pUnifyInfoForOutput->PrtclSndBuff[2] = temp_char[2]; pUnifyInfoForOutput->PrtclSndBuff[3] = temp_char[3]; - ret = 1; - return ret; + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } else { /*ֽȷ*/ } - /*ض·*/ + /*- ض·*/ FillLnkMngr_into_PrtclSnd(CurFillLnk, &nNumsPrtclSnd, pUnifyInfoForOutput); /*¼¼,·״̬Ϣ*/ /*ǰ·Ľڵһڵ*/ CurFillLnk = CurFillLnk->NextNode; } - /*֡*/ + /*- ݳ*/ LongToChar( (UINT32)(nNumsPrtclSnd - 4),temp_char);/*ݳȵֽ*/ pUnifyInfoForOutput->PrtclSndBuff[0] = temp_char[0]; pUnifyInfoForOutput->PrtclSndBuff[1] = temp_char[1]; @@ -1655,6 +1416,7 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ #endif #ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼־*/ PrintRecArrayByte(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, 0xE0); /*鳤*/ @@ -1673,8 +1435,8 @@ UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo)/* %RELAX */ PrintFilec(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize,'\n'); #endif - ret = 1; - return ret; + ret = 1; /*-< úֵΪ1*/ + return ret; /*-< غֵ*/ } /* @@ -1883,4 +1645,312 @@ void SfpSetSwapDataForOut(UINT8 swapData[], UINT8 outData[], struc_Unify_Info* s PrintRecArray2ByteB(record, recordSize, swapDataLen); } } +} + +/** + * @brief StSfpOutProData + * @param pUnifyInfoForOutput sfp ȡֵΧ:οṹstruc_Unify_Info + * @param pCurDataBuffItem ǰԪ ȡֵΧ:οöstruc_OutputDataBuff + * @param pLastDataBuffItem ֮ǰԪ ȡֵΧ:οöstruc_OutputDataBuff + * @param pCurProc_Lnk ǰ· ȡֵΧ:οöstruc_Lnk_Mngr + * @param nNumsPrtclSnd ± ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StSfpOutProData(struc_Unify_Info* pUnifyInfoForOutput, struc_OutputDataBuff** pCurDataBuffItem, struc_OutputDataBuff* pLastDataBuffItem, struc_Lnk_Mngr** pCurProc_Lnk, UINT32* nNumsPrtclSnd) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ0*/ + UINT8 Role = 0u; + + if ((NULL != pUnifyInfoForOutput) && (NULL != pCurDataBuffItem) && (NULL != (*pCurDataBuffItem)) && (NULL != pCurProc_Lnk) && (NULL != nNumsPrtclSnd)) /*-< Ƿǿ*/ + { + if ((*pCurDataBuffItem)->DataCycleNum == (*(pUnifyInfoForOutput->CycleNum))) /*-< Ƿ*//*µ,˵Ҫ뽨*/ + { + if (dsuIsLnkLegal(pUnifyInfoForOutput, (*pCurDataBuffItem)->DevName, &Role)) /*-< úñ*/ + {/*Ϸ*/ + if (Role == ROLE_SPON) /*-< ǷΪ*/ + { + /*·Ӵ·൱ԭ·֮ǰһ·pCurProc_LnkǵǰҪͨŶӦ·Ľڵ*/ + /*·ڵ㣬أһ֡*/ + (*pCurProc_Lnk) = InsertLnk((*pCurDataBuffItem)->DevName, pUnifyInfoForOutput); /*-< ò·*/ + if ((*pCurProc_Lnk) == NULL) /*-< ·ǷΪ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ERROR_NULL | LNKMANAGE_POP); + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼·Ϊ־*/ + PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ERROR_NULL | LNKMANAGE_POP); + +#endif + + } + else + { + /*- ·״̬ΪwConAck¼к*/ + (*pCurProc_Lnk)->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; + (*pCurProc_Lnk)->Lnk_Info.chStatus = STATUS_WCONACK; + /*- ¼RFCʼк*/ + (*pCurProc_Lnk)->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; + BuildFrame(FRAME_RFC, (*pCurDataBuffItem), (*pCurProc_Lnk), nNumsPrtclSnd, pUnifyInfoForOutput); /*-< ֯RFC֡*/ + /*- ԭǰҪ·ʹĽͬɾһ,ԱGetNextItem2Procͳһ*/ + (*pCurProc_Lnk) = (*pCurProc_Lnk)->NextNode; + } + } + else + { + } + }/*Ϸκβ*/ + else + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "W:"); + PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + WARN | OUTPUT | OBJ_ILLEAGL | ERROR_NULL); + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "\n"); +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼õʹ־*/ + PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + WARN | OUTPUT | OBJ_ILLEAGL | ERROR_NULL); +#endif + + } + } + else/*,ɾڵ*/ + { + /*ɾڵݻԶ˽ڵǰڵ*/ + (*pCurDataBuffItem) = Delete_OutputDataBuff(pLastDataBuffItem, (*pCurDataBuffItem), pUnifyInfoForOutput); /*-< ɾڵ㺯*/ + if ((*pCurDataBuffItem) == NULL_ITEM) /*-< úǷʧ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ERROR_NULL | OUTPUT_LNK_PUSH); + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ɾڵ־*/ + PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ERROR_NULL | OUTPUT_LNK_PUSH); + +#endif + + + rtnVal = 1u; /*-< úֵΪ1*/ + } + else + { + } + } + } + else + { + rtnVal = 1u; /*-< úֵΪ1*/ + } + + return rtnVal; /*-< غֵ*/ +} + +/** + * @brief StSfpOutProDataLink · + * @param pUnifyInfoForOutput sfp ȡֵΧ:οṹstruc_Unify_Info + * @param pCurDataBuffItem ǰԪ ȡֵΧ:οöstruc_OutputDataBuff + * @param pCurProc_Lnk ǰ· ȡֵΧ:οöstruc_Lnk_Mngr + * @param nNumsPrtclSnd ± ȡֵΧ:0x00000000-0xFFFFFFFF + * @return 0:˳ 1:˳ + */ +static UINT8 StSfpOutProDataLink(struc_Unify_Info* pUnifyInfoForOutput, struc_OutputDataBuff* pCurDataBuffItem, struc_Lnk_Mngr* pCurProc_Lnk, UINT32* nNumsPrtclSnd) +{ + /*- ֲ*/ + UINT8 rtnVal = 0u; /*-< úֵΪ0*/ + UINT16 i = 0u; + UINT16 DSUNumNodes = 0u; /*ݿнڵ*/ + + if ((NULL != pUnifyInfoForOutput) && (NULL != pCurDataBuffItem) && (NULL != pCurProc_Lnk) ) /*-< Ƿǿ*/ + { + DSUNumNodes = dsuGetObjNum(pUnifyInfoForOutput); /*-< õݿнڵ*/ + + switch (pCurProc_Lnk->Lnk_Info.chStatus) /*-< ж·״̬*/ + { + case STATUS_DATA: /*-< Ƿ״̬*/ + /*кҪй0*/ + if ((pCurProc_Lnk->Lnk_Info.lLocalSN + 1) == 0) /*-< +1ǷΪ0*/ + { + pCurProc_Lnk->Lnk_Info.lLocalSN = 1; /*-< ñ1*/ + } + else + { + pCurProc_Lnk->Lnk_Info.lLocalSN = (pCurProc_Lnk->Lnk_Info.lLocalSN + 1); /*-< ñż1*/ + } + switch (pCurDataBuffItem->DataStatus) /*-< Ƿݴ洢ռ״̬*/ + { + case SENT: /*-< Ƿ񷢿*/ + /*֯IDLE֡*/ + BuildFrame(FRAME_IDLE, pCurDataBuffItem, pCurProc_Lnk, nNumsPrtclSnd, pUnifyInfoForOutput); /*-< ù֡֡*/ + break; /*-< ˳*/ + case NEED2SEND: /*-< Ƿ*/ + /*ݵǰݴ洢ռ齨DATA֡*/ + BuildFrame(FRAME_DATA, pCurDataBuffItem, pCurProc_Lnk, nNumsPrtclSnd, pUnifyInfoForOutput); /*-< ù֡֡*/ + pCurDataBuffItem->DataStatus = SENT; /*-< ״̬Ϊ*/ + break; /*-< ˳*/ + default: /*-< */ + /**/ + break; /*-< ˳*/ + } + break; /*-< ˳*/ + case STATUS_HALT: /*-< Ƿͨж״̬*/ + if (pCurProc_Lnk->Lnk_Info.chRole == ROLE_SPON) /*-< Ƿ񱾷Ϊ*/ + { + /*˵¶һǼⷢ𷽶״*/ + for (i = 0; i < DSUNumNodes; i++) /*-< ҶӦͼϢ*/ + {/*ǵԭȴӿյλÿʼд,Ѿй·䵥Ԫ,·䵥Ԫ*/ + if (pUnifyInfoForOutput->NumBuildLink[i].DevName == 0x00) /*-< Ƿ·豸Ϊ0*/ + { + pUnifyInfoForOutput->NumBuildLink[i].DevName = pCurDataBuffItem->DevName; /*-< 豸ΪԪ豸*/ + pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++; /*-< ۻ1*/ + break; /*-< ˳*/ + } + else + { + /**/ + } + if (pUnifyInfoForOutput->NumBuildLink[i].DevName == pCurDataBuffItem->DevName) /*-< Ƿ·豸ΪԪ豸*/ + { + pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++; /*-< ۻ1*/ + break; /*-< ˳*/ + } + else + { + /*ûҵ*/ + } + } + /*- ·״̬ΪwConAck¼к,½ճʱ*/ + pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; + pCurProc_Lnk->Lnk_Info.chStatus = STATUS_WCONACK; + pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle = 0; + /*- ¼RFCʼк*/ + pCurProc_Lnk->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; + /*- ֯RFC֡*/ + BuildFrame(FRAME_RFC, pCurDataBuffItem, pCurProc_Lnk, nNumsPrtclSnd, pUnifyInfoForOutput); + } + else + { + } + break; /*-< ˳*/ + case STATUS_PRECON: /*-< ǷյRFC׼ACK״̬*/ + if (pCurProc_Lnk->Lnk_Info.chRole == ROLE_FLW) /*-< Ϊ淽*/ + { + /*Ǽ淽״*/ + /*˵¶һλǵһν,ڵһη䵥ԪʱûбҪ++*/ + for (i = 0; i < DSUNumNodes; i++) /*-< ҶӦͼϢ*/ + {/*ǵԭȴӿյλÿʼд,Ѿй·䵥Ԫ,·䵥Ԫ*/ + if (pUnifyInfoForOutput->NumBuildLink[i].DevName == 0x00) /*-< Ƿ·豸Ϊ0*/ + { + pUnifyInfoForOutput->NumBuildLink[i].DevName = pCurDataBuffItem->DevName; /*-< 豸ΪԪ豸*/ + pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++; /*-< ۻ1*/ + break; /*-< ˳*/ + } + else + { + /**/ + } + if (pUnifyInfoForOutput->NumBuildLink[i].DevName == pCurDataBuffItem->DevName) /*-< Ƿ·豸ΪԪ豸*/ + { + pUnifyInfoForOutput->NumBuildLink[i].nTotalNums_DuanLian++; /*-< ۻ1*/ + break; /*-< ˳*/ + } + else + { + /*ûҵ*/ + } + } + /*- ·״̬ΪDATA,¼к*/ + pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; + pCurProc_Lnk->Lnk_Info.chStatus = STATUS_DATA; + /*- ¼ACK֡ʼк*/ + pCurProc_Lnk->Lnk_Info.AckSN = pUnifyInfoForOutput->RadamSN; + /*- RFC齨ACK֡*/ + BuildFrame(FRAME_ACK, pCurDataBuffItem, pCurProc_Lnk, nNumsPrtclSnd, pUnifyInfoForOutput); + } + else + { + /*Ϊ𷽣*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ROLE_STATUS_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼״̬־*/ + PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ROLE_STATUS_CONFLICT | ERROR_NULL); + +#endif + + } + break; + case STATUS_WCONACK: /*-< ǷȴACK״̬*/ + /*ҪACKǷʱжǷҪؽ*/ + if (pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle >= pCurProc_Lnk->Lnk_Info.nACKTOut) /*-< Ƿ񳬵ACK*/ + {/*½*/ + if (pCurProc_Lnk->Lnk_Info.chRole != ROLE_SPON) /*-< ǷǷ*/ + { + /*¼¼*/ +#ifdef PRTCL_RECORD_ERR_ASC + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "E:"); + PrintFileU16Hex(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ROLE_STATUS_CONFLICT | ERROR_NULL); + PrintFiles(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, "\n"); + +#endif +#ifdef PRTCL_RECORD_SIMPLIFY_BIN + /*- ¼ɫ־*/ + PrintRecArray2ByteB(pUnifyInfoForOutput->RecordArray, pUnifyInfoForOutput->RecordArraySize, + ERR | OUTPUT | ROLE_STATUS_CONFLICT | ERROR_NULL); + +#endif + + rtnVal = 1u; /*-< úֵΪ1*/ + } + else + { + /*Ƿ𷽣ִIJ*/ + } + /*- ·״̬ΪwConAck,¼к,½ճʱ*/ + pCurProc_Lnk->Lnk_Info.lLocalSN = pUnifyInfoForOutput->RadamSN; + pCurProc_Lnk->Lnk_Info.chStatus = STATUS_WCONACK; + pCurProc_Lnk->Lnk_Info.chNoDataRcvCycle = 0; + /*- ¼RFCʼк*/ + pCurProc_Lnk->Lnk_Info.RfcSN = pUnifyInfoForOutput->RadamSN; + /*- ֯RFC֡*/ + BuildFrame(FRAME_RFC, pCurDataBuffItem, pCurProc_Lnk, nNumsPrtclSnd, pUnifyInfoForOutput); + } + else + { + /*ûгʱ*/ + } + break; /*-< ˳*/ + default: /*-< */ + /**/ + break; /*-< ˳*/ + } + } + else + { + rtnVal = 1u; /*-< úֵΪ1*/ + } + + return rtnVal; /*-< غֵ*/ } \ No newline at end of file diff --git a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpplatform.h b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpplatform.h index f9f1319..6e9fe8f 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpplatform.h +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp/sfpplatform.h @@ -129,22 +129,12 @@ extern "C" { *******************************************************************************************/ UINT8 ProtclReceive(struc_Unify_Info *pUnifyInfo); - -/****************************************************************************************** -* : ЭԪ,ЭĹ,Ӧô֡, - ΪݱȽϵԪ׼ñ,ͬʱά· -* : -* : struc_Unify_Info* pUnifyInfo Эͳһṹָ -* : -* ȫֱ : UINT32 nNumsPrtclSnd Эݵĸ(ֽΪλ) - struc_Lnk_Mngr *pCurProc_Lnk ·еǰĵ·ָ,ָ룬ʵ* - UINT8 chCurProcItemSrc ǰҪԪصԴ ITEMSRC_BOTH (ݶк·) 0x17;ITEMSRC_DATAQUEUE (ݶ) 0x33;ITEMSRC_LNKMNGR(·) 0x55 - struc_OutputDataBuff *pLastDataBuffItem ʾǰݴ洢Ԫָ - struc_OutputDataBuff *pCurDataBuffItem ʾһδݴ洢Ԫָ - struc_Unify_Info *pUnifyInfoForOutput ƽ̨ṹָ -* ֵ : ȷ1󷵻0 -*******************************************************************************************/ -UINT8 ProtclOutput(struc_Unify_Info *pUnifyInfo); +/** + * @brief ProtclOutput ЭԪ,ЭĹ,Ӧô֡ + * @param pUnifyInfo sfp ȡֵΧ:οṹstruc_Unify_Info + * @return 0:ʧ 1:ɹ + */ +UINT8 ProtclOutput(struc_Unify_Info* pUnifyInfo); /****************************************************************************************** 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..dcc2033 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 @@ -21,7 +21,7 @@ #define PRTCL_RECORD_SIMPLIFY_BIN /*Ƽ¼*/ #define USE_DSU_SFP /*ʹSFPѯ*/ -/*#define SWAP_CRC */ /*CRC*/ +#define SWAP_CRC /*CRC*/ #else #endif