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

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

?? mac_indirect_polling.c

?? zigbee location examples
?? C
字號:
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                         CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                 *
 *      ***   + +   ***                       Indirect Packet Polling + Related                        *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************
 * This module contains functions related to indirect packet polling, including packet formatting and  *
 * timeouts.                                                                                           *
 *******************************************************************************************************/
#include <mac_headers.h>


/*******************************************************************************************************
 *******************************************************************************************************
 **************************             COMMON POLLING FUNCTIONS              **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mipTransmitAutoDataRequest(void)
//
//  DESCRIPTION:
//      Tranmits an automatic data request when the address of the device has appeared in the beacon
//      pending list, and mpib.macAutoRequest has been set (the default value is TRUE). This kind of
//      data request does not make any callbacks to the higher layer (mlmePollConfirm).
//-------------------------------------------------------------------------------------------------------
ROOT void mipTransmitAutoDataRequest(void) {
    MAC_ENUM result;
    BOOL securityEnable = FALSE; // TBD...

    // Switch to automatic polling mode
    if (!macSetState(MAC_STATE_TX_AUTO_DATA_REQUEST)) return;

    // Try to transmit the data request
    if (mpib.macCoordShortAddress < 0xFFFE) {
        result = mipTransmitDataRequest(AM_SHORT_16, mpib.macPANId, (ADDRESS   *) &mpib.macCoordShortAddress, securityEnable);
    } else {
        result = mipTransmitDataRequest(AM_EXTENDED_64, mpib.macPANId, (ADDRESS   *) mpib.pMacCoordExtendedAddress, securityEnable);
    }

    // Clean up if it failed
    if (result != SUCCESS) macSetState(MAC_STATE_DEFAULT);

} // mipTransmitAutoDataRequest




//-------------------------------------------------------------------------------------------------------
//  MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL ...)
//
//  DESCRIPTION:
//      Transmits a data request packet.
//
//  ARGUMENTS:
//      BYTE coordAddrMode
//          The address mode used by the coordinator
//      WORD coordPANId
//          The PAN ID used by the coordinator
//      ADDRESS *pCoordAddress
//          A pointer to the coordinator address (taken from the MAC PIB, short or extended)
//      BOOL securityEnable
//          TBD...
//
//  RETURN VALUE:
//      MAC_ENUM
//          SUCCESS                 No error (the transmission was initiated)
//          RESOURCE_SHORTAGE       TX packet or task not available
//          UNAVAILABLE_KEY         No key
//          FAILED_SECURITY_CHECK   Failed security check
//-------------------------------------------------------------------------------------------------------
ROOT MAC_ENUM mipTransmitDataRequest(BYTE coordAddrMode, WORD coordPANId, ADDRESS *pCoordAddress, BOOL securityEnable) {
    MAC_TX_PACKET   *pPacket;
    UINT8           taskNumber;
    BYTE            txOptions;
    UINT8           temp;
    BYTE            *pPayload;

    // Try to reserve a packet
    pPacket = mtxpReservePacket();
    if (!pPacket) return RESOURCE_SHORTAGE;

    // Try to reserve a transmission task
    taskNumber = mschReserveTask();
    if (taskNumber == NO_TASK) {
        mtxpReleasePacket(pPacket);
        return RESOURCE_SHORTAGE;
    }

    // Set TX options
    txOptions = TX_OPT_ACK_REQ;
#if MAC_OPT_SECURITY
    if (securityEnable) {
        txOptions |= TX_OPT_SECURITY_ENABLE;
    }
#endif

    // TX mode
    pPacket->txMode = MTX_MODE_USE_CSMACA_BM;
    pPacket->retriesLeft = aMaxFrameRetries;

    // Generate the packet header (and find security material, if enabled)
    if (mpib.macShortAddress >= 0xFFFE) {
        msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_EXT, mpib.macPANId, (ADDRESS  *) &aExtendedAddress, coordPANId, pCoordAddress, (BYTE)txOptions);
    } else {
        msupPrepareHeader(pPacket, FT_MAC_COMMAND, (coordAddrMode << 2) | SRC_ADDR_SHORT, mpib.macPANId, (ADDRESS  *) &mpib.macShortAddress, coordPANId, pCoordAddress, txOptions);
    }

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

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

#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
    if (pPacket->securitySuite >= 8) {
        mtxpReleasePacket(pPacket);
        mschReleaseTask(taskNumber);
        return pPacket->securitySuite;
    }

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

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

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

    // Set the packet length
    pPacket->length = pPacket->headerLength + temp + MAC_FCS_LENGTH;

    // No further packet payload

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

    // Initiate the transmission
    mschAddTask(taskNumber, MAC_TASK_PRI_LOW, mtxScheduleTransmission, (WORD) pPacket);

    return SUCCESS;

} // mipTransmitDataRequest




/*******************************************************************************************************
 *******************************************************************************************************
 **************************               DATA REQUEST TIMEOUT                **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  void mipDataRequestTimeoutTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task is run when no valid response has been received after a data request. The task makes
//      the callback to the higher layer.
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mipDataRequestTimeoutTask(MAC_TASK_INFO *pTask) NEAR {
    MAC_STATE_TYPE oldState;

    // The data request has failed, so stop listening
    mrxDecrOnCounter();
    oldState = macInfo.state;
    macSetState(MAC_STATE_DEFAULT);

    // Remove the task
    mschRemoveTask(pTask->priority, 0);

    // Notify the higher layer...
    switch (oldState) {
    case MAC_STATE_MANUAL_DATA_REQUEST_SENT: mlmePollConfirm(NO_DATA); break;
    case MAC_STATE_ASSOC_DATA_REQUEST_SENT:  mlmeAssociateConfirm(0xFFFF, NO_DATA); break;
    default: break;
    }

} // mipDataRequestTimeoutTask




//-------------------------------------------------------------------------------------------------------
//  void mipDataRequestTimeout(void)
//
//  DESCRIPTION:
//      This timeout will occur when no response has been received after a data request.
//-------------------------------------------------------------------------------------------------------
void mipDataRequestTimeout(void) NEAR {
    if (!mschAddTask(mschReserveTask(), MAC_TASK_PRI_HIGH, mipDataRequestTimeoutTask, 0)) {
        mtimSetCallback(mipDataRequestTimeout, 10);
    }
} // mipDataRequestTimeout




//-------------------------------------------------------------------------------------------------------
//  MAC_STATE_TYPE mipCancelDataRequestTimeout(void)
//
//  DESCRIPTION:
//      Cancels the data request timeout. This function should be used when a valid or invalid "indirect
//      packet" has been received. The MAC state is set back to the default state.
//
//  RETURN VALUE:
//      MAC_STATE_TYPE
//          The MAC state before resetting it to MAC_STATE_DEFAULT
//-------------------------------------------------------------------------------------------------------
MAC_STATE_TYPE mipCancelDataRequestTimeout(void) NEAR {
    MAC_STATE_TYPE macState = MAC_STATE_DEFAULT;

    if (mtimCancelCallback(mipDataRequestTimeout)) {
        mrxDecrOnCounter();
        DISABLE_GLOBAL_INT();
        macState = macInfo.state;
        macSetState(MAC_STATE_DEFAULT);
        ENABLE_GLOBAL_INT();
    }
    return macState;
} // mipCancelDataRequestTimeout




/*******************************************************************************************************
 *******************************************************************************************************
 **************************           ASSOCIATION RESPONSE POLLING            **************************
 *******************************************************************************************************
 *******************************************************************************************************/




//-------------------------------------------------------------------------------------------------------
//  MAC_ENUM mipTransmitAssocDataRequest(void)
//
//  DESCRIPTION:
//      Tranmits an the data request packet that follows a successful association request packet. This
//      packet is transmitted when the data is indicated in the beacon pending list, or the response
//      time has passed.
//
//  RETURN VALUE:
//      BOOL
//          The association request was transmitted
//-------------------------------------------------------------------------------------------------------
ROOT MAC_ENUM mipTransmitAssocDataRequest(void) {
    BOOL securityEnable;

#if MAC_OPT_SECURITY
    securityEnable = GET_MF(MF_SECURE_ASSOC);
#else
    securityEnable = FALSE;
#endif

    // Set automatic polling mode
    if (!macSetState(MAC_STATE_TX_ASSOC_DATA_REQUEST)) return SUCCESS;

    // Transmit the data request
    if (mpib.macCoordShortAddress < 0xFFFE) {
        return mipTransmitDataRequest(AM_SHORT_16, mpib.macPANId, (ADDRESS   *) &mpib.macCoordShortAddress, securityEnable);
    } else {
        return mipTransmitDataRequest(AM_EXTENDED_64, mpib.macPANId, (ADDRESS   *) mpib.pMacCoordExtendedAddress, securityEnable);
    }

} // mipTransmitAssocDataRequest




//-------------------------------------------------------------------------------------------------------
//  void mipPollAssociateResponseTask(MAC_TASK_INFO *pTask)
//
//  DESCRIPTION:
//      This task makes sure that a data request is transmitted in the association procedure. If the
//      transmission couldn't be initiated, this task will be rescheduled.
//
//  TASK DATA:
//      0
//-------------------------------------------------------------------------------------------------------
void mipPollAssociateResponseTask(MAC_TASK_INFO   *pTask) NEAR {

    // We should not wait for the association response to be indicated in the beacon pending list, because there's no
    // guarantee that it will ever appear there (the coordinator could for instance be out of resources when the
    // association request is received)! If the association response is not polled, the MAC state machine (macInfo.state)
    // will lock up (and probably the higher layer too).
    if (macInfo.state == MAC_STATE_ASSOC_REQUEST_SENT) {
        if (mipTransmitAssocDataRequest() == RESOURCE_SHORTAGE) {

            // Reschedule this task if there was a lack of resources (TX packet or task)
            mschRescheduleTask(pTask, 0);
            return;
        }
    }

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

} // mipPollAssociateResponse




//-------------------------------------------------------------------------------------------------------
//  void mipPollAssociateResponse(void)
//
//  DESCRIPTION:
//      This timeout function creates the task responsible for polling the association response.
//-------------------------------------------------------------------------------------------------------
void mipPollAssociateResponse(void) NEAR {
    if (!mschAddTask(mschReserveTask(), MAC_TASK_PRI_LOW, mipPollAssociateResponseTask, 0)) {
        mtimSetCallback(mipPollAssociateResponse, MIP_RETRY_ASSOCIATION_RESPONSE_POLLING_TIMEOUT);
    }
} // mipPollAssociateResponse

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产有无不卡 | 亚洲蜜臀av乱码久久精品| 在线精品视频免费观看| 极品少妇xxxx精品少妇| 亚洲一区日韩精品中文字幕| 日本一区二区三级电影在线观看| 欧美四级电影在线观看| 成人高清在线视频| 久久99久久久欧美国产| 亚洲福利国产精品| 亚洲精品欧美综合四区| 国产色婷婷亚洲99精品小说| 欧美肥妇free| 91久久香蕉国产日韩欧美9色| 国产成人亚洲综合色影视| 日韩电影免费在线观看网站| 一区二区三区国产豹纹内裤在线| 久久九九久精品国产免费直播| 欧美精品成人一区二区三区四区| 色综合久久久网| 国产精品一区专区| 国产在线一区二区综合免费视频| 午夜精品福利一区二区三区蜜桃| 亚洲欧美一区二区久久| 国产精品―色哟哟| 久久久久青草大香线综合精品| 欧美一区二区三区免费观看视频| 在线精品亚洲一区二区不卡| 99热这里都是精品| 99视频在线精品| 91精品一区二区三区久久久久久| 色综合欧美在线视频区| 成人听书哪个软件好| 国产福利一区二区| 国产成人h网站| 国产露脸91国语对白| 国产一区在线视频| 精品亚洲成av人在线观看| 麻豆91精品视频| 美女国产一区二区三区| 久久国产精品免费| 久久狠狠亚洲综合| 国内精品第一页| 精品一区二区三区不卡 | av在线播放不卡| 成人污污视频在线观看| 国产成人av影院| 岛国av在线一区| 成人性生交大片免费看视频在线| 国产精品一区二区黑丝| 国产电影一区在线| 成人黄色免费短视频| 99v久久综合狠狠综合久久| 99久久精品情趣| 99re这里只有精品6| 色综合天天综合网天天看片| 91成人国产精品| 欧美日本高清视频在线观看| 91精品国产免费| 精品第一国产综合精品aⅴ| 久久综合九色综合欧美98| 久久综合国产精品| 中文字幕av在线一区二区三区| 亚洲欧洲日产国码二区| 亚洲另类一区二区| 三级欧美在线一区| 精品一区二区免费在线观看| 国产成人丝袜美腿| 93久久精品日日躁夜夜躁欧美| 色琪琪一区二区三区亚洲区| 制服.丝袜.亚洲.中文.综合| 久久久综合视频| 亚洲乱码国产乱码精品精可以看 | 亚洲成a人v欧美综合天堂下载| 日韩在线一区二区三区| 国产精品资源在线观看| 99re热这里只有精品视频| 欧美日韩一二区| 欧美精品一区二区精品网| 国产精品网站导航| 婷婷成人综合网| 国产**成人网毛片九色 | 国产精品黄色在线观看| 亚洲国产精品久久久男人的天堂| 久久精品国产免费| 99国产欧美久久久精品| 欧美日韩国产美女| 日本一区二区成人| 日韩精品免费专区| eeuss鲁片一区二区三区在线看| 欧美日韩不卡视频| 国产精品视频在线看| 日韩av电影免费观看高清完整版 | 成人久久视频在线观看| 欧美三级日韩在线| 国产精品嫩草影院av蜜臀| 亚洲国产日韩一级| 成人精品视频一区二区三区| 日韩视频在线永久播放| 亚洲女同ⅹxx女同tv| 国产精品88av| 欧美一区日本一区韩国一区| 综合自拍亚洲综合图不卡区| 精品一区二区三区免费毛片爱| 色婷婷狠狠综合| 欧美激情中文字幕| 久久国产三级精品| 欧美美女喷水视频| 亚洲日本一区二区| 国产二区国产一区在线观看| 欧美一区二区三区免费观看视频| 一区二区三区精品在线| 成人美女视频在线观看18| 日韩一区二区麻豆国产| 一区二区三区电影在线播| 国产mv日韩mv欧美| 2024国产精品| 免费看欧美女人艹b| 欧美日韩在线一区二区| 亚洲欧美激情在线| 成人av高清在线| 国产日韩精品一区二区三区 | 性久久久久久久| 色综合天天综合色综合av| 国产精品色哟哟网站| 成人激情免费网站| 中文字幕不卡的av| av资源站一区| 中文字幕在线一区| hitomi一区二区三区精品| 国产日韩欧美a| 成人精品视频一区二区三区尤物| 国产日韩精品一区二区浪潮av | 人禽交欧美网站| 欧美高清性hdvideosex| 天堂蜜桃91精品| 91精品国产91久久综合桃花| 午夜电影一区二区三区| 91麻豆精品久久久久蜜臀| 日韩avvvv在线播放| 6080午夜不卡| 美女视频黄 久久| 2020国产成人综合网| 国产成人8x视频一区二区| 中文字幕第一区| 99久久久国产精品免费蜜臀| 亚洲人成亚洲人成在线观看图片| 91麻豆高清视频| 一区二区免费在线| 欧美日韩精品欧美日韩精品一综合| 亚洲第一狼人社区| 日韩午夜av一区| 国产福利一区二区三区视频 | av在线一区二区三区| 成人免费一区二区三区视频| 色一情一乱一乱一91av| 亚洲国产欧美另类丝袜| 91精品一区二区三区久久久久久 | 在线观看区一区二| 天堂午夜影视日韩欧美一区二区| 欧美成va人片在线观看| 高清成人在线观看| 一区二区欧美国产| 精品精品欲导航| 成人精品gif动图一区| 亚洲永久精品国产| 日韩视频中午一区| www.66久久| 水蜜桃久久夜色精品一区的特点| 日韩欧美国产一区在线观看| 国产成人精品免费| 亚洲最大色网站| 久久亚洲欧美国产精品乐播 | 精品久久久久久久人人人人传媒 | 91麻豆精品国产| 国产福利一区二区三区| 一区二区久久久久| 精品日韩一区二区三区| 不卡视频在线看| 亚洲国产三级在线| 久久午夜电影网| 91福利精品视频| 国模套图日韩精品一区二区| 日韩码欧中文字| 日韩精品中文字幕在线不卡尤物| 成人一区二区视频| 天天综合天天做天天综合| 国产色91在线| 欧美伦理电影网| 91亚洲精华国产精华精华液| 人妖欧美一区二区| 亚洲美女屁股眼交3| 精品国产自在久精品国产| 欧美亚洲动漫另类| 国产在线播精品第三| 亚洲综合在线第一页| 国产欧美一区二区精品性| 7777精品伊人久久久大香线蕉超级流畅| 不卡的av电影| 黑人精品欧美一区二区蜜桃|