ENDPT_410_tpdTaskMain

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 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值