RK3288[android 7.1]调试笔记 ----双屏异触(edp屏做主屏,lvds做副屏)

21 篇文章 5 订阅
18 篇文章 7 订阅

1 先配置好双屏异显功能,具体参考以下链接

https://blog.csdn.net/MrDongShiYi/article/details/90903796

由于我们项目不需要副屏触摸功能,保证主屏使用usb接口触摸功能
在路径为/frameworks/native/services/inputflinger/EventHub.cpp屏蔽掉 device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;这句话

wangxd@build-server-100:~/work/dsy/rk3288-Android-7.0/frameworks/native((4e55453...))$ git diff services/inputflinger/EventHub.cpp
diff --git a/services/inputflinger/EventHub.cpp b/services/inputflinger/EventHub.cpp
old mode 100644
new mode 100755
index 03de939..620e492
--- a/services/inputflinger/EventHub.cpp
+++ b/services/inputflinger/EventHub.cpp
@ -1330,17 +1323,8 @@ status_t EventHub::openDeviceLocked(const char *devicePath) {
     //}
      // Determine whether the device is external or internal.
     if (isExternalDeviceLocked(device)) {
     //这个决定异显后usb接口的触摸屏会在调用到副屏上
-           device->classes |= INPUT_DEVICE_CLASS_EXTERNAL; 
+            //   device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;
     }
 
     if (device->classes & (INPUT_DEVICE_CLASS_JOYSTICK | INPUT_DEVICE_CLASS_DPAD)

2 双屏异触原理说明

   在原生的 Android 系统代码中,触摸的事件实体中已经包含了一个叫做 displayId 的成员。
这说明双触摸的框架 Android 基本已经做好,如果触摸事件的 displayId 对应的是主屏,那么它
就会把事件送给主屏的 TouchdedWindow。同理,如果触摸事件的 displayId 对应的是副屏,
那么它就会把该事件送给副屏的 TouchedWindow。因此关键的地方就是这个 displayId 是如何
被赋值的,在 inputflinger 的 Eventhub.cpp 代码中,openDeviceLocked 函数会通过 ioctl()
获取设备信息,并根据获取到的信息判断设备的类型,在 device.classes 中对其相应的属性赋值,
其中 INPUT_DEVICE_CLASS_EXTERNAL 标识该设备是否为外接设备。当有 USB 或蓝牙接口
的触摸屏,该触摸设备会设置 INPUT_DEVICE_CLASS_EXTERNAL 属性,input 框架就是根据
这个属性来最终将其的 event 送给副屏的 TouchedWindow。


    // Determine whether the device is external or internal.标识该设备是否为外接设备
    if (isExternalDeviceLocked(device)) {
        device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;
    }


所以如果使用触摸屏,主屏使用的是 I2C 接口,副屏使用的是 USB 或者蓝牙接口,那么就可以实现双触摸。如果两个都使用的是 I2C,或者都使用的是 USB(蓝牙),只要修改代码保证主屏上的触摸设备不带 INPUT_DEVICE_CLASS_EXTERNAL 属性,副屏上的触摸设备带上这个属性,也可以实现双触摸功能。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个可以用于SD卡启动的rk3288-evb-android-act8846-ed.dts示例,仅供参考: ``` /dts-v1/; /include/ "rk3288.dtsi" / { model = "Rockchip RK3288 EVB with act8846 and edp"; chosen { bootargs = "earlyprintk console=ttyS2,115200n8 root=/dev/mmcblk1p2 rw rootwait"; }; memory@60000000 { reg = <0x60000000 0x40000000>; }; reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; kernel@0 { reg = <0x60000000 0x02000000>; }; reserved@20000000 { reg = <0x20000000 0x20000000>; }; }; aliases { mmc0 = &sdmmc; }; sdmmc: sdmmc@fe310000 { compatible = "rockchip,rk3288-dw-mshc"; reg = <0xfe310000 0x1000>; interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru PCLK_SDMMC0>, <&cru SCLK_SDMMC0>; clock-names = "pclk", "hclk"; dmas = <&pdma 12>, <&pdma 12>; dma-names = "rx", "tx"; pinctrl-0 = <&sdmmc_pins>; pinctrl-names = "default"; status = "okay"; }; sdmmc_pins: sdmmc@0 { rockchip,pins = < RK_GPIO1 1 RK_FUNC_2 RK_GPIO1 2 RK_FUNC_2 RK_GPIO1 3 RK_FUNC_2 RK_GPIO1 4 RK_FUNC_2 RK_GPIO1 5 RK_FUNC_2 RK_GPIO1 6 RK_FUNC_2 RK_GPIO1 7 RK_FUNC_2 RK_GPIO1 8 RK_FUNC_2 >; }; act8846: act8846@5b { compatible = "active-semi,act8846"; reg = <0x5b>; gpio-controller; #gpio-cells = <2>; interrupt-parent = <&gpio1>; interrupts = <14 IRQ_TYPE_EDGE_RISING>; pinctrl-names = "default"; pinctrl-0 = <&act8846_pins>; status = "okay"; }; act8846_pins: act8846@0 { rockchip,pins = < RK_GPIO4 3 RK_FUNC_GPIO RK_GPIO4 4 RK_FUNC_GPIO RK_GPIO4 5 RK_FUNC_GPIO >; }; edp: edp@1c19000 { compatible = "rockchip,rk3288-edp"; reg = <0x01c19000 0x1000>; interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru SCLK_EDP>; clock-names = "edp"; status = "okay"; }; backlight: backlight { compatible = "pwm-backlight"; pwms = <&pwm2 0 5000>; brightness-levels = <0 14 28 42 56 70 84 100>; default-brightness-level = <7>; status = "okay"; }; }; ``` 这个示例中,sdmmc节点表示SD卡,act8846节点表示PMIC,edp节点表示eDP显示器接口,backlight节点表示背光控制。其中,bootargs设置了SD卡启动的相关参数。注意,这个示例是根据某个特定的rk3288 EVB开发板进行配置的,如果你的硬件不同,需要进行相应的修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值