Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c4f538b authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Felipe Balbi
Browse files

Documentation: usb: UVC function testing



Summary of how to test UVC function of USB gadget.

Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 020c6f93
Loading
Loading
Loading
Loading
+73 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ provided by gadgets.
15. SOURCESINK function
16. UAC1 function
17. UAC2 function
18. UVC function


1. ACM function
@@ -653,3 +654,75 @@ e.g.:

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

18. UVC function
================

The function is provided by usb_f_uvc.ko module.

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

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>

Each frame description contains frame interval specification, and each
such specification consists of a number of lines with an inverval value
in each line. The rules stated above are best illustrated with an example:

# mkdir functions/uvc.usb0/control/header/h
# cd functions/uvc.usb0/control/header/h
# ln -s header/h class/fs
# ln -s header/h class/ss
# mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p
# cat <<EOF > functions/uvc.usb0/streaming/uncompressed/u/360p/dwFrameInterval
666666
1000000
5000000
EOF
# cd $GADGET_CONFIGFS_ROOT
# mkdir functions/uvc.usb0/streaming/header/h
# cd functions/uvc.usb0/streaming/header/h
# ln -s ../../uncompressed/u
# cd ../../class/fs
# ln -s ../../header/h
# cd ../../class/hs
# ln -s ../../header/h
# cd ../../class/ss
# ln -s ../../header/h


Testing the UVC function
------------------------

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

with these patches:
http://www.spinics.net/lists/linux-usb/msg99220.html

host: luvcview -f yuv