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