From d1e26124c442d1bf1a3f05ce85b9ec6adbf07b1f Mon Sep 17 00:00:00 2001 From: lh <3191213465@qq.com> Date: Fri, 22 May 2026 16:33:01 +0800 Subject: [PATCH] =?UTF-8?q?[9.4.2]=209.4.2=E9=A6=96=E7=89=88=E4=B8=80?= =?UTF-8?q?=E5=9B=9E=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=9F=BA=E7=BA=BF=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci_integrate_config.h | 2 +- .../APP/ciapp/AxisAssert/AxisAssertManage.c | 3 + .../ciapp/AxisAssert/AxisAssertManageAPI.c | 170 +++- TSCP/src/APP/ciapp/ERROR/ErrorDefine.h | 10 - .../src/APP/ciapp/IO/DeviceRelayDataProcess.c | 45 +- .../src/APP/ciapp/IO/DeviceRelayDataProcess.h | 9 + TSCP/src/APP/ciapp/IO/OutputDataProcess.c | 27 - TSCP/src/APP/ciapp/Initial/InitialProcess.c | 1 + TSCP/src/APP/ciapp/LogRecord/LogRecord.c | 2 + .../ciapp/LogicManage/InterlockLogicManage.c | 41 +- .../ciapp/LogicManage/RouteRecoverManage.c | 21 +- .../ciapp/LogicProcess/InterlockLogicCheck.c | 168 +++- .../ciapp/LogicProcess/InterlockLogicCheck.h | 20 + .../LogicProcess/InterlockLogicProcess.c | 122 +++ .../APP/ciapp/ParsePack/ParsePackAtsData.c | 6 +- .../src/APP/ciapp/ParsePack/ParsePackCommon.c | 5 +- .../APP/ciapp/ParsePack/ParsePackVobcData.c | 174 +++- .../APP/ciapp/ParsePack/ParsePackVobcData.h | 13 +- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c | 92 +- TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h | 8 + .../src/APP/ciapp/QueryFiles/dquCIInterFace.c | 3 - TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h | 8 + .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.c | 46 + .../APP/ciapp/QueryFiles/dquCILSStruFrmChar.h | 9 + .../APP/ciapp/QueryFiles/dquCILSStruInit.c | 88 ++ .../APP/ciapp/QueryFiles/dquCILSStruInit.h | 9 + .../APP/ciapp/Route/RouteConfigDataManage.c | 76 +- .../APP/ciapp/Route/RouteConfigDataManage.h | 30 +- TSCP/src/APP/ciapp/Route/RouteDefine.h | 4 +- .../APP/ciapp/Section/AxisSectionDataManage.c | 89 +- .../APP/ciapp/Section/AxisSectionDataManage.h | 27 + .../ciapp/Section/LogicSectionDataManage.c | 38 +- .../Section/PhysicalSectionConfigDataManage.c | 199 +++- .../Section/PhysicalSectionConfigDataManage.h | 47 +- TSCP/src/APP/ciapp/Section/SectionDefine.h | 4 + .../src/APP/ciapp/System/SystemConfigDefine.h | 6 +- .../APP/ciapp/System/SystemParameterManage.c | 13 - .../APP/ciapp/System/SystemParameterManage.h | 8 +- TSCP/src/APP/ciapp/Train/TrainDataManage.c | 29 +- TSCP/src/APP/ciapp/Train/TrainDefine.h | 4 +- TSCP/src/DRV/imx8_drv_gpio.c | 779 +-------------- TSCP/src/DRV/imx8_drv_gpio.h | 163 --- TSCP/src/MSCP/CFM/CFM_Net.c | 60 +- TSCP/src/MSCP/DFM/DFM_DRV.h | 3 - TSCP/src/MSCP/DFM/DFM_DRV_QNX.c | 6 + TSCP/src/MSCP/MSCP_APP_API.c | 12 +- TSCP/src/MSCP/MSCP_main.c | 10 +- TSCP/src/MSCP/PFM/PFM_Cfg.c | 46 +- TSCP/src/MSCP/PFM/PFM_Cfg.h | 4 + TSCP/src/MSCP/PFM/PFM_InputOutput.c | 68 +- TSCP/src/MSCP/PFM/PFM_Log.c | 131 ++- TSCP/src/MSCP/PFM/PFM_Log.h | 8 + TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c | 9 +- TSCP/src/MSCP/SFM/SFM_2oo2.c | 79 +- TSCP/src/MSCP/SFM/SFM_2x2.c | 544 ++++++---- TSCP/src/MSCP/SFM/SFM_2x2.h | 2 + TSCP/src/MSCP/SFM/SFM_Prtcl.c | 10 +- .../dqu_cbtc_common/dquCbtcConfigData.c | 3 + .../dqu_cbtc_common/dquCbtcConfigData.h | 2 +- .../fsfb/common_fsfb/FsfbMessageInfo.c | 938 +++++++++--------- .../protocol/fsfb/common_fsfb/FsfbProtcl.c | 686 ++++++------- .../fsfb/common_fsfb/FsfbRecordDelare.h | 164 +-- .../common_sfp_nr_config/sfpConfig.h | 30 +- 数据/FS_1_20260305_113139-正常数据.zip | 3 + 64 files changed, 3009 insertions(+), 2427 deletions(-) create mode 100644 数据/FS_1_20260305_113139-正常数据.zip diff --git a/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h b/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h index a76b1d0..ae32e5f 100644 --- a/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h +++ b/TSCP/src/APP/PU13_integration_config/ci_integrate_config.h @@ -30,6 +30,6 @@ #define VER_INTE_PROJECT 220 /*Ŀ*/ #define VER_INTE_PRODUCT 40 /*Ʒ*/ #define VER_INTE_EXE 1 /*ִб*/ -#define VER_INTE_TIME 101 /*ɴ*/ +#define VER_INTE_TIME 119 /*ɴ*/ #endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/ \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c index 7537494..e525f8b 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManage.c @@ -182,9 +182,12 @@ UINT8 aam_SetAxisAssert(UINT16 acIndex,const AxisAsserStruct* pBuff) */ void aam_ResetAxisAssertByACIndex(UINT16 acIndex) { + UINT8 chCanArbTag = 0U;/*Arbж*/ if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX)) { + chCanArbTag = gs_AxisAssert[acIndex].redunOverCanArb; (void)CommonMemSet(&gs_AxisAssert[acIndex], (UINT32)sizeof(AxisAsserStruct),0, (UINT32)sizeof(AxisAsserStruct)); + gs_AxisAssert[acIndex].redunOverCanArb = chCanArbTag; } } diff --git a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c index 0676797..c1e012e 100644 --- a/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c +++ b/TSCP/src/APP/ciapp/AxisAssert/AxisAssertManageAPI.c @@ -319,6 +319,8 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex) UINT8 cAxisCommBadArbFlag = AAM_COMM_BAD_ARB_NO; UINT8 chPhyTrainCheck = CI_SUCCESS; UINT8 cAcCbtcAttr = 0U; /*CBTC*/ + UINT8 cAcRelEnvelopeCnt = 0U; /*ΰ*/ + EnvelopeStruct strEnvelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; chSwitch = aam_PrepareArbSwitch(); if (CI_SUCCESS == chSwitch) @@ -449,28 +451,36 @@ 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 - { - /*ARBͬڼռ*/ - funRtn = aam_ArbContinuousOccCheck(acID, acSameCnt, acSameID); - - /*ARBηڼռ*/ - funRtn &= aam_ArbContinuousOccCheck(acID, acConvertCnt, acConvertID); - - if (CI_SUCCESS != funRtn) + { + cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(acID, strEnvelopeInfo); + if ((0U < cAcRelEnvelopeCnt) && (SECTION_REL_ENVELOPE_SUM_MAX > cAcRelEnvelopeCnt)) { - /** ֮ǰʱλ */ - funRtn = aam_ClearPassTrainFlag(acIndex); - ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000U); - - funRtn = aam_ClearRedunTime(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 Continuous Occ\n", acID); + /*ARBδڰ磬ARBռж*/ } else { - /*ռüͨάARB״̬*/ + /*ARBͬڼռ*/ + funRtn = aam_ArbContinuousOccCheck(acID, acSameCnt, acSameID); + + /*ARBηڼռ*/ + funRtn &= aam_ArbContinuousOccCheck(acID, acConvertCnt, acConvertID); + + if (CI_SUCCESS != funRtn) + { + /** ֮ǰʱλ */ + funRtn = aam_ClearPassTrainFlag(acIndex); + ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000U); + + funRtn = aam_ClearRedunTime(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 Continuous Occ\n", acID); + } + else + { + /*ռüͨάARB״̬*/ + } } } } @@ -1559,7 +1569,7 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID) UINT8 retVal = CI_ERROR; UINT8 phyAcNum = 0u; UINT16* pACBuff = NULL; - UINT16 wBasePhyid = 0U; + UINT16 wBasePhyid = 0U;/*׼*/ UINT8 jj = 0U; UINT8 ii = 0U; UINT8 chKeepcheck = CI_SUCCESS; /*־*/ @@ -1571,7 +1581,10 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID) UINT8 chAdjacentPhyNum = 0U; /*ֱ*/ UINT8 chNearSecNum = 0U; /**/ UINT16* dwNearSecBuf = NULL; /**/ - + UINT8 chSwitchPosCheck = CI_ERROR;/*ǰ*/ + UINT16 wPreSecId = 0U;/*εת*/ + UINT16 wSndPreSecId = 0U;/*ת*/ + UINT8 chPreSecNearCheck = 0U;/*εתǷֱ*/ cyCheckUtCyc = GetArbProtectCheckTime(); wBasePhyid = aam_PrepareACBelongPhyid(ACID); @@ -1614,28 +1627,38 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID) for (ii = 0; ii < chAdjacentPhyNum; ii++) { wCheckPhySec = wAdjacentPhyBuf[ii]; - phyAcNum = GetPAxisSectionSum(wCheckPhySec); - pACBuff = GetPAxisSectionIdBuf(wCheckPhySec); - /*ռ*/ - if ((0U != phyAcNum) && (NULL != pACBuff)) - { - for (jj = 0; jj < phyAcNum; jj++) + chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wCheckPhySec); + if (CI_SUCCESS == chSwitchPosCheck) + { + /* ڽлռȡΪӽ*/ + phyAcNum = GetPAxisSectionSum(wCheckPhySec); + pACBuff = GetPAxisSectionIdBuf(wCheckPhySec); + /*ռ*/ + if ((0U != phyAcNum) && (NULL != pACBuff)) { - dwRecentUtCyc = GetAxisRecentUtOccupyCyc(pACBuff[jj]); - chTimeFlag = SystemOverTimeCheck(dwRecentUtCyc, cyCheckUtCyc); - if (CI_TIME_IN == chTimeFlag) + for (jj = 0; jj < phyAcNum; jj++) { - /*ʱ䷶Χ Ϊӽ*/ - chKeepcheck = CI_ERROR; - retVal = CI_ERROR; - debug_infor_printf((const)"ACid: %d , ArbNearSecCheck fail step2, PhySec = %d\n", ACID, wCheckPhySec); - break; + dwRecentUtCyc = GetAxisRecentUtOccupyCyc(pACBuff[jj]); + chTimeFlag = SystemOverTimeCheck(dwRecentUtCyc, cyCheckUtCyc); + if (CI_TIME_IN == chTimeFlag) + { + /*ʱ䷶Χ*/ + chKeepcheck = CI_ERROR; + retVal = CI_ERROR; + debug_infor_printf((const)"ACid: %d , ArbNearSecCheck fail step2, PhySec = %d\n", ACID, wCheckPhySec); + break; + } } } + else + { + chKeepcheck = CI_ERROR; + } } else { - chKeepcheck = CI_ERROR; + ;/**/ + debug_infor_printf((const)"ACid: %d ,AdjacentSec Skip PhySec = %d\n", ACID, wCheckPhySec); } } } @@ -1653,28 +1676,57 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID) for (ii = 0; ii < chNearSecNum; ii++) { wCheckPhySec = dwNearSecBuf[ii]; - phyAcNum = GetPAxisSectionSum(wCheckPhySec); - pACBuff = GetPAxisSectionIdBuf(wCheckPhySec); - /*ռ*/ - if ((0U != phyAcNum) && (NULL != pACBuff)) + wPreSecId = GetNearSecPreSecId(wBasePhyid, wCheckPhySec); + chPreSecNearCheck = CheckPhySecIfAdjacent(wBasePhyid, wPreSecId); + if (CI_SUCCESS == chPreSecNearCheck) { - for (jj = 0; jj < phyAcNum; jj++) + /*ֱοɴֱοɴ*/ + chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wPreSecId); + chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wPreSecId, wCheckPhySec); + } + else + { + /*ΣҪÿɴ*/ + wSndPreSecId = GetNearSecPreSecId(wBasePhyid, wPreSecId); + chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wSndPreSecId); + chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wSndPreSecId, wPreSecId); + chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wPreSecId, wCheckPhySec); + } + if (CI_SUCCESS == chSwitchPosCheck) + { + /* ڽɴлռȡΪӽ*/ + phyAcNum = GetPAxisSectionSum(wCheckPhySec); + pACBuff = GetPAxisSectionIdBuf(wCheckPhySec); + /*ռ*/ + if ((0U != phyAcNum) && (NULL != pACBuff)) { - dwRecentUtCyc = GetAxisRecentUtOccupyCyc(pACBuff[jj]); - chTimeFlag = SystemOverTimeCheck(dwRecentUtCyc, cyCheckUtCyc); - if (CI_TIME_IN == chTimeFlag) + for (jj = 0; jj < phyAcNum; jj++) { - /*ʱ䷶Χ Ϊӽ*/ - chKeepcheck = CI_ERROR; - retVal = CI_ERROR; - debug_infor_printf((const)"ACid: %d , ArbNearSecCheck fail step3, PhySec = %d\n", ACID, wCheckPhySec); - break; + dwRecentUtCyc = GetAxisRecentUtOccupyCyc(pACBuff[jj]); + chTimeFlag = SystemOverTimeCheck(dwRecentUtCyc, cyCheckUtCyc); + if (CI_TIME_IN == chTimeFlag) + { + /*ʱ䷶Χ Ϊӽ*/ + chKeepcheck = CI_ERROR; + retVal = CI_ERROR; + debug_infor_printf((const)"ACid: %d , ArbNearSecCheck fail step3, PhySec = %d\n", ACID, wCheckPhySec); + break; + } } } + else + { + chKeepcheck = CI_ERROR; + } } else { - chKeepcheck = CI_ERROR; + ;/*ɴ״̬ ռòӰ*/ + debug_infor_printf((const)"ACid: %d ,NearSec Skip PhySec = %d\n", ACID, wCheckPhySec); + } + if (CI_SUCCESS != chKeepcheck) + { + break; } } } @@ -2115,12 +2167,14 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId UINT32 dwCurAxleOccStartCycNum = 0U; /*ռʼ*/ UINT8 ii = 0U; UINT16 wNearRelPhySecId = 0U; /*ڼID*/ - UINT8 cAcRelEnvelopeCnt = 0U; + UINT8 cAcRelEnvelopeCnt = 0U; /*ΰ*/ EnvelopeStruct strEnvelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U }; UINT32 dwNearAxleOccStartCycNum = 0U; /*ڼռʼ*/ UINT8 cRcId = 0U; UINT8 cFunRtn = 0U; UINT16 wNearAcIndex = 0U; + UINT8 cPhySecPreOccState = 0U; /*ռ״̬*/ + UINT8 cAxisSecTXSafeLocFlag = 0U; /*гȫλøDZ־*/ wBufIndex = GetAxisSecConfigBufIndex(wAcId); /*ȡ±*/ @@ -2137,12 +2191,18 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId wNearRelPhySecId = GetAxisSecRelativePhySecId(pNearAcId[ii]); if (0U != wNearRelPhySecId) { - cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(pNearAcId[ii], strEnvelopeInfo); - dwNearAxleOccStartCycNum = GetSecColOccupyStartCycNum(wNearRelPhySecId); + cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(pNearAcId[ii], strEnvelopeInfo); /*ȡڼεİϢ*/ + dwNearAxleOccStartCycNum = GetSecColOccupyStartCycNum(wNearRelPhySecId); /*ȡڼβɼռʼ*/ + cPhySecPreOccState = GetPhySecPreOccupyState(wNearRelPhySecId); /*ȡڼڲɼռ״̬*/ + cAxisSecTXSafeLocFlag =GetAxisTXSafeLocFlag(pNearAcId[ii]); /*ȡڼгȫλøDZ־*/ + if (((0U == cAcRelEnvelopeCnt) || (SECTION_REL_ENVELOPE_SUM_MAX == cAcRelEnvelopeCnt)) - && ((dwCurAxleOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwNearAxleOccStartCycNum)) + && ((dwCurAxleOccStartCycNum + dwCiAndAxleTransBadEnsureCnt) < dwNearAxleOccStartCycNum) + && (SECTION_OCCUPY_NO == cPhySecPreOccState) + && (AXIS_SECTION_SAFELOC_YES != cAxisSecTXSafeLocFlag)) { - cRetVal = CI_ERROR; /*ڼްռʼʱ䳬ˡͨжϳʱжʱ䡱*/ + /*ڼް&&ռʼʱ䳬ˡͨжϳʱжʱ䡱&&ڼڲɼΪ&&ڼгȫλø*/ + cRetVal = CI_ERROR; cFunRtn = aam_PrepareACIsSelf(pNearAcId[ii], &cRcId); /*жǷΪ*/ @@ -2162,7 +2222,7 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId } else { - /*ڼռʼδͨжϳʱжʱ䡱*/ + /**/ } } else diff --git a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h index b687668..4bbeb75 100644 --- a/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h +++ b/TSCP/src/APP/ciapp/ERROR/ErrorDefine.h @@ -385,16 +385,6 @@ #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/IO/DeviceRelayDataProcess.c b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c index 7579e4c..c9f4565 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.c @@ -6161,7 +6161,7 @@ void PhySecResetToRelayStateProc(void) {/*ɼZFWJ£ִмḴλ߼*/ retValid = CI_ERROR; tmpRet = SetRelayStateUpdateCycNum(relayZFWId, 0u); /*ZFWܸλ̵Чʼں*/ - + CleanPhySecResetStartCycNum();/*λʼں*/ if (CI_ERROR == tmpRet) { /**/ @@ -16442,4 +16442,47 @@ UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId) } return cRetVal; +} + + +/* +* θλʼ +* ˵ +* ֵ +* עλִָڼ䣬ܸλδһֱ·λָ +* Created By fan 2026.03.24 +*/ +void CleanPhySecResetStartCycNum(void) +{ + UINT16 wPhysecNum = 0U; + UINT16 wPhySecId = 0U; + UINT16 ii = 0U; + UINT8 chZfwValid = CI_ERROR; + UINT16 wZFWrelayId = 0U; + UINT8 chLocalCi = 0U; + chLocalCi = GetSystemParaLocalCiId(); + wPhysecNum = GetPhySecCurSum(); + wZFWrelayId = GetZFWRelayId(chLocalCi);/*鼯Ƿܸλ̵*/ + if (0U < wZFWrelayId) + { + /*ڼḴλ̵ λܸλδ λʼ*/ + for (ii = 0U; ii < wPhysecNum; ii++) + { + wPhySecId = GetPhySecId(ii); + chZfwValid = GetZFWValidByPhySecId(wPhySecId); + /*ܸλ̵ܸλ̵*/ + if (CI_ERROR == chZfwValid) + { + SetPhySecResetStartCycNum(wPhySecId, 0U); + } + else + { + ;/**/ + } + } + } + else + { + ;/**/ + } } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h index a0d2621..246f498 100644 --- a/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h +++ b/TSCP/src/APP/ciapp/IO/DeviceRelayDataProcess.h @@ -984,6 +984,15 @@ UINT8 GetFstDetBtnCollTolerateRet(const UINT16 wSignalId); */ UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId); +/* +* θλʼ +* ˵ +* ֵ +* עλִָڼ䣬ܸλδһֱ·λָ +* Created By fan 2026.03.24 +*/ +void CleanPhySecResetStartCycNum(void); + #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c index 03d62b2..864dda4 100644 --- a/TSCP/src/APP/ciapp/IO/OutputDataProcess.c +++ b/TSCP/src/APP/ciapp/IO/OutputDataProcess.c @@ -902,33 +902,6 @@ 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; diff --git a/TSCP/src/APP/ciapp/Initial/InitialProcess.c b/TSCP/src/APP/ciapp/Initial/InitialProcess.c index 3a41f23..e0d4de9 100644 --- a/TSCP/src/APP/ciapp/Initial/InitialProcess.c +++ b/TSCP/src/APP/ciapp/Initial/InitialProcess.c @@ -959,6 +959,7 @@ UINT8 InitialAxisSectionData(void) AxisSectionDataStru[axisSectionId].dwAxisOccCycNum = 0U; AxisSectionDataStru[axisSectionId].wPosMonitorTrainId = 0U; AxisSectionDataStru[axisSectionId].dwUtOccupyCycNum = 0U; + AxisSectionDataStru[axisSectionId].cAxisTXSafeLocFlag = AXIS_SECTION_SAFELOC_NO; /*ʼͨųȫλø*/ } reVal = CI_SUCCESS; return reVal; diff --git a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c index 6157ce7..5483235 100644 --- a/TSCP/src/APP/ciapp/LogRecord/LogRecord.c +++ b/TSCP/src/APP/ciapp/LogRecord/LogRecord.c @@ -1902,6 +1902,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag) outStringLength += 4u; ShortToChar(newAxisSecData[deviceId].wPosMonitorTrainId, &outString[outStringLength]); /*ලЧгID*/ outStringLength += 2u; + outString[outStringLength] = newAxisSecData[deviceId].cAxisTXSafeLocFlag; /*гȫλøDZ־0x55-Ч0xAA-Ч*/ + outStringLength++; } } else diff --git a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c index 2cce109..a887e03 100644 --- a/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/InterlockLogicManage.c @@ -1646,6 +1646,7 @@ void RouteNearLockErrManage(const UINT16 routeId) UINT8 routeRepeatStat = 0U; UINT8 routeTrainNear = 0U; UINT8 cFuncRetVal = CI_ERROR; + UINT8 cFuncSwitch = 0U; /*ȡ·ʼźŻID*/ startSignalId = GetRouteStartSignalId(routeId); @@ -1673,18 +1674,28 @@ void RouteNearLockErrManage(const UINT16 routeId) {/*֮ǰ*/ if ((CI_SUCCESS == autoSignalValid) || (ROUTE_REPEATOPEN_SET_YES == routeRepeatStat)) { /*ԶźŻؿ*/ - - if (CI_SUCCESS == routeTrainNear) - {/*·гӽ*/ + cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_REOPRN_SET_NEAR); + if(FUNC_SWITCH_ON == cFuncSwitch) + { + /*ؿźǷ·ӽ״̬ءΪ0xAAʱĬý·ӽ*/ SetRouteStateManage(routeId, ROUTE_STATE_NEAR_OPEN); /*-->ýӽ*/ - RouteNearOpenManage(routeId); /*-->·ӽŹ*/ } else - {/*·޳ӽ*/ - SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_OPEN); /*-->Ԥȿ*/ + { + /*ؿźǷ·ӽ״̬ءΪ0x55ʱݽӽռ״̬ý·ӽ/δӽ*/ + if (CI_SUCCESS == routeTrainNear) + {/*·гӽ*/ + SetRouteStateManage(routeId, ROUTE_STATE_NEAR_OPEN); /*-->ýӽ*/ - RouteYuXianOpenManage(routeId); /*·ԤȿŹ*/ + RouteNearOpenManage(routeId); /*-->·ӽŹ*/ + } + else + {/*·޳ӽ*/ + SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_OPEN); /*-->Ԥȿ*/ + + RouteYuXianOpenManage(routeId); /*·ԤȿŹ*/ + } } } else @@ -13033,7 +13044,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, cCheckStep++; if (CI_ERROR == keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_LOGSEC_CONTINUOUS, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_CONTINUOUS, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); } else { @@ -13139,7 +13150,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, if (CI_ERROR == keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_MATCH_ROUTE, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); break; /*ʧܣֹͣ*/ } else @@ -13202,7 +13213,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, if (CI_ERROR == keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_MATCH_ROUTE, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); } else { @@ -13220,7 +13231,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, if (CI_ERROR == keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SCREEN, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); } else { @@ -13418,7 +13429,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_REPEAT, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_REPEAT, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); debug_infor_printf((const)"Dynamic Logic Route Set Is Error: LogicRoute Repeat Set!\n"); /*߼·ظͣ*/ } } @@ -13442,7 +13453,7 @@ void RoutePartApplyLogicManage(const UINT8 cLogSecSeqDir, const UINT16 wTrainId, } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_LOGSEC_CBTC_PROPERTY, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SEC_CBTC, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); debug_infor_printf((const)"Dynamic Logic Route Set Is Error: LogSec Is Not CBTC Property!\n"); /*߼·ʧܣ߼ηCBTC*/ } } @@ -15751,7 +15762,7 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain if (CI_SUCCESS != keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_MATCH_ROUTE, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_MATCH_ROUTE, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); } else { @@ -15771,7 +15782,7 @@ void RoutePartApplyLogicManageCLD(const UINT8 cLogSecSeqDir, const UINT16 wTrain if (CI_SUCCESS != keepWork) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SCREEN, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SCREEN, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); } else { diff --git a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c index 3223da4..bc49d77 100644 --- a/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c +++ b/TSCP/src/APP/ciapp/LogicManage/RouteRecoverManage.c @@ -427,6 +427,26 @@ UINT8 OpenCbtcLTrainRouteErrProcess(const UINT16 routeId, const UINT8 checkStep) { ; } + /*羮ռü*/ + if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecOccuCheck(routeId, &devId, &devState); + if (CI_SUCCESS == checkResult) + { + /* ͨ */ + } + else + { + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /**/ + } /* SPKS */ if ((CI_SUCCESS == reResult) || (CI_ROUTE_RECOVER_ERR == reResult)) @@ -4341,7 +4361,6 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId) { ; } - /*ʹĺRouteIntruSecVainSPKSErrCheck*/ #if 0 /**/ diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c index 360db1c..7aec1e9 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.c @@ -8375,7 +8375,8 @@ UINT8 KeepBlocRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe /*·źŻ۷·*/ UINT8 const zheFanRouteSum = GetRtnEndSigAsStartSigRouteSum(routeId); UINT16 * const zheFanRouteIdBuf = GetReturnEndSigAsStartSigRoute(routeId); - + /* ʼźŻId */ + UINT16 const startSignalId = GetRouteStartSignalId(routeId); /* ߼ */ @@ -8453,7 +8454,8 @@ UINT8 KeepBlocRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE,devId,ETYPE_SIG_RETURN_OPENED_STATE,devState,sendLevel); + /*ԭETYPE_SIG_RETURN_OPENED_STATE·id˳ֱһ*/ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, SIGNAL_CLOSE, sendLevel); reResult = CI_ERROR; } } @@ -8624,6 +8626,7 @@ UINT8 OpenBlocRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe UINT8 signalVirtualAttr = SIGNAL_VIRTUAL_NO;/*źŻ*/ UINT8 repeatOpenFlag = ROUTE_REPEATOPEN_SET_NO;/*ؿ־*/ + UINT16 const startSignalId = GetRouteStartSignalId(routeId);/*ʼźŻid*/ /* ߼ */ cRouteLeadProperty = GetRouteLeadProperty(routeId); @@ -8760,7 +8763,8 @@ UINT8 OpenBlocRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE,devId,ETYPE_SIG_RETURN_OPENED_STATE,devState,sendLevel); + /*ԭETYPE_SIG_RETURN_OPENED_STATE ·id˳ֱһ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, SIGNAL_CLOSE, sendLevel); reResult = CI_ERROR; } } @@ -8810,6 +8814,7 @@ UINT8 OpenCbtcRouteOtherSignalCheck(UINT16 routeId, UINT8 functionId, UINT8 send UINT8 signalVirtualAttr = SIGNAL_VIRTUAL_NO;/*źŻ*/ UINT8 repeatOpenFlag = ROUTE_REPEATOPEN_SET_NO;/*ؿ־*/ UINT8 needOpenNotTrueRepeatFlag = ROUTE_NEEDOPEN_REOPEN_NO;/*迪Ųؿ־*/ + UINT16 const startSignalId = GetRouteStartSignalId(routeId);/*ʼźŻid*/ routeState = GetRouteState(routeId);/*ȡ·״̬*/ /* ߼ */ @@ -8936,7 +8941,8 @@ UINT8 OpenCbtcRouteOtherSignalCheck(UINT16 routeId, UINT8 functionId, UINT8 send else { /* ¼ */ - SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, devId, ETYPE_SIG_RETURN_OPENED_STATE, devState, sendLevel); + /*ԭETYPE_SIG_RETURN_OPENED_STATE ·id˳ֱһ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, SIGNAL_CLOSE, sendLevel); reResult = CI_ERROR; } } @@ -19227,7 +19233,7 @@ UINT8 KeepCBTCRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe UINT16* pNeedCloseBuf = NULL; UINT8 zheFanRouteSum = 0U; UINT16 * zheFanRouteIdBuf = NULL; - + UINT16 startSignalId = GetRouteStartSignalId(routeId);/*ʼźŻid*/ /* ·豸 */ /*·迪źŻ*/ needOpenSigSum = GetRouteCbtcNeedOpenSigSum(routeId); @@ -19320,7 +19326,8 @@ UINT8 KeepCBTCRouteOtherSignalCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLe else { /* ¼ */ - SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE,devId,ETYPE_SIG_RETURN_OPENED_STATE,devState,sendLevel); + /*ԭETYPE_SIG_RETURN_OPENED_STATE ·id˳ֱһ */ + SetErrorData(functionId, CI_DEVICE_TYPE_SIGNAL, startSignalId, ETYPE_SIG_START_OPEN_STATE, SIGNAL_CLOSE, sendLevel); reResult = CI_ERROR; } } @@ -24766,7 +24773,7 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec if (CI_SUCCESS != cRetVal) { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_TRAIN_POS, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_TRAIN_POS, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] Position Is Error\n", wTrainId); } else @@ -24777,19 +24784,19 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_TRAIN_COMM, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_TRAIN_COMM, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: Train Check Error: Train[%d] CommState Is Error\n", wTrainId); /*гͨ쳣ʧ*/ } } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SEC_ATTR, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); debug_infor_printf((const)"LogSecSeqAndTrainPosCheckCLD: LogSec Check Error: LogSec[%d] Attr Is Error\n", pLogSecIdBuff[0]); /*ֽ·߼η߻ѹ/Σʧ*/ } } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SEC_ATTR, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); /*ȡ߼ΰlinkʧܣʧ*/ } } @@ -24801,7 +24808,7 @@ UINT8 LogSecSeqAndTrainPosCheckCLD(const UINT8 cLogSecSum, const UINT16* pLogSec } else { - SetErrorData(cFunctionId, CI_SYSTEM_TYPE_VOBC, (wTrainId & 0x00FFU), ETYPE_PART_ROUTE_SEC_ATTR, 0U, cSendLevel); + SetCiSendCmdBackInfoWithTrainId(CI_BACK_DYM_ROUTE_SEC_ATTR, CI_SYSTEM_TYPE_VOBC, wTrainId, 0U, 0U, wTrainId); /*μʧܣʧ*/ } @@ -24957,8 +24964,6 @@ UINT8 MatchLieCheRouteCLD(const UINT8 cRouteSum, const UINT16 szRouteId[MAX_ROUT UINT8 cRouteType = 0U; /*·*/ UINT8 cLieCheIndex = UINT8_MAX; /*Ŀг·*/ UINT8 cReturnIndex = UINT8_MAX; /*Ŀ۷·*/ - UINT16 wMatchedRouteId = 0U; - UINT8 cRouteRukuProperty = ROUTE_AUTOSIG_PROPERTY_NO; /*·*/ /*μ*/ if ((MAX_ROUTE_IN_LT_NUM >= cRouteSum) && (NULL != szRouteId) && (NULL != pMatchedRouteId)) @@ -24984,28 +24989,18 @@ UINT8 MatchLieCheRouteCLD(const UINT8 cRouteSum, const UINT16 szRouteId[MAX_ROUT if (UINT8_MAX != cLieCheIndex) { - wMatchedRouteId = szRouteId[cLieCheIndex]; /*г·г·*/ + *pMatchedRouteId = szRouteId[cLieCheIndex]; /*г·г·*/ + cRetVal = CI_SUCCESS; } else if(UINT8_MAX != cReturnIndex) { - wMatchedRouteId = szRouteId[cReturnIndex]; /*г·ʹ÷۷·*/ - } - else - { - debug_infor_printf((const)"MatchLieCheRouteCLD: No Train Route And Return Route\n"); /*ֻе·ʧ*/ - } - - /*жƥ䵽Ľ·ǷΪ·*/ - cRouteRukuProperty = GetRouteRukuProperty(wMatchedRouteId); - if (ROUTE_RUKU_PROPERTY_YES == cRouteRukuProperty) - { - *pMatchedRouteId = wMatchedRouteId; /*·سɹ*/ + *pMatchedRouteId = szRouteId[cReturnIndex]; /*г·ʹ÷۷·*/ cRetVal = CI_SUCCESS; } else { - debug_infor_printf((const)"MatchLieCheRouteCLD: Route Id[%d] Is Not Ruku Route\n", wMatchedRouteId); /*·ATS͵߼зⷽ򣬷ʧ*/ - } + debug_infor_printf((const)"MatchLieCheRouteCLD: No Train Route And Return Route\n"); /*ֻе·ʧ*/ + } } else { @@ -26207,3 +26202,120 @@ UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId return chRetVal; } + + + +/* +* ·羮״̬ +* ˵ UINT16 routeId, · +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أ +* ֵ CI_ERROR +* CI_SUCCESS +* by yx 2026.03.04 +*/ +UINT8 RouteAirShaftSecOccuCheck(UINT16 const routeId, UINT16 *pDevId, UINT8* pDevState) +{ + /* ·*/ + UINT8 const checkSum = GetRouteAiaShaftSecNum(routeId); + UINT16* const dataIdBuf = GetRouteAiaShaftSecIdBuf(routeId); + + /* ֲʼ */ + UINT8 i = 0u; /* ѭ */ + UINT16 devId = 0u; + UINT8 devState = 0u; + UINT8 reVal = CI_ERROR; + + if ((AIR_SHAFT_ROUTE_SECTION_NUM_MAX < checkSum) || (NULL == dataIdBuf)) + { + /*羮ݴ*/ + reVal = CI_ERROR; + } + else + { + /* 羮ռü */ + reVal = CI_SUCCESS; + /*ʼ*/ + for (i = 0u; i < checkSum; i++) + { + devId = dataIdBuf[i]; + devState = GetPhySecCurMergeState(devId); + + if (SECTION_OCCUPY_NO == devState) + { + /* ͨ*/ + } + else + { + /*״̬һ·ع״̬*/ + *pDevId = devId; + *pDevState = devState; + reVal = CI_ERROR; + break; + } + } + } + + /*ȫͨ*/ + return reVal; +} + + +/* +* ·羮ռ +* ˵ UINT16 routeId, · +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أ +* ֵ CI_ERROR +* CI_SUCCESS +* by yx 2026.03.04 +*/ +UINT8 RouteAirShaftSecLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState) +{ + /* ·*/ + UINT8 const checkSum = GetRouteAiaShaftSecNum(routeId); + UINT16* const dataIdBuf = GetRouteAiaShaftSecIdBuf(routeId); + + /* ֲʼ */ + UINT8 i = 0u; /* ѭ */ + UINT16 devId = 0u; + UINT8 devState = 0u; + UINT8 reVal = CI_ERROR; + + if ((AIR_SHAFT_ROUTE_SECTION_NUM_MAX < checkSum) || (NULL == dataIdBuf)) + { + /*羮ݴ*/ + reVal = CI_ERROR; + } + else + { + /* 羮ռü */ + reVal = CI_SUCCESS; + /*ʼ*/ + /*羮ռ*/ + for (i = 0u; i < checkSum; i++) + { + devId = dataIdBuf[i]; + devState = GetPhySecLockState(devId); + + /*δջգշ֮ǰѼ鷽*/ + if ((PHYSICAL_SECTION_LOCK_NO == devState) || (PHYSICAL_SECTION_LOCK_PROTECT == devState)) + { + /* ͨ*/ + + } + else + { + /*״̬һ·ع״̬*/ + *pDevId = devId; + *pDevState = devState; + reVal = CI_ERROR; + break; + } + + } + } + + /*ȫͨ*/ + return reVal; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h index 09a3552..1322f65 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicCheck.h @@ -2784,5 +2784,25 @@ UINT8 TrainOccSameSecCheck(const UINT16 wPhySecId, const UINT16 wTrainId); */ UINT8 OccBelSameSecCheck(const UINT16 wBasePhySecId, const UINT16 wCheckPhySecId); +/* +* ·羮ռü +* ˵ UINT16 routeId, · +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أռ/У +* ֵ CI_ERROR +* CI_SUCCESS +* by yx 2026.03.04 +*/ +UINT8 RouteAirShaftSecOccuCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState); +/* +* ·羮ռ +* ˵ UINT16 routeId, · +* UINT16 *pDevId, 豸Idأ +* UINT8 *pDevState, 豸״̬أ +* ֵ CI_ERROR +* CI_SUCCESS +* by yx 2026.03.04 +*/ +UINT8 RouteAirShaftSecLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState); #endif diff --git a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c index 1e221ff..f511e9c 100644 --- a/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c +++ b/TSCP/src/APP/ciapp/LogicProcess/InterlockLogicProcess.c @@ -209,6 +209,7 @@ UINT8 SetCbtcLTrainRouteLogicProcess(UINT16 const routeId) UINT8 reResult = CI_ERROR; /*ֵ*/ UINT8 checkResult = CI_ERROR; /**/ + UINT16 devId = 0u; /*豸ID*/ UINT8 devState = 0u; /*豸״̬*/ /**/ @@ -336,6 +337,53 @@ UINT8 SetCbtcLTrainRouteLogicProcess(UINT16 const routeId) } } + /*羮ռü*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecOccuCheck(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); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /**/ + } + + /*羮ռ*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecLockCheck(routeId, &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; + } + } + else + { + /**/ + } if (CI_SUCCESS == reResult) { @@ -1661,6 +1709,54 @@ UINT8 LockCbtcLTrainRouteLogicProcess(UINT16 const routeId) } } + /*羮ռü*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecOccuCheck(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); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /**/ + } + + /*羮ռ*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecLockCheck(routeId, &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; + } + } + else + { + /**/ + } + if (CI_SUCCESS == reResult) { /* */ @@ -3587,6 +3683,31 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId) reResult = CI_ERROR; } } + + /*羮ռü*/ + if (CI_SUCCESS == reResult) + { + devId = 0u; + devState = 0u; + checkResult = RouteAirShaftSecOccuCheck(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); + /* ʧܷ */ + reResult = CI_ERROR; + } + } + else + { + /**/ + } + /* */ if (CI_SUCCESS == reResult) { @@ -8968,6 +9089,7 @@ UINT8 SetCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel) reResult = CI_ERROR; } } + /* ؽ */ return reResult; } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c index d597b62..a65fa12 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackAtsData.c @@ -503,7 +503,6 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c UINT8 cTiocCutReason = 0u; UINT8 cTiocCutState = REVERSE_CUT_STATE_DEFAULT; UINT32 dwTrainId = 0u; - UINT8 cLogId = 0u; UINT8 cFunRetVal = CI_ERROR; UINT8 ocstionPowerIndic = 0U; @@ -767,11 +766,9 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c if (0u != CiSendCmdDataStru[jj].wTrainIdParam) { - cLogId = (UINT8)(CiSendCmdDataStru[jj].wTrainIdParam & 0xFFu); - cFunRetVal = dquDevName2HlhtId(CiSendCmdDataStru[jj].wTrainIdParam, cLogId, &dwTrainId); + cFunRetVal = dquDevName2HlhtId(CiSendCmdDataStru[jj].wTrainIdParam, 0U, &dwTrainId); if (CI_ERROR == cFunRetVal) { - cLogId = 0u; dwTrainId = 0u; } else @@ -781,7 +778,6 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c } else { - cLogId = 0u; dwTrainId = 0u; } LongToChar(dwTrainId, &ciToXianDiDataBuffer[ii]); diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c index 0b4c017..2f560ed 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackCommon.c @@ -1563,6 +1563,8 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat UINT8 CiTypeOfRoute = 0u; /*ǰ·*/ UINT8 ciTrainTestState = 0u; /*Գ״̬*/ UINT8 routeAutoTriggerFlag = GetRouteAutoTriggerFlag(DeviceId); /*ȡ·Զ־*/ + + UINT32 xuanpaiStartCycNum = GetRouteXuanPaiStartCycNum(DeviceId);/*·ѡſʼ*/ switch (MaskType) { case MASK_TYPE_ROUTE_IDLE:/*·λ*/ @@ -1576,7 +1578,8 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat } break; case MASK_TYPE_ROUTE_XUANPAI:/*·ѡλ*/ - if (ROUTE_STATE_XUANPAI == routeState) + /* ѡںЧɷλ*/ + if (xuanpaiStartCycNum > 0u) { SetMaskValue(MaskId, dataBuf); } diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c index 89734f9..0476bf9 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.c @@ -5131,9 +5131,10 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocPosMonitorInfo Error \n", pstVobcToCiDataStru->VobcId); } + /*IVOCδӽŽ·ϢԤȿţ*/ if (CI_SUCCESS == chRetVal) { - /*ɹ*/ + chRetVal = PackCiToIvocOpenRouteNotNearInfo(cszCiToIvocDataBuf, &ii, pstVobcToCiDataStru->VobcId); } else { @@ -5141,8 +5142,18 @@ static UINT8 PackCiToIvocDataCC(VobcToCiDataStruct *pstVobcToCiDataStru) debug_infor_printf((const)"\n VOBC: %d PackCiToIvocJumpBackReply Error \n", pstVobcToCiDataStru->VobcId); } - /*Ԥ10ֽ*/ - ii += 5U; + if (CI_SUCCESS == chRetVal) + { + /*ɹ*/ + } + else + { + /**/ + debug_infor_printf((const)"\n VOBC: %d PackCiToIvocOpenRouteNotNearInfo Error \n", pstVobcToCiDataStru->VobcId); + } + + /*Ԥ4ֽ*/ + ii += 4U; } else if ((IVOC_CI_INFO_TYPE_LOGOUT_ASK == pstVobcToCiDataStru->appInfoType) && (curCycleNum == pstVobcToCiDataStru->ComStartCycle)) {/*עظ֡*/ @@ -9391,7 +9402,9 @@ static UINT8 PackCiToIvocReqAlignmentInfo(UINT8* pDataBuf, UINT16* wDataLength, chTempBreakFlag = 0U; chTempRemoveFlag = 0U; chTempAddFlag = 0U; + pRouteLogSecId = NULL; wLogicSecId = GetLogicSecId(wLogicSecIndex); + if ((0U < wLogicSecId) && (UINT16_MAX > wLogicSecId)) { chLogSecHaveResOpp = GetLogSecHaveResOpp(wLogicSecId); @@ -9401,6 +9414,8 @@ static UINT8 PackCiToIvocReqAlignmentInfo(UINT8* pDataBuf, UINT16* wDataLength, wRLockRouteId = GetLogSecLockBelongRoute(wLogicSecId); wPLockRouteId = GetLogSecPLockRouteId(wLogicSecId); chLogLockDir = GetLogSecLockDir(wLogicSecId); + pAPoint.Lnk = 0U; + pAPoint.Off = 0U; if (0U < wRLockRouteId) { @@ -9418,8 +9433,15 @@ static UINT8 PackCiToIvocReqAlignmentInfo(UINT8* pDataBuf, UINT16* wDataLength, ; /*һ*/ } - pAPoint.Lnk = GetLgcSecOrgnLink(pRouteLogSecId[0]); - pAPoint.Off = 0U; + if (NULL != pRouteLogSecId) + { + pAPoint.Lnk = GetLgcSecOrgnLink(pRouteLogSecId[0]); + pAPoint.Off = 0U; + } + else + { + ; + } if ((CI_SYSTEM_DIRECTION_UP == chLogLockDir) || (CI_SYSTEM_DIRECTION_DOWN == chLogLockDir)) { @@ -9482,6 +9504,9 @@ static UINT8 PackCiToIvocReqAlignmentInfo(UINT8* pDataBuf, UINT16* wDataLength, chLogRelateLogLockDir = GetLogSecLockDir(wRelateLogSecId[jj]); wRLockRouteId = GetLogSecLockBelongRoute(wRelateLogSecId[jj]); wPLockRouteId = GetLogSecPLockRouteId(wRelateLogSecId[jj]); + pBPoint.Lnk = 0U; + pBPoint.Off = 0U; + if (0U < wRLockRouteId) { wRouteLogSecSum = GetRouteLogSectionSum(wRLockRouteId); @@ -9503,13 +9528,17 @@ static UINT8 PackCiToIvocReqAlignmentInfo(UINT8* pDataBuf, UINT16* wDataLength, { ; /**/ } - if (NULL != pRouteLogSecId) + + if ((NULL != pRouteLogSecId) && (0U < pAPoint.Lnk) && (0U < pBPoint.Lnk)) { /*漰ûָΪգʱҪһ*/ - chDirChangedNum = GetDirChangeNumBtwPoints(&pAPoint, &pBPoint); + /*Ƚϵξղȥ鷽仯Ŀշ*/ + if ((CI_SYSTEM_DIRECTION_UP == chLogRelateLogLockDir) || (CI_SYSTEM_DIRECTION_DOWN == chLogRelateLogLockDir)) { /*ǰ߼շ͹߼շЧ*/ + chDirChangedNum = GetDirChangeNumBtwPoints(&pAPoint, &pBPoint); + if (0U == (chDirChangedNum % 2U)) { /*2·֮䷽仯ĿΪżշһԴԶ*/ @@ -11938,29 +11967,48 @@ static UINT8 PackCiToVobcSigInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wT { chSigState = CI_VOBC_SIGNAL_YES; } + + /*վͲ*/ chKeepFlag = CI_SUCCESS; } - else if ((ROUTE_STATE_AUTO_UNLOCK == chRouteState) || (ROUTE_STATE_NEAR_LOCK == chRouteState)) + else if (ROUTE_STATE_NEAR_LOCK == chRouteState) { chSigState = CI_VOBC_SIGNAL_NO; - /*ֹźţرգ0XAAӽԶ*/ + /*ֹźţرգ0XAAӽ*/ chKeepFlag = CI_SUCCESS; } + else if (ROUTE_STATE_AUTO_UNLOCK == chRouteState) + { + chSigState = CI_VOBC_SIGNAL_NO; + /*ֹźţرգ0XAAԶ*/ + } else if ((ROUTE_STATE_FIRST_LOCKERR == chRouteState) || (ROUTE_STATE_YUXIAN_LOCK == chRouteState) - || (ROUTE_STATE_NEAR_LOCKERR == chRouteState) || (ROUTE_STATE_DELAY_UNLOCK == chRouteState) - || (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState)) + || (ROUTE_STATE_NEAR_LOCKERR == chRouteState) || (ROUTE_STATE_DELAY_UNLOCK == chRouteState)) { chSigState = CI_VOBC_SIGNAL_ERR; - /*ֹźţ쳣رգ0XCC·״̬Ϊ쳣Ԥաӽ쳣ʱԶ쳣*/ + /*ֹźţ쳣رգ0XCC·״̬Ϊ쳣Ԥաӽ쳣ʱ*/ + /*վͲ*/ chKeepFlag = CI_SUCCESS; } + else if (ROUTE_STATE_AUTO_UNLOCKERR == chRouteState) + { + chSigState = CI_VOBC_SIGNAL_ERR; + /*ֹźţ쳣رգ0XCC·״̬ΪԶ쳣*/ + } else if (ROUTE_STATE_IDLE == chRouteState) { ; /*мһ*/ } + else if ((ROUTE_STATE_HALF_FIRST_XUAN == chRouteState) || (ROUTE_STATE_HALF_XUANPAI == chRouteState) + || (ROUTE_STATE_HALF_LOCK == chRouteState) || (ROUTE_STATE_HALF_UNLOCKDELAY == chRouteState) + || (ROUTE_STATE_HALF_UNLOCK == chRouteState)) + { + /*Ĭֵ0XFF:ճѡѡšաֽ·ȴֽ·ʱ*/ + chSigState = CI_VOBC_SIGNAL_DEFAULT; + } else { - /*Ĭֵ0XFF:ѡѡšѡšա쳣šճѡѡšաֽ·ȴֽ·ʱ*/ + /*Ĭֵ0XFF:ѡѡšѡšա쳣*/ chSigState = CI_VOBC_SIGNAL_DEFAULT; chKeepFlag = CI_SUCCESS; } @@ -12677,4 +12725,104 @@ UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTr return chRetVal; +} + +/* +* CiIvocδӽŽ·Ϣ(Ԥȿ) +* ˵ UINT8* dataBuf, ݻ +* UINT16 *dataLength, ݳ +* UINT16 wTrainId гID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Create fan 20251202 +*/ +UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId) +{ + UINT8 chRetVal = CI_ERROR; + UINT16 ii = 0U;/*洢±*/ + UINT16 jj = 0U;/*ѭ±*/ + UINT8 chYuXianRouteSum = 0U; /*ԤȿŽ·*/ + UINT8 chLocalCI= 0U;/*ID*/ + UINT8 chLocalCIType = 0U;/**/ + UINT16 routeCurSum = 0U; /*ȡ·*/ + UINT16 wRouteNumIndex = 0U;/*·±*/ + UINT16 routeId = 0U; + UINT8 routeBelongCiId = 0u;/*·*/ + UINT8 routeState = 0U; /*·״̬*/ + UINT16 wFirstLogSecId = 0U; /*һ߼*/ + LogicTrainResStruct * pLogicSecTrainResInfo = NULL;/*߼ζӦгԴϢ*/ + UINT16 wTrnID = 0U; + chLocalCI = GetSystemParaLocalCiId(); + chLocalCIType = GetLocalCiType(); + routeCurSum = GetRouteCurSum(); + if ((NULL == pDataBuf) || (NULL == wDataLength)) + { + chRetVal = CI_ERROR; + } + else + { + + ii = *wDataLength; + wRouteNumIndex = ii; /*·*/ + ii++; + chRetVal = CI_SUCCESS; + + if ((CI_TYPE_ZX == chLocalCIType) || (CI_TYPE_SCX == chLocalCIType)) + { + for (jj = 0u; jj < routeCurSum; jj++) + { + routeId = GetRouteId(jj); /*ȡ·ID*/ + routeBelongCiId = GetRouteBelongCiId(routeId); /*ȡ·ID*/ + routeState = GetRouteState(routeId); + if ((ROUTE_STATE_YUXIAN_OPEN == routeState) && (routeBelongCiId == chLocalCI)) + { + /*ԤȿŽ·*/ + wFirstLogSecId = GetRouteInFirstLogSecId(routeId); + wTrnID = ((UINT16)(CI_SYSTEM_TYPE_VOBC * 256U)) + wTrainId; + pLogicSecTrainResInfo = GetLogSecTrainInfoById(wFirstLogSecId, wTrnID); + if (NULL != pLogicSecTrainResInfo) + { + /*гԴ*/ + ShortToChar(routeId, &pDataBuf[ii]); /*·ID*/ + ii += 2U; + chYuXianRouteSum++; + if (CI_IVOC_YUXIANOPEN_ROUTE_MAX < chYuXianRouteSum) + { + chRetVal = CI_ERROR; + break; + } + else + { + ; /**/ + } + } + else + { + ;/**/ + } + } + else + { + ;/**/ + } + } + } + else + { + chYuXianRouteSum = 0U;/*ηΪ0*/ + } + } + + if (CI_SUCCESS == chRetVal) + { + pDataBuf[wRouteNumIndex] = chYuXianRouteSum; /*ԤȿŽ·*/ + *wDataLength = ii; /*ݳ*/ + } + else + { + chRetVal = CI_ERROR; + } + + return chRetVal; + } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h index f554a8e..dc8ef82 100644 --- a/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h +++ b/TSCP/src/APP/ciapp/ParsePack/ParsePackVobcData.h @@ -222,8 +222,8 @@ #define CI_IVOC_URGENT_NO ((UINT8)0xaaU) /*CIIVOC ƶ״̬Ч*/ #define CI_VOBC_BACKUP_SEND_ROUTE_SUM ((UINT8)5U) /*CIغͨ·ֵ*/ - #define CI_IVOC_LOST_POSITION ((UINT8)0x55U) /*CIؿر λ*/ +#define CI_IVOC_YUXIANOPEN_ROUTE_MAX ((UINT8)200U) /*гվ̨߼ Ϸ[0,200]*/ #ifdef __cplusplus extern "C" { @@ -714,6 +714,17 @@ void PackCiToVobcFlyProtectInfo(const UINT16 wTrainId); * Create fan 20250725 */ UINT8 PackCiToIvocJumpBackReply(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); + +/* +* CiIvocδӽŽ·Ϣ(Ԥȿ) +* ˵ UINT8* dataBuf, ݻ +* UINT16 *dataLength, ݳ +* UINT16 wTrainId гID +* ֵCI_ERROR 0 ʧ +* CI_SUCCESS 1 ɹ +* Create fan 20250725 +*/ +UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c index 8cb8ad0..d3ea274 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.c @@ -722,9 +722,6 @@ UINT8 SystemParameterStructInit(CHAR* FSName) /*ʻ˫Сȫ(cm)*/ dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance = pCbtcConfigDataStru.OppositeTrackDistance; - /*վ̨׷ʱг루cm*/ - dquCICfgDtStr.SystemParaStrNew.StationTrackDistance = pCbtcConfigDataStru.StationTrackDistance; - /*·½ƶ루λm*/ dquCICfgDtStr.SystemParaStrNew.MaxMALength = pCbtcConfigDataStru.MaxMALength; @@ -4861,17 +4858,6 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS 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; @@ -6965,6 +6951,7 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) callFun *= InitRelay_DCAgreeStru(FSName);/*ʼ̵ͬ*/ callFun *= InitLS_SGBJStru(FSName); /*ʼⱨ*/ callFun *= InitLS_TransRouteRtnDataStruct(FSName); /*ʼת۷źŻ*/ + callFun *= InitLS_AirShaftRouteStru(FSName); /*ʼ羮·*/ /*ӵͼʼʧܣʧ˳*/ if(0u == callFun) @@ -7210,6 +7197,31 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName) } } } + if (1U == rtnvalue) + { + for (i = 0U; i < LSDataLen.LSRouteStrLen; i++) + { + if (i >= ROUTE_SUM_MAX) + { + rtnvalue = 0U; + } + else + { + } + execRet = AirShaftSectionDataInit(&(dquCICfgDtStr.RouteCfgDtStr[i]), LSData.pLSAirShaftRouteStru); /*·羮·μ*/ + if (execRet > 0U) + { + } + else + { + rtnvalue = 0U; /*ʧܣ0*/ + } + if (1U != rtnvalue) + { + break; + } + } + } return rtnvalue; } @@ -12753,3 +12765,55 @@ static UINT8 LinkSpecialEaDataInit(CHAR* FSName) return retVal; } +/********************************************* +*ܣ·÷羮ݳʼ +*˵RouteConfigDataStruct* pRouteCfgDtStr ·ݽṹָ +* LS_AirShaftStruct* pAirShaftSecStruct 羮·ṹָ +*ֵ0ʧܣ1ɹ +*Create yx 2026.03.04 +*********************************************/ +UINT8 AirShaftSectionDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_AirShaftStruct* pAirShaftSecStruct) +{ + UINT8 rtnvalue = CI_ERROR; + UINT16 i = 0U; + UINT8 j = 0U; + if ((NULL != pRouteCfgDtStr) && (NULL != pAirShaftSecStruct)) + { + rtnvalue = CI_SUCCESS; + /*ȳʼΪĬֵ*/ + pRouteCfgDtStr->airShaftRouteSecSum = 0U; + (void)CommonMemSet((void*)pRouteCfgDtStr->wAirShaftRouteSecIdBuf, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf), 0U, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf)); + /*羮αʼ·*/ + + for (i = 0U; i < LSDataLen.LSAirShaftRouteStruLen; i++) + { + /*ҶӦ·*/ + if (pRouteCfgDtStr->RouteId == pAirShaftSecStruct[i].wRouteId) + { + pRouteCfgDtStr->airShaftRouteSecSum = pAirShaftSecStruct[i].airShaftSecSum; + /*ʼ*/ + for (j = 0U; j < AIR_SHAFT_ROUTE_SECTION_NUM_MAX; j++) + { + pRouteCfgDtStr->wAirShaftRouteSecIdBuf[j] = pAirShaftSecStruct[i].wAirShaftSecId[j]; + } + break; + } + else + { + + } + } + } + else if((NULL != pRouteCfgDtStr) && (NULL == pAirShaftSecStruct)) + {/*羮·δ*/ + pRouteCfgDtStr->airShaftRouteSecSum = 0U; + (void)CommonMemSet((void*)pRouteCfgDtStr->wAirShaftRouteSecIdBuf, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf), 0U, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf)); + rtnvalue = CI_SUCCESS; + } + else + { + /*ηǷ0*/ + } + + return rtnvalue; +} \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h index 8ed5e4f..13495f3 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInit.h @@ -937,5 +937,13 @@ UINT8 AgLinkExistRelCGFlagCalc(LinkDataConfigStru* pLinkScCfgDtStr); *********************************************/ UINT8 BGLinkRelAGLinkCal(LinkDataConfigStru* pLinkScCfgDtStr); +/********************************************* +*ܣ羮ݳʼ +*˵RouteConfigDataStruct* pRouteCfgDtStr ·ݽṹָ +* LS_AirShaftStruct* pAirShaftSecStruct 羮·ṹָ +*ֵ0ʧܣ1ɹ +*Create yx 2026.03.04 +*********************************************/ +UINT8 AirShaftSectionDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_AirShaftStruct* pAirShaftSecStruct); #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c index 4a09db6..78e01d8 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCIInterFace.c @@ -2421,9 +2421,6 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst /*ʻ˫Сȫ(cm)*/ SystemParameterStru->OppositeTrackDistance = dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance; - /*վ̨׷ʱг루cm*/ - SystemParameterStru->StationTrackDistance = dquCICfgDtStr.SystemParaStrNew.StationTrackDistance; - /*·½ƶ루λm*/ SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength; diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h index 04de5c8..a722942 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStru.h @@ -96,6 +96,7 @@ #define TRANSROUTE_ZHEFANSIG_ID ((UINT8)27) /*CI -- ת·۷źŻid*/ +#define AIR_SHAFT_DATA_ID ((UINT8)28) /*CI -- 羮·*/ #define CONTACT_DATA_LEN ((UINT8)12U) /*ʹ*/ @@ -141,6 +142,7 @@ #define LOGIC_LTARL_DFNC_SWITCH_NUM ((UINT8)8) /*߼εIJĿ*/ #define SGBJ_RELATED_PHYSEC_SUM_MAX ((UINT16)6) /*ⱨֵ*/ +#define AIR_SHAFT_SECTION_SUM_MAX ((UINT8)16) /*羮ֵ*/ /*·ݽṹ*/ typedef struct S_LongRouteStruct @@ -413,5 +415,11 @@ typedef struct S_TransRouteZFSigStruct UINT16 wTransRouteZFSigId; /*ת۷źŻID*/ } LS_TransRouteZFSigStruct; +typedef struct S_AirShaftStruct +{ + UINT16 wRouteId; /*·ID */ + UINT8 airShaftSecSum; /*羮*/ + UINT16 wAirShaftSecId[AIR_SHAFT_SECTION_SUM_MAX]; /*羮ID*/ +} LS_AirShaftStruct; #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c index f56bea8..b5faf35 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.c @@ -1065,4 +1065,50 @@ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRo rtnvalue = 1u; } return rtnvalue; +} +/********************************************* +*ܣݵ羮·ת +*˵ +* pDataAddrݵַ +* pAirShaftRouteStr 羮·ݽṹ +*ֵ0ʧܣ1ɹ +* 2026.03.04 yx Ӷȡ羮· +*********************************************/ +UINT8 LS_AirShaftStruFromChar(UINT8* pDataAddr, LS_AirShaftStruct* pAirShaftRouteStr) +{ + UINT8* pData = pDataAddr; + + UINT8 i = 0u; + + UINT8 rtnvalue = 0u; + + if ((NULL != pDataAddr) && (NULL != pAirShaftRouteStr)) + { + + /*·ID*/ + pAirShaftRouteStr->wRouteId = dquCiShortFromChar(pData); + pData += 2u; + if (AIR_SHAFT_SECTION_SUM_MAX >= *pData) + { + pAirShaftRouteStr->airShaftSecSum = *pData; + /*羮*/ + pData += 1u; + for (i = 0u; i < AIR_SHAFT_SECTION_SUM_MAX; i++) + { + /*ID*/ + pAirShaftRouteStr->wAirShaftSecId[i] = dquCiShortFromChar(pData); + pData += 2u; + } + rtnvalue = 1u; + } + else + { + rtnvalue = 0u; + } + } + else + { + rtnvalue = 0u; + } + 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..9c5db97 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruFrmChar.h @@ -202,4 +202,13 @@ UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pL *********************************************/ UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRouteZFSigStru); +/********************************************* +*ܣݵ羮·ת +*˵ +* pDataAddrݵַ +* pAirShaftRouteStr 羮·ݽṹ +*ֵ0ʧܣ1ɹ +* 2026.03.04 yx Ӷȡ羮· +*********************************************/ +UINT8 LS_AirShaftStruFromChar(UINT8* pDataAddr, LS_AirShaftStruct* pAirShaftRouteStr); #endif diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c index 2725968..50b6a41 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.c @@ -2359,4 +2359,92 @@ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName) } } return rtnValue; +} +/********************************************* +*ܣ羮··ݽṹ +*˵LSDataNameָ +*ֵ0ʧܣ1ɹ +* 2026.03.04 by yx +*********************************************/ +UINT8 InitLS_AirShaftRouteStru(CHAR* LSDataName) +{ + UINT8 funcRtn = 0u; + LS_AirShaftStruct* pAirShaftRouteStr = NULL; /*ʱ羮·ṹ*/ + UINT8* pDataAddr = NULL; /*ݵַ*/ + UINT32 DataSize = 0u; /*ݴСֽ*/ + UINT16 i = 0u; + UINT16 realRowCount = 0u; /*ʵʱݵ*/ + UINT16 realRowLen = 0u; /*ʵʱݵһеij*/ + UINT8 rtnValue = 0u; + + /*Ѿʼˣǵִй*/ + if (NULL != LSData.pLSAirShaftRouteStru) + { + rtnValue = 1u; + } + else + { + rtnValue = 1u; + /*ȡ*/ + funcRtn = dquGetConfigDataNew(LSDataName, LS_DATA_TYPE, AIR_SHAFT_DATA_ID, &pDataAddr, &DataSize, &realRowCount); + if (0u == funcRtn) + { + /*ʧ*/ + rtnValue = 0u; + debug_infor_printf((const)"\nAIR_SHAFT_DATA_ID NO IN FS\n"); + } + else + { + if ((0u != DataSize) && (0u != realRowCount)) + { + if (0u != (DataSize % realRowCount)) + { + debug_infor_printf((const)"\nTIOC_LS_DATA,LS_AirShaft_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) + AIR_SHAFT_DATA_ID, PRINT_ONCE); + rtnValue = 0u; + } + else + { + /*ʵһеֽڳ*/ + realRowLen = (UINT16)(DataSize / realRowCount); + LSDataLen.LSAirShaftRouteStruLen = realRowCount; + /*̬ռ*/ + LSData.pLSAirShaftRouteStru = (LS_AirShaftStruct*)MyNew((UINT32)(sizeof(LS_AirShaftStruct) * LSDataLen.LSAirShaftRouteStruLen)); + /*̬ռʧ*/ + if (NULL == LSData.pLSAirShaftRouteStru) + { + LSDataLen.LSAirShaftRouteStruLen = 0u; + rtnValue = 0u; + } + else + { + /*ڴΪЧ*/ + (void)CommonMemSet((void*)LSData.pLSAirShaftRouteStru, (UINT32)sizeof(LS_AirShaftStruct) * LSDataLen.LSAirShaftRouteStruLen, 0U, (UINT32)sizeof(LS_AirShaftStruct) * LSDataLen.LSAirShaftRouteStruLen); + /*ݵ Ĭг ṹ */ + for (i = 0u; i < LSDataLen.LSAirShaftRouteStruLen; i++) + { + pAirShaftRouteStr = LSData.pLSAirShaftRouteStru + i; + + /*ݽṹ*/ + rtnValue &= LS_AirShaftStruFromChar(pDataAddr, pAirShaftRouteStr); + if (CI_ERROR == rtnValue) + { + rtnValue = 0u; + break; + } + pDataAddr += realRowLen; + + } + } + } + + } + else + { + debug_infor_printf((const)"\nAIR_SHAFT_ROUTE_DATA_ERR DataSize %d realRowCount %d\n ", DataSize, realRowCount); + } + + } + } + return rtnValue; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h index 7011f7f..62b5306 100644 --- a/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h +++ b/TSCP/src/APP/ciapp/QueryFiles/dquCILSStruInit.h @@ -44,6 +44,7 @@ typedef struct S_LSDataStruct LS_ContactLineStruct* pLSContactLineStr; /*߼ι豸ṹ*/ LS_EachLgcIntrudeStruct* pLSLgcInvEachStru;/*߼λޱ*/ LS_TransRouteZFSigStruct* pLSTransRouteZFSigStru; /*ת۷źŻṹ*/ + LS_AirShaftStruct* pLSAirShaftRouteStru; /*羮·*/ }LSDataStruct; /*ݽṹ*/ typedef struct S_LSDataStructLen @@ -75,6 +76,7 @@ typedef struct S_LSDataStructLen UINT16 LSContactStruLen; /*߼ι豸*/ UINT16 LSLgcInvEachLen; /*߼λ*/ UINT16 LSTransRouteZFSigStruLen; /*ת۷źŻ*/ + UINT16 LSAirShaftRouteStruLen; /*羮·*/ }LSDataStructLen; /*********ȫֵϢݱ*******/ @@ -262,5 +264,12 @@ UINT8 InitLS_ContactConfigDataStruct(CHAR* LSDataName); *********************************************/ UINT8 InitLS_TransRouteRtnDataStruct(CHAR* LSDataName); +/********************************************* +*ܣ羮··ݽṹ +*˵LSDataNameָ +*ֵ0ʧܣ1ɹ +* 2026.03.04 by yx +*********************************************/ +UINT8 InitLS_AirShaftRouteStru(CHAR* LSDataName); #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c index 020cebd..83adde2 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.c @@ -3297,33 +3297,6 @@ UINT16 GetRouteTransRoutZFSigID(const UINT16 routeId) return retVal; } -/* -* ȡָID· -* ˵const UINT16 wRouteId ·ID -* ֵ0 ȡʧ -* 0x55 · -* 0xaa · -* Created By LQ 2024.09.05 -*/ -UINT8 GetRouteRukuProperty(const UINT16 wRouteId) -{ - UINT8 cRetVal = CI_ERROR; - UINT16 bufIndex = 0U; /*±*/ - - bufIndex = GetRouteConfigBufIndex(wRouteId); /*ȡ·±*/ - - if (bufIndex < ROUTE_SUM_MAX) - { - cRetVal = RouteConfigDataStru[bufIndex].cRouteRukuProperty; - } - else - { - cRetVal = CI_ERROR; - } - - return cRetVal; -} - /* * ȡָڱ·Ƿеڱ * ˵ const UINT16 wRouteId, ·ID @@ -3524,4 +3497,53 @@ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId,UINT8* chCiId) } return chRetVal; +} +/* +* ȡָID·ķ羮 +* ˵ const UINT16 routeId ·ID +* ֵ 0: ȡʧ +* >0: ķ羮 +* 2026.03.04 by yx +*/ +UINT8 GetRouteAiaShaftSecNum(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT8 retVal = CI_ERROR; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + retVal = RouteConfigDataStru[bufIndex].airShaftRouteSecSum; + } + else + { + retVal = CI_ERROR; + } + return retVal; +} + +/* +* ȡָID·ķ羮ID +* ˵ const UINT16 routeId ·ID +* ֵ NULL: ȡʧ +* NULL: ķ羮ID +* 2026.03.04 by yx +*/ +UINT16* GetRouteAiaShaftSecIdBuf(const UINT16 routeId) +{ + UINT16 bufIndex = 0u; /*±*/ + UINT16* retVal = NULL; + + bufIndex = GetRouteConfigBufIndex(routeId); /*ȡ·±*/ + + if (bufIndex < ROUTE_SUM_MAX) + { + retVal = RouteConfigDataStru[bufIndex].wAirShaftRouteSecIdBuf; + } + else + { + retVal = NULL; + } + return retVal; } \ No newline at end of file diff --git a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h index 3f413e7..6543dff 100644 --- a/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h +++ b/TSCP/src/APP/ciapp/Route/RouteConfigDataManage.h @@ -279,7 +279,8 @@ typedef struct S_RouteConfigDataStruct UINT16 szRelatedSGBJId[ROUTE_RELATED_SGBJ_NUM_MAX]; /*·ⱨID*/ UINT8 cCbtcProperty; /*·CBTCԣ0x55CBTC0xAACBTC*/ UINT16 wRelatedTransZFSigId; /*·ת۷źŻid δĬ0*/ - UINT8 cRouteRukuProperty; /*ǷΪ·0x55 ·0xaa ·*/ + UINT8 airShaftRouteSecSum; /*羮·*/ + UINT16 wAirShaftRouteSecIdBuf[AIR_SHAFT_ROUTE_SECTION_NUM_MAX]; /*羮·ID*/ }RouteConfigDataStruct; /*******************************ȫֱ*******************************/ @@ -1303,16 +1304,6 @@ UINT16 GetRouteLeaveLogicSecId(const UINT16 routeId); */ UINT16 GetRouteTransRoutZFSigID(const UINT16 routeId); -/* -* ȡָID· -* ˵const UINT16 wRouteId ·ID -* ֵ0 ȡʧ -* 0x55 · -* 0xaa · -* Created By LQ 2024.09.05 -*/ -UINT8 GetRouteRukuProperty(const UINT16 wRouteId); - /* * ȡָڱ·Ƿеڱ * ˵ const UINT16 wRouteId, ·ID @@ -1342,6 +1333,23 @@ UINT8 CheckRouteSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); */ UINT8 CheckRouteProSwitchBelCi(const UINT16 wRouteId, UINT8* chCiId); +/* +* ȡָID·ķ羮 +* ˵ const UINT16 routeId ·ID +* ֵ 0: ȡʧ +* >0: ķ羮 +* 2026.03.04 by yx +*/ +UINT8 GetRouteAiaShaftSecNum(const UINT16 routeId); + +/* +* ȡָID·ķ羮ID +* ˵ const UINT16 routeId ·ID +* ֵ NULL: ȡʧ +* NULL: ķ羮ID +* 2026.03.04 by yx +*/ +UINT16* GetRouteAiaShaftSecIdBuf(const UINT16 routeId); #ifdef __cplusplus } #endif diff --git a/TSCP/src/APP/ciapp/Route/RouteDefine.h b/TSCP/src/APP/ciapp/Route/RouteDefine.h index 16e7a42..9808b7c 100644 --- a/TSCP/src/APP/ciapp/Route/RouteDefine.h +++ b/TSCP/src/APP/ciapp/Route/RouteDefine.h @@ -61,6 +61,7 @@ #define ROUTE_APPLY_RECD_TRAIN_SUM_MAX ((UINT8)20) /*ITS·ֵ֧гֵ*/ /* WQM 20220310*/ #define ROUTE_RELATED_SGBJ_NUM_MAX ((UINT16)50U) /*·ⱨĿ*/ +#define AIR_SHAFT_ROUTE_SECTION_NUM_MAX ((UINT8)16U) /*羮·羮Ŀ*/ /*μ־*/ #define ROUTE_PHYSICALSECTION_CHECK_NO ((UINT8)0x55) /**/ @@ -373,9 +374,6 @@ #define ROUTE_CBTC_PROPERTY_YES ((UINT8)0x55) /*·CBTCԣlinkCBTCԣ*/ #define ROUTE_CBTC_PROPERTY_NO ((UINT8)0xaa) /*·CBTCԣlinkCBTCԣ*/ -#define ROUTE_RUKU_PROPERTY_YES ((UINT8)0x55U) /*·*/ -#define ROUTE_RUKU_PROPERTY_NO ((UINT8)0xaaU) /*·*/ - #define ROUTE_NEAR_SEC_HAVE_UT ((UINT8)0x55) /*ӽйϳ*/ #define ROUTE_NEAR_SEC_NOT_HAVE_UT ((UINT8)0xaa) /*ӽ޹ϳ*/ diff --git a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c index 368b9d7..ede62ba 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.c @@ -658,6 +658,7 @@ UINT32 GetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId) return wRetVal; } + /* * ָIDռں * ˵const UINT16 wAxisSectionId ID UINT32 ں @@ -776,7 +777,7 @@ void AxisSecUtOccpyUpdate(void) } else { - ; /**/ + ;/**/ } } } @@ -786,4 +787,90 @@ void AxisSecUtOccpyUpdate(void) ; /**/ } } +} + +/* +* ȡָIDгȫλøDZ־ +* ˵const UINT16 axisSectionId ID +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.12.01 +*/ +UINT8 GetAxisTXSafeLocFlag(const UINT16 axisSectionId) +{ + UINT16 bufIndex = 0U; /*±*/ + UINT8 retVal = AXIS_SECTION_SAFELOC_NO; + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); /*ȡ±*/ + + if (AXIS_SECTION_SUM_MAX > bufIndex) + { + retVal = AxisSectionDataStru[bufIndex].cAxisTXSafeLocFlag; + } + else + { + retVal = AXIS_SECTION_SAFELOC_NO; + } + + return retVal; +} + +/* +* ָIDгȫλøDZ־ +* ˵const UINT16 axisSectionId ID +* const UINT8 cFlag ־ +* ֵ +* Created By LQ 2025.12.01 +*/ +void SetAxisTXSafeLocFlag(const UINT16 axisSectionId, const UINT8 cFlag) +{ + UINT16 bufIndex = 0U; /*±*/ + + bufIndex = GetAxisSecConfigBufIndex(axisSectionId); + + if (AXIS_SECTION_SUM_MAX > bufIndex) + { + if ((AXIS_SECTION_SAFELOC_NO == cFlag) || (AXIS_SECTION_SAFELOC_YES == cFlag)) + { + AxisSectionDataStru[bufIndex].cAxisTXSafeLocFlag = cFlag; + } + else + { + /**/ + } + } + else + { + /**/ + } +} + +/* +* гȫλøDZ־ +* ˵ +* ֵ +* Created By LQ 2025.12.01 +*/ +void ClearAxisTXSafeLocFlag(void) +{ + UINT16 aAxisSecDataSum = 0U; /**/ + UINT16 wAxisSecId = 0U; /*ID*/ + UINT16 bufIndex = 0U; /*±*/ + UINT16 ii = 0U; + + aAxisSecDataSum = GetTotalAxisCurNum(); + + for (ii = 0U; ii < aAxisSecDataSum; ii++) + { + wAxisSecId = GetAxisSecId(ii); + bufIndex = GetAxisSecConfigBufIndex(wAxisSecId); + if (AXIS_SECTION_SUM_MAX > bufIndex) + { + AxisSectionDataStru[wAxisSecId].cAxisTXSafeLocFlag = AXIS_SECTION_SAFELOC_NO; /*üͨųȫλøDZ־Ч*/ + } + else + { + /*IDǷ*/ + } + } } \ 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..7f2dd6b 100644 --- a/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h +++ b/TSCP/src/APP/ciapp/Section/AxisSectionDataManage.h @@ -44,6 +44,7 @@ typedef struct S_AxisSectionDataStruct UINT32 dwAxisOccCycNum; /*ռʼ*/ UINT16 wPosMonitorTrainId; /*ιλüලЧгID*/ UINT32 dwUtOccupyCycNum; /*ռ*/ + UINT8 cAxisTXSafeLocFlag; /*гȫλøDZ־0x55-Ч0xAA-Ч*/ } AxisSectionDataStruct; @@ -247,6 +248,7 @@ UINT32 GetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId); * Created By fan 2024.08.19 */ void SetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId, const UINT32 dwCycNum); + /** * ܣѯ¼ϻռ״̬ * @@ -255,6 +257,31 @@ void SetAxisRecentUtOccupyCyc(const UINT16 wAxisSectionId, const UINT32 dwCycNum */ void AxisSecUtOccpyUpdate(void); +/* +* ȡָIDгȫλøDZ־ +* ˵const UINT16 axisSectionId ID +* ֵ0x55 Ч +* 0xAA Ч +* Created By LQ 2025.12.01 +*/ +UINT8 GetAxisTXSafeLocFlag(const UINT16 axisSectionId); + +/* +* ָIDгȫλøDZ־ +* ˵const UINT16 axisSectionId ID +* const UINT8 cFlag ־ +* ֵ +* Created By LQ 2025.12.01 +*/ +void SetAxisTXSafeLocFlag(const UINT16 axisSectionId, const UINT8 cFlag); + +/* +* гȫλøDZ־ +* ˵ +* ֵ +* Created By LQ 2025.12.01 +*/ +void ClearAxisTXSafeLocFlag(void); #ifdef __cplusplus } diff --git a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c index 0f5bed2..22a633f 100644 --- a/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c +++ b/TSCP/src/APP/ciapp/Section/LogicSectionDataManage.c @@ -4578,11 +4578,24 @@ UINT8 GetLogSecHaveResOpp(const UINT16 wLogicSecId) /*ǰ߼ξ߱·ջŽ·ռ*/ wRouteLogSecSum = GetRouteLogSectionSum(wRLockRouteId); pRouteLogSecId = GetRouteLogSectionIdBuf(wRLockRouteId); - if ((pRouteLogSecId[wRouteLogSecSum - 1U] == wLogicSecId) && (LOG_SECTION_LOCK_NORMAL == chLogSecLockState)) + + if (NULL != pRouteLogSecId) { - /*ǰѯ߼Ϊ·һβգ*/ - retVal = CI_SUCCESS; + if ((pRouteLogSecId[wRouteLogSecSum - 1U] == wLogicSecId) && (LOG_SECTION_LOCK_NORMAL == chLogSecLockState)) + { + /*ǰѯ߼Ϊ·һβգ*/ + retVal = CI_SUCCESS; + } + else + { + ; /**/ + } } + else + { + ; /*·Ϊճʼʧ*/ + } + } else if (0U < wPLockRouteId) { @@ -4593,11 +4606,22 @@ UINT8 GetLogSecHaveResOpp(const UINT16 wLogicSecId) chLogSecLockDir = GetLogSecLockDir(wLogicSecId); chLogSecLockSysDir = ConvertDirectionToLogic(chLogSecLockDir); - if (((pLogicSectionIdBuf[chLogicSectionSum - 1U] == wLogicSecId) && (DIR_SAME == chLogSecLockSysDir)) - || ((pLogicSectionIdBuf[0] == wLogicSecId) && (DIR_CONVERT == chLogSecLockSysDir))) + if (NULL != pLogicSectionIdBuf) { - /*ǰѯ߼շ߼ͬ򱣻һ߼෴εһ߼*/ - retVal = CI_SUCCESS; + if (((pLogicSectionIdBuf[chLogicSectionSum - 1U] == wLogicSecId) && (DIR_SAME == chLogSecLockSysDir)) + || ((pLogicSectionIdBuf[0] == wLogicSecId) && (DIR_CONVERT == chLogSecLockSysDir))) + { + /*ǰѯ߼շ߼ͬ򱣻һ߼෴εһ߼*/ + retVal = CI_SUCCESS; + } + else + { + ; /*ݣΪճʼʧ*/ + } + } + else + { + ; /*·Ϊճʼʧ*/ } } else diff --git a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c index c0ec92e..d9bb68e 100644 --- a/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c +++ b/TSCP/src/APP/ciapp/Section/PhysicalSectionConfigDataManage.c @@ -1104,9 +1104,7 @@ void AddAdjacentPhySec(const UINT16 wPhySecId) UINT8 k = 0U; UINT16* pACBuff = NULL; /*μ*/ UINT16 wAcStratLink = 0U;/*ʼlink*/ - UINT16 wAxisID = 0U; /**/ UINT16 wAcTerminLink = 0U; /*նlink*/ - UINT16 phySectionConfigDataSum = 0u; /*豸*/ UINT8 chAcLinkSum = 0; UINT16* pAclinkBuf = NULL; UINT16 wStartNearLink = 0U; /*ʼlink*/ @@ -1158,10 +1156,14 @@ void AddAdjacentPhySec(const UINT16 wPhySecId) if (PhysicalSectionConfigDataStru[bufIndex].AdjacentPhySecBuf[k] == wStartNearSec) { chStartAddFlag = CI_SUCCESS; + /*Ѵڣӿɴ*/ + AddNeighborPhyConditionAc(wPhySecId, k, pACBuff[jj]); } if (PhysicalSectionConfigDataStru[bufIndex].AdjacentPhySecBuf[k] == wTmmNearSec) { chTmmAddFlag = CI_SUCCESS; + /*Ѵڣӿɴ*/ + AddNeighborPhyConditionAc(wPhySecId, k, pACBuff[jj]); } } /*ֱ*/ @@ -1169,6 +1171,8 @@ void AddAdjacentPhySec(const UINT16 wPhySecId) && (PHYSEC_ADJACENT_SEC_SUM_MAX> PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum)) { PhysicalSectionConfigDataStru[bufIndex].AdjacentPhySecBuf[PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum] = wStartNearSec; + /*ӿɴ*/ + AddNeighborPhyConditionAc(wPhySecId, PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum, pACBuff[jj]); PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum++; } else @@ -1179,6 +1183,7 @@ void AddAdjacentPhySec(const UINT16 wPhySecId) && (PHYSEC_ADJACENT_SEC_SUM_MAX>PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum)) { PhysicalSectionConfigDataStru[bufIndex].AdjacentPhySecBuf[PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum] = wTmmNearSec; + AddNeighborPhyConditionAc(wPhySecId, PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum, pACBuff[jj]); PhysicalSectionConfigDataStru[bufIndex].chAdjacentPhySecNum++; } else @@ -1258,13 +1263,13 @@ void AddNearPhySec(const UINT16 wPhySecId) else { /*ڱRCͷΧ*/ - chAddCheck = CheckNearPhySec(dwNearSecBuf[jj], wPhySecId); + chAddCheck = CheckNearPhySec(dwNearSecBuf[jj], wPhySecId, wAdjacentPhySec); chBelongCi = GetPhySecBelongCiId(dwNearSecBuf[jj]); chCiType = GetCiType(chBelongCi); if (CI_SUCCESS == chAddCheck) { /*ӳɹ*/ - + /*жǷһ*/ if (CI_TYPE_CLD == chCiType) { @@ -1287,7 +1292,7 @@ void AddNearPhySec(const UINT16 wPhySecId) } else { - chAddCheck = CheckNearPhySec(dwTwoStepNearSecBuf[kk], wPhySecId); + chAddCheck = CheckNearPhySec(dwTwoStepNearSecBuf[kk], wPhySecId, dwNearSecBuf[jj]); /*ݲٲ*/ } } @@ -1344,11 +1349,11 @@ UINT16* GetAdjacentPhySecBuf(const UINT16 wPhySecId) } /* * ڽΧ޸ -* ˵ const UINT16 wPhySecId ΣUINT16 basePhysec +* ˵ const UINT16 wPhySecId ΣUINT16 basePhysecwPrePhySecId εת * ֵ CI_SUCCESS CI_ERROR *Create fan 20240822 */ -UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec) +UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId) { UINT8 retValue = CI_SUCCESS; UINT8 ii = 0U; @@ -1356,10 +1361,7 @@ UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec) UINT16* wAdjacentPhyBuf = NULL; /*ֱ*/ UINT16 chAdjacentPhyNum = 0U; /*ֱ*/ UINT8 chNearSecNum = 0U; /**/ - UINT16* dwNearSecBuf = NULL; /**/ UINT16 bufIndex = 0U; - UINT8 chCiType = 0U; - UINT8 chBelongCi = 0U; bufIndex = GetPhySecConfigBufIndex(basePhysec); /*ȡ±*/ chAdjacentPhyNum = GetAdjacentPhySecNum(basePhysec); @@ -1401,6 +1403,7 @@ UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec) if ((CI_SUCCESS == retValue) &&(PHYSEC_INDIRECTNEAR_SEC_SUM_MAX>chNearSecNum)) { PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[chNearSecNum] = wPhySecId; + PhysicalSectionConfigDataStru[bufIndex].IndirectNearSecPreSec[chNearSecNum] = wPrePhySecId; PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum++; } else @@ -1464,7 +1467,6 @@ UINT8 PhySectionNearConfigDataManage(void) UINT8 chAdjacentPhyNum = 0U; /*ֱ*/ UINT8 chNearSecNum = 0U; /**/ UINT16* dwNearSecBuf = NULL; /**/ - UINT8 chLocalCiType = GetLocalCiType(); UINT8 chLocal = GetSystemParaLocalCiId(); UINT8 chBelongCi = 0U; @@ -1610,4 +1612,179 @@ UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle) } return wReval; +} + +/* +* ֱμ +* ˵ const UINT16 wPhySecId UINT8 chIndex UINT16 AcIdID +* ֵ +*Create fan 20260303 +*/ +void AddNeighborPhyConditionAc(const UINT16 wPhySecId, UINT8 chIndex, UINT16 AcId) +{ + UINT16 bufIndex = 0U; + UINT8 chAcIndec = 0U;/**/ + bufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + if ((PHYSICAL_SECTION_SUM_MAX > bufIndex)&&(PHYSEC_ADJACENT_SEC_SUM_MAX>chIndex)) + { + chAcIndec = PhysicalSectionConfigDataStru[bufIndex].AdjacentSecAcData[chIndex].RelateAcNum; + if (PHYSICAL_INCLUDE_AXIS_SUM_MAX > chAcIndec) + { + PhysicalSectionConfigDataStru[bufIndex].AdjacentSecAcData[chIndex].AcIdBuf[chAcIndec] = AcId; + PhysicalSectionConfigDataStru[bufIndex].AdjacentSecAcData[chIndex].RelateAcNum++; + } + else + { + ;/* */ + } + } + else + { + ;/**/ + } +} + +/* +* ȡμת +* ˵ const UINT16 wPhySecId UINT16 wNearSecId +* ֵ +*Create fan 20260303 +*/ +UINT16 GetNearSecPreSecId(const UINT16 wPhySecId, UINT16 wNearSecId) +{ + UINT16 bufIndex = 0U; + UINT8 ii = 0U; + UINT16 retVal = 0U; + bufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + if (PHYSICAL_SECTION_SUM_MAX > bufIndex) + { + for (ii = 0U; ii < PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum; ii++) + { + if (wNearSecId == PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[ii]) + { + retVal = PhysicalSectionConfigDataStru[bufIndex].IndirectNearSecPreSec[ii]; + break; + } + else + { + ;/**/ + } + } + } + else + { + ;/**/ + } + return retVal; +} +/* +* εһתǷεֱڷΧ +* ˵ const UINT16 wPhySecIdconst UINT16 wPreSecId +* ֵ CI_SUCCESS CI_ERROR +* Create fan 20260303 +*/ +UINT8 CheckPhySecIfAdjacent(const UINT16 wPhySecId, const UINT16 wPreSecId) +{ + UINT8 retVal = CI_ERROR; + UINT16* wAdjacentPhyBuf = NULL; /*ֱ*/ + UINT8 chAdjacentPhyNum = 0U; /*ֱ*/ + UINT8 ii = 0U; + chAdjacentPhyNum = GetAdjacentPhySecNum(wPhySecId); + wAdjacentPhyBuf = GetAdjacentPhySecBuf(wPhySecId);/*ֱ*/ + for (ii = 0U; ii < chAdjacentPhyNum; ii++) + { + if (wPreSecId == wAdjacentPhyBuf[ii]) + { + retVal = CI_SUCCESS; + break; + } + else + { + ;/**/ + } + } + return retVal; +} +/* +* ȡֱ(Ƿɴ) +* ˵ const UINT16 wPhySecId UINT16 wNearSec ֱ +* ֵ ֱ CI_ERRORɴ CI_SUCCESSɴ +* Create fan 20260303 +*/ +UINT8 GetAdjacentPhySecAcCheck(const UINT16 wPhySecId, UINT16 wNearSec) +{ + UINT16 bufIndex = 0U; + UINT8 retValue = CI_SUCCESS;/*SUCCESSʱӦΣΪȫ̬*/ + UINT8 k = 0U;/**/ + UINT8 jj = 0U; + UINT8 ii = 0U; + UINT16 wAcId = 0U; + UINT8 chCheckAcNum = 0U; + UINT16* ConditionAcBuf = NULL; /**/ + AxisSwitchStruct* axisSwitchStru = NULL; + UINT8 axisSwitchSum = 0U;/**/ + UINT16 curSwitchId = 0U;/**/ + UINT8 switchCurPosition = 0U;/*λ*/ + UINT8 chAcCheckResult = CI_ERROR;/**/ + UINT16* wAdjacentPhyBuf = NULL; /*ֱ*/ + UINT8 chAdjacentPhyNum = 0U; /*ֱ*/ + chAdjacentPhyNum = GetAdjacentPhySecNum(wPhySecId); + wAdjacentPhyBuf = GetAdjacentPhySecBuf(wPhySecId);/*ֱ*/ + bufIndex = GetPhySecConfigBufIndex(wPhySecId); /*ȡ±*/ + if (PHYSICAL_SECTION_SUM_MAX > bufIndex) + { + for (ii = 0U; ii < chAdjacentPhyNum; ii++) + { + if (wNearSec == wAdjacentPhyBuf[ii]) + { + chCheckAcNum = PhysicalSectionConfigDataStru[bufIndex].AdjacentSecAcData[ii].RelateAcNum; + ConditionAcBuf = PhysicalSectionConfigDataStru[bufIndex].AdjacentSecAcData[ii].AcIdBuf; + for (k = 0U; k 0u) && (PulseCount >= syncDuty)) - { - PulseCount = 0; - PinValue ^= 0x1u; - if (0U == PinValue) - { - regVal = (in32(gpio_base_0 + IMX_GPIO_DR) & (uint32_t)~(1UL << 6U)); - out32(gpio_base_0 + IMX_GPIO_DR,regVal); - } - else - { - regVal = (in32(gpio_base_0 + IMX_GPIO_DR) | (uint32_t)(1UL << 6U)); - out32(gpio_base_0 + IMX_GPIO_DR, regVal); - - } - } - } -} - - - - -/* 函数功能:获取双系硬通信的反馈。 - * 输入参数:无。 - * 输出参数:pABSynMsgType *pMsgType, 采集到的type信息 - * 返回值 :UINT8, - * 0x00,正常。 - * 0x81,命令与反馈不一致 - * 0x82,指针为空 - * 使用注意:发送与采集间隔至少为40ms。 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType) -{ - uint8_t ret = 0U; - float Duty = 0.0f; - float period = 0.0f; - uint32_t PulseCnt = 0u; - if (NULL != pMsgType) - { - calculate(2U,&Duty,&period,&PulseCnt); - *pMsgType = drvPWMAnalyze(Duty,period); - if (g_userSetSyncMsgType == *pMsgType) - { - ret =0u; - } - else - { - ret = 0x81u; - } - } - else - { - ret = 0x82U; - } - return ret; -} - -/* 函数功能:查询当前各通道收到的外部脉冲个数。 - * 输入参数:无。 - * 输出参数: uint8_t index -- 通道索引:0-对方A系通道 1-对方B系通道 2-自身反馈通道 - * uint32_t* pPulseCnt -- 外部存储变量地址 - * 返回值 :uint8_t 0-成功 1-失败:入参错误。 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt) -{ - uint8_t ret = 0U; - if ((index > 2U) || (NULL == pPulseCnt)) - { - ret = 1u; - return ret; - } - - *pPulseCnt = s_CapInfo[index].capCount; - - return ret; -} - - -/* 函数功能:获取对系双通道硬通信信号。 - * 输入参数:无。 - * 输出参数:pMsgType[0]:对方A系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]:对方B系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:收到对方A系发出的脉冲计数,如果此数为0,说明对方A系停止输出脉冲 - * pPulseCnt[1]:收到对方B系发出的脉冲计数,如果此数为0,说明对方B系停止输出脉冲 - * 返回值 :无。 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt) -{ - float Duty[2] = {0.0f}; - float Period[2] = {0.0f}; - - if(( NULL != pMsgType) && (NULL != pPulseCnt)) - { - drvGetABSyn(Duty,Period,pPulseCnt); - pMsgType[0] = drvPWMAnalyze(Duty[0],Period[0]); - pMsgType[1] = drvPWMAnalyze(Duty[1],Period[1]); - } - else - { - ; - } - -} - - -/* 函数功能:获取当前系间信号脉冲的最大误差值。 - * 输入参数:uint8_t index - * 输出参数:无 - * 返回值 :float -- 误差百分比。 - */ -float drvGetSyncSigErr(ABSynMsgType msgType) -{ - uint8_t index = 0u; - float ret = -1.0f; - if (msgType < ABSynMsgType_MAX) - { - index = (uint8_t)msgType; - ret = sSyncMsgErrInfo[index]; - } - - return ret; -} - -/* 函数功能:获取双系硬切系信号的占空比及频率。 - * 输入参数:无。 - * 输出参数:Duty[0]:对系CPU1占空比,保留3位有效小数,如30%占空比表示为0.300 - * Period[0]:对系CPU1频率,单位为Hz - * Duty[1]:对系CPU2占空比,保留3位有效小数,如30%占空比表示为0.300 - * Period[1]:对系CPU2频率,单位为Hz - * 返回值 :无。 - * 使用注意:Period为0时表示错误。 - */ -static void drvGetABSyn(float *Duty,float *Period,uint32_t* pPulseCnt) -{ - if ((NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - /*使用IO中断方式*/ - calculate(0U,&Duty[0],&Period[0],&pPulseCnt[0]); - calculate(1U,&Duty[1],&Period[1],&pPulseCnt[1]); -} - - -/* 函数功能:PWM信号解析为双系MsgType。 - * 输入参数:Duty:采集到的PWM占空比 - * Period:采集到的PWM频率 - * 输出参数:无。 - * 返回值 :ABSynMsgType:双系通信的具体信息。 - * 使用注意:。 - */ -static ABSynMsgType drvPWMAnalyze(float Duty,float Period) -{ - ABSynMsgType ABSynMsgTypetemp = ABSynMsgType_0; - float syncErr = 0.0f; - float tmp = 0.0f; - float baseFreq = 0.0f; - uint8_t index = 0u; - - if((Duty > 0.45f) && (Duty < 0.55f) ) - { - if((Period > 150.0f) && (Period < 250.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_1; - } - else if((Period > 250.0f) && (Period < 350.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_2; - } - else if((Period > 350.0f) && (Period < 450.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_3; - } - else if((Period > 450.0f) && (Period < 550.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_4; - } - else if((Period > 550.0f) && (Period < 650.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_5; - } - else if((Period > 650.0f) && (Period < 750.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_6; - } - else if((Period > 750.0f) && (Period < 850.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_7; - } - else - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - } - else//占空比无或不正常 - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - - index = (uint8_t)ABSynMsgTypetemp; - baseFreq = (float)(index + 1u) * 100.0f; - tmp = (Period > baseFreq) ? (Period - baseFreq) : (baseFreq - Period); - syncErr = tmp / baseFreq * 100.0f; - tmp = sSyncMsgErrInfo[index]; - tmp = (syncErr > tmp) ? syncErr : tmp; - sSyncMsgErrInfo[index] = tmp; - - return ABSynMsgTypetemp; -} - -/*使用io中断获取对端脉冲频率*/ -static void calculate(uint8_t index,float *Duty,float *Period,uint32_t* pPulseCnt) -{ - uint32_t curTimeStamp = 0u; - uint32_t startTimeStamp = 0u; - float tmp = 0.0f; - - if ((index > 2U) || (NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - - s_ECapPause[index] = 1U; - curTimeStamp = s_CapInfo[index].cap1CurrentTime; - startTimeStamp = s_CapInfo[index].cap1StartTime; - - uint32_t useTime = (curTimeStamp > startTimeStamp) ? \ - (curTimeStamp - startTimeStamp) : \ - (0xFFFFFFFFU - startTimeStamp + curTimeStamp); - - tmp = (float)useTime / (float)s_CapInfo[index].capCount; - s_CapInfo[index].fre = (32000.0f / tmp); - - *Period = s_CapInfo[index].fre; - *Duty = 0.5f; - *pPulseCnt = s_CapInfo[index].capCount; - s_CapInfo[index].cap1CurrentTime = 0u; - s_CapInfo[index].cap1StartTime = 0u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].isLocked = 0u; - s_ECapPause[index] = 0U; -} - - -static void pulseCount(uint8_t index) -{ - uint8_t capPause = 0u; - uint8_t syncStart = 0u; - if (index < 3u) - { - capPause = s_ECapPause[index]; - syncStart = s_isABSyncStart; - if ((0u == capPause) && (1u == syncStart)) - { - if(0u == s_CapInfo[index].isLocked) - { - s_CapInfo[index].isLocked = 1u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].cap1StartTime = cnt; - } - s_CapInfo[index].cap1CurrentTime = cnt; - s_CapInfo[index].capCount++; - } - else - { - /*do nothing*/ - } - } -} - - -/************************************************************************/ -/* -* @brief 读取phy寄存器相关维护信息 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态 -* -* @param[in] -* const char* fecx 需要检查的网络接口名称(如"fec0","fec1") -* uint16_t infoLen - 寄存器信息数组长度,此长度应该大于等于12 -* @param[out] -* uint16_t * Info - 寄存器信息数组存储首地址 -* @return rtn 返回状态 -* - n: n为实际读取的寄存器个数 -* - -1: 链路异常或操作失败 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen) -{ - /*- 变量初始化*/ - int sockfd = -1; - int rtn = -1; - int n = 0; - /*uint16_t regInfo[12u] = {0u};*/ - uint8_t regList[12] = {0u,1u,4u,5u,6u,7u,8u,9u,10u,15u,21u,31u}; - uint8_t i = 0u; - - if ((NULL == fecx) || (NULL == Info) || (0u == infoLen)) - { - return rtn; - } - - /*- 创建DGRAM类型套接字*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 配置网络接口名称*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 设置PHY寄存器访问参数*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY寄存器读取命令 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY设备地址 */ - phycmd.req.phy_reg = 1U; /* PHY状态寄存器地址 */ - phycmd.req.phy_data = 0U; /* 初始化数据域 */ - - n = ((12U <= infoLen)? 12 : (int)infoLen); - - for(i = 0u;i < n;i++) - { - phycmd.req.phy_reg = regList[i]; /* PHY状态寄存器地址 */ - /*- 发送驱动控制命令获取PHY状态*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - Info[i] = phycmd.req.phy_data; - } - rtn = n; - close(sockfd); - } - /*- 返回最终检测结果*/ - return rtn; -} - - -#if 0 -/*调试接口*/ -void checkisr(void) -{ - static int ret = 0; - printf("irq cnt 0 is %d\n",irqCnt[0]); - printf("irq cnt 1 is %d\n",irqCnt[1]); - printf("irq cnt 2 is %d\n",irqCnt[2]); - printf("cur cnt is %d\n",cnt); -} -#endif - - -/************************************************************************/ -/* -* @brief 通过PHY寄存器检查指定网卡链路状态 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态, -* 根据寄存器值的特定位判断链路是否正常。 -* -* @param[in] fecx 需要检查的网络接口名称(如"fec0","fec1") -* @return rtn 返回状态 -* - 0: 链路状态正常(PHY寄存器bit2为1) -* - -1: 链路异常或操作失败 -* -* @note 函数执行流程: -* 1. 创建UDP套接字 -* 2. 配置phycmd控制结构体: -* - ifd_name: 网络接口名称 -* - ifd_cmd: 使用READ_PHY_REG命令 -* - phy_id: PHY地址7 -* - phy_reg: 寄存器地址1(状态寄存器) -* 3. 通过devctl发送控制命令 -* 4. 解析phy_data寄存器值的bit2判断链路状态 -*/ -int phytool(const char* fecx) -{ - /*- 变量初始化*/ - int sockfd = -1; - int rtn = -1; - - if (NULL == fecx) - { - return rtn; - } - - /*- 创建DGRAM类型套接字*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 配置网络接口名称*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 设置PHY寄存器访问参数*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY寄存器读取命令 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY设备地址 */ - phycmd.req.phy_reg = 1U; /* PHY状态寄存器地址 */ - phycmd.req.phy_data = 0U; /* 初始化数据域 */ - - /*- 发送驱动控制命令获取PHY状态*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - - close(sockfd); - - /*- 解析状态寄存器bit2(0x04)链路状态标志*/ - if(1U == ((phycmd.req.phy_data & 0x04U)>>2U)) - { - rtn = 0; /* 链路正常 */ - } - else - { - ; /* 保持默认失败状态 */ - } - } - /*- 返回最终检测结果*/ - return rtn; -} diff --git a/TSCP/src/DRV/imx8_drv_gpio.h b/TSCP/src/DRV/imx8_drv_gpio.h index 744dc67..a430781 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.h +++ b/TSCP/src/DRV/imx8_drv_gpio.h @@ -17,51 +17,6 @@ #include #include -#include -#include -#include - - -/*双系脉冲通信信号类型定义*/ -typedef enum { //占空比-频率 - ABSynMsgType_0,//0.0-0,ErrorDuty-ErrorFrequency固定为驱动程序检测到以下故障中的一种:a、未收到有效的PWM信号(包含:无PWM信号、信号参数不符合预设的范围) - ABSynMsgType_1,//0.5-200 固定为驱动程序检测到以下故障中的一种:a、发送端的MsgType不是规定的枚举类型; - ABSynMsgType_2,//0.5-300 固定为驱动程序检测到以下故障中的一种:a、双系PWM信号使能标志没有周期翻转(main函数跑飞); - ABSynMsgType_3,//0.5-400 平台自由确定其含义 - ABSynMsgType_4,//0.5-500 平台自由确定其含义 - ABSynMsgType_5,//0.5-600 平台自由确定其含义 - ABSynMsgType_6,//0.5-700 平台自由确定其含义 - ABSynMsgType_7,//0.5-800 平台自由确定其含义 - ABSynMsgType_MAX = 0x08 -} ABSynMsgType; - -struct SCapInfo{ - uint8_t vaild;//0无效 1有效 - uint8_t isLocked;//1锁定 - uint32_t capCount; - uint32_t cap1StartTime; //first rising - uint32_t cap1CurrentTime; //first falling - uint32_t cycle; //周期 - uint32_t pulseWidth; //脉宽 - float dutyCycle; //占空比 - float fre; //频率 -}; - - -#define READ_PHY_REG 0x400U - -typedef struct { - uint8_t phy_id; - uint8_t phy_reg; - uint16_t phy_data; -}phy_access_t; - -static struct ifdrv2{ - struct ifdrv ifd; - phy_access_t req; -}phycmd; - - #define IMX_GPIO0_BASE 0x5D080000 #define IMX_GPIO1_BASE 0x5D090000 #define IMX_GPIO2_BASE 0x5D0A0000 @@ -74,18 +29,8 @@ static struct ifdrv2{ #define IMX_GPIO_DR 0x0U #define IMX_GPIO_GDIR 0x4U #define IMX_GPIO_PSR 0x8U -/*20250707--zhangzhongqi add*/ -#define IMX_GPIO_ICR1 0xCU -#define IMX_GPIO_ICR2 0x10U -#define IMX_GPIO_IMR 0x14U -#define IMX_GPIO_ISR 0x18U -#define IMX_GPIO_EDGE_SEL 0x1CU -#define IMX_GPIO_SIZE 0x20U -#define IMX_GPIO0_IRQ 168 -#define IMX_GPIO1_IRQ 169 - /*timer regisger */ #define IMX_GPT0_BASE 0x5D140000 #define IMX_GPT_SIZE 0x10000 @@ -138,111 +83,3 @@ const struct sigevent *handler_25 (void *not_used, int id); const struct sigevent *handler (void *not_used, int id); void* timer_25( void * arg); void* timer( void * arg); - -/* 函数功能:创建脉冲检测中断线程 - * 输入参数:void - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:板级初始化之后调用一次该函数启动功能。 - */ -int imx8_create_gpio_irq_pthread(void); -/* 函数功能:发送双系硬通信信号。 - * 输入参数:MsgType:硬通信的信息:ABSynMsgType_0..ABSynMsgType_7 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:倒切方案由于硬件限制,发送频率不高于500Hz,最大使用ABSynMsgType_4。 - */ -void drvSetABSynMsg(ABSynMsgType MsgType); -/* 函数功能:获取对系双通道硬通信信号。 - * 输入参数:无。 - * 输出参数:pMsgType[0]:对方A系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]:对方B系发出的硬通信信息:ABSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:收到对方A系发出的脉冲计数,如果此数为0,说明对方A系停止输出脉冲 - * pPulseCnt[1]:收到对方B系发出的脉冲计数,如果此数为0,说明对方B系停止输出脉冲 - * 返回值 :无。 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt); -/* 函数功能:双系心跳信号功能开启。 - * 输入参数:无。 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意:板级初始化之后调用一次该函数启动功能。 - */ -void drvStartABSynSwitch(void); - -/* 函数功能:双系心跳信号功能关闭 - * 输入参数:无。 - * 输出参数:无。 - * 返回值 :无。 - * 使用注意: - */ -void drvStopABSynSwitch(void); - -/* 函数功能:获取双系硬通信的反馈。 - * 输入参数:无。 - * 输出参数:pABSynMsgType *pMsgType, 采集到的type信息 - * 返回值 :UINT8, - * 0x00,正常。 - * 0x81,命令与反馈不一致 - * 0x82,指针为空 - * 使用注意:发送与采集间隔至少为40ms。 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType); - -/* 函数功能:获取当前系间信号脉冲的最大误差值。 - * 输入参数:uint8_t index - * 输出参数:无 - * 返回值 :float -- 误差百分比。 - */ -float drvGetSyncSigErr(ABSynMsgType msgType); - -/* 函数功能:查询当前各通道收到的外部脉冲个数。 - * 输入参数:无。 - * 输出参数: uint8_t index -- 通道索引:0-自身反馈通道 1-对方A系通道 2-对方B系通道 - * uint32_t* pPulseCnt -- 外部存储变量地址 - * 返回值 :uint8_t 0-成功 1-失败:入参错误。 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt); - - -/************************************************************************/ -/* -* @brief 读取phy寄存器相关维护信息 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态 -* -* @param[in] -* const char* fecx 需要检查的网络接口名称(如"fec0","fec1") -* uint16_t infoLen - 寄存器信息数组长度,此长度应该大于等于12 -* @param[out] -* uint16_t * Info - 寄存器信息数组存储首地址 -* @return rtn 返回状态 -* - n: n为实际读取的寄存器个数 -* - -1: 链路异常或操作失败 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen); - -/************************************************************************/ -/* -* @brief 通过PHY寄存器检查指定网卡链路状态 -* -* 该函数通过创建套接字并发送SIOCGDRVSPEC控制命令,读取指定网络接口的PHY寄存器状态, -* 根据寄存器值的特定位判断链路是否正常。 -* -* @param[in] fecx 需要检查的网络接口名称(如"fec0","fec1") -* @return rtn 返回状态 -* - 0: 链路状态正常(PHY寄存器bit2为1) -* - -1: 链路异常或操作失败 -* -* @note 函数执行流程: -* 1. 创建UDP套接字 -* 2. 配置phycmd控制结构体: -* - ifd_name: 网络接口名称 -* - ifd_cmd: 使用READ_PHY_REG命令 -* - phy_id: PHY地址7 -* - phy_reg: 寄存器地址1(状态寄存器) -* 3. 通过devctl发送控制命令 -* 4. 解析phy_data寄存器值的bit2判断链路状态 -*/ -int phytool(const char* fecx); diff --git a/TSCP/src/MSCP/CFM/CFM_Net.c b/TSCP/src/MSCP/CFM/CFM_Net.c index 34cff21..910bc04 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) @@ -525,6 +525,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 +538,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 +548,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数据发送 @@ -1177,6 +1178,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 +1193,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 { @@ -1210,7 +1212,7 @@ ENUM_CM_RETURN CFM_2x2_TimeGet(OUT CM_INT64* pDelay, OUT CM_INT64* pOffset) MSCP_LOG_MSG("pDelay == NULL || pOffset == NULL\n"); } /*- 返回执行结果 */ - return rt; + return ret; } /** * @brief 周期同步线程 @@ -3319,7 +3321,8 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg) { /*- 不是当前应该收到的过程报文丢弃不处理*/ MSCP_LOG_MSG("0xa4u The packet should not be received in the current state!!! \n"); - (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4)); } + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4)); + } } else { @@ -4040,6 +4043,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 +4056,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 +4069,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 +4088,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 +4101,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 diff --git a/TSCP/src/MSCP/DFM/DFM_DRV.h b/TSCP/src/MSCP/DFM/DFM_DRV.h index c82b049..21c0ad8 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV.h +++ b/TSCP/src/MSCP/DFM/DFM_DRV.h @@ -48,9 +48,6 @@ CM_INT32 DFM_output(CM_UINT8 channel, CM_UINT8 level); /*- 切系按钮 */ CM_INT32 DFM_switchButton(void); -/*- 看门狗指示灯 */ -void DFM_ledMonitor(CM_UINT8 light); - /*-通道电流电压读取*/ CM_INT32 DFM_Read_ina3321(INOUT CM_INT32* channel_1_shunt, INOUT CM_FLOAT32* channel_1_bus, INOUT CM_INT32* channel_2_shunt, INOUT CM_FLOAT32* channel_2_bus, INOUT CM_INT32* channel_3_shunt, INOUT CM_FLOAT32* channel_3_bus); diff --git a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c index 937124d..6219c56 100644 --- a/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c +++ b/TSCP/src/MSCP/DFM/DFM_DRV_QNX.c @@ -619,6 +619,11 @@ void DFM_Network_Check(void) (void)system("drvtools -link9131 3 >> networkcheck.txt"); FILE *file = fopen(filename, "r"); + if(NULL == file) + { + printf("open networkcheck.txt error\n"); + } + else{ while (NULL != fgets(pFileBuf, sizeof(pFileBuf), file)) { if('w' != pFileBuf[0]) { @@ -632,5 +637,6 @@ void DFM_Network_Check(void) } /* 关闭文件 */ (void)fclose(file); + } return; } diff --git a/TSCP/src/MSCP/MSCP_APP_API.c b/TSCP/src/MSCP/MSCP_APP_API.c index 0316222..66fc894 100644 --- a/TSCP/src/MSCP/MSCP_APP_API.c +++ b/TSCP/src/MSCP/MSCP_APP_API.c @@ -74,14 +74,12 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, case ENUM_MSG_OUTNET_SAFE: /*-< 外网安全通信 */ /*- 从外网安全协议读取应用接收报文 */ *pRxLen = Prtcl_OutnetSafe_AppRecv(pSrcName, pSrcLogicID, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_INNET_SAFE: /*-< 内网安全通信 */ *pSrcLogicID = 0u; /*- 从内网安全协议读取应用接收报文 */ *pRxLen = Prtcl_InnetSafe_AppRecv(pSrcName, pLifeTime, rxBuf, rxSize); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_INNET_MAINTENANCE: /*-< 远程部署功能内网安全通信 */ @@ -89,7 +87,6 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 从内网安全协议读取应用接收报文 */ *pRxLen = Prtcl_InnetSafe_RmRecv(pSrcName, pLifeTime, rxBuf, rxSize); MSCP_LOG_BIN(rxBuf,*pRxLen); - rt = 1u; /*- 返回 */ break; case ENUM_MSG_ERROR: /*-< 保留字 */ @@ -103,7 +100,14 @@ CM_UINT8 MSCP_AppRecvMsg(IN ENUM_MSCP_MSG_CHN_T ch, /*- 返回 */ break; } - + if(0u < *pRxLen) + { + rt = 1u; + } + else + { + rt = 0u; + } } else { diff --git a/TSCP/src/MSCP/MSCP_main.c b/TSCP/src/MSCP/MSCP_main.c index b5f36d0..c849ace 100644 --- a/TSCP/src/MSCP/MSCP_main.c +++ b/TSCP/src/MSCP/MSCP_main.c @@ -117,7 +117,6 @@ static void SelfCheckInit(void); static void selfCheckSemWait(void); static void selfCheckSemPost(void); - /** * @brief 主程序入口 * @details 调用初始化入口和周期循环入口 @@ -189,6 +188,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); @@ -916,10 +917,3 @@ static void s_LogicProc(ENUM_CM_RETURN(*pAppfunc)(void)) /*- 无处理 */ } } - - - - - - - diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.c b/TSCP/src/MSCP/PFM/PFM_Cfg.c index 73a7fab..a4ddc92 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.c +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.c @@ -40,11 +40,11 @@ CM_CHAR FS_FILE_PATH[100]; /** 平台软件版本号 */ -const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 53u }; +const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 18u, 0u, 2u }; /** 驱动软件版本号 */ CM_UINT8 MSCP_DRV_VERION[4] = {0}; /** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */ -CM_UINT16 TSCP_DOC_VERION[2] = {31u,0u}; +CM_UINT16 TSCP_DOC_VERION[2] = {34u,11u}; /** 操作系统版本号 */ CM_UINT8 TSCP_QNX_VERION[10] = {0u}; @@ -62,6 +62,26 @@ STRU_APP_VERSON g_App_Verson; static STRU_APP_CFG_T g_AppCfgInterface; static void s_str2md5(IN const CM_CHAR* str, OUT CM_UINT8 md5[16]); static void PFM_CFG_Check_BoardID(void); +void PFM_CFG_MAINID_Init(void) +{ + g_PFM_Cfg.CPU_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI,"ID","CPU_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.CPU_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_1); + g_PFM_Cfg.BOARD_ID = (CM_UINT8)CM_GetProfileInt(MAIN_ID_INI, "ID", "BOARD_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.BOARD_ID, CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_2); + PFM_CFG_Check_BoardID(); + g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_3); + g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); + CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_2, TSCP_DARK_ASSERT_4); + g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); + MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ + sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, + sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, + sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, + sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); +} /** * @brief 平台配置文件初始化 */ @@ -79,27 +99,7 @@ void PFM_CFG_Init(void) (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); @@ -274,7 +274,7 @@ void PFM_CFG_Init(void) g_PFM_Cfg.CC_R_InnetRaw_Port = g_AppCfgInterface.OutNetRed.InnetRaw_Port; g_PFM_Cfg.CC_R_Heart_Port = 53003; - g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port;; + g_PFM_Cfg.CC_B_OutnetSafe_Port = g_AppCfgInterface.OutNetBlue.OutnetSafe_Port; g_PFM_Cfg.CC_B_OutnetRaw_Port = g_AppCfgInterface.OutNetBlue.OutnetRaw_Port; g_PFM_Cfg.CC_B_InnetRaw_Port = g_AppCfgInterface.OutNetBlue.InnetRaw_Port; g_PFM_Cfg.CC_B_Heart_Port = 53003; diff --git a/TSCP/src/MSCP/PFM/PFM_Cfg.h b/TSCP/src/MSCP/PFM/PFM_Cfg.h index d2b7f7a..0749cbc 100644 --- a/TSCP/src/MSCP/PFM/PFM_Cfg.h +++ b/TSCP/src/MSCP/PFM/PFM_Cfg.h @@ -346,6 +346,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_InputOutput.c b/TSCP/src/MSCP/PFM/PFM_InputOutput.c index dd59bb6..aeed363 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.c +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.c @@ -87,6 +87,11 @@ static CM_INT32 s_2oo2OutputCheckFrame_Pack(OUT CM_UINT8 buf[], IN CM_UINT32 Buf static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSize); /* 输入阶段的2x2同步 */ static void s_input_2x2sync(void); + +/** + * @brief 输出阶段的2取校验 + */ +static void s_output_2oo2check(IN CM_UINT8* check_2oo2_Buf, IN CM_UINT32 check_2oo2_Len); /** * @brief 输入阶段的2x2同步 */ @@ -639,9 +644,7 @@ void PFM_OutputProc(void) CM_UINT8 check_2oo2_Buf[500] = { 0u }; /* 输出校验帧数组 */ CM_INT32 check_2x2_Len = 0; /* 输出校验帧长度 */ CM_UINT8 check_2x2_Buf[500] = { 0u }; /* 输出校验帧数组 */ - CM_INT32 i = 0; /* 循环变量 */ - CM_UINT8 buf_peer[500] = { 0u }; /* 邻机接收缓冲区 */ - CM_INT32 ret = 0; /* 临时变量 */ + CM_INT32 i = 0, ret = 0; /* 循环变量 */ ENUM_2x2_STATE_T state_2x2 = ENUM_2x2_SHUTDOWN; /* 本系热备状态 */ @@ -680,18 +683,8 @@ void PFM_OutputProc(void) /*- 是否开启了2oo2功能 */ if (0x55u == g_PFM_Cfg.M_2oo2_Enable) { - /*- 2oo2交换输出校验帧 */ - ret = SFM_2oo2_Exchange_Currency(check_2oo2_Buf, check_2oo2_Len, buf_peer, (CM_UINT32)check_2oo2_Len, ENUM_2oo2_OUTPUT_CHECK); - - /*- 检查2oo2双机的输出校验帧是否一致 */ - CM_RE_ASSERT(check_2oo2_Len == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_1); - ret = CM_Memcmp(check_2oo2_Buf, buf_peer, (CM_SIZE_T)check_2oo2_Len); - if(0 != ret) - { - MSCP_LOG_DATALEN(check_2oo2_Buf,check_2oo2_Len,"Ouput check_2oo2_Buf"); - MSCP_LOG_DATALEN(buf_peer,check_2oo2_Len,"Ouput buf_peer"); - CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2); - } + /* 2取校验 */ + (void)s_output_2oo2check(check_2oo2_Buf, (CM_UINT32)check_2oo2_Len); } else { @@ -705,6 +698,8 @@ void PFM_OutputProc(void) if (0x55u == g_PFM_Cfg.M_2x2_Enable) { /*- 输出阶段2x2处理 */ + ret = SFM_2oo2_Exchange_Currency(check_2x2_Buf, check_2x2_Len, &check_2x2_Buf[check_2x2_Len], sizeof(check_2x2_Buf) - check_2x2_Len, ENUM_2oo2_OUTPUT_EX); + check_2x2_Len += ret; SFM_2x2_OutputProc(check_2x2_Buf, check_2x2_Len); } else @@ -790,7 +785,6 @@ void PFM_OutputProc(void) void PFM_EndProc(void) { /*- 变量初始化 */ - CM_UINT32 crc = 0u; /* crc值 */ CM_UINT8 mybuf[8] = { 0u }; /* 本机2oo2缓冲区 */ CM_UINT8 peerbuf[8] = { 0u };/* 邻机2oo2缓冲区 */ CM_INT32 len = 0; /* 长度 */ @@ -803,16 +797,16 @@ 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); + CM_Memcpy(&mybuf[4u], 4u, g_TxAppFollow, 4u); /*- 2oo2交换特征信息 */ len = SFM_2oo2_Exchange_Currency(mybuf, 8, peerbuf, 8u, ENUM_2oo2_OUTPUT_CHECK); /*- 2oo2严格比较特征信息 */ CM_RE_ASSERT(8 == len, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_1); if(0 == CM_Memcmp(mybuf, peerbuf, (CM_SIZE_T)8)) { - /*- 无处理 */ + /* 填入另一个CPU的CRC,本机的CRC在接口函数里设置的时候已计算,直接使用 */ + CM_Memcpy(&g_TxAppFollow[4u], 4u, &peerbuf[4u], 4u); } else { @@ -1831,5 +1825,41 @@ void PFM_GetRciTempBuf(OUT CM_UINT16* RedBuf, OUT CM_UINT16* BlueBuf) MSCP_LOG_MSG("RED or BLUE Buf is NULL\n"); } } +/** + * @brief 输出阶段的2取校验 + */ +static void s_output_2oo2check(IN CM_UINT8* check_2oo2_Buf, IN CM_UINT32 check_2oo2_Len) +{ + CM_INT32 ret = 0, i = 0; + CM_UINT8 buf_peer[500] = {0u}; + /*- 2oo2交换输出校验帧 */ + CM_ASSERT(NULL != check_2oo2_Buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); + ret = SFM_2oo2_Exchange_Currency(check_2oo2_Buf, check_2oo2_Len, buf_peer, (CM_UINT32)check_2oo2_Len, ENUM_2oo2_OUTPUT_CHECK); + /*- 检查2oo2双机的输出校验帧是否一致 */ + CM_RE_ASSERT(check_2oo2_Len == ret, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_2); + ret = CM_Memcmp(check_2oo2_Buf, buf_peer, (CM_SIZE_T)check_2oo2_Len); + if(0 != ret) + { + MSCP_LOG_DATALEN(check_2oo2_Buf,check_2oo2_Len,"Ouput check_2oo2_Buf"); + MSCP_LOG_DATALEN(buf_peer,check_2oo2_Len,"Ouput buf_peer"); + for (i = 1; i <= g_2x2oo2_data_num; i++) + { + if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][i].b_2oo2_Enable) + { + ret = CM_Memcmp(check_2oo2_Buf + 4 + (i - 1) * 8, buf_peer + 4 + (i - 1) * 8, 8); + if(ret != 0) + { + MSCP_LOG_MSG("2oo2 output compare err, INDEX = %d, len = %d\n", i, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + MSCP_LOG_BIN(g_2x2oo2_tx[g_2x2oo2_base][i].p_buf, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + } + } + else + { + /*二取标志未使能*/ + } + } + CM_RE_ASSERT(0, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_3); + } +} diff --git a/TSCP/src/MSCP/PFM/PFM_Log.c b/TSCP/src/MSCP/PFM/PFM_Log.c index 124f091..208cf3f 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.c +++ b/TSCP/src/MSCP/PFM/PFM_Log.c @@ -28,6 +28,7 @@ #include #include #include "CM_IniFile.h" +#include "CFM_Raw.h" extern CM_UINT32 g_MSCP_SysCount; ENUM_INIT_STAGE_FLAG g_InitUpdateFlag = ENUM_ERROR;/*- 初始化阶段标志*/ @@ -44,7 +45,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 设置初始化阶段 @@ -219,6 +227,37 @@ void MSCP_PFM_LOG_DARK(IN const CM_UINT8 infoType, IN const CM_UINT16 code, IN c (void)CFM_DarkLog_Storage(infoType, code, infoLen, info); } +void MSCP_ASSERT_TraceLog(void) +{ + CM_CHAR trace_cmd[256] = {0}; + CM_CHAR pidin_cmd[256] = {0}; + CM_INT32 ret = 0; + (void)sprintf(trace_cmd, + "tracelogger -c -n %d -s%d -f %s &", PFM_RECORD_BUF, PFM_RECORD_TIME_S, PFM_LATEST_TRACE_NAME); + ret = system(trace_cmd); + if (-1 == ret) + { + (void)printf("ERROR: Failed to start tracelogger: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's tracelogger or threads_log system fail\n"); + } + else + { + ; + } + (void)sprintf(pidin_cmd, + "pidin -p %d threads >> %s &", getpid(),PFM_LATEST_THREADS_NAME); + ret = system(pidin_cmd); + if (-1 == ret) + { + (void)printf("ERROR: Failed to start pidin: %s\n", strerror(errno)); + MSCP_LOG_MSG("assert's pidin or threads_log system fail\n"); + } + else + { + ; + } + CM_Sleep(PFM_RECORD_TIME_S + 1u); +} /** * @brief 断言 @@ -313,6 +352,7 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo /*- 安全关断*/ DFM_saftyOff(); + MSCP_ASSERT_TraceLog(); /*- 设置LED指示灯*/ if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) { @@ -452,10 +492,12 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh { CFM_LogCiphertextSend(); } + MSCP_ASSERT_TraceLog(); /*- 是否执行重启命令*/ if(AutoReboot_Flag == 0x55u) { (void)printf("See You Later!!!\n"); + CM_Sleep(2000u); (void)system("shutdown"); /*- 休眠等待重启 */ CM_Sleep(CM_UINT32_MAX); @@ -575,7 +617,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 +864,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; @@ -897,49 +941,90 @@ void PFM_SendLastAssertLog(void) } /** -* @brief 宕机日志管理 +* @brief 通用循环日志管理 +* @param file_type 文件类型标识 +* 0: 宕机日志 (crashlog) +* 1: 跟踪日志 (.kev) +* 2: 线程日志 (threads) * @return 无 */ -static void PFM_LOG_ManageCrashlog(void) +static void PFM_LOG_ManageFiles(CM_UINT8 file_type) { /*- 读宕机文件*/ - FILE *pcrash_num = NULL; - CM_CHAR str_crash_new_name[256] = {0}; - CM_CHAR str_crash_old_name[256] = {0}; - CM_UINT32 i = 0; + FILE *p_file = NULL; + CM_CHAR str_new_name[256] = {0}; + CM_CHAR str_old_name[256] = {0}; + CM_CHAR final_name[256] = {0}; + CM_CHAR base_name[64] = {0}; + CM_CHAR extension[16] = {0}; + CM_CHAR latest_file[128] = {0}; + CM_UINT32 max_count = 0u; + CM_UINT32 i = 0u; + CM_UINT8 typeValid = 1u; + switch(file_type) + { + case 0u: /* 宕机日志 */ + (void)strcpy(base_name, "crashlog_"); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, "crashlog.txt"); + max_count = PFM_MAX_TRACE_COUNT; + break; + case 1u: /* 跟踪日志 */ + (void)strcpy(base_name, PFM_BASE_TRACE_NAME); + (void)strcpy(extension, ".kev"); + (void)strcpy(latest_file, PFM_LATEST_TRACE_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + case 2u: /* 线程日志 */ + (void)strcpy(base_name, PFM_BASE_THREADS_NAME); + (void)strcpy(extension, ".txt"); + (void)strcpy(latest_file, PFM_LATEST_THREADS_NAME); + max_count = PFM_MAX_TRACE_COUNT; + break; + default: + typeValid = 0u; + break; /* 无效的文件类型 */ + } + if(1u == typeValid) + { /*- 查找第一个不存在的文件名 */ - for(i = 0u;i<10u;i++) + for(i = 1u; i <= max_count; i++) { /*- 通过打开文件成功检测文件是否存在 */ - sprintf(str_crash_new_name,"crashlog_%d.txt",i + 1u); - pcrash_num = fopen(str_crash_new_name,"r"); + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + p_file = fopen(str_new_name, "r"); /*- 找到第一个不存在的文件名 */ - if(NULL == pcrash_num) + if(NULL == p_file) { - /*- 跳出 */ + (void)strcpy(final_name, str_new_name); break; } else { /*- 关闭文件 */ - fclose(pcrash_num); + (void)fclose(p_file); } } /*- 如果所有文件名都存在,删除最旧的日志(crashlog_1.txt)*/ - if(10u == i) + if(i > max_count) { - (void)strcpy(str_crash_old_name,"crashlog_1.txt"); - (void)remove(str_crash_old_name); - for(i = 2u;i <= 10u; i++) + (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_crash_new_name,"crashlog_%d.txt",i); - (void)rename(str_crash_new_name,str_crash_old_name); - (void)strcpy(str_crash_old_name,str_crash_new_name); + (void)sprintf(str_new_name, "%s%d%s", base_name, i, extension); + (void)sprintf(str_old_name, "%s%d%s", base_name, i - 1u, extension); + (void)rename(str_new_name, str_old_name); } + (void)strcpy(final_name, str_new_name); } /*- 对文件重新命名 */ - (void)rename("crashlog.txt",str_crash_new_name); + if(final_name[0] != 0) + { + (void)rename(latest_file, final_name); + } + } } /* * @brief 暗文日志故障码生成指针函数 diff --git a/TSCP/src/MSCP/PFM/PFM_Log.h b/TSCP/src/MSCP/PFM/PFM_Log.h index 90a9f06..7ba72f7 100644 --- a/TSCP/src/MSCP/PFM/PFM_Log.h +++ b/TSCP/src/MSCP/PFM/PFM_Log.h @@ -169,6 +169,13 @@ void MSCP_PFM_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_ /* 记录二进制日志 */ #define MSCP_LOG_BIN(buf,len) (MSCP_PFM_LOG_BIN(__FILE__,__FUNCTION__,(CM_INT32)__LINE__,(buf),(len))) +#define PFM_MAX_TRACE_COUNT (10u) +#define PFM_BASE_TRACE_NAME "trace_log_" // 文件名前缀 (trace_crash_1.kev) +#define PFM_LATEST_TRACE_NAME "trace_log_latest.kev" +#define PFM_BASE_THREADS_NAME "threads_state_" // 文件名前缀 (threads_state_1.txt) +#define PFM_LATEST_THREADS_NAME "threads_state_latest.txt" +#define PFM_RECORD_TIME_S (5u) +#define PFM_RECORD_BUF (1024) /* 1024 * 16KB = 16MB*/ /* 函数实现 */ void MSCP_PFM_LOG_BIN(IN const CM_CHAR *filename, IN const CM_CHAR *func, IN CM_INT32 line, IN const CM_UINT8 *Buf, IN CM_UINT32 Len); @@ -202,6 +209,7 @@ void MSCP_LOG_DATALEN(IN CM_UINT8 *Buf, IN CM_UINT32 Len, IN char *Annotation); CM_UINT8 PFM_LOG_GET_STOP_FLAG(void); void PFM_SendLastAssertLog(void); +void MSCP_ASSERT_TraceLog(void); CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num); #define DARK_FAULT_CODE_MERGE(Mode,faultCode,funNum) (PFM_DarkLogGenerate(Mode,faultCode,funNum)) /***************************暗文日志故障码信息编码表****************************/ diff --git a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c index dd9d423..b07822b 100644 --- a/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c +++ b/TSCP/src/MSCP/PFM/PFM_RemoteUpdate.c @@ -2219,16 +2219,23 @@ static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 MSCP_LOG_MSG("error pack 0xa8 localState = %d partnerState = %d\n", localState, partnerState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_9)); } + else if(s_packFirstRecvTimer != s_packFirstSendTimer) + { + s_packSwitchAccredit = 1u; + s_switchAuthorization = 12u; + MSCP_LOG_MSG("error pack 0xa8 s_firstTimer = %d packTimer = %d\n", s_packFirstSendTimer, s_packFirstRecvTimer); + (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_14, TSCP_DARK_ASSERT_10)); + } else { /*- 二次至切系状态状态 */ s_switchRmFlag = 0x55u; s_packSwitchAccredit = 0u; s_switchAuthorization = 0u; + s_firstState = ENUM_2x2_SHUTDOWN; } /*再次应答*/ recvType = 0x58u; - s_firstState = ENUM_2x2_SHUTDOWN; } /*- 切系命令请求回复 */ PFM_RemoteSwitch_Send(recvType,packTimer,s_packSwitchAccredit,s_switchAuthorization); diff --git a/TSCP/src/MSCP/SFM/SFM_2oo2.c b/TSCP/src/MSCP/SFM/SFM_2oo2.c index 0d70b3e..c1c2ae3 100644 --- a/TSCP/src/MSCP/SFM/SFM_2oo2.c +++ b/TSCP/src/MSCP/SFM/SFM_2oo2.c @@ -54,6 +54,7 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E static void s_2oo2_Send_Crash(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msgType); /* 维护模式2oo2接收 */ static CM_INT32 s_2oo2_Recv_Crash(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT ENUM_2oo2_MSG_T *pMsgType,STRU_2OO2_CTRL_T *p_2oo2_Ctrl); +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type); /** * @brief 2oo2上电初始化 * @param vitalBuf 关键数据数组 @@ -245,6 +246,9 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ CM_UINT16 FrameIndex = 0u; /* 帧序号 */ CM_UINT32 FrameLen = 0u; /* 帧长度 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*系统周期号*/ + CM_UINT32 crc = 0u; + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 判断是否计算CRC*/ + clacCrcFlag = s_isClac2oo2Crc(msgType); PFM_LOG_SET_STOPTIMER(TSCP_DARK_2OO2); /*- 入口检查 */ CM_ASSERT(((DataLen >= 0) && (NULL != Data) && (NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_5, TSCP_DARK_ASSERT_1); @@ -281,9 +285,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ { CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 23); /* 帧序号 */ (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25),(CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)NET_20K_SIZE); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(NET_20K_SIZE + 25u, p_2oo2_Ctrl->UDP_Cache); /* 长度(填写满帧) */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, NET_20K_SIZE + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[NET_20K_SIZE + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(29u + NET_20K_SIZE)); /* 交给通信层发送 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(25u + NET_20K_SIZE)); /* 交给通信层发送 */ - + } } /*- 发送尾帧 */ @@ -291,8 +303,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "指针运算提高代码执行效率" */ CM_LongToChar(21u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*长度*/ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(25u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*长度*/ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, FrameLen + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[FrameLen + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(29u + FrameLen)); /* 交给通信层发送 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(25u + FrameLen)); /* 交给通信层发送 */ + } PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); } else @@ -313,6 +334,7 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg { /*- 变量初始化 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*系统周期号*/ + CM_UINT32 crc = 0u; /*- 入口检查 */ CM_ASSERT(((NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); /* @@ -327,15 +349,17 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg 4字节 CRC(含长度) */ /*- 填充报文头 */ - CM_LongToChar(19u, p_2oo2_Ctrl->UDP_Cache); /* 长度(暂时填写满帧) */ + CM_LongToChar(23u, p_2oo2_Ctrl->UDP_Cache); /* 长度(暂时填写满帧) */ CM_LongToChar(p_2oo2_Ctrl->LocalID, p_2oo2_Ctrl->UDP_Cache + 4); /* 源ID */ CM_LongToChar(p_2oo2_Ctrl->PeerID, p_2oo2_Ctrl->UDP_Cache + 8); /* 目的ID */ CM_LongToChar(SysCyc, p_2oo2_Ctrl->UDP_Cache + 12); /* 周期号 */ CM_LongToChar(p_2oo2_Ctrl->SN, p_2oo2_Ctrl->UDP_Cache + 16); /* 序列号 */ p_2oo2_Ctrl->UDP_Cache[20] = (CM_UINT8)msgType; /* 类型 */ CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 21); /* 重传序号 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, 23); + CM_LongToChar(crc, p_2oo2_Ctrl->UDP_Cache + 23); - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)23); /* 交给通信层发送 */ + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)27); /* 交给通信层发送 */ } /** * @brief 2oo2接收支持重传 @@ -366,7 +390,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E CM_INT32 allLen = 0; /* 收到的报文总长度 */ CM_UINT8 type = 0u; /* 报文类型 */ CM_UINT16 ARQ_Cut = 0u; /* 记录重传请求次数 */ - + CM_UINT32 msgCrc = 0u; /* 报文CRC */ + CM_UINT32 calcCrc = 0u; /* 本地计算CRC */ + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 判断是否计算CRC*/ CM_UINT16 ARQ_FrameStart = 0u;/* 重传帧序号 */ CM_UINT8 MineRcvSuccessFlag = CM_FALSE;/*本机接收完成标志*/ CM_UINT8 PeerRcvSuccessFlag = CM_FALSE;/*对系接收完成标志*/ @@ -385,7 +411,7 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E /*- 从通信层接收2oo2报文 */ rxLen = p_2oo2_Ctrl->DataRecv(p_2oo2_Ctrl->UDP_Cache, (CM_UINT32)sizeof(p_2oo2_Ctrl->UDP_Cache)); /*- 收到的报文长度是否大于23 */ - if (23 <= rxLen) + if (25 <= rxLen) { /*- 解析2oo2报文头 */ @@ -408,11 +434,22 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E msgCyc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 12); msgSN = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 16); type = p_2oo2_Ctrl->UDP_Cache[20]; + clacCrcFlag = s_isClac2oo2Crc(type); + if(ENUM_CM_TRUE == clacCrcFlag) + { + msgCrc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + msgLen); + calcCrc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, msgLen); + } + else + { + calcCrc = msgCrc; + } if (((msgLen + 4u) == (CM_UINT32)rxLen) && (SrcID == p_2oo2_Ctrl->PeerID) && (DstID == p_2oo2_Ctrl->LocalID) && (msgCyc == sysCyc) - && (msgSN == p_2oo2_Ctrl->SN)) + && (msgSN == p_2oo2_Ctrl->SN) + && (msgCrc == calcCrc)) { switch(type) { @@ -444,7 +481,14 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E if (CM_FALSE == MineRcvSuccessFlag) { pData = p_2oo2_Ctrl->UDP_Cache + 25; + if(ENUM_CM_TRUE == clacCrcFlag) + { + DataLen = (CM_INT32)msgLen - 25; + } + else + { DataLen = (CM_INT32)msgLen - 21; + } /*- 分帧接收2oo2报文 */ ret = SFM_FrameSave(&p_2oo2_Ctrl->FrameCtrl, type, FrameNum, FrameIndex, pData, DataLen, RxData, &allLen, RxSize); /*- 是否收齐了完整2oo2报文 */ @@ -477,9 +521,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E } else { - MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d\n", + MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d, crc:%d, calcrc:%d\n", rxLen, msgLen, SrcID, p_2oo2_Ctrl->PeerID, DstID, p_2oo2_Ctrl->LocalID, - msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type); + msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type, msgCrc, calcCrc); (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2OO2_RCV_ERR,11u, sizeof(CM_INT32),rxLen, sizeof(CM_UINT32),msgLen, @@ -975,7 +1019,7 @@ void SFM_2oo2_Reset_AutoRbootCut(void) RM_Reset_FaultRbootCut(0); CM_RE_ASSERT(cut == 0u, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); /*- 同时修改时间阈值*/ - g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u;; + g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u; } else { @@ -983,6 +1027,19 @@ void SFM_2oo2_Reset_AutoRbootCut(void) } } } +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type){ + ENUM_CM_RETURN rt = ENUM_CM_TRUE; + switch (type) + { + case ENUM_2oo2_INPUT_EX: + case ENUM_2oo2_END_EX: + rt = ENUM_CM_FALSE; + break; + default: + break; + } + return rt; +} /** * @brief 初始化2取控制数据以及清空2取缓冲区 diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index 5a1b74f..c1116c4 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.c +++ b/TSCP/src/MSCP/SFM/SFM_2x2.c @@ -65,7 +65,7 @@ static CM_UINT8 g_TxBaseFollow[SFM_FOLLOW_BUFF_SIZE]; /**< 发送的平台跟随 static CM_INT32 g_RxAppFollow_len = 0; /**< 收到的应用跟随数据长度 */ static CM_UINT8 g_RxAppFollow[MSCP_FOLLOW_BUFF_SIZE*2]; /**< 收到的应用跟随数据报文 */ static CM_INT32 g_RxAppFollowCrc_len = 0; /**< 收到的应用跟随数据长度 */ -static CM_UINT8 g_RxAppFollowCrc[8]; /**< 收到的应用跟随数据报文 */ +static CM_UINT8 g_RxAppFollowCrc[12]; /**< 收到的应用跟随数据报文 */ CM_INT32 g_TxAppFollow_len = 0; /**< 发送的应用跟随数据长度 */ CM_UINT8 g_TxAppFollow[MSCP_FOLLOW_BUFF_SIZE*2]; /**< 发送的应用跟随数据报文 */ @@ -96,7 +96,27 @@ 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); +/** + * @brief 输入阶段,主系发送平台跟随数据前的2oo2比较 + */ +static void s_2x2_BaseFollow_2oo2Check_Send(void); +/** + * @brief 输入阶段,非主系进行相关CRC校验后跟随 + */ +static void s_2x2_BaseFollow_Sync(void); +/** + * @brief 周期末阶段,备系接收主系应用跟随CRC后的比较逻辑 + */ +static void s_2x2_AppFollow_SyncCheck(void); +/** + * @brief 输出阶段,备系接收主系输出数据CRC后的比较逻辑 + */ +static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLen); +/** + * 统一置切系标志 + */ +static void s_2x2_CloseSwitchFlag(void); /** * @brief 2X状态切换独立线程 */ @@ -206,7 +226,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)) @@ -686,6 +706,7 @@ static void s_State_Transition(void) s_2x2_state_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN; /*通信SN号清空-防止对系重新上电后不接收新的SN号*/ s_2x2_state_Ctrl.RxSN = 0u; + s_2x2_state_Ctrl.RxStateSysCyc = 0u; } else { @@ -725,7 +746,7 @@ static void s_State_Transition(void) { /*- 无处理 */ SFM_LOG_MSG_2X("Transition:2x2:OFFLINE>SLAVE SysCyc:%d,BF:%d,AF:%d,COK:%d,OUT:%d,TS:%d,AFC:%d\n", - s_2x2_state_Ctrl.SysCyc,s_2x2_state_Ctrl.LastRxInputSysCyc, + s_2x2_state_Ctrl.SysCyc,s_2x2_state_Ctrl.LastRxInputSysCyc,s_2x2_state_Ctrl.LastFollowCyc, s_2x2_state_Ctrl.LastCheckOKCount,s_2x2_state_Ctrl.OutPutCheckFailFlag, s_2x2_state_Ctrl.TimeSyncFlag, s_2x2_state_Ctrl.AppFollowCmpFlag); @@ -765,7 +786,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 +863,14 @@ static void s_State_Transition(void) /*- 返回 */ break; case ENUM_2x2_MASTER:/*-< 主系 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; /* 主系降离线后,之后出现双离线可通过预升主升主*/ /*如果健康度表示需要切系,则自己降离线*/ /*- 自己是否健康度不足 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { /*- 本系降离线 */ s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); #if 0 s_2x2_state_Ctrl.RxBaseFollowSysCyc = 0u; /**< 收到的对系跟随数据的周期号,2oo2交换 */ s_2x2_state_Ctrl.RxAppFollowSysCyc = 0u; /**< 收到的对系应用跟随数据的周期号,2oo2交换 */ @@ -899,37 +912,19 @@ static void s_State_Transition(void) } } - else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && + else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LastPartnerState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.LocalSwitchState) && (ENUM_2x2_SWITCH_OPEN == s_2x2_state_Ctrl.PartnerSwitchState) && (1u == s_2x2_state_Ctrl.ctrSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 检测到对系是备系,且双系切系按钮状态为ENUM_2x2_SWITCH_OPEN,主系降为备系*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(SWITCH)\n"); } else if((ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState) && (1u == s_2x2_state_Ctrl.aidSwitchFlag) && (0u == s_2x2_state_Ctrl.MicroCyc)) { /*- 检测到对系是备系,且允许AID切系, 主系降为备系*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(AID SWITCH)\n"); } else @@ -939,6 +934,7 @@ static void s_State_Transition(void) /*- 返回 */ break; case ENUM_2x2_SLAVE:/*-< 备系 */ + s_2x2_state_Ctrl.preMasterAllowed = CM_FALSE; /* 备系降离线后,禁止通过预升主升主*/ /*- 自己是否健康度不足 */ if (ENUM_CM_TRUE == Flag_Sick_Down) { @@ -967,6 +963,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 +981,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 +996,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 +1048,7 @@ static void s_State_Transition(void) /*报警禁止切系*/ SFM_LOG_MSG_2X("Transition:2x2:SLAVE>>>>>>>SLAVE(NOT MASTER)\n"); } - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); } /*- 与对系是否同步超时 */ else if ((s_2x2_state_Ctrl.SysCyc - s_2x2_state_Ctrl.LastCheckOKCount) >= MSCP_2X2_SYNC_TIMEOUT_CYC) @@ -1123,7 +1111,7 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 无处理*/ } /*微小周期执行*/ - for(s_2x2_state_Ctrl.MicroCyc = 0;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) + for(s_2x2_state_Ctrl.MicroCyc = 0u;s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc;s_2x2_state_Ctrl.MicroCyc++) { /*- 记录起始时间*/ sTick = CM_GetTick(); @@ -1175,7 +1163,7 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void) /*- 记录当前时间*/ CM_Sleep(1); curTick[5] = CM_GetTick(); - }while(((curTick[5] - sTick) < MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION) && (s_2x2_state_Ctrl.MicroCyc < s_2x2_thread_Ctrl.number_Cyc-1u) /*ms*/); + }while(((curTick[5] - sTick) < (MSCP_2X2_THREAD_TIME*CM_UNSIGNED_MILLION)) && (s_2x2_state_Ctrl.MicroCyc < (s_2x2_thread_Ctrl.number_Cyc-1u)) /*ms*/); SFM_LOG_MSG_2X("2x2_StateChange_Thread[%d],ST:%dms,2T1:%dms,XT:%dms,2T2:%dms,TT:%dms,OT:%dms,M:%d,S:%d\n",s_2x2_state_Ctrl.MicroCyc, (curTick[0] - sTick)/CM_UNSIGNED_MILLION,(curTick[1] - sTick)/CM_UNSIGNED_MILLION, (curTick[2] - sTick)/CM_UNSIGNED_MILLION,(curTick[3] - sTick)/CM_UNSIGNED_MILLION, @@ -1435,6 +1423,7 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U CM_Sem_Init(&s_2x2_thread_Ctrl.m_Start); CM_Sem_Init(&s_2x2_thread_Ctrl.m_Stop); + s_2x2_state_Ctrl.preMasterAllowed = CM_TRUE; /*初始化应用跟随数据缓冲区*/ g_TxAppFollow_len = 4; CM_LongToChar(0u, g_TxAppFollow); @@ -1499,11 +1488,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; } @@ -1931,7 +1920,7 @@ static void s_2x2_Recv(void) if (ENUM_CM_TRUE == ret) { /*- 更新跟随报文状态 */ - CM_RE_ASSERT(8 <= g_RxBaseFollow_len, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_4); + CM_RE_ASSERT(16 <= g_RxBaseFollow_len, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_4); s_2x2_Ctrl.RxBaseFollowSysCyc = msgCyc; MSCP_LOG_MSG("2x2 RxBaseFollowCyc = %d,rcvlen = %d,Time:%d us\r\n", msgCyc,g_RxBaseFollow_len,NOW_USED_TIME); } @@ -1998,7 +1987,7 @@ static void s_2x2_Recv(void) if (ENUM_CM_TRUE == ret) { /*- 更新跟随报文状态 */ - CM_RE_ASSERT(8 == g_RxAppFollowCrc_len, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_18); + CM_RE_ASSERT(12 == g_RxAppFollowCrc_len, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_18); s_2x2_Ctrl.RxAppFollowSysCyc = msgCyc; MSCP_LOG_MSG("2x2 RxAppFollowCrcCyc = %d,rcvlen = %d,Time:%d us\r\n", msgCyc,g_RxAppFollowCrc_len,NOW_USED_TIME); } @@ -2105,13 +2094,13 @@ static void s_2x2_Recv(void) CM_RE_ASSERT(FrameNum <= (SFM_OUTNETSAFE_BUFF_SIZE / NET_20K_SIZE), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_15); CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_16); ret = SFM_2X_FrameSave(&s_2x2_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, - g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].p_rmt_peer_buf, - &g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].rmt_peer_len, - (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].buf_size); + g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].p_rmt_peer_buf, + &g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].rmt_peer_len, + (CM_UINT32)g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].buf_size); /*记录对系邻机数据长度*/ - s_2x2_Ctrl.InPutDoublePassLen[type-g_2x2oo2_data_num][1] = g_2x2oo2_rx[g_2x2oo2_base][type-g_2x2oo2_data_num].rmt_peer_len; + s_2x2_Ctrl.InPutDoublePassLen[(CM_INT32)type-g_2x2oo2_data_num][1] = g_2x2oo2_rx[g_2x2oo2_base][(CM_INT32)type-g_2x2oo2_data_num].rmt_peer_len; /*- 是否收齐了全部数据同步报文 */ - if ((ENUM_CM_TRUE == ret) && (type == g_2x2RcvMaxNum[1])) + if ((ENUM_CM_TRUE == ret) && ((CM_UINT8)type == g_2x2RcvMaxNum[1])) { /*- 更新对系输入状态 */ s_2x2_Ctrl.InputPeerSysCyc = msgCyc; @@ -2186,38 +2175,30 @@ void SFM_2x2_InputProc(void) STRU_2X2_CTRL_T peerCtrl; /* 邻机热备状态 */ CM_INT32 ret = 0; /* 临时变量 */ CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 系统周期号 */ - CM_UINT32 len_prtcl = 0u; /* 协议跟随数据长度 */ - CM_UINT32 len_sfprtcl = 0u; /* 协议跟随数据长度 */ - CM_UINT32 len_pfm = 0u; /* 平台跟随数据长度 */ CM_UINT64 sTick = 0u; /* 起始Tick */ CM_UINT64 delta_Tick = 0u; /* Tickze增量 */ CM_UINT64 curTick = 0u; /* 当前Tick */ CM_UINT32 len = 0u; /* 临时变量 */ /*######################## 发送跟随数据(主系)########################*/ PFM_CFC_Check(33); - /*- 本系是否为主 */ - if ((ENUM_2x2_MASTER == s_2x2_Ctrl.LocalState)) + /*- 填写适配层(-1)跟随数据 */ + len = SFM_GetPrtclFollowData(g_TxBaseFollow + 4, (CM_UINT32)(sizeof(g_TxBaseFollow)) - 4u); + CM_LongToChar(len, g_TxBaseFollow); + g_TxBaseFollow_len = (CM_INT32)len + 4; + /*- 填写内网sfp跟随数据 */ + len = SFM_GetSfpPrtclFollowData(g_TxBaseFollow + g_TxBaseFollow_len, (CM_UINT32)(sizeof(g_TxBaseFollow)- g_TxBaseFollow_len - 4u)); + 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; + /* 2取比较后,若为主系执行发送*/ + if(0x55u == g_PFM_Cfg.M_2oo2_Enable) { - /*- 填写适配层(-1)跟随数据 */ - len = SFM_GetPrtclFollowData(g_TxBaseFollow + 4, (CM_UINT32)(sizeof(g_TxBaseFollow)) - 4u); - CM_LongToChar(len, g_TxBaseFollow); - g_TxBaseFollow_len = (CM_INT32)len + 4; - /*- 填写内网sfp跟随数据 */ - len = SFM_GetSfpPrtclFollowData(g_TxBaseFollow + g_TxBaseFollow_len, (CM_UINT32)(sizeof(g_TxBaseFollow)- g_TxBaseFollow_len - 4u)); - 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; - /*- 发送 */ - SFM_2x2_Send(g_TxBaseFollow, (CM_UINT32)g_TxBaseFollow_len, ENUM_2x2_MSG_BASE_FOLLOW); - } - else - { - /*- 无处理 */ + s_2x2_BaseFollow_2oo2Check_Send(); } MSCP_LOG_MSG("timecurr 3.1 Input 2x2Send = %lld us\n", NOW_USED_TIME); /*########################2x2对系数据接收########################*/ @@ -2302,27 +2283,9 @@ void SFM_2x2_InputProc(void) if ((ENUM_2x2_OFFLINE == s_2x2_Ctrl.LocalState) || (ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState)) { - if ((g_RxBaseFollow_len >= 12u) && (s_2x2_Ctrl.RxBaseFollowSysCyc > 0u))/*通过数据长度判断是否有新数据*/ + if ((g_RxBaseFollow_len >= 16) && (s_2x2_Ctrl.RxBaseFollowSysCyc > 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); - SFM_SetPrtclFollowData(g_RxBaseFollow + 4u); - - /*- sfp协议数据跟随*/ - len_sfprtcl = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl); - CM_RE_ASSERT(len_prtcl + len_sfprtcl <= ((CM_UINT32)g_RxBaseFollow_len - 8u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_10); - SFM_SetSfpPrtclFollowData(len_sfprtcl, g_RxBaseFollow + 4u + len_prtcl + 4u); - - /*- 平台数据跟随*/ - len_pfm = CM_LongFromChar(g_RxBaseFollow + 4u + len_prtcl + 4u); - 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); - /*此处使用临时周期号接收,在周期末同步*/ - 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)); - - /*- 本周期是否跟随成功 */ + s_2x2_BaseFollow_Sync(); /*- 记录本次跟随时间 */ s_2x2_Ctrl.LastFollowCyc = s_2x2_Ctrl.RxBaseFollowSysCyc; MSCP_LOG_MSG("follow cyc = %d->%d\n",s_2x2_Ctrl.LastFollowCyc,sysCyc); @@ -2465,47 +2428,7 @@ void SFM_2x2_OutputProc(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLen) if ((sysCyc == s_2x2_Ctrl.RxCheckSysCyc) && (CheckLen == s_2x2_Ctrl.RxCheckLen)) { /*- 进行输出比较 */ - ret = CM_Memcmp((const void*)CheckBuf, (void*)s_2x2_Ctrl.RxCheckFrame, (CM_SIZE_T)CheckLen); - /*- 输出比较是否一致 */ - if (0 == ret) - { - /*- 更新输出比较状态 */ - s_2x2_Ctrl.LastCheckOKCount = SFM_2x2_GetSysCount(); - s_2x2_Ctrl.OutPutCheckFailFlag = 0u; - MSCP_LOG_MSG("Out Put Success!\n"); - } - else - { - /*- 更新OutPutCheckFailFlag则降级为离线,因为如果收到输出数据但是比较失败,则降为离线状态 */ - s_2x2_Ctrl.OutPutCheckFailFlag = 1u; - for(i = 0u;i < CheckLen;i++) - { - if(CheckBuf[i] == s_2x2_Ctrl.RxCheckFrame[i]) - { - - } - else - { - /*- 跳出 */ - break; - } - } - /*记录暗文日志*/ - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2X2_OUT_CHECK_FAIL,3u, - sizeof(CM_UINT8),s_2x2_Ctrl.OutPutCheckFailFlag, - sizeof(CM_UINT32),i, - sizeof(CM_UINT32),s_2x2_Ctrl.RxCheckSysCyc); - MSCP_LOG_MSG("Out Put failed_[%d]!\n",i); - MSCP_LOG_BIN(CheckBuf,CheckLen); - if(ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState) - { - CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_8, TSCP_DARK_ASSERT_3); - } - else - { - /*- 无处理 */ - } - } + s_2x2_Output_SyncCheck(CheckBuf, CheckLen); } else { @@ -2600,7 +2523,7 @@ static void SFM_2x2_RecvAppFollowData(CM_UINT32 sysCyc, ENUM_2x2_STATE_T stat) { /*- 接收应用跟随数据的CRC和长度*/ MSCP_LOG_MSG("B-A:g_RxAppFollowCrc_len:%lld\n",g_RxAppFollowCrc_len); - g_RxAppFollow_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); + g_RxAppFollowCrc_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); } else { @@ -2634,7 +2557,6 @@ void SFM_2x2_EndProc(void) ENUM_2x2_STATE_T stat = SFM_2x2_GetLocal2x2State(); /* 本机热备状态 */ ENUM_CM_RETURN retFollowUp = ENUM_CM_FALSE; CM_UINT64 curTickTest[10] = {0u}; /* 当前时刻 */ - CM_INT32 cmp_ret = 1; switch(stat) { @@ -2643,12 +2565,12 @@ void SFM_2x2_EndProc(void) if(ENUM_2x2_SLAVE == SFM_2x2_GetPartner2x2State()) { /*- 发送跟随数据 */ - SFM_2x2_Send(g_TxAppFollow, (CM_UINT32)8, ENUM_2x2_MSG_APP_FOLLOW_CRC); + SFM_2x2_Send(g_TxAppFollow, (CM_UINT32)12, ENUM_2x2_MSG_APP_FOLLOW_CRC); MSCP_LOG_MSG("Iam master partner is slave send appfollowcrc\n"); } else { - SFM_2x2_Send(g_TxAppFollow + 4, (CM_UINT32)g_TxAppFollow_len, ENUM_2x2_MSG_APP_FOLLOW); + SFM_2x2_Send(g_TxAppFollow + 8, (CM_UINT32)g_TxAppFollow_len, ENUM_2x2_MSG_APP_FOLLOW); MSCP_LOG_MSG("Iam master partner is offline send appfollow\n"); } curTickTest[1] = CM_GetTick(); @@ -2658,19 +2580,7 @@ void SFM_2x2_EndProc(void) curTickTest[0] = CM_GetTick(); if (s_2x2_Ctrl.RxAppFollowSysCyc >= sysCyc) { - cmp_ret = CM_Memcmp(g_TxAppFollow, g_RxAppFollowCrc, 8);//如果同步失败 备系降为离线 - if(0 == cmp_ret) - { - /*- 跟随数据和主系一致*/ - s_2x2_Ctrl.AppFollowCmpFlag = 0u; - MSCP_LOG_MSG("CRC cmp is OK\n"); - } - else - { - /*- 比较失败 降离线*/ - s_2x2_Ctrl.AppFollowCmpFlag = 1u; - MSCP_LOG_MSG("CRC cmp is fail\n"); - } + s_2x2_AppFollow_SyncCheck(); } else { @@ -2703,7 +2613,7 @@ void SFM_2x2_EndProc(void) } MSCP_LOG_MSG("slef stata is %d use time = %lld\n",stat,(curTickTest[1] - curTickTest[0]) / 1000u); /*更新周期号*/ - if ((s_2x2_Ctrl.RxBaseFollowSysCyc >= sysCyc) && (ENUM_2x2_MASTER != stat)) + if ((s_2x2_Ctrl.SysCycSync >= sysCyc) && (ENUM_2x2_MASTER != stat)) { g_MSCP_SysCount = s_2x2_Ctrl.SysCycSync; } @@ -2872,8 +2782,9 @@ CM_UINT8 SFM_2x2_SetFollowData(IN const CM_UINT8 Data[], IN CM_UINT32 Len) g_TxAppFollow_len = (CM_INT32)CM_UNSIGNED_INT_EXP(Len + 4u); crc = CM_Crc32(Data, Len); CM_LongToChar(crc, g_TxAppFollow); - CM_LongToChar(Len, g_TxAppFollow + 4); - (void)CM_Memcpy((void*)(g_TxAppFollow + 8), sizeof(g_TxAppFollow) - 8u, Data, (CM_SIZE_T)Len); + /* 预留4字节记录另一CPU的CRC */ + CM_LongToChar(Len, g_TxAppFollow + 8); + (void)CM_Memcpy((void*)(g_TxAppFollow + 12), sizeof(g_TxAppFollow) - 12u, Data, (CM_SIZE_T)Len); rt = 1u; } else @@ -3404,3 +3315,264 @@ void SFM_2x2_SemPost(void) } } +/** + * 统一置切系标志 + */ +static void s_2x2_CloseSwitchFlag(void) +{ + s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; + s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; + s_2x2_state_Ctrl.ctrSwitchFlag = 0u; + s_2x2_state_Ctrl.aidSwitchFlag = 0u; +} +/** + * @brief 输入阶段平台跟随数据的2oo2比较 + */ +static void s_2x2_BaseFollow_2oo2Check_Send(void) +{ + CM_UINT32 crc = 0u; + CM_UINT8 mine_buf[8u] = {0}, peer_buf[8u] = {0}; + CM_INT32 ret = 0; + /*- 计算本机跟随数据中协议部分的CRC值 */ + crc = CM_Crc32(g_TxBaseFollow, g_TxBaseFollow_len - 12); + CM_LongToChar(g_TxBaseFollow_len, mine_buf); + CM_LongToChar(crc, mine_buf + 4u); + ret = SFM_2oo2_Exchange_Currency(mine_buf, 8u, peer_buf, 8u, ENUM_2oo2_INPUT_EX); + /*- 计算对机跟随数据的CRC值 */ + CM_RE_ASSERT(ret == 8, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1); + /*- 比较本机和对机跟随数据的CRC值 */ + if(0 != CM_Memcmp(mine_buf, peer_buf, (CM_SIZE_T)8u)) + { + MSCP_LOG_DATALEN(g_TxBaseFollow, g_TxBaseFollow_len, "PFM_InputProc g_TxBaseFollow_len"); + CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_2); + } + /*- 比较成功,填入CRC后发送 */ + if(g_TxBaseFollow_len <= (sizeof(g_TxBaseFollow) - 4u)) + { + (void)CM_Memcpy(g_TxBaseFollow + g_TxBaseFollow_len, sizeof(g_TxBaseFollow) - g_TxBaseFollow_len - 4u, mine_buf + 4, 4u); + g_TxBaseFollow_len += 4u; + if(s_2x2_Ctrl.LocalState == ENUM_2x2_MASTER) + { + SFM_2x2_Send(g_TxBaseFollow, (CM_UINT32)g_TxBaseFollow_len, ENUM_2x2_MSG_BASE_FOLLOW); + } + } + +} +/** + * @brief 周期末阶段,备系接收主系应用跟随CRC后的比较逻辑 + */ +static void s_2x2_AppFollow_SyncCheck(void) +{ + CM_UINT32 mine_crc = 0u, partner_crc1 = 0u, partner_crc2 = 0u; + static CM_UINT32 error_tolerate = 1u; + mine_crc = CM_LongFromChar(g_TxAppFollow); + partner_crc1 = CM_LongFromChar(g_RxAppFollowCrc); + partner_crc2 = CM_LongFromChar(g_RxAppFollowCrc + 4u); + + /* 主系双CPU的CRC不一致 */ + if(partner_crc1 != partner_crc2) + { + /* 备系本机与主系其中一个CRC一致 容忍*/ + if(mine_crc == partner_crc1 || mine_crc == partner_crc2) + { + if(error_tolerate++ >= 1u) + { + MSCP_LOG_MSG("MASTER APPFOLLOW CRC ERROR OVER TOLERATE %d\n", error_tolerate); + s_2x2_Ctrl.AppFollowCmpFlag = 1u; + } + else + { + s_2x2_Ctrl.AppFollowCmpFlag = 0u; + MSCP_LOG_MSG("MASTER APPFOLLOW CRC ERROR TOLERATE %d\n", error_tolerate); + } + } + /* 备系本机与主系都不一致 比较失败宕机*/ + else + { + MSCP_LOG_MSG("APPFOLLOW CRC cmp is fail 1\n"); + s_2x2_Ctrl.AppFollowCmpFlag = 1u; + CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1); + } + } + /* 主系双CPU的CRC一致 但与备系本机不一致 比较失败*/ + else if(mine_crc != partner_crc1) + { + s_2x2_Ctrl.AppFollowCmpFlag = 1u; + MSCP_LOG_MSG("APPFOLLOW CRC cmp is fail 2\n"); + } + /* 主系双CPU的CRC一致 且与备系本机一致 比较成功*/ + else + { + MSCP_LOG_MSG("APPFOLLOW CRC cmp is OK\n"); + s_2x2_Ctrl.AppFollowCmpFlag = 0u; + error_tolerate = 0u; + } + + if(1u == s_2x2_Ctrl.AppFollowCmpFlag) + { + /* 比较失败则设置容忍次数大于0(可能本周期备系校验错误降为离线,但下周期主系失效,导致备系进入容忍分支,认为校验成功又升备) */ + error_tolerate = ((error_tolerate >= 1u) ? error_tolerate : 1u); + MSCP_LOG_DATALEN(g_TxAppFollow + 8, g_TxAppFollow_len, "PFM_AppFollow_SyncCheck g_TxAppFollow"); + } +} +/** + * @brief 输出阶段,备系接收主系输出数据CRC后的比较逻辑 + */ +static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLen) +{ + CM_UINT32 i = 0u; + CM_INT32 ret = -1, ret_p1p2 = -1, ret_m1p1 = -1, ret_m1p2 = -1; /* 记录对系双CRC比较、本机和对系cpu1、本机和对系cpu2比较结果 */ + CM_UINT32 singleCheckLen = CheckLen / 2u; /* checkbuf记录了两个CPU的校验信息,长度的一半为单个CPU校验数据长度 */ + static CM_UINT32 error_tolerate = 1u; + /*- 入参检查 */ + CM_ASSERT(NULL != CheckBuf, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1); + /* 接收的校验数据长度校验 */ + CM_RE_ASSERT(CheckLen == s_2x2_Ctrl.RxCheckLen, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_2); + /* 比较接收的主系校验帧中,主系的两个CPU的CRC,记录结果ret_p1p2 */ + ret_p1p2 = CM_Memcmp((const void*)s_2x2_Ctrl.RxCheckFrame, (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen); + /* 比较备系本机与主系某一个CPU的CRC,记录结果ret_m1p1 */ + ret_m1p1 = CM_Memcmp((const void*)CheckBuf, (const void*)&s_2x2_Ctrl.RxCheckFrame[0], (CM_SIZE_T)singleCheckLen); + /* 比较备系本机与主系另一个CPU的CRC,记录结果ret_m1p2 */ + ret_m1p2 = CM_Memcmp((const void*)CheckBuf, (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen); + /* 对系(主系)发送的双CPU的CRC不一致 */ + if(0 != ret_p1p2) + { + /* 备系本机与主系其中一个CRC一致 容忍*/ + if(0 == ret_m1p1 || 0 == ret_m1p2) + { + if(error_tolerate++ >= 1u) + { + MSCP_LOG_MSG("MASTER OUTPUT CRC ERROR OVER TOLERATE %d\n", error_tolerate); + s_2x2_Ctrl.OutPutCheckFailFlag = 1u; + } + else + { + s_2x2_Ctrl.OutPutCheckFailFlag = 0u; + s_2x2_Ctrl.LastCheckOKCount = SFM_2x2_GetSysCount(); + MSCP_LOG_MSG("MASTER OUTPUT CRC ERROR TOLERATE %d\n", error_tolerate); + } + } + /* 备系本机与主系都不一致 比较失败*/ + else + { + MSCP_LOG_MSG("OUTPUT CRC cmp is fail 1\n"); + s_2x2_Ctrl.OutPutCheckFailFlag = 1u; + } + } + /* 对系(主系)发送的双CPU的CRC一致,比较失败 */ + else if(0 != ret_m1p1) + { + MSCP_LOG_MSG("OUTPUT CRC cmp is fail 2\n"); + s_2x2_Ctrl.OutPutCheckFailFlag = 1u; + for(i = 0u;i < singleCheckLen;i++) + { + if(CheckBuf[i] == s_2x2_Ctrl.RxCheckFrame[i]) + { + + } + else + { + /*- 跳出 */ + break; + } + } + /*记录暗文日志*/ + (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2X2_OUT_CHECK_FAIL,3u, + sizeof(CM_UINT8),s_2x2_Ctrl.OutPutCheckFailFlag, + sizeof(CM_UINT32),i, + sizeof(CM_UINT32),s_2x2_Ctrl.RxCheckSysCyc); + } + /* 主系双CPU的CRC一致 且与备系本机一致 比较成功*/ + else + { + MSCP_LOG_MSG("OUTPUT CRC cmp is OK\n"); + /*- 更新输出比较状态 */ + s_2x2_Ctrl.LastCheckOKCount = SFM_2x2_GetSysCount(); + s_2x2_Ctrl.OutPutCheckFailFlag = 0u; + error_tolerate = 0u; + } + /* 备系比较失败宕机*/ + if(1u == s_2x2_Ctrl.OutPutCheckFailFlag) + { + /* 比较失败则设置容忍次数大于0(可能本周期备系校验错误降为离线,但下周期主系失效,导致备系进入容忍分支,认为校验成功又升备) */ + error_tolerate = ((error_tolerate >= 1u) ? error_tolerate : 1u); + /* 打印比较不一致的通道数据 */ + for (i = 1; i <= g_2x2oo2_data_num; i++) + { + if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][i].b_2x2_Enable) + { + ret = CM_Memcmp(CheckBuf + 4 + (i - 1) * 8, s_2x2_Ctrl.RxCheckFrame + 4 + (i - 1) * 8, 8); + if(ret != 0) + { + MSCP_LOG_MSG("2x2 output compare err, INDEX = %d, len = %d\n", i, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + MSCP_LOG_BIN(g_2x2oo2_tx[g_2x2oo2_base][i].p_buf, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + } + } + else + { + /*二取标志未使能*/ + } + } + if(ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState) + { + CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_3); + } + } +} +/** + * @brief 输入阶段,非主系进行相关CRC校验后跟随 + */ +static void s_2x2_BaseFollow_Sync(void) +{ + CM_UINT32 len_prtcl = 0u; /* 协议跟随数据长度 */ + CM_UINT32 len_sfprtcl = 0u; /* 协议跟随数据长度 */ + CM_UINT32 len_pfm = 0u; /* 平台跟随数据长度 */ + CM_UINT32 calcCrc = 0u, rxCrc = 0u, txCrc = 0u; /* CRC相关变量 */ + CM_UINT32 offset = 0u; /* 解包用offset*/ + /*- 适配层协议数据跟随*/ + g_RxBaseFollow_len -= 4;/*去除CRC的长度*/ + calcCrc = CM_Crc32(g_RxBaseFollow, (CM_UINT32)g_RxBaseFollow_len - 12u); + offset = (CM_UINT32)g_RxBaseFollow_len; + rxCrc = CM_LongFromChar(&g_RxBaseFollow[offset]); + offset = (CM_UINT32)g_TxBaseFollow_len - 4u; + txCrc = CM_LongFromChar(&g_TxBaseFollow[offset]); + if((ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState) && (txCrc != rxCrc)) + { + /* 备系自己产生的平台跟随数据与主系不一致,做日志记录 */ + MSCP_LOG_MSG("2x2 BaseFollow CRC Err,TxCrc = %d,RxCrc = %d,Time:%d us\r\n", txCrc,rxCrc,NOW_USED_TIME); + } + /*- 比较收到的跟随数据与发送的跟随数据*/ + if(calcCrc == rxCrc) + { + offset = 0u; + len_prtcl = CM_LongFromChar((void*)&g_RxBaseFollow[offset]); + offset += 4u; + CM_RE_ASSERT(len_prtcl <= ((CM_UINT32)g_RxBaseFollow_len - 4u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1); + SFM_SetPrtclFollowData((void*)&g_RxBaseFollow[offset]); + offset += len_prtcl; + + /*- sfp协议数据跟随*/ + len_sfprtcl = CM_LongFromChar((void*)&g_RxBaseFollow[offset]); + offset += 4u; + CM_RE_ASSERT(len_prtcl + len_sfprtcl <= ((CM_UINT32)g_RxBaseFollow_len - 8u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_2); + SFM_SetSfpPrtclFollowData(len_sfprtcl, (void*)&g_RxBaseFollow[offset]); + offset += len_sfprtcl; + + /*- 平台数据跟随*/ + len_pfm = CM_LongFromChar((void*)&g_RxBaseFollow[offset]); + offset += 4u; + CM_RE_ASSERT(len_pfm == ((CM_UINT32)g_RxBaseFollow_len - len_prtcl - len_sfprtcl - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_3); + CM_RE_ASSERT(len_pfm == 8u, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_4); + } + /*此处使用临时周期号接收,在周期末同步*/ + offset = (CM_UINT32)g_RxBaseFollow_len - 8u; + s_2x2_Ctrl.SysCycSync = CM_LongFromChar((void*)&g_RxBaseFollow[offset]); /* parasoft-suppress BD-PB-CHECKRET "此处无需检查CM_LongFromChar()的返回值" */ + offset += 4u; + SFM_SetTxSn(CM_LongFromChar((void*)&g_RxBaseFollow[offset])); +} diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.h b/TSCP/src/MSCP/SFM/SFM_2x2.h index fb51f6a..6fedc57 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.h +++ b/TSCP/src/MSCP/SFM/SFM_2x2.h @@ -247,6 +247,8 @@ extern CM_UINT32 g_MSCP_SysCount; ENUM_2x2_AID_SWITCH_STATE PartnerAIDSwitchState; /**< 对系的主动切系按钮状态 */ ENUM_2x2_AID_SWITCH_STATE PartPeerAIDSwitchState; /**< 对系的邻机的主动切系按钮状态 */ CM_UINT8 aidSwitchFlag; /**< aid切系控制标志 */ + /* 离线是否允许升预升主*/ + CM_BOOL preMasterAllowed; }STRU_2X2_STATE_CTRL_T; /*2x状态切换线程参数*/ typedef struct diff --git a/TSCP/src/MSCP/SFM/SFM_Prtcl.c b/TSCP/src/MSCP/SFM/SFM_Prtcl.c index bb32bbc..ef1158d 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/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c index 10aab04..8af60f3 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.c @@ -346,6 +346,9 @@ UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 ro /*·¶*/ g_pCbtcConfigDataStru->cbtcTrainInfo[i].WorstGrade = ShortFromChar(pData); pData += 2; + /*վ̨׷ʱг*/ + g_pCbtcConfigDataStru->cbtcTrainInfo[i].StationTrackDistance = ShortFromChar(pData); + pData += 2; } } diff --git a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h index 82141d7..26f56a2 100644 --- a/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h +++ b/TSCP/src/dqu_common/dqu_cbtc_common/dquCbtcConfigData.h @@ -42,6 +42,7 @@ extern "C" { UINT16 TrainLength; /*г*/ UINT8 TrainMaxTracAcc; /*гǣٶ*/ UINT16 WorstGrade; /*·¶*/ + UINT16 StationTrackDistance; /*վ̨׷ʱг*/ } CBTC_TRAIN_INFO_STRU; @@ -76,7 +77,6 @@ extern "C" { UINT32 OcTslCommunicationErrorTime;/*OC-TSLͨŹжʱ䣨ms,add by yt202231գ䳵ϵͳ*/ UINT8 LinkLogicDirUpAndDown; /*ϵͳ߼зĹϵ,add by yt202231գ䳵ϵͳ*/ UINT16 OppositeTrackDistance; /*ʻ˫Сȫ루cm,add by yt202231գ䳵ϵͳ*/ - UINT16 StationTrackDistance; /*վ̨׷ʱг(cm),add by yt202231գ䳵ϵͳ*/ UINT32 MaxMALength; /*·½ƶ루λm,add by yt202231գ䳵ϵͳ*/ UINT32 dwLineMinTrainLength; /*ϵͳݣ·С*/ UINT8 chZXDynamicTestSwitch; /*Ƿֶ֧̬ aaر 55*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c index 07115f8..0e619ee 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c @@ -1,50 +1,50 @@ /************************************************************************ * -* ļ FsfbMessageInfo.h -* Ȩ˵ ؿƼ޹˾ -* 汾 1.0 -* ʱ 2013.09.05 -* -* FSFB/2Э֡ʽԼϢĺ궨 -* ʹע -* ޸ļ¼ -* 2014.05.14 -* ޸ݣ ArrordLnkInfoCreateFrameм˷BTD֡ABT֡ķ֧case Fsfb_SendBtm_BtdAbt: - ޸ɣ CIյBTD֡ʱӦLEUȷ֡ABT֡ -* 2014.05.14 -* ޸ݣ FsfbAnalysisBtdMsgڽյBTDϷ󣬽״̬Ϊ retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; -* ޸ɣ CIյBTD֡ʱӦLEUȷ֡ABT֡ -* 2014.05.14 -* ޸ݣ CreateBtmMsgڴSBT֡ʱȡԷ״̬ͽ״̬ĸֵ -* ޸ɣ ڴ˺ֻ𴴽BTMģʽµ֡·״̬ά -* 2014.05.22 -* ޸ݣ ArrordLnkInfoCreateFrame()У״̬ΪFsfb_SendBtm_Btcʱ -* SSRBTCʱ״̬ΪFsfb_WaitBtm_BtcabtBTCABT -* ֻBTCʱ״̬ΪFsfb_WaitBtm_AbtOrSseLEUSSEBTCABT -* ·״̬ȫΪֹͣ -* ޸ɣ SSRBTCʱ״̬ΪԭΪFsfb_WaitBtm_SseabtǴ -* 2014.05.22 -* ޸ݣ FsfbAnalysisBtdMsgУ֤BTD֡ϷҪͱ־Ϊ1 -* ΪABT֡׼ -* ޸ɣ ֮ǰû÷ͱ־ -* 2014.05.22 -* ޸: CreateTsdOrSbtMsgУڷTSD֡ʱ״̬ӦΪȴSSE -* ޸ɣ ֮ǰΪ -* 2014.05.22 -* ޸ݣ CreateSseMsgУSSE֡ʱ״̬ΪȴSSR״̬Ϊ -* ޸ɣ ֮ǰû÷״ֹ̬ƵSSE -* 2014.05.22 -* ޸ݣ CreateSsrMsgУSSRΪBTMģʽµģ״̬ΪBTC״̬Ϊ1 -* ޸ɣ ֮ǰûнͱ־Ϊ1 -* 2014.08.05 -* ޸: FsfbAnalysisSseMsg()УCRCУ -* ޸: ֮ǰ©һCRC -* 2014.08.05 -* ޸: BTDзʱʧܵķ֧޸ķֵΪ0 -* ޸: ΪϲúУʧܵĻӦýݽӦá -* 2014.08.14 -* ޸ݣ AccordInfoCreateFrameDataж֡ӦݲֵijȽзС0򷵻ʧ -* ޸ɣ ֮ǰûжԴ˳Ƚз +* �ļ��� �� FsfbMessageInfo.h +* ��Ȩ˵�� �� �������ؿƼ����޹�˾ +* �汾�� �� 1.0 +* ����ʱ�� �� 2013.09.05 +* ���� �� ������ +* �������� �� FSFB/2Э����֡��ʽ�Լ������Ϣ�ĺ궨�� +* ʹ��ע�� �� �� +* �޸ļ�¼ �� +* 2014.05.14 ������ +* �޸����ݣ� ��ArrordLnkInfoCreateFrame���������м��˷���BTD֡��ABT֡�ķ�֧��case Fsfb_SendBtm_BtdAbt: + �޸����ɣ� ��CI�յ�BTD֡ʱ��Ӧ����LEU������ȷ��֡ABT֡�� +* 2014.05.14 ������ +* �޸����ݣ� ��FsfbAnalysisBtdMsg�����������ڽ��յ�BTD�Ϸ��󣬽�����״̬��Ϊ retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; +* �޸����ɣ� ��CI�յ�BTD֡ʱ��Ӧ����LEU������ȷ��֡ABT֡�� +* 2014.05.14 ������ +* �޸����ݣ� ��CreateBtmMsg�����������ڴ���SBT֡ʱ��ȡ���Է���״̬�ͽ���״̬�ĸ�ֵ +* �޸����ɣ� �ڴ˺���ֻ���𴴽�BTMģʽ�µ�֡����������·״̬��ά�� +* 2014.05.22 ������ +* �޸����ݣ� ��ArrordLnkInfoCreateFrame()�У�����״̬ΪFsfb_SendBtm_Btcʱ +* ��������SSR��BTCʱ�����״̬Ϊ��Fsfb_WaitBtm_Btcabt����BTC��ABT +* ����ֻ����BTCʱ����״̬Ϊ��Fsfb_WaitBtm_AbtOrSse������LEU��SSE��BTC��ABT +* ��������·���״̬ȫ����Ϊ��ֹͣ���� +* �޸����ɣ� ��������SSR��BTCʱ�����״̬Ϊ��ԭΪFsfb_WaitBtm_Sseabt�Ǵ���� +* 2014.05.22 ������ +* �޸����ݣ� ��FsfbAnalysisBtdMsg���������У�����֤BTD֡�Ϸ�����Ҫ�����ͱ�־��Ϊ1 +* Ϊ����ABT֡��׼�� +* �޸����ɣ� ֮ǰû���÷��ͱ�־ +* 2014.05.22 ������ +* �޸�����: ��CreateTsdOrSbtMsg���������У��ڷ���TSD֡ʱ������״̬Ӧ����Ϊ�ȴ�SSE +* �޸����ɣ� ֮ǰΪ�� +* 2014.05.22 ������ +* �޸����ݣ� ��CreateSseMsg���������У�����SSE֡ʱ����״̬����Ϊ�ȴ�SSR������״̬��Ϊ�������� +* �޸����ɣ� ֮ǰû���÷���״̬����ֹƵ������SSE +* 2014.05.22 ������ +* �޸����ݣ� ��CreateSsrMsg���������У���SSR��ΪBTMģʽ�µģ�����״̬Ϊ����BTC������״̬��Ϊ1 +* �޸����ɣ� ֮ǰû�н����ͱ�־��Ϊ1 +* 2014.08.05 ������ +* �޸�����: ��FsfbAnalysisSseMsg()�����У�������CRCУ�� +* �޸�����: ֮ǰ©����һ�����CRC��� +* 2014.08.05 ������ +* �޸�����: ��BTD���з���ʱ������ʧ�ܵķ�֧�޸ķ���ֵΪ0 +* �޸�����: ��Ϊ���ϲ���ú����У��������ʧ�ܵĻ���Ӧ�ý������ݽ�����Ӧ�á� +* 2014.08.14 ������ +* �޸����ݣ� ��AccordInfoCreateFrameData���������ж�֡��Ӧ�����ݲ��ֵij��Ƚ��з�����С��0�򷵻�ʧ�� +* �޸����ɣ� ֮ǰû�жԴ˳��Ƚ��з��� * ************************************************************************/ @@ -53,11 +53,11 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbMessageInfo.h" #include "FsfbLnkNodeMgr.h" /*-------------------------------------------------------------------- - * Ĵģڲ Start + * ���Ĵ���ģ���ڲ��������� Start *--------------------------------------------------------------------*/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode); @@ -70,112 +70,112 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN /* test todo */ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff); /*-------------------------------------------------------------------- - * Ĵģڲ End + * ���Ĵ���ģ���ڲ��������� End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * Ĵģⲿӿ Start + * ���Ĵ���ģ���ⲿ�����ӿ� Start *--------------------------------------------------------------------*/ /*********************************************************************** -* : AccordInfoCreateFrameData -* : ӦȷSBTTSD -* : -* +* ������ : AccordInfoCreateFrameData +* �������� : ����Ӧ������ȷ������SBT��TSD���� +* ������� : +* ������ ���� ������� ���� * -------------------------------------------------------------------------- -* pAppData UINT8* IN Ӧ -* DataLen UINT816 IN ݳ -* OutMsg UINT8* OUT ı -* outPutDataLen UINT16* OUT ij -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT ·Ϣ -* pFsfbStru FSFB_INFO_STRU * INOUT Эͳһṹ -* ֵ : UINT8* :1: 1:󷵻 +* pAppData UINT8* IN Ӧ������ +* DataLen UINT816 IN ���ݳ��� +* OutMsg UINT8* OUT ����ı��� +* outPutDataLen UINT16* OUT ������ij��� +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT ��·��Ϣ +* pFsfbStru FSFB_INFO_STRU * INOUT Э��ͳһ�ṹ�� +* ����ֵ : UINT8* :1:�������� 1:���󷵻� ***********************************************************************/ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, UINT8 *OutMsg,UINT16* outPutDataLen,Fsfb_Lnk_Info_Node_Stru** pPNode,FSFB_INFO_STRU *pFsfbStru) { UINT8 retVal =0; - UINT16 destDevName = 0;/* Է豸 */ - UINT16 localDevName =0; /* 豸 */ + UINT16 destDevName = 0;/* �Է��豸���� */ + UINT16 localDevName =0; /* �����豸���� */ UINT8 applycat =0; UINT16 index=0; UINT16 msgLen =0; - UINT8 *RecordArray = pFsfbStru->RecordArray; /* ¼ */ - UINT16 RecordSize = pFsfbStru->RecordArraySize; /* ¼С */ - Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* ͨŽڵָ */ - const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* ӦòбԷ͵λ */ - const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* ӦòбԷIDλ */ - const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* ӦòбԷIDλ */ - const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* ӦòбӦݵλ */ + UINT8 *RecordArray = pFsfbStru->RecordArray; /* ��¼ */ + UINT16 RecordSize = pFsfbStru->RecordArraySize; /* ��¼�����С */ + Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* ͨ�Žڵ�ָ�� */ + const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* Ӧ�ò���б���Է����͵�λ�� */ + const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* Ӧ�ò���б���Է�ID��λ�� */ + const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* Ӧ�ò���б���Է�ID��λ�� */ + const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* Ӧ�ò���б���Ӧ�����ݵ�λ�� */ ComTypeId2DevName(pFsfbStru->LocalType, pFsfbStru->LocalID, &localDevName); /* * ------------------------------------------------------------ - * ݳ | DestType | DestID | CommandType |Ӧ | - * 2ֽ | 1ֽ | 1ֽ | 1ֽ | n | + * ���ݳ��� | DestType | DestID | CommandType |Ӧ������ | + * 2�ֽ� | 1�ֽ� | 1�ֽ� | 1�ֽ� | n | * ------------------------------------------------------------ */ - /*Է豸 */ + /*�Է��豸������ */ ComTypeId2DevName(pAppData[DEST_TYPE_APP_QUE_POS], pAppData[DEST_ID_APP_QUE_POS], &destDevName); msgLen = DataLen-DATA_APP_QUE_POS; -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordSize,"IN:\n"); PrintFiles(RecordArray,RecordSize,"LocalName:"); - PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* 豸 */ + PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* �����豸 */ PrintFiles(RecordArray,RecordSize,"\tDestName:"); - PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* Է豸 */ + PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* �Է��豸 */ PrintFiles(RecordArray,RecordSize,"\tDataLen:"); - PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* Ӧݳ */ + PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* ��Ӧ�����ݳ��� */ PrintFiles(RecordArray,RecordSize,"\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ - PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* һϢ֡ʼʶ */ - PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* 豸 */ - PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* Է豸 */ - PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* Ӧݳ */ - PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /**/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* ������ */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* һ��Ϣ֡��ʼ��ʶ */ + PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* �����豸 */ + PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* �Է��豸 */ + PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* ��Ӧ�����ݳ��� */ + PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /*��������*/ #endif if(msgLen < 0) - {/*֡ݳȲϷ*/ + {/*֡���ݳ��Ȳ��Ϸ�*/ retVal = 0; } else { - /* */ + /* �������� */ applycat =pAppData[DEST_APP_COMMAND_POS]; if((applycat== APPLCAT_TDM)||(applycat==APPLCAT_BTM)) { - /* ѯӦͨŽڵǷ */ + /* ��ѯ��Ӧͨ�Žڵ��Ƿ���� */ pTmpNode = FsfbSearchNodeByName(destDevName,applycat,pFsfbStru); - if(NULL == pTmpNode) /* ͨŽڵ㲻 */ + if(NULL == pTmpNode) /* ͨ�Žڵ㲻���� */ { - /* ݵַĸǽڵ㣬ڵ㸲 */ + /* ���ݵ�ַ�����ĸ��ǽڵ㣬���ڵ㸲�� */ retVal =FsfbOutputReplaceLnkNode(localDevName,destDevName,applycat,&pTmpNode,pFsfbStru); } - else /* ͨŽڵ */ + else /* ͨ�Žڵ���� */ { - /* */ + /* �������� */ retVal =1; } if (retVal != 0) { - (*pPNode) = pTmpNode; /* ͨŽڵָ뱣浽ָ */ - /* ֽڵij */ + (*pPNode) = pTmpNode; /* ��ͨ�Žڵ�ָ�뱣�浽���ָ������� */ + /* �����ֽڵij��� */ /*ShortToChar(msgLen+2,&OutMsg[index]);*/ index = index+2; - /* 1ֽڵ豸*/ + /* 1���ֽڵ��豸����*/ OutMsg[index++]=pAppData[DEST_TYPE_APP_QUE_POS]; - /* 1ֽڵ豸ID */ + /* 1���ֽڵ��豸ID */ OutMsg[index++]=pAppData[DEST_ID_APP_QUE_POS]; - /* ֡TSDSBT֡ */ + /* ����֡TSD����SBT֡ */ retVal=CreateTsdOrSbtMsg(&pAppData[DATA_APP_QUE_POS],msgLen,applycat,&OutMsg[index],outPutDataLen,pTmpNode); index+=(*outPutDataLen); *outPutDataLen +=4; - /* ֽڵij */ + /* �����ֽڵij��� */ ShortToChar(index-2,OutMsg); } else @@ -185,27 +185,27 @@ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, } else { - PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* һϢ֡ʼʶ */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* һ��Ϣ֡��ʼ��ʶ */ PrintRecArrayByte(RecordArray, RecordSize, applycat); retVal = 0; } } - /* Ϣ֡ */ + /* ��Ϣ֡���� */ return retVal; } /*********************************************************************** -* : ArrordLnkInfoCreateFrame -* : ·зͽڵ״̬齨֡ʽ -* : -* +* ������ : ArrordLnkInfoCreateFrame +* �������� : ������·�з��ͽڵ��״̬�齨֡��ʽ�� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- -* pFsfbStruct FSFB_INFO_STRU* IN ͳһṹ -* outMsg UINT8* OUT FSFDϢ֡ -* datalen UINT16* OUT Ϣ +* pFsfbStruct FSFB_INFO_STRU* IN ͳһ�ṹ�� +* outMsg UINT8* OUT FSFD��Ϣ֡ +* datalen UINT16* OUT �����Ϣ���� -* ֵ : UINT8 1 0󷵻 +* ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ /* todo */ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* datalen) @@ -214,7 +214,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* UINT16 index = 0; UINT16 msgLen =0; UINT8 startFlag = 0; - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*嵱ǰָ;*/ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*���嵱ǰָ��;*/ CurFillLnk=pFsfbStruct->LnkHead; while(CurFillLnk != NULL) @@ -227,11 +227,11 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* { LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; - /* SSR ֡ */ + /* ����SSR ֡ */ retVal=CreateSsrMsg(APPLCAT_TDM,CurFillLnk,&outMsg[index]); index+=SSR_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_TDM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -247,7 +247,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* switch(CurFillLnk->FsfbLinInfo.SendLinkStatus) { case Fsfb_SendSSR: - /* SSR ֡ */ + /* ����SSR ֡ */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSsrMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); @@ -255,7 +255,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* startFlag = 1; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -275,7 +275,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } LnkInfoBuildFrame(CurFillLnk->DestDevName,BTC_SIZE+2,&outMsg[index]); index+=4; - /* 齨Ӧ */ + /* �齨Ӧ������ */ BuildBtcBody(pFsfbStruct->TmpDataBuff,&msgLen); retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,BTC_DF_SIZE,FSFB_BTC_MSG,&outMsg[index],CurFillLnk); index +=BTC_SIZE; @@ -290,7 +290,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,ABT_DF_SIZE,FSFB_ABT_MSG,&outMsg[index],CurFillLnk); index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -305,7 +305,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_Sbt; index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -318,25 +318,25 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,EBT_DF_SIZE,FSFB_EBT_MSG,&outMsg[index],CurFillLnk); index += EBT_SIZE; - CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< ý״̬Ϊж*/ - CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< ÷״̬Ϊж*/ - CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< */ - CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< ޷*/ + CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< ���ý�������״̬Ϊ�ж�*/ + CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< ���÷�������״̬Ϊ�ж�*/ + CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< ������������������*/ + CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< �����޷�����������*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_EBT_MSG); break; case Fsfb_SendSSE: - /* ֡ͷ */ + /* ����֡ͷ */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSE_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSseMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); index +=SSE_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*�����������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSE_MSG); @@ -354,7 +354,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* #if 0 if (CurFillLnk->FsfbLinInfo.RecvLinkStatus == Fsfb_SendBtm_Sbt) { - /* SBT֡ */ + /* ����SBT֡ */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SBT_SIZE+2,&outMsg[index]); index+=4; retVal = CreateTsdOrSbtMsg(NULL,0,APPLCAT_BTM,&outMsg[index],&msgLen,CurFillLnk); @@ -380,42 +380,42 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } /*********************************************************************** -* : BuildBtcBody -* :齨BTC֡Body֡ -* : -* +* ������ : BuildBtcBody +* �������� :�齨BTC֡��Body���֡� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- -* pOutDataBuff UINT8* OUT -* outDataLen UINT16* OUT ݳ -* ֵ : +* pOutDataBuff UINT8* OUT ������� +* outDataLen UINT16* OUT ���ݳ��� +* ����ֵ : �� ***********************************************************************/ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) { UINT8 index=0; #if 0 - /* ֽڵOperation Type */ + /* �����ֽڵ�Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2ֽڵBuffer Type */ + /* 2���ֽڵ�Buffer Type */ ShortToChar(0x000A,&pOutDataBuff[index]); index+=2; - /* 2ֽڵSub_bufer Number Start */ + /* 2���ֽڵ�Sub_bufer Number Start */ ShortToChar(0x0001,&pOutDataBuff[index]); index+=2; - /* 2ֽڵNumber of Sub-buffer to Transmit */ + /* 2���ֽڵ�Number of Sub-buffer to Transmit */ ShortToChar(0xFFFF,&pOutDataBuff[index]); index+=2; #else - /* ֽڵOperation Type */ + /* �����ֽڵ�Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2ֽڵBuffer Type */ + /* 2���ֽڵ�Buffer Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2ֽڵSub_bufer Number Start */ + /* 2���ֽڵ�Sub_bufer Number Start */ ShortToChar(0,&pOutDataBuff[index]); index+=2; - /* 2ֽڵNumber of Sub-buffer to Transmit */ + /* 2���ֽڵ�Number of Sub-buffer to Transmit */ ShortToChar(0,&pOutDataBuff[index]); index+=2; #endif @@ -423,37 +423,37 @@ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) } /*********************************************************************** -* : LnkInfoBuildFrame -* :齨Ӧݵ֡ͷ -* : -* +* ������ : LnkInfoBuildFrame +* �������� :�齨�����Ӧ�����ݵ�֡ͷ�� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- -* devName UINT16 IN 豸 -* msgLen UINT16 IN ݳ -* pOutDataBuff UINT8* OUT -* ֵ : +* devName UINT16 IN �豸���� +* msgLen UINT16 IN ���ݳ��� +* pOutDataBuff UINT8* OUT ������� +* ����ֵ : �� ***********************************************************************/ void LnkInfoBuildFrame(UINT16 devName,UINT16 msgLen,UINT8* pOutDataBuff) { - /* ֽڵ֡ͷ */ + /* �����ֽڵ�֡ͷ */ ShortToChar(msgLen,pOutDataBuff); - /* 1ֽڵ豸, 1ֽڵ豸ID */ + /* 1���ֽڵ��豸����, 1���ֽڵ��豸ID */ ComDevName2TypeId(devName,&pOutDataBuff[2],&pOutDataBuff[3]); } /*********************************************************************** - * : FsfbAnalysisSseMsg - * : յSSEϢн֡ȡϢ - * : - * + * ������ : FsfbAnalysisSseMsg + * �������� : ���������յ���SSE��Ϣ���н�֡������ȡ�������Ϣ�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devName UINT16* IN 豸 + * devName UINT16* IN �豸���� * applyCat UINT8 IN application catory - * pAppData UINT8* IN Ӧ - * FSFB_INFO_STRU *pFsfbStruct FSFBͳһṹ - * RecordArray UINT8* INOUT ¼ - * RecordArraySize UINT16 IN ¼С - * ֵ : UINT8 1 0:󷵻 + * pAppData UINT8* IN Ӧ������ + * FSFB_INFO_STRU *pFsfbStruct FSFBͳһ�ṹ�� + * RecordArray UINT8* INOUT ��¼���� + * RecordArraySize UINT16 IN ��¼�����С + * ����ֵ : UINT8 1���������� 0:���󷵻� ***********************************************************************/ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -466,7 +466,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 srcAddr =0; Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; - /* CRC 趨 */ + /* CRC �趨 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSE_SIZE-FSFB_CRC_16_LEN); crc16 = ShortFromCharLE(&pAppData[SSE_SIZE-FSFB_CRC_16_LEN]); if(calcCrc16 == crc16) @@ -474,46 +474,46 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO srcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); desAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat, pFsfbStruct); - /* жͨŽڵǷ */ + /* �ж�ͨ�Žڵ��Ƿ���� */ if( NULL != retLnkNodePtr) { - /* ͨŽڵڣô鱨ĵϢǷ͸ͨŽڵһ */ + /* ͨ�Žڵ���ڣ���ô��鱨�ĵ���Ϣ�Ƿ�͸�ͨ�Žڵ��һ�� */ retVal = FsfbCheckInfoAddr(srcAddr,desAddr,retLnkNodePtr); if(0 == retVal) { - /* һ ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��һ�� ����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*�����ַ����*/ #endif } - else /* ͨ */ + else /* ���ͨ�� */ { - /* ·Ϣṹ */ + /* ������·������Ϣ�ṹ�� */ retVal = FsfbUptLnkNodeInfoBySSE(pAppData,retLnkNodePtr); } } else { - /* ¼ ͨŽڵ㲻 */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ ͨ�Žڵ㲻���� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Node Not Exist.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*����·*/ #endif } } else { - /* ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ �������� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -524,18 +524,18 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * : FsfbAnalysisSsrMsg - * : յSSRϢн֡ȡϢ - * : - * + * ������ : FsfbAnalysisSsrMsg + * �������� : ���������յ���SSR��Ϣ���н�֡������ȡ�������Ϣ�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devName UINT16* IN 豸 + * devName UINT16* IN �豸���� * applyCat UINT8 IN application catory - * pAppData UINT8* IN Ӧ - * pFsfbStruct FSFB_INFO_STRU* FSFBͳһṹ - * RecordArray UINT8* INOUT ¼ - * RecordArraySize UINT16 IN ¼С - * ֵ : UINT8 1 + * pAppData UINT8* IN Ӧ������ + * pFsfbStruct FSFB_INFO_STRU* FSFBͳһ�ṹ�� + * RecordArray UINT8* INOUT ��¼���� + * RecordArraySize UINT16 IN ��¼�����С + * ����ֵ : UINT8 1���������� ***********************************************************************/ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -546,67 +546,67 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 SrcAddr = 0; UINT16 DesAddr = 0; - /* CRC 趨 */ + /* CRC �趨 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSR_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[SSR_SIZE-FSFB_CRC_16_LEN]); - /* ֤CRCǷϷ */ + /* ��֤CRC�Ƿ�Ϸ� */ if(crc16 == calcCrc16) { SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* жͨŽڵǷ */ + /* �ж�ͨ�Žڵ��Ƿ���� */ if( NULL != retLnkNodePtr) { - /* ͨŽڵڣô鱨ĵϢǷ͸ͨŽڵһ */ + /* ͨ�Žڵ���ڣ���ô��鱨�ĵ���Ϣ�Ƿ�͸�ͨ�Žڵ��һ�� */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* һ ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��һ�� ����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*�����ַ����*/ #endif } - else /* ͨ */ + else /* ���ͨ�� */ { - /* ·Ϣṹ */ + /* ������·������Ϣ�ṹ�� */ retVal = FsfbUptLnkNodeInfoBySsr(pAppData,applyCat,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ³˵ǶӦSSR ô¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ���³�����˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* ʲô */ + /* ʲô���� */ } } } else { - /* ¼ ͨŽڵ㲻 */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ ͨ�Žڵ㲻���� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*����·*/ #endif } } - else /* Ȳ */ + else /* ���Ȳ��� */ { - /* ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ �������� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -621,18 +621,18 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * : FsfbAnalysisAbtMsg - * : յABTϢн֡ȡϢ - * : - * + * ������ : FsfbAnalysisAbtMsg + * �������� : ���������յ���ABT��Ϣ���н�֡������ȡ�������Ϣ�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devName UINT16* IN 豸 + * devName UINT16* IN �豸���� * applyCat UINT8 IN application catory - * pAppData UINT8* IN Ӧ - * pFsfbStruct FSFB_INFO_STRU* FSFBͳһṹ - * RecordArray UINT8* INOUT ¼ - * RecordArraySize UINT16 IN ¼С - * ֵ : UINT8 1 + * pAppData UINT8* IN Ӧ������ + * pFsfbStruct FSFB_INFO_STRU* FSFBͳһ�ṹ�� + * RecordArray UINT8* INOUT ��¼���� + * RecordArraySize UINT16 IN ��¼�����С + * ����ֵ : UINT8 1���������� ***********************************************************************/ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -644,13 +644,13 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 趨 */ + /* CRC �趨 */ calcCrc16 = ComComputeMsgCRC16(pAppData,ABT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[ABT_SIZE-FSFB_CRC_16_LEN]); - /* ֤CRCǷϷ */ + /* ��֤CRC�Ƿ�Ϸ� */ if(crc16 == calcCrc16) { - /* ȫݴС */ + /* ��ȫ���ݴ�С */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != ABT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -660,60 +660,60 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* жͨŽڵǷ */ + /* �ж�ͨ�Žڵ��Ƿ���� */ if( NULL != retLnkNodePtr) { - /* ͨŽڵڣô鱨ĵϢǷ͸ͨŽڵһ */ + /* ͨ�Žڵ���ڣ���ô��鱨�ĵ���Ϣ�Ƿ�͸�ͨ�Žڵ��һ�� */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* һ ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��һ�� ����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*�����ַ����*/ #endif } - else /* ͨ */ + else /* ���ͨ�� */ { - /* ·Ϣṹ */ + /* ������·������Ϣ�ṹ�� */ retVal = FsfbUptLnkNodeInfoByAbt(pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ³˵ǶӦSSR ô¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ���³�����˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* ʲô */ + /* ʲô���� */ } } } else { - /* ¼ ͨŽڵ㲻 */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ ͨ�Žڵ㲻���� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*����·*/ #endif } } - else /* Ȳ */ + else /* ���Ȳ��� */ { - /* ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ �������� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -724,18 +724,18 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * : FsfbAnalysisEbtMsg - * : յEBTϢн֡ȡϢ - * : - * + * ������ : FsfbAnalysisEbtMsg + * �������� : ���������յ���EBT��Ϣ���н�֡������ȡ�������Ϣ�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devName const UINT16 IN 豸 + * devName const UINT16 IN �豸���� * applyCat UINT8 IN application Catory - * pAppData UINT8* IN յ - * RecordArray UINT8* INOUT ¼ - * RecordArraySize UINT16 IN ¼С - * pFsfbStruct FSFB_INFO_STRU * IN FSFBЭͳһṹ - * ֵ : UINT8 1 + * pAppData UINT8* IN ���յ������� + * RecordArray UINT8* INOUT ��¼���� + * RecordArraySize UINT16 IN ��¼�����С + * pFsfbStruct FSFB_INFO_STRU * IN FSFBЭ��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� ***********************************************************************/ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -747,13 +747,13 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 趨 */ + /* CRC �趨 */ calcCrc16 = ComComputeMsgCRC16(pAppData,EBT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[EBT_SIZE-FSFB_CRC_16_LEN]); - /* ֤CRCǷϷ */ + /* ��֤CRC�Ƿ�Ϸ� */ if(crc16 == calcCrc16) { - /* ȫݴС */ + /* ��ȫ���ݴ�С */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != EBT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -763,58 +763,58 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* жͨŽڵǷ */ + /* �ж�ͨ�Žڵ��Ƿ���� */ if( NULL != retLnkNodePtr) { - /* ͨŽڵڣô鱨ĵϢǷ͸ͨŽڵһ */ + /* ͨ�Žڵ���ڣ���ô��鱨�ĵ���Ϣ�Ƿ�͸�ͨ�Žڵ��һ�� */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* һ ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��һ�� ����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*�����ַ����*/ #endif } - else /* ͨ */ + else /* ���ͨ�� */ { - /* ·Ϣṹ */ + /* ������·������Ϣ�ṹ�� */ retVal = FsfbUptLnkNodeInfoByEbt(devName,pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* ³˵ǶӦSSR ô¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ���³�����˵�����Ƕ�Ӧ��SSR���� ��ô��¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* ʲô */ + /* ʲô���� */ } } } else { - /* ¼ ͨŽڵ㲻 */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ ͨ�Žڵ㲻���� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*����·*/ #endif } } - else /* Ȳ */ + else /* ���Ȳ��� */ { - /* ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ �������� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -825,25 +825,25 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * : FsfbAnalysisBtdMsg - * : յBTDϢн֡ȡϢ, - Լݰһĸʽ - * : - * + * ������ : FsfbAnalysisBtdMsg + * �������� : ���������յ���BTD��Ϣ���н�֡������ȡ�������Ϣ, + �Լ������ݰ�һ���ĸ�ʽ����� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devName const UINT16 IN 豸 + * devName const UINT16 IN �豸���� * applyCat UINT8 IN application Catory - * pAppData UINT8* IN յ - * RecordArray UINT8* INOUT ¼ - * RecordArraySize UINT16 IN ¼С - * pFsfbStruct FSFB_INFO_STRU * IN FSFBЭͳһṹ - * ֵ : UINT8 1 + * pAppData UINT8* IN ���յ������� + * RecordArray UINT8* INOUT ��¼���� + * RecordArraySize UINT16 IN ��¼�����С + * pFsfbStruct FSFB_INFO_STRU * IN FSFBЭ��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� ***********************************************************************/ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { UINT8 retVal = 0; - UINT16 calcCrc16=0; /* żCRCֵ */ - UINT16 crc16 =0; /* еCRCֵ */ + UINT16 calcCrc16=0; /* ��ż����CRCֵ */ + UINT16 crc16 =0; /* ���������е�CRCֵ */ Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; UINT16 SrcAddr = 0; UINT16 DesAddr = 0; @@ -852,17 +852,17 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO ComTypeId2DevName(pFsfbStruct->LocalType,pFsfbStruct->LocalID,&localDevName); - /* CRC 趨 */ + /* CRC �趨 */ calcCrc16 = ComComputeMsgCRC16(pAppData,BTD_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[BTD_SIZE-FSFB_CRC_16_LEN]); - /* ֤CRCǷϷ */ + /* ��֤CRC�Ƿ�Ϸ� */ if(crc16 == calcCrc16) { - /* ȫݴС */ + /* ��ȫ���ݴ�С */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != BTD_SDS)||(applyCat != APPLCAT_BTM)) { - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*BTDijȴ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*����BTD�ij��ȴ���*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, tmpSds); PrintRecArrayByte(RecordArray, RecordArraySize, applyCat); @@ -872,44 +872,44 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* жͨŽڵǷ */ + /* �ж�ͨ�Žڵ��Ƿ���� */ if( NULL != retLnkNodePtr) { - /* ͨŽڵڣô鱨ĵϢǷ͸ͨŽڵһ */ + /* ͨ�Žڵ���ڣ���ô��鱨�ĵ���Ϣ�Ƿ�͸�ͨ�Žڵ��һ�� */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* һ ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��һ�� ����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*ַ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*�����ַ����*/ #endif } - else /* ͨ */ + else /* ���ͨ�� */ { - /* BTDϢǷϷ */ + /* ���BTD��Ϣ�Ƿ�Ϸ� */ retVal=FsfbCheckBtdMsg(pAppData,retLnkNodePtr,pFsfbStruct); if (retVal == 1) { - /* ϴνյıʱΪǰں */ + /* ���ϴν��յ����ı���ʱ�����Ϊ��ǰ���ں� */ retLnkNodePtr->FsfbLinInfo.TimeStmp.LastLocalRecTC =*pFsfbStruct->CycleNum; - /* 趨Ϊ0 */ + /* �����������趨Ϊ0 */ retLnkNodePtr->FsfbLinInfo.NoRecvDataCycleNum = 0; retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; retLnkNodePtr->IsSendFlag = 1; - /* ɹ */ + /* �����ɹ� */ retVal =1; } else { - /* ¼ ͨŽڵ㲻 */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ ͨ�Žڵ㲻���� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:BTD InVaild.\n"); #endif - /* ֤ʧ */ + /* ��֤ʧ�� */ retVal =0; } } @@ -918,20 +918,20 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO { retVal = 0; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*·*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*����·*/ - /* ¼ͨŽڵ㲻Ϸ */ + /* ��¼ͨ�Žڵ㲻�Ϸ� */ } } - else /* Ȳ */ + else /* ���Ȳ��� */ { retVal = 0; - /* ¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ + /* ��¼ �������� */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Tsd CRC Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -939,51 +939,51 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO return retVal; } /*-------------------------------------------------------------------- - * Ĵģⲿӿں End + * ���Ĵ���ģ���ⲿ�ӿں��� End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * Ĵģڲӿں Start + * ���Ĵ���ģ���ڲ��ӿں��� Start *--------------------------------------------------------------------*/ /*********************************************************************** -* : CreateTsdOrSbtMsg -* : Ӧ TSDSBTġ -* : -* +* ������ : CreateTsdOrSbtMsg +* �������� : ����Ӧ������ ���� TSD��SBT���ġ� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- -* pAppData const UINT8* IN Ӧò㵽Rsspжнڵ -* DataLen UINT8 IN pAppDataݳ -* OutTsdOrSbtMsg UINT8* OUT FSFDϢ֡ -* outPutDataLen UINT16* OUT ij -* pPNode Lnk_Info_Node_Stru_WL** OUT ¶Ӧڵڷ -1 +* pAppData const UINT8* IN Ӧ�ò㵽Rssp���������ж��нڵ� +* DataLen UINT8 IN ����pAppData�����ݳ��� +* OutTsdOrSbtMsg UINT8* OUT FSFD��Ϣ֡ +* outPutDataLen UINT16* OUT ������ij��� +* pPNode Lnk_Info_Node_Stru_WL** OUT ���¶�Ӧ�ڵ����������������ڷ��� -1 -* ֵ : UINT8 1 0󷵻 +* ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFBϢCRC */ - UINT32 CRCM[2] ={0}; /* CRCM */ + UINT16 CRC16 = 0; /* FSFB��ϢCRC */ + UINT32 CRCM[2] ={0}; /* CRCM���� */ pPNode->Applcat = applyCat; switch(applyCat) { case APPLCAT_BTM: *outPutDataLen = SBT_SIZE; - /* ·״̬ */ + /* ��·״̬���� */ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_SbtAbt; - /* 趨SBT֡ͷ */ + /* �趨SBT֡ͷ */ SetFsfbMsgHead(applyCat,FSFB_SBT_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); ret=1; break; case APPLCAT_TDM: *outPutDataLen = TSD_SIZE; - /*·״̬*/ + /*��·״̬����*/ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSse; - /* TSD֡ͷ */ + /* ����TSD֡ͷ */ SetFsfbMsgHead(applyCat,FSFB_TSD_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); - /*жݳǷΪTSD ݳ */ + /*�ж����ݳ����Ƿ�ΪTSD �����ݳ��� */ if(DataLen != TSD_DF_SIZE) { ret =0; @@ -998,19 +998,19 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ret = 0; break; } - /* Body 趨 + /* Body �趨 * ------------------------------------------------------------------ - * | SDS | ȫݳ | CRCM_1 | CRCM_2 | Ӧ | - * 4ֽ | 2ֽ | 2ֽ | 4ֽ | 4ֽ | 36ֽ | + * ������ | SDS | ��ȫ���ݳ��� | CRCM_1 | CRCM_2 | Ӧ������ | + * 4�ֽ� | 2�ֽ� | 2�ֽ� | 4�ֽ� | 4�ֽ� | 36�ֽ� | * ------------------------------------------------------------------ */ - /* Ӧ */ - /* pAppDataʼ MsgLenӦݵ */ + /* Ӧ������ */ + /* ��pAppData��ʼ���� MsgLen��Ӧ�����ݵ� ������ */ if(ret != 0) { if(DataLen ==0) { - /* 齨SBT֡body */ + /* �齨SBT֡��body */ DataLen = SBT_DF_SIZE; BuildSbtFrameDf(pPNode,&OutTsdOrSbtMsg[FSFB_DATA_POS]); } @@ -1019,7 +1019,7 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ComMemCopy(pAppData, & OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen); } - /* CRCMֵ,(϶1 ) */ + /* ����CRCMֵ,(�϶�����1 ) */ ret = ComCalcCRCM(&OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen, @@ -1027,21 +1027,21 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 趨 4ֽ */ + /* ������ �趨 4�ֽ� */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutTsdOrSbtMsg[FSFB_TC_POS]); - /* ȫݳ Ӧ+ 2CRCM 2ֽ */ + /* ��ȫ���ݳ��� Ӧ������+ 2��CRCM���� 2�ֽ� */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutTsdOrSbtMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 趨 4 ֽ */ + /* CRCM[0] CRCM[1] �趨 4 �ֽ� */ LongToCharLE(CRCM[0],&OutTsdOrSbtMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutTsdOrSbtMsg[FSFB_CRCM_2_POS]); - /* 16λ CRC 趨 2 ֽ */ + /* 16λ CRC �趨 2 �ֽ� */ CRC16 = ComComputeMsgCRC16(OutTsdOrSbtMsg,(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)); ShortToCharLE(CRC16,&OutTsdOrSbtMsg[(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)]); - /* ޷ӦΪ 0 */ + /* �޷���Ӧ��������Ϊ 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; ret = 1; } @@ -1055,87 +1055,87 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) UINT16 index =0; UINT32 crcValue =0; - /* ʼΪ 0 */ + /* �������ʼ��Ϊ 0 */ ComMemSet(pMsgDataBuff,SBT_DF_SIZE,0); - /* 2ֽڵԴַ */ + /* 2���ֽڵ�Դ��ַ */ ShortToCharLE(pNode->FsfbLinInfo.sendSrcAdd,pMsgDataBuff+index); index +=2; - /* 1ֽڵ record Flag 1޼¼ 0м¼ */ + /* 1���ֽڵ� record Flag 1�����޼�¼ 0�����м�¼ */ pMsgDataBuff[index]=0x01; index+=1; - /* 1ֽڵԤ */ + /* 1���ֽڵ�Ԥ�� */ index+=1; - /* 8ֽڵChannel1&2 SID */ + /* 8���ֽڵ�Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[1],pMsgDataBuff+index); index +=4; - /* 8ֽڵChannel1&2 SINIT */ + /* 8���ֽڵ�Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[1],pMsgDataBuff+index); index +=4; - /* 1ֽڵ */ + /* 1���ֽڵ������������ */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1ֽڵDelta Time Counter max */ + /* 1���ֽڵ�Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2ֽԤ */ + /* 2���ֽ�Ԥ�� */ index +=2; - /* 8ֽڵChannel1&2 DATAVER */ + /* 8���ֽڵ�Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 28ֽڵԤ */ + /* 28���ֽڵ�Ԥ�� */ index +=28; - /* 1ֽڵ NUM_DATAVER */ + /* 1���ֽڵ� NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3ֽԤ */ + /* 3���ֽ�Ԥ�� */ index +=3; - /* 1ֽڵWorldFip Periodic variable Address */ + /* 1���ֽڵ�WorldFip Periodic variable Address */ pMsgDataBuff[index++]=0x01; - /* 1ֽ Segment */ + /* 1���ֽ� Segment */ index+=1; - /* 2ֽ FSFB2Դַ */ + /* 2���ֽ� FSFB2Դ��ַ */ ShortToCharLE(pNode->FsfbLinInfo.sendDestAdd,pMsgDataBuff+index); index +=2; - /* 8ֽڵChannel1&2 SID */ + /* 8���ֽڵ�Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[1],pMsgDataBuff+index); index +=4; - /* 8ֽڵChannel1&2 SINIT */ + /* 8���ֽڵ�Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[1],pMsgDataBuff+index); index +=4; - /* 1ֽԤ */ + /* 1���ֽ�Ԥ�� */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1ֽڵDelta Time Counter max */ + /* 1���ֽڵ�Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2ֽԤ */ + /* 2���ֽ�Ԥ�� */ index +=2; - /* 8ֽڵChannel1&2 DATAVER */ + /* 8���ֽڵ�Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 1ֽڵ NUM_DATAVER */ + /* 1���ֽڵ� NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3ֽԤ */ + /* 3���ֽ�Ԥ�� */ index +=3; - /* 8ֽڵSYSCKW + /* 8���ֽڵ�SYSCKW D channel 1&2 */ LongToCharLE(COM_SYS_CHK_WD_1,pMsgDataBuff+index); index +=4; LongToCharLE(COM_SYS_CHK_WD_2,pMsgDataBuff+index); index +=4; - /* 4ֽڵCRC_1 */ + /* 4���ֽڵ�CRC_1 */ crcValue =Crc32(pMsgDataBuff,index); LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; - /* 4ֽڵCRC_2 */ + /* 4���ֽڵ�CRC_2 */ LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; if (index != SBT_DF_SIZE) @@ -1148,46 +1148,46 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) } /*********************************************************************** -* : CreateSseMsg -* : Ӧ SSEġ -* : -* +* ������ : CreateSseMsg +* �������� : ����Ӧ������ ����SSE���ġ� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT ¶Ӧڵڷ -1 -* outSseMsg UINT8* OUT FSFDϢ֡ -* ֵ : UINT8 1 0󷵻 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT ���¶�Ӧ�ڵ����������������ڷ��� -1 +* outSseMsg UINT8* OUT FSFD��Ϣ֡ +* ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSseMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqEng=0;/* ʱSEQENQ */ - /* ͨ״̬Ϣ */ - /* Applicationcat */ + UINT32 tmpSeqEng=0;/* ��ʱ����SEQENQ */ + /* ͨ��״̬��Ϣ���� */ + /* ����Application��cat */ pLnkNodeInfo->Applcat = applyCate; - /* 趨սڵΪȴSSR*/ + /* �趨���սڵ�Ϊ�ȴ�SSR*/ pLnkNodeInfo->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSSR; pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; - /* ͨŽڵδΪ0 */ + /* ͨ�Žڵ�δ������������Ϊ0 */ pLnkNodeInfo->FsfbLinInfo.NoRecvDataCycleNum =0; pLnkNodeInfo->IsSendFlag=0; - /* SSE ʱںͶӦʱ */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* Ӧֵ֤SSRļֵ */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* ӦʱյSSRʱʼSINITֵ */ + /* SSE ����ʱ�����ںͶ�Ӧ��ʱ������ */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* ��Ӧ������ֵ��������֤SSR������ļ�����ֵ */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* ��Ӧ��ʱ������յ�SSRʱ�����ʼSINITֵ */ pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]=pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; - /* ֡ͷϢ趨 */ + /* ֡ͷ��Ϣ�趨 */ SetFsfbMsgHead(applyCate,FSFB_SSE_MSG,pLnkNodeInfo->FsfbLinInfo.sendSrcAdd,pLnkNodeInfo->FsfbLinInfo.sendDestAdd,outSseMsg); - /* Boby 趨 */ - /* 4*/ + /* Boby �趨 */ + /*������ 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC,&outSseMsg[FSFB_TC_POS]); /* SEQENQ_1 4*/ @@ -1198,7 +1198,7 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, tmpSeqEng = pLnkNodeInfo->FsfbLinInfo.LocalNode.SIDr[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]; LongToCharLE(tmpSeqEng,&outSseMsg[FSFB_SSE_ENQ_2_POS]); - /* CRC 趨 */ + /* CRC �趨 */ crc16 = ComComputeMsgCRC16(outSseMsg,SSE_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSseMsg[SSE_SIZE-FSFB_CRC_16_LEN]); @@ -1208,25 +1208,25 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* : CreateSsrMsg -* : Ӧ SSRġ -* : -* +* ������ : CreateSsrMsg +* �������� : ����Ӧ������ ���� SSR���ġ� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT ¶Ӧڵڷ -1 -* OutSsrMsg UINT8* OUT FSFDϢ֡ -* ֵ : UINT8 1 0󷵻 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT ���¶�Ӧ�ڵ����������������ڷ��� -1 +* OutSsrMsg UINT8* OUT FSFD��Ϣ֡ +* ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSsrMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqIni=0;/* ʱSEQIni */ - /* ͨ״̬Ϣ */ - /* Applicationcat */ + UINT32 tmpSeqIni=0;/* ��ʱ����SEQIni */ + /* ͨ��״̬��Ϣ���� */ + /* ����Application��cat */ pLnkNodeInfo->Applcat = applyCate; - /* 趨սڵΪȴSSR*/ + /* �趨���սڵ�Ϊ�ȴ�SSR*/ if (applyCate == APPLCAT_TDM) { pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; @@ -1238,14 +1238,14 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, pLnkNodeInfo->IsSendFlag=1; } - /* ֡ͷϢ趨 */ + /* ֡ͷ��Ϣ�趨 */ SetFsfbMsgHead(applyCate,FSFB_SSR_MSG,pLnkNodeInfo->FsfbLinInfo.rcvDestAdd,pLnkNodeInfo->FsfbLinInfo.rcvSrcAdd,outSsrMsg); - /* Boby 趨 */ - /* replier 4*/ + /* Boby �趨 */ + /*������ replier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC,&outSsrMsg[FSFB_TC_POS]); - /* enqurier 4*/ + /*������ enqurier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.RecvSseTCe,&outSsrMsg[FSFB_SSR_TCENQ_POS]); /* SEQENQ_1 4*/ @@ -1258,10 +1258,10 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, ^pLnkNodeInfo->FsfbLinInfo.LocalNode.DATAVER[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; LongToCharLE(tmpSeqIni,&outSsrMsg[FSFB_SSR_ENQ_2_POS]); - /* NUM_DATAVER 趨 ŵһ */ + /* NUM_DATAVER �趨 �����ŵ�һ�� */ outSsrMsg[FSFB_SSR_NUM_POS]=pLnkNodeInfo->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* CRC 趨 */ + /* CRC �趨 */ crc16 = ComComputeMsgCRC16(outSsrMsg,SSR_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSsrMsg[SSR_SIZE-FSFB_CRC_16_LEN]); @@ -1271,45 +1271,45 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* : CreateBtmMsg -* : BTMSBTʽɱġ -* : -* +* ������ : CreateBtmMsg +* �������� : ����BTM��SBT��ʽ���ɱ��ġ� +* ������� : +* ������ ���� ������� ���� * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* DataLen UINT16 IN ݳ -* userDataLen UINT16 IN ݲִС -* OutBtmMsg UINT8* OUT FSFDϢ֡ -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT ¶Ӧڵڷ -1 +* DataLen UINT16 IN ���ݳ��� +* userDataLen UINT16 IN ���ݲ��ִ�С +* OutBtmMsg UINT8* OUT FSFD��Ϣ֡ +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT ���¶�Ӧ�ڵ����������������ڷ��� -1 -* ڽڵҪпǣTodo -* ֵ : UINT8 1 0󷵻 +* ���ڽڵ�������Ҫ���п��ǣ�Todo�� +* ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLen,UINT8 messType, UINT8 *OutBtmMsg, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFBϢCRC */ - UINT32 CRCM[2] ={0}; /* CRCM */ /* Ӧݳ */ + UINT16 CRC16 = 0; /* FSFB��ϢCRC */ + UINT32 CRCM[2] ={0}; /* CRCM���� */ /* Ӧ�����ݳ��� */ if (pPNode != NULL) { - /* ֡ͷ趨 */ + /* ֡ͷ�趨 */ SetFsfbMsgHead(APPLCAT_BTM,messType, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutBtmMsg); - /* Body 趨 + /* Body �趨 * ------------------------------------------------------------------ - * | SDS | ȫݳ | CRCM_1 | CRCM_2 | Ӧ | - * 4ֽ | 2ֽ | 2ֽ | 4ֽ | 4ֽ | 36ֽ | + * ������ | SDS | ��ȫ���ݳ��� | CRCM_1 | CRCM_2 | Ӧ������ | + * 4�ֽ� | 2�ֽ� | 2�ֽ� | 4�ֽ� | 4�ֽ� | 36�ֽ� | * ------------------------------------------------------------------ */ - /* Ӧ */ - /* pAppDataʼ MsgLenӦݵ */ + /* Ӧ������ */ + /* ��pAppData��ʼ���� MsgLen��Ӧ�����ݵ� ������ */ if(userDataLen == DataLen) { ComMemCopy(pAppData, &OutBtmMsg[FSFB_DATA_POS],DataLen); - /* CRCMֵ,(϶1 ) */ + /* ����CRCMֵ,(�϶�����1 ) */ if((messType == FSFB_BTC_MSG)||(messType == FSFB_EBT_MSG)) { ComAddTimeStamp(&pPNode->FsfbLinInfo.TimeStmp); @@ -1320,21 +1320,21 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 趨 4ֽ */ + /* ������ �趨 4�ֽ� */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutBtmMsg[FSFB_TC_POS]); - /* ȫݳ Ӧ+ 2CRCM 2ֽ */ + /* ��ȫ���ݳ��� Ӧ������+ 2��CRCM���� 2�ֽ� */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutBtmMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 趨 4 ֽ */ + /* CRCM[0] CRCM[1] �趨 4 �ֽ� */ LongToCharLE(CRCM[0],&OutBtmMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutBtmMsg[FSFB_CRCM_2_POS]); - /* 16λ CRC 趨 2 ֽ */ + /* 16λ CRC �趨 2 �ֽ� */ CRC16 = ComComputeMsgCRC16(OutBtmMsg,(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)); ShortToCharLE(CRC16,&OutBtmMsg[(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)]); - /* ޷ӦΪ 0 */ + /* �޷���Ӧ��������Ϊ 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; pPNode->IsSendFlag=0; /*pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_AbtOrSse;*/ @@ -1343,7 +1343,7 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe } else { - /* Ӵ¼ */ + /* ���Ӵ����¼�� */ ret = 0; } } @@ -1351,61 +1351,61 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe return ret; } /*********************************************************************** -* : SetFsfbMsgHead -* : FsfbϢ֡ͷɡ -* : -* +* ������ : SetFsfbMsgHead +* �������� : Fsfb��Ϣ֡ͷ���ɡ� +* ������� : +* ������ ���� ������� ���� * -------------------------------------------------------------- -* applCat UINT8 IN Ӧò -* MsgType UINT8 IN Ϣ -* SrcAddr UINT16 IN Դַ -* DestAddr UINT16 IN Ŀַ -* OutFsfbMsg UINT8* OUT FsfbϢ֡ -* ֵ : +* applCat UINT8 IN Ӧ�ò��� +* MsgType UINT8 IN ��Ϣ���� +* SrcAddr UINT16 IN Դ��ַ +* DestAddr UINT16 IN Ŀ���ַ +* OutFsfbMsg UINT8* OUT Fsfb��Ϣ֡ +* ����ֵ : �� ***********************************************************************/ static void SetFsfbMsgHead(UINT8 applCat,UINT8 MsgType, UINT16 SrcAddr, UINT16 DestAddr, UINT8 *OutFsfbMsg) { OutFsfbMsg[FSFB_APP_CTGRY_POS] = applCat; /* signaling variables */ - OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* Ϣ趨 */ - ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* 趨ԴַLITTLE endian */ - ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* 趨ԴַLITTLE endian */ + OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* ��Ϣ�����趨 */ + ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* �趨Դ��ַ��LITTLE endian */ + ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* �趨Դ��ַ��LITTLE endian */ } /*********************************************************************** - * : FsfbCheckBtdMsg - * : ֤BTDĵȷԡ - * : - * + * ������ : FsfbCheckBtdMsg + * �������� : ��֤BTD���ĵ���ȷ�ԡ� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pBsdMsg const UINT8 * IN Bsd - * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB·Ϣ - * pFsfbStruct FSFB_INFO_STRU * INOUT Эͳһṹ - * ֵ : UINT8 1 0󷵻 + * pBsdMsg const UINT8 * IN Bsd���� + * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB��·��Ϣ + * pFsfbStruct FSFB_INFO_STRU * INOUT Э��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkNode, FSFB_INFO_STRU *pFsfbStruct) { - UINT8 retVal = 1; /* ʼΪ */ + UINT8 retVal = 1; /* ��ʼ��Ϊ�������� */ UINT8 tmpret = 0; - INT32 DelayTCr = 0; /* */ - INT32 Tout = 0; /* ϴյĵʱ */ - UINT32 TCr = 0; /* ʱ */ - UINT32 SidXorTn[2] = {0}; /* SID XOR TN BSDļ */ - ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* ʱṹ */ - const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* ڵϢṹ */ + INT32 DelayTCr = 0; /* ������ */ + INT32 Tout = 0; /* �����ϴ��յ����ĵ�ʱ��� */ + UINT32 TCr = 0; /* ����ʱ�� */ + UINT32 SidXorTn[2] = {0}; /* SID XOR TN ��BSD���ļ������ */ + ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* ʱ����ṹ�� */ + const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* �ڵ������Ϣ�ṹ�� */ UINT8 *RecordArray = pFsfbStruct->RecordArray; UINT16 RecordArraySize = pFsfbStruct->RecordArraySize; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*BTD״̬*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*����BTD��״̬*/ PrintRecArrayByte(RecordArray, RecordArraySize, pLnkNode->FsfbLinInfo.RecvLinkStatus); - /* ͨŽڵ״̬Ϊ ״̬ */ + /* ͨ�Žڵ����״̬Ϊ ��������״̬ */ if( Fsfb_RecvData == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - /* ʱ */ + /* ����ʱ�� */ TCr = LongFromCharLE(&pBtdMsg[FSFB_TC_POS]); /* - * ϴαĵʱһ(ͬһͬʱܵBSDĺSSR)ñ - * 鶪Ƿʱ + * ������ϴα��ĵ�ʱ��һ��(��ͬһ������ͬʱ�ܵ�BSD���ĺ�SSR����)�������ñ��� + * ���� ��鶪�����Ƿ�ʱ */ if( TCr != pTmStmp->NowRecvTCr) { @@ -1418,7 +1418,7 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN if(DelayTCr >= 0) { - /* ijʱ */ + /* ���ij�ʱ ��� */ if(pTmStmp->LastLocalRecTC != *pFsfbStruct->CycleNum) { Tout = ComCheckTimeStamp(*pFsfbStruct->CycleNum, @@ -1426,29 +1426,29 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { - /* ˵Ѿյһ֡ݣҪʱ */ + /* ˵���������Ѿ��յ�һ֡�����ݣ�����Ҫ������ʱ��� */ Tout = 0; } - if (Tout >= 0) /* Ϸʱյ */ + if (Tout >= 0) /* �Ϸ�ʱ�����յ����� */ { - /* RSDȡSID XOR TN CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ + /* ��RSD������ȡ��SID XOR TN ��CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ tmpret = ComGetSidXorTn(pBtdMsg, SidXorTn); - /* CRCMЧ */ + /* ����CRCM����Ч�� */ retVal = ComCheckCRCM(SidXorTn, pTmStmp->NowSINIT_ADD_SID_XOR_Tn, DelayTCr, pNodeParam->TSD_POST_RXDADA_K); - if ((1 == retVal) && (tmpret == 1)) /* ɹ ӦϢ */ + if ((1 == retVal) && (tmpret == 1)) /* ���ɹ� �������Ӧ��Ϣ */ { - /* ʱṹ : pTmStmpStruǿգֵ϶Ϊ1 */ + /* ����ʱ����ṹ�� : pTmStmpStru�ǿգ�����ֵ�϶�Ϊ1 */ retVal = ComUpdtTmStmpStru(SidXorTn, TCr, DelayTCr, pNodeParam->PREC_SINIT_K, pTmStmp); - retVal = 1; /* */ + retVal = 1; /* �������� */ } else { -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray, RecordArraySize, "W:CRCM Error.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*BTDSVC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*����BTD��SVC����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[0]); /*sidXorTn[0]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[1]); /*sidXorTn[1]*/ @@ -1456,20 +1456,20 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowSINIT_ADD_SID_XOR_Tn[1]); /*NowSINIT_ADD_SID_XOR_Tn[1]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ - PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*BTDSVC*/ + PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*����BTD��SVC����*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* ʧ 󷵻 */ + /* ���ʧ�� ���󷵻� */ retVal = 0; } } - else /* ʱ */ + else /* ��ʱ */ { -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:Time Out.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*BTDӳٳ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*����BTD�ӳٳ�����*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, *pFsfbStruct->CycleNum); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->LastLocalRecTC); /*NowRecvTCr*/ @@ -1481,30 +1481,30 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray, RecordArraySize, "DelayTCr > MaxLost\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*BTDʧ*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*����BTD��ʧ������*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* Ķ طSSEͬ */ + /* ���������� ���Ķ����� �ط�SSE����ͬ�� */ pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; retVal = 0; } } else if( Fsfb_Halt == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* ״̬ΪSBT */ + pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* ״̬����Ϊ����SBT */ retVal = 0; } - else /* ״̬ */ + else /* ����״̬�������� */ { -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordArraySize,"W:RecvStatus() not RecvData or Halt.Discard Bsd Msg."); PrintFileHex(RecordArray,RecordArraySize,&pLnkNode->FsfbLinInfo.RecvLinkStatus,1); PrintFiles(RecordArray,RecordArraySize,"\n"); @@ -1515,5 +1515,5 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN return retVal; } /*-------------------------------------------------------------------- - * Ĵģڲӿں END + * ���Ĵ���ģ���ڲ��ӿں��� END *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c index 484dd2f..ce6a5b4 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c @@ -1,55 +1,55 @@ /** ****************************************************** * -* ļ FsfbProtcl.c -* Ȩ˵ ؿƼ޹˾ -* 汾 1.0 -* ʱ䣺 2013.09.05 -* -* FSFBЭʵ -* ʹע⣺ +* �ļ��� �� FsfbProtcl.c +* ��Ȩ˵���� �������ؿƼ����޹�˾ +* �汾�� �� 1.0 +* ����ʱ�䣺 2013.09.05 +* ���� �� ������ +* ���������� FSFBЭ��ʵ�� +* ʹ��ע�⣺ * -* ޸ļ¼ -* 2014.5.21 -* ޸ݣFsfbProtclRefreshLnkˣ tmpInput = ShortFromChar(pLnkStatusData); -* ޸ɣ֮ǰûлȡݵijȣ޷ʵָ +* �޸ļ�¼�� +* 2014.5.21 ������ +* �޸����ݣ���FsfbProtclRefreshLnk���������������ˣ� tmpInput = ShortFromChar(pLnkStatusData); +* �޸����ɣ�֮ǰû�л�ȡ�������ݵij��ȣ�����޷�ʵ�ָ��� -* 2014.5.21 -* ޸ݣFsfbProtclRefreshLnkУ -* FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); -* ΪFsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); -* ֮ǰˢϢһֱΪıˢ²ȫ - ޸: ֮ǰˢϢһֱΪıˢ²ȫ +* 2014.5.21 ������ +* �޸����ݣ���FsfbProtclRefreshLnk���������У� +* ����FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); +* ��ΪFsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); +* ֮ǰ����ˢ����Ϣ������һֱΪ�ı����ˢ�²���ȫ����� + �޸�����: ֮ǰ����ˢ����Ϣ������һֱΪ�ı����ˢ�²���ȫ����� -* 2014.5.30 - ޸: FsfbStructInit(): pFsfbStruct->AppArrayijֶγʼΪ0 - ޸: Ϊ4ֽlong +* 2014.5.30 ������ + �޸�����: ��FsfbStructInit()��: pFsfbStruct->AppArray�ij����ֶγ�ʼ��Ϊ0 + �޸�����: ����Ϊ4���ֽ�long ֮ǰ:ShortToChar(0, pFsfbStruct->AppArray); - Ϊ:LongToChar(0, pFsfbStruct->AppArray); + ��Ϊ:LongToChar(0, pFsfbStruct->AppArray); - 2014.5.30 - ޸: FsfbStructInit()pFsfbStruct->VarArrayijֶεijʼ - ޸: ʼʱӦñʼ + 2014.5.30 ������ + �޸�����: ��FsfbStructInit()��������pFsfbStruct->VarArray�ij����ֶεij�ʼ�� + �޸�����: ��ʼ��ʱ����Ӧ�ñ���ʼ�� - 2014.5.30 - ޸:FsfbStructInit()е"·ջռ"ģ - ˶ջʼɶջʼ - ޸:ʹģ黯 + 2014.5.30 ������ + �޸�����:��FsfbStructInit()�е�"������·��������ջ�ռ�"ģ�� + �����˶�ջ��ʼ������������ɶ�ջ��ʼ�� + �޸�����:������ʹ�����������ģ�黯 - 2014.5.30 - ޸:FsfbStructInit()е"ʱĻ"ģ - ʱڴռijʼ - ޸:¿ٵڴռӦýгʼ - 2014.8.05 - ޸:ReadQueueData()У޸BTD֧ķֵBTD֤ͨ - ֻǽ򵥵Ķ崻 - ޸:Ҫ - 2014.8.05 - ޸:ReadQueueData()Уһ֡ݳ:ݳ+2󳤶ʱ - ֡ݶִ - ޸:֮ǰδ˷֧ - 2014.8.14 - ޸ݣFsfbProtclOutPutȡÿһ֡Դ֡ݳȽ֤Ϸ֡ - ޸ɣ֮ǰֻǶԵһ֡ݳȷûж֡ݳȷҶԲϷ֡ûнӦ + 2014.5.30 ������ + �޸�����:��FsfbStructInit()�е�"��ʱ���Ļ�����"ģ�������� + ��ʱ�������ڴ�ռ�ij�ʼ�� + �޸�����:�¿��ٵ��ڴ�ռ�Ӧ�ý��г�ʼ�� + 2014.8.05 ������ + �޸�����:ReadQueueData()�����У��޸���BTD��֧�ķ���ֵ�����BTD��֤��ͨ���� + ֻ�ǽ���򵥵Ķ������������崻��� + �޸�����:������Ҫ + 2014.8.05 ������ + �޸�����:ReadQueueData()�����У���һ֡���ݳ���:���������ݳ���+2�����������󳤶�ʱ�� + ����֡���ݶ���������ִ�� + �޸�����:֮ǰδ���˷�֧���� + 2014.8.14 ������ + �޸����ݣ�FsfbProtclOutPut������ȡ��ÿһ֡���Դ�֡���ݳ��Ƚ�����֤���Ϸ�����������֡ + �޸����ɣ�֮ǰֻ�ǶԵ�һ֡�������ݳ��ȷ�����û�ж�����֡�����ݳ��ȷ����ҶԲ��Ϸ�֡û�н�����Ӧ���� * ------------ ------ --------------- ********************************************************/ #include "string.h" @@ -58,14 +58,14 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbProtclCommon.h" #include "FsfbLnkNodeMgr.h" #include "FsfbMessageInfo.h" #include "RpHandleInterface.h" /*-------------------------------------------------------------------- - * FSFBЭڲ Start + * FSFBЭ���ڲ��������� Start *--------------------------------------------------------------------*/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct); static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct); @@ -76,21 +76,21 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb); static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx); /*-------------------------------------------------------------------- - * FSFBЭڲ End + * FSFBЭ���ڲ��������� End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFBЭⲿӿں Start + * FSFBЭ���ⲿ�ӿں��� Start *--------------------------------------------------------------------*/ /****************************************************************************************** -* : Эʼ - 1. ڵô˺֮ǰӦҪͳһṹInputSizeOutputSize,MaxNumLink, - MaxNumPerCycle,OutnetQueueSizeȱֵ -* : UINT8 * fileName ݵļַ -* : FSFB_INFO_STRU* pFsfbStruct Эͳһṹָ -* : -* ȫֱ : -* ֵ : ʼ1򷵻0 +* �������� : Э���ʼ������ + 1. �ڵ��ô˺���֮ǰ��Ӧ��Ҫ��ͳһ�ṹ����InputSize��OutputSize,MaxNumLink, + MaxNumPerCycle,OutnetQueueSize�ȱ�����ֵ +* ������� : UINT8 * fileName ������ݵ��ļ������ַ +* ����������� : FSFB_INFO_STRU* pFsfbStruct Э��ͳһ�ṹ��ָ�� +* ������� : +* ȫ�ֱ��� : +* ����ֵ : ������ʼ������1�����򷵻�0 *******************************************************************************************/ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) { @@ -102,31 +102,31 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) return retVal; } - /* DSUѯгʼ */ + /* ��DSU���ѯ�������г�ʼ������ */ retVal = dsuFsFbInit(fileName); if( 0 == retVal ) { - /* DSUѯʼʧ */ + /* DSU��ѯ�������ʼ��ʧ�� */ return retVal; } else { - /* ʲô */ + /* ʲô���� */ } - /* FSFBṹʼ */ + /* FSFB�ṹ���ʼ�� */ retVal = FsfbStructInit(pFsfbStruct); if(0 == retVal) { - /* ¼ */ + /* ��¼ */ return retVal; } else { - /* ʲô */ + /* ʲô���� */ } - /* ͨ·ʼ */ + /* ͨ����·��������ʼ�� */ if(!FsfbInitLnkMngr(pFsfbStruct)) { retVal =0; @@ -136,62 +136,62 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) retVal = InitFsfbRedunStruct(pFsfbStruct, &pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* ʧ ʲô */ + /* ����ʧ�� ʲô���� ���� */ return retVal; } else { - /*ʼɹ*/ + /*��ʼ���ɹ�*/ } - /* ʼ */ + /* �����ʼ�� */ retVal = RpHandleInit(&pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* ʼʧ */ + /* ��ʼ��ʧ�� */ return retVal; } else { - /* 㴦ɹ */ + /* ����㴦���ɹ� */ } return retVal; } /****************************************************************************************** -* : ЭԪ,ЭĹ,Ӧô֡, - ΪݱȽϵԪ׼ñ,ͬʱά· -* : -* : FSFB_INFO_STRU* pFsfbStruct Эͳһṹָ : -* ֵ : ȷ1󷵻0 +* �������� : Э�������Ԫ��������,����Э��Ĺ���,��Ӧ�ô�����������֡, + ��Ϊ���ݱȽϵ�Ԫ׼���ñ��������,ͬʱά����·������ +* ������� : +* ����������� : FSFB_INFO_STRU* pFsfbStruct Э��ͳһ�ṹ��ָ�� : +* ����ֵ : ��ȷ����1�����󷵻�0 *******************************************************************************************/ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { - UINT8 retVal = 1;/*ֵ*/ - UINT8 tmpRetVal = 1;/*ʱֵ*/ + UINT8 retVal = 1;/*��������ֵ*/ + UINT8 tmpRetVal = 1;/*��ʱ��������ֵ*/ UINT32 index =0; - UINT16 msgLen = 0;/* Ϣ */ - UINT16 outputDataLen =0; /* һ֡ݳ */ - UINT16 maxMagLen = 0; /* һ֡ݵ󳤶 */ - UINT8 tmpBuff[2]={0}; /* ɱĵʱ */ - UINT16 fsfbVarLen = 0;/*FSFBЭм*/ - UINT16 redunVarLen = 0;/*мݳ*/ - Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* ͨŽڵָ */ - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*嵱ǰָ;*/ + UINT16 msgLen = 0;/* ��Ϣ���� */ + UINT16 outputDataLen =0; /* ���һ֡���ݳ��� */ + UINT16 maxMagLen = 0; /* һ֡���ݵ���󳤶� */ + UINT8 tmpBuff[2]={0}; /* ���ɱ��ĵ���ʱ������ */ + UINT16 fsfbVarLen = 0;/*FSFBЭ���м��������*/ + UINT16 redunVarLen = 0;/*������м�������ݳ���*/ + Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* ͨ�Žڵ�ָ�� */ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*���嵱ǰָ��;*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /*�������*/ PrintRecArray4ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, QueueStatus(&pFsfbStruct->OutputDataQueue)); CurFillLnk=pFsfbStruct->LnkHead; - /* ޷ۼ */ + /* �޷����������ۼ� */ while(CurFillLnk!= NULL) { CurFillLnk->FsfbLinInfo.NoAppDataCycleNum++; ComAddTimeStamp(&CurFillLnk->FsfbLinInfo.TimeStmp); - /* TDM֡*/ + /* �����TDM֡*/ CurFillLnk =CurFillLnk->NextNode; } @@ -200,27 +200,27 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) index =4; if(QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /*Ҫ͵Ӧ*/ + /*��������Ҫ���͵�Ӧ������*/ while (QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /* ɨֽڵij:һ֡Ӧݵij */ + /* ɨ�������ֽڵij���:һ֡Ӧ�����ݵij��� */ QueueScan(2,tmpBuff,&pFsfbStruct->OutputDataQueue); msgLen = ShortFromChar(tmpBuff); if(msgLen <= maxMagLen) - {/* нڵݳ Сڵ */ + {/* ���нڵ����ݳ��� С�ڵ��� ������� */ - /*ȡһ֡ */ + /*��ȡһ֡���� */ tmpRetVal = QueueRead((UINT32)(msgLen+2),pFsfbStruct->TmpDataBuff,&pFsfbStruct->OutputDataQueue); if (tmpRetVal == 1) { - /*ϢͬϢ */ + /*���������Ϣ������ͬ����Ϣ���� */ tmpRetVal =AccordInfoCreateFrameData(pFsfbStruct->TmpDataBuff,(msgLen+2),pFsfbStruct->AppArray+index,&outputDataLen,&pNode,pFsfbStruct); index +=outputDataLen; } if (tmpRetVal == 0) { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*Ӧݴ*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*�����Ӧ�����ݴ���*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); LongToChar(0,pFsfbStruct->AppArray); @@ -229,23 +229,23 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } else { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*Ӧ֡ݳȴ*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*���Ӧ��֡���ݳ��ȴ���*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, msgLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, maxMagLen); - QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*֡*/ + QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*������֡����*/ } } } else { - /*Ҫ͵Ӧ*/ + /*��������Ҫ���͵�Ӧ������*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); } - /* ·ϢӦ֡ */ + /* ������·��Ϣ�������Ӧ֡ */ tmpRetVal = ArrordLnkInfoCreateFrame(pFsfbStruct,&pFsfbStruct->AppArray[index],&outputDataLen); index+=outputDataLen; @@ -257,32 +257,32 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { LongToChar(index-4,pFsfbStruct->AppArray); - /*дм*/ - /*ݽṹ*/ + /*д���м����*/ + /*���ݽṹ*/ /******************************************************* - ܳ |FSFBЭм |м - 2ֽ | N | M + �����ܳ��� |FSFBЭ���м���� |�����м���� + 2�ֽ� | N | M *******************************************************/ fsfbVarLen = FsfbWriteToVarArray(&pFsfbStruct->VarArray[2],pFsfbStruct); redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize); - /*ദṹемFSFBЭм*/ + /*�����ദ���ṹ���е��м����������FSFBЭ���м������*/ ComMemCopy(pFsfbStruct->RpInfoStru.VarArray,&pFsfbStruct->VarArray[2+fsfbVarLen],redunVarLen); - /*дмܳ*/ + /*д���м�����ܳ���*/ if(fsfbVarLen+redunVarLen <= 65535) { ShortToChar((UINT16)(fsfbVarLen+redunVarLen),pFsfbStruct->VarArray); } else { - /*Ҫ͵Ӧ*/ + /*��������Ҫ���͵�Ӧ������*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); - /*Խ,Ӧò崻*/ + /*����Խ��,������Ӧ�ò�崻�*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /**/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /*�������*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, redunVarLen); @@ -293,63 +293,63 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * : FsfbProtclReceiveData - * : ԺݽFSFBİȫȫݽӦá - * : - * + * ������ : FsfbProtclReceiveData + * �������� : �Ժ������������ݽ���FSFB��İ�ȫ����������ȫ���ݽ���Ӧ�á� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭͳһṹ - * УpFsfbStruct->OutnetQueueA + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭ��ͳһ�ṹ�� + * ������У�pFsfbStruct->OutnetQueueA * pFsfbStruct->OutnetQueueB - * УpFsfbStruct->DataToApp + * ������У�pFsfbStruct->DataToApp * - * ֵ : UINT8 1 0󷵻 + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; - UINT16 MaxLen = 0; /* һ֡С */ - UINT8 *RecordArray = pFsfbStruct->RecordArray; /* ¼ */ - UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* ¼С */ - UINT32 inputQueLen = 0u; /*г*/ + UINT16 MaxLen = 0; /* һ֡��������С */ + UINT8 *RecordArray = pFsfbStruct->RecordArray; /* ��¼ */ + UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* ��¼�����С */ + UINT32 inputQueLen = 0u; /*������г���*/ - /* ¼ */ + /* ��¼���� */ ShortToChar(0,pFsfbStruct->RecordArray); -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ PrintFiles(RecordArray,RecordSize,"FSFB Receive:\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ - /* RSR뵥Ԫʶ */ - PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* ڿʼ0xEE */ /* M_2010_05_10 */ - PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* ں */ /*M_2010_05_10 */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* ID */ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* ������ */ + /* RSR���뵥Ԫ��ʶ */ + PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* �����ڿ�ʼ��0xEE */ /* M_2010_05_10 */ + PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* ���ں� */ /*M_2010_05_10 */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* �������� */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* ����ID */ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueR); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /**/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*��������*/ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueB); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /**/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*��������*/ #endif - QueueClear(&pFsfbStruct->DataToApp); /* */ + QueueClear(&pFsfbStruct->DataToApp); /* ������� */ - /* нڵݳ = InputSize + FSFBϢ̶ + й̶(4+ 2) */ + /* ���нڵ�������ݳ��� = InputSize + FSFB��Ϣ�̶����� + ���й̶�����(4+ 2) */ MaxLen = pFsfbStruct->InputSize + FSFB_FIXED_LEN + 6; ClearNetsRecvPkgNum(pFsfbStruct); - /* Ժյݽд */ - PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /**/ + /* �Ժ������յ������ݽ��д��� */ + PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /*�����������*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueR, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 0, pFsfbStruct); - /* յݽд */ - PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /**/ + /* ���������յ������ݽ��д��� */ + PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /*������������*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueB, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 1, pFsfbStruct); - /* ı 浽ʱ */ + /* ����������ı��� ��������� ���浽��ʱ���������� */ - /* ״̬ */ + /* ����״̬���� */ retVal=FsfbRecvLnkStatusMng(pFsfbStruct); @@ -357,22 +357,22 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * : FsfbProtclDeleteLnk - * : 豸ͺ豸IDɾ· - * : - * + * ������ : FsfbProtclDeleteLnk + * �������� : �����豸���ͺ��豸IDɾ����·�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devType UINT8 IN 豸 - * devId UINT8 IN 豸ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭͳһṹ - * ֵ : UINT8 1 0󷵻 + * devType UINT8 IN �豸���� + * devId UINT8 IN �豸ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭ��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *LastIndex; Fsfb_Lnk_Info_Node_Stru *CurIndex; - UINT16 destDevName;/*long豸name*/ + UINT16 destDevName;/*long���豸name*/ UINT8 ret = 0; if(pFsfbStruct == NULL) @@ -384,15 +384,15 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) ComTypeId2DevName(devType,devId,&destDevName); LastIndex = NULL; - /*ǰָͷָ뿪ʼ*/ + /*��ǰָ�������ͷָ�뿪ʼ*/ CurIndex = pFsfbStruct -> LnkHead; while(CurIndex != NULL) { - /*ҵҪɾڵ*/ + /*�ҵ�Ҫɾ���ڵ�*/ if(destDevName == CurIndex->DestDevName) { - /*ɾڵͷڵ*/ + /*���ɾ���ڵ���ͷ�ڵ�*/ if(LastIndex == NULL) { pFsfbStruct ->LnkHead = CurIndex->NextNode; @@ -403,10 +403,10 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } - }/*if(һָLastIndex == NULL)*/ - /*ɾڵ㲻ͷڵ*/ + }/*if(��һ��ָ��LastIndex == NULL)*/ + /*���ɾ���ڵ㲻��ͷ�ڵ�*/ else { LastIndex->NextNode = CurIndex->NextNode; @@ -417,45 +417,45 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } } } else { - /*޲*/ + /*�޲���*/ } - /*ûҵҪɾڵ㣬һָ͵ǰָ붼һڵ*/ + /*û���ҵ�Ҫɾ���ڵ㣬����һ��ָ��͵�ǰָ�붼������һ���ڵ�*/ LastIndex = CurIndex; CurIndex = CurIndex->NextNode; }/*end while(CurIndex != NULL)*/ - /*ɾ·Ϣ*/ + /*ɾ��������·��Ϣ*/ retVal = RpHandleLnkDelete(destDevName,&pFsfbStruct->RpInfoStru); return retVal; } /*********************************************************************** - * : FsfbProtclGetLnkStatus - * : 豸ͺ豸IDȡ豸״̬ - * : - * + * ������ : FsfbProtclGetLnkStatus + * �������� : �����豸���ͺ��豸ID��ȡ�豸״̬�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * devType UINT8 IN 豸 - * devId UINT8 IN 豸ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭͳһṹ - * ֵ : 0ͨŽڵ㲻 - 0x2b:ͨж - 0x17: + * devType UINT8 IN �豸���� + * devId UINT8 IN �豸ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭ��ͳһ�ṹ�� + * ����ֵ : 0��ͨ�Žڵ㲻���� + 0x2b:ͨ���ж� + 0x17:���������� ***********************************************************************/ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *pNode; - UINT16 destDevName =0;/*long豸name*/ + UINT16 destDevName =0;/*long���豸name*/ if(pFsfbStruct == NULL) { @@ -473,26 +473,26 @@ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStru } else if( pNode->FsfbLinInfo.RecvLinkStatus == Fsfb_RecvData) { - /* */ + /* ���������� */ retVal = 0x17; } else { - /* ͨ״̬*/ + /* ͨ��״̬������*/ retVal = 0x2b; } return retVal; } /*********************************************************************** - * : FsfbProtclRefreshLnk - * : мˢ·״̬ - * : - * + * ������ : FsfbProtclRefreshLnk + * �������� : ����������м����ˢ����·״̬�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pLnkStatusData UINT8* IN м - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭͳһṹ - * ֵ : UINT8 1 0󷵻 + * pLnkStatusData UINT8* IN �м�������� + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭ��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) { @@ -503,11 +503,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) UINT16 sLnksNums =0; INT16 tmpInput =0; UINT16 inputDataLnk =0; - UINT16 lnkStatusTotalLen = 0;/*·״̬ܳ*/ - UINT16 redunStatusLen = 0;/*·Ϣ*/ - UINT16 fsfbStatusLen = 0;/*FSFBЭ·Ϣ*/ + UINT16 lnkStatusTotalLen = 0;/*��·״̬�ܳ���*/ + UINT16 redunStatusLen = 0;/*������·��Ϣ����*/ + UINT16 fsfbStatusLen = 0;/*FSFBЭ����·��Ϣ����*/ - UINT16 index = 0;/*ƫ*/ + UINT16 index = 0;/*����ƫ��*/ if((pLnkStatusData == NULL)||(pFsfbStruct == NULL)) { @@ -527,11 +527,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) CurLnk = CurLnk->NextNode; } - /*2ֽڵ·Ϣܳ*/ + /*2���ֽڵ���·��Ϣ�ܳ���*/ lnkStatusTotalLen = ShortFromChar(pLnkStatusData); index += 2; - /*ȡFSFB·Ϣ*/ + /*��ȡFSFB����·��Ϣ����*/ fsfbStatusLen = ShortFromChar(&pLnkStatusData[index]); index += 2; tmpInput = fsfbStatusLen; @@ -541,9 +541,9 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) for( i = 0; i < sLnksNums; i++) { CurLnk = (Fsfb_Lnk_Info_Node_Stru *)ComPopStack(&pFsfbStruct->LnkStack); - if(CurLnk != 0) /*ӶջܹõĽڵַ*/ + if(CurLnk != 0) /*�Ӷ�ջ���ܹ��������õĽڵ��ַ*/ { - /*ʷˢ·Ϣ*/ + /*������ʷ����ˢ����·������Ϣ*/ FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[index+FSFB_VAR_NODE_LEN * i], CurLnk); if( i == 0) @@ -561,7 +561,7 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) tmpInput = tmpInput - FSFB_VAR_NODE_LEN; if( 0 == ( tmpInput % FSFB_VAR_NODE_LEN ) ) { - /* */ + /* �������� */ } else { @@ -578,16 +578,16 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } index += (sLnksNums*FSFB_VAR_NODE_LEN); - /*ȡദ·Ϣij*/ + /*��ȡ���ദ����·��Ϣ�ij���*/ redunStatusLen = ShortFromChar(&pLnkStatusData[index]); if ((redunStatusLen+2) == (lnkStatusTotalLen-2-fsfbStatusLen)) { - /*ˢ·Ϣ*/ + /*ˢ����·��Ϣ*/ retVal = RpHandleRefresh(redunStatusLen,&pLnkStatusData[index+2],&pFsfbStruct->RpInfoStru); } else { - /*·Ϣ*/ + /*��·��Ϣ����*/ retVal = 0; } } @@ -600,13 +600,13 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * : FsfbProtclFreeSpace - * : ͷſռ䡣 - * : - * + * ������ : FsfbProtclFreeSpace + * �������� : �ͷſռ䡣 + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭͳһṹ - * ֵ : UINT8 1 0󷵻 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBЭ��ͳһ�ṹ�� + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) { @@ -618,7 +618,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /* */ + /* �������� */ } if(pFsfbStruct->AppArray != NULL) @@ -628,7 +628,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } if(pFsfbStruct->VarArray != NULL) @@ -638,7 +638,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } if(pFsfbStruct->RecordArray != NULL) @@ -648,9 +648,9 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } - /*ͷŶеĿռ*/ + /*�ͷŶ��еĿռ�*/ QueueElementFree(&pFsfbStruct->OutnetQueueR); QueueElementFree(&pFsfbStruct->OutnetQueueB); QueueElementFree(&pFsfbStruct->OutputDataQueue); @@ -663,7 +663,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*޲*/ + /*�޲���*/ } retVal = RpHandleFreeSpace(&pFsfbStruct->RpInfoStru); @@ -672,19 +672,19 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } /*-------------------------------------------------------------------- - * FSFBЭⲿӿں End + * FSFBЭ���ⲿ�ӿں��� End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFBЭڲӿں Start + * FSFBЭ���ڲ��ӿں��� Start *--------------------------------------------------------------------*/ /*********************************************************************** - * : FsfbStructInit - * : ͨúʵֶRSRijʼӦ趨ĻֵеĴС - * : - * + * ������ : FsfbStructInit + * �������� : ͨ���ú�����ʵ�ֶ�RSR��ij�ʼ������������Ӧ���趨�Ļ���ֵ����������еĴ�С�� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFBͳһṹ壬гʼֵá - * ֵ : UINT8 1 0󷵻 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB��ͳһ�ṹ�壬����г�ʼֵ���á� + * ����ֵ : UINT8 1���������� 0�����󷵻� ***********************************************************************/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) { @@ -697,15 +697,15 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) inputSize = pFsfbStruct->InputSize; outputSize = pFsfbStruct->OutputSize; - /* */ + /* ��������� */ maxMsg = pFsfbStruct->InputSize > pFsfbStruct->OutputSize? pFsfbStruct->InputSize:pFsfbStruct->OutputSize; - maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* źŲй̶(2+4) + RSSP̶ + 32 */ + maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* �źŲ���й̶�����(2+4) + RSSP��̶����� + 32���� */ - /* ʼ */ - maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* */ + /* ���������ʼ�� */ + maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* ������� */ - /* FSFBģ */ + /* FSFB�����ģ��������� */ pFsfbStruct->AppArraySize = (pFsfbStruct->OutputSize+11+26)*(pFsfbStruct->MaxNumPerCycle)*(pFsfbStruct->MaxNumLink)+2; pFsfbStruct->AppArray = (UINT8 *)malloc(pFsfbStruct->AppArraySize); if(pFsfbStruct->AppArray == NULL) @@ -718,12 +718,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) LongToChar(0, pFsfbStruct->AppArray); } - /* FSFBģмС */ + /* FSFB���ģ������м���������С */ pFsfbStruct->VarArraySize = FSFB_VAR_NODE_LEN * pFsfbStruct->MaxNumLink+32; pFsfbStruct->VarArray = (UINT8*)malloc(pFsfbStruct->VarArraySize); if( NULL == pFsfbStruct->VarArray) { - /* ¼ */ + /* ��¼ */ retVal =0; return retVal; } @@ -732,8 +732,8 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ShortToChar(0, pFsfbStruct->VarArray); } - /* ЭӦõݶг */ - pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* ЭӦõݶг */ + /* Э�������Ӧ�õ����ݶ��г��� */ + pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* Э�������Ӧ�õ����ݶ��г��� */ retVal = QueueInitial(&pFsfbStruct->DataToApp,pFsfbStruct->DataToAppSize); if(0 == retVal) { @@ -741,10 +741,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* ʲô */ + /* ʲô���� */ } - /* ӦøЭݶг */ + /* Ӧ�ø�Э����������ݶ��г��� */ pFsfbStruct->OutputDataQueueSize= (outputSize + 8 )*maxMsgNum; retVal = QueueInitial(&pFsfbStruct->OutputDataQueue,pFsfbStruct->OutputDataQueueSize); if(0 == retVal) @@ -753,12 +753,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* ʲô */ + /* ʲô���� */ } - /* ܶг */ + /* �������ܶ��г��� */ pFsfbStruct->OutnetQueueSize = (pFsfbStruct->InputSize + 2 + 11)*pFsfbStruct->MaxNumPerCycle*pFsfbStruct->MaxNumLink; - /* */ + /* �������� */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueR,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -766,10 +766,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* ʲô */ + /* ʲô���� */ } - /* */ + /* �������� */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueB,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -777,14 +777,14 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* ʲô */ + /* ʲô���� */ } - /* ¼ */ + /* ��¼���� */ pFsfbStruct->RecordArray = (UINT8*)malloc(pFsfbStruct->RecordArraySize); if( NULL == pFsfbStruct->RecordArray) { - /* ¼ */ + /* ��¼ */ retVal =0; return retVal; } @@ -793,7 +793,7 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ComMemSet(pFsfbStruct->RecordArray ,pFsfbStruct->RecordArraySize,0x0); } - /* ·ջռ */ + /* ������·��������ջ�ռ� */ pFsfbStruct->LnkStack.maxNodeNum = pFsfbStruct->MaxNumLink; retVal = StackInitial(&pFsfbStruct->LnkStack.stack,pFsfbStruct->LnkStack.maxNodeNum); @@ -803,10 +803,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* */ + /* �������� */ } - /* ʱĻ */ + /* ��ʱ���Ļ����� */ pFsfbStruct->TmpDataBuff = (UINT8 *)malloc(maxMsg); if( NULL == pFsfbStruct->TmpDataBuff) { @@ -835,23 +835,23 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) /****************************************************************************************** -* : ʼͨ·(һָͷڵһά) - 1. ̬·ջռ䣬гʼ - 2. ·ͷָΪգ -* : -* : FSFB_INFO_STRU* pFsfbStruct Эʹõͳһṹָ -* : -* ȫֱ : -* ֵ : ɹ1,ʧܷ0 +* �������� : ��ʼ��ͨ����·������������(����һ��ָ��ͷ�ڵ��һά����) + 1. ��̬������·��������ջ�ռ䣬��������г�ʼ���� + 2. ����·��������ͷָ����Ϊ�գ� +* ������� : +* ����������� : FSFB_INFO_STRU* pFsfbStruct Э��ʹ�õ�ͳһ�ṹ��ָ�� +* ������� : +* ȫ�ֱ��� : +* ����ֵ : �ɹ�����1,ʧ�ܷ���0 *******************************************************************************************/ -static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*·ʼ*/ +static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*��·��������ʼ������*/ { UINT8 retVal =0; - /*·ڵ洢ռ*/ + /*���������·�ڵ����洢�ռ�*/ if(!FsfbInitLnkMngrStack(&pFsfbStruct->LnkStack)) { - /*¼¼*/ + /*��¼��¼*/ retVal = 0; return retVal; } @@ -862,25 +862,25 @@ static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /* } /****************************************************************************************** -* : ʼ·ջ -* ʼضСضṹĶջ,ͬĽṹֻҪѹ벻ָͬʹ÷ʽɲͬĹջ -* : ComStackElement* s ջָ -* : -* : -* ȫֱ : -* ֵ : ɹ1,ʧܷ0 +* �������� : ��ʼ����·��������ջ +* ��ʼ���ض���С�ض��ṹ�Ķ�ջ,��ͬ�Ľṹ��ֻ��Ҫ����ѹ�벻ͬ��ָ��ʹ�÷�ʽ��������ɲ�ͬ�Ĺ�����ջ +* ������� : ComStackElement* s ��ջ��ָ�� +* ����������� : +* ������� : +* ȫ�ֱ��� : +* ����ֵ : �ɹ�����1,ʧ�ܷ���0 *******************************************************************************************/ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ { - UINT16 i;/*ѭ*/ + UINT16 i;/*ѭ������*/ Fsfb_Lnk_Info_Node_Stru *pLnkMngrStack = NULL; UINT8 retVal =0; - StackClear(&s->stack); /* */ + StackClear(&s->stack); /* ��������*/ pLnkMngrStack = (Fsfb_Lnk_Info_Node_Stru *)malloc(sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum); if(pLnkMngrStack == NULL) { - /*ӡӡ*/ + /*��ӡ��ӡ*/ retVal = 0; return retVal; } @@ -889,11 +889,11 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ ComMemSet((UINT8*)pLnkMngrStack, sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum, 0x00); } for (i = 0;i < s->maxNodeNum;i++) - { /*ѹtotalsizeڵ*/ + { /*ѹ��totalsize���ڵ�*/ if(ComPushStack(s,(STACK_DATA_TYPE)&pLnkMngrStack[i]) != 1) { retVal = 0; - return retVal;/*ѹڵʧ*/ + return retVal;/*ѹ��ڵ�ʧ��*/ } else { @@ -905,97 +905,97 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ } /*********************************************************************** - * : ReadQueueData - * : Խյݽش - * : - * + * ������ : ReadQueueData + * �������� : �Խ��յ������ݽ�����ش����� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pQueueData QueueStruct* IN ӦýյݵĶ - * MaxLen UINT16 IN - * RecordArray UINT8* INOUT ¼ + * pQueueData QueueStruct* IN ��Ӧ�ý��յ����ݵĶ��� + * MaxLen UINT16 IN ������� + * RecordArray UINT8* INOUT ��¼���� * RecordArraySize UINT16 - * pFsfbStruct FSFB_INFO_STRU * INOUT FSFBЭͳһṹ - * ֵ : DataNode_WL* ʱͷ + * pFsfbStruct FSFB_INFO_STRU * INOUT FSFBЭ��ͳһ�ṹ�� + * ����ֵ : DataNode_WL* ��ʱ����������ͷ ***********************************************************************/ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordArray, UINT16 RecordSize, const UINT8 netIdx,FSFB_INFO_STRU *pFsfbStruct) { UINT8 retVal = 0; UINT8 flag =0; - UINT16 index = 0; /* ݱ־λ */ + UINT16 index = 0; /* ���ݱ�־λ */ UINT8 destDevType =0; UINT8 destDevId =0; UINT16 desDevName =0; - UINT16 MsgLen = 0; /* Ϣ */ + UINT16 MsgLen = 0; /* ��Ϣ���� */ UINT8 applyCat = 0; - UINT8 messageType =0; /* Ϣ */ + UINT8 messageType =0; /* ��Ϣ���� */ UINT8 tmpBtd[2]={0}; - UINT32 rcvBtdSn = 0;/*յBTD֡к*/ - UINT32 rcvOtherSn = 0;/*յ֡к*/ - const UINT8 SENDER_TYPE_QUE_POS = 0; /* 淢ͷ͵λ */ - const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* 淢ͷIdλ */ - const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* Ԥֽ*/ + UINT32 rcvBtdSn = 0;/*���յ�BTD֡�����к�*/ + UINT32 rcvOtherSn = 0;/*���յ�����֡�����к�*/ + const UINT8 SENDER_TYPE_QUE_POS = 0; /* ���淢�ͷ����͵�λ�� */ + const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* ���淢�ͷ�Id��λ�� */ + const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* ����Ԥ���ֽ�*/ retVal =1; - /* г>2 */ + /* ���г���>2 */ while(2 <= QueueStatus(pQueueData)) { - /* нڵʽ + /* ���нڵ��ʽ * ---------------------------------------------------------------------- - * | ͷType | ͷID | Ԥֽ| Ϣ֡ʽ - * 2ֽ| 1ֽ | 1 ֽ | 2bytes | + * ���� | ���ͷ�Type | ���ͷ�ID | Ԥ���ֽ�| ������Ϣ��֡��ʽ + * 2�ֽ�| 1�ֽ� | 1 �ֽ� | 2bytes | * ----------------------------------------------------------------------- */ index=0; - QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* ɨֽڵij */ + QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* ɨ�������ֽڵij��� */ MsgLen = ShortFromChar(pFsfbStruct->TmpDataBuff); if((MsgLen+2) <= MaxLen) { - /* һ֡ */ + /* ����һ֡���� */ retVal =QueueRead(MsgLen,pFsfbStruct->TmpDataBuff,pQueueData); if (retVal == 0) { - /* ʧʣµݴССMsgLen+2¼ */ -#ifdef FSFB_RECORD_ERR_ASCII /* ַʽ */ - PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* ʧ */ + /* ������ʧ�������ʣ�µ����ݴ�СС��MsgLen+2�����¼ */ +#ifdef FSFB_RECORD_ERR_ASCII /* �ַ�����ʽ */ + PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* ������ʧ�� */ #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* */ - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*ȡ֡ȴ*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*֡ȴ*/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* ������ */ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*��ȡ����֡���ȴ���*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*��������֡���ȴ���*/ #endif break; } - /* 豸Type*/ + /* �豸��Type*/ destDevType = pFsfbStruct->TmpDataBuff[SENDER_TYPE_QUE_POS]; - /* 豸ID */ + /* �豸��ID */ destDevId = pFsfbStruct->TmpDataBuff[SENDER_ID_QUE_POS]; ComTypeId2DevName(destDevType,destDevId,&desDevName); SetNetsRecvPkgNum(pFsfbStruct, desDevName, netIdx); - /* Ԥֽռ*/ + /* Ԥ���ֽ�ռ����*/ index = SENDER_EMPTY_QUE_POS+2; while((MsgLen-index)>0) { - /* 1ֽڵApplication Catory */ + /* 1���ֽڵ�Application Catory */ applyCat = pFsfbStruct->TmpDataBuff[index+FSFB_APP_CTGRY_POS]; - /* 1ֽ Ϣ */ + /* 1���ֽ� ��Ϣ���� */ messageType = pFsfbStruct->TmpDataBuff[index+FSFB_MSG_TYPE_POS]; - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*ȡ֡*/ - PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*֡*/ - PrintRecArrayByte(RecordArray, RecordSize, messageType); /*֡*/ - PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*豸ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*֡Դ豸ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*֡Ŀ豸ID*/ - PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*֡*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*��ȡ����֡*/ + PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*֡����*/ + PrintRecArrayByte(RecordArray, RecordSize, messageType); /*֡����*/ + PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*�豸����ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*֡��Դ�豸����ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*֡��Ŀ���豸����ID*/ + PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*֡���*/ switch(messageType) { case FSFB_SSE_MSG: - /* SSE֡ */ + /* ����SSE֡ */ if(applyCat == APPLCAT_BTM) { rcvOtherSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); @@ -1017,11 +1017,11 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr retVal = FsfbAnalysisSsrMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=SSR_SIZE; - /* SSR֡ʼ */ + /* ��SSR֡��ʼ���� */ break; case FSFB_TSD_MSG: - /* ܽյ */ - /* յֱӶ */ + /* �����ܽ��յ� */ + /* ����յ�ֱ�Ӷ��� */ index +=TSD_SIZE; break; case FSFB_ABT_MSG: @@ -1032,26 +1032,26 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr index +=ABT_SIZE; break; case FSFB_SBT_MSG: - /* յֱӶ */ + /* ����յ�ֱ�Ӷ��� */ index +=SBT_SIZE; break; case FSFB_BTC_MSG: - /* յֱӶ */ + /* ����յ�ֱ�Ӷ��� */ index +=BTC_SIZE; break; case FSFB_EBT_MSG: - /* EBT */ + /* ����EBT���� */ retVal =FsfbAnalysisEbtMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=EBT_SIZE; break; case FSFB_BTD_MSG: - /* ЧԼ*/ + /* ������Ч�Լ��*/ rcvBtdSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); retVal = ReadRpHandleQueueData(desDevName,rcvBtdSn,&pFsfbStruct->RpInfoStru); if(1 == retVal) { - /* ݣ·״̬ */ + /* ���������ݣ�������·״̬��������� */ retVal =FsfbAnalysisBtdMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); if(1 == retVal) { @@ -1066,12 +1066,12 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } else { - retVal=1;/*ڲϷBTDֻ֡ǽ䶪崻*/ + retVal=1;/*���ڲ��Ϸ�BTD֡��ֻ�ǽ��䶪�����������崻�*/ } } else { - /* ֡ */ + /* ������֡���� */ retVal=1; } index +=BTD_SIZE; @@ -1087,36 +1087,36 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } } else - {/*֡ݶ*/ + {/*����֡���ݶ���*/ QueueElementDiscard(MsgLen,pQueueData); - PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*֡ȴ*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*֡*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*��������֡���ȴ���*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*��������֡����*/ } } return retVal; } /*********************************************************************** - * : InitRedunStruct - * : ͳһṹгʼ - * : - * + * ������ : InitRedunStruct + * �������� : ������ͳһ�ṹ����г�ʼ�������� + * ������� : + * ������ ���� ������� ���� * -------------------------------------------------------------- - * pFsfbStruct const FSFB_INFO_STRU* IN FSFBͳһṹ - * pRedunInfoStru RPHANDLE_INFO_STRU * IN ͳһṹ + * pFsfbStruct const FSFB_INFO_STRU* IN FSFB��ͳһ�ṹ�� + * pRedunInfoStru RPHANDLE_INFO_STRU * IN �����ͳһ�ṹ�� * - * ֵ : UINT8 0󷵻 1 + * ����ֵ : UINT8 0�����󷵻� 1���������� ***********************************************************************/ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INFO_STRU *pRedunInfoStru) { - UINT8 ret = 0;/*ֵ*/ + UINT8 ret = 0;/*��������ֵ*/ - pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* 豸ID */ + pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* �����豸ID */ - pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* */ - pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* ¼ */ + pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* ������� */ + pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* ����¼�� */ pRedunInfoStru->MaxNumLink = pFsfbStruct->MaxNumLink; @@ -1125,11 +1125,11 @@ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INF } /* -*: հ -*: FSFB_INFO_STRU* fsfb fsfb -*: -*: -*ֵ: +*��������: ���������հ��� +*�������: FSFB_INFO_STRU* fsfb fsfb���� +*�������: �� +*�������: �� +*����ֵ: �� */ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) { @@ -1145,29 +1145,29 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) } /* -*: øհ -*: FSFB_INFO_STRU* fsfb fsfb -* const UINT32 dstDevName Ŀ豸 -* const UINT8 netIdx ± -*: -*: -*ֵ: +*��������: ���ø����հ��� +*�������: FSFB_INFO_STRU* fsfb fsfb���� +* const UINT32 dstDevName Ŀ���豸���� +* const UINT8 netIdx ���±� +*�������: �� +*�������: �� +*����ֵ: �� */ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx) { UINT16 i = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /**/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*�������*/ { for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*ҵ*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*�ҵ�*/ { fsfb->NetsRecvPkgNums[i].NetsPkgNum[netIdx]++; break; } } - if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*δҵ,һ豸*/ + if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*δ�ҵ�,����һ�豸*/ { fsfb->NetsRecvPkgNums[fsfb->NetsRecvPkgNumsLen].DstDevName = dstDevName; ComMemSet((UINT8*)fsfb->NetsRecvPkgNums[i].NetsPkgNum, 2 * sizeof(UINT16), 0u); @@ -1178,28 +1178,28 @@ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, con } /* -*: ȡFSFBյ -*: FSFB_INFO_STRU* fsfb fsfb -* const UINT8 dstType Ŀ豸 -* const UINT8 dstId Ŀ豸ID -*: UINT16* redRecvPkgNum յ -* UINT16* blueRecvPkgNum յ -*: -*ֵ: +*��������: ��ȡFSFB�����յ����� +*�������: FSFB_INFO_STRU* fsfb fsfb���� +* const UINT8 dstType Ŀ���豸���� +* const UINT8 dstId Ŀ���豸ID +*�������: UINT16* redRecvPkgNum �����յ����� +* UINT16* blueRecvPkgNum �����յ����� +*�������: �� +*����ֵ: �� */ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, const UINT8 dstId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum) { UINT16 i = 0u; UINT16 dstDevName = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /**/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /*�������*/ { (*redRecvPkgNum) = 0u; (*blueRecvPkgNum) = 0u; ComTypeId2DevName(dstType, dstId, &dstDevName); - for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /**/ + for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /*����*/ { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*ҵ*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*�ҵ�*/ { (*redRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[0]; (*blueRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[1]; @@ -1210,5 +1210,5 @@ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, cons } /*-------------------------------------------------------------------- - * FSFBЭڲӿں End + * FSFBЭ���ڲ��ӿں��� End *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h index b22288c..c42065f 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h @@ -1,15 +1,15 @@ /******************************************************** * -* ļ FsfbRecordDelare.h -* Ȩ˵ ؿƼ޹˾ -* 汾 1.0 -* ʱ䣺 2013.09.09 -* -* FSFBЭ¼غ궨塣 -* ʹע⣺ +* �ļ��FsfbRecordDelare.hare.h +* ��Ȩ˵���� �������ؿƼ����޹�˾ +* �汾�� �� 1.0 +* ����ʱ�䣺 2013.09.09 +* ���� �� ������ +* ���������� FSFBЭ���¼��غ궨�塣 +* ʹ��ע�⣺ * -* ޸ļ¼ -* 2010.05.10 ޸ ׷FSFBڿʼʶ +* �޸ļ�¼�� +* 2010.05.10 �޸� ׷��FSFB�����ڿ�ʼ��ʶ�� * ********************************************************/ @@ -19,93 +19,93 @@ /******************************************************************************** -궨 +�궨�� ********************************************************************************/ -/* ־λ */ -#define FSFB_CYCLE_TAG (0xF4FB) /* FSFBڿʼʶ */ -#define IN_RED (0x01) /**/ -#define IN_BLUE (0x02) /**/ -#define IN_FRAME_LEN_ERR (0x03) /*֡ȴ*/ -#define IN_READ_FRAME_ERR (0x04) /*ȡ֡ȴ*/ -#define IN_READ_FRAME (0x05) /*ȡ֡*/ -#define IN_CRC_ERR (0x06) /*CRC*/ -#define IN_NO_LNK (0x07) /*·*/ -#define IN_CAT_ERR (0x08) /*֡*/ -#define IN_ADDR_ERR (0x09) /*֡*/ -#define IN_SSR_STATUS_ERR (0x0A) /*SSR״̬*/ -#define IN_SSR_SSE_TC_ERR (0x0B) /*SSRSSEŴ*/ -#define IN_ABT_STATUS (0x0C) /*ABT״̬*/ -#define IN_ABT_SVC_ERR (0x0D) /*ABTSVC*/ -#define IN_ABT_OLD_ERR (0x0E) /*ABTŴ*/ -#define IN_ABT_SSE_BTC (0x0F) /*ABTSSEBTC*/ -#define IN_BTD_LEN_ERR (0x10) /*BTDijȴ*/ -#define IN_BTD_STATUS (0x11) /*BTD״̬*/ -#define IN_BTD_LOST_ERR (0x12) /*BTDʧ*/ -#define IN_BTD_DELAY_ERR (0x13) /*BTDӳٳ*/ -#define IN_BTD_SVC_ERR (0x14) /*BTDSVC*/ -#define OUT_APP (0x15) /**/ -#define OUT_FRAME_LEN_ERR (0x16) /*Ӧ֡ݳȴ*/ -#define OUT_READ_ERR (0x17) /*Ӧݴ*/ -#define OUT_APP_FRAME (0x18) /*Ӧ֡*/ -#define OUT_FRAME_TYPE_ERR (0x19) /*֡ʹ*/ -#define OUT_ADDR_ERR (0x1A) /*ַ*/ -#define OUT_FIND_LNK_ERR (0x1B) /*ѯ·*/ -#define OUT_INSERT_NODE_ERR (0x1C) /*ڵ*/ -#define OUT_INIT_NODE_ERR (0x1D) /*ʼڵ*/ -#define OUT_DATA_TYPE (0x1E) /**/ -#define OUT_LNK (0x1F) /*·*/ -#define OUT_RP_LNK (0x20) /*RP·*/ -#define OUT_ALL_LEN_ERR (0x21) /*ܳȴ*/ +/* ������־λ */ +#define FSFB_CYCLE_TAG (0xF4FB) /* FSFB�����ڿ�ʼ��ʶ */ +#define IN_RED (0x01) /*�����������*/ +#define IN_BLUE (0x02) /*������������*/ +#define IN_FRAME_LEN_ERR (0x03) /*��������֡���ȴ���*/ +#define IN_READ_FRAME_ERR (0x04) /*��ȡ����֡���ȴ���*/ +#define IN_READ_FRAME (0x05) /*��ȡ����֡*/ +#define IN_CRC_ERR (0x06) /*CRC����*/ +#define IN_NO_LNK (0x07) /*����·*/ +#define IN_CAT_ERR (0x08) /*����֡�������*/ +#define IN_ADDR_ERR (0x09) /*����֡�������*/ +#define IN_SSR_STATUS_ERR (0x0A) /*����SSR��״̬����*/ +#define IN_SSR_SSE_TC_ERR (0x0B) /*����SSR��SSE��Ŵ���*/ +#define IN_ABT_STATUS (0x0C) /*����ABT��״̬*/ +#define IN_ABT_SVC_ERR (0x0D) /*����ABT��SVC����*/ +#define IN_ABT_OLD_ERR (0x0E) /*����ABT����Ŵ���*/ +#define IN_ABT_SSE_BTC (0x0F) /*����ABT��SSE��BTC*/ +#define IN_BTD_LEN_ERR (0x10) /*����BTD�ij��ȴ���*/ +#define IN_BTD_STATUS (0x11) /*����BTD��״̬*/ +#define IN_BTD_LOST_ERR (0x12) /*����BTD��ʧ������*/ +#define IN_BTD_DELAY_ERR (0x13) /*����BTD�ӳٳ�����*/ +#define IN_BTD_SVC_ERR (0x14) /*����BTD��SVC����*/ +#define OUT_APP (0x15) /*�������*/ +#define OUT_FRAME_LEN_ERR (0x16) /*���Ӧ��֡���ݳ��ȴ���*/ +#define OUT_READ_ERR (0x17) /*�����Ӧ�����ݴ���*/ +#define OUT_APP_FRAME (0x18) /*���Ӧ��֡����*/ +#define OUT_FRAME_TYPE_ERR (0x19) /*���֡���ʹ���*/ +#define OUT_ADDR_ERR (0x1A) /*�����ַ����*/ +#define OUT_FIND_LNK_ERR (0x1B) /*�����ѯ��·����*/ +#define OUT_INSERT_NODE_ERR (0x1C) /*�������ڵ����*/ +#define OUT_INIT_NODE_ERR (0x1D) /*�����ʼ���ڵ����*/ +#define OUT_DATA_TYPE (0x1E) /*�����������*/ +#define OUT_LNK (0x1F) /*�����·*/ +#define OUT_RP_LNK (0x20) /*���RP��·*/ +#define OUT_ALL_LEN_ERR (0x21) /*��������ܳ��ȴ���*/ -#define FSFB_RCV_TAG 0xF4 /* FSFB뵥Ԫʶ */ -#define FSFB_OUT_TAG 0xF5 /* FSFBԪʶ */ -#define FSFB_MSG_IN_TAG 0x04 /* FSFBһ֡Ϣʼʶ(B 0000 0100) */ -#define FSFB_MSG_OUT_TAG 0x08 /* FSFBһ֡Ϣʼʶ(B 0000 1000) */ -#define FSFB_NODE_OUT_TAG 0x0C /* FSFBһ֡Ϣʼʶ(B 0000 1100) */ -#define FSFB_OUT_E_TAG 0x0F /* FSFBԪʶ(B 0000 1111) */ +#define FSFB_RCV_TAG 0xF4 /* FSFB���뵥Ԫ��ʶ */ +#define FSFB_OUT_TAG 0xF5 /* FSFB�����Ԫ��ʶ */ +#define FSFB_MSG_IN_TAG 0x04 /* FSFB����һ֡��Ϣ��ʼ��ʶ(B 0000 0100) */ +#define FSFB_MSG_OUT_TAG 0x08 /* FSFB���һ֡��Ϣ��ʼ��ʶ(B 0000 1000) */ +#define FSFB_NODE_OUT_TAG 0x0C /* FSFB���һ֡��Ϣ��ʼ��ʶ(B 0000 1100) */ +#define FSFB_OUT_E_TAG 0x0F /* FSFB�����Ԫ������ʶ(B 0000 1111) */ /************************************************************************ - * ԭЭһ16bit - * D15~D12 - * D11~D10ȼ - * D9~D8ģλ - * D7~D4ģеĴģ鲻ͬʱ4λĺ岻ͬ - * ڶȵײ - * D3~D0ģǷͬ4λĺͬ + * ���������ԭ��Э�������һ��16bit + * D15~D12������ + * D11~D10������ȼ� + * D9~D8��ģ��λ�� + * D7~D4����������ģ�����еĴ�����ģ�鲻ͬʱ��4λ�����ĺ��岻ͬ + * �����ڶ��������ȵײ���� + * D3~D0��������������������ģ���Ƿ���ͬ��4λ�����ĺ�����ͬ ************************************************************************/ -/* ȼ */ +/* ����ȼ� */ #define FSFB_ERR 0x0800 #define FSFB_WARN 0x0400 -/* ģλ */ -#define FSFB_RECEIVE 0x0200 /* ģ */ -#define FSFB_OUTPUT 0x0100 /* ģ */ +/* ģ��λ�� */ +#define FSFB_RECEIVE 0x0200 /* ����ģ�� */ +#define FSFB_OUTPUT 0x0100 /* ���ģ�� */ -/* ģд */ +/* ��ģ�����д��� */ #define FSFB_ERROR_NULL 0x0000 -/* */ -#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* FSFBϢ */ -#define FSFB_MSG_OLD_ERR 0x0020 /* ± */ -#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* ʱɾʧ */ -#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* ϢͨŽڵϢһ */ -#define FSFB_MSG_LEN_ERR 0x0050 /* ijȲ */ -#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* ĸʽ */ -#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* ǶӦSSRϢ */ -#define FSFB_MSG_REPLACE_ERR 0x0080 /* ǽڵʧ */ -#define FSFB_MSG_NO_REPLACENODE 0x0090 /* ڸǽڵ */ -#define FSFB_MSG_NO_INVALID 0x00A0 /* BSDʧ */ +/* ���� */ +#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* ����FSFB��Ϣ */ +#define FSFB_MSG_OLD_ERR 0x0020 /* �����±��� */ +#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* ��ʱ����ɾ��ʧ�� */ +#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* ������Ϣ��ͨ�Žڵ���Ϣ��һ�� */ +#define FSFB_MSG_LEN_ERR 0x0050 /* ���ij��Ȳ��� */ +#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* ���ĸ�ʽ���� */ +#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* ���Ƕ�ӦSSR������Ϣ */ +#define FSFB_MSG_REPLACE_ERR 0x0080 /* ���ǽڵ�ʧ�� */ +#define FSFB_MSG_NO_REPLACENODE 0x0090 /* �����ڸ��ǽڵ� */ +#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD����ʧ�� */ #define FSFB_MSG_CRC_ERR 0x00B0 -/* */ -#define FSFB_DBGET_ERR 0x0050 /* ݿѯ */ -/* ײ㴦 */ -#define FSFB_QUEUE_READ 0x0001 /* жд */ -#define FSFB_QUEUE_WRITE 0x0002 /* дд */ -#define FSFB_QUEUE_INTEGRITY 0x0003 /* ݲscanдӦø*/ -#define FSFB_LNK_PUSH 0x0004 /* ·ڵѹջ */ -#define FSFB_LNK_POP 0x0005 /* кŻڵջ */ +/* ��� */ +#define FSFB_DBGET_ERR 0x0050 /* ���ݿ��ѯ���� */ +/* ���������������ײ㴦������ */ +#define FSFB_QUEUE_READ 0x0001 /* ���ж��д� */ +#define FSFB_QUEUE_WRITE 0x0002 /* ����д�д� */ +#define FSFB_QUEUE_INTEGRITY 0x0003 /* ���������ݲ�����������scan�д���Ӧ�ø�������*/ +#define FSFB_LNK_PUSH 0x0004 /* ��·�������ڵ�ѹջ���� */ +#define FSFB_LNK_POP 0x0005 /* ���кŻ��������ڵ��ջ���� */ diff --git a/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 7998cbb..0756986 100644 --- a/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h +++ b/TSCP/src/protocol/sfp_record_cbtc1/common_sfp_nr_config/sfpConfig.h @@ -1,27 +1,27 @@ /******************************************************************************* -* �ļ��� �� sfpConfig.h -* ��Ȩ˵�� �� -* �汾�� �� 1.0 -* ����ʱ�� �� 2010.05.04 -* ���� �� ���� -* �������� �� ���ļ�ΪSFPЭ�������ļ� -* ʹ��ע�� �� - �� -* �޸ļ�¼ �� +* ļ sfpConfig.h +* Ȩ˵ +* 汾 1.0 +* ʱ 2010.05.04 +* +* ļΪSFPЭļ +* ʹע + +* ޸ļ¼ *******************************************************************************/ #ifndef _SFPCONFIG_H #define _SFPCONFIG_H -/**************************Э���¼�궨�忪��**********************************/ -/*#define PRTCL_RECORD_DATA_ASC*/ /*���ݲ����ַ��ͼ�¼����*/ -/*#define PRTCL_RECORD_ERR_ASC*/ /*���󲿷��ַ��ͼ�¼����*/ +/**************************Э¼궨忪**********************************/ +/*#define PRTCL_RECORD_DATA_ASC*/ /*ݲַͼ¼*/ +/*#define PRTCL_RECORD_ERR_ASC*/ /*󲿷ַͼ¼*/ -#define PRTCL_RECORD_SIMPLIFY_BIN /*�����Ƽ�¼����*/ -#define USE_DSU_SFP /*ʹ��SFP��ѯ����*/ -#define SWAP_CRC /*����CRC*/ +#define PRTCL_RECORD_SIMPLIFY_BIN /*Ƽ¼*/ +#define USE_DSU_SFP /*ʹSFPѯ*/ +/*#define SWAP_CRC */ /*CRC*/ #else #endif diff --git a/数据/FS_1_20260305_113139-正常数据.zip b/数据/FS_1_20260305_113139-正常数据.zip new file mode 100644 index 0000000..560e752 --- /dev/null +++ b/数据/FS_1_20260305_113139-正常数据.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49d48512d71d26285f75c43735172f5a0c0f7c288b8e31b844de466cf56bfd06 +size 8986695