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