📖 本文由 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_LEFTALT和KEY_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_LEFTMETA 或 KEY_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_F13至KEY_F24(对应数值 183 – 194)
提示:这些按键常被专业玩家用于宏编程。如果你的手柄有额外的背键,可以将它们映射到这些不常用的功能键上,以避免与模拟器默认快捷键冲突。
媒体与生活化应用启动(AL)
这些代码对应的是多媒体键盘上那些极具“生活气息”的按钮,比如一键打开邮件或启动购物网站。
-
媒体进阶控制:
- 播放:
KEY_PLAY(207) - 快进:
KEY_FASTFORWARD(208) - 低音增强:
KEY_BASSBOOST(209) - 暂停 CD:
KEY_PAUSECD(201)
- 播放:
-
应用一键直达:
- 仪表盘/控制台:
KEY_DASHBOARD(204) - 搜索:
KEY_SEARCH(217) - 电子邮件:
KEY_EMAIL(215) - 聊天工具:
KEY_CHAT(216) - 财务/账本:
KEY_FINANCE(219) - 购物:
KEY_SHOP(221)
- 仪表盘/控制台:
配置进阶:自定义你的“快捷面板”
如果你希望手柄能像智能遥控器一样工作,可以参考以下步骤重新组织你的 keys 文件:
-
第一步:规划你的宏(Macro)需求
比如,你是否希望按下一个组合键就立刻打开模拟器的截图管理或控制台?这时可以寻找KEY_DASHBOARD或KEY_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_BASE至BTN_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)
- CD 播放器:
电视高级功能
对于支持电视信号录制(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_SCREEN 和 KEY_ZOOM 在底层是完全一样的。如果你的模拟器支持一键缩放畫面,使用其中任何一个代号都能达到目的。
【注意】在使用 KEY_VCR 或 KEY_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_ZOOMIN和KEY_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)
- 一次跳 10 个频道(+):
- 货币符号:
- 美元符号 ($):
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_ESC至KEY_FN_F12:按下 Fn 键的同时按下 Esc 或 F1-F12 产生的特定信号。KEY_FN_1/KEY_FN_2:Fn 组合数字键。KEY_FN_RIGHT_SHIFT:Fn 组合右 Shift 键。
盲文设备按键(BRL DOT)
这组代码(KEY_BRL_DOT1 至 KEY_BRL_DOT10)是为专用的盲文输入终端设计的。虽然在常规游戏配置中极少用到,但它确保了系统对辅助外设的全面支持。
数字键盘区(Numeric Keypad)
这些代码(KEY_NUMERIC_0 至 KEY_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。
- WPS 按钮:
- 灯光与传感器:
- 阅读灯开关:
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_UP、KEY_CAMERA_LEFT等代码。 - 第三步:测试缩放功能
如果需要缩放,可以将 L2/R2 关联到KEY_CAMERA_ZOOMIN和KEY_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_MAX和KEY_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))或执行特定的操作。
使用规范与禁忌
【注意】为了确保系统的兼容性,请严格遵守以下两条准则:
- 严禁滥用空白代号:如果按键本身已经有明确的标记(比如“播放”或“静音”),则禁止使用
KEY_MACRO#。必须使用对应的功能名称(如KEY_PLAY)。 - 严禁作为占位符:当你发现现有的代码表里找不到某个按键的匹配项时,不能随便找个
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_X或ABS_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_X和ABS_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_CHARGING 或 LED_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):双引号内的指令表示:强制停止名为
sonic2013或soniccd的所有运行程序。
【注意】使用 exec 类型时,指令必须写在双引号内。请务必检查指令的拼写,错误的指令可能会导致系统没有响应。
【提示】由于 exec 具有很高的权限,它通常被当作“最后手段”使用。最常见的用途就是像案例中这样,用来强制关闭那些无法通过正常菜单退出的模拟器或游戏。
原文: Evmapy键盘映射工具 • 翻译: DIY8 Bot



暂无评论内容