2020-07-23 15:19:35 +02:00
|
|
|
|
# System / `composite` USB Composite
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
This logic adds a NSH command to control a USB composite device. The only
|
|
|
|
|
supported devices in the composite are CDC/ACM serial and a USB mass storage
|
|
|
|
|
device. Which devices are enclosed in a composite device is configured with an
|
|
|
|
|
array of configuration-structs, handed over to the function
|
|
|
|
|
`composite_initialize()`.
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Required overall configuration:
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Enable the USB Support of your Hardware / Processor e.g. `SAMV7_USBDEVHS=y`
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `CONFIG_USBDEV=y` – USB device support.
|
|
|
|
|
- `CONFIG_USBDEV_COMPOSITE=y` – USB composite device support.
|
|
|
|
|
- `CONFIG_COMPOSITE_IAD=y` – Interface associate descriptor needed.
|
|
|
|
|
- `CONFIG_CDCACM=y` – USB CDC/ACM serial device support.
|
|
|
|
|
- `CONFIG_CDCACM_COMPOSITE=y` – USB CDC/ACM serial composite device support.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
The interface-, string-descriptor- and endpoint-numbers are configured via the
|
|
|
|
|
configuration-structs as noted above. The CDC/ACM serial device needs three
|
|
|
|
|
endpoints; one interrupt-driven and two bulk endpoints.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `CONFIG_USBMSC=y` – USB mass storage device support.
|
|
|
|
|
- `CONFIG_USBMSC_COMPOSITE=y` – USB mass storage composite device support.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Like the configuration for the CDC/ACM, the descriptor- and endpoint-numbers are
|
|
|
|
|
configured via the configuration struct.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Depending on the configuration struct you need to configure different vendor-
|
|
|
|
|
and product-IDs. Each `VID`/`PID` is unique to a device and thus to a dedicated
|
|
|
|
|
configuration.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Linux tries to detect the device types and installs default drivers if the
|
|
|
|
|
`VID`/`PID` pair is unknown.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Windows insists on a known and installed configuration. With an Atmel hardware
|
|
|
|
|
and Atmel-Studio or the Atmel-USB-drivers installed, you can test your
|
|
|
|
|
configuration with Atmel Example Vendor- and Product-IDs.
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
If you have a USBMSC and a CDC/ACM configured in your combo, then you can try to
|
|
|
|
|
use
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `VID = 0x03EB` (ATMEL)
|
|
|
|
|
- `PID = 0x2424` (ASF Example with MSC and CDC)
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
If for example you try to test a configuration with up to seven CDCs, then
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `VID = 0x03EB` (ATMEL)
|
|
|
|
|
- `PID = 0x2426` (ASF Example with up to seven CDCs)
|
2017-07-16 16:45:26 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
This add-on can be built as two NSH _built-in_ commands:
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `CONFIG_NSH_BUILTIN_APPS` – if this option is selected: `conn` will connect
|
|
|
|
|
the USB composite device; `disconn` will disconnect the USB composite device.
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
Configuration options unique to this add-on:
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_DEBUGMM` – Enables some debug tests to check for
|
|
|
|
|
memory usage and memory leaks.
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
If `CONFIG_USBDEV_TRACE` is enabled (or `CONFIG_DEBUG_FEATURES` and
|
|
|
|
|
`CONFIG_DEBUG_USB`), then the add-on code will also manage the USB trace output.
|
|
|
|
|
The amount of trace output can be controlled using:
|
2016-06-11 22:13:39 +02:00
|
|
|
|
|
2020-07-23 15:19:35 +02:00
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_TRACEINIT` – Show initialization events.
|
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_TRACECLASS` – Show class driver events.
|
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_TRACETRANSFERS` – Show data transfer events.
|
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_TRACECONTROLLER` – Show controller events.
|
|
|
|
|
- `CONFIG_SYSTEM_COMPOSITE_TRACEINTERRUPTS` – Show interrupt-related events.
|