我目前正在为高通骁龙888平台上的环境光传感器开发驱动程序。
当我尝试通过Android传感器框架与设备交互时,我只得到Lux值(在onSensorChanged
回调中,SensorEvent
对象中values
字段的大小为1
,而多个数据随着Lux测量一起被推送)。
当看到HAL的专有供应商实现时,我可以清楚地看到多个数据被推送到HAL事件消息队列,但只有Lux信息被框架转发。
我猜在AOSP的某个地方,额外的信息(在我的情况下的原始数据)被丢弃/忽略,我真的找不到这个操作是在代码库中完成的。
总而言之,我想知道哪个位置必须打补丁,以便保留这些信息并能够在应用程序级别使用它们。
在做一些研究时,我遇到了这个问题,用户正在使用传感器框架转发的一些额外信息:阅读Android RGB光传感器- Galaxy S5
谢谢!
这花了我一些时间,但我设法使它工作应用以下补丁:
- 在
frameworks/base/core/java/android/hardware/Sensor.java
中,用所需的数据长度更新sSensorReportingModes
数组中传感器的条目:
private static final int[] sSensorReportingModes = {
...
2, // SENSOR_TYPE_LIGHT
...
}
- 在
hardware/interfaces/sensors/1.0/default/convert.cpp
中,相应地更新以下方法:
void convertFromSensorEvent(const sensors_event_t &src, Event *dst) {
...
case SensorType::LIGHT:
dst->u.data[0] = src.data[0];
dst->u.data[1] = src.data[1];
break;
...
}
void convertToSensorEvent(const Event &src, sensors_event_t *dst) {
...
case SensorType::LIGHT:
dst->data[0] = src.u.data[0];
dst->data[1] = src.u.data[1];
break;
...
}