- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在android 5平台上,我很难让atmel mxt641t驱动的触摸屏工作。
我的设置如下:
硬件:带高通Snapdragon 410 MSM8916 ARM64处理器的Inforce 6309 SBC。
带有ATMEL MXT641T控制器芯片的定制触摸屏。
ATMEL和Snapdragon之间的I2C连接连接到I2C0。
android 5操作系统,使用linux内核3.10 fromgit://codeaurora.org/kernel/msm-3.10.git
branchRel_V1.3
(这是sbc附带的bsp的一部分)。
…但是最新版本的atmel驱动程序atmel_mxt_ts.c
覆盖在内核树上(也用atmel_maxtouch_ts.c
中显示相同行为的msm-3.10.git
版本测试)。
ATMEL芯片的内线连接到GPIO 53(这是该板的EXT_CONN_GPIO_1
),外部上拉电阻为1.8V。
ATMEL芯片的重置线路断开。
我所做的是修改设备树以包含ATMEL设备,如下所示:
&i2c_0 {
atmel_maxtouch_ts@4a {
compatible = "atmel,maxtouch";
reg = <0x4a>;
interrupt-parent = <&msm_gpio>;
interrupts = <53 0>;
atmel,panel-coords = <0 0 1024 768>;
atmel,display-coords = <0 0 1024 768>;
atmel,family-id = <164>;
atmel,variant-id = <2>;
atmel,version = <21>;
atmel,build = <0xaa>;
};
};
msm_gpio
在bsp中定义如下(未触及)。
&soc {
tlmm_pinmux: pinctrl@1000000 {
compatible = "qcom,msm-tlmm-8916";
reg = <0x1000000 0x300000>;
interrupts = <0 208 0>;
/*General purpose pins*/
gp: gp {
qcom,num-pins = <122>;
#qcom,pin-cells = <1>;
msm_gpio: msm_gpio {
compatible = "qcom,msm-tlmm-gp";
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
num_irqs = <122>;
};
};
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
),并手动运行
insmod
。
mxt-app
时,设备工作:当我触摸屏幕时,消息进入,因此i2c连接正常(但它使用轮询)。
mxt_start
,其中启用了中断。我向驱动程序添加了一些调试语句,以验证它是否正在加载。
/dev/input/event6
,可以用
cat
打开(但触摸屏幕时不会显示任何消息)。
/proc/interrupts
中可见,但从不触发(见下文)。
0x0
,
0x8
或
0x2008
作为设备树中中断单元的第二个元素)没有关系:在任何情况下都不会触发中断。
/proc/interrupts
:
$ cat /proc/interrupts
...
326: 0 0 0 0 msm_tlmm_irq maxtouch
...
dmesg
中出现的内容:
<6>[ 55.290620] atmel_mxt_ts 0-004a: Family: 164 Variant: 2 Firmware V1.5.AA Objects: 43
<4>[ 55.291252] atmel_mxt_ts 0-004a: Enabling RETRIGEN workaround
<6>[ 55.365918] atmel_mxt_ts 0-004a: Touchscreen size X1024Y768
<6>[ 55.367017] input: Atmel maXTouch Touchscreen as /devices/soc.0/78b6000.i2c/i2c-0/0-004a/input/input6
atmel_mxt_ts.c
中的驱动程序代码中了解到,驱动程序应该在该中断线上触发,然后通过启动I2C传输来查询设备以读取T5消息,设备将在该消息上返回一个触摸列表,然后将其传递到操作系统。我还没有找到一个数据表或文档来正确解释这一点,但根据我目前所看到的情况,这正是我所怀疑的。
$ echo 955 > /sys/class/gpio/export # 955 because EXP_CONN_GPIO_1 is GPIO pin 53, which has offset 902
cat /sys/class/gpio/gpio955/value
/sys/kernel/debug/gpio
中未显示MaxTouch驱动程序的GPIO:
$ cat /sys/kernel/debug/gpio
GPIOs 576-607, platform/qcom,smp2pgpio-ssr-smp2p-4-out.19, master-kernel:
GPIOs 608-639, platform/qcom,smp2pgpio-ssr-smp2p-4-in.18, slave-kernel:
GPIOs 640-671, platform/qcom,smp2pgpio-ssr-smp2p-1-out.13, master-kernel:
GPIOs 672-703, platform/qcom,smp2pgpio-ssr-smp2p-1-in.12, slave-kernel:
GPIOs 704-735, platform/qcom,smp2pgpio-smp2p-4-out.16, smp2p:
GPIOs 736-767, platform/qcom,smp2pgpio-smp2p-4-in.14, smp2p:
GPIOs 768-799, platform/qcom,smp2pgpio-smp2p-1-out.10, smp2p:
GPIOs 800-831, platform/qcom,smp2pgpio-smp2p-1-in.8, smp2p:
GPIOs 832-863, platform/qcom,smp2pgpio-smp2p-7-out.6, smp2p:
GPIOs 864-895, platform/qcom,smp2pgpio-smp2p-7-in.4, smp2p:
GPIOs 896-899, spmi/qpnp-pin-ffffffc031550c00, pm8916-gpio:
gpio-898 (qcom,hub-reset-gpio ) out hi
gpio-899 (qcom,sw-sel-gpio ) in lo
GPIOs 900-901, spmi/qpnp-pin-ffffffc031550800, pm8916-mpp:
GPIOs 902-1023, platform/1000000.pinctrl, msm_tlmm_gpio:
gpio-922 (adv7533_hpd_irq_gpio) in lo
gpio-923 (led1 ) out lo
gpio-927 (disp_rst_n ) in hi
gpio-933 (adv7533_irq_gpio ) in hi
gpio-934 (hdmi_lvds ) in lo
gpio-940 (7864900.sdhci cd ) in hi
gpio-1009 (volume_up ) in hi
gpio-1010 (camera_focus ) in hi
gpio-1011 (camera_snapshot ) in hi
gpio-1022 (led2 ) out lo
gpio-1023 (USB_ID_GPIO ) in hi
interrupt-parent = <&msm_gpio>;
和
interrupts = <53 0>
来识别Snapdragon的GPIO引脚53。我用
<53 0>
和
<53 8>
进行了测试。
0x2008
作为第二个条目。我认为
0x0008
是将中断设置为低电平触发,但是第13位是做什么的?我用
0x0
和
0x8
两种方法进行了测试,结果没有什么不同(但是:-)。
/sys/kernel/debug/gpio
中输入?
326
中的irq编号
/proc/interrupts
来自何处,是否有方法验证它链接到哪个pin?
boot.img
闪存到设备并重新启动?我使用命令
make bootimage
。
最佳答案
在发现设备树中已经有一个或多或少工作的触摸屏定义,但是管脚不同之后,我得到了以下设备树:
&i2c_0 {
atmel_maxtouch_ts@4a {
compatible = "atmel,maxtouch";
reg = <0x4a>;
interrupt-parent = <&msm_gpio>;
interrupts = <53 0x2008>;
pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_suspend";
pinctrl-0 = <&ts_int_active &ts_reset_active>;
pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
pinctrl-2 = <&ts_release>;
atmel,irq-gpio = <&msm_gpio 53 0x2008>;
atmel,reset-gpio = <&msm_gpio 54 0>;
atmel,panel-coords = <0 0 800 480>;
atmel,display-coords = <0 0 800 480>;
atmel,family-id = <164>;
atmel,variant-id = <2>;
atmel,version = <21>;
atmel,build = <0xaa>;
};
};
interrupts = <53 0x2008>;
pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_suspend";
pinctrl-0 = <&ts_int_active &ts_reset_active>;
pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
pinctrl-2 = <&ts_release>;
atmel,irq-gpio = <&msm_gpio 53 0x2008>;
atmel,reset-gpio = <&msm_gpio 54 0>;
qcom/msm8916-pinctrl.dtsi
中,但是,对于我的情况,我必须将pin 12更改为54,pin 13更改为53:
diff --git a/arch/arm/boot/dts/qcom/msm8916-pinctrl.dtsi b/arch/arm/boot/dts/qcom/msm8916-pinctrl.dtsi
index 204c718..80a2a6d 100644
--- a/arch/arm/boot/dts/qcom/msm8916-pinctrl.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8916-pinctrl.dtsi
@@ -30,16 +30,6 @@
};
};
- atmel-int-pin {
- qcom,pins = <&gp 53>;
- qcom,num-grp-pins = <1>;
- label = "atmel-int-pin";
- default {
- drive-strength = <0>;
- bias-pull-up;
- };
- };
-
ext-cdc-tlmm-lines {
qcom,pins = <&gp 116>, <&gp 112>, <&gp 117>,
<&gp 118>, <&gp 119>;
@@ -1175,7 +1165,7 @@
/* add pingrp for touchscreen */
pmx_ts_int_active {
- qcom,pins = <&gp 13>;
+ qcom,pins = <&gp 53>;
qcom,pin-func = <0>;
qcom,num-grp-pins = <1>;
label = "pmx_ts_int_active";
@@ -1187,7 +1177,7 @@
};
pmx_ts_int_suspend {
- qcom,pins = <&gp 13>;
+ qcom,pins = <&gp 53>;
qcom,pin-func = <0>;
qcom,num-grp-pins = <1>;
label = "pmx_ts_int_suspend";
@@ -1199,7 +1189,7 @@
};
pmx_ts_reset_active {
- qcom,pins = <&gp 12>;
+ qcom,pins = <&gp 54>;
qcom,pin-func = <0>;
qcom,num-grp-pins = <1>;
label = "pmx_ts_reset_active";
@@ -1211,7 +1201,7 @@
};
pmx_ts_reset_suspend {
- qcom,pins = <&gp 12>;
+ qcom,pins = <&gp 54>;
qcom,pin-func = <0>;
qcom,num-grp-pins = <1>;
label = "pmx_ts_reset_suspend";
@@ -1223,7 +1213,7 @@
};
pmx_ts_release {
- qcom,pins = <&gp 13>, <&gp 12>;
+ qcom,pins = <&gp 53>, <&gp 54>;
qcom,num-grp-pins = <2>;
label = "pmx_ts_release";
关于android - 如何在Android 5内核设备树中正确配置Atmel MXT641T触摸芯片的INT线中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376884/
我该怎么做 touch R 中的文件(即更新其修改时间而不更改其内容)?我正在寻找一个跨平台的内置(或打包)等效于: system2("touch", file_name) 最佳答案 我找到了 an
我想在 android 中实现 body 部位选择。我的要求是,当我点击特定部分时,图像应用程序应该能够识别 body 部位并且所选部分的颜色应该改变。附上示例图像以供引用。 如有任何想法或建议,我们
我需要将3D模型加载到我的应用程序中(不是游戏,它没有任何区别),并检测用户何时触摸此模型的特定部分以采取不同的操作。 我怎样才能做到这一点?可能吗? 最佳答案 我不熟悉Rajawali,但GitHu
似乎连续触摸总是被它起源的控件捕获。是否有标准方法将触摸/手势传递给当前触摸结束的控件? 最佳答案 控件显示在 UIView 对象内部的屏幕上。 iOS 使用第一响应者的概念来处理 UIView 对象
我有一个 UIScrollView 实例,允许用户放大/缩小。我已经根据文档实现了一个委托(delegate)来处理这个问题。但是,我想知道用户触摸 ScrollView 的位置(相对于 Scroll
我正在创建一款射击游戏,您可以触摸屏幕,玩家可以射击。我遇到的问题是,当你触摸屏幕并按住它并拖动它时,它会快速射击。处理这个问题的最佳方法是什么? 我希望玩家能够按住手指并以稳定的速度射击,而手指向上
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typ
这是我从触摸事件中获得的返回数据。明显缺少任何有用的触摸 X/Y 坐标 ( https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/ch
因此,我有一个屏幕,其中包含 0 到 6 个通过 XML 包含的相同用户界面组件。类似这样的东西: ...等等 每个包含的 UI 都是我重复使用的几个小部件和自定义组件的集
我希望能够更改文件的修改日期以便在 Web 应用程序中使用。目前我直接在命令行上测试这个。在我的 Mac 上工作正常,但是当我在 Linux 服务器上执行此操作时出现错误。 命令:/bin/touch
概念问题: 我在使用 touches 时遇到了一个非常简单的问题属性,自动更新依赖模型的时间戳;它正确地这样做了,但也应用了全局范围。 有什么办法可以关闭这个功能吗?或专门询问自动 touches忽略
我很难在一个简单的等距 Sprite Kit 游戏中实现点击处理。 我有一个包含多个 Tile 对象(SKSpriteNode)的 map (SKNode)的游戏场景(SKScene)。 这是 map
有没有办法在触摸事件后恢复 Flexslider 幻灯片的自动播放?现在看来,一旦我滑动导航,幻灯片就会停止...... 最佳答案 FLEXISLIDER 2 更新 resume()事件不再存在,正确
有些游戏有一些小图片作为 Sprite ,可以通过触摸来移动。如果 Sprite 是较大的图片,触摸是很正常的。我们可以使用函数CGRectContainsPoint检查 Sprite 。但是当 Sp
我有一个 View 覆盖到 iPhone 的相机 View 上。在此 View 中,我有一些 uibuttons,它们显示的位置取决于加速度计/指南针的值。当用户在 View 内触摸但没有在 uibu
我有一个 UIView 和一个 UIWebView。 UIWebView 是 UIView 的 subview 。 UIWebView 包含 YouTube 视频,并设置为让视频适合 UIWebVie
我是通过 XCode 使用 SDK 版本 5.0 进行 iOS 开发的新手。在我的应用程序中,我需要在按下按钮时更改按钮的标题。 假设在正常状态下它是“未推送”的。我所需要的是,当我按下按钮时,按钮标
我需要防止我的网络应用程序中的水平滚动。我尝试在 touchmove 事件上使用 PreventDefault(),但它也阻止垂直滚动。 有什么想法吗?^^ 我的尝试: $(document)
对于完全适合动画组方法的动画效果,如Brad Larson's answer here所示,我需要动画根据输入进行。特别是触摸和检测到的触摸的位置。处理 TouchMoved: 并为每次触摸设置元素的
我在屏幕上散布了一系列硬币。我想在触摸硬币时添加声音。 private Music coinSound; 在 show() 中: coinSound=assetManager.get(Assets.c
我是一名优秀的程序员,十分优秀!