⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taskcommand.java

📁 nesC写的heed算法
💻 JAVA
字号:
// $Id: TASKCommand.java,v 1.1.2.3 2003/09/26 01:10:02 smadden 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. */package net.tinyos.task.taskapi;import java.util.*;import java.io.*;import net.tinyos.tinydb.CommandMsg;import net.tinyos.tinydb.CommandMsgs;import net.tinyos.message.*;/** * Class encapsulating a TASK command call. */public class TASKCommand implements Serializable{	public static final short BROADCAST_ID = (short)-1;	/**	 * Constructor for TASKCommand.	 *	 * @param	name	name of command.	 * @param	arguments	Vector of Object for argument values.	 * @param	moteId	a specific mote where the command is to be executed on	 * 					or BROADCAST_ID for all motes.	 */	public TASKCommand(String name, Vector arguments, short moteId)	{		commandName = name;		commandArguments = arguments;		targetMoteId = moteId;	};	/**	 * Returns the command name	 */	public String getCommandName() {  return commandName; };	/**	 * Returns argument values	 *	 * @return	Vector of Object's for argument values	 */	public Vector getCommandArguments() { return commandArguments; };	/**	 * Returns target mote id, BROADCAST_ID if it's for all motes	 */	public short getTargetMoteId() {  return targetMoteId; };	public Message getTinyOSMessage(TASKCommandInfo commandInfo)	{		int msgSize = commandMsgSize(commandInfo);		System.out.println("msgSize = " + msgSize + " name = " + commandName + " size = " + commandName.length());		CommandMsg cmdMessage = new CommandMsg(msgSize);		int i;		int pos = 0;		int[] argTypes = commandInfo.getArgTypes();		if (argTypes.length != commandArguments.size())		    return null; //invalid		cmdMessage.set_nodeid(targetMoteId);		//cmdMessage.set_fromBase((byte)1);		cmdMessage.set_seqNo(CommandMsgs.getNextSeqNo());		for (i = 0; i < commandName.length(); i++)			cmdMessage.setElement_data(pos++, (byte)commandName.charAt(i));		cmdMessage.setElement_data(pos++, (byte)0);		for (i = 0; i < argTypes.length; i++) {			pos = setArgValue(cmdMessage, argTypes[i], pos, commandArguments.elementAt(i));		}		return cmdMessage;	};	private int commandMsgSize(TASKCommandInfo commandInfo)	{		int[] argTypes = commandInfo.getArgTypes();		int size = CommandMsg.offset_data(0) + commandName.length() + 1;		for (int i = 0; i < argTypes.length; i++)			if (argTypes[i] == TASKTypes.STRING)				size += ((String)commandArguments.elementAt(i)).length() + 1;			else				size += TASKTypes.typeLen(argTypes[i]);		return size;	}	private int setArgValue(CommandMsg cmdMessage, int pos, int argType, Object argVal)	{		switch (argType)		{			case TASKTypes.INT8:			case TASKTypes.UINT8:			case TASKTypes.BOOL:				cmdMessage.setElement_data(pos++, ((Byte)argVal).byteValue());				break;			case TASKTypes.INT16:			case TASKTypes.UINT16:				{					short val = ((Short)argVal).shortValue();					cmdMessage.setElement_data(pos++, (byte)(val & 0xFF));					cmdMessage.setElement_data(pos++, (byte)((val & 0xFF00) >> 8));					break;				}			case TASKTypes.INT32:			case TASKTypes.TIMESTAMP32:				{					int val = ((Integer)argVal).intValue();					cmdMessage.setElement_data(pos++, (byte)(val & 0xFF));					cmdMessage.setElement_data(pos++, (byte)((val & 0xFF00) >> 8));					cmdMessage.setElement_data(pos++, (byte)((val & 0xFF0000) >> 16));					cmdMessage.setElement_data(pos++, (byte)((val & 0xFF000000) >> 24));					break;				}			case TASKTypes.TIMESTAMP64:				{					// XXX to be supported later					return -1;				}			case TASKTypes.STRING:				{					String val = (String)argVal;					for (int i = 0; i < val.length(); i++)						cmdMessage.setElement_data(pos++, (byte)val.charAt(i));					cmdMessage.setElement_data(pos++, (byte)0);					break;				}			case TASKTypes.BYTES:				{					byte[] val = (byte[])argVal;					for (int i = 0; i < val.length; i++)						cmdMessage.setElement_data(pos++, (byte)val[i]);					cmdMessage.setElement_data(pos++, (byte)0);					break;				}		}		return pos;	}	public String toString(TASKCommandInfo commandInfo)	{		String str = commandName + "(";		boolean notFirst = false;		for (Iterator it = commandArguments.iterator(); it.hasNext(); )		{			if (notFirst)				str += ",";			str += it.next();			notFirst = true;		}		str += ")";		return str;	}	private String	commandName;		// command name	private Vector	commandArguments;	// Vector of Object's for argument values	private short	targetMoteId;		// target mote id};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -