/**
 *
 *    Copyright (c) 2020 Project CHIP Authors
 *
 *    Licensed 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.
 */

#pragma once

#include <string.h> // For mem* functions.

#include <app/chip-zcl-zpro-codec.h> // For EmberApsFrame

#include <app/util/basic-types.h>
#include <lib/core/Optional.h>

#include <transport/raw/MessageHeader.h>
static_assert(sizeof(chip::NodeId) == sizeof(uint64_t), "Unexpected node if size");

#include <zap-generated/endpoint_config.h>
#include <zap-generated/gen_config.h>

/**
 * @brief Defines binding types.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberBindingType
#else
typedef uint8_t EmberBindingType;
enum
#endif
{
    /** A binding that is currently not in use. */
    EMBER_UNUSED_BINDING = 0,
    /** A unicast binding whose 64-bit identifier is the destination EUI64. */
    EMBER_UNICAST_BINDING = 1,
    /** A unicast binding whose 64-bit identifier is the many-to-one
     * destination EUI64.  Route discovery should be disabled when sending
     * unicasts via many-to-one bindings. */
    EMBER_MANY_TO_ONE_BINDING = 2,
    /** A multicast binding whose 64-bit identifier is the group address. This
     * binding can be used to send messages to the group and to receive
     * messages sent to the group. */
    EMBER_MULTICAST_BINDING = 3,
};
/** @brief The type of method used for joining.
 *
 */

#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberJoinMethod
#else
typedef uint8_t EmberJoinMethod;
enum
#endif
{
    /** Devices normally use MAC association to join a network, which respects
     *  the "permit joining" flag in the MAC beacon.
     *  This value should be used by default.
     */
    EMBER_USE_MAC_ASSOCIATION = 0,

    /** For networks where the "permit joining" flag is never turned
     *  on, devices will need to use a ZigBee NWK Rejoin.  This value causes the
     *  rejoin to be sent withOUT NWK security and the Trust Center will be
     *  asked to send the NWK key to the device.  The NWK key sent to the device
     *  can be encrypted with the device's corresponding Trust Center link key.
     *  That is determined by the ::EmberJoinDecision on the Trust Center
     *  returned by the ::emberTrustCenterJoinHandler().
     */
    EMBER_USE_NWK_REJOIN = 1,

    /* For networks where the "permit joining" flag is never turned
     * on, devices will need to use a NWK Rejoin.  If those devices have been
     * preconfigured with the  NWK key (including sequence number), they can use
     * a secured rejoin.  This is only necessary for end devices since they need
     * a parent.  Routers can simply use the ::EMBER_USE_CONFIGURED_NWK_STATE
     * join method below.
     */
    EMBER_USE_NWK_REJOIN_HAVE_NWK_KEY = 2,

    /** For networks where all network and security information is known
        ahead of time, a router device may be commissioned such that it does
        not need to send any messages to begin communicating on the network.
     */
    EMBER_USE_CONFIGURED_NWK_STATE = 3,
};

/**
 * @brief Type of Ember software version
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberVersionType
#else
typedef uint8_t EmberVersionType;
enum
#endif
{
    EMBER_VERSION_TYPE_PRE_RELEASE = 0x00,

    // Alpha, should be used rarely
    EMBER_VERSION_TYPE_ALPHA_1 = 0x11,
    EMBER_VERSION_TYPE_ALPHA_2 = 0x12,
    EMBER_VERSION_TYPE_ALPHA_3 = 0x13,
    // Leave space in case we decide to add other types in the future.
    EMBER_VERSION_TYPE_BETA_1 = 0x21,
    EMBER_VERSION_TYPE_BETA_2 = 0x22,
    EMBER_VERSION_TYPE_BETA_3 = 0x23,

    // Anything other than 0xAA is considered pre-release
    // Silicon Labs may define other types in the future (e.g. beta, alpha)
    // Silicon Labs chose an arbitrary number (0xAA) to allow for expansion, but
    // to prevent ambiguity in case 0x00 or 0xFF is accidentally retrieved
    // as the version type.
    EMBER_VERSION_TYPE_GA = 0xAA,
};

/**
 * @brief Either marks an event as inactive or specifies the units for the
 * event execution time.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberEventUnits
#else
typedef uint8_t EmberEventUnits;
enum
#endif
{
    /** The event is not scheduled to run. */
    EMBER_EVENT_INACTIVE = 0,
    /** The execution time is in approximate milliseconds.  */
    EMBER_EVENT_MS_TIME,
    /** The execution time is in 'binary' quarter seconds (256 timer ticks). */
    EMBER_EVENT_QS_TIME,
    /** The execution time is in 'binary' minutes (65536 timer ticks). */
    EMBER_EVENT_MINUTE_TIME,
    /** The event is scheduled to run at the earliest opportunity. */
    EMBER_EVENT_ZERO_DELAY
};
/** @brief An identifier for a task */
typedef uint8_t EmberTaskId;

/**
 * @brief Options to use when sending a message.
 *
 * The discover-route, APS-retry, and APS-indirect options may be used together.
 * Poll response cannot be combined with any other options.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberApsOption
#else
typedef uint16_t EmberApsOption;
enum
#endif
{
    /** No options. */
    EMBER_APS_OPTION_NONE = 0x0000,

#ifndef DOXYGEN_SHOULD_SKIP_THIS
    EMBER_APS_OPTION_ENCRYPT_WITH_TRANSIENT_KEY = 0x0001,
    EMBER_APS_OPTION_USE_ALIAS_SEQUENCE_NUMBER  = 0x0002,
#endif

    /** This signs the application layer message body (APS Frame not included)
        and appends the ECDSA signature to the end of the message, which is needed by
        Smart Energy applications and requires the CBKE and ECC libraries.
        The ::emberDsaSignHandler() function is called after DSA signing
        is complete but before the message has been sent by the APS layer.
        Note that when passing a buffer to the stack for DSA signing, the final
        byte in the buffer has a special significance as an indicator of how many
        leading bytes should be ignored for signature purposes. See the API
        documentation of emberDsaSign() or the dsaSign EZSP command for more
        details about this requirement.
     */
    EMBER_APS_OPTION_DSA_SIGN = 0x0010,
    /** Resend the message using the APS retry mechanism.
        This option and the enable route discovery option must be enabled for
        an existing route to be repaired automatically. */
    EMBER_APS_OPTION_RETRY = 0x0040,
    /** Send the message with the NWK 'enable route discovery' flag, which
        causes a route discovery to be initiated if no route to the destination
        is known.  Note that in the mesh stack, this option and the APS retry
        option must be enabled an existing route to be repaired
        automatically. */
    EMBER_APS_OPTION_ENABLE_ROUTE_DISCOVERY = 0x0100,
    /** Send the message with the NWK 'force route discovery' flag, which causes
        a route discovery to be initiated even if one is known. */
    EMBER_APS_OPTION_FORCE_ROUTE_DISCOVERY = 0x0200,
    /** Include the source EUI64 in the network frame. */
    EMBER_APS_OPTION_SOURCE_EUI64 = 0x0400,
    /** Include the destination EUI64 in the network frame. */
    EMBER_APS_OPTION_DESTINATION_EUI64 = 0x0800,
    /** Send a ZDO request to discover the node ID of the destination if it is
        not already known. */
    EMBER_APS_OPTION_ENABLE_ADDRESS_DISCOVERY = 0x1000,
    /** This message is being sent in response to a call to
        ::emberPollHandler().  It causes the message to be sent
        immediately instead of being queued up until the next poll from the
        (end device) destination. */
    EMBER_APS_OPTION_POLL_RESPONSE = 0x2000,
    /** This incoming message is a valid ZDO request and the application
     *   is responsible for sending a ZDO response. This flag is used only
     *   within emberIncomingMessageHandler() when
     *   EMBER_APPLICATION_RECEIVES_UNSUPPORTED_ZDO_REQUESTS is defined. */
    EMBER_APS_OPTION_ZDO_RESPONSE_REQUIRED = 0x4000,
    /** This message is part of a fragmented message.  This option may only
        be set for unicasts.  The groupId field gives the index of this
        fragment in the low-order byte.  If the low-order byte is zero this
        is the first fragment and the high-order byte contains the number
        of fragments in the message. */
    EMBER_APS_OPTION_FRAGMENT = 0x8000
};

/**
 * @brief Size of EUI64 (an IEEE address) in bytes (8).
 */
#define EUI64_SIZE 8

/**
 * @brief Size of an encryption key in bytes (16).
 */
#define EMBER_ENCRYPTION_KEY_SIZE 16

/**
 * @brief Size of an extended PAN identifier in bytes (8).
 */
#define EXTENDED_PAN_ID_SIZE 8

/**
 * @brief EUI 64-bit ID (an IEEE address).
 */
typedef uint8_t EmberEUI64[EUI64_SIZE];

/**
 * @brief 16-bit ZigBee network address.
 */
typedef uint16_t EmberNodeId;

/**
 * @brief 802.15.4 PAN ID.
 */
typedef uint16_t EmberPanId;

/** @brief This enumeration determines whether or not a Trust Center
 *  answers trust center link key requests.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberTcLinkKeyRequestPolicy
#else
typedef uint8_t EmberTcLinkKeyRequestPolicy;
enum
#endif
{
    EMBER_DENY_TC_LINK_KEY_REQUESTS                      = 0x00,
    EMBER_ALLOW_TC_LINK_KEY_REQUEST_AND_SEND_CURRENT_KEY = 0x01,
    // When using the following mode a unique random link key is created.
    // The key which is generated due to this mode is added to the link
    // key table. Therefore make sure that the link key table size is not
    // zero as this can result in the newly generated key not being saved
    // and communication breaking between the trust center and the nodes.
    EMBER_ALLOW_TC_LINK_KEY_REQUEST_AND_GENERATE_NEW_KEY = 0x02
};

/** @brief This enumeration determines whether or not a Trust Center
 *  answers app link key requests.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberAppLinkKeyRequestPolicy
#else
typedef uint8_t EmberAppLinkKeyRequestPolicy;
enum
#endif
{
    EMBER_DENY_APP_LINK_KEY_REQUESTS = 0x00,
    EMBER_ALLOW_APP_LINK_KEY_REQUEST = 0x01
};

/** @brief This data structure contains the key data that is passed
 *   into various other functions. */
typedef struct
{
    /** This is the key byte data. */
    uint8_t contents[EMBER_ENCRYPTION_KEY_SIZE];
} EmberKeyData;
/**
 * @brief Defines the possible types of nodes and the roles that a
 * node might play in a network.
 */

/**
 * @brief Defines the possible incoming message types.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberIncomingMessageType
#else
typedef uint8_t EmberIncomingMessageType;
enum
#endif
{
    /** Unicast. */
    EMBER_INCOMING_UNICAST,
    /** Unicast reply. */
    EMBER_INCOMING_UNICAST_REPLY,
    /** Multicast. */
    EMBER_INCOMING_MULTICAST,
    /** Multicast sent by the local device. */
    EMBER_INCOMING_MULTICAST_LOOPBACK,
    /** Broadcast. */
    EMBER_INCOMING_BROADCAST,
    /** Broadcast sent by the local device. */
    EMBER_INCOMING_BROADCAST_LOOPBACK
};

/** @brief Endpoint information (a ZigBee Simple Descriptor).
 *
 * This is a ZigBee Simple Descriptor and contains information
 * about an endpoint.  This information is shared with other nodes in the
 * network by the ZDO.
 */

typedef struct
{
    /** The endpoint's device ID within the application profile. */
    uint16_t deviceId;
    /** The endpoint's device version. */
    uint8_t deviceVersion;
    /** The number of input clusters. */
    uint8_t inputClusterCount;
    /** The number of output clusters. */
    uint8_t outputClusterCount;
} EmberEndpointDescription;

/** @brief A type of packet received by the stack
 *
 * This enum provides a way to indicate which protocol layer in the Ember
 * stack an incoming packet is meant for, or from which protocol layer
 * an outgoing command is being sent from.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberZigbeePacketType
#else
typedef uint8_t EmberZigbeePacketType;
enum
#endif
{
    /** Describes an 802.15.4 raw MAC message, unprocessed by the stack. */
    EMBER_ZIGBEE_PACKET_TYPE_RAW_MAC,
    /** Describes an 802.15.4 MAC layer command. */
    EMBER_ZIGBEE_PACKET_TYPE_MAC_COMMAND,
    /** Describes a ZigBee Network layer data message. */
    EMBER_ZIGBEE_PACKET_TYPE_NWK_DATA,
    /** Describes a ZigBee Network layer command. */
    EMBER_ZIGBEE_PACKET_TYPE_NWK_COMMAND,
    /** Describes a ZigBee Application Support layer data message. */
    EMBER_ZIGBEE_PACKET_TYPE_APS_DATA,
    /** Describes a ZigBee Application Support layer command. */
    EMBER_ZIGBEE_PACKET_TYPE_APS_COMMAND,
    /** Describes a ZigBee Device Object command. */
    EMBER_ZIGBEE_PACKET_TYPE_ZDO,
    /** Describes a ZigBee Cluster Library command. */
    EMBER_ZIGBEE_PACKET_TYPE_ZCL,

    /** Distinguishing between raw MAC and beacons for simplicity */
    EMBER_ZIGBEE_PACKET_TYPE_BEACON,
};

/**
 * @brief Defines a ZigBee network and the associated parameters.
 */
typedef struct
{
    uint16_t panId;
    uint8_t channel;
    bool allowingJoin;
    uint8_t extendedPanId[EXTENDED_PAN_ID_SIZE];
    uint8_t stackProfile;
    uint8_t nwkUpdateId;
} EmberZigbeeNetwork;

/** @brief indication of the action taken on a packet */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberPacketAction
#else
typedef uint8_t EmberPacketAction;
enum
#endif
{
    EMBER_DROP_PACKET   = 0,
    EMBER_ACCEPT_PACKET = 1,
    EMBER_MANGLE_PACKET,
};

/**
 * @name ZigBee Device Object (ZDO) Definitions
 */
//@{

/** @name ZDO response status.
 *
 * Most responses to ZDO commands contain a status byte.
 * The meaning of this byte is defined by the ZigBee Device Profile.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberZdoStatus
#else
typedef uint8_t EmberZdoStatus;
enum
#endif
{
    // These values are taken from Table 48 of ZDP Errata 043238r003 and Table 2
    // of NWK 02130r10.
    EMBER_ZDP_SUCCESS = 0x00,
    // 0x01 to 0x7F are reserved
    EMBER_ZDP_INVALID_REQUEST_TYPE = 0x80,
    EMBER_ZDP_DEVICE_NOT_FOUND     = 0x81,
    EMBER_ZDP_INVALID_ENDPOINT     = 0x82,
    EMBER_ZDP_NOT_ACTIVE           = 0x83,
    EMBER_ZDP_NOT_SUPPORTED        = 0x84,
    EMBER_ZDP_TIMEOUT              = 0x85,
    EMBER_ZDP_NO_MATCH             = 0x86,
    // 0x87 is reserved                 = 0x87,
    EMBER_ZDP_NO_ENTRY                  = 0x88,
    EMBER_ZDP_NO_DESCRIPTOR             = 0x89,
    EMBER_ZDP_INSUFFICIENT_SPACE        = 0x8a,
    EMBER_ZDP_NOT_PERMITTED             = 0x8b,
    EMBER_ZDP_TABLE_FULL                = 0x8c,
    EMBER_ZDP_NOT_AUTHORIZED            = 0x8d,
    EMBER_ZDP_DEVICE_BINDING_TABLE_FULL = 0x8e,
    EMBER_ZDP_INVALID_INDEX             = 0x8f,

    EMBER_NWK_ALREADY_PRESENT = 0xC5,
    EMBER_NWK_TABLE_FULL      = 0xC7,
    EMBER_NWK_UNKNOWN_DEVICE  = 0xC8
};

/** @brief Defines an entry in the binding table.
 *
 * A binding entry specifies a local endpoint, a remote endpoint, a
 * cluster ID and either the destination EUI64 (for unicast bindings) or the
 * 64-bit group address (for multicast bindings).
 */
struct EmberBindingTableEntry
{
    EmberBindingTableEntry() = default;

    static EmberBindingTableEntry ForNode(chip::FabricIndex fabric, chip::NodeId node, chip::EndpointId localEndpoint,
                                          chip::EndpointId remoteEndpoint, chip::Optional<chip::ClusterId> cluster)
    {
        EmberBindingTableEntry entry = {
            .type        = EMBER_UNICAST_BINDING,
            .fabricIndex = fabric,
            .local       = localEndpoint,
            .clusterId   = cluster,
            .remote      = remoteEndpoint,
            .nodeId      = node,
        };
        return entry;
    }

    static EmberBindingTableEntry ForGroup(chip::FabricIndex fabric, chip::GroupId group, chip::EndpointId localEndpoint,
                                           chip::Optional<chip::ClusterId> cluster)
    {
        EmberBindingTableEntry entry = {
            .type        = EMBER_MULTICAST_BINDING,
            .fabricIndex = fabric,
            .local       = localEndpoint,
            .clusterId   = cluster,
            .remote      = 0,
            .groupId     = group,
        };
        return entry;
    }

    /** The type of binding. */
    EmberBindingType type = EMBER_UNUSED_BINDING;

    chip::FabricIndex fabricIndex;
    /** The endpoint on the local node. */
    chip::EndpointId local;
    /** A cluster ID that matches one from the local endpoint's simple descriptor.
     * This cluster ID is set by the provisioning application to indicate which
     * part an endpoint's functionality is bound to this particular remote node
     * and is used to distinguish between unicast and multicast bindings. Note
     * that a binding can be used to to send messages with any cluster ID, not
     * just that listed in the binding.
     */
    chip::Optional<chip::ClusterId> clusterId;
    /** The endpoint on the remote node (specified by \c identifier). */
    chip::EndpointId remote;
    /** A 64-bit destination identifier.  This is either:
     * - The destination chip::NodeId, for unicasts.
     * - A multicast ChipGroupId, for multicasts.
     * Which one is being used depends on the type of this binding.
     */
    union
    {
        chip::NodeId nodeId;
        chip::GroupId groupId;
    };

    bool operator==(EmberBindingTableEntry const & other) const
    {
        if (type != other.type)
        {
            return false;
        }

        if (type == EMBER_MULTICAST_BINDING && groupId != other.groupId)
        {
            return false;
        }

        if (type == EMBER_UNICAST_BINDING && (nodeId != other.nodeId || remote != other.remote))
        {
            return false;
        }

        return fabricIndex == other.fabricIndex && local == other.local && clusterId == other.clusterId;
    }
};

/**
 * @brief The decision made by the Trust Center when a node attempts to join.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberJoinDecision
#else
typedef uint8_t EmberJoinDecision;
enum
#endif
{
    /** Allow the node to join. The node has the key. */
    EMBER_USE_PRECONFIGURED_KEY = 0,
    /** Allow the node to join. Send the key to the node. */
    EMBER_SEND_KEY_IN_THE_CLEAR,
    /** Deny join. */
    EMBER_DENY_JOIN,
    /** Take no action. */
    EMBER_NO_ACTION
};

/** @brief This denotes the status of an attempt to establish
 *  a key with another device.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberKeyStatus
#else
typedef uint8_t EmberKeyStatus;
enum
#endif
{
    EMBER_KEY_STATUS_NONE                   = 0x00,
    EMBER_APP_LINK_KEY_ESTABLISHED          = 0x01,
    EMBER_TRUST_CENTER_LINK_KEY_ESTABLISHED = 0x03,

    EMBER_KEY_ESTABLISHMENT_TIMEOUT = 0x04,
    EMBER_KEY_TABLE_FULL            = 0x05,

    // These are success status values applying only to the
    // Trust Center answering key requests.
    EMBER_TC_RESPONDED_TO_KEY_REQUEST  = 0x06,
    EMBER_TC_APP_KEY_SENT_TO_REQUESTER = 0x07,

    // These are failure status values applying only to the
    // Trust Center answering key requests.
    EMBER_TC_RESPONSE_TO_KEY_REQUEST_FAILED             = 0x08,
    EMBER_TC_REQUEST_KEY_TYPE_NOT_SUPPORTED             = 0x09,
    EMBER_TC_NO_LINK_KEY_FOR_REQUESTER                  = 0x0A,
    EMBER_TC_REQUESTER_EUI64_UNKNOWN                    = 0x0B,
    EMBER_TC_RECEIVED_FIRST_APP_KEY_REQUEST             = 0x0C,
    EMBER_TC_TIMEOUT_WAITING_FOR_SECOND_APP_KEY_REQUEST = 0x0D,
    EMBER_TC_NON_MATCHING_APP_KEY_REQUEST_RECEIVED      = 0x0E,
    EMBER_TC_FAILED_TO_SEND_APP_KEYS                    = 0x0F,
    EMBER_TC_FAILED_TO_STORE_APP_KEY_REQUEST            = 0x10,
    EMBER_TC_REJECTED_APP_KEY_REQUEST                   = 0x11,
    EMBER_TC_FAILED_TO_GENERATE_NEW_KEY                 = 0x12,
    EMBER_TC_FAILED_TO_SEND_TC_KEY                      = 0x13,

    // These are generic status values for a key requester.
    EMBER_TRUST_CENTER_IS_PRE_R21 = 0x1E,

    // These are status values applying only to the Trust Center
    // verifying link keys.
    EMBER_TC_REQUESTER_VERIFY_KEY_TIMEOUT = 0x32,
    EMBER_TC_REQUESTER_VERIFY_KEY_FAILURE = 0x33,
    EMBER_TC_REQUESTER_VERIFY_KEY_SUCCESS = 0x34,

    // These are status values applying only to the key requester
    // verifying link keys.
    EMBER_VERIFY_LINK_KEY_FAILURE = 0x64,
    EMBER_VERIFY_LINK_KEY_SUCCESS = 0x65,
};

typedef uint8_t EmberAfPluginNetworkSteeringJoiningState;

#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum SleepModes
#else
typedef uint8_t SleepModes;
enum
#endif
{
    SLEEPMODE_IDLE = 1,
};

/**
 * @brief Defines the possible join states for a node.
 */
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberNetworkStatus
#else
typedef uint8_t EmberNetworkStatus;
enum
#endif
{
    /** The node is not associated with a network in any way. */
    EMBER_NO_NETWORK,
    /** The node is currently attempting to join a network. */
    EMBER_JOINING_NETWORK,
    /** The node is joined to a network. */
    EMBER_JOINED_NETWORK,
    /** The node is an end device joined to a network but its parent
        is not responding. */
    EMBER_JOINED_NETWORK_NO_PARENT,
    /** The node is in the process of leaving its current network. */
    EMBER_LEAVING_NETWORK
};

/** @brief Holds network parameters.
 *
 * For information about power settings and radio channels,
 * see the technical specification for the
 * RF communication module in your Developer Kit.
 */
typedef struct
{
    /** The network's extended PAN identifier.*/
    uint8_t extendedPanId[EXTENDED_PAN_ID_SIZE];
    /** The network's PAN identifier.*/
    uint16_t panId;
    /** A power setting, in dBm.*/
    int8_t radioTxPower;
    /** A radio channel. Be sure to specify a channel supported by the radio. */
    uint8_t radioChannel;
    /** Join method: The protocol messages used to establish an initial parent.  It is
     *  ignored when forming a ZigBee network, or when querying the stack for its
        network parameters.
     */
    EmberJoinMethod joinMethod;

    /** NWK Manager ID.  The ID of the network manager in the current network.
        This may only be set at joining when using EMBER_USE_CONFIGURED_NWK_STATE
        as the join method.
     */
    EmberNodeId nwkManagerId;
    /** An NWK Update ID.  The value of the ZigBee nwkUpdateId known by the stack.
        It is used to determine the newest instance of the network after a PAN
        ID or channel change.  This may only be set at joining when using
        EMBER_USE_CONFIGURED_NWK_STATE as the join method.
     */
    uint8_t nwkUpdateId;
    /** The NWK channel mask.  The list of preferred channels that the NWK manager
        has told this device to use when searching for the network.
        This may only be set at joining when using EMBER_USE_CONFIGURED_NWK_STATE
        as the join method.
     */
    uint32_t channels;
} EmberNetworkParameters;

/**
 * @brief Incoming and outgoing messages are stored in buffers.
 * These buffers are allocated and freed as needed.
 *
 * Buffers are 32 bytes in length and can be linked together to hold
 * longer messages.
 *
 * See packet-buffer.h for APIs related to stack and linked buffers.
 */
typedef uint8_t EmberMessageBuffer;

/**
 * @brief A version structure containing all version information.
 */
typedef struct
{
    uint16_t build;
    uint8_t major;
    uint8_t minor;
    uint8_t patch;
    uint8_t special;
    EmberVersionType type;
} EmberVersion;

/**
 * @brief A distinguished network ID that will never be assigned
 * to any node.  This value is used when getting the remote node ID
 * from the address or binding tables.  It indicates that the address
 * or binding table entry is currently in use but the node ID
 * corresponding to the EUI64 in the table is currently unknown.
 */
#define EMBER_UNKNOWN_NODE_ID 0xFFFD

/**
 * @brief A distinguished network ID that will never be assigned
 * to any node. Used to indicate the absence of a node ID.
 */
#define EMBER_NULL_NODE_ID 0xFFFF

#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum EmberStatus
#else
typedef uint8_t EmberStatus;
enum
#endif // DOXYGEN_SHOULD_SKIP_THIS
{
    /**
     * @name Generic Messages
     * These messages are system wide.
     */
    //@{

    /**
     * @brief The generic "no error" message.
     */
    EMBER_SUCCESS = 0x00,

    /**
     * @brief The generic "fatal error" message.
     */
    EMBER_ERR_FATAL = 0x01,

    /**
     * @brief An invalid value was passed as an argument to a function.
     */
    EMBER_BAD_ARGUMENT = 0x02,

    /**
     * @brief The requested information was not found.
     */
    EMBER_NOT_FOUND = 0x03,

    /**
     * @brief The manufacturing and stack token format in non-volatile memory
     * is different than what the stack expects (returned at initialization).
     */
    EMBER_EEPROM_MFG_STACK_VERSION_MISMATCH = 0x04,

    /**
     * @brief The static memory definitions in ember-static-memory.h
     * are incompatible with this stack version.
     */
    EMBER_INCOMPATIBLE_STATIC_MEMORY_DEFINITIONS = 0x05,

    /**
     * @brief The manufacturing token format in non-volatile memory is
     * different than what the stack expects (returned at initialization).
     */
    EMBER_EEPROM_MFG_VERSION_MISMATCH = 0x06,

    /**
     * @brief The stack token format in non-volatile memory is different
     * than what the stack expects (returned at initialization).
     */
    EMBER_EEPROM_STACK_VERSION_MISMATCH = 0x07,

    //@} // END Generic Messages

    /**
     * @name Packet Buffer Module Errors
     */
    //@{

    /**
     * @brief There are no more buffers.
     */
    EMBER_NO_BUFFERS = 0x18,

    //@} / END Packet Buffer Module Errors

    /**
     * @name Serial Manager Errors
     */
    //@{

    /**
     * @brief Specifies an invalid baud rate.
     */
    EMBER_SERIAL_INVALID_BAUD_RATE = 0x20,

    /**
     * @brief Specifies an invalid serial port.
     */
    EMBER_SERIAL_INVALID_PORT = 0x21,

    /**
     * @brief Tried to send too much data.
     */
    EMBER_SERIAL_TX_OVERFLOW = 0x22,

    /**
     * @brief There wasn't enough space to store a received character
     * and the character was dropped.
     */
    EMBER_SERIAL_RX_OVERFLOW = 0x23,

    /**
     * @brief Detected a UART framing error.
     */
    EMBER_SERIAL_RX_FRAME_ERROR = 0x24,

    /**
     * @brief Detected a UART parity error.
     */
    EMBER_SERIAL_RX_PARITY_ERROR = 0x25,

    /**
     * @brief There is no received data to process.
     */
    EMBER_SERIAL_RX_EMPTY = 0x26,

    /**
     * @brief The receive interrupt was not handled in time and a
     * character was dropped.
     */
    EMBER_SERIAL_RX_OVERRUN_ERROR = 0x27,

    //@}

    /**
     * @name MAC Errors
     */
    //@{

    /**
     * @brief The MAC transmit queue is full.
     */
    EMBER_MAC_TRANSMIT_QUEUE_FULL = 0x39,
    // Internal

    /**
     * @brief MAC header FCF error on receive.
     */
    EMBER_MAC_UNKNOWN_HEADER_TYPE = 0x3A,

    /**
     * @brief MAC ACK header received.
     */
    EMBER_MAC_ACK_HEADER_TYPE = 0x3B,

    /**
     * @brief The MAC can't complete this task because it is scanning.
     */
    EMBER_MAC_SCANNING = 0x3D,

    /**
     * @brief No pending data exists for a data poll.
     */
    EMBER_MAC_NO_DATA = 0x31,

    /**
     * @brief Attempts to scan when joined to a network.
     */
    EMBER_MAC_JOINED_NETWORK = 0x32,

    /**
     * @brief Scan duration must be 0 to 14 inclusive. Tried to
     * scan with an incorrect duration value.
     */
    EMBER_MAC_BAD_SCAN_DURATION = 0x33,

    /**
     * @brief emberStartScan was called with an incorrect scan type.
     */
    EMBER_MAC_INCORRECT_SCAN_TYPE = 0x34,

    /**
     * @brief emberStartScan was called with an invalid channel mask.
     */
    EMBER_MAC_INVALID_CHANNEL_MASK = 0x35,

    /**
     * @brief Failed to scan the current channel because
     * the relevant MAC command could not be transmitted.
     */
    EMBER_MAC_COMMAND_TRANSMIT_FAILURE = 0x36,

    /**
     * @brief An ACK was expected following the transmission but
     * the MAC level ACK was never received.
     */
    EMBER_MAC_NO_ACK_RECEIVED = 0x40,

    /**
     * @brief MAC failed to transmit a message because it could not successfully
     * perform a radio network switch.
     */
    EMBER_MAC_RADIO_NETWORK_SWITCH_FAILED = 0x41,

    /**
     * @brief An indirect data message timed out before a poll requested it.
     */
    EMBER_MAC_INDIRECT_TIMEOUT = 0x42,

    //@}

    /**
     * @name  Simulated EEPROM Errors
     */
    //@{

    /**
     * @brief The Simulated EEPROM is telling the application that
     * at least one flash page to be erased. The GREEN status means the
     * current page has not filled above the ::ERASE_CRITICAL_THRESHOLD.
     *
     * The application should call the function ::halSimEepromErasePage()
     * when it can to erase a page.
     */
    EMBER_SIM_EEPROM_ERASE_PAGE_GREEN = 0x43,

    /**
     * @brief The Simulated EEPROM is telling the application that
     * at least one flash page must be erased.  The RED status means the
     * current page has filled above the ::ERASE_CRITICAL_THRESHOLD.
     *
     * Due to the shrinking availability of write space, data could
     * be lost. The application must call the function ::halSimEepromErasePage()
     * as soon as possible to erase a page.
     */
    EMBER_SIM_EEPROM_ERASE_PAGE_RED = 0x44,

    /**
     * @brief The Simulated EEPROM has run out of room to write new data
     * and the data trying to be set has been lost. This error code is the
     * result of ignoring the ::SIM_EEPROM_ERASE_PAGE_RED error code.
     *
     * The application must call the function ::halSimEepromErasePage() to make room for
     * any further calls to set a token.
     */
    EMBER_SIM_EEPROM_FULL = 0x45,

    //  Errors 46 and 47 are now defined below in the
    //    flash error block  (was attempting to prevent renumbering).

    /**
     * @brief Attempt 1 to initialize the Simulated EEPROM has failed.
     *
     * This failure means the information already stored in the Flash (or a lack
     * thereof), is fatally incompatible with the token information compiled
     * into the code image being run.
     */
    EMBER_SIM_EEPROM_INIT_1_FAILED = 0x48,

    /**
     * @brief Attempt 2 to initialize the Simulated EEPROM has failed.
     *
     * This failure means Attempt 1 failed, and the token system failed to
     * properly reload default tokens and reset the Simulated EEPROM.
     */
    EMBER_SIM_EEPROM_INIT_2_FAILED = 0x49,

    /**
     * @brief Attempt 3 to initialize the Simulated EEPROM has failed.
     *
     * This failure means one or both of the tokens ::TOKEN_MFG_NVDATA_VERSION or
     * ::TOKEN_STACK_NVDATA_VERSION were incorrect and the token system failed to
     * properly reload default tokens and reset the Simulated EEPROM.
     */
    EMBER_SIM_EEPROM_INIT_3_FAILED = 0x4A,

    /**
     * @brief The Simulated EEPROM is repairing itself.
     *
     * While there's nothing for an app to do when the SimEE is going to
     * repair itself (SimEE has to be fully functional for the rest of the
     * system to work), alert the application to the fact that repair
     * is occurring.  There are debugging scenarios where an app might want
     * to know that repair is happening, such as monitoring frequency.
     * @note  Common situations will trigger an expected repair, such as
     *        using an erased chip or changing token definitions.
     */
    EMBER_SIM_EEPROM_REPAIRING = 0x4D,

    //@}

    /**
     * @name  Flash Errors
     */
    //@{

    /**
     * @brief A fatal error has occurred while trying to write data to the
     * Flash. The target memory attempting to be programmed is already programmed.
     * The flash write routines were asked to flip a bit from a 0 to 1, which is
     * physically impossible and the write was therefore inhibited. The data in
     * the Flash cannot be trusted after this error.
     */
    EMBER_ERR_FLASH_WRITE_INHIBITED = 0x46,

    /**
     * @brief A fatal error has occurred while trying to write data to the
     * Flash and the write verification has failed.  Data in the Flash
     * cannot be trusted after this error and it is possible this error is the
     * result of exceeding the life cycles of the Flash.
     */
    EMBER_ERR_FLASH_VERIFY_FAILED = 0x47,

    /**
     * @description A fatal error has occurred while trying to write data to the
     * Flash possibly due to write protection or an invalid address. Data in
     * the Flash cannot be trusted after this error and it is possible this error
     * is the result of exceeding the life cycles of the Flash.
     */
    EMBER_ERR_FLASH_PROG_FAIL = 0x4B,

    /**
     * @description A fatal error has occurred while trying to erase the Flash possibly
     * due to write protection. Data in the Flash cannot be trusted after
     * this error and it is possible this error is the result of exceeding the
     * life cycles of the Flash.
     */
    EMBER_ERR_FLASH_ERASE_FAIL = 0x4C,

    //@}

    /**
     * @name  Bootloader Errors
     */
    //@{

    /**
     * @brief The bootloader received an invalid message (failed attempt
     * to go into bootloader).
     */
    EMBER_ERR_BOOTLOADER_TRAP_TABLE_BAD = 0x58,

    /**
     * @brief The bootloader received an invalid message (failed attempt to go
     * into the bootloader).
     */
    EMBER_ERR_BOOTLOADER_TRAP_UNKNOWN = 0x59,

    /**
     * @brief The bootloader cannot complete the bootload operation because
     * either an image was not found or the image exceeded memory bounds.
     */
    EMBER_ERR_BOOTLOADER_NO_IMAGE = 0x05A,

    //@}

    /**
     * @name  Transport Errors
     */
    //@{

    /**
     * @brief The APS layer attempted to send or deliver a message
     * and failed.
     */
    EMBER_DELIVERY_FAILED = 0x66,

    /**
     * @brief This binding index is out of range for the current binding table.
     */
    EMBER_BINDING_INDEX_OUT_OF_RANGE = 0x69,

    /**
     * @brief This address table index is out of range for the current
     * address table.
     */
    EMBER_ADDRESS_TABLE_INDEX_OUT_OF_RANGE = 0x6A,

    /**
     * @brief An invalid binding table index was given to a function.
     */
    EMBER_INVALID_BINDING_INDEX = 0x6C,

    /**
     * @brief The API call is not allowed given the current state of the
     * stack.
     */
    EMBER_INVALID_CALL = 0x70,

    /**
     * @brief The link cost to a node is not known.
     */
    EMBER_COST_NOT_KNOWN = 0x71,

    /**
     * @brief The maximum number of in-flight messages  = i.e.,
     * ::EMBER_APS_UNICAST_MESSAGE_COUNT, has been reached.
     */
    EMBER_MAX_MESSAGE_LIMIT_REACHED = 0x72,

    /**
     * @brief The message to be transmitted is too big to fit into a
     * single over-the-air packet.
     */
    EMBER_MESSAGE_TOO_LONG = 0x74,

    /**
     * @brief The application is trying to delete or overwrite a binding
     * that is in use.
     */
    EMBER_BINDING_IS_ACTIVE = 0x75,

    /**
     * @brief The application is trying to overwrite an address table entry
     * that is in use.
     */
    EMBER_ADDRESS_TABLE_ENTRY_IS_ACTIVE = 0x76,

    /**
     * @brief An attempt was made to transmit during the suspend period.
     */
    EMBER_TRANSMISSION_SUSPENDED = 0x77,

    //@}
    //

    /**
     * @name  Green Power status codes
     */
    //@{

    /**
     * @brief Security match.
     */
    EMBER_MATCH = 0x78,
    /**
     * @brief Drop frame.
     */
    EMBER_DROP_FRAME       = 0x79,
    EMBER_PASS_UNPROCESSED = 0x7A,
    EMBER_TX_THEN_DROP     = 0x7B,
    EMBER_NO_SECURITY      = 0x7C,
    EMBER_COUNTER_FAILURE  = 0x7D,
    EMBER_AUTH_FAILURE     = 0x7E,
    EMBER_UNPROCESSED      = 0x7F,

    //@}
    //

    /**
     * @name  HAL Module Errors
     */
    //@{

    /**
     * @brief The conversion is complete.
     */
    EMBER_ADC_CONVERSION_DONE = 0x80,

    /**
     * @brief The conversion cannot be done because a request is being
     * processed.
     */
    EMBER_ADC_CONVERSION_BUSY = 0x81,

    /**
     * @brief The conversion is deferred until the current request has been
     * processed.
     */
    EMBER_ADC_CONVERSION_DEFERRED = 0x82,

    /**
     * @brief No results are pending.
     */
    EMBER_ADC_NO_CONVERSION_PENDING = 0x84,

    /**
     * @brief Sleeping (for a duration) has been abnormally interrupted
     * and exited prematurely.
     */
    EMBER_SLEEP_INTERRUPTED = 0x85,

    //@}

    /**
     * @name  PHY Errors
     */
    //@{

    /**
     * @brief The transmit attempt failed because the radio scheduler could not find
     * a slot to transmit this packet in or a higher priority event interrupted it.
     */
    EMBER_PHY_TX_SCHED_FAIL = 0x87,

    /**
     * @brief The transmit hardware buffer underflowed.
     */
    EMBER_PHY_TX_UNDERFLOW = 0x88,

    /**
     * @brief The transmit hardware did not finish transmitting a packet.
     */
    EMBER_PHY_TX_INCOMPLETE = 0x89,

    /**
     * @brief An unsupported channel setting was specified.
     */
    EMBER_PHY_INVALID_CHANNEL = 0x8A,

    /**
     * @brief An unsupported power setting was specified.
     */
    EMBER_PHY_INVALID_POWER = 0x8B,

    /**
     * @brief The requested operation cannot be completed because the radio
     * is currently busy, either transmitting a packet or performing calibration.
     */
    EMBER_PHY_TX_BUSY = 0x8C,

    /**
     * @brief The transmit attempt failed because all CCA attempts indicated that
     * the channel was busy.
     */
    EMBER_PHY_TX_CCA_FAIL = 0x8D,

    /**
     * @brief The transmit attempt was blocked from going over the air. Typically
     * this is due to the Radio Hold Off (RHO) or Coexistence plugins as they can
     * prevent transmits based on external signals.
     */
    EMBER_PHY_TX_BLOCKED = 0x8E,

    /**
     * @brief The expected ACK was received after the last transmission.
     */
    EMBER_PHY_ACK_RECEIVED = 0x8F,

    //@}

    /**
     * @name  Return Codes Passed to emberStackStatusHandler()
     * See also ::emberStackStatusHandler = ,.
     */
    //@{

    /**
     * @brief The stack software has completed initialization and is ready
     * to send and receive packets over the air.
     */
    EMBER_NETWORK_UP = 0x90,

    /**
     * @brief The network is not operating.
     */
    EMBER_NETWORK_DOWN = 0x91,

    /**
     * @brief An attempt to join a network failed.
     */
    EMBER_JOIN_FAILED = 0x94,

    /**
     * @brief After moving, a mobile node's attempt to re-establish contact
     * with the network failed.
     */
    EMBER_MOVE_FAILED = 0x96,

    /**
     * @brief An attempt to join as a router failed due to a Zigbee
     * versus Zigbee Pro incompatibility.  Zigbee devices joining Zigbee Pro networks
     * (or vice versa) must join as End Devices, not Routers.
     */
    EMBER_CANNOT_JOIN_AS_ROUTER = 0x98,

    /** @brief The local node ID has changed. The application can get the new
     *  node ID by calling ::emberGetNodeId().
     */
    EMBER_NODE_ID_CHANGED = 0x99,

    /** @brief The local PAN ID has changed. The application can get the new PAN
     *  ID by calling ::emberGetPanId().
     */
    EMBER_PAN_ID_CHANGED = 0x9A,

    /** @brief The channel has changed.
     */
    EMBER_CHANNEL_CHANGED = 0x9B,

    /** @brief An attempt to join or rejoin the network failed because
     *  no router beacons could be heard by the joining node.
     */
    EMBER_NO_BEACONS = 0xAB,

    /** @brief An attempt was made to join a Secured Network using a pre-configured
     *  key, but the Trust Center sent back a Network Key in-the-clear when
     *  an encrypted Network Key was required. (::EMBER_REQUIRE_ENCRYPTED_KEY).
     */
    EMBER_RECEIVED_KEY_IN_THE_CLEAR = 0xAC,

    /** @brief An attempt was made to join a Secured Network, but the device did
     *  not receive a Network Key.
     */
    EMBER_NO_NETWORK_KEY_RECEIVED = 0xAD,

    /** @brief After a device joined a Secured Network, a Link Key was requested
     *  (::EMBER_GET_LINK_KEY_WHEN_JOINING) but no response was ever received.
     */
    EMBER_NO_LINK_KEY_RECEIVED = 0xAE,

    /** @brief An attempt was made to join a Secured Network without a
     *  pre-configured key, but the Trust Center sent encrypted data using a
     *  pre-configured key.
     */
    EMBER_PRECONFIGURED_KEY_REQUIRED = 0xAF,

    //@}

    /**
     * @name  Security Errors
     */
    /**
     * @brief The passed key data is not valid. A key of all zeros or
     *   all F's are reserved values and cannot be used.
     */
    EMBER_KEY_INVALID = 0xB2,

    /**
     * @brief The chosen security level (the value of ::EMBER_SECURITY_LEVEL)
     *  is not supported by the stack.
     */
    EMBER_INVALID_SECURITY_LEVEL = 0x95,

    /**
     * @brief An error occurred when trying to encrypt at the APS Level.
     *
     * In order to APS encrypt an outgoing packet, the sender
     * needs to know the EUI64 of the destination. This error occurs because
     * the EUI64 of the destination can't be determined from
     * the short address (no entry in the neighbor, child, binding
     * or address tables).
     *
     * Everytime this error code is seen, note that the stack initiates an
     * IEEE address discovery request behind the scenes. Responses
     * to the request are stored in the trust center cache portion of the
     * address table. Note that you need at least 1 entry allocated for
     * TC cache in the address table plugin. Depending on the available rows in
     * the table, newly discovered addresses may replace old ones. The address
     * table plugin is enabled by default on the host. If you are using an SoC
     * platform, please be sure to add the address table plugin.
     *
     * When customers choose to send APS messages by using short addresses,
     * they should incorporate a retry mechanism and try again, no sooner than
     * 2 seconds later, to resend the APS message. If the app always
     * receives 0xBE (EMBER_IEEE_ADDR_DISCOVERY_IN_PROGRESS) after
     * multiple retries, that might indicate that:
     * a) destination node is not on the network
     * b) there are problems with the health of the network
     * c) there may not be any space set asidein the address table for
     *    the newly discovered address - this can be rectified by reserving
     *    more entries for the trust center cache in the address table plugin
     */
    EMBER_IEEE_ADDRESS_DISCOVERY_IN_PROGRESS = 0xBE,
    /**
     * @brief An error occurred when trying to encrypt at the APS Level.
     *
     * This error occurs either because the long address of the recipient can't be
     * determined from the short address (no entry in the binding table)
     * or there is no link key entry in the table associated with the destination,
     * or there was a failure to load the correct key into the encryption core.
     */
    EMBER_APS_ENCRYPTION_ERROR = 0xA6,

    /** @brief There was an attempt to form or join a network with security
     * without calling ::emberSetInitialSecurityState() first.
     */
    EMBER_SECURITY_STATE_NOT_SET = 0xA8,

    /** @brief There was an attempt to set an entry in the key table using
     *   an invalid long address. Invalid addresses include:
     *    - The local device's IEEE address
     *    - Trust Center's IEEE address
     *    - An existing table entry's IEEE address
     *    - An address consisting of all zeros or all F's
     */
    EMBER_KEY_TABLE_INVALID_ADDRESS = 0xB3,

    /** @brief There was an attempt to set a security configuration that
     *   is not valid given the other security settings.
     */
    EMBER_SECURITY_CONFIGURATION_INVALID = 0xB7,

    /** @brief There was an attempt to broadcast a key switch too quickly after
     *    broadcasting the next network key. The Trust Center must wait at
     *    least a period equal to the broadcast timeout so that all routers
     *    have a chance to receive the broadcast of the new network key.
     */
    EMBER_TOO_SOON_FOR_SWITCH_KEY = 0xB8,

    /** @brief The received signature corresponding to the message that was passed
        to the CBKE Library failed verification and is not valid.
     */
    EMBER_SIGNATURE_VERIFY_FAILURE = 0xB9,

    /** @brief The message could not be sent because the link key corresponding
        to the destination is not authorized for use in APS data messages.
        APS Commands (sent by the stack) are allowed. To use it for encryption
        of APS data messages it must be authorized using a key agreement protocol
        (such as CBKE).
     */
    EMBER_KEY_NOT_AUTHORIZED = 0xBB,

    /** @brief The security data provided was not valid, or an
     *    integrity check failed.
     */
    EMBER_SECURITY_DATA_INVALID = 0xBD,

    //@}

    /**
     * @name  Miscellaneous Network Errors
     */
    //@{

    /**
     * @brief The node has not joined a network.
     */
    EMBER_NOT_JOINED = 0x93,

    /**
     * @brief A message cannot be sent because the network is currently
     *  overloaded.
     */
    EMBER_NETWORK_BUSY = 0xA1,

    /**
     * @brief The application tried to send a message using an
     * endpoint that it has not defined.
     */
    EMBER_INVALID_ENDPOINT = 0xA3,

    /**
     * @brief The application tried to use a binding that has been remotely
     * modified and the change has not yet been reported to the application.
     */
    EMBER_BINDING_HAS_CHANGED = 0xA4,

    /**
     * @brief An attempt to generate random bytes failed because of
     * insufficient random data from the radio.
     */
    EMBER_INSUFFICIENT_RANDOM_DATA = 0xA5,

    /** A Zigbee route error command frame was received indicating
     * that a source routed message from this node failed en route.
     */
    EMBER_SOURCE_ROUTE_FAILURE = 0xA9,

    /** A Zigbee route error command frame was received indicating
     * that a message sent to this node along a many-to-one route
     * failed en route. The route error frame was delivered by
     * an ad-hoc search for a functioning route.
     */
    EMBER_MANY_TO_ONE_ROUTE_FAILURE = 0xAA,

    //@}

    /**
     * @name  Miscellaneous Utility Errors
     */
    //@{

    /**
     * @brief A critical and fatal error indicating that the version of the
     * stack trying to run does not match with the chip it's running on. The
     * software (stack) on the chip must be replaced with software
     * compatible with the chip.
     */
    EMBER_STACK_AND_HARDWARE_MISMATCH = 0xB0,

    /**
     * @brief An index was passed into the function that was larger
     * than the valid range.
     */
    EMBER_INDEX_OUT_OF_RANGE = 0xB1,

    /**
     * @brief There are no empty entries left in the table.
     */
    EMBER_TABLE_FULL = 0xB4,

    /**
     * @brief The requested table entry has been erased and contains
     *   no valid data.
     */
    EMBER_TABLE_ENTRY_ERASED = 0xB6,

    /**
     * @brief The requested function cannot be executed because
     *   the library that contains the necessary functionality is not present.
     */
    EMBER_LIBRARY_NOT_PRESENT = 0xB5,

    /**
     * @brief The stack accepted the command and is currently processing
     * the request.  The results will be returned via an appropriate handler.
     */
    EMBER_OPERATION_IN_PROGRESS = 0xBA,

    /**
     * @brief The EUI of the Trust center has changed due to a successful rejoin.
     *   The device may need to perform other authentication to verify the new TC
     *   is authorized to take over.
     */
    EMBER_TRUST_CENTER_EUI_HAS_CHANGED = 0xBC,

    //@}

    /**
     * @name  NVM3 Token Errors
     */
    //@{

    /**
     * @brief NVM3 is telling the application that the initialization was aborted
     *   as no valid NVM3 page was found.
     */
    EMBER_NVM3_TOKEN_NO_VALID_PAGES = 0xC0,

    /**
     * @brief NVM3 is telling the application that the initialization was aborted
     *   as the NVM3 instance was already opened with other parameters.
     */
    EMBER_NVM3_ERR_OPENED_WITH_OTHER_PARAMETERS = 0xC1,

    /**
     * @brief NVM3 is telling the application that the initialization was aborted
     *   as the NVM3 instance is not aligned properly in memory.
     */
    EMBER_NVM3_ERR_ALIGNMENT_INVALID = 0xC2,

    /**
     * @brief NVM3 is telling the application that the initialization was aborted
     *   as the size of the NVM3 instance is too small.
     */
    EMBER_NVM3_ERR_SIZE_TOO_SMALL = 0xC3,

    /**
     * @brief NVM3 is telling the application that the initialization was aborted
     *    as the NVM3 page size is not supported.
     */
    EMBER_NVM3_ERR_PAGE_SIZE_NOT_SUPPORTED = 0xC4,

    /**
     * @brief NVM3 is telling the application that there was an error initializing
     * some of the tokens.
     */
    EMBER_NVM3_ERR_TOKEN_INIT = 0xC5,

    /**
     * @brief NVM3 is telling the application there has been an error when
     * attempting to upgrade SimEE tokens.
     */
    EMBER_NVM3_ERR_UPGRADE = 0xC6,

    /**
     * @brief NVM3 is telling the application that there has been an unknown
     * error.
     */
    EMBER_NVM3_ERR_UNKNOWN = 0xC7,

    //@}

    /**
     * @name  Application Errors
     * These error codes are available for application use.
     */
    //@{

    /**
     * @brief This error is reserved for customer application use.
     *  This will never be returned from any portion of the network stack or HAL.
     */
    EMBER_APPLICATION_ERROR_0  = 0xF0,
    EMBER_APPLICATION_ERROR_1  = 0xF1,
    EMBER_APPLICATION_ERROR_2  = 0xF2,
    EMBER_APPLICATION_ERROR_3  = 0xF3,
    EMBER_APPLICATION_ERROR_4  = 0xF4,
    EMBER_APPLICATION_ERROR_5  = 0xF5,
    EMBER_APPLICATION_ERROR_6  = 0xF6,
    EMBER_APPLICATION_ERROR_7  = 0xF7,
    EMBER_APPLICATION_ERROR_8  = 0xF8,
    EMBER_APPLICATION_ERROR_9  = 0xF9,
    EMBER_APPLICATION_ERROR_10 = 0xFA,
    EMBER_APPLICATION_ERROR_11 = 0xFB,
    EMBER_APPLICATION_ERROR_12 = 0xFC,
    EMBER_APPLICATION_ERROR_13 = 0xFD,
    EMBER_APPLICATION_ERROR_14 = 0xFE,
    EMBER_APPLICATION_ERROR_15 = 0xFF,
};

/**
 * @brief Function pointer for timer callback
 */
typedef void (*TimerCallback)(chip::EndpointId);

/** @brief The control structure for events.
 *
 * It holds the event status (one of the @e EMBER_EVENT_ values)
 * and the callback and it's parameters
 */
typedef struct
{
    /** The event's status, either inactive or the units for timeToExecute. */
    EmberEventUnits status;

    /* Callback information */
    TimerCallback callback;
    chip::EndpointId endpoint;

} EmberEventControl;

/**
 * @name ZigBee Broadcast Addresses
 *@{
 *  ZigBee specifies three different broadcast addresses that
 *  reach different collections of nodes.  Broadcasts are normally sent only
 *  to routers.  Broadcasts can also be forwarded to end devices, either
 *  all of them or only those that do not sleep.  Broadcasting to end
 *  devices is both significantly more resource-intensive and significantly
 *  less reliable than broadcasting to routers.
 */

/** Broadcast to all routers. */
#define EMBER_BROADCAST_ADDRESS 0xFFFC

/**
 * @description Useful macro for avoiding compiler warnings related to unused
 * function arguments or unused variables.
 */
#define UNUSED_VAR(x) (void) (x)

/**
 * @brief The maximum 802.15.4 channel number is 26.
 */
#define EMBER_MAX_802_15_4_CHANNEL_NUMBER 26

/**
 * @brief The minimum 2.4GHz 802.15.4 channel number is 11.
 */
#define EMBER_MIN_802_15_4_CHANNEL_NUMBER 11

/**
 * @brief The maximum SubGhz channel number on pages 28, 30, 31 is 26.
 */
#define EMBER_MAX_SUBGHZ_CHANNEL_NUMBER_ON_PAGES_28_30_31 26

/**
 * @brief The maximum SubGhz channel number on page 29 is 8.
 */
#define EMBER_MAX_SUBGHZ_CHANNEL_NUMBER_ON_PAGE_29 8

/**
 * @brief The broadcast endpoint, as defined in the ZigBee spec.
 */
#define EMBER_BROADCAST_ENDPOINT (chip::kInvalidEndpointId)

/**
 * @brief Useful to reference a single bit of a byte.
 */
#define EMBER_BIT(nr) (1UL << (nr)) // Unsigned avoids compiler warnings re EMBER_BIT(15)

/**
 * @brief Returns the low byte of the 16-bit value \c n as an \c uint8_t.
 */
#define EMBER_LOW_BYTE(n) ((uint8_t)((n) &0xFF))

/**
 * @brief Returns the high byte of the 16-bit value \c n as an \c uint8_t.
 */
#define EMBER_HIGH_BYTE(n) ((uint8_t)(EMBER_LOW_BYTE((n) >> 8)))
/**
 * @brief Returns the low byte of the 32-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_0(n) ((uint8_t)((n) &0xFF))

/**
 * @brief Returns the second byte of the 32-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_1(n) EMBER_BYTE_0((n) >> 8)

/**
 * @brief Returns the third byte of the 32-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_2(n) EMBER_BYTE_0((n) >> 16)

/**
 * @brief Returns the high byte of the 32-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_3(n) EMBER_BYTE_0((n) >> 24)

/**
 * @brief Returns the fifth byte of the 64-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_4(n) EMBER_BYTE_0((n) >> 32)

/**
 * @brief Returns the sixth byte of the 64-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_5(n) EMBER_BYTE_0((n) >> 40)

/**
 * @brief Returns the seventh byte of the 64-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_6(n) EMBER_BYTE_0((n) >> 48)

/**
 * @brief Returns the high byte of the 64-bit value \c n as an \c uint8_t.
 */
#define EMBER_BYTE_7(n) EMBER_BYTE_0((n) >> 56)

/**
 * @brief Returns the value built from the two \c uint8_t
 * values \c high and \c low.
 */
#define EMBER_HIGH_LOW_TO_INT(high, low) (((uint16_t)(((uint16_t)(high)) << 8)) + ((uint16_t)((low) &0xFF)))

/**
 * @brief The kind of arguments the main function takes
 */
#define MAIN_FUNCTION_PARAMETERS void
#define MAIN_FUNCTION_ARGUMENTS

// Stubs to just silence some compile errors

#define emberAfPrintEnabled(...) false

#define emberAfPrintActiveArea EMBER_AF_PRINT_CORE

/**
 * @brief Returns the value of \c bit within the register or byte \c reg.
 */
#define READBIT(reg, bit) ((reg) & (EMBER_BIT(bit)))

/**
 * @brief Returns the value of the bitmask \c bits within
 * the register or byte \c reg.
 */
#define READBITS(reg, bits) ((reg) & (bits))

#define MILLISECOND_TICKS_PER_SECOND 1000
#define MILLISECOND_TICKS_PER_DECISECOND (MILLISECOND_TICKS_PER_SECOND / 10)

/**
 * @brief Macro that copies the token value from non-volatile storage into a RAM
 * location.  This macro can only be used with tokens that are defined using
 * DEFINE_INDEXED_TOKEN.
 *
 * @note To better understand the parameters of this macro, refer to the
 *           example of token usage above.
 *
 * @param data   A pointer to where the token data should be placed.
 *
 * @param token  The token name used in <code>DEFINE_*_TOKEN</code>,
 *               prepended with <code>TOKEN_</code>.
 * @param index  The index to access in the indexed token.
 */
#define halCommonGetIndexedToken(data, token, index)

/**
 * @brief Macro that sets the value of a token in non-volatile storage.  This
 * macro can only be used with tokens that are defined using
 * DEFINE_INDEXED_TOKEN.
 *
 * @note  To better understand the parameters of this macro, refer to the
 *           example of token usage above.
 *
 * @param token  The token name used in <code>DEFINE_*_TOKEN</code>,
 * prepended with <code>TOKEN_</code>.
 *
 * @param index  The index to access in the indexed token.
 *
 * @param data   A pointer to where the token data should be placed.
 */
#define halCommonSetIndexedToken(token, index, data)
