# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

syscfg.defs:
    BLE_HCI_TRANSPORT:
        description: >
            Selects HCI transport to be included in build.
            This has virtually the same effect as including package dependency
            manually, but it allows to easily override HCI transport package in
            application or target settings.
        value: builtin
        restrictions: $notnull
        choices:
            - builtin           # Built-in NimBLE controller and RAM transport
            - custom            # Custom transport, has to be included manually by user
            - ram               # RAM transport
            - uart              # UART HCI H4 transport
            - socket            # Socket transport (for native builds)
            - emspi             # SPI transport for EM Microelectionic controllers
            - da1469x           # Dialog DA1469x integrated controller
            - dialog_cmac       # Dialog CMAC via shared memory
            - usb               # USB
            - nrf5340           # nRF5340

# Deprecated settings
    BLE_HCI_TRANSPORT_NIMBLE_BUILTIN:
        description: Use BLE_HCI_TRANSPORT instead.
        value: 0
        deprecated: 1
    BLE_HCI_TRANSPORT_EMSPI:
        description: Use BLE_HCI_TRANSPORT instead.
        value: 0
        deprecated: 1
    BLE_HCI_TRANSPORT_RAM:
        description: Use BLE_HCI_TRANSPORT instead.
        value: 0
        deprecated: 1
    BLE_HCI_TRANSPORT_SOCKET:
        description: Use BLE_HCI_TRANSPORT instead.
        value: 0
        deprecated: 1
    BLE_HCI_TRANSPORT_UART:
        description: Use BLE_HCI_TRANSPORT instead.
        value: 0
        deprecated: 1

syscfg.vals.BLE_HCI_TRANSPORT_NIMBLE_BUILTIN:
    BLE_HCI_TRANSPORT: builtin
syscfg.vals.BLE_HCI_TRANSPORT_RAM:
    BLE_HCI_TRANSPORT: ram
syscfg.vals.BLE_HCI_TRANSPORT_UART:
    BLE_HCI_TRANSPORT: uart
syscfg.vals.BLE_HCI_TRANSPORT_SOCKET:
    BLE_HCI_TRANSPORT: socket
syscfg.vals.BLE_HCI_TRANSPORT_EMSPI:
    BLE_HCI_TRANSPORT: emspi
