"sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget0/translations/zh_CN/networking/can_ucan_protocolmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/networking/can_ucan_protocolmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/networking/can_ucan_protocolmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/networking/can_ucan_protocolmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/networking/can_ucan_protocolmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/networking/can_ucan_protocolmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hThe UCAN Protocolh]hThe UCAN Protocol}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhJ/var/lib/git/docbuild/linux/Documentation/networking/can_ucan_protocol.rsthKubh paragraph)}(hUCAN is the protocol used by the microcontroller-based USB-CAN adapter that is integrated on System-on-Modules from Theobroma Systems and that is also available as a standalone USB stick.h]hUCAN is the protocol used by the microcontroller-based USB-CAN adapter that is integrated on System-on-Modules from Theobroma Systems and that is also available as a standalone USB stick.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe UCAN protocol has been designed to be hardware-independent. It is modeled closely after how Linux represents CAN devices internally. All multi-byte integers are encoded as Little Endian.h]hThe UCAN protocol has been designed to be hardware-independent. It is modeled closely after how Linux represents CAN devices internally. All multi-byte integers are encoded as Little Endian.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXAll structures mentioned in this document are defined in ``drivers/net/can/usb/ucan.c``.h](h9All structures mentioned in this document are defined in }(hhhhhNhNubhliteral)}(h``drivers/net/can/usb/ucan.c``h]hdrivers/net/can/usb/ucan.c}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(h USB Endpointsh]h USB Endpoints}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(h%UCAN devices use three USB endpoints:h]h%UCAN devices use three USB endpoints:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hNCONTROL endpoint The driver sends device management commands on this endpoint h](hterm)}(hCONTROL endpointh]hCONTROL endpoint}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j!hhhKhjubh definition)}(hhh]h)}(hubah}(h]h ]h"]h$]h&]uh1hhhhKhj;ubah}(h]h ]h"]h$]h&]uh1j1hj)ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj&ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j1hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(h!UCAN_COMMAND_GET_PROTOCOL_VERSIONh]h!UCAN_COMMAND_GET_PROTOCOL_VERSION}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(hRequest the device protocol version ``ucan_ctl_payload_t.protocol_version``. The current protocol version is 3. Payload Format ``ucan_ctl_payload_t.protocol_version`` h](h)}(hoRequest the device protocol version ``ucan_ctl_payload_t.protocol_version``. The current protocol version is 3.h](h$Request the device protocol version }(hjhhhNhNubh)}(h'``ucan_ctl_payload_t.protocol_version``h]h#ucan_ctl_payload_t.protocol_version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh$. The current protocol version is 3.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubj)}(hhh]j)}(h7Payload Format ``ucan_ctl_payload_t.protocol_version`` h](j")}(hPayload Formath]hPayload Format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hhhKhjubj2)}(hhh]h)}(h'``ucan_ctl_payload_t.protocol_version``h]h)}(hjh]h#ucan_ctl_payload_t.protocol_version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j1hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubhnote)}(hIDevices that do not implement this command use the old protocol version 1h]h)}(hIDevices that do not implement this command use the old protocol version 1h]hIDevices that do not implement this command use the old protocol version 1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h] subcommandsah ]h"] subcommandsah$]h&]uh1hhjchhhhhKwubeh}(h]ucan-command-getah ]h"]ucan_command_getah$]h&]uh1hhj`hhhhhKpubh)}(hhh](h)}(hUCAN_COMMAND_SET_BITTIMINGh]hUCAN_COMMAND_SET_BITTIMING}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h*Host2Dev; mandatory*h]j.)}(hj1h]hHost2Dev; mandatory}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj/ubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hxSetup bittiming by sending the structure ``ucan_ctl_payload_t.cmd_set_bittiming`` (see ``struct bittiming`` for details)h](h)Setup bittiming by sending the structure }(hjFhhhNhNubh)}(h(``ucan_ctl_payload_t.cmd_set_bittiming``h]h$ucan_ctl_payload_t.cmd_set_bittiming}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubh (see }(hjFhhhNhNubh)}(h``struct bittiming``h]hstruct bittiming}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubh for details)}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]j)}(h9Payload Format ``ucan_ctl_payload_t.cmd_set_bittiming``. h](j")}(hPayload Formath]hPayload Format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j!hhhKhj{ubj2)}(hhh]h)}(h)``ucan_ctl_payload_t.cmd_set_bittiming``.h](h)}(h(``ucan_ctl_payload_t.cmd_set_bittiming``h]h$ucan_ctl_payload_t.cmd_set_bittiming}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j1hj{ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjxubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]ucan-command-set-bittimingah ]h"]ucan_command_set_bittimingah$]h&]uh1hhj`hhhhhKubh)}(hhh](h)}(hUCAN_SLEEP/WAKEh]hUCAN_SLEEP/WAKE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h*Host2Dev; optional*h]j.)}(hjh]hHost2Dev; optional}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h@Configure sleep and wake modes. Not yet supported by the driver.h]h@Configure sleep and wake modes. Not yet supported by the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]ucan-sleep-wakeah ]h"]ucan_sleep/wakeah$]h&]uh1hhj`hhhhhKubh)}(hhh](h)}(h UCAN_FILTERh]h UCAN_FILTER}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(h*Host2Dev; optional*h]j.)}(hj h]hHost2Dev; optional}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h.h]heThe CAN device has sent a message to the CAN bus. It answers with a list of tuples .}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjl hhubh)}(hThe echo-id identifies the frame from (echos the id from a previous UCAN_OUT_TX message). The flag indicates the result of the transmission. Whereas a set Bit 0 indicates success. All other bits are reserved and set to zero.h]hThe echo-id identifies the frame from (echos the id from a previous UCAN_OUT_TX message). The flag indicates the result of the transmission. Whereas a set Bit 0 indicates success. All other bits are reserved and set to zero.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjl hhubeh}(h]ucan-in-tx-completeah ]h"]ucan_in_tx_completeah$]h&]uh1hhj hhhhhKubeh}(h] type-fieldah ]h"]h$] type fieldah&]uh1hhj hhhhhK، referencedKubh)}(hhh](h)}(h Flow Controlh]h Flow Control}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hXWhen receiving CAN messages there is no flow control on the USB buffer. The driver has to handle inbound message quickly enough to avoid drops. I case the device buffer overflow the condition is reported by sending corresponding error frames (see :ref:`can_ucan_error_handling`)h](hWhen receiving CAN messages there is no flow control on the USB buffer. The driver has to handle inbound message quickly enough to avoid drops. I case the device buffer overflow the condition is reported by sending corresponding error frames (see }(hj hhhNhNubh)}(h:ref:`can_ucan_error_handling`h]hinline)}(hjh]hcan_ucan_error_handling}(hj hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocnetworking/can_ucan_protocol refdomainjreftyperef refexplicitrefwarn reftargetcan_ucan_error_handlinguh1hhhhKhj ubh)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] flow-controlah ]h"]h$] flow controlah&]uh1hhj hhhhhKj Kubeh}(h]in-message-formatah ]h"]in message formatah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOUT Message Formath]hOUT Message Format}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChhhhhKubh)}(hXA data packet on the USB OUT endpoint contains one or more ``struct ucan_message_out`` values. If multiple messages are batched into one data packet, the device uses the ``len`` field to jump to the next ucan_message_out value. Each ucan_message_out must be aligned to 4 bytes (relative to the start of the data buffer). The mechanism is same as described in :ref:`can_ucan_in_message_len`.h](h;A data packet on the USB OUT endpoint contains one or more }(hjThhhNhNubh)}(h``struct ucan_message_out``h]hstruct ucan_message_out}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubhT values. If multiple messages are batched into one data packet, the device uses the }(hjThhhNhNubh)}(h``len``h]hlen}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubh field to jump to the next ucan_message_out value. Each ucan_message_out must be aligned to 4 bytes (relative to the start of the data buffer). The mechanism is same as described in }(hjThhhNhNubh)}(h:ref:`can_ucan_in_message_len`h]j )}(hjh]hcan_ucan_in_message_len}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj! refdomainjreftyperef refexplicitrefwarnj'can_ucan_in_message_lenuh1hhhhKhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjChhubj )}(hXx+----------------------------+ < 0 | | | struct ucan_message_out | | | +----------------------------+ < len [padding] +----------------------------+ < round_up(len, 4) | | | struct ucan_message_out | | | +----------------------------+ [...]h]hXx+----------------------------+ < 0 | | | struct ucan_message_out | | | +----------------------------+ < len [padding] +----------------------------+ < round_up(len, 4) | | | struct ucan_message_out | | | +----------------------------+ [...]}hjsbah}(h]h ]h"]h$]h&]forcehighlight_args}j j j j uh1j hhhMhjChhubh)}(hhh](h)}(h``type`` fieldh](h)}(h``type``h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh field}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hsIn protocol version 3 only ``UCAN_OUT_TX`` is defined, others are used only by legacy devices (protocol version 1).h](hIn protocol version 3 only }(hjhhhNhNubh)}(h``UCAN_OUT_TX``h]h UCAN_OUT_TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhI is defined, others are used only by legacy devices (protocol version 1).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hhh](h)}(h UCAN_OUT_TXh]h UCAN_OUT_TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubj)}(hhh]j)}(hF``subtype`` echo id to be replied within a CAN_IN_TX_COMPLETE message h](j")}(h ``subtype``h]h)}(hjh]hsubtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j!hhhMhjubj2)}(hhh]h)}(h9echo id to be replied within a CAN_IN_TX_COMPLETE messageh]h9echo id to be replied within a CAN_IN_TX_COMPLETE message}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j1hjubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(h4Transmit a CAN frame. (parameters: ``id``, ``data``)h](h#Transmit a CAN frame. (parameters: }(hjLhhhNhNubh)}(h``id``h]hid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubh, }(hjLhhhNhNubh)}(h``data``h]hdata}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubh)}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjhhubeh}(h] ucan-out-txah ]h"] ucan_out_txah$]h&]uh1hhjhhhhhMubeh}(h]id1ah ]h"]h$]j ah&]uh1hhjChhhhhMj Kubh)}(hhh](h)}(h Flow Controlh]h Flow Control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM#ubh)}(hWhen the device outbound buffers are full it starts sending *NAKs* on the *OUT* pipe until more buffers are available. The driver stops the queue when a certain threshold of out packets are incomplete.h](hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhM9ubj|)}(hhh](j)}(h6The device does not recover from bus of automatically.h]h)}(hjQh]h6The device does not recover from bus of automatically.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjOubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubj)}(hGBus OFF is indicated by an error frame (see ``uapi/linux/can/error.h``)h]h)}(hjhh](h,Bus OFF is indicated by an error frame (see }(hjjhhhNhNubh)}(h``uapi/linux/can/error.h``h]huapi/linux/can/error.h}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubh)}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM<hjfubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubj)}(h7Bus OFF recovery is started by ``UCAN_COMMAND_RESTART``h]h)}(hjh](hBus OFF recovery is started by }(hjhhhNhNubh)}(h``UCAN_COMMAND_RESTART``h]hUCAN_COMMAND_RESTART}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhM=hjubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubj)}(hnOnce Bus OFF recover is completed the device sends an error frame indicating that it is on ERROR-ACTIVE state.h]h)}(hnOnce Bus OFF recover is completed the device sends an error frame indicating that it is on ERROR-ACTIVE state.h]hnOnce Bus OFF recover is completed the device sends an error frame indicating that it is on ERROR-ACTIVE state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubj)}(h0During Bus OFF no frames are sent by the device.h]h)}(hjh]h0During Bus OFF no frames are sent by the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hjubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubj)}(hnDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset. h]h)}(hmDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset.h]hmDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMAhjubah}(h]h ]h"]h$]h&]uh1jhjLhhhhhNubeh}(h]h ]h"]h$]h&]j-uh1j{hhhM;hj;hhubeh}(h]bus-offah ]h"]bus offah$]h&]uh1hhjhhhhhM9ubeh}(h](can-error-handlingjeh ]h"](can error handlingcan_ucan_error_handlingeh$]h&]uh1hhhhhhhhM,j }jjsj }jjsubh)}(hhh](h)}(hExample Conversationh]hExample Conversation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMEubhenumerated_list)}(hhh](j)}(hDevice is connected to USBh]h)}(hj-h]hDevice is connected to USB}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhj+ubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubj)}(h3Host sends command ``UCAN_COMMAND_RESET``, subcmd 0h]h)}(hjDh](hHost sends command }(hjFhhhNhNubh)}(h``UCAN_COMMAND_RESET``h]hUCAN_COMMAND_RESET}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubh , subcmd 0}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMHhjBubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubj)}(hIHost sends command ``UCAN_COMMAND_GET``, subcmd ``UCAN_COMMAND_GET_INFO``h]h)}(hjmh](hHost sends command }(hjohhhNhNubh)}(h``UCAN_COMMAND_GET``h]hUCAN_COMMAND_GET}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh , subcmd }(hjohhhNhNubh)}(h``UCAN_COMMAND_GET_INFO``h]hUCAN_COMMAND_GET_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]uh1hhhhMIhjkubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubj)}(h$Device sends ``UCAN_IN_DEVICE_INFO``h]h)}(hjh](h Device sends }(hjhhhNhNubh)}(h``UCAN_IN_DEVICE_INFO``h]hUCAN_IN_DEVICE_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhMJhjubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubj)}(h-Host sends command ``UCAN_OUT_SET_BITTIMING``h]h)}(hjh](hHost sends command }(hjhhhNhNubh)}(h``UCAN_OUT_SET_BITTIMING``h]hUCAN_OUT_SET_BITTIMING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhMKhjubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubj)}(hSHost sends command ``UCAN_COMMAND_START``, subcmd 0, mode ``UCAN_MODE_BERR_REPORT``h]h)}(hjh](hHost sends command }(hjhhhNhNubh)}(h``UCAN_COMMAND_START``h]hUCAN_COMMAND_START}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, subcmd 0, mode }(hjhhhNhNubh)}(h``UCAN_MODE_BERR_REPORT``h]hUCAN_MODE_BERR_REPORT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhMLhjubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1j&hjhhhhhMGubeh}(h]example-conversationah ]h"]example conversationah$]h&]uh1hhhhhhhhMEubeh}(h]the-ucan-protocolah ]h"]the ucan protocolah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjVfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj`error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}(jO ]jD aj]jaunameids}(j;j8jjj j jjjjj]jZjUjRjG jD jbj_jjj`j]jjjjjjj jj? j< j j j@j=j jO j j type fieldNji jf j j flow controlNjjjjjjjj jjj3j0u nametypes}(j;jj jjj]jUjG jbjj`jjjj j? j j@j j jji j jjjjjjj3uh}(j8hjhj jjjjjjZjjRjjD j`j_jqjjej]jjjcjjjjjjj< j j jJ j=j jO jP j jP j j jf j j jl j5j jjCjjjjjjjjj jjj;j0ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jnKsRparse_messages](hsystem_message)}(hhh]h)}(h-Duplicate implicit target name: "type field".h]h1Duplicate implicit target name: “type field”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jalevelKtypeINFOsourcehlineMuh1jhjhhhhhMubj)}(hhh]h)}(h/Duplicate implicit target name: "flow control".h]h3Duplicate implicit target name: “flow control”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jalevelKtypejsourcehlineM#uh1jhjhhhhhM#ubetransform_messages](j)}(hhh]h)}(hhh]h=Hyperlink target "can-ucan-in-message-len" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineKuh1jubj)}(hhh]h)}(hhh]h=Hyperlink target "can-ucan-error-handling" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineM)uh1jube transformerN include_log] decorationNhhub.