1

I am using MPU-9250 Invensense sensor and have taken its driver from android kernel and integrated with linux kernel. The driver is working fine with some modifications to the kernel and node, /dev/iio:\device0, and files under sys file system are also generated. So I assume that the driver is working fine.

Now I want to read the sensor data from the user space with an application using /dev/iio:\device0 node. For that I need to open read close functionalities in the MPU-9250 driver. But no file operations are available in the driver.

I have tried to read data from sys file system i.e,

# echo 1 > /sys/bus/iio/devices/iio:device0/power_state
# echo 1 > /sys/bus/iio/devices/iio:device0/accel_enable
# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length
# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

After this it should populate data read from the sensor. But nothing is getting displayed. So after this I tried read the data from dev filesystem

# cat /dev/iio:\device0

even then nothing got displayed.

Please can someone tell me how to read the data.

Regards

Sam Protsenko
  • 14,045
  • 4
  • 59
  • 75
Vamsee
  • 55
  • 1
  • 6

1 Answers1

0

I believe your issue relates to that fact you didn't enable any of the scan elements.

Scan elements located in : /sys/bus/iio/devices/iio:device[x]/scan_elements.

Here you should enable which scan elements you want to capture. yo should have 3 file with the suffix : _en , _index and _type.

_type refer to the type of the scan , index is the channel that will be allocated for the scan in the device read and _en which state "enable". just write a "1" to the scan _en file you wish to enable , write to the /buffer/length 100 and /buffer/enable "1" and you should start getting data.

I dont think this is your issue because you would probably not be able to enable the buffer at all but, you may need to enable a trigger which should also be located in /sys/bus/iio/devices. you should have trigger1/2/3 directories here, depend on number of IIO devices you have. you may need to write down the trigger name to /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger.

So you should do :

echo /sys/bus/iio/devices/trigger[x]/name > 
/sys/bus/iio/devices/iio:device[x]/trigger/current_trigger

hope thats help.

Nuno_147
  • 2,817
  • 5
  • 23
  • 36
  • Writing to buffer/length doesn't work. This 'echo 1 > enable' produces '-sh: echo: write error: Invalid argument'. – BЈовић Mar 01 '17 at 15:07
  • @BЈовић, check out if the trigger name was set: 'cat path/trigger/current_trigger'. – ViniCoder Mar 26 '17 at 18:41
  • The correct command is: 'cat /sys/bus/iio/devices/trigger[x]/name > /sys/bus/iio/devices/iio:device[x]/trigger/current_trigger'. – Mart Jan 06 '22 at 19:37