Тайм-аут пополнения буфера IIO

Я хотел бы прочитать значения датчика IMU из проекта C. Это устройство LSM6DSL, и я использую драйверы ядра IIO. Они работают правильно, потому что я могу прочитать значения с помощью команды:

cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw
> 2

Проблема в том, что когда я хочу пополнить свой буфер с помощью функции iio_buffer_refill(struct iio_buffer *buffer), он возвращает код ошибки 110, что является временем ожидания. До этого я включил чтение некоторых каналов, и буфер был успешно создан. Я провел некоторое исследование по этой проблеме, и я считаю, что она связана с параметрами прерывания из дерева устройств.

Вот мое дерево устройств для протокола i2c (я взял пример по этой ссылке):

lsm6dsl@6b {                                                                  
            compatible = "st,lsm6dsl";                                            
            reg = <0x6b>;                                                         
            interrupt-parent = <&gpio>;                                           
            interrupts = <26 0x4>;                                                
           };

Это действительно связано с деревом устройств или я что-то упустил? Заранее спасибо.

[Edit] Вот исходный код, который создает буфер и пытается прочитать его:

struct iio_context *context = iio_create_local_context();
struct iio_device *device = iio_context_get_device(context, 1);
struct iio_channel *chan = iio_device_get_channel(device, 0);
iio_channel_enable(chan);
struct iio_buffer *buff = iio_device_create_buffer(device, 1, false);
if (buff == NULL)
{
  printf("Error %d: %s\n", errno, strerror(errno));
  return (1);
}
printf("Read size is: %ld\n", (long)iio_buffer_refill(buff));
iio_buffer_destroy(buff);

> Read size is: -110

0 ответов

Другие вопросы по тегам