.. _usb_device_cdc_acm:

USB device stack CDC ACM support
################################

The CDC ACM class is used as backend for different subsystems in Zephyr.
However, its configuration may not be easy for the inexperienced user.
Below is a description of the different use cases and some pitfalls.

The interface for CDC ACM user is :ref:`uart_api` driver API.
But there are two important differences in behavior to a real UART controller:

* Data transfer is only possible after the USB device stack has been initialized and started,
  until then any data is discarded
* If device is connected to the host, it still needs an application
  on the host side which requests the data

The devicetree compatible property for CDC ACM UART is
:dtcompatible:`zephyr,cdc-acm-uart`.
CDC ACM support is automatically selected when USB device support is enabled
and a compatible node in the devicetree sources is present. If necessary,
CDC ACM support can be explicitly disabled by :kconfig:option:`CONFIG_USB_CDC_ACM`.
About four CDC ACM UART instances can be defined and used,
limited by the maximum number of supported endpoints on the controller.

CDC ACM UART node is supposed to be child of a USB device controller node.
Since the designation of the controller nodes varies from vendor to vendor,
and our samples and application should be as generic as possible,
the default USB device controller is usually assigned an ``zephyr_udc0``
node label. Often, CDC ACM UART is described in a devicetree overlay file
and looks like this:

.. code-block:: devicetree

   &zephyr_udc0 {
   	cdc_acm_uart0: cdc_acm_uart0 {
   		compatible = "zephyr,cdc-acm-uart";
   		label = "CDC_ACM_0";
   	};
   };

Samples :ref:`usb_cdc-acm` and :ref:`usb_hid-cdc` have similar overlay files.
And since no special properties are present, it may seem overkill to use
devicetree to describe CDC ACM UART.  The motivation behind using devicetree
is the easy interchangeability of a real UART controller and CDC ACM UART
in applications.

Console over CDC ACM UART
*************************

With the CDC ACM UART node from above and ``zephyr,console`` property of the
chosen node, we can describe that CDC ACM UART is to be used with the console.
A similar overlay file is used by :ref:`cdc-acm-console`.

.. code-block:: devicetree

   / {
   	chosen {
   		zephyr,console = &cdc_acm_uart0;
   	};
   };

   &zephyr_udc0 {
   	cdc_acm_uart0: cdc_acm_uart0 {
   		compatible = "zephyr,cdc-acm-uart";
   		label = "CDC_ACM_0";
   	};
   };

Before the application uses the console, it is recommended to wait for
the DTR signal:

.. code-block:: c

    const struct device *dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_console));
    uint32_t dtr = 0;

    if (usb_enable(NULL)) {
    	return;
    }

    while (!dtr) {
    	uart_line_ctrl_get(dev, UART_LINE_CTRL_DTR, &dtr);
    	k_sleep(K_MSEC(100));
    }

    printk("nuqneH\n");

CDC ACM UART as backend
***********************

As for the console sample, it is possible to configure CDC ACM UART as
backend for other subsystems by setting :ref:`devicetree-chosen-nodes`
properties.

List of few Zephyr specific chosen properties which can be used to select
CDC ACM UART as backend for a subsystem or application:

* ``zephyr,bt-c2h-uart`` used in Bluetooth,
  for example see :ref:`bluetooth-hci-uart-sample`
* ``zephyr,ot-uart`` used in OpenThread,
  for example see :ref:`coprocessor-sample`
* ``zephyr,shell-uart`` used by shell for serial backend,
  for example see :zephyr_file:`samples/subsys/shell/shell_module`
* ``zephyr,uart-mcumgr`` used by :ref:`smp_svr_sample`
