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

📄 toneapp.~c

📁 DTMF收发芯片88L89完美驱动(Arm,SDT251环境)
💻 ~C
📖 第 1 页 / 共 4 页
字号:
}

#if 0

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Get_Data_ARM"        
*
***********************************************************************/
int  tone_App_Get_Data_ARM(TONE_APP_DEVICE_INFO_t * App_Device, RtnMSG r_msg)
{
	int 	idNumber;
	int 	id;
	
	STATUS status;

	id = App_Device->idTone;

	switch (id)					//缓存内容	
	{
		case TONE_ID_KEYS:
		//case TONE_ID_DTMF:
			idNumber = Key_to_i(r_msg.msg_data[1]);
			if(idNumber <0)
			{
				PRINTERRR("err Number");
				LogError("Error %s L %d\n",__FILE__,__LINE__);
				return -1;
			}
			
			/* BEGIN, 2002-05-15, Yancj */
			/* PURPOSE: */
			App_Device->iBuf = gTONE_Data_Buf_Main[id].iPeriod_Send * TONE_MS_PER_TICK *TONE_BYTES_PER_MS;

			memcpy(	App_Device->pBuf, 
					gTONE_Data_Buf_Main[id].pBuf_ARM + idNumber * App_Device->iBuf, 
					App_Device->iBuf);
			/* END */
			
			status = NU_SUCCESS;
			 break;

		case TONE_ID_DIAL:
			if (r_msg.msg_data[1]>0)	//定制小周期循环次数
			{
				App_Device->iLoop_Series = r_msg.msg_data[1];
			}
			
			memcpy(	App_Device->pBuf, gTONE_Data_Buf_Main[id].pBuf_ARM, App_Device->iBuf);	
			status = NU_SUCCESS;			
			break;

		case TONE_ID_RING:
		case TONE_ID_REMV:

		case TONE_ID_CHGE:
		case TONE_ID_PUBL:
		case TONE_ID_BUSY:
			
		/* BEGIN, 2002-05-27, YanCJ */
		/* PURPOSE: 呼台提示音数据写入设备缓存中*/			
		case TONE_ID_CALL:		
		/* END */	
			
			if (r_msg.msg_data[1]>0)	//定制大周期循环次数
			{
				App_Device->iLoop_Period = r_msg.msg_data[1];
			}
			memcpy(	App_Device->pBuf, gTONE_Data_Buf_Main[id].pBuf_ARM, App_Device->iBuf);	
			status = NU_SUCCESS;			
			break;

		default:
			PRINTERRR("tone_App_Get_Data_ARM switch");
			LogError("Error %s L %d\n",__FILE__,__LINE__);
			status = -1;
			break;
	}

	return status;
}	

#endif

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Open_Device"        
*
***********************************************************************/
 int tone_App_Send_Data(RtnMsg _msg)
{
	STATUS status;

	switch( _msg.msg_code )
	{
		case MSG_TONE_DTMF_UIMM:
			//printf("before send DTMF, PBDR = %x ------------------\n", *(char *)0x80000001);
			status = DTMFWrite(_msg.msg_data[1], (int)g_wait_dtmf_send);
			printf("\nTONE --- DTMFWrite %c, status = %d >>>>>>>>>>>>>>>>>>>\n", _msg.msg_data[1], status);
			if(status != DTMF_TX_BUSY )
			{
				//DTMFClose();
				//((unsigned char *)pulPtr)[HwPortB] |= 0x18;
				//g_wait_dtmf_send = false;
			}
			break;

		case MSG_TONE_KEYS_UIMM:
		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:
		case MSG_TONE_BUSY_UIMM:
		case MSG_TONE_CALL_UIMM:		
			status = tone_App_Send_Data_ARM();					
			
			break;		

		default:
			PRINTERRR("tone_App_Send_Data switch");
			LogError("Error %s L %d\n",__FILE__,__LINE__);
			status = -1;
			break;
	}

	return status;
	
}


/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Send_Data_ARM"        
*
***********************************************************************/
 int tone_App_Send_Data_ARM(void)
{
	STATUS status;
	//int orient;
	
	PRINTFLOW("begin tone_App_Send_Data_ARM");
		
	//关闭定时器
	status = NU_Control_Timer(&TONE_Timer_ARM_Start, NU_DISABLE_TIMER);
	status = NU_Control_Timer(&TONE_Timer_ARM_Stop,  NU_DISABLE_TIMER);

	
	//status = AudioIsPlayAvailable();
	if (status!=NU_SUCCESS)
	{
		
		//return -1;
	}	

	//打开设备	
	gTONE_App_Device_Info_ARM.idCodec = Codec_Open(CodecWrite, gTONE_App_Device_Info_ARM.idOrient);				

	//printf ("gTONE_App_Device_Info_ARM.idCodec rtn: %d\n", gTONE_App_Device_Info_ARM.idCodec);
	
	//写入数据
	status = Codec_Write (	(char *)gTONE_App_Device_Info_ARM.pBuf, 
							 gTONE_App_Device_Info_ARM.iBuf, 
							 gTONE_App_Device_Info_ARM.iLoop_Series,
							 gTONE_App_Device_Info_ARM.idCodec);
	if (status!=NU_SUCCESS)
	{
		PRINTERRR("tone_App_Send_Data_ARM Codec_Write:%d", status);
		LogError("Error %s L %d\n",__FILE__,__LINE__);
		return -1;
	}
		
	//重置定时器
	
#if 1		
	status = NU_Reset_Timer(&TONE_Timer_ARM_Start,
							tone_HISR_Timer_ARM_Start,
							gTONE_App_Device_Info_ARM.iPeriod_Tone,
							gTONE_App_Device_Info_ARM.iPeriod_Tone,
							NU_ENABLE_TIMER);	
	
	status = NU_Reset_Timer(&TONE_Timer_ARM_Stop,
							tone_HISR_Timer_ARM_Stop,
							gTONE_App_Device_Info_ARM.iPeriod_Send,
							gTONE_App_Device_Info_ARM.iPeriod_Tone,
							NU_ENABLE_TIMER);

#endif

	PRINTFLOW("end tone_App_Send_Data_ARM");
	return NU_SUCCESS;
}


/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Pre_Msg_Keys"        预处理按键消息

1.无缓存标记,无播放标记,则直接播放。(不拦截)
2.无缓存标记,有播放标记,则加入缓存,启动缓存延时定时器。
3.有缓存标记,有播放标记,则加入缓存。
4.有缓存标记,无播放标记,则加入缓存。

***********************************************************************/
int tone_App_Pre_Msg_Keys(RtnMSG r_msg)
{
	STATUS status;
	
	//队列是否已满
	if (TONE_ARM_Msg_Rsv.current >= TONE_ARM_Msg_Rsv.size)	//缓存队列已满,抛弃
	{
		PRINTERRR("TONE_Msg_Rsv_Keys full");
		return -1;
	}
		
	if (TONE_ARM_Msg_Rsv.current < 0 )	//缓存队列已满,抛弃
	{
		PRINTERRR("TONE_Msg_Rsv_Keys err");
		return -1;
	}	
	
	status =   GetARMCodecStatus(CodecWrite);		
	
	if ((TONE_ARM_Msg_Rsv.current == 0) &&	(status == TRUE))		//队列为空或者设备为空
	{
		return TONE_FIFO_NOT_NEED;	
	}
	else			//排队		
	{
		TONE_ARM_Msg_Rsv.rtnMsg[TONE_ARM_Msg_Rsv.current].msg_data[0] = r_msg.msg_data[0];
		TONE_ARM_Msg_Rsv.rtnMsg[TONE_ARM_Msg_Rsv.current].msg_data[1] = r_msg.msg_data[1];
		TONE_ARM_Msg_Rsv.rtnMsg[TONE_ARM_Msg_Rsv.current].msg_data[2] = r_msg.msg_data[2];
		
		TONE_ARM_Msg_Rsv.current ++;
		
		status = NU_Control_Timer(&TONE_Timer_ARM_Delay,  NU_ENABLE_TIMER);	

		return TONE_FIFO_ADDED;		
	}		

}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Pre_Msg_Dtmf"        预处理按键消息

***********************************************************************/
int tone_App_Pre_Msg_Dtmf(RtnMSG r_msg)
{
	STATUS status;

	
	//队列是否已满
	if (TONE_HFC_Msg_Rsv.current >= TONE_HFC_Msg_Rsv.size)	//缓存队列已满,抛弃
	{
		PRINTERRR("TONE_HFC_Msg_Rsv full");
		return -1;
	}
	
	//队列队列操作有问题
	if (TONE_HFC_Msg_Rsv.current < 0)	//缓存队列已满,抛弃
	{
		PRINTERRR("TONE_HFC_Msg_Rsv point err");
		return -1;
	}
	
	status = GetHfcCodecStatus();	
	
	if ((TONE_HFC_Msg_Rsv.current == 0) && (status == DTMF_WRITE_STATE_IDLE)
		&& (DTMF_Flag == true))	//队列为空或者设备为空
	{
		return TONE_FIFO_NOT_NEED;	//可以直接播放
	}
	else		//排队		
	{
		
		TONE_HFC_Msg_Rsv.rtnMsg[TONE_HFC_Msg_Rsv.current].msg_data[0] = r_msg.msg_data[0];
		TONE_HFC_Msg_Rsv.rtnMsg[TONE_HFC_Msg_Rsv.current].msg_data[1] = r_msg.msg_data[1];
		TONE_HFC_Msg_Rsv.rtnMsg[TONE_HFC_Msg_Rsv.current].msg_data[2] = r_msg.msg_data[2];
		
		TONE_HFC_Msg_Rsv.current ++;
		
		status = NU_Control_Timer(&TONE_Timer_HFC_Delay,  NU_ENABLE_TIMER);
			
		return TONE_FIFO_ADDED;		
	}	
}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_HISR_Timer_ARM_Delay"          定时器.缓存按键  
*
***********************************************************************/
void tone_HISR_Timer_ARM_Delay(UNSIGNED id)
{
	STATUS	status;
	RtnMSG	s_msg;
	int i;

	PRINTINFO("TIMER: Begin: tone_HISR_Timer_ARM_Delay-----------current: %d", TONE_ARM_Msg_Rsv.current);

	s_msg.msg_len = 3;
	s_msg.msg_code = MSG_TONE_TIMER_ARM_DELAY;	
	
	if (TONE_ARM_Msg_Rsv.current <= 0)	//没有数据
	{
		PRINTINFO("tone_HISR_Timer_ARM_Delay current=0");
		s_msg.msg_data[0] = 0;	
	}
	else						//有数据
	{
		//if (gTONE_Time_ARM_Is_Playing== TONE_TIME_ARM_PLAYING_NO)		//检测设备是否有效

		status =   GetARMCodecStatus(CodecWrite);
		if (status == TRUE)	//设备可用	
		{
			s_msg.msg_data[0] = TONE_ARM_Msg_Rsv.rtnMsg[0].msg_data[0];
			s_msg.msg_data[1] = TONE_ARM_Msg_Rsv.rtnMsg[0].msg_data[1];
			s_msg.msg_data[2] = TONE_ARM_Msg_Rsv.rtnMsg[0].msg_data[2];
			
			//移位操作
			/* BEGIN, 2002-05-21, Yancj */
			/* PURPOSE: 多移了1位*/
			//for(i=0; i<TONE_ARM_Msg_Rsv.current; i++)
			for(i=0; i<TONE_ARM_Msg_Rsv.current-1; i++)
			/* END */
			{
				TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[0] = TONE_ARM_Msg_Rsv.rtnMsg[i+1].msg_data[0];
				TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[1] = TONE_ARM_Msg_Rsv.rtnMsg[i+1].msg_data[1]; 		
				TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[2] = TONE_ARM_Msg_Rsv.rtnMsg[i+1].msg_data[2] ;
#if 0
				printf("i:%d\tmsg_data[0]: %d\t msg_data[1]: %d\tmsg_data[2]: %d\n",
					i,
					TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[0] ,
					TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[1] ,
					TONE_ARM_Msg_Rsv.rtnMsg[i].msg_data[2] );
#endif
			}
			//printf("\n");
			TONE_ARM_Msg_Rsv.current--;
		}
		else
		{
			return;
		}
	}
	
	status = NU_Send_To_Pipe(&rtn_pipe[TONE], &s_msg, s_msg.msg_len + 4, NU_NO_SUSPEND);  
	if (status < NU_SUCCESS) 
	{
		PRINTERRR("ERRR: NU_Send_To_Pipe: %d. ", status);  
		LogError("Error %s L %d\n",__FILE__,__LINE__);
	}

	//PRINTFLOW("TIMER: Enddd: tone_HISR_Timer_ARM_Delay-------------");
	return;
}


/**********************************************************************
*                                                                      
*  FUNCTION		"tone_HISR_Timer_HFC_Delay"          定时器.缓存按键  
*
***********************************************************************/
void tone_HISR_Timer_HFC_Delay(UNSIGNED id)
{
	STATUS	status;
	RtnMSG	s_msg;
	int i;

	s_msg.msg_len = 3;
	s_msg.msg_code = MSG_TONE_TIMER_HFC_DELAY;	

	if (TONE_HFC_Msg_Rsv.current <= 0)	//没有数据
	{
		PRINTINFO("tone_HISR_Timer_HFC_Delay current=0");
		s_msg.msg_data[0] = 0;	
	}
	else						//有数据
	{
		//if (gTONE_Time_HFC_Is_Playing== TONE_TIME_HFC_PLAYING_NO)
		
		status = GetHfcCodecStatus();
		
		if (status == DTMF_WRITE_STATE_IDLE && DTMF_Flag == true) 	//无播放标记			
		{
			s_msg.msg_data[0] = TONE_HFC_Msg_Rsv.rtnMsg[0].msg_data[0];
			s_msg.msg_data[1] = TONE_HFC_Msg_Rsv.rtnMsg[0].msg_data[1];
			s_msg.msg_data[2] = TONE_HFC_Msg_Rsv.rtnMsg[0].msg_data[2];
			
			//移位操作
			/* BEGIN, 2002-05-21, Yancj */
			/* PURPOSE: 多移了1位*/
			//for(i=0; i<TONE_HFC_Msg_Rsv.current; i++)
			for(i=0; i<TONE_HFC_Msg_Rsv.current-1; i++)
			{
				TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[0] = TONE_HFC_Msg_Rsv.rtnMsg[i+1].msg_data[0];
				TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[1] = TONE_HFC_Msg_Rsv.rtnMsg[i+1].msg_data[1]; 		
				TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[2] = TONE_HFC_Msg_Rsv.rtnMsg[i+1].msg_data[2] ;

#if 0
				printf("i:%d\tmsg_data[0]: %d\t msg_data[1]: %d\tmsg_data[2]: %d\n",
					i,
					TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[0] ,
					TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[1] ,
					TONE_HFC_Msg_Rsv.rtnMsg[i].msg_data[2] );
#endif
			}
			//printf("\n");
			TONE_HFC_Msg_Rsv.current--;
			DTMF_Flag = false;
		}
		else
		{
			return;
		}
	}
	
	status = NU_Send_To_Pipe(&rtn_pipe[TONE], &s_msg, s_msg.msg_len + 4, NU_NO_SUSPEND); 
	
	if (status < NU_SUCCESS) 
	{
		PRINTERRR("ERRR: NU_Send_To_Pipe: %d. ", status);  
		LogError("Error %s L %d\n",__FILE__,__LINE__);
	}

	//PRINTFLOW("TIMER: Enddd: tone_HISR_Timer_HFC_Delay-------------");
	return;
}

⌨️ 快捷键说明

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