Private
Public Access
2
0

aio: use posix read/lseek API

Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Brendan Le Foll
2014-05-13 21:59:54 +00:00
parent 320341df4d
commit 4ef5176dad
2 changed files with 11 additions and 7 deletions

View File

@@ -34,7 +34,7 @@ extern "C" {
#endif
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include "maa.h"
#include "gpio.h"
@@ -44,7 +44,7 @@ extern "C" {
typedef struct {
unsigned int channel;
FILE *adc_in_fp;
int adc_in_fp;
} maa_aio_context;
/** Initialise an Analog input device, connected to the specified pin

View File

@@ -23,6 +23,7 @@
*/
#include <stdlib.h>
#include <fcntl.h>
#include "aio.h"
@@ -34,7 +35,8 @@ static maa_result_t aio_get_valid_fp(maa_aio_context* dev)
snprintf(file_path, 64, "/sys/bus/iio/devices/iio:device0/in_voltage%d_raw",
dev->channel );
if (NULL == (dev->adc_in_fp = fopen(file_path, "r"))) {
dev->adc_in_fp = open(file_path, O_RDONLY);
if (dev->adc_in_fp == -1) {
fprintf(stderr, "Failed to open Analog input raw file %s for "
"reading!\n", file_path); return( MAA_ERROR_INVALID_RESOURCE);
}
@@ -106,13 +108,15 @@ unsigned int maa_aio_read_u16(maa_aio_context* dev)
unsigned int analog_value=0;
unsigned int shifter_value=0;
if (NULL == dev->adc_in_fp) {
if (dev->adc_in_fp == -1) {
aio_get_valid_fp(dev);
}
fseek(dev->adc_in_fp, SEEK_SET, 0);
fread(buffer, sizeof(buffer), 1, dev->adc_in_fp);
fseek(dev->adc_in_fp, SEEK_SET, 0);
lseek(dev->adc_in_fp, 0, SEEK_SET);
if (read(dev->adc_in_fp, buffer, sizeof(buffer)) < 1) {
fprintf(stderr, "Failed to read a sensible value");
}
lseek(dev->adc_in_fp, 0, SEEK_SET);
raw_value = atoi(buffer);