Android平台 Psensor传感器调试方法
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传感器调试方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高通msm8994启动流程简介
- 下一篇: Android驱动之 Linux Inp