⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_mod.h

📁 zigbee location examples
💻 H
字号:
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                        CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                  *
 *      ***   + +   ***                MAC-MOD.H                                                                *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************/


/******************************************************************************
* Constants                                                                   *
******************************************************************************/

#define A0_LENGTH                       16
#define B0_LENGTH                       16
#define SECURITY_PADDING                15
#define SHORT_ADDRESS_LEN               2
#define INTEGRITY_CODE_LENGTH           16
#define IV_LENGTH                       16
#define NONCE_LENGTH                    13
#define T_LENGTH                        16
#define U_LENGTH                        16
#define NO_OF_BYTES_IN_LA               2

#define MAX_IN_EXTENDED_ADDRESS_LIST    7
#define MAX_IN_FRAME                    1 + aMaxPHYPacketSize + SECURITY_PADDING
#define MAX_IN_GTS_DESCRIPTOR_LIST      7
#define MAX_IN_SHORT_ADDRESS_LIST       7

#define FRAME_LENGTH_OFFSET             0
#define FRAME_LENGTH_SIZE               1
#define FRAME_FCF_LOW_BYTE_OFFSET       FRAME_LENGTH_OFFSET + 1
#define FRAME_FCF_HIGH_BYTE_OFFSET      FRAME_FCF_LOW_BYTE_OFFSET + 1
#define FRAME_SEQUENCE_NUMBER_OFFSET    FRAME_FCF_HIGH_BYTE_OFFSET +1
#define FRAME_SEQUENCE_NUMBER_SIZE      1
#define FRAME_ADDRESS_OFFSET            FRAME_SEQUENCE_NUMBER_OFFSET + 1
#define FRAME_TYPE_BM                   0x7
#define FCF_SIZE                        2
#define FCF_SRC_ADDR_MODE_ADJUST        6
#define FCF_DST_ADDR_MODE_ADJUST        2
#define FCF_ADDR_MODE_BM                0x03
#define FCF_BEACON                      0x0
#define FCF_DATA                        0x1
#define FCF_ACK                         0x2
#define FCF_MAC_COMMAND                 0x3
#define FCF_SECURITY_ENABLED            0x8
#define FCF_FRAME_PENDING               0x10
#define FCF_ACK_REQUEST                 0x20
#define FCF_INTRA_PAN                   0x40
#define FCF_NO_ADDRESS                  0x0
#define FCF_SHORT_ADDRESS               0x02
#define FCF_EXTENDED_ADDRESS            0x03
#define LINK_QUALITY_SIZE               1
#define RSSI_SIZE                       1
#define RSSI_OFFSET                     1
#define CRC_SIZE                        1
#define CRC_OK_BM                       0x80

#define PAN_ID_LENGTH                   2
#define SHORT_ADDRESS_LENGTH            2
#define EXTENDED_ADDRESS_LENGTH         8

#define MAC_WAIT_FOR_ACK_TIMEOUT        7   //54 symbols

/******************************************************************************
* Enumerations                                                                *
******************************************************************************/

typedef enum {
   AES_COMMAND_ENCRYPT_BLOCK,
   AES_COMMAND_DECRYPT_BLOCK,
   AES_COMMAND_LOAD_KEY,
   AES_COMMAND_LOAD_IV
} AES_COMMAND;

typedef enum {
   AES_MODE_CBC,
   AES_MODE_CFB,
   AES_MODE_OFB,
   AES_MODE_CTR,
   AES_MODE_ECB,
   AES_MODE_CBC_MAC
} AES_MODE;

typedef enum {
   ELEMENT_STATUS_FREE,
   ELEMENT_STATUS_BUSY
} ELEMENT_STATUS;

typedef enum {
    ENCRYPTION_TYPE_ENCRYPT,
    ENCRYPTION_TYPE_DECRYPT
}ENCRYPTION_TYPE;

typedef enum {
   FRAME_TYPE_BEACON,
   FRAME_TYPE_DATA,
   FRAME_TYPE_ACK,
   FRAME_TYPE_COMMAND,
   FRAME_TYPE_UNKOWN
} FRAME_TYPE;

typedef enum {
   OUTPUT_MODE_RESULT_128,
   OUTPUT_MODE_RESULT_64,
   OUTPUT_MODE_RESULT_32,
   OUTPUT_MODE_RESULT_0
} OUTPUT_MODE;

typedef enum {
    RECEPTION_MODE_STORE_FRAME,
    RECEPTION_MODE_DISCARD_FRAME
}RECEPTION_MODE;

typedef enum {
   RESULT_OK,
   RESULT_NOK
} RESULT;

typedef enum {
   SECURITY_SUITE_NONE,
   SECURITY_SUITE_AES_CTR,
   SECURITY_SUITE_AES_CCM_128,
   SECURITY_SUITE_AES_CCM_64,
   SECURITY_SUITE_AES_CCM_32,
   SECURITY_SUITE_AES_CBC_MAC_128,
   SECURITY_SUITE_AES_CBC_MAC_64,
   SECURITY_SUITE_AES_CBC_MAC_32
} SECURITY_SUITE;

typedef enum {
    STATUS_COUNTER_TYPE_PACKET_RECEIVED,
    STATUS_COUNTER_TYPE_PACKET_SENT,
    STATUS_COUNTER_TYPE_CRC_FAILURE,
    STATUS_COUNTER_TYPE_UNAVAILABLE_RX_RESOURCES,
    STATUS_COUNTER_TYPE_ACK_TIMEOUT,
    STATUS_COUNTER_TYPE_CSMA_FAILURES,
    STATUS_COUNTER_TYPE_RETRIES,
    STATUS_COUNTER_TYPE_TX_UNDERFLOW,
    STATUS_COUNTER_TYPE_RX_OVERFLOW
}STATUS_COUNTER_TYPE;

typedef enum {
    STROBE_STATUS_CSMA_IN_PROGRESS,
    STROBE_STATUS_CSMA_SUCCESS,
    STROBE_STATUS_CHANNEL_ACCESS_FAILURE,
    STROBE_STATUS_OUT_OF_CAP,
    STROBE_STATUS_TX_STARTED
}STROBE_STATUS;

typedef enum {
   TX_TYPE_SLOTTED,
   TX_TYPE_UNSLOTTED
} TX_TYPE;

typedef enum {
   TX_MODE_CSMA,
   TX_MODE_DIRECT
} TX_MODE;

/******************************************************************************
* Simple types                                                                *
******************************************************************************/
typedef struct
{
    BYTE    byte[A0_LENGTH];
}A0;

typedef struct
{
    BYTE    byte[B0_LENGTH];
}B0;

typedef struct
{
    BYTE    byte[MAX_IN_FRAME];
}FRAME;

typedef struct
{
    BYTE	byte[INTEGRITY_CODE_LENGTH];
}INTEGRITY_CODE;

typedef struct
{
    BYTE	byte[IV_LENGTH];
}IV;

typedef struct
{
    BYTE	byte[NONCE_LENGTH];
}NONCE;

typedef struct
{
    BYTE 	byte[SHORT_ADDRESS_LEN];
}SHORT_ADDRESS;

typedef struct
{
    BYTE	byte[T_LENGTH];
}T;

typedef struct
{
    BYTE	byte[U_LENGTH];
}U;

/******************************************************************************
* Compound types                                                              *
******************************************************************************/

typedef struct {
    BYTE authenticationLength;
    BYTE   *authenticationData;
    BYTE messageLength;
    BYTE   *message;
} CCM_DATA;

typedef struct {
    OUTPUT_MODE outputMode;
    KEY key;
    A0 a0;
    B0 b0;
    CCM_DATA ccmData;
}AES_CCM_DATA;

typedef struct {
    BYTE srcMsb;
    BYTE srcLsb;
    BYTE destMsb;
    BYTE destLsb;
    BYTE lenMsb;
    BYTE lenLsb;
    BYTE wsizeTmodeTrigger;
    BYTE incIrqM8Pri;
} DMA_CHANNEL_CONFIGURATION;

typedef struct {
   BYTE		noInList;
   ADDRESS	address[MAX_IN_EXTENDED_ADDRESS_LIST];
} EXTENDED_ADDRESS_LIST;

typedef struct {
   BYTE             noInList;
   SHORT_ADDRESS    shortAddress[MAX_IN_SHORT_ADDRESS_LIST];
} SHORT_ADDRESS_LIST;

typedef struct {
   SHORT_ADDRESS    shortAddress;
   BYTE             gtsStartAndLength;
} GTS_DESCRIPTOR;

typedef struct {
   BYTE             noInList;
   GTS_DESCRIPTOR   gtsDescriptor[MAX_IN_GTS_DESCRIPTOR_LIST];
} GTS_DESCRIPTOR_LIST;

typedef struct {
   BYTE                 gtsSpecification;
   BYTE                 gtsDirection;
   GTS_DESCRIPTOR_LIST  gtsDescriptorList;
} GTS_FIELDS;

typedef struct {
   KEY			key;
   ADDRESS		extendedSourceAddress;
   DWORD		frameCounter;
   BYTE			keySequenceCounter;
} KEY_MATERIAL;	

typedef struct {
   SHORT_ADDRESS_LIST       shortAddressList;
   EXTENDED_ADDRESS_LIST    extendedAddressList;
} PENDING_ADDRESS_FIELDS;

typedef struct {
    UINT32  noOfPacketsReceived;
    UINT32  noOfPacketsSent;
    UINT32  noOfCrcFailures;
    UINT32  noOfUnavailableRxResources;
    UINT32  noOfAckTimeout;
    UINT32  noOfCsmaFailures;
    UINT32  noOfRetries;
    UINT32  noOfTxUnderflow;
    UINT32  noOfRxUnderflow;
}STATUS_COUNTERS;

/******************************************************************************
* Prototypes                                                                  *
******************************************************************************/

void Aes (AES_MODE          aesMode,
          ENCRYPTION_TYPE   encryptionType,
          KEY           *key,
          IV            *iv,
          BYTE              noOfBytes,
          BYTE          *bytesIn,
          BYTE          *bytesOut,
          BOOL          *result);
void AesCbcMac (OUTPUT_MODE     outputMode,
                KEY         *key,
                IV          *iv,
                BYTE            noOfBytes,
                BYTE        *bytes,
                BYTE        *mac,
                BOOL        *result);
void AesCcmDecrypt (AES_CCM_DATA   *aesCcmData,
                    U              *u,
                    BOOL           *result);
void AesCcmEncrypt (AES_CCM_DATA   *aesCcmData, BOOL   *result);
void AllocateDmaChannel3 (BOOL   *ok);
void BackOfSlotEvent(void);
ROOT void CalculatePointerWithinFrame (BYTE offset, BYTE   **source);
ROOT void CaptureTimer2Values (void);
ROOT void CleanUpRxHandler (void);
void DeallocateDmaChannel3 (void);
ROOT void DmaMemcpy(void   *pDestination,
                    void   *pSource,
                    BYTE       noOfBytes);
ROOT void DmaWriteFrameToTxFifo(FRAME   *pFrame);
void FetchAesFinished (BOOL   *aesFinished);
void FetchAesTransferCount (BYTE   *aesTransferCount);
ROOT void FetchFrame (FRAME   **frame);
ROOT void FetchMacRxPacket (MAC_RX_PACKET   **macRxPacket);
ROOT void FetchReceptionMode (RECEPTION_MODE   *receptionMode);
ROOT void FetchRxEngineTask (BYTE   *taskNumber);
ROOT void FetchRxProcessTask (BYTE   *taskNumber);
ROOT void FetchTxFrame (FRAME   **frame);
ROOT void InitializeCommonStorage (void);
void InitializeMacTimer (void);
void MacAesCtr (KEY_MATERIAL    *keyMaterial,
                ENCRYPTION_TYPE     encryptionType,
                BYTE                noOfBytes,
                BYTE            *bytes,
                BOOL            *result);
void MacAesCcm (KEY_MATERIAL    *keyMaterial,
                ENCRYPTION_TYPE     encryptionType,
                OUTPUT_MODE         outputMode,
                U               *u,
                CCM_DATA        *ccmData,
                BOOL            *result);
void ReceiveEngine (MAC_TASK_INFO   *pTask);
ROOT void ReadAndDiscardFrameFromRf (FRAME   *frame);
ROOT void ReadBytesFromFrame (BYTE offset,
                         BYTE noOfBytes,
                         BYTE   *bytes);
ROOT void ReadFcfLsbFromFrame (BYTE   *fcfLsb);
ROOT void ReadFrameFromRf (FRAME   *rxFrame);
void SaveAesFinished (BOOL aesFinished);
void SaveAesTransferCount (BYTE aesTransferCount);
ROOT void SaveElementStatus (ELEMENT_STATUS elementStatus);
void SaveMacRxPacket (MAC_RX_PACKET   *macRxPacket);
void SaveReceptionMode (RECEPTION_MODE	receptionMode);
void SaveRxEngineTask (BYTE taskNumber);
void SaveRxProcessTask (BYTE taskNumber);
ROOT void UpdateTimer2 (TIMESTAMP   *timestamp);


extern BOOL                      currentAesFinished;
extern BYTE                      currentAesTransferCount;
extern BYTE                      currentDmaInterruptMask;
extern BYTE                      currentTimer2InterruptMask;
extern FRAME                     currentTxFrame;
extern STATUS_COUNTERS           currentStatusCounters;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -