xref: /linux/Documentation/usb/gadget-testing.rst (revision 421c8d9a20da92deed2dac227e7ebdee7eb3e88f)
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