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:
parent
430818ecaa
commit
740f2697bc
1 changed files with 61 additions and 20 deletions
|
@ -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_ */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue