# 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: hw/bsp/nrf52dk

syscfg.defs:
    I2C_0:
        description: 'I2C interface 0'
        value:  0

    MCU_FLASH_MIN_WRITE_SIZE:
        description: >
            Specifies the required alignment for internal flash writes.
            Used internally by the newt tool and in unit tests.
        value: 1

    MCU_NATIVE_USE_SIGNALS:
        description: >
            Whether to use POSIX signals to implement context switches.  Valid
            values are as follows:
                1: More correctness; less stability.  The OS tick timer will
                   cause a high-priority task to preempt a low-priority task.
                   This causes stability issues because a task can be preempted
                   while it is in the middle of a system call, potentially
                   causing deadlock or memory corruption.

                0: Less correctness; more stability.  The OS tick timer only
                   runs while the idle task is active.  Therefore, a sleeping
                   high-priority task will not preempt a low-priority task due
                   to a timing event (e.g., delay or callout expired).
                   However, this version of sim does not suffer from the
                   stability issues that affect the "signals" implementation.

            Unit tests should use 1.  Long-running sim processes should use 0.

        value: 1
    MCU_NATIVE:
        description: >
            Set to indicate that we are using native mcu.
        value: 1
    MCU_FLASH_STYLE_ST:
        description: Emulated flash layout is similar to one in STM32.
        value: 1
        restrictions:
            - "!MCU_FLASH_STYLE_NORDIC"
    MCU_FLASH_STYLE_NORDIC:
        description: >
            Emulated flash layout is similar to one in NRF51/2 and SAMD21.
        value: 0
        restrictions:
            - "!MCU_FLASH_STYLE_ST"
    MCU_UART_POLLER_PRIO:
        description: 'Priority of native UART poller task.'
        type: task_priority
        value: 0
