📄 mac_mod.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 + -