# 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_CONTROLLER:
        description: >
            Indicates that NimBLE controller is present. The default value for
            this setting shall not be overriden.
        value: 1

    BLE_HW_WHITELIST_ENABLE:
        description: >
            Used to enable hardware white list
        value: 1

    BLE_LL_SYSVIEW:
        description: >
            Enable SystemView tracing module for controller.
        value: 0

    BLE_LL_PRIO:
        description: 'The priority of the LL task'
        type: 'task_priority'
        value: 0

    # Sleep clock accuracy (sca). This is the amount of drift in the system
    # during when the device is sleeping (in parts per million).
    #
    # NOTE: 'the' master sca is an enumerated value based on the sca. Rather
    # than have a piece of code calculate this value, the developer must set
    # this value based on the value of the SCA using the following table:
    #
    #  SCA between 251 and 500 ppm (inclusive); master sca = 0
    #  SCA between 151 and 250 ppm (inclusive); master sca = 1
    #  SCA between 101 and 150 ppm (inclusive); master sca = 2
    #  SCA between 76 and 100 ppm (inclusive); master sca = 3
    #  SCA between 51 and 75 ppm (inclusive); master sca = 4
    #  SCA between 31 and 50 ppm (inclusive); master sca = 5
    #  SCA between 21 and 30 ppm (inclusive); master sca = 6
    #  SCA between 0 and 20 ppm (inclusive); master sca = 7
    #
    #  For example:
    #      if your clock drift is 101 ppm, your master should be set to 2.
    #      if your clock drift is 20, your master sca should be set to 7.
    #
    #  The values provided below are merely meant to be an example and should
    #  be replaced by values appropriate for your platform.
    BLE_LL_OUR_SCA:
        description: 'The system clock accuracy of the device.'
        value: '60'    # in ppm

    BLE_LL_MASTER_SCA:
        description: 'Enumerated value based on our sca'
        value: '4'

    BLE_LL_TX_PWR_DBM:
        description: 'Transmit power level.'
        value: '0'

    BLE_NUM_COMP_PKT_RATE:
        description: >
            Determines the maximum rate at which the controller will send the
            number of completed packets event to the host. Rate is in os time
            ticks.
        value: '(2 * OS_TICKS_PER_SEC)'

    BLE_LL_MFRG_ID:
        description: >
            Manufacturer ID. Should be set to unique ID per manufacturer.
        value: '0xFFFF'

    # Configuration items for the number of duplicate advertisers and the
    # number of advertisers from which we have heard a scan response.
    BLE_LL_NUM_SCAN_DUP_ADVS:
        description: 'The number of duplicate advertisers stored.'
        value: '8'
    BLE_LL_NUM_SCAN_RSP_ADVS:
        description: >
            The number of advertisers from which we have heard a scan
            response. Prevents sending duplicate events to host.
        value: '8'

    BLE_LL_WHITELIST_SIZE:
        description: 'Size of the LL whitelist.'
        value: '8'

    BLE_LL_RESOLV_LIST_SIZE:
        description: 'Size of the resolving list.'
        value: '4'

    # Data length management definitions for connections. These define the
    # maximum size of the PDU's that will be sent and/or received in a
    # connection.
    BLE_LL_MAX_PKT_SIZE:
        description: 'The maximum PDU size that can be sent/received'
        value: '251'
    BLE_LL_SUPP_MAX_RX_BYTES:
        description: 'The maximum supported received PDU size'
        value: 'MYNEWT_VAL_BLE_LL_MAX_PKT_SIZE'
    BLE_LL_SUPP_MAX_TX_BYTES:
        description: 'The maximum supported transmit PDU size'
        value: 'MYNEWT_VAL_BLE_LL_MAX_PKT_SIZE'
    BLE_LL_CONN_INIT_MAX_TX_BYTES:
        description: >
            Used to set the initial maximum transmit PDU size in a
            connection. If this is set to a value greater than 27,
            the controller will automatically attempt to do the
            data length update procedure. The host can always tell
            the controller to update this value.
        value: '27'

    # The number of slots that will be allocated to each connection
    BLE_LL_CONN_INIT_SLOTS:
        description: >
            This is the number of "slots" allocated to a connection when scheduling
            connections. Each slot is 1.25 msecs long. Note that a connection event may
            last longer than the number of slots allocated here and may also end earlier
            (depending on when the next scheduled event occurs and how much data needs
            to be transferred in the connection). However, you will be guaranteed that
            a connection event will be given this much time, if needed. Consecutively
            scheduled items will be at least this far apart
        value: '4'

    BLE_LL_CONN_INIT_MIN_WIN_OFFSET:
        description: >
            This is the minimum number of "slots" for WindowOffset value used for
            CONNECT_IND when creating new connection as a master. Each slot is 1.25
            msecs long. Increasing this value will delay first connection event after
            connection is created. However, older TI CC254x controllers cannot change
            connection parameters later if WindowOffset was set to 0 in CONNECT_IND. To
            ensure interoperability with such devices set this value to 2 (or more).
        value: '0'

    # Strict scheduling
    BLE_LL_STRICT_CONN_SCHEDULING:
        description: >
            Forces the scheduler on a central to schedule connections in fixed
            time intervals called periods. If set to 0, the scheduler is not forced
            to do this. If set to 1, the scheduler will only schedule connections at
            period boundaries. See comments in ble_ll_sched.h for more details.
        value: '0'

    BLE_LL_ADD_STRICT_SCHED_PERIODS:
        description: >
            The number of additional periods that will be allocated for strict
            scheduling. The total # of periods allocated for strict scheduling
            will be equal to the number of connections plus this number.
        value: '0'

    BLE_LL_USECS_PER_PERIOD:
        description: >
            The number of usecs per period.
        value: '3250'

    # The number of random bytes to store
    BLE_LL_RNG_BUFSIZE:
        description: >
            The number of random bytes that the link layer will try to
            always have available for the host to use. Decreasing this
            value may cause host delays if the host needs lots of random
            material often.
        value: '32'

    # Crystal setting time
    BLE_XTAL_SETTLE_TIME:
        description: >
            The settling time of the high-frequency oscillator. This is
            used to turn on/off the clock used for the radio (assuming
            the HW supports this). This value is in microseconds.
        value: '0'

    # Configuration for LL supported features.
    #
    # There are a total 8 features that the LL can support. These can be found
    # in v4.2, Vol 6 Part B Section 4.6.
    #
    # These feature definitions are used to inform a host or other controller
    # about the LL features supported by the controller.
    #
    # NOTE: 'the' controller always supports extended reject indicate and thus
    # is not listed here.


    BLE_LL_CFG_FEAT_LE_ENCRYPTION:
        description: >
            This option enables/disables encryption support in the controller.
            This option saves both both code and RAM.
        value: '1'

    BLE_LL_CFG_FEAT_CONN_PARAM_REQ:
        description: >
            This option enables/disables the connection parameter request
            procedure.  This is implemented in the controller but is disabled
            by default.
        value: '1'

    BLE_LL_CFG_FEAT_SLAVE_INIT_FEAT_XCHG:
        description: >
            This option allows a slave to initiate the feature exchange
            procedure.  This feature is implemented but currently has no impact
            on code or ram size
        value: '1'

    BLE_LL_CFG_FEAT_LE_PING:
        description: >
            This option allows a controller to send/receive LE pings.
            Currently, this feature is not implemented by the controller so
            turning it on or off has no effect.
        value: 'MYNEWT_VAL_BLE_LL_CFG_FEAT_LE_ENCRYPTION'

    BLE_LL_CFG_FEAT_DATA_LEN_EXT:
        description: >
            This option enables/disables the data length update procedure in
            the controller. If enabled, the controller is allowed to change the
            size of tx/rx pdu's used in a connection. This option has only
            minor impact on code size and non on RAM.
        value: '1'

    BLE_LL_CFG_FEAT_LL_PRIVACY:
        description: >
            This option is used to enable/disable LL privacy.
        value: '1'

    BLE_LL_CFG_FEAT_EXT_SCAN_FILT:
        description: >
            This option is used to enable/disable the extended scanner filter
            policy feature. Currently, this feature is not supported by the
            nimble controller.
        value: '0'

    BLE_LL_CFG_FEAT_LE_CSA2:
        description: >
            This option is used to enable/disable support for LE Channel
            Selection Algorithm #2.
        value: '0'

    BLE_LL_CFG_FEAT_LE_2M_PHY:
        description: >
            This option is used to enable/disable support for the 2Mbps PHY.
        value: '0'

    BLE_LL_CFG_FEAT_LE_CODED_PHY:
        description: >
            This option is used to enable/disable support for the coded PHY.
        value: '0'

    BLE_LL_CFG_FEAT_LL_EXT_ADV:
        description: >
            This option is used to enable/disable support for Extended
            Advertising Feature. That means extended scanner, advertiser
            and connect.
        value: MYNEWT_VAL(BLE_EXT_ADV)

    BLE_LL_CFG_FEAT_LL_PERIODIC_ADV:
        description: >
            This option is used to enable/disable support for Periodic
            Advertising Feature.
        value: MYNEWT_VAL(BLE_PERIODIC_ADV)

    BLE_LL_CFG_FEAT_LL_PERIODIC_ADV_SYNC_CNT:
        description: >
            This option is used to configure number of supported periodic syncs.
        value: MYNEWT_VAL(BLE_MAX_PERIODIC_SYNCS)

    BLE_LL_EXT_ADV_AUX_PTR_CNT:
         description: >
            This option configure a max number of scheduled outstanding auxiliary
            packets for receive on secondary advertising channel.
         value: 0

    BLE_PUBLIC_DEV_ADDR:
        description: >
            Allows the target or app to override the public device address
            used by the controller. If all zero, the controller will
            attempt to retrieve the public device address from its
            chip specific location. If non-zero, this address will
            be used.
        value: "(uint8_t[6]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00}"

    BLE_LL_DTM:
        description: >
             Enables HCI Test commands needed for Bluetooth SIG certification
        value: MYNEWT_VAL(BLE_LL_DIRECT_TEST_MODE)
    BLE_LL_DTM_EXTENSIONS:
        description: >
             Enables non-standard extensions to HCI test commands. Once enabled,
             HCI_LE_Transmitter_Test accepts extra parameters in addition to
             those defined in Core specification
               interval (2 octets)   interval between packets (usecs), overrides
                                     standard interval
               pkt_count (2 octets)  number of packets to transmit, controller
                                     will automatically stop sending packets
                                     after given number of packets was sent
             Setting either of these parameters to 0 will configure for default
             behavior, as per Core specification.
             If specified interval is shorter then allowed by specification it
             will be ignored.
             Extended parameters shall immediately follow standard parameters.
             Controller can accept both standard and extended version of command
             depending on specified HCI command length.
        value: 0

    BLE_LL_VND_EVENT_ON_ASSERT:
        description: >
            This options enables controller to send a vendor-specific event on
            an assertion in controller code. The event contains file name and
            line number where assertion occured.
        value: 0

    BLE_LL_SYSINIT_STAGE:
        description: >
            Sysinit stage for the NimBLE controller.
        value: 250

    BLE_LL_DBG_HCI_CMD_PIN:
        description: >
            When set to proper GPIO pin number, this pin will be set to high
            state when HCI command is received and being processed and back
            to low state when it was processed.
        value: -1
    BLE_LL_DBG_HCI_EV_PIN:
        description: >
            When set to proper GPIO pin number, this pin will be set to high
            state when HCI event is being sent and back to low state when event
            was sent from controller.
        value: -1

# deprecated settings (to be defunct/removed eventually)
    BLE_LL_DIRECT_TEST_MODE:
        description: use BLE_LL_DTM instead
        value: 0
        deprecated: 1

# defunct settings (to be removed eventually)
    BLE_DEVICE:
        description: Superseded by BLE_CONTROLLER
        value: 1
        defunct: 1
    BLE_LP_CLOCK:
        description: Superseded by BLE_CONTROLLER
        value: 1
        defunct: 1

syscfg.vals.BLE_LL_CFG_FEAT_LL_EXT_ADV:
    BLE_LL_CFG_FEAT_LE_CSA2: 1
    BLE_HW_WHITELIST_ENABLE: 0
    BLE_LL_EXT_ADV_AUX_PTR_CNT: 5

# Enable vendor event on assert in standalone build to make failed assertions in
# controller code visible when connected to external host
syscfg.vals.!BLE_HOST:
    BLE_LL_VND_EVENT_ON_ASSERT: 1

syscfg.restrictions:
    - OS_CPUTIME_FREQ == 32768
