static void pcmStrmOpenDevice( pcmStrmMediaHdl *ihdl ) { MHdl *hdl = (MHdl *)ihdl; ihdl->end_status = MEDIA_NONE; ihdl->mh.dsp_rb_base = 0; mhdlDisallowSleep( (MHdl*)ihdl ); if( ihdl->pcmStrm.is8KVoice ){ MHdl *hdl = (MHdl *)ihdl; FC_Buf *fcBufHdr; hdl->rbInfo.param = (void *)L1Audio_FC_GetAudioBufferHeader(); L1Audio_FC_WriteBufferToDSP( &hdl->rbInfo ); fcBufHdr = (FC_Buf *)hdl->rbInfo.param; SAC_SphPlayPar.pucRingBuf = fcBufHdr->pBuf; SAC_SphPlayPar.u4RingBufLen = fcBufHdr->uBufLength; SAC_SphPlayPar.pucWritePtr = fcBufHdr->pWrite; SAC_SphPlayPar.u4PlyMod = 1; SAC_SphPlayPar.u4WbPcm = 0; ihdl->mh.fc_aud_id = L1Audio_FC_HookHandler( (void *)ihdl, pcmStrmMsgHandler, 1, 0 ); if( L1SP_PCMPlayback_CheckFlag() ) SetSpeechEnhancement(true);//META taste function L1Audio_PutMessageAndWait(MSG_L1AUDIO2FAS_SPEECH_IDLE_PLAY_START, ihdl->mh.fc_aud_id, (kal_uint32)&SAC_SphPlayPar, KAL_TRUE ); AM_PCM8K_PlaybackOn( ); } else { hdl->rbInfo.fc_format = FC_MEDIA_FORMAT_PCM; hdl->rbInfo.fc_operation = MEDIA_OPERATE_PLAYBACK; { kal_uint16 msg16; msg16 = (hdl->rbInfo.fc_format << 8) | hdl->rbInfo.fc_operation; hdl->fc_aud_id = L1Audio_FC_HookHandler( (void *)hdl, pcmStrmMsgHandler, 0, msg16 ); } #if __DRIVER_PRESERVE_DSP_SHARE_BUFFER__ ihdl->mh.rbInfo.param = (void *)L1Audio_FC_GetAudioBufferHeader(); #endif // Fill bitstream information to FC { FC_Buf *fcBufHdr = (FC_Buf *)ihdl->mh.rbInfo.param; fcBufHdr->uTime = ihdl->mh.start_time; fcBufHdr->uSamplingFreq = ihdl->pcmStrm.sampleFreq; fcBufHdr->uChannelNum = ihdl->pcmStrm.isStereo + 1; } L1Audio_FC_AudioPlaybackOn(ihdl->mh.fc_aud_id, &ihdl->mh.rbInfo); AM_AudioPlaybackOn( ASP_TYPE_PCM_HI, ihdl->pcmStrm.freqType ); } }
static void pcmStrmOpenDevice( pcmStrmMediaHdl *ihdl ) { uint16 I; ihdl->end_status = MEDIA_NONE; ihdl->mh.dsp_rb_base = 0; mhdlDisallowSleep( (MHdl*)ihdl ); ASSERT(*DSP_PCM_CTRL == 0); #if defined(MT6205B) if ( ihdl->pcmStrm.freqType == 0x20 ) // sampling frequency: 16k AM_PCM16K_PlaybackOn(); else // sampling frequency: 8k AM_PCM8K_PlaybackOn(); #else *DSP_PCM_MS |= 0x0001; #if !defined(__BT_AUDIO_VIA_SCO__) if ( ihdl->pcmStrm.is8KVoice ) { AM_PCM8K_PlaybackOn(); } else #endif { #if defined( DSP_WT_SYN ) DSP_DynamicDownload( DDID_WAVETABLE ); #endif AM_AudioPlaybackOn( ASP_TYPE_PCM_HI, ihdl->pcmStrm.freqType ); } #endif *DSP_PCM_CTRL = 1; kal_trace( TRACE_STATE, L1AUDIO_INIT_STATE ); for ( I = 0; ; I++ ) { if ( *DSP_PCM_CTRL == 8 || ihdl->end_status == MEDIA_END ) break; ASSERT_REBOOT( I < 40 ); kal_sleep_task( 2 ); } }
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; }