#
# 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.
#

# Package: net/oic

syscfg.defs:
    OC_TRANSPORT_SERIAL:
        description: 'Enables OIC transport over nlip serial'
        value: '0'

    OC_TRANSPORT_GATT:
        description: 'Enables OIC transport over BLE GATT'
        value: '0'

    OC_TRANSPORT_IP:
        description: 'Enables OIC transport over IP UDP'
        value: '0'

    OC_TRANSPORT_IPV6:
        description: 'Support IPv6'
        value: '1'

    OC_TRANSPORT_IPV4:
        description: 'Support IPv4'
        value: '0'

    OC_TRANSPORT_LORA:
        description: 'Support Lora'
        value: '0'

    OC_LORA_PORT:
        description: 'Which LORA port to use'
        value: 0xbb

    OC_CLIENT:
        description: 'Enables OIC client support'
        value: '0'

    OC_CLIENT_DISCOVERY_ENABLE:
        description: 'Enables OIC discovery from client side'
        value: '1'

    OC_SERVER:
        description: 'Enables OIC server support'
        value: '0'

    OC_DEBUG:
        description: 'Enables OIC debug logs'
        value: '0'

    OC_NUM_REP_OBJECTS:
        description: 'Estimated number of nodes in payload tree structure'
        value: 32

    OC_CONCURRENT_REQUESTS:
        description: 'Maximum number of concurrent requests'
        value: 2

    OC_MAX_PAYLOAD_SIZE:
        description: 'Maximum size of request/response PDUs'
        value: 1120

    OC_APP_RESOURCES:
        description: 'Maximum number of server resources'
        value: 3

    OC_NUM_DEVICES:
        description: 'Number of devices on the OCF platform'
        value: 1

    OC_MAX_PAYLOAD:
        description: 'Platform payload size'
        value: 256

    OC_SEPARATE_RESPONSES:
        description: 'Support COAP delayed responses for slow resousrces.'
        value: 1

    OC_LOGGING:
        description: 'Logging enabled'
        value: 0

    OC_TRANS_SECURITY:
        description: >
            Enables per-resource transport layer security requirements.
        value: 1

    OC_COAP_RESPONSE_TIMEOUT:
        description: 'How many seconds before client request times out'
        value: 4
