/* * FUNCTION * bmt_get_adc_channel_voltage * * DESCRIPTION * This function is used to obtain the Battery voltage of specific channel * * CALLS * * PARAMETERS * ch: specific channel * voltage: pointer for read the voltage * * RETURNS * KAL_FALSE: invalid channel * KAL_TRUE: finish the measurement * * GLOBALS AFFECTED * None */ kal_bool bmt_get_adc_channel_voltage(DCL_ADC_CHANNEL_TYPE_ENUM ch, kal_uint32 *voltage) { DCL_HANDLE adc_handle; ADC_CTRL_GET_PHYSICAL_CHANNEL_T adc_get_channel; ADC_CTRL_GET_DATA_T adc_data; ADC_CTRL_TRANSFORM_INTO_VOLT_T adcTransV; if(ch > DCL_VCHARGER_ADC_CHANNEL) return KAL_FALSE; adc_handle = DclSADC_Open(DCL_ADC, FLAGS_NONE); if(adc_handle == DCL_HANDLE_INVALID) { ASSERT(0); } adc_get_channel.u2AdcName = ch; DclSADC_Control(adc_handle, ADC_CMD_GET_CHANNEL, (DCL_CTRL_DATA_T *)&adc_get_channel); adc_data.u1Channel = adc_get_channel.u1AdcPhyCh; DclHADC_Control(adc_handle, ADC_CMD_GET_DATA,(DCL_CTRL_DATA_T *)&adc_data); adcTransV.u1AdcPhyCh = adc_get_channel.u1AdcPhyCh; adcTransV.d8AdcValue = adc_data.u4ADCData; DclSADC_Control(adc_handle, ADC_CMD_TRANSFORM_INTO_VOLT, (DCL_CTRL_DATA_T *)&adcTransV); *voltage = adcTransV.u4Volt; DclSADC_Close(adc_handle); return KAL_TRUE; }
/******************************************************************************* * FUNCTION * FT_FtADC_GetMeaData() * * DESCRIPTION * Handle the request of Getting MeaData * * CALLS * ADC_GetData2Meta(.) * * PARAMETERS * *req * * RETURNS * None * * GLOBALS AFFECTED * None *******************************************************************************/ void FT_FtADC_GetMeaData(ft_FtADC_GetMeaData_req_T* req) { //extern uint32 ADC_GetData2Meta(uint8 sel, uint16 meacount); ilm_struct ilm_ptr; ft_FtADC_GetMeaData_cnf_T *ptrMsg ; ADC_CTRL_GET_DATA_2_META_T data2meta; DCL_HANDLE adc_handle; FT_ALLOC_MSG(&ilm_ptr, sizeof(ft_FtADC_GetMeaData_cnf_T)); ptrMsg = (ft_FtADC_GetMeaData_cnf_T *)ilm_ptr.local_para_ptr; ASSERT(ptrMsg); ptrMsg->status=FT_CNF_OK; ptrMsg->header.ft_msg_id = FT_ADC_GETMEADATA_CNF_ID; adc_handle = DclHADC_Open(DCL_ADC, FLAGS_NONE); data2meta.u1Channel = req->Sel; data2meta.u2MeaCount = req->Meacount; if(DclHADC_Control(adc_handle, ADC_CMD_GET_DATA_2_META, (DCL_CTRL_DATA_T *)& data2meta) != STATUS_OK) { ptrMsg->status = FT_CNF_FAIL; } ptrMsg->value = data2meta.u4ADCData; if(DclHADC_Close(adc_handle) != STATUS_OK) { ptrMsg->status = FT_CNF_FAIL; } FT_SEND_MSG_TO_PC(&ilm_ptr); }
kal_uint8 FT_GetAdcMaxChannel(void) { // HAL modification DCL_HANDLE adc_handle; ADC_CTRL_GET_MAX_PHYSICAL_CH_T prGetMaxPhyCh; kal_uint8 adc_max_channel; adc_handle = DclSADC_Open(DCL_ADC, FLAGS_NONE); if(DclHADC_Control(adc_handle, ADC_CMD_GET_MAX_PHYSICAL_CH, (DCL_CTRL_DATA_T *)&prGetMaxPhyCh) != STATUS_OK) { // error handling (prevent from access out-of bound) adc_max_channel = 1; } adc_max_channel = prGetMaxPhyCh.u4Adc_max_ch; if(DclSADC_Close(adc_handle) != STATUS_OK) { // error handling (prevent from access out-of bound) adc_max_channel = 1; } return adc_max_channel; }