我们正在开发定制开发板,目前我们正在实施"传感器HAL"在Android 7.1上。
我们已实施"传感器HAL" API根据Android传感器服务要求(sensor.h)并且能够为其构建.so文件。 (由于一些自定义修改,我们无法使用已有的HAL。)
整合"传感器HAL"我们看到Android处于挂起状态,直到Android锁屏才能到达。
我们对Android传感器服务行为的观察
SensorService:nuSensorService起始......
"传感器HAL"由传感器服务加载
"传感器HAL"公开电话成功
"传感器HAL" get_sensor_list调用成功
"传感器HAL" poll函数每次调用成功。
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
=>以上调用poll函数导致系统挂起。
=> Android启动卡在这里。
请注意,poll()命令的当前实现是将带有时间戳的虚拟Accelerometer事件返回到上层。返回值是复制的数据事件数。
如果您发现遗漏或错误理解,请纠正我。
答案 0 :(得分:0)
各位,
最后,我能够通过延迟添加相同的功能来解决这个问题。
在线程中调用Poll()函数并将事件发送到系统客户端(SensorManager)。由于我们直接从函数返回而没有任何延迟,因此事件将以更大的速度推送,并且没有时间安排其他线程。
要完成此操作,请考虑延迟时间。