include: usb: revise BOS support header

Hide parts that are not relevant to the application and are
only used internally by the stack. Add minimal documentation.

Signed-off-by: Johann Fischer <johann.fischer@nordicsemi.no>
This commit is contained in:
Johann Fischer 2023-07-06 15:14:36 +02:00 committed by Carles Cufí
commit 740f2697bc

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2018 Intel Corporation * Copyright (c) 2018 Intel Corporation
* Copyright (c) 2023 Nordic Semiconductor ASA
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -7,16 +8,37 @@
#ifndef ZEPHYR_INCLUDE_USB_BOS_H_ #ifndef ZEPHYR_INCLUDE_USB_BOS_H_
#define ZEPHYR_INCLUDE_USB_BOS_H_ #define ZEPHYR_INCLUDE_USB_BOS_H_
#if defined(CONFIG_USB_DEVICE_BOS) #include <stdint.h>
#define USB_DEVICE_BOS_DESC_DEFINE_HDR \
static __in_section(usb, bos_desc_area, 0) __aligned(1) __used /**
* @brief USB Binary Device Object Store support
* @defgroup usb_bos USB BOS support
* @ingroup usb
* @{
*/
/**
* @brief Helper macro to place the BOS compatibility descriptor
* in the right memory section.
*/
#define USB_DEVICE_BOS_DESC_DEFINE_CAP \ #define USB_DEVICE_BOS_DESC_DEFINE_CAP \
static __in_section(usb, bos_desc_area, 1) __aligned(1) __used static __in_section(usb, bos_desc_area, 1) __aligned(1) __used
#define USB_BOS_CAPABILITY_EXTENSION 0x02 /** Device capability type codes */
#define USB_BOS_CAPABILITY_PLATFORM 0x05 enum usb_bos_capability_types {
USB_BOS_CAPABILITY_EXTENSION = 0x02,
USB_BOS_CAPABILITY_PLATFORM = 0x05,
};
/* BOS Capability Descriptor */ /** BOS USB 2.0 extension capability descriptor */
struct usb_bos_capability_lpm {
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t bDevCapabilityType;
uint32_t bmAttributes;
} __packed;
/** BOS platform capability descriptor */
struct usb_bos_platform_descriptor { struct usb_bos_platform_descriptor {
uint8_t bLength; uint8_t bLength;
uint8_t bDescriptorType; uint8_t bDescriptorType;
@ -25,22 +47,14 @@ struct usb_bos_platform_descriptor {
uint8_t PlatformCapabilityUUID[16]; uint8_t PlatformCapabilityUUID[16];
} __packed; } __packed;
/* BOS Descriptor */ /** WebUSB specific part of platform capability descriptor */
struct usb_bos_descriptor {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t wTotalLength;
uint8_t bNumDeviceCaps;
} __packed;
/* BOS Capability webusb */
struct usb_bos_capability_webusb { struct usb_bos_capability_webusb {
uint16_t bcdVersion; uint16_t bcdVersion;
uint8_t bVendorCode; uint8_t bVendorCode;
uint8_t iLandingPage; uint8_t iLandingPage;
} __packed; } __packed;
/* BOS Capability MS OS Descriptors version 2 */ /** Microsoft OS 2.0 descriptor specific part of platform capability descriptor */
struct usb_bos_capability_msos { struct usb_bos_capability_msos {
uint32_t dwWindowsVersion; uint32_t dwWindowsVersion;
uint16_t wMSOSDescriptorSetTotalLength; uint16_t wMSOSDescriptorSetTotalLength;
@ -48,20 +62,47 @@ struct usb_bos_capability_msos {
uint8_t bAltEnumCode; uint8_t bAltEnumCode;
} __packed; } __packed;
struct usb_bos_capability_lpm { /**
* @brief Register BOS capability descriptor
*
* This function should be used by the application to register BOS capability
* descriptors before the USB device stack is enabled.
*
* @param[in] hdr Pointer to BOS capability descriptor
*/
void usb_bos_register_cap(struct usb_bos_platform_descriptor *hdr);
/**
* @cond INTERNAL_HIDDEN
* Internally used functions
*/
/* BOS Descriptor (root descriptor) */
struct usb_bos_descriptor {
uint8_t bLength; uint8_t bLength;
uint8_t bDescriptorType; uint8_t bDescriptorType;
uint8_t bDevCapabilityType; uint16_t wTotalLength;
uint32_t bmAttributes; uint8_t bNumDeviceCaps;
} __packed; } __packed;
#define USB_DEVICE_BOS_DESC_DEFINE_HDR \
static __in_section(usb, bos_desc_area, 0) __aligned(1) __used
size_t usb_bos_get_length(void); size_t usb_bos_get_length(void);
void usb_bos_fix_total_length(void); void usb_bos_fix_total_length(void);
void usb_bos_register_cap(struct usb_bos_platform_descriptor *hdr);
const void *usb_bos_get_header(void); const void *usb_bos_get_header(void);
#if defined(CONFIG_USB_DEVICE_BOS)
int usb_handle_bos(struct usb_setup_packet *setup, int32_t *len, uint8_t **data); int usb_handle_bos(struct usb_setup_packet *setup, int32_t *len, uint8_t **data);
#else #else
#define usb_handle_bos(x, y, z) -ENOTSUP #define usb_handle_bos(x, y, z) -ENOTSUP
#endif #endif
/** @endcond */
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_USB_BOS_H_ */ #endif /* ZEPHYR_INCLUDE_USB_BOS_H_ */