亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? basic_rf.c

?? cc2430最新的例子程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************************************************
  Filename:     basic_rf.c

  Description:  Basic RF library

***********************************************************************************/

/***********************************************************************************
* INCLUDES
*/
#include "hal_int.h"
#include "hal_mcu.h"            // Using halMcuWaitUs()

#include "hal_rf.h"
#ifdef SECURITY_CCM
#include "hal_rf_security.h"
#endif

#include "basic_rf.h"
#ifdef SECURITY_CCM
#include "basic_rf_security.h"
#endif

#include "util.h"               // Using min()
#include "string.h"

/***********************************************************************************
* CONSTANTS AND DEFINES
*/

// Packet and packet part lengths
#define PKT_LEN_MIC                         8
#define PKT_LEN_SEC                         PKT_LEN_UNSEC + PKT_LEN_MIC
#define PKT_LEN_AUTH                        8
#define PKT_LEN_ENCR                        24

// Packet overhead ((frame control field, sequence number, PAN ID,
// destination and source) + (footer))
// Note that the length byte itself is not included included in the packet length
#define BASIC_RF_PACKET_OVERHEAD_SIZE       ((2 + 1 + 2 + 2 + 2) + (2))
#define BASIC_RF_MAX_PAYLOAD_SIZE	        (127 - BASIC_RF_PACKET_OVERHEAD_SIZE - \
    BASIC_RF_AUX_HDR_LENGTH - BASIC_RF_LEN_MIC)
#define BASIC_RF_ACK_PACKET_SIZE	        5
#define BASIC_RF_FOOTER_SIZE                2

// The time it takes for the acknowledgment packet to be received after the
// data packet has been transmitted.
#define BASIC_RF_ACK_DURATION		        (0.5 * 32 * 2 * ((4 + 1) + (1) + (2 + 1) + (2)))
#define BASIC_RF_SYMBOL_DURATION	        (32 * 0.5)

// The length byte
#define BASIC_RF_PLD_LEN_MASK               0x7F

// Frame control field
#define BASIC_RF_FCF_NOACK                  0x8841
#define BASIC_RF_FCF_ACK                    0x8861
#define BASIC_RF_FCF_ACK_BM                 0x0020
#define BASIC_RF_FCF_BM                     (~BASIC_RF_FCF_ACK_BM)
#define BASIC_RF_ACK_FCF		            0x0002
#define BASIC_RF_SEC_ENABLED_FCF_BM         0x0008

// Auxiliary Security header
#define BASIC_RF_AUX_HDR_LENGTH             5
#define BASIC_RF_LEN_AUTH                   BASIC_RF_PACKET_OVERHEAD_SIZE + \
    BASIC_RF_AUX_HDR_LENGTH - BASIC_RF_FOOTER_SIZE
#define BASIC_RF_SECURITY_M                 2
#define BASIC_RF_LEN_MIC                    8

// Footer
#define BASIC_RF_CRC_OK_BM                  0x80

/***********************************************************************************
* TYPEDEFS
*/
// The receive struct
typedef struct {
    uint8 seqNumber;
    uint16 srcAddr;
    uint16 srcPanId;
    int8 length;
    uint8* pPayload;
    uint8 ackRequest;
    int8 rssi;
    volatile uint8 isReady;
    uint8 status;
} basicRfRxInfo_t;

// Tx state
typedef struct {
    uint8 txSeqNumber;
    volatile uint8 ackReceived;
    uint8 receiveOn;
    uint32 frameCounter;
} basicRfTxState_t;


// Basic RF packet header (IEEE 802.15.4)
#ifdef __ICC430__
#pragma pack(1)
#endif
typedef struct {
    uint8   packetLength;
    uint16  frameControlField;
    uint8   seqNumber;
    uint16  panId;
    uint16  destAddr;
    uint16  srcAddr;
    #ifdef SECURITY_CCM
    uint8   securityControl;
    uint32  frameCounter;
    #endif
} basicRfPktHdr_t;
#ifdef __ICC430__
#pragma pack()
#endif


/***********************************************************************************
* LOCAL VARIABLES
*/
static basicRfRxInfo_t  rxi=      { 0xFF }; // Make sure sequence numbers are
static basicRfTxState_t txState=  { 0x00 }; // initialised and distinct.

static basicRfCfg_t* pConfig;
static uint8 txMpdu[BASIC_RF_MAX_PAYLOAD_SIZE+BASIC_RF_PACKET_OVERHEAD_SIZE+1];
static uint8 rxMpdu[BASIC_RF_MAX_PAYLOAD_SIZE+BASIC_RF_PACKET_OVERHEAD_SIZE+1];

/***********************************************************************************
* GLOBAL VARIABLES
*/


/***********************************************************************************
* LOCAL FUNCTIONS
*/
static uint8 basicRfBuildHeader(uint8* buffer, uint16 destAddr, uint8 payloadLength);
static uint8 basicRfBuildMpdu(uint16 destAddr, uint8* pPayload, uint8 length);
static void basicRfRxFrmDoneIsr(void);



/***********************************************************************************
* @fn          basicRfBuildHeader
*
* @brief       Builds packet header according to IEEE 802.15.4 frame format
*
* @param       buffer - Pointer to buffer to write the header
*              destAddr - destination short address
*              payloadLength - length of higher layer payload
*
* @return      uint8 - length of header
*/
static uint8 basicRfBuildHeader(uint8* buffer, uint16 destAddr, uint8 payloadLength)
{
    basicRfPktHdr_t *pHdr;

    pHdr= (basicRfPktHdr_t*)buffer;

    // Populate packet header
    pHdr->packetLength = payloadLength + BASIC_RF_PACKET_OVERHEAD_SIZE;
    pHdr->frameControlField = pConfig->ackRequest ? BASIC_RF_FCF_ACK : BASIC_RF_FCF_NOACK;
    pHdr->seqNumber= txState.txSeqNumber;
    pHdr->panId= pConfig->panId;
    pHdr->destAddr= destAddr;
    pHdr->srcAddr= pConfig->myAddr;

    #ifdef SECURITY_CCM

    // Add security to FCF, length and security header
    pHdr->frameControlField |= BASIC_RF_SEC_ENABLED_FCF_BM;
    pHdr->packetLength += PKT_LEN_MIC;
    pHdr->packetLength += BASIC_RF_AUX_HDR_LENGTH;

    pHdr->securityControl= SECURITY_CONTROL;
    pHdr->frameCounter=   txState.frameCounter;

    #endif

    // Make sure bytefields are network byte order
    UINT16_HTON(pHdr->frameControlField);
    UINT16_HTON(pHdr->panId);
    UINT16_HTON(pHdr->destAddr);
    UINT16_HTON(pHdr->srcAddr);

    return sizeof(basicRfPktHdr_t);
}


/***********************************************************************************
* @fn          basicRfBuildMpdu
*
* @brief       Builds mpdu (MAC header + payload) according to IEEE 802.15.4
*              frame format
*
* @param       destAddr - Destination short address
*              pPayload - pointer to buffer with payload
*              payloadLength - length of payload buffer
*
* @return      uint8 - length of mpdu
*/
static uint8 basicRfBuildMpdu(uint16 destAddr, uint8* pPayload, uint8 payloadLength)
{
    uint8 hdrLength, n;

    hdrLength = basicRfBuildHeader(txMpdu, destAddr, payloadLength);

    for(n=0;n<payloadLength;n++)
    {
        txMpdu[hdrLength+n] = pPayload[n];
    }
    return hdrLength + payloadLength; // total mpdu length
}


/***********************************************************************************
* @fn          basicRfRxFrmDoneIsr
*
* @brief       Interrupt service routine for received frame from radio
*              (either data or acknowlegdement)
*
* @param       rxi - file scope variable info extracted from the last incoming
*                    frame
*              txState - file scope variable that keeps tx state info
*
* @return      none
*/
static void basicRfRxFrmDoneIsr(void)
{
    basicRfPktHdr_t *pHdr;
    uint8 *pStatusWord;
    #ifdef SECURITY_CCM
    uint8 authStatus=0;
    #endif

    // Map header to packet buffer
    pHdr= (basicRfPktHdr_t*)rxMpdu;

    // Clear interrupt and disable new RX frame done interrupt
    halRfDisableRxInterrupt();

    // Enable all other interrupt sources (enables interrupt nesting)
    halIntOn();

    // Read payload length.
    halRfReadRxBuf(&pHdr->packetLength,1);
    pHdr->packetLength &= BASIC_RF_PLD_LEN_MASK; // Ignore MSB

    // Is this an acknowledgment packet?
    // Only ack packets may be 5 bytes in total.
    if (pHdr->packetLength == BASIC_RF_ACK_PACKET_SIZE) {

        // Read the packet
        halRfReadRxBuf(&rxMpdu[1], pHdr->packetLength);

        // Make sure byte fields are changed from network to host byte order
        UINT16_NTOH(pHdr->frameControlField);
    	UINT16_NTOH(pHdr->panId);
    	UINT16_NTOH(pHdr->destAddr);
    	UINT16_NTOH(pHdr->srcAddr);
        #ifdef SECURITY_CCM
        UINT32_NTOH(pHdr->frameCounter);
        #endif

        rxi.ackRequest = !!(pHdr->frameControlField & BASIC_RF_FCF_ACK_BM);

        // Read the status word and check for CRC OK
        pStatusWord= rxMpdu + 4;

        // Indicate the successful ACK reception if CRC and sequence number OK
        if ((pStatusWord[1] & BASIC_RF_CRC_OK_BM) && (pHdr->seqNumber == txState.txSeqNumber)) {
            txState.ackReceived = TRUE;
        }

        // No, it is data
    } else {

        // It is assumed that the radio rejects packets with invalid length.
        // Subtract the number of bytes in the frame overhead to get actual payload.

        rxi.length = pHdr->packetLength - BASIC_RF_PACKET_OVERHEAD_SIZE;

        #ifdef SECURITY_CCM
        rxi.length -= (BASIC_RF_AUX_HDR_LENGTH + BASIC_RF_LEN_MIC);
        authStatus = halRfReadRxBufSecure(&rxMpdu[1], pHdr->packetLength, rxi.length,
                                        BASIC_RF_LEN_AUTH, BASIC_RF_SECURITY_M);
        #else
        halRfReadRxBuf(&rxMpdu[1], pHdr->packetLength);
        #endif

        // Make sure byte fields are changed from network to host byte order
        UINT16_NTOH(pHdr->frameControlField);
    	UINT16_NTOH(pHdr->panId);
    	UINT16_NTOH(pHdr->destAddr);
    	UINT16_NTOH(pHdr->srcAddr);
        #ifdef SECURITY_CCM
        UINT32_NTOH(pHdr->frameCounter);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区小说区区亚洲影院| 国产亚洲成av人在线观看导航| 国产不卡免费视频| 国产精品91一区二区| 国产成人免费视频一区| 国产一区三区三区| 国产成人精品影院| 成人在线综合网站| 99re66热这里只有精品3直播 | 亚洲电影第三页| 亚洲午夜一二三区视频| 性做久久久久久| 精品一区二区三区视频在线观看| 麻豆精品在线看| 国产精品自拍三区| 色婷婷综合视频在线观看| 在线观看中文字幕不卡| 日韩亚洲欧美高清| 国产日产亚洲精品系列| 亚洲欧洲av在线| 亚洲成va人在线观看| 麻豆精品在线观看| 99久久精品国产一区二区三区| 欧美在线观看视频一区二区三区 | 国产真实精品久久二三区| 国产在线日韩欧美| 色综合久久久久综合体| 欧美这里有精品| 精品对白一区国产伦| 国产精品久久综合| 亚洲电影第三页| 国产成人av资源| 精品视频在线看| 国产亚洲精品bt天堂精选| 一区二区三区不卡视频| 精品一区二区国语对白| 成人av电影在线网| 欧美一区二区在线免费播放| 国产精品欧美综合在线| 性欧美疯狂xxxxbbbb| voyeur盗摄精品| 日韩一区二区三区免费观看| 国产精品视频yy9299一区| 天堂久久久久va久久久久| 暴力调教一区二区三区| 精品国产乱码久久久久久牛牛| 自拍av一区二区三区| 国产在线精品一区二区夜色| 欧美在线你懂的| 国产精品久久久久久妇女6080| 免费成人在线影院| 欧美日韩一区二区三区四区| 国产精品国产精品国产专区不蜜 | 久久网站热最新地址| 亚洲国产欧美日韩另类综合| av在线不卡电影| 久久天堂av综合合色蜜桃网| 七七婷婷婷婷精品国产| 欧美午夜电影网| 亚洲精品久久嫩草网站秘色| 99久久精品费精品国产一区二区| 久久精品免费在线观看| 麻豆国产91在线播放| 欧美日韩国产乱码电影| 亚洲国产精品久久人人爱| 91免费精品国自产拍在线不卡| 日本一区二区三区电影| 国产精品一线二线三线| 久久久五月婷婷| 国产伦精品一区二区三区在线观看| 欧美一级午夜免费电影| 日本伊人午夜精品| 欧美一区二区啪啪| 免费人成网站在线观看欧美高清| 欧美狂野另类xxxxoooo| 午夜精品福利视频网站| 在线播放视频一区| 亚洲成a人片在线观看中文| 色噜噜久久综合| 亚洲一区二区综合| 欧美日韩精品福利| 亚洲成av人片在线| 日韩一区二区精品葵司在线| 久久精品二区亚洲w码| 欧美不卡一二三| 国产乱码精品一区二区三区av| 国产亚洲精品精华液| 91小宝寻花一区二区三区| 亚洲猫色日本管| 欧美日韩精品欧美日韩精品一| 丝袜亚洲精品中文字幕一区| 精品黑人一区二区三区久久| 国产黄色91视频| 亚洲女同女同女同女同女同69| 欧美性感一区二区三区| 青草av.久久免费一区| 欧美精品一区二区三区蜜桃| 成人黄色免费短视频| 亚洲一区二区三区中文字幕 | 欧美日韩午夜在线| 日日夜夜精品视频天天综合网| 日韩欧美资源站| 不卡的av中国片| 肉肉av福利一精品导航| 久久免费国产精品| 在线观看亚洲精品视频| 久草在线在线精品观看| 亚洲视频香蕉人妖| 日韩欧美激情在线| 91麻豆国产在线观看| 久久机这里只有精品| 亚洲品质自拍视频| 精品剧情在线观看| 色丁香久综合在线久综合在线观看| 香蕉久久夜色精品国产使用方法| 国产日韩综合av| 欧美视频三区在线播放| 国产成人免费高清| 亚洲成av人片一区二区| 日本一区二区免费在线观看视频| 欧美三区在线视频| 成人免费看片app下载| 青青草精品视频| 亚洲午夜精品久久久久久久久| 国产欧美一区二区精品久导航 | 国产亚洲一区二区三区四区| 欧美中文字幕一区| av在线不卡网| 国产成人综合网站| 老色鬼精品视频在线观看播放| 亚洲久草在线视频| 欧美韩日一区二区三区| 欧美一级生活片| 欧美男男青年gay1069videost| av成人动漫在线观看| 国产精品 日产精品 欧美精品| 日韩**一区毛片| 亚洲第一av色| 亚洲国产精品综合小说图片区| 亚洲欧洲av在线| 国产精品色噜噜| 国产日韩影视精品| 久久久午夜精品理论片中文字幕| 日韩欧美色综合| 欧美成人一区二区三区片免费 | 国产精品白丝jk黑袜喷水| 秋霞影院一区二区| 视频一区在线视频| 性做久久久久久久免费看| 一区二区三区**美女毛片| 日韩毛片高清在线播放| 国产精品国产成人国产三级| 国产精品久久久久桃色tv| 国产精品久久久久7777按摩| 国产欧美一区二区在线| 国产精品蜜臀av| 国产精品国产三级国产aⅴ无密码| 国产精品久久一卡二卡| 亚洲成人av免费| 国产三区在线成人av| 国产成人三级在线观看| 九一九一国产精品| 九色综合狠狠综合久久| 国产精品69久久久久水密桃| 国产成人精品www牛牛影视| 成人激情免费网站| 99国内精品久久| 欧美午夜寂寞影院| 日韩午夜激情av| 久久精子c满五个校花| 欧美国产精品专区| 亚洲精选视频在线| 亚洲国产aⅴ天堂久久| 美女视频一区在线观看| 国产精品一区三区| 91小视频免费看| 91精品国产手机| 国产欧美精品国产国产专区| 亚洲欧美国产77777| 亚洲成人午夜电影| 国产精品中文欧美| 色视频欧美一区二区三区| 在线综合亚洲欧美在线视频| 亚洲精品在线观看视频| 亚洲人成人一区二区在线观看| 亚洲成年人影院| www.欧美精品一二区| 欧美一区二区在线不卡| 中文字幕免费不卡| 亚洲成人综合在线| 成人动漫中文字幕| 欧美精品第1页| 国产精品福利一区二区三区| 免费成人你懂的| 色噜噜狠狠成人网p站| 精品国产乱码久久久久久免费 | 天天影视涩香欲综合网| 国产风韵犹存在线视精品| 欧美日韩黄视频| 国产精品福利影院|