| /* |
| * Copyright (c) 2023 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief MS OS 2.0 descriptor definitions |
| * |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_USB_MSOS_DESC_H |
| #define ZEPHYR_INCLUDE_USB_MSOS_DESC_H |
| |
| #include <stdint.h> |
| |
| enum msosv2_descriptor_index { |
| MS_OS_20_DESCRIPTOR_INDEX = 0x07, |
| MS_OS_20_SET_ALT_ENUMERATION = 0x08, |
| }; |
| |
| enum msosv2_descriptor_type { |
| MS_OS_20_SET_HEADER_DESCRIPTOR = 0x00, |
| MS_OS_20_SUBSET_HEADER_CONFIGURATION = 0x01, |
| MS_OS_20_SUBSET_HEADER_FUNCTION = 0x02, |
| MS_OS_20_FEATURE_COMPATIBLE_ID = 0x03, |
| MS_OS_20_FEATURE_REG_PROPERTY = 0x04, |
| MS_OS_20_FEATURE_MIN_RESUME_TIME = 0x05, |
| MS_OS_20_FEATURE_MODEL_ID = 0x06, |
| MS_OS_20_FEATURE_CCGP_DEVICE = 0x07, |
| MS_OS_20_FEATURE_VENDOR_REVISION = 0x08 |
| }; |
| |
| enum msosv2_property_data_type { |
| MS_OS_20_PROPERTY_DATA_RESERVED = 0, |
| MS_OS_20_PROPERTY_DATA_REG_SZ = 1, |
| MS_OS_20_PROPERTY_DATA_REG_EXPAND_SZ = 2, |
| MS_OS_20_PROPERTY_DATA_REG_BINARY = 3, |
| MS_OS_20_PROPERTY_DATA_REG_DWORD_LITTLE_ENDIAN = 4, |
| MS_OS_20_PROPERTY_DATA_REG_DWORD_BIG_ENDIAN = 5, |
| MS_OS_20_PROPERTY_DATA_REG_LINK = 6, |
| MS_OS_20_PROPERTY_DATA_REG_MULTI_SZ = 7 |
| }; |
| |
| /* Microsoft OS 2.0 descriptor set header */ |
| struct msosv2_descriptor_set_header { |
| uint16_t wLength; |
| uint16_t wDescriptorType; |
| uint32_t dwWindowsVersion; |
| uint16_t wTotalLength; |
| } __packed; |
| |
| /* Microsoft OS 2.0 configuration subset header |
| * This header is for composite devices with multiple configurations. |
| */ |
| struct msosv2_configuration_subset_header { |
| uint16_t wLength; |
| uint16_t wDescriptorType; |
| uint8_t bConfigurationValue; |
| uint8_t bReserved; |
| uint16_t wTotalLength; |
| } __packed; |
| |
| /* Microsoft OS 2.0 function subset header |
| * Note: This must be used if your device has multiple interfaces and cannot be used otherwise. |
| */ |
| struct msosv2_function_subset_header { |
| uint16_t wLength; |
| uint16_t wDescriptorType; |
| uint8_t bFirstInterface; |
| uint8_t bReserved; |
| uint16_t wSubsetLength; |
| } __packed; |
| |
| /* Microsoft OS 2.0 compatible ID descriptor */ |
| struct msosv2_compatible_id { |
| uint16_t wLength; |
| uint16_t wDescriptorType; |
| uint8_t CompatibleID[8]; |
| uint8_t SubCompatibleID[8]; |
| } __packed; |
| |
| /* Microsoft OS 2.0 Registry property descriptor: DeviceInterfaceGUIDs */ |
| struct msosv2_guids_property { |
| uint16_t wLength; |
| uint16_t wDescriptorType; |
| uint16_t wPropertyDataType; |
| uint16_t wPropertyNameLength; |
| uint8_t PropertyName[42]; |
| uint16_t wPropertyDataLength; |
| uint8_t bPropertyData[80]; |
| } __packed; |
| |
| /* DeviceInterfaceGUIDs */ |
| #define DEVICE_INTERFACE_GUIDS_PROPERTY_NAME \ |
| 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, \ |
| 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, \ |
| 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, \ |
| 'D', 0x00, 's', 0x00, 0x00, 0x00 |
| |
| #endif /* ZEPHYR_INCLUDE_USB_MSOS_DESC_H */ |