LCOV - code coverage report
Current view: top level - zephyr/usb/class - usbd_uac2.h Coverage Total Hit
Test: new.info Lines: 100.0 % 13 13
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2023-2024 Nordic Semiconductor ASA
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /**
       8              :  * @file
       9              :  * @brief USB Audio Class 2 device public header
      10              :  *
      11              :  * This header describes only class API interaction with application.
      12              :  * The audio device itself is modelled with devicetree zephyr,uac2 compatible.
      13              :  *
      14              :  * This API is currently considered experimental.
      15              :  */
      16              : 
      17              : #ifndef ZEPHYR_INCLUDE_USB_CLASS_USBD_UAC2_H_
      18              : #define ZEPHYR_INCLUDE_USB_CLASS_USBD_UAC2_H_
      19              : 
      20              : #include <zephyr/device.h>
      21              : 
      22              : /**
      23              :  * @brief USB Audio Class 2 device API
      24              :  * @defgroup uac2_device USB Audio Class 2 device API
      25              :  * @ingroup usb
      26              :  * @since 3.6
      27              :  * @version 0.2.0
      28              :  * @{
      29              :  */
      30              : 
      31              : /**
      32              :  * @brief Get entity ID
      33              :  *
      34              :  * @param node node identifier
      35              :  */
      36            1 : #define UAC2_ENTITY_ID(node)                                                    \
      37              :         ({                                                                      \
      38              :                 BUILD_ASSERT(DT_NODE_HAS_COMPAT(DT_PARENT(node), zephyr_uac2)); \
      39              :                 UTIL_INC(DT_NODE_CHILD_IDX(node));                              \
      40              :         })
      41              : 
      42              : /**
      43              :  * @brief USB Audio 2 application event handlers
      44              :  */
      45            1 : struct uac2_ops {
      46              :         /**
      47              :          * @brief Start of Frame callback
      48              :          *
      49              :          * Notifies application about SOF event on the bus.
      50              :          * This callback is mandatory to register.
      51              :          *
      52              :          * @param dev USB Audio 2 device
      53              :          * @param user_data Opaque user data pointer
      54              :          */
      55            1 :         void (*sof_cb)(const struct device *dev, void *user_data);
      56              :         /**
      57              :          * @brief Terminal update callback
      58              :          *
      59              :          * Notifies application that host has enabled or disabled a terminal.
      60              :          * This callback is mandatory to register.
      61              :          *
      62              :          * @param dev USB Audio 2 device
      63              :          * @param terminal Terminal ID linked to AudioStreaming interface
      64              :          * @param enabled True if host enabled terminal, False otherwise
      65              :          * @param microframes True if USB connection speed uses microframes
      66              :          * @param user_data Opaque user data pointer
      67              :          */
      68            1 :         void (*terminal_update_cb)(const struct device *dev, uint8_t terminal,
      69              :                                    bool enabled, bool microframes,
      70              :                                    void *user_data);
      71              :         /**
      72              :          * @brief Get receive buffer address
      73              :          *
      74              :          * USB stack calls this function to obtain receive buffer address for
      75              :          * AudioStreaming interface. The buffer is owned by USB stack until
      76              :          * @ref data_recv_cb callback is called. The buffer must be sufficiently
      77              :          * aligned and otherwise suitable for use by UDC driver.
      78              :          * This callback is mandatory to register for devices receiving USB audio from the USB host.
      79              :          *
      80              :          * @param dev USB Audio 2 device
      81              :          * @param terminal Input Terminal ID linked to AudioStreaming interface
      82              :          * @param size Maximum number of bytes USB stack will write to buffer.
      83              :          * @param user_data Opaque user data pointer
      84              :          */
      85            1 :         void *(*get_recv_buf)(const struct device *dev, uint8_t terminal,
      86              :                               uint16_t size, void *user_data);
      87              :         /**
      88              :          * @brief Data received
      89              :          *
      90              :          * This function releases buffer obtained in @ref get_recv_buf after USB
      91              :          * has written data to the buffer and/or no longer needs it.
      92              :          * This callback is mandatory to register for devices receiving USB audio from the USB host.
      93              :          *
      94              :          * @param dev USB Audio 2 device
      95              :          * @param terminal Input Terminal ID linked to AudioStreaming interface
      96              :          * @param buf Buffer previously obtained via @ref get_recv_buf
      97              :          * @param size Number of bytes written to buffer
      98              :          * @param user_data Opaque user data pointer
      99              :          */
     100            1 :         void (*data_recv_cb)(const struct device *dev, uint8_t terminal,
     101              :                              void *buf, uint16_t size, void *user_data);
     102              :         /**
     103              :          * @brief Transmit buffer release callback
     104              :          *
     105              :          * This function releases buffer provided in @ref usbd_uac2_send when
     106              :          * the class no longer needs it.
     107              :          * This callback is mandatory to register if calling @ref usbd_uac2_send.
     108              :          *
     109              :          * @param dev USB Audio 2 device
     110              :          * @param terminal Output Terminal ID linked to AudioStreaming interface
     111              :          * @param buf Buffer previously provided via @ref usbd_uac2_send
     112              :          * @param user_data Opaque user data pointer
     113              :          */
     114            1 :         void (*buf_release_cb)(const struct device *dev, uint8_t terminal,
     115              :                                void *buf, void *user_data);
     116              :         /**
     117              :          * @brief Get Explicit Feedback value
     118              :          *
     119              :          * Explicit feedback value format depends terminal connection speed.
     120              :          * If device is High-Speed capable, it must use Q16.16 format if and
     121              :          * only if the @ref terminal_update_cb was called with microframes
     122              :          * parameter set to true. On Full-Speed only devices, or if High-Speed
     123              :          * capable device is operating at Full-Speed (microframes was false),
     124              :          * the format is Q10.14 stored on 24 least significant bits (i.e. 8 most
     125              :          * significant bits are ignored).
     126              :          * This callback is mandatory to register if there is USB Audio Streaming interface linked
     127              :          * to Input Terminal clocked from asynchronous clock (i.e. clock source without
     128              :          * sof-synchronized;) and there is no implicit-feedback; on the interface.
     129              :          *
     130              :          * @param dev USB Audio 2 device
     131              :          * @param terminal Input Terminal ID whose feedback should be returned
     132              :          * @param user_data Opaque user data pointer
     133              :          */
     134            1 :         uint32_t (*feedback_cb)(const struct device *dev, uint8_t terminal,
     135              :                                 void *user_data);
     136              :         /**
     137              :          * @brief Get active sample rate
     138              :          *
     139              :          * USB stack calls this function when the host asks for active sample
     140              :          * rate if the Clock Source entity supports more than one sample rate.
     141              :          * This function won't ever be called (should be NULL) if all Clock
     142              :          * Source entities support only one sample rate.
     143              :          *
     144              :          * @param dev USB Audio 2 device
     145              :          * @param clock_id Clock Source ID whose sample rate should be returned
     146              :          * @param user_data Opaque user data pointer
     147              :          *
     148              :          * @return Active sample rate in Hz
     149              :          */
     150            1 :         uint32_t (*get_sample_rate)(const struct device *dev, uint8_t clock_id,
     151              :                                     void *user_data);
     152              :         /**
     153              :          * @brief Set active sample rate
     154              :          *
     155              :          * USB stack calls this function when the host sets active sample rate.
     156              :          * This callback may be NULL if all Clock Source entities have only one
     157              :          * sample rate. USB stack sanitizes the sample rate to closest valid
     158              :          * rate for given Clock Source entity.
     159              :          *
     160              :          * @param dev USB Audio 2 device
     161              :          * @param clock_id Clock Source ID whose sample rate should be set
     162              :          * @param rate Sample rate in Hz
     163              :          * @param user_data Opaque user data pointer
     164              :          *
     165              :          * @return 0 on success, negative value on error
     166              :          */
     167            1 :         int (*set_sample_rate)(const struct device *dev, uint8_t clock_id,
     168              :                                uint32_t rate, void *user_data);
     169              : };
     170              : 
     171              : /**
     172              :  * @brief Register USB Audio 2 application callbacks.
     173              :  *
     174              :  * @param dev USB Audio 2 device instance
     175              :  * @param ops USB Audio 2 callback structure
     176              :  * @param user_data Opaque user data to pass to ops callbacks
     177              :  */
     178            1 : void usbd_uac2_set_ops(const struct device *dev,
     179              :                        const struct uac2_ops *ops, void *user_data);
     180              : 
     181              : /**
     182              :  * @brief Send audio data to output terminal
     183              :  *
     184              :  * Data buffer must be sufficiently aligned and otherwise suitable for use by
     185              :  * UDC driver.
     186              :  *
     187              :  * @note Buffer ownership is transferred to the stack in case of success, in
     188              :  * case of an error the caller retains the ownership of the buffer.
     189              :  *
     190              :  * @param dev USB Audio 2 device
     191              :  * @param terminal Output Terminal ID linked to AudioStreaming interface
     192              :  * @param data Buffer containing outgoing data
     193              :  * @param size Number of bytes to send
     194              :  *
     195              :  * @return 0 on success, negative value on error
     196              :  */
     197            1 : int usbd_uac2_send(const struct device *dev, uint8_t terminal,
     198              :                    void *data, uint16_t size);
     199              : 
     200              : /**
     201              :  * @}
     202              :  */
     203              : 
     204              : #endif /* ZEPHYR_INCLUDE_USB_CLASS_USBD_UAC2_H_ */
        

Generated by: LCOV version 2.0-1