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

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

?? mac_beacon_handler.c

?? zigbee location examples
?? C
?? 第 1 頁 / 共 2 頁
字號:
    *(pPayload++) = (BYTE) ((newPanId & 0xFF00) >> 8);
    *(pPayload++) = (BYTE) mpib.macShortAddress;
    *(pPayload++) = (BYTE) ((mpib.macShortAddress & 0xFF00) >> 8);
    *(pPayload++) = logicalChannel;
    *(pPayload++) = (BYTE) shortAddr;
    *(pPayload)   = (BYTE) ((shortAddr & 0xFF00) >> 8);

    // Calculate the packet duration (including ack. and IFS)
    pPacket->duration = msupCalcPacketDuration(pPacket->length, (BYTE)(txOptions & TX_OPT_ACK_REQ));

} // mbcnPrepareCoordinatorRealignment




//-------------------------------------------------------------------------------------------------------
//  void mbcnPrepareBeacon(void)
//
//  DESCRIPTION:
//      Prepares a valid beacon frame which can be transmitted using the TX engine.
//
//  ARGUMENTS:
//      MAC_TX_PACKET *pPacket
//          A pointer to the packet to be transmitted
//-------------------------------------------------------------------------------------------------------
void mbcnPrepareBeacon(MAC_TX_PACKET *pPacket) NEAR {
    BYTE srcAddrMode;
    WORD superframeSpec;
    BYTE   *pMacBeaconPayload;
    BYTE pendAddrSpec;
    MAC_TX_PACKET   *pIndirectPacket;
    UINT8 n, pendShortAddrCount, pendExtAddrCount;
    BYTE   *pPayload = pPacket->pPayload;

    // TX mode
    pPacket->txMode = 0;
    // pPacket->retriesLeft will be ignored (no ack)

    // Header
    srcAddrMode = (mpib.macShortAddress < 0xFFFE) ? SRC_ADDR_SHORT : SRC_ADDR_EXT;
    msupPrepareHeader(pPacket, FT_BEACON, srcAddrMode, mpib.macPANId, ((srcAddrMode == SRC_ADDR_SHORT) ? (ADDRESS  *)&mpib.macShortAddress : (ADDRESS  *) &aExtendedAddress), 0, NULL, (BYTE)(GET_MF(MF_BEACON_SECURITY)));

    // Superframe specification
    superframeSpec = (mpib.macBeaconOrder << SS_BEACON_ORDER_IDX) |
                     (mpib.macSuperframeOrder << SS_SUPERFRAME_ORDER_IDX) |
                     (15 << SS_FINAL_CAP_SLOT_IDX) |
                     (mpib.macBattLifeExt ? SS_BATT_LIFE_EXT_BM : 0) |
                     (GET_MF(MF_PAN_COORDINATOR) ? SS_PAN_COORDINATOR_BM : 0) |
                     (mpib.macAssociationPermit ? SS_ASSOCIATION_PERMIT_BM : 0);
    *((WORD   *) pPayload) = superframeSpec;
    pPayload += 2;

    // GTS list (not implemented)
    *(pPayload++) = 0x00;

    // Pending address list

    // Count the number of pending addresses to get the packet length
    n = miqInfo.firstIndirectPacket;
    pendShortAddrCount = 0;
    pendExtAddrCount = 0;
    while ((n != NO_PACKET) && ((pendShortAddrCount + pendExtAddrCount) < MAX_PENDING_LIST_SIZE)) {
        pIndirectPacket = &pMtxPacketPool[n];
        if (pIndirectPacket->timeToLive > 0) {
            if (pIndirectPacket->isFirstPacket) {
                if ((pIndirectPacket->pHeader[1] & DEST_ADDR_BM) == DEST_ADDR_EXT) {
                    pendExtAddrCount++;
                } else {
                    pendShortAddrCount++;
                }
            }
        }
        n = pIndirectPacket->nextPacket;
    }

    // Pending address specification (indicates the number of short and extended addresses)
    pendAddrSpec = pendShortAddrCount + (pendExtAddrCount << 4);
    *(pPayload++) = pendAddrSpec;

    // Address list
    if (pendAddrSpec) {

        // Short addresses
        n = miqInfo.firstIndirectPacket;
        do {
            pIndirectPacket = &pMtxPacketPool[n];
            if (pIndirectPacket->isFirstPacket && (pIndirectPacket->timeToLive > 0) && ((pIndirectPacket->pHeader[1] & DEST_ADDR_BM) == DEST_ADDR_SHORT)) {

                // Copy the packet destination address
                memcpy(pPayload, pIndirectPacket->pHeader + 5, 2);
                pendShortAddrCount--;
                pPayload += 2;
            }
            n = pIndirectPacket->nextPacket;
        } while (pendShortAddrCount);

        // Extended addresses
        n = miqInfo.firstIndirectPacket;
        do {
            pIndirectPacket = &pMtxPacketPool[n];
            if (pIndirectPacket->isFirstPacket && (pIndirectPacket->timeToLive > 0) && ((pIndirectPacket->pHeader[1] & DEST_ADDR_BM) == DEST_ADDR_EXT)) {

                // Copy the packet destination address
                memcpy(pPayload, pIndirectPacket->pHeader + 5, 8);
                pendExtAddrCount--;
                pPayload += 8;
            }
            n = pIndirectPacket->nextPacket;
        } while (pendExtAddrCount);
    }

    // Beacon payload (safe access to mpib.pMacBeaconPayload)
    DISABLE_GLOBAL_INT();
    pMacBeaconPayload = mpib.pMacBeaconPayload;
    ENABLE_GLOBAL_INT();
    memcpy(pPayload, pMacBeaconPayload, mpib.macBeaconPayloadLength);
    pPayload += mpib.macBeaconPayloadLength;

    // Set the total packet length
    pPacket->length = pPacket->headerLength + (pPayload - pPacket->pPayload) + MAC_FCS_LENGTH;

    // Calculate the packet duration
    pPacket->duration = msupCalcPacketDuration(pPacket->length, pPacket->txOptions & TX_OPT_ACK_REQ);

} // mbcnPrepareBeacon

#endif  // MAC_OPT_FFD


/*******************************************************************************************************
 *******************************************************************************************************
 **************************                 UTILITY FUNCTIONS                 **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mbcnGetBeaconMargin(void)
//
//  DESCRIPTION:
//      Because of the crystal inaccuracy, a margin must be added before the beacon that will
//      be received. The result is that:
//          - RX must be turned on a short while before the beacon is expected to be received.
//          - TX must stop before this margin is reached
//
//      The Excel worksheet called "Beacon reception margin.xls" can be used to calculate these
//      constants.
//
//  RETURN VALUE:
//      UINT8
//          The margin as a number of backoff periods
//-------------------------------------------------------------------------------------------------------
UINT8 mbcnGetBeaconMargin(void) NEAR {
    switch (mpib.macBeaconOrder) {
        case 7:  return 2;
        case 8:  return 3;
        case 9:  return 5;
        case 10: return 10;
        case 11: return 20;
        case 12: return 40;
        case 13: return 79;
        case 14: return 158;
        default: return 1;
    }

} // mbcnGetBeaconMargin




//-------------------------------------------------------------------------------------------------------
//  void mbcnUpdateBufferedAttributes(void)
//
//  DESCRIPTION:
//      Updates category 4 attributes (see mlmeSetRequest()) before the beacon is received or
//      transmitted. Only attributes indicated in the update mask will be changed.
//-------------------------------------------------------------------------------------------------------
void mbcnUpdateBufferedPibAttributes(void) NEAR {
    DISABLE_GLOBAL_INT();

    if (macInfo.pibTempBuffer.updateMask & MPIB_UPD_BATT_LIFE_EXT_BM)    mpib.macBattLifeExt = macInfo.pibTempBuffer.macBattLifeExt;
    if (macInfo.pibTempBuffer.updateMask & MPIB_UPD_BEACON_ORDER_BM)     mpib.macBeaconOrder = macInfo.pibTempBuffer.macBeaconOrder;
    if (macInfo.pibTempBuffer.updateMask & MPIB_UPD_RX_ON_WHEN_IDLE_BM)  mpib.macRxOnWhenIdle = macInfo.pibTempBuffer.macRxOnWhenIdle;
    if (macInfo.pibTempBuffer.updateMask & MPIB_UPD_SUPERFRAME_ORDER_BM) mpib.macSuperframeOrder = macInfo.pibTempBuffer.macSuperframeOrder;

    macInfo.pibTempBuffer.updateMask = 0x00;
    ENABLE_GLOBAL_INT();
} // mbcnUpdateBufferedPibAttributes




//-------------------------------------------------------------------------------------------------------
//  void mbcnHandleBeaconModeChange(BOOL wasNonBeacon)
//
//  DESCRIPTION:
//      Handles the change from a beacon network to a non-beacon network and vice versa.
//
//  ARGUMENTS:
//      BOOL wasNonBeacon
//          Indicates the earlier state (BEFORE the mpib.macBeaconOrder variable was updated)
//-------------------------------------------------------------------------------------------------------
void mbcnHandleBeaconModeChange(BOOL wasNonBeacon) NEAR {

    // Handle non-beacon -> beacon network
    if (wasNonBeacon && (mpib.macBeaconOrder < 15)) {

        // Send backoff slot synchronous acknowledgments
        MDMCTRL1H |= 0x80;

        // "RX on when idle" should only be active in the superframe (set up by the beacon transmission task
        if (mpib.macRxOnWhenIdle) mrxDecrOnCounter();

#if MAC_OPT_FFD
        // The beacon transmission task will handle indirect packet expiration
        mtimCancelCallback(mbcnExpirePacketsNonBeacon);
#endif

    // Handle beacon -> non-beacon network
    } else if (!wasNonBeacon && (mpib.macBeaconOrder == 15)) {

        // Send acknowledgments ASAP
        MDMCTRL1H &= ~0x80;

        // Update buffered PIB attributes before the buffering mechanism is disabled
        macInfo.pibTempBuffer.updateMask &= MPIB_UPD_BATT_LIFE_EXT_BM | MPIB_UPD_RX_ON_WHEN_IDLE_BM;
        mbcnUpdateBufferedPibAttributes();

        // "RX on when idle" is always valid from now on
        if (mpib.macRxOnWhenIdle) mrxIncrOnCounter();

        // Cancel beacon transmission and reception, and turn on indirect packet expiration for non-beacon networks
#if MAC_OPT_FFD
        mtimCancelCallback(mbcnTxPeriodicalBeacon);
#endif
        mtimCancelCallback(mbcnRxPeriodicalBeacon);
#if MAC_OPT_FFD
        mtimSetCallback(mbcnExpirePacketsNonBeacon, (INT32)(aBaseSuperframeDuration / aUnitBackoffPeriod));
#endif
    }

} // mbcnHandleBeaconModeChange




/*******************************************************************************************************
 *******************************************************************************************************
 **************************                  BEACON TRACKING                  **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mbcnSyncToBeacons(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task starts synchronization to beacons
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mbcnSyncToBeacons(MAC_TASK_INFO *pTask) NEAR {

    // Reserve the beacon tracking task if necessary
    if (mbcnInfo.rxTaskNumber == NO_TASK) mbcnInfo.rxTaskNumber = mschReserveTask();

    // Set track status variables
    mbcnInfo.findBeacon = TRUE;
    mbcnInfo.noBcnCountdown = aMaxLostBeacons;
    mbcnInfo.trackBeacon = (BOOL) LOBYTE(pTask->taskData);

    // Switch radio channel if necessary
    msupSetChannel(HIBYTE(pTask->taskData), TRUE);
    mrxIncrOnCounter();

    // Start receiving beacons
    mbcnRxPeriodicalBeacon();

    // Remove this task
    mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);

} // mbcnSyncToBeacons




/*******************************************************************************************************
 *******************************************************************************************************
 **************************          NON-BEACON INDIRECT EXPIRATION           **************************
 *******************************************************************************************************
 *******************************************************************************************************/



#if MAC_OPT_FFD

//-------------------------------------------------------------------------------------------------------
//  void mbcnExpirePacketsNonBeacon(void)
//
//  DESCRIPTION:
//      Schedules the next expiration "tick", and starts the expiration task
//-------------------------------------------------------------------------------------------------------
void mbcnExpirePacketsNonBeacon(void) NEAR {

    // Schedule the next round (48 backoff periods from now)
    mtimSetCallback(mbcnExpirePacketsNonBeacon, (INT32)(aBaseSuperframeDuration / aUnitBackoffPeriod));

    // Create the task that will expire old packets
    mschAddTask(mschReserveTask(), MAC_TASK_PRI_MEDIUM, mbcnExpirePacketsNonBeaconTask, 0);

} // mbcnExpirePacketsNonBeacon




//-------------------------------------------------------------------------------------------------------
//  void mbcnExpirePacketsNonBeaconTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      Expires indirect packets in a non-beacon network by decrementing the "time to live" counter, and
//      then transforming the task into an miqExpireIndirectPacketsTask().
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mbcnExpirePacketsNonBeaconTask(MAC_TASK_INFO *pTask) NEAR {

    // Decrement "time to live"
    miqDecrTimeToLive();

    // Continue in the miqExpireIndirectPacketsTask() function
    pTask->pTaskFunc = miqExpireIndirectPacketsTask;

} // mbcnExpirePacketsNonBeaconTask


#endif // MAC_OPT_FFD

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av网址在线| 五月综合激情日本mⅴ| 精品动漫一区二区三区在线观看| 91精品91久久久中77777| av欧美精品.com| 99re6这里只有精品视频在线观看| 丁香另类激情小说| 成人三级在线视频| 99久久99久久精品免费看蜜桃| 成人福利视频网站| 91色在线porny| 欧美色爱综合网| 91精品国产日韩91久久久久久| 日韩色在线观看| 精品成人佐山爱一区二区| 久久综合色综合88| 国产精品久久久久aaaa樱花 | 久久久精品免费免费| 国产婷婷色一区二区三区在线| 国产区在线观看成人精品| 国产精品久久久久久久第一福利| 亚洲国产美女搞黄色| 美女www一区二区| 成人av网站免费| 欧美在线免费播放| 精品久久久久久最新网址| 欧美国产1区2区| 日韩av在线播放中文字幕| 国产麻豆精品久久一二三| 色欧美88888久久久久久影院| 欧美日韩mp4| 日本一二三不卡| 丝袜亚洲另类欧美综合| 国产精品1区二区.| 在线看一区二区| 久久网这里都是精品| 一区二区三区四区中文字幕| 欧美a级一区二区| 91理论电影在线观看| 91麻豆精品国产自产在线观看一区 | 日韩在线a电影| av亚洲产国偷v产偷v自拍| 欧美乱妇15p| 中文字幕五月欧美| 久久成人免费电影| 欧美影片第一页| 日本一区二区成人| 麻豆精品一区二区av白丝在线| zzijzzij亚洲日本少妇熟睡| 日韩一级视频免费观看在线| 中文字幕一区二区三区在线观看| 久久精品久久久精品美女| 日本久久电影网| 国产精品女人毛片| 国内精品伊人久久久久av影院 | 天堂午夜影视日韩欧美一区二区| 成人午夜伦理影院| 亚洲精品一区二区三区蜜桃下载| 亚洲一区二区五区| 91视频免费看| 综合久久国产九一剧情麻豆| 国产福利视频一区二区三区| 欧美一级片在线看| 日韩一区精品字幕| 欧美精品aⅴ在线视频| 一区二区三区在线影院| 99re在线精品| 日韩伦理电影网| av电影天堂一区二区在线观看| 国产亚洲午夜高清国产拍精品| 蜜桃一区二区三区在线| 91精品国产色综合久久久蜜香臀| 午夜精品123| 欧美剧在线免费观看网站| 亚洲电影在线播放| 欧美日本乱大交xxxxx| 丝袜美腿一区二区三区| 91精选在线观看| 久久精品国产第一区二区三区| 欧美一区二区三区视频在线| 视频在线观看一区| 精品国产一区二区在线观看| 久久99精品国产.久久久久久| 久久免费电影网| 岛国精品一区二区| 一区二区三区欧美激情| 欧美日韩精品是欧美日韩精品| 午夜精品福利在线| 精品国产一区二区三区久久久蜜月 | 欧美精品精品一区| 日韩高清在线观看| 国产亚洲欧美日韩日本| 99精品欧美一区二区三区小说| 亚洲欧美日韩国产一区二区三区| 欧洲一区在线电影| 蜜臀99久久精品久久久久久软件| 久久先锋影音av鲁色资源网| av午夜一区麻豆| 三级久久三级久久久| 精品毛片乱码1区2区3区| 高清不卡在线观看| 亚洲国产毛片aaaaa无费看| 精品三级在线观看| www.日韩大片| 免费成人小视频| 亚洲色图欧美在线| 欧美一级欧美一级在线播放| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | www.亚洲色图| 免费高清视频精品| 亚洲精品免费在线观看| 欧美一区二区成人| av一二三不卡影片| 精一区二区三区| 亚洲高清视频的网址| 久久九九久久九九| 欧美区一区二区三区| 国产成人免费视频一区| 午夜精品久久久久影视| 日本一二三四高清不卡| 日韩一区二区三区免费观看| 成年人午夜久久久| 久久av资源站| 午夜欧美大尺度福利影院在线看| 国产免费成人在线视频| 日韩一区二区三区在线| 91成人在线精品| 成av人片一区二区| 精品在线你懂的| 激情综合色综合久久| 午夜视频在线观看一区二区三区| 亚洲国产精品传媒在线观看| 日韩视频在线永久播放| 欧美亚洲丝袜传媒另类| 色欧美88888久久久久久影院| 福利一区二区在线观看| 黄色日韩网站视频| 日本成人在线一区| 天堂在线一区二区| 亚洲成av人片| 亚洲成人av资源| 亚洲一区二区三区不卡国产欧美| 亚洲色图另类专区| 亚洲美女免费视频| 亚洲另类春色国产| 一区二区三区中文在线观看| 亚洲欧美色一区| 一卡二卡欧美日韩| 亚洲一区欧美一区| 亚洲自拍偷拍综合| 亚洲人午夜精品天堂一二香蕉| 中文一区在线播放| 亚洲欧美综合色| 成人免费小视频| 一区av在线播放| 亚洲国产精品一区二区www| 亚洲国产精品久久不卡毛片| 亚洲一卡二卡三卡四卡| 五月婷婷久久丁香| 日本美女视频一区二区| 美女在线观看视频一区二区| 久久91精品久久久久久秒播| 国产一区二区三区黄视频 | 欧美一二区视频| 国产亚洲欧美日韩在线一区| 欧美国产视频在线| 亚洲婷婷国产精品电影人久久| 亚洲综合色视频| 日本免费新一区视频| 国产乱码精品一区二区三区av| 国产精品一二二区| 91亚洲精品乱码久久久久久蜜桃 | 精品一区二区在线观看| 国产高清在线观看免费不卡| 白白色 亚洲乱淫| 欧美丝袜第三区| 日韩天堂在线观看| 中文在线资源观看网站视频免费不卡 | 亚洲四区在线观看| 亚洲成av人综合在线观看| 六月婷婷色综合| 成人国产精品免费观看视频| 欧美在线观看视频一区二区| 欧美成人性战久久| 亚洲精品一二三区| 精品夜夜嗨av一区二区三区| 91在线观看美女| 日韩欧美高清一区| 亚洲免费视频中文字幕| 看电视剧不卡顿的网站| 99久久综合国产精品| 日韩一区二区精品| 成人免费在线视频| 国产麻豆精品在线观看| 欧美日韩三级视频| 国产精品另类一区| 久久97超碰国产精品超碰| 欧美偷拍一区二区| 日本一区二区三区电影| 日本视频免费一区|