コード例 #1
0
ファイル: bmt_utility.c プロジェクト: WayWingsDev/testmywatch
/*
* 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;
}
コード例 #2
0
/*******************************************************************************
 * 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;
}