# 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: sys/config

syscfg.defs:
    CONFIG_FCB:
        description: 'Config default storage is in FCB'
        value: 0
        restrictions:
            - '!CONFIG_NFFS'
            - 'CONFIG_FCB_FLASH_AREA'
    CONFIG_NFFS:
        description: 'Config default storage is in NFFS'
        value: 0
        restrictions:
            - '!CONFIG_FCB'
    CONFIG_NEWTMGR:
        description: 'Newtmgr access to config'
        value: 0

    CONFIG_CLI:
        description: 'CLI commands for accessing config'
        value: 0
        restrictions:
            - 'SHELL_TASK'

    CONFIG_CLI_DEBUG:
        description: 'CLI debug commands for accessing config'
        value: 0
        restrictions:
            - 'SHELL_TASK'
            - 'CONFIG_CLI'

    CONFIG_AUTO_INIT:
        description: 'Automatically configure a single config region at bootup'
        value: 1

syscfg.defs.CONFIG_FCB:
    CONFIG_FCB_FLASH_AREA:
        description: 'BSP flash area for config'
        type: 'flash_owner'
        value:
    CONFIG_FCB_MAGIC:
        description: 'Magic to identify valid configuration area'
        value: 0xc0ffeeee
    CONFIG_FCB_NUM_AREAS:
        description: >
            Number of areas to allocate in the config FCB.  A smaller number is
            used if the flash hardware cannot support this value.
        value: 8

syscfg.defs.CONFIG_NFFS:
    CONFIG_NFFS_DIR:
        description: 'Directory where config is stored'
        value: '"/cfg"'
    CONFIG_NFFS_FILE:
        description: 'Name for the default config file'
        value: '"/cfg/run"'
    CONFIG_NFFS_MAX_LINES:
        description: 'Limit how many items stored in file before compressing'
        value: 32

