Ejemplo n.º 1
0
kal_uint32 AVB_WriteSilence(kal_uint32 uSampleCount)
{
   kal_uint32 uCopyWord=0, uOutByte=0, i, j, uOrigSrcWord, uChannelNumber, uOutWord;
   kal_uint8 *pDst;
   if(AVB.uState != AVB_STATE_RUNING)
   {
      return 0;
   }
   uOrigSrcWord = uSampleCount;
   for(i=0;i<2;i++)
   {
      kal_int16 *pBuf;
      rbGetWriteBuffer(&AVB.PCM, &pDst, &uOutByte);  
      uOutWord = uOutByte >> 1;
      if(uOutWord > uSampleCount)
      {
         uOutWord = uSampleCount;
      }
      memset( pDst, 0, uOutWord*sizeof(kal_uint16) );
      rbWriteDataDone(&AVB.PCM, uOutWord<<1);
      uCopyWord    += uOutWord;
      uSampleCount -= uOutWord;
   }
   kal_brief_trace( TRACE_GROUP_SCO, L1AUDIO_AVB_WRITE_ZERO, uOrigSrcWord, uCopyWord, uOrigSrcWord-uCopyWord);
   return uCopyWord;
}
Ejemplo n.º 2
0
kal_uint32 AVB_WriteData(kal_uint16 *pSrc16, kal_uint32 uSrcWord, kal_bool fMono2Stereo)
{
   kal_uint32 uCopyWord=0, uOutByte=0, i, j, uOrigSrcWord=0, uOutWord=0;
   kal_uint8 *pDst;
   if(AVB.uState != AVB_STATE_RUNING)
   {
      return 0;
   }
   uOrigSrcWord = uSrcWord;
   for(i=0;i<2;i++)
   {
      kal_uint16 *pDst16;
      rbGetWriteBuffer(&AVB.PCM, &pDst, &uOutByte);  
      pDst16 = (kal_uint16*)pDst;
      uOutWord = uOutByte >> 1;
      if(fMono2Stereo)
      {
         uOutWord = uOutWord >> 1;
         if(uOutWord > uSrcWord)
         {
            uOutWord = uSrcWord;
         }
         for(j=0;j<uOutWord;j++)
         {
            *pDst16++ = *pSrc16;
            *pDst16++ = *pSrc16++;
         }
         uSrcWord -= uOutWord;
         rbWriteDataDone(&AVB.PCM, uOutWord<<2);
      }
      else
      {
         if(uOutWord > uSrcWord)
         {
            uOutWord = uSrcWord;
         }
         memcpy(pDst16, pSrc16, uOutWord*sizeof(kal_uint16));
         pSrc16   += uOutWord;
         uSrcWord -= uOutWord;
         rbWriteDataDone(&AVB.PCM, uOutWord<<1);
      }
      uCopyWord += uOutWord;
   }
static kal_bool dtmf_mcu_Process_Internal()
{   
   kal_uint32 uPreIndex1, uPreIndex2, uBufLen, uCurrentData;
   kal_uint8  *pBuf;
   kal_bool fIsPlaying = KAL_TRUE;
   kal_prompt_trace(MOD_L1SP, "[dtmf_mcu_Process_Internal] Enter");
   if(DTMF_SW.pHandle == NULL)
   {
      return KAL_FALSE;
   }
   rbGetWriteBuffer(&DTMF_SW.RingBuffer, &pBuf, &uBufLen);
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, MCU_DTMF_PROCESS_ENTRY, DTMF_SW.fNewDTMF, DTMF_SW.fClearDTMF, DTMF_SW.fEnding, uBufLen);
   if(DTMF_SW.fClearDTMF)
   {
      dtmf_mcu_DeActivatAllKey();
      if(!dtmf_mcu_IsPlaying())
      {
         DTMF_SW.fClearDTMF = KAL_FALSE;
      }
   }
   if(uBufLen < DTMF_SW.uFrameByte || (DTMF_SW.fEnding && !DTMF_SW.fNewDTMF) )
   {
      return KAL_FALSE;
   }
   dtmf_mcu_GetPreIndex(DTMF_SW.uCurIdx, &uPreIndex1, &uPreIndex2);
   if(DTMF_SW.fNewDTMF)
   {
      dtmf_mcu_ActivatNewKey(uPreIndex1, uPreIndex2);
      DTMF_SW.fNewDTMF = KAL_FALSE;
   }
   else
   {  //flush data
      fIsPlaying = dtmf_mcu_IsPlaying();
      uCurrentData = rbGetDataCount(&DTMF_SW.RingBuffer);
      kal_trace( TRACE_GROUP_AUD_PLAYBACK, MCU_DTMF_PROCESS_STATUS, fIsPlaying, uCurrentData, DTMF_SW.uFlushSilenceCount);
      if(!fIsPlaying && DTMF_SW.uFlushSilenceCount<DTMF_FLUSH_FRAME_NUMBER)
      {
         DTMF_Gen(DTMF_SW.pHandle, pBuf); 
         rbWriteDataDone(&DTMF_SW.RingBuffer, DTMF_SW.uFrameByte);
         DTMF_SW.uFlushSilenceCount++;
      }
      if(!fIsPlaying && uCurrentData==0 && !DTMF_SW.fEnding)
      {
////!         PcmSink_Mute(KAL_TRUE, PCMSINK_MUTE_TONE);
         DTMF_SW.fEnding = KAL_TRUE;
         L1Audio_InProcCall(dtmf_mcu_Destroy, NULL, NULL);
         return KAL_FALSE;
      }
   }
   if(fIsPlaying)
   {
      dtmf_mcu_PrepareTone(0);
      dtmf_mcu_PrepareTone(1);
      dtmf_mcu_PrepareTone(2);
      DTMF_Gen(DTMF_SW.pHandle, pBuf);
      rbWriteDataDone(&DTMF_SW.RingBuffer, DTMF_SW.uFrameByte);
      dtmf_mcu_UpdateTone(0);
      dtmf_mcu_UpdateTone(1);
      dtmf_mcu_UpdateTone(2);
      DTMF_SW.fClearDTMF = KAL_FALSE;
      return KAL_TRUE;
   }
   kal_prompt_trace(MOD_L1SP, "[dtmf_mcu_Process_Internal] Leave");
   return KAL_FALSE;
}