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:
committed by
Brendan Le Foll
parent
e7e58509f0
commit
3750e2cfa2
@@ -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
|
||||
*
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user