/* SPDX-License-Identifier: BSD-3-Clause */

/***************************************************************************
 *
 *
 * Copyright(c) 2015,2016 Intel Corporation.
 * Copyright(c) 2017 PHYTEC Messtechnik GmbH
 * Copyright(c) 2018 Nordic Semiconductor ASA
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in
 * the documentation and/or other materials provided with the
 * distribution.
 * * Neither the name of Intel Corporation nor the names of its
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 ***************************************************************************/

/**
 * @file
 * @brief useful constants and macros for the USB application
 *
 * This file contains useful constants and macros for the USB applications.
 */

#include <version.h>
#include <usb/usb_ch9.h>

#ifndef ZEPHYR_INCLUDE_USB_USB_COMMON_H_
#define ZEPHYR_INCLUDE_USB_USB_COMMON_H_

/*
 * This header and macros below are deprecated in 2.7 release.
 * Please replace with macros from Chapter 9 header, include/usb/usb_ch9.h
 */
#warning "<usb/usb_common.h> header is deprecated, use <usb/usb_ch9.h> instead"

#define BCD(x) __DEPRECATED_MACRO USB_DEC_TO_BCD(dec)

/* Descriptor size in bytes */
#define USB_DEVICE_DESC_SIZE		__DEPRECATED_MACRO 18
#define USB_CONFIGURATION_DESC_SIZE	__DEPRECATED_MACRO 9
#define USB_INTERFACE_DESC_SIZE		__DEPRECATED_MACRO 9
#define USB_ENDPOINT_DESC_SIZE		__DEPRECATED_MACRO 7
#define USB_STRING_DESC_SIZE		__DEPRECATED_MACRO 4
#define USB_HID_DESC_SIZE		__DEPRECATED_MACRO 9
#define USB_DFU_DESC_SIZE		__DEPRECATED_MACRO 9
#define USB_DEVICE_QUAL_DESC_SIZE	__DEPRECATED_MACRO 10
#define USB_INTERFACE_ASSOC_DESC_SIZE	__DEPRECATED_MACRO 8

/* Descriptor type */
#define USB_DEVICE_DESC			__DEPRECATED_MACRO 0x01U
#define USB_CONFIGURATION_DESC		__DEPRECATED_MACRO 0x02U
#define USB_STRING_DESC			__DEPRECATED_MACRO 0x03U
#define USB_INTERFACE_DESC		__DEPRECATED_MACRO 0x04U
#define USB_ENDPOINT_DESC		__DEPRECATED_MACRO 0x05U
#define USB_DEVICE_QUAL_DESC		__DEPRECATED_MACRO 0x06U
#define USB_OTHER_SPEED			__DEPRECATED_MACRO 0x07U
#define USB_INTERFACE_POWER		__DEPRECATED_MACRO 0x08U
#define USB_INTERFACE_ASSOC_DESC	__DEPRECATED_MACRO 0x0BU
#define USB_DEVICE_CAPABILITY_DESC	__DEPRECATED_MACRO 0x10U
#define USB_HID_DESC			__DEPRECATED_MACRO 0x21U
#define USB_HID_REPORT_DESC		__DEPRECATED_MACRO 0x22U
#define USB_CS_INTERFACE_DESC		__DEPRECATED_MACRO 0x24U
#define USB_CS_ENDPOINT_DESC		__DEPRECATED_MACRO 0x25U
#define USB_DFU_FUNCTIONAL_DESC		__DEPRECATED_MACRO 0x21U
#define USB_ASSOCIATION_DESC		__DEPRECATED_MACRO 0x0BU
#define USB_BINARY_OBJECT_STORE_DESC	__DEPRECATED_MACRO 0x0FU

/* Useful define */
#define USB_1_1				__DEPRECATED_MACRO 0x0110
#define USB_2_0				__DEPRECATED_MACRO 0x0200
/* Set USB version to 2.1 so that the host will request the BOS descriptor */
#define USB_2_1				__DEPRECATED_MACRO 0x0210

#define BCDDEVICE_RELNUM		__DEPRECATED_MACRO USB_BCD_DRN

/* Highest value of Frame Number in SOF packets. */
#define USB_SOF_MAX			__DEPRECATED_MACRO 2047

/* bmAttributes:
 * D7:Reserved, always 1,
 * D6:Self-Powered -> 1,
 * D5:Remote Wakeup -> 0,
 * D4...0:Reserved -> 0
 */
#define USB_CONFIGURATION_ATTRIBUTES_REMOTE_WAKEUP	__DEPRECATED_MACRO BIT(5)
#define USB_CONFIGURATION_ATTRIBUTES_SELF_POWERED	__DEPRECATED_MACRO BIT(6)
#define USB_CONFIGURATION_ATTRIBUTES BIT(7)		__DEPRECATED_MACRO \
	| ((COND_CODE_1(CONFIG_USB_SELF_POWERED, \
	   (USB_CONFIGURATION_ATTRIBUTES_SELF_POWERED), (0)))   \
	| (COND_CODE_1(CONFIG_USB_DEVICE_REMOTE_WAKEUP,         \
	   (USB_CONFIGURATION_ATTRIBUTES_REMOTE_WAKEUP), (0))))

/* Classes */
#define AUDIO_CLASS			__DEPRECATED_MACRO 0x01
#define COMMUNICATION_DEVICE_CLASS	__DEPRECATED_MACRO 0x02
#define COMMUNICATION_DEVICE_CLASS_DATA	__DEPRECATED_MACRO 0x0A
#define HID_CLASS			__DEPRECATED_MACRO 0x03
#define MASS_STORAGE_CLASS		__DEPRECATED_MACRO 0x08
#define WIRELESS_DEVICE_CLASS		__DEPRECATED_MACRO 0xE0
#define MISC_CLASS			__DEPRECATED_MACRO 0xEF
#define CUSTOM_CLASS			__DEPRECATED_MACRO 0xFF
#define DFU_DEVICE_CLASS		__DEPRECATED_MACRO 0xFE

/* Sub-classes */
#define CDC_NCM_SUBCLASS		__DEPRECATED_MACRO 0x0d
#define BOOT_INTERFACE_SUBCLASS		__DEPRECATED_MACRO 0x01
#define SCSI_TRANSPARENT_SUBCLASS	__DEPRECATED_MACRO 0x06
#define DFU_INTERFACE_SUBCLASS		__DEPRECATED_MACRO 0x01
#define RF_SUBCLASS			__DEPRECATED_MACRO 0x01
#define CUSTOM_SUBCLASS			__DEPRECATED_MACRO 0xFF
/* Misc subclasses */
#define MISC_RNDIS_SUBCLASS		__DEPRECATED_MACRO 0x04

/* Protocols */
#define V25TER_PROTOCOL			__DEPRECATED_MACRO 0x01
#define MOUSE_PROTOCOL			__DEPRECATED_MACRO 0x02
#define BULK_ONLY_PROTOCOL		__DEPRECATED_MACRO 0x50
#define DFU_RUNTIME_PROTOCOL		__DEPRECATED_MACRO 0x01
#define DFU_MODE_PROTOCOL		__DEPRECATED_MACRO 0x02
#define BLUETOOTH_PROTOCOL		__DEPRECATED_MACRO 0x01
/* CDC ACM protocols */
#define ACM_VENDOR_PROTOCOL		__DEPRECATED_MACRO 0xFF
/* Misc protocols */
#define MISC_ETHERNET_PROTOCOL		__DEPRECATED_MACRO 0x01

#endif /* ZEPHYR_INCLUDE_USB_USB_COMMON_H_ */
