| /* |
| * Copyright (c) 2022 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief New experimental USB device stack APIs and structures |
| * |
| * This file contains the USB device stack APIs and structures. |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_USBH_H_ |
| #define ZEPHYR_INCLUDE_USBH_H_ |
| |
| #include <stdint.h> |
| #include <zephyr/device.h> |
| #include <zephyr/net/buf.h> |
| #include <zephyr/sys/dlist.h> |
| #include <zephyr/drivers/usb/uhc.h> |
| #include <zephyr/sys/iterable_sections.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * @brief USB HOST Core Layer API |
| * @defgroup _usb_host_core_api USB Host Core API |
| * @{ |
| */ |
| |
| /** |
| * USB host support runtime context |
| */ |
| struct usbh_contex { |
| /** Name of the USB device */ |
| const char *name; |
| /** Access mutex */ |
| struct k_mutex mutex; |
| /** Pointer to UHC device struct */ |
| const struct device *dev; |
| /** peripheral list */ |
| sys_dlist_t peripherals; |
| }; |
| |
| #define USBH_CONTROLLER_DEFINE(device_name, uhc_dev) \ |
| static STRUCT_SECTION_ITERABLE(usbh_contex, device_name) = { \ |
| .name = STRINGIFY(device_name), \ |
| .mutex = Z_MUTEX_INITIALIZER(device_name.mutex), \ |
| .dev = uhc_dev, \ |
| } |
| |
| /** |
| * @brief USB host peripheral structure |
| */ |
| struct usbh_peripheral { |
| /** Peripheral dlist node */ |
| sys_dnode_t node; |
| /** Peripheral address */ |
| uint8_t addr; |
| /** Detected speed (TBD) */ |
| uint8_t speed; |
| }; |
| |
| /** |
| * @brief Class Code |
| */ |
| struct usbh_class_code { |
| /** Device Class Code */ |
| uint8_t dclass; |
| /** Class Subclass Code */ |
| uint8_t sub; |
| /** Class Protocol Code */ |
| uint8_t proto; |
| /** Reserved */ |
| uint8_t reserved; |
| }; |
| |
| /** |
| * @brief USB host class data and class instance API |
| */ |
| struct usbh_class_data { |
| /** Class code supported by this instance */ |
| struct usbh_class_code code; |
| |
| /** Initialization of the class implementation */ |
| /* int (*init)(struct usbh_contex *const uhs_ctx); */ |
| /** Request completion event handler */ |
| int (*request)(struct usbh_contex *const uhs_ctx, |
| struct uhc_transfer *const xfer, int err); |
| /** Device connected handler */ |
| int (*connected)(struct usbh_contex *const uhs_ctx); |
| /** Device removed handler */ |
| int (*removed)(struct usbh_contex *const uhs_ctx); |
| /** Bus remote wakeup handler */ |
| int (*rwup)(struct usbh_contex *const uhs_ctx); |
| /** Bus suspended handler */ |
| int (*suspended)(struct usbh_contex *const uhs_ctx); |
| /** Bus resumed handler */ |
| int (*resumed)(struct usbh_contex *const uhs_ctx); |
| }; |
| |
| /** |
| */ |
| #define USBH_DEFINE_CLASS(name) \ |
| static STRUCT_SECTION_ITERABLE(usbh_class_data, name) |
| |
| |
| /** |
| * @brief Initialize the USB host support; |
| * |
| * @param[in] uhs_ctx Pointer to USB host support context |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbh_init(struct usbh_contex *uhs_ctx); |
| |
| /** |
| * @brief Enable the USB host support and class instances |
| * |
| * This function enables the USB host support. |
| * |
| * @param[in] uhs_ctx Pointer to USB host support context |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbh_enable(struct usbh_contex *uhs_ctx); |
| |
| /** |
| * @brief Disable the USB host support |
| * |
| * This function disables the USB host support. |
| * |
| * @param[in] uhs_ctx Pointer to USB host support context |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbh_disable(struct usbh_contex *uhs_ctx); |
| |
| /** |
| * @brief Shutdown the USB host support |
| * |
| * This function completely disables the USB host support. |
| * |
| * @param[in] uhs_ctx Pointer to USB host support context |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbh_shutdown(struct usbh_contex *const uhs_ctx); |
| |
| /** |
| * @} |
| */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_USBH_H_ */ |