1.. zephyr:code-sample:: usb-shell
2   :name: USB shell
3   :relevant-api: usbd_api
4
5   Use shell commands to interact with USB device stack.
6
7Overview
8********
9
10The sample enables new experimental USB device support and the shell function.
11It is primarily intended to aid in the development and testing of USB controller
12drivers and new USB support.
13
14Building and flashing
15*********************
16
17Assuming the board has a supported USB device controller, the example can be
18built like:
19
20.. zephyr-app-commands::
21   :zephyr-app: samples/subsys/usb/shell
22   :board: reel_board
23   :goals: flash
24   :compact:
25
26For the USB host functionality a supported host controller is required,
27currently it is only MAX3421E. The example can be built as follows:
28
29.. zephyr-app-commands::
30   :zephyr-app: samples/subsys/usb/shell
31   :board: nrf52840dk/nrf52840
32   :shield: sparkfun_max3421e
33   :gen-args: -DCONFIG_UHC_DRIVER=y -DCONFIG_USB_HOST_STACK=y
34   :goals: flash
35   :compact:
36
37It is theoretically possible to build USB support using virtual USB controllers
38for all platforms, eventually the devicetree overlay has to be adjusted slightly if
39the platform has already defined or not ``zephyr_uhc0`` or ``zephyr_udc0`` nodelabels.
40
41.. zephyr-app-commands::
42   :zephyr-app: samples/subsys/usb/shell
43   :board: nrf52840dk/nrf52840
44   :gen-args: -DEXTRA_CONF_FILE=virtual.conf -DDTC_OVERLAY_FILE=virtual.overlay
45   :goals: flash
46   :compact:
47
48Sample shell interaction
49========================
50
51.. code-block:: console
52
53   uart:~$ usbd defaults
54   dev: USB descriptors initialized
55   uart:~$ usbd config add 1
56   uart:~$ usbd class add foobaz 1
57   dev: added USB class foobaz to configuration 1
58   uart:~$ usbd init
59   dev: USB initialized
60   uart:~$ usbh init
61   host: USB host initialized
62   uart:~$ usbh enable
63   host: USB host enabled
64   [611:00:28.620,000] <wrn> usbd_core: VBUS detected event
65   uart:~$ usbh bus resume
66   host: USB bus resumed
67   uart:~$ usbd enable
68   host: USB device connected
69   dev: USB enabled
70   uart:~$ usbh device descriptor device 0
71   host: transfer finished 0x20006250, err 0
72   00000000: 80 06 00 01 00 00 12 00                          |........         |
73   bLength			18
74   bDescriptorType		1
75   bcdUSB			200
76   bDeviceClass	        	239
77   bDeviceSubClass		2
78   bDeviceProtocol		1
79   bMaxPacketSize0		64
80   idVendor		        2fe3
81   idProduct		        ffff
82   bcdDevice		        301
83   iManufacturer		1
84   iProduct		        2
85   iSerial			3
86   bNumConfigurations           1
87