# 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:
    SHELL_TASK:
        description: 'Controls whether shell is enabled or not.'
        value: 0

    SHELL_CMD_ARGC_MAX:
        description: 'Max number of command line arguments'
        value: 12
    SHELL_CMD_HELP:
        description: 'Include help information for shell commands'
        value: 1
    SHELL_PROMPT_SUFFIX:
        description: 'Prompt suffix'
        value: '"> "'
    SHELL_MAX_MODULES:
        description: 'Max number of modules'
        value: 3
    SHELL_MAX_CMD_QUEUED:
        description: >
            Max number of command lines queued.  A value >= 2 is required if
            the shell is acting as a mgmt transport.
        value: 2
    SHELL_COMPAT:
        description: 'Enable compatibility module'
        value: 1
    SHELL_MAX_COMPAT_COMMANDS:
        description: 'Max number of compatibility commands'
        value: 20
    SHELL_COMPLETION:
        description: 'Include completion functionality'
        value: 1
    SHELL_MGMT:
        description: 'Enable SMP over shell'
        value: 1
    SHELL_NEWTMGR:
        description: 'Enable newtmgr over shell'
        value: 1

    SHELL_OS_MODULE:
        description: 'Include shell os module'
        value: 1
    SHELL_OS_SERIAL_BOOT_NVREG:
        description: 'Include "reset serial_boot" option'
        value: 0
        restrictions:
            - (BOOT_SERIAL_NVREG_INDEX != -1)
    SHELL_PROMPT_MODULE:
        description: 'Include shell prompt module'
        value: 0

    SHELL_SYSINIT_STAGE:
        description: >
            Sysinit stage for shell functionality.
        value: 500

    SHELL_OS_DATETIME_CMD:
        description: >
            Datetime command enabled, read 1,
            write 2, read/write 3 (default)
        value: 3

    SHELL_BRIDGE:
        description: >
            Enables the `shell exec` newtmgr command; executes shell commands
            via newtmgr.
        value: 0
    SHELL_BRIDGE_MAX_IN_LEN:
        description: >
            Maximum combined length of arguments passed to the `shell exec`
            newtmgr command.
        value: 128
    SHELL_BRIDGE_PRINTF_LEN:
        description: >
            Maximum number of characters that can be streamed by a single
            printf call during processing of the `shell exec` newtmgr command.
        value: 128

## duplicated from boot/boot_serial
    BOOT_SERIAL_NVREG_MAGIC:
        description: >
            Magic number, to be saved in a retained (reset-surviving) register.
            If the value in the register matches, the serial bootloader will
            load. Value must not be 0.
        value: 0xB7
        restrictions:
            - '(BOOT_SERIAL_NVREG_MAGIC != 0)'

    BOOT_SERIAL_NVREG_INDEX:
        description: >
            Index of retained register to use (using hal_nvreg_read) for reading
            magic value.
        value: -1

syscfg.vals.SHELL_NEWTMGR:
        SHELL_MGMT: MYNEWT_VAL(SHELL_NEWTMGR)
