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_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_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
|
* 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;
|
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
|
#if 0
|
||||||
// does stop make any sense on iio devices?
|
// does stop make any sense on iio devices?
|
||||||
mraa_result_t
|
mraa_result_t
|
||||||
|
|||||||
Reference in New Issue
Block a user