ARTICLE

Linux 下罗技键鼠驱动与配置指南

汇总 Linux 下罗技键鼠驱动与控制项映射,包含常见功能说明与 logiops 配置要点。

Article

Linux 下罗技键鼠驱动与配置指南

汇总 Linux 下罗技键鼠驱动与控制项映射,包含常见功能说明与 logiops 配置要点。

**注意:**这不是一个详尽的列表,其中一些控件 ID 共享类似的功能。可能需要进一步研究。

控件标识功能笔记
0x0050鼠标左键
0x0051鼠标右键
0x0052鼠标中键可能是某些鼠标上的手势按钮(请参阅 #275)
0x0053后退按钮
0x0054后退按钮
0x0056前进按钮
0x0057前进按钮
0x005b向左滚动
0x005d向右滚动
0x006e显示桌面
0x006f锁定屏幕
0x0090最小化
0x0091最大化
0x0095切换屏幕
0x00ba切换应用
0x00bb
0x00bc菜单
0x00bd后退按钮
0x00be通用
0x00bf打印屏幕
0x00c0通用
0x00c1通用
0x00c2锁定屏幕
0x00c3手势按钮
0x00c4切换智能换档
0x00c7降低亮度
0x00c8增加亮度
0x00cc切换应用
0x00ce后退按钮
0x00cf前进按钮
0x00d0切换应用
0x00d1通用
0x00d2通用
0x00d3通用
0x00d4搜索
0x00d5
0x00d6菜单
0x00d7开关接收器
0x00dd选择语言
0x00e0任务视图
0x00e1操作中心
0x00e2减少背光
0x00e3增加背光
0x00e4上一曲目
0x00e5播放/暂停
0x00e6下一曲目
0x00e7静音
0x00e8降低音量
0x00e9调高音量(https://github.com/PixlOne/logiops/wiki/Configuration#
0x00ea应用程序菜单
0x00ed轨迹球灵敏度?
0x00efF 键
0x00f0F 键
0x00f1F 键
0x00f2F 键
0x00f3F 键
0x00f4F 键
0x00f5F 键
0x00f6F 键
0x00fd鼠标灵敏度?
0x00fehome

Logid 使用默认存储在/etc/logid.cfg中的标准库配置样式配置文件(尽管您使用 -c 选项启动 logid 以对其进行更改)。

配置样式将来可能会更改,但将保持向后兼容性。

有关配置示例,请参阅.cfg:用于定义变量,并且可以互换。(例如name:fooname=foo 相同)

忽略设备

ignore可以忽略设备,以免在 logid 中检测和使用设备。要忽略某个设备,请创建一个字段,该字段称为要忽略的设备的 PID 数组。

例如ignore: [0x00a7]

定义设备

devices设备在名为 的数组字段中定义。此数组由定义设备的对象组成。

例如devices: ( { device object }, { device object } ... );

设备对象

以下是设备对象包含的字段列表。

name

这是定义设备名称的必填字符串字段。要获取设备的名称,请在连接设备的情况下启动 logid,并且它应该打印出一条包含设备名称的消息。(例如name: "MX Master";)

按钮

这是一个可选的数组字段,用于定义按钮的映射。

例如buttons: ( { button object }, { button object } ... );

按钮对象

cid

这是一个必需的整数字段,用于定义要重新映射的按钮的控制 ID。(例如cid: 0xc4;)

action

这是一个必需的对象字段,用于定义按钮的新操作。(例如action: { ... }; )

有关详细信息,请参阅操作部分。

dpi

这是一个可选的整数/数组字段,用于定义支持可调整 DPI 的鼠标的 DPI。(例如dpi: 1000;)

如果鼠标有多个传感器,则可以使用数组并将值放在传感器的索引中(例如,传感器 0:1000 dpi、传感器 1:800 dpi ->dpi: [1000, 800])


smartshift

这是一个可选对象字段,用于定义支持它的鼠标的 SmartShift 设置。

smartshift:
{
  on: true;
  threshold: 30;
  default_threshold: 30;
};

on

on这是一个可选的布尔字段,用于定义是否应激活智能移位。(true开启smartshift,false关闭)。

smartshift旋转阈值

threshold这是一个介于 1-255 之间的可选整数字段,用于定义将 SmartShift 滚轮更改为自由旋转所需的阈值。

默认旋转阈值

default_threshold这是一个介于 1-255 之间的可选整数字段,用于定义将 SmartShift 滚轮更改为自由旋转所需的鼠标默认阈值。


HiRes

这是一个可选对象字段,用于为支持 HiRes 鼠标滚动设置的设备定义 HiRes 鼠标滚动设置。

hiresscroll:
{
  hires: true;
  invert: false;
  target: false;
};

hires

这是一个可选的布尔字段,用于定义鼠标滚轮是否应为高分辨率。

invert

这是一个可选的布尔字段,用于定义是否反转鼠标滚轮。

target

这是一个可选的布尔值字段,用于定义鼠标滚轮事件是应作为 HID++ 通知发送还是正常工作(对于 HID++ 通知,对于正常用法)。此选项必须设置为 true 才能重新映射滚动。


up

这是一个手势,用于定义在滚轮向上移动(如果倒置则向下)时将执行的操作。有关详细信息,请参阅操作/手势部分。要正常工作,此字段需要启用目标。

down

这是一个手势,用于定义向下滚动时(如果倒置,则向上移动)将执行的操作。有关详细信息,请参阅操作/手势部分。要正常工作,此字段需要启用目标。

thumbwheel

这是一个可选的对象字段,用于定义支持它的设备(例如 MX Master 3)上的拇指轮设置。

某些设备将不支持代理、触摸和点击字段。拇指轮功能可以通过在调试模式下运行 logid 并查看输出来确定。

divert转移

这是一个布尔字段,用于确定拇指轮应由 logid (true) 还是操作系统 (false) 处理。

invert-1转化

这是一个布尔字段,用于确定是否应转移拇指轮的滚动。

left左

这是一个可选手势,用于定义滚轮向左移动(如果倒置则向右)时将执行的操作。有关详细信息,请参阅操作/手势部分。要正常工作,此字段需要启用“转移”。

right右

这是一个可选手势,用于定义滚轮向右移动(如果倒置则向左移动)时将执行的操作。有关详细信息,请参阅操作/手势部分。要正常工作,此字段需要启用“转移”。

proxy代理

这是一个可选操作,用于定义当用户靠近拇指轮时将发生的情况。(进入附近时将被按下,离开时释放)。有关详细信息,请参阅操作部分。

touch触摸

这是一个可选操作,用于定义当用户触摸拇指轮时将发生的情况。(触摸拇指轮时将被按下,松开时释放)。有关详细信息,请参阅操作部分。

tap

这是一个可选操作,用于定义当用户点击拇指轮一次时将发生的情况。(按下并在点击后立即释放)。有关详细信息,请参阅操作部分。


actions

type类型

这是定义操作类型的必需字符串字段。(例如type: "None";)。以下是可能的操作及其附加字段的列表。

none 空

这不执行任何操作。没有其他字段。

keypress按键

这会将按钮的按下和释放事件映射到键/按钮列表。

keys

这是一个必需的字符串/整数数组/列表字段,用于定义要按下/释放的键。有关键/按钮字符串的列表,请参阅linux/input-event-codes.h。(例如keys: ["KEY_A", "KEY_B"];)。或者,您可以使用整数键码来定义键。

请注意,这些事件代码在美国 (QWERTY) 键盘布局中工作。如果您的区域设置不使用此键盘布局,请将其映射到 QWERTY 键盘上的任何键。(例如,QWERTZ 布局上的“KEY_Z”应该是“KEY_Y”)


手势

此操作会在按下按钮时禁用鼠标移动,并允许您为每个方向分配操作。可能的方向是UpDownLeftRightNone

请注意,如果设备支持手势,则任何按钮都可以用作手势按钮。

此外,一些滚轮可以将它们的上/下或左/右滚动映射到某些手势。手势模式将在文档中说明它们的滚轮兼容性。

手势

这是将方向映射到手势模式和操作的必需手势对象数组。

例如gestures: ( { gesture object }, { gesture object } ... );

direction方向

这是手势对象中的必需字符串字段,用于定义笔势的方向。(例如direction: "Up")

阈值

这是一个可选的整数字段,用于确定手势应激活的像素数。(例如threshold: 50)。此值必须大于 0。如果未设置或设置为无效值,则阈值将默认为 50 像素。

mode模式

这是一个可选的字符串字段,用于定义手势的模式。如果省略此字段,则默认为OnRelease

以下是手势模式的列表:

nopress没有按下

此模式不执行任何操作。使用此模式时,将忽略该字段。此手势与滚轮兼容。

onrelease按下并释放

此模式在释放手势按钮时按下并释放动作。此手势与滚轮不兼容。

按下并拖动

此模式在鼠标每 n 个像素移动一次后按下并释放一个操作(其中 n 是整数字段 )。此手势与滚轮兼容。interval

onthreshold

一旦threshold满足,就会激活,并且永远不会再激活。

axis

此模式将手势运动映射到轴。轴在字段中定义为字符串(例如“REL_WHEEL”),并且在axis字段中定义其运动的乘数axis_multiplier。。有关轴字符串的列表,请参阅 linux/输入事件代码.h。此手势与滚轮兼容。

action行为

这是一个必填字段,用于定义手势使用的操作。这可以是除Gestures 以外的任何操作。有关更多详细信息,请参阅整个“操作”部分。

togglesmartshift)切换智能滚轮

此操作将在按下时切换智能移位滚动功能。没有其他字段。

togglehiresscroll)切换hiress

此操作在按下时切换高分辨率滚动。没有其他字段。


cycledpi循环指数

此操作在给定的 DPI 之间循环。

dpis

这是一个必需的整数数组字段,用于定义要循环通过的 DPI。(例如dpis: [800, 1000, 1200];)

sensor传感器

这是一个可选字段,用于确定 DPI 将打开的传感器。此值默认为 0。在几乎所有情况下,这都不需要使用。

changedpi更改DPI

此操作将按 inc中给出的值递增 DPI。

inc

这是一个整数数组字段,用于定义增加 DPI 的方式。

sensor传感器

sensor请参阅“循环数字环境”字段。


changehost更改主机

如果设备支持更改主机,则此操作会将主机更改为指定的主机。

host主机

该字段可以是表示主机号的整数(单索引,如鼠标底部所示),“next”可以转到下一个主机号,或者“prev”/“previous”可以转到上一个主机号。(例如host = 2;或host = "next";)

miscellaneous)杂项

workers

这是一个可选字段,用于确定 logid 的工作队列使用的工作线程数。(例如workers = 4;)

如果未给出任何值,则默认为 4。

**警告:**减少工作线程计数可能会导致性能降低,并且与直觉相反,会创建更多线程(因为如果工作队列繁忙超过 500 毫秒,它将在新线程中运行任务)。

io_timeout

这是一个可选字段,用于确定设备 I/O 在超时之前将等待多少毫秒。(例如timeout = 2000;)

如果留空,则默认为 2000 毫秒。

调试指南:

xinpt --list

查看当前设备

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ GXTP7863:00 27C6:01E0 Mouse               id=13   [slave  pointer  (2)]
⎜   ↳ GXTP7863:00 27C6:01E0 Touchpad            id=14   [slave  pointer  (2)]
⎜   ↳ Logi POP Mouse                            id=17   [slave  pointer  (2)]
⎜   ↳ Logitech MX Master 3                      id=9    [slave  pointer  (2)]
⎜   ↳ Logitech MX Keys                          id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ ov9734_techfront_camera: ov9734           id=12   [slave  keyboard (3)]
    ↳ Huawei WMI hotkeys                        id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ Logitech MX Master 3                      id=10   [slave  keyboard (3)]
    ↳ Logitech MX Keys                          id=18   [slave  keyboard (3)]
    ↳ LogiOps Virtual Input                     id=19   [slave  keyboard (3)]

选定设备监听:

xinput test-xi2 --root 18

键位设置

c/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
/*
 * Input event codes
 *
 *    *** IMPORTANT ***
 * This file is not only included from C-code but also from devicetree source
 * files. As such this file MUST only contain comments and defines.
 *
 * Copyright (c) 1999-2002 Vojtech Pavlik
 * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */
#ifndef _UAPI_INPUT_EVENT_CODES_H
#define _UAPI_INPUT_EVENT_CODES_H

/*
 * Device properties and quirks
 */

#define INPUT_PROP_POINTER    0x00  /* needs a pointer */
#define INPUT_PROP_DIRECT    0x01  /* direct input devices */
#define INPUT_PROP_BUTTONPAD    0x02  /* has button(s) under pad */
#define INPUT_PROP_SEMI_MT    0x03  /* touch rectangle only */
#define INPUT_PROP_TOPBUTTONPAD    0x04  /* softbuttons at top of pad */
#define INPUT_PROP_POINTING_STICK  0x05  /* is a pointing stick */
#define INPUT_PROP_ACCELEROMETER  0x06  /* has accelerometer */

#define INPUT_PROP_MAX      0x1f
#define INPUT_PROP_CNT      (INPUT_PROP_MAX + 1)

/*
 * Event types
 */

#define EV_SYN      0x00
#define EV_KEY      0x01
#define EV_REL      0x02
#define EV_ABS      0x03
#define EV_MSC      0x04
#define EV_SW      0x05
#define EV_LED      0x11
#define EV_SND      0x12
#define EV_REP      0x14
#define EV_FF      0x15
#define EV_PWR      0x16
#define EV_FF_STATUS    0x17
#define EV_MAX      0x1f
#define EV_CNT      (EV_MAX+1)

/*
 * Synchronization events.
 */

#define SYN_REPORT    0
#define SYN_CONFIG    1
#define SYN_MT_REPORT    2
#define SYN_DROPPED    3
#define SYN_MAX      0xf
#define SYN_CNT      (SYN_MAX+1)

/*
 * Keys and buttons
 *
 * Most of the keys/buttons are modeled after USB HUT 1.12
 * (see http://www.usb.org/developers/hidpage).
 * Abbreviations in the comments:
 * AC - Application Control
 * AL - Application Launch Button
 * SC - System Control
 */

#define KEY_RESERVED    0
#define KEY_ESC      1
#define KEY_1      2
#define KEY_2      3
#define KEY_3      4
#define KEY_4      5
#define KEY_5      6
#define KEY_6      7
#define KEY_7      8
#define KEY_8      9
#define KEY_9      10
#define KEY_0      11
#define KEY_MINUS    12
#define KEY_EQUAL    13
#define KEY_BACKSPACE    14
#define KEY_TAB      15
#define KEY_Q      16
#define KEY_W      17
#define KEY_E      18
#define KEY_R      19
#define KEY_T      20
#define KEY_Y      21
#define KEY_U      22
#define KEY_I      23
#define KEY_O      24
#define KEY_P      25
#define KEY_LEFTBRACE    26
#define KEY_RIGHTBRACE    27
#define KEY_ENTER    28
#define KEY_LEFTCTRL    29
#define KEY_A      30
#define KEY_S      31
#define KEY_D      32
#define KEY_F      33
#define KEY_G      34
#define KEY_H      35
#define KEY_J      36
#define KEY_K      37
#define KEY_L      38
#define KEY_SEMICOLON    39
#define KEY_APOSTROPHE    40
#define KEY_GRAVE    41
#define KEY_LEFTSHIFT    42
#define KEY_BACKSLASH    43
#define KEY_Z      44
#define KEY_X      45
#define KEY_C      46
#define KEY_V      47
#define KEY_B      48
#define KEY_N      49
#define KEY_M      50
#define KEY_COMMA    51
#define KEY_DOT      52
#define KEY_SLASH    53
#define KEY_RIGHTSHIFT    54
#define KEY_KPASTERISK    55
#define KEY_LEFTALT    56
#define KEY_SPACE    57
#define KEY_CAPSLOCK    58
#define KEY_F1      59
#define KEY_F2      60
#define KEY_F3      61
#define KEY_F4      62
#define KEY_F5      63
#define KEY_F6      64
#define KEY_F7      65
#define KEY_F8      66
#define KEY_F9      67
#define KEY_F10      68
#define KEY_NUMLOCK    69
#define KEY_SCROLLLOCK    70
#define KEY_KP7      71
#define KEY_KP8      72
#define KEY_KP9      73
#define KEY_KPMINUS    74
#define KEY_KP4      75
#define KEY_KP5      76
#define KEY_KP6      77
#define KEY_KPPLUS    78
#define KEY_KP1      79
#define KEY_KP2      80
#define KEY_KP3      81
#define KEY_KP0      82
#define KEY_KPDOT    83

#define KEY_ZENKAKUHANKAKU  85
#define KEY_102ND    86
#define KEY_F11      87
#define KEY_F12      88
#define KEY_RO      89
#define KEY_KATAKANA    90
#define KEY_HIRAGANA    91
#define KEY_HENKAN    92
#define KEY_KATAKANAHIRAGANA  93
#define KEY_MUHENKAN    94
#define KEY_KPJPCOMMA    95
#define KEY_KPENTER    96
#define KEY_RIGHTCTRL    97
#define KEY_KPSLASH    98
#define KEY_SYSRQ    99
#define KEY_RIGHTALT    100
#define KEY_LINEFEED    101
#define KEY_HOME    102
#define KEY_UP      103
#define KEY_PAGEUP    104
#define KEY_LEFT    105
#define KEY_RIGHT    106
#define KEY_END      107
#define KEY_DOWN    108
#define KEY_PAGEDOWN    109
#define KEY_INSERT    110
#define KEY_DELETE    111
#define KEY_MACRO    112
#define KEY_MUTE    113
#define KEY_VOLUMEDOWN    114
#define KEY_VOLUMEUP    115
#define KEY_POWER    116  /* SC System Power Down */
#define KEY_KPEQUAL    117
#define KEY_KPPLUSMINUS    118
#define KEY_PAUSE    119
#define KEY_SCALE    120  /* AL Compiz Scale (Expose) */

#define KEY_KPCOMMA    121
#define KEY_HANGEUL    122
#define KEY_HANGUEL    KEY_HANGEUL
#define KEY_HANJA    123
#define KEY_YEN      124
#define KEY_LEFTMETA    125
#define KEY_RIGHTMETA    126
#define KEY_COMPOSE    127

#define KEY_STOP    128  /* AC Stop */
#define KEY_AGAIN    129
#define KEY_PROPS    130  /* AC Properties */
#define KEY_UNDO    131  /* AC Undo */
#define KEY_FRONT    132
#define KEY_COPY    133  /* AC Copy */
#define KEY_OPEN    134  /* AC Open */
#define KEY_PASTE    135  /* AC Paste */
#define KEY_FIND    136  /* AC Search */
#define KEY_CUT      137  /* AC Cut */
#define KEY_HELP    138  /* AL Integrated Help Center */
#define KEY_MENU    139  /* Menu (show menu) */
#define KEY_CALC    140  /* AL Calculator */
#define KEY_SETUP    141
#define KEY_SLEEP    142  /* SC System Sleep */
#define KEY_WAKEUP    143  /* System Wake Up */
#define KEY_FILE    144  /* AL Local Machine Browser */
#define KEY_SENDFILE    145
#define KEY_DELETEFILE    146
#define KEY_XFER    147
#define KEY_PROG1    148
#define KEY_PROG2    149
#define KEY_WWW      150  /* AL Internet Browser */
#define KEY_MSDOS    151
#define KEY_COFFEE    152  /* AL Terminal Lock/Screensaver */
#define KEY_SCREENLOCK    KEY_COFFEE
#define KEY_ROTATE_DISPLAY  153  /* Display orientation for e.g. tablets */
#define KEY_DIRECTION    KEY_ROTATE_DISPLAY
#define KEY_CYCLEWINDOWS  154
#define KEY_MAIL    155
#define KEY_BOOKMARKS    156  /* AC Bookmarks */
#define KEY_COMPUTER    157
#define KEY_BACK    158  /* AC Back */
#define KEY_FORWARD    159  /* AC Forward */
#define KEY_CLOSECD    160
#define KEY_EJECTCD    161
#define KEY_EJECTCLOSECD  162
#define KEY_NEXTSONG    163
#define KEY_PLAYPAUSE    164
#define KEY_PREVIOUSSONG  165
#define KEY_STOPCD    166
#define KEY_RECORD    167
#define KEY_REWIND    168
#define KEY_PHONE    169  /* Media Select Telephone */
#define KEY_ISO      170
#define KEY_CONFIG    171  /* AL Consumer Control Configuration */
#define KEY_HOMEPAGE    172  /* AC Home */
#define KEY_REFRESH    173  /* AC Refresh */
#define KEY_EXIT    174  /* AC Exit */
#define KEY_MOVE    175
#define KEY_EDIT    176
#define KEY_SCROLLUP    177
#define KEY_SCROLLDOWN    178
#define KEY_KPLEFTPAREN    179
#define KEY_KPRIGHTPAREN  180
#define KEY_NEW      181  /* AC New */
#define KEY_REDO    182  /* AC Redo/Repeat */

#define KEY_F13      183
#define KEY_F14      184
#define KEY_F15      185
#define KEY_F16      186
#define KEY_F17      187
#define KEY_F18      188
#define KEY_F19      189
#define KEY_F20      190
#define KEY_F21      191
#define KEY_F22      192
#define KEY_F23      193
#define KEY_F24      194

#define KEY_PLAYCD    200
#define KEY_PAUSECD    201
#define KEY_PROG3    202
#define KEY_PROG4    203
#define KEY_ALL_APPLICATIONS  204  /* AC Desktop Show All Applications */
#define KEY_DASHBOARD    KEY_ALL_APPLICATIONS
#define KEY_SUSPEND    205
#define KEY_CLOSE    206  /* AC Close */
#define KEY_PLAY    207
#define KEY_FASTFORWARD    208
#define KEY_BASSBOOST    209
#define KEY_PRINT    210  /* AC Print */
#define KEY_HP      211
#define KEY_CAMERA    212
#define KEY_SOUND    213
#define KEY_QUESTION    214
#define KEY_EMAIL    215
#define KEY_CHAT    216
#define KEY_SEARCH    217
#define KEY_CONNECT    218
#define KEY_FINANCE    219  /* AL Checkbook/Finance */
#define KEY_SPORT    220
#define KEY_SHOP    221
#define KEY_ALTERASE    222
#define KEY_CANCEL    223  /* AC Cancel */
#define KEY_BRIGHTNESSDOWN  224
#define KEY_BRIGHTNESSUP  225
#define KEY_MEDIA    226

#define KEY_SWITCHVIDEOMODE  227  /* Cycle between available video
             outputs (Monitor/LCD/TV-out/etc) */
#define KEY_KBDILLUMTOGGLE  228
#define KEY_KBDILLUMDOWN  229
#define KEY_KBDILLUMUP    230

#define KEY_SEND    231  /* AC Send */
#define KEY_REPLY    232  /* AC Reply */
#define KEY_FORWARDMAIL    233  /* AC Forward Msg */
#define KEY_SAVE    234  /* AC Save */
#define KEY_DOCUMENTS    235

#define KEY_BATTERY    236

#define KEY_BLUETOOTH    237
#define KEY_WLAN    238
#define KEY_UWB      239

#define KEY_UNKNOWN    240

#define KEY_VIDEO_NEXT    241  /* drive next video source */
#define KEY_VIDEO_PREV    242  /* drive previous video source */
#define KEY_BRIGHTNESS_CYCLE  243  /* brightness up, after max is min */
#define KEY_BRIGHTNESS_AUTO  244  /* Set Auto Brightness: manual
            brightness control is off,
            rely on ambient */
#define KEY_BRIGHTNESS_ZERO  KEY_BRIGHTNESS_AUTO
#define KEY_DISPLAY_OFF    245  /* display device to off state */

#define KEY_WWAN    246  /* Wireless WAN (LTE, UMTS, GSM, etc.) */
#define KEY_WIMAX    KEY_WWAN
#define KEY_RFKILL    247  /* Key that controls all radios */

#define KEY_MICMUTE    248  /* Mute / unmute the microphone */

/* Code 255 is reserved for special needs of AT keyboard driver */

#define BTN_MISC    0x100
#define BTN_0      0x100
#define BTN_1      0x101
#define BTN_2      0x102
#define BTN_3      0x103
#define BTN_4      0x104
#define BTN_5      0x105
#define BTN_6      0x106
#define BTN_7      0x107
#define BTN_8      0x108
#define BTN_9      0x109

#define BTN_MOUSE    0x110
#define BTN_LEFT    0x110
#define BTN_RIGHT    0x111
#define BTN_MIDDLE    0x112
#define BTN_SIDE    0x113
#define BTN_EXTRA    0x114
#define BTN_FORWARD    0x115
#define BTN_BACK    0x116
#define BTN_TASK    0x117

#define BTN_JOYSTICK    0x120
#define BTN_TRIGGER    0x120
#define BTN_THUMB    0x121
#define BTN_THUMB2    0x122
#define BTN_TOP      0x123
#define BTN_TOP2    0x124
#define BTN_PINKIE    0x125
#define BTN_BASE    0x126
#define BTN_BASE2    0x127
#define BTN_BASE3    0x128
#define BTN_BASE4    0x129
#define BTN_BASE5    0x12a
#define BTN_BASE6    0x12b
#define BTN_DEAD    0x12f

#define BTN_GAMEPAD    0x130
#define BTN_SOUTH    0x130
#define BTN_A      BTN_SOUTH
#define BTN_EAST    0x131
#define BTN_B      BTN_EAST
#define BTN_C      0x132
#define BTN_NORTH    0x133
#define BTN_X      BTN_NORTH
#define BTN_WEST    0x134
#define BTN_Y      BTN_WEST
#define BTN_Z      0x135
#define BTN_TL      0x136
#define BTN_TR      0x137
#define BTN_TL2      0x138
#define BTN_TR2      0x139
#define BTN_SELECT    0x13a
#define BTN_START    0x13b
#define BTN_MODE    0x13c
#define BTN_THUMBL    0x13d
#define BTN_THUMBR    0x13e

#define BTN_DIGI    0x140
#define BTN_TOOL_PEN    0x140
#define BTN_TOOL_RUBBER    0x141
#define BTN_TOOL_BRUSH    0x142
#define BTN_TOOL_PENCIL    0x143
#define BTN_TOOL_AIRBRUSH  0x144
#define BTN_TOOL_FINGER    0x145
#define BTN_TOOL_MOUSE    0x146
#define BTN_TOOL_LENS    0x147
#define BTN_TOOL_QUINTTAP  0x148  /* Five fingers on trackpad */
#define BTN_STYLUS3    0x149
#define BTN_TOUCH    0x14a
#define BTN_STYLUS    0x14b
#define BTN_STYLUS2    0x14c
#define BTN_TOOL_DOUBLETAP  0x14d
#define BTN_TOOL_TRIPLETAP  0x14e
#define BTN_TOOL_QUADTAP  0x14f  /* Four fingers on trackpad */

#define BTN_WHEEL    0x150
#define BTN_GEAR_DOWN    0x150
#define BTN_GEAR_UP    0x151

#define KEY_OK      0x160
#define KEY_SELECT    0x161
#define KEY_GOTO    0x162
#define KEY_CLEAR    0x163
#define KEY_POWER2    0x164
#define KEY_OPTION    0x165
#define KEY_INFO    0x166  /* AL OEM Features/Tips/Tutorial */
#define KEY_TIME    0x167
#define KEY_VENDOR    0x168
#define KEY_ARCHIVE    0x169
#define KEY_PROGRAM    0x16a  /* Media Select Program Guide */
#define KEY_CHANNEL    0x16b
#define KEY_FAVORITES    0x16c
#define KEY_EPG      0x16d
#define KEY_PVR      0x16e  /* Media Select Home */
#define KEY_MHP      0x16f
#define KEY_LANGUAGE    0x170
#define KEY_TITLE    0x171
#define KEY_SUBTITLE    0x172
#define KEY_ANGLE    0x173
#define KEY_FULL_SCREEN    0x174  /* AC View Toggle */
#define KEY_ZOOM    KEY_FULL_SCREEN
#define KEY_MODE    0x175
#define KEY_KEYBOARD    0x176
#define KEY_ASPECT_RATIO  0x177  /* HUTRR37: Aspect */
#define KEY_SCREEN    KEY_ASPECT_RATIO
#define KEY_PC      0x178  /* Media Select Computer */
#define KEY_TV      0x179  /* Media Select TV */
#define KEY_TV2      0x17a  /* Media Select Cable */
#define KEY_VCR      0x17b  /* Media Select VCR */
#define KEY_VCR2    0x17c  /* VCR Plus */
#define KEY_SAT      0x17d  /* Media Select Satellite */
#define KEY_SAT2    0x17e
#define KEY_CD      0x17f  /* Media Select CD */
#define KEY_TAPE    0x180  /* Media Select Tape */
#define KEY_RADIO    0x181
#define KEY_TUNER    0x182  /* Media Select Tuner */
#define KEY_PLAYER    0x183
#define KEY_TEXT    0x184
#define KEY_DVD      0x185  /* Media Select DVD */
#define KEY_AUX      0x186
#define KEY_MP3      0x187
#define KEY_AUDIO    0x188  /* AL Audio Browser */
#define KEY_VIDEO    0x189  /* AL Movie Browser */
#define KEY_DIRECTORY    0x18a
#define KEY_LIST    0x18b
#define KEY_MEMO    0x18c  /* Media Select Messages */
#define KEY_CALENDAR    0x18d
#define KEY_RED      0x18e
#define KEY_GREEN    0x18f
#define KEY_YELLOW    0x190
#define KEY_BLUE    0x191
#define KEY_CHANNELUP    0x192  /* Channel Increment */
#define KEY_CHANNELDOWN    0x193  /* Channel Decrement */
#define KEY_FIRST    0x194
#define KEY_LAST    0x195  /* Recall Last */
#define KEY_AB      0x196
#define KEY_NEXT    0x197
#define KEY_RESTART    0x198
#define KEY_SLOW    0x199
#define KEY_SHUFFLE    0x19a
#define KEY_BREAK    0x19b
#define KEY_PREVIOUS    0x19c
#define KEY_DIGITS    0x19d
#define KEY_TEEN    0x19e
#define KEY_TWEN    0x19f
#define KEY_VIDEOPHONE    0x1a0  /* Media Select Video Phone */
#define KEY_GAMES    0x1a1  /* Media Select Games */
#define KEY_ZOOMIN    0x1a2  /* AC Zoom In */
#define KEY_ZOOMOUT    0x1a3  /* AC Zoom Out */
#define KEY_ZOOMRESET    0x1a4  /* AC Zoom */
#define KEY_WORDPROCESSOR  0x1a5  /* AL Word Processor */
#define KEY_EDITOR    0x1a6  /* AL Text Editor */
#define KEY_SPREADSHEET    0x1a7  /* AL Spreadsheet */
#define KEY_GRAPHICSEDITOR  0x1a8  /* AL Graphics Editor */
#define KEY_PRESENTATION  0x1a9  /* AL Presentation App */
#define KEY_DATABASE    0x1aa  /* AL Database App */
#define KEY_NEWS    0x1ab  /* AL Newsreader */
#define KEY_VOICEMAIL    0x1ac  /* AL Voicemail */
#define KEY_ADDRESSBOOK    0x1ad  /* AL Contacts/Address Book */
#define KEY_MESSENGER    0x1ae  /* AL Instant Messaging */
#define KEY_DISPLAYTOGGLE  0x1af  /* Turn display (LCD) on and off */
#define KEY_BRIGHTNESS_TOGGLE  KEY_DISPLAYTOGGLE
#define KEY_SPELLCHECK    0x1b0   /* AL Spell Check */
#define KEY_LOGOFF    0x1b1   /* AL Logoff */

#define KEY_DOLLAR    0x1b2
#define KEY_EURO    0x1b3

#define KEY_FRAMEBACK    0x1b4  /* Consumer - transport controls */
#define KEY_FRAMEFORWARD  0x1b5
#define KEY_CONTEXT_MENU  0x1b6  /* GenDesc - system context menu */
#define KEY_MEDIA_REPEAT  0x1b7  /* Consumer - transport control */
#define KEY_10CHANNELSUP  0x1b8  /* 10 channels up (10+) */
#define KEY_10CHANNELSDOWN  0x1b9  /* 10 channels down (10-) */
#define KEY_IMAGES    0x1ba  /* AL Image Browser */
#define KEY_NOTIFICATION_CENTER  0x1bc  /* Show/hide the notification center */
#define KEY_PICKUP_PHONE  0x1bd  /* Answer incoming call */
#define KEY_HANGUP_PHONE  0x1be  /* Decline incoming call */

#define KEY_DEL_EOL    0x1c0
#define KEY_DEL_EOS    0x1c1
#define KEY_INS_LINE    0x1c2
#define KEY_DEL_LINE    0x1c3

#define KEY_FN      0x1d0
#define KEY_FN_ESC    0x1d1
#define KEY_FN_F1    0x1d2
#define KEY_FN_F2    0x1d3
#define KEY_FN_F3    0x1d4
#define KEY_FN_F4    0x1d5
#define KEY_FN_F5    0x1d6
#define KEY_FN_F6    0x1d7
#define KEY_FN_F7    0x1d8
#define KEY_FN_F8    0x1d9
#define KEY_FN_F9    0x1da
#define KEY_FN_F10    0x1db
#define KEY_FN_F11    0x1dc
#define KEY_FN_F12    0x1dd
#define KEY_FN_1    0x1de
#define KEY_FN_2    0x1df
#define KEY_FN_D    0x1e0
#define KEY_FN_E    0x1e1
#define KEY_FN_F    0x1e2
#define KEY_FN_S    0x1e3
#define KEY_FN_B    0x1e4
#define KEY_FN_RIGHT_SHIFT  0x1e5

#define KEY_BRL_DOT1    0x1f1
#define KEY_BRL_DOT2    0x1f2
#define KEY_BRL_DOT3    0x1f3
#define KEY_BRL_DOT4    0x1f4
#define KEY_BRL_DOT5    0x1f5
#define KEY_BRL_DOT6    0x1f6
#define KEY_BRL_DOT7    0x1f7
#define KEY_BRL_DOT8    0x1f8
#define KEY_BRL_DOT9    0x1f9
#define KEY_BRL_DOT10    0x1fa

#define KEY_NUMERIC_0    0x200  /* used by phones, remote controls, */
#define KEY_NUMERIC_1    0x201  /* and other keypads */
#define KEY_NUMERIC_2    0x202
#define KEY_NUMERIC_3    0x203
#define KEY_NUMERIC_4    0x204
#define KEY_NUMERIC_5    0x205
#define KEY_NUMERIC_6    0x206
#define KEY_NUMERIC_7    0x207
#define KEY_NUMERIC_8    0x208
#define KEY_NUMERIC_9    0x209
#define KEY_NUMERIC_STAR  0x20a
#define KEY_NUMERIC_POUND  0x20b
#define KEY_NUMERIC_A    0x20c  /* Phone key A - HUT Telephony 0xb9 */
#define KEY_NUMERIC_B    0x20d
#define KEY_NUMERIC_C    0x20e
#define KEY_NUMERIC_D    0x20f

#define KEY_CAMERA_FOCUS  0x210
#define KEY_WPS_BUTTON    0x211  /* WiFi Protected Setup key */

#define KEY_TOUCHPAD_TOGGLE  0x212  /* Request switch touchpad on or off */
#define KEY_TOUCHPAD_ON    0x213
#define KEY_TOUCHPAD_OFF  0x214

#define KEY_CAMERA_ZOOMIN  0x215
#define KEY_CAMERA_ZOOMOUT  0x216
#define KEY_CAMERA_UP    0x217
#define KEY_CAMERA_DOWN    0x218
#define KEY_CAMERA_LEFT    0x219
#define KEY_CAMERA_RIGHT  0x21a

#define KEY_ATTENDANT_ON  0x21b
#define KEY_ATTENDANT_OFF  0x21c
#define KEY_ATTENDANT_TOGGLE  0x21d  /* Attendant call on or off */
#define KEY_LIGHTS_TOGGLE  0x21e  /* Reading light on or off */

#define BTN_DPAD_UP    0x220
#define BTN_DPAD_DOWN    0x221
#define BTN_DPAD_LEFT    0x222
#define BTN_DPAD_RIGHT    0x223

#define KEY_ALS_TOGGLE    0x230  /* Ambient light sensor */
#define KEY_ROTATE_LOCK_TOGGLE  0x231  /* Display rotation lock */

#define KEY_BUTTONCONFIG    0x240  /* AL Button Configuration */
#define KEY_TASKMANAGER    0x241  /* AL Task/Project Manager */
#define KEY_JOURNAL    0x242  /* AL Log/Journal/Timecard */
#define KEY_CONTROLPANEL    0x243  /* AL Control Panel */
#define KEY_APPSELECT    0x244  /* AL Select Task/Application */
#define KEY_SCREENSAVER    0x245  /* AL Screen Saver */
#define KEY_VOICECOMMAND    0x246  /* Listening Voice Command */
#define KEY_ASSISTANT    0x247  /* AL Context-aware desktop assistant */
#define KEY_KBD_LAYOUT_NEXT  0x248  /* AC Next Keyboard Layout Select */
#define KEY_EMOJI_PICKER  0x249  /* Show/hide emoji picker (HUTRR101) */
#define KEY_DICTATE    0x24a  /* Start or Stop Voice Dictation Session (HUTRR99) */

#define KEY_BRIGHTNESS_MIN    0x250  /* Set Brightness to Minimum */
#define KEY_BRIGHTNESS_MAX    0x251  /* Set Brightness to Maximum */

#define KEY_KBDINPUTASSIST_PREV    0x260
#define KEY_KBDINPUTASSIST_NEXT    0x261
#define KEY_KBDINPUTASSIST_PREVGROUP    0x262
#define KEY_KBDINPUTASSIST_NEXTGROUP    0x263
#define KEY_KBDINPUTASSIST_ACCEPT    0x264
#define KEY_KBDINPUTASSIST_CANCEL    0x265

/* Diagonal movement keys */
#define KEY_RIGHT_UP      0x266
#define KEY_RIGHT_DOWN      0x267
#define KEY_LEFT_UP      0x268
#define KEY_LEFT_DOWN      0x269

#define KEY_ROOT_MENU      0x26a /* Show Device's Root Menu */
/* Show Top Menu of the Media (e.g. DVD) */
#define KEY_MEDIA_TOP_MENU    0x26b
#define KEY_NUMERIC_11      0x26c
#define KEY_NUMERIC_12      0x26d
/*
 * Toggle Audio Description: refers to an audio service that helps blind and
 * visually impaired consumers understand the action in a program. Note: in
 * some countries this is referred to as "Video Description".
 */
#define KEY_AUDIO_DESC      0x26e
#define KEY_3D_MODE      0x26f
#define KEY_NEXT_FAVORITE    0x270
#define KEY_STOP_RECORD      0x271
#define KEY_PAUSE_RECORD    0x272
#define KEY_VOD        0x273 /* Video on Demand */
#define KEY_UNMUTE      0x274
#define KEY_FASTREVERSE      0x275
#define KEY_SLOWREVERSE      0x276
/*
 * Control a data application associated with the currently viewed channel,
 * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
 */
#define KEY_DATA      0x277
#define KEY_ONSCREEN_KEYBOARD    0x278
/* Electronic privacy screen control */
#define KEY_PRIVACY_SCREEN_TOGGLE  0x279

/* Select an area of screen to be copied */
#define KEY_SELECTIVE_SCREENSHOT  0x27a

/* Move the focus to the next or previous user controllable element within a UI container */
#define KEY_NEXT_ELEMENT               0x27b
#define KEY_PREVIOUS_ELEMENT           0x27c

/* Toggle Autopilot engagement */
#define KEY_AUTOPILOT_ENGAGE_TOGGLE    0x27d

/* Shortcut Keys */
#define KEY_MARK_WAYPOINT              0x27e
#define KEY_SOS                                0x27f
#define KEY_NAV_CHART                  0x280
#define KEY_FISHING_CHART              0x281
#define KEY_SINGLE_RANGE_RADAR         0x282
#define KEY_DUAL_RANGE_RADAR           0x283
#define KEY_RADAR_OVERLAY              0x284
#define KEY_TRADITIONAL_SONAR          0x285
#define KEY_CLEARVU_SONAR              0x286
#define KEY_SIDEVU_SONAR               0x287
#define KEY_NAV_INFO                   0x288
#define KEY_BRIGHTNESS_MENU            0x289

/*
 * Some keyboards have keys which do not have a defined meaning, these keys
 * are intended to be programmed / bound to macros by the user. For most
 * keyboards with these macro-keys the key-sequence to inject, or action to
 * take, is all handled by software on the host side. So from the kernel's
 * point of view these are just normal keys.
 *
 * The KEY_MACRO# codes below are intended for such keys, which may be labeled
 * e.g. G1-G18, or S1 - S30. The KEY_MACRO# codes MUST NOT be used for keys
 * where the marking on the key does indicate a defined meaning / purpose.
 *
 * The KEY_MACRO# codes MUST also NOT be used as fallback for when no existing
 * KEY_FOO define matches the marking / purpose. In this case a new KEY_FOO
 * define MUST be added.
 */
#define KEY_MACRO1      0x290
#define KEY_MACRO2      0x291
#define KEY_MACRO3      0x292
#define KEY_MACRO4      0x293
#define KEY_MACRO5      0x294
#define KEY_MACRO6      0x295
#define KEY_MACRO7      0x296
#define KEY_MACRO8      0x297
#define KEY_MACRO9      0x298
#define KEY_MACRO10      0x299
#define KEY_MACRO11      0x29a
#define KEY_MACRO12      0x29b
#define KEY_MACRO13      0x29c
#define KEY_MACRO14      0x29d
#define KEY_MACRO15      0x29e
#define KEY_MACRO16      0x29f
#define KEY_MACRO17      0x2a0
#define KEY_MACRO18      0x2a1
#define KEY_MACRO19      0x2a2
#define KEY_MACRO20      0x2a3
#define KEY_MACRO21      0x2a4
#define KEY_MACRO22      0x2a5
#define KEY_MACRO23      0x2a6
#define KEY_MACRO24      0x2a7
#define KEY_MACRO25      0x2a8
#define KEY_MACRO26      0x2a9
#define KEY_MACRO27      0x2aa
#define KEY_MACRO28      0x2ab
#define KEY_MACRO29      0x2ac
#define KEY_MACRO30      0x2ad

/*
 * Some keyboards with the macro-keys described above have some extra keys
 * for controlling the host-side software responsible for the macro handling:
 * -A macro recording start/stop key. Note that not all keyboards which emit
 *  KEY_MACRO_RECORD_START will also emit KEY_MACRO_RECORD_STOP if
 *  KEY_MACRO_RECORD_STOP is not advertised, then KEY_MACRO_RECORD_START
 *  should be interpreted as a recording start/stop toggle;
 * -Keys for switching between different macro (pre)sets, either a key for
 *  cycling through the configured presets or keys to directly select a preset.
 */
#define KEY_MACRO_RECORD_START    0x2b0
#define KEY_MACRO_RECORD_STOP    0x2b1
#define KEY_MACRO_PRESET_CYCLE    0x2b2
#define KEY_MACRO_PRESET1    0x2b3
#define KEY_MACRO_PRESET2    0x2b4
#define KEY_MACRO_PRESET3    0x2b5

/*
 * Some keyboards have a buildin LCD panel where the contents are controlled
 * by the host. Often these have a number of keys directly below the LCD
 * intended for controlling a menu shown on the LCD. These keys often don't
 * have any labeling so we just name them KEY_KBD_LCD_MENU#
 */
#define KEY_KBD_LCD_MENU1    0x2b8
#define KEY_KBD_LCD_MENU2    0x2b9
#define KEY_KBD_LCD_MENU3    0x2ba
#define KEY_KBD_LCD_MENU4    0x2bb
#define KEY_KBD_LCD_MENU5    0x2bc

#define BTN_TRIGGER_HAPPY    0x2c0
#define BTN_TRIGGER_HAPPY1    0x2c0
#define BTN_TRIGGER_HAPPY2    0x2c1
#define BTN_TRIGGER_HAPPY3    0x2c2
#define BTN_TRIGGER_HAPPY4    0x2c3
#define BTN_TRIGGER_HAPPY5    0x2c4
#define BTN_TRIGGER_HAPPY6    0x2c5
#define BTN_TRIGGER_HAPPY7    0x2c6
#define BTN_TRIGGER_HAPPY8    0x2c7
#define BTN_TRIGGER_HAPPY9    0x2c8
#define BTN_TRIGGER_HAPPY10    0x2c9
#define BTN_TRIGGER_HAPPY11    0x2ca
#define BTN_TRIGGER_HAPPY12    0x2cb
#define BTN_TRIGGER_HAPPY13    0x2cc
#define BTN_TRIGGER_HAPPY14    0x2cd
#define BTN_TRIGGER_HAPPY15    0x2ce
#define BTN_TRIGGER_HAPPY16    0x2cf
#define BTN_TRIGGER_HAPPY17    0x2d0
#define BTN_TRIGGER_HAPPY18    0x2d1
#define BTN_TRIGGER_HAPPY19    0x2d2
#define BTN_TRIGGER_HAPPY20    0x2d3
#define BTN_TRIGGER_HAPPY21    0x2d4
#define BTN_TRIGGER_HAPPY22    0x2d5
#define BTN_TRIGGER_HAPPY23    0x2d6
#define BTN_TRIGGER_HAPPY24    0x2d7
#define BTN_TRIGGER_HAPPY25    0x2d8
#define BTN_TRIGGER_HAPPY26    0x2d9
#define BTN_TRIGGER_HAPPY27    0x2da
#define BTN_TRIGGER_HAPPY28    0x2db
#define BTN_TRIGGER_HAPPY29    0x2dc
#define BTN_TRIGGER_HAPPY30    0x2dd
#define BTN_TRIGGER_HAPPY31    0x2de
#define BTN_TRIGGER_HAPPY32    0x2df
#define BTN_TRIGGER_HAPPY33    0x2e0
#define BTN_TRIGGER_HAPPY34    0x2e1
#define BTN_TRIGGER_HAPPY35    0x2e2
#define BTN_TRIGGER_HAPPY36    0x2e3
#define BTN_TRIGGER_HAPPY37    0x2e4
#define BTN_TRIGGER_HAPPY38    0x2e5
#define BTN_TRIGGER_HAPPY39    0x2e6
#define BTN_TRIGGER_HAPPY40    0x2e7

/* We avoid low common keys in module aliases so they don't get huge. */
#define KEY_MIN_INTERESTING  KEY_MUTE
#define KEY_MAX      0x2ff
#define KEY_CNT      (KEY_MAX+1)

/*
 * Relative axes
 */

#define REL_X      0x00
#define REL_Y      0x01
#define REL_Z      0x02
#define REL_RX      0x03
#define REL_RY      0x04
#define REL_RZ      0x05
#define REL_HWHEEL    0x06
#define REL_DIAL    0x07
#define REL_WHEEL    0x08
#define REL_MISC    0x09
/*
 * 0x0a is reserved and should not be used in input drivers.
 * It was used by HID as REL_MISC+1 and userspace needs to detect if
 * the next REL_* event is correct or is just REL_MISC + n.
 * We define here REL_RESERVED so userspace can rely on it and detect
 * the situation described above.
 */
#define REL_RESERVED    0x0a
#define REL_WHEEL_HI_RES  0x0b
#define REL_HWHEEL_HI_RES  0x0c
#define REL_MAX      0x0f
#define REL_CNT      (REL_MAX+1)

/*
 * Absolute axes
 */

#define ABS_X      0x00
#define ABS_Y      0x01
#define ABS_Z      0x02
#define ABS_RX      0x03
#define ABS_RY      0x04
#define ABS_RZ      0x05
#define ABS_THROTTLE    0x06
#define ABS_RUDDER    0x07
#define ABS_WHEEL    0x08
#define ABS_GAS      0x09
#define ABS_BRAKE    0x0a
#define ABS_HAT0X    0x10
#define ABS_HAT0Y    0x11
#define ABS_HAT1X    0x12
#define ABS_HAT1Y    0x13
#define ABS_HAT2X    0x14
#define ABS_HAT2Y    0x15
#define ABS_HAT3X    0x16
#define ABS_HAT3Y    0x17
#define ABS_PRESSURE    0x18
#define ABS_DISTANCE    0x19
#define ABS_TILT_X    0x1a
#define ABS_TILT_Y    0x1b
#define ABS_TOOL_WIDTH    0x1c

#define ABS_VOLUME    0x20

#define ABS_MISC    0x28

/*
 * 0x2e is reserved and should not be used in input drivers.
 * It was used by HID as ABS_MISC+6 and userspace needs to detect if
 * the next ABS_* event is correct or is just ABS_MISC + n.
 * We define here ABS_RESERVED so userspace can rely on it and detect
 * the situation described above.
 */
#define ABS_RESERVED    0x2e

#define ABS_MT_SLOT    0x2f  /* MT slot being modified */
#define ABS_MT_TOUCH_MAJOR  0x30  /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR  0x31  /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR  0x32  /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR  0x33  /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION  0x34  /* Ellipse orientation */
#define ABS_MT_POSITION_X  0x35  /* Center X touch position */
#define ABS_MT_POSITION_Y  0x36  /* Center Y touch position */
#define ABS_MT_TOOL_TYPE  0x37  /* Type of touching device */
#define ABS_MT_BLOB_ID    0x38  /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID  0x39  /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE    0x3a  /* Pressure on contact area */
#define ABS_MT_DISTANCE    0x3b  /* Contact hover distance */
#define ABS_MT_TOOL_X    0x3c  /* Center X tool position */
#define ABS_MT_TOOL_Y    0x3d  /* Center Y tool position */

#define ABS_MAX      0x3f
#define ABS_CNT      (ABS_MAX+1)

/*
 * Switch events
 */

#define SW_LID      0x00  /* set = lid shut */
#define SW_TABLET_MODE    0x01  /* set = tablet mode */
#define SW_HEADPHONE_INSERT  0x02  /* set = inserted */
#define SW_RFKILL_ALL    0x03  /* rfkill master switch, type "any"
           set = radio enabled */
#define SW_RADIO    SW_RFKILL_ALL  /* deprecated */
#define SW_MICROPHONE_INSERT  0x04  /* set = inserted */
#define SW_DOCK      0x05  /* set = plugged into dock */
#define SW_LINEOUT_INSERT  0x06  /* set = inserted */
#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */
#define SW_VIDEOOUT_INSERT  0x08  /* set = inserted */
#define SW_CAMERA_LENS_COVER  0x09  /* set = lens covered */
#define SW_KEYPAD_SLIDE    0x0a  /* set = keypad slide out */
#define SW_FRONT_PROXIMITY  0x0b  /* set = front proximity sensor active */
#define SW_ROTATE_LOCK    0x0c  /* set = rotate locked/disabled */
#define SW_LINEIN_INSERT  0x0d  /* set = inserted */
#define SW_MUTE_DEVICE    0x0e  /* set = device disabled */
#define SW_PEN_INSERTED    0x0f  /* set = pen inserted */
#define SW_MACHINE_COVER  0x10  /* set = cover closed */
#define SW_MAX      0x10
#define SW_CNT      (SW_MAX+1)

/*
 * Misc events
 */

#define MSC_SERIAL    0x00
#define MSC_PULSELED    0x01
#define MSC_GESTURE    0x02
#define MSC_RAW      0x03
#define MSC_SCAN    0x04
#define MSC_TIMESTAMP    0x05
#define MSC_MAX      0x07
#define MSC_CNT      (MSC_MAX+1)

/*
 * LEDs
 */

#define LED_NUML    0x00
#define LED_CAPSL    0x01
#define LED_SCROLLL    0x02
#define LED_COMPOSE    0x03
#define LED_KANA    0x04
#define LED_SLEEP    0x05
#define LED_SUSPEND    0x06
#define LED_MUTE    0x07
#define LED_MISC    0x08
#define LED_MAIL    0x09
#define LED_CHARGING    0x0a
#define LED_MAX      0x0f
#define LED_CNT      (LED_MAX+1)

/*
 * Autorepeat values
 */

#define REP_DELAY    0x00
#define REP_PERIOD    0x01
#define REP_MAX      0x01
#define REP_CNT      (REP_MAX+1)

/*
 * Sounds
 */

#define SND_CLICK    0x00
#define SND_BELL    0x01
#define SND_TONE    0x02
#define SND_MAX      0x07
#define SND_CNT      (SND_MAX+1)

#endif

我的配置

devices: (
{
    // 设备名字必须按照上方表格填写
    name: "Wireless Mouse MX Master 2S";
    dpi: 2000;
    // 自动切换滚轮模式
    smartshift: {
        on: true;
        threshold: 30;
    };
    hiresscroll: {
        hires: true;
        invert: false;
        target: false;
    };

    buttons: (
    {
        // 手势按钮
        cid: 0xc3;
        action =
        {
            type: "Gestures";
            gestures: (
            {
                direction: "Up";
                mode: "OnRelease";
                action = {
                    type: "Keypress";
                    keys: ["KEY_LEFTMETA", "KEY_F"];
                };
            },
            {
                direction: "Down";
                mode: "OnRelease";
                action = {
                    type: "Keypress";
                    keys: ["KEY_LEFTMETA", "KEY_F"];
                };
            },
            {
                direction: "Left";
                mode: "OnRelease";
                action = {
                    type: "Keypress";
                    keys: ["KEY_LEFTMETA", "KEY_LEFTSHIFT", "KEY_TAB"];
                };
            },
            {
                direction: "Right";
                mode: "OnRelease";
                action = {
                    type: "Keypress";
                    keys: ["KEY_LEFTMETA", "KEY_TAB"];
                }
            },
            {
                direction: "None";
                mode: "OnRelease";
                action = {
                    type: "Keypress";
                    keys: ["KEY_LEFTMETA", "KEY_LEFTSHIFT", "KEY_SPACE"];
                };
            });
        };
    });
}
);