Android HAL使系统陷入poll()函数

时间:2017-09-29 05:05:37

标签: android android-sensors hal sensormanager

我们正在开发定制开发板,目前我们正在实施"传感器HAL"在Android 7.1上。

我们已实施"传感器HAL" API根据Android传感器服务要求(sensor.h)并且能够为其构建.so文件。 (由于一些自定义修改,我们无法使用已有的HAL。)

整合"传感器HAL"我们看到Android处于挂起状态,直到Android锁屏才能到达。

我们对Android传感器服务行为的观察

  1. SensorService:nuSensorService起始......

  2. "传感器HAL"由传感器服务加载

  3. "传感器HAL"公开电话成功

  4. "传感器HAL" get_sensor_list调用成功

  5. "传感器HAL" poll函数每次调用成功。

  6. Android启动陷入" Bootanimation"屏

  7. 日志参考

      

    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

    =>以上调用poll函数导致系统挂起。

    => Android启动卡在这里。

    请注意,poll()命令的当前实现是将带有时间戳的虚拟Accelerometer事件返回到上层。返回值是复制的数据事件数。

    如果您发现遗漏或错误理解,请纠正我。

1 个答案:

答案 0 :(得分:0)

各位,

最后,我能够通过延迟添加相同的功能来解决这个问题。

在线程中调用Poll()函数并将事件发送到系统客户端(SensorManager)。由于我们直接从函数返回而没有任何延迟,因此事件将以更大的速度推送,并且没有时间安排其他线程。

要完成此操作,请考虑延迟时间。