/*
 * 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 */
