€•ÒŒ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/usb/gadget-testing”Œ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/usb/gadget-testing”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/usb/gadget-testing”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/usb/gadget-testing”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/usb/gadget-testing”Œ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/usb/gadget-testing”Œ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/usb/gadget-testing”Œ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ŒGadget Testing”h]”hŒGadget Testing”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ@/var/lib/git/docbuild/linux/Documentation/usb/gadget-testing.rst”h´KubhŒ paragraph”“”)�”}”(hŒWThis file summarizes information on basic testing of USB functions provided by gadgets.”h]”hŒWThis file summarizes information on basic testing of USB functions provided by gadgets.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒcomment”“”)�”}”(hX¶contents 1. ACM function 2. ECM function 3. ECM subset function 4. EEM function 5. FFS function 6. HID function 7. LOOPBACK function 8. MASS STORAGE function 9. MIDI function 10. NCM function 11. OBEX function 12. PHONET function 13. RNDIS function 14. SERIAL function 15. SOURCESINK function 16. UAC1 function (legacy implementation) 17. UAC2 function 18. UVC function 19. PRINTER function 20. UAC1 function (new API) 21. MIDI2 function”h]”hX¶contents 1. ACM function 2. ECM function 3. ECM subset function 4. EEM function 5. FFS function 6. HID function 7. LOOPBACK function 8. MASS STORAGE function 9. MIDI function 10. NCM function 11. OBEX function 12. PHONET function 13. RNDIS function 14. SERIAL function 15. SOURCESINK function 16. UAC1 function (legacy implementation) 17. UAC2 function 18. UVC function 19. PRINTER function 20. UAC1 function (new API) 21. MIDI2 function”…”�”}”hhÝsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hÛhh·h²hh³hÊh´K ubh¶)�”}”(hhh]”(h»)�”}”(hŒ1. ACM function”h]”hŒ1. ACM function”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhíh²hh³hÊh´K"ubhÌ)�”}”(hŒ0The function is provided by usb_f_acm.ko module.”h]”hŒ0The function is provided by usb_f_acm.ko module.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K$hhíh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´K'ubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "acm". The ACM function provides just one attribute in its function directory:”h]”hŒ“The function name to use when creating the function directory is “acmâ€�. The ACM function provides just one attribute in its function directory:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hj h²hubhŒ block_quote”“”)�”}”(hŒ port_num ”h]”hÌ)�”}”(hŒport_num”h]”hŒport_num”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´K,hj h²hubhÌ)�”}”(hŒThe attribute is read-only.”h]”hŒThe attribute is read-only.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj h²hubhÌ)�”}”(hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”h]”hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hj h²hubeh}”(h]”Œ$function-specific-configfs-interface”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhhíh²hh³hÊh´K'Œ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the ACM function”h]”hŒTesting the ACM function”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjjh²hh³hÊh´K4ubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjjh²hubhŒ literal_block”“”)�”}”(hŒcat > /dev/ttyACM”h]”hŒcat > /dev/ttyACM”…”�”}”hj‹sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´K8hjjh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K:hjjh²hubjŠ)�”}”(hŒcat /dev/ttyGS”h]”hŒcat /dev/ttyGS”…”�”}”hj§sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Khjjh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hjjh²hubjŠ)�”}”(hŒcat > /dev/ttyGS”h]”hŒcat > /dev/ttyGS”…”�”}”hjÑsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´KBhjjh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KDhjjh²hubjŠ)�”}”(hŒcat /dev/ttyACM”h]”hŒcat /dev/ttyACM”…”�”}”hjísbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´KFhjjh²hubeh}”(h]”Œtesting-the-acm-function”ah ]”h"]”Œtesting the acm function”ah$]”h&]”uh1hµhhíh²hh³hÊh´K4ubeh}”(h]”Œ acm-function”ah ]”h"]”Œ1. acm function”ah$]”h&]”uh1hµhh·h²hh³hÊh´K"ubh¶)�”}”(hhh]”(h»)�”}”(hŒ2. ECM function”h]”hŒ2. ECM function”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KIubhÌ)�”}”(hŒ0The function is provided by usb_f_ecm.ko module.”h]”hŒ0The function is provided by usb_f_ecm.ko module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhj h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj*h²hh³hÊh´KNubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "ecm". The ECM function provides these attributes in its function directory:”h]”hŒ‘The function name to use when creating the function directory is “ecmâ€�. The ECM function provides these attributes in its function directory:”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhj*h²hubj,)�”}”(hXà=============== ================================================== ifname network device interface name associated with this function instance qmult queue length multiplier for high and super speed host_addr MAC address of host's end of this Ethernet over USB link dev_addr MAC address of device's end of this Ethernet over USB link =============== ================================================== ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjTubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhjTubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjtubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KThj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjoubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqmult”h]”hŒqmult”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj­ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0queue length multiplier for high and super speed”h]”hŒ0queue length multiplier for high and super speed”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KVhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjoubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ host_addr”h]”hŒ host_addr”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KWhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjäubjx)�”}”(hhh]”hÌ)�”}”(hŒ8MAC address of host's end of this Ethernet over USB link”h]”hŒ:MAC address of host’s end of this Ethernet over USB link”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KWhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjoubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒdev_addr”h]”hŒdev_addr”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KYhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒ:MAC address of device's end of this Ethernet over USB link”h]”hŒ they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as "usb%d", which will cause the net core to choose the next free usbX interface. By default, it is set to "usb%d".”h]”hXland after creating the functions/ecm. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as “usb%dâ€�, which will cause the net core to choose the next free usbX interface. By default, it is set to “usb%dâ€�.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K]hj*h²hubeh}”(h]”Œid1”ah ]”h"]”h$]”jgah&]”uh1hµhj h²hh³hÊh´KNjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the ECM function”h]”hŒTesting the ECM function”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj€h²hh³hÊh´KdubhÌ)�”}”(hŒ8Configure IP addresses of the device and the host. Then:”h]”hŒ8Configure IP addresses of the device and the host. Then:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kfhj€h²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhj€h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hj­sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Kjhj€h²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhj€h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjÉsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Knhj€h²hubeh}”(h]”Œtesting-the-ecm-function”ah ]”h"]”Œtesting the ecm function”ah$]”h&]”uh1hµhj h²hh³hÊh´Kdubeh}”(h]”Œ ecm-function”ah ]”h"]”Œ2. ecm function”ah$]”h&]”uh1hµhh·h²hh³hÊh´KIubh¶)�”}”(hhh]”(h»)�”}”(hŒ3. ECM subset function”h]”hŒ3. ECM subset function”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjçh²hh³hÊh´KqubhÌ)�”}”(hŒ7The function is provided by usb_f_ecm_subset.ko module.”h]”hŒ7The function is provided by usb_f_ecm_subset.ko module.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kshjçh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KvubhÌ)�”}”(hŒ•The function name to use when creating the function directory is "geth". The ECM subset function provides these attributes in its function directory:”h]”hŒ™The function name to use when creating the function directory is “gethâ€�. The ECM subset function provides these attributes in its function directory:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kxhjh²hubj,)�”}”(hXà=============== ================================================== ifname network device interface name associated with this function instance qmult queue length multiplier for high and super speed host_addr MAC address of host's end of this Ethernet over USB link dev_addr MAC address of device's end of this Ethernet over USB link =============== ================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj,ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhj,ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjFubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjCubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqmult”h]”hŒqmult”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj}ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0queue length multiplier for high and super speed”h]”hŒ0queue length multiplier for high and super speed”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjCubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ host_addr”h]”hŒ host_addr”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj´ubjx)�”}”(hhh]”hÌ)�”}”(hŒ8MAC address of host's end of this Ethernet over USB link”h]”hŒ:MAC address of host’s end of this Ethernet over USB link”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjCubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒdev_addr”h]”hŒdev_addr”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjëubjx)�”}”(hhh]”hÌ)�”}”(hŒ:MAC address of device's end of this Ethernet over USB link”h]”hŒ they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as "usb%d", which will cause the net core to choose the next free usbX interface. By default, it is set to "usb%d".”h]”hXland after creating the functions/ecm. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as “usb%dâ€�, which will cause the net core to choose the next free usbX interface. By default, it is set to “usb%dâ€�.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hjh²hubeh}”(h]”Œid2”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjçh²hh³hÊh´KvjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the ECM subset function”h]”hŒTesting the ECM subset function”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjQh²hh³hÊh´KŒubhÌ)�”}”(hŒ8Configure IP addresses of the device and the host. Then:”h]”hŒ8Configure IP addresses of the device and the host. Then:”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŽhjQh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjQh²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hj~sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´K’hjQh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K”hjQh²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjšsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´K–hjQh²hubeh}”(h]”Œtesting-the-ecm-subset-function”ah ]”h"]”Œtesting the ecm subset function”ah$]”h&]”uh1hµhjçh²hh³hÊh´KŒubeh}”(h]”Œecm-subset-function”ah ]”h"]”Œ3. ecm subset function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kqubh¶)�”}”(hhh]”(h»)�”}”(hŒ4. EEM function”h]”hŒ4. EEM function”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¸h²hh³hÊh´K™ubhÌ)�”}”(hŒ0The function is provided by usb_f_eem.ko module.”h]”hŒ0The function is provided by usb_f_eem.ko module.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K›hj¸h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj×h²hh³hÊh´KžubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "eem". The EEM function provides these attributes in its function directory:”h]”hŒ‘The function name to use when creating the function directory is “eemâ€�. The EEM function provides these attributes in its function directory:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hj×h²hubj,)�”}”(hXà=============== ================================================== ifname network device interface name associated with this function instance qmult queue length multiplier for high and super speed host_addr MAC address of host's end of this Ethernet over USB link dev_addr MAC address of device's end of this Ethernet over USB link =============== ================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjýubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhjýubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqmult”h]”hŒqmult”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¦hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjNubjx)�”}”(hhh]”hÌ)�”}”(hŒ0queue length multiplier for high and super speed”h]”hŒ0queue length multiplier for high and super speed”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¦hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ host_addr”h]”hŒ host_addr”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K§hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj…ubjx)�”}”(hhh]”hÌ)�”}”(hŒ8MAC address of host's end of this Ethernet over USB link”h]”hŒ:MAC address of host’s end of this Ethernet over USB link”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K§hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒdev_addr”h]”hŒdev_addr”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K©hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¼ubjx)�”}”(hhh]”hÌ)�”}”(hŒ:MAC address of device's end of this Ethernet over USB link”h]”hŒ they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as "usb%d", which will cause the net core to choose the next free usbX interface. By default, it is set to "usb%d".”h]”hXland after creating the functions/eem. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as “usb%dâ€�, which will cause the net core to choose the next free usbX interface. By default, it is set to “usb%dâ€�.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K­hj×h²hubeh}”(h]”Œid3”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj¸h²hh³hÊh´KžjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the EEM function”h]”hŒTesting the EEM function”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj"h²hh³hÊh´K´ubhÌ)�”}”(hŒ8Configure IP addresses of the device and the host. Then:”h]”hŒ8Configure IP addresses of the device and the host. Then:”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¶hj"h²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¸hj"h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjOsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Kºhj"h²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¼hj"h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjksbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´K¾hj"h²hubeh}”(h]”Œtesting-the-eem-function”ah ]”h"]”Œtesting the eem function”ah$]”h&]”uh1hµhj¸h²hh³hÊh´K´ubeh}”(h]”Œ eem-function”ah ]”h"]”Œ4. eem function”ah$]”h&]”uh1hµhh·h²hh³hÊh´K™ubh¶)�”}”(hhh]”(h»)�”}”(hŒ5. FFS function”h]”hŒ5. FFS function”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‰h²hh³hÊh´KÁubhÌ)�”}”(hŒ/The function is provided by usb_f_fs.ko module.”h]”hŒ/The function is provided by usb_f_fs.ko module.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÃhj‰h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¨h²hh³hÊh´KÆubhÌ)�”}”(hŒ‰The function name to use when creating the function directory is "ffs". The function directory is intentionally empty and not modifiable.”h]”hŒ�The function name to use when creating the function directory is “ffsâ€�. The function directory is intentionally empty and not modifiable.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÈhj¨h²hubhÌ)�”}”(hXkAfter creating the directory there is a new instance (a "device") of FunctionFS available in the system. Once a "device" is available, the user should follow the standard procedure for using FunctionFS (mount it, run the userspace process which implements the function proper). The gadget should be enabled by writing a suitable string to usb_gadget//UDC.”h]”hXsAfter creating the directory there is a new instance (a “deviceâ€�) of FunctionFS available in the system. Once a “deviceâ€� is available, the user should follow the standard procedure for using FunctionFS (mount it, run the userspace process which implements the function proper). The gadget should be enabled by writing a suitable string to usb_gadget//UDC.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KËhj¨h²hubhÌ)�”}”(hŒGThe FFS function provides just one attribute in its function directory:”h]”hŒGThe FFS function provides just one attribute in its function directory:”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhj¨h²hubj,)�”}”(hŒready ”h]”hÌ)�”}”(hŒready”h]”hŒready”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÓhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´KÓhj¨h²hubhÌ)�”}”(hŒ«The attribute is read-only and signals if the function is ready (1) to be used, E.G. if userspace has written descriptors and strings to ep0, so the gadget can be enabled.”h]”hŒ«The attribute is read-only and signals if the function is ready (1) to be used, E.G. if userspace has written descriptors and strings to ep0, so the gadget can be enabled.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÕhj¨h²hubeh}”(h]”Œid4”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj‰h²hh³hÊh´KÆjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the FFS function”h]”hŒTesting the FFS function”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÚubhÌ)�”}”(hŒGOn the device: start the function's userspace daemon, enable the gadget”h]”hŒIOn the device: start the function’s userspace daemon, enable the gadget”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÜhjh²hubhÌ)�”}”(hŒ8On the host: use the USB function provided by the device”h]”hŒ8On the host: use the USB function provided by the device”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÞhjh²hubeh}”(h]”Œtesting-the-ffs-function”ah ]”h"]”Œtesting the ffs function”ah$]”h&]”uh1hµhj‰h²hh³hÊh´KÚubeh}”(h]”Œ ffs-function”ah ]”h"]”Œ5. ffs function”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÁubh¶)�”}”(hhh]”(h»)�”}”(hŒ6. HID function”h]”hŒ6. HID function”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjNh²hh³hÊh´KáubhÌ)�”}”(hŒ0The function is provided by usb_f_hid.ko module.”h]”hŒ0The function is provided by usb_f_hid.ko module.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KãhjNh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjmh²hh³hÊh´KæubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "hid". The HID function provides these attributes in its function directory:”h]”hŒ‘The function name to use when creating the function directory is “hidâ€�. The HID function provides these attributes in its function directory:”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kèhjmh²hubj,)�”}”(hXG=============== =========================================== protocol HID protocol to use report_desc data to be used in HID reports, except data passed with /dev/hidg report_length HID report length subclass HID subclass to use =============== =========================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj“ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K+uh1jWhj“ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒprotocol”h]”hŒprotocol”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kìhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj­ubjx)�”}”(hhh]”hÌ)�”}”(hŒHID protocol to use”h]”hŒHID protocol to use”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KìhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjªubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ report_desc”h]”hŒ report_desc”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kíhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjäubjx)�”}”(hhh]”hÌ)�”}”(hŒDdata to be used in HID reports, except data passed with /dev/hidg”h]”hŒDdata to be used in HID reports, except data passed with /dev/hidg”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kíhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjªubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ report_length”h]”hŒ report_length”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubjx)�”}”(hhh]”hÌ)�”}”(hŒHID report length”h]”hŒHID report length”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kïhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjªubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒsubclass”h]”hŒsubclass”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KðhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjR ubjx)�”}”(hhh]”hÌ)�”}”(hŒHID subclass to use”h]”hŒHID subclass to use”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhjl ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Këhjmh²hubhÌ)�”}”(hŒfFor a keyboard the protocol and the subclass are 1, the report_length is 8, while the report_desc is::”h]”hŒeFor a keyboard the protocol and the subclass are 1, the report_length is 8, while the report_desc is:”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kóhjmh²hubjŠ)�”}”(hXW$ hd my_report_desc 00000000 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 |..........)...%.| 00000010 75 01 95 08 81 02 95 01 75 08 81 03 95 05 75 01 |u.......u.....u.| 00000020 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 06 |....).....u.....| 00000030 75 08 15 00 25 65 05 07 19 00 29 65 81 00 c0 |u...%e....)e...| 0000003f”h]”hXW$ hd my_report_desc 00000000 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 |..........)...%.| 00000010 75 01 95 08 81 02 95 01 75 08 81 03 95 05 75 01 |u.......u.....u.| 00000020 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 06 |....).....u.....| 00000030 75 08 15 00 25 65 05 07 19 00 29 65 81 00 c0 |u...%e....)e...| 0000003f”…”�”}”hj° sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Köhjmh²hubhÌ)�”}”(hŒCSuch a sequence of bytes can be stored to the attribute with echo::”h]”hŒBSuch a sequence of bytes can be stored to the attribute with echo:”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kýhjmh²hubjŠ)�”}”(hŒ)$ echo -ne \\x05\\x01\\x09\\x06\\xa1.....”h]”hŒ)$ echo -ne \\x05\\x01\\x09\\x06\\xa1.....”…”�”}”hjÌ sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Kÿhjmh²hubeh}”(h]”Œid5”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjNh²hh³hÊh´KæjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the HID function”h]”hŒTesting the HID function”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjâ h²hh³hÊh´MubhÌ)�”}”(hŒDevice:”h]”hŒDevice:”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjâ h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒcreate the gadget”h]”hÌ)�”}”(hj h]”hŒcreate the gadget”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj )�”}”(hŒOconnect the gadget to a host, preferably not the one used to control the gadget”h]”hÌ)�”}”(hŒOconnect the gadget to a host, preferably not the one used to control the gadget”h]”hŒOconnect the gadget to a host, preferably not the one used to control the gadget”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubj )�”}”(hŒ run a program which writes to /dev/hidg, e.g. a userspace program found in Documentation/usb/gadget_hid.rst:: $ ./hid_gadget_test /dev/hidg0 keyboard ”h]”(hÌ)�”}”(hŒprun a program which writes to /dev/hidg, e.g. a userspace program found in Documentation/usb/gadget_hid.rst::”h]”hŒorun a program which writes to /dev/hidg, e.g. a userspace program found in Documentation/usb/gadget_hid.rst:”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj7 ubjŠ)�”}”(hŒ'$ ./hid_gadget_test /dev/hidg0 keyboard”h]”hŒ'$ ./hid_gadget_test /dev/hidg0 keyboard”…”�”}”hjI sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M hj7 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j h³hÊh´Mhjâ h²hubhÌ)�”}”(hŒHost:”h]”hŒHost:”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjâ h²hubj )�”}”(hhh]”j )�”}”(hŒ'observe the keystrokes from the gadget ”h]”hÌ)�”}”(hŒ&observe the keystrokes from the gadget”h]”hŒ&observe the keystrokes from the gadget”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjs h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jc jd uh1j h³hÊh´Mhjâ h²hubeh}”(h]”Œtesting-the-hid-function”ah ]”h"]”Œtesting the hid function”ah$]”h&]”uh1hµhjNh²hh³hÊh´Mubeh}”(h]”Œ hid-function”ah ]”h"]”Œ6. hid function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Káubh¶)�”}”(hhh]”(h»)�”}”(hŒ7. LOOPBACK function”h]”hŒ7. LOOPBACK function”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¤ h²hh³hÊh´MubhÌ)�”}”(hŒ2The function is provided by usb_f_ss_lb.ko module.”h]”hŒ2The function is provided by usb_f_ss_lb.ko module.”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¤ h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjà h²hh³hÊh´MubhÌ)�”}”(hŒ—The function name to use when creating the function directory is "Loopback". The LOOPBACK function provides these attributes in its function directory:”h]”hŒ›The function name to use when creating the function directory is “Loopbackâ€�. The LOOPBACK function provides these attributes in its function directory:”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjà h²hubj,)�”}”(hŒ–=============== ======================= qlen depth of loopback queue bulk_buflen buffer length =============== ======================= ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjé ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjé ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqlen”h]”hŒqlen”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubjx)�”}”(hhh]”hÌ)�”}”(hŒdepth of loopback queue”h]”hŒdepth of loopback queue”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ bulk_buflen”h]”hŒ bulk_buflen”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj: ubjx)�”}”(hhh]”hÌ)�”}”(hŒ buffer length”h]”hŒ buffer length”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjé ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Mhjà h²hubeh}”(h]”Œid6”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj¤ h²hh³hÊh´MjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the LOOPBACK function”h]”hŒTesting the LOOPBACK function”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj’ h²hh³hÊh´M#ubhÌ)�”}”(hŒdevice: run the gadget”h]”hŒdevice: run the gadget”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M%hj’ h²hubhÌ)�”}”(hŒ$host: test-usb (tools/usb/testusb.c)”h]”hŒ$host: test-usb (tools/usb/testusb.c)”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hj’ h²hubeh}”(h]”Œtesting-the-loopback-function”ah ]”h"]”Œtesting the loopback function”ah$]”h&]”uh1hµhj¤ h²hh³hÊh´M#ubeh}”(h]”Œloopback-function”ah ]”h"]”Œ7. loopback function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ8. MASS STORAGE function”h]”hŒ8. MASS STORAGE function”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÏ h²hh³hÊh´M*ubhÌ)�”}”(hŒ9The function is provided by usb_f_mass_storage.ko module.”h]”hŒ9The function is provided by usb_f_mass_storage.ko module.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M,hjÏ h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjî h²hh³hÊh´M/ubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "mass_storage". The MASS STORAGE function provides these attributes in its directory: files:”h]”hŒ¡The function name to use when creating the function directory is “mass_storageâ€�. The MASS STORAGE function provides these attributes in its directory: files:”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hjî h²hubj,)�”}”(hXÎ=============== ============================================== stall Set to permit function to halt bulk endpoints. Disabled on some USB devices known not to work correctly. You should set it to true. num_buffers Number of pipeline buffers. Valid numbers are 2..4. Available only if CONFIG_USB_GADGET_DEBUG_FILES is set. =============== ============================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K.uh1jWhj ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒstall”h]”hŒstall”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj. ubjx)�”}”(hhh]”hÌ)�”}”(hŒƒSet to permit function to halt bulk endpoints. Disabled on some USB devices known not to work correctly. You should set it to true.”h]”hŒƒSet to permit function to halt bulk endpoints. Disabled on some USB devices known not to work correctly. You should set it to true.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj. ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj+ ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ num_buffers”h]”hŒ num_buffers”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhje ubjx)�”}”(hhh]”hÌ)�”}”(hŒkNumber of pipeline buffers. Valid numbers are 2..4. Available only if CONFIG_USB_GADGET_DEBUG_FILES is set.”h]”hŒkNumber of pipeline buffers. Valid numbers are 2..4. Available only if CONFIG_USB_GADGET_DEBUG_FILES is set.”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj+ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M5hjî h²hubhÌ)�”}”(hŒ;and a default lun.0 directory corresponding to SCSI LUN #0.”h]”hŒ;and a default lun.0 directory corresponding to SCSI LUN #0.”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjî h²hubhÌ)�”}”(hŒ#A new lun can be added with mkdir::”h]”hŒ"A new lun can be added with mkdir:”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hjî h²hubjŠ)�”}”(hŒ,$ mkdir functions/mass_storage.0/partition.5”h]”hŒ,$ mkdir functions/mass_storage.0/partition.5”…”�”}”hjÑ sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MBhjî h²hubhÌ)�”}”(hX8Lun numbering does not have to be continuous, except for lun #0 which is created by default. A maximum of 8 luns can be specified and they all must be named following the . scheme. The numbers can be 0..8. Probably a good convention is to name the luns "lun.", although it is not mandatory.”h]”hX<Lun numbering does not have to be continuous, except for lun #0 which is created by default. A maximum of 8 luns can be specified and they all must be named following the . scheme. The numbers can be 0..8. Probably a good convention is to name the luns “lun.â€�, although it is not mandatory.”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MDhjî h²hubhÌ)�”}”(hŒ>In each lun directory there are the following attribute files:”h]”hŒ>In each lun directory there are the following attribute files:”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhjî h²hubj,)�”}”(hX;=============== ============================================== file The path to the backing file for the LUN. Required if LUN is not marked as removable. ro Flag specifying access to the LUN shall be read-only. This is implied if CD-ROM emulation is enabled as well as when it was impossible to open "filename" in R/W mode. removable Flag specifying that LUN shall be indicated as being removable. cdrom Flag specifying that LUN shall be reported as being a CD-ROM. nofua Flag specifying that FUA flag in SCSI WRITE(10,12) forced_eject This write-only file is useful only when the function is active. It causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. Any non-zero number of bytes written will result in ejection. =============== ============================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K.uh1jWhj ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MMhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubjx)�”}”(hhh]”hÌ)�”}”(hŒUThe path to the backing file for the LUN. Required if LUN is not marked as removable.”h]”hŒUThe path to the backing file for the LUN. Required if LUN is not marked as removable.”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MMhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒro”h]”hŒro”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjS ubjx)�”}”(hhh]”hÌ)�”}”(hŒ¦Flag specifying access to the LUN shall be read-only. This is implied if CD-ROM emulation is enabled as well as when it was impossible to open "filename" in R/W mode.”h]”hŒªFlag specifying access to the LUN shall be read-only. This is implied if CD-ROM emulation is enabled as well as when it was impossible to open “filenameâ€� in R/W mode.”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhjm ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjS ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ removable”h]”hŒ removable”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjŠ ubjx)�”}”(hhh]”hÌ)�”}”(hŒ?Flag specifying that LUN shall be indicated as being removable.”h]”hŒ?Flag specifying that LUN shall be indicated as being removable.”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjŠ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒcdrom”h]”hŒcdrom”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÁ ubjx)�”}”(hhh]”hÌ)�”}”(hŒ=Flag specifying that LUN shall be reported as being a CD-ROM.”h]”hŒ=Flag specifying that LUN shall be reported as being a CD-ROM.”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÁ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒnofua”h]”hŒnofua”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MWhjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjø ubjx)�”}”(hhh]”hÌ)�”}”(hŒ2Flag specifying that FUA flag in SCSI WRITE(10,12)”h]”hŒ2Flag specifying that FUA flag in SCSI WRITE(10,12)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ forced_eject”h]”hŒ forced_eject”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj/ubjx)�”}”(hhh]”hÌ)�”}”(hŒîThis write-only file is useful only when the function is active. It causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. Any non-zero number of bytes written will result in ejection.”h]”hŒîThis write-only file is useful only when the function is active. It causes the backing file to be forcibly detached from the LUN, regardless of whether the host has allowed it. Any non-zero number of bytes written will result in ejection.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MLhjî h²hubeh}”(h]”Œid7”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjÏ h²hh³hÊh´M/jiKubh¶)�”}”(hhh]”(h»)�”}”(hŒ!Testing the MASS STORAGE function”h]”hŒ!Testing the MASS STORAGE function”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‡h²hh³hÊh´MbubhÌ)�”}”(hŒzdevice: connect the gadget, enable it host: dmesg, see the USB drives appear (if system configured to automatically mount)”h]”hŒzdevice: connect the gadget, enable it host: dmesg, see the USB drives appear (if system configured to automatically mount)”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mdhj‡h²hubeh}”(h]”Œ!testing-the-mass-storage-function”ah ]”h"]”Œ!testing the mass storage function”ah$]”h&]”uh1hµhjÏ h²hh³hÊh´Mbubeh}”(h]”Œmass-storage-function”ah ]”h"]”Œ8. mass storage function”ah$]”h&]”uh1hµhh·h²hh³hÊh´M*ubh¶)�”}”(hhh]”(h»)�”}”(hŒ9. MIDI function”h]”hŒ9. MIDI function”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¶h²hh³hÊh´MiubhÌ)�”}”(hŒ1The function is provided by usb_f_midi.ko module.”h]”hŒ1The function is provided by usb_f_midi.ko module.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mkhj¶h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÕh²hh³hÊh´MnubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "midi". The MIDI function provides these attributes in its function directory:”h]”hŒ“The function name to use when creating the function directory is “midiâ€�. The MIDI function provides these attributes in its function directory:”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MphjÕh²hubj,)�”}”(hXµ================ ==================================== buflen MIDI buffer length id ID string for the USB MIDI adapter in_ports number of MIDI input ports index index value for the USB MIDI adapter out_ports number of MIDI output ports qlen USB read request queue length interface_string USB AudioControl interface string ================ ==================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjûubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K$uh1jWhjûubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mthjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒMIDI buffer length”h]”hŒMIDI buffer length”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mthj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒid”h]”hŒid”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MuhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjLubjx)�”}”(hhh]”hÌ)�”}”(hŒ"ID string for the USB MIDI adapter”h]”hŒ"ID string for the USB MIDI adapter”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Muhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒin_ports”h]”hŒin_ports”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjƒubjx)�”}”(hhh]”hÌ)�”}”(hŒnumber of MIDI input ports”h]”hŒnumber of MIDI input ports”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mwhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjºubjx)�”}”(hhh]”hÌ)�”}”(hŒ$index value for the USB MIDI adapter”h]”hŒ$index value for the USB MIDI adapter”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MwhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ out_ports”h]”hŒ out_ports”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mxhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjñubjx)�”}”(hhh]”hÌ)�”}”(hŒnumber of MIDI output ports”h]”hŒnumber of MIDI output ports”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mxhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqlen”h]”hŒqlen”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Myhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj(ubjx)�”}”(hhh]”hÌ)�”}”(hŒUSB read request queue length”h]”hŒUSB read request queue length”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MyhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒinterface_string”h]”hŒinterface_string”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mzhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj_ubjx)�”}”(hhh]”hÌ)�”}”(hŒ!USB AudioControl interface string”h]”hŒ!USB AudioControl interface string”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mzhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjûubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MshjÕh²hubeh}”(h]”Œid8”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj¶h²hh³hÊh´MnjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the MIDI function”h]”hŒTesting the MIDI function”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj·h²hh³hÊh´M~ubhÌ)�”}”(hŒmThere are two cases: playing a mid from the gadget to the host and playing a mid from the host to the gadget.”h]”hŒmThere are two cases: playing a mid from the gadget to the host and playing a mid from the host to the gadget.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M€hj·h²hubhŒenumerated_list”“”)�”}”(hhh]”j )�”}”(hŒ+Playing a mid from the gadget to the host: ”h]”hÌ)�”}”(hŒ*Playing a mid from the gadget to the host:”h]”hŒ*Playing a mid from the gadget to the host:”…”�”}”(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´Nubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1jÖhj·h²hh³hÊh´MƒubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M…hj·h²hubjŠ)�”}”(hŒå$ arecordmidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 $ arecordmidi -p 24:0 from_gadget.mid”h]”hŒå$ arecordmidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 $ arecordmidi -p 24:0 from_gadget.mid”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M‡hj·h²hubhÌ)�”}”(hŒgadget::”h]”hŒgadget:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hj·h²hubjŠ)�”}”(hŒ”$ aplaymidi -l Port Client name Port name 20:0 f_midi f_midi $ aplaymidi -p 20:0 to_host.mid”h]”hŒ”$ aplaymidi -l Port Client name Port name 20:0 f_midi f_midi $ aplaymidi -p 20:0 to_host.mid”…”�”}”hj(sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M�hj·h²hubj×)�”}”(hhh]”j )�”}”(hŒ*Playing a mid from the host to the gadget ”h]”hÌ)�”}”(hŒ)Playing a mid from the host to the gadget”h]”hŒ)Playing a mid from the host to the gadget”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6h²hh³hÊh´Nubah}”(h]”h ]”h"]”h$]”h&]”jùjújûhjüjýŒstart”Kuh1jÖhj·h²hh³hÊh´M•ubhÌ)�”}”(hŒgadget::”h]”hŒgadget:”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hj·h²hubjŠ)�”}”(hŒš$ arecordmidi -l Port Client name Port name 20:0 f_midi f_midi $ arecordmidi -p 20:0 from_host.mid”h]”hŒš$ arecordmidi -l Port Client name Port name 20:0 f_midi f_midi $ arecordmidi -p 20:0 from_host.mid”…”�”}”hjfsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M™hj·h²hubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MŸhj·h²hubjŠ)�”}”(hŒß$ aplaymidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 $ aplaymidi -p24:0 to_gadget.mid”h]”hŒß$ aplaymidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 $ aplaymidi -p24:0 to_gadget.mid”…”�”}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M¡hj·h²hubhÌ)�”}”(hŒ>The from_gadget.mid should sound identical to the to_host.mid.”h]”hŒ>The from_gadget.mid should sound identical to the to_host.mid.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¨hj·h²hubhÌ)�”}”(hŒ=The from_host.id should sound identical to the to_gadget.mid.”h]”hŒ=The from_host.id should sound identical to the to_gadget.mid.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mªhj·h²hubhÌ)�”}”(hŒNMIDI files can be played to speakers/headphones with e.g. timidity installed::”h]”hŒMMIDI files can be played to speakers/headphones with e.g. timidity installed:”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¬hj·h²hubjŠ)�”}”(hXÄ$ aplaymidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 128:0 TiMidity TiMidity port 0 128:1 TiMidity TiMidity port 1 128:2 TiMidity TiMidity port 2 128:3 TiMidity TiMidity port 3 $ aplaymidi -p 128:0 file.mid”h]”hXÄ$ aplaymidi -l Port Client name Port name 14:0 Midi Through Midi Through Port-0 24:0 MIDI Gadget MIDI Gadget MIDI 1 128:0 TiMidity TiMidity port 0 128:1 TiMidity TiMidity port 1 128:2 TiMidity TiMidity port 2 128:3 TiMidity TiMidity port 3 $ aplaymidi -p 128:0 file.mid”…”�”}”hjºsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M®hj·h²hubhÌ)�”}”(hŒHMIDI ports can be logically connected using the aconnect utility, e.g.::”h]”hŒGMIDI ports can be logically connected using the aconnect utility, e.g.:”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¹hj·h²hubjŠ)�”}”(hŒ*$ aconnect 24:0 128:0 # try it on the host”h]”hŒ*$ aconnect 24:0 128:0 # try it on the host”…”�”}”hjÖsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M»hj·h²hubhÌ)�”}”(hŒ¤After the gadget's MIDI port is connected to timidity's MIDI port, whatever is played at the gadget side with aplaymidi -l is audible in host's speakers/headphones.”h]”hŒªAfter the gadget’s MIDI port is connected to timidity’s MIDI port, whatever is played at the gadget side with aplaymidi -l is audible in host’s speakers/headphones.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M½hj·h²hubeh}”(h]”Œtesting-the-midi-function”ah ]”h"]”Œtesting the midi function”ah$]”h&]”uh1hµhj¶h²hh³hÊh´M~ubeh}”(h]”Œ midi-function”ah ]”h"]”Œ9. midi function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Miubh¶)�”}”(hhh]”(h»)�”}”(hŒ10. NCM function”h]”hŒ10. NCM function”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´MÂubhÌ)�”}”(hŒ0The function is provided by usb_f_ncm.ko module.”h]”hŒ0The function is provided by usb_f_ncm.ko module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÄhjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj!h²hh³hÊh´MÇubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "ncm". The NCM function provides these attributes in its function directory:”h]”hŒ‘The function name to use when creating the function directory is “ncmâ€�. The NCM function provides these attributes in its function directory:”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÉhj!h²hubj,)�”}”(hX¡======================= ================================================== ifname network device interface name associated with this function instance qmult queue length multiplier for high and super speed host_addr MAC address of host's end of this Ethernet over USB link dev_addr MAC address of device's end of this Ethernet over USB link max_segment_size Segment size required for P2P connections. This will set MTU to 14 bytes ======================= ================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjGubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhjGubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjaubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj^ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqmult”h]”hŒqmult”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj˜ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0queue length multiplier for high and super speed”h]”hŒ0queue length multiplier for high and super speed”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj^ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ host_addr”h]”hŒ host_addr”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÏubjx)�”}”(hhh]”hÌ)�”}”(hŒ8MAC address of host's end of this Ethernet over USB link”h]”hŒ:MAC address of host’s end of this Ethernet over USB link”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj^ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒdev_addr”h]”hŒdev_addr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒ:MAC address of device's end of this Ethernet over USB link”h]”hŒ they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as "usb%d", which will cause the net core to choose the next free usbX interface. By default, it is set to "usb%d".”•h]”hXland after creating the functions/ncm. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as “usb%dâ€�, which will cause the net core to choose the next free usbX interface. By default, it is set to “usb%dâ€�.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MØhj!h²hubeh}”(h]”Œid9”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjh²hh³hÊh´MÇjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the NCM function”h]”hŒTesting the NCM function”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj£h²hh³hÊh´MßubhÌ)�”}”(hŒ8Configure IP addresses of the device and the host. Then:”h]”hŒ8Configure IP addresses of the device and the host. Then:”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Máhj£h²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mãhj£h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjÐsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Måhj£h²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mçhj£h²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hjìsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Méhj£h²hubeh}”(h]”Œtesting-the-ncm-function”ah ]”h"]”Œtesting the ncm function”ah$]”h&]”uh1hµhjh²hh³hÊh´Mßubeh}”(h]”Œ ncm-function”ah ]”h"]”Œ10. ncm function”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÂubh¶)�”}”(hhh]”(h»)�”}”(hŒ11. OBEX function”h]”hŒ11. OBEX function”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´MìubhÌ)�”}”(hŒ1The function is provided by usb_f_obex.ko module.”h]”hŒ1The function is provided by usb_f_obex.ko module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mîhj h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj)h²hh³hÊh´MñubhÌ)�”}”(hŒ‘The function name to use when creating the function directory is "obex". The OBEX function provides just one attribute in its function directory:”h]”hŒ•The function name to use when creating the function directory is “obexâ€�. The OBEX function provides just one attribute in its function directory:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Móhj)h²hubj,)�”}”(hŒ port_num ”h]”hÌ)�”}”(hŒport_num”h]”hŒport_num”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MöhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Möhj)h²hubhÌ)�”}”(hŒThe attribute is read-only.”h]”hŒThe attribute is read-only.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Møhj)h²hubhÌ)�”}”(hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”h]”hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Múhj)h²hubeh}”(h]”Œid10”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj h²hh³hÊh´MñjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the OBEX function”h]”hŒTesting the OBEX function”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj„h²hh³hÊh´MýubhÌ)�”}”(hŒ On device::”h]”hŒ On device:”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mÿhj„h²hubjŠ)�”}”(hŒ seriald -f /dev/ttyGS -s 1024”h]”hŒ seriald -f /dev/ttyGS -s 1024”…”�”}”hj£sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mhj„h²hubhÌ)�”}”(hŒ On host::”h]”hŒOn host:”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj„h²hubjŠ)�”}”(hŒsserialc -v -p -i -a1 -s1024 \ -t -r”h]”hŒsserialc -v -p -i -a1 -s1024 \ -t -r”…”�”}”hj¿sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mhj„h²hubhÌ)�”}”(hŒwhere seriald and serialc are Felipe’s utilities found here:”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj„h²hubj,)�”}”(hŒ4https://github.com/felipebalbi/usb-tools.git master ”h]”hÌ)�”}”(hŒ3https://github.com/felipebalbi/usb-tools.git master”h]”(hŒ reference”“”)�”}”(hŒ,https://github.com/felipebalbi/usb-tools.git”h]”hŒ,https://github.com/felipebalbi/usb-tools.git”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jçuh1jãhjßubhŒ master”…”�”}”(hjßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M hj„h²hubeh}”(h]”Œtesting-the-obex-function”ah ]”h"]”Œtesting the obex function”ah$]”h&]”uh1hµhj h²hh³hÊh´Mýubeh}”(h]”Œ obex-function”ah ]”h"]”Œ11. obex function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mìubh¶)�”}”(hhh]”(h»)�”}”(hŒ12. PHONET function”h]”hŒ12. PHONET function”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M ubhÌ)�”}”(hŒ3The function is provided by usb_f_phonet.ko module.”h]”hŒ3The function is provided by usb_f_phonet.ko module.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj3h²hh³hÊh´MubhÌ)�”}”(hŒ•The function name to use when creating the function directory is "phonet". The PHONET function provides just one attribute in its function directory:”h]”hŒ™The function name to use when creating the function directory is “phonetâ€�. The PHONET function provides just one attribute in its function directory:”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj3h²hubj,)�”}”(hŒë=============== ================================================== ifname network device interface name associated with this function instance =============== ================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjYubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhjYubjn)�”}”(hhh]”js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjsubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jmhjYubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Mhj3h²hubeh}”(h]”Œid11”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjh²hh³hÊh´MjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the PHONET function”h]”hŒTesting the PHONET function”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjËh²hh³hÊh´MubhÌ)�”}”(hŒÊIt is not possible to test the SOCK_STREAM protocol without a specific piece of hardware, so only SOCK_DGRAM has been tested. For the latter to work, in the past I had to apply the patch mentioned here:”h]”hŒÊIt is not possible to test the SOCK_STREAM protocol without a specific piece of hardware, so only SOCK_DGRAM has been tested. For the latter to work, in the past I had to apply the patch mentioned here:”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjËh²hubhÌ)�”}”(hŒ4http://www.spinics.net/lists/linux-usb/msg85689.html”h]”jä)�”}”(hjìh]”hŒ4http://www.spinics.net/lists/linux-usb/msg85689.html”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jìuh1jãhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M#hjËh²hubhÌ)�”}”(hŒThese tools are required:”h]”hŒThese tools are required:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M%hjËh²hubhÌ)�”}”(hŒ7git://git.gitorious.org/meego-cellular/phonet-utils.git”h]”hŒ7git://git.gitorious.org/meego-cellular/phonet-utils.git”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hjËh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M)hjËh²hubjŠ)�”}”(hŒh$ ./phonet -a 0x10 -i usbpn0 $ ./pnroute add 0x6c usbpn0 $./pnroute add 0x10 usbpn0 $ ifconfig usbpn0 up”h]”hŒh$ ./phonet -a 0x10 -i usbpn0 $ ./pnroute add 0x6c usbpn0 $./pnroute add 0x10 usbpn0 $ ifconfig usbpn0 up”…”�”}”hj,sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M+hjËh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hjËh²hubjŠ)�”}”(hŒS$ ./phonet -a 0x6c -i upnlink0 $ ./pnroute add 0x10 upnlink0 $ ifconfig upnlink0 up”h]”hŒS$ ./phonet -a 0x6c -i upnlink0 $ ./pnroute add 0x10 upnlink0 $ ifconfig upnlink0 up”…”�”}”hjHsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M2hjËh²hubhÌ)�”}”(hŒ!Then a test program can be used::”h]”hŒ Then a test program can be used:”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hjËh²hubjŠ)�”}”(hŒ4http://www.spinics.net/lists/linux-usb/msg85690.html”h]”hŒ4http://www.spinics.net/lists/linux-usb/msg85690.html”…”�”}”hjdsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M8hjËh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M:hjËh²hubjŠ)�”}”(hŒ$ ./pnxmit -a 0x6c -r”h]”hŒ$ ./pnxmit -a 0x6c -r”…”�”}”hj€sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M<hjËh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjËh²hubjŠ)�”}”(hŒ$ ./pnxmit -a 0x10 -s 0x6c”h]”hŒ$ ./pnxmit -a 0x10 -s 0x6c”…”�”}”hjœsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M@hjËh²hubhÌ)�”}”(hŒSAs a result some data should be sent from host to device. Then the other way round:”h]”hŒSAs a result some data should be sent from host to device. Then the other way round:”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MBhjËh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MEhjËh²hubjŠ)�”}”(hŒ$ ./pnxmit -a 0x10 -r”h]”hŒ$ ./pnxmit -a 0x10 -r”…”�”}”hjÆsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MGhjËh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjËh²hubjŠ)�”}”(hŒ$ ./pnxmit -a 0x6c -s 0x10”h]”hŒ$ ./pnxmit -a 0x6c -s 0x10”…”�”}”hjâsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MKhjËh²hubeh}”(h]”Œtesting-the-phonet-function”ah ]”h"]”Œtesting the phonet function”ah$]”h&]”uh1hµhjh²hh³hÊh´Mubeh}”(h]”Œphonet-function”ah ]”h"]”Œ12. phonet function”ah$]”h&]”uh1hµhh·h²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ13. RNDIS function”h]”hŒ13. RNDIS function”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´MNubhÌ)�”}”(hŒ2The function is provided by usb_f_rndis.ko module.”h]”hŒ2The function is provided by usb_f_rndis.ko module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´MSubhÌ)�”}”(hŒ‘The function name to use when creating the function directory is "rndis". The RNDIS function provides these attributes in its function directory:”h]”hŒ•The function name to use when creating the function directory is “rndisâ€�. The RNDIS function provides these attributes in its function directory:”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhjh²hubj,)�”}”(hXà=============== ================================================== ifname network device interface name associated with this function instance qmult queue length multiplier for high and super speed host_addr MAC address of host's end of this Ethernet over USB link dev_addr MAC address of device's end of this Ethernet over USB link =============== ================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjEubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1jWhjEubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒifname”h]”hŒifname”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj_ubjx)�”}”(hhh]”hÌ)�”}”(hŒDnetwork device interface name associated with this function instance”h]”hŒDnetwork device interface name associated with this function instance”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj\ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒqmult”h]”hŒqmult”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M[hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj–ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0queue length multiplier for high and super speed”h]”hŒ0queue length multiplier for high and super speed”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M[hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj\ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ host_addr”h]”hŒ host_addr”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M\hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÍubjx)�”}”(hhh]”hÌ)�”}”(hŒ8MAC address of host's end of this Ethernet over USB link”h]”hŒ:MAC address of host’s end of this Ethernet over USB link”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M\hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj\ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒdev_addr”h]”hŒdev_addr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M^hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒ:MAC address of device's end of this Ethernet over USB link”h]”hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MXhjh²hubhÌ)�”}”(hXfand after creating the functions/rndis. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as "usb%d", which will cause the net core to choose the next free usbX interface. By default, it is set to "usb%d".”h]”hXnand after creating the functions/rndis. they contain default values: qmult is 5, dev_addr and host_addr are randomly selected. The ifname can be written to if the function is not bound. A write must be an interface pattern such as “usb%dâ€�, which will cause the net core to choose the next free usbX interface. By default, it is set to “usb%dâ€�.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mbhjh²hubeh}”(h]”Œid12”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjh²hh³hÊh´MSjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the RNDIS function”h]”hŒTesting the RNDIS function”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjjh²hh³hÊh´MiubhÌ)�”}”(hŒ8Configure IP addresses of the device and the host. Then:”h]”hŒ8Configure IP addresses of the device and the host. Then:”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mkhjjh²hubhÌ)�”}”(hŒOn the device::”h]”hŒOn the device:”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mmhjjh²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hj—sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mohjjh²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mqhjjh²hubjŠ)�”}”(hŒping ”h]”hŒping ”…”�”}”hj³sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mshjjh²hubeh}”(h]”Œtesting-the-rndis-function”ah ]”h"]”Œtesting the rndis function”ah$]”h&]”uh1hµhjh²hh³hÊh´Miubeh}”(h]”Œrndis-function”ah ]”h"]”Œ13. rndis function”ah$]”h&]”uh1hµhh·h²hh³hÊh´MNubh¶)�”}”(hhh]”(h»)�”}”(hŒ14. SERIAL function”h]”hŒ14. SERIAL function”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÑh²hh³hÊh´MvubhÌ)�”}”(hŒ1The function is provided by usb_f_gser.ko module.”h]”hŒ1The function is provided by usb_f_gser.ko module.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MxhjÑh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjðh²hh³hÊh´M{ubhÌ)�”}”(hŒ“The function name to use when creating the function directory is "gser". The SERIAL function provides just one attribute in its function directory:”h]”hŒ—The function name to use when creating the function directory is “gserâ€�. The SERIAL function provides just one attribute in its function directory:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M}hjðh²hubj,)�”}”(hŒ port_num ”h]”hÌ)�”}”(hŒport_num”h]”hŒport_num”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M€hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M€hjðh²hubhÌ)�”}”(hŒThe attribute is read-only.”h]”hŒThe attribute is read-only.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‚hjðh²hubhÌ)�”}”(hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”h]”hŒCThere can be at most 4 ACM/generic serial/OBEX ports in the system.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M„hjðh²hubeh}”(h]”Œid13”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjÑh²hh³hÊh´M{jiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the SERIAL function”h]”hŒTesting the SERIAL function”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjKh²hh³hÊh´M‡ubhÌ)�”}”(hŒ On host::”h]”hŒOn host:”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‰hjKh²hubjŠ)�”}”(hŒIinsmod usbserial echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id”h]”hŒIinsmod usbserial echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M‹hjKh²hubhÌ)�”}”(hŒ On host::”h]”hŒOn host:”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MŽhjKh²hubjŠ)�”}”(hŒcat > /dev/ttyUSB”h]”hŒcat > /dev/ttyUSB”…”�”}”hj†sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M�hjKh²hubhÌ)�”}”(hŒ On target::”h]”hŒ On target:”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hjKh²hubjŠ)�”}”(hŒcat /dev/ttyGS”h]”hŒcat /dev/ttyGS”…”�”}”hj¢sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M”hjKh²hubhÌ)�”}”(hŒthen the other way round”h]”hŒthen the other way round”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M–hjKh²hubhÌ)�”}”(hŒ On target::”h]”hŒ On target:”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M˜hjKh²hubjŠ)�”}”(hŒcat > /dev/ttyGS”h]”hŒcat > /dev/ttyGS”…”�”}”hjÌsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MšhjKh²hubhÌ)�”}”(hŒ On host::”h]”hŒOn host:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MœhjKh²hubjŠ)�”}”(hŒcat /dev/ttyUSB”h]”hŒcat /dev/ttyUSB”…”�”}”hjèsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MžhjKh²hubeh}”(h]”Œtesting-the-serial-function”ah ]”h"]”Œtesting the serial function”ah$]”h&]”uh1hµhjÑh²hh³hÊh´M‡ubeh}”(h]”Œserial-function”ah ]”h"]”Œ14. serial function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mvubh¶)�”}”(hhh]”(h»)�”}”(hŒ15. SOURCESINK function”h]”hŒ15. SOURCESINK function”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´M¡ubhÌ)�”}”(hŒ2The function is provided by usb_f_ss_lb.ko module.”h]”hŒ2The function is provided by usb_f_ss_lb.ko module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M£hjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj%h²hh³hÊh´M¦ubhÌ)�”}”(hŒ›The function name to use when creating the function directory is "SourceSink". The SOURCESINK function provides these attributes in its function directory:”h]”hŒŸThe function name to use when creating the function directory is “SourceSinkâ€�. The SOURCESINK function provides these attributes in its function directory:”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¨hj%h²hubj,)�”}”(hX®=============== ================================== pattern 0 (all zeros), 1 (mod63), 2 (none) isoc_interval 1..16 isoc_maxpacket 0 - 1023 (fs), 0 - 1024 (hs/ss) isoc_mult 0..2 (hs/ss only) isoc_maxburst 0..15 (ss only) bulk_buflen buffer length bulk_maxburst 0..15 (ss only) bulk_qlen depth of queue for bulk iso_qlen depth of queue for iso =============== ================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjKubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K"uh1jWhjKubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒpattern”h]”hŒpattern”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¬hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjeubjx)�”}”(hhh]”hÌ)�”}”(hŒ"0 (all zeros), 1 (mod63), 2 (none)”h]”hŒ"0 (all zeros), 1 (mod63), 2 (none)”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¬hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ isoc_interval”h]”hŒ isoc_interval”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M­hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjœubjx)�”}”(hhh]”hÌ)�”}”(hŒ1..16”h]”hŒ1..16”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M­hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒisoc_maxpacket”h]”hŒisoc_maxpacket”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M®hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÓubjx)�”}”(hhh]”hÌ)�”}”(hŒ0 - 1023 (fs), 0 - 1024 (hs/ss)”h]”hŒ0 - 1023 (fs), 0 - 1024 (hs/ss)”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M®hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ isoc_mult”h]”hŒ isoc_mult”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¯hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0..2 (hs/ss only)”h]”hŒ0..2 (hs/ss only)”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¯hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ isoc_maxburst”h]”hŒ isoc_maxburst”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M°hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjAubjx)�”}”(hhh]”hÌ)�”}”(hŒ0..15 (ss only)”h]”hŒ0..15 (ss only)”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M°hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ bulk_buflen”h]”hŒ bulk_buflen”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M±hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjxubjx)�”}”(hhh]”hÌ)�”}”(hŒ buffer length”h]”hŒ buffer length”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M±hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ bulk_maxburst”h]”hŒ bulk_maxburst”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M²hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¯ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0..15 (ss only)”h]”hŒ0..15 (ss only)”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M²hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ bulk_qlen”h]”hŒ bulk_qlen”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M³hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjæubjx)�”}”(hhh]”hÌ)�”}”(hŒdepth of queue for bulk”h]”hŒdepth of queue for bulk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M³hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒiso_qlen”h]”hŒiso_qlen”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒdepth of queue for iso”h]”hŒdepth of queue for iso”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjKubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M«hj%h²hubeh}”(h]”Œid14”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjh²hh³hÊh´M¦jiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the SOURCESINK function”h]”hŒTesting the SOURCESINK function”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjuh²hh³hÊh´M¸ubhÌ)�”}”(hŒdevice: run the gadget”h]”hŒdevice: run the gadget”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mºhjuh²hubhÌ)�”}”(hŒ$host: test-usb (tools/usb/testusb.c)”h]”hŒ$host: test-usb (tools/usb/testusb.c)”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¼hjuh²hubeh}”(h]”Œtesting-the-sourcesink-function”ah ]”h"]”Œtesting the sourcesink function”ah$]”h&]”uh1hµhjh²hh³hÊh´M¸ubeh}”(h]”Œsourcesink-function”ah ]”h"]”Œ15. sourcesink function”ah$]”h&]”uh1hµhh·h²hh³hÊh´M¡ubh¶)�”}”(hhh]”(h»)�”}”(hŒ)16. UAC1 function (legacy implementation)”h]”hŒ)16. UAC1 function (legacy implementation)”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj²h²hh³hÊh´MÀubhÌ)�”}”(hŒ8The function is provided by usb_f_uac1_legacy.ko module.”h]”hŒ8The function is provided by usb_f_uac1_legacy.ko module.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÂhj²h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÑh²hh³hÊh´MÅubhÌ)�”}”(hŒ–The function name to use when creating the function directory is "uac1_legacy". The uac1 function provides these attributes in its function directory:”h]”hŒšThe function name to use when creating the function directory is “uac1_legacyâ€�. The uac1 function provides these attributes in its function directory:”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÇhjÑh²hubj,)�”}”(hŒð=============== ==================================== audio_buf_size audio buffer size req_buf_size ISO OUT endpoint request buffer size req_count ISO OUT endpoint request count =============== ==================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj÷ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K$uh1jWhj÷ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒaudio_buf_size”h]”hŒaudio_buf_size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÌhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒaudio buffer size”h]”hŒaudio buffer size”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÌhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ req_buf_size”h]”hŒ req_buf_size”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjHubjx)�”}”(hhh]”hÌ)�”}”(hŒ$ISO OUT endpoint request buffer size”h]”hŒ$ISO OUT endpoint request buffer size”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ req_count”h]”hŒ req_count”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÎhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubjx)�”}”(hhh]”hÌ)�”}”(hŒISO OUT endpoint request count”h]”hŒISO OUT endpoint request count”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÎhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MËhjÑh²hubhÌ)�”}”(hŒ(The attributes have sane default values.”h]”hŒ(The attributes have sane default values.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÑhjÑh²hubeh}”(h]”Œid15”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj²h²hh³hÊh´MÅjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the UAC1 function”h]”hŒTesting the UAC1 function”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjåh²hh³hÊh´MÔubhÌ)�”}”(hŒdevice: run the gadget”h]”hŒdevice: run the gadget”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÖhjåh²hubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MØhjåh²hubjŠ)�”}”(hŒ+aplay -l # should list our USB Audio Gadget”h]”hŒ+aplay -l # should list our USB Audio Gadget”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MÚhjåh²hubeh}”(h]”Œtesting-the-uac1-function”ah ]”h"]”h$]”Œtesting the uac1 function”ah&]”uh1hµhj²h²hh³hÊh´MÔjiKubeh}”(h]”Œ#uac1-function-legacy-implementation”ah ]”h"]”Œ)16. uac1 function (legacy implementation)”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÀubh¶)�”}”(hhh]”(h»)�”}”(hŒ17. UAC2 function”h]”hŒ17. UAC2 function”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj0h²hh³hÊh´MÝubhÌ)�”}”(hŒ1The function is provided by usb_f_uac2.ko module.”h]”hŒ1The function is provided by usb_f_uac2.ko module.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mßhj0h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjOh²hh³hÊh´MâubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "uac2". The uac2 function provides these attributes in its function directory:”h]”hŒ“The function name to use when creating the function directory is “uac2â€�. The uac2 function provides these attributes in its function directory:”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MähjOh²hubj,)�”}”(hXË================ ==================================================== c_chmask capture channel mask c_srate list of capture sampling rates (comma-separated) c_ssize capture sample size (bytes) c_sync capture synchronization type (async/adaptive) c_mute_present capture mute control enable c_volume_present capture volume control enable c_volume_min capture volume control min value (in 1/256 dB) c_volume_max capture volume control max value (in 1/256 dB) c_volume_res capture volume control resolution (in 1/256 dB) c_hs_bint capture bInterval for HS/SS (1-4: fixed, 0: auto) fb_max maximum extra bandwidth in async mode p_chmask playback channel mask p_srate list of playback sampling rates (comma-separated) p_ssize playback sample size (bytes) p_mute_present playback mute control enable p_volume_present playback volume control enable p_volume_min playback volume control min value (in 1/256 dB) p_volume_max playback volume control max value (in 1/256 dB) p_volume_res playback volume control resolution (in 1/256 dB) p_hs_bint playback bInterval for HS/SS (1-4: fixed, 0: auto) req_number the number of pre-allocated request for both capture and playback function_name name of the interface if_ctrl_name topology control name clksrc_in_name input clock name clksrc_out_name output clock name p_it_name playback input terminal name p_it_ch_name playback input first channel name p_ot_name playback output terminal name p_fu_vol_name playback function unit name c_it_name capture input terminal name c_it_ch_name capture input first channel name c_ot_name capture output terminal name c_fu_vol_name capture functional unit name c_terminal_type code of the capture terminal type p_terminal_type code of the playback terminal type ================ ==================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjuubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1jWhjuubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_chmask”h]”hŒc_chmask”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mèhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj�ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture channel mask”h]”hŒcapture channel mask”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mèhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_srate”h]”hŒc_srate”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MéhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÆubjx)�”}”(hhh]”hÌ)�”}”(hŒ0list of capture sampling rates (comma-separated)”h]”hŒ0list of capture sampling rates (comma-separated)”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Méhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_ssize”h]”hŒc_ssize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mêhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjýubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture sample size (bytes)”h]”hŒcapture sample size (bytes)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mêhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_sync”h]”hŒc_sync”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mëhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj4ubjx)�”}”(hhh]”hÌ)�”}”(hŒ-capture synchronization type (async/adaptive)”h]”hŒ-capture synchronization type (async/adaptive)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MëhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_mute_present”h]”hŒc_mute_present”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mìhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjkubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture mute control enable”h]”hŒcapture mute control enable”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mìhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_volume_present”h]”hŒc_volume_present”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Míhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¢ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture volume control enable”h]”hŒcapture volume control enable”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Míhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_min”h]”hŒ c_volume_min”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MîhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÙubjx)�”}”(hhh]”hÌ)�”}”(hŒ.capture volume control min value (in 1/256 dB)”h]”hŒ.capture volume control min value (in 1/256 dB)”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mîhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_max”h]”hŒ c_volume_max”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubjx)�”}”(hhh]”hÌ)�”}”(hŒ.capture volume control max value (in 1/256 dB)”h]”hŒ.capture volume control max value (in 1/256 dB)”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mïhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_res”h]”hŒ c_volume_res”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MðhjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjG ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/capture volume control resolution (in 1/256 dB)”h]”hŒ/capture volume control resolution (in 1/256 dB)”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mðhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjG ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_hs_bint”h]”hŒ c_hs_bint”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mñhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj~ ubjx)�”}”(hhh]”hÌ)�”}”(hŒ1capture bInterval for HS/SS (1-4: fixed, 0: auto)”h]”hŒ1capture bInterval for HS/SS (1-4: fixed, 0: auto)”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mñhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj~ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒfb_max”h]”hŒfb_max”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mòhj¸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjµ ubjx)�”}”(hhh]”hÌ)�”}”(hŒ%maximum extra bandwidth in async mode”h]”hŒ%maximum extra bandwidth in async mode”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MòhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjµ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_chmask”h]”hŒp_chmask”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Móhjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback channel mask”h]”hŒplayback channel mask”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Móhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_srate”h]”hŒp_srate”…”�”}”(hj)!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Môhj&!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#!ubjx)�”}”(hhh]”hÌ)�”}”(hŒ1list of playback sampling rates (comma-separated)”h]”hŒ1list of playback sampling rates (comma-separated)”…”�”}”(hj@!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Môhj=!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_ssize”h]”hŒp_ssize”…”�”}”(hj`!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mõhj]!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ!ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback sample size (bytes)”h]”hŒplayback sample size (bytes)”…”�”}”(hjw!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mõhjt!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_mute_present”h]”hŒp_mute_present”…”�”}”(hj—!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Möhj”!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘!ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback mute control enable”h]”hŒplayback mute control enable”…”�”}”(hj®!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Möhj«!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_volume_present”h]”hŒp_volume_present”…”�”}”(hjÎ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M÷hjË!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ!ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback volume control enable”h]”hŒplayback volume control enable”…”�”}”(hjå!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M÷hjâ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_min”h]”hŒ p_volume_min”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Møhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ!ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/playback volume control min value (in 1/256 dB)”h]”hŒ/playback volume control min value (in 1/256 dB)”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Møhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_max”h]”hŒ p_volume_max”…”�”}”(hj<"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mùhj9"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj6"ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/playback volume control max value (in 1/256 dB)”h]”hŒ/playback volume control max value (in 1/256 dB)”…”�”}”(hjS"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MùhjP"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj6"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_res”h]”hŒ p_volume_res”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Múhjp"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm"ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0playback volume control resolution (in 1/256 dB)”h]”hŒ0playback volume control resolution (in 1/256 dB)”…”�”}”(hjŠ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Múhj‡"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_hs_bint”h]”hŒ p_hs_bint”…”�”}”(hjª"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mûhj§"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¤"ubjx)�”}”(hhh]”hÌ)�”}”(hŒ2playback bInterval for HS/SS (1-4: fixed, 0: auto)”h]”hŒ2playback bInterval for HS/SS (1-4: fixed, 0: auto)”…”�”}”(hjÁ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mûhj¾"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¤"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ req_number”h]”hŒ req_number”…”�”}”(hjá"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MühjÞ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÛ"ubjx)�”}”(hhh]”hÌ)�”}”(hŒAthe number of pre-allocated request for both capture and playback”h]”hŒAthe number of pre-allocated request for both capture and playback”…”�”}”(hjø"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mühjõ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÛ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ function_name”h]”hŒ function_name”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mþhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#ubjx)�”}”(hhh]”hÌ)�”}”(hŒname of the interface”h]”hŒname of the interface”…”�”}”(hj/#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mþhj,#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ if_ctrl_name”h]”hŒ if_ctrl_name”…”�”}”(hjO#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÿhjL#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjI#ubjx)�”}”(hhh]”hÌ)�”}”(hŒtopology control name”h]”hŒtopology control name”…”�”}”(hjf#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mÿhjc#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjI#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒclksrc_in_name”h]”hŒclksrc_in_name”…”�”}”(hj†#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjƒ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj€#ubjx)�”}”(hhh]”hÌ)�”}”(hŒinput clock name”h]”hŒinput clock name”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjš#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj€#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒclksrc_out_name”h]”hŒclksrc_out_name”…”�”}”(hj½#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjº#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj·#ubjx)�”}”(hhh]”hÌ)�”}”(hŒoutput clock name”h]”hŒoutput clock name”…”�”}”(hjÔ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÑ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj·#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_it_name”h]”hŒ p_it_name”…”�”}”(hjô#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjñ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjî#ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback input terminal name”h]”hŒplayback input terminal name”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjî#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_it_ch_name”h]”hŒ p_it_ch_name”…”�”}”(hj+$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj($ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj%$ubjx)�”}”(hhh]”hÌ)�”}”(hŒ!playback input first channel name”h]”hŒ!playback input first channel name”…”�”}”(hjB$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj?$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj%$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_ot_name”h]”hŒ p_ot_name”…”�”}”(hjb$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj_$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj\$ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback output terminal name”h]”hŒplayback output terminal name”…”�”}”(hjy$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjv$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj\$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_fu_vol_name”h]”hŒ p_fu_vol_name”…”�”}”(hj™$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj–$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj“$ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback function unit name”h]”hŒplayback function unit name”…”�”}”(hj°$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj­$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj“$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_it_name”h]”hŒ c_it_name”…”�”}”(hjÐ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÍ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÊ$ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture input terminal name”h]”hŒcapture input terminal name”…”�”}”(hjç$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjä$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÊ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_it_ch_name”h]”hŒ c_it_ch_name”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj%ubjx)�”}”(hhh]”hÌ)�”}”(hŒ capture input first channel name”h]”hŒ capture input first channel name”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_ot_name”h]”hŒ c_ot_name”…”�”}”(hj>%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj;%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj8%ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture output terminal name”h]”hŒcapture output terminal name”…”�”}”(hjU%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjR%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj8%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_fu_vol_name”h]”hŒ c_fu_vol_name”…”�”}”(hju%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjr%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjo%ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture functional unit name”h]”hŒcapture functional unit name”…”�”}”(hjŒ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj‰%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjo%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_terminal_type”h]”hŒc_terminal_type”…”�”}”(hj¬%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj©%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¦%ubjx)�”}”(hhh]”hÌ)�”}”(hŒ!code of the capture terminal type”h]”hŒ!code of the capture terminal type”…”�”}”(hjÃ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjÀ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¦%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_terminal_type”h]”hŒp_terminal_type”…”�”}”(hjã%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjà%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÝ%ubjx)�”}”(hhh]”hÌ)�”}”(hŒ"code of the playback terminal type”h]”hŒ"code of the playback terminal type”…”�”}”(hjú%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj÷%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÝ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjuubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MçhjOh²hubhÌ)�”}”(hŒ(The attributes have sane default values.”h]”hŒ(The attributes have sane default values.”…”�”}”(hj-&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjOh²hubeh}”(h]”Œid16”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj0h²hh³hÊh´MâjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the UAC2 function”h]”hŒTesting the UAC2 function”…”�”}”(hjF&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjC&h²hh³hÊh´MubhÌ)�”}”(hŒHdevice: run the gadget host: aplay -l # should list our USB Audio Gadget”h]”hŒHdevice: run the gadget host: aplay -l # should list our USB Audio Gadget”…”�”}”(hjT&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjC&h²hubhÌ)�”}”(hŒàThis function does not require real hardware support, it just sends a stream of audio data to/from the host. In order to actually hear something at the device side, a command similar to this must be used at the device side::”h]”hŒßThis function does not require real hardware support, it just sends a stream of audio data to/from the host. In order to actually hear something at the device side, a command similar to this must be used at the device side:”…”�”}”(hjb&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjC&h²hubjŠ)�”}”(hŒ5$ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &”h]”hŒ5$ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &”…”�”}”hjp&sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MhjC&h²hubhÌ)�”}”(hŒe.g.::”h]”hŒe.g.:”…”�”}”(hj~&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjC&h²hubjŠ)�”}”(hŒX$ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \ aplay -D default:CARD=OdroidU3”h]”hŒX$ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \ aplay -D default:CARD=OdroidU3”…”�”}”hjŒ&sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MhjC&h²hubeh}”(h]”Œtesting-the-uac2-function”ah ]”h"]”Œtesting the uac2 function”ah$]”h&]”uh1hµhj0h²hh³hÊh´Mubeh}”(h]”Œ uac2-function”ah ]”h"]”Œ17. uac2 function”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÝubh¶)�”}”(hhh]”(h»)�”}”(hŒ18. UVC function”h]”hŒ18. UVC function”…”�”}”(hj­&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjª&h²hh³hÊh´M#ubhÌ)�”}”(hŒ0The function is provided by usb_f_uvc.ko module.”h]”hŒ0The function is provided by usb_f_uvc.ko module.”…”�”}”(hj»&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M%hjª&h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjÌ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÉ&h²hh³hÊh´M(ubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "uvc". The uvc function provides these attributes in its function directory:”h]”hŒ‘The function name to use when creating the function directory is “uvcâ€�. The uvc function provides these attributes in its function directory:”…”�”}”(hjÚ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjÉ&h²hubj,)�”}”(hXá=================== ================================================ streaming_interval interval for polling endpoint for data transfers streaming_maxburst bMaxBurst for super speed companion descriptor streaming_maxpacket maximum packet size this endpoint is capable of sending or receiving when this configuration is selected function_name name of the interface =================== ================================================ ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjï&ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K0uh1jWhjï&ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒstreaming_interval”h]”hŒstreaming_interval”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M.hj 'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj 'ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0interval for polling endpoint for data transfers”h]”hŒ0interval for polling endpoint for data transfers”…”�”}”(hj&'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M.hj#'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj 'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj'ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒstreaming_maxburst”h]”hŒstreaming_maxburst”…”�”}”(hjF'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hjC'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj@'ubjx)�”}”(hhh]”hÌ)�”}”(hŒ.bMaxBurst for super speed companion descriptor”h]”hŒ.bMaxBurst for super speed companion descriptor”…”�”}”(hj]'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hjZ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj@'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj'ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒstreaming_maxpacket”h]”hŒstreaming_maxpacket”…”�”}”(hj}'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hjz'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjw'ubjx)�”}”(hhh]”hÌ)�”}”(hŒhmaximum packet size this endpoint is capable of sending or receiving when this configuration is selected”h]”hŒhmaximum packet size this endpoint is capable of sending or receiving when this configuration is selected”…”�”}”(hj”'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hj‘'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjw'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj'ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ function_name”h]”hŒ function_name”…”�”}”(hj´'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hj±'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj®'ubjx)�”}”(hhh]”hÌ)�”}”(hŒname of the interface”h]”hŒname of the interface”…”�”}”(hjË'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hjÈ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj®'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjï&ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjì&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjè&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M-hjÉ&h²hubhÌ)�”}”(hŒÀThere are also "control" and "streaming" subdirectories, each of which contain a number of their subdirectories. There are some sane defaults provided, but the user must provide the following:”h]”hŒÈThere are also “controlâ€� and “streamingâ€� subdirectories, each of which contain a number of their subdirectories. There are some sane defaults provided, but the user must provide the following:”…”�”}”(hjþ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hjÉ&h²hubj,)�”}”(hXz================== ==================================================== control header create in control/header, link from control/class/fs and/or control/class/ss streaming header create in streaming/header, link from streaming/class/fs and/or streaming/class/hs and/or streaming/class/ss format description create in streaming/mjpeg and/or streaming/uncompressed frame description create in streaming/mjpeg/ and/or in streaming/uncompressed/ ================== ==================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj(ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1jWhj(ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒcontrol header”h]”hŒcontrol header”…”�”}”(hj3(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M;hj0(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-(ubjx)�”}”(hhh]”hÌ)�”}”(hŒLcreate in control/header, link from control/class/fs and/or control/class/ss”h]”hŒLcreate in control/header, link from control/class/fs and/or control/class/ss”…”�”}”(hjJ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M;hjG(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj*(ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒstreaming header”h]”hŒstreaming header”…”�”}”(hjj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M=hjg(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjd(ubjx)�”}”(hhh]”hÌ)�”}”(hŒlcreate in streaming/header, link from streaming/class/fs and/or streaming/class/hs and/or streaming/class/ss”h]”hŒlcreate in streaming/header, link from streaming/class/fs and/or streaming/class/hs and/or streaming/class/ss”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M=hj~(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjd(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj*(ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒformat description”h]”hŒformat description”…”�”}”(hj¡(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hjž(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj›(ubjx)�”}”(hhh]”hÌ)�”}”(hŒ7create in streaming/mjpeg and/or streaming/uncompressed”h]”hŒ7create in streaming/mjpeg and/or streaming/uncompressed”…”�”}”(hj¸(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hjµ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj›(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj*(ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒframe description”h]”hŒframe description”…”�”}”(hjØ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MBhjÕ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÒ(ubjx)�”}”(hhh]”hÌ)�”}”(hŒLcreate in streaming/mjpeg/ and/or in streaming/uncompressed/”h]”hŒLcreate in streaming/mjpeg/ and/or in streaming/uncompressed/”…”�”}”(hjï(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MBhjì(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÒ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhj*(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M:hjÉ&h²hubhÌ)�”}”(hŒÚEach frame description contains frame interval specification, and each such specification consists of a number of lines with an interval value in each line. The rules stated above are best illustrated with an example::”h]”hŒÙEach frame description contains frame interval specification, and each such specification consists of a number of lines with an interval value in each line. The rules stated above are best illustrated with an example:”…”�”}”(hj")h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MFhjÉ&h²hubjŠ)�”}”(hX8# mkdir functions/uvc.usb0/control/header/h # cd functions/uvc.usb0/control/ # ln -s header/h class/fs # ln -s header/h class/ss # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p # cat < functions/uvc.usb0/streaming/uncompressed/u/360p/dwFrameInterval 666666 1000000 5000000 EOF # cd $GADGET_CONFIGFS_ROOT # mkdir functions/uvc.usb0/streaming/header/h # cd functions/uvc.usb0/streaming/header/h # ln -s ../../uncompressed/u # cd ../../class/fs # ln -s ../../header/h # cd ../../class/hs # ln -s ../../header/h # cd ../../class/ss # ln -s ../../header/h”h]”hX8# mkdir functions/uvc.usb0/control/header/h # cd functions/uvc.usb0/control/ # ln -s header/h class/fs # ln -s header/h class/ss # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p # cat < functions/uvc.usb0/streaming/uncompressed/u/360p/dwFrameInterval 666666 1000000 5000000 EOF # cd $GADGET_CONFIGFS_ROOT # mkdir functions/uvc.usb0/streaming/header/h # cd functions/uvc.usb0/streaming/header/h # ln -s ../../uncompressed/u # cd ../../class/fs # ln -s ../../header/h # cd ../../class/hs # ln -s ../../header/h # cd ../../class/ss # ln -s ../../header/h”…”�”}”hj0)sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MJhjÉ&h²hubeh}”(h]”Œid17”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhjª&h²hh³hÊh´M(jiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the UVC function”h]”hŒTesting the UVC function”…”�”}”(hjI)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjF)h²hh³hÊh´MaubhÌ)�”}”(hŒ(device: run the gadget, modprobe vivid::”h]”hŒ'device: run the gadget, modprobe vivid:”…”�”}”(hjW)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MchjF)h²hubjŠ)�”}”(hŒN# uvc-gadget -u /dev/video -v /dev/video”h]”hŒN# uvc-gadget -u /dev/video -v /dev/video”…”�”}”hje)sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MehjF)h²hubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒMwhere uvc-gadget is this program: http://git.ideasonboard.org/uvc-gadget.git ”h]”(hŒterm”“”)�”}”(hŒ!where uvc-gadget is this program:”h]”hŒ!where uvc-gadget is this program:”…”�”}”(hj€)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j~)h³hÊh´Mhhjz)ubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒ*http://git.ideasonboard.org/uvc-gadget.git”h]”jä)�”}”(hj•)h]”hŒ*http://git.ideasonboard.org/uvc-gadget.git”…”�”}”(hj—)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j•)uh1jãhj“)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhhj�)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŽ)hjz)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jx)h³hÊh´Mhhju)ubah}”(h]”h ]”h"]”h$]”h&]”uh1js)hjF)h²hh³hÊh´NubhÌ)�”}”(hŒwith these patches:”h]”hŒwith these patches:”…”�”}”(hj½)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MjhjF)h²hubj,)�”}”(hŒShttps://lore.kernel.org/r/1386675637-18243-1-git-send-email-r.baldyga@samsung.com/ ”h]”hÌ)�”}”(hŒRhttps://lore.kernel.org/r/1386675637-18243-1-git-send-email-r.baldyga@samsung.com/”h]”jä)�”}”(hjÑ)h]”hŒRhttps://lore.kernel.org/r/1386675637-18243-1-git-send-email-r.baldyga@samsung.com/”…”�”}”(hjÓ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÑ)uh1jãhjÏ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MlhjË)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´MlhjF)h²hubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hjí)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MnhjF)h²hubjŠ)�”}”(hŒluvcview -f yuv”h]”hŒluvcview -f yuv”…”�”}”hjû)sbah}”(h•mé]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MphjF)h²hubeh}”(h]”Œtesting-the-uvc-function”ah ]”h"]”Œtesting the uvc function”ah$]”h&]”uh1hµhjª&h²hh³hÊh´Maubeh}”(h]”Œ uvc-function”ah ]”h"]”Œ18. uvc function”ah$]”h&]”uh1hµhh·h²hh³hÊh´M#ubh¶)�”}”(hhh]”(h»)�”}”(hŒ19. PRINTER function”h]”hŒ19. PRINTER function”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj*h²hh³hÊh´MsubhÌ)�”}”(hŒ4The function is provided by usb_f_printer.ko module.”h]”hŒ4The function is provided by usb_f_printer.ko module.”…”�”}”(hj**h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Muhj*h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj;*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj8*h²hh³hÊh´MxubhÌ)�”}”(hŒ•The function name to use when creating the function directory is "printer". The printer function provides these attributes in its function directory:”h]”hŒ™The function name to use when creating the function directory is “printerâ€�. The printer function provides these attributes in its function directory:”…”�”}”(hjI*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mzhj8*h²hubj,)�”}”(hŒä========== =========================================== pnp_string Data to be passed to the host in pnp string q_len Number of requests per endpoint ========== =========================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jWhj^*ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K+uh1jWhj^*ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ pnp_string”h]”hŒ pnp_string”…”�”}”(hj~*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M~hj{*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjx*ubjx)�”}”(hhh]”hÌ)�”}”(hŒ+Data to be passed to the host in pnp string”h]”hŒ+Data to be passed to the host in pnp string”…”�”}”(hj•*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M~hj’*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjx*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhju*ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒq_len”h]”hŒq_len”…”�”}”(hjµ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj²*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¯*ubjx)�”}”(hhh]”hÌ)�”}”(hŒNumber of requests per endpoint”h]”hŒNumber of requests per endpoint”…”�”}”(hjÌ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÉ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¯*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhju*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj^*ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhj[*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjW*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M}hj8*h²hubeh}”(h]”Œid18”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj*h²hh³hÊh´MxjiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the PRINTER function”h]”hŒTesting the PRINTER function”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj+h²hh³hÊh´MƒubhÌ)�”}”(hŒThe most basic testing:”h]”hŒThe most basic testing:”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M…hj+h²hubhÌ)�”}”(hŒdevice: run the gadget::”h]”hŒdevice: run the gadget:”…”�”}”(hj&+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‡hj+h²hubjŠ)�”}”(hŒ,# ls -l /devices/virtual/usb_printer_gadget/”h]”hŒ,# ls -l /devices/virtual/usb_printer_gadget/”…”�”}”hj4+sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M‰hj+h²hubhÌ)�”}”(hŒshould show g_printer.”h]”hŒshould show g_printer.”…”�”}”(hjB+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‹hj+h²hubhÌ)�”}”(hŒKIf udev is active, then /dev/g_printer should appear automatically.”h]”hŒKIf udev is active, then /dev/g_printer should appear automatically.”…”�”}”(hjP+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hj+h²hubhÌ)�”}”(hŒhost:”h]”hŒhost:”…”�”}”(hj^+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hj+h²hubhÌ)�”}”(hŒ8If udev is active, then e.g. /dev/usb/lp0 should appear.”h]”hŒ8If udev is active, then e.g. /dev/usb/lp0 should appear.”…”�”}”(hjl+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‘hj+h²hubhÌ)�”}”(hŒhost->device transmission:”h]”hŒhost->device transmission:”…”�”}”(hjz+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M“hj+h²hubhÌ)�”}”(hŒdevice::”h]”hŒdevice:”…”�”}”(hjˆ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hj+h²hubjŠ)�”}”(hŒ# cat /dev/g_printer”h]”hŒ# cat /dev/g_printer”…”�”}”hj–+sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M—hj+h²hubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hj¤+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M™hj+h²hubjŠ)�”}”(hŒ# cat > /dev/usb/lp0”h]”hŒ# cat > /dev/usb/lp0”…”�”}”hj²+sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M›hj+h²hubhÌ)�”}”(hŒdevice->host transmission::”h]”hŒdevice->host transmission:”…”�”}”(hjÀ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hj+h²hubjŠ)�”}”(hŒ# cat > /dev/g_printer”h]”hŒ# cat > /dev/g_printer”…”�”}”hjÎ+sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MŸhj+h²hubhÌ)�”}”(hŒhost::”h]”hŒhost:”…”�”}”(hjÜ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¡hj+h²hubjŠ)�”}”(hŒ# cat /dev/usb/lp0”h]”hŒ# cat /dev/usb/lp0”…”�”}”hjê+sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M£hj+h²hubhÌ)�”}”(hŒiMore advanced testing can be done with the prn_example described in Documentation/usb/gadget_printer.rst.”h]”hŒiMore advanced testing can be done with the prn_example described in Documentation/usb/gadget_printer.rst.”…”�”}”(hjø+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¥hj+h²hubeh}”(h]”Œtesting-the-printer-function”ah ]”h"]”Œtesting the printer function”ah$]”h&]”uh1hµhj*h²hh³hÊh´Mƒubeh}”(h]”Œprinter-function”ah ]”h"]”Œ19. printer function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Msubh¶)�”}”(hhh]”(h»)�”}”(hŒ820. UAC1 function (virtual ALSA card, using u_audio API)”h]”hŒ820. UAC1 function (virtual ALSA card, using u_audio API)”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj,h²hh³hÊh´MªubhÌ)�”}”(hŒ”The function is provided by usb_f_uac1.ko module. It will create a virtual ALSA card and the audio streams are simply sinked to and sourced from it.”h]”hŒ”The function is provided by usb_f_uac1.ko module. It will create a virtual ALSA card and the audio streams are simply sinked to and sourced from it.”…”�”}”(hj',h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¬hj,h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hj8,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj5,h²hh³hÊh´M±ubhÌ)�”}”(hŒ�The function name to use when creating the function directory is "uac1". The uac1 function provides these attributes in its function directory:”h]”hŒ“The function name to use when creating the function directory is “uac1â€�. The uac1 function provides these attributes in its function directory:”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M³hj5,h²hubj,)�”}”(hX================ ==================================================== c_chmask capture channel mask c_srate list of capture sampling rates (comma-separated) c_ssize capture sample size (bytes) c_mute_present capture mute control enable c_volume_present capture volume control enable c_volume_min capture volume control min value (in 1/256 dB) c_volume_max capture volume control max value (in 1/256 dB) c_volume_res capture volume control resolution (in 1/256 dB) p_chmask playback channel mask p_srate list of playback sampling rates (comma-separated) p_ssize playback sample size (bytes) p_mute_present playback mute control enable p_volume_present playback volume control enable p_volume_min playback volume control min value (in 1/256 dB) p_volume_max playback volume control max value (in 1/256 dB) p_volume_res playback volume control resolution (in 1/256 dB) req_number the number of pre-allocated requests for both capture and playback function_name name of the interface p_it_name playback input terminal name p_it_ch_name playback channels name p_ot_name playback output terminal name p_fu_vol_name playback mute/volume functional unit name c_it_name capture input terminal name c_it_ch_name capture channels name c_ot_name capture output terminal name c_fu_vol_name capture mute/volume functional unit name ================ ==================================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhj[,ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K5uh1jWhj[,ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_chmask”h]”hŒc_chmask”…”�”}”(hj{,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hjx,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhju,ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture channel mask”h]”hŒcapture channel mask”…”�”}”(hj’,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hj�,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhju,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_srate”h]”hŒc_srate”…”�”}”(hj²,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hj¯,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¬,ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0list of capture sampling rates (comma-separated)”h]”hŒ0list of capture sampling rates (comma-separated)”…”�”}”(hjÉ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hjÆ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¬,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_ssize”h]”hŒc_ssize”…”�”}”(hjé,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¹hjæ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjã,ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture sample size (bytes)”h]”hŒcapture sample size (bytes)”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¹hjý,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjã,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_mute_present”h]”hŒc_mute_present”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mºhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture mute control enable”h]”hŒcapture mute control enable”…”�”}”(hj7-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mºhj4-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒc_volume_present”h]”hŒc_volume_present”…”�”}”(hjW-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M»hjT-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjQ-ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture volume control enable”h]”hŒcapture volume control enable”…”�”}”(hjn-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M»hjk-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjQ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_min”h]”hŒ c_volume_min”…”�”}”(hjŽ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¼hj‹-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjˆ-ubjx)�”}”(hhh]”hÌ)�”}”(hŒ.capture volume control min value (in 1/256 dB)”h]”hŒ.capture volume control min value (in 1/256 dB)”…”�”}”(hj¥-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¼hj¢-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjˆ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_max”h]”hŒ c_volume_max”…”�”}”(hjÅ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M½hjÂ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¿-ubjx)�”}”(hhh]”hÌ)�”}”(hŒ.capture volume control max value (in 1/256 dB)”h]”hŒ.capture volume control max value (in 1/256 dB)”…”�”}”(hjÜ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M½hjÙ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¿-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_volume_res”h]”hŒ c_volume_res”…”�”}”(hjü-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¾hjù-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjö-ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/capture volume control resolution (in 1/256 dB)”h]”hŒ/capture volume control resolution (in 1/256 dB)”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¾hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjö-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_chmask”h]”hŒp_chmask”…”�”}”(hj3.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¿hj0.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-.ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback channel mask”h]”hŒplayback channel mask”…”�”}”(hjJ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¿hjG.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj-.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_srate”h]”hŒp_srate”…”�”}”(hjj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÀhjg.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjd.ubjx)�”}”(hhh]”hÌ)�”}”(hŒ1list of playback sampling rates (comma-separated)”h]”hŒ1list of playback sampling rates (comma-separated)”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÀhj~.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjd.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_ssize”h]”hŒp_ssize”…”�”}”(hj¡.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÁhjž.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj›.ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback sample size (bytes)”h]”hŒplayback sample size (bytes)”…”�”}”(hj¸.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÁhjµ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj›.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_mute_present”h]”hŒp_mute_present”…”�”}”(hjØ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÂhjÕ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÒ.ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback mute control enable”h]”hŒplayback mute control enable”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÂhjì.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÒ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒp_volume_present”h]”hŒp_volume_present”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÃhj /ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj /ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback volume control enable”h]”hŒplayback volume control enable”…”�”}”(hj&/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÃhj#/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj /ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_min”h]”hŒ p_volume_min”…”�”}”(hjF/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÄhjC/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj@/ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/playback volume control min value (in 1/256 dB)”h]”hŒ/playback volume control min value (in 1/256 dB)”…”�”}”(hj]/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÄhjZ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj@/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_max”h]”hŒ p_volume_max”…”�”}”(hj}/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÅhjz/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjw/ubjx)�”}”(hhh]”hÌ)�”}”(hŒ/playback volume control max value (in 1/256 dB)”h]”hŒ/playback volume control max value (in 1/256 dB)”…”�”}”(hj”/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÅhj‘/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjw/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_volume_res”h]”hŒ p_volume_res”…”�”}”(hj´/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÆhj±/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj®/ubjx)�”}”(hhh]”hÌ)�”}”(hŒ0playback volume control resolution (in 1/256 dB)”h]”hŒ0playback volume control resolution (in 1/256 dB)”…”�”}”(hjË/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÆhjÈ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj®/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ req_number”h]”hŒ req_number”…”�”}”(hjë/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÇhjè/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjå/ubjx)�”}”(hhh]”hÌ)�”}”(hŒBthe number of pre-allocated requests for both capture and playback”h]”hŒBthe number of pre-allocated requests for both capture and playback”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÇhjÿ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjå/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ function_name”h]”hŒ function_name”…”�”}”(hj"0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÉhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj0ubjx)�”}”(hhh]”hÌ)�”}”(hŒname of the interface”h]”hŒname of the interface”…”�”}”(hj90h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÉhj60ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_it_name”h]”hŒ p_it_name”…”�”}”(hjY0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÊhjV0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjS0ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback input terminal name”h]”hŒplayback input terminal name”…”�”}”(hjp0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÊhjm0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjS0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_it_ch_name”h]”hŒ p_it_ch_name”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MËhj�0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjŠ0ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback channels name”h]”hŒplayback channels name”…”�”}”(hj§0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MËhj¤0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjŠ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_ot_name”h]”hŒ p_ot_name”…”�”}”(hjÇ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÌhjÄ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÁ0ubjx)�”}”(hhh]”hÌ)�”}”(hŒplayback output terminal name”h]”hŒplayback output terminal name”…”�”}”(hjÞ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÌhjÛ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÁ0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ p_fu_vol_name”h]”hŒ p_fu_vol_name”…”�”}”(hjþ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhjû0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjø0ubjx)�”}”(hhh]”hÌ)�”}”(hŒ)playback mute/volume functional unit name”h]”hŒ)playback mute/volume functional unit name”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÍhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjø0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_it_name”h]”hŒ c_it_name”…”�”}”(hj51h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÎhj21ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj/1ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture input terminal name”h]”hŒcapture input terminal name”…”�”}”(hjL1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÎhjI1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj/1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_it_ch_name”h]”hŒ c_it_ch_name”…”�”}”(hjl1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhji1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjf1ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture channels name”h]”hŒcapture channels name”…”�”}”(hjƒ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhj€1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjf1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_ot_name”h]”hŒ c_ot_name”…”�”}”(hj£1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhj 1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj�1ubjx)�”}”(hhh]”hÌ)�”}”(hŒcapture output terminal name”h]”hŒcapture output terminal name”…”�”}”(hjº1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhj·1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj�1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ c_fu_vol_name”h]”hŒ c_fu_vol_name”…”�”}”(hjÚ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÑhj×1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÔ1ubjx)�”}”(hhh]”hÌ)�”}”(hŒ(capture mute/volume functional unit name”h]”hŒ(capture mute/volume functional unit name”…”�”}”(hjñ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÑhjî1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÔ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjr,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhj[,ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjX,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjT,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´M¶hj5,h²hubhÌ)�”}”(hŒ(The attributes have sane default values.”h]”hŒ(The attributes have sane default values.”…”�”}”(hj$2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÔhj5,h²hubeh}”(h]”Œid19”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj,h²hh³hÊh´M±jiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the UAC1 function”h]”hŒTesting the UAC1 function”…”�”}”(hj=2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj:2h²hh³hÊh´M×ubhÌ)�”}”(hŒHdevice: run the gadget host: aplay -l # should list our USB Audio Gadget”h]”hŒHdevice: run the gadget host: aplay -l # should list our USB Audio Gadget”…”�”}”(hjK2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÙhj:2h²hubhÌ)�”}”(hŒàThis function does not require real hardware support, it just sends a stream of audio data to/from the host. In order to actually hear something at the device side, a command similar to this must be used at the device side::”h]”hŒßThis function does not require real hardware support, it just sends a stream of audio data to/from the host. In order to actually hear something at the device side, a command similar to this must be used at the device side:”…”�”}”(hjY2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÜhj:2h²hubjŠ)�”}”(hŒ5$ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &”h]”hŒ5$ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &”…”�”}”hjg2sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Máhj:2h²hubhÌ)�”}”(hŒe.g.::”h]”hŒe.g.:”…”�”}”(hju2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mãhj:2h²hubjŠ)�”}”(hŒX$ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \ aplay -D default:CARD=OdroidU3”h]”hŒX$ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \ aplay -D default:CARD=OdroidU3”…”�”}”hjƒ2sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Måhj:2h²hubeh}”(h]”Œid20”ah ]”h"]”h$]”j&ah&]”uh1hµhj,h²hh³hÊh´M×jiKubeh}”(h]”Œ1uac1-function-virtual-alsa-card-using-u-audio-api”ah ]”h"]”Œ820. uac1 function (virtual alsa card, using u_audio api)”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mªubh¶)�”}”(hhh]”(h»)�”}”(hŒ21. MIDI2 function”h]”hŒ21. MIDI2 function”…”�”}”(hj£2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj 2h²hh³hÊh´MêubhÌ)�”}”(hXThe function is provided by usb_f_midi2.ko module. It will create a virtual ALSA card containing a UMP rawmidi device where the UMP packet is looped back. In addition, a legacy rawmidi device is created. The UMP rawmidi is bound with ALSA sequencer clients, too.”h]”hXThe function is provided by usb_f_midi2.ko module. It will create a virtual ALSA card containing a UMP rawmidi device where the UMP packet is looped back. In addition, a legacy rawmidi device is created. The UMP rawmidi is bound with ALSA sequencer clients, too.”…”�”}”(hj±2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mìhj 2h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ$Function-specific configfs interface”h]”hŒ$Function-specific configfs interface”…”�”}”(hjÂ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¿2h²hh³hÊh´MóubhÌ)�”}”(hŒ³The function name to use when creating the function directory is "midi2". The midi2 function provides these attributes in its function directory as the card top-level information:”h]”hŒ·The function name to use when creating the function directory is “midi2â€�. The midi2 function provides these attributes in its function directory as the card top-level information:”…”�”}”(hjÐ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mõhj¿2h²hubj,)�”}”(hX*============= ================================================= process_ump Bool flag to process UMP Stream messages (0 or 1) static_block Bool flag for static blocks (0 or 1) iface_name Optional interface name string ============= ================================================= ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jWhjå2ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K1uh1jWhjå2ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ process_ump”h]”hŒ process_ump”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Múhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ2ubjx)�”}”(hhh]”hÌ)�”}”(hŒ1Bool flag to process UMP Stream messages (0 or 1)”h]”hŒ1Bool flag to process UMP Stream messages (0 or 1)”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Múhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjü2ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ static_block”h]”hŒ static_block”…”�”}”(hj<3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mûhj93ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj63ubjx)�”}”(hhh]”hÌ)�”}”(hŒ$Bool flag for static blocks (0 or 1)”h]”hŒ$Bool flag for static blocks (0 or 1)”…”�”}”(hjS3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MûhjP3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj63ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjü2ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ iface_name”h]”hŒ iface_name”…”�”}”(hjs3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mühjp3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm3ubjx)�”}”(hhh]”hÌ)�”}”(hŒOptional interface name string”h]”hŒOptional interface name string”…”�”}”(hjŠ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mühj‡3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjü2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjå2ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjâ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÞ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Mùhj¿2h²hubhÌ)�”}”(hŒŠThe directory contains a subdirectory "ep.0", and this provides the attributes for a UMP Endpoint (which is a pair of USB MIDI Endpoints):”h]”hŒŽThe directory contains a subdirectory “ep.0â€�, and this provides the attributes for a UMP Endpoint (which is a pair of USB MIDI Endpoints):”…”�”}”(hj½3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mÿhj¿2h²hubj,)�”}”(hX+============= ================================================= protocol_caps MIDI protocol capabilities; 1: MIDI 1.0, 2: MIDI 2.0, or 3: both protocols protocol Default MIDI protocol (either 1 or 2) ep_name UMP Endpoint name string product_id Product ID string manufacturer Manufacture ID number (24 bit) family Device family ID number (16 bit) model Device model ID number (16 bit) sw_revision Software revision (32 bit) ============= ================================================= ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jWhjÒ3ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K1uh1jWhjÒ3ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ protocol_caps”h]”hŒ protocol_caps”…”�”}”(hjò3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjï3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì3ubjx)�”}”(hhh]”hÌ)�”}”(hŒJMIDI protocol capabilities; 1: MIDI 1.0, 2: MIDI 2.0, or 3: both protocols”h]”hŒJMIDI protocol capabilities; 1: MIDI 1.0, 2: MIDI 2.0, or 3: both protocols”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒprotocol”h]”hŒprotocol”…”�”}”(hj)4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj&4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#4ubjx)�”}”(hhh]”hÌ)�”}”(hŒ%Default MIDI protocol (either 1 or 2)”h]”hŒ%Default MIDI protocol (either 1 or 2)”…”�”}”(hj@4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj=4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒep_name”h]”hŒep_name”…”�”}”(hj`4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj]4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ4ubjx)�”}”(hhh]”hÌ)�”}”(hŒUMP Endpoint name string”h]”hŒUMP Endpoint name string”…”�”}”(hjw4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjt4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ product_id”h]”hŒ product_id”…”�”}”(hj—4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj”4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘4ubjx)�”}”(hhh]”hÌ)�”}”(hŒProduct ID string”h]”hŒProduct ID string”…”�”}”(hj®4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj«4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ manufacturer”h]”hŒ manufacturer”…”�”}”(hjÎ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjË4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ4ubjx)�”}”(hhh]”hÌ)�”}”(hŒManufacture ID number (24 bit)”h]”hŒManufacture ID number (24 bit)”…”�”}”(hjå4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjâ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒfamily”h]”hŒfamily”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ4ubjx)�”}”(hhh]”hÌ)�”}”(hŒ Device family ID number (16 bit)”h]”hŒ Device family ID number (16 bit)”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒmodel”h]”hŒmodel”…”�”}”(hj<5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj95ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj65ubjx)�”}”(hhh]”hÌ)�”}”(hŒDevice model ID number (16 bit)”h]”hŒDevice model ID number (16 bit)”…”�”}”(hjS5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjP5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj65ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ sw_revision”h]”hŒ sw_revision”…”�”}”(hjs5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjp5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm5ubjx)�”}”(hhh]”hÌ)�”}”(hŒSoftware revision (32 bit)”h]”hŒSoftware revision (32 bit)”…”�”}”(hjŠ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hj‡5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjÒ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjÏ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjË3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Mhj¿2h²hubhÌ)�”}”(hŒŽEach Endpoint subdirectory contains a subdirectory "block.0", which represents the Function Block for Block 0 information. Its attributes are:”h]”hŒ’Each Endpoint subdirectory contains a subdirectory “block.0â€�, which represents the Function Block for Block 0 information. Its attributes are:”…”�”}”(hj½5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¿2h²hubj,)�”}”(hX*================= =============================================== name Function Block name string direction Direction of this FB 1: input, 2: output, or 3: bidirectional first_group The first UMP Group number (0-15) num_groups The number of groups in this FB (1-16) midi1_first_group The first UMP Group number for MIDI 1.0 (0-15) midi1_num_groups The number of groups for MIDI 1.0 (0-16) ui_hint UI-hint of this FB 0: unknown, 1: receiver, 2: sender, 3: both midi_ci_version Supported MIDI-CI version number (8 bit) is_midi1 Legacy MIDI 1.0 device (0-2) 0: MIDI 2.0 device, 1: MIDI 1.0 without restriction, or 2: MIDI 1.0 with low speed sysex8_streams Max number of SysEx8 streams (8 bit) active Bool flag for FB activity (0 or 1) ================= =============================================== ”h]”jN)�”}”(hhh]”jS)�”}”(hhh]”(jX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jWhjÒ5ubjX)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jWhjÒ5ubjn)�”}”(hhh]”(js)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒname”h]”hŒname”…”�”}”(hjò5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjï5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì5ubjx)�”}”(hhh]”hÌ)�”}”(hŒFunction Block name string”h]”hŒFunction Block name string”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjì5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj)6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj&6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#6ubjx)�”}”(hhh]”hÌ)�”}”(hŒ=Direction of this FB 1: input, 2: output, or 3: bidirectional”h]”hŒ=Direction of this FB 1: input, 2: output, or 3: bidirectional”…”�”}”(hj@6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj=6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj#6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ first_group”h]”hŒ first_group”…”�”}”(hj`6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj]6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ6ubjx)�”}”(hhh]”hÌ)�”}”(hŒ!The first UMP Group number (0-15)”h]”hŒ!The first UMP Group number (0-15)”…”�”}”(hjw6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjt6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjZ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒ num_groups”h]”hŒ num_groups”…”�”}”(hj—6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj”6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘6ubjx)�”}”(hhh]”hÌ)�”}”(hŒ&The number of groups in this FB (1-16)”h]”hŒ&The number of groups in this FB (1-16)”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj«6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj‘6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒmidi1_first_group”h]”hŒmidi1_first_group”…”�”}”(hjÎ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjË6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ6ubjx)�”}”(hhh]”hÌ)�”}”(hŒ.The first UMP Group number for MIDI 1.0 (0-15)”h]”hŒ.The first UMP Group number for MIDI 1.0 (0-15)”…”�”}”(hjå6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjâ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÈ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒmidi1_num_groups”h]”hŒmidi1_num_groups”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ6ubjx)�”}”(hhh]”hÌ)�”}”(hŒ(The number of groups for MIDI 1.0 (0-16)”h]”hŒ(The number of groups for MIDI 1.0 (0-16)”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÿ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒui_hint”h]”hŒui_hint”…”�”}”(hj<7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj97ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj67ubjx)�”}”(hhh]”hÌ)�”}”(hŒ>UI-hint of this FB 0: unknown, 1: receiver, 2: sender, 3: both”h]”hŒ>UI-hint of this FB 0: unknown, 1: receiver, 2: sender, 3: both”…”�”}”(hjS7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjP7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj67ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒmidi_ci_version”h]”hŒmidi_ci_version”…”�”}”(hjs7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjp7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm7ubjx)�”}”(hhh]”hÌ)�”}”(hŒ(Supported MIDI-CI version number (8 bit)”h]”hŒ(Supported MIDI-CI version number (8 bit)”…”�”}”(hjŠ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj‡7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjm7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒis_midi1”h]”hŒis_midi1”…”�”}”(hjª7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj§7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¤7ubjx)�”}”(hhh]”hÌ)�”}”(hŒoLegacy MIDI 1.0 device (0-2) 0: MIDI 2.0 device, 1: MIDI 1.0 without restriction, or 2: MIDI 1.0 with low speed”h]”hŒoLegacy MIDI 1.0 device (0-2) 0: MIDI 2.0 device, 1: MIDI 1.0 without restriction, or 2: MIDI 1.0 with low speed”…”�”}”(hjÁ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¾7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj¤7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒsysex8_streams”h]”hŒsysex8_streams”…”�”}”(hjá7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hjÞ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÛ7ubjx)�”}”(hhh]”hÌ)�”}”(hŒ$Max number of SysEx8 streams (8 bit)”h]”hŒ$Max number of SysEx8 streams (8 bit)”…”�”}”(hjø7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hjõ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhjÛ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubjs)�”}”(hhh]”(jx)�”}”(hhh]”hÌ)�”}”(hŒactive”h]”hŒactive”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj8ubjx)�”}”(hhh]”hÌ)�”}”(hŒ"Bool flag for FB activity (0 or 1)”h]”hŒ"Bool flag for FB activity (0 or 1)”…”�”}”(hj/8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj,8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jwhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jrhjé5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jmhjÒ5ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jRhjÏ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjË5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j+h³hÊh´Mhj¿2h²hubhÌ)�”}”(hXIf multiple Function Blocks are required, you can add more Function Blocks by creating subdirectories "block." with the corresponding Function Block number (1, 2, ....). The FB subdirectories can be dynamically removed, too. Note that the Function Block numbers must be continuous.”h]”hX"If multiple Function Blocks are required, you can add more Function Blocks by creating subdirectories “block.â€� with the corresponding Function Block number (1, 2, ....). The FB subdirectories can be dynamically removed, too. Note that the Function Block numbers must be continuous.”…”�”}”(hjb8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M%hj¿2h²hubhÌ)�”}”(hŒ—Similarly, if you multiple UMP Endpoints are required, you can add more Endpoints by creating subdirectories "ep.". The number must be continuous.”h]”hŒ›Similarly, if you multiple UMP Endpoints are required, you can add more Endpoints by creating subdirectories “ep.â€�. The number must be continuous.”…”�”}”(hjp8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M+hj¿2h²hubhÌ)�”}”(hŒ‹For emulating the old MIDI 2.0 device without UMP v1.1 support, pass 0 to `process_ump` flag. Then the whole UMP v1.1 requests are ignored.”h]”(hŒJFor emulating the old MIDI 2.0 device without UMP v1.1 support, pass 0 to ”…”�”}”(hj~8h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ `process_ump`”h]”hŒ process_ump”…”�”}”(hjˆ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j†8hj~8ubhŒ4 flag. Then the whole UMP v1.1 requests are ignored.”…”�”}”(hj~8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj¿2h²hubeh}”(h]”Œid21”ah ]”h"]”h$]”Œ$function-specific configfs interface”ah&]”uh1hµhj 2h²hh³hÊh´MójiKubh¶)�”}”(hhh]”(h»)�”}”(hŒTesting the MIDI2 function”h]”hŒTesting the MIDI2 function”…”�”}”(hj«8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¨8h²hh³hÊh´M3ubhÌ)�”}”(hŒ,On the device: run the gadget, and running::”h]”hŒ+On the device: run the gadget, and running:”…”�”}”(hj¹8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M5hj¨8h²hubjŠ)�”}”(hŒ$ cat /proc/asound/cards”h]”hŒ$ cat /proc/asound/cards”…”�”}”hjÇ8sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M7hj¨8h²hubhÌ)�”}”(hŒ5will show a new sound card containing a MIDI2 device.”h]”hŒ5will show a new sound card containing a MIDI2 device.”…”�”}”(hjÕ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hj¨8h²hubhÌ)�”}”(hŒOTOH, on the host::”h]”hŒOTOH, on the host:”…”�”}”(hjã8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M;hj¨8h²hubjŠ)�”}”(hŒ$ cat /proc/asound/cards”h]”hŒ$ cat /proc/asound/cards”…”�”}”hjñ8sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´M=hj¨8h²hubhÌ)�”}”(hŒtwill show a new sound card containing either MIDI1 or MIDI2 device, depending on the USB audio driver configuration.”h]”hŒtwill show a new sound card containing either MIDI1 or MIDI2 device, depending on the USB audio driver configuration.”…”�”}”(hjÿ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M?hj¨8h²hubhÌ)�”}”(hŒpOn both, when ALSA sequencer is enabled on the host, you can find the UMP MIDI client such as "MIDI 2.0 Gadget".”h]”hŒtOn both, when ALSA sequencer is enabled on the host, you can find the UMP MIDI client such as “MIDI 2.0 Gadgetâ€�.”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MBhj¨8h²hubhÌ)�”}”(hŒ^As the driver simply loops back the data, there is no need for a real device just for testing.”h]”hŒ^As the driver simply loops back the data, there is no need for a real device just for testing.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MEhj¨8h²hubhÌ)�”}”(hŒ…For testing a MIDI input from the gadget to the host (e.g. emulating a MIDI keyboard), you can send a MIDI stream like the following.”h]”hŒ…For testing a MIDI input from the gadget to the host (e.g. emulating a MIDI keyboard), you can send a MIDI stream like the following.”…”�”}”(hj)9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhj¨8h²hubhÌ)�”}”(hŒOn the gadget::”h]”hŒOn the gadget:”…”�”}”(hj79h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MKhj¨8h²hubjŠ)�”}”(hŒ£$ aconnect -o .... client 20: 'MIDI 2.0 Gadget' [type=kernel,card=1] 0 'MIDI 2.0 ' 1 'Group 1 (MIDI 2.0 Gadget I/O)' $ aplaymidi -p 20:1 to_host.mid”h]”hŒ£$ aconnect -o .... client 20: 'MIDI 2.0 Gadget' [type=kernel,card=1] 0 'MIDI 2.0 ' 1 'Group 1 (MIDI 2.0 Gadget I/O)' $ aplaymidi -p 20:1 to_host.mid”…”�”}”hjE9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MMhj¨8h²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjS9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MThj¨8h²hubjŠ)�”}”(hŒ©$ aconnect -i .... client 24: 'MIDI 2.0 Gadget' [type=kernel,card=2] 0 'MIDI 2.0 ' 1 'Group 1 (MIDI 2.0 Gadget I/O)' $ arecordmidi -p 24:1 from_gadget.mid”h]”hŒ©$ aconnect -i .... client 24: 'MIDI 2.0 Gadget' [type=kernel,card=2] 0 'MIDI 2.0 ' 1 'Group 1 (MIDI 2.0 Gadget I/O)' $ arecordmidi -p 24:1 from_gadget.mid”…”�”}”hja9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´MVhj¨8h²hubhÌ)�”}”(hŒÁIf you have a UMP-capable application, you can use the UMP port to send/receive the raw UMP packets, too. For example, aseqdump program with UMP support can receive from UMP port. On the host::”h]”hŒÀIf you have a UMP-capable application, you can use the UMP port to send/receive the raw UMP packets, too. For example, aseqdump program with UMP support can receive from UMP port. On the host:”…”�”}”(hjo9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj¨8h²hubjŠ)�”}”(hŒõ$ aseqdump -u 2 -p 24:1 Waiting for data. Press Ctrl+C to end. Source Group Event Ch Data 24:1 Group 0, Program change 0, program 0, Bank select 0:0 24:1 Group 0, Channel pressure 0, value 0x80000000”h]”hŒõ$ aseqdump -u 2 -p 24:1 Waiting for data. Press Ctrl+C to end. Source Group Event Ch Data 24:1 Group 0, Program change 0, program 0, Bank select 0:0 24:1 Group 0, Channel pressure 0, value 0x80000000”…”�”}”hj}9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mahj¨8h²hubhÌ)�”}”(hŒqFor testing a MIDI output to the gadget to the host (e.g. emulating a MIDI synth), it'll be just other way round.”h]”hŒsFor testing a MIDI output to the gadget to the host (e.g. emulating a MIDI synth), it’ll be just other way round.”…”�”}”(hj‹9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghj¨8h²hubhÌ)�”}”(hŒOn the gadget::”h]”hŒOn the gadget:”…”�”}”(hj™9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mjhj¨8h²hubjŠ)�”}”(hŒ#$ arecordmidi -p 20:1 from_host.mid”h]”hŒ#$ arecordmidi -p 20:1 from_host.mid”…”�”}”hj§9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mlhj¨8h²hubhÌ)�”}”(hŒ On the host::”h]”hŒ On the host:”…”�”}”(hjµ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mnhj¨8h²hubjŠ)�”}”(hŒ!$ aplaymidi -p 24:1 to_gadget.mid”h]”hŒ!$ aplaymidi -p 24:1 to_gadget.mid”…”�”}”hjÃ9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Mphj¨8h²hubhÌ)�”}”(hŒ˜The access to MIDI 1.0 on altset 0 on the host is supported, and it's translated from/to UMP packets on the gadget. It's bound to only Function Block 0.”h]”hŒœThe access to MIDI 1.0 on altset 0 on the host is supported, and it’s translated from/to UMP packets on the gadget. It’s bound to only Function Block 0.”…”�”}”(hjÑ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mrhj¨8h²hubhÌ)�”}”(hŒ}The current operation mode can be observed in ALSA control element "Operation Mode" for SND_CTL_IFACE_RAWMIDI. For example::”h]”hŒ€The current operation mode can be observed in ALSA control element “Operation Modeâ€� for SND_CTL_IFACE_RAWMIDI. For example:”…”�”}”(hjß9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhj¨8h²hubjŠ)�”}”(hŒ‹$ amixer -c1 contents numid=1,iface=RAWMIDI,name='Operation Mode' ; type=INTEGER,access=r--v----,values=1,min=0,max=2,step=0 : values=2”h]”hŒ‹$ amixer -c1 contents numid=1,iface=RAWMIDI,name='Operation Mode' ; type=INTEGER,access=r--v----,values=1,min=0,max=2,step=0 : values=2”…”�”}”hjí9sbah}”(h]”h ]”h"]”h$]”h&]”hëhìuh1j‰h³hÊh´Myhj¨8h²hubhÌ)�”}”(hŒ}where 0 = unused, 1 = MIDI 1.0 (altset 0), 2 = MIDI 2.0 (altset 1). The example above shows it's running in 2, i.e. MIDI 2.0.”h]”hŒwhere 0 = unused, 1 = MIDI 1.0 (altset 0), 2 = MIDI 2.0 (altset 1). The example above shows it’s running in 2, i.e. MIDI 2.0.”…”�”}”(hjû9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M~hj¨8h²hubeh}”(h]”Œtesting-the-midi2-function”ah ]”h"]”Œtesting the midi2 function”ah$]”h&]”uh1hµhj 2h²hh³hÊh´M3ubeh}”(h]”Œmidi2-function”ah ]”h"]”Œ21. midi2 function”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mêubeh}”(h]”Œgadget-testing”ah ]”h"]”Œgadget testing”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”jwŒ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”jC:Œ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:jjŒ$function-specific configfs interface”NjjýjäjájÜjÙjµj²j­jªj†jƒj~j{jKjHjCj@j¡ jž j™ j– jÌ jÉ jÄ jÁ j³j°j«j¨jÿjüj÷jôjjjÿjüjjj jjýjújõjòjÎjËjÆjÃjjjûjøj¯j¬j§j¤j-j*Œtesting the uac1 function”Nj§&j¤&jŸ&jœ&j*j*j*j *j,j,j ,j,j�2jš2j:j:j:j :uŒ nametypes”}”(j:‰j‰j‡:‰j‰jä‰j܉jµ‰j­‰j†‰j~‰jK‰jC‰j¡ ‰j™ ‰jÌ ‰jÄ ‰j³‰j«‰jÿ‰j÷‰j‰jÿ‰j‰j ‰jý‰jõ‰jΉjƉj‰jû‰j¯‰j§‰j-‰jˆ:‰j§&‰jŸ&‰j*‰j*‰j,‰j ,‰j�2‰j:‰j:‰uh}”(j:h·jhíjcj jýjjjáj j{j*jÙj€j²jçjKjjªjQjƒj¸jj×j{j"jHj‰j j¨j@jjž jNjÜ jmj– jâ jÉ j¤ jŒ jà jÁ j’ j°jÏ j�jî j¨j‡jüj¶j±jÕjôj·jjj�j!jüj£jj j~j)jj„jújjÅj3jòjËjËjjdjjÃjjjjÑjEjðjøjKj¬jjoj%j¤juj*j²jßjÑj"jåj¤&j0j=&jOjœ&jC&j*jª&j@)jÉ&j *jF)j,j*j+j8*j,j+jš2j,j42j5,j“2j:2j:j 2j¢8j¿2j :j¨8uŒ 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”“”}”jQ:Ks…”R”Œparse_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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”KNuh1j§:hj*h²hh³hÊh´KNubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjÈ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjÅ:ubah}”(h]”h ]”h"]”h$]”h&]”jKaŒlevel”KŒtype”jÂ:Œsource”hÊŒline”Kvuh1j§:hjh²hh³hÊh´Kvubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjã:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjà:ubah}”(h]”h ]”h"]”h$]”h&]”jaŒlevel”KŒtype”jÂ:Œsource”hÊŒline”Kžuh1j§:hj×h²hh³hÊh´Kžubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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”KÆuh1j§:hj¨h²hh³hÊh´KÆubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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”Kæuh1j§:hjmh²hh³hÊh´Kæubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hj4;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj1;ubah}”(h]”h ]”h"]”h$]”h&]”jŒ aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”Muh1j§:hjà h²hh³hÊh´Mubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjO;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjL;ubah}”(h]”h ]”h"]”h$]”h&]”j�aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”M/uh1j§:hjî h²hh³hÊh´M/ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjg;ubah}”(h]”h ]”h"]”h$]”h&]”j±aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”Mnuh1j§:hjÕh²hh³hÊh´Mnubj¨:)�”}”(hhh]”hÌ)�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hj…;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj‚;ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jÂ:Œsource”hÊŒline”Kuh1j§:hj·h²hh³hÊh´M•ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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Çubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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ñubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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”Muh1j§:hj3h²hh³hÊh´Mubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjñ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjî;ubah}”(h]”h ]”h"]”h$]”h&]”jdaŒlevel”KŒtype”jÂ:Œsource”hÊŒline”MSuh1j§:hjh²hh³hÊh´MSubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj <ubah}”(h]”h ]”h"]”h$]”h&]”jEaŒlevel”KŒtype”jÂ:Œsource”hÊŒline”M{uh1j§:hjðh²hh³hÊh´M{ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hj'<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj$<ubah}”(h]”h ]”h"]”h$]”h&]”joaŒlevel”KŒtype”jÂ:Œsource”hÊŒline”M¦uh1j§:hj%h²hh³hÊh´M¦ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjB<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Åubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hj]<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhjZ<ubah}”(h]”h ]”h"]”h$]”h&]”j=&aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”Mâuh1j§:hjOh²hh³hÊh´Mâubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hjx<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhju<ubah}”(h]”h ]”h"]”h$]”h&]”j@)aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”M(uh1j§:hjÉ&h²hh³hÊh´M(ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(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”Mxuh1j§:hj8*h²hh³hÊh´Mxubj¨:)�”}”(hhh]”hÌ)�”}”(hŒGDuplicate implicit target name: "function-specific configfs interface".”h]”hŒKDuplicate implicit target name: “function-specific configfs interfaceâ€�.”…”�”}”(hj®<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhj«<ubah}”(h]”h ]”h"]”h$]”h&]”j42aŒlevel”KŒtype”jÂ:Œsource”hÊŒline”M±uh1j§:hj5,h²hh³hÊh´M±ubj¨:)�”}”(hhh]”hÌ)�”}”(hŒ