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

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

?? multihopenginem.nc

?? nesC寫的heed算法
?? NC
字號:
/ $Id: MultiHopEngineM.nc,v 1.2.2.3 2003/08/20 21:51:49 idgay Exp $

/*									tab:4
 * "Copyright (c) 2000-2003 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 * Copyright (c) 2002-2003 Intel Corporation
 * All rights reserved.
 *
 * This file is distributed under the terms in the attached INTEL-LICENSE     
 * file. If you do not find these files, copies can be found by writing to
 * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
 * 94704.  Attention:  Intel License Inquiry.
 */

/* 
 * A simple module that handles multihop packet movement.  It accepts 
 * messages from both applications and the network and does the necessary
 * interception and forwarding.
 * It interfaces to an algorithmic componenet via RouteSelect. It also acts
 * as a front end for RouteControl
 */

includes AM;
includes MultiHop;

#ifndef MHOP_QUEUE_SIZE
#define MHOP_QUEUE_SIZE	16
#endif

module MultiHopEngineM {
  provides {
    interface StdControl;
    interface Receive[uint8_t id];
    interface Send[uint8_t id];
    interface Intercept[uint8_t id];
    interface Intercept as Snoop[uint8_t id];
    interface RouteControl;
	/********* HEED code: energy control ****/
	interface EnergyControl;
	/****************************************/
  }
  uses {
    interface ReceiveMsg[uint8_t id];
    interface SendMsg[uint8_t id];
    interface RouteControl as RouteSelectCntl;
    interface RouteSelect;
    interface StdControl as SubControl;
    interface CommControl;
    interface StdControl as CommStdControl;
	/********* HEED code: energy control ****/
	interface EnergyControl as EnergyController;
	/****************************************/
  }
}

implementation {

  enum {
    FWD_QUEUE_SIZE = MHOP_QUEUE_SIZE, // Forwarding Queue
    EMPTY = 0xff
  };


  /* Routing status of local node */


  /* Internal storage and scheduling state */
  struct TOS_Msg FwdBuffers[FWD_QUEUE_SIZE];
  struct TOS_Msg *FwdBufList[FWD_QUEUE_SIZE];

  uint8_t iFwdBufHead, iFwdBufTail;

  int timer_rate,timer_ticks;
  
  /***********************************************************************
   * Initialization 
   ***********************************************************************/


  static void initialize() {
    int n;

    for (n=0; n < FWD_QUEUE_SIZE; n++) {
      FwdBufList[n] = &FwdBuffers[n];
    } 

    iFwdBufHead = iFwdBufTail = 0;
  }

  command result_t StdControl.init() {
    initialize();
    call CommStdControl.init();
    return call SubControl.init();
  }

  command result_t StdControl.start() {
    call CommStdControl.start();
    call SubControl.start();
    return call CommControl.setPromiscuous(TRUE);
  }

  command result_t StdControl.stop() {
    call SubControl.stop();
    // XXX message doesn't get received if we stop then start radio
    return call CommStdControl.stop();
  }


  /***********************************************************************
   * Commands and events
   ***********************************************************************/

  command result_t Send.send[uint8_t id](TOS_MsgPtr pMsg, uint16_t PayloadLen) {

    uint16_t usMHLength = offsetof(TOS_MHopMsg,data) + PayloadLen;

    if (usMHLength > TOSH_DATA_LENGTH) {
      return FAIL;
    }

    //dbg(DBG_ROUTE,"MHop: send\n");

    call RouteSelect.initializeFields(pMsg,id);

    if (call RouteSelect.selectRoute(pMsg,id) != SUCCESS) {
      return FAIL;
    }

    //dbg(DBG_ROUTE,"MHop: out pkt 0x%x\n",((TOS_MHopMsg *)pMsg->data)->seqno);
    
    if (call SendMsg.send[id](pMsg->addr, usMHLength, pMsg) != SUCCESS) {
      return FAIL;
    }
	else {
	  /*** HEED: energy control ******/
	  if (TOS_LOCAL_ADDRESS != 0) {
		call EnergyControl.reducePoints();
		if (!(call EnergyControl.isAlive()))
			call StdControl.stop();
	  }
	  /**********************************/
	}
    return SUCCESS;    
  } 

  command void *Send.getBuffer[uint8_t id](TOS_MsgPtr pMsg, uint16_t* length) {
    
    TOS_MHopMsg *pMHMsg = (TOS_MHopMsg *)pMsg->data;
    
    *length = TOSH_DATA_LENGTH - offsetof(TOS_MHopMsg,data);

    return (&pMHMsg->data[0]);

  }

  
  static TOS_MsgPtr mForward(TOS_MsgPtr pMsg, uint8_t id) {
    TOS_MsgPtr	pNewBuf = pMsg;
    
    if (((iFwdBufHead + 1) % FWD_QUEUE_SIZE) == iFwdBufTail) 
      return pNewBuf;
    
    if ((call RouteSelect.selectRoute(pMsg,id)) != SUCCESS) 
      return pNewBuf;
 
#ifdef CLUSTERING_ON
	if ((call RouteControl.isClusterHead()) && (TOS_LOCAL_ADDRESS!=0))
		pMsg->addr = TOS_LOCAL_ADDRESS;
#endif

    // Failures at the send level do not cause the seq. number space to be 
    // rolled back properly.  This is somewhat broken.
    if (call SendMsg.send[id](pMsg->addr,pMsg->length,pMsg) == SUCCESS) {
      pNewBuf = FwdBufList[iFwdBufHead];
      FwdBufList[iFwdBufHead] = pMsg;
      iFwdBufHead++; iFwdBufHead %= FWD_QUEUE_SIZE;

	  /*** HEED: energy control ******/
	  if (TOS_LOCAL_ADDRESS != 0 && pMsg->addr != TOS_LOCAL_ADDRESS) {
		call EnergyControl.reducePoints();
		call EnergyControl.addOverhead();
		if (!(call EnergyControl.isAlive()))
			call StdControl.stop();
	  }
	  /**********************************/
    }
    
    return pNewBuf;    
  }

  event TOS_MsgPtr ReceiveMsg.receive[uint8_t id](TOS_MsgPtr pMsg) {
    TOS_MHopMsg		*pMHMsg = (TOS_MHopMsg *)pMsg->data;
    uint16_t		PayloadLen = pMsg->length - offsetof(TOS_MHopMsg,data);

    dbg(DBG_ROUTE, "MHop: Msg Rcvd, src 0x%02x, org 0x%02x, parent 0x%02x\n", 
        pMHMsg->sourceaddr, pMHMsg->originaddr, 0 /*pMHMsg->parentaddr*/);

    // Ordinary message requiring forwarding
    if (pMsg->addr == TOS_LOCAL_ADDRESS) { // Addressed to local node
      if ((signal Intercept.intercept[id](pMsg,&pMHMsg->data[0],PayloadLen)) == SUCCESS) {
        pMsg = mForward(pMsg,id);
      }
    }
    else {
      // Snoop the packet for permiscuous applications
      signal Snoop.intercept[id](pMsg,&pMHMsg->data[0],PayloadLen);
    }

	/*** HEED: energy control ******/
	/*if (TOS_LOCAL_ADDRESS != 0) {
		call EnergyControl.reducePoints();
		if (!(call EnergyControl.isAlive()))
			call StdControl.stop();
	}*/
	/**********************************/

    return pMsg;
  }

  event result_t SendMsg.sendDone[uint8_t id](TOS_MsgPtr pMsg, result_t success) {
    //dbg(DBG_ROUTE, "MHop: senddone 0x%x 0x%x\n", pMsg, success);  
    if (pMsg == FwdBufList[iFwdBufTail]) { // Msg was from forwarding queue
      iFwdBufTail++; iFwdBufTail %= FWD_QUEUE_SIZE;
    } else {
      signal Send.sendDone[id](pMsg, success);
    } 

    return SUCCESS;
  }

  command uint16_t RouteControl.getParent() {
    return call RouteSelectCntl.getParent();
  }

  command uint8_t RouteControl.getQuality() {
    return call RouteSelectCntl.getQuality();
  }

  command uint8_t RouteControl.getDepth() {
    return call RouteSelectCntl.getDepth();
  }

  command uint8_t RouteControl.getOccupancy() {
    uint16_t uiOutstanding = (uint16_t)iFwdBufTail - (uint16_t)iFwdBufHead;
    uiOutstanding %= FWD_QUEUE_SIZE;
    return (uint8_t)uiOutstanding;
  }

  command uint16_t RouteControl.getSender(TOS_MsgPtr msg) {
    TOS_MHopMsg	 *pMHMsg = (TOS_MHopMsg *)msg->data;
    return pMHMsg->sourceaddr;
  }

  command result_t RouteControl.setUpdateInterval(uint16_t Interval) {
    return call RouteSelectCntl.setUpdateInterval(Interval);
  }

  command result_t RouteControl.manualUpdate() {
    return call RouteSelectCntl.manualUpdate();
  }

#ifdef CLUSTERING_ON
  command result_t RouteControl.isClusterHead() {
    return call RouteSelectCntl.isClusterHead();
  }

  command result_t RouteControl.isInClusteringProcess() {
	return call RouteSelectCntl.isInClusteringProcess();
  }

  command result_t RouteControl.wasCH() {
	return call RouteSelectCntl.wasCH();
  }
#endif

  /*********** HEED: energy control interface ***/
  command result_t EnergyControl.initPoints() {
	return (call EnergyController.initPoints());
  }

  command uint32_t EnergyControl.getRemainingPoints() {
	return (call EnergyController.getRemainingPoints());
  }

  command result_t EnergyControl.reducePoints() {
	return (call EnergyController.reducePoints());
  }

  command result_t EnergyControl.addOverhead() {
	return (call EnergyController.addOverhead());
  }

  command uint32_t EnergyControl.getOverhead() {
	return (call EnergyController.getOverhead());
  }

  command result_t EnergyControl.isAlive() {
	return (call EnergyController.isAlive());
  }
  /***************************************/

  default event result_t Send.sendDone[uint8_t id](TOS_MsgPtr pMsg, result_t success) {
  	
    return SUCCESS;
  }

  default event result_t Intercept.intercept[uint8_t id](TOS_MsgPtr pMsg, void* payload, 
							 uint16_t payloadLen) {
    return SUCCESS;
  }

  default event result_t Snoop.intercept[uint8_t id](TOS_MsgPtr pMsg, void* payload, 
                                                     uint16_t payloadLen) {
    return SUCCESS;
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩精品| av一区二区三区黑人| 高清不卡一二三区| 欧美日韩在线观看一区二区 | 色诱视频网站一区| 91精品一区二区三区久久久久久 | 99精品在线免费| 精品sm捆绑视频| 亚洲午夜久久久久久久久电影网| 国产电影精品久久禁18| 91精品国产一区二区人妖| 综合婷婷亚洲小说| 成人一级片网址| 久久综合久久综合久久| 免费在线观看日韩欧美| 欧美性一二三区| 亚洲日本免费电影| av午夜精品一区二区三区| 久久亚洲一区二区三区明星换脸 | 精品日韩成人av| 三级欧美韩日大片在线看| 日本丶国产丶欧美色综合| 最好看的中文字幕久久| 成人美女在线观看| 国产精品乱人伦| 成人短视频下载| 日韩美女视频19| av在线不卡免费看| 亚洲特黄一级片| 91成人在线免费观看| 夜夜嗨av一区二区三区网页 | 99久久久国产精品免费蜜臀| 亚洲国产成人在线| 成人h动漫精品| 成人欧美一区二区三区视频网页| 大桥未久av一区二区三区中文| 国产日韩精品一区二区三区在线| 国产福利精品一区| 国产精品福利一区| 日本久久一区二区三区| 亚洲女性喷水在线观看一区| 一本久久精品一区二区| 亚洲一区二区在线观看视频| 欧美日韩日本视频| 久久国产免费看| 国产欧美日韩综合| 91免费国产视频网站| 亚洲五码中文字幕| 日韩一区二区三区在线观看| 韩国成人精品a∨在线观看| 国产亚洲精品aa| 91小视频在线免费看| 香蕉av福利精品导航| 日韩精品一区二区三区老鸭窝| 国内不卡的二区三区中文字幕| 亚洲国产精品国自产拍av| 91美女片黄在线观看91美女| 亚洲va欧美va天堂v国产综合| 日韩一区二区三区四区| 成人黄动漫网站免费app| 亚洲福利一二三区| 久久久久久久久久久久久久久99| 成人涩涩免费视频| 五月天中文字幕一区二区| 精品国产免费视频| 91小视频免费看| 久久99久久99精品免视看婷婷 | 日本成人在线电影网| 国产欧美精品一区二区色综合 | 中文字幕国产一区二区| 精品视频1区2区3区| 国产美女一区二区三区| 亚洲综合激情小说| 久久精品一区四区| 欧美一区二区三区性视频| 成人18视频在线播放| 麻豆精品视频在线| 亚洲一区二区三区四区在线| 精品国产免费人成在线观看| 欧美影视一区二区三区| 国产91丝袜在线18| 麻豆国产欧美日韩综合精品二区 | 国产精品久线在线观看| 日韩欧美中文字幕制服| 91免费国产在线观看| 国产精品一区二区三区乱码| 爽爽淫人综合网网站| 亚洲裸体xxx| 欧美韩国日本一区| 久久这里只有精品视频网| 欧美日韩大陆一区二区| 99精品久久只有精品| 精品亚洲成a人在线观看| 亚洲国产成人av网| 亚洲免费av在线| 国产精品免费看片| 国产午夜亚洲精品羞羞网站| 欧美va在线播放| 88在线观看91蜜桃国自产| 欧美亚洲一区三区| 欧洲亚洲国产日韩| 在线视频国内自拍亚洲视频| 97久久精品人人爽人人爽蜜臀 | 在线观看日韩av先锋影音电影院| 国产91丝袜在线播放0| 麻豆国产精品官网| 蜜桃精品视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 亚洲精品成人少妇| 亚洲女与黑人做爰| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美一区二区视频| 日韩毛片在线免费观看| 玉米视频成人免费看| 亚洲精品成人少妇| 亚洲自拍偷拍麻豆| 午夜久久久久久| 日韩电影在线一区二区| 蜜臀91精品一区二区三区| 六月丁香综合在线视频| 精品一区二区久久| 国产福利一区二区三区在线视频| 国产成人精品亚洲午夜麻豆| 成人av网址在线观看| 97久久超碰国产精品电影| 一本久久精品一区二区| 欧美日韩国产成人在线91| 日韩午夜激情av| 久久精品网站免费观看| 中文字幕在线观看一区二区| 亚洲三级理论片| 日韩av在线播放中文字幕| 九一久久久久久| 成人黄色在线看| 欧美日韩中文字幕一区二区| 日韩视频在线永久播放| 国产欧美日韩在线视频| 一区二区三区欧美久久| 免费在线看成人av| 成人一区二区三区中文字幕| 一本大道久久a久久精品综合| 欧美无砖专区一中文字| 精品99999| 亚洲精品成人精品456| 奇米精品一区二区三区四区| 丁香六月久久综合狠狠色| 91国产免费看| 精品国产乱码久久久久久老虎 | 日韩电影免费在线观看网站| 久久疯狂做爰流白浆xx| 91在线高清观看| 精品日韩在线观看| 夜夜爽夜夜爽精品视频| 国产一区二区美女诱惑| 欧美四级电影网| 久久精品一区二区三区av| 亚洲成人免费视频| 成人三级在线视频| 日韩欧美国产精品| 亚洲观看高清完整版在线观看| 国产精品69毛片高清亚洲| 在线观看国产精品网站| 国产欧美精品一区二区色综合 | 国产午夜精品一区二区三区四区| 又紧又大又爽精品一区二区| 国产一区二区三区香蕉 | 蜜臀av一区二区三区| 色悠悠亚洲一区二区| 久久久一区二区三区| 日精品一区二区三区| 91啪亚洲精品| 欧美国产综合色视频| 精品系列免费在线观看| 欧美日韩国产另类一区| 亚洲三级小视频| 成人动漫一区二区| 久久女同性恋中文字幕| 麻豆精品在线看| 91精品国产一区二区三区蜜臀| 亚洲精品国产第一综合99久久| 国产精品亚洲第一区在线暖暖韩国 | 亚洲精品中文在线影院| 国产成人在线网站| 精品日韩在线观看| 免费一级片91| 欧美精品欧美精品系列| 亚洲国产成人精品视频| 在线一区二区视频| 亚洲激情在线播放| 91蜜桃网址入口| 亚洲欧美色图小说| 97超碰欧美中文字幕| 亚洲欧洲日产国码二区| 成人黄色免费短视频| 国产精品久久久久久户外露出| 国产91精品精华液一区二区三区| 国产日产欧美一区二区三区| 福利电影一区二区| 日韩一区欧美小说| 91久久香蕉国产日韩欧美9色|