iio: trigger buffer samples fix
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
2df28fa883
commit
657f28a67d
@@ -79,6 +79,9 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
int padint = 0;
|
int padint = 0;
|
||||||
int curr_bytes = 0;
|
int curr_bytes = 0;
|
||||||
char shortbuf, signchar;
|
char shortbuf, signchar;
|
||||||
|
|
||||||
|
dev->datasize = 0;
|
||||||
|
|
||||||
memset(buf, 0, MAX_SIZE);
|
memset(buf, 0, MAX_SIZE);
|
||||||
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM, dev->num);
|
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM, dev->num);
|
||||||
dir = opendir(buf);
|
dir = opendir(buf);
|
||||||
@@ -151,6 +154,10 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
chan->enabled = (int) strtol(readbuf, NULL, 10);
|
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);
|
close(fd);
|
||||||
}
|
}
|
||||||
// clean up str var
|
// clean up str var
|
||||||
@@ -158,7 +165,6 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dev->datasize = curr_bytes;
|
|
||||||
|
|
||||||
return MRAA_SUCCESS;
|
return MRAA_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -224,7 +230,7 @@ mraa_iio_write(mraa_iio_context dev, const char* attr_chan, const char* data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static mraa_result_t
|
static mraa_result_t
|
||||||
mraa_iio_wait_event(int fd, char* data)
|
mraa_iio_wait_event(int fd, char* data, int *read_size)
|
||||||
{
|
{
|
||||||
struct pollfd pfd;
|
struct pollfd pfd;
|
||||||
|
|
||||||
@@ -240,7 +246,7 @@ mraa_iio_wait_event(int fd, char* data)
|
|||||||
int x = poll(&pfd, 1, -1);
|
int x = poll(&pfd, 1, -1);
|
||||||
|
|
||||||
memset(data, 0, 100);
|
memset(data, 0, 100);
|
||||||
read(fd, data, 100);
|
*read_size = read(fd, data, 100);
|
||||||
|
|
||||||
return MRAA_SUCCESS;
|
return MRAA_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -249,12 +255,17 @@ static void*
|
|||||||
mraa_iio_trigger_handler(void* arg)
|
mraa_iio_trigger_handler(void* arg)
|
||||||
{
|
{
|
||||||
mraa_iio_context dev = (mraa_iio_context) arg;
|
mraa_iio_context dev = (mraa_iio_context) arg;
|
||||||
|
int i;
|
||||||
char data[MAX_SIZE*100];
|
char data[MAX_SIZE*100];
|
||||||
|
int read_size;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (mraa_iio_wait_event(dev->fp, &data[0]) == MRAA_SUCCESS) {
|
if (mraa_iio_wait_event(dev->fp, &data[0], &read_size) == MRAA_SUCCESS) {
|
||||||
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
|
||||||
dev->isr(&data);
|
//only can process if readsize >= enabled channel's datasize
|
||||||
|
for (i=0; i<(read_size/dev->datasize); i++) {
|
||||||
|
dev->isr(&data);
|
||||||
|
}
|
||||||
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
|
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
|
||||||
} else {
|
} else {
|
||||||
// we must have got an error code so die nicely
|
// we must have got an error code so die nicely
|
||||||
|
|||||||
Reference in New Issue
Block a user