[PATCH] Fix malformed table error in gadget-testing.rst

From: Shresth Prasad
Date: Sun Feb 11 2024 - 05:14:34 EST


I've replaced all tabs with 8 spaces in gadget-testing.rst so that the
document is easier to work with. This also fixes a malformed table error
emitted while compliling the docs.

Signed-off-by: Shresth Prasad <shresthprasad7@xxxxxxxxx>
---
Documentation/usb/gadget-testing.rst | 554 +++++++++++++--------------
1 file changed, 277 insertions(+), 277 deletions(-)

diff --git a/Documentation/usb/gadget-testing.rst b/Documentation/usb/gadget-testing.rst
index 077dfac7ed98..824a5a47d115 100644
--- a/Documentation/usb/gadget-testing.rst
+++ b/Documentation/usb/gadget-testing.rst
@@ -41,7 +41,7 @@ Function-specific configfs interface
The function name to use when creating the function directory is "acm".
The ACM function provides just one attribute in its function directory:

- port_num
+ port_num

The attribute is read-only.

@@ -53,21 +53,21 @@ Testing the ACM function

On the host::

- cat > /dev/ttyACM<X>
+ cat > /dev/ttyACM<X>

On the device::

- cat /dev/ttyGS<Y>
+ cat /dev/ttyGS<Y>

then the other way round

On the device::

- cat > /dev/ttyGS<Y>
+ cat > /dev/ttyGS<Y>

On the host::

- cat /dev/ttyACM<X>
+ cat /dev/ttyACM<X>

2. ECM function
===============
@@ -80,15 +80,15 @@ Function-specific configfs interface
The function name to use when creating the function directory is "ecm".
The ECM function provides these attributes in its function directory:

- =============== ==================================================
- ifname network device interface name associated with this
- function instance
- qmult queue length multiplier for high and super speed
- host_addr MAC address of host's end of this
- Ethernet over USB link
- dev_addr MAC address of device's end of this
- Ethernet over USB link
- =============== ==================================================
+ =============== ==================================================
+ ifname network device interface name associated with this
+ function instance
+ qmult queue length multiplier for high and super speed
+ host_addr MAC address of host's end of this
+ Ethernet over USB link
+ dev_addr MAC address of device's end of this
+ Ethernet over USB link
+ =============== ==================================================

and after creating the functions/ecm.<instance name> they contain default
values: qmult is 5, dev_addr and host_addr are randomly selected.
@@ -103,11 +103,11 @@ Configure IP addresses of the device and the host. Then:

On the device::

- ping <host's IP>
+ ping <host's IP>

On the host::

- ping <device's IP>
+ ping <device's IP>

3. ECM subset function
======================
@@ -120,15 +120,15 @@ Function-specific configfs interface
The function name to use when creating the function directory is "geth".
The ECM subset function provides these attributes in its function directory:

- =============== ==================================================
- ifname network device interface name associated with this
- function instance
- qmult queue length multiplier for high and super speed
- host_addr MAC address of host's end of this
- Ethernet over USB link
- dev_addr MAC address of device's end of this
- Ethernet over USB link
- =============== ==================================================
+ =============== ==================================================
+ ifname network device interface name associated with this
+ function instance
+ qmult queue length multiplier for high and super speed
+ host_addr MAC address of host's end of this
+ Ethernet over USB link
+ dev_addr MAC address of device's end of this
+ Ethernet over USB link
+ =============== ==================================================

and after creating the functions/ecm.<instance name> they contain default
values: qmult is 5, dev_addr and host_addr are randomly selected.
@@ -143,11 +143,11 @@ Configure IP addresses of the device and the host. Then:

On the device::

- ping <host's IP>
+ ping <host's IP>

On the host::

- ping <device's IP>
+ ping <device's IP>

4. EEM function
===============
@@ -160,15 +160,15 @@ Function-specific configfs interface
The function name to use when creating the function directory is "eem".
The EEM function provides these attributes in its function directory:

- =============== ==================================================
- ifname network device interface name associated with this
- function instance
- qmult queue length multiplier for high and super speed
- host_addr MAC address of host's end of this
- Ethernet over USB link
- dev_addr MAC address of device's end of this
- Ethernet over USB link
- =============== ==================================================
+ =============== ==================================================
+ ifname network device interface name associated with this
+ function instance
+ qmult queue length multiplier for high and super speed
+ host_addr MAC address of host's end of this
+ Ethernet over USB link
+ dev_addr MAC address of device's end of this
+ Ethernet over USB link
+ =============== ==================================================

and after creating the functions/eem.<instance name> they contain default
values: qmult is 5, dev_addr and host_addr are randomly selected.
@@ -183,11 +183,11 @@ Configure IP addresses of the device and the host. Then:

On the device::

- ping <host's IP>
+ ping <host's IP>

On the host::

- ping <device's IP>
+ ping <device's IP>

5. FFS function
===============
@@ -224,13 +224,13 @@ Function-specific configfs interface
The function name to use when creating the function directory is "hid".
The HID function provides these attributes in its function directory:

- =============== ===========================================
- protocol HID protocol to use
- report_desc data to be used in HID reports, except data
- passed with /dev/hidg<X>
- report_length HID report length
- subclass HID subclass to use
- =============== ===========================================
+ =============== ===========================================
+ protocol HID protocol to use
+ report_desc data to be used in HID reports, except data
+ passed with /dev/hidg<X>
+ report_length HID report length
+ subclass HID subclass to use
+ =============== ===========================================

For a keyboard the protocol and the subclass are 1, the report_length is 8,
while the report_desc is::
@@ -257,7 +257,7 @@ Device:
- run a program which writes to /dev/hidg<N>, e.g.
a userspace program found in Documentation/usb/gadget_hid.rst::

- $ ./hid_gadget_test /dev/hidg0 keyboard
+ $ ./hid_gadget_test /dev/hidg0 keyboard

Host:

@@ -274,10 +274,10 @@ Function-specific configfs interface
The function name to use when creating the function directory is "Loopback".
The LOOPBACK function provides these attributes in its function directory:

- =============== =======================
- qlen depth of loopback queue
- bulk_buflen buffer length
- =============== =======================
+ =============== =======================
+ qlen depth of loopback queue
+ bulk_buflen buffer length
+ =============== =======================

Testing the LOOPBACK function
-----------------------------
@@ -298,20 +298,20 @@ The function name to use when creating the function directory is "mass_storage".
The MASS STORAGE function provides these attributes in its directory:
files:

- =============== ==============================================
- stall Set to permit function to halt bulk endpoints.
- Disabled on some USB devices known not to work
- correctly. You should set it to true.
- num_buffers Number of pipeline buffers. Valid numbers
- are 2..4. Available only if
- CONFIG_USB_GADGET_DEBUG_FILES is set.
- =============== ==============================================
+ =============== ==============================================
+ stall Set to permit function to halt bulk endpoints.
+ Disabled on some USB devices known not to work
+ correctly. You should set it to true.
+ num_buffers Number of pipeline buffers. Valid numbers
+ are 2..4. Available only if
+ CONFIG_USB_GADGET_DEBUG_FILES is set.
+ =============== ==============================================

and a default lun.0 directory corresponding to SCSI LUN #0.

A new lun can be added with mkdir::

- $ mkdir functions/mass_storage.0/partition.5
+ $ mkdir functions/mass_storage.0/partition.5

Lun numbering does not have to be continuous, except for lun #0 which is
created by default. A maximum of 8 luns can be specified and they all must be
@@ -321,26 +321,26 @@ although it is not mandatory.

In each lun directory there are the following attribute files:

- =============== ==============================================
- file The path to the backing file for the LUN.
- Required if LUN is not marked as removable.
- ro Flag specifying access to the LUN shall be
- read-only. This is implied if CD-ROM emulation
- is enabled as well as when it was impossible
- to open "filename" in R/W mode.
- removable Flag specifying that LUN shall be indicated as
- being removable.
- cdrom Flag specifying that LUN shall be reported as
- being a CD-ROM.
- nofua Flag specifying that FUA flag
- in SCSI WRITE(10,12)
- forced_eject This write-only file is useful only when
- the function is active. It causes the backing
- file to be forcibly detached from the LUN,
- regardless of whether the host has allowed it.
- Any non-zero number of bytes written will
- result in ejection.
- =============== ==============================================
+ =============== ==============================================
+ file The path to the backing file for the LUN.
+ Required if LUN is not marked as removable.
+ ro Flag specifying access to the LUN shall be
+ read-only. This is implied if CD-ROM emulation
+ is enabled as well as when it was impossible
+ to open "filename" in R/W mode.
+ removable Flag specifying that LUN shall be indicated as
+ being removable.
+ cdrom Flag specifying that LUN shall be reported as
+ being a CD-ROM.
+ nofua Flag specifying that FUA flag
+ in SCSI WRITE(10,12)
+ forced_eject This write-only file is useful only when
+ the function is active. It causes the backing
+ file to be forcibly detached from the LUN,
+ regardless of whether the host has allowed it.
+ Any non-zero number of bytes written will
+ result in ejection.
+ =============== ==============================================

Testing the MASS STORAGE function
---------------------------------
@@ -360,14 +360,14 @@ Function-specific configfs interface
The function name to use when creating the function directory is "midi".
The MIDI function provides these attributes in its function directory:

- =============== ====================================
- buflen MIDI buffer length
- id ID string for the USB MIDI adapter
- in_ports number of MIDI input ports
- index index value for the USB MIDI adapter
- out_ports number of MIDI output ports
- qlen USB read request queue length
- =============== ====================================
+ =============== ====================================
+ buflen MIDI buffer length
+ id ID string for the USB MIDI adapter
+ in_ports number of MIDI input ports
+ index index value for the USB MIDI adapter
+ out_ports number of MIDI output ports
+ qlen USB read request queue length
+ =============== ====================================

Testing the MIDI function
-------------------------
@@ -448,17 +448,17 @@ Function-specific configfs interface
The function name to use when creating the function directory is "ncm".
The NCM function provides these attributes in its function directory:

- ======================= ==================================================
- ifname network device interface name associated with this
- function instance
- qmult queue length multiplier for high and super speed
- host_addr MAC address of host's end of this
- Ethernet over USB link
- dev_addr MAC address of device's end of this
- Ethernet over USB link
- max_segment_size Segment size required for P2P connections. This
- will set MTU to 14 bytes
- ======================= ==================================================
+ ======================= ==================================================
+ ifname network device interface name associated with this
+ function instance
+ qmult queue length multiplier for high and super speed
+ host_addr MAC address of host's end of this
+ Ethernet over USB link
+ dev_addr MAC address of device's end of this
+ Ethernet over USB link
+ max_segment_size Segment size required for P2P connections. This
+ will set MTU to 14 bytes
+ ======================= ==================================================

and after creating the functions/ncm.<instance name> they contain default
values: qmult is 5, dev_addr and host_addr are randomly selected.
@@ -473,11 +473,11 @@ Configure IP addresses of the device and the host. Then:

On the device::

- ping <host's IP>
+ ping <host's IP>

On the host::

- ping <device's IP>
+ ping <device's IP>

11. OBEX function
=================
@@ -490,7 +490,7 @@ Function-specific configfs interface
The function name to use when creating the function directory is "obex".
The OBEX function provides just one attribute in its function directory:

- port_num
+ port_num

The attribute is read-only.

@@ -501,16 +501,16 @@ Testing the OBEX function

On device::

- seriald -f /dev/ttyGS<Y> -s 1024
+ seriald -f /dev/ttyGS<Y> -s 1024

On host::

- serialc -v <vendorID> -p <productID> -i<interface#> -a1 -s1024 \
- -t<out endpoint addr> -r<in endpoint addr>
+ serialc -v <vendorID> -p <productID> -i<interface#> -a1 -s1024 \
+ -t<out endpoint addr> -r<in endpoint addr>

where seriald and serialc are Felipe's utilities found here:

- https://github.com/felipebalbi/usb-tools.git master
+ https://github.com/felipebalbi/usb-tools.git master

12. PHONET function
===================
@@ -523,10 +523,10 @@ Function-specific configfs interface
The function name to use when creating the function directory is "phonet".
The PHONET function provides just one attribute in its function directory:

- =============== ==================================================
- ifname network device interface name associated with this
- function instance
- =============== ==================================================
+ =============== ==================================================
+ ifname network device interface name associated with this
+ function instance
+ =============== ==================================================

Testing the PHONET function
---------------------------
@@ -543,39 +543,39 @@ git://git.gitorious.org/meego-cellular/phonet-utils.git

On the host::

- $ ./phonet -a 0x10 -i usbpn0
- $ ./pnroute add 0x6c usbpn0
- $./pnroute add 0x10 usbpn0
- $ ifconfig usbpn0 up
+ $ ./phonet -a 0x10 -i usbpn0
+ $ ./pnroute add 0x6c usbpn0
+ $./pnroute add 0x10 usbpn0
+ $ ifconfig usbpn0 up

On the device::

- $ ./phonet -a 0x6c -i upnlink0
- $ ./pnroute add 0x10 upnlink0
- $ ifconfig upnlink0 up
+ $ ./phonet -a 0x6c -i upnlink0
+ $ ./pnroute add 0x10 upnlink0
+ $ ifconfig upnlink0 up

Then a test program can be used::

- http://www.spinics.net/lists/linux-usb/msg85690.html
+ http://www.spinics.net/lists/linux-usb/msg85690.html

On the device::

- $ ./pnxmit -a 0x6c -r
+ $ ./pnxmit -a 0x6c -r

On the host::

- $ ./pnxmit -a 0x10 -s 0x6c
+ $ ./pnxmit -a 0x10 -s 0x6c

As a result some data should be sent from host to device.
Then the other way round:

On the host::

- $ ./pnxmit -a 0x10 -r
+ $ ./pnxmit -a 0x10 -r

On the device::

- $ ./pnxmit -a 0x6c -s 0x10
+ $ ./pnxmit -a 0x6c -s 0x10

13. RNDIS function
==================
@@ -588,15 +588,15 @@ Function-specific configfs interface
The function name to use when creating the function directory is "rndis".
The RNDIS function provides these attributes in its function directory:

- =============== ==================================================
- ifname network device interface name associated with this
- function instance
- qmult queue length multiplier for high and super speed
- host_addr MAC address of host's end of this
- Ethernet over USB link
- dev_addr MAC address of device's end of this
- Ethernet over USB link
- =============== ==================================================
+ =============== ==================================================
+ ifname network device interface name associated with this
+ function instance
+ qmult queue length multiplier for high and super speed
+ host_addr MAC address of host's end of this
+ Ethernet over USB link
+ dev_addr MAC address of device's end of this
+ Ethernet over USB link
+ =============== ==================================================

and after creating the functions/rndis.<instance name> they contain default
values: qmult is 5, dev_addr and host_addr are randomly selected.
@@ -611,11 +611,11 @@ Configure IP addresses of the device and the host. Then:

On the device::

- ping <host's IP>
+ ping <host's IP>

On the host::

- ping <device's IP>
+ ping <device's IP>

14. SERIAL function
===================
@@ -628,7 +628,7 @@ Function-specific configfs interface
The function name to use when creating the function directory is "gser".
The SERIAL function provides just one attribute in its function directory:

- port_num
+ port_num

The attribute is read-only.

@@ -639,26 +639,26 @@ Testing the SERIAL function

On host::

- insmod usbserial
- echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id
+ insmod usbserial
+ echo VID PID >/sys/bus/usb-serial/drivers/generic/new_id

On host::

- cat > /dev/ttyUSB<X>
+ cat > /dev/ttyUSB<X>

On target::

- cat /dev/ttyGS<Y>
+ cat /dev/ttyGS<Y>

then the other way round

On target::

- cat > /dev/ttyGS<Y>
+ cat > /dev/ttyGS<Y>

On host::

- cat /dev/ttyUSB<X>
+ cat /dev/ttyUSB<X>

15. SOURCESINK function
=======================
@@ -671,16 +671,16 @@ Function-specific configfs interface
The function name to use when creating the function directory is "SourceSink".
The SOURCESINK function provides these attributes in its function directory:

- =============== ==================================
- pattern 0 (all zeros), 1 (mod63), 2 (none)
- isoc_interval 1..16
- isoc_maxpacket 0 - 1023 (fs), 0 - 1024 (hs/ss)
- isoc_mult 0..2 (hs/ss only)
- isoc_maxburst 0..15 (ss only)
- bulk_buflen buffer length
- bulk_qlen depth of queue for bulk
- iso_qlen depth of queue for iso
- =============== ==================================
+ =============== ==================================
+ pattern 0 (all zeros), 1 (mod63), 2 (none)
+ isoc_interval 1..16
+ isoc_maxpacket 0 - 1023 (fs), 0 - 1024 (hs/ss)
+ isoc_mult 0..2 (hs/ss only)
+ isoc_maxburst 0..15 (ss only)
+ bulk_buflen buffer length
+ bulk_qlen depth of queue for bulk
+ iso_qlen depth of queue for iso
+ =============== ==================================

Testing the SOURCESINK function
-------------------------------
@@ -702,14 +702,14 @@ The function name to use when creating the function directory
is "uac1_legacy".
The uac1 function provides these attributes in its function directory:

- =============== ====================================
- audio_buf_size audio buffer size
- fn_cap capture pcm device file name
- fn_cntl control device file name
- fn_play playback pcm device file name
- req_buf_size ISO OUT endpoint request buffer size
- req_count ISO OUT endpoint request count
- =============== ====================================
+ =============== ====================================
+ audio_buf_size audio buffer size
+ fn_cap capture pcm device file name
+ fn_cntl control device file name
+ fn_play playback pcm device file name
+ req_buf_size ISO OUT endpoint request buffer size
+ req_count ISO OUT endpoint request count
+ =============== ====================================

The attributes have sane default values.

@@ -720,7 +720,7 @@ device: run the gadget

host::

- aplay -l # should list our USB Audio Gadget
+ aplay -l # should list our USB Audio Gadget

17. UAC2 function
=================
@@ -733,33 +733,33 @@ Function-specific configfs interface
The function name to use when creating the function directory is "uac2".
The uac2 function provides these attributes in its function directory:

- ================ ====================================================
- c_chmask capture channel mask
- c_srate list of capture sampling rates (comma-separated)
- c_ssize capture sample size (bytes)
- c_sync capture synchronization type (async/adaptive)
- c_mute_present capture mute control enable
- c_volume_present capture volume control enable
- c_volume_min capture volume control min value (in 1/256 dB)
- c_volume_max capture volume control max value (in 1/256 dB)
- c_volume_res capture volume control resolution (in 1/256 dB)
- c_hs_bint capture bInterval for HS/SS (1-4: fixed, 0: auto)
- fb_max maximum extra bandwidth in async mode
- p_chmask playback channel mask
- p_srate list of playback sampling rates (comma-separated)
- p_ssize playback sample size (bytes)
- p_mute_present playback mute control enable
- p_volume_present playback volume control enable
- p_volume_min playback volume control min value (in 1/256 dB)
- p_volume_max playback volume control max value (in 1/256 dB)
- p_volume_res playback volume control resolution (in 1/256 dB)
- p_hs_bint playback bInterval for HS/SS (1-4: fixed, 0: auto)
- req_number the number of pre-allocated request for both capture
- and playback
- function_name name of the interface
- c_terminal_type code of the capture terminal type
- p_terminal_type code of the playback terminal type
- ================ ====================================================
+ ================ ====================================================
+ c_chmask capture channel mask
+ c_srate list of capture sampling rates (comma-separated)
+ c_ssize capture sample size (bytes)
+ c_sync capture synchronization type (async/adaptive)
+ c_mute_present capture mute control enable
+ c_volume_present capture volume control enable
+ c_volume_min capture volume control min value (in 1/256 dB)
+ c_volume_max capture volume control max value (in 1/256 dB)
+ c_volume_res capture volume control resolution (in 1/256 dB)
+ c_hs_bint capture bInterval for HS/SS (1-4: fixed, 0: auto)
+ fb_max maximum extra bandwidth in async mode
+ p_chmask playback channel mask
+ p_srate list of playback sampling rates (comma-separated)
+ p_ssize playback sample size (bytes)
+ p_mute_present playback mute control enable
+ p_volume_present playback volume control enable
+ p_volume_min playback volume control min value (in 1/256 dB)
+ p_volume_max playback volume control max value (in 1/256 dB)
+ p_volume_res playback volume control resolution (in 1/256 dB)
+ p_hs_bint playback bInterval for HS/SS (1-4: fixed, 0: auto)
+ req_number the number of pre-allocated request for both capture
+ and playback
+ function_name name of the interface
+ c_terminal_type code of the capture terminal type
+ p_terminal_type code of the playback terminal type
+ ================ ====================================================

The attributes have sane default values.

@@ -774,12 +774,12 @@ sends a stream of audio data to/from the host. In order to
actually hear something at the device side, a command similar
to this must be used at the device side::

- $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &
+ $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &

e.g.::

- $ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \
- aplay -D default:CARD=OdroidU3
+ $ arecord -f dat -t wav -D hw:CARD=UAC2Gadget,DEV=0 | \
+ aplay -D default:CARD=OdroidU3

18. UVC function
================
@@ -792,30 +792,30 @@ Function-specific configfs interface
The function name to use when creating the function directory is "uvc".
The uvc function provides these attributes in its function directory:

- =================== ================================================
- streaming_interval interval for polling endpoint for data transfers
- streaming_maxburst bMaxBurst for super speed companion descriptor
- streaming_maxpacket maximum packet size this endpoint is capable of
- sending or receiving when this configuration is
- selected
- function_name name of the interface
- =================== ================================================
+ =================== ================================================
+ streaming_interval interval for polling endpoint for data transfers
+ streaming_maxburst bMaxBurst for super speed companion descriptor
+ streaming_maxpacket maximum packet size this endpoint is capable of
+ sending or receiving when this configuration is
+ selected
+ function_name name of the interface
+ =================== ================================================

There are also "control" and "streaming" subdirectories, each of which contain
a number of their subdirectories. There are some sane defaults provided, but
the user must provide the following:

- ================== ====================================================
- control header create in control/header, link from control/class/fs
- and/or control/class/ss
- streaming header create in streaming/header, link from
- streaming/class/fs and/or streaming/class/hs and/or
- streaming/class/ss
- format description create in streaming/mjpeg and/or
- streaming/uncompressed
- frame description create in streaming/mjpeg/<format> and/or in
- streaming/uncompressed/<format>
- ================== ====================================================
+ ================== ====================================================
+ control header create in control/header, link from control/class/fs
+ and/or control/class/ss
+ streaming header create in streaming/header, link from
+ streaming/class/fs and/or streaming/class/hs and/or
+ streaming/class/ss
+ format description create in streaming/mjpeg and/or
+ streaming/uncompressed
+ frame description create in streaming/mjpeg/<format> and/or in
+ streaming/uncompressed/<format>
+ ================== ====================================================

Each frame description contains frame interval specification, and each
such specification consists of a number of lines with an interval value
@@ -851,15 +851,15 @@ device: run the gadget, modprobe vivid::
# uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #>

where uvc-gadget is this program:
- http://git.ideasonboard.org/uvc-gadget.git
+ http://git.ideasonboard.org/uvc-gadget.git

with these patches:

- http://www.spinics.net/lists/linux-usb/msg99220.html
+ http://www.spinics.net/lists/linux-usb/msg99220.html

host::

- luvcview -f yuv
+ luvcview -f yuv

19. PRINTER function
====================
@@ -872,10 +872,10 @@ Function-specific configfs interface
The function name to use when creating the function directory is "printer".
The printer function provides these attributes in its function directory:

- ========== ===========================================
- pnp_string Data to be passed to the host in pnp string
- q_len Number of requests per endpoint
- ========== ===========================================
+ ========== ===========================================
+ pnp_string Data to be passed to the host in pnp string
+ q_len Number of requests per endpoint
+ ========== ===========================================

Testing the PRINTER function
----------------------------
@@ -884,7 +884,7 @@ The most basic testing:

device: run the gadget::

- # ls -l /devices/virtual/usb_printer_gadget/
+ # ls -l /devices/virtual/usb_printer_gadget/

should show g_printer<number>.

@@ -898,19 +898,19 @@ host->device transmission:

device::

- # cat /dev/g_printer<number>
+ # cat /dev/g_printer<number>

host::

- # cat > /dev/usb/lp0
+ # cat > /dev/usb/lp0

device->host transmission::

- # cat > /dev/g_printer<number>
+ # cat > /dev/g_printer<number>

host::

- # cat /dev/usb/lp0
+ # cat /dev/usb/lp0

More advanced testing can be done with the prn_example
described in Documentation/usb/gadget_printer.rst.
@@ -929,27 +929,27 @@ Function-specific configfs interface
The function name to use when creating the function directory is "uac1".
The uac1 function provides these attributes in its function directory:

- ================ ====================================================
- c_chmask capture channel mask
- c_srate list of capture sampling rates (comma-separated)
- c_ssize capture sample size (bytes)
- c_mute_present capture mute control enable
- c_volume_present capture volume control enable
- c_volume_min capture volume control min value (in 1/256 dB)
- c_volume_max capture volume control max value (in 1/256 dB)
- c_volume_res capture volume control resolution (in 1/256 dB)
- p_chmask playback channel mask
- p_srate list of playback sampling rates (comma-separated)
- p_ssize playback sample size (bytes)
- p_mute_present playback mute control enable
- p_volume_present playback volume control enable
- p_volume_min playback volume control min value (in 1/256 dB)
- p_volume_max playback volume control max value (in 1/256 dB)
- p_volume_res playback volume control resolution (in 1/256 dB)
- req_number the number of pre-allocated requests for both capture
- and playback
- function_name name of the interface
- ================ ====================================================
+ ================ ====================================================
+ c_chmask capture channel mask
+ c_srate list of capture sampling rates (comma-separated)
+ c_ssize capture sample size (bytes)
+ c_mute_present capture mute control enable
+ c_volume_present capture volume control enable
+ c_volume_min capture volume control min value (in 1/256 dB)
+ c_volume_max capture volume control max value (in 1/256 dB)
+ c_volume_res capture volume control resolution (in 1/256 dB)
+ p_chmask playback channel mask
+ p_srate list of playback sampling rates (comma-separated)
+ p_ssize playback sample size (bytes)
+ p_mute_present playback mute control enable
+ p_volume_present playback volume control enable
+ p_volume_min playback volume control min value (in 1/256 dB)
+ p_volume_max playback volume control max value (in 1/256 dB)
+ p_volume_res playback volume control resolution (in 1/256 dB)
+ req_number the number of pre-allocated requests for both capture
+ and playback
+ function_name name of the interface
+ ================ ====================================================

The attributes have sane default values.

@@ -964,12 +964,12 @@ sends a stream of audio data to/from the host. In order to
actually hear something at the device side, a command similar
to this must be used at the device side::

- $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &
+ $ arecord -f dat -t wav -D hw:2,0 | aplay -D hw:0,0 &

e.g.::

- $ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \
- aplay -D default:CARD=OdroidU3
+ $ arecord -f dat -t wav -D hw:CARD=UAC1Gadget,DEV=0 | \
+ aplay -D default:CARD=OdroidU3


21. MIDI2 function
@@ -988,49 +988,49 @@ The function name to use when creating the function directory is "midi2".
The midi2 function provides these attributes in its function directory
as the card top-level information:

- ============= =================================================
- process_ump Bool flag to process UMP Stream messages (0 or 1)
- static_block Bool flag for static blocks (0 or 1)
- iface_name Optional interface name string
- ============= =================================================
+ ============= =================================================
+ process_ump Bool flag to process UMP Stream messages (0 or 1)
+ static_block Bool flag for static blocks (0 or 1)
+ iface_name Optional interface name string
+ ============= =================================================

The directory contains a subdirectory "ep.0", and this provides the
attributes for a UMP Endpoint (which is a pair of USB MIDI Endpoints):

- ============= =================================================
- protocol_caps MIDI protocol capabilities;
- 1: MIDI 1.0, 2: MIDI 2.0, or 3: both protocols
- protocol Default MIDI protocol (either 1 or 2)
- ep_name UMP Endpoint name string
- product_id Product ID string
- manufacturer Manufacture ID number (24 bit)
- family Device family ID number (16 bit)
- model Device model ID number (16 bit)
- sw_revision Software revision (32 bit)
- ============= =================================================
+ ============= =================================================
+ protocol_caps MIDI protocol capabilities;
+ 1: MIDI 1.0, 2: MIDI 2.0, or 3: both protocols
+ protocol Default MIDI protocol (either 1 or 2)
+ ep_name UMP Endpoint name string
+ product_id Product ID string
+ manufacturer Manufacture ID number (24 bit)
+ family Device family ID number (16 bit)
+ model Device model ID number (16 bit)
+ sw_revision Software revision (32 bit)
+ ============= =================================================

Each Endpoint subdirectory contains a subdirectory "block.0", which
represents the Function Block for Block 0 information.
Its attributes are:

- ================= ===============================================
- name Function Block name string
- direction Direction of this FB
- 1: input, 2: output, or 3: bidirectional
- first_group The first UMP Group number (0-15)
- num_groups The number of groups in this FB (1-16)
- midi1_first_group The first UMP Group number for MIDI 1.0 (0-15)
- midi1_num_groups The number of groups for MIDI 1.0 (0-16)
- ui_hint UI-hint of this FB
- 0: unknown, 1: receiver, 2: sender, 3: both
- midi_ci_verison Supported MIDI-CI version number (8 bit)
- is_midi1 Legacy MIDI 1.0 device (0-2)
- 0: MIDI 2.0 device,
- 1: MIDI 1.0 without restriction, or
- 2: MIDI 1.0 with low speed
- sysex8_streams Max number of SysEx8 streams (8 bit)
- active Bool flag for FB activity (0 or 1)
- ================= ===============================================
+ ================= ===============================================
+ name Function Block name string
+ direction Direction of this FB
+ 1: input, 2: output, or 3: bidirectional
+ first_group The first UMP Group number (0-15)
+ num_groups The number of groups in this FB (1-16)
+ midi1_first_group The first UMP Group number for MIDI 1.0 (0-15)
+ midi1_num_groups The number of groups for MIDI 1.0 (0-16)
+ ui_hint UI-hint of this FB
+ 0: unknown, 1: receiver, 2: sender, 3: both
+ midi_ci_verison Supported MIDI-CI version number (8 bit)
+ is_midi1 Legacy MIDI 1.0 device (0-2)
+ 0: MIDI 2.0 device,
+ 1: MIDI 1.0 without restriction, or
+ 2: MIDI 1.0 with low speed
+ sysex8_streams Max number of SysEx8 streams (8 bit)
+ active Bool flag for FB activity (0 or 1)
+ ================= ===============================================

If multiple Function Blocks are required, you can add more Function
Blocks by creating subdirectories "block.<num>" with the corresponding
--
2.43.0