/**
 ****************************************************************************************
 *
 * @file internal.h
 *
 * @brief Internal 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.
 *
 *
 ****************************************************************************************
 */

#define FTDF_TBD                   0

#define FTDF_FCS_LENGTH            2
#define FTDF_BUFFER_LENGTH         128
#ifndef FTDF_NR_OF_REQ_BUFFERS
#define FTDF_NR_OF_REQ_BUFFERS     96
#endif
#define FTDF_NR_OF_RX_BUFFERS      8
#define FTDF_NR_OF_CHANNELS        16
#define FTDF_NR_OF_SCAN_RESULTS    16
#define FTDF_NR_OF_CSL_PEERS       16
#define FTDF_MAX_HEADER_IES        8
#define FTDF_MAX_PAYLOAD_IES       4
#define FTDF_MAX_SUB_IES           8
#define FTDF_MAX_IE_CONTENT        128
#define FTDF_NR_OF_RX_ADDRS        16
#define FTDF_NR_OF_NEIGHBORS       16

#define FTDF_TX_DATA_BUFFER        0
#define FTDF_TX_WAKEUP_BUFFER      1
#define FTDF_TX_ACK_BUFFER         2

#define FTDF_OPT_SECURITY_ENABLED  0x01
#define FTDF_OPT_FRAME_PENDING     0x02
#define FTDF_OPT_SEQ_NR_SUPPRESSED 0x04
#define FTDF_OPT_ACK_REQUESTED     0x08
#define FTDF_OPT_IES_PRESENT       0x10
#define FTDF_OPT_PAN_ID_PRESENT    0x20
#define FTDF_OPT_ENHANCED          0x40

#define FTDF_MSK_RX_CE             0x00000002
#define FTDF_MSK_SYMBOL_TMR_CE     0x00000008
#define FTDF_MSK_TX_CE             0x00000010

// The maximum time in symbols that is takes to process request. After succesful
// processing a request the TX buffer is fully initialized and ready to be sent.
#define FTDF_TSCH_MAX_PROCESS_REQUEST_TIME 35

// The maximum time in symbols needed to search for the next slot for which a
// TX or RX needs to be done
#define FTDF_TSCH_MAX_SCHEDULE_TIME 30

#define FTDF_GET_FIELD_ADDR( fieldName )                ( (volatile uint32_t*) ( IND_F_FTDF_ ## fieldName ) )
#define FTDF_GET_FIELD_ADDR_INDEXED( fieldName, index ) ( (volatile uint32_t*) ( IND_F_FTDF_ ## fieldName + \
                                                                                 (intptr_t) index * \
                                                                                 FTDF_ ## fieldName ## _INTVL ) )
#define FTDF_GET_REG_ADDR( regName )                    ( (volatile uint32_t*) ( IND_R_FTDF_ ## regName ) )
#define FTDF_GET_REG_ADDR_INDEXED( regName, index )     ( (volatile uint32_t*) ( IND_R_FTDF_ ## regName + \
                                                                                 (intptr_t) index * \
                                                                                 FTDF_ ## regName ## _INTVL ) )
#define FTDF_GET_FIELD( fieldName )                     ( ( ( *(volatile uint32_t*) ( IND_F_FTDF_ ## fieldName ) ) & \
                                                            MSK_F_FTDF_ ## fieldName ) >> OFF_F_FTDF_ ## fieldName )
#define FTDF_GET_FIELD_INDEXED( fieldName, \
                                index )                 ( ( ( *FTDF_GET_FIELD_ADDR_INDEXED( fieldName, \
                                                                                            index ) ) \
                                                            & MSK_F_FTDF_ ## fieldName ) >> OFF_F_FTDF_ ## fieldName )

#define FTDF_SET_FIELD( fieldName, value )              do {            \
        uint32_t tmp =  *FTDF_GET_FIELD_ADDR( fieldName ) & ~MSK_F_FTDF_ ## fieldName; \
        *FTDF_GET_FIELD_ADDR( fieldName ) = tmp | \
                                            ( ( ( value ) << OFF_F_FTDF_ ## fieldName ) & MSK_F_FTDF_ ## fieldName ); \
} \
    while ( 0 )


#define FTDF_SET_FIELD_INDEXED( fieldName, value, index )              do {            \
        uint32_t tmp =  *FTDF_GET_FIELD_ADDR_INDEXED( fieldName, index ) & ~MSK_F_FTDF_ ## fieldName; \
        *FTDF_GET_FIELD_ADDR_INDEXED( fieldName, index ) = tmp | \
                                            ( ( ( value ) << OFF_F_FTDF_ ## fieldName ) & MSK_F_FTDF_ ## fieldName ); \
} \
    while ( 0 )

#define FTDF_processRequest FTDF_sndMsg

struct FTDF_Pib
{
    FTDF_ExtAddress         extAddress;
    FTDF_Period             ackWaitDuration;
#ifndef FTDF_LITE
    FTDF_Boolean            associatedPANCoord;
    FTDF_Boolean            associationPermit;
    FTDF_Boolean            autoRequest;
    FTDF_Boolean            battLifeExt;
    FTDF_NumOfBackoffs      battLifeExtPeriods;
    FTDF_Octet              beaconPayload[ FTDF_MAX_BEACON_PAYLOAD_LENGTH ];
    FTDF_Size               beaconPayloadLength;
    FTDF_Order              beaconOrder;
    FTDF_Time               beaconTxTime;
    FTDF_SN                 BSN;
    FTDF_ExtAddress         coordExtAddress;
    FTDF_ShortAddress       coordShortAddress;
    FTDF_SN                 DSN;
    FTDF_Boolean            GTSPermit;
#endif /* !FTDF_LITE */
    FTDF_BEExponent         maxBE;
    FTDF_Size               maxCSMABackoffs;
    FTDF_Period             maxFrameTotalWaitTime;
    FTDF_Size               maxFrameRetries;
    FTDF_BEExponent         minBE;
#ifndef FTDF_LITE
    FTDF_Period             LIFSPeriod;
    FTDF_Period             SIFSPeriod;
#endif /* !FTDF_LITE */
    FTDF_PANId              PANId;
#ifndef FTDF_LITE
    FTDF_Boolean            promiscuousMode; /* Not supported. Use transparent mode instead */
    FTDF_Size               responseWaitTime;
#endif /* !FTDF_LITE */
    FTDF_Boolean            rxOnWhenIdle;
#ifndef FTDF_LITE
    FTDF_Boolean            securityEnabled;
#endif /* !FTDF_LITE */
    FTDF_ShortAddress       shortAddress;
#ifndef FTDF_LITE
    FTDF_Size               superframeOrder;
    FTDF_Period             syncSymbolOffset;
    FTDF_Boolean            timestampSupported;
    FTDF_Period             transactionPersistenceTime;
    FTDF_Period             enhAckWaitDuration;
    FTDF_Boolean            implicitBroadcast;
    FTDF_SimpleAddress      simpleAddress;
    FTDF_Period             disconnectTime;
    FTDF_Priority           joinPriority;
    FTDF_ASN                ASN;
    FTDF_Boolean            noHLBuffers;
    FTDF_SlotframeTable     slotframeTable;
    FTDF_LinkTable          linkTable;
    FTDF_TimeslotTemplate   timeslotTemplate;
    FTDF_HoppingSequenceId  HoppingSequenceId;
    FTDF_ChannelPage        channelPage;
    FTDF_ChannelNumber      numberOfChannels;
    FTDF_Bitmap32           phyConfiguration;
    FTDF_Bitmap8            extendedBitmap;
    FTDF_Length             hoppingSequenceLength;
    FTDF_ChannelNumber      hoppingSequenceList[ FTDF_MAX_HOPPING_SEQUENCE_LENGTH ];
    FTDF_Length             currentHop;
    FTDF_Period             dwellTime;
    FTDF_Period             CSLPeriod;
    FTDF_Period             CSLMaxPeriod;
    FTDF_Bitmap32           CSLChannelMask;
    FTDF_Period             CSLFramePendingWaitT;
    FTDF_Boolean            lowEnergySuperframeSupported;
    FTDF_Boolean            lowEnergySuperframeSyncInterval;
#endif /* !FTDF_LITE */
    FTDF_PerformanceMetrics performanceMetrics;
#ifndef FTDF_LITE
    FTDF_Boolean            useEnhancedBecaon;
    FTDF_IEList             EBIEList;
    FTDF_Boolean            EBFilteringEnabled;
    FTDF_SN                 EBSN;
    FTDF_AutoSA             EBAutoSA;
    FTDF_IEList             EAckIEList;
    FTDF_Boolean            tschEnabled;
    FTDF_Boolean            leEnabled;
#endif /* !FTDF_LITE */
    FTDF_ChannelNumber      currentChannel;
    FTDF_TXPowerTolerance   TXPowerTolerance;
    FTDF_DBm                TXPower;
    FTDF_CCAMode            CCAMode;
#ifndef FTDF_LITE
    FTDF_ChannelPage        currentPage;
    FTDF_Period             maxFrameDuration;
    FTDF_Period             SHRDuration;
    FTDF_KeyTable           keyTable;
    FTDF_DeviceTable        deviceTable;
    FTDF_SecurityLevelTable securityLevelTable;
    FTDF_FrameCounter       frameCounter;
    FTDF_SecurityLevel      mtDataSecurityLevel;
    FTDF_KeyIdMode          mtDataKeyIdMode;
    FTDF_Octet              mtDataKeySource[ 8 ];
    FTDF_KeyIndex           mtDataKeyIndex;
    FTDF_Octet              defaultKeySource[ 8 ];
    FTDF_ExtAddress         PANCoordExtAddress;
    FTDF_ShortAddress       PANCoordShortAddress;
    FTDF_FrameCounterMode   frameCounterMode;
    FTDF_Period             CSLSyncTxMargin;
    FTDF_Period             CSLMaxAgeRemoteInfo;
#endif /* !FTDF_LITE */
    FTDF_TrafficCounters    trafficCounters;
#ifndef FTDF_LITE
    FTDF_Boolean            LECapable;
    FTDF_Boolean            LLCapable;
    FTDF_Boolean            DSMECapable;
    FTDF_Boolean            RFIDCapable;
    FTDF_Boolean            AMCACapable;
#endif /* !FTDF_LITE */
    FTDF_Boolean            metricsCapable;
#ifndef FTDF_LITE
    FTDF_Boolean            rangingSupported;
#endif /* !FTDF_LITE */
    FTDF_Boolean            keepPhyEnabled;
    FTDF_Boolean            metricsEnabled;
#ifndef FTDF_LITE
    FTDF_Boolean            beaconAutoRespond;
    FTDF_Boolean            tschCapable;
    FTDF_Period             tsSyncCorrectThreshold;
#endif /* !FTDF_LITE */
#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
    FTDF_NrBackoffPeriods   boIrqThreshold;
    FTDF_PtiConfig          ptiConfig;
#endif
};

typedef uint8_t FTDF_FrameVersion;
#define FTDF_FRAME_VERSION_2003          0
#define FTDF_FRAME_VERSION_2011          1
#define FTDF_FRAME_VERSION_E             2
#define FTDF_FRAME_VERSION_NOT_SUPPORTED 3

typedef struct
{
    FTDF_FrameType      frameType;
    FTDF_FrameVersion   frameVersion;
    FTDF_Bitmap8        options;
    FTDF_SN             SN;
    FTDF_AddressMode    srcAddrMode;
    FTDF_PANId          srcPANId;
    FTDF_Address        srcAddr;
    FTDF_AddressMode    dstAddrMode;
    FTDF_PANId          dstPANId;
    FTDF_Address        dstAddr;
    FTDF_CommandFrameId commandFrameId;
} FTDF_FrameHeader;

typedef struct
{
    FTDF_SecurityLevel    securityLevel;
    FTDF_KeyIdMode        keyIdMode;
    FTDF_KeyIndex         keyIndex;
    FTDF_FrameCounterMode frameCounterMode;
    FTDF_Octet*           keySource;
    FTDF_FrameCounter     frameCounter;
} FTDF_SecurityHeader;

typedef struct
{
    FTDF_Boolean fastA;
    FTDF_Boolean dataR;
} FTDF_AssocAdmin;

typedef uint8_t FTDF_SNSel;
#define FTDF_SN_SEL_DSN  0
#define FTDF_SN_SEL_BSN  1
#define FTDF_SN_SEL_EBSN 2

typedef struct
{
    FTDF_AddressMode addrMode;
    FTDF_Address     addr;
    FTDF_Time        timestamp;
    FTDF_Boolean     dsnValid;
    FTDF_SN          dsn;
    FTDF_Boolean     bsnValid;
    FTDF_SN          bsn;
    FTDF_Boolean     ebsnValid;
    FTDF_SN          ebsn;
} FTDF_RxAddressAdmin;

struct FTDF_Buffer_;

typedef struct
{
    struct FTDF_Buffer_* next;
    struct FTDF_Buffer_* prev;
} FTDF_BufferHeader;

typedef struct FTDF_Buffer_
{
    FTDF_BufferHeader header;
    FTDF_MsgBuffer*   request;
} FTDF_Buffer;

typedef struct
{
    FTDF_BufferHeader head;
    FTDF_BufferHeader tail;
} FTDF_Queue;

typedef struct
{
    FTDF_Address     addr;
    FTDF_AddressMode addrMode;
    FTDF_PANId       PANId;
    FTDF_Queue       queue;
} FTDF_Pending;

typedef struct _FTDF_PendingTL_
{
    struct _FTDF_PendingTL_* next;
    FTDF_Boolean             free;
    FTDF_MsgBuffer*          request;
    FTDF_Time                delta;
    uint8_t                  pendListNr;
    void ( * func )( struct _FTDF_PendingTL_* );
} FTDF_PendingTL;

typedef uint8_t FTDF_RemoteId;
#define FTDF_REMOTE_DATA_REQUEST                 0
#define FTDF_REMOTE_PAN_ID_CONFLICT_NOTIFICATION 1
#define FTDF_REMOTE_BEACON                       2
#define FTDF_REMOTE_KEEP_ALIVE                   3

typedef struct
{
    FTDF_MsgId        msgId;
    FTDF_RemoteId     remoteId;
    FTDF_ShortAddress dstAddr;
} FTDF_RemoteRequest;

#ifndef FTDF_NO_CSL
typedef struct
{
    FTDF_ShortAddress addr;
    FTDF_Time         time;
    FTDF_Period       period;
} FTDF_PeerCslTiming;
#endif /* FTDF_NO_CSL */

typedef uint8_t FTDF_State;
#define FTDF_STATE_UNINITIALIZED 0
#define FTDF_STATE_IDLE          1
#define FTDF_STATE_DATA_REQUEST  2
#define FTDF_STATE_POLL_REQUEST  3
#define FTDF_STATE_SCANNING      4

#ifndef FTDF_NO_TSCH
typedef struct
{
    FTDF_ShortAddress nodeAddr;
    FTDF_Size         nrOfRetries;
    FTDF_Size         nrOfCcaRetries;
    FTDF_BEExponent   BE;
} FTDF_TschRetry;

typedef struct
{
    FTDF_ShortAddress    dstAddr;
    FTDF_KeepAlivePeriod period;
    FTDF_RemoteRequest   msg;
} FTDF_NeighborEntry;
#endif /* FTDF_NO_TSCH */

typedef struct
{
    FTDF_Count fcsErrorCnt;
    FTDF_Count txStdAckCnt;
    FTDF_Count rxStdAckCnt;
} FTDF_LmacCounters;

extern struct FTDF_Pib     FTDF_pib;
extern FTDF_State*         FTDF_state;
extern FTDF_Boolean        FTDF_transparentMode;
extern FTDF_Bitmap32       FTDF_transparentModeOptions;
extern FTDF_Queue          FTDF_reqQueue;
extern FTDF_Queue          FTDF_freeQueue;
extern FTDF_Pending        FTDF_txPendingList[ FTDF_NR_OF_REQ_BUFFERS ];
extern FTDF_PendingTL      FTDF_txPendingTimerList[ FTDF_NR_OF_REQ_BUFFERS ];
extern FTDF_PendingTL*     FTDF_txPendingTimerHead;
extern FTDF_Time           FTDF_txPendingTimerLT;
extern FTDF_Time           FTDF_txPendingTimerTime;
extern FTDF_MsgBuffer*     FTDF_reqCurrent;
extern FTDF_Size           FTDF_nrOfRetries;
extern FTDF_Boolean        FTDF_isPANCoordinator;
extern FTDF_SlotframeEntry FTDF_slotframeTable[ FTDF_MAX_SLOTFRAMES ];
extern FTDF_LinkEntry      FTDF_linkTable[ FTDF_MAX_LINKS ];
#ifndef FTDF_NO_TSCH
extern FTDF_LinkEntry*     FTDF_startLinks[ FTDF_MAX_SLOTFRAMES ];
extern FTDF_LinkEntry*     FTDF_endLinks[ FTDF_MAX_SLOTFRAMES ];
extern FTDF_NeighborEntry  FTDF_neighborTable[ FTDF_NR_OF_NEIGHBORS ];
extern FTDF_Boolean        FTDF_wakeUpEnableTsch;
#endif /* FTDF_NO_TSCH */
#ifndef FTDF_NO_CSL
extern FTDF_Boolean        FTDF_wakeUpEnableLe;
#endif /* FTDF_NO_CSL */
extern FTDF_LmacCounters   FTDF_lmacCounters;

extern FTDF_FrameHeader    FTDF_fh;
extern FTDF_SecurityHeader FTDF_sh;
extern FTDF_AssocAdmin     FTDF_aa;
extern FTDF_Boolean        FTDF_txInProgress;
#ifndef FTDF_NO_CSL
extern FTDF_Time           FTDF_rzTime;
extern FTDF_ShortAddress   FTDF_sendFramePending;
#endif /* FTDF_NO_CSL */
extern FTDF_Time           FTDF_startCslSampleTime;

#ifndef FTDF_NO_TSCH
extern FTDF_LinkEntry*     FTDF_tschSlotLink;
extern FTDF_Time64         FTDF_tschSlotTime;
extern FTDF_ASN            FTDF_tschSlotASN;
#endif /* FTDF_NO_TSCH */

void FTDF_processDataRequest( FTDF_DataRequest* req );
void FTDF_processPurgeRequest( FTDF_PurgeRequest* req );
void FTDF_processAssociateRequest( FTDF_AssociateRequest* req );
void FTDF_processAssociateResponse( FTDF_AssociateResponse* req );
void FTDF_processDisassociateRequest( FTDF_DisassociateRequest* req );
void FTDF_processGetRequest( FTDF_GetRequest* req );
void FTDF_processSetRequest( FTDF_SetRequest* req );
void FTDF_processOrphanResponse( FTDF_OrphanResponse* req );
void FTDF_processResetRequest( FTDF_ResetRequest* req );
void FTDF_processRxEnableRequest( FTDF_RxEnableRequest* req );
void FTDF_processScanRequest( FTDF_ScanRequest* req );
void FTDF_processStartRequest( FTDF_StartRequest* req );
void FTDF_processPollRequest( FTDF_PollRequest* req );
#ifndef FTDF_NO_TSCH
void FTDF_processSetSlotframeRequest( FTDF_SetSlotframeRequest* req );
void FTDF_processSetLinkRequest( FTDF_SetLinkRequest* req );
void FTDF_processTschModeRequest( FTDF_TschModeRequest* req );
void FTDF_processKeepAliveRequest( FTDF_KeepAliveRequest* req );
#endif /* FTDF_NO_TSCH */
void FTDF_processBeaconRequest( FTDF_BeaconRequest* req );
void FTDF_processTransparentRequest( FTDF_TransparentRequest* req );
void FTDF_processRemoteRequest( FTDF_RemoteRequest* req );

void FTDF_processNextRequest( void );
void FTDF_processRxEvent( void );
void FTDF_processTxEvent( void );
void FTDF_processSymbolTimerEvent( void );

void FTDF_sendDataConfirm( FTDF_DataRequest*  dataRequest,
                           FTDF_Status        status,
                           FTDF_Time          timestamp,
                           FTDF_SN            DSN,
                           FTDF_NumOfBackoffs numOfBackoffs,
                           FTDF_IEList*       ackPayload );

void FTDF_sendDataIndication( FTDF_FrameHeader*    frameHeader,
                              FTDF_SecurityHeader* securityHeader,
                              FTDF_IEList*         payloadIEList,
                              FTDF_DataLength      msduLength,
                              FTDF_Octet*          msdu,
                              FTDF_LinkQuality     mpduLinkQuality,
                              FTDF_Time            timestamp );

void FTDF_sendPollConfirm( FTDF_PollRequest* pollRequest, FTDF_Status status );

void FTDF_sendScanConfirm( FTDF_ScanRequest* scanRequest, FTDF_Status status );

void FTDF_sendBeaconNotifyIndication( FTDF_PANDescriptor* PANDescriptor );

void FTDF_sendBeaconConfirm( FTDF_BeaconRequest* beaconRequest, FTDF_Status status );

void FTDF_sendAssociateConfirm( FTDF_AssociateRequest* associateRequest,
                                FTDF_Status            status,
                                FTDF_ShortAddress      assocShortAddr );

void FTDF_sendAssociateDataRequest( void );

void FTDF_sendDisassociateConfirm( FTDF_DisassociateRequest* disReq, FTDF_Status status );

void FTDF_sendSyncLossIndication( FTDF_LossReason lossReason, FTDF_SecurityHeader* securityHeader );

void FTDF_sendPANIdConflictNotification( FTDF_FrameHeader* frameHeader, FTDF_SecurityHeader* securityHeader );

void FTDF_sendCommStatusIndication( FTDF_MsgBuffer*     request,
                                    FTDF_Status         status,
                                    FTDF_PANId          PANId,
                                    FTDF_AddressMode    srcAddrMode,
                                    FTDF_Address        srcAddr,
                                    FTDF_AddressMode    dstAddrMode,
                                    FTDF_Address        dstAddr,
                                    FTDF_SecurityLevel  securityLevel,
                                    FTDF_KeyIdMode      keyIdMode,
                                    FTDF_Octet*         keySource,
                                    FTDF_KeyIndex       keyIndex );

void FTDF_startTimer( FTDF_Period period,
                      void        ( * timerFunc )( void* params ),
                      void*       params );

FTDF_Octet* FTDF_getTxBufPtr( FTDF_Buffer* txBuffer );

void        FTDF_setTxMetaData( FTDF_Buffer*       txBuffer,
                                FTDF_DataLength    frameLength,
                                FTDF_ChannelNumber channel,
                                FTDF_FrameType     frameType,
                                FTDF_Boolean       ackTX,
                                FTDF_SN            SN );

FTDF_Status FTDF_sendFrame( FTDF_ChannelNumber   channel,
                            FTDF_FrameHeader*    frameHeader,
                            FTDF_SecurityHeader* securityHeader,
                            FTDF_Octet*          txPtr,
                            FTDF_DataLength      payloadSize,
                            FTDF_Octet*          payload );

#if !defined(FTDF_NO_CSL) || !defined(FTDF_NO_TSCH)
FTDF_Status FTDF_sendAckFrame( FTDF_FrameHeader*    frameHeader,
                               FTDF_SecurityHeader* securityHeader,
                               FTDF_Octet*          txPtr );
#endif /* !FTDF_NO_CSL || !FTDF_NO_TSCH */

void FTDF_sendTransparentFrame( FTDF_DataLength    frameLength,
                                FTDF_Octet*        frame,
                                FTDF_ChannelNumber channel,
                                FTDF_PTI           pti,
                                FTDF_Boolean       cmsaSuppress );

FTDF_Octet* FTDF_getRxBuffer( void );

void        FTDF_processRxEvent( void );

FTDF_Octet* FTDF_addFrameHeader( FTDF_Octet*       txPtr,
                                 FTDF_FrameHeader* frameHeader,
                                 FTDF_DataLength   msduLength );

FTDF_Octet* FTDF_getFrameHeader( FTDF_Octet*       rxPtr,
                                 FTDF_FrameHeader* frameHeader );

FTDF_DataLength FTDF_getMicLength( FTDF_SecurityLevel securityLevel );

FTDF_Octet*     FTDF_getSecurityHeader( FTDF_Octet*          rxPtr,
                                        uint8_t              frameVersion,
                                        FTDF_SecurityHeader* securityHeader );

FTDF_Octet* FTDF_addSecurityHeader( FTDF_Octet*          txPtr,
                                    FTDF_SecurityHeader* securityHeader );

FTDF_Status FTDF_secureFrame( FTDF_Octet*          bufPtr,
                              FTDF_Octet*          privPtr,
                              FTDF_FrameHeader*    frameHeader,
                              FTDF_SecurityHeader* securityHeader );

FTDF_Status FTDF_unsecureFrame( FTDF_Octet*          bufPtr,
                                FTDF_Octet*          privPtr,
                                FTDF_FrameHeader*    frameHeader,
                                FTDF_SecurityHeader* securityHeader );

FTDF_KeyDescriptor* FTDF_lookupKey( FTDF_AddressMode devAddrMode,
                                    FTDF_PANId       devPANId,
                                    FTDF_Address     devAddr,
                                    FTDF_FrameType   frameType,
                                    FTDF_KeyIdMode   keyIdMode,
                                    FTDF_KeyIndex    keyIndex,
                                    FTDF_Octet*      keySource );

FTDF_DeviceDescriptor* FTDF_lookupDevice( FTDF_Size                    nrOfDeviceDescriptorHandles,
                                          FTDF_DeviceDescriptorHandle* deviceDescriptorHandles,
                                          FTDF_AddressMode             devAddrMode,
                                          FTDF_PANId                   devPANId,
                                          FTDF_Address                 devAddr );

FTDF_SecurityLevelDescriptor* FTDF_getSecurityLevelDescr( FTDF_FrameType      frameType,
                                                          FTDF_CommandFrameId commandFrameId );

#if !defined(FTDF_NO_CSL) || !defined(FTDF_NO_TSCH)
FTDF_Octet* FTDF_addIes( FTDF_Octet*  txPtr,
                         FTDF_IEList* headerIEList,
                         FTDF_IEList* payloadIEList,
                         FTDF_Boolean withTerminationIE );

FTDF_Octet* FTDF_getIes( FTDF_Octet*   rxPtr,
                         FTDF_Octet*   frameEndPtr,
                         FTDF_IEList** headerIEList,
                         FTDF_IEList** payloadIEList );
#endif /* !FTDF_NO_CSL || !FTDF_NO_TSCH */

#ifndef FTDF_NO_CSL
void FTDF_setPeerCslTiming( FTDF_IEList* headerIEList,
                            FTDF_Time    timeStamp );
void FTDF_setCslSampleTime( void );
void FTDF_getWakeupParams( FTDF_ShortAddress dstAddr,
                           FTDF_Time*        wakeupStartTime,
                           FTDF_Period*      wakeupPeriod );
#endif /* FTDF_NO_CSL */

void            FTDF_getExtAddress( void );
void            FTDF_setExtAddress( void );
void            FTDF_getAckWaitDuration( void );
void            FTDF_getEnhAckWaitDuration( void );
void            FTDF_setEnhAckWaitDuration( void );
void            FTDF_getImplicitBroadcast( void );
void            FTDF_setImplicitBroadcast( void );
void            FTDF_setShortAddress( void );
void            FTDF_setSimpleAddress( void );
void            FTDF_getRxOnWhenIdle( void );
void            FTDF_setRxOnWhenIdle( void );
void            FTDF_getPANId( void );
void            FTDF_setPANId( void );
void            FTDF_getCurrentChannel( void );
void            FTDF_setCurrentChannel( void );
void            FTDF_setTXPower( void );
void            FTDF_getMaxFrameTotalWaitTime( void );
void            FTDF_setMaxFrameTotalWaitTime( void );
#ifndef FTDF_NO_CSL
void            FTDF_setLeEnabled( void );
void            FTDF_getCslFramePendingWaitT( void );
void            FTDF_setCslFramePendingWaitT( void );
#endif /* FTDF_NO_CSL */
void            FTDF_getLmacPmData( void );
void            FTDF_getLmacTrafficCounters( void );
void            FTDF_setMaxCSMABackoffs( void );
void            FTDF_setMaxBE( void );
void            FTDF_setMinBE( void );
void            FTDF_getKeepPhyEnabled( void );
void            FTDF_setKeepPhyEnabled( void );
#if dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A
void            FTDF_setBoIrqThreshold( void );
void            FTDF_getBoIrqThreshold( void );
void            FTDF_setPtiConfig( void );
#endif /* dg_configBLACK_ORCA_IC_REV != BLACK_ORCA_IC_REV_A */

#ifndef FTDF_NO_TSCH
void            FTDF_setTimeslotTemplate( void );
#endif /* FTDF_NO_TSCH */

void            FTDF_initLmac( void );
void            FTDF_initQueues( void );
void            FTDF_initQueue( FTDF_Queue* queue );
void            FTDF_queueBufferHead( FTDF_Buffer* buffer, FTDF_Queue* queue );
FTDF_Status     FTDF_queueReqHead( FTDF_MsgBuffer* request, FTDF_Queue* queue );
FTDF_Buffer*    FTDF_dequeueBufferTail( FTDF_Queue* queue );
FTDF_MsgBuffer* FTDF_dequeueReqTail( FTDF_Queue* queue );
FTDF_MsgBuffer* FTDF_dequeueByHandle( FTDF_Handle handle, FTDF_Queue* queue );
FTDF_Buffer*    FTDF_dequeueByBuffer( FTDF_Buffer* buffer, FTDF_Queue* queue );
FTDF_Boolean    FTDF_isQueueEmpty( FTDF_Queue* queue );
void            FTDF_addTxPendingTimer( FTDF_MsgBuffer* request, uint8_t pendListNr, FTDF_Time delta, void ( * func )(
                                            FTDF_PendingTL* ) );
void            FTDF_removeTxPendingTimer( FTDF_MsgBuffer* request );
void            FTDF_restoreTxPendingTimer( void );
FTDF_Boolean    FTDF_getTxPendingTimerHead( FTDF_Time* time );
void            FTDF_sendTransactionExpired( FTDF_PendingTL* ptr );
#ifndef FTDF_NO_TSCH
void            FTDF_processKeepAliveTimerExp( FTDF_PendingTL* ptr );
void            FTDF_resetKeepAliveTimer( FTDF_ShortAddress dstAddr );
#endif /* FTDF_NO_TSCH */

void FTDF_processTxPending(FTDF_FrameHeader*    frameHeader,
        FTDF_SecurityHeader* securityHeader );

void            FTDF_processCommandFrame( FTDF_Octet*          rxBuffer,
                                          FTDF_FrameHeader*    frameHeader,
                                          FTDF_SecurityHeader* securityHeader,
                                          FTDF_IEList*         payloadIEList );

void               FTDF_scanReady( FTDF_ScanRequest* );
void               FTDF_addPANdescriptor( FTDF_PANDescriptor* );
void               FTDF_sendBeaconRequest( FTDF_ChannelNumber channel );
void               FTDF_sendBeaconRequestIndication( FTDF_FrameHeader* frameHeader,
                                                     FTDF_IEList*      payloadIEList );
void               FTDF_sendOrphanNotification( FTDF_ChannelNumber channel );

#ifndef FTDF_NO_TSCH
void               FTDF_setTschEnabled( void );
FTDF_Status        FTDF_scheduleTsch( FTDF_MsgBuffer* request );
void               FTDF_tschProcessRequest( void );
FTDF_Size          FTDF_getTschSyncSubIe( void );
FTDF_Octet*        FTDF_addTschSyncSubIe( FTDF_Octet* txPtr );
FTDF_ShortAddress  FTDF_getRequestAddress( FTDF_MsgBuffer* request );
FTDF_MsgBuffer*    FTDF_tschGetPending( FTDF_MsgBuffer* request );
FTDF_Octet*        FTDF_addCorrTimeIE( FTDF_Octet* txPtr, FTDF_Time rxTimestamp );
void               FTDF_correctSlotTime( FTDF_Time rxTimestamp );
void               FTDF_correctSlotTimeFromAck( FTDF_IEList* headerIEList );
void               FTDF_initTschRetries( void );
FTDF_TschRetry*    FTDF_getTschRetry( FTDF_ShortAddress nodeAddr );
FTDF_NumOfBackoffs FTDF_getNumOfBackoffs( FTDF_BEExponent BE );
void               FTDF_initBackoff( void );
FTDF_SN            FTDF_processTschSN( FTDF_MsgBuffer* msg, FTDF_SN sn, uint8_t* priv );
#endif /* FTDF_NO_TSCH */

FTDF_Time64        FTDF_getCurTime64( void );
void               FTDF_initCurTime64( void );

#if FTDF_USE_SLEEP_DURING_BACKOFF
typedef enum
{
        FTDF_SDB_STATE_INIT = 0,
        FTDF_SDB_STATE_BACKING_OFF,
        FTDF_SDB_STATE_WAITING_WAKE_UP_IRQ,
        FTDF_SDB_STATE_RESUMING,
} FTDF_SdbState;

typedef struct
{
        FTDF_SdbState state;
        FTDF_Size nrOfBackoffs;
        FTDF_Time ccaRetryTime;
        FTDF_Octet buffer[FTDF_BUFFER_LENGTH];
        uint32_t metadata0;
        uint32_t metadata1;
        uint32_t phyCsmaCaAttr;
} FTDF_Sdb;

void FTDF_sdbFsmReset(void);

void FTDF_sdbFsmBackoffIRQ(void);

void FTDF_sdbFsmSleep(void);

void FTDF_sdbFsmAbortSleep(void);

void FTDF_sdbFsmWakeUpIRQ(void);

void FTDF_sdbFsmWakeUp(void);

void FTDF_sdbFsmTxIRQ(void);

FTDF_USec FTDF_sdbGetSleepTime(void);

#endif /* FTDF_USE_SLEEP_DURING_BACKOFF */

#if dg_configUSE_FTDF_DDPHY == 1

void FTDF_ddphyRestore(void);

void FTDF_ddphySave(void);

#endif
