# 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"

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 "Use Interface Association Descriptor code triple"
	help
	  This option modifies the code triple in the device descriptor
	  to signal that one of the functions has two or more interfaces and
	  uses the Interface Association Descriptor.

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 && NRF_USBD_COMMON)

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_GCOV
	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
