# 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 Support"
	depends on USB_DEVICE_DRIVER || ARCH_POSIX
	select HWINFO
	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 device Serial Number String"
	default "0123456789ABCDEF"
	help
	  Placeholder for USB device Serial Number String.
	  Serial Number String will be derived from
	  Hardware Information Driver (HWINFO).

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

config USB_MAX_NUM_TRANSFERS
    int "Set number of USB transfer data buffers"
    range 1 32
    default 4
    help
        Allocates buffers used for parallel transfers. Increase this number
        according to USB devices count.

config USB_DEVICE_BLUETOOTH_BIG_BUF
	bool
	# Hidden option to simplify bluetooth buffer requirement
	# TODO: Add BUF reserve in H4 mode and ISO?
	default y if BT_BUF_ACL_RX_SIZE > 123 # 4 byte header
	default y if BT_BUF_ACL_TX_SIZE > 123 # 4 byte header
	default y if BT_BUF_EVT_RX_SIZE > 125 # 2 byte header
	default y if BT_BUF_CMD_TX_SIZE > 124 # 3 byte header

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 266 if (USB_DEVICE_BLUETOOTH && USB_DEVICE_BLUETOOTH_BIG_BUF)
	default 1024 if USB_DEVICE_LOOPBACK
	default 128

config USB_MAX_ALT_SETTING
	int "Size of the array where alternate settings are stored"
	range 0 16
	default 8
	help
	  Size of the array where alternate settings are stored.
	  Should not be smaller than the number of interfaces.

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"
	default y if (USB_DEVICE_AUDIO && NRFX_USBD)

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_BOS
	bool "Enable USB Binary Device Object Store (BOS)"

config USB_DEVICE_OS_DESC
	bool "Enable MS OS Descriptors support"

config USB_SELF_POWERED
	bool "Set Self-powered characteristic"
	default y
	help
	  Set Self-powered characteristic in bmAttributes to indicate
	  self powered USB device.

config USB_MAX_POWER
	int "Set bMaxPower value"
	default 50
	range 0 250
	help
	  Set bMaxPower value in the Standard Configuration Descriptor,
	  the result is 2mA times the value provided.

config USB_WORKQUEUE
	bool "Use a dedicate work queue in the USB subsystem"
	default y if USB_CDC_ACM
	help
	  This option provides a dedicated work queue that is used for
	  all offloaded operations initiated by the USB subsystem.
	  This prevents deadlock situations where tasks on the system
	  workqueue inadvertently initiate operations that block, such
	  as UART transmission on CDC-ACM, preventing the system work
	  queue from making progress on the USB tasks that would
	  release the task.

	  Without this the system work queue is used for all USB
	  offloaded transfers.

config USB_WORKQUEUE_STACK_SIZE
	int "USB workqueue stack size"
	depends on USB_WORKQUEUE
	default 4096 if COVERAGE
	default 1024

config USB_WORKQUEUE_PRIORITY
	int "USB workqueue priority"
	depends on USB_WORKQUEUE
	default -2 if COOP_ENABLED && !PREEMPT_ENABLED
	default  0 if !COOP_ENABLED
	default -1
	help
	  By default, USB work queue priority is the lowest cooperative
	  priority. This means that any work handler, once started, won't
	  be preempted by any other thread until finished.

source "subsys/usb/class/Kconfig"

endif # USB_DEVICE_STACK
