#
# 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:
    LORA_NODE:
        description: >
            Used by package management system to include lora/node hardware
            drivers.
        value: 1

    LORA_NODE_REGION:
        description: >
            The operating region of the device. These values map to
            enumerated regions in the stack. User must override the
            region or compilation error will occur.
                0: No region
                1: AS band on 923MHz
                2: Australian band on 915MHz
                3: Chinese band on 470MHz
                4: Chinese band on 779MHz
                5: European band on 433MHz
                6: European band on 868MHz
                7: South korean band on 920MHz
                8: India band on 865MHz
                9: North american band on 915MHz
                10: North american band on 915MHz with a maximum of 16 channels
        value: 0

    LORA_NODE_DEFAULT_DATARATE:
        description: >
            The default data rate to be used. Data rate definitions are
            band specific and some values may not be valid for certain
            bands. The data rates are enumerated values with 0 being
            the lowest data rate (generally) and higher numbers either
            representing higher data rates or different spreading
            factors and/or higher channel bandwidths.
        value: 0

    LORA_NODE_CLI:
        description: "Include shell commands for LoRa operations"
        value: 0

    LORA_NODE_LOG_CLI:
        description: "Include shell commands for lora node debug log"
        value: 1

    LORA_APP_NUM_PORTS:
        description: "The number of unique LoRa application ports"
        value: 4

    LORA_APP_AUTO_JOIN:
        description: >
                Determines if the stack will handle joining or whether the
                application will handle joining.
        value: 0

    LORA_MAC_PRIO:
        description: 'The priority of the LoRa MAC task'
        type: 'task_priority'
        value: 0

    LORA_JOIN_REQ_RAND_DELAY:
        description: >
                Used to compute a random delay (in milliseconds) between
                the transmission of join requests by an end device.
        value: 5000

    LORA_UNCONFIRMED_TX_RAND_DELAY:
        description: >
                Used to compute a random delay (in milliseconds) between
                the transmission of join requests by an end device.
        value: 5000

    LORA_NODE_PUBLIC_NWK:
        description: >
                Sets public or private lora network. A value of 1 means
                the network is public; private otherwise
        value: 0
