/**
 \addtogroup INTERFACES
 \{
 \addtogroup FTDF
 \{
 \brief IEEE 802.15.4 Wireless
 */
/**
 ****************************************************************************************
 *
 * @file ftdf.h
 *
 * @brief FTDF UMAC API header file
 *
 * Copyright (c) 2016, Dialog Semiconductor
 * 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.
 *
 *
 ****************************************************************************************
 */

#ifndef FTDF_H_
#define FTDF_H_

#include <stdint.h>
#ifdef FTDF_PHY_API
#include <ftdf_config_phy_api.h>
#else
#include <ftdf_config_mac_api.h>
#endif

#define __private1                            request
#define __private2                            requestASN
#define __private3                            requestSN

#define FTDF_CAPABILITY_IS_FFD                0x02
#define FTDF_CAPABILITY_AC_POWER              0x04
#define FTDF_CAPABILITY_RECEIVER_ON_WHEN_IDLE 0x08
#define FTDF_CAPABILITY_FAST_ASSOCIATION      0x10
#define FTDF_CAPABILITY_SUPPORTS_SECURITY     0x40
#define FTDF_CAPABILITY_WANTS_SHORT_ADDRESS   0x80

#define FTDF_TRANSPARENT_USE_WAIT_FOR_ACK       1

// Transparency options
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_0      0x00000001
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_1      0x00000002
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_2      0x00000004
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_3      0x00000008
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_4      0x00000010
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_5      0x00000020
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_6      0x00000040
#define FTDF_TRANSPARENT_PASS_FRAME_TYPE_7      0x00000080
#define FTDF_TRANSPARENT_PASS_ALL_FRAME_TYPES   0x000000ff
#define FTDF_TRANSPARENT_AUTO_ACK               0x00000100
#define FTDF_TRANSPARENT_AUTO_FP_ACK            0x00000200
#define FTDF_TRANSPARENT_PASS_CRC_ERROR         0x00000400
#define FTDF_TRANSPARENT_PASS_ALL_FRAME_VERSION 0x00001000
#define FTDF_TRANSPARENT_PASS_ALL_PAN_ID        0x00002000
#define FTDF_TRANSPARENT_PASS_ALL_ADDR          0x00004000
#define FTDF_TRANSPARENT_PASS_ALL_BEACON        0x00008000
#define FTDF_TRANSPARENT_PASS_ALL_NO_DEST_ADDR  0x00010000
#define FTDF_TRANSPARENT_ENABLE_CSMA_CA         0x01000000
#define FTDF_TRANSPARENT_ENABLE_FCS_GENERATION  0x02000000
#define FTDF_TRANSPARENT_ENABLE_SECURITY        0x04000000
#if FTDF_TRANSPARENT_USE_WAIT_FOR_ACK
#define FTDF_TRANSPARENT_WAIT_FOR_ACK           0x08000000
#endif

// Transparent TX statuses
#define FTDF_TRANSPARENT_SEND_SUCCESSFUL 0x00000000
#define FTDF_TRANSPARENT_CSMACA_FAILURE  0x00000001
#define FTDF_TRANSPARENT_OVERFLOW        0x00000002
#if FTDF_TRANSPARENT_WAIT_FOR_ACK
#define FTDF_TRANSPARENT_NO_ACK          0x00000004
#endif

// Transparent RX statuses
#define FTDF_TRANSPARENT_RCV_SUCCESSFUL         0x00000000
#define FTDF_TRANSPARENT_RCV_CRC_ERROR          0x00000001
#define FTDF_TRANSPARENT_RCV_SECURITY_ERROR     0x00000002
#define FTDF_TRANSPARENT_RCV_RES_FRAMETYPE      0x00000004
#define FTDF_TRANSPARENT_RCV_RES_FRAME_VERSION  0x00000008
#define FTDF_TRANSPARENT_RCV_UNEXP_DST_ADDR     0x00000010
#define FTDF_TRANSPARENT_RCV_UNEXP_DST_PAN_ID   0x00000020
#define FTDF_TRANSPARENT_RCV_UNEXP_BEACON       0x00000040
#define FTDF_TRANSPARENT_RCV_UNEXP_NO_DEST_ADDR 0x00000080

typedef uint8_t FTDF_MsgId;
#define FTDF_DATA_REQUEST               1
#define FTDF_DATA_INDICATION            2
#define FTDF_DATA_CONFIRM               3
#define FTDF_PURGE_REQUEST              4
#define FTDF_PURGE_CONFIRM              5
#define FTDF_ASSOCIATE_REQUEST          6
#define FTDF_ASSOCIATE_INDICATION       7
#define FTDF_ASSOCIATE_RESPONSE         8
#define FTDF_ASSOCIATE_CONFIRM          9
#define FTDF_DISASSOCIATE_REQUEST       10
#define FTDF_DISASSOCIATE_INDICATION    11
#define FTDF_DISASSOCIATE_CONFIRM       12
#define FTDF_BEACON_NOTIFY_INDICATION   13
#define FTDF_COMM_STATUS_INDICATION     14
#define FTDF_GET_REQUEST                15
#define FTDF_GET_CONFIRM                16
#define FTDF_SET_REQUEST                17
#define FTDF_SET_CONFIRM                18
#define FTDF_GTS_REQUEST                19
#define FTDF_GTS_CONFIRM                20
#define FTDF_GTS_INDICATION             21
#define FTDF_ORPHAN_INDICATION          22
#define FTDF_ORPHAN_RESPONSE            23
#define FTDF_RESET_REQUEST              24
#define FTDF_RESET_CONFIRM              25
#define FTDF_RX_ENABLE_REQUEST          26
#define FTDF_RX_ENABLE_CONFIRM          27
#define FTDF_SCAN_REQUEST               28
#define FTDF_SCAN_CONFIRM               29
#define FTDF_START_REQUEST              30
#define FTDF_START_CONFIRM              31
#define FTDF_SYNC_REQUEST               32
#define FTDF_SYNC_LOSS_INDICATION       33
#define FTDF_POLL_REQUEST               34
#define FTDF_POLL_CONFIRM               35
#define FTDF_SET_SLOTFRAME_REQUEST      36
#define FTDF_SET_SLOTFRAME_CONFIRM      37
#define FTDF_SET_LINK_REQUEST           38
#define FTDF_SET_LINK_CONFIRM           39
#define FTDF_TSCH_MODE_REQUEST          40
#define FTDF_TSCH_MODE_CONFIRM          41
#define FTDF_KEEP_ALIVE_REQUEST         42
#define FTDF_KEEP_ALIVE_CONFIRM         43
#define FTDF_BEACON_REQUEST             44
#define FTDF_BEACON_CONFIRM             45
#define FTDF_BEACON_REQUEST_INDICATION  46
#define FTDF_TRANSPARENT_CONFIRM        47
#define FTDF_TRANSPARENT_INDICATION     48
#define FTDF_TRANSPARENT_REQUEST        49
#define FTDF_TRANSPARENT_ENABLE_REQUEST 50
#define FTDF_SLEEP_REQUEST              51
#define FTDF_EXPLICIT_WAKE_UP           52
#define FTDF_REMOTE_REQUEST             53
#if FTDF_DBG_BUS_ENABLE
#define FTDF_DBG_MODE_SET_REQUEST       54
#endif /* FTDF_DBG_BUS_ENABLE */
#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
#define FTDF_FPPR_MODE_SET_REQUEST      55
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */
/**
 * \brief  Request status
 * \remark Valid statuses:
 *         - FTDF_SUCCESS: Successful
 *         - FTDF_CHANNEL_ACCESS_FAILURE: CCA failure
 *         - FTDF_NO_ACK: No ack received after macMaxFrameRetries
 *         - FTDF_NO_DATA: No data frames pending
 *         - FTDF_COUNTER_ERROR: Security frame counter error
 *         - FTDF_FRAME_TOO_LONG: Too long frame
 *         - FTDF_IMPROPER_KEY_TYPE: Improper key type
 *         - FTDF_IMPROPER_SECURITY_LEVEL: Improper security level
 *         - FTDF_SECURITY_ERROR: Security authentication error
 *         - FTDF_UNAVAILABLE_KEY: Unavailable key
 *         - FTDF_UNAVAILABLE_DEVICE: Unavailable device
 *         - FTDF_UNAVAILABLE_SECURITY_LEVEL: Unavailable security level
 *         - FTDF_UNSUPPORTED_LEGACY: Unsupported legacy
 *         - FTDF_UNSUPPORTED_SECURITY: Unsupporteds security
 *         - FTDF_INVALID_PARAMETER: Invalid parameter
 *         - FTDF_TRANSACTION_OVERFLOW: Transaction overflow
 *         - FTDF_TRANSACTION_EXPIRED: Transaction expired
 *         - FTDF_NO_BEACON: No beacon received
 *         - FTDF_SCAN_IN_PROGRESS: Scan in progress
 *         - FTDF_NO_SHORT_ADDRESS: FTDF does not have a short address
 *         - FTDF_SLOTFRAME_NOT_FOUND: Slotframe not found
 *         - FTDF_MAX_SLOTFRAMES_EXCEEDED: Max slotframes exceeded
 *         - FTDF_UNKNOWN_LINK: Unknown link
 *         - FTDF_MAX_LINKS_EXCEEDED: Max links exceeded
 *         - FTDF_UNSUPPORTED_ATTRIBUTE: Unsupported PIB attribute
 *         - FTDF_READ_ONLY: Read onli PIB attribute
 *         - FTDF_INVALID_HANDLE: Invalid handle
 *         - FTDF_PAN_AT_CAPACITY: PAN at capacity
 *         - FTDF_PAN_ACCESS_DENIED: PAN access denied
 *         - FTDF_HOPPING_SEQUENCE_OFFSET_DUPLICATION: Hopping sequence offset duplication
 */
typedef uint8_t FTDF_Status;
#define FTDF_SUCCESS                             0
#define FTDF_CHANNEL_ACCESS_FAILURE              1
#define FTDF_NO_ACK                              2
#define FTDF_NO_DATA                             3
#define FTDF_COUNTER_ERROR                       4
#define FTDF_FRAME_TOO_LONG                      5
#define FTDF_IMPROPER_KEY_TYPE                   6
#define FTDF_IMPROPER_SECURITY_LEVEL             7
#define FTDF_SECURITY_ERROR                      8
#define FTDF_UNAVAILABLE_KEY                     9
#define FTDF_UNAVAILABLE_DEVICE                  10
#define FTDF_UNAVAILABLE_SECURITY_LEVEL          11
#define FTDF_UNSUPPORTED_LEGACY                  12
#define FTDF_UNSUPPORTED_SECURITY                13
#define FTDF_INVALID_PARAMETER                   14
#define FTDF_TRANSACTION_OVERFLOW                15
#define FTDF_TRANSACTION_EXPIRED                 16
#define FTDF_ON_TIME_TOO_LONG                    17
#define FTDF_LIMIT_REACHED                       18
#define FTDF_NO_BEACON                           19
#define FTDF_SCAN_IN_PROGRESS                    20
#define FTDF_INVALID_INDEX                       21
#define FTDF_NO_SHORT_ADDRESS                    22
#define FTDF_SUPERFRAME_OVERLAP                  23
#define FTDF_TRACKING_OFF                        24
#define FTDF_SLOTFRAME_NOT_FOUND                 25
#define FTDF_MAX_SLOTFRAMES_EXCEEDED             26
#define FTDF_UNKNOWN_LINK                        27
#define FTDF_MAX_LINKS_EXCEEDED                  28
#define FTDF_UNSUPPORTED_ATTRIBUTE               29
#define FTDF_READ_ONLY                           30
#define FTDF_INVALID_HANDLE                      31
#define FTDF_PAN_AT_CAPACITY                     32
#define FTDF_PAN_ACCESS_DENIED                   33
#define FTDF_HOPPING_SEQUENCE_OFFSET_DUPLICATION 34

/**
 * \brief Association status
 * \remark Supported statuses:
 *         - FTDF_ASSOCIATION_SUCCESSFUL: Associate request granted
 *         - FTDF_ASSOCIATION_PAN_AT_CAPACITY: Asscociate denied, PAN at capacity
 *         - FTDF_ASSOCIATION_PAN_ACCESS_DENIED: Associate denied
 *         - FTDF_FAST_ASSOCIATION_SUCCESSFUL: Associate request granted (fast)
 */
typedef uint8_t FTDF_AssociationStatus;
#define FTDF_ASSOCIATION_SUCCESSFUL                          0x00
#define FTDF_ASSOCIATION_PAN_AT_CAPACITY                     0x01
#define FTDF_ASSOCIATION_PAN_ACCESS_DENIED                   0x02
#define FTDF_ASSOCIATION_HOPPING_SEQUENCE_OFFSET_DUPLICATION 0x03
#define FTDF_FAST_ASSOCIATION_SUCCESSFUL                     0x80

/**
 * \brief Address mode
 * \remark Supported address modes:
 *         - FTDF_NO_ADDRESS 
 *         - FTDF_SHORT_ADDRESS 
 *         - FTDF_EXTENDED_ADDRESS 
 */
typedef uint8_t FTDF_AddressMode;
#define FTDF_NO_ADDRESS       0
#define FTDF_SIMPLE_ADDRESS   1
#define FTDF_SHORT_ADDRESS    2
#define FTDF_EXTENDED_ADDRESS 3

/**
 * \brief  PAN ID
 * \remark Range 0.. 65535
 */
typedef uint16_t FTDF_PANId;

typedef uint8_t  FTDF_SimpleAddress;

/**
 * \brief  Short address
 * \remark Range 00:00 - ff:ff
 */
typedef uint16_t FTDF_ShortAddress;

/**
 * \brief  Extended address
 * \remark Range 00:00:00:00:00:00:00:00 - ff:ff:ff:ff:ff:ff:ff:ff
 */
typedef uint64_t FTDF_ExtAddress;

typedef union
{
    /** \brief DO NOT USE */
    FTDF_SimpleAddress simpleAddress;
    /** \brief Short address */
    FTDF_ShortAddress  shortAddress;
    /** \brief Extended address */
    FTDF_ExtAddress    extAddress;
} FTDF_Address;

#ifdef SIMULATOR
typedef uint16_t FTDF_DataLength;
#else
typedef uint8_t  FTDF_DataLength;
#endif

/**
 * \brief  Handle
 * \remark Range 0..255
 */
typedef uint8_t FTDF_Handle;

/**
 * \brief  Boolean
 * \remark Valid values:
 *         - FTDF_FALSE
 *         - FTDF_TRUE
 */
typedef uint8_t FTDF_Boolean;
#define FTDF_FALSE 0
#define FTDF_TRUE  1

/**
 * \brief  Security level
 * \remark Valid range 0..7
 */
typedef uint8_t  FTDF_SecurityLevel;

/**
 * \brief  Security key ID mode
 * \remark Valid range 0..3
 */
typedef uint8_t  FTDF_KeyIdMode;

/**
 * \brief  Security key index
 * \remark Valid range 0..255
 */
typedef uint8_t  FTDF_KeyIndex;

/**
 * \brief  Sequence number
 * \remark Valid range 0..255
 */
typedef uint8_t  FTDF_SN;

/**
 * \brief  Sequence number
 * \remark Valid range 0..0xffffffffff (5 octets)
 */
typedef uint64_t FTDF_ASN;

/**
 * \brief  Order
 */
typedef uint8_t  FTDF_Order;

/**
 * \brief  Time
 * \remark Timestamp in symbols which wraps around every 0x100000000 symbols
 */
typedef uint32_t FTDF_Time;

/**
 * \brief  Real time
 * \remark Timestamp in symbols which does not wrap (in the lifetime of the device)
 */
typedef uint64_t FTDF_Time64;

typedef uint32_t FTDF_USec;

typedef uint64_t FTDF_PSec;

typedef uint32_t FTDF_NrLowPowerClockCycles;

typedef uint8_t FTDF_NrBackoffPeriods;

/**
 * \brief  Period of time
 * \remark Range 0..65535
 */
typedef uint16_t FTDF_Period;

/**
 * \brief  Size type
 */
typedef uint8_t  FTDF_Size;

/**
 * \brief  Length type
 */
typedef uint8_t  FTDF_Length;

/**
 * \brief  Priority type
 */
typedef uint8_t  FTDF_Priority;

/**
 * \brief  Performance counter
 * \remark Range 0..0xffffffff
 */
typedef uint32_t FTDF_Count;

/**
 * \brief Disassociate reason
 * \remark Allowed values:
 *         - FTDF_COORD_WISH_DEVICE_LEAVE_PAN: Coordinator wishes that device leaves PAN
 *         - FTDF_DEVICE_WISH_LEAVE_PAN: Device wishes to leave PAN
 */
typedef uint8_t  FTDF_DisassociateReason;
#define FTDF_COORD_WISH_DEVICE_LEAVE_PAN 1
#define FTDF_DEVICE_WISH_LEAVE_PAN       2

/**
 * \brief Beacon type
 * \remark Allowed values:
 *         - FTDF_NORMAL_BEACON: Normal beacon
 *         - FTDF_ENHANCED_BEACON: Enhanced beacon
 */
typedef uint8_t FTDF_BeaconType;
#define FTDF_NORMAL_BEACON   0
#define FTDF_ENHANCED_BEACON 1

// MAC constants
/** \brief aBaseSlotDuration */
#define FTDF_BASE_SLOT_DURATION          60
/** \brief aNumSuperframeSlots */
#define FTDF_NUM_SUPERFRAME_SLOTS        16
/** \brief aBaseSuperframeDuration */
#define FTDF_BASE_SUPERFRAME_DURATION    ( FTDF_BASE_SLOT_DURATION * FTDF_NUM_SUPERFRAME_SLOTS )
/** \brief NOT USED */
#define FTDF_GTS_PERSISTENCE_TIME        4
/** \brief aMaxBeaconOverhead */
#define FTDF_MAX_BEACON_OVERHEAD         75
/** \brief aMaxBeaconOverhead */
#define FTDF_MAX_PHY_PACKET_SIZE         127
/** \brief aMaxPHYPacketSize */
#define FTDF_MAX_BEACON_PAYLOAD_LENGTH   ( FTDF_MAX_PHY_PACKET_SIZE - FTDF_MAX_BEACON_OVERHEAD )
/** \brief NOT USED  */
#define FTDF_MAX_LOST_BEACONS            4
/** \brief aMaxMPDUUnsecuredOverhead */
#define FTDF_MAX_MPDU_UNSECURED_OVERHEAD 25
/** \brief aMinMPDUOverhead */
#define FTDF_MIN_MPDU_OVERHEAD           9
/** \brief aMaxMACSafePayloadSize */
#define FTDF_MAX_MAC_SAFE_PAYLOAD_SIZE   ( FTDF_MAX_PHY_PACKET_SIZE - FTDF_MAX_MPDU_UNSECURED_OVERHEAD )
/** \brief aMaxMACSafePayloadSize */
#define FTDF_MAX_PAYLOAD_SIZE            ( FTDF_MAX_PHY_PACKET_SIZE - FTDF_MIN_MPDU_OVERHEAD )
/** \brief aMaxMACPayloadSize */
#define FTDF_MAX_SIFS_FRAME_SIZE         18
/** \brief NOT USED  */
#define FTDF_MIN_CAP_LENGTH              440
/** \brief aUnitBackoffPeriod */
#define FTDF_UNIT_BACKOFF_PERIOD         20

/**
 * \brief PIB attribute ID
 * \remark List of supported PIB attributes, their types/structures and description
 * - FTDF_PIB_EXTENDED_ADDRESS, \link FTDF_ExtAddress \endlink,
 *         The extended address of the device
 * - FTDF_PIB_ACK_WAIT_DURATION, \link FTDF_Period \endlink, The maximum time in symbols that is waited for an ack, Read only
 * - FTDF_PIB_ASSOCIATION_PAN_COORD, \link FTDF_Boolean \endlink, Indication whether the device is associated with a PAN coordinator
 * - FTDF_PIB_ASSOCIATION_PERMIT, \link  FTDF_Boolean \endlink, Indication whether the PAN coordinator grats association requests
 * - FTDF_PIB_AUTO_REQUEST, \link FTDF_Boolean \endlink, Indication whether beacon received while scanning are forwarded to the application or not
 * - FTDF_PIB_BEACON_PAYLOAD, FTDF_Octet*, Pointer to the data to be included in a beacon as payload
 * - FTDF_PIB_BEACON_PAYLOAD_LENGTH, \link FTDF_Size \endlink, Size of the data to be included in a beacon as payload
 * - FTDF_PIB_BEACON_ORDER, \link FTDF_Order \endlink, Fixed to 15 indicating beaconless mode
 * - FTDF_PIB_BSN, \link FTDF_SN \endlink, The current beacon sequence number
 * - FTDF_PIB_COORD_EXTENDED_ADDRESS, \link FTDF_ExtAddress \endlink, The extended address of the coordinator
 * - FTDF_PIB_COORD_SHORT_ADDRESS, \link FTDF_ShortAddress \endlink, The short address of the coordinator
 * - FTDF_PIB_DSN, \link FTDF_SN \endlink, The current data sequence number
 * - FTDF_PIB_MAX_BE, \link FTDF_BEExponent \endlink, The maximum backoff exponent
 * - FTDF_PIB_MAX_CSMA_BACKOFFS, \link FTDF_Size \endlink, The maximum number of backoffs
 * - FTDF_PIB_MAX_FRAME_TOTAL_WAIT_TIME, \link FTDF_Period \endlink, The maximum time in symbols that RX is ON after that a frame is received with FP set.
 * - FTDF_PIB_MAX_FRAME_RETRIES, \link FTDF_Size \endlink, The maximum number of frame retries
 * - FTDF_PIB_MIN_BE, \link FTDF_BEExponent \endlink, The minimum backoff exponent
 * - FTDF_PIB_LIFS_PERIOD, \link FTDF_Period \endlink, The long IFS period in number of symbols, Read oonly
 * - FTDF_PIB_SIFS_PERIOD, \link FTDF_Period \endlink, The short IFS period in number of symbols, Read oonly
 * - FTDF_PIB_PAN_ID, \link FTDF_PANId \endlink, The PAN ID of the device
 * - FTDF_PIB_PROMISCUOUS_MODE, \link FTDF_Boolean \endlink, Indication whether the promiscuous is enable or not
 * - FTDF_PIB_RESPONSE_WAIT_TIME, \link FTDF_Size \endlink, The maximum time in aBaseSuperFramePeriod's (960 symbols) that is waited for a command frame response
 * - FTDF_PIB_RX_ON_WHEN_IDLE, \link FTDF_Boolean \endlink, Indication whether the receiver must be on when idle
 * - FTDF_PIB_SECURITY_ENABLED, \link FTDF_Boolean \endlink, Indication whether the security is enabled
 * - FTDF_PIB_SHORT_ADDRESS, \link FTDF_ShortAddress \endlink, The short address of the device
 * - FTDF_PIB_SYNC_SYMBOL_OFFSET, \link FTDF_Period \endlink, The offset in symbols between the start of frame and that the timestamp is taken
 * - FTDF_PIB_TIMESTAMP_SUPPORTED, \link FTDF_Boolean \endlink, Indication whether timestamping is supported
 * - FTDF_PIB_TRANSACTION_PERSISTENCE_TIME, \link FTDF_Period \endlink, The maximum time in aBaseSuperFramePeriod's (960 symbols) that indirect data requests are queued
 * - FTDF_PIB_ENH_ACK_WAIT_DURATION, \link FTDF_Period \endlink, The maximum time in symbols that is waited for an enhanced ack
 * - FTDF_PIB_IMPLICIT_BROADCAST, \link FTDF_Boolean \endlink, Indication whether frames without a destination PAN are treated as broadcasts
 * - FTDF_PIB_DISCONNECT_TIME, \link FTDF_Period \endlink, The time in timeslots that disassoctate frames are send before disconnecting
 * - FTDF_PIB_JOIN_PRIORITY, \link FTDF_Priority \endlink, The join priority
 * - FTDF_PIB_ASN, \link FTDF_ASN \endlink, The current ASN
 * - FTDF_PIB_SLOTFRAME_TABLE, \link FTDF_SlotframeTable \endlink, The slotframe table, Read only
 * - FTDF_PIB_LINK_TABLE, \link FTDF_LinkTable \endlink, The link table, Read only
 * - FTDF_PIB_TIMESLOT_TEMPLATE, \link FTDF_TimeslotTemplate \endlink, The current timeslot template
 * - FTDF_PIB_HOPPINGSEQUENCE_ID, \link FTDF_HoppingSequenceId \endlink, The ID of the current hopping sequence
 * - FTDF_PIB_CHANNEL_PAGE, \link FTDF_ChannelPage \endlink, The current channel page
 * - FTDF_PIB_HOPPING_SEQUENCE_LENGTH, \link FTDF_Length \endlink, Length of the current hopping sequence
 * - FTDF_PIB_HOPPING_SEQUENCE_LIST, \link FTDF_ChannelNumber \endlink, Hopping sequence
 * - FTDF_PIB_CURRENT_HOP, \link FTDF_Length \endlink, The current hop
 * - FTDF_PIB_CSL_PERIOD, \link FTDF_Period \endlink, The CSL sample period in units of 10 symbols
 * - FTDF_PIB_CSL_MAX_PERIOD, \link FTDF_Period \endlink, The maximum CSL sample period of devices in the PAN in units of 10 symbols
 * - FTDF_PIB_CSL_CHANNEL_MASK, \link FTDF_Bitmap32 \endlink, Bitmapped list of channels to be sample in CSL mode
 * - FTDF_PIB_CSL_FRAME_PENDING_WAIT_T, \link FTDF_Period \endlink, The maximum time in symbols that RX is ON after that a frame is received with FP set in CSL mode.
 * - FTDF_PIB_PERFORMANCE_METRICS, \link FTDF_PerformanceMetrics \endlink, The performance metrics, Read only
 * - FTDF_PIB_EB_IE_LIST, \link FTDF_IEList \endlink, Payload IE list to be added to an enhanced beacon
 * - FTDF_PIB_EBSN, \link FTDF_SN \endlink, Current enhanced beacon sequence number
 * - FTDF_PIB_EB_AUTO_SA, \link FTDF_AutoSA \endlink, Source address mode of auto generated enhanced beacons
 * - FTDF_PIB_EACK_IE_LIST, \link FTDF_IEList \endlink, Payload IE list to be added to an enhanced ack
 * - FTDF_PIB_KEY_TABLE, \link FTDF_KeyTable \endlink, Security key table
 * - FTDF_PIB_DEVICE_TABLE, \link FTDF_DeviceTable \endlink, Security device table
 * - FTDF_PIB_SECURITY_LEVEL_TABLE, \link FTDF_SecurityLevelTable \endlink, Security level table
 * - FTDF_PIB_FRAME_COUNTER, \link FTDF_FrameCounter \endlink, Current security frame counter
 * - FTDF_PIB_MT_DATA_SECURITY_LEVEL, \link FTDF_SecurityLevel \endlink, Security level for auto generated data frames
 * - FTDF_PIB_MT_DATA_KEY_ID_MODE, \link FTDF_KeyIdMode \endlink, Security key ID mode for auto generated data frames
 * - FTDF_PIB_MT_DATA_KEY_SOURCE, FTDF_Octet[ 8 ], Security key source for auto generated data frames
 * - FTDF_PIB_MT_DATA_KEY_INDEX, \link FTDF_KeyIndex \endlink, Security key index for auto generated data frames
 * - FTDF_PIB_DEFAULT_KEY_SOURCE, FTDF_Octet[ 8 ], Default key source
 * - FTDF_PIB_FRAME_COUNTER_MODE, \link FTDF_FrameCounterMode \endlink, Security frame counter mode
 * - FTDF_PIB_CSL_SYNC_TX_MARGIN, \link FTDF_Period \endlink, The margin in unit of 10 symbols used by FTDF in CSL mode in case of a synchronised transmission
 * - FTDF_PIB_CSL_MAX_AGE_REMOTE_INFO, \link FTDF_Period \endlink, The time in unit of 10 symbols after which FTDF discard the remote synchronisation info.
 * - FTDF_PIB_TSCH_ENABLED, \link FTDF_Boolean \endlink, Indicates whether the TSCH mode is enabled or not, Read only
 * - FTDF_PIB_LE_ENABLED, \link FTDF_Boolean \endlink, Indicates whether the CSL mode is enabled or not
 * - FTDF_PIB_CURRENT_CHANNEL, \link FTDF_ChannelNumber \endlink, The current channel used by FTDF
 * - FTDF_PIB_CHANNELS_SUPPORTED, \link FTDF_ChannelDescriptorList \endlink, List of channels supported by FTDF
 * - FTDF_PIB_TX_POWER_TOLERANCE, \link FTDF_TXPowerTolerance \endlink, TX power tolerance
 * - FTDF_PIB_TX_POWER, \link FTDF_DBm \endlink, TX power
 * - FTDF_PIB_CCA_MODE, \link FTDF_CCAMode \endlink, CCA mode
 * - FTDF_PIB_CURRENT_PAGE, \link FTDF_ChannelPage \endlink, Current channel page
 * - FTDF_PIB_MAX_FRAME_DURATION, \link FTDF_Period \endlink, The maximum number of symbols in frame, Read only
 * - FTDF_PIB_SHR_DURATION, \link FTDF_Period \endlink, Synchronisation header length in symbols, Read only
 * - FTDF_PIB_TRAFFIC_COUNTERS, \link FTDF_TrafficCounters \endlink, Miscelaneous traffic counters, Read only
 * - FTDF_PIB_LE_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports LE (CSL), Read only
 * - FTDF_PIB_LL_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports LL, Read only
 * - FTDF_PIB_DSME_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports DSME, Read only
 * - FTDF_PIB_RFID_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports RFID, Read only
 * - FTDF_PIB_AMCA_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports AMCA, Read only
 * - FTDF_PIB_TSCH_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports FTDF, Read only
 * - FTDF_PIB_METRICS_CAPABLE, \link FTDF_Boolean \endlink, Indicates whether FTDF supports metrics, Read only
 * - FTDF_PIB_RANGING_SUPPORTED, \link FTDF_Boolean \endlink, Indicates whether FTDF supports ranging, Read only
 * - FTDF_PIB_KEEP_PHY_ENABLED, \link FTDF_Boolean \endlink, Indicates whether the PHY must be kept enabled
 * - FTDF_PIB_METRICS_ENABLED, \link FTDF_Boolean \endlink, Indicates whether metrics are enabled or not
 * - FTDF_PIB_BEACON_AUTO_RESPOND, \link FTDF_Boolean \endlink, Indicates whether FTDF must send automatically a beacon at a BECAON_REQUEST command frame or must forward the request to the application using FTDF_BEACON_REQUEST_INDICATION.
 * - FTDF_PIB_TS_SYNC_CORRECT_THRESHOLD, \link FTDF_Period \endlink, The minimum TSCH slot sync offset in microseconds before resyncing
 */
typedef uint8_t FTDF_PIBAttribute;
// See Table 52 "MAC PIB attributes" of IEEE 802.15.4-2011 and IEEE 802.15.4e-2012 for more details

// NOTE: Be careful with changing the order of these PIB attributes because initialization of related
//       registers will be done in the order defined here.
#define FTDF_PIB_EXTENDED_ADDRESS                    1
#define FTDF_PIB_ACK_WAIT_DURATION                   2
#define FTDF_PIB_ASSOCIATION_PAN_COORD               3
#define FTDF_PIB_ASSOCIATION_PERMIT                  4
#define FTDF_PIB_AUTO_REQUEST                        5
#define FTDF_PIB_BATT_LIFE_EXT                       6
#define FTDF_PIB_BATT_LIFE_EXT_PERIODS               7
#define FTDF_PIB_BEACON_PAYLOAD                      8
#define FTDF_PIB_BEACON_PAYLOAD_LENGTH               9
#define FTDF_PIB_BEACON_ORDER                        10
#define FTDF_PIB_BEACON_TX_TIME                      11
#define FTDF_PIB_BSN                                 12
#define FTDF_PIB_COORD_EXTENDED_ADDRESS              13
#define FTDF_PIB_COORD_SHORT_ADDRESS                 14
#define FTDF_PIB_DSN                                 15
#define FTDF_PIB_GTS_PERMIT                          16
#define FTDF_PIB_MAX_BE                              17
#define FTDF_PIB_MAX_CSMA_BACKOFFS                   18
#define FTDF_PIB_MAX_FRAME_TOTAL_WAIT_TIME           19
#define FTDF_PIB_MAX_FRAME_RETRIES                   20
#define FTDF_PIB_MIN_BE                              21
#define FTDF_PIB_LIFS_PERIOD                         22
#define FTDF_PIB_SIFS_PERIOD                         23
#define FTDF_PIB_PAN_ID                              24
#define FTDF_PIB_PROMISCUOUS_MODE                    25
#define FTDF_PIB_RESPONSE_WAIT_TIME                  26
#define FTDF_PIB_RX_ON_WHEN_IDLE                     27
#define FTDF_PIB_SECURITY_ENABLED                    28
#define FTDF_PIB_SHORT_ADDRESS                       29
#define FTDF_PIB_SUPERFRAME_ORDER                    30
#define FTDF_PIB_SYNC_SYMBOL_OFFSET                  31
#define FTDF_PIB_TIMESTAMP_SUPPORTED                 32
#define FTDF_PIB_TRANSACTION_PERSISTENCE_TIME        33
#define FTDF_PIB_TX_CONTROL_ACTIVE_DURATION          34
#define FTDF_PIB_TX_CONTROL_PAUSE_DURATION           35
#define FTDF_PIB_ENH_ACK_WAIT_DURATION               36
#define FTDF_PIB_IMPLICIT_BROADCAST                  37
#define FTDF_PIB_SIMPLE_ADDRESS                      38
#define FTDF_PIB_DISCONNECT_TIME                     39
#define FTDF_PIB_JOIN_PRIORITY                       40
#define FTDF_PIB_ASN                                 41
#define FTDF_PIB_NO_HL_BUFFERS                       42
#define FTDF_PIB_SLOTFRAME_TABLE                     43
#define FTDF_PIB_LINK_TABLE                          44
#define FTDF_PIB_TIMESLOT_TEMPLATE                   45
#define FTDF_PIB_HOPPINGSEQUENCE_ID                  46
#define FTDF_PIB_CHANNEL_PAGE                        47
#define FTDF_PIB_NUMBER_OF_CHANNELS                  48
#define FTDF_PIB_PHY_CONFIGURATION                   49
#define FTDF_PIB_EXTENTED_BITMAP                     50
#define FTDF_PIB_HOPPING_SEQUENCE_LENGTH             51
#define FTDF_PIB_HOPPING_SEQUENCE_LIST               52
#define FTDF_PIB_CURRENT_HOP                         53
#define FTDF_PIB_DWELL_TIME                          54
#define FTDF_PIB_CSL_PERIOD                          55
#define FTDF_PIB_CSL_MAX_PERIOD                      56
#define FTDF_PIB_CSL_CHANNEL_MASK                    57
#define FTDF_PIB_CSL_FRAME_PENDING_WAIT_T            58
#define FTDF_PIB_LOW_ENERGY_SUPERFRAME_SUPPORTED     59
#define FTDF_PIB_LOW_ENERGY_SUPERFRAME_SYNC_INTERVAL 60
#define FTDF_PIB_PERFORMANCE_METRICS                 61
#define FTDF_PIB_USE_ENHANCED_BEACON                 62
#define FTDF_PIB_EB_IE_LIST                          63
#define FTDF_PIB_EB_FILTERING_ENABLED                64
#define FTDF_PIB_EBSN                                65
#define FTDF_PIB_EB_AUTO_SA                          66
#define FTDF_PIB_EACK_IE_LIST                        67
#define FTDF_PIB_KEY_TABLE                           68
#define FTDF_PIB_DEVICE_TABLE                        69
#define FTDF_PIB_SECURITY_LEVEL_TABLE                70
#define FTDF_PIB_FRAME_COUNTER                       71
#define FTDF_PIB_MT_DATA_SECURITY_LEVEL              72
#define FTDF_PIB_MT_DATA_KEY_ID_MODE                 73
#define FTDF_PIB_MT_DATA_KEY_SOURCE                  74
#define FTDF_PIB_MT_DATA_KEY_INDEX                   75
#define FTDF_PIB_DEFAULT_KEY_SOURCE                  76
#define FTDF_PIB_PAN_COORD_EXTENDED_ADDRESS          77
#define FTDF_PIB_PAN_COORD_SHORT_ADDRESS             78
#define FTDF_PIB_FRAME_COUNTER_MODE                  79
#define FTDF_PIB_CSL_SYNC_TX_MARGIN                  80
#define FTDF_PIB_CSL_MAX_AGE_REMOTE_INFO             81
#define FTDF_PIB_TSCH_ENABLED                        82
#define FTDF_PIB_LE_ENABLED                          83

// See Table 71 "PHY PIB attributes" of IEEE 802.15.4-2011 for more details
#define FTDF_PIB_CURRENT_CHANNEL           84
#define FTDF_PIB_CHANNELS_SUPPORTED        85
#define FTDF_PIB_TX_POWER_TOLERANCE        86
#define FTDF_PIB_TX_POWER                  87
#define FTDF_PIB_CCA_MODE                  88
#define FTDF_PIB_CURRENT_PAGE              89
#define FTDF_PIB_MAX_FRAME_DURATION        90
#define FTDF_PIB_SHR_DURATION              91

#define FTDF_PIB_TRAFFIC_COUNTERS          92
#define FTDF_PIB_LE_CAPABLE                93
#define FTDF_PIB_LL_CAPABLE                94
#define FTDF_PIB_DSME_CAPABLE              95
#define FTDF_PIB_RFID_CAPABLE              96
#define FTDF_PIB_AMCA_CAPABLE              97
#define FTDF_PIB_METRICS_CAPABLE           98
#define FTDF_PIB_RANGING_SUPPORTED         99
#define FTDF_PIB_KEEP_PHY_ENABLED          100
#define FTDF_PIB_METRICS_ENABLED           101
#define FTDF_PIB_BEACON_AUTO_RESPOND       102
#define FTDF_PIB_TSCH_CAPABLE              103
#define FTDF_PIB_TS_SYNC_CORRECT_THRESHOLD 104

/* Proprietary PIB. */
#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
#define FTDF_PIB_BO_IRQ_THRESHOLD          105
#define FTDF_PIB_PTI_CONFIG                106
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */

// Total number of PIB attributes
#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
#define FTDF_NR_OF_PIB_ATTRIBUTES          106
#else /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */
#define FTDF_NR_OF_PIB_ATTRIBUTES          104
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */

/* Default values */
#ifndef FTDF_BO_IRQ_THRESHOLD
#define FTDF_BO_IRQ_THRESHOLD               0xff
#endif

#if FTDF_DBG_BUS_ENABLE
/**
 * \brief Debug bus mode.
 *
 */
typedef uint8_t FTDF_DbgMode;

/**
 * \brief Disable debug signals
 */
#define FTDF_DBG_DISABLE                        0x00

/**
 * \brief Legacy debug mode
 *              diagnose bus bit 7 = ed_request
 *              diagnose bus bit 6 = gen_irq
 *              diagnose bus bit 5 = tx_en
 *              diagnose bus bit 4 = rx_en
 *              diagnose bus bit 3 = phy_en
 *              diagnose bus bit 2 = tx_valid
 *              diagnose bus bit 1 = rx_sof
 *              diagnose bus bit 0 = rx_eof
 */
#define FTDF_DBG_LEGACY                         0x01

/**
 * \brief Clocks and reset
 *              diagnose bus bit 7-3 = "00000"
 *              diagnose bus bit 2   = lp_clk divide by 2
 *              diagnose bus bit 1   = mac_clk divide by 2
 *              diagnose bus bit 0   = hclk divided by 2
 */
#define FTDF_DBG_CLK_RESET                      0x02

/**
 * \brief Rx phy signals
 *              diagnose_bus bit 7   = rx_enable towards the rx_pipeline
 *              diagnose bus bit 6   = rx_sof from phy
 *              diagnose bus bit 5-2 = rx_data from phy
 *              diagnose bus bit 1   = rx_eof to phy
 *              diagnose bus bit 0   = rx_sof event from rx_mac_timing block
 */
#define FTDF_DBG_RX_PHY_SIGNALS                 0x10

/**
 * \brief Rx sof and length
 *              diagnose_bus bit 7   = rx_sof
 *              diagnose bus bit 6-0 = rx_mac_length from rx_mac_timing block
 */
#define FTDF_DBG_RX_SOF_AND_LENGTH              0x11

/**
 * \brief Rx mac timing output
 *              diagnose_bus bit 7   = Enable from rx_mac_timing block
 *              diagnose bus bit 6   = Sop    from rx_mac_timing block
 *              diagnose bus bit 5   = Eop    from rx_mac_timing block
 *              diagnose bus bit 4   = Crc    from rx_mac_timing block
 *              diagnose bus bit 3   = Err    from rx_mac_timing block
 *              diagnose bus bit 2   = Drop   from rx_mac_timing block
 *              diagnose bus bit 1   = Forward from rx_mac_timing block
 *              diagnose bus bit 0   = rx_sof
 */
#define FTDF_DBG_RX_MAC_TIMING_OUTPUT           0x12

/**
 * \brief Rx mac frame parser output
 *              diagnose_bus bit 7   = Enable from mac_frame_parser block
 *              diagnose bus bit 6   = Sop    from  mac_frame_parser block
 *              diagnose bus bit 5   = Eop    from  mac_frame_parser block
 *              diagnose bus bit 4   = Crc    from  mac_frame_parser block
 *              diagnose bus bit 3   = Err    from  mac_frame_parser block
 *              diagnose bus bit 2   = Drop   from  mac_frame_parser block
 *              diagnose bus bit 1   = Forward from mac_frame_parser block
 *              diagnose bus bit 0   = rx_sof
 */
#define FTDF_DBG_RX_MAC_FRAME_PARSER_OUTPUT     0x13

/**
 * \brief Rx status to Umac
 *              diagnose_bus bit 7   = rx_frame_stat_umac.crc16_error
 *              diagnose bus bit 6   = rx_frame_stat_umac.res_frm_type_error
 *              diagnose bus bit 5   = rx_frame_stat_umac.res_frm_version_error
 *              diagnose bus bit 4   = rx_frame_stat_umac.dpanid_error
 *              diagnose bus bit 3   = rx_frame_stat_umac.daddr_error
 *              diagnose bus bit 2   = rx_frame_stat_umac.spanid_error
 *              diagnose bus bit 1   = rx_frame_stat_umac.ispan_coord_error
 *              diagnose bus bit 0   = rx_sof
 */
#define FTDF_DBG_RX_STATUS_TO_UMAC              0x14

/**
 * \brief Rx status to lmac
 *              diagnose_bus bit 7   = rx_frame_stat.packet_valid
 *              diagnose bus bit 6   = rx_frame_stat.rx_sof_e
 *              diagnose bus bit 5   = rx_frame_stat.rx_eof_e
 *              diagnose bus bit 4   = rx_frame_stat.wakeup_frame
 *              diagnose bus bit 3-1 = rx_frame_stat.frame_type
 *              diagnose bus bit 0   = rx_frame_stat.rx_sqnr_valid
 */
#define FTDF_DBG_RX_STATUS_TO_LMAC              0x15

/**
 * \brief Rx buffer control
 *              diagnose_bus bit 7-4 = prov_from_swio.rx_read_buf_ptr
 *              diagnose bus bit 3-0 = stat_to_swio.rx_write_buf_ptr
 */
#define FTDF_DBG_RX_BUFFER_CONTROL              0x16

/**
 * \brief Rx interrupts
 *              diagnose_bus bit 7   = stat_to_swio.rx_buf_avail_e
 *              diagnose bus bit 6   = stat_to_swio.rx_buf_full
 *              diagnose bus bit 5   = stat_to_swio.rx_buf_overflow_e
 *              diagnose bus bit 4   = stat_to_swio.rx_sof_e
 *              diagnose bus bit 3   = stat_to_swio.rxbyte_e
 *              diagnose bus bit 2   = rx_frame_ctrl.rx_enable
 *              diagnose bus bit 1   = rx_eof
 *              diagnose bus bit 0   = rx_sof
 */
#define FTDF_DBG_RX_INTERRUPTS                  0x17

/**
 * \brief MAC frame parser events
 *              diagnose_bus bit 7-3 =
 *                      Prt statements mac frame parser
 *                      0 Reset
 *                      1 Multipurpose frame with no destination PAN ID and macImplicitBroadcast is
 *                        false and not PAN coordinator dropped
 *                      2 Multipurpose frame with no destination address and macImplicitBroadcast is
 *                        false and not PAN coordinator dropped
 *                      3 RX unsupported frame type detected
 *                      4 RX non Beacon frame detected and dropped in RxBeaconOnly mode
 *                      5 RX frame passed due to macAlwaysPassFrmType set
 *                      6 RX unsupported da_mode = 01 for frame_version 0x0- detected
 *                      7 RX unsupported sa_mode = 01 for frame_version 0x0- detected
 *                      8 Data or command frame with no destination PAN ID and macImplicitBroadcast
 *                        is false and not PAN coordinator dropped
 *                      9 Data or command frame with no destination address and macImplicitBroadcast
 *                        is false and not PAN coordinator dropped
 *                      10 RX unsupported frame_version detected
 *                      11 Multipurpose frame with no destination PAN ID and macImplicitBroadcast is
 *                         false and not PAN coordinator dropped
 *                      12 Multipurpose frame with no destination address and macImplicitBroadcast
 *                         is false and not PAN coordinator dropped
 *                      13 RX unsupported frame_version detected
 *                      14 RX Destination PAN Id check failed
 *                      15 RX Destination address (1 byte) check failed
 *                      16 RX Destination address (2 byte) check failed
 *                      17 RX Destination address (8 byte) check failed
 *                      18 RX Source PAN Id check for Beacon frames failed
 *                      19 RX Source PAN Id check failed
 *                      20 Auxiliary Security Header security control word received
 *                      21 Auxiliary Security Header unsupported_legacy received frame_version 00
 *                      22 Auxiliary Security Header unsupported_legacy security frame_version 11
 *                      23 Auxiliary Security Header frame counter field received
 *                      24 Auxiliary Security Header Key identifier field received
 *                      25 Errored dDestination Wakeup frame found send to UMAC, not indicated
 *                         towards LMAC controller
 *                      26 MacAlwaysPassWakeUpFrames = 1, Wakeup frame found send to UMAC, not
 *                         indicated towards LMAC controller
 *                      27 Wakeup frame found send to LMAC controller and UMAC
 *                      28 Wakeup frame found send to LMAC controller, dropped towards UMAC
 *                      29 Command frame with data_request command received
 *                      30 Coordinator realignment frame received
 *                      31 Not Used
 *              diagnose bus bit 2-0 = frame_type
 */
#define FTDF_DBG_RX_MAC_FRAME_PARSER_EVENTS     0x18

/**
 * \brief MAC frame parser states
 *              diagnose_bus bit 7-4 =
 *                      Framestates mac frame parser
 *                      0 idle_state
 *                      1 fr_ctrl_state
 *                      2 fr_ctrl_long_state
 *                      3 seq_nr_state
 *                      4 dest_pan_id_state
 *                      5 dest_addr_state
 *                      6 src_pan_id_state
 *                      7 src_addr_state
 *                      8 aux_sec_hdr_state
 *                      9 hdr_ie_state
 *                      10 pyld_ie_state
 *                      11 ignore_state
 *                      12-16  Not used
 *              diagnose bus bit 3   = rx_mac_sof_e
 *              diagnose bus bit 2-0 = frame_type
 */
#define FTDF_DBG_RX_MAC_FRAME_PARSER_STATES     0x19

/**
 * \brief Top and bottom interfaces tx datapath
 *              diagnose_bus bit 7   = tx_mac_ld_strb
 *              diagnose bus bit 6   = tx_mac_drdy
 *              diagnose bus bit 5   = tx_valid
 *              diagnose bus bit 4-1 = tx_data
 *              diagnose bus bit 0   = symbol_ena
 */
#define FTDF_DBG_TX_TOP_BOTTOM_INTERFACES       0x20

/**
 * \brief Control signals for tx datapath
 *              diagnose_bus bit 7   = TxTransparentMode
 *              diagnose bus bit 6   = ctrl_lmac_to_tx.CRC16_ena
 *              diagnose bus bit 5   = ctrl_lmac_to_tx.tx_start
 *              diagnose bus bit 4   = ctrl_lmac_to_tx.gen_ack
 *              diagnose bus bit 3   = ctrl_lmac_to_tx.gen_wu
 *              diagnose bus bit 2-1 = ctrl_lmac_to_tx.tx_frame_nmbr
 *              diagnose bus bit 0   = tx_valid
 */
#define FTDF_DBG_TX_CONTROL_SIGNALS             0x21

/**
 * \brief Control signals for wakeup frames
 *              diagnose_bus bit 7   = ctrl_lmac_to_tx.tx_start
 *              diagnose bus bit 6   = ctrl_lmac_to_tx.gen_wu
 *              diagnose bus bit 5-1 = ctrl_lmac_to_tx.gen_wu_RZ(4 DOWNTO 0)
 *              diagnose bus bit 0   = ctrl_tx_to_lmac.tx_rz_zero
 */
#define FTDF_DBG_TX_WAKEUP_CONTROL_SIGNALS      0x22

/**
 * \brief Data signals for wakeup frame
 *              diagnose_bus bit 7   = ctrl_lmac_to_tx.tx_start
 *              diagnose bus bit 6   = ctrl_lmac_to_tx.gen_wu
 *              diagnose bus bit 5   = tx_valid
 *              diagnose bus bit 4-1 = tx_data
 *              diagnose bus bit 0   = ctrl_tx_to_lmac.tx_rz_zero
 */
#define FTDF_DBG_TX_WAKUP_DATA_SIGNALS          0x23

/**
 * \brief Data and control ack frame
 *              diagnose_bus bit 7   = ctrl_lmac_to_tx.tx_start
 *              diagnose bus bit 6   = ctrl_lmac_to_tx.gen_ack
 *              diagnose bus bit 5   = tx_valid
 *              diagnose bus bit 4-1 = tx_data
 *              diagnose bus bit 0   = symbol_ena
 */
#define FTDF_DBG_TX_ACK_                        0x24


/**
 * \brief PHY signals
 *              diagnose_bus bit 7   = phy_en
 *              diagnose bus bit 6   = tx_en
 *              diagnose bus bit 5   = rx_en
 *              diagnose bus bit 4-1 = phyattr(3 downto 0)
 *              diagnose bus bit 0   = ed_request
 */
#define FTDF_DBG_LMAC_PHY_SIGNALS               0x30

/**
 * \brief PHY enable and detailed state machine info
 *              diagnose_bus bit 7   = phy_en
 *              diagnose bus bit 6-0 = prt statements detailed state machine info
 *                      0 Reset
 *                      1 MAIN_STATE_IDLE TX_ACKnowledgement frame skip CSMA_CA
 *                      2 MAIN_STATE_IDLE : Wake-Up frame resides in buffer no
 *                      3 MAIN_STATE_IDLE : TX frame in TSCH mode
 *                      4 MAIN_STATE_IDLE : TX frame
 *                      5 MAIN_STATE_IDLE : goto SINGLE_CCA
 *                      6 MAIN_STATE_IDLE : goto Energy Detection
 *                      7 MAIN_STATE_IDLE : goto RX
 *                      8 MAIN_STATE_IDLE de-assert phy_en wait for
 *                      9 MAIN_STATE_IDLE Start phy_en and assert phy_en wait for :
 *                      10 MAIN_STATE_CSMA_CA_WAIT_FOR_METADATA framenr :
 *                      11 MAIN_STATE_CSMA_CA framenr :
 *                      12 MAIN_STATE_CSMA_CA start CSMA_CA
 *                      14 MAIN_STATE_CSMA_CA skip CSMA_CA
 *                      15 MAIN_STATE_WAIT_FOR_CSMA_CA csma_ca Failed for CSL mode
 *                      16 MAIN_STATE_WAIT_FOR_CSMA_CA csma_ca Failed
 *                      17 MAIN_STATE_WAIT_FOR_CSMA_CA csma_ca Success
 *                      18 MAIN_STATE_SINGLE_CCA CCA failed
 *                      19 MAIN_STATE_SINGLE_CCA CCA ok
 *                      20 MAIN_STATE_WAIT_ACK_DELAY wait time elapsed
 *                      21 MAIN_STATE_WAIT ACK_DELAY : Send Ack in TSCH mode
 *                      22 MAIN_STATE_WAIT ACK_DELAY : Ack not scheduled in time in TSCH mode
 *                      23 MAIN_STATE_TSCH_TX_FRAME macTSRxTx time elapsed
 *                      24 MAIN_STATE_TX_FRAME it is CSL mode, start the WU seq for macWUPeriod
 *                      25 MAIN_STATE_TX_FRAME1
 *                      26 MAIN_STATE_TX_FRAME_W1 exit, waited for :
 *                      27 MAIN_STATE_TX_FRAME_W2 exit, waited for :
 *                      28 MAIN_STATE_TX_WAIT_LAST_SYMBOL exit
 *                      29 MAIN_STATE_TX_RAMPDOWN_W exit, waited for :
 *                      30 MAIN_STATE_TX_PHYTRXWAIT exit, waited for :
 *                      31 MAIN_STATE_GEN_IFS , Ack with frame pending received
 *                      32 MAIN_STATE_GEN_IFS , Ack requested but DisRXackReceivedca is set
 *                      33 MAIN_STATE_GEN_IFS , instead of generating an IFS, switch the rx-on for
 *                         an ACK
 *                      34 MAIN_STATE_GEN_IFS , generating an SIFS (Short Inter Frame Space)
 *                      35 MAIN_STATE_GEN_IFS , generating an LIFS (Long Inter Frame Space)
 *                      36 MAIN_STATE_GEN_IFS_FINISH in CSL mode, 'cslperiod_timer_ready' is ready
 *                         sent the data frame
 *                      37 MAIN_STATE_GEN_IFS_FINISH in CSL mode, 'Rendezvous zero time not yet
 *                         transmitted sent another WU frame
 *                      38 MAIN_STATE_GEN_IFS_FINISH exit, corrected for :
 *                      39 MAIN_STATE_GEN_IFS_FINISH in CSL mode, rx_resume_after_tx is set
 *                      40 MAIN_STATE_SENT_STATUS CSLMode wu_sequence_done_flag :
 *                      41 MAIN_STATE_ADD_DELAY exit, goto RX for frame pending time
 *                      42 MAIN_STATE_ADD_DELAY exit, goto IDLE
 *                      43 MAIN_STATE_RX switch the RX from off to on
 *                      44 MAIN_STATE_RX_WAIT_PHYRXSTART waited for
 *                      45 MAIN_STATE_RX_WAIT_PHYRXLATENCY start the MacAckDuration timer
 *                      46 MAIN_STATE_RX_WAIT_PHYRXLATENCY start the ack wait timer
 *                      47 MAIN_STATE_RX_WAIT_PHYRXLATENCY NORMAL mode : start rx_duration
 *                      48 MAIN_STATE_RX_WAIT_PHYRXLATENCY TSCH mode : start macTSRxWait
 *                         (macTSRxWait) timer
 *                      49 MAIN_STATE_RX_WAIT_PHYRXLATENCY CSL mode : start the csl_rx_duration
 *                         (macCSLsamplePeriod) timer
 *                      50 MAIN_STATE_RX_WAIT_PHYRXLATENCY CSL mode : start the csl_rx_duration
 *                         (macCSLdataPeriod) timer
 *                      51 MAIN_STATE_RX_CHK_EXPIRED 1 ackwait_timer_ready or ack_received_ind
 *                      52 MAIN_STATE_RX_CHK_EXPIRED 2 normal_mode. ACK with FP bit set, start frame
 *                         pending timer
 *                      54 MAIN_STATE_RX_CHK_EXPIRED 4 RxAlwaysOn is set to 0
 *                      55 MAIN_STATE_RX_CHK_EXPIRED 5 TSCH mode valid frame rxed
 *                      56 MAIN_STATE_RX_CHK_EXPIRED 6 TSCH mode macTSRxwait expired
 *                      57 MAIN_STATE_RX_CHK_EXPIRED 7 macCSLsamplePeriod timer ready
 *                      58 MAIN_STATE_RX_CHK_EXPIRED 8 csl_mode. Data frame recieved with FP bit
 *                         set, increment RX duration time
 *                      59 MAIN_STATE_RX_CHK_EXPIRED 9 CSL mode : Received wu frame in data
 *                         listening period restart macCSLdataPeriod timer
 *                      60 MAIN_STATE_RX_CHK_EXPIRED 10 csl_rx_duration_ready or csl data frame
 *                         received:
 *                      61 MAIN_STATE_RX_CHK_EXPIRED 11 normal_mode. FP bit is set, start frame
 *                         pending timer
 *                      62 MAIN_STATE_RX_CHK_EXPIRED 12 normal mode rx_duration_timer_ready and
 *                         frame_pending_timer_ready
 *                      63 MAIN_STATE_RX_CHK_EXPIRED 13 acknowledge frame requested
 *                      64 MAIN_STATE_RX_CHK_EXPIRED 14 Interrupt to sent a frame. found_tx_packet
 *                      65 MAIN_STATE_CSL_RX_IDLE_END RZ time is far away, switch receiver Off and
 *                         wait for csl_rx_rz_time before switching on
 *                      66 MAIN_STATE_CSL_RX_IDLE_END RZ time is not so far away, keep receiver On
 *                         and wait for
 *                      67 MAIN_STATE_RX_START_PHYRXSTOP ack with fp received keep rx on
 *                      68 MAIN_STATE_RX_START_PHYRXSTOP switch the RX from on to off
 *                      69 MAIN_STATE_RX_WAIT_PHYRXSTOP acknowledge done : switch back to finish TX
 *                      70 MAIN_STATE_RX_WAIT_PHYRXSTOP switch the RX off
 *                      71 MAIN_STATE_ED switch the RX from off to on
 *                      72 MAIN_STATE_ED_WAIT_PHYRXSTART waited for phyRxStartup
 *                      73 MAIN_STATE_ED_WAIT_EDSCANDURATION waited for EdScanDuration
 *                      74 MAIN_STATE_ED_WAIT_PHYRXSTOP end of Energy Detection, got IDLE
 *                         75 - 127 Not used
 */
#define FTDF_DBG_LMAC_ENABLE_AND_SM             0x31

/**
 * \brief RX enable and detailed state machine info
 *              diagnose_bus bit 7   = rx_en
 *              diagnose bus bit 6-0 = detailed state machine info see FTDF_DBG_LMAC_ENABLE_AND_SM
 */
#define FTDF_DBG_LMAC_RX_ENABLE_AND_SM          0x32

/**
 * \brief TX enable and detailed state machine info
 *              diagnose_bus bit 7   = tx_en
 *              diagnose bus bit 6-0 = detailed state machine info see FTDF_DBG_LMAC_ENABLE_AND_SM
 */
#define FTDF_DBG_LMAC_TX_ENABLE_AND_SM          0x33

/**
 * \brief PHY enable, TX enable and Rx enable and state machine states
 *              diagnose_bus bit 7   = phy_en
 *              diagnose_bus bit 6   = tx_en
 *              diagnose_bus bit 5   = rx_en
 *              diagnose bus bit 4-0 = State machine states
 *                       1  MAIN_STATE_IDLE
 *                       2  MAIN_STATE_CSMA_CA_WAIT_FOR_METADATA
 *                       3  MAIN_STATE_CSMA_CA
 *                       4  MAIN_STATE_WAIT_FOR_CSMA_CA_0
 *                       5  MAIN_STATE_WAIT_FOR_CSMA_CA
 *                       6  MAIN_STATE_SINGLE_CCA
 *                       7  MAIN_STATE_WAIT_ACK_DELAY
 *                       8  MAIN_STATE_TSCH_TX_FRAME
 *                       9  MAIN_STATE_TX_FRAME
 *                       10 MAIN_STATE_TX_FRAME1
 *                       11 MAIN_STATE_TX_FRAME_W1
 *                       12 MAIN_STATE_TX_FRAME_W2
 *                       13 MAIN_STATE_TX_WAIT_LAST_SYMBOL
 *                       14 MAIN_STATE_TX_RAMPDOWN
 *                       15 MAIN_STATE_TX_RAMPDOWN_W
 *                       16 MAIN_STATE_TX_PHYTRXWAIT
 *                       17 MAIN_STATE_GEN_IFS
 *                       18 MAIN_STATE_GEN_IFS_FINISH
 *                       19 MAIN_STATE_SENT_STATUS
 *                       20 MAIN_STATE_ADD_DELAY
 *                       21 MAIN_STATE_TSCH_RX_ACKDELAY
 *                       22 MAIN_STATE_RX
 *                       23 MAIN_STATE_RX_WAIT_PHYRXSTART
 *                       24 MAIN_STATE_RX_WAIT_PHYRXLATENCY
 *                       25 MAIN_STATE_RX_CHK_EXPIRED
 *                       26 MAIN_STATE_CSL_RX_IDLE_END
 *                       27 MAIN_STATE_RX_START_PHYRXSTOP
 *                       28 MAIN_STATE_RX_WAIT_PHYRXSTOP
 *                       29 MAIN_STATE_ED
 *                       30 MAIN_STATE_ED_WAIT_PHYRXSTART
 *                       31 MAIN_STATE_ED_WAIT_EDSCANDURATION
 */
#define FTDF_DBG_LMAC_RX_TX_ENABLE_AND_STATES   0x34

/**
 * \brief LMAC controller to tx interface with wakeup
 *              diagnose_bus bit 7   = tx_en
 *              diagnose_bus bit 6   = rx_en
 *              diagnose_bus bit 5   = ctrl_lmac_to_tx.gen_wu
 *              diagnose_bus bit 4   = ctrl_lmac_to_tx.gen_ack
 *              diagnose_bus bit 3-2 = ctrl_lmac_to_tx.tx_frame_nmbr
 *              diagnose_bus bit 1   = ctrl_lmac_to_tx.tx_start
 *              diagnose_bus bit 0   = ctrl_tx_to_lmac.tx_last_symbol
 */
#define FTDF_DBG_LMAC_TO_TX_AND_WAKEUP          0x35

/**
 * \brief LMAC controller to tx interface with frame pending
 *              diagnose_bus bit 7   = tx_en
 *              diagnose_bus bit 6   = rx_en
 *              diagnose_bus bit 5   = ctrl_lmac_to_tx.gen.fp_bit
 *              diagnose_bus bit 4   = ctrl_lmac_to_tx.gen_ack
 *              diagnose_bus bit 3-2 = ctrl_lmac_to_tx.tx_frame_nmbr
 *              diagnose_bus bit 1   = ctrl_lmac_to_tx.tx_start
 *              diagnose_bus bit 0   = ctrl_tx_to_lmac.tx_last_symbol
 */
#define FTDF_DBG_LMAC_TO_TX_AND_FRAME_PENDING   0x36

/**
 * \brief Rx pipepline to LMAC controller interface
 *              diagnose_bus bit 7   = tx_en
 *              diagnose_bus bit 6   = rx_en
 *              diagnose_bus bit 5   = ctrl_rx_to_lmac.rx_sof_e
 *              diagnose_bus bit 4   = ctrl_rx_to_lmac.rx_eof_e
 *              diagnose_bus bit 3   = ctrl_rx_to_lmac.packet_valid
 *              diagnose_bus bit 2   = ack_received_ind
 *              diagnose_bus bit 1   = ack_request_ind
 *              diagnose_bus bit 0   = ctrl_rx_to_lmac.data_request_frame
 */
#define FTDF_DBG_LMAC_RX_TO_LMAC                0x37

/**
 * \brief CSL start
 *              diagnose_bus bit 7   = tx_en
 *              diagnose_bus bit 6   = rx_en
 *              diagnose_bus bit 5   = csl_start
 *              diagnose_bus bit 4-1 = swio_always_on_to_lmac_ctrl.tx_flag_stat
 *              diagnose_bus bit 0   = found_wu_packet;
 */
#define FTDF_DBG_LMAC_CSL_START                 0x38

/**
 * \brief TSCH TX ACK timing
 *              diagnose_bus bit 7-4 = swio_always_on_to_lmac_ctrl.tx_flag_stat
 *              diagnose_bus bit 3   = tx_en
 *              diagnose_bus bit 2   = rx_en
 *              diagnose_bus bit 1   = ctrl_rx_to_lmac.packet_valid
 *              diagnose_bus bit 0   = one_us_timer_ready
 */
#define FTDF_DBG_LMAC_TSCH_ACK_TIMING           0x39


/**
 * \brief Security control
 *              diagnose_bus bit 7   = swio_to_security.secStart
 *              diagnose_bus bit 6   = swio_to_security.secTxRxn
 *              diagnose_bus bit 5   = swio_to_security.secAbort
 *              diagnose_bus bit 4   = swio_to_security.secEncDecn
 *              diagnose_bus bit 3   = swio_from_security.secBusy
 *              diagnose_bus bit 2   = swio_from_security.secAuthFail
 *              diagnose_bus bit 1   = swio_from_security.secReady_e
 *              diagnose_bus bit 0   = '0'
 */
#define FTDF_DBG_SEC_CONTROL                    0x40

/**
 * \brief Security CTLID access Rx and Tx
 *              diagnose_bus bit 7   = tx_sec_ci.ld_strb
 *              diagnose_bus bit 6   = tx_sec_ci.ctlid_rw
 *              diagnose_bus bit 5   = tx_sec_ci.selectp
 *              diagnose_bus bit 4   = tx_sec_co.d_rdy
 *              diagnose_bus bit 3   = rx_sec_ci.ld_strb
 *              diagnose_bus bit 2   = rx_sec_ci.ctlid_rw
 *              diagnose_bus bit 1   = rx_sec_ci.selectp
 *              diagnose_bus bit 0   = rx_sec_co.d_rdy
 */
#define FTDF_DBG_SEC_CTLID_ACCESS_RX_TX         0x41

/**
 * \brief Security ctlid access tx with sec_wr_data_valid
 *              diagnose_bus bit 7   = tx_sec_ci.ld_strb
 *              diagnose_bus bit 6   = tx_sec_ci.ctlid_rw
 *              diagnose_bus bit 5   = tx_sec_ci.selectp
 *              diagnose_bus bit 4   = tx_sec_co.d_rdy
 *              diagnose_bus bit 3-0 = sec_wr_data_valid
 */
#define FTDF_DBG_SEC_CTLID_ACCESS_TX_AND_SEC_WR_DATA_VALID      0x42

/**
 * \brief Security ctlid access rx with sec_wr_data_valid
 *              diagnose_bus bit 7   = rx_sec_ci.ld_strb
 *              diagnose_bus bit 6   = rx_sec_ci.ctlid_rw
 *              diagnose_bus bit 5   = rx_sec_ci.selectp
 *              diagnose_bus bit 4   = rx_sec_co.d_rdy
 *              diagnose_bus bit 3-0 = sec_wr_data_valid
 */
#define FTDF_DBG_SEC_CTLID_ACCESS_RX_AND_SEC_WR_DATA_VALID     0x43

/**
 * \brief AHB bus without hsize
 *              diagnose_bus bit 7   = hsel
 *              diagnose_bus bit 6-5 = htrans
 *              diagnose_bus bit 4   = hwrite
 *              diagnose_bus bit 3   = hready_in
 *              diagnose_bus bit 2   = hready_out
 *              diagnose_bus bit 1-0 = hresp
 */
#define FTDF_DBG_AHB_WO_HSIZE                   0x50

/**
 * \brief AHB bus without hwready_in and hresp(1)
 *              diagnose_bus bit 7   = hsel
 *              diagnose_bus bit 6-5 = htrans
 *              diagnose_bus bit 4   = hwrite
 *              diagnose_bus bit 3-2 = hhsize(1 downto 0)
 *              diagnose_bus bit 1   = hready_out
 *              diagnose_bus bit 0   = hresp(0)
 */
#define FTDF_DBG_AHB_WO_HW_READY_HRESP          0x51

/**
 * \brief AMBA Tx signals
 *              diagnose_bus bit 7   = ai_tx.penable
 *              diagnose_bus bit 6   = ai_tx.psel
 *              diagnose_bus bit 5   = ai_tx.pwrite
 *              diagnose_bus bit 4   = ao_tx.pready
 *              diagnose_bus bit 3   = ao_tx.pslverr
 *              diagnose_bus bit 2-1 = psize_tx
 *              diagnose_bus bit 0   = hready_out
 */
#define FTDF_DBG_AHB_AMBA_TX_SIGNALS            0x52

/**
 * \brief AMBA Rx signals
 *              diagnose_bus bit 7   = ai_rx.penable
 *              diagnose_bus bit 6   = ai_rx.psel
 *              diagnose_bus bit 5   = ai_rx.pwrite
 *              diagnose_bus bit 4   = ao_rx.pready
 *              diagnose_bus bit 3   = ao_rx.pslverr
 *              diagnose_bus bit 2-1 = psize_rx
 *              diagnose_bus bit 0   = hready_out
 */
#define FTDF_DBG_AHB_AMBA_RX_SIGNALS            0x53

/**
 * \brief AMBA register map signals
 *              diagnose_bus bit 7   = ai_reg.penable
 *              diagnose_bus bit 6   = ai_reg.psel
 *              diagnose_bus bit 5   = ai_reg.pwrite
 *              diagnose_bus bit 4   = ao_reg.pready
 *              diagnose_bus bit 3   = ao_reg.pslverr
 *              diagnose_bus bit 2-1 = "00"
 *              diagnose_bus bit 0   = hready_out
 */
#define FTDF_DBG_AHB_AMBA_REG_MAP_SIGNALS       0x54

#endif /* FTDF_DBG_BUS_ENABLE */

#define FTDF_MAX_HOPPING_SEQUENCE_LENGTH 16

typedef void     FTDF_PIBAttributeValue;

/**
 * \brief  Link quality
 * \remark Range: 0..255
 * \remark A higher number is a higher quality
 */
typedef uint8_t  FTDF_LinkQuality;

/**
 * \brief Hopping sequence ID
 */
typedef uint16_t FTDF_HoppingSequenceId;

/**
 * \brief  Channel number
 * \remark Supported range: 11..27
 */
typedef uint8_t  FTDF_ChannelNumber;

/**
 * \brief  Packet Traffic Information (PTI) used to classify a transaction in the radio arbiter.
 */
typedef uint8_t  FTDF_PTI;

enum
{
        /* PTI index for explicit Rx. */
        FTDF_PTI_CONFIG_RX,
        /* PTI index for Tx. */
        FTDF_PTI_CONFIG_TX,
        FTDF_PTI_CONFIG_RESERVED0,
        FTDF_PTI_CONFIG_RESERVED1,
        FTDF_PTI_CONFIG_RESERVED2,
        FTDF_PTI_CONFIG_RESERVED3,
        FTDF_PTI_CONFIG_RESERVED4,
        FTDF_PTI_CONFIG_RESERVED5,
        /* Enumeration end. */
        FTDF_PTIS,
};

typedef struct
{
        FTDF_PTI ptis[FTDF_PTIS];
} FTDF_PtiConfig;

/**
 * \brief  Channel page
 * \remark Supported values: 0
 */
typedef uint8_t  FTDF_ChannelPage;

typedef uint8_t  FTDF_ChannelOffset;

typedef uint8_t  FTDF_Octet;

/**
 * \brief 8-bit type bitmap
 */
typedef uint8_t  FTDF_Bitmap8;

/**
 * \brief 16-bit type bitmap
 */
typedef uint16_t FTDF_Bitmap16;

/**
 * \brief 32-bit type bitmap
 */
typedef uint32_t FTDF_Bitmap32;

typedef uint8_t  FTDF_NumOfBackoffs;

typedef uint8_t  FTDF_GTSCharateristics;

/**
 * \brief Scan type
 * \remark Allowed values:
 *         - FTDF_ED_SCAN: Energy detect scan
 *         - FTDF_ACTIVE_SCAN: Active scan
 *         - FTDF_PASSIVE_SCAN: Passive scan
 *         - FTDF_ORPHAN_SCAN: Orphan scan
 *         - FTDF_ENHANCED_ACTIVE_SCAN: Enhanced active scan
 */
typedef uint8_t  FTDF_ScanType;
#define FTDF_ED_SCAN              1
#define FTDF_ACTIVE_SCAN          2
#define FTDF_PASSIVE_SCAN         3
#define FTDF_ORPHAN_SCAN          4
#define FTDF_ENHANCED_ACTIVE_SCAN 7

typedef uint8_t FTDF_ScanDuration;

/**
 * \brief Loss operation
 * \remark Possible values:
 *         - FTDF_PAN_ID_CONFLICT
 *         - FTDF_REALIGNMENT
 *         - FTDF_BEACON_LOST (not supported because only beaconless mode is supported)
 */
typedef uint8_t FTDF_LossReason;
#define FTDF_PAN_ID_CONFLICT 1
#define FTDF_REALIGNMENT     2
#define FTDF_BEACON_LOST     3

typedef uint16_t FTDF_SlotframeSize;

/**
 * \brief Set operation
 * \remark Allowed values:
 *         - FTDF_ADD: Add an entry
 *         - FTDF_DELETE: Delete an entry
 *         - FTDF_MODIFY: Modify an entry
 */
typedef uint8_t  FTDF_Operation;
#define FTDF_ADD    0
#define FTDF_DELETE 2
#define FTDF_MODIFY 3

typedef uint16_t FTDF_Timeslot;

/**
 * \brief Set operation
 * \remark Allowed values:
 *         - FTDF_NORMAL_LINK
 *         - FTDF_ADVERTISING_LINK
 */
typedef uint8_t  FTDF_LinkType;
#define FTDF_NORMAL_LINK      0
#define FTDF_ADVERTISING_LINK 1

/**
 * \brief TSCH mode status
 * \remark Allowed values:
 *         - FTDF_TSCH_OFF
 *         - FTDF_TSCH_ON
 */
typedef uint8_t FTDF_TSCHMode;
#define FTDF_TSCH_OFF 0
#define FTDF_TSCH_ON  1

typedef uint16_t FTDF_KeepAlivePeriod;

/**
 * \brief BE exponent
 */
typedef uint8_t  FTDF_BEExponent;

#define FTDF_MAX_SLOTFRAMES 4

typedef struct
{
    /** \brief Handle of this slotframe */
    FTDF_Handle        slotframeHandle;
    /** \brief The number of timeslots in this slotframe */
    FTDF_SlotframeSize slotframeSize;
} FTDF_SlotframeEntry;

typedef struct
{
    /** \brief Number of slotframes in the slotframe table */
    FTDF_Size            nrOfSlotframes;
    /** \brief Pointer to the first slotframe entry */
    FTDF_SlotframeEntry* slotframeEntries;
} FTDF_SlotframeTable;

#define FTDF_MAX_LINKS                16

#define FTDF_LINK_OPTION_TRANSMIT     0x01
#define FTDF_LINK_OPTION_RECEIVE      0x02
#define FTDF_LINK_OPTION_SHARED       0x04
#define FTDF_LINK_OPTION_TIME_KEEPING 0x08

typedef struct
{
    /** \brief Handle of this link, used for delete and modify operations */
    FTDF_Handle        linkHandle;
    /**
     * \brief Bit mapped link options, the following options are supported:<br>
     *        FTDF_LINK_OPTION_TRANSMIT: Lik can be used for transmitting<br>
     *        FTDF_LINK_OPTION_RECEIVE: Link can be used for receiving<br>
     *        FTDF_LINK_OPTION_SHARED: Shared link, multiple device can transmit in this link<br>
     *        FTDF_LINK_OPTION_TIME_KEEPING: Link will be used to synchronise timeslots<br>
     *        Multiple options can be defined by or-ing them.
     */
    FTDF_Bitmap8       linkOptions;
    /** \brief Link type */
    FTDF_LinkType      linkType;
    /** \brief Handle of the slotframe of this link */
    FTDF_Handle        slotframeHandle;
    /** \brief Short address of the peer node, only valid if is a transmit link */
    FTDF_ShortAddress  nodeAddress;
    /** \brief Timeslot in the slotframe */
    FTDF_Timeslot      timeslot;
    /** \brief Channel offset */
    FTDF_ChannelOffset channelOffset;
    /** \brief DO NOT USE */
    void*              __private1;
    /** \brief DO NOT USE */
    uint64_t           __private2;
} FTDF_LinkEntry;

typedef struct
{
    /** \brief Number of links in the link table */
    FTDF_Size       nrOfLinks;
    /** \brief Pointer to the first link entry */
    FTDF_LinkEntry* linkEntries;
} FTDF_LinkTable;

typedef struct
{
    FTDF_Handle timeslotTemplateId;
    FTDF_Period tsCCAOffset;
    FTDF_Period tsCCA;
    FTDF_Period tsTxOffset;
    FTDF_Period tsRxOffset;
    FTDF_Period tsRxAckDelay;
    FTDF_Period tsTxAckDelay;
    FTDF_Period tsRxWait;
    FTDF_Period tsAckWait;
    FTDF_Period tsRxTx;
    FTDF_Period tsMaxAck;
    FTDF_Period tsMaxTs;
    FTDF_Period tsTimeslotLength;
} FTDF_TimeslotTemplate;

typedef struct
{
    FTDF_Size  counterOctets;
    FTDF_Count retryCount;
    FTDF_Count multipleRetryCount;
    FTDF_Count TXFailCount;
    FTDF_Count TXSuccessCount;
    FTDF_Count FCSErrorCount;
    FTDF_Count securityFailureCount;
    FTDF_Count duplicateFrameCount;
    FTDF_Count RXSuccessCount;
    FTDF_Count NACKCount;
    FTDF_Count RxExpiredCount;
    FTDF_Count BOIrqCount;
} FTDF_PerformanceMetrics;

typedef struct
{
    FTDF_Count txDataFrmCnt;
    FTDF_Count txCmdFrmCnt;
    FTDF_Count txStdAckFrmCnt;
    FTDF_Count txEnhAckFrmCnt;
    FTDF_Count txBeaconFrmCnt;
    FTDF_Count txMultiPurpFrmCnt;
    FTDF_Count rxDataFrmOkCnt;
    FTDF_Count rxCmdFrmOkCnt;
    FTDF_Count rxStdAckFrmOkCnt;
    FTDF_Count rxEnhAckFrmOkCnt;
    FTDF_Count rxBeaconFrmOkCnt;
    FTDF_Count rxMultiPurpFrmOkCnt;
} FTDF_TrafficCounters;

typedef uint8_t FTDF_Energy;

typedef struct
{
    /** \brief Coordinator address mode */
    FTDF_AddressMode   coordAddrMode;
    /** \brief Coordinator PAN ID */
    FTDF_PANId         coordPANId;
    /** \brief Coordinator address */
    FTDF_Address       coordAddr;
    /** \brief Channel number */
    FTDF_ChannelNumber channelNumber;
    /** \brief Channnel page */
    FTDF_ChannelPage   channelPage;
    /** \brief NOT USED */
    FTDF_Bitmap16      superframeSpec;
    /** \brief NOT USED */
    FTDF_Boolean       GTSPermit;
    /** \brief Link quality */
    FTDF_LinkQuality   linkQuality;
    /** \brief */
    FTDF_Time          timestamp;
} FTDF_PANDescriptor;

typedef struct
{
    /** \brief Coordinator PAN ID */
    FTDF_PANId         coordPANId;
    /** \brief Coordinator short address */
    FTDF_ShortAddress  coordShortAddr;
    /** \brief Channel number */
    FTDF_ChannelNumber channelNumber;
    /** \brief Device short address */
    FTDF_ShortAddress  shortAddr;
    /** \brief Channnel page */
    FTDF_ChannelPage   channelPage;
} FTDF_CoordRealignDescriptor;

/**
 * \brief  Auto frame source address mode
 * \remark Valid values:
 * - FTDF_AUTO_NONE: No address
 * - FTDF_AUTO_SHORT: Short address
 * - FTDF_AUTO_FULL: Extended address
 */
typedef uint8_t FTDF_AutoSA;
#define FTDF_AUTO_NONE  1
#define FTDF_AUTO_SHORT 2
#define FTDF_AUTO_FULL  3

/**
 * \brief  TX Power tolerance
 * \remark Valid values:
 * - FTDF_POWER_TOLERANCE_1_DB
 * - FTDF_POWER_TOLERANCE_3_DB
 * - FTDF_POWER_TOLERANCE_6_DB
 */
typedef uint8_t FTDF_TXPowerTolerance;
#define FTDF_POWER_TOLERANCE_1_DB 1
#define FTDF_POWER_TOLERANCE_3_DB 2
#define FTDF_POWER_TOLERANCE_6_DB 3

/**
 * \brief  CCA mode
 * \remark Valid values:
 * - FTDF_CCA_MODE_1
 * - FTDF_CCA_MODE_2
 * - FTDF_CCA_MODE_3
 */
typedef uint8_t FTDF_CCAMode;
#define FTDF_CCA_MODE_1 1
#define FTDF_CCA_MODE_2 2
#define FTDF_CCA_MODE_3 3

/**
 * \brief  Frame control options
 * \remark Supported options:
 * - FTDF_PAN_ID_PRESENT:    Controls the PAN ID compression/present bit in multipurpose and version 2 frames 
 * - FTDF_IES_INCLUDED:      Indicates that IEs must be included
 * - FTDF_SEQ_NR_SUPPRESSED: Controls suppression of the sequence number
 * \remark Multiple options can specified by bit wise or-ing them
 */
typedef uint8_t FTDF_FrameControlOptions;
#define FTDF_PAN_ID_PRESENT    0x01
#define FTDF_IES_INCLUDED      0x02
#define FTDF_SEQ_NR_SUPPRESSED 0x04

typedef struct
{
    FTDF_ChannelPage    channelPage;
    FTDF_Size           nrOfChannels;
    FTDF_ChannelNumber* channels;
} FTDF_ChannelDescriptor;

typedef struct
{
    FTDF_Size               nrOfChannelDescriptors;
    FTDF_ChannelDescriptor* channelDescriptors;
} FTDF_ChannelDescriptorList;

/**
 * \brief Dbm data type
 */
typedef int8_t  FTDF_DBm;

typedef uint8_t FTDF_FrameType;
#define FTDF_BEACON_FRAME          0
#define FTDF_DATA_FRAME            1
#define FTDF_ACKNOWLEDGEMENT_FRAME 2
#define FTDF_MAC_COMMAND_FRAME     3
#define FTDF_LLDN_FRAME            4
#define FTDF_MULTIPURPOSE_FRAME    5

/**
 * \brief  Command frame ID
 * \remark Supported command frame IDs:
 *         - FTDF_COMMAND_ASSOCIATION_REQUEST
 *         - FTDF_COMMAND_ASSOCIATION_RESPONSE
 *         - FTDF_COMMAND_DISASSOCIATION_NOTIFICATION
 *         - FTDF_COMMAND_DATA_REQUEST
 *         - FTDF_COMMAND_PAN_ID_CONFLICT_NOTIFICATION
 *         - FTDF_COMMAND_ORPHAN_NOTIFICATION
 *         - FTDF_COMMAND_BEACON_REQUEST
 *         - FTDF_COMMAND_COORDINATOR_REALIGNMENT
 *         - FTDF_COMMAND_GTS_REQUEST
 */
typedef uint8_t FTDF_CommandFrameId;
#define FTDF_COMMAND_ASSOCIATION_REQUEST          1
#define FTDF_COMMAND_ASSOCIATION_RESPONSE         2
#define FTDF_COMMAND_DISASSOCIATION_NOTIFICATION  3
#define FTDF_COMMAND_DATA_REQUEST                 4
#define FTDF_COMMAND_PAN_ID_CONFLICT_NOTIFICATION 5
#define FTDF_COMMAND_ORPHAN_NOTIFICATION          6
#define FTDF_COMMAND_BEACON_REQUEST               7
#define FTDF_COMMAND_COORDINATOR_REALIGNMENT      8
#define FTDF_COMMAND_GTS_REQUEST                  9

/**
 * \brief Security frame counter
 * \remark Valid range 0..0xffffffff (4 octets) if frame counter mode equals 4
 * \remark Valid range 0..0xffffffffff (5 octets) if frame counter mode equals 5
 */
typedef uint64_t FTDF_FrameCounter;

/**
 * \brief Security frame counter mode
 * \remark Valid range 4..5
 */
typedef uint8_t  FTDF_FrameCounterMode;

typedef struct
{
    FTDF_KeyIdMode   keyIdMode;
    FTDF_Octet       keySource[ 8 ];
    FTDF_KeyIndex    keyIndex;
    FTDF_AddressMode deviceAddrMode;
    FTDF_PANId       devicePANId;
    FTDF_Address     deviceAddress;
} FTDF_KeyIdLookupDescriptor;

typedef struct
{
    FTDF_PANId        PANId;
    FTDF_ShortAddress shortAddress;
    FTDF_ExtAddress   extAddress;
    FTDF_FrameCounter frameCounter;
    FTDF_Boolean      exempt;
} FTDF_DeviceDescriptor;

/**
 * \brief  Device descriptor handle
 * \remark This is the index of a device in \link FTDF_DeviceTable \endlink
 */
typedef uint8_t FTDF_DeviceDescriptorHandle;

typedef struct
{
    /** \brief Frame type */
    FTDF_FrameType      frameType;
    /** \brief Command frame ID */
    FTDF_CommandFrameId commandFrameId;
} FTDF_KeyUsageDescriptor;

typedef struct
{
    FTDF_Size                    nrOfKeyIdLookupDescriptors;
    FTDF_KeyIdLookupDescriptor*  keyIdLookupDescriptors;
    FTDF_Size                    nrOfDeviceDescriptorHandles;
    FTDF_DeviceDescriptorHandle* deviceDescriptorHandles;
    FTDF_Size                    nrOfKeyUsageDescriptors;
    FTDF_KeyUsageDescriptor*     keyUsageDescriptors;
    FTDF_Octet                   key[ 16 ];
} FTDF_KeyDescriptor;

typedef struct
{
    FTDF_FrameType      frameType;
    FTDF_CommandFrameId commandFrameId;
    FTDF_SecurityLevel  securityMinimum;
    FTDF_Boolean        deviceOverrideSecurityMinimum;
    FTDF_Bitmap8        allowedSecurityLevels;
} FTDF_SecurityLevelDescriptor;

/**
 * \brief  Key table
 * \remark As followes an example how to initialize a key table for usage with FTDF_SET_REQUEST:
 * \code
 * FTDF_KeyIdLookupDescriptor  lookupDescriptorsKey1[ ] = 
 *          { { 2, { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }, 7, 0, 0 0 },
 *            { 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 2, 0x1234, 0x0001 } };
 * FTDF_KeyIdLookupDescriptor  lookupDescriptorsKey2[ ] = 
 *          { { 1, { 0, 0, 0, 0, 0, 0, 0, 0 }, 5, 0, 0, 0 } };
 * FTDF_DeviceDescriptorHandle deviceDescriptorHandlesKey1[ ] = { 0, 2 };
 * FTDF_DeviceDescriptorHandle deviceDescriptorHandlesKey2[ ] = { 1 };
 * FTDF_KeyUsageDescriptor     keyUsageDescriptorKey1[ ] = { { 1, 0 }, { 3, 4 } };
 * FTDF_KeyUsageDescriptor     keyUsageDescriptorKey2[ ] = { { 1, 0 } };
 * FTDF_KeyDescriptor          keyDescriptors[ ] = 
 *          { { sizeof( lookupDescriptorsKey1 ) / sizeof( FTDF_KeyIdLookupDescriptor ),
 *              lookupDescriptorsKey1,
 *              sizeof( deviceDescriptorHandlesKey1 ) / sizeof( FTDF_DeviceDescriptorHandle ),
 *              deviceDescriptorHandlesKey1,
 *              sizeof( keyUsageDescriptorKey1 ) / sizeof( FTDF_KeyUsageDescriptor ),
 *              keyUsageDescriptorKey1,
 *              { 0x7e, 0x37, 0x2d, 0x41, 0xdf, 0x74, 0x72, 0x3f, 0x4c, 0x3a, 0xa7, 0x53, 0xa1, 0x11, 0x46, 0x8b } },
 *            { sizeof( lookupDescriptorsKey2 ) / sizeof( FTDF_KeyIdLookupDescriptor ),
 *              lookupDescriptorsKey2,
 *              sizeof( deviceDescriptorHandlesKey2 ) / sizeof( FTDF_DeviceDescriptorHandle ),
 *              deviceDescriptorHandlesKey2,
 *              sizeof( keyUsageDescriptorKey2 ) / sizeof( FTDF_KeyUsageDescriptor ),
 *              keyUsageDescriptorKey1,
 *              { 0xdf, 0x74, 0x72, 0x3f, 0x7e, 0x37, 0x2d, 0x41, 0x4c, 0x3a, 0xa1, 0x11, 0x46, 0x8, 0xa7, 0x53b } } };
 * FTDF_KeyTable               keyTable =
 *           { sizeof( keyDescriptors ) / sizeof( FTDF_KeyDescriptor ), keyDescriptors };
 * \endcode
 */
typedef struct
{
    /** \brief Number of key descriptors in the key table */
    FTDF_Size           nrOfKeyDescriptors;
    /** \brief Pointer to the first key descriptor entry */
    FTDF_KeyDescriptor* keyDescriptors;
} FTDF_KeyTable;

typedef struct
{
    /** \brief Number of device descriptors in the key table */
    FTDF_Size              nrOfDeviceDescriptors;
    /** \brief Pointer to the first device descriptor entry */
    FTDF_DeviceDescriptor* deviceDescriptors;
} FTDF_DeviceTable;

typedef struct
{
    /** \brief Number of security level descriptors in the key table */
    FTDF_Size                     nrOfSecurityLevelDescriptors;
    /** \brief Pointer to the first security level descriptor entry */
    FTDF_SecurityLevelDescriptor* securityLevelDescriptors;
} FTDF_SecurityLevelTable;

/**
 * \brief  IE type
 * \remark Supported IE types:
 *         - FTDF_SHORT_IE
 *         - FTDF_LONG_IE
 */
typedef uint8_t FTDF_IEType;
#define FTDF_SHORT_IE 0
#define FTDF_LONG_IE  1

typedef uint8_t FTDF_IEId;

typedef uint8_t FTDF_IELength;

typedef struct
{
    /** \brief IE type */
    FTDF_IEType   type;
    /** \brief Sub IE ID*/
    FTDF_IEId     subID;
    /** \brief Sub IE length */
    FTDF_IELength length;
    /** \brief Pointer to sub IE content */
    FTDF_Octet*   subContent;
} FTDF_SubIEDescriptor;

typedef struct
{
    /** \brief Number of sub IE descriptors in an MLME payload IE (ID = 1) */
    FTDF_Size             nrOfSubIEs;
    /** \brief Pointer to the first sub IE descriptor */
    FTDF_SubIEDescriptor* subIEs;
} FTDF_SubIEList;

typedef union
{
    /** \brief IE content if not a MLME payload IE (ID = 1) */
    FTDF_Octet*     raw;
    /** \brief IE content if a MLME payload IE (ID = 1) */
    FTDF_SubIEList* nested;
} FTDF_IEContent;

typedef struct
{
    /** \brief IE ID */
    FTDF_IEId      ID;
    /** \brief Content length of the IE, undefined/unused in case of a MLME payload IE (ID = 1) */
    FTDF_IELength  length;
    /** \brief Content of the IE */
    FTDF_IEContent content;
} FTDF_IEDescriptor;

typedef struct
{
    /** \brief Number of IE descriptors */
    FTDF_Size          nrOfIEs;
    /** \brief Pointer to the first IE descriptor */
    FTDF_IEDescriptor* IEs;
} FTDF_IEList;

typedef struct
{
    /** \brief Message ID */
    FTDF_MsgId msgId;
} FTDF_MsgBuffer;

typedef struct
{
    /** \brief Message ID = FTDF_DATA_REQUEST */
    FTDF_MsgId               msgId;
    /** \brief Source address mode */
    FTDF_AddressMode         srcAddrMode;
    /** \brief Destination address mode */
    FTDF_AddressMode         dstAddrMode;
    /** \brief Destination PAN ID */
    FTDF_PANId               dstPANId;
    /** \brief Destination address */
    FTDF_Address             dstAddr;
    /** \brief Length of MSDU payload */
    FTDF_DataLength          msduLength;
    /**
     * \brief MSDU payload data buffer. Must be freed by the application using FTDF_REL_DATA_BUFFER
     *        when it receives the FTDF_DATA_CONFIRM message
     */
    FTDF_Octet*              msdu;
    /** \brief Handle */
    FTDF_Handle              msduHandle;
    /** \brief Whether the data frame needs to be acknowledged or */
    FTDF_Boolean             ackTX;
    /** \brief NOT USED */
    FTDF_Boolean             GTSTX;
    /** 
     * \brief Indication whether the frame must be send directly or be queued until a DATA_REQUEST COMMAND
     *        frame is received
     */
    FTDF_Boolean             indirectTX;
    /** \brief Security level */
    FTDF_SecurityLevel       securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode           keyIdMode;
    /** \brief Security key source */
    FTDF_Octet               keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex            keyIndex;
    /** \brief Frame control option bitmap */
    FTDF_FrameControlOptions frameControlOptions;
    /**
     * \brief  Header IE list to be inserted.
     *         Ignored if the FTDF_IES_INCLUDED frame control option is NOT set.
     *         The IE list must be located in rentention RAM
     */
    FTDF_IEList*             headerIEList;
    /**
     * \brief  Payload IE list to be inserted.
     *         Ignored if the FTDF_IES_INCLUDED frame control option is NOT set.
     *         The IE list must be located in rentention RAM
     */
    FTDF_IEList*             payloadIEList;
    /** Indication whether a DATA or MULTIPURPOSE frame must be set */
    FTDF_Boolean             sendMultiPurpose;
    /** \brief DO NOT USE */
    uint8_t                  __private3;
} FTDF_DataRequest;

typedef struct
{
    /** \brief Message ID = FTDF_DATA_INDICATION */
    FTDF_MsgId         msgId;
    /** \brief Source address mode */
    FTDF_AddressMode   srcAddrMode;
    /** \brief Source PAN ID */
    FTDF_PANId         srcPANId;
    /** \brief Source address */
    FTDF_Address       srcAddr;
    /** \brief Destination address mode */
    FTDF_AddressMode   dstAddrMode;
    /** \brief Destination PAN ID */
    FTDF_PANId         dstPANId;
    /** \brief Destination address */
    FTDF_Address       dstAddr;
    /** \brief Length of MSDU payload */
    FTDF_DataLength    msduLength;
    /** \brief MSDU payload data buffer Must be freed by the application using FTDF_REL_DATA_BUFFER */
    FTDF_Octet*        msdu;
    /** \brief MPDU link quality */
    FTDF_LinkQuality   mpduLinkQuality;
    /** \brief Data sequence number */
    FTDF_SN            DSN;
    /** \brief Timestamp of the time the frame was received */
    FTDF_Time          timestamp;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
    /** /brief Payload IE list<br>
     *         The whole payload IE list (including IE descriptors, Sub IE descriptors and content)
     *         is allocated in one data buffer that must be freed by the application using FTDF_REL_DATA_BUFFER
     *         with the IEList pointer as parameter
     */
    FTDF_IEList*       payloadIEList;
} FTDF_DataIndication;

typedef struct
{
    /** \brief Message ID = FTDF_DATA_CONFIRM */
    FTDF_MsgId         msgId;
    /** /brief The handle given by the application in the correspoding FTDF_DATA_REQUEST */
    FTDF_Handle        msduHandle;
    /** /brief Timestmap of the time the frame has been sent */
    FTDF_Time          timestamp;
    /** /brief Status of the data request */
    FTDF_Status        status;
    /** /brief Number of backoffs, undefined in case status not equal to FTDF_SUCCESS or TSCH enabled */
    FTDF_NumOfBackoffs numOfBackoffs;
    /** /brief Data sequence number of the sent frame */
    FTDF_SN            DSN;
    /** /brief Acknowledgement payload IE list<br>
     *         The whole payload IE list (including IE descriptors, Sub IE descriptors and content)
     *         is allocated in one data buffer that must be freed by the application using FTDF_REL_DATA_BUFFER
     *         with the IEList pointer as parameter
     */
    FTDF_IEList*       ackPayload;
} FTDF_DataConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_PURGE_REQUEST */
    FTDF_MsgId  msgId;
    /** \brief Handle the data request to be purged */
    FTDF_Handle msduHandle;
} FTDF_PurgeRequest;

typedef struct
{
    /** \brief Message ID = FTDF_PURGE_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Handle of the purged data request */
    FTDF_Handle msduHandle;
    /** /brief Status of the purge request */
    FTDF_Status status;
} FTDF_PurgeConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_ASSOCIATE_REQUEST */
    FTDF_MsgId             msgId;
    /** \brief Channel number to be used for the associate request. Ignored in TSCH mode */
    FTDF_ChannelNumber     channelNumber;
    /** \brief Channel page to be used for the associate request. Ignored in TSCH mode */
    FTDF_ChannelPage       channelPage;
    /** \brief Coordinator address mode */
    FTDF_AddressMode       coordAddrMode;
    /** \brief Coordinator PAN ID */
    FTDF_PANId             coordPANId;
    /** \brief Coordinator address */
    FTDF_Address           coordAddr;
    /**
     * \brief Capabillity information bitmap. The following capabilities are defined:<br>
     *        FTDF_CAPABILITY_IS_FFD: Device is a full function device<br>
     *        FTDF_CAPABILITY_AC_POWER: Device has AC power<br>
     *        FTDF_CAPABILITY_RECEIVER_ON_WHEN_IDLE: Device receiver is on when idle<br>
     *        FTDF_CAPABILITY_FAST_ASSOCIATION: Device wants a fast association<br>
     *        FTDF_CAPABILITY_SUPPORTS_SECURITY: Device supports security<br>
     *        FTDF_CAPABILITY_WANTS_SHORT_ADDRESS: Device wants short address<br>
     */
    FTDF_Bitmap8           capabilityInformation;
    /** \brief Security level */
    FTDF_SecurityLevel     securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode         keyIdMode;
    /** \brief Security key source */
    FTDF_Octet             keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex          keyIndex;
    /** \brief NOT USED */
    FTDF_ChannelOffset     channelOffset;
    /** \brief NOT USED */
    FTDF_HoppingSequenceId hoppingSequenceId;
    /** \brief DO NOT USE */
    uint8_t                __private3;
} FTDF_AssociateRequest;

typedef struct
{
    /** \brief Message ID = FTDF_ASSOCIATE_INDICATION */
    FTDF_MsgId             msgId;
    /** \brief Extended address of the device that did the association request */
    FTDF_ExtAddress        deviceAddress;
    /**
     * \brief Capabillity information bitmap. The following capabilities are defined:<br>
     *        FTDF_CAPABILITY_IS_FFD: Device is a full function device<br>
     *        FTDF_CAPABILITY_AC_POWER: Device has AC power<br>
     *        FTDF_CAPABILITY_RECEIVER_ON_WHEN_IDLE: Device receiver is on when idle<br>
     *        FTDF_CAPABILITY_FAST_ASSOCIATION: Device wants a fast association<br>
     *        FTDF_CAPABILITY_SUPPORTS_SECURITY: Device supports security<br>
     *        FTDF_CAPABILITY_WANTS_SHORT_ADDRESS: Device wants short address<br>
     */
    FTDF_Bitmap8           capabilityInformation;
    /** \brief Security level */
    FTDF_SecurityLevel     securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode         keyIdMode;
    /** \brief Security key source */
    FTDF_Octet             keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex          keyIndex;
    /** \brief NOT USED */
    FTDF_ChannelOffset     channelOffset;
    /** \brief NOT USED */
    FTDF_HoppingSequenceId hoppingSequenceId;
} FTDF_AssociateIndication;

typedef struct
{
    /** \brief Message ID = FTDF_ASSOCIATE_RESPONSE */
    FTDF_MsgId             msgId;
    /** \brief Extended address of the device that did association request and to which the response needs to be send */
    FTDF_ExtAddress        deviceAddress;
    /** \brief The short address for the device that did the associate request */
    FTDF_ShortAddress      assocShortAddress;
    /** \brief The association status of the associate request */
    FTDF_AssociationStatus status;
    /** \brief Indication whether this a response to fast or normal association request */
    FTDF_Boolean           fastA;
    /** \brief Security level */
    FTDF_SecurityLevel     securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode         keyIdMode;
    /** \brief Security key source */
    FTDF_Octet             keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex          keyIndex;
    /** \brief NOT USED */
    FTDF_ChannelOffset     channelOffset;
    /** \brief NOT USED */
    FTDF_Length            hoppingSequenceLength;
    /** \brief NOT USED */
    FTDF_Octet*            hoppingSequence;
    /** \brief DO NOT USE */
    uint8_t                __private3;
} FTDF_AssociateResponse;

typedef struct
{
    /** \brief Message ID = FTDF_ASSOCIATE_CONFIRM */
    FTDF_MsgId         msgId;
    /** \brief The short adddress assigned by the coordinator */
    FTDF_ShortAddress  assocShortAddress;
    /** \brief Status of the associate request */
    FTDF_Status        status;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
    /** \brief NOT USED */
    FTDF_ChannelOffset channelOffset;
    /** \brief NOT USED */
    FTDF_Length        hoppingSequenceLength;
    /** \brief NOT USED */
    FTDF_Octet*        hoppingSequence;
} FTDF_AssociateConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_DISASSOCIATE_REQUEST */
    FTDF_MsgId              msgId;
    /** \brief Device address mode */
    FTDF_AddressMode        deviceAddrMode;
    /** \brief Device PAN ID */
    FTDF_PANId              devicePANId;
    /** \brief Device address */
    FTDF_Address            deviceAddress;
    /** \brief Disassociate reason */
    FTDF_DisassociateReason disassociateReason;
    /**
     * \brief Indication whether the disassociate request must be send directly or be queued until a
     *        DATA_REQUEST command frame is received
     */
    FTDF_Boolean            txIndirect;
    /** \brief Security level */
    FTDF_SecurityLevel      securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode          keyIdMode;
    /** \brief Security key source */
    FTDF_Octet              keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex           keyIndex;
    /** \brief DO NOT USE */
    uint8_t                 __private3;
} FTDF_DisassociateRequest;

typedef struct
{
    /** \brief Message ID = FTDF_DISASSOCIATE_INDICATION */
    FTDF_MsgId              msgId;
    /** \brief Extended address of the device that did disassociate request */
    FTDF_ExtAddress         deviceAddress;
    /** \brief Disassociate reason */
    FTDF_DisassociateReason disassociateReason;
    /** \brief Security level */
    FTDF_SecurityLevel      securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode          keyIdMode;
    /** \brief Security key source */
    FTDF_Octet              keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex           keyIndex;
} FTDF_DisassociateIndication;

typedef struct
{
    /** \brief Message ID = FTDF_DISASSOCIATE_CONFIRM */
    FTDF_MsgId       msgId;
    /** \brief Disassociate request status */
    FTDF_Status      status;
    /** \brief Address mode of the device that want/must disassociate */
    FTDF_AddressMode deviceAddrMode;
    /** \brief PAN ID of the device that want/must disassociate */
    FTDF_PANId       devicePANId;
    /** \brief address of the device that want/must disassociate */
    FTDF_Address     deviceAddress;
} FTDF_DisassociateConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_BEACON_NOTIFY_INDCATION */
    FTDF_MsgId          msgId;
    /** \brief Beacon sequence number, valid only when beacon type is FTDF_NORMAL_BEACON */
    FTDF_SN             BSN;
    /** \brief PAN descriptor*/
    FTDF_PANDescriptor* PANDescriptor;
    /** \brief NOT USED */
    FTDF_Bitmap8        pendAddrSpec;
    /** \brief NOT USED */
    FTDF_Address*       addrList;
    /** \brief Length of the beacon payload */
    FTDF_DataLength     sduLength;
    /** \brief Beacon payload */
    FTDF_Octet*         sdu;
    /** \brief Enhanced beacon sequence number, valid only when beacon type is FTDF_ENHANCED_BEACON */
    FTDF_SN             EBSN;
    /** \brief Beacon type */
    FTDF_BeaconType     beaconType;
    /**
     * \brief Payload IE list<br>
     *        The whole Payload IE list (including IE descriptors, Sub IE descriptors and content)
     *        is allocate in one data buffer that must be freed by the application using FTDF_REL_DATA_BUFFER
     *        with the IEList pointer as parameter.
     */
    FTDF_IEList*        IEList;
    /**
     * \brief Timestamp of the time the beacon frame was received<br>
     *        In TSCH mode this timestamp should be used to calculate the TSCH timeslot start time
     *        required in a FTDF_TSCH_MODE_REQUEST message
     */
    FTDF_Time64         timestamp;
} FTDF_BeaconNotifyIndication;

typedef struct
{
    /** \brief Message ID = FTDF_COMM_STATUS_INDICATION */
    FTDF_MsgId         msgId;
    /** \brief PAN ID of the frame causing the error */
    FTDF_PANId         PANId;
    /** \brief Source address mode of the frame causing the error  */
    FTDF_AddressMode   srcAddrMode;
    /** \brief Source address of the frame causing the error */
    FTDF_Address       srcAddr;
    /** \brief Destination address mode of the frame causing the error */
    FTDF_AddressMode   dstAddrMode;
    /** \brief Destination address of the frame causing the error */
    FTDF_Address       dstAddr;
    /** \brief Error status */
    FTDF_Status        status;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_CommStatusIndication;

typedef struct
{
    /** \brief Message ID = FTDF_GET_REQUEST */
    FTDF_MsgId        msgId;
    FTDF_PIBAttribute PIBAttribute;
} FTDF_GetRequest;

typedef struct
{
    /** \brief Message ID = FTDF_GET_CONFIRM */
    FTDF_MsgId                    msgId;
    /** \brief Status of the get request */
    FTDF_Status                   status;
    /** \brief PIB attribute ID of PIB attribute gotten */
    FTDF_PIBAttribute             PIBAttribute;
    /**
     * \brief Pointer to the PIB attribute value to be set<br>
     *        Each PIB attribute has its own type, see \link FTDF_PIBAttribute \endlink<br>
     *        In order to access the attribute value the application must cast this pinter
     *        to the correct type. 
     */
    const FTDF_PIBAttributeValue* PIBAttributeValue;
} FTDF_GetConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_SET_REQUEST */
    FTDF_MsgId                    msgId;
    /** \brief PIB attribute ID of attribute to be set */
    FTDF_PIBAttribute             PIBAttribute;
    /**
     * \brief Pointer to the PIB attribute value to be set<br>
     *        Each PIB attribute has its own type, see \link FTDF_PIBAttribute \endlink<br>
     *        FTDF does a shallow copy of the PIB attribute. So if the PIB attribute contains pointers to
     *        other data this data is NOT copied by FTDF. The application must make sure that data referred
     *        from a PIB attribute is statically allocated in retention RAM.
     */
    const FTDF_PIBAttributeValue* PIBAttributeValue;
} FTDF_SetRequest;

typedef struct
{
    /** \brief Message ID = FTDF_GET_CONFIRM */
    FTDF_MsgId        msgId;
    /** \brief Set request status */
    FTDF_Status       status;
    /** \brief PIB Attribute ID of PIB attribute that has been set */
    FTDF_PIBAttribute PIBAttribute;
} FTDF_SetConfirm;

typedef struct
{
    FTDF_MsgId             msgId;
    FTDF_GTSCharateristics GTSCharateristics;
    FTDF_SecurityLevel     securityLevel;
    FTDF_KeyIdMode         keyIdMode;
    FTDF_Octet             keySource[ 8 ];
    FTDF_KeyIndex          keyIndex;
} FTDF_GtsRequest;

typedef struct
{
    FTDF_MsgId             msgId;
    FTDF_GTSCharateristics GTSCharateristics;
    FTDF_Status            status;
} FTDF_GtsConfirm;

typedef struct
{
    FTDF_MsgId             msgId;
    FTDF_ShortAddress      deviceAddress;
    FTDF_GTSCharateristics GTSCharateristics;
    FTDF_SecurityLevel     securityLevel;
    FTDF_KeyIdMode         keyIdMode;
    FTDF_Octet             keySource[ 8 ];
    FTDF_KeyIndex          keyIndex;
} FTDF_GtsIndication;

typedef struct
{
    /** \brief Message ID = FTDF_ORPHAN_INDICATION */
    FTDF_MsgId         msgId;
    /** \brief Extended address of orphaned device */
    FTDF_ExtAddress    orphanAddress;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_OrphanIndication;

typedef struct
{
    /** \brief Message ID = FTDF_ORPHAN_RESPONSE */
    FTDF_MsgId         msgId;
    /** \brief Extended address of orphaned device */
    FTDF_ExtAddress    orphanAddress;
    /** \brief Short address of orphaned device */
    FTDF_ShortAddress  shortAddress;
    /** \brief Indication whether the device is associated with this coordinator or not */
    FTDF_Boolean       associatedMember;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_OrphanResponse;

typedef struct
{
    /** \brief Message ID = FTDF_RESET_REQUEST */
    FTDF_MsgId   msgId;
    /** \brief Indicatione whether the PIB attributes must be reset to their default values or not */
    FTDF_Boolean setDefaultPIB;
} FTDF_ResetRequest;

typedef struct
{
    /** \brief Message ID = FTDF_RESET_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the reset request */
    FTDF_Status status;
} FTDF_ResetConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_RX_ENABLE_REQUEST */
    FTDF_MsgId   msgId;
    /** \brief NOT USED */
    FTDF_Boolean deferPermit;
    /** \brief NOT USED */
    FTDF_Time    rxOnTime;
    /** \brief The time in aBaseSuperFramePeriod's (960 symbols) that the receiver will be on */
    FTDF_Time    rxOnDuration;
} FTDF_RxEnableRequest;

typedef struct
{
    /** \brief Message ID = FTDF_RX_ENABLE_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the RX enable request */
    FTDF_Status status;
} FTDF_RxEnableConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_SCAN_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Scan Type */
    FTDF_ScanType      scanType;
    /** \brief Bitmap of the channels to be scanned  (only channel 11 - 27 are supported ) */
    FTDF_Bitmap32      scanChannels;
    /** \brief Channel page of the channels to be scanned (only page 0 is supported ) */
    FTDF_ChannelPage   channelPage;
    /** \brief Scan duration per channel, duration = ( ( scanDuration ^ 2 ) - 1 ) * aBaseSuperFramePeriod symbols */
    FTDF_ScanDuration  scanDuration;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_ScanRequest;

typedef struct
{
    /** \brief Message ID = FTDF_SCAN_CONFIRM */
    FTDF_MsgId                   msgId;
    /** \brief Status of the scan request */
    FTDF_Status                  status;
    /** \brief Scan Type */
    FTDF_ScanType                scanType;
    /** \brief Channel page of the scanned channels */
    FTDF_ChannelPage             channelPage;
    /** \brief Bitmap of the channels not scanned but were requested to be scanned */
    FTDF_Bitmap32                unscannedChannels;
    /** \brief Number of entries in energyDetectList or PANDescriptorList */
    FTDF_Size                    resultListSize;
    /** \brief Pointer to the first energy detect result */
    FTDF_Energy*                 energyDetectList;
    /** \brief Pointer to the first PAN descriptor */
    FTDF_PANDescriptor*          PANDescriptorList;
    /** \brief */
    FTDF_CoordRealignDescriptor* coordRealignDescriptor;
} FTDF_ScanConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_START_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief PAN ID that will be used by the coordinator */
    FTDF_PANId         PANId;
    /** \brief Channel number that will be used by the coordinator */
    FTDF_ChannelNumber channelNumber;
    /** \brief Channel page that will be used by the coordinator */
    FTDF_ChannelPage   channelPage;
    /** \brief NOT USED */
    FTDF_Time          startTime;
    /** \brief Beacon order, only beacon order 15 (beaconless) is supported  */
    FTDF_Order         beaconOrder;
    /** \brief NOT USED */
    FTDF_Order         superframeOrder;
    /** \brief Indication whether the device must be a coordinator or a PAN coordinator */
    FTDF_Boolean       PANCoordinator;
    /** \brief NOT USED */
    FTDF_Boolean       batteryLifeExtension;
    /** \brief NOT USED */
    FTDF_Boolean       coordRealignment;
    /** \brief NOT USED */
    FTDF_SecurityLevel coordRealignSecurityLevel;
    /** \brief NOT USED */
    FTDF_KeyIdMode     coordRealignKeyIdMode;
    /** \brief NOT USED */
    FTDF_Octet         coordRealignKeySource[ 8 ];
    /** \brief NOT USED */
    FTDF_KeyIndex      coordRealignKeyIndex;
    /** \brief NOT USED */
    FTDF_SecurityLevel beaconSecurityLevel;
    /** \brief NOT USED */
    FTDF_KeyIdMode     beaconKeyIdMode;
    /** \brief NOT USED */
    FTDF_Octet         beaconKeySource[ 8 ];
    /** \brief NOT USED */
    FTDF_KeyIndex      beaconKeyIndex;
} FTDF_StartRequest;

typedef struct
{
    /** \brief Message ID = FTDF_START_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the start request */
    FTDF_Status status;
} FTDF_StartConfirm;

typedef struct
{
    FTDF_MsgId         msgId;
    FTDF_ChannelNumber channnelNumber;
    FTDF_ChannelPage   channelPage;
    FTDF_Boolean       trackbeacon;
} FTDF_SyncRequest;

typedef struct
{
    /** \brief Message ID = FTDF_SYNC_LOSS_INDICATION */
    FTDF_MsgId         msgId;
    /** \brief Loss Reason */
    FTDF_LossReason    lossReason;
    /** \brief PAN ID */
    FTDF_PANId         PANId;
    /** \brief Channel number */
    FTDF_ChannelNumber channelNumber;
    /** \brief Channel page */
    FTDF_ChannelPage   channelPage;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_SyncLossIndication;

typedef struct
{
    /** \brief Message ID = FTDF_POLL_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Coordinator address mode */
    FTDF_AddressMode   coordAddrMode;
    /** \brief coordinator PAN ID */
    FTDF_PANId         coordPANId;
    /** \brief Coordinator address */
    FTDF_Address       coordAddr;
    /** \brief Security level */
    FTDF_SecurityLevel securityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     keyIdMode;
    /** \brief Security key source */
    FTDF_Octet         keySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      keyIndex;
} FTDF_PollRequest;

typedef struct
{
    /** \brief Message ID = FTDF_POLL_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the poll request */
    FTDF_Status status;
} FTDF_PollConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_SET_SLOTFRAME_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Slotframe handle */
    FTDF_Handle        handle;
    /** \brief Set operation */
    FTDF_Operation     operation;
    /** \brief Number of timeslots in this slotframe */
    FTDF_SlotframeSize size;
} FTDF_SetSlotframeRequest;

typedef struct
{
    /** \brief Message ID = FTDF_SET_SLOTFRAME_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Slotframe handle */
    FTDF_Handle handle;
    /** \brief Status of the set sloytframe request */
    FTDF_Status status;
} FTDF_SetSlotframeConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_SET_LINK_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Set operation */
    FTDF_Operation     operation;
    /** \brief Handle of this link, used for delete and modify operations */
    FTDF_Handle        linkHandle;
    /** \brief Handle of the slotframe of this link */
    FTDF_Handle        slotframeHandle;
    /** \brief Timeslot in the slotframe */
    FTDF_Timeslot      timeslot;
    /** \brief Channel offset */
    FTDF_ChannelOffset channelOffset;
    /**
     * \brief Bit mapped link options, the following options are supported:<br>
     *        FTDF_LINK_OPTION_TRANSMIT: Lik can be used for transmitting<br>
     *        FTDF_LINK_OPTION_RECEIVE: Link can be used for receiving<br>
     *        FTDF_LINK_OPTION_SHARED: Shared link, multiple device can transmit in this link<br>
     *        FTDF_LINK_OPTION_TIME_KEEPING: Link will be used to synchronise timeslots<br>
     *        Multiple options can be defined by or-ing them.
     */
    FTDF_Bitmap8       linkOptions;
    /** \brief Link type */
    FTDF_LinkType      linkType;
    /** \brief Short address of the peer node, only valid if is a transmit link */
    FTDF_ShortAddress  nodeAddress;
} FTDF_SetLinkRequest;

typedef struct
{
    /** \brief Message ID = FTDF_SET_LINK_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the set link request */
    FTDF_Status status;
    /** \brief Link handle */
    FTDF_Handle linkHandle;
    /** \brief Slotframe handle */
    FTDF_Handle slotframeHandle;
} FTDF_SetLinkConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_TSCH_MODE_REQUEST */
    FTDF_MsgId    msgId;
    /** \brief The new TSCH mode */
    FTDF_TSCHMode tschMode;
    /**
     * \brief The timestamp in symbols of the start of the timeslot with ASN equal to the PIB attribute
     *        FTDF_PIB_ASN<br>
     *        The timestamp should be calculated from the timestamp of the BEACON_NOTIFY_INDICATION message<br>
     *        Before sending the FTDF_TSCH_MODE_REQUEST message the application should set FTDF_PIB_ASN with
     *        the ASN of the TSCH synchronization IE of the IEList of the BEACON_NOTIFY_INDICATION message
     */
    FTDF_Time     timeslotStartTime;
} FTDF_TschModeRequest;

typedef struct
{
    /** \brief Message ID = FTDF_TSCH_MODE_CONFIRM */
    FTDF_MsgId    msgId;
    /** \brief The new TSCH mode */
    FTDF_TSCHMode tschMode;
    /** \brief Status of the TSCH mode request */
    FTDF_Status   status;
} FTDF_TschModeConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_KEEP_ALIVE_REQUEST */
    FTDF_MsgId           msgId;
    /** \brief Short address to which keep alive message should be send */
    FTDF_ShortAddress    dstAddress;
    /** \brief */
    FTDF_KeepAlivePeriod keepAlivePeriod;
} FTDF_KeepAliveRequest;

typedef struct
{
    /** \brief Message ID = FTDF_KEEP_ALIVE_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the keep alive request */
    FTDF_Status status;
} FTDF_KeepAliveConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_BEACON_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Beacon type */
    FTDF_BeaconType    beaconType;
    /** \brief Channel number at which the beacon must be sent, ignored in TSCH mode */
    FTDF_ChannelNumber channel;
    /** \brief Channel page, ignored in TSCH mode */
    FTDF_ChannelPage   channelPage;
    /** \brief NOT USED */
    FTDF_Order         superframeOrder;
    /** \brief Security level */
    FTDF_SecurityLevel beaconSecurityLevel;
    /** \brief Security key ID mode */
    FTDF_KeyIdMode     beaconKeyIdMode;
    /** \brief Security key source */
    FTDF_Octet         beaconKeySource[ 8 ];
    /** \brief Security key index */
    FTDF_KeyIndex      beaconKeyIndex;
    /** \brief Beacon destination address mode */
    FTDF_AddressMode   dstAddrMode;
    /** \brief Beacon destination address */
    FTDF_Address       dstAddr;
    /** \brief Indication whether the BSN (or EBSN) in the beacon frame must suppressed */
    FTDF_Boolean       BSNSuppression;
    /** \brief DO NOT USE */
    uint8_t            __private3;
} FTDF_BeaconRequest;

typedef struct
{
    /** \brief Message ID = FTDF_BEACON_CONFIRM */
    FTDF_MsgId  msgId;
    /** \brief Status of the beacon request */
    FTDF_Status status;
} FTDF_BeaconConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_BEACON_REQUEST_INDICATION */
    FTDF_MsgId       msgId;
    /** \brief Beacon type */
    FTDF_BeaconType  beaconType;
    /** \brief Source address mode */
    FTDF_AddressMode srcAddrMode;
    /** \brief Source address */
    FTDF_Address     srcAddr;
    /** \brief Source PAN ID */
    FTDF_PANId       dstPANId;
    /**
     * \brief Payload IE list<br>
     *        The whole Payload IE list (including IE descriptors, Sub IE descriptors and content)
     *        is allocate in one data buffer that must be freed by the application using FTDF_REL_DATA_BUFFER
     *        with the IEList pointer as parameter.
     */
    FTDF_IEList*     IEList;
} FTDF_BeaconRequestIndication;

typedef struct
{
    /** \brief Message ID = FTDF_TRANSPARENT_ENABLE_REQUEST */
    FTDF_MsgId    msgId;
    /** \brief Enable or disable of transparent mode */
    FTDF_Boolean  enable;
    /** \brief Bitmapped transparent options, see FTDF_enableTransparentMode */
    FTDF_Bitmap32 options;
} FTDF_TransparentEnableRequest;

typedef struct
{
    /** \brief Message ID = FTDF_TRANSPARENT_REQUEST */
    FTDF_MsgId         msgId;
    /** \brief Frame length */
    FTDF_DataLength    frameLength;
    /** \brief Pointer to frame, must be allocated with FTDF_GET_DATA_BUFFER */
    FTDF_Octet*        frame;
    /** \brief Channel number */
    FTDF_ChannelNumber channel;
    /** \brief Packet Traffic Information (PTI) used for transmitting the frame. */
    FTDF_PTI           pti;
    /** \brief CSMA suppression */
    FTDF_Boolean       cmsaSuppress;
    /** \brief Application provided handle, will be returned in the transparent confirm call */
    void*              handle;
} FTDF_TransparentRequest;

typedef struct
{
    /** \brief Message ID = FTDF_TRANSPARENT_CONFIRM */
    FTDF_MsgId    msgId;
    /** \brief Application provided handle of the corresponding FTDF_sendFrameTransparent call */
    void*         handle;
    /** \brief Bit mapped status */
    FTDF_Bitmap32 status;
} FTDF_TransparentConfirm;

typedef struct
{
    /** \brief Message ID = FTDF_TRANSPARENT_INDICATION */
    FTDF_MsgId      msgId;
    /** \brief Frame length */
    FTDF_DataLength frameLength;
    /** \brief Pointer to frame, must be freed by the application using FTDF_REL_DATA_BUFFER */
    FTDF_Octet*     frame;
    /** \brief Bit mapped receive status */
    FTDF_Bitmap32   status;
} FTDF_TransparentIndication;

typedef struct
{
	/** \brief Message ID = FTDF_SLEEP_REQUEST */
	FTDF_MsgId msgId;
	/** \brief Sleep time */
	FTDF_USec  sleepTime;
} FTDF_SleepRequest;

#if FTDF_DBG_BUS_ENABLE
typedef struct
{
        /** \brief Message ID = FTDF_DBG_MODE_SET_REQUEST */
        FTDF_MsgId msgId;
        /** \brief Debug bus mode */
        FTDF_DbgMode dbgMode;
} FTDF_DbgModeSetRequest;
#endif /* FTDF_DBG_BUS_ENABLE */

#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
typedef struct
{
        /** \brief Message ID = FTDF_FPPR_MODE_SET_REQUEST */
        FTDF_MsgId msgId;
        /** \brief fp bit value to set when src address matches*/
        FTDF_Bitmap8 matchFp;
        /** \brief When set, fp_force_value will be applied to fp bit for all src addresses*/
        FTDF_Bitmap8 fpOverride;
        /** \brief The value will be set to fp bit for all src addresses when fp_override is set*/
        FTDF_Bitmap8 fpForce;
} FTDF_FpprModeSetRequest;
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */
/**
 * \brief       FTDF_getReleaseInfo - gets the LMAC (FPGA) and UMAC (FTDF SW driver) release info
 * \param[out]  lmacRelName:     LMAC release name
 * \param[out]  lmacBuildTime:   LMAC build time
 * \param[out]  umacRelName:     UMAC release name
 * \param[out]  umacBuildTime:   UMAC build time
 * \remark      Sets the application character strings pointers to character strings containing the release
 *              info. The character string space is statically allocated by FTDF and does not need 
 *              to be released by the application.
 */
void            FTDF_getReleaseInfo( char** lmacRelName, char** lmacBuildTime, char** umacRelName,
                                     char** umacBuildTime );

/**
 * \brief       FTDF_confirmLmacInterrupt - Confirmation that the LMAC interrupt has been received
 *              by the application
 * \remark      This function disables the LMAC interrupt. The application must wait for any other
 *              FTDF API function to be completed and call the function FTDF_eventHandler. This function
 *              will enable the LMAC interrupt again the function FTDF_eventHandler.
 */
void            FTDF_confirmLmacInterrupt( void );

/**
 * \brief       FTDF_eventHandler - Handles an event signalled by the LMAC interrupt
 * \remark      This function handles the event signalled by the LMAC interrupt and enables the LMAC
 *              interrupt when finished.
 * \warning     FTDF is strictly NON reentrant, so FTDF_eventHandler is NOT allowed to be called when another FTDF
 *              is being executed
 */
void            FTDF_eventHandler( void );

/**
 * \brief       FTDF_sndMsg - Sends a request (response) message to FTDF driver
 * \param[in]   msgBuf:      The message to be send. To application must set the msgId field and the request
 *                           specific parameters by casting it to the appropriate request message structure.
 * \remark      The message must be allocated by the application using the function FTDF_GET_MSG_BUFFER
 *              and will be released by FTDF using FTDF_REL_MSG_BUFFER. When finished FTDF releases the message
 *              buffer and sends a confirm (indication) to the application using the function FTDF_RCV_MSG.
 * \remark      As follows a table of message IDs accepted by FTDF_sndMsg, the message structure corresponding
 *              to this message ID and the confirm send back to the application when the request has been
 *              completed by FTDF:
 * \remark      <br>
 * \remark      Request message ID, Request structure, Request confirm
 * \remark      ---------------------------------------------------------------------------------
 * \remark      FTDF_DATA_REQUEST, FTDF_DataRequest, FTDF_DATA_CONFIRM
 * \remark      FTDF_PURGE_REQUEST, FTDF_PurgeRequest, FTDF_DATA_CONFIRM
 * \remark      FTDF_ASSOCIATE_REQUEST, FTDF_AssociateRequest, FTDF_ASSOCIATE_CONFIRM
 * \remark      FTDF_ASSOCIATE_RESPONSE, FTDF_AssociateResponse, FTDF_COMM_STATUS_INDICATION
 * \remark      FTDF_DISASSOCIATE_REQUEST, FTDF_DisassociateRequest, FTDF_DISASSOCIATE_CONFIRM
 * \remark      FTDF_GET_REQUEST, FTDF_GetRequest, FTDF_GET_CONFIRM
 * \remark      FTDF_SET_REQUEST, FTDF_SetRequest, FTDF_SET_CONFIRM
 * \remark      FTDF_ORPHAN_RESPONSE, FTDF_OrphanResponse,  FTDF_COMM_STATUS_INDICATION
 * \remark      FTDF_RESET_REQUEST, FTDF_ResetRequest, FTDF_RESET_CONFIRM
 * \remark      FTDF_RX_ENABLE_REQUEST, FTDF_ScanRequest, FTDF_RX_ENABLE_CONFIRM
 * \remark      FTDF_SCAN_REQUEST, FTDF_ScanRequest, FTDF_SCAN_CONFIRM
 * \remark      FTDF_START_REQUEST, FTDF_StartRequest, FTDF_START_CONFIRM
 * \remark      FTDF_POLL_REQUEST, FTDF_PollRequest, FTDF_POLL_CONFIRM
 * \remark      FTDF_SET_SLOTFRAME_REQUEST, FTDF_SetSlotframeRequest, FTDF_SET_SLOTFRAME_CONFIRM
 * \remark      FTDF_SET_LINK_REQUEST, FTDF_SetLinkRequest, FTDF_SET_LINK_CONFIRM
 * \remark      FTDF_TSCH_MODE_REQUEST, FTDF_TschModeRequest, FTDF_TSCH_MODE_CONFIRM
 * \remark      FTDF_KEEP_ALIVE_REQUEST, FTDF_KeepAliveRequest, FTDF_KEEP_ALIVE_CONFIRM
 * \remark      FTDF_BEACON_REQUEST, FTDF_BeaconRequest, FTDF_BEACON_CONFIRM
 * \warning     FTDF is strictly NON reentrant, so it is NOT allowed to call any other FTDF function before this API has been completed. This including the FTDF_eventHandler function.
 */
void            FTDF_sndMsg( FTDF_MsgBuffer* msgBuf );

/**
 * \brief       FTDF_RCV_MSG - Receives a confir or indication message from the FTDF driver
 * \param[in]   msgBuf:      The received message. The msgId field indicates the received message
 * \remark      This function must be implemented by the application and is called by FTDF to pass 
 *              a confirm or indication message to the application. It must be configured in the
 *              configuration file ftdf_config.h.
 * \remark      The message buffer is allocated by FTDF using FTDF_GET_MSG_BUFFER and must be released
 *              by the application using FTDF_REL_MSG_BUFFER
 * \remark      As follows a table of the confirm and indications messages and their message structures.
 * \remark      <br>
 * \remark      Confirm/indication message ID, Confirm/indication structure
 * \remark      ---------------------------------------------------------------------------------
 * \remark      FTDF_DATA_INDICATION, FTDF_DataIndication
 * \remark      FTDF_DATA_CONFIRM, FTDF_DataConfirm
 * \remark      FTDF_PURGE_CONFIRM, FTDF_PurgeConfirm
 * \remark      FTDF_ASSOCIATE_INDICATION, FTDF_AssociateIndication
 * \remark      FTDF_ASSOCIATE_CONFIRM, FTDF_AssociateConfirm
 * \remark      FTDF_DISASSOCIATE_INDICATION, FTDF_DisassociateIndication
 * \remark      FTDF_DISASSOCIATE_CONFIRM,FTDF_DisassociateConfirm
 * \remark      FTDF_BEACON_NOTIFY_INDICATION, FTDF_BeaconNotifyIndication
 * \remark      FTDF_COMM_STATUS_INDICATION, FTDF_CommStatusIndication
 * \remark      FTDF_GET_CONFIRM, FTDF_GetConfirm
 * \remark      FTDF_SET_CONFIRM, FTDF_SetConfirm
 * \remark      FTDF_ORPHAN_INDICATION, FTDF_OrphanIndication
 * \remark      FTDF_RESET_CONFIRM, FTDF_ResetConfirm
 * \remark      FTDF_RX_ENABLE_CONFIRM, FTDF_RxEnableConfirm
 * \remark      FTDF_SCAN_CONFIRM, FTDF_ScanConfirm
 * \remark      FTDF_START_CONFIRM, FTDF_StartConfirm
 * \remark      FTDF_SYNC_LOSS_INDICATION, FTDF_SyncLossIndication
 * \remark      FTDF_POLL_CONFIRM, FTDF_PollConfirm
 * \remark      FTDF_SET_SLOTFRAME_CONFIRM, FTDF_SetSlotframeConfirm
 * \remark      FTDF_SET_LINK_CONFIRM, FTDF_SetLinkConfirm
 * \remark      FTDF_TSCH_MODE_CONFIRM, FTDF_TschModeConfirm
 * \remark      FTDF_KEEP_ALIVE_CONFIRM, FTDF_KeepAliveConfirm
 * \remark      FTDF_BEACON_CONFIRM, FTDF_BeaconConfirm
 * \remark      FTDF_BEACON_REQUEST_INDICATION, FTDF_BeaconRequestIndication
 * \warning     FTDF is strictly NON reentrant. Because FTDF_RCV_MSG can be called by FTDF_sndMsg or FTDF_eventHandler
 *              it is not allowed to call other FTDF functions within FTDF_RCV_MSG
 */
void            FTDF_RCV_MSG( FTDF_MsgBuffer* msgBuf );

/**
 * \brief       FTDF_GET_MSG_BUFFER - Allocates a message buffer
 * \param[in]   len:      The length of the message buffer to be allocated
 * \remark      This function must be implemented by the application it will called by both the
 *              application and FTDF. It must be configured in the configuration file ftdf_config.h.
 * \remark      The allocated message buffer must be freed using FTDF_REL_MSG_BUFFER
 * \remark      The message buffer must be located in retention RAM
 * \return      pointer to the allocated message buffer.
 */
FTDF_MsgBuffer* FTDF_GET_MSG_BUFFER( FTDF_Size len );

/**
 * \brief       FTDF_REL_MSG_BUFFER - Frees a message buffer
 * \param[in]   msgBuf:      Pointer to the message buffer to be released
 * \remark      This function must be implemented by the application it will called by both the
 *              application and FTDF. It must be configured in the configuration file ftdf_config.h.
 * \remark      It will free message buffers allocated with FTDF_GET_MSG_BUFFER
 */
void            FTDF_REL_MSG_BUFFER( FTDF_MsgBuffer* msgBuf );

/**
 * \brief       FTDF_GET_DATA_BUFFER - Allocates a data buffer
 * \param[in]   len:      The length of the data buffer to be allocated
 * \remark      This function must be implemented by the application it will called by both the
 *              application and FTDF. It must be configured in the configuration file ftdf_config.h.
 * \remark      The allocated data buffer must be freed using FTDF_REL_DATA_BUFFER
 * \remark      The data buffer must located in retention RAM
 * \return      pointer to the allocated data buffer.
 */
FTDF_Octet*     FTDF_GET_DATA_BUFFER( FTDF_DataLength len );

/**
 * \brief       FTDF_REL_DATA_BUFFER - Frees a data buffer
 * \param[in]   dataBuf:      Pointer to the data buffer to be released
 * \remark      This function must be implemented by the application it will called by both the
 *              application and FTDF. It must be configured in the configuration file ftdf_config.h.
 * \remark      It will free data buffers allocated with FTDF_GET_DATA_BUFFER
 */
void            FTDF_REL_DATA_BUFFER( FTDF_Octet* dataBuf );

/**
 * \brief       FTDF_GET_EXT_ADDRESS - Gets the extended address
 * \remark      This function must be implemented by the application it will called by FTDF. It must
 *              be configured in the configuration file ftdf_config.h.
 * \remark      After a reset it is used by FTDF to get the extended address of the device
 * \return      An extended address. 
 */
FTDF_ExtAddress FTDF_GET_EXT_ADDRESS( void );

/**
 * \brief       FTDF_enableTransparentMode - Enables or disables the transparent mode
 * \param[in]   enable: If FTDF_TRUE transparent mode is enabled else it will be disabled
 * \param[in]   options: A bitmap of transparent mode options. Not used if enable equals to FTDF_FALSE.
 * \remark      If the transparent mode is enabled received frame are passed to the application using
 *              FTDF_RCV_FRAME_TRANSPARENT. The whole MAC frame including frame headers, security headers
 *              and FCS are passed to the application. Depending on the defined options some filtering
 *              is done.
 * \remark      When the transparent mode is enabled frames must be send using the function FTDF_sendFrameTransparent
 * \remark      When the transparent mode is enabled only the following request messages are supported:
 * \remark      <br>
 * \remark      FTDF_GET_REQUEST
 * \remark      FTDF_SET_REQUEST
 * \remark      FTDF_RESET_REQUEST
 * \remark      <br>
 * \remark      The behavior of FTDF when it receives request not supported in transparent mode is NOT defined!
 * \remark      <br>
 * \remark      Transparent mode cannot be enabled if FTDF is in CSL or TSCH mode.
 * \remark      <br>
 * \remark      The following options are supported:
 * \remark      <br>
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_0: Frames of type 0 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_1: Frames of type 1 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_2: Frames of type 2 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_3: Frames of type 3 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_4: Frames of type 4 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_5: Frames of type 5 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_6: Frames of type 6 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_FRAME_TYPE_7: Frames of type 7 are always passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_FRAME_TYPES: All frame types are always passed to the application
 * \remark      FTDF_TRANSPARENT_AUTO_ACK: FTDF sends an automatically and ACK if it receives an version 0 or 1
 *              frame with AR set in the fram control field
 * \remark      FTDF_TRANSPARENT_AUTO_FP_ACK:  FTDF sends an automatically and ACK frame with FP set if it
 *              receives an version 0 or 1 DATA_REQUEST command frame with AR set in the fram control field
 * \remark      FTDF_TRANSPARENT_PASS_CRC_ERROR: Frames with a CRC (FCS) error are passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_FRAME_VERSION: Frames with any frame version are passed to the
 *              application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_PAN_ID: Frames with any PAN ID (even when it does not match its own
 *              PAN ID) are passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_PAN_ID: Frames with any address (even when it does not match its own
 *              extended or short address) are passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_BEACON: Any beacon frame is passed to the application
 * \remark      FTDF_TRANSPARENT_PASS_ALL_NO_DEST_ADDR: Frames with no destination address are always passed to
 *              the application
 * \remark      FTDF_TRANSPARENT_ENABLE_FCS_GENERATION: FTDF adds an FCS to frames send with FTDF_sendFrameTransparent
 */
void            FTDF_enableTransparentMode( FTDF_Boolean  enable,
                                            FTDF_Bitmap32 options );

/**
 * \brief       FTDF_sendFrameTransparent - Sends a frame transparent
 * \param[in]   frameLength:   Length of the MAC frame to be send
 * \param[in]   frame:         Data buffer with the frame to be sent. Must be allocate using FTDF_GET_DATA_BUFFER
 * \param[in]   channel:       The channel used to send the frame
 * \param[in]   pti:           Packet Traffic Information used for transmitting the packet
 * \param[in]   cmsaSuppress:  If FTDF_TRUE no CSMA-CA is performed before sending the frame
 * \param[in]   handle:        A user defined handle.
 * \remark      FTDF sends the frame tarnsparently. That is the application has to compose the MAC frame header, 
 *              security header, etc and make sure that it complies with the IEEE802.15.4 standard. Before sending
 *              it FTDF adds the  preamble, frame start, phy header octets and optionally an FCS to the frame provide
 *              by the application.
 * \remark      When FTDF has send the frame or failed to send the frame it will call FTDF_SEND_FRAME_TRANSPARENT_CONFIRM
 *              with the handle provided by the application and the send status.
 */
void FTDF_sendFrameTransparent( FTDF_DataLength    frameLength,
                                FTDF_Octet*        frame,
                                FTDF_ChannelNumber channel,
                                FTDF_PTI           pti,
                                FTDF_Boolean       cmsaSuppress,
                                void*              handle );

/**
 * \brief       FTDF_SEND_FRAME_TRANSPARENT_CONFIRM - Confirms a transparent send
 * \param[in]   handle:   The application provided handle of the corresponding FTDF_sendFrameTransparent call
 * \param[in]   status:   Bit mapped status
 * \remark      This function must be implemented by the application it will called by FTDF. It must
 *              be configured in the configuration file ftdf_config.h.
 * \remark      FTDF calls this function when a frame has send successfully or failed to send. The application can
 *              now free the data buffer of the corresponding FTDF_sendFrameTransparent using FTDF_REL_DATA_BUFFER
 * \remark      If the frame is send successfully status is equal to 0
 * \remark      If sending the frame failed one of more of the following status bits is set:
 *              - FTDF_TRANSPARENT_CSMACA_FAILURE: Sending failed because CSMA-CA failed
 *              - FTDF_TRANSPARENT_OVERFLOW: Sending failed because of internal resource overflow
 */
void FTDF_SEND_FRAME_TRANSPARENT_CONFIRM( void*         handle,
                                          FTDF_Bitmap32 status );

/**
 * \brief       FTDF_sendFrameTransparentConfirm - Converts the FTDF_SEND_FRAME_TRANSPARENT_CONFIRM to a msg buffer
 *              and then calls FTDF_RCV_MSG.
 * \param[in]   handle:   The application provided handle of the corresponding FTDF_sendFrameTransparent call
 * \param[in]   status:   Bit mapped status
 * \remark      This function converts the input parameters to a FTDF_TransparentConfirm structure
 *              and then calls FTDF_RCV_MSG.
 * \remark      FTDF_SEND_FRAME_TRANSPARENT_CONFIRM can be defined to be this function.
 */
void FTDF_sendFrameTransparentConfirm( void*         handle,
                                       FTDF_Bitmap32 status );

/**
 * \brief       FTDF_RCV_FRAME_TRANSPARENT - Receive frame transparent
 * \param[in]   frameLength: Length of the received frame
 * \param[in]   frame:       Pointer to received frame. 
 * \param[in]   status:      Bitmapped receive status
 * \remark      This function must be implemented by the application it will called by FTDF. It must
 *              be configured in the configuration file ftdf_config.h.
 * \remark      FTDF calls this function when a frame is received when transparent mode is enabled
 * \remark      The buffer with the frame must be copied by the application before this function returns
 * \remark      The following status bits can be set:
 *              - FTDF_TRANSPARENT_RCV_CRC_ERROR: The CRC (FCS) of the received frame is not correct
 *              - FTDF_TRANSPARENT_RCV_RES_FRAMETYPE: Received a reserved frame type
 *              - FTDF_TRANSPARENT_RCV_RES_FRAME_VERSION: Received a reserved frame version
 *              - FTDF_TRANSPARENT_RCV_UNEXP_DST_ADDR: Unexpected destination address
 *              - FTDF_TRANSPARENT_RCV_UNEXP_DST_PAN_ID: Unexpected destionation PAN ID
 *              - FTDF_TRANSPARENT_RCV_UNEXP_BEACON: Unexpected beacon frame
 *              - FTDF_TRANSPARENT_RCV_UNEXP_NO_DEST_ADDR: Unexpected frame without destination adres.
 */
void FTDF_RCV_FRAME_TRANSPARENT( FTDF_DataLength frameLength,
                                 FTDF_Octet*     frame,
                                 FTDF_Bitmap32   status,
                                 FTDF_LinkQuality lqi);

/**
 * \brief       FTDF_rcvFrameTransparent - Converts the FTDF_RCV_FRAME_TRANSPARENT to a msg buffer
 *              and then calls FTDF_RCV_MSG.
 * \param[in]   frameLength: Length of the received frame
 * \param[in]   frame:       Pointer to received frame. 
 * \param[in]   status:      Bitmapped receive status
 * \remark      This function convers the input parameters to a FTDF_TransparentIndication structure
 *              and then calls FTDF_RCV_MSG.
 * \remark      FTDF_RCV_FRAME_TRANSPARENT can be defined to be this function.
 */
void FTDF_rcvFrameTransparent( FTDF_DataLength frameLength,
                               FTDF_Octet*     frame,
                               FTDF_Bitmap32   status,
                               FTDF_LinkQuality lqi);

/**
 * \brief       FTDF_setSleepAttributes - Set sleep atributes
 * \param[in]   lowPowerClockCycle: The LP clock cycle in picoseconds
 * \param[in]   wakeUpLatency:      The wakep up latency time in low power clock cycles
 * \remark      This functions sets some attributes required by FTDF to go into a deep sleep and wake up from it.
 * \remark      The wake up latency is the time between the wakeup signal send by FTDF and the moment that the
 *              clocks are stable. It will be used by FTDF to determine when it must must send the wakeup signal.
 * \remark      The low power clock cycle will be used to determine how long the system has slept and recover 
 *              the symbol counter internally used by FTDF.
 */
void FTDF_setSleepAttributes( FTDF_PSec                  lowPowerClockCycle,
                              FTDF_NrLowPowerClockCycles wakeUpLatency );

/**
 * \brief       FTDF_canSleep - Indicates whether FTDF can go in a deep sleep
 * \remark      This function returns the time in microseconds that the FTDF can deep sleep.
 * \remark      It does NOT take into account the wakeup latency.
 * \return      The number of microseconds that the FTDF can deep sleep. If equal to 0 the FTDF is still active
 *              and cannot deep sleep
 */
FTDF_USec FTDF_canSleep( void );

/**
 * \brief       FTDF_prepareForSleep - Prepare the FTDF for a deep sleep
 * \param[in]   sleepTime: The sleep time. After the sleep time the FTDF must be ready to do next scheduled activity.
 * \remark      When this function is completed the application can safely power off the FTDF and put the uP in
 *              a deep sleep. At least wake up latency time microseconds before sleep time is expired the FTDF
 *              will send a wakeup signal. FTDF expect that the application calls FTDF_wakeUp as it has been
 *              woken up.
 * \return      FTDF_TRUE if the FTDF can be put in deep sleep, FTDF_FALSE if the sleepTime is too short to go to
 *              deep sleep and wake up again after sleepTime microseconds, the FTDF cannot be put in deep sleep.
 */
FTDF_Boolean FTDF_prepareForSleep( FTDF_USec sleepTime );

/**
 * \brief       FTDF_wakeUp - Wake up the FTDF after a sleep
 * \remark      This function will restores the FTDF to state before the deep sleep. It will does this in 2 steps
 *              1. It initialises it internal states and data structures and all the non timing specific HW. After
 *              that it waits until the wake up latency time has been expired. When expired FTDF assumes that the
 *              slocks are stable.
 *              2. It restores timers in HW and calls the function FTDF_WAKE_UP_READY to indicate FTDF is up again,
 *              ready to perform scheduled activities and ready to process new requests from the application.
 */
void FTDF_wakeUp( void );

/**
 * \brief       FTDF_WAKE_UP_READY - Indication that FTDF has woke up
 * \remark      This function must be implemented by the application it will called by FTDF. It must
 *              be configured in the configuration file ftdf_config.h.
 * \remark      FTDF calls this function when it is up again, ready to perform scheduled activities and ready to
 *              process new requests from the application.
 */
void FTDF_WAKE_UP_READY( void );

/**
 * \brief       FTDF_SLEEP_CALLBACK - Callback from FTDF_SLEEP_REQUEST
 * \remark      This function must be implemented by the application, it will be called by FTDF.
 *              It must be configured in the configuration file ftdf_config.h
 * \remark      FTDF calls this function when an FTDF_SLEEP_REQUEST message is sent through the FTDF_sndMsg function.
 */
void FTDF_SLEEP_CALLBACK( FTDF_USec sleepTime );

void FTDF_reset(int setDefaultPIB);

FTDF_PTI FTDF_getRxPti( void );

#if FTDF_USE_PTI
void FTDF_setRxPti( FTDF_PTI rx_pti );
#if FTDF_USE_AUTO_PTI
void FTDF_restoreRxPti(void);
#endif
#endif

#ifdef FTDF_PHY_API
FTDF_Status FTDF_sendFrameSimple( FTDF_DataLength    frameLength,
        FTDF_Octet*        frame,
        FTDF_ChannelNumber channel,
        FTDF_PTI           pti,
        FTDF_Boolean       csmaSuppress);
FTDF_PIBAttributeValue *FTDF_getValue(FTDF_PIBAttribute PIBAttribute);
FTDF_Status FTDF_setValue(FTDF_PIBAttribute PIBAttribute, const FTDF_PIBAttributeValue *PIBAttributeValue);
void FTDF_rxEnable(FTDF_Time rxOnDuration);
#endif /* FTDF_PHY_API */

#if FTDF_DBG_BUS_ENABLE
/**
 * \brief Checks current debug mode and makes appropriate hardware configurations.
 */
void FTDF_checkDbgMode(void);

/**
 * \brief Sets debug bus mode.
 */
void FTDF_setDbgMode(FTDF_DbgMode dbgMode);

/**
 * \brief Debug bus GPIO configuration callback. Makes appropriate GPIO configurations for the debug
 * bus.
 */
void FTDF_DBG_BUS_GPIO_CONFIG(void);
#endif /* FTDF_DBG_BUS_ENABLE */

#if dg_configUSE_FTDF_DDPHY == 1
void FTDF_ddphySet(uint16_t ccaReg);
#endif /* dg_configUSE_FTDF_DDPHY == 1 */

#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A

#if FTDF_FP_BIT_MODE == FTDF_FP_BIT_MODE_AUTO
#ifndef FTDF_LITE
/**
 * \brief Controls when the FPPR address invalidation will be performed.
 *
 * If set to 0 (recommended), address invalidation in FPPR occurs right after the frame is passed to
 * LMAC for direct transmission. If set to 1, address invalidation occurs after the associated
 * confirm message is received.
 */
#define FTDF_FPPR_DEFER_INVALIDATION                    0

/**
 * \brief Adds a new short address to FPPR, initializing the corresponding FSM.
 *
 * A short address FP FSM accepts the following notifications (events):
 *
 * - New address (initialize) by calling @ref FTDF_fpFsmShortAddressNew()
 * - Last frame pending (passed to direct sending) by calling @ref
 * FTDF_fpFsmShortAddressLastFramePending()
 * - Last pending frame sent by calling @ref FTDF_fpFsmClearPending()
 *
 * A new address may be rejected if there is no adequate space left in FPPR.
 *
 * \param [in] panId Destination PAN ID.
 * \param [in] shortAddress Destination short address.
 *
 * \return \ref FTDF_TRUE on success.
 */
FTDF_Boolean FTDF_fpFsmShortAddressNew(FTDF_PANId panId, FTDF_ShortAddress shortAddress);

/**
 * \brief Adds a new extended address to FPPR, initializing the corresponding FSM.
 *
 * An extended address FP FSM accepts the following notifications (events):
 *
 * - New address (initialize) by calling @ref FTDF_fpFsmExtAddressNew()
 * - Last frame pending (passed to direct sending) by calling @ref
 * FTDF_fpFsmExtAddressLastFramePending()
 * - Last pending frame sent by calling @ref FTDF_fpFsmClearPending()
 *
 * A new address may be rejected if there is no adequate space left in FPPR.
 *
 * \param [in] panId Destination PAN ID.
 * \param [in] extAddress Destination extended address.
 *
 * \return \ref FTDF_TRUE on success.
 */
FTDF_Boolean FTDF_fpFsmExtAddressNew(FTDF_PANId panId, FTDF_ExtAddress extAddress);

/**
 * \brief Notifies FP FSM that the last packet for the associated destination has been passed for
 * direct transmission.
 *
 * \param [in] panId Destination PAN ID.
 * \param [in] shortAddress Destination short address.
 */
void FTDF_fpFsmShortAddressLastFramePending(FTDF_PANId panId, FTDF_ShortAddress shortAddress);

/**
 * \brief Notifies FP FSM that the last packet for the associated destination has been passed for
 * direct transmission.
 *
 * \param [in] panId Destination PAN ID.
 * \param [in] shortAddress Destination extended address.
 */
void FTDF_fpFsmExtAddressLastFramePending(FTDF_PANId panId, FTDF_ExtAddress extAddress);

/**
 * \brief Notifies FP FSM that the last pending packet has been transmitted (UMAC state machine
 * closed).
 */
void FTDF_fpFsmClearPending(void);

#endif /* #ifndef FTDF_LITE */

/**
 * \brief Number of FPPR table entries.
 */
#define FTDF_FPPR_TABLE_ENTRIES                         24

/**
 * \brief Number of extended address table entries.
 */
#define FTDF_FPPR_TABLE_EXT_ADDRESS_ENTRIES             FTDF_FPPR_TABLE_ENTRIES

/**
 * \brief Number of short address table entries.
 */
#define FTDF_FPPR_TABLE_SHORT_ADDRESS_ENTRIES           (FTDF_FPPR_TABLE_ENTRIES * 4)

/**
 * \brief Resets FPPR table, invalidating all addresses.
 */
void FTDF_fpprReset(void);

/**
 * \brief Gets the short address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] shortAddrIdx Short address position within the entry (0 to 3).
 *
 * \return Requested short address
 */
FTDF_ShortAddress FTDF_fpprGetShortAddress(uint8_t entry, uint8_t shortAddrIdx);

/**
 * \brief Programs a short address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] shortAddrIdx Short address position within the entry (0 to 3).
 * \param [in] Associated short address.
 */
void FTDF_fpprSetShortAddress(uint8_t entry, uint8_t shortAddrIdx,
        FTDF_ShortAddress shortAddress);

/**
 * \brief Determines validity of a short address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] shortAddrIdx Short address position within the entry (0 to 3).
 *
 * \return FTDF_TRUE if the address is valid.
 */
FTDF_Boolean FTDF_fpprGetShortAddressValid(uint8_t entry, uint8_t shortAddrIdx);

/**
 * \brief Sets validity of a short address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] shortAddrIdx Short address position within the entry (0 to 3).
 * \param [in] valid Associated validity.
 */
void FTDF_fpprSetShortAddressValid(uint8_t entry, uint8_t shortAddrIdx,
        FTDF_Boolean valid);

/**
 * \brief Gets the extended address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 *
 * \return Requested extended address
 */
FTDF_ExtAddress FTDF_fpprGetExtAddress(uint8_t entry);

/**
 * \brief Programs an extended address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] Associated extended address.
 */
void FTDF_fpprSetExtAddress(uint8_t entry, FTDF_ExtAddress extAddress);

/**
 * \brief Determines validity of an extended address programmed at the specified FPPR table
 * position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 *
 * \return \ref FTDF_TRUE if the address is valid.
 */
FTDF_Boolean FTDF_fpprGetExtAddressValid(uint8_t entry);

/**
 * \brief Sets validity of an extended address programmed at the specified FPPR table position.
 *
 * \param [in] entry FPPR table entry (0 to \ref FTDF_FPPR_TABLE_ENTRIES - 1).
 * \param [in] valid Associated validity.
 */
void FTDF_fpprSetExtAddressValid(uint8_t entry, FTDF_Boolean valid);

/**
 * \brief Gets a free (invalid) short address position in the FPPR table.
 *
 * \param [out] entry Reference to the FPPR table entry.
 * \param [out] shortAddrIdx Reference to the short address position within the entry.
 *
 * \return \ref FTDF_TRUE if a free position was found.
 */
FTDF_Boolean FTDF_fpprGetFreeShortAddress(uint8_t * entry,
        uint8_t * shortAddrIdx);

/**
 * \brief Gets a free (invalid) extended address position in the FPPR table.
 *
 * \param [out] entry Reference to the FPPR table entry.
 *
 * \return \ref FTDF_TRUE if a free position was found.
 */
FTDF_Boolean FTDF_fpprGetFreeExtAddress(uint8_t * entry);

/**
 * \brief Looks up a short address within the FPPR table.
 *
 * \param [in] shortAddr Associated short address.
 * \param [out] entry Reference to the FPPR table entry.
 * \param [out] shortAddrIdx Reference to the short address position within the entry.
 *
 *  * \return \ref FTDF_TRUE if the address was found.
 */
FTDF_Boolean FTDF_fpprLookupShortAddress(FTDF_ShortAddress shortAddr, uint8_t * entry,
        uint8_t * shortAddrIdx);

/**
 * \brief Looks up an extended address within the FPPR table.
 *
 * \param [in] extAddr Associated extended address.
 * \param [out] entry Reference to the FPPR table entry.
 *
 *  * \return \ref FTDF_TRUE if the address was found.
 */
FTDF_Boolean FTDF_fpprLookupExtAddress(FTDF_ExtAddress extAddr, uint8_t * entry);

#endif /* FTDF_FP_BIT_MODE == FTDF_FP_BIT_MODE_AUTO */

/**
 * \brief Sets FPPR mode.
 *
 * \param [in] matchFp Specifies the value of the FP bit when acknowledging a received frame with a
 * source address that matches a valid a address in the FPPR table. The opposite value is set if the
 * source address does not match. Ignored if \a fpOverride is \ref FTDF_TRUE.
 *
 * \param [in] fpOverride If \ref FTDF_TRUE, the value of \a fpForce is used for setting the FP bit,
 * regardless of the address table matching result.
 *
 * \param [in] fpForce FP bit value when fpOverride is \ref FTDF_TRUE. Ignored otherwise.
 */
void FTDF_fpprSetMode(FTDF_Boolean matchFp, FTDF_Boolean fpOverride, FTDF_Boolean fpForce);

#if FTDF_FP_BIT_TEST_MODE
/**
 * \brief Gets FPPR mode.
 *
 * \param [out] matchFp Reference to the returned value. \see FTDF_fpprRamSetMode
 *
 * \param [out] fpOverride Reference to the returned value. \see FTDF_fpprRamSetMode
 *
 * \param [out] fpForce FP Reference to the returned value. \see FTDF_fpprRamSetMode
 */
void FTDF_fpprGetMode(FTDF_Boolean * matchFp, FTDF_Boolean * fpOverride, FTDF_Boolean * fpForce);
#endif //FTDF_FP_BIT_TEST_MODE

#if FTDF_USE_LPDP == 1

/**
 * \brief Enable or disable LPDP.
 *
 * \param [in] enable if FTDF_TRUE, LPDP functionality is enabled.
 */
void FTDF_lpdpEnable(FTDF_Boolean enable);

#if FTDF_FP_BIT_TEST_MODE
/**
 * \brief Checks whether LPDP is enabled.
 *
 * \return FTDF_TRUE, if LPDP functionality is enabled.
 */
FTDF_Boolean FTDF_lpdpIsEnabled(void);
#endif

#endif /* #if FTDF_USE_LPDP == 1 */
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */

#endif /* FTDF_H_ */

/**
 * \}
 * \}
 * \}
 */

