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