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

📄 toneapp.~c

📁 DTMF收发芯片88L89完美驱动(Arm,SDT251环境)
💻 ~C
📖 第 1 页 / 共 4 页
字号:
***********************************************************************/
#if 0
int	tone_App_Data_Buf_Init(TONE_APP_DATA_BUF_t *ToneBuf, UINT2 num)
{

	int i;
	STATUS status;

	//
	//初始化控制表中的语音数据空间
	//
	for (i=TONE_ID_KEYS; i<=TONE_ID_DTMF; i++)
	{	
		//
		//初始化HFC基本缓存
		//
		status = tone_App_Data_Buf_Init_HFC(ToneBuf, i);
		if(status!=NU_SUCCESS)
		{
			PRINTINFO("tone_App_Data_Buf_Init_HFC failed.");		
			return -1;
		}
		
		//
		//初始化ARM基本缓存
		//
		status = tone_App_Data_Buf_Init_ARM(ToneBuf, i);		
		if(status!=NU_SUCCESS)
		{
			PRINTINFO("tone_App_Data_Buf_Init_ARM failed.");
			return -1;
		}
	}

	//
	//初始化非控制表中的语音数据空间
	//
	//
	//ToneBuf[TONE_ID_BUSY].pBuf_HFC = ToneBuf[TONE_ID_DIAL].pBuf_HFC;
	ToneBuf[TONE_ID_BUSY].pBuf_ARM = ToneBuf[TONE_ID_DIAL].pBuf_ARM;//忙音数据就是拨号音数据
			
	return NU_SUCCESS;
}
#endif

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Data_Buf_Deinit"         数据缓存.释放          
*
***********************************************************************/
int tone_App_Data_Buf_Deinit(TONE_APP_DATA_BUF_t *ToneBuf, UINT2 num)
{
	int i;

	//
	//释放控制表中的语音数据空间
	//
	for (i=TONE_ID_KEYS; i<TONE_ID_DIAL ; i++)
	{
		NU_free(ToneBuf[i].pBuf_HFC);
		NU_free(ToneBuf[i].pBuf_ARM);
	}

	return NU_SUCCESS;
}

#if 0
/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Data_Buf_Init_HFC"     
*
***********************************************************************/
extern int tone_App_Data_Buf_Init_HFC(TONE_APP_DATA_BUF_t * ToneBuf, int id)		//读入HFC数据
{
	int fd;
	STATUS status;

	//
	//跳过无需分配的控制空间
	//	
	if (strcmp(ToneBuf[id].pFilename_HFC, "")==0)
	{
		return NU_SUCCESS;	//
	}

	//
	//打开磁盘存储空间
	//		
	fd = NU_Open((char *)ToneBuf[id].pFilename_HFC,(PO_BINARY|PO_RDONLY), PS_IREAD);
	if (fd<0)
	{//文件无法打开
		PRINTERRR("tone_App_Data_Buf_Init_HFC: NU_Open: %s", ToneBuf[id].pFilename_HFC);		
		
		//
		//如果进入这一分支,则程序与数据不匹配,关闭磁盘存储空间
		//	
		NU_Close(fd);				
		return -1;
	}

	//
	//分配内存空间
	//
	ToneBuf[id].pBuf_HFC = (UINT1 *)NU_malloc(ToneBuf[id].iBuf); 
	if (ToneBuf[id].pBuf_HFC==0)
	{
		PRINTERRR("tone_App_Data_Buf_Init_HFC: NU_malloc: %s, len: %d", ToneBuf[id].pFilename_HFC, ToneBuf[id].iBuf);				
		return -1;
	}
	
	//
	//读入磁盘数据到内存空间
	//
	status = NU_Read(fd, (char *)ToneBuf[id].pBuf_HFC, ToneBuf[id].iBuf); 
	if (status<NU_SUCCESS)
	{
		PRINTERRR("tone_App_Data_Buf_Init_HFC: NU_Read: file:%s, len:%d, rtn: %d", ToneBuf[id].pFilename_HFC, ToneBuf[id].iBuf, status);		
		return -1;		
	}

	//
	//关闭磁盘存储空间
	//
	NU_Close(fd);					
		
	return NU_SUCCESS;
}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Data_Buf_Init_ARM"     
*
***********************************************************************/
extern int tone_App_Data_Buf_Init_ARM(TONE_APP_DATA_BUF_t * ToneBuf, int id)	//读入ARM数据
{
	int fd;
	STATUS status;
	
	//
	//跳过无需分配的控制空间
	//		
	if (strcmp(ToneBuf[id].pFilename_ARM, "")==0)
	{
		return NU_SUCCESS;	//
	}
	
	//
	//打开磁盘存储空间
	//			
	fd = NU_Open((char *)ToneBuf[id].pFilename_ARM,(PO_BINARY|PO_RDONLY), PS_IREAD);
	if (fd<0)
	{//文件无法打开
		PRINTERRR("tone_App_Data_Buf_Init_ARM: NU_Open: %s", ToneBuf[id].pFilename_ARM);
		
		NU_Close(fd);
		return -1;		
	}
			
	//
	//分配内存空间
	//
	ToneBuf[id].pBuf_ARM = (UINT1 *)NU_malloc(ToneBuf[id].iBuf); 	
	if (ToneBuf[id].pBuf_ARM==0)
	{//未分配到内存
		PRINTERRR("tone_App_Data_Buf_Init_HFC: NU_malloc: %s, len: %d", ToneBuf[id].pFilename_ARM, ToneBuf[id].iBuf);						
		return -1;		
	}		
	
	//
	//读入磁盘数据到内存空间
	//	
	status = NU_Read(fd, (char *)ToneBuf[id].pBuf_ARM, ToneBuf[id].iBuf); 
	if (status<NU_SUCCESS)
	{
		PRINTERRR("tone_App_Data_Buf_Init_ARM: NU_Read: %s", ToneBuf[id].pFilename_ARM);		
		return -1;			
	}
	
	//
	//关闭磁盘存储空间
	//
	NU_Close(fd);					
		
	return NU_SUCCESS;
}
#endif


/**********************************************************************
*                                                                      
*  FUNCTION		"tone_Device_Buf_Initialize"      FIFO缓存.初始化          
*
***********************************************************************/
int tone_App_Device_Buf_Init(TONE_APP_DEVICE_INFO_t * buffer)
{
	//STATUS status;
	//PRINTFLOW("Begin: tone_App_Device_Buf_Init");
	
	//
	//分配设备缓存空间
	//
	buffer->iBuf = TONE_BUFFER;	//最大的需要处理长度
	buffer->pBuf = (UINT1 *) NU_malloc(buffer->iBuf); 
	memset(buffer->pBuf, 0, buffer->iBuf);
	buffer->iBuf = 0;	

	if (buffer->pBuf == 0)
	{
		PRINTERRR("NU_malloc.");
		LogError("Error %s L %d\n",__FILE__,__LINE__);
		return -1;
	}

	//PRINTFLOW("Enddd: tone_App_Device_Buf_Init");	
	return NU_SUCCESS;
}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Device_Buf_Deinit"         FIFO缓存.释放          
*
***********************************************************************/
int tone_App_Device_Buf_Deinit(TONE_APP_DEVICE_INFO_t * buffer)
{

	//PRINTFLOW("Begin: tone_App_Device_Buf_Deinit");
	
	//
	//释放设备缓存空间
	//
	NU_free(buffer->pBuf);

	//PRINTFLOW("Enddd: tone_App_Device_Buf_Deinit");
	return NU_SUCCESS;
}

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Process_Ctrl"        控制消息处理
*
***********************************************************************/
int tone_App_Process_Ctrl	(RtnMSG r_msg)
{
	
	switch(r_msg.msg_data[0])
	{
		case PHONE_CTRL_OFF:		//HFC2GCI	HFC2ST	ST2HFC	
			PhDr_Iocntl(0, CNTLID_CONNECT_B1_HFC2GCI, 0);
			PhDr_Iocntl(0, CNTLID_CONNECT_B1_HFC2ST, 0);
			//PhDr_Iocntl(0, CNTLID_CONNECT_B1_ST2HFC, 0);						
			break;

		case PHONE_CTRL_ON:		//ST2GCI	GCI2ST	GCI2HFC		
			PhDr_Iocntl(0, CNTLID_CONNECT_B1_ST2GCI, 0);
			PhDr_Iocntl(0, CNTLID_CONNECT_B1_GCI2ST, 0);
			//PhDr_Iocntl(0, CNTLID_CONNECT_B1_GCI2HFC, 0);						
			break;

		default:
			PRINTERRR("err MSG_TONE_ISDN_UIMM msg_data[0]");
			LogError("Error %s L %d\n",__FILE__,__LINE__);
			break;
	
	}

	return 0;
}				

/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Select_Way"        智能选择通路         
*
***********************************************************************/
//int  tone_App_Select_Pass(int orient )
int  tone_App_Select_Pass( RtnMsg _msg )
{
	int pass = 0;
	int status;

	PRINTFLOW("tone_App_Select_Pass");

	if( _msg.msg_code == MSG_TONE_DTMF_UIMM )
	{
		return 0;
	}
	
	status = GetARMCodecStatus(CodecWrite);
	if (status==TRUE)
	{
		PRINTINFO("pass = TONE_PASS_ARM_PHONE");
		pass = TONE_PASS_ARM_PHONE;	
	}
	else
	{
		PRINTINFO("pass = TONE_PASS_ERROR");
		pass = TONE_PASS_ERROR;
	}

	return pass;
}


int  tone_App_Select_Data(RtnMSG _msg)
{
	STATUS status;
		
	PRINTFLOW("tone_App_Select_Data ARM");		
	//控制信息			
	status = tone_App_Get_Ctrl(&gTONE_App_Device_Info_ARM, _msg);	
	
	//数据信息			
	status = tone_App_Get_Data(&gTONE_App_Device_Info_ARM, _msg);	

	return status;
}



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

	App_Device->idTone   = r_msg.msg_code - MSG_TONE;	//消息	
	App_Device->idOrient = r_msg.msg_data[0];
	
	id = App_Device->idTone;
				
	App_Device->idChannel= r_msg.msg_data[2];
	App_Device->idMode   = TONE_MODE_ID_WRITE;

	App_Device->iBuf	 = gTONE_Data_Buf_Main[id].iBuf; //缓存


	App_Device->iLoop_Period	= gTONE_Data_Buf_Main[id].iLoop_Period;	
	App_Device->iLoop_Series	= gTONE_Data_Buf_Main[id].iLoop_Series;	
	
	App_Device->iPeriod_Send = gTONE_Data_Buf_Main[id].iPeriod_Send;	
	App_Device->iPeriod_Tone = gTONE_Data_Buf_Main[id].iPeriod_Tone;

	return NU_SUCCESS;
}




/**********************************************************************
*                                                                      
*  FUNCTION		"tone_App_Get_Data"        
*
***********************************************************************/
int  tone_App_Get_Data(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:
			status = NU_SUCCESS;
			break;

		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 switch");
			LogError("Error %s L %d\n",__FILE__,__LINE__);
			status = -1;
			break;
	}

	return status;

⌨️ 快捷键说明

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