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

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

?? smac.cc

?? 在ns2中仿真無線傳感器網(wǎng)絡mac層協(xié)議的代碼smac
?? CC
?? 第 1 頁 / 共 5 頁
字號:
            //node tries to go to sleep if it needs to resend
                    if( mhCounter_[0]->value_ == sleepTime_ )
                            sleep();
#endif
 
            if (!syncFlag_)
                checkToSend();
      
        } else {
            state_ = IDLE;
            Packet::free(dataPkt_);
            dataPkt_ = 0;
            numRetry_ = 0;
            //numFrags_ = 0;
            // signal upper layer about failure of tx 
            // txMsgFailed();
            txMsgDone();
      
    	}
    
    } else if (state_ == WAIT_ACK) { // ack timeout
    
        if (numExtend_ < SMAC_EXTEND_LIMIT) { // extend time
            printf("SMAC %d: no ACK received. Extend Tx time.\n", index_);
            numExtend_++;
      
            updateNeighNav(durDataPkt_ + durCtrlPkt_);
            //neighNav_ = (durDataPkt_ + durCtrlPkt_);
      
        } else { // reached extension limit, can't extend time
            //numFrags_--;
      
    	}
        if (neighNav_ < (durDataPkt_ + durCtrlPkt_)) {
      
            // used up reserved time, stop tx
      
            discard(dataPkt_, DROP_MAC_RETRY_COUNT_EXCEEDED);
            dataPkt_ = 0;
            pktTx_ = 0;
            state_ = IDLE;
      
            // signal upper layer the number of transmitted frags
            //txMsgFailed(succFrags); -> no frag for now
      
            txMsgDone();
      
        } else { // still have time
            // keep sending until use up remaining time
            sendDATA();
    	}

#ifdef JOURNAL_PAPER
        } else if (state_ == DATA_SENSE1) {
                state_ = DATA_SENSE2;
                mhGene_.resched(timeWaitCtrl_);
                                                                                                                                                            
        } else if (state_ == DATA_SENSE2) {
                state_ = IDLE;
        //node tries to go to sleep if it does not hear CTS or DATA for others' connection
                if( mhCounter_[0]->value_ == sleepTime_ )
                        sleep();
#endif
    }
}


void SMAC::handleNavTimer() {
    // medium is now free
    nav_ = 0; // why have this variable?? probably not required use the timer instead
  
    if (!syncFlag_) {
        if (state_ == SLEEP)
            wakeup();

        // try to send waiting data, if any
        checkToSend();
    } 
#ifdef JOURNAL_PAPER
        adaptiveListen();
#endif
}


int SMAC::checkToSend() {
#ifdef JOURNAL_PAPER
        if (txRequest_ == 1 || syncFlag_) {
#else
    if (txData_ == 1) {
#endif
        assert(dataPkt_);
        struct hdr_smac *mh = HDR_SMAC(dataPkt_);
    
        if (radioState_ != RADIO_SLP && radioState_ != RADIO_IDLE)
            goto done;  // cannot send if radio is sending or recving
    
        if (state_ != SLEEP && state_ != IDLE && state_ != WAIT_DATA )
            goto done; // cannot send if not in any of these states
    
        if (!(mhNav_.busy()) && !(mhNeighNav_.busy()) &&
            (state_ == SLEEP || state_ == IDLE)) {
      
            if (state_ == SLEEP) wakeup();
      
            if ((u_int32_t)mh->dstAddr == MAC_BROADCAST)
                howToSend_ = BCASTDATA;
        	else
                howToSend_ = UNICAST;
      
            state_ = CR_SENSE;

#ifdef JOURNAL_PAPER
                        adapSend_ = 0;
            //printf("adaptiveListen sendData: node %d scheduletime: %f time:%.9f \n", index_, mhCounter_[0]->value_, Scheduler::instance().clock());
#endif
    
            // start cstimer
            double cw = (Random::random() % DATA_CW) * slotTime_sec_;
            mhCS_.sched(CLKTICK2SEC(difs_) + cw);
      
            return 1;
    
        } else {
            return 0;
    	}
    
    done:
        return 0;
    
    } else {
        return 0;
    }
}


void SMAC::handleNeighNavTimer() {
  
    // Timer to track my neighbor's NAV
    neighNav_ = 0;         // probably don't need to use this variable
  
    if (state_ == WAIT_DATA) { // data timeout
        state_ = IDLE;
    
        // signal upper layer that rx msg is done
        // didnot get any/all data
        rxMsgDone(0); 
    } else {
        if (!syncFlag_)
            checkToSend();
    }
#ifdef JOURNAL_PAPER
        adaptiveListen();
#endif
}


void SMAC::handleCsTimer() {
  
    // carrier sense successful
  
#ifdef MAC_DEBUG
    if (howToSend_ != BCASTSYNC && dataPkt_ == 0)
        numCSError++;
#endif // MAC_DEBUG
  
    switch(howToSend_) {
    case BCASTSYNC:
        if (sendSYNC())
            state_ = IDLE;
        break;
    
    case BCASTDATA:
        startBcast();
        break;
    
    case UNICAST:
        startUcast();
        break;
    }
}

void SMAC::handleCounterTimer(int id) {
  
    //printf("MAC:%d,id:%d - time:%.9f\n", index_,id,Scheduler::instance().clock());
#ifdef JOURNAL_PAPER
        if (schedTab_[id].numNodes > 0) {
#endif

    if (mhCounter_[id]->value_ == sleepTime_) { //woken up from sleep
        // listentime starts now

        if (radioState_ != RADIO_SLP && radioState_ != RADIO_IDLE)
            goto sched_1;  // cannot send if radio is sending or recving
    
        if (state_ != SLEEP && state_ != IDLE && state_ != WAIT_DATA )
            goto sched_1;; // cannot send if not in any of these states
    
        if (!(mhNav_.busy()) && !(mhNeighNav_.busy()) &&
            (state_ == SLEEP || state_ == IDLE)) {
    
            if (state_ == SLEEP &&
                (id == 0 || schedTab_[id].txSync == 1)) {
    
                wakeup();
    		}
            if (schedTab_[id].txSync == 1) {
                // start carrier sense for sending sync
                howToSend_ = BCASTSYNC;
#ifdef JOURNAL_PAPER
                syncSched_ = id;
#else
                currSched_ = id;
#endif
                state_ = CR_SENSE;
                double cw = (Random::random() % SYNC_CW) * slotTime_sec_;
                mhCS_.sched(CLKTICK2SEC(difs_) + cw);
    		}
    	}
        // start to listen now
    sched_1:
        mhCounter_[id]->sched(CLKTICK2SEC(listenTime_));
    
    } else if (mhCounter_[id]->value_ == syncTime_) { //synctime over
        // can start datatime now
    
        if (radioState_ != RADIO_SLP && radioState_ != RADIO_IDLE)
            goto sched_2;  // cannot send if radio is sending or recving
    
        if (state_ != SLEEP && state_ != IDLE && state_ != WAIT_DATA )
            goto sched_2; // cannot send if not in any of these states
    
        if (schedTab_[id].txData == 1 &&
            (!(mhNav_.busy()) && !(mhNeighNav_.busy())) &&
            (state_ == SLEEP || state_ == IDLE)) {
            // schedule sending data
      
            if (state_ == SLEEP)
                wakeup();
      
            struct hdr_smac *mh = (struct hdr_smac *)dataPkt_->access(hdr_mac::offset_);
            if ((u_int32_t)mh->dstAddr == MAC_BROADCAST)
                howToSend_ = BCASTDATA;
        	else
                howToSend_ = UNICAST;
#ifdef JOURNAL_PAPER
                        dataSched_ = id;
#else
            currSched_ = id;
#endif
            state_ = CR_SENSE;
            // start cstimer
            double cw = (Random::random() % DATA_CW) * slotTime_sec_;
            mhCS_.sched(CLKTICK2SEC(difs_) + cw);
    	}
    sched_2:
        mhCounter_[id]->sched(CLKTICK2SEC(dataTime_));
    
    } else if (mhCounter_[id]->value_ == dataTime_) { //datatime over

        // check if in the middle of recving a pkt
        if (radioState_ == RADIO_RX)
            goto sched_3;
#ifdef JOURNAL_PAPER    
        if (id == 0 && state_ == IDLE && searchNeighb_ ==0 && adaptiveListen_ ==0 )
#else
        if (id == 0 && state_ == IDLE && searchNeighb_ ==0 )
#endif
            sleep();

    sched_3:
        // now time to go to sleep
        mhCounter_[id]->sched(CLKTICK2SEC(cycleTime_));
    
        // check if ready to send out sync 
        if (schedTab_[id].numPeriods > 0) {
            schedTab_[id].numPeriods--;
            if (schedTab_[id].numPeriods == 0) {
    
                schedTab_[id].txSync = 1; 

                // neighbor discovery
                if ( id == 0 ) {
                	numSync_--;
                //  printf("numSync_ %d: ............node %d at %.6f\n", numSync_, index_,Scheduler::instance().clock());

                    if ( numSync_ == 1 ) {
                        searchNeighb_ = 1;  // node will go to neighbor discovery period starting from the next frame
                        //printf("Start Neighbor Discovery: ............node %d at %.6f\n", index_, Scheduler::instance().clock());
        			}
                    else if ( numSync_ == 0 ) {
                        searchNeighb_  = 0;  // neighbor discovery period lasts exactly one SYNC period
                        //printf("Ending Neighbor Discovery: ............node %d at %.6f\n", index_, Scheduler::instance().clock());
                        if ( numNeighb_ == 0 ) {
                            numSync_ = SRCH_CYCLES_SHORT;
        				}
            			else {
                            numSync_ = SRCH_CYCLES_LONG;

        				}
        			}		

        		}	
    		}
    	}
    }
#ifdef JOURNAL_PAPER
    }
#endif
}

#ifdef JOURNAL_PAPER
void SMAC::handleUpdateNeighbTimer() {
        //printf("SMAC::handleUpdateNeighbTimer: ............node %d at %.6f\n", index_, Scheduler::instance().clock());
        if (txRequest_ == 0) { // No data waiting to be transmitted
                txRequest_ = 1; // temporarily disable tx when updating
                update_myNeighbList();
        } else {
                updateNeighbList_ = 1; // set flag to update when tx done
        }
}
                                                                                                                                                            
void SMAC::handleAdaptiveListenTimer() {
    //node tries to go to sleep after adaptive listen times out
        adaptiveListen_ = 0;
        if (state_ == IDLE && state_ != TX_PKT && mhCounter_[0]->value_ == sleepTime_)
                sleep();
}
#endif

// recv function for mac layer

void SMAC::recv(Packet *p, Handler *h) {
                                                                                                                                                            
    struct hdr_cmn *ch = HDR_CMN(p);

    assert(initialized());

    // handle outgoing pkt
    if ( ch->direction() == hdr_cmn::DOWN) {
        sendMsg(p, h);
        return;
    }

    // handle incoming pkt
    // we have just recvd the first bit of a pkt on the network interface  
  
    // if the interface is in tx mode it probably would not see this pkt
    if (radioState_ == RADIO_TX && ch->error() == 0) {
        assert(tx_active_);
        ch->error() = 1;
        pktRx_ = p;
        mhRecv_.resched(txtime(p));

        return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区91精品张津瑜| 欧美成人一区二区三区片免费 | 日韩精品一区二区三区在线播放 | 亚洲精品在线免费观看视频| 亚洲视频在线观看一区| 精品一区中文字幕| 欧美精品一二三| 亚洲另类色综合网站| 成人黄色a**站在线观看| 日韩欧美一区中文| 亚洲国产日韩a在线播放性色| 国产91丝袜在线播放0| 日韩区在线观看| 日本午夜精品视频在线观看| 欧美视频一区二区三区在线观看| 亚洲欧美怡红院| 99精品一区二区| 国产精品视频一二| 国产成人av电影在线播放| 日韩一区二区视频在线观看| 中文字幕制服丝袜成人av| 国产风韵犹存在线视精品| 777a∨成人精品桃花网| 亚洲激情在线播放| 高清不卡一区二区| 日韩精品在线网站| 亚洲免费观看高清| 成人av电影在线网| 久久亚洲私人国产精品va媚药| 亚洲一区在线播放| 色香蕉成人二区免费| 国产精品亲子乱子伦xxxx裸| 蜜桃一区二区三区在线| 欧美区视频在线观看| 亚洲丝袜制服诱惑| 99亚偷拍自图区亚洲| 久久精品这里都是精品| 国产一区在线观看麻豆| 日韩精品一区二| 美女高潮久久久| 欧美视频一区二区在线观看| 亚洲国产精品天堂| 欧美日韩一区二区欧美激情| 一区二区三区中文字幕精品精品| av中文一区二区三区| 久久精品欧美一区二区三区麻豆| 久久超碰97人人做人人爱| 欧美一区二区免费观在线| 一区二区三区在线视频播放| 91国偷自产一区二区三区观看| 亚洲美女电影在线| 色综合天天性综合| 一区二区三区在线视频免费| 欧美综合天天夜夜久久| 亚洲美女区一区| 欧美精品第一页| 久久激五月天综合精品| www日韩大片| 不卡av免费在线观看| 国产精品成人一区二区三区夜夜夜| 成人黄色免费短视频| 亚洲美女淫视频| 欧美军同video69gay| 老司机午夜精品99久久| 国产日韩影视精品| 91麻豆精品在线观看| 一区二区三区精品久久久| 欧美乱妇一区二区三区不卡视频| 日韩va欧美va亚洲va久久| 日韩欧美中文字幕一区| 国产成人综合网站| 一区二区在线观看视频| 欧美乱熟臀69xxxxxx| 国精产品一区一区三区mba桃花 | 欧美日本一区二区| 久久精品免费看| 国产精品乱人伦中文| 91黄色免费观看| 精品亚洲国内自在自线福利| 中文字幕高清不卡| 日本福利一区二区| 麻豆一区二区在线| 亚洲欧美国产三级| 日韩一卡二卡三卡四卡| 成人动漫精品一区二区| 亚洲国产视频a| 国产女人18水真多18精品一级做| 在线免费观看日本一区| 韩国理伦片一区二区三区在线播放 | 欧美私模裸体表演在线观看| 蜜桃久久精品一区二区| 中文字幕一区二区三区乱码在线| 欧美一区日韩一区| 欧美一区午夜精品| 91视频.com| 国产一区二区在线看| 一区二区三区产品免费精品久久75| 波多野结衣一区二区三区 | 91国偷自产一区二区开放时间 | 精品一区二区三区香蕉蜜桃| 亚洲另类春色校园小说| 久久日韩粉嫩一区二区三区| 欧美日韩国产美女| 99久久婷婷国产综合精品| 美女一区二区在线观看| 亚洲综合在线免费观看| 国产精品无码永久免费888| 日韩欧美一级片| 欧美特级限制片免费在线观看| 波波电影院一区二区三区| 麻豆国产精品视频| 天堂久久久久va久久久久| 综合欧美一区二区三区| 国产日韩影视精品| 337p日本欧洲亚洲大胆精品 | 7777精品伊人久久久大香线蕉的 | 亚洲丶国产丶欧美一区二区三区| 亚洲欧美在线视频观看| 国产偷国产偷亚洲高清人白洁| 91精品免费在线| 欧美午夜一区二区三区| 97久久精品人人澡人人爽| 大尺度一区二区| 国产成人啪免费观看软件| 国产曰批免费观看久久久| 久久99久久99小草精品免视看| 日本欧美久久久久免费播放网| 综合av第一页| 国产精品毛片高清在线完整版| 欧美狂野另类xxxxoooo| 日韩三级在线观看| 欧美不卡视频一区| 久久综合九色综合欧美亚洲| 欧美成人精品3d动漫h| 91精品国产麻豆国产自产在线| 欧美精品高清视频| 日韩一卡二卡三卡国产欧美| 正在播放一区二区| 欧美成人免费网站| 亚洲国产视频一区二区| 午夜欧美一区二区三区在线播放| 亚洲国产精品自拍| 亚洲大型综合色站| 免费一级片91| 国产精品亚洲第一| av一本久道久久综合久久鬼色| 成人动漫一区二区三区| 色综合久久久久综合99| 在线观看日韩毛片| 91精品啪在线观看国产60岁| 欧美大片拔萝卜| 国产日韩欧美不卡在线| 亚洲啪啪综合av一区二区三区| 一区二区高清免费观看影视大全| 亚洲国产精品久久久久婷婷884| 亚洲一区二区三区视频在线 | 色综合久久久久网| 欧美老女人第四色| 久久免费电影网| 亚洲免费在线播放| 另类的小说在线视频另类成人小视频在线 | 精品久久久久久久久久久久久久久久久 | 国产精品视频在线看| 亚洲国产精品一区二区www| 蜜臀久久久99精品久久久久久| 国产精品911| 在线观看免费视频综合| 精品国产伦一区二区三区免费 | 肉色丝袜一区二区| 成人一区在线观看| 欧美视频第二页| 国产人成亚洲第一网站在线播放| 亚洲欧美电影一区二区| 久久97超碰色| 在线观看欧美日本| 国产视频一区二区在线观看| 中文字幕不卡的av| 日韩av电影免费观看高清完整版在线观看| 久久成人免费日本黄色| 91高清视频免费看| 久久久三级国产网站| 视频一区二区不卡| 成人午夜私人影院| 日韩欧美一区在线| 一区二区三区在线不卡| 国产乱人伦精品一区二区在线观看| 91在线视频播放地址| 国产日韩精品一区二区三区 | 国产91精品一区二区麻豆亚洲| 欧美日韩国产123区| 激情国产一区二区 | 日本系列欧美系列| 91蝌蚪porny九色| 久久综合色婷婷| 一区二区三区在线视频免费观看| 日本vs亚洲vs韩国一区三区 | 欧美电影一区二区| 亚洲精品国产无套在线观| 成人午夜在线播放| 久久新电视剧免费观看|