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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mac_rx_engine.c

?? zigbee location examples
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                         CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                 *
 *      ***   + +   ***                                   RX Engine                                    *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************
 * This module contains the MAC RX engine (FIFOP interrupt), including packet processing functions,    *
 * and functions to control the RX state (on/off...)                                                   *
 *******************************************************************************************************/
#include <mac_headers.h>
#include <string.h>


//-------------------------------------------------------------------------------------------------------
// Variables related to the receive engine
MAC_RX_INFO   mrxInfo;

// Variables related to the security within the receive engine
#if MAC_OPT_SECURITY
MAC_RX_SECURITY_INFO mrxSecurityInfo;
#endif

ROOT MLME_BEACON_NOTIFY_INDICATION *mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket);
static ROOT void mrxHandleFifopInt(void);
static ROOT void mrxStartPayloadDmaTransfer(void);

//-------------------------------------------------------------------------------------------------------




/*******************************************************************************************************
 *******************************************************************************************************
 **************************             RECEIVE STATE MANAGEMENT              **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mrxIncrOnCounter(void)
//
//  DESCRIPTION:
//      Increments the "RX on" counter, and turns on RX on a 0 -> 1 transition
//-------------------------------------------------------------------------------------------------------
void mrxIncrOnCounter(void) NEAR {
    DISABLE_GLOBAL_INT();
    if (!mrxInfo.onCounter) {
        CSP_INDICATE_RX_ON(TRUE);
        if (!msupIsTxActive()) {
            ISRXON;
        }
    }
    mrxInfo.onCounter++;
    ENABLE_GLOBAL_INT();
} // mrxIncrOnCounter




//-------------------------------------------------------------------------------------------------------
//  void mrxAutoIncrOnCounter(void)
//
//  DESCRIPTION:
//      Increments the "RX on" counter, but does not turn on RX on a 0 -> 1 transition. This function
//      should be used when issuing the STXON(CCA) or SACK(PEND) command strobes.
//-------------------------------------------------------------------------------------------------------
void mrxAutoIncrOnCounter(void) NEAR {
    DISABLE_GLOBAL_INT();
    mrxInfo.onCounter++;
    CSP_INDICATE_RX_ON(TRUE);
    ENABLE_GLOBAL_INT();
} // mrxAutoIncrOnCounter




//-------------------------------------------------------------------------------------------------------
//  void mrxDecrOnCounter(void)
//
//  DESCRIPTION:
//      Decrements the "RX on" counter, and turns off RX on a 1 -> 0 transition if SFD is low. If SFD is
//      high, the turn-off operation is delayed by one backoff period by using a callback.
//
//      Note: Because of the CSP handling, this function must only be called at the start of a backoff
//      period
//-------------------------------------------------------------------------------------------------------
void mrxDecrOnCounter(void) NEAR {

    DISABLE_GLOBAL_INT();

    // Decrement counter and check for 1->0
    if (mrxInfo.onCounter) mrxInfo.onCounter--;
    if (mrxInfo.onCounter == 0) {

        // Avoid interrupting RX or TX (come back later when busy)
        if (msupIsSfdActive() || msupIsTxActive() || msupIsCspInCriticalSection()) {
            mrxInfo.onCounter++;
            mtimSetCallback(mrxDecrOnCounter, 1);
        } else {
            ISRFOFF;
            CSP_INDICATE_RX_ON(FALSE);
        }
    }
    ENABLE_GLOBAL_INT();

} // mrxDecrOnCounter




//-------------------------------------------------------------------------------------------------------
//  void mrxRxEnableRequestOff(void)
//
//  DESCRIPTION:
//      Used in connection with mrxRxEnableRequestTask() to make sure that a mtimCancelCallback operation
//      only removes callbacks initiated by mrxRxEnableRequestTask()
//-------------------------------------------------------------------------------------------------------
void mrxRxEnableRequestOff(void) NEAR {
    mrxDecrOnCounter();
} // mrxRxEnableRequestOff




//-------------------------------------------------------------------------------------------------------
//  void mrxRxEnableRequestTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      The task created by mlmeRxEnableRequest() to turn on RX for a period of time. The current version
//      only supports non-beacon PANs.
//
//  TASK DATA
//      0
//-------------------------------------------------------------------------------------------------------
void mrxRxEnableRequestTask(MAC_TASK_INFO   *pTask) NEAR {
    MAC_ENUM status;

    // Only implemented for non-beacon PANs
    if (mpib.macBeaconOrder == 15) {

        // Turn off?
        if (mrxInfo.rxEnableOnDuration == 0) {
            if (mtimCancelCallback(mrxRxEnableRequestOff)) {
                mrxDecrOnCounter();
                status = SUCCESS;
            } else {
                status = INVALID_PARAMETER;
            }

        // Turn on + off after timeot?
        } else {

            // If there's a timer available to turn RX off, then turn it on now
            if (mtimSetCallback(mrxRxEnableRequestOff, (INT32)mrxInfo.rxEnableOnDuration)) {
                mrxIncrOnCounter();
                status = SUCCESS;

            } else {
                // Come back later!
                return;
            }
        }

    // Not implemented for beacon-enabled PANs
    } else {
        status = INVALID_PARAMETER;
    }

    // Remove the task and confirm to the higher layer
    mschRemoveTask(pTask->priority, 0);
    mlmeRxEnableConfirm(status);

} // mrxRxEnableRequestTask




//-------------------------------------------------------------------------------------------------------
//  void mrxForceRxOff(void)
//
//  DESCRIPTION:
//      Creates the task that forces RX off at the end of a superframe, if we're not in scan mode.
//-------------------------------------------------------------------------------------------------------
void mrxForceRxOff(void) NEAR {
    if (macInfo.state & MAC_STATE_SCAN_BM) return;
    mschAddTask(mschReserveTask(), MAC_TASK_PRI_HIGHEST, mrxForceRxOffTask, MRX_RESET_ON_COUNTER);
} // mrxForceRxOff




//-------------------------------------------------------------------------------------------------------
//  void mrxForceRxOffTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task forces RX off by issuing a SRFOFF command strobe, regardless of whether the SFD pin
//      state. If SFD was high before the command was issued, an RX engine cleanup is performed.
//
//  TASK DATA:
//      Flags (MRX_RESET_ON_COUNTER)
//-------------------------------------------------------------------------------------------------------
void mrxForceRxOffTask(MAC_TASK_INFO   *pTask) NEAR {
    DISABLE_GLOBAL_INT();
    if (pTask->taskData & MRX_RESET_ON_COUNTER) mrxInfo.onCounter = 0;
    ISRFOFF;
    mrxResetRxEngine();
    ENABLE_GLOBAL_INT();
    mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
} // mrxForceRxOffTask




static ROOT void mrxStartPayloadDmaTransfer(void) {
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].destMsb = HIBYTE(mrxInfo.pPacket->mdi.pMsdu);
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].destLsb = LOBYTE(mrxInfo.pPacket->mdi.pMsdu);
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].lenLsb = mrxInfo.length;

    while (RXFIFOCNT < 2);

    DMA_ARM_CHANNEL(DMA_RFRX_CHANNEL);
    DMA_START_CHANNEL(DMA_RFRX_CHANNEL);

    DISABLE_FIFOP_INT_BIT();
}




//-------------------------------------------------------------------------------------------------------
//  void mrxResetRxEngine(void)
//
//  DESCRIPTION:
//      Resets the RX engine by clearing the RX FIFO, freeing any recently acquired resources, and
//      resetting the RX engine state.
//-------------------------------------------------------------------------------------------------------
ROOT void mrxResetRxEngine(void) {
    DISABLE_GLOBAL_INT();

    // Free resources
    switch (mrxInfo.state) {
    case MRX_STATE_LEN_FCF_SEQ:
        // Nothing happened yet, so just flush the FIFO
        break;
    case MRX_STATE_FCS:
        DMA_ABORT_CHANNEL(DMA_RFRX_CHANNEL);
        // No break here!

    case MRX_STATE_ADDR:
        mschReleaseTask(mrxInfo.taskNumber);
        mrxInfo.taskNumber = NO_TASK;
        mrxpReleasePacket(mrxInfo.pPacket);
        mrxInfo.pPacket = NULL;
        // No break here!

    case MRX_STATE_DISCARD:
        mrxDecrOnCounter();
        break;
    }

    // Flush the RX FIFO twice (chip bug)
    ISFLUSHRX;
    ISFLUSHRX;

    // Clear the FIFOP interrupt flag
    CLEAR_FIFOP_INT_BIT();
    CLEAR_RFIF_INT();
    if (mrxInfo.state == MRX_STATE_FCS) ENABLE_FIFOP_INT_BIT();

    // Reset the RX engine state
    mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;

    ENABLE_GLOBAL_INT();

} // mrxResetRxEngine




/*******************************************************************************************************
 *******************************************************************************************************
 **************************          PACKET RECEPTION AND PROCESSING          **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  MLME_BEACON_NOTIFY_INDICATION* mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket)
//
//  DESCRIPTION:
//      Modifies a MAC_RX_PACKET structure to become a beacon notify indication.
//
//  ARGUMENTS:
//      MAC_RX_PACKET *pPacket
//          The packet that contains the beacon. This structure will be modified to contain the
//          notification.
//
//  RETURN VALUE:
//      MLME_BEACON_NOTIFY_INDICATION*
//          A pointer to the notification to be passed to the higher layer

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女一区二区在线观看| 亚洲欧美激情小说另类| www.欧美日韩| 欧美日韩中文另类| 国产精品亚洲午夜一区二区三区 | 亚洲少妇中出一区| 日韩欧美区一区二| 欧美中文字幕一区二区三区 | 麻豆国产精品一区二区三区| 国产精品福利一区| 欧美成人video| 一区二区三区国产精华| 久久久亚洲欧洲日产国码αv| 欧美日韩一二三区| 色综合天天综合给合国产| 六月婷婷色综合| 亚洲尤物在线视频观看| 国产精品久久久一区麻豆最新章节| 91麻豆精品国产自产在线观看一区 | 成人国产电影网| 九九精品视频在线看| 亚洲成va人在线观看| 不卡av免费在线观看| 国产原创一区二区| 美女诱惑一区二区| 蜜臀av一级做a爰片久久| 亚洲成人你懂的| 亚洲一区视频在线| 亚洲一区在线观看免费| 一区二区三区在线看| 国产精品剧情在线亚洲| 国产欧美日韩不卡| 久久无码av三级| 2024国产精品| 久久久无码精品亚洲日韩按摩| 91精品国产综合久久久久久久久久| 国产精品福利一区| 亚洲三级视频在线观看| 成人免费一区二区三区在线观看| 国产欧美一区二区三区沐欲| 精品国产露脸精彩对白| 欧美va在线播放| 日韩精品一区国产麻豆| 日韩精品一区二区三区在线观看| 日韩三级视频在线看| 日韩欧美在线影院| 精品久久人人做人人爽| 国产午夜精品一区二区三区视频| 久久综合久久久久88| 久久毛片高清国产| 国产一区二区三区不卡在线观看 | 在线观看日韩电影| 欧美日韩成人综合在线一区二区| 91精品在线一区二区| 精品999久久久| 欧美激情一二三区| 亚洲欧美国产毛片在线| 亚洲一区二区成人在线观看| 婷婷综合五月天| 九九精品视频在线看| 国产精品99久久久久| 99视频在线精品| 欧美日韩免费高清一区色橹橹 | 日韩黄色在线观看| 韩国欧美国产1区| 国产不卡在线一区| 色欧美片视频在线观看 | 日韩一区二区在线观看视频播放| 欧美成人一级视频| 国产蜜臀97一区二区三区| 亚洲视频 欧洲视频| 日韩av中文字幕一区二区三区| 久久精品国产99久久6| 国产99久久久久久免费看农村| 色婷婷久久久亚洲一区二区三区 | 欧美精品123区| 欧美精品一区二区三区蜜桃视频| 亚洲国产精品t66y| 亚洲地区一二三色| 国产精品自拍毛片| 91成人网在线| 精品999久久久| 亚洲欧美日韩在线不卡| 麻豆传媒一区二区三区| 97精品久久久午夜一区二区三区 | 欧美一区二区三区播放老司机| 精品国产三级电影在线观看| 亚洲女同女同女同女同女同69| 丝袜美腿成人在线| 99久久精品国产导航| 日韩精品一区二区在线| 亚洲激情图片qvod| 国产一区激情在线| 欧美老女人第四色| 成人欧美一区二区三区1314| 免费在线观看成人| 色香蕉成人二区免费| 精品成人a区在线观看| 亚洲午夜久久久久久久久久久| 国产乱码精品一品二品| 一区二区三区免费网站| 国产精一品亚洲二区在线视频| 欧洲人成人精品| 国产精品久久久久久久久晋中| 日本在线不卡视频| 色94色欧美sute亚洲线路一久 | 国产亚洲成aⅴ人片在线观看| 亚洲va韩国va欧美va精品| a级精品国产片在线观看| 精品欧美久久久| 日韩电影在线观看网站| 在线观看国产一区二区| 国产精品久久久久久久午夜片| 精品一区二区三区在线播放视频| 亚洲欧美另类综合偷拍| www.日韩精品| 国产精品美女久久久久久2018| 久久国产精品色| 欧美一区二区日韩一区二区| 无码av中文一区二区三区桃花岛| 99久久99久久久精品齐齐| www国产精品av| 激情五月婷婷综合| 日韩一区二区精品在线观看| 亚洲福利视频三区| 欧美日韩精品专区| 亚洲成人av中文| 欧美日韩国产精选| 亚洲va韩国va欧美va| 欧美色成人综合| 欧美在线观看18| 一区二区三区日韩欧美精品| 9i在线看片成人免费| 欧美国产激情一区二区三区蜜月| 国产丶欧美丶日本不卡视频| 久久亚洲精精品中文字幕早川悠里 | 风间由美性色一区二区三区| 2021久久国产精品不只是精品| 精品一区二区三区蜜桃| 日韩精品专区在线影院重磅| 麻豆精品一区二区三区| 精品国产91久久久久久久妲己| 久久精品72免费观看| 美女免费视频一区二区| 91精品国产高清一区二区三区蜜臀| 亚洲一级二级在线| 欧美欧美午夜aⅴ在线观看| 水蜜桃久久夜色精品一区的特点 | 精品播放一区二区| 福利电影一区二区三区| 国产精品伦理一区二区| 99久久久无码国产精品| 亚洲一区二区在线免费看| 欧美日产在线观看| 麻豆精品蜜桃视频网站| 久久久精品黄色| 99在线视频精品| 一区二区在线观看免费| 夜夜精品视频一区二区| 欧美日韩一区二区三区四区| 天堂va蜜桃一区二区三区漫画版 | 亚洲精品高清在线观看| 欧美年轻男男videosbes| 久久99精品国产91久久来源| 日本一区二区三区在线不卡| 成人的网站免费观看| 亚洲国产综合91精品麻豆| 日韩一区二区三区免费看| 国产精品1024| 亚洲精品菠萝久久久久久久| 欧美日韩一区二区在线观看视频 | 久久成人精品无人区| 国产精品麻豆网站| 欧美视频一区在线| 精品中文字幕一区二区小辣椒 | 国产欧美日韩一区二区三区在线观看| 91最新地址在线播放| 日韩精品一级二级| 国产精品色一区二区三区| 欧美群妇大交群中文字幕| 精品亚洲成a人| 一区二区欧美视频| 26uuu亚洲婷婷狠狠天堂| 国产老肥熟一区二区三区| 国产一区二区三区精品视频| 18欧美亚洲精品| 亚洲高清一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av | 欧美性一区二区| 国产美女在线观看一区| 亚洲在线观看免费视频| 久久欧美中文字幕| 欧美性猛片xxxx免费看久爱| 国产麻豆精品一区二区| 亚洲一级二级三级| 国产欧美视频一区二区| 欧美一区午夜视频在线观看| 91小视频在线| 国产精品一二一区| 欧美aaaaa成人免费观看视频|