一、 驱动层调试
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来判断是否能工作。

Android平台 Psensor传感器调试方法的更多相关文章

  1. Android平台Airplay的实现方法

    Airplay属于局域网内异构设备之间分享多媒体数据的一种通信协议.Airplay设备有客户端和服务器之分,一般将小屏IOS设备实现为Airplay客户端,大屏幕设备实现为Airplay服务器.即iP ...

  2. Unity3D之移植学习笔记:移植到Android平台更好的方法

    接上文,之前我们采用了直接将Unity项目导出为Eclipse项目来修改的方式,这种做法存在的一个最大的问题就是:每当Unity被修改之后,都需要重新导出,而每次导出的项目在Android平台方面的J ...

  3. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  4. 使用Unity开发Android的几种调试方法

    前言 本文举例几种Android 调试的方法(PS:我是通过unity引擎来开发安卓游戏) Eclipse + adt 查看LOG 1.为Eclipse 装上adt 插件 2.打开Eclipse 的L ...

  5. android默认开启adb调试方法分析

    用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...

  6. android应用崩溃的调试方法(c++ lib so文件库崩溃)

    android调试工具addr2line使用: 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export P ...

  7. Android虚拟机 USB转串口调试方法

    有时候需要在虚拟机调试串口,首先安装串口的驱动程序(不知道的话可以用驱动精灵),然后打开设备管理器找到驱动,查看驱动使用的端口(比如COM3),虚拟机需要在命令行启动: 将SDK下的tools文件夹加 ...

  8. android机顶盒真机调试方法

    最近接触电视APP开发,之前对Android开发也不太了解还一直以为不能真机调试.最近静下心来想一想肯定能真机调试的,我是我不知道而已.现在讲述一下真机调试的步骤: 1.进入设置--关于,连续点击版本 ...

  9. 调试 Android* x86 应用程序的方法以及要使用的工具

    作者:Xiaodong Wang 1.简单介绍 众所周知,Android* 开发者头顶很多称呼:设计员.程序员等,而且一般会不可避免地被称为故障检修工. 代码中的错误无法避免.因此不管您是否一開始就造 ...

随机推荐

  1. ionic3-ng4学习见闻--(多语言方案)

    1.安装ng2-translate npm install ng2-translate --save 2.app.moudle.ts 引入模块,在下方新增方法 import { TranslateMo ...

  2. GDAL打开mdb文件失败解决方法

    使用GDAL打开mdb文件时提示下面错误信息: ERROR 1: Unable to initialize ODBC connection to DSN for DRIVER=Microsoft Ac ...

  3. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

    上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User { p ...

  4. IMDG产品功能扩展

    开源IMDG通常都提供了SPI或其他接口,供用户自行扩展.以Hazelcast为例,我们可以用一些好玩的小工具增强其查询.Map和后端持久化的功能.这些小工具虽然看起来很小,但功能也非常强大. SQL ...

  5. 值集&快速编码(Lookup_code)

    --值集 SELECT ffv.flex_value, ffv.description   FROM fnd_flex_values_vl ffv, fnd_flex_value_sets ffs   ...

  6. Tomcat中的ssl安全信道的实现

    为了实现https协议通信,tomcat需要利用JSSE把SSL/TLS协议集成到自身系统上,通过上一节我们知道不同的厂商可以实现自己的JSSE,而tomcat默认使用的是以前sun公司开发实现的包而 ...

  7. maven跳过单元测试的两个参数区别

    maven在打包过程中需要执行单元测试.但有些时候单元测试已经通过只是想打包时,想跳过测试.maven提供了两个参数跳过测试:maven.test.skip=true 和skipTests. 例子 m ...

  8. Dynamics CRM 自定义上传附件的图片悬浮层显示

    CRM中的附件是以流的形式保存在了数据库中,这样做的一个坏处是一旦系统运行时间久,附件上传的多了势必会导致数据库极速扩大,即影响系统的运行效率也对后期的迁移维护带来了不必要的麻烦.所以很多的客户都会要 ...

  9. 关于Lt分发系统的时序图分析

    我们已经知道,系统共分为两个模块,mather与son 同时系统允许的操作也有三种,向mather提交war包,我某个服务器更新代码,为所有服务器更新代码 我们一个一个来看 先说,向mather提交w ...

  10. Android存储之SharedPreferences

    Android数据存储之SharedPreferences SharedPreferences对象初始化 SharedPreferences mSharedPreferences = getShare ...