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

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

?? basic_rf.c

?? cc2430最新的例子程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
        #endif

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

        // Read the source address
        rxi.srcAddr= pHdr->srcAddr;

        // Read the packet payload
        rxi.pPayload = rxMpdu+sizeof(basicRfPktHdr_t);

        // Read the FCS to get the RSSI and CRC
        pStatusWord= rxi.pPayload+rxi.length;
        #ifdef SECURITY_CCM
        pStatusWord+= BASIC_RF_LEN_MIC;
        #endif
        rxi.rssi = pStatusWord[0];

        // Notify the application about the received data packet if the CRC is OK
        // Throw packet if the previous packet had the same sequence number
        if( (pStatusWord[1] & BASIC_RF_CRC_OK_BM) && (rxi.seqNumber != pHdr->seqNumber) ) {
            // If security is used check also that authentication passed
            #ifdef SECURITY_CCM
            if( authStatus==SUCCESS ) {
                if ( (pHdr->frameControlField & (BASIC_RF_FCF_BM)) ==
                    (BASIC_RF_FCF_NOACK | BASIC_RF_SEC_ENABLED_FCF_BM)) {
                        rxi.isReady = TRUE;
                }
            }
            #else
            if ( ((pHdr->frameControlField & (BASIC_RF_FCF_BM)) == BASIC_RF_FCF_NOACK) ) {
                rxi.isReady = TRUE;
            }
            #endif
        }

        rxi.seqNumber = pHdr->seqNumber;
    }

    // Enable RX frame done interrupt again
    halIntOff();
    halRfEnableRxInterrupt();
}


/***********************************************************************************
* GLOBAL FUNCTIONS
*/

/***********************************************************************************
* @fn          basicRfInit
*
* @brief       Initialise basic RF datastructures. Sets channel, short address and
*              PAN id in the chip and configures interrupt on packet reception
*
* @param       pRfConfig - pointer to BASIC_RF_CONFIG struct.
*                          This struct must be allocated by higher layer
*              txState - file scope variable that keeps tx state info
*              rxi - file scope variable info extracted from the last incoming
*                    frame
*
* @return      none
*/
uint8 basicRfInit(basicRfCfg_t* pRfConfig)
{
    if (halRfInit()==FAILED)
        return FAILED;

    halIntOff();

    // Set the protocol configuration
    pConfig = pRfConfig;
    rxi.pPayload   = NULL;

    txState.receiveOn = TRUE;
    txState.frameCounter = 0;

    // Set channel
    halRfSetChannel(pConfig->channel);

    // Write the short address and the PAN ID to the CC2520 RAM
    halRfSetShortAddr(pConfig->myAddr);
    halRfSetPanId(pConfig->panId);

    // if security is enabled, write key and nonce
    #ifdef SECURITY_CCM
    basicRfSecurityInit(pConfig);
    #endif

    // Set up receive interrupt (received data or acknowlegment)
    halRfRxInterruptConfig(basicRfRxFrmDoneIsr);

    halIntOn();

    return SUCCESS;
}


/***********************************************************************************
* @fn          basicRfSendPacket
*
* @brief       Send packet
*
* @param       destAddr - destination short address
*              pPayload - pointer to payload buffer. This buffer must be
*                         allocated by higher layer.
*              length - length of payload
*              txState - file scope variable that keeps tx state info
*              mpdu - file scope variable. Buffer for the frame to send
*
* @return      basicRFStatus_t - SUCCESS or FAILED
*/
uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length)
{
    uint8 mpduLength;
    uint8 status;

    // Turn on receiver if its not on
    if(!txState.receiveOn) {
        halRfReceiveOn();
    }

    // Check packet length
    length = min(length, BASIC_RF_MAX_PAYLOAD_SIZE);

    // Wait until the transceiver is idle
    halRfWaitTransceiverReady();

    // Turn off RX frame done interrupt to avoid interference on the SPI interface
    halRfDisableRxInterrupt();

    mpduLength = basicRfBuildMpdu(destAddr, pPayload, length);

    #ifdef SECURITY_CCM
    halRfWriteTxBufSecure(txMpdu, mpduLength, length, BASIC_RF_LEN_AUTH, BASIC_RF_SECURITY_M);
    txState.frameCounter++;     // Increment frame counter field
    halRfIncNonceTx();          // Increment nonce value
    #else
    halRfWriteTxBuf((uint8*)txMpdu, mpduLength);
    #endif

    // Turn on RX frame done interrupt for ACK reception
    halRfEnableRxInterrupt();

    // Send frame with CCA. return FAILED if not successful
    if(halRfTransmit() != SUCCESS) {
        status = FAILED;
    }

    // Wait for the acknowledge to be received, if any
    if (pConfig->ackRequest) {
        txState.ackReceived = FALSE;

        // We'll enter RX automatically, so just wait until we can be sure that the ack reception should have finished
        // The timeout consists of a 12-symbol turnaround time, the ack packet duration, and a small margin
        halMcuWaitUs((12 * BASIC_RF_SYMBOL_DURATION) + (BASIC_RF_ACK_DURATION) + (2 * BASIC_RF_SYMBOL_DURATION) + 10);

        // If an acknowledgment has been received (by RxFrmDoneIsr), the ackReceived flag should be set
        status = txState.ackReceived ? SUCCESS : FAILED;

    } else {
        status = SUCCESS;
    }

    // Turn off the receiver if it should not continue to be enabled
    if (!txState.receiveOn) {
        halRfReceiveOff();
    }

    if(status == SUCCESS) {
        txState.txSeqNumber++;
    }
    return status;

}


/***********************************************************************************
* @fn          basicRfPacketIsReady
*
* @brief       Check if a new packet is ready to be read by next higher layer
*
* @param       none
*
* @return      uint8 - TRUE if a packet is ready to be read by higher layer
*/
uint8 basicRfPacketIsReady(void)
{
    return rxi.isReady;
}


/**********************************************************************************
* @fn          basicRfReceive
*
* @brief       Copies the payload of the last incoming packet into a buffer
*
* @param       pRxData - pointer to data buffer to fill. This buffer must be
*                        allocated by higher layer.
*              len - Number of bytes to read in to buffer
*              rxi - file scope variable holding the information of the last
*                    incoming packet
*
* @return      uint8 - number of bytes actually copied into buffer
*/
uint8 basicRfReceive(uint8* pRxData, uint8 len, int16* pRssi)
{
    // Accessing shared variables -> this is a critical region
    // Critical region start
    halIntOff();
    memcpy(pRxData, rxi.pPayload, min(rxi.length, len));
    if(pRssi != NULL) {
        if(rxi.rssi < 128){
            *pRssi = rxi.rssi - halRfGetRssiOffset();
        }
        else{
            *pRssi = (rxi.rssi - 256) - halRfGetRssiOffset();
        }
    }
    rxi.isReady = FALSE;
    halIntOn();

    // Critical region end

    return min(rxi.length, len);
}


/**********************************************************************************
* @fn          basicRfGetRssi
*
* @brief       Copies the payload of the last incoming packet into a buffer
*
* @param       none

* @return      int8 - RSSI value
*/
int8 basicRfGetRssi(void)
{
    if(rxi.rssi < 128){
        return rxi.rssi - halRfGetRssiOffset();
    }
    else{
        return (rxi.rssi - 256) - halRfGetRssiOffset();
    }
}

/***********************************************************************************
* @fn          basicRfReceiveOn
*
* @brief       Turns on receiver on radio
*
* @param       txState - file scope variable
*
* @return      none
*/
void basicRfReceiveOn(void)
{
    txState.receiveOn = TRUE;
    halRfReceiveOn();
}


/***********************************************************************************
* @fn          basicRfReceiveOff
*
* @brief       Turns off receiver on radio
*
* @param       txState - file scope variable
*
* @return      none
*/
void basicRfReceiveOff(void)
{
    txState.receiveOn = FALSE;
    halRfReceiveOff();
}


/***********************************************************************************
  Copyright 2007 Texas Instruments Incorporated. All rights reserved.

  IMPORTANT: Your use of this Software is limited to those specific rights
  granted under the terms of a software license agreement between the user
  who downloaded the software, his/her employer (which must be your employer)
  and Texas Instruments Incorporated (the "License").  You may not use this
  Software unless you agree to abide by the terms of the License. The License
  limits your use, and you acknowledge, that the Software may not be modified,
  copied or distributed unless embedded on a Texas Instruments microcontroller
  or used solely and exclusively in conjunction with a Texas Instruments radio
  frequency transceiver, which is integrated into your product.  Other than for
  the foregoing purpose, you may not use, reproduce, copy, prepare derivative
  works of, modify, distribute, perform, display or sell this Software and/or
  its documentation for any purpose.

  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  PROVIDED 揂S IS

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av自拍| 亚洲女同女同女同女同女同69| 亚洲国产综合视频在线观看| 国产成人综合在线| 日韩亚洲欧美一区| 午夜伊人狠狠久久| 欧美乱熟臀69xxxxxx| 国产成人综合在线观看| 精品国产一区二区精华| 日本少妇一区二区| 日韩欧美中文字幕公布| 青青草国产精品97视觉盛宴| 欧美老女人在线| 免费观看久久久4p| 日韩欧美在线1卡| 蜜臀av性久久久久蜜臀av麻豆 | 国产成人亚洲精品狼色在线| 26uuu国产日韩综合| 国产成人aaaa| 一区二区三区国产精品| 欧美三级乱人伦电影| 蜜乳av一区二区| 久久嫩草精品久久久久| 成人成人成人在线视频| 亚洲一区二区三区国产| 日韩视频一区二区| k8久久久一区二区三区| 五月婷婷久久综合| 久久久久久久久久电影| 欧美天堂亚洲电影院在线播放| 日韩精品五月天| 国产精品麻豆99久久久久久| 欧美日韩国产影片| 国产成人久久精品77777最新版本| 日韩一区中文字幕| 日韩一区二区电影| 色综合久久久久久久久| 久久国产精品99久久人人澡| 裸体歌舞表演一区二区| 国产亚洲欧美日韩在线一区| 色婷婷综合久久久久中文| 国产盗摄女厕一区二区三区| 亚洲国产综合人成综合网站| 中文天堂在线一区| 日韩女优av电影| 欧洲人成人精品| 91亚洲国产成人精品一区二三 | 91国偷自产一区二区三区成为亚洲经典 | 91久久精品国产91性色tv| 精品一区二区三区蜜桃| 亚洲综合一区在线| 国产精品国产自产拍高清av| 日韩欧美在线综合网| 欧美中文字幕久久| 91香蕉视频污在线| 99久久综合国产精品| 国产不卡在线视频| 国产成人精品影视| 国产精品一区二区三区乱码| 美女视频第一区二区三区免费观看网站| 亚洲美女精品一区| 亚洲精品国产无天堂网2021| 高清av一区二区| 高清shemale亚洲人妖| 国产**成人网毛片九色 | 日韩一区二区三区观看| 欧美精品 日韩| 欧美一区日韩一区| 91精品国产欧美日韩| 日韩小视频在线观看专区| 日韩天堂在线观看| 亚洲精品在线电影| 久久蜜桃av一区精品变态类天堂 | 亚洲成a人v欧美综合天堂下载 | 亚洲色图另类专区| 日韩伦理av电影| 亚洲一区二区三区四区不卡| 日韩精品电影在线| 激情综合网av| 成人免费不卡视频| 亚洲人精品午夜| 亚洲一区二区美女| 激情成人午夜视频| 99精品视频在线观看免费| 在线视频综合导航| 精品日韩99亚洲| 综合色天天鬼久久鬼色| 亚洲成人中文在线| 国产精品18久久久久久vr| 欧美亚洲免费在线一区| 欧美电影精品一区二区| 欧美高清一级片在线观看| 亚洲第一电影网| 成人激情免费网站| 91麻豆精品国产91久久久久久久久 | 国产乱码一区二区三区| 91久久精品一区二区| 久久久不卡网国产精品二区| 一本色道久久综合亚洲精品按摩| 精品国产免费一区二区三区四区| 亚洲天堂av老司机| 韩国v欧美v亚洲v日本v| 欧美在线|欧美| 国产精品成人午夜| 蜜臀精品一区二区三区在线观看 | 一区二区三区在线观看欧美| 国产一区二区不卡| 欧美一区二区久久| 亚洲图片自拍偷拍| 色综合天天视频在线观看| 久久精品视频一区二区三区| 日韩高清国产一区在线| 欧美在线小视频| 中文字幕一区免费在线观看| 国产精品原创巨作av| 日韩欧美国产午夜精品| 日韩高清一区在线| 欧美日韩精品电影| 亚洲高清免费视频| 欧美综合一区二区| 艳妇臀荡乳欲伦亚洲一区| 91免费看视频| 亚洲蜜臀av乱码久久精品蜜桃| 成人av电影在线观看| 欧美激情一区二区三区全黄| 国产成人一级电影| 国产精品久久久久久久午夜片| 国产高清精品久久久久| 国产精品入口麻豆九色| 99久久婷婷国产综合精品电影| 中文字幕亚洲欧美在线不卡| 91久久精品一区二区| 秋霞国产午夜精品免费视频| 欧美一级免费大片| 亚洲成va人在线观看| 91精品国产免费| 日韩影院精彩在线| 91麻豆文化传媒在线观看| 国产偷国产偷亚洲高清人白洁| 国产99精品国产| 亚洲一区二区影院| 69p69国产精品| 国产制服丝袜一区| 国产精品福利一区二区三区| 色天天综合久久久久综合片| 午夜伊人狠狠久久| 久久精品人人做人人爽人人| 99精品久久99久久久久| 亚洲一区二区三区不卡国产欧美| 91麻豆精品国产自产在线| 久久99精品一区二区三区三区| 久久久精品免费网站| 91亚洲精品久久久蜜桃| 五月天精品一区二区三区| 欧美tk—视频vk| 99re热视频精品| 日韩中文字幕不卡| 国产欧美一区在线| 欧美精品在线一区二区三区| 国产成人免费视| 婷婷成人综合网| 国产亚洲成av人在线观看导航 | 国产精品午夜电影| 欧美日韩三级在线| 国产成人精品三级麻豆| 亚洲成人自拍偷拍| 国产精品福利一区| 欧美xingq一区二区| 99久久国产免费看| 另类小说视频一区二区| 亚洲一区在线观看网站| 国产日韩综合av| 日韩精品自拍偷拍| 欧美喷潮久久久xxxxx| 国产91精品一区二区麻豆亚洲| 奇米影视一区二区三区| 一区二区三国产精华液| 国产精品免费看片| 欧美mv日韩mv| 欧美一区二区视频网站| 风间由美一区二区三区在线观看| 日本成人在线看| 男女男精品网站| 久久99国产乱子伦精品免费| 日韩av一级片| 欧美aaaaa成人免费观看视频| 日韩高清欧美激情| 五月天亚洲精品| 亚洲第一在线综合网站| 成人欧美一区二区三区白人 | 91免费看视频| 在线欧美一区二区| 欧美亚洲日本国产| 在线播放91灌醉迷j高跟美女 | 六月婷婷色综合| 精品一区二区三区久久| 天天av天天翘天天综合网色鬼国产| 亚洲国产日日夜夜| 日韩**一区毛片| 久久se精品一区二区|