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

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

?? mac_rx_engine.c

?? zigbee location examples
?? C
?? 第 1 頁 / 共 4 頁
字號:

    default:
        break;
    }

    // Clean up (used when there are no calls to the upper layer
    if (cleanUpAfterSwitch) {
        mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
        mrxpReleasePacket(pPacket);
    }

} // mrxProcessMacCommand




//-------------------------------------------------------------------------------------------------------
//  void mrxCommStatusIndication(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task is responsible for generating mlme-comm-status.indication upon security failures.
//
//  TASK DATA:
//      A pointer to the MAC_RX_PACKET to be processed
//-------------------------------------------------------------------------------------------------------
void mrxCommStatusIndication(MAC_TASK_INFO   *pTask) NEAR {
    MAC_RX_PACKET   *pPacket = (MAC_RX_PACKET   *) pTask->taskData;
    MCPS_DATA_INDICATION   *pMDI = &pPacket->mdi;

    mlmeCommStatusIndication(pMDI->srcPanId, pMDI->srcAddrMode, &pMDI->srcAddr, pMDI->dstAddrMode, &pMDI->dstAddr, pPacket->securityStatus);

    mschRemoveTask(pTask->priority, 0);
    mrxpReleasePacket(pPacket);
} //mrxCommStatusIndication




#pragma vector = DMA_VECTOR
__near_func __interrupt void DmaIsr(void) {
    CLEAR_DMA_INT();
    if (DMAIRQ & DMA_RFRX_CHANNEL_BM) {
        CLEAR_FIFOP_INT_BIT();
        ENABLE_FIFOP_INT_BIT();
        DMAIRQ = ~DMA_RFRX_CHANNEL_BM;
    }
}




#pragma vector=RF_VECTOR
__near_func __interrupt void RfIsr (void) {
    BYTE clearedFlagN,
         rfim;

    clearedFlagN = 0xFF;
    rfim = RFIM;

    if ((RFIF & RFIF_FIFOP_BM) & rfim) {
        mrxHandleFifopInt();
        clearedFlagN = ~RFIF_FIFOP_BM;

    } else if ((RFIF & RFIF_CSP_STOP_BM) & rfim) {
        mtxCspStopped(RFIF & RFIF_CSP_MANINT_BM);
        clearedFlagN = ~(RFIF_CSP_STOP_BM | RFIF_CSP_MANINT_BM | RFIF_CSP_WAIT_BM);

    } else if ((RFIF & RFIF_TXDONE_BM) & rfim) {
        mtxTxDone();
        clearedFlagN = ~RFIF_TXDONE_BM;
    }

    SET_RFIF(clearedFlagN);
    CLEAR_RFIF_INT();
}




static ROOT void mrxHandleFifopInt(void) {
    BYTE reservedTask;
    BYTE dstAddrMode;
    BYTE srcAddrMode;
    BOOL createProcessTask;
    TFPTR pProcessTask;
    WORD processTaskData;

    // Copy the pointer for fast access
    MAC_RX_PACKET   *pPacket = mrxInfo.pPacket;
    MCPS_DATA_INDICATION *pMDI = &pPacket->mdi;

    switch (mrxInfo.state) {
    case MRX_STATE_LEN_FCF_SEQ:

        // Keep RX on while receiving
        mrxAutoIncrOnCounter();

        // Reserve processing task and make sure that we're not doing energy detection
        reservedTask = mschReserveTask();
        if ((macInfo.state != MAC_STATE_ENERGY_SCAN) && (reservedTask != NO_TASK)) {
            mrxInfo.taskNumber = reservedTask;

            // Reserve packet
            pPacket = mrxpReservePacket();
            if (pPacket) {
                mrxInfo.pPacket = pPacket;
                pMDI = &pPacket->mdi;

                // Read the packet length, the frame control field and the sequence number
                halReadRxFifo((BYTE  *) &mrxInfo.length, 4);
                mrxInfo.length &= 0x7F;
                mrxInfo.length -= 5; // 3 for FCF and SN + 2 for FCS

                // Get the time stamp (do it now to make sure that it is not overwritten by the acknowledgment)
                pPacket->timestamp.counter = T2_GET_CAPTURED_COUNTER();
                pPacket->timestamp.overflowCounter = T2_GET_CAPTURED_OVERFLOW_COUNTER();

                // Security is currently not supported
                pMDI->securityUse = FALSE;

                // This packet will be acknowledged if the ack request bit is set
                if ((BYTE) mrxInfo.frameControlField & ACK_REQ_BM) {
                    ENABLE_AUTOACK();
#if MAC_OPT_FFD
                    // Acknowledge with the pending flag set if there is at least one packet in the pending queue
                    if (miqInfo.firstIndirectPacket != NO_PACKET) {
                        pPacket->flags |= MRXP_FLAG_SACKPEND_ISSUED_BM;
                        AUTOACK_WITH_PENDING_BIT();
                    } else {
                        AUTOACK_WITHOUT_PENDING_BIT();
                    }
#endif
                }

                // Set the destination address mode and length (of the fields)
                dstAddrMode = BF(mrxInfo.frameControlField, DEST_ADDR_MODE_BM, DEST_ADDR_MODE_IDX);
                pMDI->dstAddrMode = dstAddrMode;
                if (dstAddrMode) {
                    mrxInfo.destAddrLength = (dstAddrMode == AM_SHORT_16) ? 4 : 10;
                } else {
                    mrxInfo.destAddrLength = 0;
                }

                // Set the source address mode and length (of the fields)
                srcAddrMode = BF(mrxInfo.frameControlField, SRC_ADDR_MODE_BM, SRC_ADDR_MODE_IDX);
                pMDI->srcAddrMode = srcAddrMode;
                if (srcAddrMode) {
                    mrxInfo.srcAddrLength = (srcAddrMode == AM_SHORT_16) ? 4 : 10;
                    if (mrxInfo.frameControlField & INTRA_PAN_BM) mrxInfo.srcAddrLength -= 2;
                } else {
                    mrxInfo.srcAddrLength = 0;
                }

                // Calculate the MSDU length
                pMDI->msduLength = mrxInfo.length - (mrxInfo.destAddrLength + mrxInfo.srcAddrLength);

                // Set the next state
                if ((pMDI->msduLength < 0) || (pMDI->msduLength > aMaxMACFrameSize)) {
                    mrxpReleasePacket(pPacket);
                    mschReleaseTask(mrxInfo.taskNumber);
                    DISABLE_AUTOACK();
                    SET_FIFOP_THRESHOLD(mrxInfo.length + 2);
                    mrxInfo.state = MRX_STATE_DISCARD;
                } else if (mrxInfo.destAddrLength + mrxInfo.srcAddrLength) {
                    SET_FIFOP_THRESHOLD(mrxInfo.destAddrLength + mrxInfo.srcAddrLength);
                    mrxInfo.state = MRX_STATE_ADDR;
                } else {
                    // Configure payload DMA transfer
                    if (mrxInfo.length) {
                        mrxStartPayloadDmaTransfer();
                    }
                    SET_FIFOP_THRESHOLD(2);
                    mrxInfo.state = MRX_STATE_FCS;
                }
                break;
            }
        }

        // This packet will be discarded because
        // - There was no available task to handle the packet processing
        // - There was no packet structure to store the incoming data
        // - We're performing an energy detection scan, where all incoming packets are discarded
        mschReleaseTask(reservedTask);
        mrxInfo.length = (RFD & 0x7F) - 2;
        DISABLE_AUTOACK();
        SET_FIFOP_THRESHOLD(mrxInfo.length + 2);
        mrxInfo.state = MRX_STATE_DISCARD;
        break;

    case MRX_STATE_ADDR:

        // Read the source and destination addresses
        halReadRxFifo((BYTE  *) &pMDI->dstPanId, mrxInfo.destAddrLength);
        pMDI->srcPanId = pMDI->dstPanId;
        halReadRxFifo((mrxInfo.frameControlField & INTRA_PAN_BM) ? (BYTE  *) &pMDI->srcAddr : (BYTE  *) &pMDI->srcPanId, mrxInfo.srcAddrLength);
        mrxInfo.length = pMDI->msduLength;

        // Configure payload DMA transfer
        if (mrxInfo.length) {
            mrxStartPayloadDmaTransfer();
        }
        SET_FIFOP_THRESHOLD(2);
        mrxInfo.state = MRX_STATE_FCS;
        break;

    case MRX_STATE_FCS:

        // Get the footer (RSSI, CRCOK and LQI)
        halReadRxFifo(mrxInfo.pFooter, 2);
        pMDI->mpduLinkQuality = ED_2_LQI(RSSI_2_ED((INT8) mrxInfo.pFooter[0]));

        // If the CRC is OK, then spawn a task to do the further processing
        pProcessTask = NULL;
        processTaskData = (WORD) pPacket;
        if (mrxInfo.pFooter[1] & 0x80) {

            switch ((BYTE) mrxInfo.frameControlField & FRAME_TYPE_BM) {
            case FT_BEACON:
                // Get the sequence number (overwrites pPacket->framePending)
                pPacket->sequenceNumber = mrxInfo.sequenceNumber;
                pProcessTask = mrxProcessBeacon;
                break;
            case FT_DATA:
                pProcessTask = mrxProcessData;
                break;
            case FT_ACKNOWLEDGMENT:
                if (((mtxInfo.status == MTX_STATUS_TRANSMISSION_STARTED) || (mtxInfo.status == MTX_STATUS_ACK_TIMEOUT) ||
                    (mtxInfo.status == MTX_STATUS_WAITING_FOR_ACK)) && (mrxInfo.sequenceNumber == mtxInfo.pPacket->pHeader[2])) {
                    // Note: If a timeout has occurred, but not been handled by the low-priority task, it will be undone here :)
                    // We'll use an intermediate state until the mrxProcessAcknowledgment task has started, because we could already
                    // be inside the transmission task (interrupted by the FIFOP ISR). It must be done this way, because otherwise the
                    // TX engine would release the packet, and we wouldn't be able to tie this acknowledgment to a packet.
                    mtxInfo.status = MTX_STATUS_ACK_HANDLER_CREATED;
                    pProcessTask = mrxProcessAcknowledgment;
                    processTaskData = mrxInfo.frameControlField & FRAME_PENDING_BM;
                }
                break;
            case FT_MAC_COMMAND:
                // TBD: Handle security errors for MAC command frames
                pProcessTask = mrxProcessMacCommand;
                break;
            }
        }

        // If a handler function has been set, the task is created. If not, then free the acquired resources.
        if (pProcessTask) {

            // Apply filtering while scanning
            if (macInfo.state & MAC_STATE_SCAN_BM) {
                switch (macInfo.state) {
                case MAC_STATE_ACTIVE_OR_PASSIVE_SCAN:
                    createProcessTask = (pProcessTask == mrxProcessBeacon);
                    break;
                case MAC_STATE_ORPHAN_SCAN:
                    createProcessTask = ((pProcessTask == mrxProcessMacCommand) && (((MAC_COMMAND_TYPE) pMDI->pMsdu[0]) == CMD_COORDINATOR_REALIGNMENT));
                    break;
                default:
                    createProcessTask = FALSE;
                    break;
                }
            } else {
                createProcessTask = TRUE;
            }

            // Create the processing task?
            if (createProcessTask) {
                if ((pProcessTask == mrxProcessBeacon) && mpib.macRxOnWhenIdle) {
                    pPacket->flags |= MRXP_FLAG_RX_NOT_TURNED_OFF_BM;
                } else {
                    if (pProcessTask == mrxProcessAcknowledgment) mrxpReleasePacket(pPacket);
                    mrxDecrOnCounter();
                }
                mschAddTask(mrxInfo.taskNumber, MAC_TASK_PRI_HIGH, (TFPTR) pProcessTask, processTaskData);

            // If not (for instance during scanning), clean up
            } else {
                mrxDecrOnCounter();
                mrxpReleasePacket(pPacket);
                mschReleaseTask(mrxInfo.taskNumber);
            }

        // No handler function found, so just clean up
        } else {
            mrxDecrOnCounter();
            mrxpReleasePacket(pPacket);
            mschReleaseTask(mrxInfo.taskNumber);
        }

        RESET_FIFOP_THRESHOLD();
        mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;
        break;

    case MRX_STATE_DISCARD:
        halDiscardRxFifo(mrxInfo.length + 2);
        mrxDecrOnCounter();
        RESET_FIFOP_THRESHOLD();
        mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;
        break;
    }
}



#pragma vector=RFERR_VECTOR
__near_func __interrupt void RferrIsr(void) {
    switch (FSMSTATE) {
    case RF_RX_OVERFLOW:
        mrxResetRxEngine();
        break;
    case RF_TX_UNDERFLOW:
        // This should never happen
        break;
    }
    RFERRIF = 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品每日更新在线播放网址 | 欧美色精品在线视频| 老司机一区二区| 日韩激情中文字幕| 天堂精品中文字幕在线| 天天色天天操综合| 午夜国产精品影院在线观看| 天天亚洲美女在线视频| 男男视频亚洲欧美| 国产资源精品在线观看| 国产不卡在线一区| 在线观看一区二区视频| 欧美日韩和欧美的一区二区| 欧美一区国产二区| 国产视频一区二区在线观看| 国产精品久久久久四虎| 亚洲与欧洲av电影| 视频一区欧美日韩| 国内偷窥港台综合视频在线播放| 国产乱子伦一区二区三区国色天香| 久久成人精品无人区| 成人精品国产一区二区4080| 91福利国产精品| 欧美一级高清片| 国产精品嫩草久久久久| 怡红院av一区二区三区| 麻豆精品一区二区综合av| 风流少妇一区二区| 日本久久一区二区三区| 欧美成人vps| 亚洲激情网站免费观看| 久久99在线观看| 色综合久久精品| 精品国产91久久久久久久妲己| 国产精品久久国产精麻豆99网站 | 26uuu国产一区二区三区| 国产嫩草影院久久久久| 亚洲一二三区视频在线观看| 国产精品一线二线三线精华| 色综合天天视频在线观看| 精品国产1区二区| 午夜精品久久久久影视| www.亚洲人| www精品美女久久久tv| 亚洲一区在线视频观看| 成人精品免费网站| 日韩免费视频线观看| 亚洲一区二区在线免费观看视频| 国产乱子轮精品视频| 欧美一级电影网站| 亚洲一区二区不卡免费| av在线这里只有精品| 久久久亚洲精品一区二区三区| 天堂在线亚洲视频| 91福利视频久久久久| 亚洲天堂精品在线观看| 国产精品一区不卡| 精品少妇一区二区三区视频免付费 | 99精品久久免费看蜜臀剧情介绍| 精品电影一区二区三区| 青椒成人免费视频| 91麻豆精品国产91久久久更新时间| 最新欧美精品一区二区三区| 国产成人一区在线| 久久久久国产精品麻豆| 久久国产福利国产秒拍| 精品国产露脸精彩对白| 蜜桃久久av一区| 日韩欧美成人激情| 久久成人羞羞网站| 精品久久久久久久一区二区蜜臀| 免费久久精品视频| 欧美大片在线观看| 久久精品999| 国产婷婷色一区二区三区| 国产成人精品亚洲午夜麻豆| 国产精品欧美综合在线| 成人在线视频一区| 亚洲精品欧美二区三区中文字幕| 97国产精品videossex| 亚洲最大成人综合| 欧美日韩不卡视频| 美国十次综合导航| 久久综合久久久久88| 成人ar影院免费观看视频| 自拍av一区二区三区| 欧美天堂亚洲电影院在线播放| 一卡二卡欧美日韩| 91精品在线免费观看| 精品伊人久久久久7777人| 国产欧美日韩另类一区| 91在线视频官网| 午夜精品福利久久久| 精品福利一二区| 91理论电影在线观看| 亚洲五码中文字幕| 日韩欧美在线综合网| 国产不卡视频一区二区三区| 亚洲精品老司机| 欧美一区二区视频免费观看| 国产精华液一区二区三区| 一区二区高清视频在线观看| 日韩一区二区三区在线| 成人动漫av在线| 亚洲aaa精品| 欧美激情综合网| 欧美日韩精品欧美日韩精品一 | 国产精品视频一区二区三区不卡| 成人av小说网| 日韩电影在线看| 中文字幕一区二区三区四区不卡 | 欧美精品三级日韩久久| 国产精品一级在线| 香蕉成人伊视频在线观看| 国产日产精品1区| 欧美日韩国产美| 成人深夜视频在线观看| 日本成人在线视频网站| 亚洲女与黑人做爰| 国产亚洲自拍一区| 制服丝袜成人动漫| 色噜噜狠狠色综合欧洲selulu| 久久69国产一区二区蜜臀| 亚洲宅男天堂在线观看无病毒| 久久精品一区二区| 日韩天堂在线观看| 91久久精品一区二区三| 成人久久视频在线观看| 久草中文综合在线| 日日嗨av一区二区三区四区| 国产精品三级av在线播放| 精品裸体舞一区二区三区| 欧美日韩亚洲综合在线 | 精品对白一区国产伦| 69堂精品视频| 色噜噜狠狠成人中文综合| 成人中文字幕在线| 国产一区二区成人久久免费影院| 日韩精品一区第一页| 亚洲曰韩产成在线| 一区二区成人在线| 亚洲免费观看在线观看| 亚洲色图色小说| 国产精品美女久久久久久 | 亚洲精品成人精品456| 亚洲国产精品高清| 亚洲国产精品高清| 日本一区二区三区四区在线视频| 久久蜜桃av一区二区天堂| 久久久亚洲精品石原莉奈| 精品国产免费人成在线观看| 精品毛片乱码1区2区3区| 精品国一区二区三区| 久久新电视剧免费观看| 久久久99免费| 国产嫩草影院久久久久| 中文在线一区二区| 亚洲欧洲国产日本综合| 亚洲精品乱码久久久久久日本蜜臀| 综合电影一区二区三区| 亚洲精品国产一区二区精华液 | 久久久久久久精| 久久蜜桃香蕉精品一区二区三区| 国产亚洲美州欧州综合国| 亚洲国产精品传媒在线观看| 国产精品久久777777| 亚洲激情在线激情| 日本中文字幕一区二区视频 | 亚洲成av人片一区二区| 日本欧美肥老太交大片| 国产美女一区二区| 色综合久久中文字幕综合网| 精品视频资源站| 久久久综合网站| 亚洲黄色av一区| 免费成人你懂的| 99久久精品99国产精品| 欧美揉bbbbb揉bbbbb| 欧美成人性战久久| 国产精品三级在线观看| 日本不卡在线视频| 国产69精品久久久久毛片| 日本道在线观看一区二区| 欧美精品一区二区精品网| 成人欧美一区二区三区在线播放| 26uuu精品一区二区三区四区在线| 国产精品天干天干在线综合| 一区二区三区在线观看动漫| 麻豆成人免费电影| 91视频一区二区三区| 日韩精品一区二区三区四区视频| 国产精品传媒在线| 久久精品国产网站| 一本色道久久综合狠狠躁的推荐| 日韩一区二区三区在线视频| 亚洲免费高清视频在线| 久久国产精品一区二区| 欧美性色黄大片| 国产精品成人一区二区艾草 | 亚洲人成影院在线观看|