更改 Android Sensor Framework 中的 SensorEvent 数据值长度

问题描述 投票:0回答:2

我目前正在 Qualcomm Snapdragon 888 平台上开发环境光传感器的驱动程序。

当我尝试通过 Android 传感器框架与设备交互时,我仅获得 Lux 值(在

onSensorChanged
回调中,
values
对象中的
SensorEvent
字段的大小为
1
,而多个数据被推送)用勒克斯测量)。

当查看 HAL 的专有供应商实现时,我可以清楚地看到多个数据被推送到 HAL 事件消息队列,但框架仅转发 Lux 信息。

我猜想在 AOSP 中的某个地方,附加信息(在我的例子中是原始数据)被丢弃/忽略,我无法真正找到在代码库中完成此操作的位置。

总而言之,我想知道必须修补哪个位置才能保留这些信息并能够在应用程序级别使用它们。


在做一些研究时,我遇到了这个问题,用户正在使用光传感器的传感器框架转发的一些附加信息:阅读 Android RGB 光传感器 - Galaxy S5


谢谢!

android android-source sensors hal
2个回答
0
投票

我花了一些时间,但我设法通过应用以下补丁使其正常工作:

  • 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;
    ...
}

0
投票

此方法对Android V没有影响。 因为android v使用aidl方法。 不知道Android V上是否有类似的功能,期待您的答复。

© www.soinside.com 2019 - 2024. All rights reserved.