Bluetooth Remote
This tutorial explains how to create a HardWare DataBase configuration file (.hwdb), and add the information from this file to the device's Hardware Database.
The Hardware Database is a key-value store for associating modalias-like keys to udev-property-like values. It is used primarily by udev to add the relevant properties to matching devices, but it can also be queried directly.
Apply this method when encountering a Bluetooth Remote with a non-responsive or erratic OK button
For this tutorial, an NVIDIA SHIELD Remote P3700 has been paired with a Khadas VIM4 SBC.
Requirements
- CoreELEC booting from (μ)SD Card or USB Flash Drive
- Alternate Input Device
- USB Mouse & Keyboard
- Remote with USB dongle (Airmouse, Wifi remote,…)
- System Tools
Install System Tools
Pair the remote
Stop Kodi
Find the device information
- execute:
cat /proc/bus/input/devices
and find the entry for the paired Bluetooth remote:
I: Bus=0005 Vendor=0955 Product=7217 Version=0002 N: Name="NVIDIA SHIELD Remote" P: Phys=20:50:e7:7c:6c:6f S: Sysfs=/devices/virtual/misc/uhid/0005:0955:7217.0005/input/input9 U: Uniq=a4:c1:38:d2:a6:03 H: Handlers=kbd event9 B: PROP=0 B: EV=1b B: KEY=200 2 0 0 0 0 2010000 1110 40000800 1c1680 0 0 0 B: ABS=100 0 B: MSC=10
I contains following device information: |
|||
Bus | Vendor | Product | Version |
---|---|---|---|
0005 | 0955 | 7217 | 0002 |
This translates to following device code: b0005v0955p7217*
The version number is represented by an asterisk (wildcard), allowing for compatibility between different versions of the same device
The Bus, Vendor, Product and Version values are hexadecimal and require to be entered in uppercase (eq: b0005v2B54p1600*)
N contains the remote name | NVIDIA SHIELD Remote |
S contains the event handler | …/input/input9 |
c0041 | code for OK Button |
Ensure the right handler is used
- execute:
evtest /dev/input/eventX
where X is the event handler
Input driver version is 1.0.1 Input device ID: bus 0x5 vendor 0x955 product 0x7217 version 0x2 Input device name: "NVIDIA SHIELD Remote" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 103 (KEY_UP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 108 (KEY_DOWN) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 139 (KEY_MENU) Event code 158 (KEY_BACK) Event code 164 (KEY_PLAYPAUSE) Event code 168 (KEY_REWIND) Event code 172 (KEY_HOMEPAGE) Event code 208 (KEY_FASTFORWARD) Event code 217 (KEY_SEARCH) Event code 353 (KEY_SELECT) Event code 393 (KEY_VIDEO) Event type 3 (EV_ABS) Event code 40 (ABS_MISC) Value 0 Min 0 Max 1 Event type 4 (EV_MSC) Event code 4 (MSC_SCAN) Properties:
- press the remotes OK button
if the correct handler was selected in evtest
, there should be feedback:
Testing ... (interrupt to exit) Event: time 1662152630.222944, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041 Event: time 1662152630.222944, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1 Event: time 1662152630.222944, -------------- SYN_REPORT ------------ Event: time 1662152630.421979, type 3 (EV_ABS), code 40 (ABS_MISC), value 1 Event: time 1662152630.421979, -------------- SYN_REPORT ------------ Event: time 1662152630.446975, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041 Event: time 1662152630.446975, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0 Event: time 1662152630.446975, -------------- SYN_REPORT ------------
NOTE: some remotes have multiple entries. If there is no feedback, try a different handler.
Create the configuration file
- go to the configuration folder:
cd /storage/.config/hwdb.d/
- create a hardware database file (format:
myfile.hwdb
):
nano nvidia.hwdb
- enter:
# NVIDIA SHIELD Remote evdev:input:b0005v0955p7217* KEYBOARD_KEY_c0041=enter
NOTE: the leading space before KEYBOARD_KEY is required.
- save file and exit nano:
ctrl+o
ctrl+x
Save changes to the database
- execute:
udevadm hwdb --update
udevadm trigger -s input
NOTE: if the above commands throw an error, it is usually because of a wrongly formatted or corrupt .hwdb file.
Reboot device
- execute:
reboot
After the device has rebooted, the Bluetooth remote should function correctly.
Map extra functions
This method also can be used to map functions to unused buttons, or remap button functions entirely.
The following addition brings up Player Process Info when pressing the Netflix button:
# NVIDIA SHIELD Remote evdev:input:b0005v0955p7217* KEYBOARD_KEY_c0041=enter KEYBOARD_KEY_c01b8=o
Remotes Repository
The Repository for Amlogic and MesonIR hosts Bluetooth .hwdb configuration files, which can be used for reference.
Sources
hwdb(7) - Linux manual page