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; /*计轴区段列车安全位置覆盖标志*/ 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]); /*获取相邻计轴区段列车安全位置覆盖标志*/ + 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; /*计轴区段列车安全位置覆盖标志: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; +} + +/* +* 功能描述:组包Ci到Ivoc未接近开放进路信息(预先开放) +* 参数说明: 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) /*CI到IVOC 紧急制动状态无效*/ #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); + +/* +* 功能描述:组包Ci到Ivoc未接近开放进路信息(预先开放) +* 参数说明: 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) /*逻辑区段的侧防道岔数目*/ #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; /*实际表数据的一行的长度*/ + 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区域属性,0x55:CBTC区域,0xAA:非CBTC区域*/ 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区域属性(所有link均具有CBTC区域属性)*/ #define ROUTE_CBTC_PROPERTY_NO ((UINT8)0xaa) /*进路不具有CBTC区域属性(存在link不具有CBTC区域属性)*/ -#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计轴区段列车安全位置覆盖标志 +* 参数说明: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计轴区段列车安全位置覆盖标志 +* 参数说明: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 + { + /*不做处理*/ + } +} + +/* +* 功能描述:清除计轴区段列车安全位置覆盖标志 +* 参数说明:无 +* 返 回 值:无 +* 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; /*重置计轴区段无通信车安全位置覆盖标志无效*/ + } + 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; /*计轴区段列车安全位置覆盖标志: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计轴区段列车安全位置覆盖标志 +* 参数说明:const UINT16 axisSectionId 计轴区段ID +* 返 回 值:0x55 无效 +* 0xAA 有效 +* Created By LQ 2025.12.01 +*/ +UINT8 GetAxisTXSafeLocFlag(const UINT16 axisSectionId); + +/* +* 功能描述:设置指定ID计轴区段列车安全位置覆盖标志 +* 参数说明:const UINT16 axisSectionId 计轴区段ID +* const UINT8 cFlag 标志 +* 返 回 值:无 +* Created By LQ 2025.12.01 +*/ +void SetAxisTXSafeLocFlag(const UINT16 axisSectionId, const UINT8 cFlag); + +/* +* 功能描述:清除计轴区段列车安全位置覆盖标志 +* 参数说明:无 +* 返 回 值:无 +* 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 basePhysec,wPrePhySecId 间接区段的跳转区段 * 返回值 :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 AcId计轴ID +* 返回值 :无 +*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 wPhySecId,const 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); - - } - } - } -} - - - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖閫氫俊鐨勫弽棣堛 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱ABSynMsgType *pMsgType, 閲囬泦鍒扮殑type淇℃伅 - * 杩斿洖鍊 锛歎INT8, - * 0x00,姝e父銆 - * 0x81,鍛戒护涓庡弽棣堜笉涓鑷 - * 0x82,鎸囬拡涓虹┖ - * 浣跨敤娉ㄦ剰锛氬彂閫佷笌閲囬泦闂撮殧鑷冲皯涓40ms銆 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType) -{ - uint8_t ret = 0U; - float Duty = 0.0f; - float period = 0.0f; - uint32_t PulseCnt = 0u; - if (NULL != pMsgType) - { - calculate(2U,&Duty,&period,&PulseCnt); - *pMsgType = drvPWMAnalyze(Duty,period); - if (g_userSetSyncMsgType == *pMsgType) - { - ret =0u; - } - else - { - ret = 0x81u; - } - } - else - { - ret = 0x82U; - } - return ret; -} - -/* 鍑芥暟鍔熻兘锛氭煡璇㈠綋鍓嶅悇閫氶亾鏀跺埌鐨勫閮ㄨ剦鍐蹭釜鏁般 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛 uint8_t index -- 閫氶亾绱㈠紩锛0-瀵规柟A绯婚氶亾 1-瀵规柟B绯婚氶亾 2-鑷韩鍙嶉閫氶亾 - * uint32_t* pPulseCnt -- 澶栭儴瀛樺偍鍙橀噺鍦板潃 - * 杩斿洖鍊 锛歶int8_t 0-鎴愬姛 1-澶辫触锛氬叆鍙傞敊璇 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt) -{ - uint8_t ret = 0U; - if ((index > 2U) || (NULL == pPulseCnt)) - { - ret = 1u; - return ret; - } - - *pPulseCnt = s_CapInfo[index].capCount; - - return ret; -} - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧绯诲弻閫氶亾纭氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱MsgType[0]:瀵规柟A绯诲彂鍑虹殑纭氫俊淇℃伅:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]锛氬鏂笲绯诲彂鍑虹殑纭氫俊淇℃伅锛欰BSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:鏀跺埌瀵规柟A绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笰绯诲仠姝㈣緭鍑鸿剦鍐 - * pPulseCnt[1]:鏀跺埌瀵规柟B绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笲绯诲仠姝㈣緭鍑鸿剦鍐 - * 杩斿洖鍊 锛氭棤銆 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt) -{ - float Duty[2] = {0.0f}; - float Period[2] = {0.0f}; - - if(( NULL != pMsgType) && (NULL != pPulseCnt)) - { - drvGetABSyn(Duty,Period,pPulseCnt); - pMsgType[0] = drvPWMAnalyze(Duty[0],Period[0]); - pMsgType[1] = drvPWMAnalyze(Duty[1],Period[1]); - } - else - { - ; - } - -} - - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧綋鍓嶇郴闂翠俊鍙疯剦鍐茬殑鏈澶ц宸笺 - * 杈撳叆鍙傛暟锛歶int8_t index - * 杈撳嚭鍙傛暟锛氭棤 - * 杩斿洖鍊 锛歠loat -- 璇樊鐧惧垎姣斻 - */ -float drvGetSyncSigErr(ABSynMsgType msgType) -{ - uint8_t index = 0u; - float ret = -1.0f; - if (msgType < ABSynMsgType_MAX) - { - index = (uint8_t)msgType; - ret = sSyncMsgErrInfo[index]; - } - - return ret; -} - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖鍒囩郴淇″彿鐨勫崰绌烘瘮鍙婇鐜囥 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛欴uty[0]:瀵圭郴CPU1鍗犵┖姣,淇濈暀3浣嶆湁鏁堝皬鏁,濡30%鍗犵┖姣旇〃绀轰负0.300 - * Period[0]锛氬绯籆PU1棰戠巼,鍗曚綅涓篐z - * Duty[1]:瀵圭郴CPU2鍗犵┖姣,淇濈暀3浣嶆湁鏁堝皬鏁,濡30%鍗犵┖姣旇〃绀轰负0.300 - * Period[1]锛氬绯籆PU2棰戠巼,鍗曚綅涓篐z - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛歅eriod涓0鏃惰〃绀洪敊璇 - */ -static void drvGetABSyn(float *Duty,float *Period,uint32_t* pPulseCnt) -{ - if ((NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - /*浣跨敤IO涓柇鏂瑰紡*/ - calculate(0U,&Duty[0],&Period[0],&pPulseCnt[0]); - calculate(1U,&Duty[1],&Period[1],&pPulseCnt[1]); -} - - -/* 鍑芥暟鍔熻兘锛歅WM淇″彿瑙f瀽涓哄弻绯籑sgType銆 - * 杈撳叆鍙傛暟锛欴uty:閲囬泦鍒扮殑PWM鍗犵┖姣 - * Period锛氶噰闆嗗埌鐨凱WM棰戠巼 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛欰BSynMsgType锛氬弻绯婚氫俊鐨勫叿浣撲俊鎭 - * 浣跨敤娉ㄦ剰锛氥 - */ -static ABSynMsgType drvPWMAnalyze(float Duty,float Period) -{ - ABSynMsgType ABSynMsgTypetemp = ABSynMsgType_0; - float syncErr = 0.0f; - float tmp = 0.0f; - float baseFreq = 0.0f; - uint8_t index = 0u; - - if((Duty > 0.45f) && (Duty < 0.55f) ) - { - if((Period > 150.0f) && (Period < 250.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_1; - } - else if((Period > 250.0f) && (Period < 350.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_2; - } - else if((Period > 350.0f) && (Period < 450.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_3; - } - else if((Period > 450.0f) && (Period < 550.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_4; - } - else if((Period > 550.0f) && (Period < 650.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_5; - } - else if((Period > 650.0f) && (Period < 750.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_6; - } - else if((Period > 750.0f) && (Period < 850.0f)) - { - ABSynMsgTypetemp = ABSynMsgType_7; - } - else - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - } - else//鍗犵┖姣旀棤鎴栦笉姝e父 - { - ABSynMsgTypetemp = ABSynMsgType_0; - } - - index = (uint8_t)ABSynMsgTypetemp; - baseFreq = (float)(index + 1u) * 100.0f; - tmp = (Period > baseFreq) ? (Period - baseFreq) : (baseFreq - Period); - syncErr = tmp / baseFreq * 100.0f; - tmp = sSyncMsgErrInfo[index]; - tmp = (syncErr > tmp) ? syncErr : tmp; - sSyncMsgErrInfo[index] = tmp; - - return ABSynMsgTypetemp; -} - -/*浣跨敤io涓柇鑾峰彇瀵圭鑴夊啿棰戠巼*/ -static void calculate(uint8_t index,float *Duty,float *Period,uint32_t* pPulseCnt) -{ - uint32_t curTimeStamp = 0u; - uint32_t startTimeStamp = 0u; - float tmp = 0.0f; - - if ((index > 2U) || (NULL == Duty) || (NULL == Period) || (NULL == pPulseCnt)) - { - return; - } - - s_ECapPause[index] = 1U; - curTimeStamp = s_CapInfo[index].cap1CurrentTime; - startTimeStamp = s_CapInfo[index].cap1StartTime; - - uint32_t useTime = (curTimeStamp > startTimeStamp) ? \ - (curTimeStamp - startTimeStamp) : \ - (0xFFFFFFFFU - startTimeStamp + curTimeStamp); - - tmp = (float)useTime / (float)s_CapInfo[index].capCount; - s_CapInfo[index].fre = (32000.0f / tmp); - - *Period = s_CapInfo[index].fre; - *Duty = 0.5f; - *pPulseCnt = s_CapInfo[index].capCount; - s_CapInfo[index].cap1CurrentTime = 0u; - s_CapInfo[index].cap1StartTime = 0u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].isLocked = 0u; - s_ECapPause[index] = 0U; -} - - -static void pulseCount(uint8_t index) -{ - uint8_t capPause = 0u; - uint8_t syncStart = 0u; - if (index < 3u) - { - capPause = s_ECapPause[index]; - syncStart = s_isABSyncStart; - if ((0u == capPause) && (1u == syncStart)) - { - if(0u == s_CapInfo[index].isLocked) - { - s_CapInfo[index].isLocked = 1u; - s_CapInfo[index].capCount = 0u; - s_CapInfo[index].cap1StartTime = cnt; - } - s_CapInfo[index].cap1CurrentTime = cnt; - s_CapInfo[index].capCount++; - } - else - { - /*do nothing*/ - } - } -} - - -/************************************************************************/ -/* -* @brief 璇诲彇phy瀵勫瓨鍣ㄧ浉鍏崇淮鎶や俊鎭 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬 -* -* @param[in] -* const char* fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* uint16_t infoLen - 瀵勫瓨鍣ㄤ俊鎭暟缁勯暱搴︼紝姝ら暱搴﹀簲璇ュぇ浜庣瓑浜12 -* @param[out] -* uint16_t * Info - 瀵勫瓨鍣ㄤ俊鎭暟缁勫瓨鍌ㄩ鍦板潃 -* @return rtn 杩斿洖鐘舵 -* - n: n涓哄疄闄呰鍙栫殑瀵勫瓨鍣ㄤ釜鏁 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen) -{ - /*- 鍙橀噺鍒濆鍖*/ - int sockfd = -1; - int rtn = -1; - int n = 0; - /*uint16_t regInfo[12u] = {0u};*/ - uint8_t regList[12] = {0u,1u,4u,5u,6u,7u,8u,9u,10u,15u,21u,31u}; - uint8_t i = 0u; - - if ((NULL == fecx) || (NULL == Info) || (0u == infoLen)) - { - return rtn; - } - - /*- 鍒涘缓DGRAM绫诲瀷濂楁帴瀛*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 閰嶇疆缃戠粶鎺ュ彛鍚嶇О*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 璁剧疆PHY瀵勫瓨鍣ㄨ闂弬鏁*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY瀵勫瓨鍣ㄨ鍙栧懡浠 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY璁惧鍦板潃 */ - phycmd.req.phy_reg = 1U; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - phycmd.req.phy_data = 0U; /* 鍒濆鍖栨暟鎹煙 */ - - n = ((12U <= infoLen)? 12 : (int)infoLen); - - for(i = 0u;i < n;i++) - { - phycmd.req.phy_reg = regList[i]; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - /*- 鍙戦侀┍鍔ㄦ帶鍒跺懡浠よ幏鍙朠HY鐘舵*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - Info[i] = phycmd.req.phy_data; - } - rtn = n; - close(sockfd); - } - /*- 杩斿洖鏈缁堟娴嬬粨鏋*/ - return rtn; -} - - -#if 0 -/*璋冭瘯鎺ュ彛*/ -void checkisr(void) -{ - static int ret = 0; - printf("irq cnt 0 is %d\n",irqCnt[0]); - printf("irq cnt 1 is %d\n",irqCnt[1]); - printf("irq cnt 2 is %d\n",irqCnt[2]); - printf("cur cnt is %d\n",cnt); -} -#endif - - -/************************************************************************/ -/* -* @brief 閫氳繃PHY瀵勫瓨鍣ㄦ鏌ユ寚瀹氱綉鍗¢摼璺姸鎬 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬侊紝 -* 鏍规嵁瀵勫瓨鍣ㄥ肩殑鐗瑰畾浣嶅垽鏂摼璺槸鍚︽甯搞 -* -* @param[in] fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* @return rtn 杩斿洖鐘舵 -* - 0: 閾捐矾鐘舵佹甯革紙PHY瀵勫瓨鍣╞it2涓1锛 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -* @note 鍑芥暟鎵ц娴佺▼锛 -* 1. 鍒涘缓UDP濂楁帴瀛 -* 2. 閰嶇疆phycmd鎺у埗缁撴瀯浣擄細 -* - ifd_name: 缃戠粶鎺ュ彛鍚嶇О -* - ifd_cmd: 浣跨敤READ_PHY_REG鍛戒护 -* - phy_id: PHY鍦板潃7 -* - phy_reg: 瀵勫瓨鍣ㄥ湴鍧1锛堢姸鎬佸瘎瀛樺櫒锛 -* 3. 閫氳繃devctl鍙戦佹帶鍒跺懡浠 -* 4. 瑙f瀽phy_data瀵勫瓨鍣ㄥ肩殑bit2鍒ゆ柇閾捐矾鐘舵 -*/ -int phytool(const char* fecx) -{ - /*- 鍙橀噺鍒濆鍖*/ - int sockfd = -1; - int rtn = -1; - - if (NULL == fecx) - { - return rtn; - } - - /*- 鍒涘缓DGRAM绫诲瀷濂楁帴瀛*/ - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (-1 == sockfd) - { - perror("socket"); - } - else - { - /*- 閰嶇疆缃戠粶鎺ュ彛鍚嶇О*/ - strncpy((char*)&phycmd.ifd.ifd_name, fecx, IFNAMSIZ); - - /*- 璁剧疆PHY瀵勫瓨鍣ㄨ闂弬鏁*/ - phycmd.ifd.ifd_cmd = READ_PHY_REG; /* PHY瀵勫瓨鍣ㄨ鍙栧懡浠 */ - phycmd.ifd.ifd_len = sizeof(phy_access_t); - phycmd.ifd.ifd_data = (void*)&phycmd.req; - phycmd.req.phy_id = 7U; /* PHY璁惧鍦板潃 */ - phycmd.req.phy_reg = 1U; /* PHY鐘舵佸瘎瀛樺櫒鍦板潃 */ - phycmd.req.phy_data = 0U; /* 鍒濆鍖栨暟鎹煙 */ - - /*- 鍙戦侀┍鍔ㄦ帶鍒跺懡浠よ幏鍙朠HY鐘舵*/ - devctl(sockfd, SIOCGDRVSPEC, &phycmd,sizeof(phycmd),0); - - close(sockfd); - - /*- 瑙f瀽鐘舵佸瘎瀛樺櫒bit2锛0x04锛夐摼璺姸鎬佹爣蹇*/ - if(1U == ((phycmd.req.phy_data & 0x04U)>>2U)) - { - rtn = 0; /* 閾捐矾姝e父 */ - } - else - { - ; /* 淇濇寔榛樿澶辫触鐘舵 */ - } - } - /*- 杩斿洖鏈缁堟娴嬬粨鏋*/ - return rtn; -} diff --git a/TSCP/src/DRV/imx8_drv_gpio.h b/TSCP/src/DRV/imx8_drv_gpio.h index 744dc67..a430781 100644 --- a/TSCP/src/DRV/imx8_drv_gpio.h +++ b/TSCP/src/DRV/imx8_drv_gpio.h @@ -17,51 +17,6 @@ #include #include -#include -#include -#include - - -/*鍙岀郴鑴夊啿閫氫俊淇″彿绫诲瀷瀹氫箟*/ -typedef enum { //鍗犵┖姣-棰戠巼 - ABSynMsgType_0,//0.0-0,ErrorDuty-ErrorFrequency鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佹湭鏀跺埌鏈夋晥鐨凱WM淇″彿(鍖呭惈锛氭棤PWM淇″彿銆佷俊鍙峰弬鏁颁笉绗﹀悎棰勮鐨勮寖鍥) - ABSynMsgType_1,//0.5-200 鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佸彂閫佺鐨凪sgType涓嶆槸瑙勫畾鐨勬灇涓剧被鍨; - ABSynMsgType_2,//0.5-300 鍥哄畾涓洪┍鍔ㄧ▼搴忔娴嬪埌浠ヤ笅鏁呴殰涓殑涓绉嶏細a銆佸弻绯籔WM淇″彿浣胯兘鏍囧織娌℃湁鍛ㄦ湡缈昏浆(main鍑芥暟璺戦); - ABSynMsgType_3,//0.5-400 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_4,//0.5-500 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_5,//0.5-600 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_6,//0.5-700 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_7,//0.5-800 骞冲彴鑷敱纭畾鍏跺惈涔 - ABSynMsgType_MAX = 0x08 -} ABSynMsgType; - -struct SCapInfo{ - uint8_t vaild;//0鏃犳晥 1鏈夋晥 - uint8_t isLocked;//1閿佸畾 - uint32_t capCount; - uint32_t cap1StartTime; //first rising - uint32_t cap1CurrentTime; //first falling - uint32_t cycle; //鍛ㄦ湡 - uint32_t pulseWidth; //鑴夊 - float dutyCycle; //鍗犵┖姣 - float fre; //棰戠巼 -}; - - -#define READ_PHY_REG 0x400U - -typedef struct { - uint8_t phy_id; - uint8_t phy_reg; - uint16_t phy_data; -}phy_access_t; - -static struct ifdrv2{ - struct ifdrv ifd; - phy_access_t req; -}phycmd; - - #define IMX_GPIO0_BASE 0x5D080000 #define IMX_GPIO1_BASE 0x5D090000 #define IMX_GPIO2_BASE 0x5D0A0000 @@ -74,18 +29,8 @@ static struct ifdrv2{ #define IMX_GPIO_DR 0x0U #define IMX_GPIO_GDIR 0x4U #define IMX_GPIO_PSR 0x8U -/*20250707--zhangzhongqi add*/ -#define IMX_GPIO_ICR1 0xCU -#define IMX_GPIO_ICR2 0x10U -#define IMX_GPIO_IMR 0x14U -#define IMX_GPIO_ISR 0x18U -#define IMX_GPIO_EDGE_SEL 0x1CU -#define IMX_GPIO_SIZE 0x20U -#define IMX_GPIO0_IRQ 168 -#define IMX_GPIO1_IRQ 169 - /*timer regisger */ #define IMX_GPT0_BASE 0x5D140000 #define IMX_GPT_SIZE 0x10000 @@ -138,111 +83,3 @@ const struct sigevent *handler_25 (void *not_used, int id); const struct sigevent *handler (void *not_used, int id); void* timer_25( void * arg); void* timer( void * arg); - -/* 鍑芥暟鍔熻兘锛氬垱寤鸿剦鍐叉娴嬩腑鏂嚎绋 - * 杈撳叆鍙傛暟锛歷oid - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭澘绾у垵濮嬪寲涔嬪悗璋冪敤涓娆¤鍑芥暟鍚姩鍔熻兘銆 - */ -int imx8_create_gpio_irq_pthread(void); -/* 鍑芥暟鍔熻兘锛氬彂閫佸弻绯荤‖閫氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛歁sgType锛氱‖閫氫俊鐨勪俊鎭細ABSynMsgType_0..ABSynMsgType_7 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氬掑垏鏂规鐢变簬纭欢闄愬埗锛屽彂閫侀鐜囦笉楂樹簬500Hz,鏈澶т娇鐢ˋBSynMsgType_4銆 - */ -void drvSetABSynMsg(ABSynMsgType MsgType); -/* 鍑芥暟鍔熻兘锛氳幏鍙栧绯诲弻閫氶亾纭氫俊淇″彿銆 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱MsgType[0]:瀵规柟A绯诲彂鍑虹殑纭氫俊淇℃伅:ABSynMsgType_0..ABSynMsgType_15 - * pMsgType[1]锛氬鏂笲绯诲彂鍑虹殑纭氫俊淇℃伅锛欰BSynMsgType_0..ABSynMsgType_15 - * pPulseCnt[0]:鏀跺埌瀵规柟A绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笰绯诲仠姝㈣緭鍑鸿剦鍐 - * pPulseCnt[1]:鏀跺埌瀵规柟B绯诲彂鍑虹殑鑴夊啿璁℃暟,濡傛灉姝ゆ暟涓0锛岃鏄庡鏂笲绯诲仠姝㈣緭鍑鸿剦鍐 - * 杩斿洖鍊 锛氭棤銆 - */ -void drvGetABSynMsg(ABSynMsgType *pMsgType,uint32_t* pPulseCnt); -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉紑鍚 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛氭澘绾у垵濮嬪寲涔嬪悗璋冪敤涓娆¤鍑芥暟鍚姩鍔熻兘銆 - */ -void drvStartABSynSwitch(void); - -/* 鍑芥暟鍔熻兘锛氬弻绯诲績璺充俊鍙峰姛鑳藉叧闂 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛氭棤銆 - * 杩斿洖鍊 锛氭棤銆 - * 浣跨敤娉ㄦ剰锛 - */ -void drvStopABSynSwitch(void); - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧弻绯荤‖閫氫俊鐨勫弽棣堛 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛歱ABSynMsgType *pMsgType, 閲囬泦鍒扮殑type淇℃伅 - * 杩斿洖鍊 锛歎INT8, - * 0x00,姝e父銆 - * 0x81,鍛戒护涓庡弽棣堜笉涓鑷 - * 0x82,鎸囬拡涓虹┖ - * 浣跨敤娉ㄦ剰锛氬彂閫佷笌閲囬泦闂撮殧鑷冲皯涓40ms銆 - */ -uint8_t drvFeedbackkABSynMsg(ABSynMsgType *pMsgType); - -/* 鍑芥暟鍔熻兘锛氳幏鍙栧綋鍓嶇郴闂翠俊鍙疯剦鍐茬殑鏈澶ц宸笺 - * 杈撳叆鍙傛暟锛歶int8_t index - * 杈撳嚭鍙傛暟锛氭棤 - * 杩斿洖鍊 锛歠loat -- 璇樊鐧惧垎姣斻 - */ -float drvGetSyncSigErr(ABSynMsgType msgType); - -/* 鍑芥暟鍔熻兘锛氭煡璇㈠綋鍓嶅悇閫氶亾鏀跺埌鐨勫閮ㄨ剦鍐蹭釜鏁般 - * 杈撳叆鍙傛暟锛氭棤銆 - * 杈撳嚭鍙傛暟锛 uint8_t index -- 閫氶亾绱㈠紩锛0-鑷韩鍙嶉閫氶亾 1-瀵规柟A绯婚氶亾 2-瀵规柟B绯婚氶亾 - * uint32_t* pPulseCnt -- 澶栭儴瀛樺偍鍙橀噺鍦板潃 - * 杩斿洖鍊 锛歶int8_t 0-鎴愬姛 1-澶辫触锛氬叆鍙傞敊璇 - */ -uint8_t drvCheckABSynPulCnt(uint8_t index,uint32_t* pPulseCnt); - - -/************************************************************************/ -/* -* @brief 璇诲彇phy瀵勫瓨鍣ㄧ浉鍏崇淮鎶や俊鎭 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬 -* -* @param[in] -* const char* fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* uint16_t infoLen - 瀵勫瓨鍣ㄤ俊鎭暟缁勯暱搴︼紝姝ら暱搴﹀簲璇ュぇ浜庣瓑浜12 -* @param[out] -* uint16_t * Info - 瀵勫瓨鍣ㄤ俊鎭暟缁勫瓨鍌ㄩ鍦板潃 -* @return rtn 杩斿洖鐘舵 -* - n: n涓哄疄闄呰鍙栫殑瀵勫瓨鍣ㄤ釜鏁 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -*/ -int drvPhyRegInfoUpdate(const char* fecx,uint16_t *Info,uint16_t infoLen); - -/************************************************************************/ -/* -* @brief 閫氳繃PHY瀵勫瓨鍣ㄦ鏌ユ寚瀹氱綉鍗¢摼璺姸鎬 -* -* 璇ュ嚱鏁伴氳繃鍒涘缓濂楁帴瀛楀苟鍙戦丼IOCGDRVSPEC鎺у埗鍛戒护锛岃鍙栨寚瀹氱綉缁滄帴鍙g殑PHY瀵勫瓨鍣ㄧ姸鎬侊紝 -* 鏍规嵁瀵勫瓨鍣ㄥ肩殑鐗瑰畾浣嶅垽鏂摼璺槸鍚︽甯搞 -* -* @param[in] fecx 闇瑕佹鏌ョ殑缃戠粶鎺ュ彛鍚嶇О锛堝"fec0","fec1"锛 -* @return rtn 杩斿洖鐘舵 -* - 0: 閾捐矾鐘舵佹甯革紙PHY瀵勫瓨鍣╞it2涓1锛 -* - -1: 閾捐矾寮傚父鎴栨搷浣滃け璐 -* -* @note 鍑芥暟鎵ц娴佺▼锛 -* 1. 鍒涘缓UDP濂楁帴瀛 -* 2. 閰嶇疆phycmd鎺у埗缁撴瀯浣擄細 -* - ifd_name: 缃戠粶鎺ュ彛鍚嶇О -* - ifd_cmd: 浣跨敤READ_PHY_REG鍛戒护 -* - phy_id: PHY鍦板潃7 -* - phy_reg: 瀵勫瓨鍣ㄥ湴鍧1锛堢姸鎬佸瘎瀛樺櫒锛 -* 3. 閫氳繃devctl鍙戦佹帶鍒跺懡浠 -* 4. 瑙f瀽phy_data瀵勫瓨鍣ㄥ肩殑bit2鍒ゆ柇閾捐矾鐘舵 -*/ -int phytool(const char* fecx); diff --git a/TSCP/src/MSCP/CFM/CFM_Net.c b/TSCP/src/MSCP/CFM/CFM_Net.c index 34cff21..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 璋冪敤鍒濆鍖栧叆鍙e拰鍛ㄦ湡寰幆鍏ュ彛 @@ -189,6 +188,8 @@ static void MSCP_Init(void) PFM_LOG_SET_STOPTIMER(TSCP_DARK_TSCPINIT); /*- 搴旂敤鐗堟湰鍙峰垵濮嬪寲锛屽繀椤诲湪搴旂敤杞欢鍒濆鍖栧墠 */ PFM_CFG_RegisterVerson_Init(); + /*- 鍒濆鍖栬鍙杕ain id锛屽湪搴旂敤鍒濆鍖栦箣鍓*/ + PFM_CFG_MAINID_Init(); /*- 搴旂敤杞欢鍒濆鍖栧唴缃戝畨鍏ㄥ崗璁弬鏁-浠ュ強閰嶇疆鏂囦欢鍙傛暟 */ APP_API_Data_Init(); PFM_LOG_SET_INIT_STAGE(ENUM_INIT_API_DATA); @@ -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); - /*妫鏌ラ厤缃枃浠禝D涓庣‖浠禝D鏄惁涓鑷*/ - PFM_CFG_Check_BoardID(); - - g_PFM_Cfg.OUTNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "OUTNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.OUTNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3); - g_PFM_Cfg.INNET_ID = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID"); - CM_NM_ASSERT(0u != g_PFM_Cfg.INNET_ID,CFG_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_4); - - g_PFM_Cfg.INNET_ID_RM = (CM_UINT16)CM_GetProfileHex(MAIN_ID_INI, "ID", "INNET_ID_RM"); - MSCP_LOG_MSG("Remote Update INNET_ID_RM = 0x%.2x",g_PFM_Cfg.INNET_ID_RM); - (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_PFMCFG_INIT1, 5, \ - sizeof(CM_UINT8),g_PFM_Cfg.CPU_ID, - sizeof(CM_UINT8),g_PFM_Cfg.BOARD_ID, - sizeof(CM_UINT16),g_PFM_Cfg.OUTNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID, - sizeof(CM_UINT16),g_PFM_Cfg.INNET_ID_RM); (void)strcpy(FS_FILE_PATH,g_AppCfgInterface.FS_NAME); (void)strcpy(g_PFM_Cfg.APP_NAME,g_AppCfgInterface.APP_NAME); MSCP_LOG_MSG("FS_NAME:%s\n",FS_FILE_PATH); @@ -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 鍒濆鍖栬鍙杕ainid 蹇呴』鍦ㄥ嚱鏁癙FM_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)) { - /*- 鏃犲鐞 */ + /* 濉叆鍙︿竴涓狢PU鐨凜RC锛屾湰鏈虹殑CRC鍦ㄦ帴鍙e嚱鏁伴噷璁剧疆鐨勬椂鍊欏凡璁$畻锛岀洿鎺ヤ娇鐢 */ + 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); } } /*- 濡傛灉鎵鏈夋枃浠跺悕閮藉瓨鍦紝鍒犻櫎鏈鏃х殑鏃ュ織锛坈rashlog_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 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(NET_20K_SIZE + 25u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堝~鍐欐弧甯э級 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, NET_20K_SIZE + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[NET_20K_SIZE + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(29u + NET_20K_SIZE)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)(25u + NET_20K_SIZE)); /* 浜ょ粰閫氫俊灞傚彂閫 */ - + } } /*- 鍙戦佸熬甯 */ @@ -291,8 +303,17 @@ static void s_2oo2_Send(IN const CM_UINT8 *Data, IN CM_INT32 DataLen, STRU_2OO2_ FrameLen = (CM_UINT32)DataLen - ((FrameIndex - 1u)*NET_20K_SIZE); (void)CM_Memcpy((void*)(p_2oo2_Ctrl->UDP_Cache + 25), (CM_SIZE_T)NET_20K_SIZE, (const void*)(Data + ((FrameIndex - 1u)*NET_20K_SIZE)), (CM_SIZE_T)FrameLen); /* parasoft-suppress MISRA2004-17_1 MISRA2004-17_4 "鎸囬拡杩愮畻鎻愰珮浠g爜鎵ц鏁堢巼" */ CM_LongToChar(21u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*闀垮害*/ - + if(ENUM_CM_TRUE == clacCrcFlag) + { + CM_LongToChar(25u + FrameLen, p_2oo2_Ctrl->UDP_Cache); /*闀垮害*/ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, FrameLen + 25); + CM_LongToChar(crc, &p_2oo2_Ctrl->UDP_Cache[FrameLen + 25]); + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(29u + FrameLen)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } + else + { (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)CM_UNSIGNED_INT_EXP(25u + FrameLen)); /* 浜ょ粰閫氫俊灞傚彂閫 */ + } PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); } else @@ -313,6 +334,7 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg { /*- 鍙橀噺鍒濆鍖 */ CM_UINT32 SysCyc = SFM_2x2_GetSysCount(); /*绯荤粺鍛ㄦ湡鍙*/ + CM_UINT32 crc = 0u; /*- 鍏ュ彛妫鏌 */ CM_ASSERT(((NULL != p_2oo2_Ctrl) && (NULL != p_2oo2_Ctrl->DataSend)), SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1); /* @@ -327,15 +349,17 @@ static void s_2oo2_ARQ_Send(STRU_2OO2_CTRL_T *p_2oo2_Ctrl,IN ENUM_2oo2_MSG_T msg 4瀛楄妭 CRC(鍚暱搴) */ /*- 濉厖鎶ユ枃澶 */ - CM_LongToChar(19u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ + CM_LongToChar(23u, p_2oo2_Ctrl->UDP_Cache); /* 闀垮害锛堟殏鏃跺~鍐欐弧甯э級 */ CM_LongToChar(p_2oo2_Ctrl->LocalID, p_2oo2_Ctrl->UDP_Cache + 4); /* 婧怚D */ CM_LongToChar(p_2oo2_Ctrl->PeerID, p_2oo2_Ctrl->UDP_Cache + 8); /* 鐩殑ID */ CM_LongToChar(SysCyc, p_2oo2_Ctrl->UDP_Cache + 12); /* 鍛ㄦ湡鍙 */ CM_LongToChar(p_2oo2_Ctrl->SN, p_2oo2_Ctrl->UDP_Cache + 16); /* 搴忓垪鍙 */ p_2oo2_Ctrl->UDP_Cache[20] = (CM_UINT8)msgType; /* 绫诲瀷 */ CM_ShortToChar(FrameIndex, p_2oo2_Ctrl->UDP_Cache + 21); /* 閲嶄紶搴忓彿 */ + crc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, 23); + CM_LongToChar(crc, p_2oo2_Ctrl->UDP_Cache + 23); - (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)23); /* 浜ょ粰閫氫俊灞傚彂閫 */ + (void)p_2oo2_Ctrl->DataSend(p_2oo2_Ctrl->UDP_Cache, (CM_INT32)27); /* 浜ょ粰閫氫俊灞傚彂閫 */ } /** * @brief 2oo2鎺ユ敹鏀寔閲嶄紶 @@ -366,7 +390,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E CM_INT32 allLen = 0; /* 鏀跺埌鐨勬姤鏂囨婚暱搴 */ CM_UINT8 type = 0u; /* 鎶ユ枃绫诲瀷 */ CM_UINT16 ARQ_Cut = 0u; /* 璁板綍閲嶄紶璇锋眰娆℃暟 */ - + CM_UINT32 msgCrc = 0u; /* 鎶ユ枃CRC */ + CM_UINT32 calcCrc = 0u; /* 鏈湴璁$畻CRC */ + ENUM_CM_RETURN clacCrcFlag = ENUM_CM_TRUE; /* 鍒ゆ柇鏄惁璁$畻CRC*/ CM_UINT16 ARQ_FrameStart = 0u;/* 閲嶄紶甯у簭鍙 */ CM_UINT8 MineRcvSuccessFlag = CM_FALSE;/*鏈満鎺ユ敹瀹屾垚鏍囧織*/ CM_UINT8 PeerRcvSuccessFlag = CM_FALSE;/*瀵圭郴鎺ユ敹瀹屾垚鏍囧織*/ @@ -385,7 +411,7 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E /*- 浠庨氫俊灞傛帴鏀2oo2鎶ユ枃 */ rxLen = p_2oo2_Ctrl->DataRecv(p_2oo2_Ctrl->UDP_Cache, (CM_UINT32)sizeof(p_2oo2_Ctrl->UDP_Cache)); /*- 鏀跺埌鐨勬姤鏂囬暱搴︽槸鍚﹀ぇ浜23 */ - if (23 <= rxLen) + if (25 <= rxLen) { /*- 瑙f瀽2oo2鎶ユ枃澶 */ @@ -408,11 +434,22 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E msgCyc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 12); msgSN = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + 16); type = p_2oo2_Ctrl->UDP_Cache[20]; + clacCrcFlag = s_isClac2oo2Crc(type); + if(ENUM_CM_TRUE == clacCrcFlag) + { + msgCrc = CM_LongFromChar(p_2oo2_Ctrl->UDP_Cache + msgLen); + calcCrc = CM_Crc32(p_2oo2_Ctrl->UDP_Cache, msgLen); + } + else + { + calcCrc = msgCrc; + } if (((msgLen + 4u) == (CM_UINT32)rxLen) && (SrcID == p_2oo2_Ctrl->PeerID) && (DstID == p_2oo2_Ctrl->LocalID) && (msgCyc == sysCyc) - && (msgSN == p_2oo2_Ctrl->SN)) + && (msgSN == p_2oo2_Ctrl->SN) + && (msgCrc == calcCrc)) { switch(type) { @@ -444,7 +481,14 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E if (CM_FALSE == MineRcvSuccessFlag) { pData = p_2oo2_Ctrl->UDP_Cache + 25; + if(ENUM_CM_TRUE == clacCrcFlag) + { + DataLen = (CM_INT32)msgLen - 25; + } + else + { DataLen = (CM_INT32)msgLen - 21; + } /*- 鍒嗗抚鎺ユ敹2oo2鎶ユ枃 */ ret = SFM_FrameSave(&p_2oo2_Ctrl->FrameCtrl, type, FrameNum, FrameIndex, pData, DataLen, RxData, &allLen, RxSize); /*- 鏄惁鏀堕綈浜嗗畬鏁2oo2鎶ユ枃 */ @@ -477,9 +521,9 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E } else { - MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d\n", + MSCP_LOG_MSG("len=[%d,%d]src=[%d,%d]dst=[%d,%d]cyc=[%d,%d]sn=[%d,%d],type=%d, crc:%d, calcrc:%d\n", rxLen, msgLen, SrcID, p_2oo2_Ctrl->PeerID, DstID, p_2oo2_Ctrl->LocalID, - msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type); + msgCyc, sysCyc, msgSN, p_2oo2_Ctrl->SN,type, msgCrc, calcCrc); (void)CFM_DarkLog_Multiple(DARK_LOG_HEX, TSCP_DARK_2OO2_RCV_ERR,11u, sizeof(CM_INT32),rxLen, sizeof(CM_UINT32),msgLen, @@ -975,7 +1019,7 @@ void SFM_2oo2_Reset_AutoRbootCut(void) RM_Reset_FaultRbootCut(0); CM_RE_ASSERT(cut == 0u, SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_12, TSCP_DARK_ASSERT_2); /*- 鍚屾椂淇敼鏃堕棿闃堝*/ - g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u;; + g_PFM_Cfg.M_AutoClear_Second += g_PFM_Cfg.M_AutoClear_Days*24u*60u*60u; } else { @@ -983,6 +1027,19 @@ void SFM_2oo2_Reset_AutoRbootCut(void) } } } +static ENUM_CM_RETURN s_isClac2oo2Crc(ENUM_2oo2_MSG_T type){ + ENUM_CM_RETURN rt = ENUM_CM_TRUE; + switch (type) + { + case ENUM_2oo2_INPUT_EX: + case ENUM_2oo2_END_EX: + rt = ENUM_CM_FALSE; + break; + default: + break; + } + return rt; +} /** * @brief 鍒濆鍖2鍙栨帶鍒舵暟鎹互鍙婃竻绌2鍙栫紦鍐插尯 diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index 5a1b74f..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 杈撳嚭闃舵锛屽绯绘帴鏀朵富绯昏緭鍑烘暟鎹瓹RC鍚庣殑姣旇緝閫昏緫 + */ +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)) { /*- 妫娴嬪埌瀵圭郴鏄绯伙紝涓斿厑璁窤ID鍒囩郴锛 涓荤郴闄嶄负澶囩郴*/ s_2x2_state_Ctrl.LocalState = ENUM_2x2_SLAVE; - s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartnerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.PartPeerSwitchState = ENUM_2x2_SWITCH_CLOSE; - s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.PartPeerAIDSwitchState = ENUM_2x2_AIDSWITCH_OVER; - s_2x2_state_Ctrl.ctrSwitchFlag = 0u; - s_2x2_state_Ctrl.aidSwitchFlag = 0u; + s_2x2_CloseSwitchFlag(); SFM_LOG_MSG_2X("Transition:2x2:MASTER>>>>>>>SLAVE(AID SWITCH)\n"); } else @@ -939,6 +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 "姝ゅ鏃犻渶妫鏌M_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) { /*- 鎺ユ敹搴旂敤璺熼殢鏁版嵁鐨凜RC鍜岄暱搴*/ MSCP_LOG_MSG("B-A:g_RxAppFollowCrc_len:%lld\n",g_RxAppFollowCrc_len); - g_RxAppFollow_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); + g_RxAppFollowCrc_len = SFM_2oo2_Exchange_Currency(g_RxAppFollowCrc, 0, g_RxAppFollowCrc, sizeof(g_RxAppFollowCrc), ENUM_2oo2_END_EX); } else { @@ -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鐨凜RC */ + 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); + /*- 璁$畻瀵规満璺熼殢鏁版嵁鐨凜RC鍊 */ + 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); + } + /*- 姣旇緝鎴愬姛锛屽~鍏RC鍚庡彂閫 */ + 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); + + /* 涓荤郴鍙孋PU鐨凜RC涓嶄竴鑷 */ + if(partner_crc1 != partner_crc2) + { + /* 澶囩郴鏈満涓庝富绯诲叾涓竴涓狢RC涓鑷 瀹瑰繊*/ + 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); + } + } + /* 涓荤郴鍙孋PU鐨凜RC涓鑷 浣嗕笌澶囩郴鏈満涓嶄竴鑷 姣旇緝澶辫触*/ + else if(mine_crc != partner_crc1) + { + s_2x2_Ctrl.AppFollowCmpFlag = 1u; + MSCP_LOG_MSG("APPFOLLOW CRC cmp is fail 2\n"); + } + /* 涓荤郴鍙孋PU鐨凜RC涓鑷 涓斾笌澶囩郴鏈満涓鑷 姣旇緝鎴愬姛*/ + 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 杈撳嚭闃舵锛屽绯绘帴鏀朵富绯昏緭鍑烘暟鎹瓹RC鍚庣殑姣旇緝閫昏緫 + */ +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; /* 璁板綍瀵圭郴鍙孋RC姣旇緝銆佹湰鏈哄拰瀵圭郴cpu1銆佹湰鏈哄拰瀵圭郴cpu2姣旇緝缁撴灉 */ + CM_UINT32 singleCheckLen = CheckLen / 2u; /* checkbuf璁板綍浜嗕袱涓狢PU鐨勬牎楠屼俊鎭紝闀垮害鐨勪竴鍗婁负鍗曚釜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); + /* 姣旇緝鎺ユ敹鐨勪富绯绘牎楠屽抚涓紝涓荤郴鐨勪袱涓狢PU鐨凜RC锛岃褰曠粨鏋渞et_p1p2 */ + ret_p1p2 = CM_Memcmp((const void*)s_2x2_Ctrl.RxCheckFrame, (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen); + /* 姣旇緝澶囩郴鏈満涓庝富绯绘煇涓涓狢PU鐨凜RC锛岃褰曠粨鏋渞et_m1p1 */ + ret_m1p1 = CM_Memcmp((const void*)CheckBuf, (const void*)&s_2x2_Ctrl.RxCheckFrame[0], (CM_SIZE_T)singleCheckLen); + /* 姣旇緝澶囩郴鏈満涓庝富绯诲彟涓涓狢PU鐨凜RC锛岃褰曠粨鏋渞et_m1p2 */ + ret_m1p2 = CM_Memcmp((const void*)CheckBuf, (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen); + /* 瀵圭郴锛堜富绯伙級鍙戦佺殑鍙孋PU鐨凜RC涓嶄竴鑷 */ + if(0 != ret_p1p2) + { + /* 澶囩郴鏈満涓庝富绯诲叾涓竴涓狢RC涓鑷 瀹瑰繊*/ + 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; + } + } + /* 瀵圭郴锛堜富绯伙級鍙戦佺殑鍙孋PU鐨凜RC涓鑷达紝姣旇緝澶辫触 */ + 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); + } + /* 涓荤郴鍙孋PU鐨凜RC涓鑷 涓斾笌澶囩郴鏈満涓鑷 姣旇緝鎴愬姛*/ + 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; /* 瑙e寘鐢╫ffset*/ + /*- 閫傞厤灞傚崗璁暟鎹窡闅*/ + 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 "姝ゅ鏃犻渶妫鏌M_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; /* 浠c涓句緥锛氬寘鏁*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); } /*- 瑙i攣鎺ユ敹闃熷垪 */ @@ -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); } /*- 瑙i攣鎺ユ敹闃熷垪 */ @@ -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 yt,2022年3月1日,适配车车系统配置数据*/ UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/ - UINT16 StationTrackDistance; /*站台追踪时,列车间隔距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/ UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试 配置中 aa关闭 55打开*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c index 07115f8..0e619ee 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbMessageInfo.c @@ -1,50 +1,50 @@ /************************************************************************ * -* 文件名 : FsfbMessageInfo.h -* 版权说明 : 北京交控科技有限公司 -* 版本号 : 1.0 -* 创建时间 : 2013.09.05 -* 作者 : 王佩佩 -* 功能描述 : FSFB/2协议中帧格式以及相关信息的宏定义 -* 使用注意 : 无 -* 修改记录 : -* 2014.05.14 王佩佩 -* 修改内容: 在ArrordLnkInfoCreateFrame()函数中加了发送BTD帧的ABT帧的分支:case Fsfb_SendBtm_BtdAbt: - 修改理由: 在CI收到BTD帧时,应该向LEU发送其确认帧ABT帧。 -* 2014.05.14 王佩佩 -* 修改内容: 在FsfbAnalysisBtdMsg()函数中在接收到BTD合法后,将发送状态置为 retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; -* 修改理由: 在CI收到BTD帧时,应该向LEU发送其确认帧ABT帧。 -* 2014.05.14 王佩佩 -* 修改内容: 在CreateBtmMsg()函数中在创建SBT帧时:取消对发送状态和接收状态的赋值 -* 修改理由: 在此函数只负责创建BTM模式下的帧,不负责链路状态的维护 -* 2014.05.22 刘巧瑞 -* 修改内容: 在ArrordLnkInfoCreateFrame()中,发送状态为Fsfb_SendBtm_Btc时 -* 若:发送SSR、BTC时则接收状态为:Fsfb_WaitBtm_Btcabt接收BTC的ABT -* 若:只发送BTC时则发送状态为:Fsfb_WaitBtm_AbtOrSse,接收LEU的SSE或BTC的ABT -* 两种情况下发送状态全部设为:停止发送 -* 修改理由: 若:发送SSR、BTC时则接收状态为:原为Fsfb_WaitBtm_Sseabt是错误的 -* 2014.05.22 刘巧瑞 -* 修改内容: 在FsfbAnalysisBtdMsg()函数中,在验证BTD帧合法后,需要将发送标志置为1 -* 为发送ABT帧做准备 -* 修改理由: 之前没有置发送标志 -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateTsdOrSbtMsg()函数中,在发送TSD帧时,接收状态应该置为等待SSE -* 修改理由: 之前为置 -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateSseMsg()函数中,发送SSE帧时接收状态:置为等待SSR,发送状态置为:不发送 -* 修改理由: 之前没有置发送状态,防止频繁发送SSE -* 2014.05.22 刘巧瑞 -* 修改内容: 在CreateSsrMsg()函数中,此SSR若为BTM模式下的,则发送状态为发送BTC,发送状态置为1 -* 修改理由: 之前没有将发送标志置为1 -* 2014.08.05 刘巧瑞 -* 修改内容: 在FsfbAnalysisSseMsg()函数中,增加了CRC校验 -* 修改理由: 之前漏做了一个检查CRC检查 -* 2014.08.05 刘巧瑞 -* 修改内容: 对BTD进行分析时,分析失败的分支修改返回值为0 -* 修改理由: 因为在上层调用函数中,如果分析失败的话不应该将此数据交付给应用。 -* 2014.08.14 刘巧瑞 -* 修改内容: 在AccordInfoCreateFrameData()函数中对帧的应用数据部分的长度进行防护,小于0则返回失败 -* 修改理由: 之前没有对此长度进行防护 +* 锟侥硷拷锟斤拷 锟斤拷 FsfbMessageInfo.h +* 锟斤拷权说锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷锟截科硷拷锟斤拷锟睫癸拷司 +* 锟芥本锟斤拷 锟斤拷 1.0 +* 锟斤拷锟斤拷时锟斤拷 锟斤拷 2013.09.05 +* 锟斤拷锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷 FSFB/2协锟斤拷锟斤拷帧锟斤拷式锟皆硷拷锟斤拷锟斤拷锟较拷暮甓拷锟 +* 使锟斤拷注锟斤拷 锟斤拷 锟斤拷 +* 锟睫改硷拷录 锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷ArrordLnkInfoCreateFrame锟斤拷锟斤拷锟斤拷锟斤拷锟叫硷拷锟剿凤拷锟斤拷BTD帧锟斤拷ABT帧锟侥凤拷支锟斤拷case Fsfb_SendBtm_BtdAbt: + 锟睫革拷锟斤拷锟缴o拷 锟斤拷CI锟秸碉拷BTD帧时锟斤拷应锟斤拷锟斤拷LEU锟斤拷锟斤拷锟斤拷确锟斤拷帧ABT帧锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷FsfbAnalysisBtdMsg锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节斤拷锟秸碉拷BTD锟较凤拷锟襟,斤拷锟斤拷锟斤拷状态锟斤拷为 retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; +* 锟睫革拷锟斤拷锟缴o拷 锟斤拷CI锟秸碉拷BTD帧时锟斤拷应锟斤拷锟斤拷LEU锟斤拷锟斤拷锟斤拷确锟斤拷帧ABT帧锟斤拷 +* 2014.05.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateBtmMsg锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷SBT帧时锟斤拷取锟斤拷锟皆凤拷锟斤拷状态锟酵斤拷锟斤拷状态锟侥革拷值 +* 锟睫革拷锟斤拷锟缴o拷 锟节此猴拷锟斤拷只锟斤拷锟金创斤拷BTM模式锟铰碉拷帧锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷路状态锟斤拷维锟斤拷 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷ArrordLnkInfoCreateFrame()锟叫o拷锟斤拷锟斤拷状态为Fsfb_SendBtm_Btc时 +* 锟斤拷锟斤拷锟斤拷锟斤拷SSR锟斤拷BTC时锟斤拷锟斤拷锟阶刺拷锟紽sfb_WaitBtm_Btcabt锟斤拷锟斤拷BTC锟斤拷ABT +* 锟斤拷锟斤拷只锟斤拷锟斤拷BTC时锟斤拷锟斤拷状态为锟斤拷Fsfb_WaitBtm_AbtOrSse锟斤拷锟斤拷锟斤拷LEU锟斤拷SSE锟斤拷BTC锟斤拷ABT +* 锟斤拷锟斤拷锟斤拷锟斤拷路锟斤拷锟阶刺拷锟斤拷锟轿拷锟酵V癸拷锟斤拷锟 +* 锟睫革拷锟斤拷锟缴o拷 锟斤拷锟斤拷锟斤拷锟斤拷SSR锟斤拷BTC时锟斤拷锟斤拷锟阶刺拷锟皆狥sfb_WaitBtm_Sseabt锟角达拷锟斤拷锟 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷FsfbAnalysisBtdMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷证BTD帧锟较凤拷锟斤拷锟斤拷要锟斤拷锟斤拷锟酵憋拷志锟斤拷为1 +* 为锟斤拷锟斤拷ABT帧锟斤拷准锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟斤拷锟矫凤拷锟酵憋拷志 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷CreateTsdOrSbtMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟节凤拷锟斤拷TSD帧时锟斤拷锟斤拷锟斤拷状态应锟斤拷锟斤拷为锟饺达拷SSE +* 锟睫革拷锟斤拷锟缴o拷 之前为锟斤拷 +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateSseMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷SSE帧时锟斤拷锟斤拷状态锟斤拷锟斤拷为锟饺达拷SSR锟斤拷锟斤拷锟斤拷状态锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟斤拷锟矫凤拷锟斤拷状态锟斤拷锟斤拷止频锟斤拷锟斤拷锟斤拷SSE +* 2014.05.22 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷CreateSsrMsg锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷锟斤拷SSR锟斤拷为BTM模式锟铰的o拷锟斤拷锟斤拷状态为锟斤拷锟斤拷BTC锟斤拷锟斤拷锟斤拷状态锟斤拷为1 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟叫斤拷锟斤拷锟酵憋拷志锟斤拷为1 +* 2014.08.05 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbAnalysisSseMsg()锟斤拷锟斤拷锟叫o拷锟斤拷锟斤拷锟斤拷CRC校锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 之前漏锟斤拷锟斤拷一锟斤拷锟斤拷锟紺RC锟斤拷锟 +* 2014.08.05 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷BTD锟斤拷锟叫凤拷锟斤拷时锟斤拷锟斤拷锟斤拷失锟杰的凤拷支锟睫改凤拷锟斤拷值为0 +* 锟睫革拷锟斤拷锟斤拷: 锟斤拷为锟斤拷锟较诧拷锟斤拷煤锟斤拷锟斤拷校锟斤拷锟斤拷锟斤拷锟斤拷失锟杰的伙拷锟斤拷应锟矫斤拷锟斤拷锟斤拷锟捷斤拷锟斤拷锟斤拷应锟矫★拷 +* 2014.08.14 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷 锟斤拷AccordInfoCreateFrameData锟斤拷锟斤拷锟斤拷锟斤拷锟叫讹拷帧锟斤拷应锟斤拷锟斤拷锟捷诧拷锟街的筹拷锟饺斤拷锟叫凤拷锟斤拷锟斤拷小锟斤拷0锟津返伙拷失锟斤拷 +* 锟睫革拷锟斤拷锟缴o拷 之前没锟叫对此筹拷锟饺斤拷锟叫凤拷锟斤拷 * ************************************************************************/ @@ -53,11 +53,11 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbMessageInfo.h" #include "FsfbLnkNodeMgr.h" /*-------------------------------------------------------------------- - * 报文创建模块内部函数声明 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 Start *--------------------------------------------------------------------*/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode); @@ -70,112 +70,112 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN /* test todo */ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff); /*-------------------------------------------------------------------- - * 报文创建模块内部函数声明 End + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * 报文创建模块外部函数接口 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟解部锟斤拷锟斤拷锟接匡拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** -* 方法名 : AccordInfoCreateFrameData -* 功能描述 : 根据应用数据确定创建SBT或TSD报文 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : AccordInfoCreateFrameData +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷确锟斤拷锟斤拷锟斤拷SBT锟斤拷TSD锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------------------- -* pAppData UINT8* IN 应用数据 -* DataLen UINT816 IN 数据长度 -* OutMsg UINT8* OUT 输出的报文 -* outPutDataLen UINT16* OUT 输出报文长度 -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 链路信息 -* pFsfbStru FSFB_INFO_STRU * INOUT 协议统一结构体 -* 返回值 : UINT8* :1:正常返回 1:错误返回 +* pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 +* DataLen UINT816 IN 锟斤拷锟捷筹拷锟斤拷 +* OutMsg UINT8* OUT 锟斤拷锟斤拷谋锟斤拷锟 +* outPutDataLen UINT16* OUT 锟斤拷锟斤拷锟斤拷某锟斤拷锟 +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷路锟斤拷息 +* pFsfbStru FSFB_INFO_STRU * INOUT 协锟斤拷统一锟结构锟斤拷 +* 锟斤拷锟斤拷值 : UINT8* :1:锟斤拷锟斤拷锟斤拷锟斤拷 1:锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, UINT8 *OutMsg,UINT16* outPutDataLen,Fsfb_Lnk_Info_Node_Stru** pPNode,FSFB_INFO_STRU *pFsfbStru) { UINT8 retVal =0; - UINT16 destDevName = 0;/* 对方设备名称 */ - UINT16 localDevName =0; /* 本方设备名称 */ + UINT16 destDevName = 0;/* 锟皆凤拷锟借备锟斤拷锟斤拷 */ + UINT16 localDevName =0; /* 锟斤拷锟斤拷锟借备锟斤拷锟斤拷 */ UINT8 applycat =0; UINT16 index=0; UINT16 msgLen =0; - UINT8 *RecordArray = pFsfbStru->RecordArray; /* 记录 */ - UINT16 RecordSize = pFsfbStru->RecordArraySize; /* 记录数组大小 */ - Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* 通信节点指针 */ - const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* 应用层队列保存对方类型的位置 */ - const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* 应用层队列保存对方ID的位置 */ - const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* 应用层队列保存对方ID的位置 */ - const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* 应用层队列保存应用数据的位置 */ + UINT8 *RecordArray = pFsfbStru->RecordArray; /* 锟斤拷录 */ + UINT16 RecordSize = pFsfbStru->RecordArraySize; /* 锟斤拷录锟斤拷锟斤拷锟叫 */ + Fsfb_Lnk_Info_Node_Stru *pTmpNode = NULL; /* 通锟脚节碉拷指锟斤拷 */ + const UINT8 DEST_TYPE_APP_QUE_POS = 2; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷锟斤拷锟酵碉拷位锟斤拷 */ + const UINT8 DEST_ID_APP_QUE_POS = DEST_TYPE_APP_QUE_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷ID锟斤拷位锟斤拷 */ + const UINT8 DEST_APP_COMMAND_POS = DEST_ID_APP_QUE_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟皆凤拷ID锟斤拷位锟斤拷 */ + const UINT8 DATA_APP_QUE_POS = DEST_APP_COMMAND_POS+1; /* 应锟矫诧拷锟斤拷斜锟斤拷锟接︼拷锟斤拷锟斤拷莸锟轿伙拷锟 */ ComTypeId2DevName(pFsfbStru->LocalType, pFsfbStru->LocalID, &localDevName); /* * ------------------------------------------------------------ - * 数据长度 | DestType | DestID | CommandType |应用数据 | - * 2字节 | 1字节 | 1字节 | 1字节 | n | + * 锟斤拷锟捷筹拷锟斤拷 | DestType | DestID | CommandType |应锟斤拷锟斤拷锟斤拷 | + * 2锟街斤拷 | 1锟街斤拷 | 1锟街斤拷 | 1锟街斤拷 | n | * ------------------------------------------------------------ */ - /*对方设备的名称 */ + /*锟皆凤拷锟借备锟斤拷锟斤拷锟斤拷 */ ComTypeId2DevName(pAppData[DEST_TYPE_APP_QUE_POS], pAppData[DEST_ID_APP_QUE_POS], &destDevName); msgLen = DataLen-DATA_APP_QUE_POS; -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordSize,"IN:\n"); PrintFiles(RecordArray,RecordSize,"LocalName:"); - PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* 本方设备 */ + PrintFileU16Hex(RecordArray,RecordSize,localDevName); /* 锟斤拷锟斤拷锟借备 */ PrintFiles(RecordArray,RecordSize,"\tDestName:"); - PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* 对方设备 */ + PrintFileU16Hex(RecordArray,RecordSize,destDevName); /* 锟皆凤拷锟借备 */ PrintFiles(RecordArray,RecordSize,"\tDataLen:"); - PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* 纯应用数据长度 */ + PrintFileU16Hex(RecordArray,RecordSize,msgLen); /* 锟斤拷应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ PrintFiles(RecordArray,RecordSize,"\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* 一消息帧开始标识 */ - PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* 本方设备 */ - PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* 对方设备 */ - PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* 纯应用数据长度 */ - PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /*命令类型*/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_APP_FRAME); /* 一锟斤拷息帧锟斤拷始锟斤拷识 */ + PrintRecArray2ByteB(RecordArray, RecordSize, localDevName); /* 锟斤拷锟斤拷锟借备 */ + PrintRecArray2ByteB(RecordArray, RecordSize, destDevName); /* 锟皆凤拷锟借备 */ + PrintRecArray2ByteB(RecordArray, RecordSize, msgLen); /* 锟斤拷应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, pAppData[DEST_APP_COMMAND_POS]); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ #endif if(msgLen < 0) - {/*帧数据长度不合法*/ + {/*帧锟斤拷锟捷筹拷锟饺诧拷锟较凤拷*/ retVal = 0; } else { - /* 命令类型 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ applycat =pAppData[DEST_APP_COMMAND_POS]; if((applycat== APPLCAT_TDM)||(applycat==APPLCAT_BTM)) { - /* 查询对应通信节点是否存在 */ + /* 锟斤拷询锟斤拷应通锟脚节碉拷锟角凤拷锟斤拷锟 */ pTmpNode = FsfbSearchNodeByName(destDevName,applycat,pFsfbStru); - if(NULL == pTmpNode) /* 通信节点不存在 */ + if(NULL == pTmpNode) /* 通锟脚节点不锟斤拷锟斤拷 */ { - /* 根据地址来区的覆盖节点,将节点覆盖 */ + /* 锟斤拷锟捷碉拷址锟斤拷锟斤拷锟侥革拷锟角节点,锟斤拷锟节点覆锟斤拷 */ retVal =FsfbOutputReplaceLnkNode(localDevName,destDevName,applycat,&pTmpNode,pFsfbStru); } - else /* 通信节点存在 */ + else /* 通锟脚节碉拷锟斤拷锟 */ { - /* 继续处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal =1; } if (retVal != 0) { - (*pPNode) = pTmpNode; /* 将通信节点指针保存到输出指针变量里 */ - /* 两个字节的长度 */ + (*pPNode) = pTmpNode; /* 锟斤拷通锟脚节碉拷指锟诫保锟芥到锟斤拷锟街革拷锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ /*ShortToChar(msgLen+2,&OutMsg[index]);*/ index = index+2; - /* 1个字节的设备类型*/ + /* 1锟斤拷锟街节碉拷锟借备锟斤拷锟斤拷*/ OutMsg[index++]=pAppData[DEST_TYPE_APP_QUE_POS]; - /* 1个字节的设备ID */ + /* 1锟斤拷锟街节碉拷锟借备ID */ OutMsg[index++]=pAppData[DEST_ID_APP_QUE_POS]; - /* 创建帧TSD或者SBT帧 */ + /* 锟斤拷锟斤拷帧TSD锟斤拷锟斤拷SBT帧 */ retVal=CreateTsdOrSbtMsg(&pAppData[DATA_APP_QUE_POS],msgLen,applycat,&OutMsg[index],outPutDataLen,pTmpNode); index+=(*outPutDataLen); *outPutDataLen +=4; - /* 两个字节的长度 */ + /* 锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ ShortToChar(index-2,OutMsg); } else @@ -185,27 +185,27 @@ UINT8 AccordInfoCreateFrameData(const UINT8 *pAppData,UINT16 DataLen, } else { - PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* 一消息帧开始标识 */ + PrintRecArrayByte(RecordArray, RecordSize, OUT_FRAME_TYPE_ERR); /* 一锟斤拷息帧锟斤拷始锟斤拷识 */ PrintRecArrayByte(RecordArray, RecordSize, applycat); retVal = 0; } } - /* 消息帧类型 */ + /* 锟斤拷息帧锟斤拷锟斤拷 */ return retVal; } /*********************************************************************** -* 方法名 : ArrordLnkInfoCreateFrame -* 功能描述 : 根据链路中发送节点的状态组建帧格式。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : ArrordLnkInfoCreateFrame +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷路锟叫凤拷锟酵节碉拷锟阶刺拷榻ㄖ★拷锟绞斤拷锟 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pFsfbStruct FSFB_INFO_STRU* IN 统一结构体 -* outMsg UINT8* OUT FSFD消息帧 -* datalen UINT16* OUT 输出消息长度 +* pFsfbStruct FSFB_INFO_STRU* IN 统一锟结构锟斤拷 +* outMsg UINT8* OUT FSFD锟斤拷息帧 +* datalen UINT16* OUT 锟斤拷锟斤拷锟较拷锟斤拷锟 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ /* todo */ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* datalen) @@ -214,7 +214,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* UINT16 index = 0; UINT16 msgLen =0; UINT8 startFlag = 0; - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*定义当前指针;*/ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*锟斤拷锟藉当前指锟斤拷;*/ CurFillLnk=pFsfbStruct->LnkHead; while(CurFillLnk != NULL) @@ -227,11 +227,11 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* { LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; - /* 创建SSR 帧 */ + /* 锟斤拷锟斤拷SSR 帧 */ retVal=CreateSsrMsg(APPLCAT_TDM,CurFillLnk,&outMsg[index]); index+=SSR_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_TDM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -247,7 +247,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* switch(CurFillLnk->FsfbLinInfo.SendLinkStatus) { case Fsfb_SendSSR: - /* 创建SSR 帧 */ + /* 锟斤拷锟斤拷SSR 帧 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSR_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSsrMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); @@ -255,7 +255,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* startFlag = 1; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSR_MSG); @@ -275,7 +275,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } LnkInfoBuildFrame(CurFillLnk->DestDevName,BTC_SIZE+2,&outMsg[index]); index+=4; - /* 组建应用数据 */ + /* 锟介建应锟斤拷锟斤拷锟斤拷 */ BuildBtcBody(pFsfbStruct->TmpDataBuff,&msgLen); retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,BTC_DF_SIZE,FSFB_BTC_MSG,&outMsg[index],CurFillLnk); index +=BTC_SIZE; @@ -290,7 +290,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,ABT_DF_SIZE,FSFB_ABT_MSG,&outMsg[index],CurFillLnk); index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -305,7 +305,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_Sbt; index +=ABT_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_ABT_MSG); @@ -318,25 +318,25 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* retVal = CreateBtmMsg(pFsfbStruct->TmpDataBuff,msgLen,EBT_DF_SIZE,FSFB_EBT_MSG,&outMsg[index],CurFillLnk); index += EBT_SIZE; - CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< 设置接收数据状态为中断*/ - CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< 设置发送数据状态为中断*/ - CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< 清零无收数据周期数*/ - CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< 清零无发数据周期数*/ + CurFillLnk->FsfbLinInfo.RecvLinkStatus = Fsfb_Halt; /*-< 锟斤拷锟矫斤拷锟斤拷锟斤拷锟斤拷状态为锟叫讹拷*/ + CurFillLnk->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; /*-< 锟斤拷锟矫凤拷锟斤拷锟斤拷锟斤拷状态为锟叫讹拷*/ + CurFillLnk->FsfbLinInfo.NoRecvDataCycleNum = 0u; /*-< 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ + CurFillLnk->FsfbLinInfo.NoAppDataCycleNum = 0u; /*-< 锟斤拷锟斤拷锟睫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_EBT_MSG); break; case Fsfb_SendSSE: - /* 创建帧头 */ + /* 锟斤拷锟斤拷帧头 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SSE_SIZE+2,&outMsg[index]); index+=4; retVal = CreateSseMsg(APPLCAT_BTM,CurFillLnk,&outMsg[index]); index +=SSE_SIZE; - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*输出数据类型*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_DATA_TYPE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, CurFillLnk->DestDevName); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, APPLCAT_BTM); PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, FSFB_SSE_MSG); @@ -354,7 +354,7 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* #if 0 if (CurFillLnk->FsfbLinInfo.RecvLinkStatus == Fsfb_SendBtm_Sbt) { - /* 发送SBT帧 */ + /* 锟斤拷锟斤拷SBT帧 */ LnkInfoBuildFrame(CurFillLnk->DestDevName,SBT_SIZE+2,&outMsg[index]); index+=4; retVal = CreateTsdOrSbtMsg(NULL,0,APPLCAT_BTM,&outMsg[index],&msgLen,CurFillLnk); @@ -380,42 +380,42 @@ UINT8 ArrordLnkInfoCreateFrame(FSFB_INFO_STRU* pFsfbStruct,UINT8* outMsg,UINT16* } /*********************************************************************** -* 方法名 : BuildBtcBody -* 功能描述 :组建BTC帧的Body部分。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : BuildBtcBody +* 锟斤拷锟斤拷锟斤拷锟斤拷 :锟介建BTC帧锟斤拷Body锟斤拷锟街★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pOutDataBuff UINT8* OUT 输出数组 -* outDataLen UINT16* OUT 数据长度 -* 返回值 : 无 +* pOutDataBuff UINT8* OUT 锟斤拷锟斤拷锟斤拷锟 +* outDataLen UINT16* OUT 锟斤拷锟捷筹拷锟斤拷 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) { UINT8 index=0; #if 0 - /* 两个字节的Operation Type */ + /* 锟斤拷锟斤拷锟街节碉拷Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Buffer Type */ + /* 2锟斤拷锟街节碉拷Buffer Type */ ShortToChar(0x000A,&pOutDataBuff[index]); index+=2; - /* 2个字节的Sub_bufer Number Start */ + /* 2锟斤拷锟街节碉拷Sub_bufer Number Start */ ShortToChar(0x0001,&pOutDataBuff[index]); index+=2; - /* 2个字节的Number of Sub-buffer to Transmit */ + /* 2锟斤拷锟街节碉拷Number of Sub-buffer to Transmit */ ShortToChar(0xFFFF,&pOutDataBuff[index]); index+=2; #else - /* 两个字节的Operation Type */ + /* 锟斤拷锟斤拷锟街节碉拷Operation Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Buffer Type */ + /* 2锟斤拷锟街节碉拷Buffer Type */ ShortToChar(0x0000,&pOutDataBuff[index]); index+=2; - /* 2个字节的Sub_bufer Number Start */ + /* 2锟斤拷锟街节碉拷Sub_bufer Number Start */ ShortToChar(0,&pOutDataBuff[index]); index+=2; - /* 2个字节的Number of Sub-buffer to Transmit */ + /* 2锟斤拷锟街节碉拷Number of Sub-buffer to Transmit */ ShortToChar(0,&pOutDataBuff[index]); index+=2; #endif @@ -423,37 +423,37 @@ void BuildBtcBody(UINT8* pOutDataBuff,UINT16* outDataLen) } /*********************************************************************** -* 方法名 : LnkInfoBuildFrame -* 功能描述 :组建输出给应用数据的帧头。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : LnkInfoBuildFrame +* 锟斤拷锟斤拷锟斤拷锟斤拷 :锟介建锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷莸锟街⊥凤拷锟 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* devName UINT16 IN 设备名称 -* msgLen UINT16 IN 数据长度 -* pOutDataBuff UINT8* OUT 输出数组 -* 返回值 : 无 +* devName UINT16 IN 锟借备锟斤拷锟斤拷 +* msgLen UINT16 IN 锟斤拷锟捷筹拷锟斤拷 +* pOutDataBuff UINT8* OUT 锟斤拷锟斤拷锟斤拷锟 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ void LnkInfoBuildFrame(UINT16 devName,UINT16 msgLen,UINT8* pOutDataBuff) { - /* 两个字节的帧头 */ + /* 锟斤拷锟斤拷锟街节碉拷帧头 */ ShortToChar(msgLen,pOutDataBuff); - /* 1个字节的设备类型, 1个字节的设备ID */ + /* 1锟斤拷锟街节碉拷锟借备锟斤拷锟斤拷, 1锟斤拷锟街节碉拷锟借备ID */ ComDevName2TypeId(devName,&pOutDataBuff[2],&pOutDataBuff[3]); } /*********************************************************************** - * 方法名 : FsfbAnalysisSseMsg - * 功能描述 : 本函数对收到的SSE消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisSseMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷SSE锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * FSFB_INFO_STRU *pFsfbStruct FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * FSFB_INFO_STRU *pFsfbStruct FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0:锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -466,7 +466,7 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 srcAddr =0; Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSE_SIZE-FSFB_CRC_16_LEN); crc16 = ShortFromCharLE(&pAppData[SSE_SIZE-FSFB_CRC_16_LEN]); if(calcCrc16 == crc16) @@ -474,46 +474,46 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO srcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); desAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat, pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(srcAddr,desAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoBySSE(pAppData,retLnkNodePtr); } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Node Not Exist.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } else { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -524,18 +524,18 @@ UINT8 FsfbAnalysisSseMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * 方法名 : FsfbAnalysisSsrMsg - * 功能描述 : 本函数对收到的SSR消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisSsrMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷SSR锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * pFsfbStruct FSFB_INFO_STRU* FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * pFsfbStruct FSFB_INFO_STRU* FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -546,67 +546,67 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 SrcAddr = 0; UINT16 DesAddr = 0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,SSR_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[SSR_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoBySsr(pAppData,applyCat,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -621,18 +621,18 @@ UINT8 FsfbAnalysisSsrMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO /*********************************************************************** - * 方法名 : FsfbAnalysisAbtMsg - * 功能描述 : 本函数对收到的ABT消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisAbtMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷ABT锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName UINT16* IN 设备名称 + * devName UINT16* IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application catory - * pAppData UINT8* IN 应用数据 - * pFsfbStruct FSFB_INFO_STRU* FSFB统一结构体 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 应锟斤拷锟斤拷锟斤拷 + * pFsfbStruct FSFB_INFO_STRU* FSFB统一锟结构锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -644,13 +644,13 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,ABT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[ABT_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != ABT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -660,60 +660,60 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoByAbt(pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -724,18 +724,18 @@ UINT8 FsfbAnalysisAbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * 方法名 : FsfbAnalysisEbtMsg - * 功能描述 : 本函数对收到的EBT消息进行解帧处理,取得相关信息。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisEbtMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷EBT锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName const UINT16 IN 设备名称 + * devName const UINT16 IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application Catory - * pAppData UINT8* IN 接收到的数据 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * pFsfbStruct FSFB_INFO_STRU * IN FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 锟斤拷锟秸碉拷锟斤拷锟斤拷锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * pFsfbStruct FSFB_INFO_STRU * IN FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { @@ -747,13 +747,13 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO UINT16 DesAddr = 0; UINT16 tmpSds =0; - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,EBT_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[EBT_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != EBT_SDS)||(applyCat != APPLCAT_BTM)) { @@ -763,58 +763,58 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 更新链路基本信息结构体 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息锟结构锟斤拷 */ retVal = FsfbUptLnkNodeInfoByEbt(devName,pAppData,pFsfbStruct,retLnkNodePtr); if( 0 == retVal) { - /* 更新出错,说明不是对应的SSR报文 那么记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷锟铰筹拷锟斤拷锟斤拷说锟斤拷锟斤拷锟角讹拷应锟斤拷SSR锟斤拷锟斤拷 锟斤拷么锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:SSR Msg Err.\n"); #endif } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } } } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ #endif } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Msg Len Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -825,25 +825,25 @@ UINT8 FsfbAnalysisEbtMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO } /*********************************************************************** - * 方法名 : FsfbAnalysisBtdMsg - * 功能描述 : 本函数对收到的BTD消息进行解帧处理,取得相关信息, - 以及将数据按一定的格式输出。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbAnalysisBtdMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷BTD锟斤拷息锟斤拷锟叫斤拷帧锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟较, + 锟皆硷拷锟斤拷锟斤拷锟捷帮拷一锟斤拷锟侥革拷式锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devName const UINT16 IN 设备名称 + * devName const UINT16 IN 锟借备锟斤拷锟斤拷 * applyCat UINT8 IN application Catory - * pAppData UINT8* IN 接收到的数据 - * RecordArray UINT8* INOUT 记录数组 - * RecordArraySize UINT16 IN 记录数组大小 - * pFsfbStruct FSFB_INFO_STRU * IN FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 + * pAppData UINT8* IN 锟斤拷锟秸碉拷锟斤拷锟斤拷锟斤拷 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 + * RecordArraySize UINT16 IN 锟斤拷录锟斤拷锟斤拷锟叫 + * pFsfbStruct FSFB_INFO_STRU * IN FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO_STRU *pFsfbStruct,UINT8 *RecordArray, UINT16 RecordArraySize) { UINT8 retVal = 0; - UINT16 calcCrc16=0; /* 存放计算的CRC值 */ - UINT16 crc16 =0; /* 接收数据中的CRC值 */ + UINT16 calcCrc16=0; /* 锟斤拷偶锟斤拷锟斤拷CRC值 */ + UINT16 crc16 =0; /* 锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷CRC值 */ Fsfb_Lnk_Info_Node_Stru *retLnkNodePtr = NULL; UINT16 SrcAddr = 0; UINT16 DesAddr = 0; @@ -852,17 +852,17 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO ComTypeId2DevName(pFsfbStruct->LocalType,pFsfbStruct->LocalID,&localDevName); - /* CRC 设定 */ + /* CRC 锟借定 */ calcCrc16 = ComComputeMsgCRC16(pAppData,BTD_SIZE-FSFB_CRC_16_LEN); crc16 =ShortFromCharLE(&pAppData[BTD_SIZE-FSFB_CRC_16_LEN]); - /* 验证CRC是否合法 */ + /* 锟斤拷证CRC锟角凤拷戏锟 */ if(crc16 == calcCrc16) { - /* 安全数据大小 */ + /* 锟斤拷全锟斤拷锟捷达拷小 */ tmpSds = ShortFromCharLE(&pAppData[FSFB_DATA_SIZE_POS]); if ((tmpSds != BTD_SDS)||(applyCat != APPLCAT_BTM)) { - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*输入BTD的长度错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LEN_ERR); /*锟斤拷锟斤拷BTD锟侥筹拷锟饺达拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, tmpSds); PrintRecArrayByte(RecordArray, RecordArraySize, applyCat); @@ -872,44 +872,44 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO SrcAddr = ShortFromCharLE(&pAppData[FSFB_SRC_ADD_POS]); DesAddr = ShortFromCharLE(&pAppData[FSFB_DEST_ADD_POS]); retLnkNodePtr = FsfbSearchNodeByName(devName,applyCat,pFsfbStruct); - /* 判断通信节点是否存在 */ + /* 锟叫讹拷通锟脚节碉拷锟角凤拷锟斤拷锟 */ if( NULL != retLnkNodePtr) { - /* 通信节点存在,那么检查报文的信息是否和该通信节点的一致 */ + /* 通锟脚节碉拷锟斤拷冢锟斤拷锟矫达拷锟介报锟侥碉拷锟斤拷息锟角凤拷透锟酵拷沤诘锟斤拷一锟斤拷 */ retVal = FsfbCheckInfoAddr(SrcAddr,DesAddr,retLnkNodePtr); if(0 == retVal) { - /* 不一致 ,记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷一锟斤拷 锟斤拷锟斤拷录 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:NOT Node Msg.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*输入地址错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_ADDR_ERR); /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ #endif } - else /* 检查通过 */ + else /* 锟斤拷锟酵拷锟 */ { - /* 检查BTD信息是否合法 */ + /* 锟斤拷锟紹TD锟斤拷息锟角凤拷戏锟 */ retVal=FsfbCheckBtdMsg(pAppData,retLnkNodePtr,pFsfbStruct); if (retVal == 1) { - /* 将上次接收到报文本地时间更新为当前周期号 */ + /* 锟斤拷锟较次斤拷锟秸碉拷锟斤拷锟侥憋拷锟斤拷时锟斤拷锟斤拷锟轿拷锟角帮拷锟斤拷诤锟 */ retLnkNodePtr->FsfbLinInfo.TimeStmp.LastLocalRecTC =*pFsfbStruct->CycleNum; - /* 无数据周期设定为0 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟借定为0 */ retLnkNodePtr->FsfbLinInfo.NoRecvDataCycleNum = 0; retLnkNodePtr->FsfbLinInfo.SendLinkStatus = Fsfb_SendBtm_BtdAbt; retLnkNodePtr->IsSendFlag = 1; - /* 处理成功 */ + /* 锟斤拷锟斤拷锟缴癸拷 */ retVal =1; } else { - /* 记录 通信节点不存在 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 通锟脚节点不锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:BTD InVaild.\n"); #endif - /* 验证失败 */ + /* 锟斤拷证失锟斤拷 */ retVal =0; } } @@ -918,20 +918,20 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO { retVal = 0; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*无链路*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_NO_LNK); /*锟斤拷锟斤拷路*/ - /* 记录通信节点不合法 */ + /* 锟斤拷录通锟脚节点不锟较凤拷 */ } } - else /* 长度不正 */ + else /* 锟斤拷锟饺诧拷锟斤拷 */ { retVal = 0; - /* 记录 正常返回 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ + /* 锟斤拷录 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Tsd CRC Err.\n"); #endif #ifdef FSFB_RECORD_SIMPLIFY_BIN - PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_CRC_ERR); /*CRC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, calcCrc16); PrintRecArray2ByteB(RecordArray, RecordArraySize, crc16); #endif @@ -939,51 +939,51 @@ UINT8 FsfbAnalysisBtdMsg(UINT16 devName,UINT8 applyCat,UINT8* pAppData,FSFB_INFO return retVal; } /*-------------------------------------------------------------------- - * 报文创建模块外部接口函数 End + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟解部锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * 报文创建模块内部接口函数 Start + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** -* 方法名 : CreateTsdOrSbtMsg -* 功能描述 : 根据应用数据 作成 TSD或SBT报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateTsdOrSbtMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 TSD锟斤拷SBT锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- -* pAppData const UINT8* IN 应用层到Rssp层的输入队列队列节点 -* DataLen UINT8 IN 数组pAppData的数据长度 -* OutTsdOrSbtMsg UINT8* OUT FSFD消息帧 -* outPutDataLen UINT16* OUT 输出报文长度 -* pPNode Lnk_Info_Node_Stru_WL** OUT 更新对应节点的索引,如果不存在返回 -1 +* pAppData const UINT8* IN 应锟矫层到Rssp锟斤拷锟斤拷锟斤拷锟斤拷锟叫讹拷锟叫节碉拷 +* DataLen UINT8 IN 锟斤拷锟斤拷pAppData锟斤拷锟斤拷锟捷筹拷锟斤拷 +* OutTsdOrSbtMsg UINT8* OUT FSFD锟斤拷息帧 +* outPutDataLen UINT16* OUT 锟斤拷锟斤拷锟斤拷某锟斤拷锟 +* pPNode Lnk_Info_Node_Stru_WL** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyCat, UINT8 *OutTsdOrSbtMsg,UINT16* outPutDataLen, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFB消息CRC */ - UINT32 CRCM[2] ={0}; /* CRCM数组 */ + UINT16 CRC16 = 0; /* FSFB锟斤拷息CRC */ + UINT32 CRCM[2] ={0}; /* CRCM锟斤拷锟斤拷 */ pPNode->Applcat = applyCat; switch(applyCat) { case APPLCAT_BTM: *outPutDataLen = SBT_SIZE; - /* 链路状态设置 */ + /* 锟斤拷路状态锟斤拷锟斤拷 */ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_SbtAbt; - /* 设定SBT帧头 */ + /* 锟借定SBT帧头 */ SetFsfbMsgHead(applyCat,FSFB_SBT_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); ret=1; break; case APPLCAT_TDM: *outPutDataLen = TSD_SIZE; - /*链路状态设置*/ + /*锟斤拷路状态锟斤拷锟斤拷*/ pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSse; - /* 设置TSD帧头 */ + /* 锟斤拷锟斤拷TSD帧头 */ SetFsfbMsgHead(applyCat,FSFB_TSD_MSG, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutTsdOrSbtMsg); - /*判断数据长度是否为TSD 的数据长度 */ + /*锟叫讹拷锟斤拷锟捷筹拷锟斤拷锟角凤拷为TSD 锟斤拷锟斤拷锟捷筹拷锟斤拷 */ if(DataLen != TSD_DF_SIZE) { ret =0; @@ -998,19 +998,19 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ret = 0; break; } - /* Body 设定 + /* Body 锟借定 * ------------------------------------------------------------------ - * 计数器 | SDS | 安全数据长度 | CRCM_1 | CRCM_2 | 应用数据 | - * 4字节 | 2字节 | 2字节 | 4字节 | 4字节 | 36字节 | + * 锟斤拷锟斤拷锟斤拷 | SDS | 锟斤拷全锟斤拷锟捷筹拷锟斤拷 | CRCM_1 | CRCM_2 | 应锟斤拷锟斤拷锟斤拷 | + * 4锟街斤拷 | 2锟街斤拷 | 2锟街斤拷 | 4锟街斤拷 | 4锟街斤拷 | 36锟街斤拷 | * ------------------------------------------------------------------ */ - /* 应用数据 */ - /* 从pAppData开始拷贝 MsgLen个应用数据到 报文里 */ + /* 应锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷pAppData锟斤拷始锟斤拷锟斤拷 MsgLen锟斤拷应锟斤拷锟斤拷锟捷碉拷 锟斤拷锟斤拷锟斤拷 */ if(ret != 0) { if(DataLen ==0) { - /* 组建SBT帧的body */ + /* 锟介建SBT帧锟斤拷body */ DataLen = SBT_DF_SIZE; BuildSbtFrameDf(pPNode,&OutTsdOrSbtMsg[FSFB_DATA_POS]); } @@ -1019,7 +1019,7 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC ComMemCopy(pAppData, & OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen); } - /* 计算CRCM值,(肯定返回1 ) */ + /* 锟斤拷锟斤拷CRCM值,(锟较讹拷锟斤拷锟斤拷1 ) */ ret = ComCalcCRCM(&OutTsdOrSbtMsg[FSFB_DATA_POS],DataLen, @@ -1027,21 +1027,21 @@ static UINT8 CreateTsdOrSbtMsg(const UINT8 *pAppData,UINT16 DataLen,UINT8 applyC pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 计数器 设定 4字节 */ + /* 锟斤拷锟斤拷锟斤拷 锟借定 4锟街斤拷 */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutTsdOrSbtMsg[FSFB_TC_POS]); - /* 安全数据长度 应用数据+ 2个CRCM长度 2字节 */ + /* 锟斤拷全锟斤拷锟捷筹拷锟斤拷 应锟斤拷锟斤拷锟斤拷+ 2锟斤拷CRCM锟斤拷锟斤拷 2锟街斤拷 */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutTsdOrSbtMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 设定 4 字节 */ + /* CRCM[0] CRCM[1] 锟借定 4 锟街斤拷 */ LongToCharLE(CRCM[0],&OutTsdOrSbtMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutTsdOrSbtMsg[FSFB_CRCM_2_POS]); - /* 16位 CRC 设定 2 字节 */ + /* 16位 CRC 锟借定 2 锟街斤拷 */ CRC16 = ComComputeMsgCRC16(OutTsdOrSbtMsg,(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)); ShortToCharLE(CRC16,&OutTsdOrSbtMsg[(UINT16)((*outPutDataLen)-FSFB_CRC_16_LEN)]); - /* 无发送应用数据置为 0 */ + /* 锟睫凤拷锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷为 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; ret = 1; } @@ -1055,87 +1055,87 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) UINT16 index =0; UINT32 crcValue =0; - /* 将数组初始化为 0 */ + /* 锟斤拷锟斤拷锟斤拷锟绞硷拷锟轿 0 */ ComMemSet(pMsgDataBuff,SBT_DF_SIZE,0); - /* 2个字节的源地址 */ + /* 2锟斤拷锟街节碉拷源锟斤拷址 */ ShortToCharLE(pNode->FsfbLinInfo.sendSrcAdd,pMsgDataBuff+index); index +=2; - /* 1个字节的 record Flag 1代表无记录 0代表有记录 */ + /* 1锟斤拷锟街节碉拷 record Flag 1锟斤拷锟斤拷锟睫硷拷录 0锟斤拷锟斤拷锟叫硷拷录 */ pMsgDataBuff[index]=0x01; index+=1; - /* 1个字节的预留 */ + /* 1锟斤拷锟街节碉拷预锟斤拷 */ index+=1; - /* 8个字节的Channel1&2 SID */ + /* 8锟斤拷锟街节碉拷Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDr[1],pMsgDataBuff+index); index +=4; - /* 8个字节的Channel1&2 SINIT */ + /* 8锟斤拷锟街节碉拷Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITr[1],pMsgDataBuff+index); index +=4; - /* 1个字节的最大生命周期 */ + /* 1锟斤拷锟街节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1个字节的Delta Time Counter max */ + /* 1锟斤拷锟街节碉拷Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2个字节预留 */ + /* 2锟斤拷锟街斤拷预锟斤拷 */ index +=2; - /* 8个字节的Channel1&2 DATAVER */ + /* 8锟斤拷锟街节碉拷Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 28个字节的预留 */ + /* 28锟斤拷锟街节碉拷预锟斤拷 */ index +=28; - /* 1个字节的 NUM_DATAVER */ + /* 1锟斤拷锟街节碉拷 NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3个字节预留 */ + /* 3锟斤拷锟街斤拷预锟斤拷 */ index +=3; - /* 1个字节的WorldFip Periodic variable Address */ + /* 1锟斤拷锟街节碉拷WorldFip Periodic variable Address */ pMsgDataBuff[index++]=0x01; - /* 1个字节 Segment */ + /* 1锟斤拷锟街斤拷 Segment */ index+=1; - /* 2个字节 FSFB2源地址 */ + /* 2锟斤拷锟街斤拷 FSFB2源锟斤拷址 */ ShortToCharLE(pNode->FsfbLinInfo.sendDestAdd,pMsgDataBuff+index); index +=2; - /* 8个字节的Channel1&2 SID */ + /* 8锟斤拷锟街节碉拷Channel1&2 SID */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SIDe[1],pMsgDataBuff+index); index +=4; - /* 8个字节的Channel1&2 SINIT */ + /* 8锟斤拷锟街节碉拷Channel1&2 SINIT */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.SINITe[1],pMsgDataBuff+index); index +=4; - /* 1个字节预留 */ + /* 1锟斤拷锟街斤拷预锟斤拷 */ pMsgDataBuff[index++]=MAX_BTM_LOST; - /* 1个字节的Delta Time Counter max */ + /* 1锟斤拷锟街节碉拷Delta Time Counter max */ pMsgDataBuff[index++]=Delta_Time_Counter_max; - /* 2个字节预留 */ + /* 2锟斤拷锟街斤拷预锟斤拷 */ index +=2; - /* 8个字节的Channel1&2 DATAVER */ + /* 8锟斤拷锟街节碉拷Channel1&2 DATAVER */ LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[0],pMsgDataBuff+index); index +=4; LongToCharLE(pNode->FsfbLinInfo.LocalNode.DATAVER[1],pMsgDataBuff+index); index +=4; - /* 1个字节的 NUM_DATAVER */ + /* 1锟斤拷锟街节碉拷 NUM_DATAVER */ pMsgDataBuff[index++]=pNode->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* 3个字节预留 */ + /* 3锟斤拷锟街斤拷预锟斤拷 */ index +=3; - /* 8个字节的SYSCKW + /* 8锟斤拷锟街节碉拷SYSCKW D channel 1&2 */ LongToCharLE(COM_SYS_CHK_WD_1,pMsgDataBuff+index); index +=4; LongToCharLE(COM_SYS_CHK_WD_2,pMsgDataBuff+index); index +=4; - /* 4个字节的CRC_1 */ + /* 4锟斤拷锟街节碉拷CRC_1 */ crcValue =Crc32(pMsgDataBuff,index); LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; - /* 4个字节的CRC_2 */ + /* 4锟斤拷锟街节碉拷CRC_2 */ LongToCharLE(crcValue^0xFFFFFFFF,pMsgDataBuff+index); index +=4; if (index != SBT_DF_SIZE) @@ -1148,46 +1148,46 @@ void BuildSbtFrameDf(Fsfb_Lnk_Info_Node_Stru* pNode,UINT8* pMsgDataBuff) } /*********************************************************************** -* 方法名 : CreateSseMsg -* 功能描述 : 根据应用数据 作成SSE报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateSseMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷SSE锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 -* outSseMsg UINT8* OUT FSFD消息帧 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 +* outSseMsg UINT8* OUT FSFD锟斤拷息帧 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSseMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqEng=0;/* 临时保存SEQENQ */ - /* 通信状态信息设置 */ - /* 设置Application cat */ + UINT32 tmpSeqEng=0;/* 锟斤拷时锟斤拷锟斤拷SEQENQ */ + /* 通锟斤拷状态锟斤拷息锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷Application锟斤拷cat */ pLnkNodeInfo->Applcat = applyCate; - /* 设定接收节点为等待SSR*/ + /* 锟借定锟斤拷锟秸节碉拷为锟饺达拷SSR*/ pLnkNodeInfo->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitSSR; pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; - /* 通信节点未接受数据设置为0 */ + /* 通锟脚节碉拷未锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为0 */ pLnkNodeInfo->FsfbLinInfo.NoRecvDataCycleNum =0; pLnkNodeInfo->IsSendFlag=0; - /* SSE 请求时间周期和对应的时间设置 */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* 对应计数器值,用来验证SSR报文里的计数器值 */ - pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* 对应的时间戳,收到SSR时计算初始SINIT值 */ + /* SSE 锟斤拷锟斤拷时锟斤拷锟斤拷锟节和讹拷应锟斤拷时锟斤拷锟斤拷锟斤拷 */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC = pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC;/* 锟斤拷应锟斤拷锟斤拷锟斤拷值锟斤拷锟斤拷锟斤拷锟斤拷证SSR锟斤拷锟斤拷锟斤拷募锟斤拷锟斤拷锟街 */ + pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[0] = pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[0]; /* 锟斤拷应锟斤拷时锟斤拷锟斤拷锟斤拷盏锟絊SR时锟斤拷锟斤拷锟绞糞INIT值 */ pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]=pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; - /* 帧头信息设定 */ + /* 帧头锟斤拷息锟借定 */ SetFsfbMsgHead(applyCate,FSFB_SSE_MSG,pLnkNodeInfo->FsfbLinInfo.sendSrcAdd,pLnkNodeInfo->FsfbLinInfo.sendDestAdd,outSseMsg); - /* Boby 设定 */ - /*计数器 4*/ + /* Boby 锟借定 */ + /*锟斤拷锟斤拷锟斤拷 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTC,&outSseMsg[FSFB_TC_POS]); /* SEQENQ_1 4*/ @@ -1198,7 +1198,7 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, tmpSeqEng = pLnkNodeInfo->FsfbLinInfo.LocalNode.SIDr[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.SseTn[1]; LongToCharLE(tmpSeqEng,&outSseMsg[FSFB_SSE_ENQ_2_POS]); - /* CRC 设定 */ + /* CRC 锟借定 */ crc16 = ComComputeMsgCRC16(outSseMsg,SSE_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSseMsg[SSE_SIZE-FSFB_CRC_16_LEN]); @@ -1208,25 +1208,25 @@ static UINT8 CreateSseMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* 方法名 : CreateSsrMsg -* 功能描述 : 根据应用数据 作成 SSR报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateSsrMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷应锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 SSR锟斤拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 -* OutSsrMsg UINT8* OUT FSFD消息帧 -* 返回值 : UINT8 1:正常返回 0:错误返回 +* pLnkNodeInfo Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 +* OutSsrMsg UINT8* OUT FSFD锟斤拷息帧 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo,UINT8* outSsrMsg) { UINT8 ret =0; UINT16 crc16 =0; - UINT32 tmpSeqIni=0;/* 临时保存SEQIni */ - /* 通信状态信息设置 */ - /* 设置Application cat */ + UINT32 tmpSeqIni=0;/* 锟斤拷时锟斤拷锟斤拷SEQIni */ + /* 通锟斤拷状态锟斤拷息锟斤拷锟斤拷 */ + /* 锟斤拷锟斤拷Application锟斤拷cat */ pLnkNodeInfo->Applcat = applyCate; - /* 设定接收节点为等待SSR*/ + /* 锟借定锟斤拷锟秸节碉拷为锟饺达拷SSR*/ if (applyCate == APPLCAT_TDM) { pLnkNodeInfo->FsfbLinInfo.SendLinkStatus = Fsfb_Halt; @@ -1238,14 +1238,14 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, pLnkNodeInfo->IsSendFlag=1; } - /* 帧头信息设定 */ + /* 帧头锟斤拷息锟借定 */ SetFsfbMsgHead(applyCate,FSFB_SSR_MSG,pLnkNodeInfo->FsfbLinInfo.rcvDestAdd,pLnkNodeInfo->FsfbLinInfo.rcvSrcAdd,outSsrMsg); - /* Boby 设定 */ - /*计数器 replier 4*/ + /* Boby 锟借定 */ + /*锟斤拷锟斤拷锟斤拷 replier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.TC,&outSsrMsg[FSFB_TC_POS]); - /*计数器 enqurier 4*/ + /*锟斤拷锟斤拷锟斤拷 enqurier 4*/ LongToCharLE(pLnkNodeInfo->FsfbLinInfo.TimeStmp.RecvSseTCe,&outSsrMsg[FSFB_SSR_TCENQ_POS]); /* SEQENQ_1 4*/ @@ -1258,10 +1258,10 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, ^pLnkNodeInfo->FsfbLinInfo.LocalNode.DATAVER[1]^pLnkNodeInfo->FsfbLinInfo.TimeStmp.NowTn[1]; LongToCharLE(tmpSeqIni,&outSsrMsg[FSFB_SSR_ENQ_2_POS]); - /* NUM_DATAVER 设定 两个信道一致 */ + /* NUM_DATAVER 锟借定 锟斤拷锟斤拷锟脚碉拷一锟斤拷 */ outSsrMsg[FSFB_SSR_NUM_POS]=pLnkNodeInfo->FsfbLinInfo.LocalNode.NumDataVer[0]; - /* CRC 设定 */ + /* CRC 锟借定 */ crc16 = ComComputeMsgCRC16(outSsrMsg,SSR_SIZE-FSFB_CRC_16_LEN); ShortToCharLE(crc16,&outSsrMsg[SSR_SIZE-FSFB_CRC_16_LEN]); @@ -1271,45 +1271,45 @@ static UINT8 CreateSsrMsg(UINT8 applyCate,Fsfb_Lnk_Info_Node_Stru *pLnkNodeInfo, } /*********************************************************************** -* 方法名 : CreateBtmMsg -* 功能描述 : 根据BTM的SBT格式作成报文。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : CreateBtmMsg +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷BTM锟斤拷SBT锟斤拷式锟斤拷锟缴憋拷锟侥★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * ------------------------------------------------------------------------------- * applyCate UINT8 IN application cate -* DataLen UINT16 IN 数据长度 -* userDataLen UINT16 IN 数据部分大小 -* OutBtmMsg UINT8* OUT FSFD消息帧 -* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 更新对应节点的索引,如果不存在返回 -1 +* DataLen UINT16 IN 锟斤拷锟捷筹拷锟斤拷 +* userDataLen UINT16 IN 锟斤拷锟捷诧拷锟街达拷小 +* OutBtmMsg UINT8* OUT FSFD锟斤拷息帧 +* pPNode Fsfb_Lnk_Info_Node_Stru** OUT 锟斤拷锟铰讹拷应锟节碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟节凤拷锟斤拷 -1 -* 关于节点问题需要进行考虑(Todo) -* 返回值 : UINT8 1:正常返回 0:错误返回 +* 锟斤拷锟节节碉拷锟斤拷锟斤拷锟斤拷要锟斤拷锟叫匡拷锟角o拷Todo锟斤拷 +* 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLen,UINT8 messType, UINT8 *OutBtmMsg, Fsfb_Lnk_Info_Node_Stru* pPNode) { UINT8 ret = 0; - UINT16 CRC16 = 0; /* FSFB消息CRC */ - UINT32 CRCM[2] ={0}; /* CRCM数组 */ /* 应用数据长度 */ + UINT16 CRC16 = 0; /* FSFB锟斤拷息CRC */ + UINT32 CRCM[2] ={0}; /* CRCM锟斤拷锟斤拷 */ /* 应锟斤拷锟斤拷锟捷筹拷锟斤拷 */ if (pPNode != NULL) { - /* 帧头设定 */ + /* 帧头锟借定 */ SetFsfbMsgHead(APPLCAT_BTM,messType, pPNode->FsfbLinInfo.sendSrcAdd,pPNode->FsfbLinInfo.sendDestAdd,OutBtmMsg); - /* Body 设定 + /* Body 锟借定 * ------------------------------------------------------------------ - * 计数器 | SDS | 安全数据长度 | CRCM_1 | CRCM_2 | 应用数据 | - * 4字节 | 2字节 | 2字节 | 4字节 | 4字节 | 36字节 | + * 锟斤拷锟斤拷锟斤拷 | SDS | 锟斤拷全锟斤拷锟捷筹拷锟斤拷 | CRCM_1 | CRCM_2 | 应锟斤拷锟斤拷锟斤拷 | + * 4锟街斤拷 | 2锟街斤拷 | 2锟街斤拷 | 4锟街斤拷 | 4锟街斤拷 | 36锟街斤拷 | * ------------------------------------------------------------------ */ - /* 应用数据 */ - /* 从pAppData开始拷贝 MsgLen个应用数据到 报文里 */ + /* 应锟斤拷锟斤拷锟斤拷 */ + /* 锟斤拷pAppData锟斤拷始锟斤拷锟斤拷 MsgLen锟斤拷应锟斤拷锟斤拷锟捷碉拷 锟斤拷锟斤拷锟斤拷 */ if(userDataLen == DataLen) { ComMemCopy(pAppData, &OutBtmMsg[FSFB_DATA_POS],DataLen); - /* 计算CRCM值,(肯定返回1 ) */ + /* 锟斤拷锟斤拷CRCM值,(锟较讹拷锟斤拷锟斤拷1 ) */ if((messType == FSFB_BTC_MSG)||(messType == FSFB_EBT_MSG)) { ComAddTimeStamp(&pPNode->FsfbLinInfo.TimeStmp); @@ -1320,21 +1320,21 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe pPNode->FsfbLinInfo.TimeStmp.NowTn, CRCM); - /* 计数器 设定 4字节 */ + /* 锟斤拷锟斤拷锟斤拷 锟借定 4锟街斤拷 */ LongToCharLE(pPNode->FsfbLinInfo.TimeStmp.TC, &OutBtmMsg[FSFB_TC_POS]); - /* 安全数据长度 应用数据+ 2个CRCM长度 2字节 */ + /* 锟斤拷全锟斤拷锟捷筹拷锟斤拷 应锟斤拷锟斤拷锟斤拷+ 2锟斤拷CRCM锟斤拷锟斤拷 2锟街斤拷 */ ShortToCharLE((UINT16)(DataLen+2*FSFB_CRCM_LEN), &OutBtmMsg[FSFB_DATA_SIZE_POS]); - /* CRCM[0] CRCM[1] 设定 4 字节 */ + /* CRCM[0] CRCM[1] 锟借定 4 锟街斤拷 */ LongToCharLE(CRCM[0],&OutBtmMsg[FSFB_CRCM_1_POS]); LongToCharLE(CRCM[1],&OutBtmMsg[FSFB_CRCM_2_POS]); - /* 16位 CRC 设定 2 字节 */ + /* 16位 CRC 锟借定 2 锟街斤拷 */ CRC16 = ComComputeMsgCRC16(OutBtmMsg,(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)); ShortToCharLE(CRC16,&OutBtmMsg[(UINT16)(userDataLen+FSFB_BTM_HEAD_LEN)]); - /* 无发送应用数据置为 0 */ + /* 锟睫凤拷锟斤拷应锟斤拷锟斤拷锟斤拷锟斤拷为 0 */ pPNode->FsfbLinInfo.NoAppDataCycleNum = 0; pPNode->IsSendFlag=0; /*pPNode->FsfbLinInfo.RecvLinkStatus = Fsfb_WaitBtm_AbtOrSse;*/ @@ -1343,7 +1343,7 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe } else { - /* 增加错误记录码 */ + /* 锟斤拷锟接达拷锟斤拷锟铰硷拷锟 */ ret = 0; } } @@ -1351,61 +1351,61 @@ static UINT8 CreateBtmMsg(const UINT8 *pAppData,UINT16 DataLen,UINT16 userDataLe return ret; } /*********************************************************************** -* 方法名 : SetFsfbMsgHead -* 功能描述 : Fsfb消息帧头作成。 -* 输入参数 : -* 参数名 类型 输入输出 描述 +* 锟斤拷锟斤拷锟斤拷 : SetFsfbMsgHead +* 锟斤拷锟斤拷锟斤拷锟斤拷 : Fsfb锟斤拷息帧头锟斤拷锟缴★拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- -* applCat UINT8 IN 应用策略 -* MsgType UINT8 IN 消息类型 -* SrcAddr UINT16 IN 源地址 -* DestAddr UINT16 IN 目标地址 -* OutFsfbMsg UINT8* OUT Fsfb消息帧 -* 返回值 : 无 +* applCat UINT8 IN 应锟矫诧拷锟斤拷 +* MsgType UINT8 IN 锟斤拷息锟斤拷锟斤拷 +* SrcAddr UINT16 IN 源锟斤拷址 +* DestAddr UINT16 IN 目锟斤拷锟街 +* OutFsfbMsg UINT8* OUT Fsfb锟斤拷息帧 +* 锟斤拷锟斤拷值 : 锟斤拷 ***********************************************************************/ static void SetFsfbMsgHead(UINT8 applCat,UINT8 MsgType, UINT16 SrcAddr, UINT16 DestAddr, UINT8 *OutFsfbMsg) { OutFsfbMsg[FSFB_APP_CTGRY_POS] = applCat; /* signaling variables */ - OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* 消息类型设定 */ - ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* 设定源地址,LITTLE endian */ - ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* 设定源地址,LITTLE endian */ + OutFsfbMsg[FSFB_MSG_TYPE_POS] = MsgType; /* 锟斤拷息锟斤拷锟斤拷锟借定 */ + ShortToCharLE(SrcAddr,&OutFsfbMsg[FSFB_SRC_ADD_POS]); /* 锟借定源锟斤拷址锟斤拷LITTLE endian */ + ShortToCharLE(DestAddr,&OutFsfbMsg[FSFB_DEST_ADD_POS]); /* 锟借定源锟斤拷址锟斤拷LITTLE endian */ } /*********************************************************************** - * 方法名 : FsfbCheckBtdMsg - * 功能描述 : 验证BTD报文的正确性。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbCheckBtdMsg + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷证BTD锟斤拷锟侥碉拷锟斤拷确锟皆★拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pBsdMsg const UINT8 * IN Bsd报文 - * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB链路信息 - * pFsfbStruct FSFB_INFO_STRU * INOUT 协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pBsdMsg const UINT8 * IN Bsd锟斤拷锟斤拷 + * pLnkNode Fsfb_Lnk_Info_Node_Stru INOUT FSFB锟斤拷路锟斤拷息 + * pFsfbStruct FSFB_INFO_STRU * INOUT 协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkNode, FSFB_INFO_STRU *pFsfbStruct) { - UINT8 retVal = 1; /* 初始化为正常返回 */ + UINT8 retVal = 1; /* 锟斤拷始锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷 */ UINT8 tmpret = 0; - INT32 DelayTCr = 0; /* 丢包数 */ - INT32 Tout = 0; /* 距离上次收到报文的时间差 */ - UINT32 TCr = 0; /* 报文时钟 */ - UINT32 SidXorTn[2] = {0}; /* SID XOR TN :BSD报文计算出来 */ - ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* 时间戳结构体 */ - const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* 节点基本信息结构体 */ + INT32 DelayTCr = 0; /* 锟斤拷锟斤拷锟斤拷 */ + INT32 Tout = 0; /* 锟斤拷锟斤拷锟较达拷锟秸碉拷锟斤拷锟侥碉拷时锟斤拷锟 */ + UINT32 TCr = 0; /* 锟斤拷锟斤拷时锟斤拷 */ + UINT32 SidXorTn[2] = {0}; /* SID XOR TN 锟斤拷BSD锟斤拷锟侥硷拷锟斤拷锟斤拷锟 */ + ComTimeStampStru *pTmStmp = &pLnkNode->FsfbLinInfo.TimeStmp; /* 时锟斤拷锟斤拷峁癸拷锟 */ + const FsfbNodeParamInfoStru *pNodeParam = &pLnkNode->FsfbLinInfo.LocalNode; /* 锟节碉拷锟斤拷锟斤拷锟较拷峁癸拷锟 */ UINT8 *RecordArray = pFsfbStruct->RecordArray; UINT16 RecordArraySize = pFsfbStruct->RecordArraySize; - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*输入BTD收状态*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_STATUS); /*锟斤拷锟斤拷BTD锟斤拷状态*/ PrintRecArrayByte(RecordArray, RecordArraySize, pLnkNode->FsfbLinInfo.RecvLinkStatus); - /* 通信节点接受状态为 接收数据状态 */ + /* 通锟脚节碉拷锟斤拷锟阶刺 锟斤拷锟斤拷锟斤拷锟斤拷状态 */ if( Fsfb_RecvData == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - /* 报文时钟 */ + /* 锟斤拷锟斤拷时锟斤拷 */ TCr = LongFromCharLE(&pBtdMsg[FSFB_TC_POS]); /* - * 如果和上次报文的时钟一致(即同一周期内同时受到BSD报文和SSR报文),则丢弃该报文 - * 否则 检查丢包数是否超时 + * 锟斤拷锟斤拷锟斤拷洗伪锟斤拷牡锟绞憋拷锟揭伙拷锟(锟斤拷同一锟斤拷锟斤拷锟斤拷同时锟杰碉拷BSD锟斤拷锟侥猴拷SSR锟斤拷锟斤拷)锟斤拷锟斤拷锟斤拷锟矫憋拷锟斤拷 + * 锟斤拷锟斤拷 锟斤拷槎拷锟斤拷锟斤拷欠锟绞 */ if( TCr != pTmStmp->NowRecvTCr) { @@ -1418,7 +1418,7 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN if(DelayTCr >= 0) { - /* 报文超时 检查 */ + /* 锟斤拷锟侥筹拷时 锟斤拷锟 */ if(pTmStmp->LastLocalRecTC != *pFsfbStruct->CycleNum) { Tout = ComCheckTimeStamp(*pFsfbStruct->CycleNum, @@ -1426,29 +1426,29 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { - /* 说明本周期已经收到一帧旧数据,不需要在做超时检查 */ + /* 说锟斤拷锟斤拷锟斤拷锟斤拷锟窖撅拷锟秸碉拷一帧锟斤拷锟斤拷锟捷o拷锟斤拷锟斤拷要锟斤拷锟斤拷锟斤拷时锟斤拷锟 */ Tout = 0; } - if (Tout >= 0) /* 合法时间内收到报文 */ + if (Tout >= 0) /* 锟较凤拷时锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 */ { - /* 从RSD报文里取得SID XOR TN :CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ + /* 锟斤拷RSD锟斤拷锟斤拷锟斤拷取锟斤拷SID XOR TN 锟斤拷CRCM[chan] ^ CRC[chan] ^ SYS_CHK_WD[chan] */ tmpret = ComGetSidXorTn(pBtdMsg, SidXorTn); - /* 检验CRCM的有效性 */ + /* 锟斤拷锟斤拷CRCM锟斤拷锟斤拷效锟斤拷 */ retVal = ComCheckCRCM(SidXorTn, pTmStmp->NowSINIT_ADD_SID_XOR_Tn, DelayTCr, pNodeParam->TSD_POST_RXDADA_K); - if ((1 == retVal) && (tmpret == 1)) /* 检查成功 则更新相应信息 */ + if ((1 == retVal) && (tmpret == 1)) /* 锟斤拷锟缴癸拷 锟斤拷锟斤拷锟斤拷锟接︼拷锟较 */ { - /* 更新时间戳结构体 : pTmStmpStru非空,返回值肯定为1 */ + /* 锟斤拷锟斤拷时锟斤拷锟斤拷峁癸拷锟 : pTmStmpStru锟角空o拷锟斤拷锟斤拷值锟较讹拷为1 */ retVal = ComUpdtTmStmpStru(SidXorTn, TCr, DelayTCr, pNodeParam->PREC_SINIT_K, pTmStmp); - retVal = 1; /* 正常处理 */ + retVal = 1; /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } else { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray, RecordArraySize, "W:CRCM Error.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*输入BTD的SVC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_SVC_ERR); /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[0]); /*sidXorTn[0]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, SidXorTn[1]); /*sidXorTn[1]*/ @@ -1456,20 +1456,20 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowSINIT_ADD_SID_XOR_Tn[1]); /*NowSINIT_ADD_SID_XOR_Tn[1]*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ - PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*输入BTD的SVC错误*/ + PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* 检查失败 错误返回 */ + /* 锟斤拷锟绞э拷锟 锟斤拷锟襟返伙拷 */ retVal = 0; } } - else /* 超时 */ + else /* 锟斤拷时 */ { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:Time Out.\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*输入BTD延迟超容忍*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_DELAY_ERR); /*锟斤拷锟斤拷BTD锟接迟筹拷锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, *pFsfbStruct->CycleNum); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->LastLocalRecTC); /*NowRecvTCr*/ @@ -1481,30 +1481,30 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN } else { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray, RecordArraySize, "DelayTCr > MaxLost\n"); #endif - PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*输入BTD丢失超容忍*/ + PrintRecArrayByte(RecordArray, RecordArraySize, IN_BTD_LOST_ERR); /*锟斤拷锟斤拷BTD锟斤拷失锟斤拷锟斤拷锟斤拷*/ PrintRecArray2ByteB(RecordArray, RecordArraySize, pLnkNode->DestDevName); /*DestDevName*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, TCr); /*tc*/ PrintRecArray4ByteB(RecordArray, RecordArraySize, pTmStmp->NowRecvTCr); /*NowRecvTCr*/ PrintRecArrayByte(RecordArray, RecordArraySize, pNodeParam->MaxLost); PrintRecArray4ByteB(RecordArray, RecordArraySize, DelayTCr); /*delayTc*/ - /* 丢包数超过 最大的丢包数 重发SSE进行同步 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 锟斤拷锟侥讹拷锟斤拷锟斤拷 锟截凤拷SSE锟斤拷锟斤拷同锟斤拷 */ pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; retVal = 0; } } else if( Fsfb_Halt == pLnkNode->FsfbLinInfo.RecvLinkStatus) { - pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* 状态设置为发送SBT */ + pLnkNode->FsfbLinInfo.RecvLinkStatus = Fsfb_SendBtm_Sbt; /* 状态锟斤拷锟斤拷为锟斤拷锟斤拷SBT */ retVal = 0; } - else /* 其他状态丢弃数据 */ + else /* 锟斤拷锟斤拷状态锟斤拷锟斤拷锟斤拷锟斤拷 */ { -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordArraySize,"W:RecvStatus() not RecvData or Halt.Discard Bsd Msg."); PrintFileHex(RecordArray,RecordArraySize,&pLnkNode->FsfbLinInfo.RecvLinkStatus,1); PrintFiles(RecordArray,RecordArraySize,"\n"); @@ -1515,5 +1515,5 @@ static UINT8 FsfbCheckBtdMsg(const UINT8 *pBtdMsg,Fsfb_Lnk_Info_Node_Stru *pLnkN return retVal; } /*-------------------------------------------------------------------- - * 报文创建模块内部接口函数 END + * 锟斤拷锟侥达拷锟斤拷模锟斤拷锟节诧拷锟接口猴拷锟斤拷 END *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c index 484dd2f..ce6a5b4 100644 --- a/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c +++ b/TSCP/src/protocol/fsfb/common_fsfb/FsfbProtcl.c @@ -1,55 +1,55 @@ /** ****************************************************** * -* 文件名 : FsfbProtcl.c -* 版权说明: 北京交控科技有限公司 -* 版本号 : 1.0 -* 创建时间: 2013.09.05 -* 作者 : 王佩佩 -* 功能描述: FSFB协议实现 -* 使用注意: +* 锟侥硷拷锟斤拷 锟斤拷 FsfbProtcl.c +* 锟斤拷权说锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟截科硷拷锟斤拷锟睫癸拷司 +* 锟芥本锟斤拷 锟斤拷 1.0 +* 锟斤拷锟斤拷时锟戒: 2013.09.05 +* 锟斤拷锟斤拷 锟斤拷 锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 FSFB协锟斤拷实锟斤拷 +* 使锟斤拷注锟解: * -* 修改记录: -* 2014.5.21 刘巧瑞 -* 修改内容:在FsfbProtclRefreshLnk()函数中增加了: tmpInput = ShortFromChar(pLnkStatusData); -* 修改理由:之前没有获取跟随数据的长度,造成无法实现跟随 +* 锟睫改硷拷录锟斤拷 +* 2014.5.21 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷锟斤拷FsfbProtclRefreshLnk锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟剿o拷 tmpInput = ShortFromChar(pLnkStatusData); +* 锟睫革拷锟斤拷锟缴o拷之前没锟叫伙拷取锟斤拷锟斤拷锟斤拷锟捷的筹拷锟饺o拷锟斤拷锟斤拷薹锟绞碉拷指锟斤拷锟 -* 2014.5.21 刘巧瑞 -* 修改内容:在FsfbProtclRefreshLnk()函数中, -* 调用FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); -* 改为FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); -* 之前由于刷新信息的索引一直为改变造成刷新不完全的情况 - 修改理由: 之前由于刷新信息的索引一直为改变造成刷新不完全的情况 +* 2014.5.21 锟斤拷锟斤拷锟斤拷 +* 锟睫革拷锟斤拷锟捷o拷锟斤拷FsfbProtclRefreshLnk锟斤拷锟斤拷锟斤拷锟斤拷锟叫o拷 +* 锟斤拷锟斤拷FsfbVarArray2LnkNodeInfo(pLnkStatusData, CurLnk); +* 锟斤拷为FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[2+FSFB_VAR_NODE_LEN * i], CurLnk); +* 之前锟斤拷锟斤拷刷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷一直为锟侥憋拷锟斤拷锟剿拷虏锟斤拷锟饺拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 之前锟斤拷锟斤拷刷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷一直为锟侥憋拷锟斤拷锟剿拷虏锟斤拷锟饺拷锟斤拷锟斤拷 -* 2014.5.30 刘巧瑞 - 修改内容: 在FsfbStructInit()中: pFsfbStruct->AppArray的长度字段初始化为0 - 修改理由: 长度为4个字节long +* 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbStructInit()锟斤拷: pFsfbStruct->AppArray锟侥筹拷锟斤拷锟街段筹拷始锟斤拷为0 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷锟斤拷为4锟斤拷锟街斤拷long 之前:ShortToChar(0, pFsfbStruct->AppArray); - 改为:LongToChar(0, pFsfbStruct->AppArray); + 锟斤拷为:LongToChar(0, pFsfbStruct->AppArray); - 2014.5.30 刘巧瑞 - 修改内容: 在FsfbStructInit()中添加了pFsfbStruct->VarArray的长度字段的初始化 - 修改理由: 初始化时长度应该被初始化 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷FsfbStructInit()锟斤拷锟斤拷锟斤拷锟斤拷pFsfbStruct->VarArray锟侥筹拷锟斤拷锟街段的筹拷始锟斤拷 + 锟睫革拷锟斤拷锟斤拷: 锟斤拷始锟斤拷时锟斤拷锟斤拷应锟矫憋拷锟斤拷始锟斤拷 - 2014.5.30 刘巧瑞 - 修改内容:在FsfbStructInit()中的"分配链路管理表堆栈空间"模块 - 调用了堆栈初始化函数,来完成堆栈初始化 - 修改理由:这样会使代码更清晰和模块化 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷FsfbStructInit()锟叫碉拷"锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸硷拷"模锟斤拷 + 锟斤拷锟斤拷锟剿讹拷栈锟斤拷始锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷啥锟秸伙拷锟绞硷拷锟 + 锟睫革拷锟斤拷锟斤拷:锟斤拷锟斤拷锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥o拷榛 - 2014.5.30 刘巧瑞 - 修改内容:在FsfbStructInit()中的"临时报文缓存区"模块添加了 - 临时缓冲区内存空间的初始化 - 修改理由:新开辟的内存空间应该进行初始化 - 2014.8.05 刘巧瑞 - 修改内容:ReadQueueData()函数中,修改了BTD分支的返回值,如果BTD验证不通过, - 只是将其简单的丢弃,不会造成宕机。 - 修改理由:需求需要 - 2014.8.05 刘巧瑞 - 修改内容:ReadQueueData()函数中,当一帧数据长度:读出的数据长度+2大于输入的最大长度时, - 将此帧数据丢掉,继续执行 - 修改理由:之前未做此分支处理 - 2014.8.14 刘巧瑞 - 修改内容:FsfbProtclOutPut()中取出每一帧,对此帧数据长度进行验证不合法丢弃此数据帧 - 修改理由:之前只是对第一帧做了数据长度防护,没有对其他帧做数据长度防护且对不合法帧没有进行相应处理 + 2014.5.30 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷FsfbStructInit()锟叫碉拷"锟斤拷时锟斤拷锟侥伙拷锟斤拷锟斤拷"模锟斤拷锟斤拷锟斤拷锟斤拷 + 锟斤拷时锟斤拷锟斤拷锟斤拷锟节达拷占锟侥筹拷始锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟铰匡拷锟劫碉拷锟节达拷占锟接︼拷媒锟斤拷谐锟绞硷拷锟 + 2014.8.05 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:ReadQueueData()锟斤拷锟斤拷锟叫o拷锟睫革拷锟斤拷BTD锟斤拷支锟侥凤拷锟斤拷值锟斤拷锟斤拷锟紹TD锟斤拷证锟斤拷通锟斤拷锟斤拷 + 只锟角斤拷锟斤拷虻サ亩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷宕伙拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:锟斤拷锟斤拷锟斤拷要 + 2014.8.05 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟斤拷:ReadQueueData()锟斤拷锟斤拷锟叫o拷锟斤拷一帧锟斤拷锟捷筹拷锟斤拷:锟斤拷锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷+2锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟襟长讹拷时锟斤拷 + 锟斤拷锟斤拷帧锟斤拷锟捷讹拷锟斤拷锟斤拷锟斤拷锟斤拷执锟斤拷 + 锟睫革拷锟斤拷锟斤拷:之前未锟斤拷锟剿凤拷支锟斤拷锟斤拷 + 2014.8.14 锟斤拷锟斤拷锟斤拷 + 锟睫革拷锟斤拷锟捷o拷FsfbProtclOutPut锟斤拷锟斤拷锟斤拷取锟斤拷每一帧锟斤拷锟皆达拷帧锟斤拷锟捷筹拷锟饺斤拷锟斤拷锟斤拷证锟斤拷锟较凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷帧 + 锟睫革拷锟斤拷锟缴o拷之前只锟角对碉拷一帧锟斤拷锟斤拷锟斤拷锟捷筹拷锟饺凤拷锟斤拷锟斤拷没锟叫讹拷锟斤拷锟斤拷帧锟斤拷锟斤拷锟捷筹拷锟饺凤拷锟斤拷锟揭对诧拷锟较凤拷帧没锟叫斤拷锟斤拷锟斤拷应锟斤拷锟斤拷 * ------------ ------ --------------- ********************************************************/ #include "string.h" @@ -58,14 +58,14 @@ #include "CommonRecord.h" #include "dsuFsfbFunc.h" #include "FsfbConfig.h" -#include "FsfbRecordDelare.h " +#include "FsfbRecordDelare.h" #include "FsfbProtclCommon.h" #include "FsfbLnkNodeMgr.h" #include "FsfbMessageInfo.h" #include "RpHandleInterface.h" /*-------------------------------------------------------------------- - * FSFB协议内部函数申明 Start + * FSFB协锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 Start *--------------------------------------------------------------------*/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct); static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct); @@ -76,21 +76,21 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb); static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx); /*-------------------------------------------------------------------- - * FSFB协议内部函数申明 End + * FSFB协锟斤拷锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFB协议外部接口函数 Start + * FSFB协锟斤拷锟解部锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /****************************************************************************************** -* 功能描述 : 协议初始化函数 - 1. 在调用此函数之前,应用要将统一结构体中InputSize,OutputSize,MaxNumLink, - MaxNumPerCycle,OutnetQueueSize等变量赋值 -* 输入参数 : UINT8 * fileName 存放数据的文件名或地址 -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议统一结构体指针 -* 输出参数 : -* 全局变量 : -* 返回值 : 正常初始化返回1,否则返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 协锟斤拷锟绞硷拷锟斤拷锟斤拷锟 + 1. 锟节碉拷锟矫此猴拷锟斤拷之前锟斤拷应锟斤拷要锟斤拷统一锟结构锟斤拷锟斤拷InputSize锟斤拷OutputSize,MaxNumLink, + MaxNumPerCycle,OutnetQueueSize锟饺憋拷锟斤拷锟斤拷值 +* 锟斤拷锟斤拷锟斤拷锟 : UINT8 * fileName 锟斤拷锟斤拷锟斤拷莸锟斤拷募锟斤拷锟斤拷锟斤拷址 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷统一锟结构锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟斤拷锟斤拷锟斤拷始锟斤拷锟斤拷锟斤拷1锟斤拷锟斤拷锟津返伙拷0 *******************************************************************************************/ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) { @@ -102,31 +102,31 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) return retVal; } - /* 对DSU层查询函数进行初始化处理 */ + /* 锟斤拷DSU锟斤拷锟窖拷锟斤拷锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟斤拷锟 */ retVal = dsuFsFbInit(fileName); if( 0 == retVal ) { - /* DSU查询函数库初始化失败 */ + /* DSU锟斤拷询锟斤拷锟斤拷锟斤拷锟绞硷拷锟绞э拷锟 */ return retVal; } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* FSFB结构体初始化 */ + /* FSFB锟结构锟斤拷锟绞硷拷锟 */ retVal = FsfbStructInit(pFsfbStruct); if(0 == retVal) { - /* 记录 */ + /* 锟斤拷录 */ return retVal; } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 通信链路管理表初始化 */ + /* 通锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷始锟斤拷 */ if(!FsfbInitLnkMngr(pFsfbStruct)) { retVal =0; @@ -136,62 +136,62 @@ UINT8 FsfbProtclInit(UINT8* fileName,FSFB_INFO_STRU* pFsfbStruct) retVal = InitFsfbRedunStruct(pFsfbStruct, &pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* 处理失败 什么不做 返回 */ + /* 锟斤拷锟斤拷失锟斤拷 什么锟斤拷锟斤拷 锟斤拷锟斤拷 */ return retVal; } else { - /*初始化成功*/ + /*锟斤拷始锟斤拷锟缴癸拷*/ } - /* 冗余初始化 */ + /* 锟斤拷锟斤拷锟绞硷拷锟 */ retVal = RpHandleInit(&pFsfbStruct->RpInfoStru); if(0 == retVal) { - /* 初始化失败 */ + /* 锟斤拷始锟斤拷失锟斤拷 */ return retVal; } else { - /* 冗余层处理成功 */ + /* 锟斤拷锟斤拷愦︼拷锟斤拷晒锟 */ } return retVal; } /****************************************************************************************** -* 功能描述 : 协议输出单元的主函数,根据协议的规则,将应用传来的数据组帧, - 并为数据比较单元准备好必需的数据,同时维护链路管理表 -* 输入参数 : -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议统一结构体指针 : -* 返回值 : 正确返回1,错误返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 协锟斤拷锟斤拷锟斤拷锟皆拷锟斤拷锟斤拷锟斤拷锟,锟斤拷锟斤拷协锟斤拷墓锟斤拷锟,锟斤拷应锟矫达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷帧, + 锟斤拷为锟斤拷锟捷比较碉拷元准锟斤拷锟矫憋拷锟斤拷锟斤拷锟斤拷锟,同时维锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷统一锟结构锟斤拷指锟斤拷 : +* 锟斤拷锟斤拷值 : 锟斤拷确锟斤拷锟斤拷1锟斤拷锟斤拷锟襟返伙拷0 *******************************************************************************************/ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { - UINT8 retVal = 1;/*函数返回值*/ - UINT8 tmpRetVal = 1;/*临时函数返回值*/ + UINT8 retVal = 1;/*锟斤拷锟斤拷锟斤拷锟斤拷值*/ + UINT8 tmpRetVal = 1;/*锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷值*/ UINT32 index =0; - UINT16 msgLen = 0;/* 消息长度 */ - UINT16 outputDataLen =0; /* 输出一帧数据长度 */ - UINT16 maxMagLen = 0; /* 一帧数据的最大长度 */ - UINT8 tmpBuff[2]={0}; /* 作成报文的临时缓存区 */ - UINT16 fsfbVarLen = 0;/*FSFB协议中间变量长度*/ - UINT16 redunVarLen = 0;/*冗余层中间变量数据长度*/ - Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* 通信节点指针 */ - Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*定义当前指针;*/ + UINT16 msgLen = 0;/* 锟斤拷息锟斤拷锟斤拷 */ + UINT16 outputDataLen =0; /* 锟斤拷锟揭恢★拷锟斤拷莩锟斤拷锟 */ + UINT16 maxMagLen = 0; /* 一帧锟斤拷锟捷碉拷锟斤拷蟪ざ锟 */ + UINT8 tmpBuff[2]={0}; /* 锟斤拷锟缴憋拷锟侥碉拷锟斤拷时锟斤拷锟斤拷锟斤拷 */ + UINT16 fsfbVarLen = 0;/*FSFB协锟斤拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟*/ + UINT16 redunVarLen = 0;/*锟斤拷锟斤拷锟斤拷屑锟斤拷锟斤拷锟斤拷锟捷筹拷锟斤拷*/ + Fsfb_Lnk_Info_Node_Stru* pNode = NULL; /* 通锟脚节碉拷指锟斤拷 */ + Fsfb_Lnk_Info_Node_Stru* CurFillLnk;/*锟斤拷锟藉当前指锟斤拷;*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /*输出数据*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_APP); /*锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray4ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, QueueStatus(&pFsfbStruct->OutputDataQueue)); CurFillLnk=pFsfbStruct->LnkHead; - /* 无发送周期数累加 */ + /* 锟睫凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟桔硷拷 */ while(CurFillLnk!= NULL) { CurFillLnk->FsfbLinInfo.NoAppDataCycleNum++; ComAddTimeStamp(&CurFillLnk->FsfbLinInfo.TimeStmp); - /* 如果是TDM帧*/ + /* 锟斤拷锟斤拷锟絋DM帧*/ CurFillLnk =CurFillLnk->NextNode; } @@ -200,27 +200,27 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) index =4; if(QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /*本周期有要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ while (QueueStatus(&pFsfbStruct->OutputDataQueue)>2) { - /* 扫描两个字节的长度:一帧应用数据的长度 */ + /* 扫锟斤拷锟斤拷锟斤拷锟街节的筹拷锟斤拷:一帧应锟斤拷锟斤拷锟捷的筹拷锟斤拷 */ QueueScan(2,tmpBuff,&pFsfbStruct->OutputDataQueue); msgLen = ShortFromChar(tmpBuff); if(msgLen <= maxMagLen) - {/* 队列节点数据长度 小于等于 最大数据 */ + {/* 锟斤拷锟叫节碉拷锟斤拷锟捷筹拷锟斤拷 小锟节碉拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 */ - /*读取一帧数据 */ + /*锟斤拷取一帧锟斤拷锟斤拷 */ tmpRetVal = QueueRead((UINT32)(msgLen+2),pFsfbStruct->TmpDataBuff,&pFsfbStruct->OutputDataQueue); if (tmpRetVal == 1) { - /*根据相关信息创建不同的消息类型 */ + /*锟斤拷锟斤拷锟斤拷锟斤拷锟较拷锟斤拷锟斤拷锟酵拷锟斤拷锟较拷锟斤拷锟 */ tmpRetVal =AccordInfoCreateFrameData(pFsfbStruct->TmpDataBuff,(msgLen+2),pFsfbStruct->AppArray+index,&outputDataLen,&pNode,pFsfbStruct); index +=outputDataLen; } if (tmpRetVal == 0) { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*输出读应用数据错误*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_READ_ERR); /*锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷荽锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); LongToChar(0,pFsfbStruct->AppArray); @@ -229,23 +229,23 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } else { - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*输出应用帧数据长度错误*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_FRAME_LEN_ERR); /*锟斤拷锟接︼拷锟街★拷锟斤拷莩锟斤拷却锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, msgLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, maxMagLen); - QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*丢弃此帧数据*/ + QueueElementDiscard( msgLen, &pFsfbStruct->OutputDataQueue);/*锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷*/ } } } else { - /*本周期无要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); } - /* 根据链路信息创建相对应帧 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷锟斤拷锟接χ */ tmpRetVal = ArrordLnkInfoCreateFrame(pFsfbStruct,&pFsfbStruct->AppArray[index],&outputDataLen); index+=outputDataLen; @@ -257,32 +257,32 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) { LongToChar(index-4,pFsfbStruct->AppArray); - /*写入中间变量*/ - /*数据结构*/ + /*写锟斤拷锟叫硷拷锟斤拷锟*/ + /*锟斤拷锟捷结构*/ /******************************************************* - 数据总长度 |FSFB协议中间变量 |冗余中间变量 - 2字节 | N | M + 锟斤拷锟斤拷锟杰筹拷锟斤拷 |FSFB协锟斤拷锟叫硷拷锟斤拷锟 |锟斤拷锟斤拷锟叫硷拷锟斤拷锟 + 2锟街斤拷 | N | M *******************************************************/ fsfbVarLen = FsfbWriteToVarArray(&pFsfbStruct->VarArray[2],pFsfbStruct); redunVarLen = RpHandleOutput(&pFsfbStruct->RpInfoStru, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize); - /*从冗余处理结构体中的中间变量拷贝到FSFB协议中间变量中*/ + /*锟斤拷锟斤拷锟洁处锟斤拷锟结构锟斤拷锟叫碉拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟紽SFB协锟斤拷锟叫硷拷锟斤拷锟斤拷锟*/ ComMemCopy(pFsfbStruct->RpInfoStru.VarArray,&pFsfbStruct->VarArray[2+fsfbVarLen],redunVarLen); - /*写入中间变量总长度*/ + /*写锟斤拷锟叫硷拷锟斤拷锟斤拷艹锟斤拷锟*/ if(fsfbVarLen+redunVarLen <= 65535) { ShortToChar((UINT16)(fsfbVarLen+redunVarLen),pFsfbStruct->VarArray); } else { - /*本周期无要发送的应用数据*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷要锟斤拷锟酵碉拷应锟斤拷锟斤拷锟斤拷*/ QueueClear(&pFsfbStruct->OutputDataQueue); LongToChar(0,pFsfbStruct->AppArray); ShortToChar(0,pFsfbStruct->VarArray); - /*数据越界,并且让应用层宕机*/ + /*锟斤拷锟斤拷越锟斤拷,锟斤拷锟斤拷锟斤拷应锟矫诧拷宕伙拷*/ - PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /*输出数据*/ + PrintRecArrayByte(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, OUT_ALL_LEN_ERR); /*锟斤拷锟斤拷锟斤拷锟*/ PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, fsfbVarLen); PrintRecArray2ByteB(pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, redunVarLen); @@ -293,63 +293,63 @@ UINT8 FsfbProtclOutPut(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclReceiveData - * 功能描述 : 对红蓝网输入数据进行FSFB层的安全处理,将安全数据交付应用。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclReceiveData + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟皆猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟捷斤拷锟斤拷FSFB锟斤拷陌锟饺拷锟斤拷锟斤拷锟斤拷锟斤拷锟饺拷锟斤拷萁锟斤拷锟接︼拷谩锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 输入队列:pFsfbStruct->OutnetQueueA + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷锟斤拷校锟絧FsfbStruct->OutnetQueueA * pFsfbStruct->OutnetQueueB - * 输出队列:pFsfbStruct->DataToApp + * 锟斤拷锟斤拷锟斤拷校锟絧FsfbStruct->DataToApp * - * 返回值 : UINT8 1:正常返回 0:错误返回 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; - UINT16 MaxLen = 0; /* 一帧数据最大大小 */ - UINT8 *RecordArray = pFsfbStruct->RecordArray; /* 记录 */ - UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* 记录数组大小 */ - UINT32 inputQueLen = 0u; /*输入队列长度*/ + UINT16 MaxLen = 0; /* 一帧锟斤拷锟斤拷锟斤拷锟斤拷小 */ + UINT8 *RecordArray = pFsfbStruct->RecordArray; /* 锟斤拷录 */ + UINT16 RecordSize = pFsfbStruct->RecordArraySize; /* 锟斤拷录锟斤拷锟斤拷锟叫 */ + UINT32 inputQueLen = 0u; /*锟斤拷锟斤拷锟斤拷谐锟斤拷锟*/ - /* 记录清零 */ + /* 锟斤拷录锟斤拷锟斤拷 */ ShortToChar(0,pFsfbStruct->RecordArray); -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ PrintFiles(RecordArray,RecordSize,"FSFB Receive:\n"); #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - /* RSR输入单元标识 */ - PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* 新周期开始:0xEE */ /* M_2010_05_10 */ - PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* 周期号 */ /*M_2010_05_10 */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* 本方类型 */ - PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* 本方ID */ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + /* RSR锟斤拷锟诫单元锟斤拷识 */ + PrintRecArray2ByteB(RecordArray, RecordSize, FSFB_CYCLE_TAG); /* 锟斤拷锟斤拷锟节匡拷始锟斤拷0xEE */ /* M_2010_05_10 */ + PrintRecArray4ByteB(RecordArray,RecordSize,*pFsfbStruct->CycleNum); /* 锟斤拷锟节猴拷 */ /*M_2010_05_10 */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalType); /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray,RecordSize,pFsfbStruct->LocalID); /* 锟斤拷锟斤拷ID */ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueR); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*红网长度*/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ inputQueLen = QueueStatus(&pFsfbStruct->OutnetQueueB); - PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*蓝网长度*/ + PrintRecArray4ByteB(RecordArray, RecordSize, inputQueLen); /*锟斤拷锟斤拷锟斤拷锟斤拷*/ #endif - QueueClear(&pFsfbStruct->DataToApp); /* 队列清空 */ + QueueClear(&pFsfbStruct->DataToApp); /* 锟斤拷锟斤拷锟斤拷锟 */ - /* 队列节点最大数据长度 = InputSize + FSFB消息固定长度 + 队列固定长度(4+ 2) */ + /* 锟斤拷锟叫节碉拷锟斤拷锟斤拷锟斤拷莩锟斤拷锟 = InputSize + FSFB锟斤拷息锟教讹拷锟斤拷锟斤拷 + 锟斤拷锟叫固讹拷锟斤拷锟斤拷(4+ 2) */ MaxLen = pFsfbStruct->InputSize + FSFB_FIXED_LEN + 6; ClearNetsRecvPkgNum(pFsfbStruct); - /* 对红网接收到的数据进行处理 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /*输入红网处理*/ + /* 锟皆猴拷锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟叫达拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_RED); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueR, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 0, pFsfbStruct); - /* 对篮网接收到的数据进行处理 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /*输入蓝网处理*/ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟叫达拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_BLUE); /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ retVal = ReadQueueData(&pFsfbStruct->OutnetQueueB, MaxLen, pFsfbStruct->RecordArray, pFsfbStruct->RecordArraySize, 1, pFsfbStruct); - /* 将队列里面的报文 进行排序后 保存到临时报文链表里 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷谋锟斤拷锟 锟斤拷锟斤拷锟斤拷锟斤拷锟 锟斤拷锟芥到锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 */ - /* 接收状态管理 */ + /* 锟斤拷锟斤拷状态锟斤拷锟斤拷 */ retVal=FsfbRecvLnkStatusMng(pFsfbStruct); @@ -357,22 +357,22 @@ UINT8 FsfbProtclReceiveData(FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclDeleteLnk - * 功能描述 : 根据设备类型和设备ID删除链路。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclDeleteLnk + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟借备锟斤拷锟酵猴拷锟借备ID删锟斤拷锟斤拷路锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devType UINT8 IN 设备类型 - * devId UINT8 IN 设备ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * devType UINT8 IN 锟借备锟斤拷锟斤拷 + * devId UINT8 IN 锟借备ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *LastIndex; Fsfb_Lnk_Info_Node_Stru *CurIndex; - UINT16 destDevName;/*long型设备name*/ + UINT16 destDevName;/*long锟斤拷锟借备name*/ UINT8 ret = 0; if(pFsfbStruct == NULL) @@ -384,15 +384,15 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) ComTypeId2DevName(devType,devId,&destDevName); LastIndex = NULL; - /*当前指针从链表头指针开始*/ + /*锟斤拷前指锟斤拷锟斤拷锟斤拷锟酵分革拷肟*/ CurIndex = pFsfbStruct -> LnkHead; while(CurIndex != NULL) { - /*找到要删除节点*/ + /*锟揭碉拷要删锟斤拷锟节碉拷*/ if(destDevName == CurIndex->DestDevName) { - /*如果删除节点是头节点*/ + /*锟斤拷锟缴撅拷锟斤拷诘锟斤拷锟酵凤拷诘锟*/ if(LastIndex == NULL) { pFsfbStruct ->LnkHead = CurIndex->NextNode; @@ -403,10 +403,10 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - }/*if(上一个指针LastIndex == NULL)*/ - /*如果删除节点不是头节点*/ + }/*if(锟斤拷一锟斤拷指锟斤拷LastIndex == NULL)*/ + /*锟斤拷锟缴撅拷锟斤拷诘悴伙拷锟酵凤拷诘锟*/ else { LastIndex->NextNode = CurIndex->NextNode; @@ -417,45 +417,45 @@ UINT8 FsfbProtclDeleteLnk(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } } } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - /*没有找到要删除节点,将上一个指针和当前指针都往后移一个节点*/ + /*没锟斤拷锟揭碉拷要删锟斤拷锟节点,锟斤拷锟斤拷一锟斤拷指锟斤拷偷锟角爸革拷攵硷拷锟斤拷锟斤拷锟揭伙拷锟斤拷诘锟*/ LastIndex = CurIndex; CurIndex = CurIndex->NextNode; }/*end while(CurIndex != NULL)*/ - /*删除冗余链路信息*/ + /*删锟斤拷锟斤拷锟斤拷锟斤拷路锟斤拷息*/ retVal = RpHandleLnkDelete(destDevName,&pFsfbStruct->RpInfoStru); return retVal; } /*********************************************************************** - * 方法名 : FsfbProtclGetLnkStatus - * 功能描述 : 根据设备类型和设备ID获取设备状态。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclGetLnkStatus + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟借备锟斤拷锟酵猴拷锟借备ID锟斤拷取锟借备状态锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * devType UINT8 IN 设备类型 - * devId UINT8 IN 设备ID - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : 0:通信节点不存在 - 0x2b:通信中断 - 0x17:接受数据中 + * devType UINT8 IN 锟借备锟斤拷锟斤拷 + * devId UINT8 IN 锟借备ID + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : 0锟斤拷通锟脚节点不锟斤拷锟斤拷 + 0x2b:通锟斤拷锟叫讹拷 + 0x17:锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStruct) { UINT8 retVal =0; Fsfb_Lnk_Info_Node_Stru *pNode; - UINT16 destDevName =0;/*long型设备name*/ + UINT16 destDevName =0;/*long锟斤拷锟借备name*/ if(pFsfbStruct == NULL) { @@ -473,26 +473,26 @@ UINT8 FsfbProtclGetLnkStatus(UINT8 devType,UINT8 devId,FSFB_INFO_STRU* pFsfbStru } else if( pNode->FsfbLinInfo.RecvLinkStatus == Fsfb_RecvData) { - /* 接受数据中 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = 0x17; } else { - /* 通信状态不正常*/ + /* 通锟斤拷状态锟斤拷锟斤拷锟斤拷*/ retVal = 0x2b; } return retVal; } /*********************************************************************** - * 方法名 : FsfbProtclRefreshLnk - * 功能描述 : 根据输入的中间变量刷新链路状态。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclRefreshLnk + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷屑锟斤拷锟斤拷刷锟斤拷锟斤拷路状态锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pLnkStatusData UINT8* IN 中间变量数据 - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pLnkStatusData UINT8* IN 锟叫硷拷锟斤拷锟斤拷锟斤拷锟 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) { @@ -503,11 +503,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) UINT16 sLnksNums =0; INT16 tmpInput =0; UINT16 inputDataLnk =0; - UINT16 lnkStatusTotalLen = 0;/*链路状态总长度*/ - UINT16 redunStatusLen = 0;/*冗余链路信息长度*/ - UINT16 fsfbStatusLen = 0;/*FSFB协议链路信息长度*/ + UINT16 lnkStatusTotalLen = 0;/*锟斤拷路状态锟杰筹拷锟斤拷*/ + UINT16 redunStatusLen = 0;/*锟斤拷锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ + UINT16 fsfbStatusLen = 0;/*FSFB协锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ - UINT16 index = 0;/*数组偏移*/ + UINT16 index = 0;/*锟斤拷锟斤拷偏锟斤拷*/ if((pLnkStatusData == NULL)||(pFsfbStruct == NULL)) { @@ -527,11 +527,11 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) CurLnk = CurLnk->NextNode; } - /*2个字节的链路信息总长度*/ + /*2锟斤拷锟街节碉拷锟斤拷路锟斤拷息锟杰筹拷锟斤拷*/ lnkStatusTotalLen = ShortFromChar(pLnkStatusData); index += 2; - /*获取FSFB层链路信息长度*/ + /*锟斤拷取FSFB锟斤拷锟斤拷路锟斤拷息锟斤拷锟斤拷*/ fsfbStatusLen = ShortFromChar(&pLnkStatusData[index]); index += 2; tmpInput = fsfbStatusLen; @@ -541,9 +541,9 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) for( i = 0; i < sLnksNums; i++) { CurLnk = (Fsfb_Lnk_Info_Node_Stru *)ComPopStack(&pFsfbStruct->LnkStack); - if(CurLnk != 0) /*从堆栈中能够弹出可用的节点地址*/ + if(CurLnk != 0) /*锟接讹拷栈锟斤拷锟杰癸拷锟斤拷锟斤拷锟斤拷锟矫的节碉拷锟街*/ { - /*根据历史数据刷新链路基本信息*/ + /*锟斤拷锟斤拷锟斤拷史锟斤拷锟斤拷刷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷息*/ FsfbVarArray2LnkNodeInfo((UINT8 *)&pLnkStatusData[index+FSFB_VAR_NODE_LEN * i], CurLnk); if( i == 0) @@ -561,7 +561,7 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) tmpInput = tmpInput - FSFB_VAR_NODE_LEN; if( 0 == ( tmpInput % FSFB_VAR_NODE_LEN ) ) { - /* 不做处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } else { @@ -578,16 +578,16 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } index += (sLnksNums*FSFB_VAR_NODE_LEN); - /*获取冗余处理链路信息的长度*/ + /*锟斤拷取锟斤拷锟洁处锟斤拷锟斤拷路锟斤拷息锟侥筹拷锟斤拷*/ redunStatusLen = ShortFromChar(&pLnkStatusData[index]); if ((redunStatusLen+2) == (lnkStatusTotalLen-2-fsfbStatusLen)) { - /*刷新链路信息*/ + /*刷锟斤拷锟斤拷路锟斤拷息*/ retVal = RpHandleRefresh(redunStatusLen,&pLnkStatusData[index+2],&pFsfbStruct->RpInfoStru); } else { - /*链路信息错误*/ + /*锟斤拷路锟斤拷息锟斤拷锟斤拷*/ retVal = 0; } } @@ -600,13 +600,13 @@ UINT8 FsfbProtclRefreshLnk(UINT8* pLnkStatusData,FSFB_INFO_STRU* pFsfbStruct) } /*********************************************************************** - * 方法名 : FsfbProtclFreeSpace - * 功能描述 : 释放空间。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbProtclFreeSpace + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟酵放空间。 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协议统一结构体 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) { @@ -618,7 +618,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /* 不错处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } if(pFsfbStruct->AppArray != NULL) @@ -628,7 +628,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } if(pFsfbStruct->VarArray != NULL) @@ -638,7 +638,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } if(pFsfbStruct->RecordArray != NULL) @@ -648,9 +648,9 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } - /*释放队列的空间*/ + /*锟酵放讹拷锟叫的空硷拷*/ QueueElementFree(&pFsfbStruct->OutnetQueueR); QueueElementFree(&pFsfbStruct->OutnetQueueB); QueueElementFree(&pFsfbStruct->OutputDataQueue); @@ -663,7 +663,7 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } else { - /*无操作*/ + /*锟睫诧拷锟斤拷*/ } retVal = RpHandleFreeSpace(&pFsfbStruct->RpInfoStru); @@ -672,19 +672,19 @@ UINT8 FsfbProtclFreeSpace(FSFB_INFO_STRU* pFsfbStruct) } /*-------------------------------------------------------------------- - * FSFB协议外部接口函数 End + * FSFB协锟斤拷锟解部锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ /*-------------------------------------------------------------------- - * FSFB协议内部接口函数 Start + * FSFB协锟斤拷锟节诧拷锟接口猴拷锟斤拷 Start *--------------------------------------------------------------------*/ /*********************************************************************** - * 方法名 : FsfbStructInit - * 功能描述 : 通过该函数,实现对RSR层的初始化函数。根据应用设定的基本值,计算各队列的大小。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : FsfbStructInit + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 通锟斤拷锟矫猴拷锟斤拷锟斤拷实锟街讹拷RSR锟斤拷某锟绞硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟接︼拷锟斤拷瓒拷幕锟斤拷锟街碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫的达拷小锟斤拷 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB层统一结构体,需进行初始值设置。 - * 返回值 : UINT8 1:正常返回 0:错误返回 + * pFsfbStruct FSFB_INFO_STRU* INOUT FSFB锟斤拷统一锟结构锟藉,锟斤拷锟斤拷谐锟绞贾碉拷锟斤拷谩锟 + * 锟斤拷锟斤拷值 : UINT8 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 0锟斤拷锟斤拷锟襟返伙拷 ***********************************************************************/ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) { @@ -697,15 +697,15 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) inputSize = pFsfbStruct->InputSize; outputSize = pFsfbStruct->OutputSize; - /* 最大报文数据 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟 */ maxMsg = pFsfbStruct->InputSize > pFsfbStruct->OutputSize? pFsfbStruct->InputSize:pFsfbStruct->OutputSize; - maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* 信号层队列固定长度(2+4) + RSSP层固定长度 + 32冗余 */ + maxMsg += 2 + 4 + FSFB_FIXED_LEN +32; /* 锟脚号诧拷锟斤拷泄潭锟斤拷锟斤拷锟(2+4) + RSSP锟斤拷潭锟斤拷锟斤拷锟 + 32锟斤拷锟斤拷 */ - /* 队列数组初始化 */ - maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* 最大报文数 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟绞硷拷锟 */ + maxMsgNum = pFsfbStruct->MaxNumLink *(pFsfbStruct->MaxNumPerCycle + 2); /* 锟斤拷锟斤拷锟斤拷锟 */ - /* FSFB层输出模块输出数组 */ + /* FSFB锟斤拷锟斤拷锟侥o拷锟斤拷锟斤拷锟斤拷锟斤拷 */ pFsfbStruct->AppArraySize = (pFsfbStruct->OutputSize+11+26)*(pFsfbStruct->MaxNumPerCycle)*(pFsfbStruct->MaxNumLink)+2; pFsfbStruct->AppArray = (UINT8 *)malloc(pFsfbStruct->AppArraySize); if(pFsfbStruct->AppArray == NULL) @@ -718,12 +718,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) LongToChar(0, pFsfbStruct->AppArray); } - /* FSFB输出模块输出中间变量数组大小 */ + /* FSFB锟斤拷锟侥o拷锟斤拷锟斤拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟斤拷小 */ pFsfbStruct->VarArraySize = FSFB_VAR_NODE_LEN * pFsfbStruct->MaxNumLink+32; pFsfbStruct->VarArray = (UINT8*)malloc(pFsfbStruct->VarArraySize); if( NULL == pFsfbStruct->VarArray) { - /* 记录 */ + /* 锟斤拷录 */ retVal =0; return retVal; } @@ -732,8 +732,8 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ShortToChar(0, pFsfbStruct->VarArray); } - /* 协议输入给应用的数据队列长度 */ - pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* 协议输入给应用的数据队列长度 */ + /* 协锟斤拷锟斤拷锟斤拷锟接︼拷玫锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ + pFsfbStruct->DataToAppSize = (inputSize + 6) * maxMsgNum; /* 协锟斤拷锟斤拷锟斤拷锟接︼拷玫锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ retVal = QueueInitial(&pFsfbStruct->DataToApp,pFsfbStruct->DataToAppSize); if(0 == retVal) { @@ -741,10 +741,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 应用给协议输出的数据队列长度 */ + /* 应锟矫革拷协锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷荻锟斤拷谐锟斤拷锟 */ pFsfbStruct->OutputDataQueueSize= (outputSize + 8 )*maxMsgNum; retVal = QueueInitial(&pFsfbStruct->OutputDataQueue,pFsfbStruct->OutputDataQueueSize); if(0 == retVal) @@ -753,12 +753,12 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 内网接受队列长度 */ + /* 锟斤拷锟斤拷锟斤拷锟杰讹拷锟叫筹拷锟斤拷 */ pFsfbStruct->OutnetQueueSize = (pFsfbStruct->InputSize + 2 + 11)*pFsfbStruct->MaxNumPerCycle*pFsfbStruct->MaxNumLink; - /* 红网队列 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueR,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -766,10 +766,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 蓝网队列 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ retVal = QueueInitial(&pFsfbStruct->OutnetQueueB,pFsfbStruct->OutnetQueueSize); if(0 == retVal) { @@ -777,14 +777,14 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 什么不做 */ + /* 什么锟斤拷锟斤拷 */ } - /* 记录数组 */ + /* 锟斤拷录锟斤拷锟斤拷 */ pFsfbStruct->RecordArray = (UINT8*)malloc(pFsfbStruct->RecordArraySize); if( NULL == pFsfbStruct->RecordArray) { - /* 记录 */ + /* 锟斤拷录 */ retVal =0; return retVal; } @@ -793,7 +793,7 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) ComMemSet(pFsfbStruct->RecordArray ,pFsfbStruct->RecordArraySize,0x0); } - /* 分配链路管理表堆栈空间 */ + /* 锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸硷拷 */ pFsfbStruct->LnkStack.maxNodeNum = pFsfbStruct->MaxNumLink; retVal = StackInitial(&pFsfbStruct->LnkStack.stack,pFsfbStruct->LnkStack.maxNodeNum); @@ -803,10 +803,10 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) } else { - /* 不做处理 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷 */ } - /* 临时报文缓存区 */ + /* 锟斤拷时锟斤拷锟侥伙拷锟斤拷锟斤拷 */ pFsfbStruct->TmpDataBuff = (UINT8 *)malloc(maxMsg); if( NULL == pFsfbStruct->TmpDataBuff) { @@ -835,23 +835,23 @@ static UINT8 FsfbStructInit(FSFB_INFO_STRU *pFsfbStruct) /****************************************************************************************** -* 功能描述 : 初始化通信连路管理表空链表(这是一个指定头节点的一维链表) - 1. 动态分配链路管理表堆栈空间,并对其进行初始化; - 2. 把链路管理表的头指针置为空; -* 输入参数 : -* 输入输出参数 : FSFB_INFO_STRU* pFsfbStruct 协议使用的统一结构体指针 -* 输出参数 : -* 全局变量 : -* 返回值 : 成功返回1,失败返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷始锟斤拷通锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷(锟斤拷锟斤拷一锟斤拷指锟斤拷头锟节碉拷锟揭晃拷锟斤拷锟) + 1. 锟斤拷态锟斤拷锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈锟秸间,锟斤拷锟斤拷锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟 + 2. 锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷头指锟斤拷锟斤拷为锟秸o拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : FSFB_INFO_STRU* pFsfbStruct 协锟斤拷使锟矫碉拷统一锟结构锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟缴癸拷锟斤拷锟斤拷1,失锟杰凤拷锟斤拷0 *******************************************************************************************/ -static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*链路管理表初始化函数*/ +static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /*锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷始锟斤拷锟斤拷锟斤拷*/ { UINT8 retVal =0; - /*分配最大链路节点数存储空间*/ + /*锟斤拷锟斤拷锟斤拷锟斤拷锟铰凤拷诘锟斤拷锟斤拷娲拷占锟*/ if(!FsfbInitLnkMngrStack(&pFsfbStruct->LnkStack)) { - /*记录记录*/ + /*锟斤拷录锟斤拷录*/ retVal = 0; return retVal; } @@ -862,25 +862,25 @@ static UINT8 FsfbInitLnkMngr(FSFB_INFO_STRU *pFsfbStruct) /* } /****************************************************************************************** -* 功能描述 : 初始化链路管理表堆栈 -* 初始化特定大小特定结构的堆栈,不同的结构体只需要采用压入不同的指针使用方式便可以做成不同的管理堆栈 -* 输入参数 : ComStackElement* s 堆栈的指针 -* 输入输出参数 : -* 输出参数 : -* 全局变量 : -* 返回值 : 成功返回1,失败返回0 +* 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷始锟斤拷锟斤拷路锟斤拷锟斤拷锟斤拷锟斤拷栈 +* 锟斤拷始锟斤拷锟截讹拷锟斤拷小锟截讹拷锟结构锟侥讹拷栈,锟斤拷同锟侥结构锟斤拷只锟斤拷要锟斤拷锟斤拷压锟诫不同锟斤拷指锟斤拷使锟矫凤拷式锟斤拷锟斤拷锟斤拷锟斤拷刹锟酵拷墓锟斤拷锟斤拷锟秸 +* 锟斤拷锟斤拷锟斤拷锟 : ComStackElement* s 锟斤拷栈锟斤拷指锟斤拷 +* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟 : +* 锟斤拷锟斤拷锟斤拷锟 : +* 全锟街憋拷锟斤拷 : +* 锟斤拷锟斤拷值 : 锟缴癸拷锟斤拷锟斤拷1,失锟杰凤拷锟斤拷0 *******************************************************************************************/ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ { - UINT16 i;/*循环变量*/ + UINT16 i;/*循锟斤拷锟斤拷锟斤拷*/ Fsfb_Lnk_Info_Node_Stru *pLnkMngrStack = NULL; UINT8 retVal =0; - StackClear(&s->stack); /* 永返回真*/ + StackClear(&s->stack); /* 锟斤拷锟斤拷锟斤拷锟斤拷*/ pLnkMngrStack = (Fsfb_Lnk_Info_Node_Stru *)malloc(sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum); if(pLnkMngrStack == NULL) { - /*打印打印*/ + /*锟斤拷印锟斤拷印*/ retVal = 0; return retVal; } @@ -889,11 +889,11 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ ComMemSet((UINT8*)pLnkMngrStack, sizeof(Fsfb_Lnk_Info_Node_Stru) * s->maxNodeNum, 0x00); } for (i = 0;i < s->maxNodeNum;i++) - { /*压入totalsize个节点*/ + { /*压锟斤拷totalsize锟斤拷锟节碉拷*/ if(ComPushStack(s,(STACK_DATA_TYPE)&pLnkMngrStack[i]) != 1) { retVal = 0; - return retVal;/*压入节点失败*/ + return retVal;/*压锟斤拷诘锟绞э拷锟*/ } else { @@ -905,97 +905,97 @@ static UINT8 FsfbInitLnkMngrStack(ComStackElement *s)/* %RELAX */ } /*********************************************************************** - * 方法名 : ReadQueueData - * 功能描述 : 对接收到的数据进行相关处理。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : ReadQueueData + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟皆斤拷锟秸碉拷锟斤拷锟斤拷锟捷斤拷锟斤拷锟斤拷卮锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pQueueData QueueStruct* IN 从应用接收到数据的队列 - * MaxLen UINT16 IN 最大数据 - * RecordArray UINT8* INOUT 记录数组 + * pQueueData QueueStruct* IN 锟斤拷应锟矫斤拷锟秸碉拷锟斤拷锟捷的讹拷锟斤拷 + * MaxLen UINT16 IN 锟斤拷锟斤拷锟斤拷锟 + * RecordArray UINT8* INOUT 锟斤拷录锟斤拷锟斤拷 * RecordArraySize UINT16 - * pFsfbStruct FSFB_INFO_STRU * INOUT FSFB协议统一结构体 - * 返回值 : DataNode_WL* 临时报文链表表头 + * pFsfbStruct FSFB_INFO_STRU * INOUT FSFB协锟斤拷统一锟结构锟斤拷 + * 锟斤拷锟斤拷值 : DataNode_WL* 锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷头 ***********************************************************************/ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordArray, UINT16 RecordSize, const UINT8 netIdx,FSFB_INFO_STRU *pFsfbStruct) { UINT8 retVal = 0; UINT8 flag =0; - UINT16 index = 0; /* 数据标志位 */ + UINT16 index = 0; /* 锟斤拷锟捷憋拷志位 */ UINT8 destDevType =0; UINT8 destDevId =0; UINT16 desDevName =0; - UINT16 MsgLen = 0; /* 消息长度 */ + UINT16 MsgLen = 0; /* 锟斤拷息锟斤拷锟斤拷 */ UINT8 applyCat = 0; - UINT8 messageType =0; /* 消息类型 */ + UINT8 messageType =0; /* 锟斤拷息锟斤拷锟斤拷 */ UINT8 tmpBtd[2]={0}; - UINT32 rcvBtdSn = 0;/*接收到BTD帧的序列号*/ - UINT32 rcvOtherSn = 0;/*接收到其它帧的序列号*/ - const UINT8 SENDER_TYPE_QUE_POS = 0; /* 保存发送方类型的位置 */ - const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* 保存发送方Id的位置 */ - const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* 保存预留字节*/ + UINT32 rcvBtdSn = 0;/*锟斤拷锟秸碉拷BTD帧锟斤拷锟斤拷锟叫猴拷*/ + UINT32 rcvOtherSn = 0;/*锟斤拷锟秸碉拷锟斤拷锟斤拷帧锟斤拷锟斤拷锟叫猴拷*/ + const UINT8 SENDER_TYPE_QUE_POS = 0; /* 锟斤拷锟芥发锟酵凤拷锟斤拷锟酵碉拷位锟斤拷 */ + const UINT8 SENDER_ID_QUE_POS = SENDER_TYPE_QUE_POS+1; /* 锟斤拷锟芥发锟酵凤拷Id锟斤拷位锟斤拷 */ + const UINT8 SENDER_EMPTY_QUE_POS =SENDER_ID_QUE_POS+1; /* 锟斤拷锟斤拷预锟斤拷锟街斤拷*/ retVal =1; - /* 队列长度>2 */ + /* 锟斤拷锟叫筹拷锟斤拷>2 */ while(2 <= QueueStatus(pQueueData)) { - /* 队列节点格式 + /* 锟斤拷锟叫节碉拷锟绞 * ---------------------------------------------------------------------- - * 长度 | 发送方Type | 发送方ID | 预留字节| 具体消息的帧格式 - * 2字节| 1字节 | 1 字节 | 2bytes | + * 锟斤拷锟斤拷 | 锟斤拷锟酵凤拷Type | 锟斤拷锟酵凤拷ID | 预锟斤拷锟街斤拷| 锟斤拷锟斤拷锟斤拷息锟斤拷帧锟斤拷式 + * 2锟街斤拷| 1锟街斤拷 | 1 锟街斤拷 | 2bytes | * ----------------------------------------------------------------------- */ index=0; - QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* 扫描两个字节的长度 */ + QueueRead(2,pFsfbStruct->TmpDataBuff,pQueueData); /* 扫锟斤拷锟斤拷锟斤拷锟街节的筹拷锟斤拷 */ MsgLen = ShortFromChar(pFsfbStruct->TmpDataBuff); if((MsgLen+2) <= MaxLen) { - /* 读出一帧数据 */ + /* 锟斤拷锟斤拷一帧锟斤拷锟斤拷 */ retVal =QueueRead(MsgLen,pFsfbStruct->TmpDataBuff,pQueueData); if (retVal == 0) { - /* 读队列失败则队列剩下的数据大小小于MsgLen+2,则记录 */ -#ifdef FSFB_RECORD_ERR_ASCII /* 字符串格式 */ - PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* 读队列失败 */ + /* 锟斤拷锟斤拷锟斤拷失锟斤拷锟斤拷锟斤拷锟绞o拷碌锟斤拷锟斤拷荽锟叫⌒★拷锟組sgLen+2锟斤拷锟斤拷锟铰 */ +#ifdef FSFB_RECORD_ERR_ASCII /* 锟街凤拷锟斤拷锟斤拷式 */ + PrintFiles(RecordArray,RecordSize,"W:Write Que Err\n"); /* 锟斤拷锟斤拷锟斤拷失锟斤拷 */ #endif -#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 二进制 */ - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*读取数据帧长度错误*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*输入数据帧长度错误*/ +#ifdef FSFB_RECORD_SIMPLIFY_BIN /* 锟斤拷锟斤拷锟斤拷 */ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME_ERR); /*锟斤拷取锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ #endif break; } - /* 设备的Type*/ + /* 锟借备锟斤拷Type*/ destDevType = pFsfbStruct->TmpDataBuff[SENDER_TYPE_QUE_POS]; - /* 设备的ID */ + /* 锟借备锟斤拷ID */ destDevId = pFsfbStruct->TmpDataBuff[SENDER_ID_QUE_POS]; ComTypeId2DevName(destDevType,destDevId,&desDevName); SetNetsRecvPkgNum(pFsfbStruct, desDevName, netIdx); - /* 预留字节占两个*/ + /* 预锟斤拷锟街斤拷占锟斤拷锟斤拷*/ index = SENDER_EMPTY_QUE_POS+2; while((MsgLen-index)>0) { - /* 1个字节的Application Catory */ + /* 1锟斤拷锟街节碉拷Application Catory */ applyCat = pFsfbStruct->TmpDataBuff[index+FSFB_APP_CTGRY_POS]; - /* 1个字节 消息类型 */ + /* 1锟斤拷锟街斤拷 锟斤拷息锟斤拷锟斤拷 */ messageType = pFsfbStruct->TmpDataBuff[index+FSFB_MSG_TYPE_POS]; - PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*读取数据帧*/ - PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*帧种类*/ - PrintRecArrayByte(RecordArray, RecordSize, messageType); /*帧类型*/ - PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*设备类型ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*帧中源设备类型ID*/ - PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*帧中目的设备类型ID*/ - PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*帧序号*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_READ_FRAME); /*锟斤拷取锟斤拷锟斤拷帧*/ + PrintRecArrayByte(RecordArray, RecordSize, applyCat); /*帧锟斤拷锟斤拷*/ + PrintRecArrayByte(RecordArray, RecordSize, messageType); /*帧锟斤拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, desDevName); /*锟借备锟斤拷锟斤拷ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_SRC_ADD_POS])); /*帧锟斤拷源锟借备锟斤拷锟斤拷ID*/ + PrintRecArray2ByteB(RecordArray, RecordSize, ShortFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_DEST_ADD_POS])); /*帧锟斤拷目锟斤拷锟借备锟斤拷锟斤拷ID*/ + PrintRecArray4ByteB(RecordArray, RecordSize, LongFromCharLE(&pFsfbStruct->TmpDataBuff[index + FSFB_TC_POS])); /*帧锟斤拷锟*/ switch(messageType) { case FSFB_SSE_MSG: - /* 分析SSE帧 */ + /* 锟斤拷锟斤拷SSE帧 */ if(applyCat == APPLCAT_BTM) { rcvOtherSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); @@ -1017,11 +1017,11 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr retVal = FsfbAnalysisSsrMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=SSR_SIZE; - /* 对SSR帧开始分析 */ + /* 锟斤拷SSR帧锟斤拷始锟斤拷锟斤拷 */ break; case FSFB_TSD_MSG: - /* 不可能接收到 */ - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷锟杰斤拷锟秸碉拷 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=TSD_SIZE; break; case FSFB_ABT_MSG: @@ -1032,26 +1032,26 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr index +=ABT_SIZE; break; case FSFB_SBT_MSG: - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=SBT_SIZE; break; case FSFB_BTC_MSG: - /* 如果收到直接丢弃 */ + /* 锟斤拷锟斤拷盏锟街憋拷佣锟斤拷锟 */ index +=BTC_SIZE; break; case FSFB_EBT_MSG: - /* 分析EBT数据 */ + /* 锟斤拷锟斤拷EBT锟斤拷锟斤拷 */ retVal =FsfbAnalysisEbtMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); index +=EBT_SIZE; break; case FSFB_BTD_MSG: - /* 数据有效性检查*/ + /* 锟斤拷锟斤拷锟斤拷效锟皆硷拷锟*/ rcvBtdSn = LongFromCharLE(&pFsfbStruct->TmpDataBuff[index+FSFB_TC_POS]); retVal = ReadRpHandleQueueData(desDevName,rcvBtdSn,&pFsfbStruct->RpInfoStru); if(1 == retVal) { - /* 将数据数据,更新链路状态并将其输出 */ + /* 锟斤拷锟斤拷锟斤拷锟斤拷锟捷o拷锟斤拷锟斤拷锟斤拷路状态锟斤拷锟斤拷锟斤拷锟斤拷锟 */ retVal =FsfbAnalysisBtdMsg(desDevName,applyCat,&pFsfbStruct->TmpDataBuff[index],pFsfbStruct,pFsfbStruct->RecordArray,pFsfbStruct->RecordArraySize); if(1 == retVal) { @@ -1066,12 +1066,12 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } else { - retVal=1;/*对于不合法BTD帧,只是将其丢弃,不会造成宕机*/ + retVal=1;/*锟斤拷锟节诧拷锟较凤拷BTD帧锟斤拷只锟角斤拷锟戒丢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟藉椿锟*/ } } else { - /* 丢弃该帧数据 */ + /* 锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷 */ retVal=1; } index +=BTD_SIZE; @@ -1087,36 +1087,36 @@ static UINT8 ReadQueueData(QueueStruct *pQueueData,UINT16 MaxLen,UINT8 *RecordAr } } else - {/*将此帧数据丢掉*/ + {/*锟斤拷锟斤拷帧锟斤拷锟捷讹拷锟斤拷*/ QueueElementDiscard(MsgLen,pQueueData); - PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*输入数据帧长度错误*/ - PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*输入数据帧长度*/ + PrintRecArrayByte(RecordArray, RecordSize, IN_FRAME_LEN_ERR); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ + PrintRecArray2ByteB(RecordArray, RecordSize, MsgLen); /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟斤拷*/ } } return retVal; } /*********************************************************************** - * 方法名 : InitRedunStruct - * 功能描述 : 对冗余统一结构体进行初始化处理。 - * 输入参数 : - * 参数名 类型 输入输出 描述 + * 锟斤拷锟斤拷锟斤拷 : InitRedunStruct + * 锟斤拷锟斤拷锟斤拷锟斤拷 : 锟斤拷锟斤拷锟斤拷统一锟结构锟斤拷锟斤拷谐锟绞硷拷锟斤拷锟斤拷锟斤拷锟 + * 锟斤拷锟斤拷锟斤拷锟 : + * 锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟 锟斤拷锟斤拷 * -------------------------------------------------------------- - * pFsfbStruct const FSFB_INFO_STRU* IN FSFB层统一结构体 - * pRedunInfoStru RPHANDLE_INFO_STRU * IN 冗余层统一结构体 + * pFsfbStruct const FSFB_INFO_STRU* IN FSFB锟斤拷统一锟结构锟斤拷 + * pRedunInfoStru RPHANDLE_INFO_STRU * IN 锟斤拷锟斤拷锟酵骋伙拷峁癸拷锟 * - * 返回值 : UINT8 0:错误返回 1:正常返回 + * 锟斤拷锟斤拷值 : UINT8 0锟斤拷锟斤拷锟襟返伙拷 1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 ***********************************************************************/ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INFO_STRU *pRedunInfoStru) { - UINT8 ret = 0;/*函数返回值*/ + UINT8 ret = 0;/*锟斤拷锟斤拷锟斤拷锟斤拷值*/ - pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* 本方设备ID */ + pRedunInfoStru->LocalType = pFsfbStruct->LocalType; /* 锟斤拷锟斤拷锟借备ID */ - pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* 最大报文书 */ - pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* 最大记录数 */ + pRedunInfoStru->MaxNumPerCycle = pFsfbStruct->MaxNumPerCycle; /* 锟斤拷锟斤拷锟斤拷锟 */ + pRedunInfoStru->RecordArraySize = pFsfbStruct->RecordArraySize; /* 锟斤拷锟斤拷录锟斤拷 */ pRedunInfoStru->MaxNumLink = pFsfbStruct->MaxNumLink; @@ -1125,11 +1125,11 @@ static UINT8 InitFsfbRedunStruct(const FSFB_INFO_STRU *pFsfbStruct, RPHANDLE_INF } /* -*功能描述: 清理各网收包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -*输入出参: 无 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷锟斤拷锟斤拷锟斤拷锟秸帮拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) { @@ -1145,29 +1145,29 @@ static void ClearNetsRecvPkgNum(FSFB_INFO_STRU* fsfb) } /* -*功能描述: 设置各网收包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -* const UINT32 dstDevName 目的设备名称 -* const UINT8 netIdx 网下标 -*输入出参: 无 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷锟矫革拷锟斤拷锟秸帮拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +* const UINT32 dstDevName 目锟斤拷锟借备锟斤拷锟斤拷 +* const UINT8 netIdx 锟斤拷锟铰憋拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, const UINT8 netIdx) { UINT16 i = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*参数检查*/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && ((0u == netIdx) || (1u == netIdx))) /*锟斤拷锟斤拷锟斤拷锟*/ { for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*找到*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*锟揭碉拷*/ { fsfb->NetsRecvPkgNums[i].NetsPkgNum[netIdx]++; break; } } - if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*未找到,添加一设备*/ + if ((i == fsfb->NetsRecvPkgNumsLen) && (fsfb->NetsRecvPkgNumsLen < fsfb->MaxNumLink)) /*未锟揭碉拷,锟斤拷锟斤拷一锟借备*/ { fsfb->NetsRecvPkgNums[fsfb->NetsRecvPkgNumsLen].DstDevName = dstDevName; ComMemSet((UINT8*)fsfb->NetsRecvPkgNums[i].NetsPkgNum, 2 * sizeof(UINT16), 0u); @@ -1178,28 +1178,28 @@ static void SetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT16 dstDevName, con } /* -*功能描述: 获取FSFB各网收到包数 -*输入参数: FSFB_INFO_STRU* fsfb fsfb变量 -* const UINT8 dstType 目的设备类型 -* const UINT8 dstId 目的设备ID -*输入出参: UINT16* redRecvPkgNum 红网收到包数 -* UINT16* blueRecvPkgNum 篮网收到包数 -*输出参数: 无 -*返回值: 无 +*锟斤拷锟斤拷锟斤拷锟斤拷: 锟斤拷取FSFB锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: FSFB_INFO_STRU* fsfb fsfb锟斤拷锟斤拷 +* const UINT8 dstType 目锟斤拷锟借备锟斤拷锟斤拷 +* const UINT8 dstId 目锟斤拷锟借备ID +*锟斤拷锟斤拷锟斤拷锟: UINT16* redRecvPkgNum 锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +* UINT16* blueRecvPkgNum 锟斤拷锟斤拷锟秸碉拷锟斤拷锟斤拷 +*锟斤拷锟斤拷锟斤拷锟: 锟斤拷 +*锟斤拷锟斤拷值: 锟斤拷 */ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, const UINT8 dstId, UINT16* redRecvPkgNum, UINT16* blueRecvPkgNum) { UINT16 i = 0u; UINT16 dstDevName = 0u; - if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /*参数检查*/ + if ((NULL != fsfb) && (NULL != fsfb->NetsRecvPkgNums) && (NULL != redRecvPkgNum) && (NULL != blueRecvPkgNum)) /*锟斤拷锟斤拷锟斤拷锟*/ { (*redRecvPkgNum) = 0u; (*blueRecvPkgNum) = 0u; ComTypeId2DevName(dstType, dstId, &dstDevName); - for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /*遍历*/ + for (i = 0; i < fsfb->NetsRecvPkgNumsLen; i++) /*锟斤拷锟斤拷*/ { - if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*找到*/ + if (dstDevName == fsfb->NetsRecvPkgNums[i].DstDevName) /*锟揭碉拷*/ { (*redRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[0]; (*blueRecvPkgNum) = fsfb->NetsRecvPkgNums[i].NetsPkgNum[1]; @@ -1210,5 +1210,5 @@ void FsfbProtclGetNetsRecvPkgNum(FSFB_INFO_STRU* fsfb, const UINT8 dstType, cons } /*-------------------------------------------------------------------- - * FSFB协议内部接口函数 End + * FSFB协锟斤拷锟节诧拷锟接口猴拷锟斤拷 End *--------------------------------------------------------------------*/ diff --git a/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h b/TSCP/src/protocol/fsfb/common_fsfb/FsfbRecordDelare.h index b22288c..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协议记录相关宏定义。 -* 使用注意: +* 锟侥硷拷锟紽sfbRecordDelare.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) /*输入SSR的SSE序号错误*/ -#define IN_ABT_STATUS (0x0C) /*输入ABT收状态*/ -#define IN_ABT_SVC_ERR (0x0D) /*输入ABT的SVC错误*/ -#define IN_ABT_OLD_ERR (0x0E) /*输入ABT旧序号错误*/ -#define IN_ABT_SSE_BTC (0x0F) /*输入ABT发SSE或BTC*/ -#define IN_BTD_LEN_ERR (0x10) /*输入BTD的长度错误*/ -#define IN_BTD_STATUS (0x11) /*输入BTD收状态*/ -#define IN_BTD_LOST_ERR (0x12) /*输入BTD丢失超容忍*/ -#define IN_BTD_DELAY_ERR (0x13) /*输入BTD延迟超容忍*/ -#define IN_BTD_SVC_ERR (0x14) /*输入BTD的SVC错误*/ -#define OUT_APP (0x15) /*输出数据*/ -#define OUT_FRAME_LEN_ERR (0x16) /*输出应用帧数据长度错误*/ -#define OUT_READ_ERR (0x17) /*输出读应用数据错误*/ -#define OUT_APP_FRAME (0x18) /*输出应用帧数据*/ -#define OUT_FRAME_TYPE_ERR (0x19) /*输出帧类型错误*/ -#define OUT_ADDR_ERR (0x1A) /*输出地址错误*/ -#define OUT_FIND_LNK_ERR (0x1B) /*输出查询链路错误*/ -#define OUT_INSERT_NODE_ERR (0x1C) /*输出插入节点错误*/ -#define OUT_INIT_NODE_ERR (0x1D) /*输出初始化节点错误*/ -#define OUT_DATA_TYPE (0x1E) /*输出数据类型*/ -#define OUT_LNK (0x1F) /*输出链路*/ -#define OUT_RP_LNK (0x20) /*输出RP链路*/ -#define OUT_ALL_LEN_ERR (0x21) /*输出数据总长度错误*/ +/* 锟斤拷锟斤拷锟斤拷志位 */ +#define FSFB_CYCLE_TAG (0xF4FB) /* FSFB锟斤拷锟斤拷锟节匡拷始锟斤拷识 */ +#define IN_RED (0x01) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ +#define IN_BLUE (0x02) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷*/ +#define IN_FRAME_LEN_ERR (0x03) /*锟斤拷锟斤拷锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ +#define IN_READ_FRAME_ERR (0x04) /*锟斤拷取锟斤拷锟斤拷帧锟斤拷锟饺达拷锟斤拷*/ +#define IN_READ_FRAME (0x05) /*锟斤拷取锟斤拷锟斤拷帧*/ +#define IN_CRC_ERR (0x06) /*CRC锟斤拷锟斤拷*/ +#define IN_NO_LNK (0x07) /*锟斤拷锟斤拷路*/ +#define IN_CAT_ERR (0x08) /*锟斤拷锟斤拷帧锟斤拷锟斤拷锟斤拷锟*/ +#define IN_ADDR_ERR (0x09) /*锟斤拷锟斤拷帧锟斤拷锟斤拷锟斤拷锟*/ +#define IN_SSR_STATUS_ERR (0x0A) /*锟斤拷锟斤拷SSR锟斤拷状态锟斤拷锟斤拷*/ +#define IN_SSR_SSE_TC_ERR (0x0B) /*锟斤拷锟斤拷SSR锟斤拷SSE锟斤拷糯锟斤拷锟*/ +#define IN_ABT_STATUS (0x0C) /*锟斤拷锟斤拷ABT锟斤拷状态*/ +#define IN_ABT_SVC_ERR (0x0D) /*锟斤拷锟斤拷ABT锟斤拷SVC锟斤拷锟斤拷*/ +#define IN_ABT_OLD_ERR (0x0E) /*锟斤拷锟斤拷ABT锟斤拷锟斤拷糯锟斤拷锟*/ +#define IN_ABT_SSE_BTC (0x0F) /*锟斤拷锟斤拷ABT锟斤拷SSE锟斤拷BTC*/ +#define IN_BTD_LEN_ERR (0x10) /*锟斤拷锟斤拷BTD锟侥筹拷锟饺达拷锟斤拷*/ +#define IN_BTD_STATUS (0x11) /*锟斤拷锟斤拷BTD锟斤拷状态*/ +#define IN_BTD_LOST_ERR (0x12) /*锟斤拷锟斤拷BTD锟斤拷失锟斤拷锟斤拷锟斤拷*/ +#define IN_BTD_DELAY_ERR (0x13) /*锟斤拷锟斤拷BTD锟接迟筹拷锟斤拷锟斤拷*/ +#define IN_BTD_SVC_ERR (0x14) /*锟斤拷锟斤拷BTD锟斤拷SVC锟斤拷锟斤拷*/ +#define OUT_APP (0x15) /*锟斤拷锟斤拷锟斤拷锟*/ +#define OUT_FRAME_LEN_ERR (0x16) /*锟斤拷锟接︼拷锟街★拷锟斤拷莩锟斤拷却锟斤拷锟*/ +#define OUT_READ_ERR (0x17) /*锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷荽锟斤拷锟*/ +#define OUT_APP_FRAME (0x18) /*锟斤拷锟接︼拷锟街★拷锟斤拷锟*/ +#define OUT_FRAME_TYPE_ERR (0x19) /*锟斤拷锟街★拷锟斤拷痛锟斤拷锟*/ +#define OUT_ADDR_ERR (0x1A) /*锟斤拷锟斤拷锟街凤拷锟斤拷锟*/ +#define OUT_FIND_LNK_ERR (0x1B) /*锟斤拷锟斤拷锟窖拷锟铰凤拷锟斤拷锟*/ +#define OUT_INSERT_NODE_ERR (0x1C) /*锟斤拷锟斤拷锟斤拷锟节碉拷锟斤拷锟*/ +#define OUT_INIT_NODE_ERR (0x1D) /*锟斤拷锟斤拷锟绞硷拷锟斤拷诘锟斤拷锟斤拷*/ +#define OUT_DATA_TYPE (0x1E) /*锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟*/ +#define OUT_LNK (0x1F) /*锟斤拷锟斤拷锟铰*/ +#define OUT_RP_LNK (0x20) /*锟斤拷锟絉P锟斤拷路*/ +#define OUT_ALL_LEN_ERR (0x21) /*锟斤拷锟斤拷锟斤拷锟斤拷艹锟斤拷却锟斤拷锟*/ -#define FSFB_RCV_TAG 0xF4 /* FSFB输入单元标识 */ -#define FSFB_OUT_TAG 0xF5 /* FSFB输出单元标识 */ -#define FSFB_MSG_IN_TAG 0x04 /* FSFB输入一帧消息起始标识(B 0000 0100) */ -#define FSFB_MSG_OUT_TAG 0x08 /* FSFB输出一帧消息起始标识(B 0000 1000) */ -#define FSFB_NODE_OUT_TAG 0x0C /* FSFB输出一帧消息起始标识(B 0000 1100) */ -#define FSFB_OUT_E_TAG 0x0F /* FSFB输出单元结束标识(B 0000 1111) */ +#define FSFB_RCV_TAG 0xF4 /* FSFB锟斤拷锟诫单元锟斤拷识 */ +#define FSFB_OUT_TAG 0xF5 /* FSFB锟斤拷锟斤拷锟皆拷锟绞 */ +#define FSFB_MSG_IN_TAG 0x04 /* FSFB锟斤拷锟斤拷一帧锟斤拷息锟斤拷始锟斤拷识(B 0000 0100) */ +#define FSFB_MSG_OUT_TAG 0x08 /* FSFB锟斤拷锟揭恢★拷锟较拷锟绞硷拷锟绞(B 0000 1000) */ +#define FSFB_NODE_OUT_TAG 0x0C /* FSFB锟斤拷锟揭恢★拷锟较拷锟绞硷拷锟绞(B 0000 1100) */ +#define FSFB_OUT_E_TAG 0x0F /* FSFB锟斤拷锟斤拷锟皆拷锟斤拷锟斤拷锟绞(B 0000 1111) */ /************************************************************************ - * 错误码编码原则,协议错误码一共16bit - * D15~D12:保留 - * D11~D10:错误等级 - * D9~D8:模块位置 - * D7~D4:包括各个模块特有的错误,在模块不同时次4位代表的含义不同 - * 区别于队列链表等底层错误 - * D3~D0:函数出错处理,不论模块是否相同此4位代表的含义相同 + * 锟斤拷锟斤拷锟斤拷锟斤拷锟皆拷锟叫拷锟斤拷锟斤拷锟斤拷一锟斤拷16bit + * D15~D12锟斤拷锟斤拷锟斤拷 + * D11~D10锟斤拷锟斤拷锟斤拷燃锟 + * D9~D8锟斤拷模锟斤拷位锟斤拷 + * D7~D4锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷模锟斤拷锟斤拷锟叫的达拷锟斤拷锟斤拷模锟介不同时锟斤拷4位锟斤拷锟斤拷锟侥猴拷锟藉不同 + * 锟斤拷锟斤拷锟节讹拷锟斤拷锟斤拷锟斤拷锟饺底诧拷锟斤拷锟 + * D3~D0锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷模锟斤拷锟角凤拷锟斤拷同锟斤拷4位锟斤拷锟斤拷锟侥猴拷锟斤拷锟斤拷同 ************************************************************************/ -/* 错误等级 */ +/* 锟斤拷锟斤拷燃锟 */ #define FSFB_ERR 0x0800 #define FSFB_WARN 0x0400 -/* 模块位置 */ -#define FSFB_RECEIVE 0x0200 /* 输入模块 */ -#define FSFB_OUTPUT 0x0100 /* 输出模块 */ +/* 模锟斤拷位锟斤拷 */ +#define FSFB_RECEIVE 0x0200 /* 锟斤拷锟斤拷模锟斤拷 */ +#define FSFB_OUTPUT 0x0100 /* 锟斤拷锟侥o拷锟 */ -/* 各模块特有错误 */ +/* 锟斤拷模锟斤拷锟斤拷锟叫达拷锟斤拷 */ #define FSFB_ERROR_NULL 0x0000 -/* 输入 */ -#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* 不是FSFB消息 */ -#define FSFB_MSG_OLD_ERR 0x0020 /* 非最新报文 */ -#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* 临时报文删除失败 */ -#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* 报文信息与通信节点信息不一致 */ -#define FSFB_MSG_LEN_ERR 0x0050 /* 报文长度不正 */ -#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* 报文格式不对 */ -#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* 不是对应SSR报文信息 */ -#define FSFB_MSG_REPLACE_ERR 0x0080 /* 覆盖节点失败 */ -#define FSFB_MSG_NO_REPLACENODE 0x0090 /* 不存在覆盖节点 */ -#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD解码失败 */ +/* 锟斤拷锟斤拷 */ +#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* 锟斤拷锟斤拷FSFB锟斤拷息 */ +#define FSFB_MSG_OLD_ERR 0x0020 /* 锟斤拷锟斤拷锟铰憋拷锟斤拷 */ +#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* 锟斤拷时锟斤拷锟斤拷删锟斤拷失锟斤拷 */ +#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* 锟斤拷锟斤拷锟斤拷息锟斤拷通锟脚节碉拷锟斤拷息锟斤拷一锟斤拷 */ +#define FSFB_MSG_LEN_ERR 0x0050 /* 锟斤拷锟侥筹拷锟饺诧拷锟斤拷 */ +#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* 锟斤拷锟侥革拷式锟斤拷锟斤拷 */ +#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* 锟斤拷锟角讹拷应SSR锟斤拷锟斤拷锟斤拷息 */ +#define FSFB_MSG_REPLACE_ERR 0x0080 /* 锟斤拷锟角节碉拷失锟斤拷 */ +#define FSFB_MSG_NO_REPLACENODE 0x0090 /* 锟斤拷锟斤拷锟节革拷锟角节碉拷 */ +#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD锟斤拷锟斤拷失锟斤拷 */ #define FSFB_MSG_CRC_ERR 0x00B0 -/* 输出 */ -#define FSFB_DBGET_ERR 0x0050 /* 数据库查询错误 */ -/* 函数出错处理,底层处理错误 */ -#define FSFB_QUEUE_READ 0x0001 /* 队列读有错 */ -#define FSFB_QUEUE_WRITE 0x0002 /* 队列写有错 */ -#define FSFB_QUEUE_INTEGRITY 0x0003 /* 队列中数据不完整(包括scan有错,应用给出错误)*/ -#define FSFB_LNK_PUSH 0x0004 /* 链路管理表节点压栈错误 */ -#define FSFB_LNK_POP 0x0005 /* 序列号缓存链表节点出栈错误 */ +/* 锟斤拷锟 */ +#define FSFB_DBGET_ERR 0x0050 /* 锟斤拷锟捷匡拷锟窖拷锟斤拷锟 */ +/* 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟阶层处锟斤拷锟斤拷锟斤拷 */ +#define FSFB_QUEUE_READ 0x0001 /* 锟斤拷锟叫讹拷锟叫达拷 */ +#define FSFB_QUEUE_WRITE 0x0002 /* 锟斤拷锟斤拷写锟叫达拷 */ +#define FSFB_QUEUE_INTEGRITY 0x0003 /* 锟斤拷锟斤拷锟斤拷锟斤拷锟捷诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷scan锟叫达拷锟斤拷应锟矫革拷锟斤拷锟斤拷锟斤拷*/ +#define FSFB_LNK_PUSH 0x0004 /* 锟斤拷路锟斤拷锟斤拷锟斤拷锟节碉拷压栈锟斤拷锟斤拷 */ +#define FSFB_LNK_POP 0x0005 /* 锟斤拷锟叫号伙拷锟斤拷锟斤拷锟斤拷锟节碉拷锟秸伙拷锟斤拷锟 */ diff --git a/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-姝e父鏁版嵁.zip b/鏁版嵁/FS_1_20260305_113139-姝e父鏁版嵁.zip new file mode 100644 index 0000000..560e752 --- /dev/null +++ b/鏁版嵁/FS_1_20260305_113139-姝e父鏁版嵁.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49d48512d71d26285f75c43735172f5a0c0f7c288b8e31b844de466cf56bfd06 +size 8986695