void KT_SetOutputDevice( uint8 device ) { if( L1Audio_CheckFlag( keytone.aud_id ) ) { KT_StopAndWait(); } AFE_SetOutputDevice( L1SP_KEYTONE, device ); }
static void wavRecOpenDeviceHandler( void *state ) { /*workaround for SPEECH DSP MAIN/AUX Mode Task in FCORE*/ #if !(defined(MT6573) || defined(MT6575) || defined(MT6577)) TONE_StopAndWait(); KT_StopAndWait(); #endif #ifdef BGSND_ENABLE if ((!AM_IsSpeechOn()) && (wav.sndOffHandler != NULL)) wav.sndOffHandler( wav.sndHdl ); #endif /*workaround for SPEECH DSP MAIN/AUX Mode Task in FCORE*/ if ( wav.ctrl->format == MEDIA_FORMAT_WAV_DVI_ADPCM_16K || wav.ctrl->format==MEDIA_FORMAT_PCM_16K ) AM_PCM16K_RecordOn_V2(wav.dedicated_mode, wav.ctrl->fc_aud_id); else AM_PCM8K_RecordOn_V2(wav.dedicated_mode, wav.ctrl->fc_aud_id); }
/***************************************************************************** * FUNCTION * TONE_Play * DESCRIPTION * This function is used to play comfort tones. * * PARAMETERS * tonelist - Tone list * RETURNS * None. * GLOBALS AFFECTED * None *****************************************************************************/ void TONE_Play( const L1SP_Tones *tonelist ) { if( L1Audio_CheckFlag( tone.aud_id ) ) return; if (tone.state != TONE_STATE_NONE) return; if( L1Audio_CheckFlag( keytone.aud_id ) ) { KT_StopAndWait(); } L1Audio_SetFlag( tone.aud_id ); tone.tonelist = tonelist; tone.fc_aud_id = L1Audio_FC_HookHandler( (void *)0, toneMsgHandler, 0, (FC_MEDIA_FORMAT_QTMF<<8)|MEDIA_OPERATE_PLAYBACK ); tone.state = TONE_STATE_IDLE; tone.isReentrance = false; tone.seqNum++; tonePlayOn( 0 ); AM_ToneOn(); }
Media_Status I2S_Open( void ){ #ifdef __I2S_UNIT_TEST__ kal_uint16 sr = Media_I2S_INPUT_MODE_SR_UT; #else kal_uint16 sr = Media_I2S_INPUT_MODE_SR; #endif #if defined(MT6256) || defined(MT6255) || defined(MT6250) || defined(MT6260) #if defined(__INTERAL_FM_VIA_I2S__) kal_uint8 isspkmute = 0; #endif #endif #if defined(__VIBRATION_SPEAKER_SUPPORT__) VIBR_Vibration_Deactivate(); #endif PcmSink_TerminateSound(); #if defined(__AUDIO_COMPONENT_SUPPORT__) Media_SetIsDSPDec(KAL_TRUE); // to bypass sink component #endif kal_trace( TRACE_FUNC, L1AUDIO_I2S_ENABLE, ASP_TYPE_I2SBypass, sr ); ASSERT( sr == 32000 || sr == 44100 || sr == 48000 ); ASSERT( I2S_RECORD_STATE_CLOSED == i2s.state); i2s.is_ON = KAL_TRUE; i2s.state = I2S_RECORD_STATE_INIT; i2s.sample_rate = sr; i2s.aud_id = L1Audio_GetAudioID(); #if defined(__BES_LOUDNESS_ON_I2S__) AudioPP_Loudness_Registry(); #endif #if defined(__AUDIO_DSP_LOWPOWER_V2__) #if defined(MT6256) || defined(MT6255) if (!APM_IsLoudnessOn()) #endif #if !(defined(MT6260) && defined(INTERNAL_ANTENNAL_SUPPORT)) AUDLP_Mode(KAL_TRUE, 1); #endif if(AUDLP_Check_LowPower_Status()) { L1Audio_SetFlag_MD2G( i2s.aud_id ); #if defined(MT6250) || defined(MT6260) AUDLP_Set_ClkSwitchMode(KAL_TRUE); AUDLP_SW_Trigger_Event_Setting(KAL_TRUE); AUDLP_SetClkSwitch_26M(KAL_TRUE); #endif } else L1Audio_SetFlag( i2s.aud_id ); #else L1Audio_SetFlag( i2s.aud_id ); #endif ktLock(); KT_StopAndWait(); TONE_StopAndWait(); AM_Force_VBI_END_IN_TASK(); Media_SetSampleRate(sr); Media_SetAudioFormat(MEDIA_FORMAT_UNKNOWN); *DSP_AUDIO_CTRL2 |= DP_PCM_R_DIS; *DSP_AUDIO_FLEXI_CTRL |= (FLEXI_VBI_ENABLE | FLEXI_SD_ENABLE); #if defined(MT6250) || defined(MT6260) *I2S_PLAYERROR_INFO = 0; *I2S_PLAYERROR_CONTROL = 0; #endif #if !defined(__CACHED_BASE_DSP__) DSP_DynamicDownload ( DDID_I2S ); #endif //should add a parameter to indicate input or output AFE_TurnOnEDI( 1, 1, L1SP_I2S_INPUT_SCALE >> 1 ); #if defined(__AUDIO_COMPONENT_SUPPORT__) i2s_sample_rate = i2s.sample_rate; ASSERT(i2s.ihdl==NULL); AudioRoute2Drain_Init(&i2s.ihdl, 0); AudioRoute2Drain_Start(i2s.ihdl); #endif //should not turn on output mode and input mode at the same time if( sr == 32000 ) sr = ASP_FS_32K; else if ( sr == 44100 ) sr = ASP_FS_44K; else sr = ASP_FS_48K; #if defined(MT6260) #if defined(__INTERAL_FM_VIA_I2S__) if(I2S_is_FM()) *HW_MISC_REG |=0x0001; #endif #endif #if defined(__INTERAL_FM_VIA_I2S__) if(!I2S_is_FM()) #endif I2S_Input_GPIO_TurnOn(); #if defined(MT6256) || defined(MT6255) || defined(MT6250) || defined(MT6260) #if defined(__INTERAL_FM_VIA_I2S__) if(!I2S_is_FM()) { if(!AFE_IsSpeakerMuted()) { AFE_MuteSpeaker(L1SP_AUDIO, KAL_TRUE); isspkmute = 1; } } #endif #endif #if defined(MT6250) L1Audio_HookHisrHandler(DP_D2C_I2S_REC_INT, I2S_DspIntHISR, 0); #endif #if defined(__AUDIO_COMPONENT_SUPPORT__) && !defined(MED_MODEM) PcmSink_DepopMute(400); //depop #endif AM_AudioPlaybackOn( ASP_TYPE_I2SBypass, sr ); #if defined(MT6256) || defined(MT6255) || defined(MT6250) || defined(MT6260) #if defined(__INTERAL_FM_VIA_I2S__) if(!I2S_is_FM()) { kal_sleep_task(45); if(isspkmute) AFE_MuteSpeaker(L1SP_AUDIO, KAL_FALSE); } #endif #endif return MEDIA_SUCCESS; }
kal_bool BT_PcmLoopbackTest(void) { kal_int16 i, count = 0; kal_uint16 *buf; kal_uint32 len = 0, acmLen = 0; kal_int32 magDB = 0; TD_Handle hdl; kal_uint16 *rb_base; AM_BluetoothOn(2);//2:open earphone mode, 1: open cordless mode AM_FlushQFunction(); kal_prompt_trace(MOD_L1SP, "after set,DP_VOL_OUT_PCM= %d",*DP_VOL_OUT_PCM); /*initialize*/ rb_base = (kal_uint16 *)get_ctrl_buffer(BTLB_BUF_LEN << 1); Media_SetBuffer( rb_base, BTLB_BUF_LEN ); TD_Init( &hdl, TARGET_TONE, BLOCK_SIZE); #ifdef BTLB_DEBUG pcmDebugCnt = 0; pcmDebugPtr = btlbPcmDebugBuf; #endif /*start tone_play and record*/ KT_Play(TARGET_TONE, 0, 0); /*play single tone , continuous play*/ Media_Record(MEDIA_FORMAT_PCM_8K, BTLB_Handler, (void *)0); for (i = 0 ; i < 100 ; i++)/*if delay is large, we should enlarge this waiting*/ { Media_GetReadBuffer(&buf ,&len); if ( len==0 ) kal_sleep_task(1); else{ if ( (len + acmLen) >= BLOCK_SIZE ){/*acumulated length >= BLOCK_SIZE*/ len = BLOCK_SIZE - acmLen;/*recount samples to fit block*/ } TD_ProcessBlock(&hdl, (kal_int16 *)buf, len); #ifdef BTLB_DEBUG { int j; for(j = 0 ; j < len ; j++ ) if( pcmDebugCnt < 80000 ) { *pcmDebugPtr++ = buf[j]; pcmDebugCnt ++; } } #endif Media_ReadDataDone( len ); acmLen += len; if ( acmLen >= BLOCK_SIZE){ magDB = TD_GetMagnitudeDB( &hdl ); kal_prompt_trace( MOD_L1SP, "magDB = %d", magDB); if( magDB > BTLB_TONE_MAG_DB_THRESHOLD ) count ++; TD_Reset( &hdl ); acmLen=0;//reset if ( count > 2) break; } } } #ifdef BTLB_DEBUG { int file_handle; kal_prompt_trace(MOD_L1SP, "prepare to dump pcm file"); kal_wsprintf(debugFile, "d:\\BTLBdebug.pcm"); file_handle = FS_Open(debugFile, FS_CREATE); if(file_handle > 0) { FS_Write( file_handle, (void *)btlbPcmDebugBuf, pcmDebugCnt << 1, NULL ); FS_Close(file_handle); kal_prompt_trace(MOD_L1SP, "finish dump pcm file BTLBdebug.pcm"); } else{ kal_prompt_trace(MOD_L1SP, "unable to dump file"); } } #endif KT_StopAndWait(); Media_Stop(); AM_BluetoothOff();//close earphone mode /*close loopback path, should be removed in the future*/ //*AFE_VAC_CON1 &= ~0x02; free_ctrl_buffer( rb_base ); if ( count > 2){ return true; }else return false; }