?? pmp_audio_driver.c
字號:
UINT16 SPMP_AUDIO_Stop( void )
{
UINT16 err;
// lanzhu@[12/26/2006]
err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_PLAY_STOP, (UINT8 *)NULL, (UINT16)NULL);
// 如果已經成功, 還需要判斷是否AUDIO TASK 已經真正結束
if ( !err )
{
// 檢測結束標志, 直到AUDIO TASK 真正結束
while ( !SPMP_AUDIO_GetOverFlag() )
{
osTimeDly( AUDIO_OVER_DELAY );
#ifdef QLZ_DEBUG_0208
sio_printf("\r\n ---- AUDIO 沒有結束, 等待一下!!!\r\n");
#endif
}
#ifdef QLZ_DEBUG_0208
sio_printf("\r\n ---- AUDIO 已經真正結束了!\r\n");
#endif
}
// 返回成功
return err;
}
/************************************************************************/
/* audio pause
input:
output:
0 成功, 非0值失敗
func:
note:
*/
/************************************************************************/
UINT16 SPMP_AUDIO_Pause( void )
{
// 進行音量的設定
return SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_PAUSE, (UINT8 *)NULL, (UINT16)NULL);
}
/************************************************************************/
/* audio resume
input:
void
output:
0 成功, 非0值失敗
func:
note:
*/
/************************************************************************/
UINT16 SPMP_AUDIO_Resume( void )
{
// 進行音量的設定
return SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_RESUME, (UINT8 *)NULL, (UINT16)NULL);
}
/************************************************************************/
/* 設定輸出的音量值
input:
UINT16 OutputValue
output:
0 成功, 非0值失敗
func:
設定 Codec, 啟動MP3 的播放
note:
*/
/************************************************************************/
UINT16 SPMP_AUDIO_SetOutputValue( UINT16 OutputValue )
{
UINT16 value,err;
value = OutputValue;
// 判斷輸入的參數是否越界
if (value > OUTPUT_VALUE_MAX ) {
value = OUTPUT_VALUE_MAX;
}
#ifdef QLZ_DEBUG_0127
sio_printf("\r\n ++++++++ 音量設定 ======= %d \r\n", OutputValue);
#endif
// 進行音量的設定
err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_VOLUME_SET,
(UINT8 *)&(value),
(UINT16)sizeof(value));
// 返回成功
return err;
}
extern void SPMP_Codec_ResetFlag( void );
extern void SPMP_AUDIO_SetCodec( void );
/*
* reset codec flag
*/
void SPMP_Codec_ResetFlag( void )
{
gCodecFlag = 0x00;
return;
}
/*
* get codec flag
*/
static UINT16 get_codec_flag( void )
{
return gCodecFlag;
}
/************************************************************************/
/* 進行CODEC 的設置
input:
void
output:
void
function:
進行CODEC 的設置
history:
[01/29/2007]
發現用戶通過界面第一次發生時, 還可以從SPEAKER 中聽到爆音
*/
/************************************************************************/
void SPMP_AUDIO_SetCodec( void )
{
if ( get_codec_flag() )
{
return;
}
#ifdef QLZ_DEBUG_0129
sio_printf("\r\n -- 進行CODEC 的真正設置!");
#endif
gCodecFlag ++;
if( 1==SPMP_SpeakOutGet() )
{
#ifdef QLZ_DEBUG_0129
sio_printf("\r\n -- 全通道設置!!!!");
#endif
audCodecSet(audioAppTbl, sizeof(audioAppTbl));
}
else
{
#ifdef QLZ_DEBUG_0129
sio_printf("\r\n -- 只有耳機,沒有SPEAKER!");
#endif
audCodecSet(audioAppTbl_t, sizeof(audioAppTbl_t));
}
return;
}
/************************************************************************/
/* 使能 SPEAKER
input:
void
output:
void
func:
判斷用戶是否設定打開SPEAKER 的功放, 判斷當前是否有耳機
如果用戶使能了功放, 并且沒有耳機, 打開 SPEAKER 的功放
history:
[01/27/2007] lanzhu 發現沒有考慮到耳機一直插入的狀況,
添加對耳機插入的判斷
FIX: mantis bug 6769
[01/27/2007] lanzhu 添加 發聲標志的設置
[01/29/2007] lanzhu 考慮到不同的TASK 在時間上沖突, 完善了該機制
*/
/************************************************************************/
void SPMP_SPEAKER_ENABLE( void )
{
UINT16 i;
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n >>> SPKER ENABLE!\r\n");
#endif
gSoundFlag = (BIT_USER_FLAG | BIT_SOUND_FLAG);
i = SPMP_SpeakOutGet();
// 只取決于用戶的設定和當時耳機的狀態
if ( i && ( HEADPHONE_OUT == SPMP_Get_HPStatus() ) ){
SPMP_Speaker_Set(i);
}
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n <<< SPKER ENABLE!\r\n");
#endif
return;
}
/*
*
*/
void SPMP_SPEAKER_ENABLE_EX( void )
{
UINT16 i;
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n >>> SPKER ENABLE EX!\r\n");
#endif
gSoundFlag |= BIT_SOUND_FLAG;
i = SPMP_SpeakOutGet();
// 只取決于用戶的設定和當時耳機的狀態
if ( i && ( HEADPHONE_OUT == SPMP_Get_HPStatus() ) ){
SPMP_Speaker_Set(i);
}
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n <<< SPKER ENABLE EX!\r\n");
#endif
return;
}
/************************************************************************/
/* 關閉 SPEAKER 的功放
input:
void
output:
void
func:
history:
[01/27/2007] 添加了一個判斷條件, 對耳機進行檢測
[01/29/2007] 添加 不同任務之間使用該函數的完善機制
*/
/************************************************************************/
void SPMP_SPEAKER_DISABLE( void )
{
UINT16 i;
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n >>> SPKER DISABLE!\r\n");
#endif
gSoundFlag = 0x00; // lanzhu add @[01/27/2007]
i = SPMP_SpeakOutGet();
#ifdef QLZ_DEBUG_0206
sio_printf(" i = 0x%x\r\n", i);
#endif
// 只取決于當前用戶的設定和當時耳機的狀態
if ( i && (HEADPHONE_OUT == SPMP_Get_HPStatus() ) )
{
SPMP_Speaker_Set( 0x00 );
}
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n <<< SPKER DISABLE!\r\n");
#endif
return;
}
/************************************************************************/
/* 按鍵音使用的關閉SPEAKER 的函數
input:
void
output:
void
func:
在播放按鍵音完成后, 關閉SPEAKER 的功放
*/
/************************************************************************/
void SPMP_SPEAKER_DISABLE_EX( void )
{
UINT16 i;
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n >>> SPKER DISABLE EX!\r\n");
#endif
if( gSoundFlag == (BIT_USER_FLAG |BIT_SOUND_FLAG) )
{
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n --- dis speak just ret!\r\n");
#endif
return;
}
// [02/06/2007] lanzhu add fix mantis bug 7342
if( HEADPHONE_OUT == SPMP_Get_HPStatus()){
SPMP_Speaker_Set( 0x00 );
}
#ifdef QLZ_DEBUG_0206
sio_printf("\r\n <<< SPKER DISABLE EX!\r\n");
#endif
return;
}
/*
*
*/
UINT16 SPMP_Get_SoundFlag( void )
{
return (gSoundFlag&BIT_SOUND_FLAG);
}
/************************************************************************/
/* MP3 playback start
input:
void
output:
0 成功, 非0值失敗
func:
設定 Codec, 啟動MP3 的播放
note:
[01/29/2007] 發現每次進行音頻播放時, 有CODEC 的設置動作,
不需要這樣做.
*/
/************************************************************************/
static UINT16 mp3_playback_start( void )
{
AUDIO_PLAY_ATTR audAttr;
// [01/29/2007] lanzhu marked
//SPMP_AUDIO_SetCodec( ); // 進行CODEC 的設置
// 設定播放的屬性
memset(&audAttr, 0x00, sizeof(audAttr));
audAttr.startSecond = 0;
audAttr.audioCodec.codectype = MCATCH_AUDIO_CODEC_INTERNAL;
// 啟動音頻播放
return SPMP_SendSignal_T( (UINT16)MCATCH_CMD_AUDIO_PLAY_START,
(UINT8 *)&(audAttr),
(UINT16)sizeof(AUDIO_PLAY_ATTR));
}
/************************************************************************/
/* 獲得音頻信息的指針
input:
void
output:
地址指針
func:
獲得 Audio 的地址指針
*/
/************************************************************************/
static UINT8 * ret_audio_buf_ptr( void )
{
return gpAudDataBuf;
}
/************************************************************************/
/* 設定AUDIO 結束標志
input:
flag [in] UINT16
0 沒有結束
非0 值 已經結束
output:
0 成功, 非0值失敗
func:
設定AUDIO 結束標志
note:
用于AUDIO PLAY 的真正結束, 以此來在2個AP之間擊西寧動作的協調
*/
/************************************************************************/
UINT16 SPMP_AUDIO_SetOverFlag( UINT16 flag )
{
// 首先將該位復位為空
gAudioOverFlag &= ~AUDIO_OVER_MASK;
if ( flag )
{
#ifdef QLZ_DEBUG_0208
sio_printf("\r\n 設定 AUDIO 真正結束 \r\n");
#endif
gAudioOverFlag |= AUDIO_OVER_MASK;
}
return APP_DRV_OK;
}
/************************************************************************/
/* 獲得AUDIO 結束標志
input:
void
output:
0 還沒有結束
非0值 已經真正結束
func:
通過此標志判斷 AUDIO 的動作是否真正結束
note:
*/
/************************************************************************/
UINT16 SPMP_AUDIO_GetOverFlag( void )
{
#ifdef QLZ_DEBUG_0208
sio_printf("\r\n Over Flag = 0x%x\r\n", gAudioOverFlag);
#endif
// 目前只使用 BIT0 來進行是否結束的標志
return (gAudioOverFlag & AUDIO_OVER_MASK);
}
/*
[03/07/2007] lanzhu add
input:
speaker_flag [in] 0 ear phone
非0 值 speaker
output:
void
func:
用于切換耳機和SPEAKER
*/
void SPMP_AUDIO_SetCodecPath( UINT16 speaker_flag )
{
if(speaker_flag)
{
audCodecSet(audioAppTbl, sizeof(audioAppTbl));
}
else{
audCodecSet(audioAppTbl_t, sizeof(audioAppTbl_t));
}
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -