Мы работаем над пользовательской платой разработки и в настоящее время реализуем «Sensor HAL» на Android 7.1.
Мы внедрили API-интерфейсы «Sensor HAL» в соответствии с требованиями службы датчиков Android (sensor.h) и можем создать для них файл .so. (Из-за некоторых пользовательских модификаций мы не можем использовать уже доступный HAL.)
После интеграции «Sensor HAL» мы видим, что Android переходит в зависшее состояние и не может дотянуться до экрана блокировки Android.
Наше наблюдение за поведением службы Android Sensor
SensorService: запуск nuSensorService...
"Sensor HAL" Загружается службой датчиков
Успешный открытый вызов "Sensor HAL"
Вызов get_sensor_list "Sensor HAL" успешен
Вызов функции опроса "Sensor HAL" всегда успешен.
Загрузка Android зависла на экране «Bootanimation»
ЖУРНАЛЫ ДЛЯ СПРАВКИ
01-01 00:58:48.258 1461 1461 D SensorService: запуск nuSensorService...
01-01 00:58:48.260 1461 1461 D Sensor_HAL: OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Выход... OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Вход @GetSensorList
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Выход @GetSensorList
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Ввод @SensorDeviceActivate, дескриптор 0, включен 0
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Ввод @SensorDeviceActivate, дескриптор 1, включено 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: ввод @SensorDeviceActivate, дескриптор 2, включен 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: ввод @GetSensorList
01 -01 00:58:48.262 1461 1461 D Sensor_HAL: выход из @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: вход в @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Выход из @GetSensorList
01-01 00:58:48.264 1461 1463 D SensorService: запуск потока nuSensorService...
01-01 00:58:49.953 1461 1462 D SensorService: новый поток SensorEventAckReceiver
=> Вышеупомянутая функция вызова вызывает функцию опроса, которая вызывает зависание системы.
=> Загрузка Android застряла здесь.
Обратите внимание, что текущая реализация команды poll() возвращает фиктивные события акселерометра с отметками времени на верхний уровень. Возвращаемое значение — это количество скопированных событий данных.
Пожалуйста, поправьте меня, если вы обнаружите, что что-то отсутствует или неверно в понимании.