# Copyright (c) 2022 The ZMK Contributors
# SPDX-License-Identifier: MIT

if ZMK_SPLIT && ZMK_SPLIT_BLE

menu "BLE Transport"

config ZMK_SPLIT_BLE_PRIORITY
    int "BLE transport priority"
    help
        Lower number priorities transports are favored over higher numbers.

# Added for backwards compatibility. New shields / board should set `ZMK_SPLIT_ROLE_CENTRAL` only.
config ZMK_SPLIT_BLE_ROLE_CENTRAL
    bool
    select ZMK_SPLIT_ROLE_CENTRAL

config ZMK_SPLIT_ROLE_CENTRAL
    select BT_CENTRAL
    select BT_GATT_CLIENT
    select BT_GATT_AUTO_DISCOVER_CCC
    select BT_SCAN_WITH_IDENTITY

# Bump this value needed for concurrent GATT discovery of splits
config BT_L2CAP_TX_BUF_COUNT
    default 5 if ZMK_SPLIT_ROLE_CENTRAL

if ZMK_SPLIT_ROLE_CENTRAL

config ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS
    int "Number of peripherals that will connect to the central."

menuconfig ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING
    bool "Fetch Peripheral Battery Level Info"
    help
      Adds internal support for fetching the battery levels from peripherals
      and generating events in the ZMK eventing system.

if ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING

config ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_QUEUE_SIZE
    int "Max number of battery level events to queue when received from peripherals"
    default ZMK_SPLIT_BLE_CENTRAL_PERIPHERALS

config ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY
    bool "Proxy Peripheral Battery Level Info"
    help
      Adds support for reporting the battery levels of connected split
      peripherals through an additional Battery Level service.

endif

config ZMK_SPLIT_BLE_CENTRAL_POSITION_QUEUE_SIZE
    int "Max number of key position state events to queue when received from peripherals"
    default 5

config ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE
    int "BLE split central write thread stack size"
    default 512

config ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_QUEUE_SIZE
    int "Max number of behavior run events to queue to send to the peripheral(s)"
    default 5

config ZMK_SPLIT_BLE_PREF_INT
    int "Connection interval to use for split central/peripheral connection"
    default 6

config ZMK_SPLIT_BLE_PREF_LATENCY
    int "Latency to use for split central/peripheral connection"
    default 30

config ZMK_SPLIT_BLE_PREF_TIMEOUT
    int "Supervision timeout to use for split central/peripheral connection"
    default 400

endif # ZMK_SPLIT_ROLE_CENTRAL

if !ZMK_SPLIT_ROLE_CENTRAL

config ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE
    int "BLE split peripheral notify thread stack size"
    default 756

config ZMK_SPLIT_BLE_PERIPHERAL_PRIORITY
    int "BLE split peripheral notify thread priority"
    default 5

config ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE
    int "Max number of key position state events to queue to send to the central"
    default 10

config BT_MAX_PAIRED
    default 1

config BT_MAX_CONN
    default 1

# Allow central to specify connection parameters.
config BT_GAP_AUTO_UPDATE_CONN_PARAMS
    default n

endif # !ZMK_SPLIT_ROLE_CENTRAL

endmenu

endif # ZMK_SPLIT_BLE
