while(1)
//从消息队列中获取要要处理的消息
bosMsgQReceive( &tpdState.msgQId, &msgBuf );
//如果ENDPT主任务已经要求退出,则回应ACK并退出
if ( status == BOS_STATUS_RESET )
bosTaskResetAck();
return;
if ( status == BOS_STATUS_EXIT )
return;
lineId = msgBuf.buffer[1]; //获取线路ID
//通知监控模块,当前资线路处于激活状态
hbUpdatePatientState( tpdState.hbId[lineId], HBSTATE_ACTIVE );
//处理信号请求
processSignal( msgBuf.buffer[0], lineId, msgBuf.buffer[2], msgBuf.buffer[3] )
switch( signal )
case TPD_CTL_SIGNAL_LINE_RESET: //线路复位
casDriver = boardHalCasGetDriver( lineId ); //获取CAS驱动对象
//线路复位
tpdChanReset(lineId);
tpdDischargeVoltage( chan ); //去除该线路上的电压
bosSleep( 1000 );
hvg6816Reset(chan); //复位HVG控制块
bosSleep( 1000 );
//根据当前摘挂机状态复位SLIC控制模式
if ( xdrvSlicIsOffhook( pSlicDriver[chan] ) )
xdrvSlicModeControl( pSlicDriver[chan], XDRV_SLIC_MODE_LCF );
else
xdrvSlicModeControl( pSlicDriver[chan], XDRV_SLIC_MODE_STANDBY );
case TPD_CTL_SIGNAL_PROV_TESTS:
case TPD_CTL_SIGNAL_NOPROV_TESTS: //线路诊断测试,不需要PROV属性文件
tpdState.testStart = value; //记载诊断类型,如REC
//复位结果信息
tpdState.testStop = 0;
tpdState.testValid = 0;
tpdState.testResult = 0;
memset(tpdState.testValue, 0, sizeof(tpdState.testValue));
//如果当前线路正在使用,并且没有设计强制测试标记,则返回失败
if (( bActive ) && !( tpdState.testStart & TPD_CTL_TEST_FORCE ))
tpdState.testStart = 0;
tpdState.callback( TPD_CTL_EVENT_TEST_DONE, TPD_MIB_SET, NULL,
lineId );
return ( TPD_CTL_FAILURE );
//通知测试在进行中
tpdState.callback( TPD_CTL_EVENT_TEST_IN_PROGRESS, TPD_MIB_SET, NULL,
lineId );
//TDP测试启动
tpdTestingSetup( lineId );
tpdCasDisable( chan ); //关闭CAS通道服务
//设置SLIC驱动到摘机控制模式
xdrvSlicModeControl( pSlicDriver[chan], XDRV_SLIC_MODE_LCF );
bosSleep( 40 );
tpdDisableYFilter( chan ); //关闭APM Y过滤器
//进行如下几种类型测试,暂不关心:
//TPD_CTL_TEST_HAZ_POT
//TPD_CTL_TEST_FOR_EMF
//TPD_CTL_TEST_PTC_CHECK
//……
//进行如下几种类型测试,暂不关心:
// TPD_CTL_TEST_TG_SHORT
// TPD_CTL_TEST_RG_SHORT
// TPD_CTL_TEST_TR_SHORT
//……
//进行TPD_CTL_TEST_REC_OFFHOOK测试,暂不关心
//……
//进行REN测试
if(( tpdState.testStart & TPD_CTL_TEST_REN ) && !( tpdState.testStop & TPD_CTL_TEST_REN ))
//运行测试程序
tpdRunDropTests( lineId, XDRV_TPD_RUN_DROP_RING, &dropRslt );
//如果执行REN测试后,REN值在合法的范围内则标记测试结果
if (((( dropRslt.dropRngRslt.RENValue1 * 1000 ) + dropRslt.dropRngRslt.RENValue2 ) > ( TPD_MIN_MILLIRENS ))
&& ((( dropRslt.dropRngRslt.RENValue1 * 1000 )
+ dropRslt.dropRngRslt.RENValue2 ) < ( TPD_MAX_MILLIRENS )))
tpdState.testResult |= TPD_CTL_TEST_REN;
//标记校验标记,当前一次测试会进行几种类型,这里根据校验标记与
//各测试结果进行比较,如果位相同则表示测试成功。
tpdState.testValid |= TPD_CTL_TEST_REN;
//记录测试结果,用于上报给应用层
report.ren = ( dropRslt.dropRngRslt.RENValue1 * 1000 ) +
dropRslt.dropRngRslt.RENValue2;
//TDP测试停止
tpdTestingShutdown( lineId, tpdState.isEndptEnabled[lineId] );
//复位HVG模块及CAS通道任务
if (isEnabled)
if ( !hvg6816IsEnabled( chan ) )
hvg6816Start( chan );
tpdCasEnable( chan );
else
hvg6816Stop(chan);
tpdCasDisable( chan );
tpdEnableYFilter( chan ); //开启APM的Y 过滤器
//进行TPD_CTL_TEST_OFFHOOK测试,暂不关心
//……
//上报测试结果
tpdState.callback( TPD_CTL_EVENT_TEST_VALID, TPD_MIB_SET,
&tpdState.testValid, lineId );
memcpy(tpdState.testValue, &report, sizeof(report));
tpdState.callback( TPD_CTL_EVENT_TEST_VALUE, TPD_MIB_SET,
tpdState.testValue, lineId );
case TPD_CTL_SIGNAL_PC15_TESTS: //PC5线路诊断测试
//测试结果复位
tpdState.testClear = 0;
tpdState.testValid = 0;
tpdState.testResult = 0;
//如果当前线路在使用,则返回测试失败
if ( bActive )
tpdState.testStart = 0;
tpdState.callback( TPD_CTL_EVENT_PC_TEST_START, TPD_MIB_SET,
&tpdState.testStart, lineId );
tpdState.callback( TPD_CTL_EVENT_TEST_DONE, TPD_MIB_SET, NULL,
lineId );
return ( TPD_CTL_FAILURE );
// TDP测试启动,上面已经描述
tpdTestingSetup( lineId );
//进行如下几种测试,暂不关心
//TPD_CTL_TEST_PC_FOREIGN_VOLTAGE
// TPD_CTL_TEST_PC_HAZARDOUS_POTENTIAL
//……
//TDP测试停止,上面已经描述
tpdTestingShutdown( lineId, tpdState.isEndptEnabled[lineId] );
//返回测试结果,上报给用户
tpdState.testStart = 0;
tpdState.callback( TPD_CTL_EVENT_PC_TEST_START, TPD_MIB_SET,
&tpdState.testStart, lineId );
tpdState.callback( TPD_CTL_EVENT_PC_TEST_VALID, TPD_MIB_SET,
&tpdState.testValid, lineId );
tpdState.callback( TPD_CTL_EVENT_PC_TEST_RESULT, TPD_MIB_SET,
&tpdState.testResult, lineId );
tpdState.callback( TPD_CTL_EVENT_TEST_DONE, TPD_MIB_SET, NULL, lineId );
case TPD_CTL_SIGNAL_CALIBRATION_TESTS: //信号校准测试
//如果当前线路在使用,则返回错误
if ( bActive )
return ( TPD_CTL_FAILURE );
//进行校准测试,目前该功能不可用,没有对应测试代码
tpdRunDropTests( lineId, XDRV_TPD_RUN_DROP_CALIBRATION, &dropRslt );
//返回测试结果,上报到用户侧
tpdState.callback( TPD_CTL_EVENT_CALIBRATION_DONE, TPD_MIB_SET,
&dropRslt.dropCalRslt.RngVolOffset, lineId );
//通知监控模块,当前资线路处于去激活状态
hbUpdatePatientState( tpdState.hbId[lineId], HBSTATE_INACTIVE );
ENDPT_410_tpdTaskMain
最新推荐文章于 2014-11-05 13:30:40 发布