€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ9/translations/zh_CN/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/zh_TW/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/it_IT/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/ja_JP/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/ko_KR/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/pt_BR/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ9/translations/sp_SP/userspace-api/media/rc/lirc-dev-intro”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-no-invariants-or-later”h]”hŒCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-no-invariants-or-later”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro.rst”h´KubhŒtarget”“”)�”}”(hŒ.. _lirc_dev_intro:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œlirc-dev-intro”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hX¸LIRC 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]”hX¸LIRC 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.”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K hhØh²hubhì)�”}”(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.”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhì)�”}”(hŒ6Example dmesg output upon a driver registering w/LIRC:”h]”hŒ6Example dmesg output upon a driver registering w/LIRC:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubhŒ literal_block”“”)�”}”(hŒs$ dmesg |grep lirc_dev rc rc0: lirc_dev: driver mceusb registered at minor = 0, raw IR receiver, raw IR transmitter”h]”hŒs$ 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&]”hÅhÆŒforce”‰Œlanguage”Œnone”Œhighlight_args”}”uh1jh³hÇh´KhhØh²hubhì)�”}”(hŒ"What you should see for a chardev:”h]”hŒ"What you should see for a chardev:”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubj)�”}”(hŒG$ ls -l /dev/lirc* crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0”h]”hŒG$ ls -l /dev/lirc* crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0”…”�”}”hj:sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj'‰j(Œnone”j*}”uh1jh³hÇh´KhhØh²hubhì)�”}”(hŒyNote that the package `v4l-utils `_ contains tools for working with LIRC devices:”h]”(hŒNote that the package ”…”�”}”(hjJh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ5`v4l-utils `_”h]”hŒ v4l-utils”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ v4l-utils”Œrefuri”Œ&https://git.linuxtv.org/v4l-utils.git/”uh1jRhjJubhÉ)�”}”(hŒ) ”h]”h}”(h]”Œ v4l-utils”ah ]”h"]”Œ v4l-utils”ah$]”h&]”Œrefuri”jeuh1hÈŒ referenced”KhjJubhŒ. contains tools for working with LIRC devices:”…”�”}”(hjJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K!hhØh²hubhŒ 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”“”)�”}”(hŒSir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features. ”h]”hì)�”}”(hŒRir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features.”h]”hŒRir-ctl: can receive raw IR and transmit IR, as well as query LIRC device features.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K$hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj†ubjŠ)�”}”(hŒ™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ì)�”}”(hŒ˜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Œ˜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.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K'hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‰hj†ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j„h³hÇh´K$hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´K$hhØh²hubhÉ)�”}”(hŒ.. _lirc_modes:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒ lirc-modes”uh1hÈh´K+hhØh²hh³hÇubeh}”(h]”(Œ introduction”hÕeh ]”h"]”(Œ introduction”Œlirc_dev_intro”eh$]”h&]”uh1hÖhhh²hh³hÇh´KŒexpect_referenced_by_name”}”jÚhÊsŒexpect_referenced_by_id”}”hÕhÊsubh×)�”}”(hhh]”(hÜ)�”}”(hŒ LIRC modes”h]”hŒ LIRC modes”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjáh²hh³hÇh´K/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.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K1hjáh²hubhÉ)�”}”(hŒ.. _lirc-mode-scancode:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒlirc-mode-scancode”uh1hÈh´K4hjáh²hh³hÇubhÉ)�”}”(hŒ.. _lirc-scancode-flag-toggle:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒlirc-scancode-flag-toggle”uh1hÈh´K5hjáh²hh³hÇjÝ}”Œlirc-mode-scancode”jsjß}”j jsubhÉ)�”}”(hŒ.. _lirc-scancode-flag-repeat:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒlirc-scancode-flag-repeat”uh1hÈh´K6hjáh²hh³hÇjÝ}”(Œlirc-scancode-flag-toggle”j jjujß}”(jj j juubhì)�”}”(hŒ``LIRC_MODE_SCANCODE``”h]”hŒliteral”“”)�”}”(hj)h]”hŒLIRC_MODE_SCANCODE”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj'ubah}”(h]”(j#jj eh ]”h"]”(Œlirc-scancode-flag-repeat”j%jeh$]”h&]”uh1hëh³hÇh´K8hjáh²hjÝ}”(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.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K: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]”(hŒcFor transmitting (aka sending), create a struct lirc_scancode with the desired scancode set in the ”…”�”}”(hjUh²hh³Nh´Nubj,)�”}”(hŒ ``scancode``”h]”hŒscancode”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjUubhŒ member, ”…”�”}”(hjUh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rc_proto`”h]”j,)�”}”(hjqh]”hŒrc_proto”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1j+hjoubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ%userspace-api/media/rc/lirc-dev-intro”Œ refdomain”j~Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”Œrc_proto”uh1hh³hÇh´K`”h]”hŒinline”“”)�”}”(hj˜h]”hŒ IR protocol”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhj–ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”j¦Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj�Œremote_controllers_protocols”uh1hh³hÇh´K` 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]”(hŒGFor receiving, you read struct lirc_scancode from the LIRC device. The ”…”�”}”(hjÂh²hh³Nh´Nubj,)�”}”(hŒ ``scancode``”h]”hŒscancode”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÂubhŒ/ field is set to the received scancode and the ”…”�”}”(hjÂh²hh³Nh´Nubh)�”}”(hŒ1:ref:`IR protocol `”h]”j›)�”}”(hjÞh]”hŒ IR protocol”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhjÜubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”jêŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj�Œremote_controllers_protocols”uh1hh³hÇh´KAhjÂubhŒ is set in ”…”�”}”(hjÂh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rc_proto`”h]”j,)�”}”(hjh]”hŒrc_proto”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j}j~Œc-type”eh"]”h$]”h&]”uh1j+hjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”j~Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j�Œrc_proto”uh1hh³hÇh´KAhjÂubhŒ?. If the scancode maps to a valid key code, this is set in the ”…”�”}”(hjÂh²hh³Nh´Nubj,)�”}”(hŒ ``keycode``”h]”hŒkeycode”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÂubhŒ field, else it is set to ”…”�”}”(hjÂh²hh³Nh´Nubj,)�”}”(hŒ``KEY_RESERVED``”h]”hŒ KEY_RESERVED”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÂubhŒ.”…”�”}”(hjÂh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KAhjCubhì)�”}”(hŒí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).”h]”(hŒThe ”…”�”}”(hjMh²hh³Nh´Nubj,)�”}”(hŒ ``flags``”h]”hŒflags”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjMubhŒ can have ”…”�”}”(hjMh²hh³Nh´Nubj,)�”}”(hŒ``LIRC_SCANCODE_FLAG_TOGGLE``”h]”hŒLIRC_SCANCODE_FLAG_TOGGLE”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjMubhŒT set if the toggle bit is set in protocols that support it (e.g. rc-5 and rc-6), or ”…”�”}”(hjMh²hh³Nh´Nubj,)�”}”(hŒ``LIRC_SCANCODE_FLAG_REPEAT``”h]”hŒLIRC_SCANCODE_FLAG_REPEAT”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjMubhŒH for when a repeat is received for protocols that support it (e.g. nec).”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KGhjCubhì)�”}”(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]”(hŒë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 ”…”�”}”(hj‘h²hh³Nh´Nubj,)�”}”(hŒ``LIRC_SCANCODE_FLAG_REPEAT``”h]”hŒLIRC_SCANCODE_FLAG_REPEAT”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj‘ubhŒ1 is set and the scancode and keycode is repeated.”…”�”}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KLhjCubhì)�”}”(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 ”…”�”}”(hj±h²hh³Nh´Nubj,)�”}”(hŒ``LIRC_SCANCODE_FLAG_TOGGLE``”h]”hŒLIRC_SCANCODE_FLAG_TOGGLE”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj±ubhŒ is set.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KRhjCubhì)�”}”(hŒsThe ``timestamp`` field is filled with the time nanoseconds (in ``CLOCK_MONOTONIC``) when the scancode was decoded.”h]”(hŒThe ”…”�”}”(hjÑh²hh³Nh´Nubj,)�”}”(hŒ ``timestamp``”h]”hŒ timestamp”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÑubhŒ/ field is filled with the time nanoseconds (in ”…”�”}”(hjÑh²hh³Nh´Nubj,)�”}”(hŒ``CLOCK_MONOTONIC``”h]”hŒCLOCK_MONOTONIC”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÑubhŒ ) when the scancode was decoded.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KWhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´K:hjáh²hubhÉ)�”}”(hŒ.. _lirc-mode-mode2:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒlirc-mode-mode2”uh1hÈh´KZhjáh²hh³hÇubhì)�”}”(hŒ``LIRC_MODE_MODE2``”h]”j,)�”}”(hjh]”hŒLIRC_MODE_MODE2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjubah}”(h]”jah ]”h"]”Œlirc-mode-mode2”ah$]”h&]”uh1hëh³hÇh´K\hjáh²hjÝ}”j)j sjß}”jj subj)�”}”(hX¡The 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.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K^hj.ubhì)�”}”(hŒ&This mode is used only for IR receive.”h]”hŒ&This mode is used only for IR receive.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kahj.ubhì)�”}”(hŒÅ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:”h]”(hŒSThe upper 8 bits determine the packet type, and the lower 24 bits the payload. Use ”…”�”}”(hjNh²hh³Nh´Nubj,)�”}”(hŒ``LIRC_VALUE()``”h]”hŒ LIRC_VALUE()”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjNubhŒ) macro to get the payload, and the macro ”…”�”}”(hjNh²hh³Nh´Nubj,)�”}”(hŒ``LIRC_MODE2()``”h]”hŒ LIRC_MODE2()”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjNubhŒ) will give you the type, which is one of:”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kchj.ubhì)�”}”(hŒ``LIRC_MODE2_PULSE``”h]”j,)�”}”(hj‚h]”hŒLIRC_MODE2_PULSE”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khhj.ubj)�”}”(hŒESignifies the presence of IR in microseconds, also known as *flash*. ”h]”hì)�”}”(hŒDSignifies the presence of IR in microseconds, also known as *flash*.”h]”(hŒSignifies absence of IR in microseconds, also known as *gap*. ”h]”hì)�”}”(hŒ=Signifies absence of IR in microseconds, also known as *gap*.”h]”(hŒ7Signifies absence of IR in microseconds, also known as ”…”�”}”(hjÞh²hh³Nh´Nubj¤)�”}”(hŒ*gap*”h]”hŒgap”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÞubhŒ.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KnhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´Knhj.ubhì)�”}”(hŒ``LIRC_MODE2_FREQUENCY``”h]”j,)�”}”(hjh]”hŒLIRC_MODE2_FREQUENCY”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kphj.ubj)�”}”(hŒ™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. ”h]”hì)�”}”(hŒ˜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.”h]”(hŒ9If measurement of the carrier frequency was enabled with ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ$:ref:`lirc_set_measure_carrier_mode`”h]”j›)�”}”(hj)h]”hŒlirc_set_measure_carrier_mode”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”j5Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj�Œlirc_set_measure_carrier_mode”uh1hh³hÇh´KrhjubhŒ; then this packet gives you the carrier frequency in Hertz.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Krhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´Krhj.ubhì)�”}”(hŒ``LIRC_MODE2_TIMEOUT``”h]”j,)�”}”(hjYh]”hŒLIRC_MODE2_TIMEOUT”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kvhj.ubj)�”}”(hŒ¡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. ”h]”hì)�”}”(hŒ 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.”h]”(hŒWhen the timeout set with ”…”�”}”(hjrh²hh³Nh´Nubh)�”}”(hŒ:ref:`lirc_set_rec_timeout`”h]”j›)�”}”(hj|h]”hŒlirc_set_rec_timeout”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhjzubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”jˆŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj�Œlirc_set_rec_timeout”uh1hh³hÇh´KxhjrubhŒk expires due to no IR being detected, this packet will be sent, with the number of microseconds with no IR.”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kxhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´Kxhj.ubhì)�”}”(hŒ``LIRC_MODE2_OVERFLOW``”h]”j,)�”}”(hj¬h]”hŒLIRC_MODE2_OVERFLOW”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K|hj.ubj)�”}”(hŒé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Œè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Œè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.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K~hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´K~hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´K^hjáh²hubhÉ)�”}”(hŒ.. _lirc-mode-pulse:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÔŒlirc-mode-pulse”uh1hÈh´Kƒhjáh²hh³hÇubhì)�”}”(hŒ``LIRC_MODE_PULSE``”h]”j,)�”}”(hjìh]”hŒLIRC_MODE_PULSE”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjêubah}”(h]”jéah ]”h"]”Œlirc-mode-pulse”ah$]”h&]”uh1hëh³hÇh´K…hjáh²hjÝ}”jÿjßsjß}”jéjßsubj)�”}”(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ì)�”}”(hŒoIn 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 ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:ref:`lirc-write`”h]”j›)�”}”(hjh]”hŒ lirc-write”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”jŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj�Œ lirc-write”uh1hh³hÇh´K‡hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K‡hjubhì)�”}”(hŒ™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.”h]”hŒ™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.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KŠhjubhì)�”}”(hŒ#This mode is used only for IR send.”h]”hŒ#This mode is used only for IR send.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KŽhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~h³hÇh´K‡hjáh²hubeh}”(h]”(jÓŒid1”eh ]”h"]”(Œ lirc modes”Œ lirc_modes”eh$]”h&]”uh1hÖhhh²hh³hÇh´K/jÝ}”jbjÉsjß}”jÓjÉsubh×)�”}”(hhh]”(hÜ)�”}”(hŒ%Data types used by LIRC_MODE_SCANCODE”h]”hŒ%Data types used by LIRC_MODE_SCANCODE”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjgh²hh³hÇh´K’ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œlirc_scancode (C struct)”Œc.lirc_scancode”hNt”auh1jxhjgh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ lirc_scancode”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct lirc_scancode”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jšhj–h²hh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j¬hj–h²hh³j«h´KubhŒ desc_name”“”)�”}”(hŒ lirc_scancode”h]”hŒ desc_sig_name”“”)�”}”(hj’h]”hŒ lirc_scancode”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jÃhj¿ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j½hj–h²hh³j«h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j”Œsphinx_line_type”Œ declarator”hj�h²hh³j«h´Kubah}”(h]”j‡ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jŽh³j«h´Khj‹h²hubhŒ desc_content”“”)�”}”(hhh]”hì)�”}”(hŒ>decoded scancode with protocol for use with LIRC_MODE_SCANCODE”h]”hŒ>decoded scancode with protocol for use with LIRC_MODE_SCANCODE”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K“hjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj‹h²hh³j«h´Kubeh}”(h]”h ]”(j~Œstruct”eh"]”h$]”h&]”Œdomain”j~Œobjtype”j Œdesctype”j Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j‰h²hhjgh³Nh´NubhŒ 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 sent”h]”(hì)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K—hjubj)�”}”(hŒzstruct lirc_scancode { __u64 timestamp; __u16 flags; __u16 rc_proto; __u32 keycode; __u64 scancode; };”h]”hŒzstruct lirc_scancode { __u64 timestamp; __u16 flags; __u16 rc_proto; __u32 keycode; __u64 scancode; };”…”�”}”hj;sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K™hjubhì)�”}”(hŒ **Members**”h]”j!)�”}”(hjLh]”hŒMembers”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K¡hjubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒR``timestamp`` Timestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded. ”h]”(hŒterm”“”)�”}”(hŒ ``timestamp``”h]”j,)�”}”(hjqh]”hŒ timestamp”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K˜hjiubhŒ definition”“”)�”}”(hhh]”hì)�”}”(hŒCTimestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded.”h]”hŒCTimestamp in nanoseconds using CLOCK_MONOTONIC when IR was decoded.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K—hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j†h´K˜hjdubjh)�”}”(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,)�”}”(hj­h]”hŒflags”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K›hj§ubjˆ)�”}”(hhh]”hì)�”}”(hŒ�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]”hŒ�should be 0 for transmit. When receiving scancodes, LIRC_SCANCODE_FLAG_TOGGLE or LIRC_SCANCODE_FLAG_REPEAT can be set depending on the protocol”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K™hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÂh´K›hjdubjh)�”}”(hŒ``rc_proto`` see enum rc_proto ”h]”(jn)�”}”(hŒ ``rc_proto``”h]”j,)�”}”(hjçh]”hŒrc_proto”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kœhjáubjˆ)�”}”(hhh]”hì)�”}”(hŒsee enum rc_proto”h]”hŒsee enum rc_proto”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jüh´Kœhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jüh´Kœhjdubjh)�”}”(hŒ;``keycode`` the translated keycode. Set to 0 for transmit. ”h]”(jn)�”}”(hŒ ``keycode``”h]”j,)�”}”(hj h]”hŒkeycode”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K�hjubjˆ)�”}”(hhh]”hì)�”}”(hŒ.the translated keycode. Set to 0 for transmit.”h]”hŒ.the translated keycode. Set to 0 for transmit.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j5h´K�hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j5h´K�hjdubjh)�”}”(hŒ0``scancode`` the scancode received or to be sent”h]”(jn)�”}”(hŒ ``scancode``”h]”j,)�”}”(hjYh]”hŒscancode”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K�hjSubjˆ)�”}”(hhh]”hì)�”}”(hŒ#the scancode received or to be sent”h]”hŒ#the scancode received or to be sent”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kžhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jnh´K�hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjgh²hh³Nh´Nubjy)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j…Œrc_proto (C enum)”Œ c.rc_proto”hNt”auh1jxhjgh²hh³Nh´NubjŠ)�”}”(hhh]”(j�)�”}”(hŒrc_proto”h]”j•)�”}”(hŒ enum rc_proto”h]”(j›)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j§ah"]”h$]”h&]”uh1jšhj¯h²hh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K¤ubj­)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj¯h²hh³jÁh´K¤ubj¾)�”}”(hŒrc_proto”h]”jÄ)�”}”(hj­h]”hŒrc_proto”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÏah"]”h$]”h&]”uh1jÃhjÐubah}”(h]”h ]”(jÖj×eh"]”h$]”h&]”hÅhÆuh1j½hj¯h²hh³jÁh´K¤ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjáˆuh1j”jâjãhj«h²hh³jÁh´K¤ubah}”(h]”j¦ah ]”(jçjèeh"]”h$]”h&]”jìˆjí)jîhuh1jŽh³jÁh´K¤hj¨h²hubjð)�”}”(hhh]”hì)�”}”(hŒthe Remote Controller protocol”h]”hŒthe Remote Controller protocol”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K­hjóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jïhj¨h²hh³jÁh´K¤ubeh}”(h]”h ]”(j~Œenum”eh"]”h$]”h&]”jj~jj jj j‰j‰j‰uh1j‰h²hhjgh³Nh´Nubj)�”}”(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_proto”h]”(hì)�”}”(hŒ **Constants**”h]”j!)�”}”(hj h]”hŒ Constants”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K±hj ubjc)�”}”(hhh]”(jh)�”}”(hŒ(``RC_PROTO_UNKNOWN`` Protocol not known ”h]”(jn)�”}”(hŒ``RC_PROTO_UNKNOWN``”h]”j,)�”}”(hj7 h]”hŒRC_PROTO_UNKNOWN”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K´hj1 ubjˆ)�”}”(hhh]”hì)�”}”(hŒProtocol not known”h]”hŒProtocol not known”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jL h´K´hjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj1 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jL h´K´hj. ubjh)�”}”(hŒ2``RC_PROTO_OTHER`` Protocol known but proprietary ”h]”(jn)�”}”(hŒ``RC_PROTO_OTHER``”h]”j,)�”}”(hjp h]”hŒRC_PROTO_OTHER”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K·hjj ubjˆ)�”}”(hhh]”hì)�”}”(hŒProtocol known but proprietary”h]”hŒProtocol known but proprietary”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j… h´K·hj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j… h´K·hj. ubjh)�”}”(hŒ&``RC_PROTO_RC5`` Philips RC5 protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC5``”h]”j,)�”}”(hj© h]”hŒ RC_PROTO_RC5”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kºhj£ ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC5 protocol”h]”hŒPhilips RC5 protocol”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¾ h´Kºhj¿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj£ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j¾ h´Kºhj. ubjh)�”}”(hŒ2``RC_PROTO_RC5X_20`` Philips RC5x 20 bit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC5X_20``”h]”j,)�”}”(hjâ h]”hŒRC_PROTO_RC5X_20”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´K½hjÜ ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC5x 20 bit protocol”h]”hŒPhilips RC5x 20 bit protocol”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j÷ h´K½hjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j÷ h´K½hj. ubjh)�”}”(hŒ-``RC_PROTO_RC5_SZ`` StreamZap variant of RC5 ”h]”(jn)�”}”(hŒ``RC_PROTO_RC5_SZ``”h]”j,)�”}”(hj h]”hŒRC_PROTO_RC5_SZ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÀhj ubjˆ)�”}”(hhh]”hì)�”}”(hŒStreamZap variant of RC5”h]”hŒStreamZap variant of RC5”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j0 h´KÀhj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j0 h´KÀhj. ubjh)�”}”(hŒ``RC_PROTO_JVC`` JVC protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_JVC``”h]”j,)�”}”(hjT h]”hŒ RC_PROTO_JVC”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÃhjN ubjˆ)�”}”(hhh]”hì)�”}”(hŒ JVC protocol”h]”hŒ JVC protocol”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ji h´KÃhjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjN ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³ji h´KÃhj. ubjh)�”}”(hŒ)``RC_PROTO_SONY12`` Sony 12 bit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_SONY12``”h]”j,)�”}”(hj� h]”hŒRC_PROTO_SONY12”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÆhj‡ ubjˆ)�”}”(hhh]”hì)�”}”(hŒSony 12 bit protocol”h]”hŒSony 12 bit protocol”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¢ h´KÆhj£ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj‡ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j¢ h´KÆhj. ubjh)�”}”(hŒ)``RC_PROTO_SONY15`` Sony 15 bit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_SONY15``”h]”j,)�”}”(hjÆ h]”hŒRC_PROTO_SONY15”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÉhjÀ ubjˆ)�”}”(hhh]”hì)�”}”(hŒSony 15 bit protocol”h]”hŒSony 15 bit protocol”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÛ h´KÉhjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÀ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÛ h´KÉhj. ubjh)�”}”(hŒ)``RC_PROTO_SONY20`` Sony 20 bit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_SONY20``”h]”j,)�”}”(hjÿ h]”hŒRC_PROTO_SONY20”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjý ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÌhjù ubjˆ)�”}”(hhh]”hì)�”}”(hŒSony 20 bit protocol”h]”hŒSony 20 bit protocol”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j h´KÌhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjù ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j h´KÌhj. ubjh)�”}”(hŒ``RC_PROTO_NEC`` NEC protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_NEC``”h]”j,)�”}”(hj8 h]”hŒ RC_PROTO_NEC”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÏhj2 ubjˆ)�”}”(hhh]”hì)�”}”(hŒ NEC protocol”h]”hŒ NEC protocol”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jM h´KÏhjN ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jM h´KÏhj. ubjh)�”}”(hŒ(``RC_PROTO_NECX`` Extended NEC protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_NECX``”h]”j,)�”}”(hjq h]”hŒ RC_PROTO_NECX”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÒhjk ubjˆ)�”}”(hhh]”hì)�”}”(hŒExtended NEC protocol”h]”hŒExtended NEC protocol”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j† h´KÒhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjk ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j† h´KÒhj. ubjh)�”}”(hŒ'``RC_PROTO_NEC32`` NEC 32 bit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_NEC32``”h]”j,)�”}”(hjª h]”hŒRC_PROTO_NEC32”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj¨ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÕhj¤ ubjˆ)�”}”(hhh]”hì)�”}”(hŒNEC 32 bit protocol”h]”hŒNEC 32 bit protocol”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¿ h´KÕhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j¿ h´KÕhj. ubjh)�”}”(hŒ"``RC_PROTO_SANYO`` Sanyo protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_SANYO``”h]”j,)�”}”(hjã h]”hŒRC_PROTO_SANYO”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KØhjÝ ubjˆ)�”}”(hhh]”hì)�”}”(hŒSanyo protocol”h]”hŒSanyo protocol”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jø h´KØhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jø h´KØhj. ubjh)�”}”(hŒ,``RC_PROTO_MCIR2_KBD`` RC6-ish MCE keyboard ”h]”(jn)�”}”(hŒ``RC_PROTO_MCIR2_KBD``”h]”j,)�”}”(hj h]”hŒRC_PROTO_MCIR2_KBD”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÛhj ubjˆ)�”}”(hhh]”hì)�”}”(hŒRC6-ish MCE keyboard”h]”hŒRC6-ish MCE keyboard”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j1 h´KÛhj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j1 h´KÛhj. ubjh)�”}”(hŒ)``RC_PROTO_MCIR2_MSE`` RC6-ish MCE mouse ”h]”(jn)�”}”(hŒ``RC_PROTO_MCIR2_MSE``”h]”j,)�”}”(hjU h]”hŒRC_PROTO_MCIR2_MSE”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjS ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÞhjO ubjˆ)�”}”(hhh]”hì)�”}”(hŒRC6-ish MCE mouse”h]”hŒRC6-ish MCE mouse”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jj h´KÞhjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jj h´KÞhj. ubjh)�”}”(hŒ-``RC_PROTO_RC6_0`` Philips RC6-0-16 protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC6_0``”h]”j,)�”}”(hjŽ h]”hŒRC_PROTO_RC6_0”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Káhjˆ ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC6-0-16 protocol”h]”hŒPhilips RC6-0-16 protocol”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j£ h´Káhj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjˆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j£ h´Káhj. ubjh)�”}”(hŒ2``RC_PROTO_RC6_6A_20`` Philips RC6-6A-20 protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC6_6A_20``”h]”j,)�”}”(hjÇ h]”hŒRC_PROTO_RC6_6A_20”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KähjÁ ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC6-6A-20 protocol”h]”hŒPhilips RC6-6A-20 protocol”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÜ h´KähjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÁ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÜ h´Kähj. ubjh)�”}”(hŒ2``RC_PROTO_RC6_6A_24`` Philips RC6-6A-24 protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC6_6A_24``”h]”j,)�”}”(hj h]”hŒRC_PROTO_RC6_6A_24”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjþ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kçhjú ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC6-6A-24 protocol”h]”hŒPhilips RC6-6A-24 protocol”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j h´Kçhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjú ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j h´Kçhj. ubjh)�”}”(hŒ2``RC_PROTO_RC6_6A_32`` Philips RC6-6A-32 protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC6_6A_32``”h]”j,)�”}”(hj9 h]”hŒRC_PROTO_RC6_6A_32”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj7 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kêhj3 ubjˆ)�”}”(hhh]”hì)�”}”(hŒPhilips RC6-6A-32 protocol”h]”hŒPhilips RC6-6A-32 protocol”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jN h´KêhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj3 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jN h´Kêhj. ubjh)�”}”(hŒ>``RC_PROTO_RC6_MCE`` MCE (Philips RC6-6A-32 subtype) protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_RC6_MCE``”h]”j,)�”}”(hjr h]”hŒRC_PROTO_RC6_MCE”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kíhjl ubjˆ)�”}”(hhh]”hì)�”}”(hŒ(MCE (Philips RC6-6A-32 subtype) protocol”h]”hŒ(MCE (Philips RC6-6A-32 subtype) protocol”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‡ h´Kíhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j‡ h´Kíhj. ubjh)�”}”(hŒ"``RC_PROTO_SHARP`` Sharp protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_SHARP``”h]”j,)�”}”(hj« h]”hŒRC_PROTO_SHARP”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kðhj¥ ubjˆ)�”}”(hhh]”hì)�”}”(hŒSharp protocol”h]”hŒSharp protocol”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÀ h´KðhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÀ h´Kðhj. ubjh)�”}”(hŒ``RC_PROTO_XMP`` XMP protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_XMP``”h]”j,)�”}”(hjä h]”hŒ RC_PROTO_XMP”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KóhjÞ ubjˆ)�”}”(hhh]”hì)�”}”(hŒ XMP protocol”h]”hŒ XMP protocol”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jù h´Kóhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jù h´Kóhj. ubjh)�”}”(hŒ``RC_PROTO_CEC`` CEC protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_CEC``”h]”j,)�”}”(hjh]”hŒ RC_PROTO_CEC”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Köhjubjˆ)�”}”(hhh]”hì)�”}”(hŒ CEC protocol”h]”hŒ CEC protocol”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j2h´Köhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j2h´Köhj. ubjh)�”}”(hŒ$``RC_PROTO_IMON`` iMon Pad protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_IMON``”h]”j,)�”}”(hjVh]”hŒ RC_PROTO_IMON”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KùhjPubjˆ)�”}”(hhh]”hì)�”}”(hŒiMon Pad protocol”h]”hŒiMon Pad protocol”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jkh´Kùhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jkh´Kùhj. ubjh)�”}”(hŒ+``RC_PROTO_RCMM12`` RC-MM protocol 12 bits ”h]”(jn)�”}”(hŒ``RC_PROTO_RCMM12``”h]”j,)�”}”(hj�h]”hŒRC_PROTO_RCMM12”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Kühj‰ubjˆ)�”}”(hhh]”hì)�”}”(hŒRC-MM protocol 12 bits”h]”hŒRC-MM protocol 12 bits”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¤h´Kühj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j¤h´Kühj. ubjh)�”}”(hŒ+``RC_PROTO_RCMM24`` RC-MM protocol 24 bits ”h]”(jn)�”}”(hŒ``RC_PROTO_RCMM24``”h]”j,)�”}”(hjÈh]”hŒRC_PROTO_RCMM24”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´KÿhjÂubjˆ)�”}”(hhh]”hì)�”}”(hŒRC-MM protocol 24 bits”h]”hŒRC-MM protocol 24 bits”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÝh´KÿhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÝh´Kÿhj. ubjh)�”}”(hŒ+``RC_PROTO_RCMM32`` RC-MM protocol 32 bits ”h]”(jn)�”}”(hŒ``RC_PROTO_RCMM32``”h]”j,)�”}”(hjh]”hŒRC_PROTO_RCMM32”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Mhjûubjˆ)�”}”(hhh]”hì)�”}”(hŒRC-MM protocol 32 bits”h]”hŒRC-MM protocol 32 bits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jh´Mhj. ubjh)�”}”(hŒ;``RC_PROTO_XBOX_DVD`` Xbox DVD Movie Playback Kit protocol ”h]”(jn)�”}”(hŒ``RC_PROTO_XBOX_DVD``”h]”j,)�”}”(hj:h]”hŒRC_PROTO_XBOX_DVD”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Mhj4ubjˆ)�”}”(hhh]”hì)�”}”(hŒ$Xbox DVD Movie Playback Kit protocol”h]”hŒ$Xbox DVD Movie Playback Kit protocol”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jOh´MhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jOh´Mhj. ubjh)�”}”(hŒ/``RC_PROTO_MAX`` Maximum value of enum rc_proto”h]”(jn)�”}”(hŒ``RC_PROTO_MAX``”h]”j,)�”}”(hjsh]”hŒ RC_PROTO_MAX”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Mhjmubjˆ)�”}”(hhh]”hì)�”}”(hŒMaximum value of enum rc_proto”h]”hŒMaximum value of enum rc_proto”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œp/var/lib/git/docbuild/linux/Documentation/userspace-api/media/rc/lirc-dev-intro:148: ./include/uapi/linux/lirc.h”h´Mhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jˆh´Mhj. ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjgh²hh³Nh´Nubeh}”(h]”Œ%data-types-used-by-lirc-mode-scancode”ah ]”h"]”Œ%data types used by lirc_mode_scancode”ah$]”h&]”uh1hÖhhh²hh³hÇh´K’ubh×)�”}”(hhh]”(hÜ)�”}”(hŒBPF based IR decoder”h]”hŒBPF based IR decoder”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj¼h²hh³hÇh´K™ubhì)�”}”(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]”(hŒ4The kernel has support for decoding the most common ”…”�”}”(hjÍh²hh³Nh´Nubh)�”}”(hŒ2:ref:`IR protocols `”h]”j›)�”}”(hj×h]”hŒ IR protocols”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”jãŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj�Œremote_controllers_protocols”uh1hh³hÇh´K›hjÍubhŒÌ, 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.”…”�”}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K›hj¼h²hubhì)�”}”(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]”(hŒFirst, using the ”…”�”}”(hjÿh²hh³Nh´NubjS)�”}”(hŒ `bpf(2)`_”h]”hŒbpf(2)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œbpf(2)”jdŒ/http://man7.org/linux/man-pages/man2/bpf.2.html”uh1jRhjÿŒresolved”KubhŒ syscall with the ”…”�”}”(hjÿh²hh³Nh´Nubj,)�”}”(hŒ``BPF_LOAD_PROG``”h]”hŒ BPF_LOAD_PROG”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubhŒ* argument, program must be loaded of type ”…”�”}”(hjÿh²hh³Nh´Nubj,)�”}”(hŒ``BPF_PROG_TYPE_LIRC_MODE2``”h]”hŒBPF_PROG_TYPE_LIRC_MODE2”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubhŒÆ. 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 ”…”�”}”(hjÿh²hh³Nh´Nubh)�”}”(hŒ(:ref:`LIRC_MODE_MODE2 `”h]”j›)�”}”(hjCh]”hŒLIRC_MODE_MODE2”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”(j}Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jšhjAubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŠŒ refdomain”jOŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj�Œlirc-mode-mode2”uh1hh³hÇh´K¡hjÿubhŒ_ value. When the program has decoded the scancode, it can be submitted using the BPF functions ”…”�”}”(hjÿh²hh³Nh´Nubj,)�”}”(hŒ``bpf_rc_keydown()``”h]”hŒbpf_rc_keydown()”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubhŒ or ”…”�”}”(hjÿh²hh³Nh´Nubj,)�”}”(hŒ``bpf_rc_repeat()``”h]”hŒbpf_rc_repeat()”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubhŒ3. Mouse or pointer movements can be reported using ”…”�”}”(hjÿh²hh³Nh´Nubj,)�”}”(hŒ``bpf_rc_pointer_rel()``”h]”hŒbpf_rc_pointer_rel()”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hjÿubhŒ.”…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K¡hj¼h²hubhì)�”}”(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 ”…”�”}”(hj¡h²hh³Nh´Nubj,)�”}”(hŒ``BPF_PROG_TYPE_LIRC_MODE2``”h]”hŒBPF_PROG_TYPE_LIRC_MODE2”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj¡ubhŒ> BPF program, it can be attached to the LIRC device using the ”…”�”}”(hj¡h²hh³Nh´NubjS)�”}”(hŒ `bpf(2)`_”h]”hŒbpf(2)”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œbpf(2)”jdjuh1jRhj¡jKubhŒb syscall. The target must be the file descriptor for the LIRC device, and the attach type must be ”…”�”}”(hj¡h²hh³Nh´Nubj,)�”}”(hŒ``BPF_LIRC_MODE2``”h]”hŒBPF_LIRC_MODE2”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j+hj¡ubhŒQ. No more than 64 BPF programs can be attached to a single LIRC device at a time.”…”�”}”(hj¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kªhj¼h²hubhÉ)�”}”(hŒ;.. _bpf(2): http://man7.org/linux/man-pages/man2/bpf.2.html”h]”h}”(h]”Œbpf-2”ah ]”h"]”Œbpf(2)”ah$]”h&]”jdjuh1hÈh´K°hj¼h²hh³hÇjsKubeh}”(h]”Œbpf-based-ir-decoder”ah ]”h"]”Œbpf based ir decoder”ah$]”h&]”uh1hÖhhh²hh³hÇh´K™ubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÛNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œbpf(2)”]”(jj»esŒrefids”}”(hÕ]”hÊajÓ]”jÉaj ]”jaj]”j aj#]”jaj]”j ajé]”jßauŒnameids”}”(jÚhÕjÙjÖjojljbjÓjaj^jj j%jj>j#j)jjÿjéj¹j¶jøjõjðjíuŒ nametypes”}”(jÚˆjÙ‰joˆjbˆja‰jˆj%ˆj>ˆj)ˆjÿˆj¹‰jø‰jðˆuh}”(hÕhØjÖhØjljfjÓjáj^jáj j'jj'j#j'jjjéjêj¶jgj‡j�j¦j«jõj¼jíjçuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j,Ks…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hì)�”}”(hhh]”hŒ4Hyperlink target "lirc-dev-intro" is not referenced.”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ0Hyperlink target "lirc-modes" is not referenced.”…”�”}”hj«sbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj¨ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j¥Œsource”hÇŒline”K+uh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ8Hyperlink target "lirc-mode-scancode" is not referenced.”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjÂubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j¥Œsource”hÇŒline”K4uh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ?Hyperlink target "lirc-scancode-flag-toggle" is not referenced.”…”�”}”hjßsbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjÜubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j¥Œsource”hÇŒline”K5uh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ?Hyperlink target "lirc-scancode-flag-repeat" is not referenced.”…”�”}”hjùsbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjöubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j¥Œsource”hÇŒline”K6uh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ5Hyperlink target "lirc-mode-mode2" is not referenced.”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j¥Œsource”hÇŒline”KZuh1j‹ubjŒ)�”}”(hhh]”hì)�”}”(hhh]”hŒ5Hyperlink target "lirc-mode-pulse" is not referenced.”…”�”}”hj-sbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj*ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”K•_Œtype”j¥Œsource”hÇŒline”Kƒuh1j‹ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.