📄 toneapp.~c
字号:
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 + -