Android平台 Psensor传感器调试方法
发布日期:2021-06-30 21:52:27 浏览次数:2 分类:技术文章

本文共 3804 字,大约阅读时间需要 12 分钟。

一、 驱动层调试
1、在板级dts文件中增加相应的dts代码,
如:调试sensor类,在代码中找到已经有的代码在修改,I2C使用那根(一般为I2C3),I2C地址(找datasheet或者FAE),哪个中断引脚(看原理图)。
twsi3: i2c@d4013800 {
                                mc3xxx@4c {
compatible = "mc3, mc3xxx";
reg = <0x4c>;
interrupt-parent = <&gpio>;
interrupts = <91 0x1>;
irq-gpios = <&gpio 91 0>;
avdd-supply = <&ldo4>;
status = "okay";
};
      epl2182@49 {
compatible = "epl,epl2182";
reg = <0x49>;
interrupt-parent = <&gpio>;
interrupts = <4 0x1>;
irq-gpios = <&gpio 4 0>;
avdd-supply = <&ldo4>;
};

}

;

2、在_defconfig中打开相应的driver文件

3、如何判断driver是否调通?
1)编译后下载后,通过adb 中getevent判断是否驱动产生了设备节点
shell@MMX:/ # getevent
getevent
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 1: /dev/input/event1
  name:     "vnc-ts"
add device 2: /dev/input/event7
  name:     "map asoc Hook"
add device 3: /dev/input/event8
  name:     "map asoc Headset"
add device 4: /dev/input/event0
  name:     "pxa27x-keypad"

add device 5: /dev/input/event3

  name:     "88pm886_on"
add device 6: /dev/input/event2
  name:     "msg2238"
add device 7: /dev/input/event6
  name:     "APDS_proximity_sensor"
add device 8: /dev/input/event5
  name:     "APDS_light_sensor"
add device 9: /dev/input/event4
  name:     "accelerometer"

通过以上可以看出为dev/input/event5 和/dev/input/event6  ,

2)确定是否有报点上传 
通过以下命令进行判断

1|shell@:/sys/class/input/input5 $ cat active

cat active
0
shell@:/sys/class/input/input5 $ echo 1 >active
echo 1 >active
shell@:/sys/class/input/input5 $ getevent
getevent
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 1: /dev/input/event1
  name:     "vnc-ts"
add device 2: /dev/input/event7
  name:     "map asoc Hook"
add device 3: /dev/input/event8
  name:     "map asoc Headset"
add device 4: /dev/input/event0
  name:     "pxa27x-keypad"
add device 5: /dev/input/event3
  name:     "88pm886_on"
add device 6: /dev/input/event2
  name:     "msg2238"
add device 7: /dev/input/event6
  name:     "APDS_proximity_sensor"
add device 8: /dev/input/event5
  name:     "APDS_light_sensor"
add device 9: /dev/input/event4
  name:     "accelerometer"
could not get driver version for /dev/input/mice, Not a typewriter
/dev/input/event5: 0003 0018 00000066
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0018 0000006d
/dev/input/event5: 0000 0000 00000000
/dev/input/event3: 0001 0074 00000001
/dev/input/event3: 0000 0000 00000000
/dev/input/event4: 0003 0000 0000000b
/dev/input/event4: 0000 0000 00000000
/dev/input/event3: 0001 0074 00000000
/dev/input/event3: 0000 0000 00000000
/dev/input/event4: 0003 0000 fffffff5

#adb shell getevent -lr /dev/input/event5

手动验证有数据传上来,说明driver工作正常。

二、framework层调试

1) 判断framework使用那套流程,打开相应的宏开关
通过sensors_hal.cpp中查看开关那个红
BOARD_HAVE_AVAGO=true
2)驱动层有设备节点是否跟framework层一致。
Driver:
static const char ElanPsensorName[] = "APDS_proximity_sensor";
static const char ElanALsensorName[] = "APDS_light_sensor";
framework:
AvagoLightSensor::AvagoLightSensor()
    : LightSensorSet("APDS_light_sensor")
{
}
3)上报的诗句是否与farmework中处理的是否一致
Driver中:
input_report_abs(epld->als_input_dev, ABS_PRESSURE, lux);
framework中:
int LightSensorSet::readEvents(sensors_event_t* data, int count)
{   

…  …

     if ((type == EV_ABS) && (event->value > 0)) {
            if (event->code == ABS_PRESSURE) {
                mPendingEvent.light = event->value;
                valid = true;
                if (LOG_DBG)
                    LOGD("LightSensor: read value = %f", mPendingEvent.light);
            }
        } else if ( (type == EV_SYN) && valid ) {
4) 注意使能标志位是否一致。
Driver中: 
static struct device_attribute dev_attr_light_enable =
__ATTR(active, S_IRWXUGO,
  light_enable_show, light_enable_store);
Framework中:
int LightSensorSet::enable(int32_t handle, int en)
{
    int flags = en ? 1 : 0;
    if (flags != mEnabled) {
        int fd;
        char enablePath[PATH_MAX];
        sprintf(enablePath, "%s/%s", mClassPath, "active");

        if (LOG_DBG)

   LOGD("LightSensor enable path is %s", enablePath);
        fd = open(enablePath, O_RDWR);
        if (fd >= 0) {
            err = write(fd, buf, sizeof(buf));
            close(fd);
    return 0;
}

三、应用层调试

安装并使用测试sensor APP来判断是否能工作。

转载地址:https://loongembedded.blog.csdn.net/article/details/51140107 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android驱动之 Linux Input子系统之TP——A/B(Slot)协议
下一篇:高通msm8994启动流程简介

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月17日 23时27分14秒