我尝试使用 gpio-keys 中断在进入睡眠状态后唤醒屏幕。我正在使用 Raspberry Pi 3 和 Lineage OS 14.1 。我已经能够成功配置gpio-keys,它在收到中断时注册输入设备事件。但是,当它关闭时我无法唤醒屏幕。我的gpio-keys设备的设备树覆盖文件如下:
class UserAuthorization(APIView):
authentication_classes = (JSONWebTokenAuthentication,)
def get(self, request, *args, **kwargs):
print(request.user)
return Response({})
正如您在文件中看到的那样,我添加了属性 wakeup-source ,但我相信它可能会从CPU睡眠状态中唤醒系统,而不一定是屏幕休眠时屏幕本身。< / p>
正如您所看到的,我的gpio-key与 KEY F3 相关联。如果我按下键盘上的F3,它会唤醒显示器。但是,如果我在 GPIO17 引脚上产生中断,即使它注册为KEY F3事件,它也不会唤醒显示器。有关如何从gpio-keys唤醒显示器的任何建议?谢谢!
答案 0 :(得分:0)
我认为您正在寻找接近传感器的功能。对于这些功能,Linux已经有linux,keycode。
对于接近传感器,您必须在设备树中添加密钥代码0x0b (11)
,如:
key: proximity {
label = "proximity detection";
linux,code = <11>; /* SW_FRONT_PROXIMITY */
};
以类似的方式,您也可以添加其他功能的密钥代码。
答案 1 :(得分:0)
所以我终于明白了。我知道这不是最好的方式,我确定这不是唯一的方法,但这就是我终于让我的gpio接收到一个中断时屏幕唤醒的方式。
我使用了密钥代码143
,也称为KEY_WAKEUP
。设备树叠加片段如下所示:
key: proximity {
label = "proximity-detection";
linux,code = <143>; // KEY_WAKEUP
gpios = <&gpio 17 0>; // GPIO 17
wakeup-source;
};
答案 2 :(得分:0)
我找到了比我之前的答案更好的解决方案。我将之前的答案留作帖子,因为它是一个有效的解决方案(虽然它不是最理想的解决方案)。
无论如何,您需要做的是创建(或修改)键布局文件。要在此键布局文件中注册某个设备,键布局文件名必须遵循与您要使用的设备相关的详细命名约定( gpio-keys 在我的情况下)。有关此内容的更多详细信息:https://source.android.com/devices/input/key-layout-files。就我而言,我决定使用键布局文件名来匹配设备名称。在我的例子中,设备名称是 gpio-keys ,您可以在设备树覆盖文件中定义它。如果您可以通过在命令行cat /proc/bus/input/devices
中键入来访问Android本地终端,也可以找到设备名称。我的gpio-keys覆盖文件的片段如下所示:
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-keys 。你也可以在这里写其他名字。因此,我将我的密钥布局文件命名为 gpio-keys.kl 。我将 gpio-keys.kl 文件放在Android的 / system / usr / keylayout / 目录中。 gpio-keys.kl 文件如下所示:
# Key layout used for gpio-keys
key 29 CTRL_LEFT WAKE
由于 gpio-key ( GPIO17 )与 Linux keycode 29 或 KEY_LEFTCTRL 相关联,密钥布局文件将 Linux密钥代码29 (或 KEY_LEFTCTRL )与相应的 Android密钥代码CTRL_LEFT 相关联。然后我在同一行添加术语 WAKE ,如上所示。可以在此处找到Linux密钥代码及其匹配的Android密钥代码:https://source.android.com/devices/input/keyboard-devices。
当 GPIO17 收到中断时,可以根据需要唤醒我的屏幕。这是比使用 WAKEUP 的Linux密钥更好的解决方案,因为您可能想要编写一个Android应用程序,其中有几个不同的 gpio-keys ,您希望以不同的方式对待。如果每个 gpio-key 与不同的键码相关联,您就可以将它们彼此区分开来。如果它们都具有相同的密钥代码,我认为区分这些不同的密钥会更加困难。