1ecefae6dSMauro Carvalho Chehab============== 2ecefae6dSMauro Carvalho ChehabGadget Testing 3ecefae6dSMauro Carvalho Chehab============== 4ecefae6dSMauro Carvalho Chehab 5ecefae6dSMauro Carvalho ChehabThis file summarizes information on basic testing of USB functions 6ecefae6dSMauro Carvalho Chehabprovided by gadgets. 7ecefae6dSMauro Carvalho Chehab 8ecefae6dSMauro Carvalho Chehab.. contents 9ecefae6dSMauro Carvalho Chehab 10ecefae6dSMauro Carvalho Chehab 1. ACM function 11ecefae6dSMauro Carvalho Chehab 2. ECM function 12ecefae6dSMauro Carvalho Chehab 3. ECM subset function 13ecefae6dSMauro Carvalho Chehab 4. EEM function 14ecefae6dSMauro Carvalho Chehab 5. FFS function 15ecefae6dSMauro Carvalho Chehab 6. HID function 16ecefae6dSMauro Carvalho Chehab 7. LOOPBACK function 17ecefae6dSMauro Carvalho Chehab 8. MASS STORAGE function 18ecefae6dSMauro Carvalho Chehab 9. MIDI function 19ecefae6dSMauro Carvalho Chehab 10. NCM function 20ecefae6dSMauro Carvalho Chehab 11. OBEX function 21ecefae6dSMauro Carvalho Chehab 12. PHONET function 22ecefae6dSMauro Carvalho Chehab 13. RNDIS function 23ecefae6dSMauro Carvalho Chehab 14. SERIAL function 24ecefae6dSMauro Carvalho Chehab 15. SOURCESINK function 25ecefae6dSMauro Carvalho Chehab 16. UAC1 function (legacy implementation) 26ecefae6dSMauro Carvalho Chehab 17. UAC2 function 27ecefae6dSMauro Carvalho Chehab 18. UVC function 28ecefae6dSMauro Carvalho Chehab 19. PRINTER function 29ecefae6dSMauro Carvalho Chehab 20. UAC1 function (new API) 30ecefae6dSMauro Carvalho Chehab 31ecefae6dSMauro Carvalho Chehab 32ecefae6dSMauro Carvalho Chehab1. ACM function 33ecefae6dSMauro Carvalho Chehab=============== 34ecefae6dSMauro Carvalho Chehab 35ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_acm.ko module. 36ecefae6dSMauro Carvalho Chehab 37ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 38ecefae6dSMauro Carvalho Chehab------------------------------------ 39ecefae6dSMauro Carvalho Chehab 40ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "acm". 41ecefae6dSMauro Carvalho ChehabThe ACM function provides just one attribute in its function directory: 42ecefae6dSMauro Carvalho Chehab 43ecefae6dSMauro Carvalho Chehab port_num 44ecefae6dSMauro Carvalho Chehab 45ecefae6dSMauro Carvalho ChehabThe attribute is read-only. 46ecefae6dSMauro Carvalho Chehab 47ecefae6dSMauro Carvalho ChehabThere can be at most 4 ACM/generic serial/OBEX ports in the system. 48ecefae6dSMauro Carvalho Chehab 49ecefae6dSMauro Carvalho Chehab 50ecefae6dSMauro Carvalho ChehabTesting the ACM function 51ecefae6dSMauro Carvalho Chehab------------------------ 52ecefae6dSMauro Carvalho Chehab 53ecefae6dSMauro Carvalho ChehabOn the host:: 54ecefae6dSMauro Carvalho Chehab 55ecefae6dSMauro Carvalho Chehab cat > /dev/ttyACM<X> 56ecefae6dSMauro Carvalho Chehab 57ecefae6dSMauro Carvalho ChehabOn the device:: 58ecefae6dSMauro Carvalho Chehab 59ecefae6dSMauro Carvalho Chehab cat /dev/ttyGS<Y> 60ecefae6dSMauro Carvalho Chehab 61ecefae6dSMauro Carvalho Chehabthen the other way round 62ecefae6dSMauro Carvalho Chehab 63ecefae6dSMauro Carvalho ChehabOn the device:: 64ecefae6dSMauro Carvalho Chehab 65ecefae6dSMauro Carvalho Chehab cat > /dev/ttyGS<Y> 66ecefae6dSMauro Carvalho Chehab 67ecefae6dSMauro Carvalho ChehabOn the host:: 68ecefae6dSMauro Carvalho Chehab 69ecefae6dSMauro Carvalho Chehab cat /dev/ttyACM<X> 70ecefae6dSMauro Carvalho Chehab 71ecefae6dSMauro Carvalho Chehab2. ECM function 72ecefae6dSMauro Carvalho Chehab=============== 73ecefae6dSMauro Carvalho Chehab 74ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ecm.ko module. 75ecefae6dSMauro Carvalho Chehab 76ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 77ecefae6dSMauro Carvalho Chehab------------------------------------ 78ecefae6dSMauro Carvalho Chehab 79ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "ecm". 80ecefae6dSMauro Carvalho ChehabThe ECM function provides these attributes in its function directory: 81ecefae6dSMauro Carvalho Chehab 82ecefae6dSMauro Carvalho Chehab =============== ================================================== 83ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 84ecefae6dSMauro Carvalho Chehab function instance 85ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 86ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 87ecefae6dSMauro Carvalho Chehab Ethernet over USB link 88ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 89ecefae6dSMauro Carvalho Chehab Ethernet over USB link 90ecefae6dSMauro Carvalho Chehab =============== ================================================== 91ecefae6dSMauro Carvalho Chehab 92ecefae6dSMauro Carvalho Chehaband after creating the functions/ecm.<instance name> they contain default 93ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 9463d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 9563d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 9663d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 97ecefae6dSMauro Carvalho Chehab 98ecefae6dSMauro Carvalho ChehabTesting the ECM function 99ecefae6dSMauro Carvalho Chehab------------------------ 100ecefae6dSMauro Carvalho Chehab 101ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 102ecefae6dSMauro Carvalho Chehab 103ecefae6dSMauro Carvalho ChehabOn the device:: 104ecefae6dSMauro Carvalho Chehab 105ecefae6dSMauro Carvalho Chehab ping <host's IP> 106ecefae6dSMauro Carvalho Chehab 107ecefae6dSMauro Carvalho ChehabOn the host:: 108ecefae6dSMauro Carvalho Chehab 109ecefae6dSMauro Carvalho Chehab ping <device's IP> 110ecefae6dSMauro Carvalho Chehab 111ecefae6dSMauro Carvalho Chehab3. ECM subset function 112ecefae6dSMauro Carvalho Chehab====================== 113ecefae6dSMauro Carvalho Chehab 114ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ecm_subset.ko module. 115ecefae6dSMauro Carvalho Chehab 116ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 117ecefae6dSMauro Carvalho Chehab------------------------------------ 118ecefae6dSMauro Carvalho Chehab 119ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "geth". 120ecefae6dSMauro Carvalho ChehabThe ECM subset function provides these attributes in its function directory: 121ecefae6dSMauro Carvalho Chehab 122ecefae6dSMauro Carvalho Chehab =============== ================================================== 123ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 124ecefae6dSMauro Carvalho Chehab function instance 125ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 126ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 127ecefae6dSMauro Carvalho Chehab Ethernet over USB link 128ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 129ecefae6dSMauro Carvalho Chehab Ethernet over USB link 130ecefae6dSMauro Carvalho Chehab =============== ================================================== 131ecefae6dSMauro Carvalho Chehab 132ecefae6dSMauro Carvalho Chehaband after creating the functions/ecm.<instance name> they contain default 133ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 13463d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 13563d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 13663d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 137ecefae6dSMauro Carvalho Chehab 138ecefae6dSMauro Carvalho ChehabTesting the ECM subset function 139ecefae6dSMauro Carvalho Chehab------------------------------- 140ecefae6dSMauro Carvalho Chehab 141ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 142ecefae6dSMauro Carvalho Chehab 143ecefae6dSMauro Carvalho ChehabOn the device:: 144ecefae6dSMauro Carvalho Chehab 145ecefae6dSMauro Carvalho Chehab ping <host's IP> 146ecefae6dSMauro Carvalho Chehab 147ecefae6dSMauro Carvalho ChehabOn the host:: 148ecefae6dSMauro Carvalho Chehab 149ecefae6dSMauro Carvalho Chehab ping <device's IP> 150ecefae6dSMauro Carvalho Chehab 151ecefae6dSMauro Carvalho Chehab4. EEM function 152ecefae6dSMauro Carvalho Chehab=============== 153ecefae6dSMauro Carvalho Chehab 154ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_eem.ko module. 155ecefae6dSMauro Carvalho Chehab 156ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 157ecefae6dSMauro Carvalho Chehab------------------------------------ 158ecefae6dSMauro Carvalho Chehab 159ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "eem". 160ecefae6dSMauro Carvalho ChehabThe EEM function provides these attributes in its function directory: 161ecefae6dSMauro Carvalho Chehab 162ecefae6dSMauro Carvalho Chehab =============== ================================================== 163ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 164ecefae6dSMauro Carvalho Chehab function instance 165ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 166ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 167ecefae6dSMauro Carvalho Chehab Ethernet over USB link 168ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 169ecefae6dSMauro Carvalho Chehab Ethernet over USB link 170ecefae6dSMauro Carvalho Chehab =============== ================================================== 171ecefae6dSMauro Carvalho Chehab 172ecefae6dSMauro Carvalho Chehaband after creating the functions/eem.<instance name> they contain default 173ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 17463d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 17563d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 17663d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 177ecefae6dSMauro Carvalho Chehab 178ecefae6dSMauro Carvalho ChehabTesting the EEM function 179ecefae6dSMauro Carvalho Chehab------------------------ 180ecefae6dSMauro Carvalho Chehab 181ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 182ecefae6dSMauro Carvalho Chehab 183ecefae6dSMauro Carvalho ChehabOn the device:: 184ecefae6dSMauro Carvalho Chehab 185ecefae6dSMauro Carvalho Chehab ping <host's IP> 186ecefae6dSMauro Carvalho Chehab 187ecefae6dSMauro Carvalho ChehabOn the host:: 188ecefae6dSMauro Carvalho Chehab 189ecefae6dSMauro Carvalho Chehab ping <device's IP> 190ecefae6dSMauro Carvalho Chehab 191ecefae6dSMauro Carvalho Chehab5. FFS function 192ecefae6dSMauro Carvalho Chehab=============== 193ecefae6dSMauro Carvalho Chehab 194ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_fs.ko module. 195ecefae6dSMauro Carvalho Chehab 196ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 197ecefae6dSMauro Carvalho Chehab------------------------------------ 198ecefae6dSMauro Carvalho Chehab 199ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "ffs". 200ecefae6dSMauro Carvalho ChehabThe function directory is intentionally empty and not modifiable. 201ecefae6dSMauro Carvalho Chehab 202ecefae6dSMauro Carvalho ChehabAfter creating the directory there is a new instance (a "device") of FunctionFS 203ecefae6dSMauro Carvalho Chehabavailable in the system. Once a "device" is available, the user should follow 204ecefae6dSMauro Carvalho Chehabthe standard procedure for using FunctionFS (mount it, run the userspace 205ecefae6dSMauro Carvalho Chehabprocess which implements the function proper). The gadget should be enabled 206ecefae6dSMauro Carvalho Chehabby writing a suitable string to usb_gadget/<gadget>/UDC. 207ecefae6dSMauro Carvalho Chehab 208ecefae6dSMauro Carvalho ChehabTesting the FFS function 209ecefae6dSMauro Carvalho Chehab------------------------ 210ecefae6dSMauro Carvalho Chehab 211ecefae6dSMauro Carvalho ChehabOn the device: start the function's userspace daemon, enable the gadget 212ecefae6dSMauro Carvalho Chehab 213ecefae6dSMauro Carvalho ChehabOn the host: use the USB function provided by the device 214ecefae6dSMauro Carvalho Chehab 215ecefae6dSMauro Carvalho Chehab6. HID function 216ecefae6dSMauro Carvalho Chehab=============== 217ecefae6dSMauro Carvalho Chehab 218ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_hid.ko module. 219ecefae6dSMauro Carvalho Chehab 220ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 221ecefae6dSMauro Carvalho Chehab------------------------------------ 222ecefae6dSMauro Carvalho Chehab 223ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "hid". 224ecefae6dSMauro Carvalho ChehabThe HID function provides these attributes in its function directory: 225ecefae6dSMauro Carvalho Chehab 226ecefae6dSMauro Carvalho Chehab =============== =========================================== 227ecefae6dSMauro Carvalho Chehab protocol HID protocol to use 228ecefae6dSMauro Carvalho Chehab report_desc data to be used in HID reports, except data 229ecefae6dSMauro Carvalho Chehab passed with /dev/hidg<X> 230ecefae6dSMauro Carvalho Chehab report_length HID report length 231ecefae6dSMauro Carvalho Chehab subclass HID subclass to use 232ecefae6dSMauro Carvalho Chehab =============== =========================================== 233ecefae6dSMauro Carvalho Chehab 234ecefae6dSMauro Carvalho ChehabFor a keyboard the protocol and the subclass are 1, the report_length is 8, 235ecefae6dSMauro Carvalho Chehabwhile the report_desc is:: 236ecefae6dSMauro Carvalho Chehab 237ecefae6dSMauro Carvalho Chehab $ hd my_report_desc 238ecefae6dSMauro Carvalho Chehab 00000000 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 |..........)...%.| 239ecefae6dSMauro Carvalho Chehab 00000010 75 01 95 08 81 02 95 01 75 08 81 03 95 05 75 01 |u.......u.....u.| 240ecefae6dSMauro Carvalho Chehab 00000020 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 06 |....).....u.....| 241ecefae6dSMauro Carvalho Chehab 00000030 75 08 15 00 25 65 05 07 19 00 29 65 81 00 c0 |u...%e....)e...| 242ecefae6dSMauro Carvalho Chehab 0000003f 243ecefae6dSMauro Carvalho Chehab 244ecefae6dSMauro Carvalho ChehabSuch a sequence of bytes can be stored to the attribute with echo:: 245ecefae6dSMauro Carvalho Chehab 246ecefae6dSMauro Carvalho Chehab $ echo -ne \\x05\\x01\\x09\\x06\\xa1..... 247ecefae6dSMauro Carvalho Chehab 248ecefae6dSMauro Carvalho ChehabTesting the HID function 249ecefae6dSMauro Carvalho Chehab------------------------ 250ecefae6dSMauro Carvalho Chehab 251ecefae6dSMauro Carvalho ChehabDevice: 252ecefae6dSMauro Carvalho Chehab 253ecefae6dSMauro Carvalho Chehab- create the gadget 254ecefae6dSMauro Carvalho Chehab- connect the gadget to a host, preferably not the one used 255ecefae6dSMauro Carvalho Chehab to control the gadget 256ecefae6dSMauro Carvalho Chehab- run a program which writes to /dev/hidg<N>, e.g. 257ecefae6dSMauro Carvalho Chehab a userspace program found in Documentation/usb/gadget_hid.rst:: 258ecefae6dSMauro Carvalho Chehab 259ecefae6dSMauro Carvalho Chehab $ ./hid_gadget_test /dev/hidg0 keyboard 260ecefae6dSMauro Carvalho Chehab 261ecefae6dSMauro Carvalho ChehabHost: 262ecefae6dSMauro Carvalho Chehab 263ecefae6dSMauro Carvalho Chehab- observe the keystrokes from the gadget 264ecefae6dSMauro Carvalho Chehab 265ecefae6dSMauro Carvalho Chehab7. LOOPBACK function 266ecefae6dSMauro Carvalho Chehab==================== 267ecefae6dSMauro Carvalho Chehab 268ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ss_lb.ko module. 269ecefae6dSMauro Carvalho Chehab 270ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 271ecefae6dSMauro Carvalho Chehab------------------------------------ 272ecefae6dSMauro Carvalho Chehab 273ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "Loopback". 274ecefae6dSMauro Carvalho ChehabThe LOOPBACK function provides these attributes in its function directory: 275ecefae6dSMauro Carvalho Chehab 276ecefae6dSMauro Carvalho Chehab =============== ======================= 277ecefae6dSMauro Carvalho Chehab qlen depth of loopback queue 278ecefae6dSMauro Carvalho Chehab bulk_buflen buffer length 279ecefae6dSMauro Carvalho Chehab =============== ======================= 280ecefae6dSMauro Carvalho Chehab 281ecefae6dSMauro Carvalho ChehabTesting the LOOPBACK function 282ecefae6dSMauro Carvalho Chehab----------------------------- 283ecefae6dSMauro Carvalho Chehab 284ecefae6dSMauro Carvalho Chehabdevice: run the gadget 285ecefae6dSMauro Carvalho Chehab 286ecefae6dSMauro Carvalho Chehabhost: test-usb (tools/usb/testusb.c) 287ecefae6dSMauro Carvalho Chehab 288ecefae6dSMauro Carvalho Chehab8. MASS STORAGE function 289ecefae6dSMauro Carvalho Chehab======================== 290ecefae6dSMauro Carvalho Chehab 291ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_mass_storage.ko module. 292ecefae6dSMauro Carvalho Chehab 293ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 294ecefae6dSMauro Carvalho Chehab------------------------------------ 295ecefae6dSMauro Carvalho Chehab 296ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "mass_storage". 297ecefae6dSMauro Carvalho ChehabThe MASS STORAGE function provides these attributes in its directory: 298ecefae6dSMauro Carvalho Chehabfiles: 299ecefae6dSMauro Carvalho Chehab 300ecefae6dSMauro Carvalho Chehab =============== ============================================== 301ecefae6dSMauro Carvalho Chehab stall Set to permit function to halt bulk endpoints. 302ecefae6dSMauro Carvalho Chehab Disabled on some USB devices known not to work 303ecefae6dSMauro Carvalho Chehab correctly. You should set it to true. 304ecefae6dSMauro Carvalho Chehab num_buffers Number of pipeline buffers. Valid numbers 305ecefae6dSMauro Carvalho Chehab are 2..4. Available only if 306ecefae6dSMauro Carvalho Chehab CONFIG_USB_GADGET_DEBUG_FILES is set. 307ecefae6dSMauro Carvalho Chehab =============== ============================================== 308ecefae6dSMauro Carvalho Chehab 309ecefae6dSMauro Carvalho Chehaband a default lun.0 directory corresponding to SCSI LUN #0. 310ecefae6dSMauro Carvalho Chehab 311ecefae6dSMauro Carvalho ChehabA new lun can be added with mkdir:: 312ecefae6dSMauro Carvalho Chehab 313ecefae6dSMauro Carvalho Chehab $ mkdir functions/mass_storage.0/partition.5 314ecefae6dSMauro Carvalho Chehab 315ecefae6dSMauro Carvalho ChehabLun numbering does not have to be continuous, except for lun #0 which is 316ecefae6dSMauro Carvalho Chehabcreated by default. A maximum of 8 luns can be specified and they all must be 317ecefae6dSMauro Carvalho Chehabnamed following the <name>.<number> scheme. The numbers can be 0..8. 318ecefae6dSMauro Carvalho ChehabProbably a good convention is to name the luns "lun.<number>", 319ecefae6dSMauro Carvalho Chehabalthough it is not mandatory. 320ecefae6dSMauro Carvalho Chehab 321ecefae6dSMauro Carvalho ChehabIn each lun directory there are the following attribute files: 322ecefae6dSMauro Carvalho Chehab 323ecefae6dSMauro Carvalho Chehab =============== ============================================== 324ecefae6dSMauro Carvalho Chehab file The path to the backing file for the LUN. 325ecefae6dSMauro Carvalho Chehab Required if LUN is not marked as removable. 326ecefae6dSMauro Carvalho Chehab ro Flag specifying access to the LUN shall be 327ecefae6dSMauro Carvalho Chehab read-only. This is implied if CD-ROM emulation 328ecefae6dSMauro Carvalho Chehab is enabled as well as when it was impossible 329ecefae6dSMauro Carvalho Chehab to open "filename" in R/W mode. 330ecefae6dSMauro Carvalho Chehab removable Flag specifying that LUN shall be indicated as 331ecefae6dSMauro Carvalho Chehab being removable. 332ecefae6dSMauro Carvalho Chehab cdrom Flag specifying that LUN shall be reported as 333ecefae6dSMauro Carvalho Chehab being a CD-ROM. 334ecefae6dSMauro Carvalho Chehab nofua Flag specifying that FUA flag 335ecefae6dSMauro Carvalho Chehab in SCSI WRITE(10,12) 336ecefae6dSMauro Carvalho Chehab =============== ============================================== 337ecefae6dSMauro Carvalho Chehab 338ecefae6dSMauro Carvalho ChehabTesting the MASS STORAGE function 339ecefae6dSMauro Carvalho Chehab--------------------------------- 340ecefae6dSMauro Carvalho Chehab 341ecefae6dSMauro Carvalho Chehabdevice: connect the gadget, enable it 342ecefae6dSMauro Carvalho Chehabhost: dmesg, see the USB drives appear (if system configured to automatically 343ecefae6dSMauro Carvalho Chehabmount) 344ecefae6dSMauro Carvalho Chehab 345ecefae6dSMauro Carvalho Chehab9. MIDI function 346ecefae6dSMauro Carvalho Chehab================ 347ecefae6dSMauro Carvalho Chehab 348ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_midi.ko module. 349ecefae6dSMauro Carvalho Chehab 350ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 351ecefae6dSMauro Carvalho Chehab------------------------------------ 352ecefae6dSMauro Carvalho Chehab 353ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "midi". 354ecefae6dSMauro Carvalho ChehabThe MIDI function provides these attributes in its function directory: 355ecefae6dSMauro Carvalho Chehab 356ecefae6dSMauro Carvalho Chehab =============== ==================================== 357ecefae6dSMauro Carvalho Chehab buflen MIDI buffer length 358ecefae6dSMauro Carvalho Chehab id ID string for the USB MIDI adapter 359ecefae6dSMauro Carvalho Chehab in_ports number of MIDI input ports 360ecefae6dSMauro Carvalho Chehab index index value for the USB MIDI adapter 361ecefae6dSMauro Carvalho Chehab out_ports number of MIDI output ports 362ecefae6dSMauro Carvalho Chehab qlen USB read request queue length 363ecefae6dSMauro Carvalho Chehab =============== ==================================== 364ecefae6dSMauro Carvalho Chehab 365ecefae6dSMauro Carvalho ChehabTesting the MIDI function 366ecefae6dSMauro Carvalho Chehab------------------------- 367ecefae6dSMauro Carvalho Chehab 368ecefae6dSMauro Carvalho ChehabThere are two cases: playing a mid from the gadget to 369ecefae6dSMauro Carvalho Chehabthe host and playing a mid from the host to the gadget. 370ecefae6dSMauro Carvalho Chehab 371ecefae6dSMauro Carvalho Chehab1) Playing a mid from the gadget to the host: 372ecefae6dSMauro Carvalho Chehab 373ecefae6dSMauro Carvalho Chehabhost:: 374ecefae6dSMauro Carvalho Chehab 375ecefae6dSMauro Carvalho Chehab $ arecordmidi -l 376ecefae6dSMauro Carvalho Chehab Port Client name Port name 377ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 378ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 379ecefae6dSMauro Carvalho Chehab $ arecordmidi -p 24:0 from_gadget.mid 380ecefae6dSMauro Carvalho Chehab 381ecefae6dSMauro Carvalho Chehabgadget:: 382ecefae6dSMauro Carvalho Chehab 383ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 384ecefae6dSMauro Carvalho Chehab Port Client name Port name 385ecefae6dSMauro Carvalho Chehab 20:0 f_midi f_midi 386ecefae6dSMauro Carvalho Chehab 387ecefae6dSMauro Carvalho Chehab $ aplaymidi -p 20:0 to_host.mid 388ecefae6dSMauro Carvalho Chehab 389ecefae6dSMauro Carvalho Chehab2) Playing a mid from the host to the gadget 390ecefae6dSMauro Carvalho Chehab 391ecefae6dSMauro Carvalho Chehabgadget:: 392ecefae6dSMauro Carvalho Chehab 393ecefae6dSMauro Carvalho Chehab $ arecordmidi -l 394ecefae6dSMauro Carvalho Chehab Port Client name Port name 395ecefae6dSMauro Carvalho Chehab 20:0 f_midi f_midi 396ecefae6dSMauro Carvalho Chehab 397ecefae6dSMauro Carvalho Chehab $ arecordmidi -p 20:0 from_host.mid 398ecefae6dSMauro Carvalho Chehab 399ecefae6dSMauro Carvalho Chehabhost:: 400ecefae6dSMauro Carvalho Chehab 401ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 402ecefae6dSMauro Carvalho Chehab Port Client name Port name 403ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 404ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 405ecefae6dSMauro Carvalho Chehab 406ecefae6dSMauro Carvalho Chehab $ aplaymidi -p24:0 to_gadget.mid 407ecefae6dSMauro Carvalho Chehab 408ecefae6dSMauro Carvalho ChehabThe from_gadget.mid should sound identical to the to_host.mid. 409ecefae6dSMauro Carvalho Chehab 410ecefae6dSMauro Carvalho ChehabThe from_host.id should sound identical to the to_gadget.mid. 411ecefae6dSMauro Carvalho Chehab 412ecefae6dSMauro Carvalho ChehabMIDI files can be played to speakers/headphones with e.g. timidity installed:: 413ecefae6dSMauro Carvalho Chehab 414ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 415ecefae6dSMauro Carvalho Chehab Port Client name Port name 416ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 417ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 418ecefae6dSMauro Carvalho Chehab 128:0 TiMidity TiMidity port 0 419ecefae6dSMauro Carvalho Chehab 128:1 TiMidity TiMidity port 1 420ecefae6dSMauro Carvalho Chehab 128:2 TiMidity TiMidity port 2 421ecefae6dSMauro Carvalho Chehab 128:3 TiMidity TiMidity port 3 422ecefae6dSMauro Carvalho Chehab 423ecefae6dSMauro Carvalho Chehab $ aplaymidi -p 128:0 file.mid 424ecefae6dSMauro Carvalho Chehab 425ecefae6dSMauro Carvalho ChehabMIDI ports can be logically connected using the aconnect utility, e.g.:: 426ecefae6dSMauro Carvalho Chehab 427ecefae6dSMauro Carvalho Chehab $ aconnect 24:0 128:0 # try it on the host 428ecefae6dSMauro Carvalho Chehab 429ecefae6dSMauro Carvalho ChehabAfter the gadget's MIDI port is connected to timidity's MIDI port, 430ecefae6dSMauro Carvalho Chehabwhatever is played at the gadget side with aplaymidi -l is audible 431ecefae6dSMauro Carvalho Chehabin host's speakers/headphones. 432ecefae6dSMauro Carvalho Chehab 433ecefae6dSMauro Carvalho Chehab10. NCM function 434ecefae6dSMauro Carvalho Chehab================ 435ecefae6dSMauro Carvalho Chehab 436ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ncm.ko module. 437ecefae6dSMauro Carvalho Chehab 438ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 439ecefae6dSMauro Carvalho Chehab------------------------------------ 440ecefae6dSMauro Carvalho Chehab 441ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "ncm". 442ecefae6dSMauro Carvalho ChehabThe NCM function provides these attributes in its function directory: 443ecefae6dSMauro Carvalho Chehab 444ecefae6dSMauro Carvalho Chehab =============== ================================================== 445ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 446ecefae6dSMauro Carvalho Chehab function instance 447ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 448ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 449ecefae6dSMauro Carvalho Chehab Ethernet over USB link 450ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 451ecefae6dSMauro Carvalho Chehab Ethernet over USB link 452ecefae6dSMauro Carvalho Chehab =============== ================================================== 453ecefae6dSMauro Carvalho Chehab 454ecefae6dSMauro Carvalho Chehaband after creating the functions/ncm.<instance name> they contain default 455ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 45663d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 45763d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 45863d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 459ecefae6dSMauro Carvalho Chehab 460ecefae6dSMauro Carvalho ChehabTesting the NCM function 461ecefae6dSMauro Carvalho Chehab------------------------ 462ecefae6dSMauro Carvalho Chehab 463ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 464ecefae6dSMauro Carvalho Chehab 465ecefae6dSMauro Carvalho ChehabOn the device:: 466ecefae6dSMauro Carvalho Chehab 467ecefae6dSMauro Carvalho Chehab ping <host's IP> 468ecefae6dSMauro Carvalho Chehab 469ecefae6dSMauro Carvalho ChehabOn the host:: 470ecefae6dSMauro Carvalho Chehab 471ecefae6dSMauro Carvalho Chehab ping <device's IP> 472ecefae6dSMauro Carvalho Chehab 473ecefae6dSMauro Carvalho Chehab11. OBEX function 474ecefae6dSMauro Carvalho Chehab================= 475ecefae6dSMauro Carvalho Chehab 476ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_obex.ko module. 477ecefae6dSMauro Carvalho Chehab 478ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 479ecefae6dSMauro Carvalho Chehab------------------------------------ 480ecefae6dSMauro Carvalho Chehab 481ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "obex". 482ecefae6dSMauro Carvalho ChehabThe OBEX function provides just one attribute in its function directory: 483ecefae6dSMauro Carvalho Chehab 484ecefae6dSMauro Carvalho Chehab port_num 485ecefae6dSMauro Carvalho Chehab 486ecefae6dSMauro Carvalho ChehabThe attribute is read-only. 487ecefae6dSMauro Carvalho Chehab 488ecefae6dSMauro Carvalho ChehabThere can be at most 4 ACM/generic serial/OBEX ports in the system. 489ecefae6dSMauro Carvalho Chehab 490ecefae6dSMauro Carvalho ChehabTesting the OBEX function 491ecefae6dSMauro Carvalho Chehab------------------------- 492ecefae6dSMauro Carvalho Chehab 493ecefae6dSMauro Carvalho ChehabOn device:: 494ecefae6dSMauro Carvalho Chehab 495ecefae6dSMauro Carvalho Chehab seriald -f /dev/ttyGS<Y> -s 1024 496ecefae6dSMauro Carvalho Chehab 497ecefae6dSMauro Carvalho ChehabOn host:: 498ecefae6dSMauro Carvalho Chehab 499ecefae6dSMauro Carvalho Chehab serialc -v <vendorID> -p <productID> -i<interface#> -a1 -s1024 \ 500ecefae6dSMauro Carvalho Chehab -t<out endpoint addr> -r<in endpoint addr> 501ecefae6dSMauro Carvalho Chehab 502ecefae6dSMauro Carvalho Chehabwhere seriald and serialc are Felipe's utilities found here: 503ecefae6dSMauro Carvalho Chehab 504ecefae6dSMauro Carvalho Chehab https://github.com/felipebalbi/usb-tools.git master 505ecefae6dSMauro Carvalho Chehab 506ecefae6dSMauro Carvalho Chehab12. PHONET function 507ecefae6dSMauro Carvalho Chehab=================== 508ecefae6dSMauro Carvalho Chehab 509ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_phonet.ko module. 510ecefae6dSMauro Carvalho Chehab 511ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 512ecefae6dSMauro Carvalho Chehab------------------------------------ 513ecefae6dSMauro Carvalho Chehab 514ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "phonet". 515ecefae6dSMauro Carvalho ChehabThe PHONET function provides just one attribute in its function directory: 516ecefae6dSMauro Carvalho Chehab 517ecefae6dSMauro Carvalho Chehab =============== ================================================== 518ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 519ecefae6dSMauro Carvalho Chehab function instance 520ecefae6dSMauro Carvalho Chehab =============== ================================================== 521ecefae6dSMauro Carvalho Chehab 522ecefae6dSMauro Carvalho ChehabTesting the PHONET function 523ecefae6dSMauro Carvalho Chehab--------------------------- 524ecefae6dSMauro Carvalho Chehab 525ecefae6dSMauro Carvalho ChehabIt is not possible to test the SOCK_STREAM protocol without a specific piece 526ecefae6dSMauro Carvalho Chehabof hardware, so only SOCK_DGRAM has been tested. For the latter to work, 527ecefae6dSMauro Carvalho Chehabin the past I had to apply the patch mentioned here: 528ecefae6dSMauro Carvalho Chehab 529ecefae6dSMauro Carvalho Chehabhttp://www.spinics.net/lists/linux-usb/msg85689.html 530ecefae6dSMauro Carvalho Chehab 531ecefae6dSMauro Carvalho ChehabThese tools are required: 532ecefae6dSMauro Carvalho Chehab 533ecefae6dSMauro Carvalho Chehabgit://git.gitorious.org/meego-cellular/phonet-utils.git 534ecefae6dSMauro Carvalho Chehab 535ecefae6dSMauro Carvalho ChehabOn the host:: 536ecefae6dSMauro Carvalho Chehab 537ecefae6dSMauro Carvalho Chehab $ ./phonet -a 0x10 -i usbpn0 538ecefae6dSMauro Carvalho Chehab $ ./pnroute add 0x6c usbpn0 539ecefae6dSMauro Carvalho Chehab $./pnroute add 0x10 usbpn0 540ecefae6dSMauro Carvalho Chehab $ ifconfig usbpn0 up 541ecefae6dSMauro Carvalho Chehab 542ecefae6dSMauro Carvalho ChehabOn the device:: 543ecefae6dSMauro Carvalho Chehab 544ecefae6dSMauro Carvalho Chehab $ ./phonet -a 0x6c -i upnlink0 545ecefae6dSMauro Carvalho Chehab $ ./pnroute add 0x10 upnlink0 546ecefae6dSMauro Carvalho Chehab $ ifconfig upnlink0 up 547ecefae6dSMauro Carvalho Chehab 548ecefae6dSMauro Carvalho ChehabThen a test program can be used:: 549ecefae6dSMauro Carvalho Chehab 550ecefae6dSMauro Carvalho Chehab http://www.spinics.net/lists/linux-usb/msg85690.html 551ecefae6dSMauro Carvalho Chehab 552ecefae6dSMauro Carvalho ChehabOn the device:: 553ecefae6dSMauro Carvalho Chehab 554ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x6c -r 555ecefae6dSMauro Carvalho Chehab 556ecefae6dSMauro Carvalho ChehabOn the host:: 557ecefae6dSMauro Carvalho Chehab 558ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x10 -s 0x6c 559ecefae6dSMauro Carvalho Chehab 560ecefae6dSMauro Carvalho ChehabAs a result some data should be sent from host to device. 561ecefae6dSMauro Carvalho ChehabThen the other way round: 562ecefae6dSMauro Carvalho Chehab 563ecefae6dSMauro Carvalho ChehabOn the host:: 564ecefae6dSMauro Carvalho Chehab 565ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x10 -r 566ecefae6dSMauro Carvalho Chehab 567ecefae6dSMauro Carvalho ChehabOn the device:: 568ecefae6dSMauro Carvalho Chehab 569ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x6c -s 0x10 570ecefae6dSMauro Carvalho Chehab 571ecefae6dSMauro Carvalho Chehab13. RNDIS function 572ecefae6dSMauro Carvalho Chehab================== 573ecefae6dSMauro Carvalho Chehab 574ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_rndis.ko module. 575ecefae6dSMauro Carvalho Chehab 576ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 577ecefae6dSMauro Carvalho Chehab------------------------------------ 578ecefae6dSMauro Carvalho Chehab 579ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "rndis". 580ecefae6dSMauro Carvalho ChehabThe RNDIS function provides these attributes in its function directory: 581ecefae6dSMauro Carvalho Chehab 582ecefae6dSMauro Carvalho Chehab =============== ================================================== 583ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 584ecefae6dSMauro Carvalho Chehab function instance 585ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 586ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 587ecefae6dSMauro Carvalho Chehab Ethernet over USB link 588ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 589ecefae6dSMauro Carvalho Chehab Ethernet over USB link 590ecefae6dSMauro Carvalho Chehab =============== ================================================== 591ecefae6dSMauro Carvalho Chehab 592ecefae6dSMauro Carvalho Chehaband after creating the functions/rndis.<instance name> they contain default 593ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 59463d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 59563d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 59663d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 597ecefae6dSMauro Carvalho Chehab 598ecefae6dSMauro Carvalho ChehabTesting the RNDIS function 599ecefae6dSMauro Carvalho Chehab-------------------------- 600ecefae6dSMauro Carvalho Chehab 601ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 602ecefae6dSMauro Carvalho Chehab 603ecefae6dSMauro Carvalho ChehabOn the device:: 604ecefae6dSMauro Carvalho Chehab 605ecefae6dSMauro Carvalho Chehab ping <host's IP> 606ecefae6dSMauro Carvalho Chehab 607ecefae6dSMauro Carvalho ChehabOn the host:: 608ecefae6dSMauro Carvalho Chehab 609ecefae6dSMauro Carvalho Chehab ping <device's IP> 610ecefae6dSMauro Carvalho Chehab 611ecefae6dSMauro Carvalho Chehab14. SERIAL function 612ecefae6dSMauro Carvalho Chehab=================== 613ecefae6dSMauro Carvalho Chehab 614ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_gser.ko module. 615ecefae6dSMauro Carvalho Chehab 616ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 617ecefae6dSMauro Carvalho Chehab------------------------------------ 618ecefae6dSMauro Carvalho Chehab 619ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "gser". 620ecefae6dSMauro Carvalho ChehabThe SERIAL function provides just one attribute in its function directory: 621ecefae6dSMauro Carvalho Chehab 622ecefae6dSMauro Carvalho Chehab port_num 623ecefae6dSMauro Carvalho Chehab 624ecefae6dSMauro Carvalho ChehabThe attribute is read-only. 625ecefae6dSMauro Carvalho Chehab 626ecefae6dSMauro Carvalho ChehabThere can be at most 4 ACM/generic serial/OBEX ports in the system. 627ecefae6dSMauro Carvalho Chehab 628ecefae6dSMauro Carvalho ChehabTesting the SERIAL function 629ecefae6dSMauro Carvalho Chehab--------------------------- 630ecefae6dSMauro Carvalho Chehab 631ecefae6dSMauro Carvalho ChehabOn host:: 632ecefae6dSMauro Carvalho Chehab 633ecefae6dSMauro Carvalho Chehab insmod usbserial 634ecefae6dSMauro Carvalho Chehab echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id 635ecefae6dSMauro Carvalho Chehab 636ecefae6dSMauro Carvalho ChehabOn host:: 637ecefae6dSMauro Carvalho Chehab 638ecefae6dSMauro Carvalho Chehab cat > /dev/ttyUSB<X> 639ecefae6dSMauro Carvalho Chehab 640ecefae6dSMauro Carvalho ChehabOn target:: 641ecefae6dSMauro Carvalho Chehab 642ecefae6dSMauro Carvalho Chehab cat /dev/ttyGS<Y> 643ecefae6dSMauro Carvalho Chehab 644ecefae6dSMauro Carvalho Chehabthen the other way round 645ecefae6dSMauro Carvalho Chehab 646ecefae6dSMauro Carvalho ChehabOn target:: 647ecefae6dSMauro Carvalho Chehab 648ecefae6dSMauro Carvalho Chehab cat > /dev/ttyGS<Y> 649ecefae6dSMauro Carvalho Chehab 650ecefae6dSMauro Carvalho ChehabOn host:: 651ecefae6dSMauro Carvalho Chehab 652ecefae6dSMauro Carvalho Chehab cat /dev/ttyUSB<X> 653ecefae6dSMauro Carvalho Chehab 654ecefae6dSMauro Carvalho Chehab15. SOURCESINK function 655ecefae6dSMauro Carvalho Chehab======================= 656ecefae6dSMauro Carvalho Chehab 657ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ss_lb.ko module. 658ecefae6dSMauro Carvalho Chehab 659ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 660ecefae6dSMauro Carvalho Chehab------------------------------------ 661ecefae6dSMauro Carvalho Chehab 662ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "SourceSink". 663ecefae6dSMauro Carvalho ChehabThe SOURCESINK function provides these attributes in its function directory: 664ecefae6dSMauro Carvalho Chehab 665ecefae6dSMauro Carvalho Chehab =============== ================================== 666ecefae6dSMauro Carvalho Chehab pattern 0 (all zeros), 1 (mod63), 2 (none) 667ecefae6dSMauro Carvalho Chehab isoc_interval 1..16 668ecefae6dSMauro Carvalho Chehab isoc_maxpacket 0 - 1023 (fs), 0 - 1024 (hs/ss) 669ecefae6dSMauro Carvalho Chehab isoc_mult 0..2 (hs/ss only) 670ecefae6dSMauro Carvalho Chehab isoc_maxburst 0..15 (ss only) 671ecefae6dSMauro Carvalho Chehab bulk_buflen buffer length 672ecefae6dSMauro Carvalho Chehab bulk_qlen depth of queue for bulk 673ecefae6dSMauro Carvalho Chehab iso_qlen depth of queue for iso 674ecefae6dSMauro Carvalho Chehab =============== ================================== 675ecefae6dSMauro Carvalho Chehab 676ecefae6dSMauro Carvalho ChehabTesting the SOURCESINK function 677ecefae6dSMauro Carvalho Chehab------------------------------- 678ecefae6dSMauro Carvalho Chehab 679ecefae6dSMauro Carvalho Chehabdevice: run the gadget 680ecefae6dSMauro Carvalho Chehab 681ecefae6dSMauro Carvalho Chehabhost: test-usb (tools/usb/testusb.c) 682ecefae6dSMauro Carvalho Chehab 683ecefae6dSMauro Carvalho Chehab 684ecefae6dSMauro Carvalho Chehab16. UAC1 function (legacy implementation) 685ecefae6dSMauro Carvalho Chehab========================================= 686ecefae6dSMauro Carvalho Chehab 687ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac1_legacy.ko module. 688ecefae6dSMauro Carvalho Chehab 689ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 690ecefae6dSMauro Carvalho Chehab------------------------------------ 691ecefae6dSMauro Carvalho Chehab 692ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory 693ecefae6dSMauro Carvalho Chehabis "uac1_legacy". 694ecefae6dSMauro Carvalho ChehabThe uac1 function provides these attributes in its function directory: 695ecefae6dSMauro Carvalho Chehab 696ecefae6dSMauro Carvalho Chehab =============== ==================================== 697ecefae6dSMauro Carvalho Chehab audio_buf_size audio buffer size 698ecefae6dSMauro Carvalho Chehab fn_cap capture pcm device file name 699ecefae6dSMauro Carvalho Chehab fn_cntl control device file name 700ecefae6dSMauro Carvalho Chehab fn_play playback pcm device file name 701ecefae6dSMauro Carvalho Chehab req_buf_size ISO OUT endpoint request buffer size 702ecefae6dSMauro Carvalho Chehab req_count ISO OUT endpoint request count 703ecefae6dSMauro Carvalho Chehab =============== ==================================== 704ecefae6dSMauro Carvalho Chehab 705ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 706ecefae6dSMauro Carvalho Chehab 707ecefae6dSMauro Carvalho ChehabTesting the UAC1 function 708ecefae6dSMauro Carvalho Chehab------------------------- 709ecefae6dSMauro Carvalho Chehab 710ecefae6dSMauro Carvalho Chehabdevice: run the gadget 711ecefae6dSMauro Carvalho Chehab 712ecefae6dSMauro Carvalho Chehabhost:: 713ecefae6dSMauro Carvalho Chehab 714ecefae6dSMauro Carvalho Chehab aplay -l # should list our USB Audio Gadget 715ecefae6dSMauro Carvalho Chehab 716ecefae6dSMauro Carvalho Chehab17. UAC2 function 717ecefae6dSMauro Carvalho Chehab================= 718ecefae6dSMauro Carvalho Chehab 719ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac2.ko module. 720ecefae6dSMauro Carvalho Chehab 721ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 722ecefae6dSMauro Carvalho Chehab------------------------------------ 723ecefae6dSMauro Carvalho Chehab 724ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uac2". 725ecefae6dSMauro Carvalho ChehabThe uac2 function provides these attributes in its function directory: 726ecefae6dSMauro Carvalho Chehab 727*9c0edd56SHu Haowen ================ ==================================================== 728ecefae6dSMauro Carvalho Chehab c_chmask capture channel mask 729ecefae6dSMauro Carvalho Chehab c_srate capture sampling rate 730ecefae6dSMauro Carvalho Chehab c_ssize capture sample size (bytes) 73140c73b30SRuslan Bilovol c_sync capture synchronization type (async/adaptive) 732eaf6cbe0SRuslan Bilovol c_mute_present capture mute control enable 733eaf6cbe0SRuslan Bilovol c_volume_present capture volume control enable 734eaf6cbe0SRuslan Bilovol c_volume_min capture volume control min value (in 1/256 dB) 735eaf6cbe0SRuslan Bilovol c_volume_max capture volume control max value (in 1/256 dB) 736eaf6cbe0SRuslan Bilovol c_volume_res capture volume control resolution (in 1/256 dB) 737e89bb428SRuslan Bilovol fb_max maximum extra bandwidth in async mode 738ecefae6dSMauro Carvalho Chehab p_chmask playback channel mask 739ecefae6dSMauro Carvalho Chehab p_srate playback sampling rate 740ecefae6dSMauro Carvalho Chehab p_ssize playback sample size (bytes) 741eaf6cbe0SRuslan Bilovol p_mute_present playback mute control enable 742eaf6cbe0SRuslan Bilovol p_volume_present playback volume control enable 743eaf6cbe0SRuslan Bilovol p_volume_min playback volume control min value (in 1/256 dB) 744eaf6cbe0SRuslan Bilovol p_volume_max playback volume control max value (in 1/256 dB) 745eaf6cbe0SRuslan Bilovol p_volume_res playback volume control resolution (in 1/256 dB) 746ecefae6dSMauro Carvalho Chehab req_number the number of pre-allocated request for both capture 747ecefae6dSMauro Carvalho Chehab and playback 748*9c0edd56SHu Haowen ================ ==================================================== 749ecefae6dSMauro Carvalho Chehab 750ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 751ecefae6dSMauro Carvalho Chehab 752ecefae6dSMauro Carvalho ChehabTesting the UAC2 function 753ecefae6dSMauro Carvalho Chehab------------------------- 754ecefae6dSMauro Carvalho Chehab 755ecefae6dSMauro Carvalho Chehabdevice: run the gadget 756ecefae6dSMauro Carvalho Chehabhost: aplay -l # should list our USB Audio Gadget 757ecefae6dSMauro Carvalho Chehab 758ecefae6dSMauro Carvalho ChehabThis function does not require real hardware support, it just 759ecefae6dSMauro Carvalho Chehabsends a stream of audio data to/from the host. In order to 760ecefae6dSMauro Carvalho Chehabactually hear something at the device side, a command similar 761ecefae6dSMauro Carvalho Chehabto this must be used at the device side:: 762ecefae6dSMauro Carvalho Chehab 763ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 & 764ecefae6dSMauro Carvalho Chehab 765ecefae6dSMauro Carvalho Chehabe.g.:: 766ecefae6dSMauro Carvalho Chehab 767ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \ 768ecefae6dSMauro Carvalho Chehab aplay -D default:CARD=OdroidU3 769ecefae6dSMauro Carvalho Chehab 770ecefae6dSMauro Carvalho Chehab18. UVC function 771ecefae6dSMauro Carvalho Chehab================ 772ecefae6dSMauro Carvalho Chehab 773ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uvc.ko module. 774ecefae6dSMauro Carvalho Chehab 775ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 776ecefae6dSMauro Carvalho Chehab------------------------------------ 777ecefae6dSMauro Carvalho Chehab 778ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uvc". 779ecefae6dSMauro Carvalho ChehabThe uvc function provides these attributes in its function directory: 780ecefae6dSMauro Carvalho Chehab 781ecefae6dSMauro Carvalho Chehab =================== ================================================ 782ecefae6dSMauro Carvalho Chehab streaming_interval interval for polling endpoint for data transfers 783ecefae6dSMauro Carvalho Chehab streaming_maxburst bMaxBurst for super speed companion descriptor 784ecefae6dSMauro Carvalho Chehab streaming_maxpacket maximum packet size this endpoint is capable of 785ecefae6dSMauro Carvalho Chehab sending or receiving when this configuration is 786ecefae6dSMauro Carvalho Chehab selected 787ecefae6dSMauro Carvalho Chehab =================== ================================================ 788ecefae6dSMauro Carvalho Chehab 789ecefae6dSMauro Carvalho ChehabThere are also "control" and "streaming" subdirectories, each of which contain 790ecefae6dSMauro Carvalho Chehaba number of their subdirectories. There are some sane defaults provided, but 791ecefae6dSMauro Carvalho Chehabthe user must provide the following: 792ecefae6dSMauro Carvalho Chehab 793ecefae6dSMauro Carvalho Chehab ================== ==================================================== 794ecefae6dSMauro Carvalho Chehab control header create in control/header, link from control/class/fs 795ecefae6dSMauro Carvalho Chehab and/or control/class/ss 796ecefae6dSMauro Carvalho Chehab streaming header create in streaming/header, link from 797ecefae6dSMauro Carvalho Chehab streaming/class/fs and/or streaming/class/hs and/or 798ecefae6dSMauro Carvalho Chehab streaming/class/ss 799ecefae6dSMauro Carvalho Chehab format description create in streaming/mjpeg and/or 800ecefae6dSMauro Carvalho Chehab streaming/uncompressed 801ecefae6dSMauro Carvalho Chehab frame description create in streaming/mjpeg/<format> and/or in 802ecefae6dSMauro Carvalho Chehab streaming/uncompressed/<format> 803ecefae6dSMauro Carvalho Chehab ================== ==================================================== 804ecefae6dSMauro Carvalho Chehab 805ecefae6dSMauro Carvalho ChehabEach frame description contains frame interval specification, and each 806ecefae6dSMauro Carvalho Chehabsuch specification consists of a number of lines with an inverval value 807ecefae6dSMauro Carvalho Chehabin each line. The rules stated above are best illustrated with an example:: 808ecefae6dSMauro Carvalho Chehab 809ecefae6dSMauro Carvalho Chehab # mkdir functions/uvc.usb0/control/header/h 810ecefae6dSMauro Carvalho Chehab # cd functions/uvc.usb0/control/ 811ecefae6dSMauro Carvalho Chehab # ln -s header/h class/fs 812ecefae6dSMauro Carvalho Chehab # ln -s header/h class/ss 813ecefae6dSMauro Carvalho Chehab # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p 814ecefae6dSMauro Carvalho Chehab # cat <<EOF > functions/uvc.usb0/streaming/uncompressed/u/360p/dwFrameInterval 815ecefae6dSMauro Carvalho Chehab 666666 816ecefae6dSMauro Carvalho Chehab 1000000 817ecefae6dSMauro Carvalho Chehab 5000000 818ecefae6dSMauro Carvalho Chehab EOF 819ecefae6dSMauro Carvalho Chehab # cd $GADGET_CONFIGFS_ROOT 820ecefae6dSMauro Carvalho Chehab # mkdir functions/uvc.usb0/streaming/header/h 821ecefae6dSMauro Carvalho Chehab # cd functions/uvc.usb0/streaming/header/h 822ecefae6dSMauro Carvalho Chehab # ln -s ../../uncompressed/u 823ecefae6dSMauro Carvalho Chehab # cd ../../class/fs 824ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 825ecefae6dSMauro Carvalho Chehab # cd ../../class/hs 826ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 827ecefae6dSMauro Carvalho Chehab # cd ../../class/ss 828ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 829ecefae6dSMauro Carvalho Chehab 830ecefae6dSMauro Carvalho Chehab 831ecefae6dSMauro Carvalho ChehabTesting the UVC function 832ecefae6dSMauro Carvalho Chehab------------------------ 833ecefae6dSMauro Carvalho Chehab 834ecefae6dSMauro Carvalho Chehabdevice: run the gadget, modprobe vivid:: 835ecefae6dSMauro Carvalho Chehab 836ecefae6dSMauro Carvalho Chehab # uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #> 837ecefae6dSMauro Carvalho Chehab 838ecefae6dSMauro Carvalho Chehabwhere uvc-gadget is this program: 839ecefae6dSMauro Carvalho Chehab http://git.ideasonboard.org/uvc-gadget.git 840ecefae6dSMauro Carvalho Chehab 841ecefae6dSMauro Carvalho Chehabwith these patches: 842ecefae6dSMauro Carvalho Chehab 843ecefae6dSMauro Carvalho Chehab http://www.spinics.net/lists/linux-usb/msg99220.html 844ecefae6dSMauro Carvalho Chehab 845ecefae6dSMauro Carvalho Chehabhost:: 846ecefae6dSMauro Carvalho Chehab 847ecefae6dSMauro Carvalho Chehab luvcview -f yuv 848ecefae6dSMauro Carvalho Chehab 849ecefae6dSMauro Carvalho Chehab19. PRINTER function 850ecefae6dSMauro Carvalho Chehab==================== 851ecefae6dSMauro Carvalho Chehab 852ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_printer.ko module. 853ecefae6dSMauro Carvalho Chehab 854ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 855ecefae6dSMauro Carvalho Chehab------------------------------------ 856ecefae6dSMauro Carvalho Chehab 857ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "printer". 858ecefae6dSMauro Carvalho ChehabThe printer function provides these attributes in its function directory: 859ecefae6dSMauro Carvalho Chehab 860ecefae6dSMauro Carvalho Chehab ========== =========================================== 861ecefae6dSMauro Carvalho Chehab pnp_string Data to be passed to the host in pnp string 862ecefae6dSMauro Carvalho Chehab q_len Number of requests per endpoint 863ecefae6dSMauro Carvalho Chehab ========== =========================================== 864ecefae6dSMauro Carvalho Chehab 865ecefae6dSMauro Carvalho ChehabTesting the PRINTER function 866ecefae6dSMauro Carvalho Chehab---------------------------- 867ecefae6dSMauro Carvalho Chehab 868ecefae6dSMauro Carvalho ChehabThe most basic testing: 869ecefae6dSMauro Carvalho Chehab 870ecefae6dSMauro Carvalho Chehabdevice: run the gadget:: 871ecefae6dSMauro Carvalho Chehab 872ecefae6dSMauro Carvalho Chehab # ls -l /devices/virtual/usb_printer_gadget/ 873ecefae6dSMauro Carvalho Chehab 874ecefae6dSMauro Carvalho Chehabshould show g_printer<number>. 875ecefae6dSMauro Carvalho Chehab 876ecefae6dSMauro Carvalho ChehabIf udev is active, then /dev/g_printer<number> should appear automatically. 877ecefae6dSMauro Carvalho Chehab 878ecefae6dSMauro Carvalho Chehabhost: 879ecefae6dSMauro Carvalho Chehab 880ecefae6dSMauro Carvalho ChehabIf udev is active, then e.g. /dev/usb/lp0 should appear. 881ecefae6dSMauro Carvalho Chehab 882ecefae6dSMauro Carvalho Chehabhost->device transmission: 883ecefae6dSMauro Carvalho Chehab 884ecefae6dSMauro Carvalho Chehabdevice:: 885ecefae6dSMauro Carvalho Chehab 886ecefae6dSMauro Carvalho Chehab # cat /dev/g_printer<number> 887ecefae6dSMauro Carvalho Chehab 888ecefae6dSMauro Carvalho Chehabhost:: 889ecefae6dSMauro Carvalho Chehab 890ecefae6dSMauro Carvalho Chehab # cat > /dev/usb/lp0 891ecefae6dSMauro Carvalho Chehab 892ecefae6dSMauro Carvalho Chehabdevice->host transmission:: 893ecefae6dSMauro Carvalho Chehab 894ecefae6dSMauro Carvalho Chehab # cat > /dev/g_printer<number> 895ecefae6dSMauro Carvalho Chehab 896ecefae6dSMauro Carvalho Chehabhost:: 897ecefae6dSMauro Carvalho Chehab 898ecefae6dSMauro Carvalho Chehab # cat /dev/usb/lp0 899ecefae6dSMauro Carvalho Chehab 900ecefae6dSMauro Carvalho ChehabMore advanced testing can be done with the prn_example 901ecefae6dSMauro Carvalho Chehabdescribed in Documentation/usb/gadget_printer.rst. 902ecefae6dSMauro Carvalho Chehab 903ecefae6dSMauro Carvalho Chehab 904ecefae6dSMauro Carvalho Chehab20. UAC1 function (virtual ALSA card, using u_audio API) 905ecefae6dSMauro Carvalho Chehab======================================================== 906ecefae6dSMauro Carvalho Chehab 907ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac1.ko module. 908ecefae6dSMauro Carvalho ChehabIt will create a virtual ALSA card and the audio streams are simply 909ecefae6dSMauro Carvalho Chehabsinked to and sourced from it. 910ecefae6dSMauro Carvalho Chehab 911ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 912ecefae6dSMauro Carvalho Chehab------------------------------------ 913ecefae6dSMauro Carvalho Chehab 914ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uac1". 915ecefae6dSMauro Carvalho ChehabThe uac1 function provides these attributes in its function directory: 916ecefae6dSMauro Carvalho Chehab 917*9c0edd56SHu Haowen ================ ==================================================== 918ecefae6dSMauro Carvalho Chehab c_chmask capture channel mask 919ecefae6dSMauro Carvalho Chehab c_srate capture sampling rate 920ecefae6dSMauro Carvalho Chehab c_ssize capture sample size (bytes) 9210356e628SRuslan Bilovol c_mute_present capture mute control enable 9220356e628SRuslan Bilovol c_volume_present capture volume control enable 9230356e628SRuslan Bilovol c_volume_min capture volume control min value (in 1/256 dB) 9240356e628SRuslan Bilovol c_volume_max capture volume control max value (in 1/256 dB) 9250356e628SRuslan Bilovol c_volume_res capture volume control resolution (in 1/256 dB) 926ecefae6dSMauro Carvalho Chehab p_chmask playback channel mask 927ecefae6dSMauro Carvalho Chehab p_srate playback sampling rate 928ecefae6dSMauro Carvalho Chehab p_ssize playback sample size (bytes) 9290356e628SRuslan Bilovol p_mute_present playback mute control enable 9300356e628SRuslan Bilovol p_volume_present playback volume control enable 9310356e628SRuslan Bilovol p_volume_min playback volume control min value (in 1/256 dB) 9320356e628SRuslan Bilovol p_volume_max playback volume control max value (in 1/256 dB) 9330356e628SRuslan Bilovol p_volume_res playback volume control resolution (in 1/256 dB) 934ecefae6dSMauro Carvalho Chehab req_number the number of pre-allocated request for both capture 935ecefae6dSMauro Carvalho Chehab and playback 936*9c0edd56SHu Haowen ================ ==================================================== 937ecefae6dSMauro Carvalho Chehab 938ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 939ecefae6dSMauro Carvalho Chehab 940ecefae6dSMauro Carvalho ChehabTesting the UAC1 function 941ecefae6dSMauro Carvalho Chehab------------------------- 942ecefae6dSMauro Carvalho Chehab 943ecefae6dSMauro Carvalho Chehabdevice: run the gadget 944ecefae6dSMauro Carvalho Chehabhost: aplay -l # should list our USB Audio Gadget 945ecefae6dSMauro Carvalho Chehab 946ecefae6dSMauro Carvalho ChehabThis function does not require real hardware support, it just 947ecefae6dSMauro Carvalho Chehabsends a stream of audio data to/from the host. In order to 948ecefae6dSMauro Carvalho Chehabactually hear something at the device side, a command similar 949ecefae6dSMauro Carvalho Chehabto this must be used at the device side:: 950ecefae6dSMauro Carvalho Chehab 951ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 & 952ecefae6dSMauro Carvalho Chehab 953ecefae6dSMauro Carvalho Chehabe.g.:: 954ecefae6dSMauro Carvalho Chehab 955ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \ 956ecefae6dSMauro Carvalho Chehab aplay -D default:CARD=OdroidU3 957