Private
Public Access
2
0

iio: iio update channel

Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Lay, Kuan Loon
2015-11-06 09:49:54 +08:00
committed by Brendan Le Foll
parent e7e58509f0
commit 3750e2cfa2
2 changed files with 56 additions and 0 deletions

View File

@@ -124,6 +124,8 @@ mraa_result_t mraa_iio_event_extract_event(struct iio_event_data* event,
mraa_result_t mraa_iio_get_mounting_matrix(mraa_iio_context dev, float mm[9]);
mraa_result_t mraa_iio_create_trigger(mraa_iio_context dev, const char* trigger);
mraa_result_t mraa_iio_update_channels(mraa_iio_context dev);
/**
* De-inits an mraa_iio_context device
*

View File

@@ -559,6 +559,60 @@ mraa_iio_create_trigger(mraa_iio_context dev, const char* trigger)
return MRAA_ERROR_UNSPECIFIED;
}
mraa_result_t
mraa_iio_update_channels(mraa_iio_context dev)
{
const struct dirent* ent;
DIR* dir;
int chan_num = 0;
char buf[MAX_SIZE];
char readbuf[32];
int fd;
mraa_iio_channel* chan;
dev->datasize = 0;
memset(buf, 0, MAX_SIZE);
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM, dev->num);
dir = opendir(buf);
if (dir != NULL) {
while ((ent = readdir(dir)) != NULL) {
if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_index"), "_index") == 0) {
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM "/%s", dev->num, ent->d_name);
fd = open(buf, O_RDONLY);
if (fd > 0) {
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
break;
}
chan_num = ((int) strtol(readbuf, NULL, 10));
chan = &dev->channels[chan_num];
chan->index = chan_num;
close(fd);
buf[(strlen(buf) - 5)] = '\0';
char* str = strdup(buf);
// grab the enable flag of channel
snprintf(buf, MAX_SIZE, "%sen", str);
fd = open(buf, O_RDONLY);
if (fd > 0) {
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
return -1;
}
chan->enabled = (int) strtol(readbuf, NULL, 10);
// only calculate enable buffer size for trigger buffer extract data
if (chan->enabled) {
dev->datasize += chan->bytes;
}
close(fd);
}
// clean up str var
free(str);
}
}
}
}
return MRAA_SUCCESS;
}
#if 0
// does stop make any sense on iio devices?
mraa_result_t