€•KaŒ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/w1/w1-netlink”Œ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/w1/w1-netlink”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/it_IT/w1/w1-netlink”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ja_JP/w1/w1-netlink”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ko_KR/w1/w1-netlink”Œ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/w1/w1-netlink”Œ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Œ/Userspace communication protocol over connector”h]”hŒ/Userspace communication protocol over connector”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒ;/var/lib/git/docbuild/linux/Documentation/w1/w1-netlink.rst”h Kubh¢)”}”(hhh]”(h§)”}”(hŒ Message types”h]”hŒ Message types”…””}”(hhºhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh·hžhhŸh¶h KubhŒ paragraph”“”)”}”(hŒ@There are three types of messages between w1 core and userspace:”h]”hŒ@There are three types of messages between w1 core and userspace:”…””}”(hhÊhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khh·hžhubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒwEvents. They are generated each time a new master or slave device is found either due to automatic or requested search.”h]”hÉ)”}”(hŒwEvents. They are generated each time a new master or slave device is found either due to automatic or requested search.”h]”hŒwEvents. They are generated each time a new master or slave device is found either due to automatic or requested search.”…””}”(hhãhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K hhßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÚhžhhŸh¶h NubhÞ)”}”(hŒUserspace commands.”h]”hÉ)”}”(hhùh]”hŒUserspace commands.”…””}”(hhûhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K hh÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÚhžhhŸh¶h NubhÞ)”}”(hŒ Replies to userspace commands. ”h]”hÉ)”}”(hŒReplies to userspace commands.”h]”hŒReplies to userspace commands.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÚhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1hØhh·hžhhŸh¶h K ubeh}”(h]”Œ message-types”ah ]”h"]”Œ message types”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒProtocol”h]”hŒProtocol”…””}”(hj<hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj9hžhhŸh¶h KubhŒ literal_block”“”)”}”(hXW[struct cn_msg] - connector header. Its length field is equal to size of the attached data [struct w1_netlink_msg] - w1 netlink header. __u8 type - message type. W1_LIST_MASTERS list current bus masters W1_SLAVE_ADD/W1_SLAVE_REMOVE slave add/remove events W1_MASTER_ADD/W1_MASTER_REMOVE master add/remove events W1_MASTER_CMD userspace command for bus master device (search/alarm search) W1_SLAVE_CMD userspace command for slave device (read/write/touch) __u8 status - error indication from kernel __u16 len - size of data attached to this header data union { __u8 id[8]; - slave unique device id struct w1_mst { __u32 id; - master's id __u32 res; - reserved } mst; } id; [struct w1_netlink_cmd] - command for given master or slave device. __u8 cmd - command opcode. W1_CMD_READ - read command W1_CMD_WRITE - write command W1_CMD_SEARCH - search command W1_CMD_ALARM_SEARCH - alarm search command W1_CMD_TOUCH - touch command (write and sample data back to userspace) W1_CMD_RESET - send bus reset W1_CMD_SLAVE_ADD - add slave to kernel list W1_CMD_SLAVE_REMOVE - remove slave from kernel list W1_CMD_LIST_SLAVES - get slaves list from kernel __u8 res - reserved __u16 len - length of data for this command For read command data must be allocated like for write command __u8 data[0] - data for this command”h]”hXW[struct cn_msg] - connector header. Its length field is equal to size of the attached data [struct w1_netlink_msg] - w1 netlink header. __u8 type - message type. W1_LIST_MASTERS list current bus masters W1_SLAVE_ADD/W1_SLAVE_REMOVE slave add/remove events W1_MASTER_ADD/W1_MASTER_REMOVE master add/remove events W1_MASTER_CMD userspace command for bus master device (search/alarm search) W1_SLAVE_CMD userspace command for slave device (read/write/touch) __u8 status - error indication from kernel __u16 len - size of data attached to this header data union { __u8 id[8]; - slave unique device id struct w1_mst { __u32 id; - master's id __u32 res; - reserved } mst; } id; [struct w1_netlink_cmd] - command for given master or slave device. __u8 cmd - command opcode. W1_CMD_READ - read command W1_CMD_WRITE - write command W1_CMD_SEARCH - search command W1_CMD_ALARM_SEARCH - alarm search command W1_CMD_TOUCH - touch command (write and sample data back to userspace) W1_CMD_RESET - send bus reset W1_CMD_SLAVE_ADD - add slave to kernel list W1_CMD_SLAVE_REMOVE - remove slave from kernel list W1_CMD_LIST_SLAVES - get slaves list from kernel __u8 res - reserved __u16 len - length of data for this command For read command data must be allocated like for write command __u8 data[0] - data for this command”…””}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jJhŸh¶h Khj9hžhubhÉ)”}”(hŒqEach connector message can include one or more w1_netlink_msg with zero or more attached w1_netlink_cmd messages.”h]”hŒqEach connector message can include one or more w1_netlink_msg with zero or more attached w1_netlink_cmd messages.”…””}”(hj\hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KAhj9hžhubhÉ)”}”(hXDFor event messages there are no w1_netlink_cmd embedded structures, only connector header and w1_netlink_msg structure with "len" field being zero and filled type (one of event types) and id: either 8 bytes of slave unique id in host order, or master's id, which is assigned to bus master device when it is added to w1 core.”h]”hXJFor event messages there are no w1_netlink_cmd embedded structures, only connector header and w1_netlink_msg structure with “len†field being zero and filled type (one of event types) and id: either 8 bytes of slave unique id in host order, or master’s id, which is assigned to bus master device when it is added to w1 core.”…””}”(hjjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KDhj9hžhubhÉ)”}”(hŒôCurrently replies to userspace commands are only generated for read command request. One reply is generated exactly for one w1_netlink_cmd read request. Replies are not combined when sent - i.e. typical reply messages looks like the following::”h]”hŒóCurrently replies to userspace commands are only generated for read command request. One reply is generated exactly for one w1_netlink_cmd read request. Replies are not combined when sent - i.e. typical reply messages looks like the following:”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KKhj9hžhubjK)”}”(hŒó[cn_msg][w1_netlink_msg][w1_netlink_cmd] cn_msg.len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + cmd->len; w1_netlink_msg.len = sizeof(struct w1_netlink_cmd) + cmd->len; w1_netlink_cmd.len = cmd->len;”h]”hŒó[cn_msg][w1_netlink_msg][w1_netlink_cmd] cn_msg.len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + cmd->len; w1_netlink_msg.len = sizeof(struct w1_netlink_cmd) + cmd->len; w1_netlink_cmd.len = cmd->len;”…””}”hj†sbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h KPhj9hžhubhÉ)”}”(hŒ•Replies to W1_LIST_MASTERS should send a message back to the userspace which will contain list of all registered master ids in the following format::”h]”hŒ”Replies to W1_LIST_MASTERS should send a message back to the userspace which will contain list of all registered master ids in the following format:”…””}”(hj”hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KWhj9hžhubjK)”}”(hŒñcn_msg (CN_W1_IDX.CN_W1_VAL as id, len is equal to sizeof(struct w1_netlink_msg) plus number of masters multiplied by 4) w1_netlink_msg (type: W1_LIST_MASTERS, len is equal to number of masters multiplied by 4 (u32 size)) id0 ... idN”h]”hŒñcn_msg (CN_W1_IDX.CN_W1_VAL as id, len is equal to sizeof(struct w1_netlink_msg) plus number of masters multiplied by 4) w1_netlink_msg (type: W1_LIST_MASTERS, len is equal to number of masters multiplied by 4 (u32 size)) id0 ... idN”…””}”hj¢sbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h K[hj9hžhubhÉ)”}”(hŒxEach message is at most 4k in size, so if number of master devices exceeds this, it will be split into several messages.”h]”hŒxEach message is at most 4k in size, so if number of master devices exceeds this, it will be split into several messages.”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kahj9hžhubhÉ)”}”(hŒ$W1 search and alarm search commands.”h]”hŒ$W1 search and alarm search commands.”…””}”(hj¾hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kdhj9hžhubhÉ)”}”(hŒ request::”h]”hŒrequest:”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kfhj9hžhubjK)”}”(hŒª[cn_msg] [w1_netlink_msg type = W1_MASTER_CMD id is equal to the bus master id to use for searching] [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH]”h]”hŒª[cn_msg] [w1_netlink_msg type = W1_MASTER_CMD id is equal to the bus master id to use for searching] [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH]”…””}”hjÚsbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h Khhj9hžhubhÉ)”}”(hŒreply::”h]”hŒreply:”…””}”(hjèhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kmhj9hžhubjK)”}”(hX[cn_msg, ack = 1 and increasing, 0 means the last message, seq is equal to the request seq] [w1_netlink_msg type = W1_MASTER_CMD] [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH len is equal to number of IDs multiplied by 8] [64bit-id0 ... 64bit-idN]”h]”hX[cn_msg, ack = 1 and increasing, 0 means the last message, seq is equal to the request seq] [w1_netlink_msg type = W1_MASTER_CMD] [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH len is equal to number of IDs multiplied by 8] [64bit-id0 ... 64bit-idN]”…””}”hjösbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h Kohj9hžhubhÉ)”}”(hŒ›Length in each header corresponds to the size of the data behind it, so w1_netlink_cmd->len = N * 8; where N is number of IDs in this message. Can be zero.”h]”hŒ›Length in each header corresponds to the size of the data behind it, so w1_netlink_cmd->len = N * 8; where N is number of IDs in this message. Can be zero.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Kvhj9hžhubjK)”}”(hŒ§w1_netlink_msg->len = sizeof(struct w1_netlink_cmd) + N * 8; cn_msg->len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + N*8;”h]”hŒ§w1_netlink_msg->len = sizeof(struct w1_netlink_cmd) + N * 8; cn_msg->len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + N*8;”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h K|hj9hžhubhÉ)”}”(hŒW1 reset command::”h]”hŒW1 reset command:”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h Khj9hžhubjK)”}”(hŒ’[cn_msg] [w1_netlink_msg type = W1_MASTER_CMD id is equal to the bus master id to use for searching] [w1_netlink_cmd cmd = W1_CMD_RESET]”h]”hŒ’[cn_msg] [w1_netlink_msg type = W1_MASTER_CMD id is equal to the bus master id to use for searching] [w1_netlink_cmd cmd = W1_CMD_RESET]”…””}”hj.sbah}”(h]”h ]”h"]”h$]”h&]”jZj[uh1jJhŸh¶h Kƒhj9hžhubeh}”(h]”Œprotocol”ah ]”h"]”Œprotocol”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒCommand status replies”h]”hŒCommand status replies”…””}”(hjGhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjDhžhhŸh¶h KŠubhÉ)”}”(hXšEach command (either root, master or slave with or without w1_netlink_cmd structure) will be 'acked' by the w1 core. Format of the reply is the same as request message except that length parameters do not account for data requested by the user, i.e. read/write/touch IO requests will not contain data, so w1_netlink_cmd.len will be 0, w1_netlink_msg.len will be size of the w1_netlink_cmd structure and cn_msg.len will be equal to the sum of the sizeof(struct w1_netlink_msg) and sizeof(struct w1_netlink_cmd). If reply is generated for master or root command (which do not have w1_netlink_cmd attached), reply will contain only cn_msg and w1_netlink_msg structures.”h]”hXžEach command (either root, master or slave with or without w1_netlink_cmd structure) will be ‘acked’ by the w1 core. Format of the reply is the same as request message except that length parameters do not account for data requested by the user, i.e. read/write/touch IO requests will not contain data, so w1_netlink_cmd.len will be 0, w1_netlink_msg.len will be size of the w1_netlink_cmd structure and cn_msg.len will be equal to the sum of the sizeof(struct w1_netlink_msg) and sizeof(struct w1_netlink_cmd). If reply is generated for master or root command (which do not have w1_netlink_cmd attached), reply will contain only cn_msg and w1_netlink_msg structures.”…””}”(hjUhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KŒhjDhžhubhÉ)”}”(hŒlw1_netlink_msg.status field will carry positive error value (EINVAL for example) or zero in case of success.”h]”hŒlw1_netlink_msg.status field will carry positive error value (EINVAL for example) or zero in case of success.”…””}”(hjchžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K—hjDhžhubhÉ)”}”(hŒAll other fields in every structure will mirror the same parameters in the request message (except lengths as described above).”h]”hŒAll other fields in every structure will mirror the same parameters in the request message (except lengths as described above).”…””}”(hjqhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KšhjDhžhubhÉ)”}”(hŒ­Status reply is generated for every w1_netlink_cmd embedded in the w1_netlink_msg, if there are no w1_netlink_cmd structures, reply will be generated for the w1_netlink_msg.”h]”hŒ­Status reply is generated for every w1_netlink_cmd embedded in the w1_netlink_msg, if there are no w1_netlink_cmd structures, reply will be generated for the w1_netlink_msg.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KhjDhžhubhÉ)”}”(hŒ™All w1_netlink_cmd command structures are handled in every w1_netlink_msg, even if there were errors, only length mismatch interrupts message processing.”h]”hŒ™All w1_netlink_cmd command structures are handled in every w1_netlink_msg, even if there were errors, only length mismatch interrupts message processing.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¡hjDhžhubeh}”(h]”Œcommand-status-replies”ah ]”h"]”Œcommand status replies”ah$]”h&]”uh1h¡hh£hžhhŸh¶h KŠubh¢)”}”(hhh]”(h§)”}”(hŒ7Operation steps in w1 core when new command is received”h]”hŒ7Operation steps in w1 core when new command is received”…””}”(hj¦hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj£hžhhŸh¶h K¦ubhÉ)”}”(hXoWhen new message (w1_netlink_msg) is received w1 core detects if it is master or slave request, according to w1_netlink_msg.type field. Then master or slave device is searched for. When found, master device (requested or those one on where slave device is found) is locked. If slave command is requested, then reset/select procedure is started to select given device.”h]”hXoWhen new message (w1_netlink_msg) is received w1 core detects if it is master or slave request, according to w1_netlink_msg.type field. Then master or slave device is searched for. When found, master device (requested or those one on where slave device is found) is locked. If slave command is requested, then reset/select procedure is started to select given device.”…””}”(hj´hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¨hj£hžhubhÉ)”}”(hŒ™Then all requested in w1_netlink_msg operations are performed one by one. If command requires reply (like read command) it is sent on command completion.”h]”hŒ™Then all requested in w1_netlink_msg operations are performed one by one. If command requires reply (like read command) it is sent on command completion.”…””}”(hjÂhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¯hj£hžhubhÉ)”}”(hŒ}When all commands (w1_netlink_cmd) are processed master device is unlocked and next w1_netlink_msg header processing started.”h]”hŒ}When all commands (w1_netlink_cmd) are processed master device is unlocked and next w1_netlink_msg header processing started.”…””}”(hjÐhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K²hj£hžhubeh}”(h]”Œ7operation-steps-in-w1-core-when-new-command-is-received”ah ]”h"]”Œ7operation steps in w1 core when new command is received”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K¦ubh¢)”}”(hhh]”(h§)”}”(hŒ$Connector [1] specific documentation”h]”hŒ$Connector [1] specific documentation”…””}”(hjéhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjæhžhhŸh¶h K·ubhÉ)”}”(hXúEach connector message includes two u32 fields as "address". w1 uses CN_W1_IDX and CN_W1_VAL defined in include/linux/connector.h header. Each message also includes sequence and acknowledge numbers. Sequence number for event messages is appropriate bus master sequence number increased with each event message sent "through" this master. Sequence number for userspace requests is set by userspace application. Sequence number for reply is the same as was in request, and acknowledge number is set to seq+1.”h]”hXEach connector message includes two u32 fields as “addressâ€. w1 uses CN_W1_IDX and CN_W1_VAL defined in include/linux/connector.h header. Each message also includes sequence and acknowledge numbers. Sequence number for event messages is appropriate bus master sequence number increased with each event message sent “through†this master. Sequence number for userspace requests is set by userspace application. Sequence number for reply is the same as was in request, and acknowledge number is set to seq+1.”…””}”(hj÷hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h K¹hjæhžhubeh}”(h]”Œ"connector-1-specific-documentation”ah ]”h"]”Œ$connector [1] specific documentation”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K·ubh¢)”}”(hhh]”(h§)”}”(hŒ.Additional documentation, source code examples”h]”hŒ.Additional documentation, source code examples”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hj hžhhŸh¶h KÄubhÙ)”}”(hhh]”(hÞ)”}”(hŒ&Documentation/driver-api/connector.rst”h]”hÉ)”}”(hj#h]”hŒ&Documentation/driver-api/connector.rst”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÆhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjhžhhŸh¶h NubhÞ)”}”(hŒ©http://www.ioremap.net/archive/w1 This archive includes userspace application w1d.c which uses read/write/search commands for all master/slave devices found on the bus.”h]”(hÉ)”}”(hŒ!http://www.ioremap.net/archive/w1”h]”hŒ reference”“”)”}”(hj>h]”hŒ!http://www.ioremap.net/archive/w1”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j>uh1j@hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÇhj8ubhÉ)”}”(hŒ†This archive includes userspace application w1d.c which uses read/write/search commands for all master/slave devices found on the bus.”h]”hŒ†This archive includes userspace application w1d.c which uses read/write/search commands for all master/slave devices found on the bus.”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÈhŸh¶h KÉhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”j,j-j.hj/j0uh1hØhj hžhhŸh¶h KÆubeh}”(h]”Œ-additional-documentation-source-code-examples”ah ]”h"]”Œ.additional documentation, source code examples”ah$]”h&]”uh1h¡hh£hžhhŸh¶h KÄubeh}”(h]”Œ/userspace-communication-protocol-over-connector”ah ]”h"]”Œ/userspace communication protocol over connector”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}jzj6j3jAj>j jjãjàj jjujruŒ nametypes”}”(j}‰j6‰jA‰j ‰jã‰j ‰ju‰uh}”(jzh£j3h·j>j9jjDjàj£jjæjrj 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.