€•YœŒ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”Œ/translations/zh_CN/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/hid/hiddev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ0Care and feeding of your Human Interface Devices”h]”hŒ0Care and feeding of your Human Interface Devices”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ8/var/lib/git/docbuild/linux/Documentation/hid/hiddev.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hXLIn addition to the normal input type HID devices, USB also uses the human interface device protocols for things that are not really human interfaces, but have similar sorts of communication needs. The two big examples for this are power devices (especially uninterruptible power supplies) and monitor control on higher end monitors.”h]”hXLIn addition to the normal input type HID devices, USB also uses the human interface device protocols for things that are not really human interfaces, but have similar sorts of communication needs. The two big examples for this are power devices (especially uninterruptible power supplies) and monitor control on higher end monitors.”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hXkTo support these disparate requirements, the Linux USB system provides HID events to two separate interfaces: * the input subsystem, which converts HID events into normal input device interfaces (such as keyboard, mouse and joystick) and a normalised event interface - see Documentation/input/input.rst * the hiddev interface, which provides fairly raw HID events”h]”hXkTo support these disparate requirements, the Linux USB system provides HID events to two separate interfaces: * the input subsystem, which converts HID events into normal input device interfaces (such as keyboard, mouse and joystick) and a normalised event interface - see Documentation/input/input.rst * the hiddev interface, which provides fairly raw HID events”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒTThe data flow for a HID event produced by a device is something like the following::”h]”hŒSThe data flow for a HID event produced by a device is something like the following:”…”�”}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhŒ literal_block”“”)�”}”(hŒÆusb.c ---> hid-core.c ----> hid-input.c ----> [keyboard/mouse/joystick/event] | | --> hiddev.c ----> POWER / MONITOR CONTROL”h]”hŒÆusb.c ---> hid-core.c ----> hid-input.c ----> [keyboard/mouse/joystick/event] | | --> hiddev.c ----> POWER / MONITOR CONTROL”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´KhhËh²hubhÝ)�”}”(hŒšIn addition, other subsystems (apart from USB) can potentially feed events into the input subsystem, but these have no effect on the HID device interface.”h]”hŒšIn addition, other subsystems (apart from USB) can potentially feed events into the input subsystem, but these have no effect on the HID device interface.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒUsing the HID Device Interface”h]”hŒUsing the HID Device Interface”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj0h²hh³hÊh´K"ubhÝ)�”}”(hŒ­The hiddev interface is a char interface using the normal USB major, with the minor numbers starting at 96 and finishing at 111. Therefore, you need the following commands::”h]”hŒ¬The hiddev interface is a char interface using the normal USB major, with the minor numbers starting at 96 and finishing at 111. Therefore, you need the following commands:”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K$hj0h²hubj )�”}”(hXmknod /dev/usb/hiddev0 c 180 96 mknod /dev/usb/hiddev1 c 180 97 mknod /dev/usb/hiddev2 c 180 98 mknod /dev/usb/hiddev3 c 180 99 mknod /dev/usb/hiddev4 c 180 100 mknod /dev/usb/hiddev5 c 180 101 mknod /dev/usb/hiddev6 c 180 102 mknod /dev/usb/hiddev7 c 180 103 mknod /dev/usb/hiddev8 c 180 104 mknod /dev/usb/hiddev9 c 180 105 mknod /dev/usb/hiddev10 c 180 106 mknod /dev/usb/hiddev11 c 180 107 mknod /dev/usb/hiddev12 c 180 108 mknod /dev/usb/hiddev13 c 180 109 mknod /dev/usb/hiddev14 c 180 110 mknod /dev/usb/hiddev15 c 180 111”h]”hXmknod /dev/usb/hiddev0 c 180 96 mknod /dev/usb/hiddev1 c 180 97 mknod /dev/usb/hiddev2 c 180 98 mknod /dev/usb/hiddev3 c 180 99 mknod /dev/usb/hiddev4 c 180 100 mknod /dev/usb/hiddev5 c 180 101 mknod /dev/usb/hiddev6 c 180 102 mknod /dev/usb/hiddev7 c 180 103 mknod /dev/usb/hiddev8 c 180 104 mknod /dev/usb/hiddev9 c 180 105 mknod /dev/usb/hiddev10 c 180 106 mknod /dev/usb/hiddev11 c 180 107 mknod /dev/usb/hiddev12 c 180 108 mknod /dev/usb/hiddev13 c 180 109 mknod /dev/usb/hiddev14 c 180 110 mknod /dev/usb/hiddev15 c 180 111”…”�”}”hjOsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jh³hÊh´K(hj0h²hubhÝ)�”}”(hŒvSo you point your hiddev compliant user-space program at the correct interface for your device, and it all just works.”h]”hŒvSo you point your hiddev compliant user-space program at the correct interface for your device, and it all just works.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K9hj0h²hubhÝ)�”}”(hŒkAssuming that you have a hiddev compliant user-space program, of course. If you need to write one, read on.”h]”hŒkAssuming that you have a hiddev compliant user-space program, of course. If you need to write one, read on.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K, along with some other useful #defines and structures. The HID usage identifier is a composite of the HID usage page shifted to the 16 high order bits ORed with the usage code. The behavior of the read() function can be modified using the HIDIOCSFLAG ioctl() described below.”h]”hX·containing the HID usage identifier for the status that changed, and the value that it was changed to. Note that the structure is defined within , along with some other useful #defines and structures. The HID usage identifier is a composite of the HID usage page shifted to the 16 high order bits ORed with the usage code. The behavior of the read() function can be modified using the HIDIOCSFLAG ioctl() described below.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K]hjäh²hubeh}”(h]”Œread”ah ]”h"]”Œread():”ah$]”h&]”uh1hµhj�h²hh³hÊh´KOubh¶)�”}”(hhh]”(h»)�”}”(hŒioctl():”h]”hŒioctl():”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj'h²hh³hÊh´KgubhÝ)�”}”(hŒ>This is the control interface. There are a number of controls:”h]”hŒ>This is the control interface. There are a number of controls:”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kihj'h²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒNHIDIOCGVERSION - int (read) Gets the version code out of the hiddev driver. ”h]”(hŒterm”“”)�”}”(hŒHIDIOCGVERSION”h]”hŒHIDIOCGVERSION”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´KnhjMubhŒ definition”“”)�”}”(hhh]”(hŒ block_quote”“”)�”}”(hŒ - int (read) ”h]”hŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒ int (read) ”h]”hÝ)�”}”(hŒ int (read)”h]”hŒ int (read)”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Klhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjnubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jlh³hÊh´Klhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³hÊh´KlhjcubhÝ)�”}”(hŒ/Gets the version code out of the hiddev driver.”h]”hŒ/Gets the version code out of the hiddev driver.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Knhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jahjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KnhjHubjL)�”}”(hŒHIDIOCAPPLICATION - (none) ”h]”(jR)�”}”(hŒHIDIOCAPPLICATION”h]”hŒHIDIOCAPPLICATION”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kqhj³ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ(none) ”h]”hÝ)�”}”(hŒ(none)”h]”hŒ(none)”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KqhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjÈubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KqhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KqhjHh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³hÊh´NubhÝ)�”}”(hXëThis ioctl call returns the HID application usage associated with the HID device. The third argument to ioctl() specifies which application index to get. This is useful when the device has more than one application collection. If the index is invalid (greater or equal to the number of application collections this device has) the ioctl returns -1. You can find out beforehand how many application collections the device has from the num_applications field from the hiddev_devinfo structure.”h]”hXëThis ioctl call returns the HID application usage associated with the HID device. The third argument to ioctl() specifies which application index to get. This is useful when the device has more than one application collection. If the index is invalid (greater or equal to the number of application collections this device has) the ioctl returns -1. You can find out beforehand how many application collections the device has from the num_applications field from the hiddev_devinfo structure.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kshj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒCHIDIOCGCOLLECTIONINFO - struct hiddev_collection_info (read/write) ”h]”(jR)�”}”(hŒHIDIOCGCOLLECTIONINFO”h]”hŒHIDIOCGCOLLECTIONINFO”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K}hj ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ+struct hiddev_collection_info (read/write) ”h]”hÝ)�”}”(hŒ*struct hiddev_collection_info (read/write)”h]”hŒ*struct hiddev_collection_info (read/write)”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K}hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj!ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K}hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K}hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hXÇThis returns a superset of the information above, providing not only application collections, but all the collections the device has. It also returns the level the collection lives in the hierarchy. The user passes in a hiddev_collection_info struct with the index field set to the index that should be returned. The ioctl fills in the other fields. If the index is larger than the last collection index, the ioctl returns -1 and sets errno to -EINVAL.”h]”hXÇThis returns a superset of the information above, providing not only application collections, but all the collections the device has. It also returns the level the collection lives in the hierarchy. The user passes in a hiddev_collection_info struct with the index field set to the index that should be returned. The ioctl fills in the other fields. If the index is larger than the last collection index, the ioctl returns -1 and sets errno to -EINVAL.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ.HIDIOCGDEVINFO - struct hiddev_devinfo (read) ”h]”(jR)�”}”(hŒHIDIOCGDEVINFO”h]”hŒHIDIOCGDEVINFO”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kˆhjeubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒstruct hiddev_devinfo (read) ”h]”hÝ)�”}”(hŒstruct hiddev_devinfo (read)”h]”hŒstruct hiddev_devinfo (read)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kˆhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjzubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´Kˆhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´Kˆhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ;Gets a hiddev_devinfo structure which describes the device.”h]”hŒ;Gets a hiddev_devinfo structure which describes the device.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KŠhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ=HIDIOCGSTRING - struct hiddev_string_descriptor (read/write) ”h]”(jR)�”}”(hŒ HIDIOCGSTRING”h]”hŒ HIDIOCGSTRING”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K�hj¾ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ-struct hiddev_string_descriptor (read/write) ”h]”hÝ)�”}”(hŒ,struct hiddev_string_descriptor (read/write)”h]”hŒ,struct hiddev_string_descriptor (read/write)”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K�hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjÓubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K�hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K�hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ„Gets a string descriptor from the device. The caller must fill in the "index" field to indicate which descriptor should be returned.”h]”hŒˆGets a string descriptor from the device. The caller must fill in the “indexâ€� field to indicate which descriptor should be returned.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K�hj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒHIDIOCINITREPORT - (none) ”h]”(jR)�”}”(hŒHIDIOCINITREPORT”h]”hŒHIDIOCINITREPORT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K“hjubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ(none) ”h]”hÝ)�”}”(hŒ(none)”h]”hŒ(none)”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K“hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj,ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K“hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K“hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hXjInstructs the kernel to retrieve all input and feature report values from the device. At this point, all the usage structures will contain current values for the device, and will maintain it as the device changes. Note that the use of this ioctl is unnecessary in general, since later kernels automatically initialize the reports from the device at attach time.”h]”hXjInstructs the kernel to retrieve all input and feature report values from the device. At this point, all the usage structures will contain current values for the device, and will maintain it as the device changes. Note that the use of this ioctl is unnecessary in general, since later kernels automatically initialize the reports from the device at attach time.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K•hj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ'HIDIOCGNAME - string (variable length) ”h]”(jR)�”}”(hŒ HIDIOCGNAME”h]”hŒ HIDIOCGNAME”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K�hjpubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒstring (variable length) ”h]”hÝ)�”}”(hŒstring (variable length)”h]”hŒstring (variable length)”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K�hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj…ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K�hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K�hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒGets the device name”h]”hŒGets the device name”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KŸhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ2HIDIOCGREPORT - struct hiddev_report_info (write) ”h]”(jR)�”}”(hŒ HIDIOCGREPORT”h]”hŒ HIDIOCGREPORT”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K¢hjÉubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ"struct hiddev_report_info (write) ”h]”hÝ)�”}”(hŒ!struct hiddev_report_info (write)”h]”hŒ!struct hiddev_report_info (write)”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¢hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjÞubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K¢hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K¢hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ—Instructs the kernel to get a feature or input report from the device, in order to selectively update the usage structures (in contrast to INITREPORT).”h]”hŒ—Instructs the kernel to get a feature or input report from the device, in order to selectively update the usage structures (in contrast to INITREPORT).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¤hj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ2HIDIOCSREPORT - struct hiddev_report_info (write) ”h]”(jR)�”}”(hŒ HIDIOCSREPORT”h]”hŒ HIDIOCSREPORT”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K©hj"ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ"struct hiddev_report_info (write) ”h]”hÝ)�”}”(hŒ!struct hiddev_report_info (write)”h]”hŒ!struct hiddev_report_info (write)”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K©hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj7ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K©hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K©hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒâInstructs the kernel to send a report to the device. This report can be filled in by the user through HIDIOCSUSAGE calls (below) to fill in individual usage values in the report before sending the report in full to the device.”h]”hŒâInstructs the kernel to send a report to the device. This report can be filled in by the user through HIDIOCSUSAGE calls (below) to fill in individual usage values in the report before sending the report in full to the device.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K«hj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ;HIDIOCGREPORTINFO - struct hiddev_report_info (read/write) ”h]”(jR)�”}”(hŒHIDIOCGREPORTINFO”h]”hŒHIDIOCGREPORTINFO”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K±hj{ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ'struct hiddev_report_info (read/write) ”h]”hÝ)�”}”(hŒ&struct hiddev_report_info (read/write)”h]”hŒ&struct hiddev_report_info (read/write)”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K±hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj�ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K±hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K±hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hX‰Fills in a hiddev_report_info structure for the user. The report is looked up by type (input, output or feature) and id, so these fields must be filled in by the user. The ID can be absolute -- the actual report id as reported by the device -- or relative -- HID_REPORT_ID_FIRST for the first report, and (HID_REPORT_ID_NEXT | report_id) for the next report after report_id. Without a priori information about report ids, the right way to use this ioctl is to use the relative IDs above to enumerate the valid IDs. The ioctl returns non-zero when there is no more next ID. The real report ID is filled into the returned hiddev_report_info structure.”h]”hX‰Fills in a hiddev_report_info structure for the user. The report is looked up by type (input, output or feature) and id, so these fields must be filled in by the user. The ID can be absolute -- the actual report id as reported by the device -- or relative -- HID_REPORT_ID_FIRST for the first report, and (HID_REPORT_ID_NEXT | report_id) for the next report after report_id. Without a priori information about report ids, the right way to use this ioctl is to use the relative IDs above to enumerate the valid IDs. The ioctl returns non-zero when there is no more next ID. The real report ID is filled into the returned hiddev_report_info structure.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K³hj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ9HIDIOCGFIELDINFO - struct hiddev_field_info (read/write) ”h]”(jR)�”}”(hŒHIDIOCGFIELDINFO”h]”hŒHIDIOCGFIELDINFO”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´K¿hjÔubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ&struct hiddev_field_info (read/write) ”h]”hÝ)�”}”(hŒ%struct hiddev_field_info (read/write)”h]”hŒ%struct hiddev_field_info (read/write)”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¿hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjéubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´K¿hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´K¿hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hX3Returns the field information associated with a report in a hiddev_field_info structure. The user must fill in report_id and report_type in this structure, as above. The field_index should also be filled in, which should be a number from 0 and maxfield-1, as returned from a previous HIDIOCGREPORTINFO call.”h]”hX3Returns the field information associated with a report in a hiddev_field_info structure. The user must fill in report_id and report_type in this structure, as above. The field_index should also be filled in, which should be a number from 0 and maxfield-1, as returned from a previous HIDIOCGREPORTINFO call.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÁhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ4HIDIOCGUCODE - struct hiddev_usage_ref (read/write) ”h]”(jR)�”}”(hŒ HIDIOCGUCODE”h]”hŒ HIDIOCGUCODE”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´KÈhj-ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ%struct hiddev_usage_ref (read/write) ”h]”hÝ)�”}”(hŒ$struct hiddev_usage_ref (read/write)”h]”hŒ$struct hiddev_usage_ref (read/write)”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÈhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjBubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KÈhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KÈhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ³Returns the usage_code in a hiddev_usage_ref structure, given that its report type, report id, field index, and index within the field have already been filled into the structure.”h]”hŒ³Returns the usage_code in a hiddev_usage_ref structure, given that its report type, report id, field index, and index within the field have already been filled into the structure.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÊhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ4HIDIOCGUSAGE - struct hiddev_usage_ref (read/write) ”h]”(jR)�”}”(hŒ HIDIOCGUSAGE”h]”hŒ HIDIOCGUSAGE”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´KÏhj†ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ%struct hiddev_usage_ref (read/write) ”h]”hÝ)�”}”(hŒ$struct hiddev_usage_ref (read/write)”h]”hŒ$struct hiddev_usage_ref (read/write)”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÏhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj›ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KÏhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KÏhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hXdReturns the value of a usage in a hiddev_usage_ref structure. The usage to be retrieved can be specified as above, or the user can choose to fill in the report_type field and specify the report_id as HID_REPORT_ID_UNKNOWN. In this case, the hiddev_usage_ref will be filled in with the report and field information associated with this usage if it is found.”h]”hXdReturns the value of a usage in a hiddev_usage_ref structure. The usage to be retrieved can be specified as above, or the user can choose to fill in the report_type field and specify the report_id as HID_REPORT_ID_UNKNOWN. In this case, the hiddev_usage_ref will be filled in with the report and field information associated with this usage if it is found.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÑhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ/HIDIOCSUSAGE - struct hiddev_usage_ref (write) ”h]”(jR)�”}”(hŒ HIDIOCSUSAGE”h]”hŒ HIDIOCSUSAGE”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´KÙhjßubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ struct hiddev_usage_ref (write) ”h]”hÝ)�”}”(hŒstruct hiddev_usage_ref (write)”h]”hŒstruct hiddev_usage_ref (write)”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÙhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjôubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KÙhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KÙhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ•Sets the value of a usage in an output report. The user fills in the hiddev_usage_ref structure as above, but additionally fills in the value field.”h]”hŒ•Sets the value of a usage in an output report. The user fills in the hiddev_usage_ref structure as above, but additionally fills in the value field.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÛhj'h²hubjG)�”}”(hhh]”jL)�”}”(hŒ8HIDIOGCOLLECTIONINDEX - struct hiddev_usage_ref (write) ”h]”(jR)�”}”(hŒHIDIOGCOLLECTIONINDEX”h]”hŒHIDIOGCOLLECTIONINDEX”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kàhj8ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ struct hiddev_usage_ref (write) ”h]”hÝ)�”}”(hŒstruct hiddev_usage_ref (write)”h]”hŒstruct hiddev_usage_ref (write)”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KàhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjMubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KàhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´Kàhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ{Returns the collection index associated with this usage. This indicates where in the collection hierarchy this usage sits.”h]”hŒ{Returns the collection index associated with this usage. This indicates where in the collection hierarchy this usage sits.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kâhj'h²hubjG)�”}”(hhh]”(jL)�”}”(hŒHIDIOCGFLAG - int (read)”h]”(jR)�”}”(hŒ HIDIOCGFLAG”h]”hŒ HIDIOCGFLAG”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kåhj‘ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ int (read)”h]”hÝ)�”}”(hj«h]”hŒ int (read)”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kæhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj¦ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´Kæhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KåhjŽubjL)�”}”(hŒHIDIOCSFLAG - int (write) ”h]”(jR)�”}”(hŒ HIDIOCSFLAG”h]”hŒ HIDIOCSFLAG”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´KèhjÒubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hŒ int (write) ”h]”hÝ)�”}”(hŒ int (write)”h]”hŒ int (write)”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kèhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjçubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´Kèhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´KèhjŽh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jFhj'h²hh³Nh´NubhÝ)�”}”(hŒ�These operations respectively inspect and replace the mode flags that influence the read() call above. The flags are as follows:”h]”hŒ�These operations respectively inspect and replace the mode flags that influence the read() call above. The flags are as follows:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kêhj'h²hubjg)�”}”(hX§HIDDEV_FLAG_UREF - read() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity. HIDDEV_FLAG_REPORT - This flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but with field_index set to FIELD_INDEX_NONE. This serves as additional notification when the device has sent a report.”h]”jG)�”}”(hhh]”(jL)�”}”(hXHIDDEV_FLAG_UREF - read() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity. ”h]”(jR)�”}”(hŒHIDDEV_FLAG_UREF”h]”hŒHIDDEV_FLAG_UREF”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kóhj/ubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hXread() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity. ”h]”hÝ)�”}”(hXread() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity.”h]”hXread() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KîhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhjDubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´KîhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´Kóhj,ubjL)�”}”(hXpHIDDEV_FLAG_REPORT - This flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but with field_index set to FIELD_INDEX_NONE. This serves as additional notification when the device has sent a report.”h]”(jR)�”}”(hŒHIDDEV_FLAG_REPORT”h]”hŒHIDDEV_FLAG_REPORT”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQh³hÊh´Kúhjqubjb)�”}”(hhh]”jm)�”}”(hhh]”jr)�”}”(hXQThis flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but with field_index set to FIELD_INDEX_NONE. This serves as additional notification when the device has sent a report.”h]”hÝ)�”}”(hXQThis flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but with field_index set to FIELD_INDEX_NONE. This serves as additional notification when the device has sent a report.”h]”hXQThis flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but with field_index set to FIELD_INDEX_NONE. This serves as additional notification when the device has sent a report.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Köhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jqhj†ubah}”(h]”h ]”h"]”h$]”h&]”j‘j’uh1jlh³hÊh´Köhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jKh³hÊh´Kúhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jFhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³hÊh´Kíhj'h²hubeh}”(h]”Œioctl”ah ]”h"]”Œioctl():”ah$]”h&]”uh1hµhj�h²hh³hÊh´Kgubeh}”(h]”Œthe-hiddev-api”ah ]”h"]”Œthe hiddev api”ah$]”h&]”uh1hµhh·h²hh³hÊh´KAubeh}”(h]”Œ0care-and-feeding-of-your-human-interface-devices”ah ]”h"]”Œ0care and feeding of your human interface devices”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(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”}”Œrefids”}”Œnameids”}”(jÔjÑj-j*j~j{jÌjÉj$j!jÄjÁuŒ nametypes”}”(jÔ‰j-‰j~‰j̉j$‰jĉuh}”(jÑh·j*hËj{j0jÉ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”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.