⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toneapp.~c

📁 DTMF收发芯片88L89完美驱动(Arm,SDT251环境)
💻 ~C
📖 第 1 页 / 共 4 页
字号:
			case MSG_TONE_DTMF_UIMM:	//双频音	
				//			
				//双频消息预处理
				//
				/* DTMF sent to phone is treated as key tone */
				if( r_msg.msg_data[0] >= TONE_OUT_PHONE )
				{
					r_msg.msg_code = MSG_TONE_KEYS_UIMM;
					r_msg.msg_data[0] = TONE_OUT_PHONE;
					status = tone_App_Pre_Msg_Keys(r_msg);
				}
				else
				{
					status = tone_App_Pre_Msg_Dtmf(r_msg); 
				}
				
				switch(status)
				{
					case TONE_FIFO_ADDED:		//已经加入队列
					
						PRINTINFO("tone_App_Pre_Msg_Dtmf: rtn: TONE_FIFO_ADDED");
						
						continue;						
						break;

					case TONE_FIFO_NOT_NEED:	//无需加入队列
					
						PRINTINFO("tone_App_Pre_Msg_Dtmf: rtn: TONE_FIFO_NOT_NEED");
						
						break;
	
					default:			//处理过程中有错误
					
						PRINTERRR("tone_App_Pre_Msg_Dtmf err");
						LogError("Error %s L %d\n",__FILE__,__LINE__);				
						continue;
				}
				
				goto tone;		//暂时,消息定义不合理的原因
				break;		
			
			case MSG_TONE_TIMER_ARM_DELAY:		//按键延时到	
			
				PRINTINFO("MSG_TONE_TIMER_ARM_DELAY: ", r_msg.msg_data[0], r_msg.msg_data[1],  r_msg.msg_data[2]);
				//
				//如果缓存消息处理完,则关闭ARM延时定时器
				//
				if (r_msg.msg_data[0]==0)
				{
					PRINTINFO("NU_Control_Timer: TONE_Timer_ARM_Delay,  NU_DISABLE_TIMER");
					
					status = NU_Control_Timer(&TONE_Timer_ARM_Delay,  NU_DISABLE_TIMER);
					
					continue;
				}

				goto tone;
				break;							

			case MSG_TONE_TIMER_HFC_DELAY:		//双频延时到
				//
				//如果缓存消息处理完,则关闭HFC延时定时器
				//		
				if (r_msg.msg_data[0]==0)
				{
					PRINTINFO("NU_Control_Timer: TONE_Timer_HFC_Delay,  NU_DISABLE_TIMER");		
					
					status = NU_Control_Timer(&TONE_Timer_HFC_Delay,  NU_DISABLE_TIMER);
					
					continue;
				}			
				goto tone;
				break;
				
//提示音消息-播放消息				
			case MSG_TONE_REMV_UIMM:	//取卡提示音	
			case MSG_TONE_CHGE_UIMM:	//换卡提示音	
			case MSG_TONE_RING_UIMM:	//被叫振铃音	
			case MSG_TONE_PUBL_UIMM:	//公话标示音	
			
			case MSG_TONE_DIAL_UIMM:	//拨号音	10006
			case MSG_TONE_BUSY_UIMM:	//繁忙音	10007
			
			/* BEGIN, 2002-05-27, YanCJ */
			/* PURPOSE: 增加呼台提示音消息处理*/
			case MSG_TONE_CALL_UIMM:	//呼台音	10009
			/* END */
			
tone:				
				//按键消息恢复原貌		
				if (r_msg.msg_code == MSG_TONE_TIMER_ARM_DELAY)
				{
					r_msg.msg_code = MSG_TONE_KEYS_UIMM;
				}

				if (r_msg.msg_code == MSG_TONE_TIMER_HFC_DELAY)
				{
					r_msg.msg_code = MSG_TONE_DTMF_UIMM;
					/* receive message from tone_HISR_Timer_HFC_Delay() */
					if(DTMF_Flag == false)
					{
						DTMF_Flag = true;
					}					
				}
				
				PRINTINFO("really tone_App_Process: msg_code:%d",  r_msg.msg_code);

				//
				//智能选择通路			
				//			
				pass = tone_App_Select_Pass (r_msg);				
				//PRINTINFO("tone_App_Select_Pass: %d",  pass);	
				
				if (pass == TONE_PASS_ERROR)	//没有可用通路
				{
					PRINTERRR("TONE_PASS_ERROR");					
					continue;					
				}
				//
				//选择信息到缓存结构中
				//
				status = tone_App_Select_Data(r_msg);
				if (status != NU_SUCCESS)	//消息有问题
				{
					PRINTERRR("tone_App_Select_Data: %d",  status);					
					continue;					
				}		

				//
				//输出数据
				//
				status = tone_App_Send_Data(r_msg);
				if (status != NU_SUCCESS)	//控制有问题
				{
					PRINTERRR("tone_App_Send_Data: %d",  status);						
					continue;					
				}				
				
				break;


//提示音消息-停止消息
			//
			//关闭设备消息
			//
			case MSG_TONE_NULL_UIMM:			//关闭曲目10000
				
				//
				//关闭设备选择
				//
				switch(r_msg.msg_data[0])
				{
					case TONE_ORIENT_ID_LINE:	//	1		
						/* BEGIN, 2002-05-23, YanCJ */
						/* PURPOSE: 只要收到停止线路发声的消息,就需要清空双频音缓存*/				
						//
						//双频音消息缓存置空
						//
						TONE_HFC_Msg_Rsv.current =0;	
						/* END */
						
						//
						//关闭HFC定时器
						//
						//status = NU_Control_Timer(&TONE_Timer_HFC_Start, NU_DISABLE_TIMER);
						//status = NU_Control_Timer(&TONE_Timer_HFC_Stop,  NU_DISABLE_TIMER);
						status = NU_Control_Timer(&TONE_Timer_HFC_Delay,  NU_DISABLE_TIMER);

						//
						//关闭HFC设备
						//
						//status = HFC_Codec_Close (r_msg.msg_data[2]);
						break;	
						
					case TONE_ORIENT_ID_PHONE:	//	2
						//
						//关闭145481应用激励			2002-05-08, modified, 控制有低层封装
						//
						//PhDr_Close_codec_A_for_app();
						/* begin 2003-10-29 */
						/* invoke codec_open(), to match codec_close() below */
						gTONE_App_Device_Info_ARM.idCodec = Codec_Open(CodecWrite, r_msg.msg_data[0]);							
						/* end */						
						//
						//按键音消息缓存置空
						//
						TONE_ARM_Msg_Rsv.current =0;	
						
						//break;		//not need	
						
					case TONE_ORIENT_ID_SPEAK:	//	4
					case TONE_ORIENT_ID_BUZZER:	//	8
						//
						//关闭ARM定时器
						//									
						status = NU_Control_Timer(&TONE_Timer_ARM_Start, NU_DISABLE_TIMER);
						status = NU_Control_Timer(&TONE_Timer_ARM_Stop,  NU_DISABLE_TIMER);
						status = NU_Control_Timer(&TONE_Timer_ARM_Delay,  NU_DISABLE_TIMER);
						
						//
						//关闭ARM设备
						//
 						status = Codec_Close (CodecWrite, r_msg.msg_data[0], gTONE_App_Device_Info_ARM.idCodec);
						break;	

					default:			//全部关闭
						//关闭HFC定时器和设备
						//status = NU_Control_Timer(&TONE_Timer_HFC_Start, NU_DISABLE_TIMER);
						//status = NU_Control_Timer(&TONE_Timer_HFC_Stop,  NU_DISABLE_TIMER);

						/* begin 2003-10-29 */
						/* invoke codec_open(), to match codec_close() below */
						gTONE_App_Device_Info_ARM.idCodec = Codec_Open(CodecWrite, r_msg.msg_data[0]);							
						/* end */						

						status = NU_Control_Timer(&TONE_Timer_HFC_Delay,  NU_DISABLE_TIMER);
				
						//status = HFC_Codec_Close (r_msg.msg_data[2]);		

						//关闭ARM定时器和设备	
						status = NU_Control_Timer(&TONE_Timer_ARM_Start, NU_DISABLE_TIMER);
						status = NU_Control_Timer(&TONE_Timer_ARM_Stop,  NU_DISABLE_TIMER);
						status = NU_Control_Timer(&TONE_Timer_ARM_Delay,  NU_DISABLE_TIMER);						
						
 						status = Codec_Close (CodecWrite, TONE_ORIENT_ID_PHONE, gTONE_App_Device_Info_ARM.idCodec);
	
						break;
				}
				break;

//控制设备消息
			//定时器消息:
/*
			case MSG_TONE_TIMER_HFC_START:	//	10100
				status = tone_Proc_Timer_HFC_Expire_Start(&gTONE_App_Device_Info_HFC);		
				break;		
				
			case MSG_TONE_TIMER_HFC_STOP:	//	
				status = tone_Proc_Timer_HFC_Expire_Stop (&gTONE_App_Device_Info_HFC);			
				break;		
*/				
			case MSG_TONE_TIMER_ARM_START:	//	
				status = tone_Proc_Timer_ARM_Expire_Start(&gTONE_App_Device_Info_ARM);							
				break;		
				
			case MSG_TONE_TIMER_ARM_STOP:	//
				status = tone_Proc_Timer_ARM_Expire_Stop (&gTONE_App_Device_Info_ARM);
				break;	

			case MSG_TONE_TIMER_MNTN:	//
				status = tone_Proc_Timer_Mntn_Expire ();
				break;	

//			case MSG_TONE_HFC_LISR:	//
//				status = tone_Proc_LISR_HFC();
//				break;	
				
			//其他消息 无效
			default:
				PRINTERRR("tone_App_Process: %8d msg !!!!!", r_msg.msg_code);
				break;					
		}
	}

	//FIFO缓存.释放
 	//status = tone_App_Device_Buf_Deinit(&gTONE_App_Device_Info_HFC);
	status = tone_App_Device_Buf_Deinit(&gTONE_App_Device_Info_ARM);

	PRINTFLOW("Enddd: tone_App_Process");
	return NU_SUCCESS;
} 

//***********************************************************************
//  divideHintSnd -  split the hintsnd.dat
//	
//  
//  This routine is called to divide the hintSnd.dat
//
//
//  Returns:   OK : success;
//			   ERR: fail;
//  
//***********************************************************************
int	tone_App_Data_Init(TONE_APP_DATA_BUF_t *ToneBuf)
{
	PCFD	fdr;	
	//PCFD	fdw;
	short	numSnd;
	int		i = 0;
	UINT2	SndCode;
	UINT4	SndSize=0;
	//char *	Sndbuf;

	//
	//打开提示音文件
	//
	if ( (fdr = NU_Open(TONE_FILE, PO_RDONLY | PO_NOSHAREANY, PS_IREAD)) < 0)
	{
		PRINTERRR("tone_App_Data_Init() ---- NU_Open(): %s!", TONE_FILE);
		LogError("Error %s L %d\n",__FILE__,__LINE__);
		return -1;
	}

	//
	//读入提示音个数
	//
	if(NU_Read(fdr, (VOID *)&numSnd, 2 ) != 2)
	{
		NU_Close(fdr);
		return -1;		
	}
	
	PRINTINFO("tone_App_Data_Init() ---- NU_Read(): numSnd =  %d ", numSnd);
	
	if(numSnd <= 0)
	{
		NU_Close(fdr);
		return -1;
	}

	//
	//读入提示音内容
	//
	for (i = 0 ; i < numSnd; i++)
	{
		//
		//读入提示音码点
		//
		if(NU_Read(fdr, (VOID *)&SndCode, sizeof(SndCode) ) != sizeof(SndCode))
		{
			NU_Close(fdr);
			return -1;
		}
		PRINTINFO("tone_App_Data_Init() ----  NU_Read(): SndCode = %d !!!", SndCode);
		if(  SndCode >= 9)
		{
			PRINTERRR("tone_App_Data_Init() ----  NU_Read(): unwanted SndCode !!!" );
			LogError("Error %s L %d\n",__FILE__,__LINE__);
			continue;
		}
		//
		//读入指定提示音大小
		//
		if(NU_Read(fdr, (VOID *)&SndSize, sizeof(SndSize)) != sizeof(SndSize))
		{
			NU_Close(fdr);
			return -1;
		}
		PRINTINFO("tone_App_Data_Init() ----  NU_Read(): i = %d ; SndSize =  %d", i, (int)SndSize);
		ToneBuf[SndCode].iBuf = SndSize;
			
		//
		//分配提示音空间
		//读入提示音数据
		//
		switch(ToneBuf[SndCode].iDevice)
		{
/*
			case TONE_DEVICE_CODEC_HFC:
				if ( (ToneBuf[SndCode].pBuf_HFC = (UINT1 *) NU_malloc( SndSize)) == NULL)
				{
					PRINTERRR("tone_App_Data_Init() ----  NU_malloc(): failer!!!");
					LogError("Error %s L %d\n",__FILE__,__LINE__);
					NU_Close(fdr);
					return -1;
				}			
				if ( SndSize != (int) NU_Read(fdr, (VOID *)ToneBuf[SndCode].pBuf_HFC, SndSize ) )
				{
					PRINTERRR("tone_App_Data_Init() ---- NU_Read(): unwanted NU_Read size!!!");							
					LogError("Error %s L %d\n",__FILE__,__LINE__);
					NU_Close(fdr);
					return -1;
				}	
				
				break;
*/				
			case TONE_DEVICE_CODEC_ARM:
				if ( (ToneBuf[SndCode].pBuf_ARM = (UINT1 *) NU_malloc( SndSize)) == NULL)
				{
					PRINTERRR("tone_App_Data_Init() ----  NU_malloc(): failer!!!");
					LogError("Error %s L %d\n",__FILE__,__LINE__);
					NU_Close(fdr);
					return -1;
				}							
				if ( SndSize != (int) NU_Read(fdr, (VOID *)ToneBuf[SndCode].pBuf_ARM, SndSize ) )
				{
					PRINTERRR("tone_App_Data_Init() ---- NU_Read(): unwanted NU_Read size!!!");							
					LogError("Error %s L %d\n",__FILE__,__LINE__);
					NU_Close(fdr);
					return -1;
				}			
				
				break;
				
			default:
				PRINTERRR("TONE_DEVICE_CODEC");
				LogError("Error %s L %d\n",__FILE__,__LINE__);
				break;

		}

	}

	NU_Close(fdr);

	//
	//按键音发送周期
	//双频音发送周期
	//
	ToneBuf[TONE_CODE_KEYS].iPeriod_Send = ToneBuf[TONE_CODE_KEYS].iBuf / TONE_KEYS_NUM / TONE_BYTES_PER_MS / TONE_MS_PER_TICK; // 12,800/16/8 /10 = 10
	ToneBuf[TONE_CODE_DTMF].iPeriod_Send = ToneBuf[TONE_CODE_DTMF].iBuf / TONE_DTMF_NUM / TONE_BYTES_PER_MS / TONE_MS_PER_TICK;// 10,240/16/8 /10 = 8
	
	//	
	//两个按键音之间间隔时间	
	//两个双频音之间间隔时间	
	//
	gTONE_Interval_KEYS 	= ToneBuf[TONE_CODE_KEYS].iPeriod_Send  + TONE_KEYS_TICKS_DELAY;		// 10 + 4 = 14
	gTONE_Interval_DTMF 	= ToneBuf[TONE_CODE_DTMF].iPeriod_Send  + TONE_DTMF_TICKS_DELAY;	// 8 + 4 = 12

	/* BEGIN, 2002-05-27, YanCJ */
	/* PURPOSE: 增加呼台提示音数据*/
	ToneBuf[TONE_ID_CALL].pBuf_ARM 	= ToneBuf[TONE_ID_CHGE].pBuf_ARM; 
	//ToneBuf[TONE_ID_CALL].iBuf 		= ToneBuf[TONE_ID_CHGE].iBuf 
	/* END */
	
	return NU_SUCCESS;
}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Data_Buf_Init"	数据缓存.初始化      
*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -