€• ÙŒ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”Œ0/translations/zh_CN/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/networking/can_ucan_protocol”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/networking/can_ucan_protocol”Œ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ŒThe UCAN Protocol”h]”hŒThe UCAN Protocol”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/networking/can_ucan_protocol.rst”h´KubhŒ paragraph”“”)�”}”(hŒ»UCAN 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]”hŒ»UCAN 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.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ¾The 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]”hŒ¾The 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.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hŒXAll structures mentioned in this document are defined in ``drivers/net/can/usb/ucan.c``.”h]”(hŒ9All structures mentioned in this document are defined in ”…”�”}”(hhéh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``drivers/net/can/usb/ucan.c``”h]”hŒdrivers/net/can/usb/ucan.c”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhhéubhŒ.”…”�”}”(hhéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ USB Endpoints”h]”hŒ USB Endpoints”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KubhÌ)�”}”(hŒ%UCAN devices use three USB endpoints:”h]”hŒ%UCAN devices use three USB endpoints:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj h²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒNCONTROL endpoint The driver sends device management commands on this endpoint ”h]”(hŒterm”“”)�”}”(hŒCONTROL endpoint”h]”hŒCONTROL endpoint”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Khj1ubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KXhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jehjubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjÿubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jEhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j@hj…h²hh³hÊh´Nubeh}”(h]”Œucan-command-start”ah ]”h"]”Œucan_command_start”ah$]”h&]”uh1hµhjth²hh³hÊh´KNubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_COMMAND_STOP”h]”hŒUCAN_COMMAND_STOP”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjyh²hh³hÊh´K\ubhÌ)�”}”(hŒ*Host2Dev; mandatory*”h]”jB)�”}”(hjŒh]”hŒHost2Dev; mandatory”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K^hjyh²hubhÌ)�”}”(hŒStop the CAN interface”h]”hŒStop the CAN interface”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K`hjyh²hubj+)�”}”(hhh]”j0)�”}”(hŒPayload Format *empty* ”h]”(j6)�”}”(hŒPayload Format”h]”hŒPayload Format”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Kchj²ubjF)�”}”(hhh]”hÌ)�”}”(hŒ*empty*”h]”jB)�”}”(hjÉh]”hŒempty”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KchjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´Kchj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjyh²hh³hÊh´Nubeh}”(h]”Œucan-command-stop”ah ]”h"]”Œucan_command_stop”ah$]”h&]”uh1hµhjth²hh³hÊh´K\ubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_COMMAND_RESET”h]”hŒUCAN_COMMAND_RESET”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjøh²hh³hÊh´KfubhÌ)�”}”(hŒ*Host2Dev; mandatory*”h]”jB)�”}”(hj h]”hŒHost2Dev; mandatory”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhjøh²hubhÌ)�”}”(hŒ3Reset the CAN controller (including error counters)”h]”hŒ3Reset the CAN controller (including error counters)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhjøh²hubj+)�”}”(hhh]”j0)�”}”(hŒPayload Format *empty* ”h]”(j6)�”}”(hŒPayload Format”h]”hŒPayload Format”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Kmhj1ubjF)�”}”(hhh]”hÌ)�”}”(hŒ*empty*”h]”jB)�”}”(hjHh]”hŒempty”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KmhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´Kmhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjøh²hh³hÊh´Nubeh}”(h]”Œucan-command-reset”ah ]”h"]”Œucan_command_reset”ah$]”h&]”uh1hµhjth²hh³hÊh´Kfubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_COMMAND_GET”h]”hŒUCAN_COMMAND_GET”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjwh²hh³hÊh´KpubhÌ)�”}”(hŒ*Host2Dev; mandatory*”h]”jB)�”}”(hjŠh]”hŒHost2Dev; mandatory”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhjwh²hubhÌ)�”}”(hŒGet Information from the Device”h]”hŒGet Information from the Device”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthjwh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Subcommands”h]”hŒ Subcommands”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj­h²hh³hÊh´Kwubj+)�”}”(hhh]”j0)�”}”(hXUCAN_COMMAND_GET_INFO Request the device information structure ``ucan_ctl_payload_t.device_info``. See the ``device_info`` field for details, and ``uapi/linux/can/netlink.h`` for an explanation of the ``can_bittiming fields``. Payload Format ``ucan_ctl_payload_t.device_info`` ”h]”(j6)�”}”(hŒUCAN_COMMAND_GET_INFO”h]”hŒUCAN_COMMAND_GET_INFO”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´K�hjÁubjF)�”}”(hhh]”(hÌ)�”}”(hŒLRequest the device information structure ``ucan_ctl_payload_t.device_info``.”h]”(hŒ)Request the device information structure ”…”�”}”(hjÖh²hh³Nh´Nubhò)�”}”(hŒ"``ucan_ctl_payload_t.device_info``”h]”hŒucan_ctl_payload_t.device_info”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjÖubhŒ.”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KzhjÓubhÌ)�”}”(hŒSee the ``device_info`` field for details, and ``uapi/linux/can/netlink.h`` for an explanation of the ``can_bittiming fields``.”h]”(hŒSee the ”…”�”}”(hjöh²hh³Nh´Nubhò)�”}”(hŒ``device_info``”h]”hŒ device_info”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjöubhŒ field for details, and ”…”�”}”(hjöh²hh³Nh´Nubhò)�”}”(hŒ``uapi/linux/can/netlink.h``”h]”hŒuapi/linux/can/netlink.h”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjöubhŒ for an explanation of the ”…”�”}”(hjöh²hh³Nh´Nubhò)�”}”(hŒ``can_bittiming fields``”h]”hŒcan_bittiming fields”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjöubhŒ.”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjÓubj+)�”}”(hhh]”j0)�”}”(hŒ2Payload Format ``ucan_ctl_payload_t.device_info`` ”h]”(j6)�”}”(hŒPayload Format”h]”hŒPayload Format”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´K�hj=ubjF)�”}”(hhh]”hÌ)�”}”(hŒ"``ucan_ctl_payload_t.device_info``”h]”hò)�”}”(hjTh]”hŒucan_ctl_payload_t.device_info”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´K�hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´K�hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj­h²hh³Nh´NubhÌ)�”}”(hŒ!UCAN_COMMAND_GET_PROTOCOL_VERSION”h]”hŒ!UCAN_COMMAND_GET_PROTOCOL_VERSION”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj­h²hubhŒ block_quote”“”)�”}”(hŒªRequest 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Ì)�”}”(hŒoRequest the device protocol version ``ucan_ctl_payload_t.protocol_version``. The current protocol version is 3.”h]”(hŒ$Request the device protocol version ”…”�”}”(hj¡h²hh³Nh´Nubhò)�”}”(hŒ'``ucan_ctl_payload_t.protocol_version``”h]”hŒ#ucan_ctl_payload_t.protocol_version”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj¡ubhŒ$. The current protocol version is 3.”…”�”}”(hj¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hj�ubj+)�”}”(hhh]”j0)�”}”(hŒ7Payload Format ``ucan_ctl_payload_t.protocol_version`` ”h]”(j6)�”}”(hŒPayload Format”h]”hŒPayload Format”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´K‰hjÄubjF)�”}”(hhh]”hÌ)�”}”(hŒ'``ucan_ctl_payload_t.protocol_version``”h]”hò)�”}”(hjÛh]”hŒ#ucan_ctl_payload_t.protocol_version”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‰hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´K‰hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´K…hj­h²hubhŒnote”“”)�”}”(hŒIDevices that do not implement this command use the old protocol version 1”h]”hÌ)�”}”(hŒIDevices that do not implement this command use the old protocol version 1”h]”hŒIDevices that do not implement this command use the old protocol version 1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­h²hh³hÊh´Nubeh}”(h]”Œ subcommands”ah ]”h"]”Œ subcommands”ah$]”h&]”uh1hµhjwh²hh³hÊh´Kwubeh}”(h]”Œucan-command-get”ah ]”h"]”Œucan_command_get”ah$]”h&]”uh1hµhjth²hh³hÊh´Kpubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_COMMAND_SET_BITTIMING”h]”hŒUCAN_COMMAND_SET_BITTIMING”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj2h²hh³hÊh´K�ubhÌ)�”}”(hŒ*Host2Dev; mandatory*”h]”jB)�”}”(hjEh]”hŒHost2Dev; mandatory”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‘hj2h²hubhÌ)�”}”(hŒxSetup 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 ”…”�”}”(hjZh²hh³Nh´Nubhò)�”}”(hŒ(``ucan_ctl_payload_t.cmd_set_bittiming``”h]”hŒ$ucan_ctl_payload_t.cmd_set_bittiming”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjZubhŒ (see ”…”�”}”(hjZh²hh³Nh´Nubhò)�”}”(hŒ``struct bittiming``”h]”hŒstruct bittiming”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjZubhŒ for details)”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hj2h²hubj+)�”}”(hhh]”j0)�”}”(hŒ9Payload Format ``ucan_ctl_payload_t.cmd_set_bittiming``. ”h]”(j6)�”}”(hŒPayload Format”h]”hŒPayload Format”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´K˜hj�ubjF)�”}”(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”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj¤ubhŒ.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K˜hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´K˜hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj2h²hh³hÊh´Nubeh}”(h]”Œucan-command-set-bittiming”ah ]”h"]”Œucan_command_set_bittiming”ah$]”h&]”uh1hµhjth²hh³hÊh´K�ubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_SLEEP/WAKE”h]”hŒUCAN_SLEEP/WAKE”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÚh²hh³hÊh´K›ubhÌ)�”}”(hŒ*Host2Dev; optional*”h]”jB)�”}”(hjíh]”hŒHost2Dev; optional”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjÚh²hubhÌ)�”}”(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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŸhjÚh²hubeh}”(h]”Œucan-sleep-wake”ah ]”h"]”Œucan_sleep/wake”ah$]”h&]”uh1hµhjth²hh³hÊh´K›ubh¶)�”}”(hhh]”(h»)�”}”(hŒ UCAN_FILTER”h]”hŒ UCAN_FILTER”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´K¢ubhÌ)�”}”(hŒ*Host2Dev; optional*”h]”jB)�”}”(hj+ h]”hŒHost2Dev; optional”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hj h²hubhÌ)�”}”(hŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj ubhŒ% value against the actual data size).”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¹hjï h²hubhŒtarget”“”)�”}”(hŒ.. _can_ucan_in_message_len:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œcan-ucan-in-message-len”uh1jV h´K¿hjï h²hh³hÊubh¶)�”}”(hhh]”(h»)�”}”(hŒ ``len`` field”h]”(hò)�”}”(hŒ``len``”h]”hŒlen”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjg ubhŒ field”…”�”}”(hjg h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hºhjd h²hh³hÊh´KÂubhÌ)�”}”(hŒÎEach ``ucan_message_in`` must be aligned to a 4-byte boundary (relative to the start of the start of the data buffer). That means that there may be padding bytes between multiple ``ucan_message_in`` values:”h]”(hŒEach ”…”�”}”(hjƒ h²hh³Nh´Nubhò)�”}”(hŒ``ucan_message_in``”h]”hŒucan_message_in”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjƒ ubhŒ› must be aligned to a 4-byte boundary (relative to the start of the start of the data buffer). That means that there may be padding bytes between multiple ”…”�”}”(hjƒ h²hh³Nh´Nubhò)�”}”(hŒ``ucan_message_in``”h]”hŒucan_message_in”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjƒ ubhŒ values:”…”�”}”(hjƒ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhjd h²hubhŒ literal_block”“”)�”}”(hXx+----------------------------+ < 0 | | | struct ucan_message_in | | | +----------------------------+ < len [padding] +----------------------------+ < round_up(len, 4) | | | struct ucan_message_in | | | +----------------------------+ [...]”h]”hXx+----------------------------+ < 0 | | | struct ucan_message_in | | | +----------------------------+ < len [padding] +----------------------------+ < round_up(len, 4) | | | struct ucan_message_in | | | +----------------------------+ [...]”…”�”}”hj· sbah}”(h]”h ]”h"]”h$]”h&]”Œforce”‰Œhighlight_args”}”Œ xml:space”Œpreserve”Œlanguage”Œnone”uh1jµ h³hÊh´KÈhjd h²hubeh}”(h]”(Œ len-field”jc eh ]”h"]”(Œ len field”Œcan_ucan_in_message_len”eh$]”h&]”uh1hµhjï h²hh³hÊh´KÂŒexpect_referenced_by_name”}”jÒ jX sŒexpect_referenced_by_id”}”jc jX subh¶)�”}”(hhh]”(h»)�”}”(hŒ``type`` field”h]”(hò)�”}”(hŒ``type``”h]”hŒtype”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjÜ ubhŒ field”…”�”}”(hjÜ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÙ h²hh³hÊh´KØubhÌ)�”}”(hŒ5The ``type`` field specifies the type of the message.”h]”(hŒThe ”…”�”}”(hjø h²hh³Nh´Nubhò)�”}”(hŒ``type``”h]”hŒtype”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjø ubhŒ) field specifies the type of the message.”…”�”}”(hjø h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÚhjÙ h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ UCAN_IN_RX”h]”hŒ UCAN_IN_RX”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KÝubj+)�”}”(hhh]”j0)�”}”(hŒ``subtype`` zero ”h]”(j6)�”}”(hŒ ``subtype``”h]”hò)�”}”(hj2 h]”hŒsubtype”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Kàhj, ubjF)�”}”(hhh]”hÌ)�”}”(hŒzero”h]”hŒzero”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KàhjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj, ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´Kàhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj h²hh³hÊh´NubhÌ)�”}”(hŒ.Data received from the CAN bus (ID + payload).”h]”hŒ.Data received from the CAN bus (ID + payload).”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kâhj h²hubeh}”(h]”Œ ucan-in-rx”ah ]”h"]”Œ ucan_in_rx”ah$]”h&]”uh1hµhjÙ h²hh³hÊh´KÝubh¶)�”}”(hhh]”(h»)�”}”(hŒUCAN_IN_TX_COMPLETE”h]”hŒUCAN_IN_TX_COMPLETE”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj€ h²hh³hÊh´Kåubj+)�”}”(hhh]”j0)�”}”(hŒ``subtype`` zero ”h]”(j6)�”}”(hŒ ``subtype``”h]”hò)�”}”(hjš h]”hŒsubtype”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Kèhj” ubjF)�”}”(hhh]”hÌ)�”}”(hŒzero”h]”hŒzero”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kèhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj” ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´Kèhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hj€ h²hh³hÊh´NubhÌ)�”}”(hŒeThe CAN device has sent a message to the CAN bus. It answers with a list of tuples .”h]”hŒeThe CAN device has sent a message to the CAN bus. It answers with a list of tuples .”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kêhj€ h²hubhÌ)�”}”(hŒàThe 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]”hŒàThe 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à h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kíhj€ h²hubeh}”(h]”Œucan-in-tx-complete”ah ]”h"]”Œucan_in_tx_complete”ah$]”h&]”uh1hµhjÙ h²hh³hÊh´Kåubeh}”(h]”Œ type-field”ah ]”h"]”h$]”Œ type field”ah&]”uh1hµhjï h²hh³hÊh´KØŒ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Flow Control”h]”hŒ Flow Control”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÿ h²hh³hÊh´KóubhÌ)�”}”(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]”(hŒ÷When 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 ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:ref:`can_ucan_error_handling`”h]”hŒinline”“”)�”}”(hjh]”hŒcan_ucan_error_handling”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œnetworking/can_ucan_protocol”Œ refdomain”j)Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œcan_ucan_error_handling”uh1hh³hÊh´KõhjubhŒ)”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kõhjÿ h²hubeh}”(h]”Œ flow-control”ah ]”h"]”h$]”Œ flow control”ah&]”uh1hµhjï h²hh³hÊh´Kójþ Kubeh}”(h]”Œin-message-format”ah ]”h"]”Œin message format”ah$]”h&]”uh1hµhh·h²hh³hÊh´K·ubh¶)�”}”(hhh]”(h»)�”}”(hŒOUT Message Format”h]”hŒOUT Message Format”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjWh²hh³hÊh´KýubhÌ)�”}”(hX†A 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 ”…”�”}”(hjhh²hh³Nh´Nubhò)�”}”(hŒ``struct ucan_message_out``”h]”hŒstruct ucan_message_out”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjhubhŒT values. If multiple messages are batched into one data packet, the device uses the ”…”�”}”(hjhh²hh³Nh´Nubhò)�”}”(hŒ``len``”h]”hŒlen”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjhubhŒ¶ 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 ”…”�”}”(hjhh²hh³Nh´Nubh)�”}”(hŒ:ref:`can_ucan_in_message_len`”h]”j)�”}”(hj–h]”hŒcan_ucan_in_message_len”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”(j(Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j5Œ refdomain”j¢Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj;Œcan_ucan_in_message_len”uh1hh³hÊh´KÿhjhubhŒ.”…”�”}”(hjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÿhjWh²hubj¶ )�”}”(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 | | | +----------------------------+ [...]”…”�”}”hj¾sbah}”(h]”h ]”h"]”h$]”h&]”Œforce”‰Œhighlight_args”}”jÈ jÉ jÊ jË uh1jµ h³hÊh´MhjWh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ``type`` field”h]”(hò)�”}”(hŒ``type``”h]”hŒtype”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjÒubhŒ field”…”�”}”(hjÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÏh²hh³hÊh´MubhÌ)�”}”(hŒsIn protocol version 3 only ``UCAN_OUT_TX`` is defined, others are used only by legacy devices (protocol version 1).”h]”(hŒIn protocol version 3 only ”…”�”}”(hjîh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_OUT_TX``”h]”hŒ UCAN_OUT_TX”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjîubhŒI is defined, others are used only by legacy devices (protocol version 1).”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÏh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ UCAN_OUT_TX”h]”hŒ UCAN_OUT_TX”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´Mubj+)�”}”(hhh]”j0)�”}”(hŒF``subtype`` echo id to be replied within a CAN_IN_TX_COMPLETE message ”h]”(j6)�”}”(hŒ ``subtype``”h]”hò)�”}”(hj(h]”hŒsubtype”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j5h³hÊh´Mhj"ubjF)�”}”(hhh]”hÌ)�”}”(hŒ9echo id to be replied within a CAN_IN_TX_COMPLETE message”h]”hŒ9echo id to be replied within a CAN_IN_TX_COMPLETE message”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j/h³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j*hjh²hh³hÊh´NubhÌ)�”}”(hŒ4Transmit a CAN frame. (parameters: ``id``, ``data``)”h]”(hŒ#Transmit a CAN frame. (parameters: ”…”�”}”(hj`h²hh³Nh´Nubhò)�”}”(hŒ``id``”h]”hŒid”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj`ubhŒ, ”…”�”}”(hj`h²hh³Nh´Nubhò)�”}”(hŒ``data``”h]”hŒdata”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj`ubhŒ)”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjh²hubeh}”(h]”Œ ucan-out-tx”ah ]”h"]”Œ ucan_out_tx”ah$]”h&]”uh1hµhjÏh²hh³hÊh´Mubeh}”(h]”Œid1”ah ]”h"]”h$]”jü ah&]”uh1hµhjWh²hh³hÊh´Mjþ Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Flow Control”h]”hŒ Flow Control”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¡h²hh³hÊh´M#ubhÌ)�”}”(hŒÉWhen 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]”(hŒhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj`h²hh³hÊh´Nubj•)�”}”(hŒ0During Bus OFF no frames are sent by the device.”h]”hÌ)�”}”(hjâh]”hŒ0During Bus OFF no frames are sent by the device.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj`h²hh³hÊh´Nubj•)�”}”(hŒnDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset. ”h]”hÌ)�”}”(hŒmDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset.”h]”hŒmDuring Bus OFF transmission requests from the host are completed immediately with the success bit left unset.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MAhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj`h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jËŒ-”uh1j�h³hÊh´M;hjOh²hubeh}”(h]”Œbus-off”ah ]”h"]”Œbus off”ah$]”h&]”uh1hµhjþh²hh³hÊh´M9ubeh}”(h]”(Œcan-error-handling”jîeh ]”h"]”(Œcan error handling”Œcan_ucan_error_handling”eh$]”h&]”uh1hµhh·h²hh³hÊh´M,jÕ }”j$jäsj× }”jîjäsubh¶)�”}”(hhh]”(h»)�”}”(hŒExample Conversation”h]”hŒExample Conversation”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj)h²hh³hÊh´MEubhŒenumerated_list”“”)�”}”(hhh]”(j•)�”}”(hŒDevice is connected to USB”h]”hÌ)�”}”(hjAh]”hŒDevice is connected to USB”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MGhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubj•)�”}”(hŒ3Host sends command ``UCAN_COMMAND_RESET``, subcmd 0”h]”hÌ)�”}”(hjXh]”(hŒHost sends command ”…”�”}”(hjZh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_COMMAND_RESET``”h]”hŒUCAN_COMMAND_RESET”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjZubhŒ , subcmd 0”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubj•)�”}”(hŒIHost sends command ``UCAN_COMMAND_GET``, subcmd ``UCAN_COMMAND_GET_INFO``”h]”hÌ)�”}”(hj�h]”(hŒHost sends command ”…”�”}”(hjƒh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_COMMAND_GET``”h]”hŒUCAN_COMMAND_GET”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjƒubhŒ , subcmd ”…”�”}”(hjƒh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_COMMAND_GET_INFO``”h]”hŒUCAN_COMMAND_GET_INFO”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubj•)�”}”(hŒ$Device sends ``UCAN_IN_DEVICE_INFO``”h]”hÌ)�”}”(hj¸h]”(hŒ Device sends ”…”�”}”(hjºh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_IN_DEVICE_INFO``”h]”hŒUCAN_IN_DEVICE_INFO”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubj•)�”}”(hŒ-Host sends command ``UCAN_OUT_SET_BITTIMING``”h]”hÌ)�”}”(hjÝh]”(hŒHost sends command ”…”�”}”(hjßh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_OUT_SET_BITTIMING``”h]”hŒUCAN_OUT_SET_BITTIMING”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MKhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubj•)�”}”(hŒSHost sends command ``UCAN_COMMAND_START``, subcmd 0, mode ``UCAN_MODE_BERR_REPORT``”h]”hÌ)�”}”(hjh]”(hŒHost sends command ”…”�”}”(hjh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_COMMAND_START``”h]”hŒUCAN_COMMAND_START”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjubhŒ, subcmd 0, mode ”…”�”}”(hjh²hh³Nh´Nubhò)�”}”(hŒ``UCAN_MODE_BERR_REPORT``”h]”hŒUCAN_MODE_BERR_REPORT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j”hj<h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1j:hj)h²hh³hÊh´MGubeh}”(h]”Œexample-conversation”ah ]”h"]”Œexample conversation”ah$]”h&]”uh1hµhh·h²hh³hÊh´MEubeh}”(h]”Œthe-ucan-protocol”ah ]”h"]”Œthe ucan protocol”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”jjŒ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”jtŒ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”}”(jc ]”jX ajî]”jäauŒnameids”}”(jOjLjÍjÊjì jé jñjîjjjqjnjijfj[ jX jvjsjõjòjtjqj/j,j'j$j×jÔj j jS jP jä já jTjQjÒ jc jÑ jÎ Œ type field”Nj} jz jó jð Œ flow control”Njûjøj—j”j$jîj#j jjjGjDuŒ nametypes”}”(jO‰j͉jì ‰jñ‰j‰jq‰ji‰j[ ‰jv‰jõ‰jt‰j/‰j'‰j׉j ‰jS ‰jä ‰jT‰jÒ ˆjÑ ‰jº‰j} ‰jó ‰j»‰jû‰j—‰j$ˆj#‰j‰jG‰uh}”(jLh·jÊj jé jÐjîj/jjôjnjjfj,jX jtjsj…jòjyjqjøj,jwj$j­jÔj2j jÚjP j já j^ jQjï jc jd jÎ jd jø jÙ jz j jð j€ jIjÿ jøjWjœjÏj”jjñj¡jîjþj jþjjOjDj)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”]”(hŒsystem_message”“”)�”}”(hhh]”hÌ)�”}”(hŒ-Duplicate implicit target name: "type field".”h]”hŒ1Duplicate implicit target name: “type fieldâ€�.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjÜubah}”(h]”h ]”h"]”h$]”h&]”jœaŒlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Muh1jÚhjÏh²hh³hÊh´MubjÛ)�”}”(hhh]”hÌ)�”}”(hŒ/Duplicate implicit target name: "flow control".”h]”hŒ3Duplicate implicit target name: “flow controlâ€�.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjøubah}”(h]”h ]”h"]”h$]”h&]”jñaŒlevel”KŒtype”jõŒsource”hÊŒline”M#uh1jÚhj¡h²hh³hÊh´M#ubeŒtransform_messages”]”(jÛ)�”}”(hhh]”hÌ)�”}”(hhh]”hŒ=Hyperlink target "can-ucan-in-message-len" is not referenced.”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jõŒsource”hÊŒline”K¿uh1jÚubjÛ)�”}”(hhh]”hÌ)�”}”(hhh]”hŒ=Hyperlink target "can-ucan-error-handling" is not referenced.”…”�”}”hj2sbah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj/ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jõŒsource”hÊŒline”M)uh1jÚubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.