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

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

?? smac.cc

?? 在ns2中仿真無線傳感器網絡mac層協議的代碼smac
?? CC
?? 第 1 頁 / 共 5 頁
字號:
    Tcl& tcl = Tcl::instance();
    tcl.evalf("Mac/SMAC set syncFlag_");
    if (strcmp(tcl.result(), "0") != 0)  
        syncFlag_ = 1;              // syncflag is set; use sleep-wakeup cycle


    tcl.evalf("Mac/SMAC set selfConfigFlag_");
        if (strcmp(tcl.result(), "0") != 0)
                selfConfigFlag_ = 1;              // autoflag is set; user can not configure the schedule start time

    
    // User can specify the duty cycle
    tcl.evalf("Mac/SMAC set dutyCycle_");
    if (strcmp(tcl.result(), "0") != 0){
                bind_bw("dutyCycle_", &dutyCycle_);
                printf("dutyCyle=%f\n", dutyCycle_);
    
    }
        else {
                  dutyCycle_ = SMAC_DUTY_CYCLE;
                  printf("dutyCyle=%f\n", dutyCycle_);
    }

    if (!syncFlag_)
        txData_ = 0;
  
    else {
        // Calculate sync/data/sleeptime based on duty cycle
        // all time in ms
        syncTime_ = difs_ + slotTime_ * SYNC_CW + SEC2CLKTICK(durSyncPkt_) + guardTime_;
#ifdef JOURNAL_PAPER
                // added time for overhearing CTS so that can do adaptive listen
                dataTime_ = difs_ + slotTime_ * DATA_CW + SEC2CLKTICK(durCtrlPkt_) + PROC_DELAY + sifs_ + SEC2CLKTICK(durCtrlPkt_) + guardTime_;
#else
        dataTime_ = difs_ + slotTime_ * DATA_CW + SEC2CLKTICK(durCtrlPkt_) + guardTime_;
#endif
        listenTime_ = syncTime_ + dataTime_;
        cycleTime_ = listenTime_ * 100 / dutyCycle_ + 1;
        sleepTime_ = cycleTime_ - listenTime_;
    
        //printf("cycletime=%d, sleeptime=%d, listentime=%d\n", cycleTime_, sleepTime_, listenTime_);


        for (int i=0; i< SMAC_MAX_NUM_SCHEDULES; i++) {
            mhCounter_[i] = new SmacCounterTimer(this, i);
            mhCounter_[i]->syncTime_ = syncTime_;
            mhCounter_[i]->dataTime_ = dataTime_;
            mhCounter_[i]->listenTime_ = listenTime_;
            mhCounter_[i]->sleepTime_ = sleepTime_;
            mhCounter_[i]->cycleTime_ = cycleTime_;
    	}

        // printf("syncTime= %d, dataTime= %d, listentime = %d, sleepTime= %d, cycletime= %d\n", syncTime_, dataTime_, listenTime_, sleepTime_, cycleTime_);

        // listen for a whole period to choose a schedule first
        //double cw = (Random::random() % SYNC_CW) * slotTime_sec_ ;
  
        // The foll (higher) CW value allows neigh nodes to follow a single schedule
        // double w = (Random::random() % (SYNC_CW)) ;
        // double cw = w/10.0;
        double c = CLKTICK2SEC(listenTime_) + CLKTICK2SEC(sleepTime_);
        double s = SYNCPERIOD + 1;
        double t = c * s ;
        //mhGene_.sched(t + cw);

        if ( selfConfigFlag_ == 1) {
#ifdef JOURNAL_PAPER
                adapTime_ = dataTime_;
                mhGene_.sched(t);
                                                                                                                                                            
                //start setting timer for update neighbor list
                //printf("SMAC_UPDATE_NEIGHB_PERIOD: ............node %d %d at %.6f\n", index_, SMAC_UPDATE_NEIGHB_PERIOD, Scheduler::instance().clock());
                mhUpdateNeighb_.sched(SMAC_UPDATE_NEIGHB_PERIOD);
                //dump();
#else
        mhGene_.sched(t);
#endif
    	}
    }
}

void SMAC::setMySched(Packet *pkt) 
{
    // set my schedule and put it into the first entry of schedule table
    state_ = IDLE;
    numSched_ = 1;
    schedTab_[0].numPeriods = 0;
    schedTab_[0].txData = 0;
    schedTab_[0].txSync = 1; // need to brdcast my schedule
  
    if (pkt == 0) { // freely choose my schedule
#ifdef JOURNAL_PAPER
                //printf("#############################################################\n");
                //printf(" %d is choosing its own shedule %d \n", index_, index_);
                //printf("#############################################################\n");
                schedState_++;
                mhCounter_[0]->sched(CLKTICK2SEC(listenTime_+index_*10));
                schedTab_[0].syncNode = index_;
#else
        mhCounter_[0]->sched(CLKTICK2SEC(listenTime_));
#endif
        mySyncNode_ = index_; // myself
        currSched_ = 0;
        //sendSYNC();  
    
    } else { // follow schedule in syncpkt
    
        struct smac_sync_frame *pf = (struct smac_sync_frame *)pkt->access(hdr_mac::offset_);

        mhCounter_[0]->sched(pf->sleepTime);
#ifdef JOURNAL_PAPER
                mySyncNode_ = pf->syncNode;
                //printf("#############################################################\n");
                //printf("%d receives SYNC packet from %d and starts following shedule %d \n", index_, pf->srcAddr, pf->syncNode);
                //printf("#############################################################\n");
                schedTab_[0].numNodes++;  // 2 nodes on this schedule now
                schedTab_[0].syncNode = pf->syncNode;
                schedState_++;
                                                                                                                                                            
                //add node in my neighbor list
                neighbList_[0].nodeId = pf->srcAddr;
                neighbList_[0].schedId = 0;
                neighbList_[0].active = 1;
                neighbList_[0].state = pf->state;
#else
        mySyncNode_ = pf->srcAddr;    
        //add node in my neighbor list
        neighbList_[0].nodeId = mySyncNode_;
        neighbList_[0].schedId = 0;
#endif
        numNeighb_ = 1;
    }
}



int SMAC::command(int argc, const char*const* argv)
{
    if (argc == 3) {
        if (strcmp(argv[1], "log-target") == 0) {
            logtarget_ = (NsObject*) TclObject::lookup(argv[2]);
            if(logtarget_ == 0)
                return TCL_ERROR;
            return TCL_OK;
    	}
        else if ( selfConfigFlag_ != 1) {
            if (strcmp(argv[1], "schedule-start-time") == 0) {

                            startTime_ = strtod(argv[2],NULL);

                            // set up schedule
                            state_ = IDLE;
                            numSched_ = 1;
                            schedTab_[0].numPeriods = SYNCPERIOD;
                            schedTab_[0].txData = 0;
                            schedTab_[0].txSync = 1; // need to brdcast my schedule

                            // schedule starts up with listen time (sync+data)
                            // need to caculate time to sleep

                            startTime_ = startTime_ + listenTime_;
                            if ( startTime_ >= cycleTime_ )
                                    startTime_ = startTime_ - cycleTime_;

                            mhCounter_[0]->sched(CLKTICK2SEC(startTime_));
                            mySyncNode_ = index_; // myself

                            currSched_ = 0;

                            return TCL_OK;
    	
                    }

    	}
    }

    return Mac::command(argc, argv);

}

#ifdef JOURNAL_PAPER
void SMAC::adaptiveListen()
{
        // adaptively wake-up at the end of current transmission. Will try to
        // send only if the buffered packet is unicast. Since my next-hop
        // neighbor may not be aware of the Tx of my previous-hop neighbor,
        // broadcast now is unreliable
        //printf("adaptiveListen set AdaptiveTimer: node %d scheduletime: %f adapTime_: %d time:%.9f \n", index_, mhCounter_[0]->value_, adapTime_, Scheduler::instance().clock());
        mhAdap_.resched(CLKTICK2SEC(adapTime_)); // set timer to bring me back to sleep
        adaptiveListen_ = 1;
        if (state_ == SLEEP) {
                //printf("adaptiveListen wakeup: node %d scheduletime: %f time:%.9f \n", index_, mhCounter_[0]->value_, Scheduler::instance().clock());
                wakeup();
        }
         else {
        }
                                                                                                                                                            
        if ( schedTab_[0].txData == 1 && sendAddr == UNICAST_ADDR){
                adapSend_ = 1;
                checkToSend();
        }
}
#endif

// XXXX smac handler functions

void SMAC::handleSendTimer() {
    assert(pktTx_);
  
    struct hdr_smac *sh = HDR_SMAC(pktTx_);
  
    // Packet tx is done so radio should go back to idle
    radioState_ = RADIO_IDLE;
    tx_active_ = 0;
  
    switch(sh->type) {
    
    case RTS_PKT:
        sentRTS(pktTx_);
        break;

    case CTS_PKT:
        sentCTS(pktTx_);
        break;
    
    case DATA_PKT:
        sentDATA(pktTx_);
        break;
  
    case ACK_PKT:
        sentACK(pktTx_);
        break;
    case SYNC_PKT:
        sentSYNC(pktTx_);
        break;
    default:
        fprintf(stderr, "unknown mac pkt type, %d\n", sh->type);
        break;
    }
  
    pktTx_ = 0;
}


void SMAC::handleRecvTimer() {
    assert(pktRx_);
  
    struct hdr_cmn *ch = HDR_CMN(pktRx_);
    struct hdr_smac *sh = HDR_SMAC(pktRx_);

    if (state_ == SLEEP) {

        // Bug fixed here. a collision might happen just now, need to clear the mac_collision_ flag, otherwise the node won't receive any following packet

        if (mac_collision_) {
                    discard(pktRx_, DROP_MAC_COLLISION);
                    mac_collision_ = 0;
                    updateNav(CLKTICK2SEC(eifs_));

                    if (state_ == CR_SENSE)
                            sleep(); // have to wait until next wakeup time
                    else
                            radioState_ = RADIO_IDLE;

                    goto done;
                }

        discard(pktRx_, DROP_MAC_SLEEP);
        radioState_ = RADIO_SLP;
        goto done;
    }
  
    // if the radio interface is tx'ing when this packet arrives
    // I would never have seen it and should do a silent discard 
  
    if (radioState_ == RADIO_TX) {
        Packet::free(pktRx_);
        goto done;
    }
  
    if (mac_collision_) {
        discard(pktRx_, DROP_MAC_COLLISION);
        mac_collision_ = 0;
        updateNav(CLKTICK2SEC(eifs_));
    
        if (state_ == CR_SENSE) 
            sleep(); // have to wait until next wakeup time
        else 
            radioState_ = RADIO_IDLE;
    
        goto done;
    }
  
    if (ch->error()) {
        Packet::free(pktRx_);
        updateNav(CLKTICK2SEC(eifs_)); 

        if (state_ == CR_SENSE) 
            sleep();
        else 
            radioState_ = RADIO_IDLE;
      
        goto done;
    }
  
    // set radio from rx to idle again
    radioState_ = RADIO_IDLE;

    switch (sh->type) {
    case DATA_PKT:
        handleDATA(pktRx_);
        break;
    case RTS_PKT:
        handleRTS(pktRx_);
        Packet::free(pktRx_);
        break;
    case CTS_PKT:
        handleCTS(pktRx_);
        Packet::free(pktRx_);
        break;
    case ACK_PKT:
        handleACK(pktRx_);
        Packet::free(pktRx_);
        break;
    case SYNC_PKT:
        handleSYNC(pktRx_);
        Packet::free(pktRx_);
        break;
    default:
        fprintf(stderr, "Unknown smac pkt type, %d\n", sh->type);
        break;
    }
  
 done:
    pktRx_ = 0;
  
}

void SMAC::handleGeneTimer() 
{
  
    if (syncFlag_) {
        // still in choose-schedule state
        if (numSched_ == 0) {
            setMySched(0); // I'm the primary synchroniser
            return;
    	} 
    }
    if (state_ == WAIT_CTS) {  // CTS timeout
        if (numRetry_ < SMAC_RETRY_LIMIT) {
            numRetry_++;
            // wait until receiver's next wakeup
            state_ = IDLE;
#ifdef JOURNAL_PAPER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久国产综合久久| 国产mv日韩mv欧美| 日韩久久免费av| 国产成人精品免费看| 一区二区高清免费观看影视大全| 欧美日韩中文字幕一区| 国产一区二区不卡在线| 国产精品福利一区二区三区| 欧美在线观看一区| 精久久久久久久久久久| 一区二区三区中文字幕精品精品| 欧美日韩和欧美的一区二区| 玉足女爽爽91| 精品国产凹凸成av人导航| 国产成人精品www牛牛影视| 亚洲一区视频在线观看视频| 久久综合99re88久久爱| 欧美日韩不卡一区二区| 不卡av在线网| 美腿丝袜亚洲色图| 亚洲精品国产第一综合99久久| 欧美大片拔萝卜| 色香蕉成人二区免费| 国产精品亚洲一区二区三区在线 | 久久综合色8888| 91理论电影在线观看| 精久久久久久久久久久| 亚洲国产中文字幕在线视频综合| 久久久久88色偷偷免费| 91亚洲国产成人精品一区二三| 午夜婷婷国产麻豆精品| 国产精品久久二区二区| 欧美一区二区成人| 欧美在线观看视频一区二区三区| 成人丝袜高跟foot| 欧美极品xxx| 91精品国产91热久久久做人人| 日本精品一区二区三区四区的功能| 国产综合色在线视频区| 麻豆一区二区三| 奇米888四色在线精品| 亚洲国产色一区| 依依成人综合视频| 一区二区三区在线视频播放| 国产精品家庭影院| 国产女人aaa级久久久级| 久久久久久久久免费| 日韩欧美专区在线| 欧美一区二区三区视频免费播放| 欧美亚男人的天堂| 在线日韩av片| 粉嫩欧美一区二区三区高清影视| 国产一区日韩二区欧美三区| 加勒比av一区二区| 九九精品视频在线看| 激情久久五月天| 国产一区二区精品在线观看| 日韩av在线播放中文字幕| 亚洲h动漫在线| 丝袜亚洲另类欧美| 日韩高清电影一区| 男男gaygay亚洲| 九色综合狠狠综合久久| 久久91精品久久久久久秒播| 久久精品国产澳门| 麻豆久久久久久久| 麻豆精品一区二区三区| 精品一区二区成人精品| 国产精品自在欧美一区| 国产精选一区二区三区| youjizz久久| 色综合久久久久综合体| 欧美日韩精品三区| 久久综合久久99| 中文av字幕一区| 一个色综合网站| 午夜久久久久久电影| 美女免费视频一区| 成熟亚洲日本毛茸茸凸凹| 97精品超碰一区二区三区| 欧美日韩久久一区二区| 精品99999| 成人欧美一区二区三区白人| 亚洲午夜在线观看视频在线| 免费在线观看成人| 成人做爰69片免费看网站| 99精品久久只有精品| 欧美丝袜丝nylons| 日韩欧美亚洲国产另类| 精品久久久久久综合日本欧美| 久久亚区不卡日本| 亚洲人精品午夜| 美女精品一区二区| 91最新地址在线播放| 91麻豆精品国产91久久久久久久久| 久久久久久久久久看片| 亚洲综合久久久| 国产精品一区二区三区99| 色播五月激情综合网| 久久久久久免费网| 亚洲成国产人片在线观看| 国产精品中文有码| 欧美亚洲综合一区| 中文字幕二三区不卡| 日韩国产一二三区| 99精品视频在线观看| 欧美sm美女调教| 亚洲美女视频在线| 国产精品白丝jk白祙喷水网站| 欧美午夜免费电影| 中文一区二区在线观看| 男女男精品视频| 不卡一区二区中文字幕| 欧美精品自拍偷拍| 亚洲私人影院在线观看| 国产馆精品极品| 91精品国产一区二区| 一区二区三区免费网站| 丰满亚洲少妇av| www国产精品av| 日韩av在线发布| 欧美亚洲国产一卡| 亚洲欧洲日韩av| 国产精选一区二区三区| 日韩欧美国产三级| 性欧美大战久久久久久久久| 成人毛片视频在线观看| 精品国产一区二区亚洲人成毛片 | 免费xxxx性欧美18vr| 欧美性色黄大片| 亚洲欧美日韩中文播放 | 国产一区二区不卡在线| 欧美一卡2卡三卡4卡5免费| 一区二区高清在线| 色综合久久综合中文综合网| 国产精品青草久久| 国产麻豆91精品| 精品国产一区久久| 久久精品国产精品青草| 欧美一级理论性理论a| 视频一区二区不卡| 欧美精品v国产精品v日韩精品| 亚洲精品高清视频在线观看| 成人国产亚洲欧美成人综合网 | 久久综合国产精品| 国模少妇一区二区三区| 久久伊人蜜桃av一区二区| 精品在线一区二区| 欧美mv和日韩mv国产网站| 久久99精品国产麻豆不卡| 精品国产免费视频| 精品一区二区免费在线观看| 亚洲精品一区二区三区精华液| 91国偷自产一区二区三区成为亚洲经典| 久久综合色一综合色88| 精品一区二区三区久久久| 精品国产一区久久| 国产成人午夜视频| 国产精品毛片a∨一区二区三区| 国产不卡视频在线播放| 国产视频911| a级精品国产片在线观看| 国产精品护士白丝一区av| 91丝袜美女网| 一级精品视频在线观看宜春院 | 中文字幕在线观看不卡视频| 福利一区在线观看| 亚洲视频 欧洲视频| 欧美三级日本三级少妇99| 日本少妇一区二区| 精品美女被调教视频大全网站| 精品一区二区三区久久| 国产日韩欧美一区二区三区乱码 | 成人av电影免费观看| 亚洲综合色自拍一区| 亚洲精品在线观| 在线观看日韩电影| 韩国成人精品a∨在线观看| 亚洲日本一区二区| 日韩精品一区二区三区在线播放| 99久久婷婷国产综合精品电影| 午夜国产不卡在线观看视频| 国产免费成人在线视频| 4438x亚洲最大成人网| 成人av动漫在线| 激情文学综合网| 亚洲国产精品影院| 国产欧美一区二区精品秋霞影院| 欧美日韩国产综合视频在线观看 | 久久婷婷国产综合精品青草| 欧美专区亚洲专区| 粉嫩13p一区二区三区| 日韩av一二三| 一区二区不卡在线播放 | 国产精品久久精品日日| 精品久久久久久久人人人人传媒 | 国产精品每日更新| 欧美一级日韩不卡播放免费| 色综合天天综合网天天看片| 国产麻豆成人传媒免费观看|