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) 336*421c8d9aSMaxim Devaev forced_eject This write-only file is useful only when 337*421c8d9aSMaxim Devaev the function is active. It causes the backing 338*421c8d9aSMaxim Devaev file to be forcibly detached from the LUN, 339*421c8d9aSMaxim Devaev regardless of whether the host has allowed it. 340*421c8d9aSMaxim Devaev Any non-zero number of bytes written will 341*421c8d9aSMaxim Devaev result in ejection. 342ecefae6dSMauro Carvalho Chehab =============== ============================================== 343ecefae6dSMauro Carvalho Chehab 344ecefae6dSMauro Carvalho ChehabTesting the MASS STORAGE function 345ecefae6dSMauro Carvalho Chehab--------------------------------- 346ecefae6dSMauro Carvalho Chehab 347ecefae6dSMauro Carvalho Chehabdevice: connect the gadget, enable it 348ecefae6dSMauro Carvalho Chehabhost: dmesg, see the USB drives appear (if system configured to automatically 349ecefae6dSMauro Carvalho Chehabmount) 350ecefae6dSMauro Carvalho Chehab 351ecefae6dSMauro Carvalho Chehab9. MIDI function 352ecefae6dSMauro Carvalho Chehab================ 353ecefae6dSMauro Carvalho Chehab 354ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_midi.ko module. 355ecefae6dSMauro Carvalho Chehab 356ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 357ecefae6dSMauro Carvalho Chehab------------------------------------ 358ecefae6dSMauro Carvalho Chehab 359ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "midi". 360ecefae6dSMauro Carvalho ChehabThe MIDI function provides these attributes in its function directory: 361ecefae6dSMauro Carvalho Chehab 362ecefae6dSMauro Carvalho Chehab =============== ==================================== 363ecefae6dSMauro Carvalho Chehab buflen MIDI buffer length 364ecefae6dSMauro Carvalho Chehab id ID string for the USB MIDI adapter 365ecefae6dSMauro Carvalho Chehab in_ports number of MIDI input ports 366ecefae6dSMauro Carvalho Chehab index index value for the USB MIDI adapter 367ecefae6dSMauro Carvalho Chehab out_ports number of MIDI output ports 368ecefae6dSMauro Carvalho Chehab qlen USB read request queue length 369ecefae6dSMauro Carvalho Chehab =============== ==================================== 370ecefae6dSMauro Carvalho Chehab 371ecefae6dSMauro Carvalho ChehabTesting the MIDI function 372ecefae6dSMauro Carvalho Chehab------------------------- 373ecefae6dSMauro Carvalho Chehab 374ecefae6dSMauro Carvalho ChehabThere are two cases: playing a mid from the gadget to 375ecefae6dSMauro Carvalho Chehabthe host and playing a mid from the host to the gadget. 376ecefae6dSMauro Carvalho Chehab 377ecefae6dSMauro Carvalho Chehab1) Playing a mid from the gadget to the host: 378ecefae6dSMauro Carvalho Chehab 379ecefae6dSMauro Carvalho Chehabhost:: 380ecefae6dSMauro Carvalho Chehab 381ecefae6dSMauro Carvalho Chehab $ arecordmidi -l 382ecefae6dSMauro Carvalho Chehab Port Client name Port name 383ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 384ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 385ecefae6dSMauro Carvalho Chehab $ arecordmidi -p 24:0 from_gadget.mid 386ecefae6dSMauro Carvalho Chehab 387ecefae6dSMauro Carvalho Chehabgadget:: 388ecefae6dSMauro Carvalho Chehab 389ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 390ecefae6dSMauro Carvalho Chehab Port Client name Port name 391ecefae6dSMauro Carvalho Chehab 20:0 f_midi f_midi 392ecefae6dSMauro Carvalho Chehab 393ecefae6dSMauro Carvalho Chehab $ aplaymidi -p 20:0 to_host.mid 394ecefae6dSMauro Carvalho Chehab 395ecefae6dSMauro Carvalho Chehab2) Playing a mid from the host to the gadget 396ecefae6dSMauro Carvalho Chehab 397ecefae6dSMauro Carvalho Chehabgadget:: 398ecefae6dSMauro Carvalho Chehab 399ecefae6dSMauro Carvalho Chehab $ arecordmidi -l 400ecefae6dSMauro Carvalho Chehab Port Client name Port name 401ecefae6dSMauro Carvalho Chehab 20:0 f_midi f_midi 402ecefae6dSMauro Carvalho Chehab 403ecefae6dSMauro Carvalho Chehab $ arecordmidi -p 20:0 from_host.mid 404ecefae6dSMauro Carvalho Chehab 405ecefae6dSMauro Carvalho Chehabhost:: 406ecefae6dSMauro Carvalho Chehab 407ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 408ecefae6dSMauro Carvalho Chehab Port Client name Port name 409ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 410ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 411ecefae6dSMauro Carvalho Chehab 412ecefae6dSMauro Carvalho Chehab $ aplaymidi -p24:0 to_gadget.mid 413ecefae6dSMauro Carvalho Chehab 414ecefae6dSMauro Carvalho ChehabThe from_gadget.mid should sound identical to the to_host.mid. 415ecefae6dSMauro Carvalho Chehab 416ecefae6dSMauro Carvalho ChehabThe from_host.id should sound identical to the to_gadget.mid. 417ecefae6dSMauro Carvalho Chehab 418ecefae6dSMauro Carvalho ChehabMIDI files can be played to speakers/headphones with e.g. timidity installed:: 419ecefae6dSMauro Carvalho Chehab 420ecefae6dSMauro Carvalho Chehab $ aplaymidi -l 421ecefae6dSMauro Carvalho Chehab Port Client name Port name 422ecefae6dSMauro Carvalho Chehab 14:0 Midi Through Midi Through Port-0 423ecefae6dSMauro Carvalho Chehab 24:0 MIDI Gadget MIDI Gadget MIDI 1 424ecefae6dSMauro Carvalho Chehab 128:0 TiMidity TiMidity port 0 425ecefae6dSMauro Carvalho Chehab 128:1 TiMidity TiMidity port 1 426ecefae6dSMauro Carvalho Chehab 128:2 TiMidity TiMidity port 2 427ecefae6dSMauro Carvalho Chehab 128:3 TiMidity TiMidity port 3 428ecefae6dSMauro Carvalho Chehab 429ecefae6dSMauro Carvalho Chehab $ aplaymidi -p 128:0 file.mid 430ecefae6dSMauro Carvalho Chehab 431ecefae6dSMauro Carvalho ChehabMIDI ports can be logically connected using the aconnect utility, e.g.:: 432ecefae6dSMauro Carvalho Chehab 433ecefae6dSMauro Carvalho Chehab $ aconnect 24:0 128:0 # try it on the host 434ecefae6dSMauro Carvalho Chehab 435ecefae6dSMauro Carvalho ChehabAfter the gadget's MIDI port is connected to timidity's MIDI port, 436ecefae6dSMauro Carvalho Chehabwhatever is played at the gadget side with aplaymidi -l is audible 437ecefae6dSMauro Carvalho Chehabin host's speakers/headphones. 438ecefae6dSMauro Carvalho Chehab 439ecefae6dSMauro Carvalho Chehab10. NCM function 440ecefae6dSMauro Carvalho Chehab================ 441ecefae6dSMauro Carvalho Chehab 442ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ncm.ko module. 443ecefae6dSMauro Carvalho Chehab 444ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 445ecefae6dSMauro Carvalho Chehab------------------------------------ 446ecefae6dSMauro Carvalho Chehab 447ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "ncm". 448ecefae6dSMauro Carvalho ChehabThe NCM function provides these attributes in its function directory: 449ecefae6dSMauro Carvalho Chehab 450ecefae6dSMauro Carvalho Chehab =============== ================================================== 451ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 452ecefae6dSMauro Carvalho Chehab function instance 453ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 454ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 455ecefae6dSMauro Carvalho Chehab Ethernet over USB link 456ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 457ecefae6dSMauro Carvalho Chehab Ethernet over USB link 458ecefae6dSMauro Carvalho Chehab =============== ================================================== 459ecefae6dSMauro Carvalho Chehab 460ecefae6dSMauro Carvalho Chehaband after creating the functions/ncm.<instance name> they contain default 461ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 46263d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 46363d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 46463d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 465ecefae6dSMauro Carvalho Chehab 466ecefae6dSMauro Carvalho ChehabTesting the NCM function 467ecefae6dSMauro Carvalho Chehab------------------------ 468ecefae6dSMauro Carvalho Chehab 469ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 470ecefae6dSMauro Carvalho Chehab 471ecefae6dSMauro Carvalho ChehabOn the device:: 472ecefae6dSMauro Carvalho Chehab 473ecefae6dSMauro Carvalho Chehab ping <host's IP> 474ecefae6dSMauro Carvalho Chehab 475ecefae6dSMauro Carvalho ChehabOn the host:: 476ecefae6dSMauro Carvalho Chehab 477ecefae6dSMauro Carvalho Chehab ping <device's IP> 478ecefae6dSMauro Carvalho Chehab 479ecefae6dSMauro Carvalho Chehab11. OBEX function 480ecefae6dSMauro Carvalho Chehab================= 481ecefae6dSMauro Carvalho Chehab 482ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_obex.ko module. 483ecefae6dSMauro Carvalho Chehab 484ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 485ecefae6dSMauro Carvalho Chehab------------------------------------ 486ecefae6dSMauro Carvalho Chehab 487ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "obex". 488ecefae6dSMauro Carvalho ChehabThe OBEX function provides just one attribute in its function directory: 489ecefae6dSMauro Carvalho Chehab 490ecefae6dSMauro Carvalho Chehab port_num 491ecefae6dSMauro Carvalho Chehab 492ecefae6dSMauro Carvalho ChehabThe attribute is read-only. 493ecefae6dSMauro Carvalho Chehab 494ecefae6dSMauro Carvalho ChehabThere can be at most 4 ACM/generic serial/OBEX ports in the system. 495ecefae6dSMauro Carvalho Chehab 496ecefae6dSMauro Carvalho ChehabTesting the OBEX function 497ecefae6dSMauro Carvalho Chehab------------------------- 498ecefae6dSMauro Carvalho Chehab 499ecefae6dSMauro Carvalho ChehabOn device:: 500ecefae6dSMauro Carvalho Chehab 501ecefae6dSMauro Carvalho Chehab seriald -f /dev/ttyGS<Y> -s 1024 502ecefae6dSMauro Carvalho Chehab 503ecefae6dSMauro Carvalho ChehabOn host:: 504ecefae6dSMauro Carvalho Chehab 505ecefae6dSMauro Carvalho Chehab serialc -v <vendorID> -p <productID> -i<interface#> -a1 -s1024 \ 506ecefae6dSMauro Carvalho Chehab -t<out endpoint addr> -r<in endpoint addr> 507ecefae6dSMauro Carvalho Chehab 508ecefae6dSMauro Carvalho Chehabwhere seriald and serialc are Felipe's utilities found here: 509ecefae6dSMauro Carvalho Chehab 510ecefae6dSMauro Carvalho Chehab https://github.com/felipebalbi/usb-tools.git master 511ecefae6dSMauro Carvalho Chehab 512ecefae6dSMauro Carvalho Chehab12. PHONET function 513ecefae6dSMauro Carvalho Chehab=================== 514ecefae6dSMauro Carvalho Chehab 515ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_phonet.ko module. 516ecefae6dSMauro Carvalho Chehab 517ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 518ecefae6dSMauro Carvalho Chehab------------------------------------ 519ecefae6dSMauro Carvalho Chehab 520ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "phonet". 521ecefae6dSMauro Carvalho ChehabThe PHONET function provides just one attribute in its function directory: 522ecefae6dSMauro Carvalho Chehab 523ecefae6dSMauro Carvalho Chehab =============== ================================================== 524ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 525ecefae6dSMauro Carvalho Chehab function instance 526ecefae6dSMauro Carvalho Chehab =============== ================================================== 527ecefae6dSMauro Carvalho Chehab 528ecefae6dSMauro Carvalho ChehabTesting the PHONET function 529ecefae6dSMauro Carvalho Chehab--------------------------- 530ecefae6dSMauro Carvalho Chehab 531ecefae6dSMauro Carvalho ChehabIt is not possible to test the SOCK_STREAM protocol without a specific piece 532ecefae6dSMauro Carvalho Chehabof hardware, so only SOCK_DGRAM has been tested. For the latter to work, 533ecefae6dSMauro Carvalho Chehabin the past I had to apply the patch mentioned here: 534ecefae6dSMauro Carvalho Chehab 535ecefae6dSMauro Carvalho Chehabhttp://www.spinics.net/lists/linux-usb/msg85689.html 536ecefae6dSMauro Carvalho Chehab 537ecefae6dSMauro Carvalho ChehabThese tools are required: 538ecefae6dSMauro Carvalho Chehab 539ecefae6dSMauro Carvalho Chehabgit://git.gitorious.org/meego-cellular/phonet-utils.git 540ecefae6dSMauro Carvalho Chehab 541ecefae6dSMauro Carvalho ChehabOn the host:: 542ecefae6dSMauro Carvalho Chehab 543ecefae6dSMauro Carvalho Chehab $ ./phonet -a 0x10 -i usbpn0 544ecefae6dSMauro Carvalho Chehab $ ./pnroute add 0x6c usbpn0 545ecefae6dSMauro Carvalho Chehab $./pnroute add 0x10 usbpn0 546ecefae6dSMauro Carvalho Chehab $ ifconfig usbpn0 up 547ecefae6dSMauro Carvalho Chehab 548ecefae6dSMauro Carvalho ChehabOn the device:: 549ecefae6dSMauro Carvalho Chehab 550ecefae6dSMauro Carvalho Chehab $ ./phonet -a 0x6c -i upnlink0 551ecefae6dSMauro Carvalho Chehab $ ./pnroute add 0x10 upnlink0 552ecefae6dSMauro Carvalho Chehab $ ifconfig upnlink0 up 553ecefae6dSMauro Carvalho Chehab 554ecefae6dSMauro Carvalho ChehabThen a test program can be used:: 555ecefae6dSMauro Carvalho Chehab 556ecefae6dSMauro Carvalho Chehab http://www.spinics.net/lists/linux-usb/msg85690.html 557ecefae6dSMauro Carvalho Chehab 558ecefae6dSMauro Carvalho ChehabOn the device:: 559ecefae6dSMauro Carvalho Chehab 560ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x6c -r 561ecefae6dSMauro Carvalho Chehab 562ecefae6dSMauro Carvalho ChehabOn the host:: 563ecefae6dSMauro Carvalho Chehab 564ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x10 -s 0x6c 565ecefae6dSMauro Carvalho Chehab 566ecefae6dSMauro Carvalho ChehabAs a result some data should be sent from host to device. 567ecefae6dSMauro Carvalho ChehabThen the other way round: 568ecefae6dSMauro Carvalho Chehab 569ecefae6dSMauro Carvalho ChehabOn the host:: 570ecefae6dSMauro Carvalho Chehab 571ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x10 -r 572ecefae6dSMauro Carvalho Chehab 573ecefae6dSMauro Carvalho ChehabOn the device:: 574ecefae6dSMauro Carvalho Chehab 575ecefae6dSMauro Carvalho Chehab $ ./pnxmit -a 0x6c -s 0x10 576ecefae6dSMauro Carvalho Chehab 577ecefae6dSMauro Carvalho Chehab13. RNDIS function 578ecefae6dSMauro Carvalho Chehab================== 579ecefae6dSMauro Carvalho Chehab 580ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_rndis.ko module. 581ecefae6dSMauro Carvalho Chehab 582ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 583ecefae6dSMauro Carvalho Chehab------------------------------------ 584ecefae6dSMauro Carvalho Chehab 585ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "rndis". 586ecefae6dSMauro Carvalho ChehabThe RNDIS function provides these attributes in its function directory: 587ecefae6dSMauro Carvalho Chehab 588ecefae6dSMauro Carvalho Chehab =============== ================================================== 589ecefae6dSMauro Carvalho Chehab ifname network device interface name associated with this 590ecefae6dSMauro Carvalho Chehab function instance 591ecefae6dSMauro Carvalho Chehab qmult queue length multiplier for high and super speed 592ecefae6dSMauro Carvalho Chehab host_addr MAC address of host's end of this 593ecefae6dSMauro Carvalho Chehab Ethernet over USB link 594ecefae6dSMauro Carvalho Chehab dev_addr MAC address of device's end of this 595ecefae6dSMauro Carvalho Chehab Ethernet over USB link 596ecefae6dSMauro Carvalho Chehab =============== ================================================== 597ecefae6dSMauro Carvalho Chehab 598ecefae6dSMauro Carvalho Chehaband after creating the functions/rndis.<instance name> they contain default 599ecefae6dSMauro Carvalho Chehabvalues: qmult is 5, dev_addr and host_addr are randomly selected. 60063d15214SLorenzo ColittiThe ifname can be written to if the function is not bound. A write must be an 60163d15214SLorenzo Colittiinterface pattern such as "usb%d", which will cause the net core to choose the 60263d15214SLorenzo Colittinext free usbX interface. By default, it is set to "usb%d". 603ecefae6dSMauro Carvalho Chehab 604ecefae6dSMauro Carvalho ChehabTesting the RNDIS function 605ecefae6dSMauro Carvalho Chehab-------------------------- 606ecefae6dSMauro Carvalho Chehab 607ecefae6dSMauro Carvalho ChehabConfigure IP addresses of the device and the host. Then: 608ecefae6dSMauro Carvalho Chehab 609ecefae6dSMauro Carvalho ChehabOn the device:: 610ecefae6dSMauro Carvalho Chehab 611ecefae6dSMauro Carvalho Chehab ping <host's IP> 612ecefae6dSMauro Carvalho Chehab 613ecefae6dSMauro Carvalho ChehabOn the host:: 614ecefae6dSMauro Carvalho Chehab 615ecefae6dSMauro Carvalho Chehab ping <device's IP> 616ecefae6dSMauro Carvalho Chehab 617ecefae6dSMauro Carvalho Chehab14. SERIAL function 618ecefae6dSMauro Carvalho Chehab=================== 619ecefae6dSMauro Carvalho Chehab 620ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_gser.ko module. 621ecefae6dSMauro Carvalho Chehab 622ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 623ecefae6dSMauro Carvalho Chehab------------------------------------ 624ecefae6dSMauro Carvalho Chehab 625ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "gser". 626ecefae6dSMauro Carvalho ChehabThe SERIAL function provides just one attribute in its function directory: 627ecefae6dSMauro Carvalho Chehab 628ecefae6dSMauro Carvalho Chehab port_num 629ecefae6dSMauro Carvalho Chehab 630ecefae6dSMauro Carvalho ChehabThe attribute is read-only. 631ecefae6dSMauro Carvalho Chehab 632ecefae6dSMauro Carvalho ChehabThere can be at most 4 ACM/generic serial/OBEX ports in the system. 633ecefae6dSMauro Carvalho Chehab 634ecefae6dSMauro Carvalho ChehabTesting the SERIAL function 635ecefae6dSMauro Carvalho Chehab--------------------------- 636ecefae6dSMauro Carvalho Chehab 637ecefae6dSMauro Carvalho ChehabOn host:: 638ecefae6dSMauro Carvalho Chehab 639ecefae6dSMauro Carvalho Chehab insmod usbserial 640ecefae6dSMauro Carvalho Chehab echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id 641ecefae6dSMauro Carvalho Chehab 642ecefae6dSMauro Carvalho ChehabOn host:: 643ecefae6dSMauro Carvalho Chehab 644ecefae6dSMauro Carvalho Chehab cat > /dev/ttyUSB<X> 645ecefae6dSMauro Carvalho Chehab 646ecefae6dSMauro Carvalho ChehabOn target:: 647ecefae6dSMauro Carvalho Chehab 648ecefae6dSMauro Carvalho Chehab cat /dev/ttyGS<Y> 649ecefae6dSMauro Carvalho Chehab 650ecefae6dSMauro Carvalho Chehabthen the other way round 651ecefae6dSMauro Carvalho Chehab 652ecefae6dSMauro Carvalho ChehabOn target:: 653ecefae6dSMauro Carvalho Chehab 654ecefae6dSMauro Carvalho Chehab cat > /dev/ttyGS<Y> 655ecefae6dSMauro Carvalho Chehab 656ecefae6dSMauro Carvalho ChehabOn host:: 657ecefae6dSMauro Carvalho Chehab 658ecefae6dSMauro Carvalho Chehab cat /dev/ttyUSB<X> 659ecefae6dSMauro Carvalho Chehab 660ecefae6dSMauro Carvalho Chehab15. SOURCESINK function 661ecefae6dSMauro Carvalho Chehab======================= 662ecefae6dSMauro Carvalho Chehab 663ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_ss_lb.ko module. 664ecefae6dSMauro Carvalho Chehab 665ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 666ecefae6dSMauro Carvalho Chehab------------------------------------ 667ecefae6dSMauro Carvalho Chehab 668ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "SourceSink". 669ecefae6dSMauro Carvalho ChehabThe SOURCESINK function provides these attributes in its function directory: 670ecefae6dSMauro Carvalho Chehab 671ecefae6dSMauro Carvalho Chehab =============== ================================== 672ecefae6dSMauro Carvalho Chehab pattern 0 (all zeros), 1 (mod63), 2 (none) 673ecefae6dSMauro Carvalho Chehab isoc_interval 1..16 674ecefae6dSMauro Carvalho Chehab isoc_maxpacket 0 - 1023 (fs), 0 - 1024 (hs/ss) 675ecefae6dSMauro Carvalho Chehab isoc_mult 0..2 (hs/ss only) 676ecefae6dSMauro Carvalho Chehab isoc_maxburst 0..15 (ss only) 677ecefae6dSMauro Carvalho Chehab bulk_buflen buffer length 678ecefae6dSMauro Carvalho Chehab bulk_qlen depth of queue for bulk 679ecefae6dSMauro Carvalho Chehab iso_qlen depth of queue for iso 680ecefae6dSMauro Carvalho Chehab =============== ================================== 681ecefae6dSMauro Carvalho Chehab 682ecefae6dSMauro Carvalho ChehabTesting the SOURCESINK function 683ecefae6dSMauro Carvalho Chehab------------------------------- 684ecefae6dSMauro Carvalho Chehab 685ecefae6dSMauro Carvalho Chehabdevice: run the gadget 686ecefae6dSMauro Carvalho Chehab 687ecefae6dSMauro Carvalho Chehabhost: test-usb (tools/usb/testusb.c) 688ecefae6dSMauro Carvalho Chehab 689ecefae6dSMauro Carvalho Chehab 690ecefae6dSMauro Carvalho Chehab16. UAC1 function (legacy implementation) 691ecefae6dSMauro Carvalho Chehab========================================= 692ecefae6dSMauro Carvalho Chehab 693ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac1_legacy.ko module. 694ecefae6dSMauro Carvalho Chehab 695ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 696ecefae6dSMauro Carvalho Chehab------------------------------------ 697ecefae6dSMauro Carvalho Chehab 698ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory 699ecefae6dSMauro Carvalho Chehabis "uac1_legacy". 700ecefae6dSMauro Carvalho ChehabThe uac1 function provides these attributes in its function directory: 701ecefae6dSMauro Carvalho Chehab 702ecefae6dSMauro Carvalho Chehab =============== ==================================== 703ecefae6dSMauro Carvalho Chehab audio_buf_size audio buffer size 704ecefae6dSMauro Carvalho Chehab fn_cap capture pcm device file name 705ecefae6dSMauro Carvalho Chehab fn_cntl control device file name 706ecefae6dSMauro Carvalho Chehab fn_play playback pcm device file name 707ecefae6dSMauro Carvalho Chehab req_buf_size ISO OUT endpoint request buffer size 708ecefae6dSMauro Carvalho Chehab req_count ISO OUT endpoint request count 709ecefae6dSMauro Carvalho Chehab =============== ==================================== 710ecefae6dSMauro Carvalho Chehab 711ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 712ecefae6dSMauro Carvalho Chehab 713ecefae6dSMauro Carvalho ChehabTesting the UAC1 function 714ecefae6dSMauro Carvalho Chehab------------------------- 715ecefae6dSMauro Carvalho Chehab 716ecefae6dSMauro Carvalho Chehabdevice: run the gadget 717ecefae6dSMauro Carvalho Chehab 718ecefae6dSMauro Carvalho Chehabhost:: 719ecefae6dSMauro Carvalho Chehab 720ecefae6dSMauro Carvalho Chehab aplay -l # should list our USB Audio Gadget 721ecefae6dSMauro Carvalho Chehab 722ecefae6dSMauro Carvalho Chehab17. UAC2 function 723ecefae6dSMauro Carvalho Chehab================= 724ecefae6dSMauro Carvalho Chehab 725ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac2.ko module. 726ecefae6dSMauro Carvalho Chehab 727ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 728ecefae6dSMauro Carvalho Chehab------------------------------------ 729ecefae6dSMauro Carvalho Chehab 730ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uac2". 731ecefae6dSMauro Carvalho ChehabThe uac2 function provides these attributes in its function directory: 732ecefae6dSMauro Carvalho Chehab 7339c0edd56SHu Haowen ================ ==================================================== 734ecefae6dSMauro Carvalho Chehab c_chmask capture channel mask 735a7339e4fSJulian Scheel c_srate list of capture sampling rates (comma-separated) 736ecefae6dSMauro Carvalho Chehab c_ssize capture sample size (bytes) 73740c73b30SRuslan Bilovol c_sync capture synchronization type (async/adaptive) 738eaf6cbe0SRuslan Bilovol c_mute_present capture mute control enable 739eaf6cbe0SRuslan Bilovol c_volume_present capture volume control enable 740eaf6cbe0SRuslan Bilovol c_volume_min capture volume control min value (in 1/256 dB) 741eaf6cbe0SRuslan Bilovol c_volume_max capture volume control max value (in 1/256 dB) 742eaf6cbe0SRuslan Bilovol c_volume_res capture volume control resolution (in 1/256 dB) 743355a05dcSPavel Hofman c_hs_bint capture bInterval for HS/SS (1-4: fixed, 0: auto) 744e89bb428SRuslan Bilovol fb_max maximum extra bandwidth in async mode 745ecefae6dSMauro Carvalho Chehab p_chmask playback channel mask 746a7339e4fSJulian Scheel p_srate list of playback sampling rates (comma-separated) 747ecefae6dSMauro Carvalho Chehab p_ssize playback sample size (bytes) 748eaf6cbe0SRuslan Bilovol p_mute_present playback mute control enable 749eaf6cbe0SRuslan Bilovol p_volume_present playback volume control enable 750eaf6cbe0SRuslan Bilovol p_volume_min playback volume control min value (in 1/256 dB) 751eaf6cbe0SRuslan Bilovol p_volume_max playback volume control max value (in 1/256 dB) 752eaf6cbe0SRuslan Bilovol p_volume_res playback volume control resolution (in 1/256 dB) 753355a05dcSPavel Hofman p_hs_bint playback bInterval for HS/SS (1-4: fixed, 0: auto) 754ecefae6dSMauro Carvalho Chehab req_number the number of pre-allocated request for both capture 755ecefae6dSMauro Carvalho Chehab and playback 756dfb05b5dSYunhao Tian function_name name of the interface 7579c0edd56SHu Haowen ================ ==================================================== 758ecefae6dSMauro Carvalho Chehab 759ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 760ecefae6dSMauro Carvalho Chehab 761ecefae6dSMauro Carvalho ChehabTesting the UAC2 function 762ecefae6dSMauro Carvalho Chehab------------------------- 763ecefae6dSMauro Carvalho Chehab 764ecefae6dSMauro Carvalho Chehabdevice: run the gadget 765ecefae6dSMauro Carvalho Chehabhost: aplay -l # should list our USB Audio Gadget 766ecefae6dSMauro Carvalho Chehab 767ecefae6dSMauro Carvalho ChehabThis function does not require real hardware support, it just 768ecefae6dSMauro Carvalho Chehabsends a stream of audio data to/from the host. In order to 769ecefae6dSMauro Carvalho Chehabactually hear something at the device side, a command similar 770ecefae6dSMauro Carvalho Chehabto this must be used at the device side:: 771ecefae6dSMauro Carvalho Chehab 772ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 & 773ecefae6dSMauro Carvalho Chehab 774ecefae6dSMauro Carvalho Chehabe.g.:: 775ecefae6dSMauro Carvalho Chehab 776ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \ 777ecefae6dSMauro Carvalho Chehab aplay -D default:CARD=OdroidU3 778ecefae6dSMauro Carvalho Chehab 779ecefae6dSMauro Carvalho Chehab18. UVC function 780ecefae6dSMauro Carvalho Chehab================ 781ecefae6dSMauro Carvalho Chehab 782ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uvc.ko module. 783ecefae6dSMauro Carvalho Chehab 784ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 785ecefae6dSMauro Carvalho Chehab------------------------------------ 786ecefae6dSMauro Carvalho Chehab 787ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uvc". 788ecefae6dSMauro Carvalho ChehabThe uvc function provides these attributes in its function directory: 789ecefae6dSMauro Carvalho Chehab 790ecefae6dSMauro Carvalho Chehab =================== ================================================ 791ecefae6dSMauro Carvalho Chehab streaming_interval interval for polling endpoint for data transfers 792ecefae6dSMauro Carvalho Chehab streaming_maxburst bMaxBurst for super speed companion descriptor 793ecefae6dSMauro Carvalho Chehab streaming_maxpacket maximum packet size this endpoint is capable of 794ecefae6dSMauro Carvalho Chehab sending or receiving when this configuration is 795ecefae6dSMauro Carvalho Chehab selected 796324e4f85SDan Vacura function_name name of the interface 797ecefae6dSMauro Carvalho Chehab =================== ================================================ 798ecefae6dSMauro Carvalho Chehab 799ecefae6dSMauro Carvalho ChehabThere are also "control" and "streaming" subdirectories, each of which contain 800ecefae6dSMauro Carvalho Chehaba number of their subdirectories. There are some sane defaults provided, but 801ecefae6dSMauro Carvalho Chehabthe user must provide the following: 802ecefae6dSMauro Carvalho Chehab 803ecefae6dSMauro Carvalho Chehab ================== ==================================================== 804ecefae6dSMauro Carvalho Chehab control header create in control/header, link from control/class/fs 805ecefae6dSMauro Carvalho Chehab and/or control/class/ss 806ecefae6dSMauro Carvalho Chehab streaming header create in streaming/header, link from 807ecefae6dSMauro Carvalho Chehab streaming/class/fs and/or streaming/class/hs and/or 808ecefae6dSMauro Carvalho Chehab streaming/class/ss 809ecefae6dSMauro Carvalho Chehab format description create in streaming/mjpeg and/or 810ecefae6dSMauro Carvalho Chehab streaming/uncompressed 811ecefae6dSMauro Carvalho Chehab frame description create in streaming/mjpeg/<format> and/or in 812ecefae6dSMauro Carvalho Chehab streaming/uncompressed/<format> 813ecefae6dSMauro Carvalho Chehab ================== ==================================================== 814ecefae6dSMauro Carvalho Chehab 815ecefae6dSMauro Carvalho ChehabEach frame description contains frame interval specification, and each 816ecefae6dSMauro Carvalho Chehabsuch specification consists of a number of lines with an inverval value 817ecefae6dSMauro Carvalho Chehabin each line. The rules stated above are best illustrated with an example:: 818ecefae6dSMauro Carvalho Chehab 819ecefae6dSMauro Carvalho Chehab # mkdir functions/uvc.usb0/control/header/h 820ecefae6dSMauro Carvalho Chehab # cd functions/uvc.usb0/control/ 821ecefae6dSMauro Carvalho Chehab # ln -s header/h class/fs 822ecefae6dSMauro Carvalho Chehab # ln -s header/h class/ss 823ecefae6dSMauro Carvalho Chehab # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p 824ecefae6dSMauro Carvalho Chehab # cat <<EOF > functions/uvc.usb0/streaming/uncompressed/u/360p/dwFrameInterval 825ecefae6dSMauro Carvalho Chehab 666666 826ecefae6dSMauro Carvalho Chehab 1000000 827ecefae6dSMauro Carvalho Chehab 5000000 828ecefae6dSMauro Carvalho Chehab EOF 829ecefae6dSMauro Carvalho Chehab # cd $GADGET_CONFIGFS_ROOT 830ecefae6dSMauro Carvalho Chehab # mkdir functions/uvc.usb0/streaming/header/h 831ecefae6dSMauro Carvalho Chehab # cd functions/uvc.usb0/streaming/header/h 832ecefae6dSMauro Carvalho Chehab # ln -s ../../uncompressed/u 833ecefae6dSMauro Carvalho Chehab # cd ../../class/fs 834ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 835ecefae6dSMauro Carvalho Chehab # cd ../../class/hs 836ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 837ecefae6dSMauro Carvalho Chehab # cd ../../class/ss 838ecefae6dSMauro Carvalho Chehab # ln -s ../../header/h 839ecefae6dSMauro Carvalho Chehab 840ecefae6dSMauro Carvalho Chehab 841ecefae6dSMauro Carvalho ChehabTesting the UVC function 842ecefae6dSMauro Carvalho Chehab------------------------ 843ecefae6dSMauro Carvalho Chehab 844ecefae6dSMauro Carvalho Chehabdevice: run the gadget, modprobe vivid:: 845ecefae6dSMauro Carvalho Chehab 846ecefae6dSMauro Carvalho Chehab # uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #> 847ecefae6dSMauro Carvalho Chehab 848ecefae6dSMauro Carvalho Chehabwhere uvc-gadget is this program: 849ecefae6dSMauro Carvalho Chehab http://git.ideasonboard.org/uvc-gadget.git 850ecefae6dSMauro Carvalho Chehab 851ecefae6dSMauro Carvalho Chehabwith these patches: 852ecefae6dSMauro Carvalho Chehab 853ecefae6dSMauro Carvalho Chehab http://www.spinics.net/lists/linux-usb/msg99220.html 854ecefae6dSMauro Carvalho Chehab 855ecefae6dSMauro Carvalho Chehabhost:: 856ecefae6dSMauro Carvalho Chehab 857ecefae6dSMauro Carvalho Chehab luvcview -f yuv 858ecefae6dSMauro Carvalho Chehab 859ecefae6dSMauro Carvalho Chehab19. PRINTER function 860ecefae6dSMauro Carvalho Chehab==================== 861ecefae6dSMauro Carvalho Chehab 862ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_printer.ko module. 863ecefae6dSMauro Carvalho Chehab 864ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 865ecefae6dSMauro Carvalho Chehab------------------------------------ 866ecefae6dSMauro Carvalho Chehab 867ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "printer". 868ecefae6dSMauro Carvalho ChehabThe printer function provides these attributes in its function directory: 869ecefae6dSMauro Carvalho Chehab 870ecefae6dSMauro Carvalho Chehab ========== =========================================== 871ecefae6dSMauro Carvalho Chehab pnp_string Data to be passed to the host in pnp string 872ecefae6dSMauro Carvalho Chehab q_len Number of requests per endpoint 873ecefae6dSMauro Carvalho Chehab ========== =========================================== 874ecefae6dSMauro Carvalho Chehab 875ecefae6dSMauro Carvalho ChehabTesting the PRINTER function 876ecefae6dSMauro Carvalho Chehab---------------------------- 877ecefae6dSMauro Carvalho Chehab 878ecefae6dSMauro Carvalho ChehabThe most basic testing: 879ecefae6dSMauro Carvalho Chehab 880ecefae6dSMauro Carvalho Chehabdevice: run the gadget:: 881ecefae6dSMauro Carvalho Chehab 882ecefae6dSMauro Carvalho Chehab # ls -l /devices/virtual/usb_printer_gadget/ 883ecefae6dSMauro Carvalho Chehab 884ecefae6dSMauro Carvalho Chehabshould show g_printer<number>. 885ecefae6dSMauro Carvalho Chehab 886ecefae6dSMauro Carvalho ChehabIf udev is active, then /dev/g_printer<number> should appear automatically. 887ecefae6dSMauro Carvalho Chehab 888ecefae6dSMauro Carvalho Chehabhost: 889ecefae6dSMauro Carvalho Chehab 890ecefae6dSMauro Carvalho ChehabIf udev is active, then e.g. /dev/usb/lp0 should appear. 891ecefae6dSMauro Carvalho Chehab 892ecefae6dSMauro Carvalho Chehabhost->device transmission: 893ecefae6dSMauro Carvalho Chehab 894ecefae6dSMauro Carvalho Chehabdevice:: 895ecefae6dSMauro Carvalho Chehab 896ecefae6dSMauro Carvalho Chehab # cat /dev/g_printer<number> 897ecefae6dSMauro Carvalho Chehab 898ecefae6dSMauro Carvalho Chehabhost:: 899ecefae6dSMauro Carvalho Chehab 900ecefae6dSMauro Carvalho Chehab # cat > /dev/usb/lp0 901ecefae6dSMauro Carvalho Chehab 902ecefae6dSMauro Carvalho Chehabdevice->host transmission:: 903ecefae6dSMauro Carvalho Chehab 904ecefae6dSMauro Carvalho Chehab # cat > /dev/g_printer<number> 905ecefae6dSMauro Carvalho Chehab 906ecefae6dSMauro Carvalho Chehabhost:: 907ecefae6dSMauro Carvalho Chehab 908ecefae6dSMauro Carvalho Chehab # cat /dev/usb/lp0 909ecefae6dSMauro Carvalho Chehab 910ecefae6dSMauro Carvalho ChehabMore advanced testing can be done with the prn_example 911ecefae6dSMauro Carvalho Chehabdescribed in Documentation/usb/gadget_printer.rst. 912ecefae6dSMauro Carvalho Chehab 913ecefae6dSMauro Carvalho Chehab 914ecefae6dSMauro Carvalho Chehab20. UAC1 function (virtual ALSA card, using u_audio API) 915ecefae6dSMauro Carvalho Chehab======================================================== 916ecefae6dSMauro Carvalho Chehab 917ecefae6dSMauro Carvalho ChehabThe function is provided by usb_f_uac1.ko module. 918ecefae6dSMauro Carvalho ChehabIt will create a virtual ALSA card and the audio streams are simply 919ecefae6dSMauro Carvalho Chehabsinked to and sourced from it. 920ecefae6dSMauro Carvalho Chehab 921ecefae6dSMauro Carvalho ChehabFunction-specific configfs interface 922ecefae6dSMauro Carvalho Chehab------------------------------------ 923ecefae6dSMauro Carvalho Chehab 924ecefae6dSMauro Carvalho ChehabThe function name to use when creating the function directory is "uac1". 925ecefae6dSMauro Carvalho ChehabThe uac1 function provides these attributes in its function directory: 926ecefae6dSMauro Carvalho Chehab 9279c0edd56SHu Haowen ================ ==================================================== 928ecefae6dSMauro Carvalho Chehab c_chmask capture channel mask 929695d39ffSJulian Scheel c_srate list of capture sampling rates (comma-separated) 930ecefae6dSMauro Carvalho Chehab c_ssize capture sample size (bytes) 9310356e628SRuslan Bilovol c_mute_present capture mute control enable 9320356e628SRuslan Bilovol c_volume_present capture volume control enable 9330356e628SRuslan Bilovol c_volume_min capture volume control min value (in 1/256 dB) 9340356e628SRuslan Bilovol c_volume_max capture volume control max value (in 1/256 dB) 9350356e628SRuslan Bilovol c_volume_res capture volume control resolution (in 1/256 dB) 936ecefae6dSMauro Carvalho Chehab p_chmask playback channel mask 937695d39ffSJulian Scheel p_srate list of playback sampling rates (comma-separated) 938ecefae6dSMauro Carvalho Chehab p_ssize playback sample size (bytes) 9390356e628SRuslan Bilovol p_mute_present playback mute control enable 9400356e628SRuslan Bilovol p_volume_present playback volume control enable 9410356e628SRuslan Bilovol p_volume_min playback volume control min value (in 1/256 dB) 9420356e628SRuslan Bilovol p_volume_max playback volume control max value (in 1/256 dB) 9430356e628SRuslan Bilovol p_volume_res playback volume control resolution (in 1/256 dB) 944a8cf0516SPavel Hofman req_number the number of pre-allocated requests for both capture 945ecefae6dSMauro Carvalho Chehab and playback 946993a44faSYunhao Tian function_name name of the interface 9479c0edd56SHu Haowen ================ ==================================================== 948ecefae6dSMauro Carvalho Chehab 949ecefae6dSMauro Carvalho ChehabThe attributes have sane default values. 950ecefae6dSMauro Carvalho Chehab 951ecefae6dSMauro Carvalho ChehabTesting the UAC1 function 952ecefae6dSMauro Carvalho Chehab------------------------- 953ecefae6dSMauro Carvalho Chehab 954ecefae6dSMauro Carvalho Chehabdevice: run the gadget 955ecefae6dSMauro Carvalho Chehabhost: aplay -l # should list our USB Audio Gadget 956ecefae6dSMauro Carvalho Chehab 957ecefae6dSMauro Carvalho ChehabThis function does not require real hardware support, it just 958ecefae6dSMauro Carvalho Chehabsends a stream of audio data to/from the host. In order to 959ecefae6dSMauro Carvalho Chehabactually hear something at the device side, a command similar 960ecefae6dSMauro Carvalho Chehabto this must be used at the device side:: 961ecefae6dSMauro Carvalho Chehab 962ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 & 963ecefae6dSMauro Carvalho Chehab 964ecefae6dSMauro Carvalho Chehabe.g.:: 965ecefae6dSMauro Carvalho Chehab 966ecefae6dSMauro Carvalho Chehab $ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \ 967ecefae6dSMauro Carvalho Chehab aplay -D default:CARD=OdroidU3 968