改变Android传感器框架中SensorEvent数据值的长度



我目前正在为高通骁龙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;
...
}

相关内容

  • 没有找到相关文章

最新更新