clinux-kernelaccelerometergyroscopeiio

IIO device buffer always null


I am using an IMU sensor called LSM6DSL with the iio drivers. They work fine if I display the raw values with the command:

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

Then I decided to use the libiio so I can read all these values from a C program :

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);
if (iio_channel_is_scan_element(chan) == true)
    printf("OK\n");
struct iio_channel *chan2 = iio_device_get_channel(device, 1);
iio_channel_enable(chan2);
struct iio_buffer *buff = iio_device_create_buffer(device, 1, true);
if (buff == NULL)
{
  printf("Error: %s\n", strerror(errno));
  return (1);
}

And this is the result :

OK
Error: Device or resource busy

Am I missing something? Let me know if you need more informations.


Solution

  • I guess I found the answer, and I didn't pay attention to the effects of the ncurses library (sorry for not mentioning that I was using it).

    I moved these functions before the initialization of ncurses and now the buffer is created successful.