⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_802_15_4.cpp

📁 csma协议
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                Mac802_15_4Reset_TRX(node, interfaceIndex);                Mac802_15_4TaskSuccess(node, interfaceIndex, 'a', TRUE);            }            else if (mac->rxData)            {                if (MESSAGE_ReturnPacketSize(mac->rxData) <=                        aMaxSIFSFrameSize)                {                    ifs = aMinSIFSPeriod;                }                else                {                    ifs = aMinLIFSPeriod;                }                mac->IFST =                        Mac802_15_4SetTimer(                        node,                        mac,                        M802_15_4IFSTIMER,                        ifs * SECOND /                            PHY_GetRxDataRate(node, interfaceIndex),                        NULL);                Mac802_15_4Reset_TRX(node, interfaceIndex);                Mac802_15_4TaskSuccess(node, interfaceIndex, 'a', TRUE);            }            else    //ack. for duplicated packet            {                Mac802_15_4Reset_TRX(node, interfaceIndex);                Mac802_15_4TaskSuccess(node, interfaceIndex, 'a', TRUE);            }        }        else if (mac->txPkt == mac->txBcnCmd)        {            wph = (M802_15_4Header*)(mac->txBcnCmd->packet);            frmCtrl.FrmCtrl = wph->MHR_FrmCtrl;            Mac802_15_4FrameCtrlParse(&frmCtrl);            if(mac->taskP.mlme_associate_response_STEP               && (wph->MSDU_CmdType == 0x02))  //association resp pkt            {                mac->trx_state_req = RX_ON;                Phy802_15_4PlmeSetTRX_StateRequest(                        node,                        interfaceIndex,                        RX_ON);                mac->waitBcnCmdAck = TRUE;            }            else if (frmCtrl.ackReq) //ack. required            {                mac->trx_state_req = RX_ON;                Phy802_15_4PlmeSetTRX_StateRequest(                        node,                        interfaceIndex,                        RX_ON);                mac->txT =                        Mac802_15_4SetTimer(                        node,                        mac,                        M802_15_4TXTIMER,                        mac->mpib.macAckWaitDuration * SECOND /                                PHY_GetRxDataRate(node, interfaceIndex),                        NULL);                mac->waitBcnCmdAck = TRUE;            }            else        //assume success if ack. not required            {                Mac802_15_4Reset_TRX(node, interfaceIndex);                Mac802_15_4TaskSuccess(node, interfaceIndex, 'c', TRUE);            }        }        else if (mac->txPkt == mac->txBcnCmd2)        {            if (mac->taskP.mlme_scan_request_STEP &&                ((mac->taskP.mlme_scan_request_ScanType == 0x01) ||                (mac->taskP.mlme_scan_request_ScanType == 0x03)) &&                (strcmp(mac->taskP.mlme_scan_request_frFunc, frFunc) == 0))            {                Mac802_15_4mlme_scan_request(                        node,                        interfaceIndex,                        mac->taskP.mlme_scan_request_ScanType,                        mac->taskP.mlme_scan_request_ScanChannels,                        mac->taskP.mlme_scan_request_ScanDuration,                        FALSE,                        status);            }            else if (mac->taskP.mlme_start_request_STEP &&                     (strcmp(mac->taskP.mlme_start_request_frFunc, frFunc)                                == 0))            {                MESSAGE_Free(node, mac->txBeacon);                mac->txBeacon = NULL;                Mac802_15_4mlme_start_request(                        node,                        interfaceIndex,                        mac->taskP.mlme_start_request_PANId,                        mac->taskP.mlme_start_request_LogicalChannel,                        mac->taskP.mlme_start_request_BeaconOrder,                        mac->taskP.mlme_start_request_SuperframeOrder,                        mac->taskP.mlme_start_request_PANCoordinator,                        mac->taskP.mlme_start_request_BatteryLifeExtension,                        0,                        mac->taskP.mlme_start_request_SecurityEnable,                        FALSE,                        status);            }            else if (mac->taskP.mlme_associate_request_STEP &&                   (strcmp(mac->taskP.mlme_associate_request_frFunc,                        frFunc) == 0))            {                Mac802_15_4mlme_associate_request(                        node,                        interfaceIndex,                        0, 0, 0, 0, 0,                        mac->taskP.mlme_associate_request_SecurityEnable,                        FALSE,                        status,                        M802_15_4_SUCCESS);            }            else if (mac->taskP.mlme_poll_request_STEP &&                    (strcmp(mac->taskP.mlme_poll_request_frFunc,frFunc)                            == 0))            {                Mac802_15_4mlme_poll_request(                        node,                        interfaceIndex,                        mac->taskP.mlme_poll_request_CoordAddrMode,                        mac->taskP.mlme_poll_request_CoordPANId,                        mac->taskP.mlme_poll_request_CoordAddress,                        mac->taskP.mlme_poll_request_SecurityEnable,                        mac->taskP.mlme_poll_request_autoRequest,                        FALSE,                        status);            }            else    //default handling            {                wph = (M802_15_4Header*)mac->txBcnCmd2->packet;                frmCtrl.FrmCtrl = wph->MHR_FrmCtrl;                Mac802_15_4FrameCtrlParse(&frmCtrl);                if (frmCtrl.ackReq) //ack. required                {                    mac->trx_state_req = RX_ON;                    Phy802_15_4PlmeSetTRX_StateRequest(                            node,                            interfaceIndex,                            RX_ON);                    mac->txT = Mac802_15_4SetTimer(                            node,                            mac,                            M802_15_4TXTIMER,                            mac->mpib.macAckWaitDuration * SECOND/                                    PHY_GetRxDataRate(node, interfaceIndex),                            NULL);                    mac->waitBcnCmdAck2 = TRUE;                }                else                {                    Mac802_15_4Reset_TRX(node, interfaceIndex);                    Mac802_15_4TaskSuccess(node, interfaceIndex, 'C', TRUE);                }            }        }        else if (mac->txPkt == mac->txData)        {            if(!(mac->taskP.mcps_data_request_STEP)                    || !(strcmp(mac->taskP.mcps_data_request_frFunc, frFunc)                            == 0))            {                return;            }            wph = (M802_15_4Header*)mac->txData->packet;            frmCtrl.FrmCtrl = wph->MHR_FrmCtrl;            Mac802_15_4FrameCtrlParse(&frmCtrl);            if (mac->taskP.mcps_data_request_STEP)            {                if (mac->taskP.mcps_data_request_TxOptions & TxOp_GTS) //GTS                {                    ;   //TBD                }                else if ((mac->taskP.mcps_data_request_TxOptions &                            TxOp_Indirect)  //indirect transmission                          && (mac->capability.FFD &&                            (Mac802_15_4NumberDeviceLink(&mac->deviceLink1) >                                0))) //Coordinator                {                    if (!frmCtrl.ackReq)    //ack. not required                    {                       Mac802_15_4mcps_data_request(                                node,                                interfaceIndex,                                0, 0, 0, 0, 0, 0, 0, 0, 0,                                mac->taskP.mcps_data_request_TxOptions,                                FALSE,                                PHY_SUCCESS,                                M802_15_4_SUCCESS);                    }                    else                    {                        strcpy(mac->taskP.mcps_data_request_frFunc,                                    "recvAck");                        mac->trx_state_req = RX_ON;                        Phy802_15_4PlmeSetTRX_StateRequest(                                node,                                interfaceIndex,                                RX_ON);                        mac->txT = Mac802_15_4SetTimer(                                node,                                mac,                                M802_15_4TXTIMER,                                mac->mpib.macAckWaitDuration * SECOND/                                    PHY_GetRxDataRate(node, interfaceIndex),                                NULL);                        mac->waitDataAck = TRUE;                    }                }                else        //direct transmission                {                    Mac802_15_4mcps_data_request(                            node,                            interfaceIndex,                            0, 0, 0, 0, 0, 0, 0, 0, 0,                            mac->taskP.mcps_data_request_TxOptions,                            FALSE,                            status,                            M802_15_4_SUCCESS);                }            }            else    //default handling (seems impossible)            {                if (frmCtrl.ackReq) //ack. required                {                    mac->trx_state_req = RX_ON;                    Phy802_15_4PlmeSetTRX_StateRequest(                            node,                            interfaceIndex,                            RX_ON);                    mac->txT = Mac802_15_4SetTimer(                            node,                            mac,                            M802_15_4TXTIMER,                            mac->mpib.macAckWaitDuration * SECOND/                                    PHY_GetRxDataRate(node, interfaceIndex),                            NULL);                    mac->waitDataAck = TRUE;                }                else                {                    Mac802_15_4Reset_TRX(node, interfaceIndex);                    Mac802_15_4TaskSuccess(node, interfaceIndex, 'd', TRUE);                }            }        }    }    else if (strcmp(frFunc, "recvAck") == 0)    {        if (mac->txPkt == mac->txData)        {            if ((mac->taskP.mcps_data_request_STEP) &&                 (strcmp(mac->taskP.mcps_data_request_frFunc, frFunc) == 0))            {                Mac802_15_4mcps_data_request(                        node,                        interfaceIndex,                        0, 0, 0, 0, 0, 0, 0, 0, 0,                        mac->taskP.mcps_data_request_TxOptions,                        FALSE,                        PHY_SUCCESS,                        M802_15_4_SUCCESS);            }            else    //default handling for <txData>            {                if (mac->taskP.mcps_data_request_STEP) //seems late ACK recd                {                    mac->taskP.mcps_data_request_STEP = 0;                }                Mac802_15_4Reset_TRX(node, interfaceIndex);                Mac802_15_4TaskSuccess(node, interfaceIndex, 'd', TRUE);            }        }        else if (mac->txPkt == mac->txBcnCmd2)        {            if (mac->taskP.mlme_associate_request_STEP &&                (strcmp(mac->taskP.mlme_associate_request_frFunc, frFunc) ==                0))            {                Mac802_15_4mlme_associate_request(                        node,                        interfaceIndex,                        0, 0, 0, 0, 0,                        mac->taskP.mlme_associate_request_SecurityEnable,                        FALSE,                        PHY_SUCCESS,                        M802_15_4_SUCCESS);            }            else if (mac->taskP.mlme_poll_request_STEP &&                     (strcmp(mac->taskP.mlme_poll_request_frFunc,frFunc) ==                     0))            {                Mac802_15_4mlme_poll_request(                        node,                        interfaceIndex,                        mac->taskP.mlme_poll_request_CoordAddrMode,                        mac->taskP.mlme_poll_request_CoordPANId,                        mac->taskP.mlme_poll_request_CoordAddress,                        mac->taskP.mlme_poll_request_SecurityEnable,                        mac->taskP.mlme_poll_request_autoRequest,                        FALSE,                        PHY_SUCCESS);            }            else            {                Mac802_15_4TaskSuccess(node, interfaceIndex, 'C', TRUE);            }        }        else if (mac->txPkt == mac->txBcnCmd)        {            wph = (M802_15_4Header*) (mac->txBcnCmd->packet);            frmCtrl.FrmCtrl = wph->MHR_FrmCtrl;            Mac802_15_4FrameCtrlParse(&frmCtrl);            if ((frmCtrl.frmType == M802_15_4DEFFRMCTRL_TYPE_MACCMD)                 && (wph->MSDU_CmdType == 0x02))  //association resp pkt            {                Mac802_15_4mlme_associate_response(                        node,                        interfaceIndex,                        mac->taskP.mlme_associate_response_DeviceAddress,                        0,                        M802_15_4_SUCCESS,                        0,                        FALSE,                        PHY_SUCCESS);            }            else if ((frmCtrl.frmType == M802_15_4DEFFRMCTRL_TYPE_MACCMD)                      && (wph->MSDU_CmdType == 0x08))//coord realig resp pkt            {                Mac802_15_4mlme_orphan_response(                        node,                        interfaceIndex,                        mac->taskP.mlme_orphan_response_OrphanAddress,                        0,                        TRUE,                        FALSE,                        FALSE,                        PHY_SUCCESS);            }            else            {                Mac802_15_4TaskSuccess(node, interfaceIndex, 'c', TRUE);            }        }    }    else if (strcmp(frFunc,"txHandler") == 0)    {        if (mac->txPkt == mac->txData)        {            if ((!mac->taskP.mcps_data_request_STEP) ||                (strcmp(mac->taskP.mcps_data_request_frFunc,                    "recvAck") != 0))            {                //we might have been waiting for poll request                if (mac->taskP.mlme_poll_request_STEP &&                    (strcmp(mac->taskP.mlme_poll_request_frFunc,                     "recvAck") == 0))                {                    Mac802_15_4mlme_poll_request(                            node,                            interfaceIndex,                            mac->taskP.mlme_poll_request_CoordAddrMode,                            mac->taskP.mlme_poll_request_CoordPANId,                            mac->taskP.mlme_poll_request_CoordAddress,                            mac->taskP.mlme_poll_request_SecurityEnable,                            mac->taskP.mlme_poll_request_autoRequest,                            FALSE,                            PHY_BUSY_TX); //status can anything but SUCCESS                }                return;            }            if (mac->taskP.mcps_data_request_STEP)            {                if (mac->taskP.mcps_data_request_TxOptions & TxOp_GTS)                    //GTS transmission                {                    ;   //TBD                }                else if ((mac->taskP.mcps_data_request_TxOptions &                            TxOp_Indirect) &&   //indirect transmission                        (mac->capability.FFD &&                        (Mac802_15_4NumberDeviceLink(&mac->deviceLink1)                                > 0)))  //coordinator                {                    Mac802_15_4mcps_data_request(                            node,                            interfaceIndex,                            0, 0, 0, 0, 0, 0, 0, 0, 0,                            mac->taskP.mcps_data_request_TxOptions,                            FALSE,                            PHY_BUSY_TX,                            M802_15_4_NO_ACK);                }                else        //direct transmission                {                    Mac802_15_4mcps_data_request(                            node,                            interfaceIndex,                            0, 0, 0, 0, 0, 0, 0, 0, 0,                            mac->taskP.mcps_data_request_TxOptions,              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -