€•sŒ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/hid-sensor”Œ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/hid-sensor”Œ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/hid-sensor”Œ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/hid-sensor”Œ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/hid-sensor”Œ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/hid-sensor”Œ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/hid-sensor”Œ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ŒHID Sensors Framework”h]”hŒHID Sensors Framework”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œhjth²hubhÌ)�”}”(hŒäSo if any driver with this name is inserted, then the probe routine for that function will be called. So an accelerometer processing driver can register with this name and will be probed if there is an accelerometer-3D detected.”h]”hŒäSo if any driver with this name is inserted, then the probe routine for that function will be called. So an accelerometer processing driver can register with this name and will be probed if there is an accelerometer-3D detected.”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hjth²hubhÌ)�”}”(hŒØThe core driver provides a set of APIs which can be used by the processing drivers to register and get events for that usage id. Also it provides parsing functions, which get and set each input/feature/output report.”h]”hŒØThe core driver provides a set of APIs which can be used by the processing drivers to register and get events for that usage id. Also it provides parsing functions, which get and set each input/feature/output report.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KDhjth²hubeh}”(h]”Œ core-driver”ah ]”h"]”Œ core driver”ah$]”h&]”uh1hµhjh²hh³hÊh´K7ubh¶)�”}”(hhh]”(h»)�”}”(hŒ2Individual sensor processing part (sensor drivers)”h]”hŒ2Individual sensor processing part (sensor drivers)”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÓh²hh³hÊh´KIubhÌ)�”}”(hŒîThe processing driver will use an interface provided by the core driver to parse the report and get the indexes of the fields and also can get events. This driver can use IIO interface to use the standard ABI defined for a type of sensor.”h]”hŒîThe processing driver will use an interface provided by the core driver to parse the report and get the indexes of the fields and also can get events. This driver can use IIO interface to use the standard ABI defined for a type of sensor.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhjÓh²hubeh}”(h]”Œ0individual-sensor-processing-part-sensor-drivers”ah ]”h"]”Œ2individual sensor processing part (sensor drivers)”ah$]”h&]”uh1hµhjh²hh³hÊh´KIubeh}”(h]”Œimplementation”ah ]”h"]”Œimplementation”ah$]”h&]”uh1hµhh·h²hh³hÊh´K+ubh¶)�”}”(hhh]”(h»)�”}”(hŒCore driver Interface”h]”hŒCore driver Interface”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KQubhÌ)�”}”(hŒCallback structure::”h]”hŒCallback structure:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KShjh²hubhø)�”}”(hX�Each processing driver can use this structure to set some callbacks. int (*suspend)(..): Callback when HID suspend is received int (*resume)(..): Callback when HID resume is received int (*capture_sample)(..): Capture a sample for one of its data fields int (*send_event)(..): One complete event is received which can have multiple data fields.”h]”hX�Each processing driver can use this structure to set some callbacks. int (*suspend)(..): Callback when HID suspend is received int (*resume)(..): Callback when HID resume is received int (*capture_sample)(..): Capture a sample for one of its data fields int (*send_event)(..): One complete event is received which can have multiple data fields.”…”�”}”hj!sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´KUhjh²hubhÌ)�”}”(hŒRegistration functions::”h]”hŒRegistration functions:”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K\hjh²hubhø)�”}”(hŒ±int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id, struct hid_sensor_hub_callbacks *usage_callback):”h]”hŒ±int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id, struct hid_sensor_hub_callbacks *usage_callback):”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´K^hjh²hubhÌ)�”}”(hŒURegisters callbacks for a usage id. The callback functions are not allowed to sleep::”h]”hŒTRegisters callbacks for a usage id. The callback functions are not allowed to sleep:”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kbhjh²hubhø)�”}”(hŒhint sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id):”h]”hŒhint sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id):”…”�”}”hjYsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´Kfhjh²hubhÌ)�”}”(hŒ!Removes callbacks for a usage id.”h]”hŒ!Removes callbacks for a usage id.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihjh²hubhÌ)�”}”(hŒParsing function::”h]”hŒParsing function:”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhjh²hubhø)�”}”(hŒåint sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, u8 type, u32 usage_id, u32 attr_usage_id, struct hid_sensor_hub_attribute_info *info);”h]”hŒåint sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, u8 type, u32 usage_id, u32 attr_usage_id, struct hid_sensor_hub_attribute_info *info);”…”�”}”hjƒsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´Knhjh²hubhÌ)�”}”(hXA processing driver can look for some field of interest and check if it exists in a report descriptor. If it exists it will store necessary information so that fields can be set or get individually. These indexes avoid searching every time and getting field index to get or set.”h]”hXA processing driver can look for some field of interest and check if it exists in a report descriptor. If it exists it will store necessary information so that fields can be set or get individually. These indexes avoid searching every time and getting field index to get or set.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kshjh²hubhÌ)�”}”(hŒSet Feature report::”h]”hŒSet Feature report:”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhjh²hubhø)�”}”(hŒ�int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 value);”h]”hŒ�int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 value);”…”�”}”hj­sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´K{hjh²hubhÌ)�”}”(hŒïThis interface is used to set a value for a field in feature report. For example if there is a field report_interval, which is parsed by a call to sensor_hub_input_get_attribute_info before, then it can directly set that individual field::”h]”hŒîThis interface is used to set a value for a field in feature report. For example if there is a field report_interval, which is parsed by a call to sensor_hub_input_get_attribute_info before, then it can directly set that individual field:”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hjh²hubhø)�”}”(hŒ‚int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 *value);”h]”hŒ‚int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 *value);”…”�”}”hjÉsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´K„hjh²hubhÌ)�”}”(hŒóThis interface is used to get a value for a field in input report. For example if there is a field report_interval, which is parsed by a call to sensor_hub_input_get_attribute_info before, then it can directly get that individual field value::”h]”hŒòThis interface is used to get a value for a field in input report. For example if there is a field report_interval, which is parsed by a call to sensor_hub_input_get_attribute_info before, then it can directly get that individual field value:”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‡hjh²hubhø)�”}”(hŒ©int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, u32 usage_id, u32 attr_usage_id, u32 report_id);”h]”hŒ©int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, u32 usage_id, u32 attr_usage_id, u32 report_id);”…”�”}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´K�hjh²hubhÌ)�”}”(hXpThis is used to get a particular field value through input reports. For example accelerometer wants to poll X axis value, then it can call this function with the usage id of X axis. HID sensors can provide events, so this is not necessary to poll for any field. If there is some new sample, the core driver will call registered callback function to process the sample.”h]”hXpThis is used to get a particular field value through input reports. For example accelerometer wants to poll X axis value, then it can call this function with the usage id of X axis. HID sensors can provide events, so this is not necessary to poll for any field. If there is some new sample, the core driver will call registered callback function to process the sample.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‘hjh²hubhŒ transition”“”)�”}”(hŒ ----------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´K˜hjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒHID Custom and generic Sensors”h]”hŒHID Custom and generic Sensors”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´K›ubhÌ)�”}”(hX«HID Sensor specification defines two special sensor usage types. Since they don't represent a standard sensor, it is not possible to define using Linux IIO type interfaces. The purpose of these sensors is to extend the functionality or provide a way to obfuscate the data being communicated by a sensor. Without knowing the mapping between the data and its encapsulated form, it is difficult for an application/driver to determine what data is being communicated by the sensor. This allows some differentiating use cases, where vendor can provide applications. Some common use cases are debug other sensors or to provide some events like keyboard attached/detached or lid open/close.”h]”hX­HID Sensor specification defines two special sensor usage types. Since they don’t represent a standard sensor, it is not possible to define using Linux IIO type interfaces. The purpose of these sensors is to extend the functionality or provide a way to obfuscate the data being communicated by a sensor. Without knowing the mapping between the data and its encapsulated form, it is difficult for an application/driver to determine what data is being communicated by the sensor. This allows some differentiating use cases, where vendor can provide applications. Some common use cases are debug other sensors or to provide some events like keyboard attached/detached or lid open/close.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kžhj h²hubhÌ)�”}”(hŒ‰To allow application to utilize these sensors, here they are exported using sysfs attribute groups, attributes and misc device interface.”h]”hŒ‰To allow application to utilize these sensors, here they are exported using sysfs attribute groups, attributes and misc device interface.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K©hj h²hubhÌ)�”}”(hŒ,An example of this representation on sysfs::”h]”hŒ+An example of this representation on sysfs:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¬hj h²hubhø)�”}”(hXp/sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R . │   ├── enable_sensor │   │   ├── feature-0-200316 │   │   │   ├── feature-0-200316-maximum │   │   │   ├── feature-0-200316-minimum │   │   │   ├── feature-0-200316-name │   │   │   ├── feature-0-200316-size │   │   │   ├── feature-0-200316-unit-expo │   │   │   ├── feature-0-200316-units │   │   │   ├── feature-0-200316-value │   │   ├── feature-1-200201 │   │   │   ├── feature-1-200201-maximum │   │   │   ├── feature-1-200201-minimum │   │   │   ├── feature-1-200201-name │   │   │   ├── feature-1-200201-size │   │   │   ├── feature-1-200201-unit-expo │   │   │   ├── feature-1-200201-units │   │   │   ├── feature-1-200201-value │   │   ├── input-0-200201 │   │   │   ├── input-0-200201-maximum │   │   │   ├── input-0-200201-minimum │   │   │   ├── input-0-200201-name │   │   │   ├── input-0-200201-size │   │   │   ├── input-0-200201-unit-expo │   │   │   ├── input-0-200201-units │   │   │   ├── input-0-200201-value │   │   ├── input-1-200202 │   │   │   ├── input-1-200202-maximum │   │   │   ├── input-1-200202-minimum │   │   │   ├── input-1-200202-name │   │   │   ├── input-1-200202-size │   │   │   ├── input-1-200202-unit-expo │   │   │   ├── input-1-200202-units │   │   │   ├── input-1-200202-value”h]”hXp/sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R . │   ├── enable_sensor │   │   ├── feature-0-200316 │   │   │   ├── feature-0-200316-maximum │   │   │   ├── feature-0-200316-minimum │   │   │   ├── feature-0-200316-name │   │   │   ├── feature-0-200316-size │   │   │   ├── feature-0-200316-unit-expo │   │   │   ├── feature-0-200316-units │   │   │   ├── feature-0-200316-value │   │   ├── feature-1-200201 │   │   │   ├── feature-1-200201-maximum │   │   │   ├── feature-1-200201-minimum │   │   │   ├── feature-1-200201-name │   │   │   ├── feature-1-200201-size │   │   │   ├── feature-1-200201-unit-expo │   │   │   ├── feature-1-200201-units │   │   │   ├── feature-1-200201-value │   │   ├── input-0-200201 │   │   │   ├── input-0-200201-maximum │   │   │   ├── input-0-200201-minimum │   │   │   ├── input-0-200201-name │   │   │   ├── input-0-200201-size │   │   │   ├── input-0-200201-unit-expo │   │   │   ├── input-0-200201-units │   │   │   ├── input-0-200201-value │   │   ├── input-1-200202 │   │   │   ├── input-1-200202-maximum │   │   │   ├── input-1-200202-minimum │   │   │   ├── input-1-200202-name │   │   │   ├── input-1-200202-size │   │   │   ├── input-1-200202-unit-expo │   │   │   ├── input-1-200202-units │   │   │   ├── input-1-200202-value”…”�”}”hjHsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´K®hj h²hubhÌ)�”}”(hŒÑHere there is a custom sensor with four fields: two feature and two inputs. Each field is represented by a set of attributes. All fields except the "value" are read only. The value field is a read-write field.”h]”hŒÕHere there is a custom sensor with four fields: two feature and two inputs. Each field is represented by a set of attributes. All fields except the “valueâ€� are read only. The value field is a read-write field.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÒhj h²hubhÌ)�”}”(hŒ Example::”h]”hŒExample:”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÖhj h²hubhø)�”}”(hX/sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * feature-0-200316-maximum:6 feature-0-200316-minimum:0 feature-0-200316-name:property-reporting-state feature-0-200316-size:1 feature-0-200316-unit-expo:0 feature-0-200316-units:25 feature-0-200316-value:1”h]”hX/sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * feature-0-200316-maximum:6 feature-0-200316-minimum:0 feature-0-200316-name:property-reporting-state feature-0-200316-size:1 feature-0-200316-unit-expo:0 feature-0-200316-units:25 feature-0-200316-value:1”…”�”}”hjrsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´KØhj h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒHow to enable such sensor?”h]”hŒHow to enable such sensor?”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj€h²hh³hÊh´KâubhÌ)�”}”(hŒVBy default sensor can be power gated. To enable sysfs attribute "enable" can be used::”h]”hŒYBy default sensor can be power gated. To enable sysfs attribute “enableâ€� can be used:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kähj€h²hubhø)�”}”(hŒ$ echo 1 > enable_sensor”h]”hŒ$ echo 1 > enable_sensor”…”�”}”hjŸsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´Kçhj€h²hubhÌ)�”}”(hŒŽOnce enabled and powered on, sensor can report value using HID reports. These reports are pushed using misc device interface in a FIFO order::”h]”hŒ�Once enabled and powered on, sensor can report value using HID reports. These reports are pushed using misc device interface in a FIFO order:”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kéhj€h²hubhø)�”}”(hŒ�/dev$ tree | grep HID-SENSOR-2000e1.6.auto │   │   │   ├── 10:53 -> ../HID-SENSOR-2000e1.6.auto │   ├── HID-SENSOR-2000e1.6.auto”h]”hŒ�/dev$ tree | grep HID-SENSOR-2000e1.6.auto │   │   │   ├── 10:53 -> ../HID-SENSOR-2000e1.6.auto │   ├── HID-SENSOR-2000e1.6.auto”…”�”}”hj»sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1h÷h³hÊh´Kìhj€h²hubhÌ)�”}”(hŒ�Each report can be of variable length preceded by a header. This header consists of a 32-bit usage id, 64-bit time stamp and 32-bit length field of raw data.”h]”hŒ�Each report can be of variable length preceded by a header. This header consists of a 32-bit usage id, 64-bit time stamp and 32-bit length field of raw data.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhj€h²hubeh}”(h]”Œhow-to-enable-such-sensor”ah ]”h"]”Œhow to enable such sensor?”ah$]”h&]”uh1hµhj h²hh³hÊh´Kâubeh}”(h]”Œhid-custom-and-generic-sensors”ah ]”h"]”Œhid custom and generic sensors”ah$]”h&]”uh1hµhjh²hh³hÊh´K›ubeh}”(h]”Œcore-driver-interface”ah ]”h"]”Œcore driver interface”ah$]”h&]”uh1hµhh·h²hh³hÊh´KQubeh}”(h]”Œhid-sensors-framework”ah ]”h"]”Œhid sensors framework”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ájÜjÙuŒ nametypes”}”(jô‰jÿ‰jЉj÷‰jì‰jä‰j܉uh}”(jñh·jüjjÍjtjôjÓjéjjá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.