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 );
   }
}
Example #2
0
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 );
   }
}
Example #3
0
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;
}