# Kconfig - GATT Device Information service
#
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig BT_GATT_DIS
	bool "Enable GATT Device Information service"

if BT_GATT_DIS

config BT_GATT_DIS_MODEL
	string "Model name"
	default SOC
	help
	 The device model inside Device Information Service.

config BT_GATT_DIS_MANUF
	string "Manufacturer name"
	default "Manufacturer"
	help
	 The device manufacturer inside Device Information Service.

config BT_GATT_DIS_PNP
	bool "Enable PnP_ID characteristic"
	default y
	help
	 Enable PnP_ID characteristic in Device Information Service.

if BT_GATT_DIS_PNP

config BT_GATT_DIS_PNP_VID_SRC
	int "Vendor ID source"
	range 1 2
	default 1
	help
	 The Vendor ID Source field designates which organization assigned the
	 value used in the Vendor ID field value.
	 The possible values are:
	 - 1 Bluetooth SIG, the Vendor ID was assigned by the Bluetooth SIG
	 - 2 USB IF, the Vendor ID was assigned by the USB IF

config BT_GATT_DIS_PNP_VID
	hex "Vendor ID"
	range 0 0xFFFF
	default 0
	help
	 The Vendor ID field is intended to uniquely identify the vendor of the
	 device. This field is used in conjunction with Vendor ID Source field,
	 which determines which organization assigned the Vendor ID field value.
	 Note: The Bluetooth Special Interest Group assigns Device ID Vendor ID,
	 and the USB Implementer’s Forum assigns Vendor IDs,
	 either of which can be used for the Vendor ID field value.
	 Device providers should procure the Vendor ID from the USB Implementer’s
	 Forum or the Company Identifier from the Bluetooth SIG.

config BT_GATT_DIS_PNP_PID
	hex "Product ID"
	range 0 0xFFFF
	default 0
	help
	 The Product ID field is intended to distinguish between different products
	 made by the vendor identified with the Vendor ID field. The vendors
	 themselves manage Product ID field values.

config BT_GATT_DIS_PNP_VER
	hex "Product Version"
	range 0 0xFFFF
	default 1
	help
	 The Product Version field is a numeric expression identifying the device
	 release number in Binary-Coded Decimal. This is a vendor-assigned value,
	 which defines the version of the product identified by the Vendor ID and
	 Product ID fields. This field is intended to differentiate between
	 versions of products with identical Vendor IDs and Product IDs.
	 The value of the field value is 0xJJMN for version JJ.M.N
	 (JJ – major version number, M – minor version number,
	 N – sub-minor version number); e.g., version 2.1.3 is represented with
	 value 0x0213 and version 2.0.0 is represented with a value of 0x0200.
	 When upward-compatible changes are made to the device, it is recommended
	 that the minor version number be incremented. If incompatible changes are
	 made to the device, it is recommended that the major version number be
	 incremented. The sub-minor version is incremented for bug fixes.

endif #BT_GATT_DIS_PNP

endif #BT_GATT_DIS
