首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gpio键中断在RPi3上唤醒屏幕

使用gpio键中断在RPi3上唤醒屏幕
EN

Stack Overflow用户
提问于 2018-05-08 00:05:55
回答 3查看 1.7K关注 0票数 0

我试图使用一个gpio键中断唤醒屏幕后,它进入睡眠。我使用的是覆盆子Pi 3谱系14.1。我已经能够成功地配置gpio键,它在接收到中断时注册输入设备事件。然而,我不能让它在它启动时唤醒屏幕。我的gpio-键设备的设备树覆盖文件如下:

代码语言:javascript
复制
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";

fragment@0 {
    // Configure the gpio pin controller
    target = <&gpio>;
    __overlay__ {
        pin_state: key_pins@0 {
            brcm,pins = <17>;       // gpio number
            brcm,function = <0>;    // 0 = input, 1 = output
            brcm,pull = <2>;        // 0 = none, 1 = pull down, 2 = pull up
        };
    };
};      

fragment@1 {    
    target-path = "/";
    __overlay__ {
        keypad: proximity@0 {
            compatible = "gpio-keys";
            #address-cells = <1>;
            #size-cells = <0>;

            key: proximity {
                label = "proximity detection";
                linux,code = <61>;          // F3 Key
                gpios = <&gpio 17 1>;       // GPIO 17
                wakeup-source;
            };
        };
    };
};
};

正如您在文件中看到的那样,我添加了属性唤醒源,但我相信它可能会从CPU睡眠中唤醒系统,而不一定是屏幕休眠时的屏幕本身。

正如您所看到的,我的gpio键绑定到KEY F3。如果我按键盘上的F3键,它就会唤醒显示器。但是,如果我在GPIO17引脚上生成一个中断,即使它注册为关键的F3事件,它也不会唤醒监视器。对于如何从gpio键唤醒监视器有任何建议吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-09 20:49:00

我找到了一个比我以前的答案更好的解决方案。由于这是一个可行的解决方案(虽然这不是最理想的解决方案),所以我将把我以前的回答作为一个帖子。

无论如何,您要做的是创建(或修改)一个键布局文件。对于此密钥布局文件,要向某个设备注册,键布局文件名必须遵循与您想要使用的设备的详细信息相对应的特定命名约定(在我的示例中是gpio-键)。这里有更多关于这方面的细节:https://source.android.com/devices/input/key-layout-files。在我的例子中,我决定我的键布局文件名与设备名称匹配。在我的例子中,设备名是gpio-键,您可以在设备树覆盖文件中定义它。如果您可以通过输入命令行cat /proc/bus/input/devices来访问Android本地终端,也可以找到设备名称。下面显示了我的gpio-键覆盖文件的一个片段:

代码语言:javascript
复制
fragment@1 {    
    target-path = "/";
    __overlay__ {
        keypad: gpio-keys {
            compatible = "gpio-keys";
            #address-cells = <1>;
            #size-cells = <0>;

            key: proximity {
                label = "proximity-detection";
                linux,code = <29>;      // KEY_LEFTCTRL
                linux,input-type = <1>;     // EV_KEY
                gpios = <&gpio 17 0>;       // GPIO 17
                wakeup-source;
            };
        };
    };
};

正如您在上面的键盘旁边看到的:,设备名gpio-键被设置。你也可以在这里写其他名字。因此,我将密钥布局文件命名为gpio-keys.kl.。我把我的gpio-keys.kl文件放在了安卓的/system/usr/keylayout/目录中。gpio-keys.kl文件如下所示:

代码语言:javascript
复制
# Key layout used for gpio-keys

key 29   CTRL_LEFT   WAKE

由于我的KEY_LEFTCTRL) gpio- key (GPIO17)绑定到Linux 29或,所以我的密钥布局文件将Linux 29 (或KEY_LEFTCTRL)与对应的Android密钥代码CTRL_LEFTe 241)关联起来。然后,我在这一行中添加了术语WAKE,如上面所示。Linux及其匹配的Android可以在这里找到:https://source.android.com/devices/input/keyboard-devices

这允许我的屏幕在GPIO17接收到所需的中断时醒来。这是一个更好的解决方案,而不仅仅是为唤醒使用Linux,因为您可能想要编写一个安卓应用程序,其中有几个不同的gpio键,您想要以不同的方式对待它们。如果每个gpio键都绑定到不同的密钥代码,那么您将能够将它们区分开来。如果它们都有相同的键码,我认为区分这些不同的键要困难得多。

票数 0
EN

Stack Overflow用户

发布于 2018-05-08 06:10:28

我想你是在寻找接近传感器的功能。Linux已经为这个功能提供了linux,密钥代码

对于接近传感器,您必须在设备树中添加密钥代码0x0b (11),如下所示:

代码语言:javascript
复制
 key: proximity {
                label = "proximity detection";
                linux,code = <11>; /* SW_FRONT_PROXIMITY */
            };

以类似的方式,您也可以为其他功能添加关键代码。

票数 0
EN

Stack Overflow用户

发布于 2018-05-09 02:37:52

所以我终于拿到了。我知道这不是最好的方法,而且我肯定这不是唯一的方法,但这就是我最后让屏幕醒来时,我的gpio收到一个中断。

我使用了密钥代码143,也称为KEY_WAKEUP。设备树覆盖段如下所示:

代码语言:javascript
复制
key: proximity {
            label = "proximity-detection";
            linux,code = <143>;          // KEY_WAKEUP
            gpios = <&gpio 17 0>;       // GPIO 17
            wakeup-source;
        };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50224010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档