#
# 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:
    MYNEWT_DOWNLOADER:
        description: >
            Downloader selection. This settings is usually specified in BSP,
            but can b overriden in target with different debug probe should be
            used.
        choices:
            # JLink probe with JLinkExe/JLink.exe
            - jlink
            # open source st-flash for STM32Fxx devices
            - stflash
            # ST propitiatory flasher STM32_Programmer_CLI for STM32Fxx devices
            - stm32_programmer_cli
            - openocd
            - pyocd
            # Nordic Semiconductor tool for NRF5x devices
            - nrfjprog
            # Renesas ezFlashCLI for DA146x devices
            - ezflashcli
        value:
    MYNEWT_DEBUGGER:
        description: >
            GDB server provider.
        choices:
            # JLink probe with JLinkExe/JLink.exe
            - jlink
            # open source st-util for STM32Fxx devices
            - stutil
            # ST propitiatory flasher ST-LINK_gdbserver for STM32Fxx devices
            - st_link_gdbserver
            - openocd
            - pyocd
        value:

    MYNEWT_DOWNLOADER_MFG_IMAGE_FLASH_OFFSET:
        description: >
            Load address for manufacturing image. Provided by BSP or MCU.
        value:
    MYNEWT_DOWNLOADER_OPENOCD_CFG:
        description: >
            Script passed to openocd with -f option.
        value:
    MYNEWT_DOWNLOADER_OPENOCD_BOARD:
        description: >
            Target baord for openocd (i.e. boards/st_nucleo_f4.cfg)
        value:
    MYNEWT_DOWNLOADER_OPENOCD_INTERFACE:
        description: >
            Target interface for openocd (i.e. interface/cmsis-dap.cfg)
        value:
    JLINK_TARGET:
        description: >
            Target name for JLink (i.e. Cortex_M33, NRF5340_XXAA_APP).
        value:
    PYOCD_TARGET:
        description: >
            Target name for pyocd (command:
                pyocd list --targets
            shows supported targets.
        value:
    NRFJPROG_COPROCESSOR:
        description: >
            Some NRF have more then one core. This can specify non-default core
            (i.e. CP_NETWORK for NRF5340).
        value:
