# Kconfig - USB class drivers configuration options

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

config USB_CDC_ACM
	bool "USB CDC ACM Device Class Driver"
	select SERIAL_HAS_DRIVER
	select SERIAL_SUPPORT_INTERRUPT
	select RING_BUFFER
	help
	  USB CDC ACM device class driver

if USB_CDC_ACM

config USB_CDC_ACM_RINGBUF_SIZE
	int "USB CDC ACM ring buffer size"
	default 1024
	help
	  USB CDC ACM ring buffer size

config CDC_ACM_PORT_NAME_0
	string "CDC ACM class device driver port name"
	default "CDC_ACM_0"
	help
	  Port name through which CDC ACM class device driver is accessed

if USB_COMPOSITE_DEVICE

config CDC_ACM_PORT_1
	bool "Enable virtual port 1"
	help
	  Enable CDC ACM Virtual port 1

config CDC_ACM_PORT_NAME_1
	string "CDC ACM class device driver port name"
	depends on CDC_ACM_PORT_1
	default "CDC_ACM_1"
	help
	  Port name through which CDC ACM class device driver is accessed

endif # USB_COMPOSITE_DEVICE

config CDC_ACM_INTERRUPT_EP_MPS
	int
	default 16
	help
	  CDC ACM class interrupt IN endpoint size

config CDC_ACM_BULK_EP_MPS
	int
	default 64
	help
	  CDC ACM class bulk endpoints size

module = USB_CDC_ACM
module-str = usb cdc acm
source "subsys/logging/Kconfig.template.log_config"

endif # USB_CDC_ACM

config USB_MASS_STORAGE
	bool "USB Mass Storage Device Class Driver"
	select DISK_ACCESS
	help
	  USB Mass Storage device class driver

config MASS_STORAGE_DISK_NAME
	string "Mass storage disk or drive name"
	depends on USB_MASS_STORAGE
	default "RAM"
	help
	  Mass storage device disk or drive name

config MASS_STORAGE_BULK_EP_MPS
	int
	depends on USB_MASS_STORAGE
	default 64
	range 8 64
	help
	  Mass storage device class bulk endpoints size

if USB_MASS_STORAGE
module = USB_MASS_STORAGE
module-str = usb mass storage
source "subsys/logging/Kconfig.template.log_config"
endif

config USB_DEVICE_BLUETOOTH
	bool "USB Bluetooth Device Class Driver"
	select BT
	select BT_HCI_RAW
	help
	  USB Bluetooth device class driver

config BLUETOOTH_INT_EP_MPS
	int
	depends on USB_DEVICE_BLUETOOTH
	default 16
	range 8 64
	help
	  Bluetooth device class interrupt endpoint size

config BLUETOOTH_BULK_EP_MPS
	int
	depends on USB_DEVICE_BLUETOOTH
	default 64
	range 8 64
	help
	  Bluetooth device class bulk endpoint size

config USB_DEVICE_LOOPBACK
	bool "USB Loopback Function Driver"
	help
	  USB Loopback Function Driver

config LOOPBACK_BULK_EP_MPS
	int
	depends on USB_DEVICE_LOOPBACK
	default 64
	help
	  Loopback Function bulk endpoint size

source "subsys/usb/class/netusb/Kconfig"

source "subsys/usb/class/hid/Kconfig"

config USB_DFU_CLASS
	bool "USB DFU Class Driver"
	select MPU_ALLOW_FLASH_WRITE
	select POLL
	depends on IMG_MANAGER
	help
	  USB DFU class driver

config USB_DFU_WAIT_DELAY_MS
	int
	depends on USB_DFU_CLASS
	default 12000
	help
	  A thread can wait for a prescribed time (in ms) for DFU to begin

config USB_DFU_MAX_XFER_SIZE
	int
	depends on USB_DFU_CLASS
	default 64

config USB_DFU_DETACH_TIMEOUT
	int
	depends on USB_DFU_CLASS
	default 1000
