Android HAL заставляет систему зависать в функции poll()

Мы работаем над пользовательской платой разработки и в настоящее время реализуем «Sensor HAL» на Android 7.1.

Мы внедрили API-интерфейсы «Sensor HAL» в соответствии с требованиями службы датчиков Android (sensor.h) и можем создать для них файл .so. (Из-за некоторых пользовательских модификаций мы не можем использовать уже доступный HAL.)

После интеграции «Sensor HAL» мы видим, что Android переходит в зависшее состояние и не может дотянуться до экрана блокировки Android.

Наше наблюдение за поведением службы Android Sensor

  1. SensorService: запуск nuSensorService...

  2. "Sensor HAL" Загружается службой датчиков

  3. Успешный открытый вызов "Sensor HAL"

  4. Вызов get_sensor_list "Sensor HAL" успешен

  5. Вызов функции опроса "Sensor HAL" всегда успешен.

  6. Загрузка 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() возвращает фиктивные события акселерометра с отметками времени на верхний уровень. Возвращаемое значение — это количество скопированных событий данных.

Пожалуйста, поправьте меня, если вы обнаружите, что что-то отсутствует или неверно в понимании.


person Harshit    schedule 29.09.2017    source источник
comment
Мы все еще сталкиваемся с этой проблемой. Есть ли кто-нибудь, кто сталкивался с этой проблемой раньше? Заранее оценил вашу помощь.   -  person Harshit    schedule 02.10.2017


Ответы (1)


Ребята,

Наконец, я могу исправить эту проблему, добавив задержку в ту же функцию.

Функция Poll() вызывается в потоке и отправляет события системному клиенту (SensorManager). Поскольку мы напрямую возвращаемся из функции без задержки, события будут передаваться с большей скоростью, и у нас не будет времени для планирования других потоков.

Для этого необходимо учесть величину задержки.

person Harshit    schedule 03.10.2017