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

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

?? mac_beacon_handler.c

?? zigbee location examples
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                         CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                 *
 *      ***   + +   ***                        Beacon TX and Tracking + Related                        *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************
 * This module contains functions the functions responsible for receiving and transmitting beacons,    *
 * and related functions, such as synchronization and coordinator realignment.                         *
 *******************************************************************************************************/
#include "mac_headers.h"


//-------------------------------------------------------------------------------------------------------
// Beacon-related variables
MAC_BEACON_INFO mbcnInfo;
//-------------------------------------------------------------------------------------------------------




/*******************************************************************************************************
 *******************************************************************************************************
 **************************                 BEACON RECEPTION                  **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mbcnRxPeriodicalBeacon(void)
//
//  DESCRIPTION:
//      Creates the task that handles reception of periodical beacons (in a beacon-enabled PAN)
//-------------------------------------------------------------------------------------------------------
void mbcnRxPeriodicalBeacon(void) NEAR {
    mschAddTask(mbcnInfo.rxTaskNumber, MAC_TASK_PRI_HIGHEST, mbcnRxPeriodicalBeaconTask, NULL);
} // mbcnRxPeriodicalBeacon




//-------------------------------------------------------------------------------------------------------
//  void mbcnRxPeriodicalBeaconTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      Handles configuration of timers related to beacon reception (including starting RX and the
//      timeout to be generated when no beacon is received). It also handles beacon loss.
//
//      Note: When a beacon is received, the current mbcnRxPeriodicalBeacon callback must be cancelled,
//      and a new callback must be set up.
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mbcnRxPeriodicalBeaconTask(MAC_TASK_INFO *pTask) NEAR {

    // Beacon loss?
    if (!mbcnInfo.noBcnCountdown) {

        // Stop the search/tracking
        if (mbcnInfo.findBeacon) mrxDecrOnCounter();

        mbcnInfo.findBeacon = FALSE;
        mbcnInfo.trackBeacon = FALSE;

        // Update buffered PIB attributes
        mbcnUpdateBufferedPibAttributes();

        // Remove and release the task
        mschRemoveTask(pTask->priority, 0);
        mbcnInfo.rxTaskNumber = NO_TASK;

        // Make the call to the higher layer
        mlmeSyncLossIndication(BEACON_LOSS);

    } else {
        mrxIncrOnCounter();

        // Update buffered PIB attributes
        mbcnUpdateBufferedPibAttributes();

        // Schedule the next beacon handler, including XTAL error margin (the startup margin is cumulative when missing beacons)
        mtimSetCallback(mbcnRxPeriodicalBeacon, msupCalcBeaconInterval() - mbcnGetBeaconMargin());

        // Set the RF channel (but don't mess up scanning)
        if (!(macInfo.state & MAC_STATE_SCAN_BM)) msupSetChannel(ppib.phyCurrentChannel, FALSE);

        // Set the off-timer (the off-time is also cumulative)
        mtimSetCallback(mbcnRxBeaconTimeout, (UINT16) 2 * ((UINT16) aMaxLostBeacons - (UINT16) mbcnInfo.noBcnCountdown + (UINT16) 1) * (UINT16) mbcnGetBeaconMargin() + (UINT16) MBCN_RX_STARTUP_OVERHEAD);

        // Finish this task, but keep the reservation!
        mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM);
    }

} // mbcnRxPeriodicalBeaconTask




//-------------------------------------------------------------------------------------------------------
//  void mbcnRxBeaconTimeout(void)
//
//  DESCRIPTION:
//      Called when no beacon has been received. Decrements the counter which will give "beacon loss"
//      when it reaches zero. This timeout is set up in mbcnRxPeriodicalBeaconTask().
//-------------------------------------------------------------------------------------------------------
void mbcnRxBeaconTimeout(void) NEAR {

    // The beacon reception interval is over (mbcnRxBeacon)
    mrxDecrOnCounter();

    // Update the tracking counter...
    mbcnInfo.noBcnCountdown--;

} // mbcnRxBeaconTimeout




/*******************************************************************************************************
 *******************************************************************************************************
 **************************                BEACON TRANSMISSION                **************************
 *******************************************************************************************************
 *******************************************************************************************************/


#if MAC_OPT_FFD

//-------------------------------------------------------------------------------------------------------
//  void mbcnTxPeriodicalBeacon(void)
//
//  DESCRIPTION:
//      Creates the task that handles transmission of periodical beacons (in a beacon-enabled PAN)
//-------------------------------------------------------------------------------------------------------
void mbcnTxPeriodicalBeacon(void) NEAR {
    mschAddTask(mbcnInfo.txTaskNumber, MAC_TASK_PRI_HIGHEST, mbcnTxPeriodicalBeaconTask, NULL);
} // mbcnTxPeriodicalBeacon




//-------------------------------------------------------------------------------------------------------
//  void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task is responsible for beacon transmission, and a few other housekeeping procedures (see
//      the function comments. When finished, this task will continue in the mtxStartTransmission
//      function (the task function pointer and the state is modified.
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask) NEAR {
    static UINT32 oldBeaconInterval;
    MAC_TX_PACKET   *pPacket = mbcnInfo.pTxPacket;

    switch (pTask->state) {
    case MBCN_SET_NEXT_CALLBACK_PREPTX:

        // Set the RF channel
        msupSetChannel(ppib.phyCurrentChannel, FALSE);

        // Update buffered PIB attributes
        oldBeaconInterval = msupCalcBeaconInterval();
        mbcnUpdateBufferedPibAttributes();

        // Transmit the beacon, unless we're in scan mode (just increment the sequence number)
        if (macInfo.state & MAC_STATE_SCAN_BM) {
            mpib.macBSN++;
            mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);

        } else {

            // TBD: Set mpib.macBeaconTxTime (here?)

            // Unrequest all indirect packets, and decrement timeToLive
            miqUnrequestAll();
            miqDecrTimeToLive();

            // Create the task that later on will remove expired packets
            mschAddTask(mschReserveTask(), MAC_TASK_PRI_MEDIUM, miqExpireIndirectPacketsTask, NULL);

            // Generate the beacon frame
            mbcnPrepareBeacon(pPacket);
            pPacket->slotted = TRUE;
            pTask->state = MBCN_START_TRANSMISSION;
        }
        break;

    case MBCN_START_TRANSMISSION:

        // Remain in this state until the beacon transmission can begin
        if (T2_GET_OVERFLOW_COUNTER() == (oldBeaconInterval - MBCN_TX_STARTUP_OVERHEAD)) {

            // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
            mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);

            // Resume transmission of direct packets after the beacon transmission
            if (mtxInfo.waitForBeacon)
                mtimSetCallback(mtxResumeAfterBeaconCallback, (INT32)(pPacket->duration + MBCN_TX_STARTUP_OVERHEAD));

            // Set the RX interval (if any)
            if (mpib.macSuperframeOrder != 15) {
                if (mpib.macRxOnWhenIdle) {

                    // On:
                    mrxAutoIncrOnCounter();

                    // TBD: Move this stuff to mtxResetBosCounter?
                    // Off:
                    if (mpib.macBattLifeExt) {
                        // Soft off
                        mtimSetCallback(mrxDecrOnCounter, (INT32) pPacket->duration + mpib.macBattLifeExtPeriods + MBCN_TX_STARTUP_OVERHEAD);
                    } else {
                        // Force when the superframe is shorter than the beacon interval
                        mtimSetCallback((mpib.macBeaconOrder == mpib.macSuperframeOrder) ? mrxDecrOnCounter : mrxForceRxOff, (INT32) msupCalcSuperframeDuration() + MBCN_TX_STARTUP_OVERHEAD);
                    }
                }
            }

            // Transform this task into an mtxStartTransmission()
            pTask->state = MTX_STATE_PREPARE_PACKET;
            pTask->taskData = (WORD) pPacket;
            pTask->pTaskFunc = mtxStartTransmission;
            mtxInfo.beaconTransmissionInProgress = TRUE;
            mtxInfo.cspTimeout = CSP_TIMEOUT_RUN_FOREVER;

        // Disaster :(
        // The prepare time was too short!!! (DEBUG: Add a breakpoint here if beacons are missing)
        } else if (T2_GET_OVERFLOW_COUNTER() > oldBeaconInterval) {

            // Schedule backoff slot counter reset (which in turn schedules the next mbcnTxPeriodicalBeacon)
            mtimSetCallback(mtxResetBosCounter, MBCN_TX_STARTUP_OVERHEAD);

            // Don't transmit the beacon
            mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM | MSCH_KEEP_TASK_IN_PROGRESS_BM);
        }
        break;
    }

} // mbcnTxPeriodicalBeaconTask




//-------------------------------------------------------------------------------------------------------
//  void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD ...)
//
//  DESCRIPTION:
//      This function prepares a coordinator realignment frame. If the pDestAddr argument points to an
//      extended address, the packet will be transmitted to a single device (doing orphan scanning). If
//      NULL, the packet will be broadcasted to all devices.
//
//  ARGUMENTS:
//      MAC_TX_PACKET *pPacket
//          A pointer to the packet to be transmitted
//      ADDRESS *pDestAddr
//          A pointer to the extended address of a specific device (mlmeOrphanResponse), or NULL if the
//          coordinator realignment is to be broadcasted (mlmeStartRequest)
//      WORD shortAddr
//          The short address of the orphaned device, or 0xFFFF when the coordinator realignment is
//          broadcasted
//      BOOL securityEnable
//          TBD
//      WORD newPanId
//          The PAN ID to be used in the future
//      UINT8 logicalChannel
//          The logical channel (11-26) to be used in the future
//-------------------------------------------------------------------------------------------------------
void mbcnPrepareCoordinatorRealignment(MAC_TX_PACKET *pPacket, ADDRESS *pDestAddr, WORD shortAddr, BOOL securityEnable, WORD newPanId, UINT8 logicalChannel) NEAR {
    WORD broadcast = 0xFFFF;
    BYTE txOptions;
    UINT8 temp;
    BYTE   *pPayload;

    if (securityEnable == TRUE)
      securityEnable = FALSE;

    // TX mode
    pPacket->txMode = MTX_MODE_USE_CSMACA_BM;

    // Set the TX options
    txOptions = TX_OPT_NONE;

#if MAC_OPT_SECURITY
    if (securityEnable) txOptions |= TX_OPT_SECURITY_ENABLE;
#endif

    // Generate the packet header
    if (pDestAddr) {
        pPacket->retriesLeft = aMaxFrameRetries;
        txOptions |= TX_OPT_ACK_REQ;
        msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_EXT, mpib.macPANId, (ADDRESS   *) &aExtendedAddress, broadcast, pDestAddr, txOptions);
    } else {
        // pPacket->retriesLeft will be ignored (no ack)
        pPacket->txMode |= MTX_MODE_MAC_INTERNAL_BM;
        shortAddr = broadcast;
        msupPrepareHeader(pPacket, FT_MAC_COMMAND, SRC_ADDR_EXT | DEST_ADDR_SHORT, mpib.macPANId,(ADDRESS   *) &aExtendedAddress, broadcast, (ADDRESS   *) &broadcast, txOptions);
    }

    // Store the command type
    pPacket->commandType = CMD_COORDINATOR_REALIGNMENT;

    // Command frame identifier
    pPayload = pPacket->pPayload;
    *(pPayload++) = CMD_COORDINATOR_REALIGNMENT;

#if MAC_OPT_SECURITY
    // #bytes in frame counter + key sequence counter (0 or 5)
    temp = msecProcessSecurityCounters(pPacket, pPayload);

    // In case of frame counter overflow or missing key
    // Generate error with FAILED_SECURITY_CHECK or UNAVAILABLE_KEY

    // Increment payload pointer when counters inserted
    pPayload += temp;

    // Include command payload length and optional MIC (integrity code) length
    temp += CMD_COORDINATOR_REALIGNMENT_PAYLOAD_LENGTH + pPacket->securitySetup.micLength;

#else
    // No security material included, set MAC payload length
    temp = CMD_COORDINATOR_REALIGNMENT_PAYLOAD_LENGTH;
#endif

    // Set the packet length (four bytes of payload)
    pPacket->length = (BYTE)(pPacket->headerLength + temp + MAC_FCS_LENGTH);

    // Generate the packet payload
    *(pPayload++) = (BYTE) newPanId;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站在线| 懂色av一区二区夜夜嗨| 大尺度一区二区| 国产精品动漫网站| 91一区在线观看| 午夜精品久久久久影视| 91精品午夜视频| 国产精品456| 亚洲人成网站色在线观看| 最新中文字幕一区二区三区| 91精品国产美女浴室洗澡无遮挡| 国产一区视频导航| 亚洲一区二区欧美| 久久久久亚洲蜜桃| 色八戒一区二区三区| 日韩av电影免费观看高清完整版 | jvid福利写真一区二区三区| 亚洲欧美日韩久久| 亚洲一二三区不卡| 亚洲欧美欧美一区二区三区| 亚洲欧美一区二区三区极速播放| 一区二区欧美在线观看| 国产精品美女久久久久av爽李琼 | 国产精品电影一区二区| 亚洲精品免费一二三区| 中文字幕av一区二区三区免费看| 欧美区一区二区三区| av在线不卡观看免费观看| 色婷婷久久一区二区三区麻豆| 精品中文字幕一区二区| 亚洲成a人v欧美综合天堂下载| 国产精品美女久久久久aⅴ| 亚洲裸体xxx| 麻豆久久久久久久| 青青草原综合久久大伊人精品 | 欧美视频你懂的| 99v久久综合狠狠综合久久| 国产一区二三区| 91碰在线视频| 久久综合狠狠综合久久综合88 | 亚洲色图.com| 国产精品伦理在线| 亚洲电影在线播放| 成人精品亚洲人成在线| 欧美成人a视频| 欧美精品日日鲁夜夜添| 欧美日韩精品免费| 欧美激情综合五月色丁香| 亚洲综合激情小说| 成人少妇影院yyyy| 日韩欧美高清dvd碟片| 欧美色涩在线第一页| 在线视频你懂得一区二区三区| 色婷婷综合激情| 久久精品亚洲一区二区三区浴池| 色哟哟亚洲精品| 国产精品嫩草影院av蜜臀| 午夜不卡在线视频| 日本高清免费不卡视频| 中文字幕精品一区二区三区精品| 日韩国产在线观看一区| 日韩国产欧美一区二区三区| 91免费看`日韩一区二区| 亚洲视频在线一区| 国产成人一区在线| 成人黄色电影在线 | 天天av天天翘天天综合网色鬼国产| 国产99久久久国产精品免费看| 欧美xxxxxxxxx| 麻豆成人av在线| 制服丝袜在线91| 亚洲成人动漫一区| 欧美视频三区在线播放| 亚洲一区av在线| 欧美三级日韩三级| 亚洲大型综合色站| 欧美亚洲国产bt| 午夜久久久影院| 欧美日韩国产系列| 欧美大片顶级少妇| 国产精品99精品久久免费| 久久这里只有精品视频网| 国内精品国产成人国产三级粉色| 国产不卡视频在线观看| 日本一区二区免费在线观看视频| 亚洲大型综合色站| 欧美挠脚心视频网站| 天堂va蜜桃一区二区三区| 欧美日韩国产综合久久| 五月天欧美精品| 69av一区二区三区| 国产老肥熟一区二区三区| 国产亚洲欧美中文| 成人国产视频在线观看| 一区二区在线观看不卡| 色婷婷国产精品久久包臀 | 欧美一区二区三区四区高清| 青青草原综合久久大伊人精品优势| 日韩一区二区在线观看| 亚洲黄色性网站| 9191久久久久久久久久久| 久久精品国产99| 欧美一区二区三区视频免费 | 91女人视频在线观看| 亚洲线精品一区二区三区八戒| 日本一区二区成人| 色屁屁一区二区| 五月激情综合色| 国产日产欧美一区二区三区 | 欧美bbbbb| 久久精品视频免费| 欧洲在线/亚洲| 国产麻豆精品95视频| 日韩美女视频一区| 欧美一级国产精品| 97久久精品人人澡人人爽| 亚洲国产乱码最新视频 | 一区二区三区高清在线| 日韩精品中文字幕一区二区三区| a亚洲天堂av| 青青草原综合久久大伊人精品 | 91视频观看免费| 秋霞电影网一区二区| 中文字幕亚洲一区二区av在线| 欧美群妇大交群的观看方式| 成人国产精品免费网站| 日产欧产美韩系列久久99| 国产精品每日更新在线播放网址| 欧美高清视频一二三区| 99国产精品久久久久| 麻豆精品蜜桃视频网站| 亚洲精品日产精品乱码不卡| 久久久欧美精品sm网站| 欧美一区二区高清| 欧美性受极品xxxx喷水| 成人午夜在线播放| 激情文学综合网| 丝袜美腿亚洲一区| 亚洲乱码精品一二三四区日韩在线| 精品欧美乱码久久久久久1区2区| 欧美日韩精品一区二区| 91影院在线观看| 成人久久久精品乱码一区二区三区| 麻豆免费精品视频| 日韩av一区二区在线影视| 亚洲综合图片区| 亚洲一区二区欧美| 亚洲在线中文字幕| 一区二区三区四区乱视频| 国产精品久久久久一区二区三区共| 26uuu精品一区二区在线观看| 日韩一卡二卡三卡四卡| 欧美日韩国产免费一区二区 | 一本大道av伊人久久综合| 床上的激情91.| 国产69精品久久久久毛片| 国产美女视频91| 国产精品亚洲午夜一区二区三区 | 欧美色网一区二区| 在线观看精品一区| 色婷婷精品久久二区二区蜜臀av| 色94色欧美sute亚洲线路一久 | 欧美一区二区三区四区高清| 欧美精品欧美精品系列| 91精品国产综合久久香蕉麻豆| 欧美一区二区精美| 日韩精品一区二区三区视频播放| 日韩久久精品一区| 精品国产麻豆免费人成网站| 99久久久免费精品国产一区二区| 97久久精品人人澡人人爽| 欧美无乱码久久久免费午夜一区| 欧美日本高清视频在线观看| 欧美日韩美少妇| 国产午夜一区二区三区| 国产欧美日产一区| 一区二区三区在线视频观看| 午夜欧美在线一二页| 免费三级欧美电影| 国产精品资源在线看| av电影在线观看完整版一区二区| 欧美在线观看一二区| 日韩一区二区电影| 欧美韩日一区二区三区四区| 一区二区三区日韩精品视频| 蜜桃精品在线观看| 成人教育av在线| 欧美二区乱c少妇| 国产欧美日韩久久| 亚洲成a人片在线不卡一二三区| 美日韩黄色大片| 99久久精品免费| 日韩精品自拍偷拍| 亚洲欧美一区二区视频| 久久超级碰视频| 在线观看成人小视频| 久久久亚洲国产美女国产盗摄 | 亚洲成av人片在线观看无码| 看电影不卡的网站| 欧洲国内综合视频|