/*
 *  Copyright (c) 2016, The OpenThread Authors.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *  3. Neither the name of the copyright holder nor the
 *     names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *  POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @file
 *   This file includes compile-time configuration constants for OpenThread.
 */

#ifndef OT_CORE_OPENTHREAD_CORE_CONFIG_H_
#define OT_CORE_OPENTHREAD_CORE_CONFIG_H_

// ARDUINONRF-PATCH: Arduino library builds cannot inject -D flags, so the
// project config file is hardwired here instead of on the command line.
#ifndef OPENTHREAD_PROJECT_CORE_CONFIG_FILE
#define OPENTHREAD_PROJECT_CORE_CONFIG_FILE "arduino-ot-config.h"
#endif

#include <openthread/config.h> // IWYU pragma: export
#include <openthread/thread.h>

#define OPENTHREAD_CORE_CONFIG_H_IN

/**
 * Include project and platform specific header files in the following order:
 *
 * 1. Project specific header file (`OPENTHREAD_PROJECT_CORE_CONFIG_FILE`)
 * 2. Platform specific header file (`OPENTHREAD_PLATFORM_CORE_CONFIG_FILE`)
 * 3. Default config values as specified by `config/{module}.h`
 */

#ifdef OPENTHREAD_PROJECT_CORE_CONFIG_FILE
#include OPENTHREAD_PROJECT_CORE_CONFIG_FILE // IWYU pragma: export
#elif defined(OPENTHREAD_CONFIG_CORE_USER_CONFIG_HEADER_ENABLE)
// This configuration header file should be provided by the user when
// OPENTHREAD_CONFIG_CORE_USER_CONFIG_HEADER_ENABLE is defined to 1.
#include "openthread-core-user-config.h" // IWYU pragma: export
#endif

#ifdef OPENTHREAD_PLATFORM_CORE_CONFIG_FILE
#include OPENTHREAD_PLATFORM_CORE_CONFIG_FILE // IWYU pragma: export
#endif

#ifndef OPENTHREAD_CONFIG_THREAD_VERSION
#define OPENTHREAD_CONFIG_THREAD_VERSION OT_THREAD_VERSION_1_3
#endif

// IWYU pragma: begin_exports
#include "config/announce_sender.h"
#include "config/backbone_router.h"
#include "config/border_agent.h"
#include "config/border_agent_admitter.h"
#include "config/border_router.h"
#include "config/border_routing.h"
#include "config/channel_manager.h"
#include "config/channel_monitor.h"
#include "config/child_supervision.h"
#include "config/coap.h"
#include "config/commissioner.h"
#include "config/crypto.h"
#include "config/dataset_updater.h"
#include "config/dhcp6_client.h"
#include "config/dhcp6_server.h"
#include "config/diag.h"
#include "config/dns_client.h"
#include "config/dns_dso.h"
#include "config/dnssd_server.h"
#include "config/history_tracker.h"
#include "config/ip6.h"
#include "config/joiner.h"
#include "config/link_metrics_manager.h"
#include "config/link_quality.h"
#include "config/link_raw.h"
#include "config/logging.h"
#include "config/mac.h"
#include "config/mdns.h"
#include "config/mesh_diag.h"
#include "config/mesh_forwarder.h"
#include "config/misc.h"
#include "config/mle.h"
#include "config/nat64.h"
#include "config/net_diag.h"
#include "config/netdata_publisher.h"
#include "config/p2p.h"
#include "config/parent_search.h"
#include "config/ping_sender.h"
#include "config/platform.h"
#include "config/power_calibration.h"
#include "config/radio_link.h"
#include "config/secure_transport.h"
#include "config/sntp_client.h"
#include "config/srp_client.h"
#include "config/srp_server.h"
#include "config/time_sync.h"
#include "config/tmf.h"
#include "config/trel.h"
#include "config/wakeup.h"
// IWYU pragma: end_exports

#undef OPENTHREAD_CORE_CONFIG_H_IN

#include "config/openthread-core-config-check.h"

#ifdef OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE
#include OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE
#endif

#endif // OT_CORE_OPENTHREAD_CORE_CONFIG_H_
