# Copyright (c) 2023 Cypress Semiconductor Corporation (an Infineon company) or
# an affiliate of Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0

if BT_AIROC

choice  AIROC_PART
	prompt "Select AIROC part"

config CYW4343W
	bool "CYW4343W"
	help
	  Enable Infineon CYW4343W BLE connectivity,
	  More information about CYW4343W device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw4343w/

config CYW4373
	bool "CYW4373"
	help
	  Enable Infineon CYW4373 BLE connectivity,
	  More information about CYW4373 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw4373/

config CYW43012
	bool "CYW43012"
	help
	  Enable Infineon CYW43012 BLE connectivity,
	  More information about CYW43012 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43012/

config CYW43438
	bool "CYW43438"
	help
	  Enable Infineon CYW43438 BLE connectivity,
	  More information about CYW43438 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43438/

config CYW43439
	bool "CYW43439"
	help
	  Enable Infineon CYW43439 BLE connectivity,
	  More information about CYW43439 device you can find on
	  https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-wi-fi-plus-bluetooth-combos/cyw43439/

config BT_AIROC_CUSTOM
	bool "Custom AIROC device/module"
	help
	  Select Custom AIROC device/module. For this option,
	  user must to provide path to BT firmware HCD file for
	  custom or vendor AIROC modules in AIROC_CUSTOM_FIRMWARE_HCD_BLOB.

endchoice

choice CYW43012_MODULE
	prompt "Select CYW43012 module"
	depends on CYW43012

config CYW43012_MURATA_1LV
	bool "MURATA-1LV"
	help
	  Murata Type 1LV module based on Infineon CYW43012 combo chipset
	  which supports Wi-Fi® 802.11a/b/g/n + Bluetooth® 5.0 BR/EDR/LE
	  up to 72.2Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate
	  on Bluetooth®. 2Mbps LE PHY is also supported.

	  Detailed information about Murata Type 1LV module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1lv

endchoice

choice CYW4343W_MODULE
	prompt "Select CYW4343W module"
	depends on CYW4343W

config CYW4343W_MURATA_1DX
	bool "MURATA-1DX"
	help
	  Murata Type 1DX modules based on Infineon CYW4343W combo chipset
	  which supports Wi-Fi® 802.11b/g/n + Bluetooth® 5.1 BR/EDR/LE
	  up to 65Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate
	  on Bluetooth®.

	  Detailed information about Type 1DX module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1dx

endchoice

choice CYW4373_MODULE
	prompt "Select CYW4373 module"
	depends on CYW4373

config CYW4373_STERLING_LWB5PLUS
	bool "STERLING-LWB5plus"
	help
	  Laird Sterling LWB5+ 802.11ac / Bluetooth 5.0 M.2 Carrier Board
	  (E-Type Key w/ SDIO/UART)

	  Detailed information about Type Sterling LWB5+ module you can find on
	  https://www.lairdconnect.com/wireless-modules/wifi-modules-bluetooth/sterling-lwb5-plus-wifi-5-bluetooth-5-module

endchoice

choice CYW43439_MODULE
	prompt "Select CYW43439 module"
	depends on CYW43439

config CYW43439_MURATA_1YN
	bool "MURATA_1YN"
	help
	  Murata Type 1YN module based on Infineon CYW43439 combo chipset
	  which supports Wi-Fi® 802.11b/g/n + Bluetooth® 5.2 BR/EDR/LE
	  up to 65Mbps PHY data rate on Wi-fi® and 3Mbps PHY data rate on
	  Bluetooth®.

	  Detailed information about Murata Type 1YN module you can find on
	  https://www.murata.com/en-us/products/connectivitymodule/wi-fi-bluetooth/overview/lineup/type1yn

endchoice

config AIROC_CUSTOM_FIRMWARE_HCD_BLOB
	depends on BT_AIROC_CUSTOM
	string  "Path to user BT firmware HCD file"
	help
	  Path to BT firmware HCD file for custom or vendor CYW43xx modules.
	  It can be absolute path, or relative from project folder.

# Change size of command lengths. It for vendor commands related to
# firmware downloading.
config BT_BUF_CMD_TX_SIZE
	default 255

endif # BT_AIROC

if BT_PSOC6_BLESS

config BT_PSOC6_BLESS_MAX_TX_PAYLOAD
	int "Max Tx payload size"
	range 27 251
	default 27

config BT_PSOC6_BLESS_MAX_RX_PAYLOAD
	int "Max Rx payload size"
	range 27 251
	default 27

endif # BT_PSOC6_BLESS
