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

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

?? smac.cc

?? 在ns2中仿真無線傳感器網絡mac層協議的代碼smac
?? CC
?? 第 1 頁 / 共 5 頁
字號:

#else
      
            //if (sh->duration > durCtrlPkt_) { // wait for more frag
            //rxFragDone(p);   no frag for now
            //state_ = IDLE;
            //} else {   // no more fragments
      
            state_ = IDLE;
            if(lastRxFrag_ != ch->uid()) {
                lastRxFrag_ = ch->uid();
                rxMsgDone(p);
    		}
            else {
                printf("Recd duplicate data pkt at %d from %d! free pkt\n",index_,sh->srcAddr);
                Packet::free(p);
                if (!syncFlag_)
                    checkToSend();
    		}
#endif
        } else if (state_ == IDLE || state_ == CR_SENSE ) {
            printf("got data pkt in %d state XXX %d\n", state_, index_);
            //updateNav(sh->duration + 0.00001);  // incase I have a pkt to send
            sendACK(sh->duration);
            state_ = IDLE;
            if(lastRxFrag_ != ch->uid()) {
                lastRxFrag_ = ch->uid();
                rxMsgDone(p);
    		}
            else {
                printf("Recd duplicate data pkt! free pkt\n");
                Packet::free(p);
                if (!syncFlag_)
                    checkToSend();
    		}
        } else { // some other state
            // not sure we can handle this
            // so drop pkt
            printf("Got data pkt in !WAIT_DATA/!CR_SENSE/!IDLE state(%d) XXX %d\n", state_, index_);
            printf("Dropping data pkt\n");
            Packet::free(p);
    	}
    } else { // unicast pkt destined to other node
        updateNav(sh->duration);
        Packet::free(p);
#ifdef JOURNAL_PAPER
                if (state_ == DATA_SENSE2) { mhGene_.cancel();}
                if (state_ == IDLE || state_ == CR_SENSE || state_ == DATA_SENSE2)
                        sleep();
#else
        if (state_ == IDLE || state_ == CR_SENSE)
            sleep();
#endif
    }
}



void SMAC::handleACK(Packet *p) {
    // internal handler for ack
    struct smac_control_frame *cf = (smac_control_frame *)p->access(hdr_mac::offset_);
  
    if (cf->dstAddr == index_) {
        if (state_ == WAIT_ACK && cf->srcAddr == sendAddr_) {
            // cancel ACK timer
            mhGene_.cancel();
#ifdef JOURNAL_PAPER
                        numFrags_--;
                        succFrags_++;
                        if (numFrags_ > 0) { //need to send more frags
                                  state_ = TX_NEXT_FRAG;
                                  txFragDone();
                               } else {
                        state_ = IDLE;
                        txMsgDone();
    		}
#else
            Packet::free(dataPkt_);
            dataPkt_ = 0;
            //numFrags_--;
            //succFrags_++;
      
            // if (numFrags_ > 0) { //need to send more frags
            //  if (neighNav__ < (durDataPkt_ + durCtrlPkt_)) {
            //    // used up reserved time, have to stop
            //    state_ = IDLE;
            //    // txMsgFailed(succFrags_);
            //    txMsgDone();
            //  } else { // continue on next fragment
            //    state_ = WAIT_NEXTFRAG;
            //    txFragDone(dataPkt_);
        	// 	}

            //       } else {
            state_ = IDLE;
            txMsgDone();
        	//}
#endif
    	}
    
    } else { // destined to another node
        if (cf->duration > 0) {
            updateNav(cf->duration);
            if (state_ == IDLE || state_ == CR_SENSE)
            	sleep();
    	}
    }
}

#ifdef JOURNAL_PAPER
void SMAC::handleSYNC(Packet *p) 
{

    struct smac_sync_frame *sf = (struct smac_sync_frame *)p->access(hdr_mac::offset_);
        int i, j,nodeId, schedId, flag;
        struct SchedTable tempSched;
        int foundNeighb = 0;
    if (index_ == 5){
        double t = Scheduler::instance().clock();
        //printf("Recvd SYNC (not/f) at %d from %d.....at %.6f\n", index_, sf->srcAddr, t);
    }
    if (numSched_ == 0) { // in choose_sched state
        mhGene_.cancel();
        setMySched(p);
        return;
    }
        if (numNeighb_ == 0 && globalSchedule_ == 1) {
         // follow this schedule if having no other neighbor and if this schedule has smaller ID
            if (schedTab_[0].syncNode > sf->syncNode || !sendSYNCFlag_ ) {
                setMySched(p);
                return;
            }
        }
        else if (numNeighb_ == 0) { // getting first sync pkt
         // follow this sched as have no other neighbor
            setMySched(p);

            return;
        }
    state_ = IDLE;

        // check if sender is on my neighbor list
        nodeId = SMAC_MAX_NUM_NEIGHBORS;
        schedId = SMAC_MAX_NUM_SCHEDULES;
        for (i = 0; i < SMAC_MAX_NUM_NEIGHBORS; i++) {
            if (neighbList_[i].state > 0 && neighbList_[i].nodeId == sf->srcAddr) {
                    nodeId = i;
                    schedId = neighbList_[i].schedId; // a known neighbor
                    break;
            }
        }
        if (nodeId < SMAC_MAX_NUM_NEIGHBORS) {
            if (neighbList_[nodeId].state == sf->state) {
                    // update the existing schedule
                mhCounter_[schedId]->sched(sf->sleepTime);

                    neighbList_[nodeId].active = 1;
                    if (globalSchedule_ == 1 && schedTab_[0].syncNode > sf->syncNode ){
                        // change state
                        schedState_++;
                //printf("#############################################################\n");
                        //printf("node %d hears SYNC from node %d and changes schedule from %d to schedule %d : ............at %.6f\n", index_, sf->srcAddr, schedTab_[0].syncNode, sf->syncNode, Scheduler::instance().clock());
                //printf("#############################################################\n");

                            tempSched.syncNode = schedTab_[schedId].syncNode;
                            tempSched.txSync = schedTab_[schedId].txSync;  // need send sync
                            tempSched.txData = schedTab_[schedId].txData;
                            tempSched.numPeriods = schedTab_[schedId].numPeriods;
                            tempSched.numNodes = schedTab_[schedId].numNodes ; //
                        tempSched.chkSched = schedTab_[schedId].chkSched;

                        if (schedTab_[0].numNodes == 1) {
                                numSched_--;
                        }
                    mhCounter_[schedId]->sched(mhCounter_[0]->timeToSleep());
                            schedTab_[schedId].syncNode = schedTab_[0].syncNode;
                            schedTab_[schedId].txSync = schedTab_[0].txSync;  // need send sync
                            schedTab_[schedId].txData = schedTab_[0].txData;
                            schedTab_[schedId].numPeriods = schedTab_[0].numPeriods;
                            schedTab_[schedId].numNodes = schedTab_[0].numNodes - 1; // I switch schedule
                            schedTab_[schedId].chkSched = schedTab_[0].chkSched;

                            // new schedule is schedule 0 now
                mhCounter_[0]->sched(sf->sleepTime);
                        schedTab_[0].syncNode = sf->syncNode;
                        schedTab_[0].txSync = 1;  
                        schedTab_[0].txData = tempSched.txData;
                        schedTab_[0].numPeriods = 0; 
                        schedTab_[0].numNodes = tempSched.numNodes + 1; // I are following this sched
                        schedTab_[0].chkSched = tempSched.chkSched;

                        // change all the neighbor who was following shedule 0
                        for (j = 0; j < SMAC_MAX_NUM_NEIGHBORS; j++) {
                                if (neighbList_[j].schedId == 0) { // found an empty entry
                                    neighbList_[j].schedId = schedId;
                            	}
                                else if (neighbList_[j].schedId == schedId) { // found an empty entry
                                    neighbList_[j].schedId = 0;
                            	}
                        	}
                    }
                return;
            } else {

                    // decrement number of nodes on old schedule

                    if (schedTab_[schedId].numNodes ==1 && txRequest_ == 1) {
                        //set flag to decrement numNodes after tx pkt is done
                        schedTab_[schedId].chkSched = 1;
                	}
                    else 
    		{
                        schedTab_[schedId].numNodes--; 
                        if (schedTab_[schedId].numNodes == 0){
                            numSched_--;
                    	}
            	}

    	}
    }

        // now it's either a new node or an old node switching to a new schedule
        // it is also possible that a node switches to an existing schedule
        // check if its schedule is a known one to me
        schedId = SMAC_MAX_NUM_SCHEDULES;
        for (i = 0; i < SMAC_MAX_NUM_SCHEDULES; i++) {
            if (schedTab_[i].numNodes > 0) {
        
                double t = mhCounter_[i]->timeToSleep();
                double st = sf->sleepTime;
                double timeDiff = st - t;
                    if ( timeDiff > -GUARDTIME && timeDiff < GUARDTIME) {
                mhCounter_[i]->sched(sf->sleepTime);

                        schedTab_[i].numNodes++; // it will follow this schedule
                        schedId = i;
                        break;
                	} 
            }
        }

        if (schedId == SMAC_MAX_NUM_SCHEDULES) {  // unknow schedule
            flag =1;
            // add an entry to the schedule table
            if (numSched_ < SMAC_MAX_NUM_SCHEDULES){
                    for (i = 0; i < SMAC_MAX_NUM_SCHEDULES; i++) {
                        if (schedTab_[i].numNodes == 0) { // found an empty entry
                        // check if I need to switch
                if (globalSchedule_ == 1 && schedTab_[0].syncNode > sf->syncNode ){
                            // change state
                            schedState_++;
                    //printf("#############################################################\n");
                            //printf("node %d hears SYNC from node %d and changes schedule from %d to schedule %d : ............at %.6f\n", index_, sf->srcAddr, schedTab_[0].syncNode, sf->syncNode, Scheduler::instance().clock());
                            //printf("#############################################################\n");

                            if (schedTab_[0].numNodes >= 2) { // need to move old schedule 0 to schedule i
                            mhCounter_[i]->sched(mhCounter_[0]->timeToSleep());
                                    schedTab_[i].syncNode = schedTab_[0].syncNode;
                                    schedTab_[i].txSync = schedTab_[0].txSync;  // need send sync
                                    schedTab_[i].txData = schedTab_[0].txData;
                                    schedTab_[i].numPeriods = schedTab_[0].numPeriods;
                                    schedTab_[i].numNodes = schedTab_[0].numNodes - 1; // I switch schedule
                                    schedTab_[i].chkSched = schedTab_[0].chkSched;
                                    numSched_++;  // increment number of schedules
                                    // change all the neighbor who was following shedule 0
                                    for (j = 0; j < SMAC_MAX_NUM_NEIGHBORS; j++) {
                                        if (neighbList_[j].schedId == 0) { // found an empty entry
                                            neighbList_[j].schedId = i;
                                		}
                            		}
                        	}
                            // new schedule is schedule 0 now
                    mhCounter_[0]->sched(sf->sleepTime);
                            schedTab_[0].syncNode = sf->syncNode;
                            schedTab_[0].txSync = 1;  // need send sync
                            schedTab_[0].txData = 0;
                    schedTab_[0].numPeriods = 0;
                            schedTab_[0].numNodes = 2; // 1st node + I are following this sched
                            schedTab_[0].chkSched = 0;

                            schedId = 0;
                    	}
                        else { // fill new schedule in schedule i

                        mhCounter_[i]->sched(sf->sleepTime);
                            schedTab_[i].syncNode = sf->syncNode;
                            schedTab_[i].txSync = 1;  // need send sync
                            schedTab_[i].txData = 0;
                            schedTab_[i].numPeriods = 0;
                            schedTab_[i].numNodes = 1; // 1st node following this sched
                            schedTab_[i].chkSched = 0;
                            schedId = i;
                            numSched_++;  // increment number of schedules
                    	}
                        break;
                    	}
                	}
    	}
    }

        if (nodeId == SMAC_MAX_NUM_NEIGHBORS) {  // a new node
            // didn't find an empty entry in schedule table, just drop the new node
            if (schedId == SMAC_MAX_NUM_SCHEDULES) return;
            // add it to my neighbor list
            if (numNeighb_ < SMAC_MAX_NUM_NEIGHBORS){
                for (i = 0; i < SMAC_MAX_NUM_NEIGHBORS; i++) {
                    if (neighbList_[i].state == 0) { // found an empty entry
                        neighbList_[i].state = sf->state;
                        neighbList_[i].nodeId = sf->srcAddr;
                        neighbList_[i].schedId = schedId;
                        neighbList_[i].active = 1;
                        numNeighb_++;  // increment number of neighbors
                        return;
                    }
                }
         }
         // didn't find an empty entry in neighb list, just drop the new node
    schedTab_[schedId].numNodes--;
        if (schedTab_[schedId].numNodes == 0)
            numSched_--;
        } else if (flag == 1) {  // old node switches to a new schedule
            // didn't find an empty entry in schedule table, delete the old node
            if (schedId == SMAC_MAX_NUM_SCHEDULES) {
                    neighbList_[nodeId].state = 0;
                    numNeighb_--;  // decrement number of neighbors
            } else {
                    neighbList_[nodeId].state = sf->state;
                    neighbList_[nodeId].schedId = schedId;
                    neighbList_[nodeId].active = 1;
            }

            // maybe the old node switches from schedTab_[0]
            // check if I am the only one on schedTab_[0] now
            // if yes, I should follow the next available schedule
            if (txRequest_ == 0) {
                    checkMySched();
            } else {
                // set flag to call checkMySched() when txRequest_ becomes 0
                    schedTab_[0].chkSched = 1;
            }
        } else {  // old node switches to old schedule
                neighbList_[nodeId].state = sf->state;
                neighbList_[nodeId].schedId = schedId;
                neighbList_[nodeId].active = 1;
        if (globalSchedule_ == 1 && schedTab_[0].syncNode > sf->syncNode ){
            //printf("#############################################################\n");
                    //printf("node %d hears SYNC from node %d and changes schedule from %d to schedule %d : ............at %.6f\n", index_, sf->srcAddr, schedTab_[0].syncNode, sf->syncNode, Scheduler::instance().clock());
                    //printf("#############################################################\n");

                    // change state
                    schedState_++;
                        tempSched.syncNode = schedTab_[schedId].syncNode;
               

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日产精品久久久久久久性色| 丰满少妇久久久久久久| 国产精品一区二区久激情瑜伽| 91在线免费看| 国产亚洲一区字幕| 日韩不卡手机在线v区| 91看片淫黄大片一级| 精品人伦一区二区色婷婷| 一区二区三区**美女毛片| 国产成人av电影在线| 91麻豆精品国产91久久久资源速度 | 国产欧美精品一区二区三区四区| 亚洲午夜精品久久久久久久久| 国产91丝袜在线播放0| 日韩西西人体444www| 亚洲成人午夜电影| 欧美在线免费观看视频| 日韩av一区二区在线影视| 色婷婷综合久久久久中文一区二区| 久久久99久久| 国产精品一区在线观看你懂的| 欧美一级黄色录像| 蜜臀精品久久久久久蜜臀 | 国产大陆a不卡| 久久久久久久网| 九九久久精品视频| www久久精品| 国产精品自拍一区| 国产日韩精品久久久| 国产成人自拍高清视频在线免费播放| 日韩小视频在线观看专区| 日韩av高清在线观看| 日韩欧美中文一区二区| 喷白浆一区二区| 欧美精品一区二区蜜臀亚洲| 激情小说亚洲一区| 国产欧美一区二区精品性色超碰| 国产精品一级二级三级| 欧美—级在线免费片| 99精品久久久久久| 亚洲影院久久精品| 欧美在线视频日韩| 蜜臀精品久久久久久蜜臀| 久久综合国产精品| 成人国产精品免费| 一区二区三区在线免费观看| 欧美日韩国产在线观看| 日本在线观看不卡视频| 久久噜噜亚洲综合| www.亚洲色图| 亚洲www啪成人一区二区麻豆 | 欧美在线999| 天天亚洲美女在线视频| 久久亚洲精华国产精华液| 成人一级片在线观看| 亚洲乱码国产乱码精品精98午夜 | 美女一区二区视频| 国产午夜精品一区二区三区嫩草| av影院午夜一区| 午夜伦理一区二区| 久久精品这里都是精品| 欧美自拍丝袜亚洲| 韩国成人福利片在线播放| 国产精品第五页| 欧美一卡2卡三卡4卡5免费| 国产91丝袜在线播放0| 午夜激情久久久| 久久精品视频在线看| 在线精品视频免费观看| 国产伦精品一区二区三区免费迷| 中文字幕亚洲电影| 日韩欧美一区二区免费| 91视频国产观看| 国产一区二区在线观看免费| 一区二区三区四区在线播放| 精品日韩99亚洲| 欧美在线啊v一区| 高清成人在线观看| 全部av―极品视觉盛宴亚洲| 亚洲三级在线观看| 久久精品日韩一区二区三区| 欧美色男人天堂| 不卡的av在线播放| 久久www免费人成看片高清| 亚洲影视资源网| 国产精品美女一区二区在线观看| 欧美老女人第四色| 欧美在线播放高清精品| www.欧美色图| 国产很黄免费观看久久| 美女在线一区二区| 亚洲一区二区在线视频| 亚洲欧洲国产日韩| 国产欧美一区二区精品久导航| 337p亚洲精品色噜噜| 欧美亚洲一区二区在线观看| av亚洲精华国产精华精| 国产乱子伦一区二区三区国色天香| 午夜成人免费视频| 亚洲国产精品人人做人人爽| 亚洲美女在线国产| 亚洲日穴在线视频| 亚洲免费资源在线播放| 国产精品美女视频| 国产精品久久久爽爽爽麻豆色哟哟| 精品国产一区久久| 精品国精品国产| 亚洲精品一区在线观看| 精品国免费一区二区三区| 欧美成人女星排行榜| 精品国产一区二区三区四区四| 欧美一级电影网站| 欧美一区二区三区色| 91精品国产手机| 日韩一级成人av| 久久综合久久鬼色| 久久九九全国免费| 国产精品福利一区二区三区| 国产精品美女一区二区在线观看| 国产精品欧美精品| 一区二区三区不卡在线观看| 亚洲最大成人综合| 午夜国产精品影院在线观看| 青青草国产精品97视觉盛宴| 国产中文字幕一区| 99在线精品一区二区三区| 色婷婷av一区二区| 欧美精选在线播放| 日韩女优毛片在线| 亚洲国产精品ⅴa在线观看| 亚洲日本乱码在线观看| 一区二区三区四区在线| 男女激情视频一区| 成人午夜av在线| 在线这里只有精品| 欧美电影免费观看高清完整版| 精品国产免费久久| 国产精品初高中害羞小美女文| 亚洲色图色小说| 国产精品网站在线| 亚洲韩国一区二区三区| 久久er精品视频| 91免费观看国产| 日韩精品一区二区三区在线播放| 国产欧美日韩在线| 亚洲国产日韩一级| 国产乱色国产精品免费视频| 91女厕偷拍女厕偷拍高清| 538prom精品视频线放| 国产精品你懂的在线欣赏| 午夜精品久久久久久久蜜桃app| 国产在线日韩欧美| 在线精品观看国产| 精品粉嫩aⅴ一区二区三区四区| 国产精品美女久久久久av爽李琼| 日韩黄色一级片| 91网页版在线| 精品国产精品一区二区夜夜嗨| 亚洲精品你懂的| 国产成人av一区二区三区在线观看| 日本大香伊一区二区三区| 久久中文娱乐网| 天堂资源在线中文精品| 成人开心网精品视频| 精品少妇一区二区三区日产乱码| 亚洲三级在线播放| 国产精品91一区二区| 欧美一级在线免费| 亚洲综合一区在线| av一区二区三区黑人| 2023国产精品| 麻豆国产精品一区二区三区| 在线观看国产日韩| 中文字幕色av一区二区三区| 国产一区二区三区免费观看| 欧美精品在欧美一区二区少妇| 亚洲欧美综合网| 成人激情电影免费在线观看| 精品久久一区二区| 蜜臀a∨国产成人精品| 欧美日韩一区中文字幕| 亚洲精品一二三区| 91色.com| 亚洲人成小说网站色在线| caoporn国产精品| 中文字幕精品一区二区三区精品| 国产一区二区视频在线播放| 欧美变态凌虐bdsm| 蜜臀91精品一区二区三区 | 久久91精品国产91久久小草| 欧美精品一卡二卡| 天堂在线亚洲视频| 欧美精品久久天天躁| 亚洲国产aⅴ成人精品无吗| 欧美性大战久久久久久久| 一区二区三区日韩精品视频| 色综合天天视频在线观看 | 91激情五月电影| 亚洲愉拍自拍另类高清精品| 日本高清成人免费播放|