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