ENDPT_410_PstnEventProcess

state = GetEndptStateFromVHD( pstnEvt->vhdHdl );	//获取线路对象

switch ( pstnEvt->pEventInfo->event )
case PSTN_CTL_EVT_CPTONE_TIMEOUT :	//摘机后等待播号音超时
	//给用户上报等待进展音超时事件
	(*endptConfig.notify)( state->endptArchive, -1, EPEVT_CPTONETIMEOUT, NULL, 0, -1 );

case PSTN_CTL_EVT_CALL_SETUP_COMPLETE :	//呼叫完成
	if( state->offHook == VRG_TRUE)	//已经摘机
		//还未与FXS口关联
		if( (state->isFxsFxoCnxEstablished == VRG_FALSE) && (state->routedFxsLineId != 
		state->lineId) )
			//将PSTN线路VHD与FXS线路VHD相连
			ConnectSB( state->lineId, state->routedFxsLineId );
			
			state->isFxsFxoCnxEstablished = VRG_TRUE;		//标记已经关联FXS口
			
			//设置摘机来显检测
			classRxConfigure( state->pstnVhdHdl, CLASS_MSG_OFFHOOK_CLID, 
			endptConfig.country )
			
			xdrvLedCtrl(state->lineId, 1);	//开启PSTN线路LED显示
		
		//上报呼叫完成
		(*endptConfig.notify)( state->endptArchive, -1, EPEVT_OPCOMPLETE, NULL, 0 , -1);
		
case PSTN_CTL_EVT_VALID_DTMFCLID:			//检测到有效来显
case PSTN_CTL_EVT_PARTIAL_DTMFCLID:		//检测到部分来显
	dtmfClidInfo = (PSTN_CTL_CLID_EVENT_INFO *)pstnEvt->pEventInfo->pInfo;
	
	//COPY来显号码
	strncpy( vrgClidRxData.number, dtmfClidInfo->clidData.callingNumber, 
	sizeof(vrgClidRxData.number) );
	
	//匿名或出错来显
	if( dtmfClidInfo->clidData.infoRecieved == DTMFCLIDRX_INFO_PRIVATE )
     	vrgClidRxData.reasonNoNumber = 'P';
        strncpy( vrgClidRxData.number, "Private", sizeof(vrgClidRxData.number) );
	else if( dtmfClidInfo->clidData.infoRecieved == DTMFCLIDRX_INFO_UNAVAILABLE )
    	vrgClidRxData.reasonNoNumber = 'O';
        strncpy( vrgClidRxData.number, "Unavailable", sizeof(vrgClidRxData.number) );
else if( dtmfClidInfo->clidData.infoRecieved == DTMFCLIDRX_INFO_ERROR )
   		vrgClidRxData.reasonNoNumber = 'E'; 
strncpy( vrgClidRxData.number, "Error", sizeof(vrgClidRxData.number) );
else if( dtmfClidInfo->clidData.infoRecieved == DTMFCLIDRX_INFO_NONE )
if( strlen(dtmfClidInfo->clidData.callingNumber) == 0 )
    		vrgClidRxData.reasonNoNumber = 'O';
        	strncpy( vrgClidRxData.number, "Unavailable", sizeof(vrgClidRxData.number) );
	
	//上报检测到DTMF来显事件
	(*endptConfig.notify)( state->endptArchive, -1, EPEVT_DTMF_CLIDRX, 
(void *)&vrgClidRxData, sizeof(vrgClidRxData), 0 );
	
case PSTN_CTL_EVT_INVALID_DTMFCLID:	//检测到无效的来显
	//仅一条打印信息
	VRG_LOG_NOTICE(( VRG_LOG_MOD_EPT, "PstnEventCallback: 
	PSTN_CTL_EVT_INVALID_DTMFCLID"));
	
//释放信号量,用于应答
bosSemGive( &vrgPstnSem ); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值