# USB device stack configuration options

# Copyright (c) 2016 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig USB_DEVICE_STACK
	bool "USB device stack"
	depends on USB_DEVICE_DRIVER || ARCH_POSIX
	help
	  Enable USB device stack.

if USB_DEVICE_STACK

module = USB_DEVICE
module-str = usb device
source "subsys/logging/Kconfig.template.log_config"

source "samples/subsys/usb/usb_pid.Kconfig"

config USB_DEVICE_VID
	hex "USB Vendor ID"
	default 0x2FE3
	help
	  USB device vendor ID. MUST be configured by vendor.

config USB_DEVICE_PID
	hex "USB Product ID"
	default 0x0100
	help
	  USB device product ID. MUST be configured by vendor.

config USB_DEVICE_MANUFACTURER
	string "USB manufacturer name"
	default "ZEPHYR"
	help
	  USB device Manufacturer string. MUST be configured by vendor.

config USB_DEVICE_PRODUCT
	string "USB product name"
	default "USB-DEV"
	help
	  USB device Product string. MUST be configured by vendor.

config USB_DEVICE_SN
	string "USB serial number"
	default "ABCDEF012345" if USB_MASS_STORAGE
	default "0.01"
	help
	  USB device SerialNumber string. MUST be configured by vendor.

config USB_COMPOSITE_DEVICE
	bool "Enable composite device driver"
	depends on USB
	help
	  Enable composite USB device driver.

config USB_REQUEST_BUFFER_SIZE
	int "Set buffer size for Standard, Class and Vendor request handlers"
	range 256 65536 if USB_DEVICE_NETWORK_RNDIS
	range 8 65536
	default 256 if USB_DEVICE_NETWORK_RNDIS
	default 1024 if USB_DEVICE_LOOPBACK
	default 128

config USB_NUMOF_EP_WRITE_RETRIES
	int "Number of endpoint write retries"
	default 3
	help
	  Number of endpoint write retries.

config USB_DEVICE_SOF
	bool "Enable Start of Frame processing in events"

config USB_DEVICE_REMOTE_WAKEUP
	bool "Enable support for remote wakeup"
	help
	  This option requires USBD peripheral driver to also support remote wakeup.

config USB_DEVICE_DISABLE_ZLP_EPIN_HANDLING
	bool
	help
	  Stack should not handle ZLP for Variable-length Data Stage
	  because it is taken over by the hardware.

config USB_DEVICE_BOS
	bool "Enable USB Binary Device Object Store (BOS)"

config USB_DEVICE_OS_DESC
	bool "Enable MS OS Descriptors support"

menuconfig USB_VBUS_GPIO
	bool "Control VBUS via GPIO pin"
	depends on GPIO
	help
	  The USB VBUS signal is connected via a GPIO pin.

if USB_VBUS_GPIO

config USB_VBUS_GPIO_DEV_NAME
	string "GPIO Device"
	default "GPIO_0"
	help
	  The device name of the GPIO device to which the USB_VBUS_EN signal is
	  connected.

config USB_VBUS_GPIO_PIN_NUM
	int "GPIO pin number"
	default 0
	help
	  The number of the GPIO pin to which the USB_VBUS_EN signal is
	  connected.

endif # USB_VBUS_GPIO

source "subsys/usb/class/Kconfig"

endif # USB_DEVICE_STACK
