blob: b392fca251434ee8583d4d9299d279696f540037 [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sc_bsp.h>
#include <errno.h>
#include "lynq-adc.h"
#include "liblog/lynq_deflog.h"
#ifdef __cplusplus
extern "C" {
#endif
#define ADC0_NODES "/sys/kernel/debug/pmu_zx29/adc0"
#define ADC1_NODES "/sys/kernel/debug/pmu_zx29/adc1"
#define ADC2_NODES "/sys/kernel/debug/pmu_zx29/adc2"
/********************************************************************
* @brief: qser_adc_show, function to read ADC value from specific channel
* @param qadc [IN]: ADC_CHANNEL_E, the ADC channel to read from
* @return : int, the read ADC value, or error code if failed
* @todo: NA
* @see: NA
* @warning: NA
*********************************************************************/
int qser_adc_show(ADC_CHANNEL_E qadc)
{
int adc_value;
char cmd[1024];
char cmd_ret[1024];
FILE *fp;
switch(qadc)
{
case QADC_NONE:
{
LYERRLOG("function %s line %d\n", __FUNCTION__, __LINE__);
return 0;
}
case ADC0:
{
LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
sprintf(cmd, "cat %s", ADC0_NODES);
break;
}
case ADC1:
{
LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
sprintf(cmd, "cat %s", ADC1_NODES);
break;
}
case ADC2:
{
LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
sprintf(cmd, "cat %s", ADC2_NODES);
break;
}
default:
{
LYERRLOG("input error\n");
return -1;
}
}
if((fp = popen(cmd,"r")) == NULL)
{
LYERRLOG("popen error: %s", strerror(errno));
return -1;
}
if((fread(cmd_ret,sizeof(cmd_ret),1,fp))<0)
{
LYERRLOG("fread fail: %s", strerror(errno));
fclose(fp);
return -1;
}
fclose(fp);
adc_value = atoi(cmd_ret);
if (adc_value < 0 || adc_value > 12000)
{
LYERRLOG("bad adc value %s!", cmd_ret);
return -1;
}
return adc_value;
}
DEFINE_LYNQ_LIB_LOG(LYNQ_ADC)
#ifdef __cplusplus
}
#endif