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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? drip.java

?? 無線通信的主要編程軟件,是無線通信工作人員的必備工具,關(guān)天相關(guān)教程我會(huì)在后續(xù)傳上.
?? JAVA
字號(hào):
// $Id: Drip.java,v 1.2 2005/10/31 17:04:53 gtolle Exp $

/*									tab:2
 *
 *
 * "Copyright (c) 2000-2005 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."
 *
 */

/** 
 *
 * Reliable Message Injector for the Drip protocol.
 * 
 * @author Gilman Tolle <get@cs.berkeley.edu>
 */

package net.tinyos.drip;

import net.tinyos.message.*;
import net.tinyos.util.*;

import org.apache.log4j.*;

import java.io.*; 
import java.text.*;
import java.util.*;

public class Drip implements MessageListener {

  public static int SEND_COUNT = 12;
  public static int SEND_RATE = DripConsts.DRIP_TIMER_PERIOD;

  public static int WAKEUP_SEND_COUNT = 25;
  public static int WAKEUP_SEND_RATE = 40;

  private Logger log = Logger.getLogger(Drip.class.getName());

  private static final int IDLE = 0;
  private static final int PROBING = 1;
  private static final int SENDING_SEQNO = 2;
  private static final int SENT_SEQNO = 3;
  private static final int SENDING_NEW = 4;

  private int state = IDLE;

  int id;
  int seqno;
  int sendCount = 0;
  int maxSendCount;

  Timer trickle;
  TimerTask trickleTask;

  MoteIF moteIF;
  DripMsg dripMsg;
  boolean hasMessage = false;
  boolean sentOK = true;

  boolean wakeupMsg = false;

  public Drip(int id) {

    log.info("Started id=" + id);
    try {
      moteIF = new MoteIF();
      moteIF.registerListener(new DripMsg(), this);
    } catch (Exception e) {
      System.out.println("ERROR: Couldn't contact serial forwarder.");
      System.exit(1);
    }

    this.id = id;
  }

  public Drip(int id, MoteIF p_moteIF) {

    log.info("Started with own moteIF id=" + id);

    try {
      moteIF = p_moteIF;
      moteIF.registerListener(new DripMsg(), this);
    } catch (Exception e) {
      System.out.println("ERROR: Couldn't contact serial forwarder.");
      System.exit(1);
    }

    this.id = id;
  }

  void setupDrip(Message msg, int msgSize) {
    trickle = new Timer();
    trickleTask = new DripSender();
    dripMsg = new DripMsg(DripMsg.DEFAULT_MESSAGE_SIZE + msgSize);
    dripMsg.dataSet(msg.dataGet(), 0, dripMsg.offset_data(0),
		    msgSize);
    sendCount = 0;
  }

  Message buildAddrMsg(int dest, Message msg, int msgSize) {
    AddressMsg addrMsg = new AddressMsg(AddressMsg.DEFAULT_MESSAGE_SIZE + msgSize);
    String moteid = Env.getenv("MOTEID");
    int source = 0xFFFF;
    
    if (moteid != null) {
      source = Integer.parseInt(moteid);
    }

    addrMsg.dataSet(msg.dataGet(), 0, addrMsg.offset_data(0), msgSize);
    
    addrMsg.set_dest(dest);
    addrMsg.set_source(source);

    return addrMsg;
  }

  public synchronized void send(Message msg, int msgSize) {
    setupDrip(msg, msgSize);

    state = PROBING;
    wakeupMsg = false;
    sendCount = 0;
    maxSendCount = SEND_COUNT;
    trickle.schedule(trickleTask, 0, 500);
    try {
      wait();
    } catch (InterruptedException e) {
      // return
    }
  }

  public synchronized void sendAddressed(int dest, Message msg, int msgSize) {

    AddressMsg addrMsg = (AddressMsg) buildAddrMsg(dest, msg, msgSize);
    send(addrMsg, msgSize + AddressMsg.DEFAULT_MESSAGE_SIZE);
  }

  public synchronized void sendUnreliable(Message msg, int msgSize) {
    setupDrip(msg, msgSize);

    state = SENDING_NEW;
    wakeupMsg = false;
    sendCount = 0;
    maxSendCount = 1;
    trickle.schedule(trickleTask, 0, SEND_RATE);
    try {
      wait();
    } catch (InterruptedException e) {
      // return
    }
  }

  public synchronized void sendAddressedUnreliable(int dest, Message msg, 
						   int msgSize) {
    AddressMsg addrMsg = (AddressMsg) buildAddrMsg(dest, msg, msgSize);
    sendUnreliable(addrMsg, msgSize + AddressMsg.DEFAULT_MESSAGE_SIZE);
  }

  public synchronized void sendWakeup(Message msg, int msgSize) {
    setupDrip(msg, msgSize);

    state = SENDING_NEW;
    wakeupMsg = true;
    sendCount = 0;
    maxSendCount = WAKEUP_SEND_COUNT;
    trickle.schedule(trickleTask, 0, WAKEUP_SEND_RATE);
    try {
      wait();
    } catch (InterruptedException e) {
      // return
    }
  }
    
  private synchronized void sendDone() {
    notifyAll();
    state = IDLE;
  }
    
  class DripSender extends TimerTask {
    
    public void run() {

      boolean stopSending = false;

      log.debug("DripSender.run(state=" + state + " sendCount= " + sendCount + ")");

      dripMsg.set_metadata_id((short)id);
      
      switch (state) {
      case PROBING:
	if (sendCount < maxSendCount) {
	  log.debug("probing");
	  dripMsg.set_metadata_seqno((byte)DripConsts.DRIP_SEQNO_OLDEST);
	} else {
	  log.debug("probing finished");
	  stopSending = true;
	}
	break;
      case SENDING_SEQNO:
	if (sendCount < maxSendCount) {
	  log.debug("sending new seqno "+seqno);
	  dripMsg.set_metadata_seqno((byte)seqno);
	} else {
	  log.debug("sending finished");
	  stopSending = true;
	}
	break;
      case SENDING_NEW:
	if (sendCount < maxSendCount) {
	  log.debug("sending unreliably");
	  dripMsg.set_metadata_seqno((byte)DripConsts.DRIP_SEQNO_NEWEST);
	} else {
	  log.debug("sending unreliably finished");
	  stopSending = true;
	}
	break;
      case SENT_SEQNO:
	log.debug("done sending");
	stopSending = true;
	return;
      default:
      }
      
      if (wakeupMsg == true) {
	dripMsg.set_metadata_seqno((short)((dripMsg.get_metadata_seqno()+1) % 256));
      }

      if (stopSending) {
	trickle.cancel();
	trickleTask.cancel();
	sendDone();
      } else {
	log.info("Sending Msg " + sendCount + ": id=" + id + ",seqno=" + dripMsg.get_metadata_seqno());
	send(dripMsg);
	sendCount++;
      }
    }
  }

  private void send(Message m) {
    try {
      moteIF.send(MoteIF.TOS_BCAST_ADDR, m);
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("ERROR: Can't send message");
      System.exit(1);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void messageReceived(int to, Message m) {
	
    DripMsg msg = (DripMsg)m;
	
    int newId = msg.get_metadata_id();
    int newSeqno = msg.get_metadata_seqno();

    log.debug("Received Msg: id=" + newId + ",seqno=" + newSeqno);
	
    if (newId != id) {
      log.debug("dropped, not ID " + id);
      return;
    }

    if ((newSeqno & ~DripConsts.DRIP_WAKEUP_BIT) == DripConsts.DRIP_SEQNO_NEWEST) {
      log.debug("dropped, a special seqno " + newSeqno);
      return;
    }

    switch (state) {
    case PROBING:
      seqno = newSeqno;
      log.info("Receive: id=" + id + ",seqno=" + dripMsg.get_metadata_seqno() + " Heard Old Seqno");
      incrementSeqno();
      state = SENDING_SEQNO;
    case SENDING_SEQNO:
      if (seqno == newSeqno) {
	log.info("Receive: id=" + id + ",seqno=" + dripMsg.get_metadata_seqno() + " Heard New Seqno");
	trickle.cancel();
	trickleTask.cancel();
	sendDone();
      }
    default:
    }
  }
    
  private void incrementSeqno() {
    if (wakeupMsg && ((seqno & DripConsts.DRIP_WAKEUP_BIT) == 0)) {
      seqno = (seqno + 1) % 256;      
    }

    if (!wakeupMsg && ((seqno & DripConsts.DRIP_WAKEUP_BIT) == 1)) {
      seqno = (seqno + 1) % 256;
    }

    seqno = (seqno + 1) % 256;
    seqno = (seqno + 1) % 256;

    while ((seqno & ~DripConsts.DRIP_WAKEUP_BIT) == DripConsts.DRIP_SEQNO_OLDEST ||
	   (seqno & ~DripConsts.DRIP_WAKEUP_BIT) == DripConsts.DRIP_SEQNO_NEWEST ||
	   (seqno & ~DripConsts.DRIP_WAKEUP_BIT) == DripConsts.DRIP_SEQNO_UNKNOWN) {

      seqno = (seqno + 1) % 256;
      seqno = (seqno + 1) % 256;
    }
  }

  private static int data = 1000;
  private static int channel = 254;
  private static boolean wakeup = false;

  public static void main(String[] args) {

    parseArgs(args);

    Drip drip = new Drip(channel);
    TestDripMsg msg = new TestDripMsg();
    msg.set_data((short)data);
    
    if (wakeup) {
      drip.sendWakeup(msg, TestDripMsg.DEFAULT_MESSAGE_SIZE);
    } else {
      drip.send(msg, TestDripMsg.DEFAULT_MESSAGE_SIZE);
    }
    System.exit(0);
  }

  private static void parseArgs(String args[]) {

    ArrayList cleanedArgs = new ArrayList();

    for(int i = 0; i < args.length; i++) {
      if (args[i].startsWith("--")) {

        // Parse Long Options
        String longopt = args[i].substring(2);
	
	if (longopt.equals("help")) {
	  usage();
	}

      } else if (args[i].startsWith("-")) {

        // Parse Short Options
	String opt = args[i].substring(1);

	if (opt.equals("d")) {
	  data = Integer.parseInt(args[++i]);
	} else if (opt.equals("w")) {
	  wakeup = true;
	} else if (opt.equals("c")) {
	  channel = Integer.parseInt(args[++i]);
	} else if (opt.equals("h")) {
	  usage();
	}
	
      } else {

        // Place into args string
        cleanedArgs.add(args[i]);
      }
    }
  }

  private static void usage() {
    System.err.println("usage: java net.tinyos.drain.Drip <opts>");
    System.err.println("  -d <data value>");
    System.err.println("  -c <channel id>");
    System.err.println("  -w : send message with wakeup bit set");
    System.err.println("  -h, --help : this information");
    System.exit(1);
  }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子轮精品视频| 国产精品国产自产拍在线| 亚洲一区二区三区四区中文字幕| 成人一区二区三区视频| 国产喂奶挤奶一区二区三区| 国产激情91久久精品导航 | 成人久久18免费网站麻豆 | 亚洲视频免费在线观看| a4yy欧美一区二区三区| 亚洲三级免费电影| 91国产免费看| 日韩黄色免费网站| 欧美精品一区二区久久久| 国产一区二区三区香蕉| 国产精品久久精品日日| 在线精品国精品国产尤物884a| 婷婷丁香久久五月婷婷| 精品国产自在久精品国产| 成人综合婷婷国产精品久久| 亚洲特黄一级片| 国产精品青草久久| 成人黄色一级视频| 亚洲一二三区不卡| 欧美精品一区二区三区高清aⅴ| 国产99久久久久| 一区二区三区 在线观看视频| 日韩一区二区中文字幕| 国产成人av一区| 亚洲国产日产av| 久久精品一区二区三区不卡| 91免费版在线看| 美国三级日本三级久久99| 国产欧美日韩另类一区| 欧美视频一区在线观看| 国产一区二区在线免费观看| 亚洲精品成人在线| 精品欧美一区二区久久| 91一区二区在线观看| 另类中文字幕网| 亚洲另类在线视频| 久久综合色之久久综合| 欧美在线视频你懂得| 国产精品影视网| 日韩精品久久久久久| 亚洲天堂a在线| 久久精品视频免费| 欧美二区乱c少妇| 91网站最新地址| 国产精品一区二区黑丝| 日本特黄久久久高潮| 亚洲欧美日韩国产中文在线| 精品粉嫩超白一线天av| 在线成人免费视频| 日本精品一区二区三区高清| 国产一区二区不卡| 色哟哟在线观看一区二区三区| 日韩成人精品在线| 夜夜嗨av一区二区三区四季av| 国产欧美日韩精品一区| 日韩一区二区电影在线| 欧美日韩一级片在线观看| av在线这里只有精品| 国产剧情在线观看一区二区| 婷婷综合另类小说色区| 亚洲在线观看免费| 亚洲日本中文字幕区| 国产精品看片你懂得| 国产色一区二区| 欧美成人性福生活免费看| 91精品国产欧美日韩| 欧美三级电影在线看| 色94色欧美sute亚洲线路一久| 成人丝袜高跟foot| 国产成人免费视频网站高清观看视频| 美女视频黄免费的久久| 秋霞电影网一区二区| 日本亚洲电影天堂| 青青草原综合久久大伊人精品| 午夜精品久久久久| 亚洲成av人在线观看| 午夜精品久久久久久久99水蜜桃| 亚洲一区二区三区中文字幕在线| 亚洲欧美国产三级| 一区二区三区日韩精品| 又紧又大又爽精品一区二区| 一区二区三区精品久久久| 亚洲综合男人的天堂| 亚洲一区二区三区精品在线| 亚洲成人免费视频| 午夜免费久久看| 日韩精品一级中文字幕精品视频免费观看 | 视频在线观看一区二区三区| 亚洲成av人在线观看| 蜜臀久久99精品久久久久久9| 美腿丝袜一区二区三区| 国产精品正在播放| 99久久婷婷国产精品综合| 91老师片黄在线观看| 欧美日韩在线播放三区四区| 制服丝袜在线91| 久久久久国产成人精品亚洲午夜| 国产午夜久久久久| 亚洲免费电影在线| 日韩av不卡在线观看| 国产精品一区二区在线播放 | 69精品人人人人| 日韩精品一区二区三区在线观看 | 国产精品―色哟哟| 亚洲视频你懂的| 视频一区视频二区中文字幕| 久久 天天综合| 丁香啪啪综合成人亚洲小说 | 久久先锋影音av鲁色资源| 欧美国产成人在线| 亚洲午夜影视影院在线观看| 蜜桃视频第一区免费观看| 成人在线视频首页| 精品视频免费看| 久久久亚洲精品一区二区三区| 国产精品久99| 蜜乳av一区二区三区| 99在线热播精品免费| 欧美熟乱第一页| 国产婷婷色一区二区三区| 亚洲午夜国产一区99re久久| 美日韩一区二区| 色88888久久久久久影院野外| 日韩欧美国产综合| 亚洲欧美一区二区三区久本道91 | 日韩一区二区高清| 亚洲少妇中出一区| 久久国产精品第一页| 色香蕉成人二区免费| 2024国产精品视频| 天堂资源在线中文精品| 成人精品高清在线| 精品精品欲导航| 亚洲国产精品久久艾草纯爱 | 国产欧美精品区一区二区三区| 亚洲一区二区在线免费观看视频| 国产乱子轮精品视频| 8x福利精品第一导航| 自拍视频在线观看一区二区| 加勒比av一区二区| 欧美日韩国产高清一区| 最新国产精品久久精品| 国产一区二区看久久| 欧美一级电影网站| 亚洲第一搞黄网站| 一本大道久久a久久精品综合| 久久亚区不卡日本| 久久99九九99精品| 日韩一区二区在线观看视频| 亚洲综合区在线| 色综合av在线| 1000精品久久久久久久久| 国产成人午夜电影网| 亚洲精品在线三区| 麻豆91小视频| 日韩一区二区精品葵司在线| 天堂一区二区在线免费观看| 日本一区免费视频| 久久激五月天综合精品| 7777精品伊人久久久大香线蕉最新版| 亚洲精品欧美二区三区中文字幕| 豆国产96在线|亚洲| 欧美精彩视频一区二区三区| 国产综合一区二区| 久久蜜桃一区二区| 国产美女av一区二区三区| 精品国产不卡一区二区三区| 日韩av一区二区三区四区| 欧美精品xxxxbbbb| 日韩av在线播放中文字幕| 欧美妇女性影城| 麻豆免费看一区二区三区| 日韩一区二区在线观看| 国产在线不卡视频| 国产网站一区二区| 99久久综合精品| 亚洲精品免费播放| 欧美日韩国产系列| 麻豆精品国产传媒mv男同| 日韩欧美的一区| 国产剧情在线观看一区二区| 国产欧美日韩久久| 色哟哟一区二区在线观看| 亚洲 欧美综合在线网络| 69精品人人人人| 国产一区二区电影| 国产精品不卡一区二区三区| 91在线播放网址| 天天综合天天综合色| 精品噜噜噜噜久久久久久久久试看| 狠狠色丁香婷综合久久| 国产精品色在线| 欧美群妇大交群中文字幕| 老司机午夜精品| 国产精品九色蝌蚪自拍| 欧美人与禽zozo性伦|