/*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(); }
/***************************************************************************** * 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; }