# 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"
	select USB_DEVICE_DRIVER
	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 "Composite device driver"
	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 64 512 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 "Start of Frame processing in events"
	default y if (USB_DEVICE_AUDIO && NRFX_USBD)

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

config USB_DEVICE_OS_DESC
	bool "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.

config USB_DEVICE_INITIALIZE_AT_BOOT
	bool "Initialize USB device support at boot"
	depends on USB_CDC_ACM
	help
	  Use CDC ACM UART as backend for console, shell, or logging.

source "subsys/usb/device/class/Kconfig"

endif # USB_DEVICE_STACK
