void ToneLoopBackRec(void(*callback)( kal_uint8 *pBuf, kal_uint16 mode ), ToneLBR_Para *pstPara ) { #ifndef __L1_STANDALONE__ // avoid link error ASSERT(ToneLBR.uState == TLBR_STATE_IDLE); ASSERT(0xFFFF == ToneLBR.aud_id); ToneLBR.aud_id = L1Audio_GetAudioID(); L1Audio_SetEventHandler( ToneLBR.aud_id, toneLoopbackRecHandler ); ToneLBR.callback = callback; ToneLBR.uState = TLBR_STATE_INIT; ToneLBR.uSize = pstPara->uSize - (pstPara->uSize%BYTES_PER_FRAME); ToneLBR.pBuf = pstPara->pBuf; ToneLBR.uMode = pstPara->uMode; AFE_EnableToneLoopBackFlag( KAL_TRUE ); AM_EnableToneLoopBackFlag( KAL_TRUE ); if(pstPara->uMode) KT_SetOutputDevice( L1SP_LOUD_SPEAKER ); // loud speaker mode else KT_SetOutputDevice( L1SP_SPEAKER1 ); // normal mode kal_trace( TRACE_FUNC, L1AUDIO_TONE_LOOPBACK_REC_MODE, pstPara->uMode); KT_SetOutputVolume( pstPara->bAnalogSpkGain, 0 ); KT_Play( pstPara->uFreq, pstPara->uFreq, 0 ); KT_SetAmplitude( pstPara->uKT_AMP ); kal_sleep_task(30); // to ensure tone is stable // Activate 2-way PCM AM_DSP_SetSpeechUplinkDigitalGain(pstPara->uUL_DigGain); // *DP_VOL_IN_PCM = pstPara->uUL_DigGain; // uplink digital gain AM_DSP_SetSpeechDigitalGain(pstPara->uDL_DigGain); // *DP_VOL_OUT_PCM = pstPara->uDL_DigGain; AFE_MuteMicrophone(KAL_FALSE); // un-mute microphone L1SP_SetMicrophoneVolume( pstPara->uAnalogMicGain ); Media_SetOutputDevice( 0 ); PCM2WAY_Start( toneLoopBackRecHisr, 1 ); // voice #endif // #ifndef __L1_STANDALONE__ }
void I2SIN_SetOutputDevice( kal_uint8 device ) { kal_trace( TRACE_FUNC, L1AUDIO_I2S_SET_DEVICE, device); Media_SetOutputDevice( device ); }