sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget9/translations/zh_CN/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/zh_TW/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/it_IT/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/ja_JP/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/ko_KR/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/pt_BR/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget9/translations/sp_SP/userspace-api/media/rc/lirc-dev-intromodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(hCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-no-invariants-or-laterh]hCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-no-invariants-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhS/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro.rsthKubhtarget)}(h.. _lirc_dev_intro:h]h}(h]h ]h"]h$]h&]refidlirc-dev-introuh1hhKhhhhhhubhsection)}(hhh](htitle)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXLIRC stands for Linux Infrared Remote Control. The LIRC device interface is a bi-directional interface for transporting raw IR and decoded scancodes data between userspace and kernelspace. Fundamentally, it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number of standard struct file_operations defined on it. With respect to transporting raw IR and decoded scancodes to and fro, the essential fops are read, write and ioctl.h]hXLIRC stands for Linux Infrared Remote Control. The LIRC device interface is a bi-directional interface for transporting raw IR and decoded scancodes data between userspace and kernelspace. Fundamentally, it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number of standard struct file_operations defined on it. With respect to transporting raw IR and decoded scancodes to and fro, the essential fops are read, write and ioctl.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h`It is also possible to attach a BPF program to a LIRC device for decoding raw IR into scancodes.h]h`It is also possible to attach a BPF program to a LIRC device for decoding raw IR into scancodes.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h6Example dmesg output upon a driver registering w/LIRC:h]h6Example dmesg output upon a driver registering w/LIRC:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hs$ dmesg |grep lirc_dev rc rc0: lirc_dev: driver mceusb registered at minor = 0, raw IR receiver, raw IR transmitterh]hs$ dmesg |grep lirc_dev rc rc0: lirc_dev: driver mceusb registered at minor = 0, raw IR receiver, raw IR transmitter}hjsbah}(h]h ]h"]h$]h&]hhƌforcelanguagenonehighlight_args}uh1jhhhKhhhhubh)}(h"What you should see for a chardev:h]h"What you should see for a chardev:}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubj)}(hG$ ls -l /dev/lirc* crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0h]hG$ ls -l /dev/lirc* crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0}hj:sbah}(h]h ]h"]h$]h&]hhj'j(nonej*}uh1jhhhKhhhhubh)}(hyNote that the package `v4l-utils `_ contains tools for working with LIRC devices:h](hNote that the package }(hjJhhhNhNubh reference)}(h5`v4l-utils `_h]h v4l-utils}(hjThhhNhNubah}(h]h ]h"]h$]h&]name v4l-utilsrefuri&https://git.linuxtv.org/v4l-utils.git/uh1jRhjJubh)}(h) h]h}(h] v4l-utilsah ]h"] v4l-utilsah$]h&]refurijeuh1hȌ referencedKhjJubh. contains tools for working with LIRC devices:}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hhhhubh block_quote)}(h- ir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features. - ir-keytable: can load keymaps; allows you to set IR kernel protocols; load BPF IR decoders and test IR decoding. Some BPF IR decoders are also provided. h]h bullet_list)}(hhh](h list_item)}(hSir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features. h]h)}(hRir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features.h]hRir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hir-keytable: can load keymaps; allows you to set IR kernel protocols; load BPF IR decoders and test IR decoding. Some BPF IR decoders are also provided. h]h)}(hir-keytable: can load keymaps; allows you to set IR kernel protocols; load BPF IR decoders and test IR decoding. Some BPF IR decoders are also provided.h]hir-keytable: can load keymaps; allows you to set IR kernel protocols; load BPF IR decoders and test IR decoding. Some BPF IR decoders are also provided.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhK$hjubah}(h]h ]h"]h$]h&]uh1j~hhhK$hhhhubh)}(h.. _lirc_modes:h]h}(h]h ]h"]h$]h&]hԌ lirc-modesuh1hhK+hhhhhhubeh}(h]( introductionheh ]h"]( introductionlirc_dev_introeh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jhsexpect_referenced_by_id}hhsubh)}(hhh](h)}(h LIRC modesh]h LIRC modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK/ubh)}(h\LIRC supports some modes of receiving and sending IR codes, as shown on the following table.h]h\LIRC supports some modes of receiving and sending IR codes, as shown on the following table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubh)}(h.. _lirc-mode-scancode:h]h}(h]h ]h"]h$]h&]hԌlirc-mode-scancodeuh1hhK4hjhhhhubh)}(h.. _lirc-scancode-flag-toggle:h]h}(h]h ]h"]h$]h&]hԌlirc-scancode-flag-toggleuh1hhK5hjhhhhj}lirc-mode-scancodejsj}j jsubh)}(h.. _lirc-scancode-flag-repeat:h]h}(h]h ]h"]h$]h&]hԌlirc-scancode-flag-repeatuh1hhK6hjhhhhj}(lirc-scancode-flag-togglej jjuj}(jj j juubh)}(h``LIRC_MODE_SCANCODE``h]hliteral)}(hj)h]hLIRC_MODE_SCANCODE}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj'ubah}(h](j#jj eh ]h"](lirc-scancode-flag-repeatj%jeh$]h&]uh1hhhhK8hjhhj}(j>jj%j jjuj}(j#jjj j juubj)}(hXBThis mode is for both sending and receiving IR. For transmitting (aka sending), create a struct lirc_scancode with the desired scancode set in the ``scancode`` member, :c:type:`rc_proto` set to the :ref:`IR protocol `, and all other members set to 0. Write this struct to the lirc device. For receiving, you read struct lirc_scancode from the LIRC device. The ``scancode`` field is set to the received scancode and the :ref:`IR protocol ` is set in :c:type:`rc_proto`. If the scancode maps to a valid key code, this is set in the ``keycode`` field, else it is set to ``KEY_RESERVED``. The ``flags`` can have ``LIRC_SCANCODE_FLAG_TOGGLE`` set if the toggle bit is set in protocols that support it (e.g. rc-5 and rc-6), or ``LIRC_SCANCODE_FLAG_REPEAT`` for when a repeat is received for protocols that support it (e.g. nec). In the Sanyo and NEC protocol, if you hold a button on remote, rather than repeating the entire scancode, the remote sends a shorter message with no scancode, which just means button is held, a "repeat". When this is received, the ``LIRC_SCANCODE_FLAG_REPEAT`` is set and the scancode and keycode is repeated. With nec, there is no way to distinguish "button hold" from "repeatedly pressing the same button". The rc-5 and rc-6 protocols have a toggle bit. When a button is released and pressed again, the toggle bit is inverted. If the toggle bit is set, the ``LIRC_SCANCODE_FLAG_TOGGLE`` is set. The ``timestamp`` field is filled with the time nanoseconds (in ``CLOCK_MONOTONIC``) when the scancode was decoded. h](h)}(h/This mode is for both sending and receiving IR.h]h/This mode is for both sending and receiving IR.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjCubh)}(hXFor transmitting (aka sending), create a struct lirc_scancode with the desired scancode set in the ``scancode`` member, :c:type:`rc_proto` set to the :ref:`IR protocol `, and all other members set to 0. Write this struct to the lirc device.h](hcFor transmitting (aka sending), create a struct lirc_scancode with the desired scancode set in the }(hjUhhhNhNubj,)}(h ``scancode``h]hscancode}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjUubh member, }(hjUhhhNhNubh)}(h:c:type:`rc_proto`h]j,)}(hjqh]hrc_proto}(hjshhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]refdoc%userspace-api/media/rc/lirc-dev-intro refdomainj~reftypetype refexplicitrefwarn reftargetrc_protouh1hhhhK`h]hinline)}(hjh]h IR protocol}(hjhhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjremote_controllers_protocolsuh1hhhhK` is set in :c:type:`rc_proto`. If the scancode maps to a valid key code, this is set in the ``keycode`` field, else it is set to ``KEY_RESERVED``.h](hGFor receiving, you read struct lirc_scancode from the LIRC device. The }(hjhhhNhNubj,)}(h ``scancode``h]hscancode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh/ field is set to the received scancode and the }(hjhhhNhNubh)}(h1:ref:`IR protocol `h]j)}(hjh]h IR protocol}(hjhhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjremote_controllers_protocolsuh1hhhhKAhjubh is set in }(hjhhhNhNubh)}(h:c:type:`rc_proto`h]j,)}(hjh]hrc_proto}(hjhhhNhNubah}(h]h ](j}j~c-typeeh"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]refdocj refdomainj~reftypetype refexplicitrefwarnjrc_protouh1hhhhKAhjubh?. If the scancode maps to a valid key code, this is set in the }(hjhhhNhNubj,)}(h ``keycode``h]hkeycode}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh field, else it is set to }(hjhhhNhNubj,)}(h``KEY_RESERVED``h]h KEY_RESERVED}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKAhjCubh)}(hThe ``flags`` can have ``LIRC_SCANCODE_FLAG_TOGGLE`` set if the toggle bit is set in protocols that support it (e.g. rc-5 and rc-6), or ``LIRC_SCANCODE_FLAG_REPEAT`` for when a repeat is received for protocols that support it (e.g. nec).h](hThe }(hjMhhhNhNubj,)}(h ``flags``h]hflags}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubh can have }(hjMhhhNhNubj,)}(h``LIRC_SCANCODE_FLAG_TOGGLE``h]hLIRC_SCANCODE_FLAG_TOGGLE}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubhT set if the toggle bit is set in protocols that support it (e.g. rc-5 and rc-6), or }(hjMhhhNhNubj,)}(h``LIRC_SCANCODE_FLAG_REPEAT``h]hLIRC_SCANCODE_FLAG_REPEAT}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjMubhH for when a repeat is received for protocols that support it (e.g. nec).}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKGhjCubh)}(hX5In the Sanyo and NEC protocol, if you hold a button on remote, rather than repeating the entire scancode, the remote sends a shorter message with no scancode, which just means button is held, a "repeat". When this is received, the ``LIRC_SCANCODE_FLAG_REPEAT`` is set and the scancode and keycode is repeated.h](hIn the Sanyo and NEC protocol, if you hold a button on remote, rather than repeating the entire scancode, the remote sends a shorter message with no scancode, which just means button is held, a “repeat”. When this is received, the }(hjhhhNhNubj,)}(h``LIRC_SCANCODE_FLAG_REPEAT``h]hLIRC_SCANCODE_FLAG_REPEAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh1 is set and the scancode and keycode is repeated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhjCubh)}(hXWith nec, there is no way to distinguish "button hold" from "repeatedly pressing the same button". The rc-5 and rc-6 protocols have a toggle bit. When a button is released and pressed again, the toggle bit is inverted. If the toggle bit is set, the ``LIRC_SCANCODE_FLAG_TOGGLE`` is set.h](hXWith nec, there is no way to distinguish “button hold” from “repeatedly pressing the same button”. The rc-5 and rc-6 protocols have a toggle bit. When a button is released and pressed again, the toggle bit is inverted. If the toggle bit is set, the }(hjhhhNhNubj,)}(h``LIRC_SCANCODE_FLAG_TOGGLE``h]hLIRC_SCANCODE_FLAG_TOGGLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh is set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjCubh)}(hsThe ``timestamp`` field is filled with the time nanoseconds (in ``CLOCK_MONOTONIC``) when the scancode was decoded.h](hThe }(hjhhhNhNubj,)}(h ``timestamp``h]h timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh/ field is filled with the time nanoseconds (in }(hjhhhNhNubj,)}(h``CLOCK_MONOTONIC``h]hCLOCK_MONOTONIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh ) when the scancode was decoded.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKWhjCubeh}(h]h ]h"]h$]h&]uh1j~hhhK:hjhhubh)}(h.. _lirc-mode-mode2:h]h}(h]h ]h"]h$]h&]hԌlirc-mode-mode2uh1hhKZhjhhhhubh)}(h``LIRC_MODE_MODE2``h]j,)}(hjh]hLIRC_MODE_MODE2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]jah ]h"]lirc-mode-mode2ah$]h&]uh1hhhhK\hjhhj}j)j sj}jj subj)}(hXThe driver returns a sequence of pulse and space codes to userspace, as a series of u32 values. This mode is used only for IR receive. The upper 8 bits determine the packet type, and the lower 24 bits the payload. Use ``LIRC_VALUE()`` macro to get the payload, and the macro ``LIRC_MODE2()`` will give you the type, which is one of: ``LIRC_MODE2_PULSE`` Signifies the presence of IR in microseconds, also known as *flash*. ``LIRC_MODE2_SPACE`` Signifies absence of IR in microseconds, also known as *gap*. ``LIRC_MODE2_FREQUENCY`` If measurement of the carrier frequency was enabled with :ref:`lirc_set_measure_carrier_mode` then this packet gives you the carrier frequency in Hertz. ``LIRC_MODE2_TIMEOUT`` When the timeout set with :ref:`lirc_set_rec_timeout` expires due to no IR being detected, this packet will be sent, with the number of microseconds with no IR. ``LIRC_MODE2_OVERFLOW`` Signifies that the IR receiver encounter an overflow, and some IR is missing. The IR data after this should be correct again. The actual value is not important, but this is set to 0xffffff by the kernel for compatibility with lircd. h](h)}(h_The driver returns a sequence of pulse and space codes to userspace, as a series of u32 values.h]h_The driver returns a sequence of pulse and space codes to userspace, as a series of u32 values.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj.ubh)}(h&This mode is used only for IR receive.h]h&This mode is used only for IR receive.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj.ubh)}(hThe upper 8 bits determine the packet type, and the lower 24 bits the payload. Use ``LIRC_VALUE()`` macro to get the payload, and the macro ``LIRC_MODE2()`` will give you the type, which is one of:h](hSThe upper 8 bits determine the packet type, and the lower 24 bits the payload. Use }(hjNhhhNhNubj,)}(h``LIRC_VALUE()``h]h LIRC_VALUE()}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjNubh) macro to get the payload, and the macro }(hjNhhhNhNubj,)}(h``LIRC_MODE2()``h]h LIRC_MODE2()}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjNubh) will give you the type, which is one of:}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKchj.ubh)}(h``LIRC_MODE2_PULSE``h]j,)}(hjh]hLIRC_MODE2_PULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1hhhhKhhj.ubj)}(hESignifies the presence of IR in microseconds, also known as *flash*. h]h)}(hDSignifies the presence of IR in microseconds, also known as *flash*.h](hSignifies absence of IR in microseconds, also known as *gap*. h]h)}(h=Signifies absence of IR in microseconds, also known as *gap*.h](h7Signifies absence of IR in microseconds, also known as }(hjhhhNhNubj)}(h*gap*h]hgap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1j~hhhKnhj.ubh)}(h``LIRC_MODE2_FREQUENCY``h]j,)}(hjh]hLIRC_MODE2_FREQUENCY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1hhhhKphj.ubj)}(hIf measurement of the carrier frequency was enabled with :ref:`lirc_set_measure_carrier_mode` then this packet gives you the carrier frequency in Hertz. h]h)}(hIf measurement of the carrier frequency was enabled with :ref:`lirc_set_measure_carrier_mode` then this packet gives you the carrier frequency in Hertz.h](h9If measurement of the carrier frequency was enabled with }(hjhhhNhNubh)}(h$:ref:`lirc_set_measure_carrier_mode`h]j)}(hj)h]hlirc_set_measure_carrier_mode}(hj+hhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainj5reftyperef refexplicitrefwarnjlirc_set_measure_carrier_modeuh1hhhhKrhjubh; then this packet gives you the carrier frequency in Hertz.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhjubah}(h]h ]h"]h$]h&]uh1j~hhhKrhj.ubh)}(h``LIRC_MODE2_TIMEOUT``h]j,)}(hjYh]hLIRC_MODE2_TIMEOUT}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1hhhhKvhj.ubj)}(hWhen the timeout set with :ref:`lirc_set_rec_timeout` expires due to no IR being detected, this packet will be sent, with the number of microseconds with no IR. h]h)}(hWhen the timeout set with :ref:`lirc_set_rec_timeout` expires due to no IR being detected, this packet will be sent, with the number of microseconds with no IR.h](hWhen the timeout set with }(hjrhhhNhNubh)}(h:ref:`lirc_set_rec_timeout`h]j)}(hj|h]hlirc_set_rec_timeout}(hj~hhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjlirc_set_rec_timeoutuh1hhhhKxhjrubhk expires due to no IR being detected, this packet will be sent, with the number of microseconds with no IR.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjnubah}(h]h ]h"]h$]h&]uh1j~hhhKxhj.ubh)}(h``LIRC_MODE2_OVERFLOW``h]j,)}(hjh]hLIRC_MODE2_OVERFLOW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1hhhhK|hj.ubj)}(hSignifies that the IR receiver encounter an overflow, and some IR is missing. The IR data after this should be correct again. The actual value is not important, but this is set to 0xffffff by the kernel for compatibility with lircd. h]h)}(hSignifies that the IR receiver encounter an overflow, and some IR is missing. The IR data after this should be correct again. The actual value is not important, but this is set to 0xffffff by the kernel for compatibility with lircd.h]hSignifies that the IR receiver encounter an overflow, and some IR is missing. The IR data after this should be correct again. The actual value is not important, but this is set to 0xffffff by the kernel for compatibility with lircd.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjubah}(h]h ]h"]h$]h&]uh1j~hhhK~hj.ubeh}(h]h ]h"]h$]h&]uh1j~hhhK^hjhhubh)}(h.. _lirc-mode-pulse:h]h}(h]h ]h"]h$]h&]hԌlirc-mode-pulseuh1hhKhjhhhhubh)}(h``LIRC_MODE_PULSE``h]j,)}(hjh]hLIRC_MODE_PULSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]jah ]h"]lirc-mode-pulseah$]h&]uh1hhhhKhjhhj}jjsj}jjsubj)}(hX0In pulse mode, a sequence of pulse/space integer values are written to the lirc device using :ref:`lirc-write`. The values are alternating pulse and space lengths, in microseconds. The first and last entry must be a pulse, so there must be an odd number of entries. This mode is used only for IR send. h](h)}(hoIn pulse mode, a sequence of pulse/space integer values are written to the lirc device using :ref:`lirc-write`.h](h]In pulse mode, a sequence of pulse/space integer values are written to the lirc device using }(hjhhhNhNubh)}(h:ref:`lirc-write`h]j)}(hjh]h lirc-write}(hjhhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnj lirc-writeuh1hhhhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hThe values are alternating pulse and space lengths, in microseconds. The first and last entry must be a pulse, so there must be an odd number of entries.h]hThe values are alternating pulse and space lengths, in microseconds. The first and last entry must be a pulse, so there must be an odd number of entries.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h#This mode is used only for IR send.h]h#This mode is used only for IR send.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1j~hhhKhjhhubeh}(h](jid1eh ]h"]( lirc modes lirc_modeseh$]h&]uh1hhhhhhhhK/j}jbjsj}jjsubh)}(hhh](h)}(h%Data types used by LIRC_MODE_SCANCODEh]h%Data types used by LIRC_MODE_SCANCODE}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlelirc_scancode (C struct)c.lirc_scancodehNtauh1jxhjghhhNhNubhdesc)}(hhh](hdesc_signature)}(h lirc_scancodeh]hdesc_signature_line)}(hstruct lirc_scancodeh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h lirc_scancodeh]h desc_sig_name)}(hjh]h lirc_scancode}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(h>decoded scancode with protocol for use with LIRC_MODE_SCANCODEh]h>decoded scancode with protocol for use with LIRC_MODE_SCANCODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j~structeh"]h$]h&]domainj~objtypej desctypej noindex noindexentrynocontentsentryuh1jhhhjghNhNubh container)}(hX3**Definition**:: struct lirc_scancode { __u64 timestamp; __u16 flags; __u16 rc_proto; __u32 keycode; __u64 scancode; }; **Members** ``timestamp`` Timestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded. ``flags`` should be 0 for transmit. When receiving scancodes, LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set depending on the protocol ``rc_proto`` see enum rc_proto ``keycode`` the translated keycode. Set to 0 for transmit. ``scancode`` the scancode received or to be senth](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hzstruct lirc_scancode { __u64 timestamp; __u16 flags; __u16 rc_proto; __u32 keycode; __u64 scancode; };h]hzstruct lirc_scancode { __u64 timestamp; __u16 flags; __u16 rc_proto; __u32 keycode; __u64 scancode; };}hj;sbah}(h]h ]h"]h$]h&]hhuh1jhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubh)}(h **Members**h]j!)}(hjLh]hMembers}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(hR``timestamp`` Timestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded. h](hterm)}(h ``timestamp``h]j,)}(hjqh]h timestamp}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjoubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjiubh definition)}(hhh]h)}(hCTimestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded.h]hCTimestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jghjhKhjdubjh)}(h``flags`` should be 0 for transmit. When receiving scancodes, LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set depending on the protocol h](jn)}(h ``flags``h]j,)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(hshould be 0 for transmit. When receiving scancodes, LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set depending on the protocolh]hshould be 0 for transmit. When receiving scancodes, LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set depending on the protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghjhKhjdubjh)}(h``rc_proto`` see enum rc_proto h](jn)}(h ``rc_proto``h]j,)}(hjh]hrc_proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(hsee enum rc_protoh]hsee enum rc_proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghjhKhjdubjh)}(h;``keycode`` the translated keycode. Set to 0 for transmit. h](jn)}(h ``keycode``h]j,)}(hj h]hkeycode}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(h.the translated keycode. Set to 0 for transmit.h]h.the translated keycode. Set to 0 for transmit.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghj5hKhjdubjh)}(h0``scancode`` the scancode received or to be senth](jn)}(h ``scancode``h]j,)}(hjYh]hscancode}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjWubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjSubj)}(hhh]h)}(h#the scancode received or to be senth]h#the scancode received or to be sent}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jghjnhKhjdubeh}(h]h ]h"]h$]h&]uh1jbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjghhhNhNubjy)}(hhh]h}(h]h ]h"]h$]h&]entries](jrc_proto (C enum) c.rc_protohNtauh1jxhjghhhNhNubj)}(hhh](j)}(hrc_protoh]j)}(h enum rc_protoh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hrc_protoh]j)}(hjh]hrc_proto}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hthe Remote Controller protocolh]hthe Remote Controller protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j~enumeh"]h$]h&]jj~jj jj jjjuh1jhhhjghNhNubj)}(hX/**Constants** ``RC_PROTO_UNKNOWN`` Protocol not known ``RC_PROTO_OTHER`` Protocol known but proprietary ``RC_PROTO_RC5`` Philips RC5 protocol ``RC_PROTO_RC5X_20`` Philips RC5x 20 bit protocol ``RC_PROTO_RC5_SZ`` StreamZap variant of RC5 ``RC_PROTO_JVC`` JVC protocol ``RC_PROTO_SONY12`` Sony 12 bit protocol ``RC_PROTO_SONY15`` Sony 15 bit protocol ``RC_PROTO_SONY20`` Sony 20 bit protocol ``RC_PROTO_NEC`` NEC protocol ``RC_PROTO_NECX`` Extended NEC protocol ``RC_PROTO_NEC32`` NEC 32 bit protocol ``RC_PROTO_SANYO`` Sanyo protocol ``RC_PROTO_MCIR2_KBD`` RC6-ish MCE keyboard ``RC_PROTO_MCIR2_MSE`` RC6-ish MCE mouse ``RC_PROTO_RC6_0`` Philips RC6-0-16 protocol ``RC_PROTO_RC6_6A_20`` Philips RC6-6A-20 protocol ``RC_PROTO_RC6_6A_24`` Philips RC6-6A-24 protocol ``RC_PROTO_RC6_6A_32`` Philips RC6-6A-32 protocol ``RC_PROTO_RC6_MCE`` MCE (Philips RC6-6A-32 subtype) protocol ``RC_PROTO_SHARP`` Sharp protocol ``RC_PROTO_XMP`` XMP protocol ``RC_PROTO_CEC`` CEC protocol ``RC_PROTO_IMON`` iMon Pad protocol ``RC_PROTO_RCMM12`` RC-MM protocol 12 bits ``RC_PROTO_RCMM24`` RC-MM protocol 24 bits ``RC_PROTO_RCMM32`` RC-MM protocol 32 bits ``RC_PROTO_XBOX_DVD`` Xbox DVD Movie Playback Kit protocol ``RC_PROTO_MAX`` Maximum value of enum rc_protoh](h)}(h **Constants**h]j!)}(hj h]h Constants}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubjc)}(hhh](jh)}(h(``RC_PROTO_UNKNOWN`` Protocol not known h](jn)}(h``RC_PROTO_UNKNOWN``h]j,)}(hj7 h]hRC_PROTO_UNKNOWN}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj5 ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj1 ubj)}(hhh]h)}(hProtocol not knownh]hProtocol not known}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL hKhjM ubah}(h]h ]h"]h$]h&]uh1jhj1 ubeh}(h]h ]h"]h$]h&]uh1jghjL hKhj. ubjh)}(h2``RC_PROTO_OTHER`` Protocol known but proprietary h](jn)}(h``RC_PROTO_OTHER``h]j,)}(hjp h]hRC_PROTO_OTHER}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjn ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjj ubj)}(hhh]h)}(hProtocol known but proprietaryh]hProtocol known but proprietary}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h&``RC_PROTO_RC5`` Philips RC5 protocol h](jn)}(h``RC_PROTO_RC5``h]j,)}(hj h]h RC_PROTO_RC5}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hPhilips RC5 protocolh]hPhilips RC5 protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h2``RC_PROTO_RC5X_20`` Philips RC5x 20 bit protocol h](jn)}(h``RC_PROTO_RC5X_20``h]j,)}(hj h]hRC_PROTO_RC5X_20}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hPhilips RC5x 20 bit protocolh]hPhilips RC5x 20 bit protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h-``RC_PROTO_RC5_SZ`` StreamZap variant of RC5 h](jn)}(h``RC_PROTO_RC5_SZ``h]j,)}(hj h]hRC_PROTO_RC5_SZ}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hStreamZap variant of RC5h]hStreamZap variant of RC5}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0 hKhj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj0 hKhj. ubjh)}(h``RC_PROTO_JVC`` JVC protocol h](jn)}(h``RC_PROTO_JVC``h]j,)}(hjT h]h RC_PROTO_JVC}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjR ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjN ubj)}(hhh]h)}(h JVC protocolh]h JVC protocol}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji hKhjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]uh1jghji hKhj. ubjh)}(h)``RC_PROTO_SONY12`` Sony 12 bit protocol h](jn)}(h``RC_PROTO_SONY12``h]j,)}(hj h]hRC_PROTO_SONY12}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hSony 12 bit protocolh]hSony 12 bit protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h)``RC_PROTO_SONY15`` Sony 15 bit protocol h](jn)}(h``RC_PROTO_SONY15``h]j,)}(hj h]hRC_PROTO_SONY15}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hSony 15 bit protocolh]hSony 15 bit protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h)``RC_PROTO_SONY20`` Sony 20 bit protocol h](jn)}(h``RC_PROTO_SONY20``h]j,)}(hj h]hRC_PROTO_SONY20}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hSony 20 bit protocolh]hSony 20 bit protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h``RC_PROTO_NEC`` NEC protocol h](jn)}(h``RC_PROTO_NEC``h]j,)}(hj8 h]h RC_PROTO_NEC}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj6 ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj2 ubj)}(hhh]h)}(h NEC protocolh]h NEC protocol}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hKhjN ubah}(h]h ]h"]h$]h&]uh1jhj2 ubeh}(h]h ]h"]h$]h&]uh1jghjM hKhj. ubjh)}(h(``RC_PROTO_NECX`` Extended NEC protocol h](jn)}(h``RC_PROTO_NECX``h]j,)}(hjq h]h RC_PROTO_NECX}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjo ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjk ubj)}(hhh]h)}(hExtended NEC protocolh]hExtended NEC protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjk ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h'``RC_PROTO_NEC32`` NEC 32 bit protocol h](jn)}(h``RC_PROTO_NEC32``h]j,)}(hj h]hRC_PROTO_NEC32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hNEC 32 bit protocolh]hNEC 32 bit protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h"``RC_PROTO_SANYO`` Sanyo protocol h](jn)}(h``RC_PROTO_SANYO``h]j,)}(hj h]hRC_PROTO_SANYO}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hSanyo protocolh]hSanyo protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h,``RC_PROTO_MCIR2_KBD`` RC6-ish MCE keyboard h](jn)}(h``RC_PROTO_MCIR2_KBD``h]j,)}(hj h]hRC_PROTO_MCIR2_KBD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hRC6-ish MCE keyboardh]hRC6-ish MCE keyboard}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1 hKhj2 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj1 hKhj. ubjh)}(h)``RC_PROTO_MCIR2_MSE`` RC6-ish MCE mouse h](jn)}(h``RC_PROTO_MCIR2_MSE``h]j,)}(hjU h]hRC_PROTO_MCIR2_MSE}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjS ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjO ubj)}(hhh]h)}(hRC6-ish MCE mouseh]hRC6-ish MCE mouse}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj hKhjk ubah}(h]h ]h"]h$]h&]uh1jhjO ubeh}(h]h ]h"]h$]h&]uh1jghjj hKhj. ubjh)}(h-``RC_PROTO_RC6_0`` Philips RC6-0-16 protocol h](jn)}(h``RC_PROTO_RC6_0``h]j,)}(hj h]hRC_PROTO_RC6_0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hPhilips RC6-0-16 protocolh]hPhilips RC6-0-16 protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h2``RC_PROTO_RC6_6A_20`` Philips RC6-6A-20 protocol h](jn)}(h``RC_PROTO_RC6_6A_20``h]j,)}(hj h]hRC_PROTO_RC6_6A_20}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hPhilips RC6-6A-20 protocolh]hPhilips RC6-6A-20 protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h2``RC_PROTO_RC6_6A_24`` Philips RC6-6A-24 protocol h](jn)}(h``RC_PROTO_RC6_6A_24``h]j,)}(hj h]hRC_PROTO_RC6_6A_24}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hPhilips RC6-6A-24 protocolh]hPhilips RC6-6A-24 protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h2``RC_PROTO_RC6_6A_32`` Philips RC6-6A-32 protocol h](jn)}(h``RC_PROTO_RC6_6A_32``h]j,)}(hj9 h]hRC_PROTO_RC6_6A_32}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj7 ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj3 ubj)}(hhh]h)}(hPhilips RC6-6A-32 protocolh]hPhilips RC6-6A-32 protocol}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN hKhjO ubah}(h]h ]h"]h$]h&]uh1jhj3 ubeh}(h]h ]h"]h$]h&]uh1jghjN hKhj. ubjh)}(h>``RC_PROTO_RC6_MCE`` MCE (Philips RC6-6A-32 subtype) protocol h](jn)}(h``RC_PROTO_RC6_MCE``h]j,)}(hjr h]hRC_PROTO_RC6_MCE}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjp ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjl ubj)}(hhh]h)}(h(MCE (Philips RC6-6A-32 subtype) protocolh]h(MCE (Philips RC6-6A-32 subtype) protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjl ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h"``RC_PROTO_SHARP`` Sharp protocol h](jn)}(h``RC_PROTO_SHARP``h]j,)}(hj h]hRC_PROTO_SHARP}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(hSharp protocolh]hSharp protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h``RC_PROTO_XMP`` XMP protocol h](jn)}(h``RC_PROTO_XMP``h]j,)}(hj h]h RC_PROTO_XMP}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhj ubj)}(hhh]h)}(h XMP protocolh]h XMP protocol}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jghj hKhj. ubjh)}(h``RC_PROTO_CEC`` CEC protocol h](jn)}(h``RC_PROTO_CEC``h]j,)}(hjh]h RC_PROTO_CEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(h CEC protocolh]h CEC protocol}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghj2hKhj. ubjh)}(h$``RC_PROTO_IMON`` iMon Pad protocol h](jn)}(h``RC_PROTO_IMON``h]j,)}(hjVh]h RC_PROTO_IMON}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjTubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjPubj)}(hhh]h)}(hiMon Pad protocolh]hiMon Pad protocol}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jghjkhKhj. ubjh)}(h+``RC_PROTO_RCMM12`` RC-MM protocol 12 bits h](jn)}(h``RC_PROTO_RCMM12``h]j,)}(hjh]hRC_PROTO_RCMM12}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(hRC-MM protocol 12 bitsh]hRC-MM protocol 12 bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghjhKhj. ubjh)}(h+``RC_PROTO_RCMM24`` RC-MM protocol 24 bits h](jn)}(h``RC_PROTO_RCMM24``h]j,)}(hjh]hRC_PROTO_RCMM24}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhKhjubj)}(hhh]h)}(hRC-MM protocol 24 bitsh]hRC-MM protocol 24 bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghjhKhj. ubjh)}(h+``RC_PROTO_RCMM32`` RC-MM protocol 32 bits h](jn)}(h``RC_PROTO_RCMM32``h]j,)}(hjh]hRC_PROTO_RCMM32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhMhjubj)}(hhh]h)}(hRC-MM protocol 32 bitsh]hRC-MM protocol 32 bits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jghjhMhj. ubjh)}(h;``RC_PROTO_XBOX_DVD`` Xbox DVD Movie Playback Kit protocol h](jn)}(h``RC_PROTO_XBOX_DVD``h]j,)}(hj:h]hRC_PROTO_XBOX_DVD}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hj8ubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhMhj4ubj)}(hhh]h)}(h$Xbox DVD Movie Playback Kit protocolh]h$Xbox DVD Movie Playback Kit protocol}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jghjOhMhj. ubjh)}(h/``RC_PROTO_MAX`` Maximum value of enum rc_protoh](jn)}(h``RC_PROTO_MAX``h]j,)}(hjsh]h RC_PROTO_MAX}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjqubah}(h]h ]h"]h$]h&]uh1jmhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhMhjmubj)}(hhh]h)}(hMaximum value of enum rc_protoh]hMaximum value of enum rc_proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jghjhMhj. ubeh}(h]h ]h"]h$]h&]uh1jbhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjghhhNhNubeh}(h]%data-types-used-by-lirc-mode-scancodeah ]h"]%data types used by lirc_mode_scancodeah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hBPF based IR decoderh]hBPF based IR decoder}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX2The kernel has support for decoding the most common :ref:`IR protocols `, but there are many protocols which are not supported. To support these, it is possible to load an BPF program which does the decoding. This can only be done on LIRC devices which support reading raw IR.h](h4The kernel has support for decoding the most common }(hjhhhNhNubh)}(h2:ref:`IR protocols `h]j)}(hjh]h IR protocols}(hjhhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjremote_controllers_protocolsuh1hhhhKhjubh, but there are many protocols which are not supported. To support these, it is possible to load an BPF program which does the decoding. This can only be done on LIRC devices which support reading raw IR.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXGFirst, using the `bpf(2)`_ syscall with the ``BPF_LOAD_PROG`` argument, program must be loaded of type ``BPF_PROG_TYPE_LIRC_MODE2``. Once attached to the LIRC device, this program will be called for each pulse, space or timeout event on the LIRC device. The context for the BPF program is a pointer to a unsigned int, which is a :ref:`LIRC_MODE_MODE2 ` value. When the program has decoded the scancode, it can be submitted using the BPF functions ``bpf_rc_keydown()`` or ``bpf_rc_repeat()``. Mouse or pointer movements can be reported using ``bpf_rc_pointer_rel()``.h](hFirst, using the }(hjhhhNhNubjS)}(h `bpf(2)`_h]hbpf(2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]namebpf(2)jd/http://man7.org/linux/man-pages/man2/bpf.2.htmluh1jRhjresolvedKubh syscall with the }(hjhhhNhNubj,)}(h``BPF_LOAD_PROG``h]h BPF_LOAD_PROG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh* argument, program must be loaded of type }(hjhhhNhNubj,)}(h``BPF_PROG_TYPE_LIRC_MODE2``h]hBPF_PROG_TYPE_LIRC_MODE2}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh. Once attached to the LIRC device, this program will be called for each pulse, space or timeout event on the LIRC device. The context for the BPF program is a pointer to a unsigned int, which is a }(hjhhhNhNubh)}(h(:ref:`LIRC_MODE_MODE2 `h]j)}(hjCh]hLIRC_MODE_MODE2}(hjEhhhNhNubah}(h]h ](j}stdstd-refeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftyperef refexplicitrefwarnjlirc-mode-mode2uh1hhhhKhjubh_ value. When the program has decoded the scancode, it can be submitted using the BPF functions }(hjhhhNhNubj,)}(h``bpf_rc_keydown()``h]hbpf_rc_keydown()}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh or }(hjhhhNhNubj,)}(h``bpf_rc_repeat()``h]hbpf_rc_repeat()}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh3. Mouse or pointer movements can be reported using }(hjhhhNhNubj,)}(h``bpf_rc_pointer_rel()``h]hbpf_rc_pointer_rel()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXROnce you have the file descriptor for the ``BPF_PROG_TYPE_LIRC_MODE2`` BPF program, it can be attached to the LIRC device using the `bpf(2)`_ syscall. The target must be the file descriptor for the LIRC device, and the attach type must be ``BPF_LIRC_MODE2``. No more than 64 BPF programs can be attached to a single LIRC device at a time.h](h*Once you have the file descriptor for the }(hjhhhNhNubj,)}(h``BPF_PROG_TYPE_LIRC_MODE2``h]hBPF_PROG_TYPE_LIRC_MODE2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubh> BPF program, it can be attached to the LIRC device using the }(hjhhhNhNubjS)}(h `bpf(2)`_h]hbpf(2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]namebpf(2)jdjuh1jRhjjKubhb syscall. The target must be the file descriptor for the LIRC device, and the attach type must be }(hjhhhNhNubj,)}(h``BPF_LIRC_MODE2``h]hBPF_LIRC_MODE2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j+hjubhQ. No more than 64 BPF programs can be attached to a single LIRC device at a time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h;.. _bpf(2): http://man7.org/linux/man-pages/man2/bpf.2.htmlh]h}(h]bpf-2ah ]h"]bpf(2)ah$]h&]jdjuh1hhKhjhhhhjsKubeh}(h]bpf-based-ir-decoderah ]h"]bpf based ir decoderah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}bpf(2)](jjesrefids}(h]haj]jaj ]jaj]j aj#]jaj]j aj]jaunameids}(jhjjjojljbjjaj^jj j%jj>j#j)jjjjjjjjju nametypes}(jjjojbjajj%j>j)jjjjuh}(hhjhjljfjjj^jj j'jj'j#j'jjjjjjgjjjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j,KsRparse_messages]transform_messages](hsystem_message)}(hhh]h)}(hhh]h4Hyperlink target "lirc-dev-intro" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehnjlineKuh1jubj)}(hhh]h)}(hhh]h0Hyperlink target "lirc-modes" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineK+uh1jubj)}(hhh]h)}(hhh]h8Hyperlink target "lirc-mode-scancode" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineK4uh1jubj)}(hhh]h)}(hhh]h?Hyperlink target "lirc-scancode-flag-toggle" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineK5uh1jubj)}(hhh]h)}(hhh]h?Hyperlink target "lirc-scancode-flag-repeat" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineK6uh1jubj)}(hhh]h)}(hhh]h5Hyperlink target "lirc-mode-mode2" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehnjlineKZuh1jubj)}(hhh]h)}(hhh]h5Hyperlink target "lirc-mode-pulse" is not referenced.}hj-sbah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]levelK_typejsourcehnjlineKuh1jube transformerN include_log] decorationNhhub.