#
# 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.vals:
    # common
    BLE_ROLE_CENTRAL: 1
    BLE_ROLE_PERIPHERAL: 1
    BLE_ROLE_BROADCASTER: 1
    BLE_ROLE_OBSERVER: 1
    BLE_WHITELIST: 1
    BLE_PERIODIC_ADV_SYNC_BIGINFO_REPORTS: 1
    BLE_ISO: 1
    BLE_ISO_TEST: 1
    BLE_ISO_BROADCAST_SOURCE: 1
    BLE_HCI_VS: 1
    BLE_POWER_CONTROL: 1
    BLE_CONN_SUBRATING: 1
    BLE_EXT_ADV: 1
    BLE_EXT_ADV_MAX_SIZE: 1650
    BLE_VERSION: 54
    BLE_MULTI_ADV_INSTANCES: 5
    BLE_PERIODIC_ADV: 1
    BLE_MAX_PERIODIC_SYNCS: 5

    # host
    BLE_EDDYSTONE: 1
    BLE_HS_DEBUG: 1
    BLE_L2CAP_COC_MAX_NUM: 5
    BLE_L2CAP_ENHANCED_COC: 1
    BLE_MAX_CONNECTIONS: 5
    BLE_MONITOR_RTT: 1
    BLE_PERIODIC_ADV_SYNC_TRANSFER: 1
    BLE_SM_BONDING: 1
    BLE_SM_LEGACY: 1
    BLE_SM_SC: 1
    BLE_STORE_MAX_BONDS: 5
    BLE_EATT_CHAN_NUM: 2
    BLE_PHY_2M: 1
    BLE_PHY_CODED: 1

    # controller
    BLE_LL_CFG_FEAT_LL_PRIVACY: 1
    BLE_LL_CONN_INIT_MAX_TX_BYTES: 251
    BLE_LL_DTM: 1
    BLE_LL_DTM_EXTENSIONS: 1
