예제 #1
0
/*****************************************************************************
 * FUNCTION
 *  nvram_suspend_handler
 * DESCRIPTION
 *  This is the handler to handle MSG_ID_NVRAM_SUSPEND_REQ
 *  After nvram receive this request, it will be suspend forever now.
 * PARAMETERS
 *  ilm_ptr     [IN]        the message content
 * RETURNS
 *  void
 *****************************************************************************/
void nvram_suspend_handler(ilm_struct *ilm_ptr)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    nvram_suspend_req_struct *nvram_suspend_req = (nvram_suspend_req_struct*) ilm_ptr->local_para_ptr;
    nvram_suspend_cnf_struct *nvram_suspend_cnf;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/

    nvram_suspend_cnf = (nvram_suspend_cnf_struct*) construct_local_para(sizeof(nvram_suspend_cnf_struct), TD_CTRL);

    nvram_suspend_cnf->result = NVRAM_ERRNO_SUCCESS;

    nvram_send_ilm(ilm_ptr->src_mod_id, MSG_ID_NVRAM_SUSPEND_CNF, nvram_suspend_cnf, NULL);

    if (nvram_suspend_req == NULL || nvram_suspend_req->suspend_time == 0)
    {
        while(1)
        {
            kal_sleep_task(100);
        }
    }
    else
    {
        kal_sleep_task(nvram_suspend_req->suspend_time);
    }

    return;
}
static void ktStop_nonblocking( void *data )
{
   if (keytone.state == TONE_STATE_NONE)
      return;

   if( !L1Audio_CheckFlag( keytone.aud_id ) )
      return;

   keytone.isReentrance = true;

   if (keytone.state == TONE_STATE_INIT) {
      L1Audio_InProcCall( ktStopInMedTask, keytone.seqNum, 0 );
      kal_sleep_task( 2 );
   }
   
   if (keytone.state == TONE_STATE_PLAY) {
      keytone.state = TONE_STATE_STOP;
      L1Audio_PutMessageAndWait(MSG_L1AUDIO2FAS_AUDIO_PLAYBACK_OFF, keytone.fc_aud_id, 0, false);
   }
   
   if (keytone.state == TONE_STATE_STOP) {
      L1Audio_InProcCall( ktStopInMedTask, keytone.seqNum, 0 );
      kal_sleep_task( 2 );
      return;
   }
   
   if (keytone.state == TONE_STATE_IDLE) {
      keytone.state = TONE_STATE_UNHOOKING;
      L1Audio_FC_UnHookHandler_WithoutWaitingSend(keytone.fc_aud_id, 0);
   }
   
   if (keytone.state == TONE_STATE_UNHOOKING) {
      L1Audio_InProcCall( ktStopInMedTask, keytone.seqNum, 0 );
      kal_sleep_task( 2 );
      return;
   }
   
   if (keytone.state == TONE_STATE_UNHOOKED) {
      keytone.state = TONE_STATE_NONE;
      L1Audio_FC_UnHookHandler_WithoutWaitingClear(keytone.fc_aud_id, 0);
      keytone.fc_aud_id = 0xFFFF;
   }
   
   AM_KeyToneOff();
   L1Audio_ClearFlag( keytone.aud_id );
   
   keytone.seqNum++;
}
static void dtmf_mcu_Destroy(kal_uint32 arg1, void* arg2)
{
   
   kal_bool fIsAudioRunning = false;//PcmSink_IsAudioRuning() || PcmSink_IsMixerRuning();   
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, MCU_DTMF_DESTROY, DTMF_SW.pHandle, DTMF_SW.fNewDTMF, DTMF_SW.fEnding, DTMF_SW.fForceStop);
   if(DTMF_SW.pHandle == NULL)
   {
      return;
   }
   if((DTMF_SW.fNewDTMF == KAL_FALSE && DTMF_SW.fEnding == KAL_TRUE) || DTMF_SW.fForceStop)
   {
      {
         {
//            void AM_SWToneOff( void );
//            AM_SWToneOff();
         }   
      }
      DTMF_SW.pHandle = NULL;
      L1Audio_ClearFlag( DTMF_SW.uAudId);
      L1Audio_FreeAudioID(DTMF_SW.uAudId);
      audio_free_mem( (void **) &DTMF_SW.RingBuffer.rb_base);//
      DTMF_SW.RingBuffer.rb_base = NULL;
      if(fIsAudioRunning)
      {
////!    PcmSink_Mute(KAL_TRUE, PCMSINK_MUTE_TONE);
         kal_sleep_task(uDtmfMuteLength3);
      }
      if(DTMF_SW.fIsKeytonePlaying)
      {
////!         PcmSink_StopSound(PCM_FUNC_KEYTONE);
      }
      else if(DTMF_SW.fIsTonePlaying)
      {
////!         PcmSink_StopSound(PCM_FUNC_TONE);
      }
      else
      {
         ASSERT(0);
      }
      memset(&DTMF_SW, 0, sizeof(DTMF_SW));
      if(fIsAudioRunning)
      {
         kal_sleep_task(uDtmfMuteLength4);
      }
////!      PcmSink_DepopUnMute( NULL );
////!      PcmSink_Mute(KAL_FALSE, PCMSINK_MUTE_TONE);
   }
}
예제 #4
0
static void pcmStrmCloseDevice( MHdl *hdl )
{
   uint16 I, ctl;
   pcmStrmMediaHdl *ihdl = (pcmStrmMediaHdl *)hdl;
   
   for ( I = 0; ; I++ ) {
      ctl = *DSP_PCM_CTRL;
      if ( ctl == 0 )                // DSP returns to idle state
         break;
      if ( ctl == 8 ) {
         *DSP_PCM_CTRL = WAV_ABORT_STATE;       // give ABORT command to the DSP
         kal_trace( TRACE_STATE, L1AUDIO_STOP_STATE );
      }
      ASSERT_REBOOT( I < 40 );
      kal_sleep_task( 2 );
   }
   kal_trace( TRACE_STATE, L1AUDIO_IDLE_STATE );

#if defined(MT6205B)
   if( ihdl->pcmStrm.freqType == 0x20 )   // sampling frequency: 16k
      AM_PCM16K_PlaybackOff( true );
   else                                   // sampling frequency: 8k
      AM_PCM8K_PlaybackOff( true );
#else
#if !defined(__BT_AUDIO_VIA_SCO__)
   if ( ihdl->pcmStrm.is8KVoice )
      AM_PCM8K_PlaybackOff( true );
   else
#endif
      AM_AudioPlaybackOff( true );
#endif
   mhdlAllowSleep( hdl );
}
예제 #5
0
static void I2S_RecordOff()
{
   kal_uint32 I=0;
   i2s.state = I2S_RECORD_STATE_READY;
   kal_sleep_task(9);  //flush the last frame //(1152*1000)/(32000*4.615)=
   kal_trace( TRACE_FUNC, L1AUDIO_I2S_REC_OFF );
#if !defined(__AUDIO_RECORD_COMPONENT_SUPPORT__)
   HOST_APM_UnRegister(APM_TASKID_I2S_RECORD);
   while(i2s.pEnchdl != NULL)
   {
      kal_sleep_task(1);
      I++;
      ASSERT(I<80);	
   }   
#endif
}
예제 #6
0
파일: TEA5761UK.c 프로젝트: 12019/mtktest
void SerialCommCAMReset(void)
{  // For EV200 only, solve a hardware bug
   init_isp_if();
   kal_sleep_task(4);
   power_off_isp();
   SerialCommPullHigh();
}
void DSP_BGSND_Stop(void)
{
   kal_prompt_trace(MOD_L1SP, "[DSP_BGSND_Stop] Enter");
   DSP_BGSnd.state = DSP_BGSND_STATE_STOPPING;
	{  //turn off DSP BGSND	
   	uint32 I;
   	if(SAL_Bgsnd_IsRunning())
   		SAL_Bgsnd_SetFinal();
   	for ( I = 0; ; I++ ) {
   		if ( SAL_Bgsnd_IsIdle())	 /* DSP returns to idle state */
   			break;
   		ASSERT_REBOOT( I < 20 );
   		kal_sleep_task( 2 );
   	}
   	
   	AM_SND_PlaybackOff( true );
   }
   
#ifdef DSP_BGS_UP_DOWN_INT_SEPERATE
	L1Audio_UnhookHisrHandler(D2C_SOUND_EFFECT_INT_ID_DL);  
	L1Audio_UnhookHisrHandler(D2C_SOUND_EFFECT_INT_ID_UL);  
#else
	L1Audio_UnhookHisrHandler(D2C_SOUND_EFFECT_INT_ID_DL);
#endif 
   DSP_BGSnd.state = DSP_BGSND_STATE_IDLE;
   kal_prompt_trace(MOD_L1SP, "[DSP_BGSND_Stop] Leave");   
}
예제 #8
0
//-----------------------------------------------------------------------------
int gps_soc_request_abort(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (gps_soc_transaction.socket_id >= 0)
    {
        ilm_struct *ilm_send = NULL;
		int ret;

        ret = soc_close(gps_soc_transaction.socket_id);
    	gps_soc_log("soc_close result: %d", ret);
		kal_sleep_task(250);
        soc_close_nwk_account_by_id(MOD_GPS_TCPIP, gps_soc_transaction.nwt_acount_id);

        /* close socket and disconnect bearer here */
        ilm_send = allocate_ilm(MOD_GPS_TCPIP);
        ilm_send->msg_id = MSG_ID_APP_SOC_DEACTIVATE_REQ;
        ilm_send->peer_buff_ptr = NULL;
        ilm_send->local_para_ptr = NULL;
        SEND_ILM(MOD_GPS_TCPIP, MOD_SOC, SOC_APP_SAP, ilm_send);
    }
    gps_soc_transaction.post_retry_counter = 0;

    gps_soc_stop_timer();

    return 0;
}
void multiple_sim_test()
{
	kal_uint32 testIndex = 0;

	sim_MT6302_init();
	init_all_cb2();

	while(1){
		switch( (testIndex % SIM_TEST_FUNCTION_NUMBER_MAX)){
			case 0:
				sim_test_function_sim3();
				break;
			case 1:
				sim_test_reset_phone(SIM_ICC_APPLICATION_PHONE1);
				break;
			case 2:
				sim_test_reset_phone(SIM_ICC_APPLICATION_PHONE2);
				break;
			case 3:
				sim_test_phone_selectGSM(SIM_ICC_APPLICATION_PHONE1);
				break;
			case 4:
				sim_test_phone_selectGSM(SIM_ICC_APPLICATION_PHONE1);
				break;
			default:
				ASSERT(0);
		}
		testIndex ++;
		kal_sleep_task(20);
	}
}
kal_bool ccci_ipc_it_send_msg(void *p_param, kal_char *p_ret_err_str, kal_uint32 *p_ret_err_str_sz){
    kal_uint32 err_str_len = *p_ret_err_str_sz;
    ipc_ilm_t *ilm_ptr = NULL;
    kal_int32  ret = KAL_TRUE;

    ccci_ipc_ch.it_mode = CCCI_IPC_IT_DISABLE;
    
    /* allocate and fill cross message structure */
    ilm_ptr = ipc_msgsvc_allocate_ilm(MOD_L4C);
    ilm_ptr->src_mod_id = MOD_L4C;
    ilm_ptr->dest_mod_id = APMOD_AGPS;
    ilm_ptr->msg_id = (kal_uint32)IPC_EL1_MSG_ID_BEGIN;
    ilm_ptr->peer_buff_ptr = NULL; /* no peer message */
    ilm_ptr->local_para_ptr = (local_para_struct*) NULL;
    ilm_ptr->sap_id = MMI_L4C_SAP;
    ret =  ipc_msgsvc_send_ext_queue(ilm_ptr);

    if (ret == KAL_FALSE){
        *p_ret_err_str_sz = snprintf(p_ret_err_str, err_str_len, 
                                "error test\n"
                                ); 
        return KAL_FALSE;
    }
    kal_sleep_task(KAL_TICKS_1_SEC);
    return KAL_TRUE;
}
void Del_PcmEx_Start(void (*pcmNway_dl_hdlr)(void), void (*pcmNway_ul_hdlr)(void), 
	uint32 cfgUL1, uint32 cfgUL2, uint32 cfgUL3, uint32 cfgUL4, uint32 cfgDL)
{
   uint32 I;
   kal_bool flag;

	// prevent re-entry!! 
 	ASSERT(PNW_STATE_IDLE == pcmEx.state);
 
   pcmEx.aud_id = L1Audio_GetAudioID();
   L1Audio_SetFlag( pcmEx.aud_id );      /*Be careful.Before Locking SleepMode, to access DSP sherrif tasks much time. So access DSP must be after SetFlag*/

	// band and am type setting
	pcmEx.bandInfo = PCMEX_BAND_DYNAMIC;	
	pcmEx.am_type = AM_PCMEX_TYPE_DEDICATION;
	
	// pcmEx.dspPcmExMicLen = 0;
	// pcmEx.dspPcmExSpkLen = 0;
	
 	pcmEx.cfgUL1 = cfgUL1;
	pcmEx.cfgUL2 = cfgUL2;
	pcmEx.cfgUL3 = cfgUL3;
	pcmEx.cfgUL4 = cfgUL4;
	
	pcmEx.cfgDL = cfgDL; 
	
	pcmEx.pnw_dl_hdlr = pcmNway_dl_hdlr; 
	pcmEx.pnw_ul_hdlr = pcmNway_ul_hdlr; 
	
   L1Audio_HookHisrHandler(DP_D2C_PCM_EX_DL,(L1Audio_EventHandler)pcmEx_hisrDlHdlr, 0);
   L1Audio_HookHisrHandler(DP_D2C_PCM_EX_UL,(L1Audio_EventHandler)pcmEx_hisrUlHdlr, 0);

	// check DSP state and turn on 
   ASSERT(SAL_PcmEx_CheckStateUL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_OFF) && SAL_PcmEx_CheckStateDL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_OFF));
   AM_PCM_EX_On(pcmEx.am_type, (uint32)(&pcmEx));//to config pnw

   SAL_PcmEx_SetStateUL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_ON);
   SAL_PcmEx_SetStateDL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_ON);  

	// wait for ready
   for(I = 0; ;I ++){
      kal_bool is_ready = true;

      if( (pcmEx.cfgDL & (USE_D2M_PATH+USE_M2D_PATH)) && (!SAL_PcmEx_CheckStateDL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_RDY)))
         is_ready &= false;
      if( (pcmEx.cfgUL1 & (USE_D2M_PATH+USE_M2D_PATH)) && (!SAL_PcmEx_CheckStateUL(SAL_PCMEX_TYPE_PNW, SAL_PCMEX_RDY)))
         is_ready &= false;    
		
      if(is_ready)
         break;
#ifndef L1D_TEST
      ASSERT(I < 22);  // wait 200ms  
      kal_sleep_task(2);
#endif
   }      
	
   pcmEx.state = PNW_STATE_RUN;
   
   /* the end of configure the SAL */             
}  
kal_int32 init_gt818_download_module( kal_uint16 cur_ver, kal_uint8 *firmware_ptr )
{
    kal_int32 ret = 0;

    outbuf = (kal_uint8 *)get_ctrl_buffer( MAX_BUFFER_LEN );
    inbuf  = (kal_uint8 *)get_ctrl_buffer( MAX_BUFFER_LEN );
    dbgbuf = (kal_char *)get_ctrl_buffer( MAX_BUFFER_LEN );
    
    
    if ( ( outbuf == NULL ) ||
         ( inbuf == NULL ) ||
         ( dbgbuf == NULL ) )
    {
        EXT_ASSERT(0, (kal_uint32)outbuf, (kal_uint32)inbuf, (kal_uint32)dbgbuf);
        return 0;
    }

    CTP_DWN_DEBUG_LINE_TRACE();
 
    //rst_handle = DclGPIO_Open(DCL_GPIO, GPIO_CTP_SHUTDN_PIN);
    //int_handle = DclGPIO_Open(DCL_GPIO, GPIO_CTP_INT_PIN);
    int_handle = DclGPIO_Open(DCL_GPIO, gpio_ctp_eint_pin);
    rst_handle = DclGPIO_Open(DCL_GPIO, gpio_ctp_reset_pin);
    DclGPIO_Control(rst_handle, GPIO_CMD_SET_MODE_0, NULL);
    DclGPIO_Control(int_handle, GPIO_CMD_SET_MODE_0, NULL);
    DclGPIO_Control(int_handle, GPIO_CMD_SET_DIR_OUT, NULL);
    ret = gt818_downloader_probe( cur_ver, firmware_ptr );
    //DclGPIO_Control(int_handle, GPIO_CMD_SET_DIR_IN, NULL);
    //DclGPIO_Control(int_handle, GPIO_CMD_SET_MODE_1, NULL);
    DclGPIO_Control(int_handle, GPIO_CMD_WRITE_HIGH, NULL);

    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_HIGH, NULL);
    kal_sleep_task(5);
    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_LOW, NULL);
    kal_sleep_task(5);
    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_HIGH, NULL);
    kal_sleep_task(120);

    free_ctrl_buffer( outbuf );
    free_ctrl_buffer( inbuf );
    free_ctrl_buffer( dbgbuf );

    if ( downloader_errno )
        EXT_ASSERT( 0, downloader_errno, 0, 0 );

    return ret;
}
예제 #13
0
파일: horse_race.c 프로젝트: 12019/mtktest
void noke_drv_horse_race_light(int lights)
{
	int para = ( lights & HORSE_RACE_MASK )| ( noke_drv_pre_light_parameter & (~HORSE_RACE_MASK));
	//noke_dbg_printf("\r Hongzhe.liu: noke_drv_horse_race_light = 0x%04x \n", lights);
	if( (lights != 0x0000 && para != 0x0000 ) || (lights == 0x0000 && para == 0x0000 ))
		noke_drv_horse_race_set(  para  );
	kal_sleep_task(10);
}
static kal_uint8 gt818_reset( void )
{
    kal_uint8 ret = 1;
    kal_uint8 retry_count = 0;

    outbuf[0] = 1;
    outbuf[1] = 1;

    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_HIGH, NULL);
    kal_sleep_task(5);
    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_LOW, NULL);
    kal_sleep_task(5);
    DclGPIO_Control(rst_handle, GPIO_CMD_WRITE_HIGH, NULL);
    kal_sleep_task(120);

search_i2c:
    //gt818_i2c_write( guitar_i2c_address, 0x00FF, outbuf, 1 );

    //kal_sleep_task( 12 );

    gt818_i2c_read( guitar_i2c_address, 0x00FF, inbuf, 1 );

    if ( inbuf[0] != 0x55 )
    {
        drv_trace2( TRACE_GROUP_7, CTP_GOODIX_DWN_REGISTER_TRACE, 0x00FF, inbuf[0] );
        kal_sleep_task(10);
        
        if ( retry_count < 10 )
        {
            retry_count++;
            goto search_i2c;
        }
        else
        {
            ASSERT(0);
        }
    }

    drv_trace1( TRACE_GROUP_7, CTP_GOODIX_DWN_DETECT_ADDR_TRACE, guitar_i2c_address );
    kal_sleep_task(120);
    return ret;	
}
예제 #15
0
Media_Status GenCompStop( MHdl *hdl )
{
   MHPB_Internal *ihdl = (MHPB_Internal *)hdl;
   kal_int32 I,J;
   
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, L1AUDIO_GENERAL_INFO, AUDIO_TRACE_STOP, hdl->mediaType, hdl->state,0,0,0,0);
   if( hdl->state == COMPONENT_STATE_PAUSE || hdl->state == COMPONENT_STATE_IDLE )
      return MEDIA_SUCCESS;
      
   Media_A2V_REMOVE_MEDIA_END_CALLBACK(GenCompStop);

   // Stop component
   for(I = (ihdl->numComp-1); I>=0; I-- ) 
   {
      ihdl->NodeArray[I].curHdl->Stop(ihdl->NodeArray[I].curHdl);
   }
   for(I = (ihdl->numComp-1); I>=0; I-- ) 
   {
      ACU_FlushBufferQueue( (AudComHdl *)ihdl->NodeArray[I].curHdl );
   }

   ACU_SendEndCommandl( ihdl );
   
   for (J = 0; ; J++) {
      if (ihdl->endflag){
      	 break;
      }
      kal_sleep_task( 1 );
   }

#if defined(__BES_TS_SUPPORT__)
   BesTS_FreeAudioHandle();
#endif

#if defined(__AUDIO_DSP_LOWPOWER_V2__)
  if (ihdl->pstFSAL) {
    if(AUDLP_Check_LowPower_Status())
       AUDLP_Mode(KAL_FALSE, 1);     
  }
#endif
   
   // Change status
   hdl->state = COMPONENT_STATE_IDLE;
   
   if (ihdl->region != DPMGR_NOT_MATCH) {
      // Unload code
      DPMGR_Unload(ihdl->region);
      ihdl->region = DPMGR_NOT_MATCH;
   }
   
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, L1AUDIO_GENERAL_INFO, AUDIO_TRACE_STOP_FINISH, hdl->mediaType, hdl->state, 0,0,0,0,0);
   return MEDIA_SUCCESS;
}
예제 #16
0
AudChip_Status ExtAudChip_Play(AudChipControl *audCtrl)
{
   uint16 repeats;
   
   Rohm8788_TurnOnClock();
   
   AFE_TurnOnExtAmplifier();

   
   RegWrite(REG_SEQU_CTRL, 0x00); // release standby mode  
   kal_sleep_task(3);
   RegWrite(REG_SEQU_CTRL, 0x80); // enter normal mode 
 
   if(fmp_open(&fmp_work, NULL)!=0)
   {
  	   ExtAudChip_NotifyError();
      ExtAudChip_ReturnFail; 
   }   
  
   switch(audCtrl->format){ 
  	case MEDIA_FORMAT_SMF:	  		
   	if(fmp_cmd_setdata(&fmp_work, (uint8 *)audCtrl->melody_data, audCtrl->data_length, FMTID_SMF)!=0)
   	{
  			ExtAudChip_NotifyError();
         ExtAudChip_ReturnFail; 
  		}	
  		if(audCtrl->repeat_times == 0) 
  			repeats = 1; 
  		else 
  			repeats = 0;	   
  		break;
  	case MEDIA_FORMAT_IMELODY: 
  		if(fmp_cmd_setdata(&fmp_work, (uint8 *)audCtrl->melody_data, audCtrl->data_length, FMTID_IMELODY)!=0)	
  		{	
  			ExtAudChip_NotifyError();
         ExtAudChip_ReturnFail; 
  		}	
  		if(audCtrl->repeat_times == 0) 
  			repeats = 1; 
  		else 
  			repeats = 0;	   	 	
		break;
   } 			
   		
   if(fmp_cmd_play(&fmp_work, repeats)!=0)
   {
   	ExtAudChip_NotifyError();
      ExtAudChip_ReturnFail;
   }	
   RegWrite(REG_MIDI_WAVEVOL, rohm_volume);
   ExtAudChip_ReturnSuccess; 
}
예제 #17
0
kal_bool IspWaitIspDone(ISP_OPERATION_STATE_ENUM IspState, kal_uint16 loop, kal_uint16 unit)
{
    volatile kal_uint32 i=0;
    while(KAL_FALSE==IspDoneFlag)
    {
        i++;
        kal_sleep_task(unit);
        if(i>loop) break;
    }
    if(i>loop)
        return KAL_FALSE;
    else
        return KAL_TRUE;
}
예제 #18
0
static Media_Status GenCompRecStop( MHdl *hdl )
{
   MHPB_Internal *ihdl = (MHPB_Internal *)hdl;
   kal_int32 J;
   
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, L1AUDIO_GENERAL_INFO, AUDIO_TRACE_STOP, hdl->mediaType, hdl->state,0,0,0,0);
   if( hdl->state == COMPONENT_STATE_PAUSE || hdl->state == COMPONENT_STATE_IDLE )
      return MEDIA_SUCCESS;

   {
      AcHdlNode *pNode = ihdl->pNodeStart;
      kal_uint8 *pWrite;
      kal_uint32 uWriteLen;
      
      while (pNode) {
         for (J=4; J>=0; J--) {
            ACU_SendProcessCommandl( (AudComHdlInt *)pNode->curHdl );
         }
         pNode->curHdl->Stop( pNode->curHdl );
         
         // Flush: Push to next component
         ACU_GetWriteBuffer(pNode->curHdl, &pWrite, &uWriteLen);
         if (uWriteLen)
            ACU_WriteDataDone_ImmediateCallback(pNode->curHdl, 0);
         
         pNode = pNode->pNextNode;
      }
      pNode = ihdl->pNodeEnd;
      while (pNode) {
         ACU_FlushBufferQueue( pNode->curHdl );
         pNode = pNode->pPrevNode;
      }
   }

   ACU_SendEndCommandl( ihdl );
   
   for (J = 0; ; J++) {
      if (ihdl->endflag){
      	 break;
      }
      kal_sleep_task( 1 );
   }
      
   // Change status
   hdl->state = COMPONENT_STATE_IDLE;
   kal_trace( TRACE_GROUP_AUD_PLAYBACK, L1AUDIO_GENERAL_INFO, AUDIO_TRACE_STOP_FINISH, hdl->mediaType, hdl->state, 0,0,0,0,0);
   
   return MEDIA_SUCCESS;
}
예제 #19
0
static void pcmStrmRecCloseDevice( MHdl *hdl )
{
   uint16 I, ctl;

   for ( I = 0; ; I++ ) {
      ctl = *DSP_PCM_REC_CTRL;
      if ( ctl == 0 )                // DSP returns to idle state
         break;
      if ( ctl == 0x400 )
         *DSP_PCM_REC_CTRL = 0x800;  // give ABORT command to the DSP
      ASSERT_REBOOT( I < 20 );
      kal_sleep_task( 2 );
   }
   AM_PCM8K_RecordOff( true );
   mhdlAllowSleep( hdl );
}
예제 #20
0
static void I2S_RecordOn()
{
   kal_uint32 I=0;
   i2s.state = I2S_RECORD_STATE_RECORDING;
   i2s.flush_encoder = false;
   kal_trace( TRACE_FUNC, L1AUDIO_I2S_REC_ON );
#if !defined(__AUDIO_RECORD_COMPONENT_SUPPORT__)
   HOST_APM_Register(APM_TASKID_I2S_RECORD);
   while(i2s.pEnchdl == NULL)
   {
      kal_sleep_task(1);
      I++;
      ASSERT(I<80); 
   }
#endif
}
static void toneStop( void *data )
{
   if (tone.state == TONE_STATE_NONE)
      return;

   if( !L1Audio_CheckFlag( tone.aud_id ) )
      return;

   if (tone.isReentrance)
      return;
   else
      tone.isReentrance = true;

   tone.bQTMF = false;
   
   if (tone.state == TONE_STATE_INIT) {
      int I;
      
      for (I = 0; ; I++) {
         if (tone.state != TONE_STATE_INIT)
            break;
         
         ASSERT_REBOOT( I < 20 );
         kal_sleep_task( 2 );
      }
   }
   
   if (tone.state == TONE_STATE_PLAY) {
      tone.state = TONE_STATE_STOP;
      tone.isWait = true;
      L1Audio_FC_TonePlaybackOff(tone.fc_aud_id);
      tone.isWait = false;
      tone.state = TONE_STATE_IDLE;
   }
   
   if (tone.state == TONE_STATE_IDLE) {
      tone.state = TONE_STATE_NONE;
      L1Audio_FC_UnHookHandler(tone.fc_aud_id, 0);
      tone.fc_aud_id = 0xFFFF;
   }
   
   AM_ToneOff();
   AFE_TurnOffSpeaker( L1SP_TONE );
   L1Audio_ClearFlag( tone.aud_id );
   tone.seqNum++;
   L1Audio_SetEvent( tone.aud_id, 0 );
}
예제 #22
0
void bgsndOnHandler(void)
{
		
	AM_SND_PlaybackOn();
	SAL_Bgsnd_SetInit();
	//*DSP_SOUND_EFFECT_CTRL = DP_BGSND_STATE_READY;
	{
		uint32 I;
		for( I = 0; ; I++ ) {
			//if( *DSP_SOUND_EFFECT_CTRL == DP_BGSND_STATE_PLAYING)
			if(SAL_Bgsnd_IsRunning())
				break;
			ASSERT_REBOOT( I < 20 );
			kal_sleep_task( 2 );
		}
	}
}
예제 #23
0
void Direction_Sensor_state_Filter()
{
	kal_uint8 direction_sensor_tmr_handle = DIRECTION_SENSOR_TMR_HANDLE;
	kal_uint16 direction_sensor_tmr_repeat = 50; /* 1s = 100ticks, 0.1s = 10ticks */
	kal_bool ret = KAL_FALSE;
	//noke_dbg_printf("\rHongzhe.Liu : Direction_Sensor_state_Filter ... \n");
	
	GPTI_StopItem(direction_sensor_tmr_handle);

	kal_sleep_task(100);
	do{
       	ret = GPTI_StartItem(direction_sensor_tmr_handle,
                  direction_sensor_tmr_repeat,
                  Direct_Sensor_Set_Sensor_State,
                  NULL);
		//noke_dbg_printf("\rHongzhe.Liu : Direction_Sensor_state_Filter : start ret=%d... \n", ret);
	}while( ret== KAL_FALSE );
}
예제 #24
0
static void pcmStrmRecOpenDevice( pcmStrmMediaHdl *ihdl )
{
   uint16 I;

   ihdl->end_status = MEDIA_NONE;
   mhdlDisallowSleep( (MHdl*)ihdl );
   if (ihdl->pcmStrm.dedicated_mode) {  // PCM recording in TCH mode/
      AM_PCM8K_RecordOn();
   } else {
      *DSP_PCM_REC_CTRL  = 0x200;
      AM_PCM8K_RecordOn();
      for ( I = 0; ; I++ ) {
         if ( *DSP_PCM_REC_CTRL == 0x400 )
            break;
         ASSERT_REBOOT( I < 20 );
         kal_sleep_task( 2 );
      }
   }
}
예제 #25
0
void usbc_mode_switch(usb_mode_e mode){
	kal_uint32   idx;
	usbc_core_t* usbc_inst = usbc_core_get_instance();
	usbc_class_reinit_func_t  class_reinit;
	usbc_ind_t      ind_to_enqueue;    // Do mode switch immediately if it is not in HISR, or enqueue a mode switch event for USBCORE task
	if (!kal_if_hisr()) {
#if 1
		if (mode == USB_MODE_MSD_OSDRTY){
		/* wait 3 second for OSD known issue */
			kal_sleep_task(600);
		}
#endif
		/* 1. set disconnect */
		hifusb_set_disconnect();
        usbc_empty_ind_queue();

		/* 2. Set switch mode */
		usbc_inst->is_mode_switch = KAL_TRUE;
		usbc_inst->mode = mode;

		/* 3. Send re-init callback to all usb class */
		_SET_NODE_VALUE(0);
		usbc_stack_checkin(USB_CLASS_NUM, NULL);
		for (idx = 0; idx < USB_CLASS_NUM; idx++) {
			class_reinit = _get_class_reinit_func(idx);
			_SET_NODE_REG_TABLE(idx, NULL);
			if (class_reinit) {
				usbc_trace_info(USBCORE_ALL_NODE_CHECKIN_REINIT_CLASS_START, idx);
				class_reinit(KAL_TRUE);
				usbc_trace_info(USBCORE_ALL_NODE_CHECKIN_REINIT_CLASS_END, idx);
			} else {
					EXT_ASSERT(KAL_FALSE, 2, 0, 0);
			}
		}
	} else {
		ind_to_enqueue.type = USBC_IND_MODE_SWITCH;
		ind_to_enqueue.ext = 0;
		ind_to_enqueue.data = (kal_uint8)mode;
		usbc_enqueue_ind(&ind_to_enqueue);
		hmu_hifeg_set(HIF_DRV_EG_USBC_IND_EVENT);
	}
}
static void tonePlayOn( void *data )
{
   tone.isOnDur = true;

   if( tone.bQTMF ) {
      tone.curr_qtmf = (L1SP_QTMF *)tone.tonelist + (uint32)data;
      
      tone.info->freq1 = tone.curr_qtmf->freq1;
      tone.info->freq2 = tone.curr_qtmf->freq2;
      tone.info->freq3 = tone.curr_qtmf->freq3;
      tone.info->freq4 = tone.curr_qtmf->freq4;
   } else {
      tone.curr_qtmf = (L1SP_QTMF *)(tone.tonelist + (uint32)data);
      
      tone.info->freq1 = tone.curr_qtmf->freq1;
      tone.info->freq2 = tone.curr_qtmf->freq2;
      tone.info->freq3 = 0;
      tone.info->freq4 = 0;
   }

   if (tone.curr_qtmf->on_duration == 0) {
      tone.info->msDur = -1;
   } else {
      tone.info->msDur = tone.curr_qtmf->on_duration;
   }

      AFE_TurnOnSpeaker( L1SP_TONE ); 
      kal_sleep_task(1);
   
   tone.state = TONE_STATE_INIT;
/*workaround for SPEECH DSP MAIN/AUX Mode Task in FCORE*/ 
#ifdef BGSND_ENABLE
   if (tone.sndOffHandler != NULL)
      tone.sndOffHandler( tone.sndHdl );
#endif      
/*workaround for SPEECH DSP MAIN/AUX Mode Task in FCORE*/    
   
   L1Audio_FC_TonePlaybackOn(tone.fc_aud_id, tone.info);

   // apply hardware mute during tone playback 
   //AFE_TurnOnSpeaker( L1SP_TONE ); 
}
예제 #27
0
void AVB_Flush()
{
   kal_uint32 i=0;
   AVB.uHisrRunning = KAL_FALSE;
   if(AVB.uState == AVB_STATE_RUNING)
   {
      AVB.uState = AVB_STATE_FLUSH_TAIL;
   }
   while(AVB.uState != AVB_STATE_ENDING)
   {
      kal_trace( TRACE_GROUP_SCO, L1AUDIO_AVB_FLUSH, AVB.uState, AVB.uHisrRunning, i);
      kal_sleep_task(1);
      if(i>AVB_FLUSH_MAX_TICK)
      {
         //ASSERT(!AVB.uHisrRunning);
         break;
      }
      i++;
   }
}
예제 #28
0
void bgsndOffHandler(void)
{

	if(BGSND_STATE_STOP != bgSnd.state) {
		return;
	}
	
	uint32 I;
	if(SAL_Bgsnd_IsRunning())
		SAL_Bgsnd_SetFinal();
	for ( I = 0; ; I++ ) {
		if ( SAL_Bgsnd_IsIdle())	 /* DSP returns to idle state */
			break;
		ASSERT_REBOOT( I < 20 );
		kal_sleep_task( 2 );
	}

	
	AM_SND_PlaybackOff( true );
}
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__
}
예제 #30
0
파일: pcm4way.c 프로젝트: 12019/mtktest
void PCM2WAY_Start(void (*pcm2way_hdlr)(void), uint32 type)
{
   uint32 I;

   ASSERT(type==1 || type==2);
   AM_PCM_EX_On(type);
   
   ASSERT(DP_PCM_EX_CTRL == 0); 
   
   L1Audio_HookHisrHandler(DP_D2C_PCM_EX, (L1Audio_EventHandler)pcmEx_hisrHdlr, 0);
   pcmEx.hdlr = pcm2way_hdlr;
   pcmEx.state = PCM2WAY_STATE; 
   DP_PCM_EX_CTRL = 0x110; 
   for(I = 0; ;I ++)
   {
      if(DP_PCM_EX_CTRL == 0x120)
         break;
      ASSERT(I < 22);  // wait 200ms  
      kal_sleep_task(2);
   }                                                      
}