Example #1
0
/*if add more measure parameters, just need modify bmt_adc_init*/
void bmt_adc_init(void)
{
   kal_uint8 ADC_VBAT_channel, ADC_VISENSE_channel, ADC_VBATTMP_channel;
   kal_uint8 ADC_VCHARGER_channel;

   #ifdef MTK_SLEEP_ENABLE
   bmt_sm_handle = L1SM_GetHandle();
   #endif
   bmt_stop_timer_init();
   BMT.VBAT_UEM = VBAT_UEM_CHR_OUT;
   /*to get customized ADC channel*/
   ADC_VBAT_channel=custom_adc_get_channel(vbat_adc_channel);
   ADC_VISENSE_channel=custom_adc_get_channel(visense_adc_channel);
      
   bmt_sche_vbat_id = adc_sche_create_object(MOD_BMT,ADC_VBAT_channel,10,bmt_evaluate_value,KAL_FALSE);
   bmt_bmtid_adcscheid[ADC_BMT_VBAT] = bmt_sche_vbat_id;
   bmt_measure_complete1[ADC_BMT_VBAT] = bmt_measure_complete_vbat1;
   
   bmt_sche_visense_id = adc_sche_create_object(MOD_BMT,ADC_VISENSE_channel,10,bmt_evaluate_value,KAL_FALSE);
   bmt_bmtid_adcscheid[ADC_BMT_VISENSE] = bmt_sche_visense_id;
   bmt_measure_complete1[ADC_BMT_VISENSE] = bmt_measure_complete_visense1;

 
	ADC_VBATTMP_channel=custom_adc_get_channel(vbattmp_adc_channel);
   bmt_sche_vbatemp_id = adc_sche_create_object(MOD_BMT,ADC_VBATTMP_channel,10,bmt_evaluate_value,KAL_FALSE);
   bmt_bmtid_adcscheid[ADC_BMT_VBATTMP] = bmt_sche_vbatemp_id;
   bmt_measure_complete1[ADC_BMT_VBATTMP] = bmt_measure_complete_vbatemp1;
   
	ADC_VCHARGER_channel=custom_adc_get_channel(vcharger_adc_channel);
   bmt_sche_vcharger_id = adc_sche_create_object(MOD_BMT,ADC_VCHARGER_channel,10,bmt_evaluate_value,KAL_FALSE);
   bmt_bmtid_adcscheid[ADC_BMT_VCHARGER] = bmt_sche_vcharger_id;
   bmt_measure_complete1[ADC_BMT_VCHARGER] = bmt_measure_complete_vcharger1;

   bmt_gen_complete_flag();

}
Example #2
0
/*****************************************************************************
 * FUNCTION
 *  uem_init_hardware_data
 * DESCRIPTION
 *
 * PARAMETERS
 *  void
 * RETURNS
 *
 *****************************************************************************/
kal_bool uem_init_hardware_data(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_bool ret_val = KAL_TRUE;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* when the last block EF nvram is reading ready, we will start to init HW environment */
    /* The audio init responsbility is change to MMI */
    /* initial RTC: Clock for one minute period, Alarm for no change */
    RTC_Config(uem_rtc_alarm_format_convert(DEVICE_AL_EN_NoChange), uem_rtc_clock_format_convert(DEVICE_TC_EN_ChkM));

    /* initial audio */
    l4cuem_set_mute_req(AUDIO_DEVICE_SPEAKER, KAL_FALSE);
    l4cuem_set_mute_req(AUDIO_DEVICE_MICROPHONE, KAL_FALSE);

#ifdef __MTK_TARGET__
    /* Initial ADC valur  */
    if (g_uem_cntx_p->adc_sche_id == 0)
    {
        g_uem_cntx_p->adc_sche_id = adc_sche_create_object(
                                        MOD_UEM,
                                        ADC_VBAT,
                                        ADC_BOOTUP_EVAL_PERIOD,
                                        (kal_uint8) ADC_BOOTUP_EVAL_COUNT,
                                        KAL_TRUE);
        /* send to the BMT task to register the callback message */
        uem_send_msg_to_bmt(MSG_ID_BMT_ADC_ADD_ITEM_REQ, g_uem_cntx_p->adc_sche_id);
    }

    /* Initial Keypad longpress/repeattime value */
    Kbd_SetLongPressTime(KPD_LONGPRESS_PERIOD);   /* ticks, in unit 10ms */
    Kbd_SetRepeatTime(KPD_REPEAT_PERIOD);         /* ticks, in unit 10ms */
#endif /* __MTK_TARGET__ */

    return ret_val;
}
/*************************************************************************
* FUNCTION
*  DclSADC_Control
*
* DESCRIPTION
*  This function is to send command to control the SW ADC module.
*
* PARAMETERS
*  handle: A valid handle return by DclSADC_Open()
*  cmd: A control command for ADC module
*          1. ADC_CMD_CREATE_OBJECT: to create measurement object
*          2. ADC_CMD_MODIFY_PARAM: to change measurement parameters
*          3. ADC_CMD_START_MEASURE: to start measurement item
*          4. ADC_CMD_STOP_MEASURE: to stop measurement item
*  data: The data of the control command
*          1. ADC_CMD_CREATE_OBJECT: pointer to a ADC_CTRL_CREATE_OBJECT_T structure
*          2. ADC_CMD_MODIFY_PARAM: pointer to a ADC_CTRL_MODIFY_PARAM_T structure
*          3. ADC_CMD_START_MEASURE: a null pointer
*          4. ADC_CMD_STOP_MEASURE: a null pointer
*
* RETURNS
*  STATUS_OK: command is executed successfully.
*  STATUS_FAIL: command is failed.
*  STATUS_INVALID_CMD: It's a invalid command.
*
*************************************************************************/
DCL_STATUS DclSADC_Control(DCL_HANDLE handle, DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data)
{
	if(handle >= MAX_DCL_ADC_HANDLE || handle <= DCL_HANDLE_INVALID)
	{
		ASSERT(0);
	}

	switch (cmd)
	{
		case ADC_CMD_CREATE_OBJECT:
		{
			DCL_UINT32 sche_id;
			ADC_CTRL_CREATE_OBJECT_T  *prCreateObj;
			
			if(dcl_adc_handle_used[handle] == 0)
			{
				ASSERT(0);		// Error!! The value shouldn't be 0
			}
			prCreateObj = &(data->rADCCreateObj);
			// Call into core function
			sche_id = adc_sche_create_object(prCreateObj);
			if(sche_id == 0xFF)
				return STATUS_OK;
			dcl_adc_sche_id[sche_id].handle = handle;
			#if !defined(DRV_DISABLE_SAP_ID)
			dcl_adc_sche_id[sche_id].adc_sap_id = prCreateObj->u4Sapid;
			#endif
			dcl_adc_sche_id[sche_id].complete_cb = NULL;
			dcl_adc_sche_id[sche_id].measure_cb = NULL;
			return STATUS_OK;
		}
	
		case ADC_CMD_MODIFY_PARAM:
		{
			ADC_CTRL_MODIFY_PARAM_T  *prModifyParam;
			DCL_UINT32 sche_id;

			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			prModifyParam = &(data->rADCModifyParam);
			adc_sche_modify_parameters(sche_id , prModifyParam->u4Period, prModifyParam->u1EvaluateCount);
			return STATUS_OK;
		}
		
		case ADC_CMD_START_MEASURE:
		{
			DCL_UINT32 sche_id;

			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			adc_sche_add_item(sche_id,
					dcl_adc_sche_id[sche_id].complete_cb,
					dcl_adc_sche_id[sche_id].measure_cb);
			return STATUS_OK;

		}
		
		case ADC_CMD_STOP_MEASURE:
		{
			DCL_UINT32 sche_id;

			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			adc_sche_remove_item(sche_id);
			return STATUS_OK;
		}
		
		case ADC_CMD_SET_TIMER_PAGE_ALIGN:
		{
			return STATUS_UNSUPPORTED;
		}
		
		case ADC_CMD_REGISTER_MEASURE_CB:
		{
			ADC_CTRL_REGISTER_MEASURE_CB_T  *prRegisterMeasureCB;
			DCL_UINT32 sche_id;
			
			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			prRegisterMeasureCB = &(data->rADCRegisterMeasureCB);
			dcl_adc_sche_id[sche_id].measure_cb = prRegisterMeasureCB->pfMeasure_cb;
			return STATUS_OK;
		}
		
		case ADC_CMD_REGISTER_COMPLETE_CB:
		{
			ADC_CTRL_REGISTER_COMPLETE_CB_T  *prRegisterCompleteCB;
			DCL_UINT32 sche_id;
			
			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			prRegisterCompleteCB = &(data->rADCRegisterCompleteCB);
			dcl_adc_sche_id[sche_id].complete_cb = prRegisterCompleteCB->pfComplete_cb;
			return STATUS_OK;
		}
		
		case ADC_CMD_GET_CHANNEL:
		{
			ADC_CTRL_GET_PHYSICAL_CHANNEL_T  *prGetChannel;
			prGetChannel = &(data->rADCGetPhyChannel);
			
			prGetChannel->u1AdcPhyCh = adc_sche_get_channel((adc_channel_type)prGetChannel->u2AdcName);
			return STATUS_OK;
		}
		
		case ADC_CMD_TRANSFORM_INTO_VOLT:
		{
			ADC_CTRL_TRANSFORM_INTO_VOLT_T  *prTransformVolt;
			prTransformVolt = &(data->rADCTransformVolt);
			
			prTransformVolt->u4Volt = adc_adc2vol(prTransformVolt->u1AdcPhyCh, prTransformVolt->d8AdcValue);
			return STATUS_OK;
		}
		
		case ADC_CMD_TRANSFORM_INTO_TEMP:
		{
			ADC_CTRL_TRANSFORM_INTO_TEMP_T  *prTransformTemp;
			prTransformTemp = &(data->rADCTransformTemp);
			
			prTransformTemp->u4Temp = volt2temp(prTransformTemp->u4Volt);
			return STATUS_OK;
		}
		
		case ADC_CMD_TRANSFORM_INTO_CURR:
		{
			ADC_CTRL_TRANSFORM_INTO_CURR_T  *prTransformCurr;
			prTransformCurr = &(data->rADCTransformCurr);
			
			prTransformCurr->u4Curr = volt2isense(prTransformCurr->u4Volt);
			return STATUS_OK;
		}
		
		case ADC_CMD_GET_SCHEDULER_PARAMETER:
		{
			ADC_CTRL_GET_SCHEDULER_PARAMETER_T  *prGetSchedulerPara;
			ADCScheMeasParameter *adc_para;
			DCL_UINT32 sche_id;
			
			sche_id = dclsadc_GetScheId(handle);
			if(sche_id == MAX_DCL_ADC_SCHE_ID) //not find correct sche_id //MODEM_ONLY load only allow RFTMP to access
				return STATUS_OK;	
			prGetSchedulerPara = &(data->rGetSchedulerPara);
			adc_sche_get_parameter(sche_id, &adc_para);
			prGetSchedulerPara->pPara.u4Ownerid           = (DCL_UINT32)adc_para->ownerid;
			prGetSchedulerPara->pPara.u4Sapid             = (DCL_UINT32)adc_para->sapid;
			prGetSchedulerPara->pPara.u4Period            = (DCL_UINT32)adc_para->period;
			prGetSchedulerPara->pPara.u1Adc_phy_id        = (DCL_UINT8) adc_para->adc_phy_id;
			prGetSchedulerPara->pPara.u1Adc_logic_id      = (DCL_UINT8) adc_para->adc_logic_id;
			prGetSchedulerPara->pPara.u1Evaluate_count    = (DCL_UINT8) adc_para->evaluate_count;
			prGetSchedulerPara->pPara.bSend_primitive     = (DCL_BOOL)  adc_para->send_primitive;
			prGetSchedulerPara->pPara.bConti_measure      = (DCL_BOOL)  adc_para->conti_measure;
			prGetSchedulerPara->pPara.u4Adc_sche_event_id = (DCL_UINT32)adc_para->adc_sche_event_id;
			prGetSchedulerPara->pPara.complete            = adc_para->complete;

			return STATUS_OK;
		}
		case ADC_CMD_SET_CALIBRATION_DATA:
		{
#ifdef DRV_ADC_NO_CALIBRATION
#else
			ADC_CTRL_SET_CALIBRATION_DATA_T  *prSetCalibrationData;
			prSetCalibrationData = &(data->rSetCalibrationData);

			adc_set_adc_calibration_data((ilm_struct*)prSetCalibrationData->ilm_ptr);
#endif //#ifdef DRV_ADC_NO_CALIBRATION			
			return STATUS_OK;

		}
		case ADC_CMD_READ_CALIBRATION_DATA:
		{
			ADC_CTRL_READ_CALIBRATION_DATA_T  *prReadCalibrationData;
			DCL_UINT32 i;
			DCL_DOUBLE slope, offset;
			
			prReadCalibrationData = &(data->rReadCalibrationData);
			adc_read_efuse_data(&slope, &offset);
			if(ADC_MAX_CHANNEL > 16) // we only define 16 unit in i4ADCSlope[]
				ASSERT(0);
			for(i=0;i<ADC_MAX_CHANNEL;i++)
			{
				prReadCalibrationData->i4ADCSlope[i] = slope;
				prReadCalibrationData->i4ADCOffset[i] = offset;
			}
			return STATUS_OK;
		}
		case ADC_CMD_READ_CALIBRATION_INFORM_IN_USBBOOT:
		{
			adc_read_calibration_data_inform();
			return STATUS_OK;
		}
		case ADC_CMD_SCHE_ID_GET_HANDLE:
		{
			DCL_CTRL_SCHE_ID_GET_HANDLE_T  *prADCScheIdGetHandle;
			prADCScheIdGetHandle = &(data->rADCScheIdGetHandle);
			
			prADCScheIdGetHandle->u4Handle = dcl_adc_sche_id[prADCScheIdGetHandle->u4Adc_sche_id].handle;
			return STATUS_OK;
		}

		case ADC_CMD_SET_MULTI_CHANNEL_READ:
		{
			DCL_UINT32 sche_id;	
			DCL_MULTI_CHANNEL_PARA_T *prADCMultiChannelPara;

			prADCMultiChannelPara = &(data->rMultiChannelPara);
			sche_id = dclsadc_GetScheId(handle);

			adc_multi_channel_set(sche_id,prADCMultiChannelPara);
			
			return STATUS_OK;
		}
	
		default:
			return STATUS_INVALID_CMD;
	}
//	return STATUS_FAIL;
}