Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 1 | Infrared remote control support in video4linux drivers |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 2 | ====================================================== |
| 3 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 4 | Authors: Gerd Hoffmann, Mauro Carvalho Chehab |
Mauro Carvalho Chehab | 31cae7c | 2016-07-17 22:11:47 -0300 | [diff] [blame] | 5 | |
| 6 | Basics |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | ------ |
| 8 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 9 | Most analog and digital TV boards support remote controllers. Several of |
| 10 | them have a microprocessor that receives the IR carriers, convert into |
| 11 | pulse/space sequences and then to scan codes, returning such codes to |
| 12 | userspace ("scancode mode"). Other boards return just the pulse/space |
| 13 | sequences ("raw mode"). |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 15 | The support for remote controller in scancode mode is provided by the |
| 16 | standard Linux input layer. The support for raw mode is provided via LIRC. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 18 | In order to check the support and test it, it is suggested to download |
| 19 | the `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_. It provides |
| 20 | two tools to handle remote controllers: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 21 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 22 | - ir-keytable: provides a way to query the remote controller, list the |
| 23 | protocols it supports, enable in-kernel support for IR decoder or |
| 24 | switch the protocol and to test the reception of scan codes; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 26 | - ir-ctl: provide tools to handle remote controllers that support raw mode |
| 27 | via LIRC interface. |
| 28 | |
| 29 | Usually, the remote controller module is auto-loaded when the TV card is |
| 30 | detected. However, for a few devices, you need to manually load the |
| 31 | ir-kbd-i2c module. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 32 | |
Mauro Carvalho Chehab | 31cae7c | 2016-07-17 22:11:47 -0300 | [diff] [blame] | 33 | How it works |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | ------------ |
| 35 | |
| 36 | The modules register the remote as keyboard within the linux input |
| 37 | layer, i.e. you'll see the keys of the remote as normal key strokes |
| 38 | (if CONFIG_INPUT_KEYBOARD is enabled). |
| 39 | |
| 40 | Using the event devices (CONFIG_INPUT_EVDEV) it is possible for |
| 41 | applications to access the remote via /dev/input/event<n> devices. |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 42 | The udev/systemd will automatically create the devices. If you install |
| 43 | the `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_, it may also |
| 44 | automatically load a different keytable than the default one. Please see |
| 45 | `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_ ir-keytable.1 |
| 46 | man page for details. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 48 | The ir-keytable tool is nice for trouble shooting, i.e. to check |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | whenever the input device is really present, which of the devices it |
| 50 | is, check whenever pressing keys on the remote actually generates |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 51 | events and the like. You can also use any other input utility that changes |
| 52 | the keymaps, like the input kbd utility. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | |
| 54 | |
Mauro Carvalho Chehab | 31cae7c | 2016-07-17 22:11:47 -0300 | [diff] [blame] | 55 | Using with lircd |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | ================ |
| 57 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 58 | The latest versions of the lircd daemon supports reading events from the |
| 59 | linux input layer (via event device). It also supports receiving IR codes |
| 60 | in lirc mode. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 61 | |
| 62 | |
Mauro Carvalho Chehab | 31cae7c | 2016-07-17 22:11:47 -0300 | [diff] [blame] | 63 | Using without lircd |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 64 | =================== |
| 65 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 66 | Xorg recognizes several IR keycodes that have its numerical value lower |
| 67 | than 247. With the advent of Wayland, the input driver got updated too, |
| 68 | and should now accept all keycodes. Yet, you may want to just reasign |
| 69 | the keycodes to something that your favorite media application likes. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 70 | |
Mauro Carvalho Chehab | 2e97d6d | 2016-07-17 22:34:51 -0300 | [diff] [blame] | 71 | This can be done by setting |
| 72 | `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_ to load your own |
| 73 | keytable in runtime. Please read ir-keytable.1 man page for details. |