📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。


键盘映射利器:Evmapy

Evmapy 是 Batocera 内置的一款强大工具,它的主要任务是将手柄的输入指令“翻译”成虚拟键盘的按键操作(当然,它的本领远不止于此)。

生活化类比:你可以把它想象成一个“同声传译员”。有些模拟器比较“老派”,只听得懂键盘指令,听不懂手柄说话。Evmapy 就负责坐在中间,当你按下手柄按钮时,它立刻告诉模拟器:“嘿,他刚才敲了下回车键!”

这个工具主要用于解决那些不支持原生手柄快捷键绑定的模拟器(例如 Dolphin 模拟器就不使用 Evmapy,因为它自己能处理这些)。通过它,你可以轻松实现用手柄触发模拟器的各种快捷操作。


配置编译规则(Makefile)

如果你是一个开发者,想要在系统中加入模拟器的按键配置文件(Keys file),通常这个文件存放在:package/Batocera/<模拟器或端口目录>/<具体名称>/<系统简称>.<模拟器名>.keys

为了让系统在编译时能找到它,你必须在 Makefile 中编写指令,将该文件从源码路径拷贝到系统的目标目录 /usr/share/evmapy 下。

以下是以 3DS 模拟器 Citra 为例的操作步骤:

  • 第一步:定义安装指令
    citra.mk 文件中定义一个拷贝任务。
  • 第二步:创建存放目录
    使用指令确保目标文件夹存在,如果不存在则自动创建。
  • 第三步:执行拷贝
    将特定的 .keys 配置文件精准地投递到系统的存放路径中。

具体的代码实现如下:

define CITRA_EVMAP
# 第一步:如果存放目录不存在,先创建它
mkdir -p $(TARGET_DIR)/usr/share/evmapy

# 第二步:将 keys 配置文件拷贝到正确的位置,并保持父文件夹结构
cp -prn $(BR2_EXTERNAL_BATOCERA_PATH)/package/Batocera/emulators/citra/3ds.citra.keys \
$(TARGET_DIR)/usr/share/evmapy
endef

【注意】在编写这类脚本时,务必检查路径中的模拟器名称和系统简称是否匹配,否则“传译员”将无法找到他的脚本。

在 Makefile 的最后,别忘了添加下面这行代码来激活刚才定义的任务:

CITRA_POST_INSTALL_TARGET_HOOKS = CITRA_EVMAP

编写按键配置文件(”Keys” file)的语法

Evmapy 的配置文件语法非常直观。虽然它对缩进和空格没有强制要求,但为了以后方便阅读,建议还是保持整齐。

生活化类比:编写这个文件就像是在写一张“指令对照表”。左边写“当玩家按下手柄的什么键”,右边写“电脑对应做出什么动作”。

配置文件的编写可以分为以下几个步骤:

  • 第一步:开启总门槛
    所有的配置内容必须包裹在一对大括号 { } 之中。

  • 第二步:定义玩家设备
    你需要指定对哪个玩家的手柄生效。在 Batocera 中,我们通常定义为 "actions_player1",这样系统会自动对应到当前被分配给 1 号玩家的任何手柄上。

  • 第三步:编写具体的触发逻辑
    所有的具体动作都要放在方括号 [ ] 里,而每一组“触发条件”与“执行动作”则又要用小一号的大括号 { } 包起来。

示例 1:退出模拟器
如果你想设置“快捷键 + Start 键”等于“退出程序”,代码长这样:

{
"trigger": ["hotkey", "start"],
"type": "key",
"target": ["KEY_LEFTCTRL", "KEY_Q"],
"description": "Exit emulator"
},
  • 第四步:添加更多动作并收尾
    你可以像写清单一样,用逗号 , 隔开不同的动作块。

示例 2:模拟鼠标点击
如果你想把按下右摇杆(R3)设为鼠标左键点击:

{
"trigger": "r3",
"type": "key",
"target": "BTN_LEFT",
"description": "Mouse Click"
}
]
}

【提示】请务必检查括号是否成对闭合。如果漏掉了一个方括号 ] 或大括号 },你的“翻译官”Evmapy 就会因为看不懂指令而罢工。

输入触发器(Input triggers)

认识手柄触发指令

Batocera 使用了一套通用的输入术语(es_inputs)来标识手柄上的各个按键。虽然有些名字看起来可能不太直观,但你可以把它们看作是手柄与系统之间的“暗号”。

生活化类比:这就像是给家里的电器贴标签。虽然按钮上印的是“启动”,但在你的智能家居控制盒(keys 文件)里,它的代号可能叫“start”。只要对准了代号,你的手柄就能指挥模拟器做出正确的动作。

下表列出了常用的手柄按键及其在 keys 配置文件中对应的“触发代号(Trigger name)”:

^ 手柄按键 (Input) ^ 触发代号 (Trigger name) ^
| — | — |
| [热键] (HOTKEY) | hotkey |
| [开始] (START) | start |
| [选择] (SELECT) | select |
| 南侧键 (B SNES) | b |
| 东侧键 (A SNES) | a |
| 西侧键 (Y SNES) | y |
| 北侧键 (X SNES) | x |
| 方向键 下 | down |
| 方向键 右 | right |
| 方向键 上 | up |
| 方向键 左 | left |
| 左摇杆所有动作 | joystick1 |
| 右摇杆所有动作 | joystick2 |
| 左摇杆 向下 | joystick1down |
| 左摇杆 向右 | joystick1right |
| 左摇杆 向上 | joystick1up |
| 左摇杆 向左 | joystick1left |
| 右摇杆 向下 | joystick2down |
| 右摇杆 向右 | joystick2right |
| 右摇杆 向上 | joystick2up |
| 右摇杆 向左 | joystick2left |
| [L1] 肩键 | pageup |
| [R1] 肩键 | pagedown |
| [L2] 扳机键 | l2 |
| [R2] 扳机键 | r2 |
| [L3] (左摇杆下压) | l3 |
| [R3] (右摇杆下压) | r3 |

【提示】以上列出的只是 Evmapy 能够识别的指令冰山一角。如果你想挖掘更多高阶触发方式,可以查阅其官方文档。


输出事件(Output events)

按键映射(Keys)

模拟键盘按键

这是 Evmapy 最核心的功能,也是它的“拿手好戏”。它负责把你的手柄操作变成具体的键盘按键信号发送给系统。

生活化类比:这就好比你手里拿着一个游戏手柄,但身后站着一个“键盘替身”。你每按下一个手柄键,这个替身就根据指令表,飞快地在隐形的键盘上敲下对应的按键。

在配置文件中,你只需要输入想要模拟的按键名称即可。如果需要同时按下多个键(组合键),用逗号把它们列在一起。

  • 常用修饰键(Modifier keys):
    常见的控制键包括 KEY_LEFTCTRL(左 Ctrl)、KEY_LEFTSHIFT(左 Shift)、KEY_LEFTALT(左 Alt)、KEY_RIGHTSHIFT(右 Shift)、KEY_ENTER(回车)以及 KEY_PAGEDOWN(向下翻页)等。

  • 常见的退出快捷键组合:
    大多数模拟器使用的退出组合键是 ["KEY_LEFTALT", "KEY_F4"]["KEY_LEFTCTRL", "KEY_Q"]


按键代码参考表

为了方便你查找所有可用的按键名称,下面提供了一份标准 Linux 系统中的输入事件代码文件(input-event-codes.h)片段。Evmapy 能够处理的所有输出事件几乎都涵盖在这里了。

【注意】这些代码是底层定义的标准,编写配置文件时请务必保持拼写一致(例如必须包含 KEY_ 前缀)。

/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
* 输入事件代码 (Input event codes)
*
* *** 重要提示 ***
* 本文件不仅会被 C 代码调用,还会被设备树源文件引用。
* 因此,本文件必须仅包含注释和宏定义(defines)。
*
* Copyright (c) 1999-2002 Vojtech Pavlik
* Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
*/

#ifndef _INPUT_EVENT_CODES_H

【提示】如果你需要查看完整的按键列表,可以参考 Linux 系统的内核文档或在 Batocera 系统路径下寻找完整的头文件。如果你不确定某个键的名字,通常在按键功能前加上 KEY_ 大写字母前缀(如 KEY_A, KEY_B)就是正确的写法。

输入事件代码库(续)

为了让大家更清楚系统是如何“理解”我们的操作,下面是技术文档中定义的底层代码。你可以把这些代码看作是电脑内部的“交通规则”。

#define _INPUT_EVENT_CODES_H

设备属性与特性(Device properties and quirks)

这里定义了不同输入设备的“身份标签”。

生活化类比:就像是在交通登记处,系统会给不同的车贴标签。有的车是“自动挡”(指点杆),有的车带“避震”(加速计)。有了这些标签,系统就知道该用什么方式去处理它的信号。

  • INPUT_PROP_POINTER: 需要光标指示。
  • INPUT_PROP_DIRECT: 直接输入设备。
  • INPUT_PROP_BUTTONPAD: 触控板下方带有按钮。
  • INPUT_PROP_SEMI_MT: 仅支持矩形区域的多点触控。
  • INPUT_PROP_TOPBUTTONPAD: 触控板顶部带有软件按钮。
  • INPUT_PROP_POINTING_STICK: 指点杆(类似小红点)。
  • INPUT_PROP_ACCELEROMETER: 带有加速计(重力感应)。

事件类型(Event types)

这是 Evmapy 处理的核心。当你在手柄上按下一个键,系统会产生一个“事件(Event)”。

  • EV_KEY: 按键事件,这是最常用的,代表某个键被按下或弹起。
  • EV_REL: 相对坐标事件(如鼠标移动)。
  • EV_ABS: 绝对坐标事件(如摇杆或触控板的具体位置)。
  • EV_SW: 开关事件。
  • EV_LED: 指示灯事件。
  • EV_SND: 声音事件。
  • EV_REP: 自动重复事件(即“连发”)。
  • EV_FF: 力反馈事件(如手柄震动)。
  • EV_PWR: 电源事件。

同步事件(Synchronization events)

同步事件的作用是告诉系统:“这一组动作已经做完了,可以执行了”。

  • SYN_REPORT: 报告当前事件组已完成。
  • SYN_CONFIG: 配置同步。
  • SYN_MT_REPORT: 多点触控同步。

按键与按钮(Keys and buttons)

【提示】接下来的定义非常关键,它们大部分是根据 USB 行业标准(USB HUT 1.12)建立的模型。无论你使用的是什么品牌的手柄,在 Batocera 的底层眼中,它们都会被转化为这些标准的键盘和按钮代码。

常用按键映射代码对照表

在编写 Evmapy 的配置文件时,你需要知道每个键盘按键对应的“官方名称”。这些代码遵循国际 USB HID 标准,确保了不同硬件之间的通用性。

为了方便阅读,我们在注释中使用了以下缩写:
* AC:应用程序控制(Application Control)
* AL:应用程序启动按钮(Application Launch Button)
* SC:系统控制(System Control)


基础按键代码清单

生活化类比:你可以把下面这些代码看作是键盘按键的“身份证号”。当你告诉 Evmapy 触发 KEY_ESC 时,它就会像个熟练的打字员,精准地帮你按下键盘左上角的那个退出键。

以下是部分最常用的按键代码,你在编写 keys 文件时,直接输入左侧的大写名称即可:

键盘按键 代码名称 对应数值
预留/无效 KEY_RESERVED 0
Esc键 KEY_ESC 1
数字 1 KEY_1 2
数字 2 KEY_2 3
数字 3 KEY_3 4
数字 4 KEY_4 5
数字 5 KEY_5 6
数字 6 KEY_6 7
数字 7 KEY_7 8
数字 8 KEY_8 9
数字 9 KEY_9 10
数字 0 KEY_0 11
减号 – KEY_MINUS 12
等号 = KEY_EQUAL 13
退格键 KEY_BACKSPACE 14
Tab键 KEY_TAB 15
字母 Q KEY_Q 16
字母 W KEY_W 17
字母 E KEY_E 18
字母 R KEY_R 19
字母 T KEY_T 20
字母 Y KEY_Y 21
字母 U KEY_U 22
字母 I KEY_I 23
字母 O KEY_O 24
字母 P KEY_P 25
左中括号 [ KEY_LEFTBRACE 26
右中括号 ] KEY_RIGHTBRACE 27
回车键 KEY_ENTER 28
左 Ctrl 键 KEY_LEFTCTRL 29
字母 A KEY_A 30
字母 S KEY_S 31
字母 D KEY_D 32
字母 F KEY_F 33
字母 G KEY_G 34
字母 H KEY_H 35
字母 J KEY_J 36
字母 K KEY_K 37
字母 L KEY_L 38
分号 ; KEY_SEMICOLON 39
单引号 ‘ KEY_APOSTROPHE 40
抑扬符 ` KEY_GRAVE 41
左 Shift 键 KEY_LEFTSHIFT 42
反斜杠 \ KEY_BACKSLASH 43
字母 Z KEY_Z 44
字母 X KEY_X 45
字母 C KEY_C 46
字母 V KEY_V 47
字母 B KEY_B 48
字母 N KEY_N 49

【提示】在配置退出组合键(如 Ctrl + Q)时,请务必使用代码名称。例如,组合键应写成 ["KEY_LEFTCTRL", "KEY_Q"]。注意所有的代码必须使用大写字母,并保持下划线完整。

常用按键映射代码对照表(续)

本部分继续列出键盘按键与系统代码的对应关系。在编写配置文件时,这些代码能让系统准确识别你想要模拟的键盘动作。

生活化类比:如果说之前的代码是键盘的“字母区”,那么现在的这些代码就是键盘的“功能区”和“小键盘区”。就像遥控器上的不同按钮,虽然平时不一定每个都用,但关键时刻(比如设置快捷键退出游戏)它们就是不可或缺的指令。


功能键与扩展按键清单

以下是你可以直接在 keys 配置文件中使用的代码名称:

键盘按键 代码名称 对应数值
字母 M KEY_M 50
逗号 , KEY_COMMA 51
句号 . KEY_DOT 52
斜杠 / KEY_SLASH 53
右 Shift 键 KEY_RIGHTSHIFT 54
小键盘 星号 * KEY_KPASTERISK 55
左 Alt 键 KEY_LEFTALT 56
空格键 KEY_SPACE 57
大写锁定键 KEY_CAPSLOCK 58
F1 – F10 功能键 KEY_F1 至 KEY_F10 59 – 68
数字锁定键 KEY_NUMLOCK 69
滚动锁定键 KEY_SCROLLLOCK 70
小键盘 数字 0-9 KEY_KP0 至 KEY_KP9 82, 79, 80, 81, 75, 76, 77, 71, 72, 73
小键盘 减号 – KEY_KPMINUS 74
小键盘 加号 + KEY_KPPLUS 78
小键盘 句号 . KEY_KPDOT 83
F11 – F12 功能键 KEY_F11, KEY_F12 87, 88
小键盘 回车键 KEY_KPENTER 96
右 Ctrl 键 KEY_RIGHTCTRL 97
小键盘 斜杠 / KEY_KPSLASH 98
系统请求键 (SysRq) KEY_SYSRQ 99
右 Alt 键 KEY_RIGHTALT 100
换行键 KEY_LINEFEED 101
Home 键 KEY_HOME 102

如何在配置中使用这些代码

当你需要设置复杂的组合键时,请按照以下步骤操作:

  • 第一步:确定目标按键
    在上面的表格中找到你模拟器所需的键盘按键。例如,很多老模拟器使用 Alt + F4 退出,你就需要找 KEY_LEFTALTKEY_F4

  • 第二步:格式化输入
    在配置文件的 target 栏位中,用双引号包裹代码名称。如果是多个键,用方括号 [] 括起来。
    例如:"target": ["KEY_LEFTALT", "KEY_F4"]

【提示】表格中带有 KP 前缀的代码(如 KEY_KPENTER)专门指代键盘右侧的数字小键盘(Keypad)区域。如果你的模拟器对“主键盘回车”和“小键盘回车”区分对待,请务必选对代码。

【注意】对于日本键盘特有的按键代码(如 KEY_ZENKAKUHANKAKU 全角/半角键),除非你正在使用日式布局键盘或特定的日系模拟器,否则通常不需要用到它们。

导航与多媒体按键代码参考

本部分涵盖了键盘上的“导航簇”以及现代键盘常见的“多媒体快捷键”。当你需要用手柄摇杆模拟鼠标翻页,或者用手柄控制系统音量时,这些代码就派上用场了。

生活化类比:如果把之前的字母键比作“打字员”,那这里的按键就像是键盘上的“指挥官”。它们不负责打字,而是负责控制方向(上、下、左、右)、翻页,甚至是控制电脑的音量和电源。


导航与系统按键清单

以下是编写配置文件时可用的代码:

键盘按键 代码名称 对应数值
方向键 上 KEY_UP 103
向上翻页键 KEY_PAGEUP 104
方向键 左 KEY_LEFT 105
方向键 右 KEY_RIGHT 106
End 键 KEY_END 107
方向键 下 KEY_DOWN 108
向下翻页键 KEY_PAGEDOWN 109
插入键 KEY_INSERT 110
删除键 KEY_DELETE 111
静音键 KEY_MUTE 113
音量减 KEY_VOLUMEDOWN 114
音量加 KEY_VOLUMEUP 115
电源键 KEY_POWER 116
暂停键 KEY_PAUSE 119
左 Win/Command 键 KEY_LEFTMETA 125
右 Win/Command 键 KEY_RIGHTMETA 126

应用程序控制(AC)与启动(AL)代码

这些代码对应于一些特殊的功能按键,通常出现在多媒体键盘或带宏定义的键盘上。

  • 常用编辑指令

    • 撤销KEY_UNDO (131)
    • 复制KEY_COPY (133)
    • 粘贴KEY_PASTE (135)
    • 剪切KEY_CUT (137)
    • 查找KEY_FIND (136)
  • 常用工具启动

    • 帮助中心KEY_HELP (138)
    • 菜单(显示菜单)KEY_MENU (139)
    • 计算器KEY_CALC (140)

配置实战:模拟多媒体控制

如果你想让你的手柄具备控制音量的能力,可以按照以下逻辑编写:

  • 第一步:选定触发按键
    决定手柄上的哪个组合键用来调音量,比如“热键 + 向上方向键”。

  • 第二步:对应映射名称
    找到对应的输出代码。调高音量使用 KEY_VOLUMEUP,调低音量使用 KEY_VOLUMEDOWN

  • 第三步:写入配置文件
    keys 文件的 target 部分填入上述代码。

【注意】KEY_LEFTMETAKEY_RIGHTMETA 在 Windows 键盘上就是 Windows 键,在 Mac 键盘上则是 Command 键。如果你需要模拟涉及 Win 键的快捷键,请务必使用这两个代号。

【提示】部分代码如 KEY_HANGEUL(韩文转换)或 KEY_YEN(日元符号)属于特定语言布局按键,在常规模拟器配置中极少用到,除非你有特殊的输入需求。

系统控制与多媒体播放代码对照表

在本节中,我们将继续深入了解键盘上那些“特种按键”的代码。这些代码涵盖了从电源管理到音乐播放的所有功能,让你的手柄不仅能玩游戏,还能化身为全能的媒体遥控器。

生活化类比:如果说之前的字母键是键盘的“肌肉”,那么这些功能键就是键盘的“神经末梢”。它们直接连接到系统的核心功能,比如一键让电脑睡觉(待机)、一键打开浏览器,或者像操纵影碟机一样控制音乐的播放与停止。


系统与显示控制清单

以下是控制电脑状态和窗口切换的代码名称:

键盘功能 代码名称 对应数值
设置 KEY_SETUP 141
睡眠/待机 KEY_SLEEP 142
唤醒系统 KEY_WAKEUP 143
屏幕锁定/屏保 KEY_SCREENLOCK (KEY_COFFEE) 152
屏幕旋转 KEY_ROTATE_DISPLAY 153
循环切换窗口 KEY_CYCLEWINDOWS 154
我的电脑 KEY_COMPUTER 157
浏览器主页 KEY_HOMEPAGE 172

多媒体播放控制

如果你正在使用 Batocera 欣赏音乐或视频,这些代码能让你的手柄按钮完美替代播放控制键:

  • 播放常用指令

    • 播放/暂停KEY_PLAYPAUSE (164)
    • 下一曲KEY_NEXTSONG (163)
    • 上一曲KEY_PREVIOUSSONG (165)
    • 停止播放KEY_STOPCD (166)
    • 录制KEY_RECORD (167)
    • 快退KEY_REWIND (168)
  • 光驱操作(主要针对旧式硬件)

    • 弹出光驱KEY_EJECTCD (161)
    • 关闭光驱KEY_CLOSECD (160)

网络与浏览器导航(AC/AL)

对于内置了浏览器功能的模拟器,可以使用以下导航代码:

  • 浏览器后退KEY_BACK (158)
  • 浏览器前进KEY_FORWARD (159)
  • 打开浏览器KEY_WWW (150)
  • 书签KEY_BOOKMARKS (156)
  • 邮件KEY_MAIL (155)

如何让手柄控制多媒体

想要通过手柄快捷键控制音乐播放?请参考以下步骤:

  • 第一步:找到动作代码
    假设你想用手柄实现“播放/暂停”,在表中找到对应的 KEY_PLAYPAUSE

  • 第二步:设置组合触发
    在配置文件里,你可以把“热键 + 东侧键(A键)”作为触发条件。

  • 第三步:完成代码编写
    target 栏位中填入对应的代码名称,确保双引号和括号正确。
    例如:"target": "KEY_PLAYPAUSE"

【提示】有些代码的名字很有趣,比如 KEY_COFFEE(咖啡时间),它在 Linux 底层代码中实际上代表了“终端锁定”或“屏幕保护程序”,意思是“我要去喝杯咖啡了,请锁上我的屏幕”。

【注意】在使用 KEY_SLEEP(睡眠)或 KEY_WAKEUP(唤醒)时请谨慎,确保你的硬件支持相关的电源管理协议,否则可能会导致系统挂起后无法正常唤醒。

交互与高阶功能按键代码参考

本节将介绍最后一组按键代码。这些代码涵盖了从常见的网页交互、高阶功能键(F13-F24),到各种生活化的应用程序快捷启动键。

生活化类比:如果说基础按键是键盘的“五官”,那么这些按键就像是键盘上的“功能插件”。它们平时可能静静地躺在角落,但当你需要“一键刷新网页”或者“一键呼出计算器/财务软件”时,它们就是最快捷的传送门。


网页与文档操作清单(AC)

这些代码主要用于控制应用程序的操作流,如刷新或撤销。

键盘功能 代码名称 对应数值
刷新 KEY_REFRESH 173
退出 KEY_EXIT 174
移动 KEY_MOVE 175
编辑 KEY_EDIT 176
向上滚动 KEY_SCROLLUP 177
向下滚动 KEY_SCROLLDOWN 178
新建 KEY_NEW 181
重做/重复 KEY_REDO 182

高阶功能键(F13 – F24)

虽然普通键盘只有 F1 – F12,但系统底层实际上支持更多的扩展功能键。

  • 扩展键区
    • KEY_F13KEY_F24 (对应数值 183 – 194)

      提示:这些按键常被专业玩家用于宏编程。如果你的手柄有额外的背键,可以将它们映射到这些不常用的功能键上,以避免与模拟器默认快捷键冲突。


媒体与生活化应用启动(AL)

这些代码对应的是多媒体键盘上那些极具“生活气息”的按钮,比如一键打开邮件或启动购物网站。

  • 媒体进阶控制

    • 播放KEY_PLAY (207)
    • 快进KEY_FASTFORWARD (208)
    • 低音增强KEY_BASSBOOST (209)
    • 暂停 CDKEY_PAUSECD (201)
  • 应用一键直达

    • 仪表盘/控制台KEY_DASHBOARD (204)
    • 搜索KEY_SEARCH (217)
    • 电子邮件KEY_EMAIL (215)
    • 聊天工具KEY_CHAT (216)
    • 财务/账本KEY_FINANCE (219)
    • 购物KEY_SHOP (221)

配置进阶:自定义你的“快捷面板”

如果你希望手柄能像智能遥控器一样工作,可以参考以下步骤重新组织你的 keys 文件:

  • 第一步:规划你的宏(Macro)需求
    比如,你是否希望按下一个组合键就立刻打开模拟器的截图管理或控制台?这时可以寻找 KEY_DASHBOARDKEY_CAMERA

  • 第二步:编写触发脚本
    在配置文件中,将手柄上的特殊按键(如 L3/R3)与这些输出事件(Output events)挂钩。

  • 第三步:保存并生效
    完成代码书写后,将 .keys 文件放入对应的目录。

【注意】有些代码(如 KEY_SUSPEND 挂起)会直接影响电脑的运行状态。在模拟器运行过程中使用此类指令,请确保你已经保存了游戏进度。

【提示】如果你在表中看到了 KEY_KPLEFTPAREN(小键盘左括号),这通常出现在带有完整会计功能的专业键盘上。在绝大多数游戏场景中,我们直接使用普通的 KEY_9(带括号符号)即可。

硬件调节与连接控制代码参考

本节将介绍最后一组关键代码,它们主要负责设备的物理特性调节(如屏幕亮度)和无线网络连接开关。

生活化类比:如果之前的按键是用来“操作软件”的,那么这一组代码就像是设备上的“物理旋钮”和“波动开关”。它们直接控制硬件的各种状态,比如让屏幕更亮一点,或者是像“飞行模式”一样切断所有的无线连接。


屏幕与背光调节

如果你是在掌机设备上使用 Batocera,这些代码可以帮你直接通过手柄按键调节硬件属性:

硬件功能 代码名称 对应数值
降低亮度 KEY_BRIGHTNESSDOWN 224
提高亮度 KEY_BRIGHTNESSUP 225
亮度循环切换 KEY_BRIGHTNESS_CYCLE 243
自动亮度调节 KEY_BRIGHTNESS_AUTO 244
关闭显示器 KEY_DISPLAY_OFF 245
切换视频输出模式 KEY_SWITCHVIDEOMODE 227
键盘背光开关 KEY_KBDILLUMTOGGLE 228
键盘背光减弱 KEY_KBDILLUMDOWN 229
键盘背光增强 KEY_KBDILLUMUP 230

消息处理与文档操作(AC)

这些代码通常对应于办公或邮件类应用中的快捷操作:

  • 邮件快捷键
    • 发送KEY_SEND (231)
    • 回复KEY_REPLY (232)
    • 转发邮件KEY_FORWARDMAIL (233)
  • 文档管理
    • 保存KEY_SAVE (234)
    • 文档库KEY_DOCUMENTS (235)

无线网络与电源状态

想要一键管理你的网络连接?你可以映射以下代码:

  • 连接管理
    • 蓝牙开关KEY_BLUETOOTH (237)
    • 无线网(WLAN)开关KEY_WLAN (238)
    • 移动网络(WWAN/LTE)KEY_WWAN (246)
  • 电源信息
    • 电池状态KEY_BATTERY (236)

如何在掌机上实现亮度控制

对于没有专用亮度键的掌机,你可以通过以下步骤自定义一个:

  • 第一步:设定组合键
    选择一个不冲突的组合,比如“热键(Hotkey)+ 左摇杆向上”。
  • 第二步:关联亮度代号
    在你的 .keys 配置文件中,将上述组合的 target 指向 KEY_BRIGHTNESSUP
  • 第三步:重复操作
    同理,将“热键 + 左摇杆向下”关联到 KEY_BRIGHTNESSDOWN

【注意】KEY_SWITCHVIDEOMODE(切换视频输出模式)在连接外接显示器、投影仪或电视时非常有用。它能在你的内置屏幕、外接屏幕以及“扩展模式”之间循环切换。

【提示】如果你在日志中看到 KEY_UNKNOWN (240),说明系统收到了一个无法识别的特殊按键信号。这通常发生在某些带有非标准多媒体键的第三方键盘上。

信号开关与模拟点击代码参考

本节将介绍最后一组按键代码,包括全局无线电开关、麦克风控制,以及非常实用的鼠标和手柄按钮模拟指令。

生活化类比:如果之前的代码是“打字机”和“电视遥控器”,那么现在的这些 BTN_ 开头的代码就是你的“虚拟手指”。它们能让你的手柄不仅像键盘,还能像鼠标一样点击,或者像飞行摇杆一样精准操作。


全局开关与特殊控制

功能描述 代码名称 对应数值
射频杀手(飞行模式) KEY_RFKILL 247
麦克风静音 KEY_MICMUTE 248

【提示】KEY_RFKILL 是一个威力巨大的开关,按下它通常会同时切断 Wi-Fi 和蓝牙。


鼠标按键模拟(BTN_MOUSE)

如果你想用手柄的按钮来代替鼠标点击,可以使用以下代码:

  • 基础点击操作
    • 鼠标左键BTN_LEFT (0x110)
    • 鼠标右键BTN_RIGHT (0x111)
    • 鼠标中键BTN_MIDDLE (0x112)
  • 进阶侧键操作
    • 侧键/前进键BTN_SIDE / BTN_FORWARD
    • 后退键BTN_BACK

飞行摇杆与特殊外设(BTN_JOYSTICK)

这些代码主要用于早期的飞行模拟摇杆或专业外设:

  • 触发器(板机)BTN_TRIGGER (0x120)
  • 大拇指键BTN_THUMB / BTN_THUMB2
  • 底座功能键BTN_BASEBTN_BASE6

手柄按钮原生指令(BTN_GAMEPAD)

虽然 Evmapy 常用 keys 文件来模拟键盘,但它同样理解手柄的底层方位指令。

手柄位置 代码名称 备注
南侧键 BTN_SOUTH 通常对应 Xbox 的 A
东侧键 BTN_EAST 通常对应 Xbox 的 B
北侧键 BTN_NORTH 通常对应 Xbox 的 X
附加键 BTN_C 部分格斗手柄常用

配置实战:把手柄变身“无线鼠标”

如果你发现某个模拟器的菜单只能用鼠标操作,别急着去插鼠标,试试以下步骤:

  • 第一步:定义触发器
    在配置文件中,选定手柄的一个按钮(比如 A 键)。
  • 第二步:设置目标为鼠标点击
    将该按钮的目标(target)设置为 BTN_LEFT
  • 第三步:配合摇杆移动
    通常我们会配合摇杆映射,这样你就能用左摇杆移动光标,用 A 键完成“鼠标左键点击”了。

【注意】代码中的 0x100 这种格式是十六进制数值,在编写 Evmapy 的 keys 文件时,我们通常只需要直接使用大写的代码名称(如 BTN_LEFT)即可。

手柄与数字绘图设备按键对照表

本节我们将进入按键代码库的最后阶段,涵盖了标准游戏手柄的高级按钮、专业数位板(Digitizer)工具,以及赛车外设的换挡指令。

生活化类比:如果把基础按键比作“手脚”,那么这些按键就是你的“专业工具箱”。它们不仅能让你在赛场上完成急速换挡,还能让你的设备识别出你是用“笔”在画图,还是用“手指”在触摸。


现代手柄功能键(BTN_GAMEPAD)

这里定义了现代游戏手柄上最常见的肩键、摇杆下压键和核心功能键:

功能描述 代码名称 对应数值
西侧键(X/Y 键) BTN_WEST (BTN_Y) 0x134
附加功能键 BTN_Z 0x135
左肩键 (L1) BTN_TL 0x136
右肩键 (R1) BTN_TR 0x137
左触发器 (L2) BTN_TL2 0x138
右触发器 (R2) BTN_TR2 0x139
选择键 (Select) BTN_SELECT 0x13a
开始键 (Start) BTN_START 0x13b
模式键 (Logo/Home) BTN_MODE 0x13c
左摇杆下压 (L3) BTN_THUMBL 0x13d
右摇杆下压 (R3) BTN_THUMBR 0x13e

数字绘图与触控指令(BTN_DIGI)

这组代码主要用于数位板或带触控功能的设备。系统通过这些代号来判断你正在使用哪种“笔”或多少根“手指”。

  • 绘画工具切换
    • 钢笔BTN_TOOL_PEN
    • 橡皮擦BTN_TOOL_RUBBER
    • 画笔BTN_TOOL_BRUSH
    • 铅笔BTN_TOOL_PENCIL
  • 触控识别
    • 单指触摸BTN_TOUCH
    • 双指轻敲BTN_TOOL_DOUBLETAP
    • 四指/五指操作BTN_TOOL_QUADTAP / BTN_TOOL_QUINTTAP

赛车外设与多媒体导航

针对方向盘外设和智能电视类的交互控制:

  • 赛车换挡
    • 降档BTN_GEAR_DOWN (0x150)
    • 升档BTN_GEAR_UP (0x151)
  • 通用导航键
    • 确认KEY_OK
    • 前往KEY_GOTO
    • 清除KEY_CLEAR
    • 信息/教程KEY_INFO

如何在不同设备间转换指令

如果你想在掌机上利用触屏来模拟手柄操作,可以遵循以下步骤:

  • 第一步:识别输入类型
    确认你的设备是否支持触控识别(即是否支持 BTN_TOUCH 等代码)。
  • 第二步:建立映射逻辑
    在配置文件中,你可以设定当检测到 BTN_TOUCH(手指触摸屏幕)时,系统自动触发 KEY_OK 或某个手柄按钮。
  • 第三步:精细化设置
    如果你使用的是数位笔,还可以通过 BTN_STYLUS 来为压感笔的侧键设置快捷功能。

【提示】BTN_TL 中的 TL 代表 Top Left(左上),BTN_TR 代表 Top Right(右上)。在 Batocera 的配置文件中,这就是我们常说的 L1 和 R1。

【注意】在使用赛车外设的 BTN_GEAR_UP/DOWN 时,请确保你的模拟器能够识别这些特定于方向盘的输入,否则它们可能会被系统误认为是普通的按钮。

媒体娱乐与显示设置代码参考

在本节中,我们将探索与多媒体中心、电视功能以及显示比例相关的代码。这些代码能让你的 Batocera 系统像一台智能电视或高端播放器一样工作。

生活化类比:你可以把这组代码看作是遥控器上的“彩色功能键”。它们专门负责处理看电影、切字幕、换声道或者是调整屏幕大小等“影音爱好者”关心的琐事。有了它们,你的手柄就能秒变全能遥控器。


影音播放与字幕控制

如果你经常使用模拟器观看片头动画或运行多媒体应用,这些按键能派上大用场:

播放功能 代码名称 对应数值
节目指南 KEY_PROGRAM 0x16a
语言切换 KEY_LANGUAGE 0x170
标题菜单 KEY_TITLE 0x171
字幕开关 KEY_SUBTITLE 0x172
视角切换 KEY_ANGLE 0x173
全屏切换/缩放 KEY_FULL_SCREEN (KEY_ZOOM) 0x174
屏幕比例/显示 KEY_ASPECT_RATIO (KEY_SCREEN) 0x177

媒体源选择(Media Select)

这些代码模拟了切换不同播放设备的功能,非常适合用于配置复杂的多媒体系统。

  • 常用设备切换
    • 个人电脑KEY_PC (0x178)
    • 电视KEY_TV (0x179)
    • DVD 播放器KEY_DVD (0x185)
    • 广播/收音机KEY_RADIO (0x181)
  • 经典录像设备
    • 录像机KEY_VCR (0x17b)
    • 磁带机KEY_TAPE (0x180)
  • 其他音源
    • CD 播放器KEY_CD (0x17f)
    • 辅助输入KEY_AUX (0x186)

电视高级功能

对于支持电视信号录制(PVR)或数字广播(EPG)的系统,可以使用以下代码:

  • 收藏夹KEY_FAVORITES (0x16c)
  • 电子节目单(EPG)KEY_EPG (0x16d)
  • 视频录像机(PVR)KEY_PVR (0x16e)
  • 频道切换KEY_CHANNEL (0x16b)

配置实战:一键切换屏幕比例

在玩老游戏时,画面比例(Aspect Ratio)的切换非常频繁。你可以通过以下步骤将其映射到手柄上:

  • 第一步:锁定目标代码
    在表中找到 KEY_ASPECT_RATIO
  • 第二步:设置组合快捷键
    在配置文件中,建议使用“热键 + 右摇杆点击(R3)”作为触发动作。
  • 第三步:写入并保存
    将对应的映射关系写入你的 .keys 配置文件。

【提示】KEY_FULL_SCREENKEY_ZOOM 在底层是完全一样的。如果你的模拟器支持一键缩放畫面,使用其中任何一个代号都能达到目的。

【注意】在使用 KEY_VCRKEY_SAT(卫星电视)这类具有时代感的代号时,请确认你的应用程序是否真的定义了相关功能,否则它们可能只是“空有其名”而无实际动作。

影音库浏览与功能快捷键代码参考

这一章节的代码涵盖了多媒体浏览、经典的彩色功能键,以及办公软件的快速启动指令。通过这些代号,你可以让手柄实现更细致的控制,比如在游戏库里快速放大封面图。

生活化类比:如果说之前的按键是“操作杆”,那么现在的这些代码就像是遥控器上的“分类书签”。它们能帮你直接跳到“电影分类”、“MP3列表”或者是“游戏目录”,让你在海量的资源中瞬间定位。


媒体库与频道控制

功能描述 代码名称 对应数值
MP3 播放器 KEY_MP3 0x187
音乐浏览器 KEY_AUDIO 0x188
电影浏览器 KEY_VIDEO 0x189
目录查看 KEY_DIRECTORY 0x18a
列表查看 KEY_LIST 0x18b
频道增加 KEY_CHANNELUP 0x192
频道减少 KEY_CHANNELDOWN 0x193
上一个频道(回看) KEY_LAST 0x195

经典彩色功能键与播放控制

如果你在模拟某些需要“红黄蓝绿”按键的旧式电视系统或游戏机,这些代码是必不可少的:

  • 彩色快捷键

    • 红键KEY_RED (0x18e)
    • 绿键KEY_GREEN (0x18f)
    • 黄键KEY_YELLOW (0x190)
    • 蓝键KEY_BLUE (0x191)
  • 特殊播放指令

    • 随机播放KEY_SHUFFLE (0x19a)
    • 慢动作KEY_SLOW (0x199)
    • 重启/重新开始KEY_RESTART (0x198)
    • 上一个/下一个KEY_PREVIOUS / KEY_NEXT

缩放与办公应用启动

对于需要调整界面布局或快速切换任务的场景:

  • 画面缩放(AC)

    • 放大KEY_ZOOMIN (0x1a2)
    • 缩小KEY_ZOOMOUT (0x1a3)
    • 重置缩放KEY_ZOOMRESET (0x1a4)
  • 生产力工具启动(AL)

    • 文字处理器KEY_WORDPROCESSOR (0x1a5)
    • 文本编辑器KEY_EDITOR (0x1a6)
    • 电子表格KEY_SPREADSHEET (0x1a7)
    • 游戏库KEY_GAMES (0x1a1)

配置实战:快速缩放游戏封面

如果你觉得 Batocera 的游戏库封面太小,可以通过以下步骤映射缩放功能:

  • 第一步:确定触发按键
    选择手柄上的两个空闲键,例如“热键 + 右扳机(R2)”设为放大,“热键 + 左扳机(L2)”设为缩小。
  • 第二步:查找对应代号
    对应表格中的 KEY_ZOOMINKEY_ZOOMOUT
  • 第三步:写入配置文件
    在你的 .keys 文件中完成这两组映射。

【提示】彩色功能键(红、绿、黄、蓝)在很多欧洲标准的电视系统或特定的模拟器(如部分电脑模拟器)中作为功能菜单的快捷键,映射到手柄的 A/B/X/Y 键上会非常方便。

【注意】办公应用启动键(如 KEY_SPREADSHEET)通常只有在你的 Batocera 安装了相关的桌面插件或应用包时才会生效,普通游戏环境下按下可能没有反应。

应用快捷启动与多媒体进阶控制

本节我们将介绍最后一组涉及特定应用程序启动(AL)、系统状态切换以及增强型媒体控制的代码。这些代码让你的设备能够像智能手机或全功能电脑一样处理复杂的任务。

生活化类比:你可以把这些按键想象成手机屏幕上的“快捷图标”。即使不打开复杂的菜单,只要按下一个键,系统就能立刻为你叫出“绘图软件”、“联系人列表”或者是“通知中心”。


应用程序快速入口(AL)

如果你在 Batocera 中集成了一些桌面级应用,可以使用以下代号来实现一键呼出:

应用程序类型 代码名称 对应数值
图形编辑器 KEY_GRAPHICSEDITOR 0x1a8
演示文稿(PPT) KEY_PRESENTATION 0x1a9
数据库应用 KEY_DATABASE 0x1aa
新闻阅读器 KEY_NEWS 0x1ab
语音邮件 KEY_VOICEMAIL 0x1ac
联系人/地址簿 KEY_ADDRESSBOOK 0x1ad
即时通讯(聊天) KEY_MESSENGER 0x1ae
拼写检查 KEY_SPELLCHECK 0x1b0
注销登录 KEY_LOGOFF 0x1b1
图片浏览器 KEY_IMAGES 0x1ba

屏幕与系统交互控制

这类代码负责控制屏幕硬件开关以及系统级的弹出菜单:

  • 屏幕状态切换
    • 显示器开关KEY_DISPLAYTOGGLE (0x1af) —— 可以一键让 LCD 屏幕在亮起和熄灭之间切换。
    • 亮度切换KEY_BRIGHTNESS_TOGGLE —— 与显示器开关共用同一逻辑。
  • 交互界面
    • 右键菜单(上下文菜单)KEY_CONTEXT_MENU (0x1b6) —— 模拟电脑鼠标右键弹出的菜单。
    • 通知中心KEY_NOTIFICATION_CENTER (0x1bc) —— 显示或隐藏系统通知列表。
    • 接听电话KEY_PICKUP_PHONE (0x1bd) —— 如果你的设备支持语音通讯,这就是接听键。

进阶多媒体与符号按键

对于追求极致影音操作体验的用户,这些细分指令非常实用:

  • 帧级控制与重复
    • 后退一帧KEY_FRAMEBACK (0x1b4)
    • 前进一帧KEY_FRAMEFORWARD (0x1b5)
    • 循环播放KEY_MEDIA_REPEAT (0x1b7)
  • 快速频道跳跃
    • 一次跳 10 个频道(+)KEY_10CHANNELSUP (0x1b8)
    • 一次跳 10 个频道(-)KEY_10CHANNELSDOWN (0x1b9)
  • 货币符号
    • 美元符号 ($)KEY_DOLLAR (0x1b2)
    • 欧元符号 (€)KEY_EURO (0x1b3)

配置实战:快速调出通知中心

在进行系统维护或者查看下载进度时,能够快速查看通知非常有用。

  • 第一步:选定你的“快捷手势”
    例如,你可以设定“热键(Hotkey)+ 向上划动右摇杆”。
  • 第二步:绑定通知中心代码
    .keys 配置文件中,将该组合的目标指向 KEY_NOTIFICATION_CENTER
  • 第三步:保存并测试
    重启模拟器后,按下组合键,你就能像在手机上划下通知栏一样看到系统消息了。

【注意】KEY_DISPLAYTOGGLE 会切断显示器信号,如果误按导致屏幕黑掉,请再次按下相同的组合键来唤醒屏幕,不要以为是设备死机。

【提示】在使用 KEY_FRAMEBACK/FORWARD(帧进退)时,通常需要视频播放器或特定模拟器(如支持倒带功能的 RetroArch)提供支持,否则系统可能无法精准定位到“每一帧”。

特殊功能键与组合键代码参考

在这最后一组代码库中,我们涵盖了电话挂断指令、文本编辑的高级操作、功能复合键(Fn),甚至是专为盲文设备设计的按键。这些代码能让你对手柄的定制化达到极致。

生活化类比:如果说基础按键是键盘上的“常用字母”,那么这组代码中的 Fn 系列就像是键盘上的“变声器”。当你按下它时,原本的按键就能瞬间切换成另一种功能。这在按键数量有限的手柄上非常有用,能让你像变魔术一样倍增手柄的快捷键数量。


通讯与高级文本编辑

这些代码主要用于处理来电以及在复杂的文本编辑器中进行快速删改:

功能描述 代码名称 对应数值
挂断电话/拒绝来电 KEY_HANGUP_PHONE 0x1be
删除至行末 KEY_DEL_EOL 0x1c0
删除至文末 KEY_DEL_EOS 0x1c1
插入整行 KEY_INS_LINE 0x1c2
删除整行 KEY_DEL_LINE 0x1c3

功能复合键(Fn 系列)

这是专为带有 Fn 键的设备定义的组合指令。在 Batocera 中,你可以利用这些代号来模拟笔记本电脑般的快捷操作。

  • Fn 组合功能键
    • KEY_FN (0x1d0):Fn 总键。
    • KEY_FN_ESCKEY_FN_F12:按下 Fn 键的同时按下 Esc 或 F1-F12 产生的特定信号。
    • KEY_FN_1 / KEY_FN_2:Fn 组合数字键。
    • KEY_FN_RIGHT_SHIFT:Fn 组合右 Shift 键。

盲文设备按键(BRL DOT)

这组代码(KEY_BRL_DOT1KEY_BRL_DOT10)是为专用的盲文输入终端设计的。虽然在常规游戏配置中极少用到,但它确保了系统对辅助外设的全面支持。


数字键盘区(Numeric Keypad)

这些代码(KEY_NUMERIC_0KEY_NUMERIC_3)通常出现在电话拨号盘、遥控器或特定的数字小键盘上。它们与标准键盘上方的数字键在系统底层是区分开的。


配置进阶:如何模拟 Fn 组合键

如果你想通过手柄模拟笔记本上的“Fn + F1”来实现静音或其他隐藏功能,可以按照以下步骤操作:

  • 第一步:明确需求
    确认你的模拟器或应用程序是否识别 KEY_FN_F1 这种特定的组合信号。
  • 第二步:编写映射规则
    .keys 配置文件中,将手柄的一个组合(例如“Select + 向上方向键”)映射到 KEY_FN_F1
  • 第三步:保存配置文件
    完成代码编写后保存文件,这样手柄就能发送原本只有键盘能发出的特殊指令了。

【注意】绝大多数普通模拟器只需要用到基础的 KEY_F1,只有在非常特殊的驱动环境或特定软件下才需要使用 KEY_FN_ 系列代码。

【提示】如果你在处理手机端的输入模拟,KEY_NUMERIC_ 系列代码会比普通的数字键更兼容电话拨号界面。

扩展数字键盘与智能硬件控制代码

本节我们将进入代码库的最后一部分。这些代码涵盖了电话拨号盘、摄像头精密控制、触控板开关以及智能硬件(如灯光和传感器)的调节指令。

生活化类比:你可以把这组代码看作是“全能管家的控制面板”。它不仅能让你像拨电话一样按数字,还能让你像操纵无人机云台一样控制摄像头,甚至能像智能家居 App 一样开关灯光或切换传感器。


电话与键盘数字键(Numeric Keypad)

这些代码专门用于模拟电话拨号盘或特定遥控器上的数字和特殊符号:

功能描述 代码名称 对应数值
数字 4 – 9 KEY_NUMERIC_4 至 9 0x204 – 0x209
星号键 (*) KEY_NUMERIC_STAR 0x20a
井号键 (#) KEY_NUMERIC_POUND 0x20b
电话字母键 A – D KEY_NUMERIC_A 至 D 0x20c – 0x20f

摄像头与触控板控制

如果你的设备带有摄像头或触控板(Touchpad),可以使用以下代号进行精准控制:

  • 摄像头云台控制
    • 对焦KEY_CAMERA_FOCUS (0x210)
    • 放大/缩小KEY_CAMERA_ZOOMIN / KEY_CAMERA_ZOOMOUT
    • 方向移动KEY_CAMERA_UP / DOWN / LEFT / RIGHT(用于控制摄像头转动)
  • 触控板管理
    • 触控板开关切换KEY_TOUCHPAD_TOGGLE (0x212)
    • 强制开启/关闭KEY_TOUCHPAD_ON / OFF

智能环境与服务指令

这类代码通常用于特定硬件(如掌机或车载系统)的辅助功能控制:

  • 快捷连接
    • WPS 按钮KEY_WPS_BUTTON (0x211) —— 用于一键加密连接 Wi-Fi。
  • 灯光与传感器
    • 阅读灯开关KEY_LIGHTS_TOGGLE (0x21e)
    • 环境光传感器开关KEY_ALS_TOGGLE (0x230) —— 用于开启或关闭屏幕亮度自动调节。
  • 服务请求
    • 呼叫服务开关KEY_ATTENDANT_TOGGLE (0x21d) —— 通常用于特殊设备上的呼叫功能。

手柄方向键原生指令(BTN_DPAD)

除了之前提到的模拟按键,Evmapy 也可以直接映射手柄的十字方向键(D-Pad)原生信号:

  • 十字键 向上BTN_DPAD_UP (0x220)
  • 十字键 向下BTN_DPAD_DOWN (0x221)
  • 十字键 向左BTN_DPAD_LEFT (0x222)
  • 十字键 向右BTN_DPAD_RIGHT (0x223)

配置实战:映射摄像头控制

如果你在运行需要频繁调整视角的游戏或应用,可以参考以下步骤:

  • 第一步:锁定控制按键
    选择手柄的右摇杆或十字键作为控制源。
  • 第二步:关联摄像头代号
    在配置文件中,将摇杆的各个方向映射到 KEY_CAMERA_UPKEY_CAMERA_LEFT 等代码。
  • 第三步:测试缩放功能
    如果需要缩放,可以将 L2/R2 关联到 KEY_CAMERA_ZOOMINKEY_CAMERA_ZOOMOUT

【提示】KEY_ALS_TOGGLE 非常适合映射到带有光线感应器的掌机上。通过手柄组合键,你可以快速在“手动调光”和“自动感应”之间切换,以适应不同的光照环境。

【注意】KEY_WPS_BUTTON 通常需要底层网络驱动的支持。在 Batocera 中,直接通过手柄模拟此键并不等同于物理按下了路由器的 WPS 键,它只是发送了一个连接请求指令。

屏幕锁定与智能助手控制代码

在这组代码中,我们接触到了更现代化的系统控制功能,包括旋转锁定、任务管理器,甚至是语音助手和表情符号选择器。

生活化类比:如果说之前的代码是让你操作电视或影碟机,那么这组代码就像是把你手柄上的按钮变成了智能手机或现代电脑的快捷键。你可以一键呼出“表情包”,或者一键叫出“任务管理器”来查看系统后台,操作感拉满。


屏幕与亮度高级调节

针对移动设备或掌机设计的特定控制:

功能描述 代码名称 对应数值
屏幕旋转锁定切换 KEY_ROTATE_LOCK_TOGGLE 0x231
亮度一键最低 KEY_BRIGHTNESS_MIN 0x250
亮度一键最高 KEY_BRIGHTNESS_MAX 0x251

应用程序与系统工具(AL)

这些代码可以让你直接通过手柄按键启动常用的系统组件:

  • 系统管理工具
    • 任务管理器KEY_TASKMANAGER (0x241) —— 相当于键盘上的 Ctrl+Shift+Esc。
    • 控制面板KEY_CONTROLPANEL (0x243)
    • 应用选择器KEY_APPSELECT (0x244) —— 切换当前运行的任务。
  • 现代交互功能
    • 语音命令KEY_VOICECOMMAND (0x246) —— 让系统进入监听状态。
    • 智能助手KEY_ASSISTANT (0x247) —— 呼出上下文感知助手(如 Cortana 或类似助手)。
    • 表情符号选择器KEY_EMOJI_PICKER (0x249) —— 快速弹出 Emoji 菜单。
  • 键盘与输入
    • 切换下一个键盘布局KEY_KBD_LAYOUT_NEXT (0x248)

输入辅助与斜向移动

这些代码主要用于增强输入体验或在特定场景下进行精准的方向控制:

  • 输入辅助控制(KBDINPUTASSIST)
    • 包含 ACCEPT(确认)、CANCEL(取消)以及在不同的辅助组(NEXTGROUP)中进行切换。
  • 斜向移动按键(Diagonal movement keys)
    • 右上KEY_RIGHT_UP (0x266)
    • 右下KEY_RIGHT_DOWN (0x267)
    • 左上KEY_LEFT_UP (0x268)

配置实战:设置一键亮度极限切换

如果你经常在极暗或极亮的环境下切换游戏,可以参考以下步骤:

  • 第一步:分配物理按键
    选择手柄上的组合键,例如“热键 + 向上推右摇杆”代表最亮,“热键 + 向下推右摇杆”代表最暗。
  • 第二步:绑定亮度代号
    .keys 配置文件中,将这两个动作分别关联到 KEY_BRIGHTNESS_MAXKEY_BRIGHTNESS_MIN
  • 第三步:保存并体验
    保存文件后,你就可以瞬间在“节能模式”和“全亮模式”之间闪切,省去了慢慢按住亮度键递增的麻烦。

【提示】KEY_EMOJI_PICKER 非常适合映射到带有聊天功能的模拟器中,让你能快速在聊天框里发表情。

【注意】斜向移动键(如 KEY_LEFT_UP)在某些只支持上下左右四向指令的模拟器中可能无效,使用前请确认模拟器是否支持解析八向输入信号。

高阶媒体导航与隐私控制代码

本节我们来到了按键代码表的尾声。这些指令涵盖了多媒体光盘的高级菜单、录制控制、甚至是现代屏幕的隐私保护功能。

生活化类比:你可以把这组代码看作是遥控器上的“专家级按钮”。它们平时可能藏在翻盖下面,但当你需要调出 DVD 的根菜单、进行局部截图,或者是开启那种防止旁边人偷窥的“防窥屏”时,它们就是你的秘密武器。


媒体与导航控制

这些代码主要用于增强在多媒体播放和电视系统中的交互体验:

功能描述 代码名称 对应数值
左下移动 KEY_LEFT_DOWN 0x269
根菜单/主菜单 KEY_ROOT_MENU 0x26a
媒体顶层菜单(如 DVD 菜单) KEY_MEDIA_TOP_MENU 0x26b
音频描述开关(辅助功能) KEY_AUDIO_DESC 0x26e
3D 模式切换 KEY_3D_MODE 0x26f
下一个收藏频道 KEY_NEXT_FAVORITE 0x270
视频点播(VOD) KEY_VOD 0x273
取消静音 KEY_UNMUTE 0x274
快速倒退 KEY_FASTREVERSE 0x275
慢速倒退 KEY_SLOWREVERSE 0x276

系统工具与屏幕操作

这些代码对应了现代操作系统中非常实用的辅助工具:

  • 录制控制
    • 停止录制KEY_STOP_RECORD (0x271)
    • 暂停录制KEY_PAUSE_RECORD (0x272)
  • 屏幕交互
    • 屏幕键盘KEY_ONSCREEN_KEYBOARD (0x278) —— 快速呼出软键盘。
    • 隐私屏切换KEY_PRIVACY_SCREEN_TOGGLE (0x279) —— 开启或关闭电子防窥屏功能。
    • 区域截图KEY_SELECTIVE_SCREENSHOT (0x27a) —— 允许你选择屏幕的一个区域进行保存。
  • 数据应用
    • 数据广播应用KEY_DATA (0x277) —— 用于控制与当前频道关联的互动应用(如 HbbTV 等)。

配置实战:设置一键区域截图

如果你想在游戏中随时截取精彩瞬间并分享,可以按照以下步骤设置:

  • 第一步:指定截图触发键
    选择一个不常用的手柄按键组合,比如“热键 + 右肩键(R1)”。
  • 第二步:绑定区域截图代码
    .keys 配置文件中,将该组合的目标指向 KEY_SELECTIVE_SCREENSHOT
  • 第三步:执行截图操作
    保存并生效后,按下该组合键,系统就会弹出选框,让你精准捕捉屏幕上的特定画面。

【提示】KEY_AUDIO_DESC(音频描述)是一项非常有温度的功能。开启后,系统会通过语音描述画面中的动作,帮助视觉障碍用户更好地理解节目内容。

【注意】一些特定的硬件按键(如隐私屏切换)需要物理显示器本身具备该硬件支持,否则在系统层发送此指令可能不会产生任何视觉变化。


关于未定义按键的说明:
部分键盘上可能存在一些没有预定义含义的按键,这些按键通常由厂商自行定义,但在底层代码中仍保留了扩展的空间。

自定义宏按键(Macro Keys)配置指南

在本节中,我们将介绍专门为玩家和高级用户准备的“宏按键”代码。这些按键通常出现在高端游戏键盘或专业工作站设备上,允许用户自行定义一系列复杂的操作。

生活化类比:你可以把这些“宏按键”想象成餐厅里的“空白点餐卡”。这张卡本身没有名字,不代表任何菜品,但你可以根据自己的喜好,把“宫保鸡丁+米饭+可乐”这一整套组合动作写在卡上。以后只要交出这张卡,厨师就会自动完成这一系列动作。


宏按键(KEY_MACRO)代码清单

这些代码专门用于那些标记为 G1-G18 或 S1-S30 等没有固定功能的空白物理按键:

宏按键编号 代码名称 对应数值
宏按键 1 KEY_MACRO1 0x290
宏按键 2 KEY_MACRO2 0x291
宏按键 3 KEY_MACRO3 0x292
宏按键 4 KEY_MACRO4 0x293
宏按键 5 KEY_MACRO5 0x294
宏按键 6 KEY_MACRO6 0x295
宏按键 7 KEY_MACRO7 0x296
宏按键 8 KEY_MACRO8 0x297
宏按键 9 KEY_MACRO9 0x298
宏按键 10 KEY_MACRO10 0x299
宏按键 11 KEY_MACRO11 0x29a
宏按键 12 KEY_MACRO12 0x29b
宏按键 13 KEY_MACRO13 0x29c
宏按键 14 KEY_MACRO14 0x29d
宏按键 15 KEY_MACRO15 0x29e
宏按键 16 KEY_MACRO16 0x29f
宏按键 17 KEY_MACRO17 0x2a0
宏按键 18 KEY_MACRO18 0x2a1
宏按键 19 KEY_MACRO19 0x2a2

宏按键的工作原理

对于内核(Kernel)而言,这些宏按键其实和普通按键没什么区别。当你按下键盘上的宏按键时,真正的“魔法”发生在计算机的软件端:

  • 第一步:按下物理键
    按下键盘上标记为 G1 的物理按钮。
  • 第二步:发送信号
    硬件向系统发送对应的代码信号(例如 KEY_MACRO1)。
  • 第三步:软件拦截并执行
    系统后台的驱动程序或软件接收到信号后,会根据你预设的规则,自动触发一串按键序列(宏指令(Macro sequence))或执行特定的操作。

使用规范与禁忌

【注意】为了确保系统的兼容性,请严格遵守以下两条准则:

  1. 严禁滥用空白代号:如果按键本身已经有明确的标记(比如“播放”或“静音”),则禁止使用 KEY_MACRO#。必须使用对应的功能名称(如 KEY_PLAY)。
  2. 严禁作为占位符:当你发现现有的代码表里找不到某个按键的匹配项时,不能随便找个 KEY_MACRO# 来凑合。这种情况下,必须定义一个全新的功能代号(KEY_FOO)。

【提示】宏按键最强大的地方在于“软件端处理”。在 Evmapy 中,你可以将手柄的背键(Paddles)映射为 KEY_MACRO1,然后在模拟器中为这个虚拟宏分配一个极其复杂的出招表或快捷操作。

宏按键进阶:录制与预设切换指南

在掌握了基础的宏按键后,本节将带你了解如何控制那些能够“现场教学”的高级功能。这些代码专门用于管理宏的录制过程以及在不同的配置方案之间快速切换。

生活化类比:如果宏按键是“点餐卡”,那么这一组控制键就像是“录音机”和“相册本”。“录音机”能让你即时录下你的操作步骤,“相册本”则能让你在“格斗游戏专用按键”、“赛车游戏专用按键”等多套方案之间一键切换。


扩展宏按键清单 (20-30)

这些是后续的宏按键代号,通常用于按键数量极其丰富的专业游戏键盘:

宏按键编号 代码名称 对应数值
宏按键 20 KEY_MACRO20 0x2a3
宏按键 21 KEY_MACRO21 0x2a4
宏按键 30 KEY_MACRO30 0x2ad

宏录制与预设切换控制

这些代码用于驱动那些负责处理宏的宿主端软件(Host-side software),赋予你动态调整配置的能力:

功能描述 代码名称 对应数值
开始录制宏 KEY_MACRO_RECORD_START 0x2b0
停止录制宏 KEY_MACRO_RECORD_STOP 0x2b1
循环切换预设方案 KEY_MACRO_PRESET_CYCLE 0x2b2
直接选择预设 1 KEY_MACRO_PRESET1 0x2b3
直接选择预设 2 KEY_MACRO_PRESET2 0x2b4
直接选择预设 3 KEY_MACRO_PRESET3 0x2b5

如何使用录制功能

想要在手柄上实现“即时录制”功能,可以参考以下逻辑:

  • 第一步:启动录制状态
    按下映射为 KEY_MACRO_RECORD_START 的组合键。
  • 第二步:输入动作序列
    依次按下你想要记录的按键动作。
  • 第三步:结束并保存
    再次按下录制键或专门的停止键(KEY_MACRO_RECORD_STOP)。

【提示】关于“停止录制”的逻辑:并不是所有的硬件都会发送独立的“停止”信号。如果系统没有检测到专门的 KEY_MACRO_RECORD_STOP 代码,那么 KEY_MACRO_RECORD_START 就会像电灯开关一样,按下第一次是开启,按下第二次就是关闭。

【注意】预设切换(Preset Select)功能非常适合多平台玩家。你可以设定 KEY_MACRO_PRESET_CYCLE,这样每按一次,手柄的映射模式就会在“街机模式”、“家用机模式”和“多媒体模式”之间循环切换。


关于内置显示屏的预告:
部分高端键盘还带有内置的 LCD 面板,其显示内容同样可以通过特定的底层指令进行控制,我们将在后续章节展开说明。

键盘屏幕菜单与自定义功能键代码参考

本节教程将带你了解那些带屏幕的高端键盘是如何工作的,以及一组被开发者幽默地命名为“乐不可支(Trigger Happy)”的通用功能按键代码。

生活化类比:你可以把这些按键想象成银行 ATM 机屏幕两侧的“无名按钮”。这些按钮本身没有印字,它们的功能完全取决于屏幕上显示的是什么——如果屏幕显示“取款”,它就是确认键;如果显示“退出”,它就是取消键。


键盘液晶屏菜单键(KBD LCD MENU)

一些高级键盘配有内置的液晶显示屏(LCD Panel),显示内容由主机控制。在屏幕下方通常有一排专门用来操作屏幕菜单的按键:

功能描述 代码名称 对应数值
LCD 菜单键 1 KEY_KBD_LCD_MENU1 0x2b8
LCD 菜单键 2 KEY_KBD_LCD_MENU2 0x2b9
LCD 菜单键 3 KEY_KBD_LCD_MENU3 0x2ba
LCD 菜单键 4 KEY_KBD_LCD_MENU4 0x2bb
LCD 菜单键 5 KEY_KBD_LCD_MENU5 0x2bc

通用自定义触发键(Trigger Happy)

当标准的按键定义(如 A、B、开始键等)不够用时,系统提供了 BTN_TRIGGER_HAPPY 系列代码。它们就像是一组“万能备用件”,可以分配给任何你需要的特殊功能。

触发键编号 代码名称 对应数值
自定义触发 1 BTN_TRIGGER_HAPPY1 0x2c0
自定义触发 2 BTN_TRIGGER_HAPPY2 0x2c1
自定义触发 22 BTN_TRIGGER_HAPPY22 0x2d5

如何在配置中使用这些“无名按键”

如果你想为手柄上那些多出来的奇葩按钮(比如背键或侧边小键)分配功能,可以参考以下步骤:

  • 第一步:确认物理连接
    确保你的设备驱动能识别这些额外的物理按键。
  • 第二步:指派虚拟代号
    在配置文件中,将物理按键映射到一个 BTN_TRIGGER_HAPPY# 代码。例如,把左背键设为 BTN_TRIGGER_HAPPY1
  • 第三步:在软件中定义动作
    在你的游戏或模拟器设置里,将“快速存档”或“打开控制台”等动作绑定到这个 BTN_TRIGGER_HAPPY1 上。

【提示】之所以叫 TRIGGER_HAPPY(字面意思为“扣扳机扣得停不下来”),是因为这组代码最初是为那些拥有大量自定义宏或连发功能的专业游戏外设准备的,能让玩家在游戏中实现更复杂、更快速的操作。

【注意】由于 KEY_KBD_LCD_MENU# 按键通常没有固定标签,它们的功能完全由控制屏幕内容的软件决定。在编写配置时,请参考对应键盘品牌的官方驱动说明,以免映射错位。

扩展自定义按键与相对位移轴(坐标轴)代码参考

本节将为您介绍最后一批自定义触发按键,并开启一个全新的领域:相对位移轴(Relative axes)。这些代码是让鼠标指针移动、滚轮滚动以及赛车方向盘旋转的核心指令。

生活化类比:如果之前的“按键”是控制开关的“手指”,那么“相对位移轴”就是控制方向的“推力”。它不像按键只有“开”和“关”,它代表的是一种“移动了多少”的变化。就像你推着购物车走,REL_X 就是你左右挪动的距离,而 REL_Y 就是你前后推行的跨度。


进阶自定义触发键(Trigger Happy)

这些是 BTN_TRIGGER_HAPPY 系列的延伸,为您提供了极大的自定义空间。

触发键编号 代码名称 对应数值
自定义触发 23 BTN_TRIGGER_HAPPY23 0x2d6
自定义触发 24 BTN_TRIGGER_HAPPY24 0x2d7
自定义触发 40 BTN_TRIGGER_HAPPY40 0x2e7

【提示】系统定义的按键上限(KEY_MAX)为 0x2ff。为了节省系统资源,内核在处理模块别名时通常会忽略一些不常用的低位按键,只从“静音键(KEY_MUTE)”之后开始重点关注。


相对位移轴(Relative axes)清单

相对轴用于描述设备在某个方向上的相对移动量,这是鼠标、拨轮和摇杆工作的基石。

轴向名称 代码名称 功能说明
X轴 REL_X 水平移动(左右)
Y轴 REL_Y 垂直移动(上下)
Z轴 REL_Z 深度移动(前后)
X轴旋转 REL_RX 绕 X 轴的旋转位移
Y轴旋转 REL_RY 绕 Y 轴的旋转位移
Z轴旋转 REL_RZ 绕 Z 轴的旋转位移
水平滚轮 REL_HWHEEL 左右滚动滚轮
刻度盘 REL_DIAL 旋转式拨盘控制
垂直滚轮 REL_WHEEL 标准上下滚动滚轮
杂项位移 REL_MISC 其他未定义的相对移动

配置实战:如何用摇杆模拟鼠标

如果你想在手柄上实现用右摇杆控制鼠标指针,可以参考以下步骤:

  • 第一步:关联水平移动
    在配置文件中,将右摇杆的左右推向动作关联到 REL_X
  • 第二步:关联垂直移动
    将右摇杆的上下推向动作关联到 REL_Y
  • 第三步:设置滚动功能
    如果你希望按下某个组合键时摇杆变成滚轮,则将该状态下的上下动作关联到 REL_WHEEL

【提示】相对轴(Relative)绝对轴(Absolute)的区别在于:相对轴告诉系统“我向左移动了 5 厘米”,而绝对轴则是告诉系统“我现在就在屏幕左侧 5 厘米的位置”。

【注意】代码 0x0a 是预留位置,禁止在任何输入驱动程序中使用它。虽然在早期的 HID 标准中它曾被占用,但现在的用户空间(Userspace)软件需要避开它以防冲突。

高精度滚动与绝对坐标轴(绝对位移)代码参考

在本节教程中,我们将深入了解如何处理更高精度的滚动操作,并正式引入绝对坐标轴(Absolute axes)。这些代码是触摸屏、数位板以及专业飞行/赛车外设能够精准工作的核心。

生活化类比:如果说“相对坐标轴”是告诉你“向左走三步”,那么“绝对坐标轴”就是直接告诉你“请站到操场的坐标 (10, 20) 处”。它不是在描述位移的快慢,而是在描述一个明确的位置或力度,就像油门踏板踩到了 50% 的位置,或者手指点在了屏幕的正中心。


相对轴补充:高精度滚动控制

为了解决普通鼠标滚轮“一格一格”跳动感太强的问题,系统定义了高精度滚动指令:

功能描述 代码名称 对应数值
保留位(不可用) REL_RESERVED 0x0a
高精度垂直滚轮 REL_WHEEL_HI_RES 0x0b
高精度水平滚轮 REL_HWHEEL_HI_RES 0x0c

【提示】REL_RESERVED 的存在是为了让用户空间(Userspace)软件能够检测并处理旧版驱动可能产生的错误信号。


绝对坐标轴(Absolute axes)清单

绝对轴用于描述具有固定范围的状态,例如摇杆的偏离程度、压力的大小或油门的深度。

控制项名称 代码名称 功能说明
绝对 X 轴 ABS_X 左右位置(如触摸屏水平坐标)
绝对 Y 轴 ABS_Y 上下位置(如触摸屏垂直坐标)
绝对 Z 轴 ABS_Z 垂直压力或深度
旋转轴 ABS_RX / RY / RZ 绕各轴旋转的绝对位置
节流阀 ABS_THROTTLE 飞行模拟器的推力控制
方向舵 ABS_RUDDER 飞行模拟器的尾舵控制
滚轮 ABS_WHEEL 绝对位置滚轮
油门踏板 ABS_GAS 赛车外设的油门深度
刹车踏板 ABS_BRAKE 赛车外设的刹车深度
苦力帽 (Hat) ABS_HAT0X 至 HAT3Y 摇杆顶部的八方向苦力帽
压力感应 ABS_PRESSURE 数位笔的压感强度
距离感应 ABS_DISTANCE 笔尖距离板子的悬空高度
X/Y 轴倾斜 ABS_TILT_X / Y 数位笔的倾斜角度
工具宽度 ABS_TOOL_WIDTH 笔触或触摸区域的宽度
音量控制 ABS_VOLUME 具有固定起止点的绝对音量拨杆

配置实战:模拟专业赛车脚踏板

如果你想把手柄的扳机键映射成赛车游戏里的专业油门,可以参考以下步骤:

  • 第一步:识别扳机属性
    手柄的扳机键(L2/R2)通常是线性触发的,属于绝对轴。
  • 第二步:绑定油门与刹车
    在配置文件中,将右扳机(R2)的轴向信号映射到 ABS_GAS,将左扳机(L2)映射到 ABS_BRAKE
  • 第三步:调整灵敏度
    根据 ABS_XABS_Y 的反馈数值,确保踏板踩死时数值达到最大。

【注意】代码 0x2e 是预留位,禁止在输入驱动程序中使用。它的作用类似于之前提到的 REL_RESERVED,用于帮助软件辨别后续的绝对轴事件(ABS_* event)是否有效,防止误判。

【提示】如果你正在配置数位板(绘画板),ABS_PRESSURE 是最重要的参数,它决定了你下笔的轻重是否能转化成线条的粗细。

多点触控与系统开关事件代码参考

在本节中,我们将深入探讨 Linux 输入子系统中最复杂也最智能的部分:多点触控(Multi-touch,简称 MT)。这些代码是让你的智能手机、平板电脑或带触摸功能的掌机能够识别“双指缩放”或“多指滑动”的核心。同时,我们还将简单介绍开关事件(Switch events)

生活化类比:如果说之前的单点触摸(ABS_X/Y)像是一根手指在屏幕上“戳点”,那么多点触控协议就像是给每个手指都分配了一个“专属工号”。系统不仅知道哪里被碰了,还知道是哪根手指碰的、碰的面积有多大,甚至连手指按压的形状(椭圆的长轴和短轴)都能感觉得一清二楚。


多点触控(MT)绝对轴代码清单

多点触控协议允许设备同时追踪多个接触点,每个接触点都有自己的一套属性:

功能描述 代码名称 功能说明
保留位(不可用) ABS_RESERVED 0x2e
触控槽位 ABS_MT_SLOT 识别当前正在操作哪一个触控点(手指)
触碰长轴 ABS_MT_TOUCH_MAJOR 接触面椭圆的长轴直径
触碰短轴 ABS_MT_TOUCH_MINOR 接触面椭圆的短轴直径(圆形则省略)
接触宽度长轴 ABS_MT_WIDTH_MAJOR 手指靠近但未完全压实时的长轴宽度
触控方向 ABS_MT_ORIENTATION 接触面椭圆的角度(横着按还是竖着按)
中心 X 坐标 ABS_MT_POSITION_X 手指接触点的中心水平位置
中心 Y 坐标 ABS_MT_POSITION_Y 手指接触点的中心垂直位置
工具类型 ABS_MT_TOOL_TYPE 识别是手指、笔还是其他工具
追踪 ID ABS_MT_TRACKING_ID 为每个接触周期分配的唯一识别 ID
触碰压力 ABS_MT_PRESSURE 针对接触区域的压力感应
悬空距离 ABS_MT_DISTANCE 手指距离屏幕的悬浮高度

开关事件(Switch events)

与按键(按下即弹起)不同,开关事件用于描述那种具有“持久状态”的硬件变化:

开关类型 代码名称 功能说明
外壳盖开关 SW_LID 设置为 1 时表示笔记本电脑盖子已合上

配置实战:让系统识别多指操作

如果你正在为一台带触摸屏的掌机配置 Batocera 或其他 Linux 系统,理解 MT 协议的运作流程至关重要:

  • 第一步:建立槽位(Slot)
    系统通过 ABS_MT_SLOT 告诉底层驱动:“现在我要处理 0 号手指的数据了”。
  • 第二步:指派追踪 ID
    使用 ABS_MT_TRACKING_ID 给这根手指发一个“临时身份证”。只要这根手指没离开屏幕,这个 ID 就保持不变,系统就能通过它实现“拖拽”效果。
  • 第三步:传输位置与压力
    实时发送 ABS_MT_POSITION_XABS_MT_POSITION_Y 确定位置,如果是绘图软件,还会配合 ABS_MT_PRESSURE 发送压力数据。
  • 第四步:同步结束
    当手指离开,ID 会变为 -1,代表该槽位已清空。

【提示】绝对轴上限(ABS_MAX)目前定义为 0x3f。这意味着系统预留了足够的空间来处理未来可能出现的更多触控传感器属性。

【注意】ABS_RESERVED (0x2e) 必须保留。它的存在是为了让用户空间(Userspace)软件能够检测到驱动程序的异常,确保在处理复杂的多点信号时不会把杂乱的旧数据误认为是有效的触控事件。

【提示】关于 SW_LID:在掌机配置中,这个开关常被用来触发“睡眠模式”。当物理传感器检测到盖子关上或掌机折叠时,发送 SW_LID 信号,系统就会自动执行休眠程序。

硬件状态开关与杂项事件代码参考

在本节中,我们将介绍开关事件(Switch events)的剩余部分以及杂项事件(Misc events)。与普通的按键点击不同,这些代码负责记录设备“物理形态”的改变,比如耳机插拔、盖子开合或传感器触发。

生活化类比:如果按键是“点火开关”,那么这些开关事件就像是汽车上的“车门感应器”。你不需要一直按着它,只要门是开着的,感应器的状态就是“开启”;门一关,状态就自动变成“关闭”。系统通过这些代码时刻盯着你的设备:耳机插进去了吗?平板模式开启了吗?


硬件物理状态开关(SW 系列)

这些代码描述了设备各种接口和物理结构的实时状态:

开关功能 代码名称 状态描述
平板模式 SW_TABLET_MODE 开启时表示设备切换到了平板模式
耳机插拔 SW_HEADPHONE_INSERT 检测耳机是否已插入接口
总无线电开关 SW_RFKILL_ALL 射频杀手(RFKill)总开关,开启表示启用无线功能
麦克风插拔 SW_MICROPHONE_INSERT 检测外部麦克风是否插入
底座连接 SW_DOCK 检测是否连接到了扩展坞(Dock)
线路输出插拔 SW_LINEOUT_INSERT 检测音频线路输出(Line-out)是否连接
物理插孔检测 SW_JACK_PHYSICAL_INSERT 机械式插孔开关检测
视频输出插拔 SW_VIDEOOUT_INSERT 检测视频输出设备是否连接
镜头盖状态 SW_CAMERA_LENS_COVER 开启时表示摄像头镜头已被遮盖
侧滑键盘 SW_KEYPAD_SLIDE 开启时表示侧滑键盘已滑出
前置接近感应 SW_FRONT_PROXIMITY 检测是否有物体靠近前置感应器
旋转锁定 SW_ROTATE_LOCK 开启时表示屏幕自动旋转已锁定
线路输入插拔 SW_LINEIN_INSERT 检测音频线路输入(Line-in)是否连接
设备静音 SW_MUTE_DEVICE 开启时表示整个设备处于禁用/静音状态
手写笔收纳 SW_PEN_INSERTED 检测手写笔是否插入了笔槽
机箱/外壳盖 SW_MACHINE_COVER 开启时表示设备外壳或保护盖已关闭

杂项事件控制(MSC 系列)

杂项事件(Misc events)用于处理那些不属于位移、按键或开关的特殊输入信号:

  • 序列号读取MSC_SERIAL (0x00) —— 用于传输输入设备的唯一序列号。
  • LED 呼吸灯/脉冲MSC_PULSELED (0x01) —— 控制设备上的 LED 灯发出脉冲或呼吸效果。
  • 手势动作MSC_GESTURE (0x02) —— 用于记录某些简单硬件层面的手势识别。
  • 原始数据MSC_RAW (0x03) —— 传输未经加工的原始输入数据。

配置实战:实现耳机插入自动静音

如果你想在设备上实现“插入耳机自动关闭外放”的功能,底层逻辑通常是这样组织的:

  • 第一步:监听接口状态
    系统时刻监测 SW_HEADPHONE_INSERT 信号的数值。
  • 第二步:触发状态转变
    当数值从 0 变为 1(代表耳机已插入)时,底层驱动会向系统报告这一“物理开关事件”。
  • 第三步:执行音频切换
    系统层(如 PulseAudio 或 ALSA)接收到该事件后,会自动将音频流从扬声器(Speaker)定向到耳机孔。

【注意】SW_RADIO 目前已被标记为弃用(Deprecated),在新的驱动程序中应统一使用 SW_RFKILL_ALL 来控制无线电设备的开启。

【提示】对于二合一笔记本或掌机用户,SW_TABLET_MODE 非常有用。当系统检测到该开关处于开启状态时,通常会自动弹出虚拟键盘(On-screen Keyboard)并禁用物理键盘,以防止误触。

杂项数据、LED 指示灯与声音反馈代码参考

在本节中,我们将介绍如何控制设备上的各种“指示灯”、调整按键的“连打速度”,以及系统发出通知音的指令。这些代码能让你的硬件不仅仅是输入工具,还能实时反馈当前的状态。

生活化类比:如果按键是你的“指令”,那么 LED 灯就是设备的“表情”。当你按下大写锁定键,灯亮了,就像是设备在点头告诉你:“收到,现在是全大写模式”。而自动重复设置就像是“弹簧的松紧”,决定了你按住按键不松手时,字符弹出的快慢。


杂项事件补充(MSC 系列)

这些代码用于处理一些特殊的底层数据:

功能描述 代码名称 对应数值
扫描码 MSC_SCAN 0x04
时间戳 MSC_TIMESTAMP 0x05

LED 指示灯控制(LED 系列)

这些代码用于控制键盘或其他硬件上的小灯,它们能直观地显示设备当前的运行状态:

指示灯功能 代码名称 功能说明
数字锁定灯 LED_NUML 数字小键盘是否锁定
大写锁定灯 LED_CAPSL 是否处于大写输入模式
滚动锁定灯 LED_SCROLLL 经典的 Scroll Lock 状态灯
组合键灯 LED_COMPOSE 多重按键组合状态显示
假名灯 LED_KANA 日文键盘模式指示
睡眠灯 LED_SLEEP 系统处于睡眠状态时点亮
挂起灯 LED_SUSPEND 系统挂起状态指示
静音灯 LED_MUTE 音频开启静音时点亮
邮件灯 LED_MAIL 收到新邮件时闪烁或点亮
充电灯 LED_CHARGING 电池正在充电的指示灯

自动重复参数(Autorepeat)

当你长按一个键不放时,系统会根据以下两个参数来决定“连打”的行为:

  • 重复延迟(REP_DELAY):指的是你按下按键到它开始自动重复输入之间的“等待时间”。
  • 重复周期(REP_PERIOD):指的是一旦开始连打,两个字符之间出现的“时间间隔”。

生活化类比:就像踢足球,REP_DELAY 是你瞄准的时间,REP_PERIOD 则是你瞄准后机关枪式射门的频率。


声音反馈(Sounds)

这些代码用于驱动硬件内置的微型蜂鸣器或音频设备:

  • 按键点击声SND_CLICK (0x00) —— 模拟机械点击的音效。
  • 警报铃声SND_BELL (0x01) —— 系统报错或提示时的“叮”声。
  • 特定音调SND_TONE (0x02) —— 发出特定频率的蜂鸣声。

进阶操作:使用执行指令(Execute)

【注意】如果某个模拟器完全不支持任何键盘快捷键来触发功能,Evmapy 也可以直接运行系统指令。但这属于最后手段,通常仅在模拟器卡死、需要强制结束进程(Kill)时使用。

如果你需要通过手柄强行退出一个“顽固”的模拟器,可以参考以下步骤:

  • 第一步:确定退出指令
    找到系统层面关闭程序的命令(例如 pkill -9 emulator_name)。
  • 第二步:配置手柄触发
    在配置文件中,将“热键 + Start”等组合键的操作设置为执行该系统指令。
  • 第三步:保存并测试
    确保在紧急情况下,按下组合键能立刻强行返回系统桌面。

【提示】在使用 LED_CHARGINGLED_MUTE 映射时,请确保你的硬件驱动支持软件控制这些灯光,否则映射可能无法让物理灯光产生亮灭变化。

进阶技巧:使用手柄直接执行系统指令

在之前的教程中,我们学习了如何把手柄按键模拟成键盘按键。但在某些特殊情况下,比如某些模拟器完全不支持键盘快捷键,我们就需要更高级的操作:直接执行系统指令

生活化类比:如果说“模拟按键”是托人带个信,那么“执行指令”就像是直接拿到了系统管理员的“最高通行证”。它跳过了所有中间环节,直接命令系统去完成某项任务,比如“现在立刻关掉这个程序”。


如何将按键映射为指令(exec)

如果你想让某个按键组合触发一段代码脚本,而不是模拟某个按键,可以按照以下步骤操作:

  • 第一步:更改触发类型
    在配置文件中,将原本的类型 key 修改为 exec(即“执行”的缩写)。
  • 第二步:编写指令内容
    在目标(target)栏位中,输入你想要运行的完整系统指令,并用双引号包裹起来。

实战案例:强制关闭“顽固”的模拟器

Sonic Retro 引擎为例,这类引擎通常没有预设的退出快捷键。为了能一键返回游戏大厅,我们可以配置一个“强行杀掉进程”的组合键:


{
"trigger": ["hotkey", "start"],
"type": "exec",
"target": "killall -9 sonic2013; killall -9 soniccd"
}


核心要点解析

  • 触发条件(trigger):在本例中,我们设定为“热键(hotkey)+ 开始键(start)”的组合。
  • 执行类型(type):使用了 exec,告诉系统这不是一次按键模拟,而是一次指令调用。
  • 目标操作(target):双引号内的指令表示:强制停止名为 sonic2013soniccd 的所有运行程序。

【注意】使用 exec 类型时,指令必须写在双引号内。请务必检查指令的拼写,错误的指令可能会导致系统没有响应。

【提示】由于 exec 具有很高的权限,它通常被当作“最后手段”使用。最常见的用途就是像案例中这样,用来强制关闭那些无法通过正常菜单退出的模拟器或游戏。


原文: Evmapy键盘映射工具 • 翻译: DIY8 Bot

© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容