Позвольте мне поделиться тем, что я узнал и испытал:
Короткий ответ на вопрос, как перехватывать события iio, зависит от драйвера ядра сенсора и Sensor-HAL на Android.
Во-первых, событие iio вызывается аппаратным прерыванием; Контакт прерывания на датчике, подключенном к плате и распознаваемом платой, отправляет сигнал на плату, когда, например, появляются новые данные.
Во-вторых, Sensor Manager/Service не взаимодействует с драйвером напрямую. То, что он слушает, это Sensor-HAL. Sensor-HAL генерирует события для службы датчиков, а не для самого драйвера напрямую. Это означает, что SensorHAL должен считывать данные из sysfs (файловые интерфейсы, созданные драйвером) и возвращать эти данные вызовам службы датчиков (см. poll() , sensor_event структура в https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h )
Наконец, catchevent предназначен только для «событий прерывания», которые генерируются устройствами, определенными как устройство прерывания (например, сенсорный экран). Interrupt , iio и hwmon — это разные типы структур устройств на основе sw в ядре Linux.
Вывод. Если у вас есть новый датчик и вы хотите перехватывать/считывать данные с него в Android, вам следует
1. Найдите/ напишите драйвер с подходящей моделью устройства (input, iio, hwmon и т. д.)
2. заставить плату распознавать устройство (путем добавления информации в дерево устройств или файл конфигурации платы)
3. Найдите/запишите подходящий Sensor-HAL или добавьте датчик в существующий HAL.
Только после этих шагов приложение может получить данные датчика через SensorListener.
как поймать/проверить перехват событий на собственном уровне: не удается найти прямой способ перехвата событий. Общий способ доступа к данным датчика (после добавления соответствующего драйвера и получения платой распознавания устройства) заключается в использовании интерфейсов sysfs.
Например, из оболочки устройства Android (как root):
#sys/bus/iio/devices/iio:device0/ls
in_accel_x_raw in_accel_y_raw in_accel_z_raw in_accel_scale ....
#cat in_accel_x_raw
person
Kaplan
schedule
24.10.2017