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

📄 calamariplugin.java

📁 传感器网络中的嵌入式操作系统源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// $Id: CalamariPlugin.java,v 1.2.4.1 2003/08/18 22:09:44 cssharp Exp $/* This plugin sets the rssi value of each mote based on their * locations in the mote window. Motes can read their rssi values from the * ADC, using ADC Channel PORT_RSSI (Defined below). */package net.tinyos.sim.plugins;import java.lang.*;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import net.tinyos.message.*;import net.tinyos.sim.*;import net.tinyos.sim.event.*;import net.tinyos.matlab.*;public class CalamariPlugin extends Plugin implements SimConst {    public static final byte X_POS_ADC_CHANNEL = (byte) 112;    public static final byte Y_POS_ADC_CHANNEL = (byte)113;    public static final byte X_STDV_ADC_CHANNEL = (byte)114;    public static final byte Y_STDV_ADC_CHANNEL = (byte)115;    public static final byte TXR_COEFF_O_ADC_CHANNEL = (byte)116;    public static final byte TXR_COEFF_1_ADC_CHANNEL = (byte)117;    public static final byte RXR_COEFF_O_ADC_CHANNEL = (byte)118;    public static final byte RXR_COEFF_1_ADC_CHANNEL = (byte)119;    public static final byte PORT_RSSI = (byte) 131;    public static final byte PORT_RSSI_STDV = (byte) 132;    /* Mapping from coordinate axis to location ADC value */    private Hashtable locationEstimates = new Hashtable();    private JTextField xscalingFactorTextField;    private JTextField yscalingFactorTextField;    private JTextField maxRangeTextField;    private JTextField maxErrorTextField;    public double NOISE_LEVEL= 30;//30 cm error in ranging    public double MAX_RANGE= 300;//3 meters ranging distance    public double X_SCALE = 2000;//20 meters    public double Y_SCALE = 2000;//20 meters    public void handleEvent(SimEvent event) {        if (event instanceof AttributeEvent) {            AttributeEvent ae = (AttributeEvent) event;            if (ae.getType() == AttributeEvent.ATTRIBUTE_CHANGED) {                if (ae.getOwner() instanceof MoteSimObject &&                        ae.getAttribute() instanceof MoteCoordinateAttribute) {                    tv.getMotePanel().refresh();                }            }        } else if (event instanceof TossimInitEvent) {            locationEstimates.clear();        } else if (event instanceof DebugMsgEvent) {            DebugMsgEvent dme = (DebugMsgEvent) event;            if (dme.getMessage().indexOf("LOCALIZATION:") != -1) {                int nodeID = dme.getMoteID();                MoteSimObject mote = state.getMoteSimObject(nodeID);                if (mote == null) return;                LocationEstimate loc;         //       System.out.println("got a localization msg");                if (locationEstimates.containsKey(new Integer(nodeID)))                    loc = (LocationEstimate) locationEstimates.get(new Integer(nodeID));                else {                    loc = new LocationEstimate();                    loc.nodeID = nodeID;                }                //dbg("Localization: is anchor")                if (dme.getMessage().indexOf("is anchor") != -1) {                    loc.isAnchor = true;                    locationEstimates.put(new Integer(nodeID), loc);     //               tv.setStatus("Observed " + mote.getID() + " is anchor");                    return;                }                //dbg("Localization: is not anchor")                if (dme.getMessage().indexOf("is not anchor") != -1) {                    loc.isAnchor = false;                    locationEstimates.put(new Integer(nodeID), loc);  //                  tv.setStatus("Observed " + mote.getID() + " is not anchor");                    return;                }                //dbg("Localization: x= X xStdv= XStdv y= Y y= YStdv")                try {                    StringTokenizer st = new StringTokenizer(dme.getMessage());                    st.nextToken();                    st.nextToken();                    loc.x = (int)(Integer.parseInt(st.nextToken())/X_SCALE *cT.getMoteScaleWidth());                    st.nextToken();                    loc.xStdv = (int)(Integer.parseInt(st.nextToken())/X_SCALE *cT.getMoteScaleWidth());                    st.nextToken();                    loc.y = (int)(Integer.parseInt(st.nextToken())/Y_SCALE *cT.getMoteScaleHeight());                    st.nextToken();                    loc.yStdv = (int)(Integer.parseInt(st.nextToken())/Y_SCALE *cT.getMoteScaleHeight());                    locationEstimates.put(new Integer(nodeID), loc);                    tv.getMotePanel().refresh();   //                 tv.setStatus("Observed location estimate of mote " + mote.getID() + " to (" + loc.x + "," + loc.y + ")");                } catch (Exception e) {                    tv.setStatus("Error parsing location estimate of mote " + mote.getID());                }            }            else if (dme.getMessage().indexOf("ADC ATTR:") != -1) {                    int nodeID = dme.getMoteID();                    int channel;                    try {                        StringTokenizer st = new StringTokenizer(dme.getMessage());                        st.nextToken();st.nextToken();st.nextToken();st.nextToken();st.nextToken(); //"ADC ATTR: reading from channel XX"                        channel = Integer.parseInt(st.nextToken());                    } catch (Exception e) {                        tv.setStatus("Attr: parse error:   "+e.toString());                        return;                    }                    MoteSimObject mote = state.getMoteSimObject(nodeID);                    if (mote == null) {tv.setStatus(" No such mote");return;}                    Integer value = null;                    switch ((byte)channel) {                        case X_POS_ADC_CHANNEL:                            {                                MoteCoordinateAttribute coord = mote.getCoordinate();                                int x = (int)(((coord.getX() * X_SCALE) / cT.getMoteScaleWidth()));                                value = new Integer(x);                                break;                            }                        case Y_POS_ADC_CHANNEL:                            {                                MoteCoordinateAttribute coord = mote.getCoordinate();                                int y = (int)(((coord.getY() * Y_SCALE) / cT.getMoteScaleHeight()));                                value = new Integer(y);                                break;                            }                        case X_STDV_ADC_CHANNEL:                            {                                value = new Integer(0);                                break;                            }                        case Y_STDV_ADC_CHANNEL:                            {                                value = new Integer(0);                                break;                            }                        case TXR_COEFF_O_ADC_CHANNEL:                            {                                value = new Integer(0);                                break;                            }                        case TXR_COEFF_1_ADC_CHANNEL:                            {                                value = new Integer(0);                                break;                            }                        case RXR_COEFF_O_ADC_CHANNEL:                            {                                value = new Integer(0);                                break;                            }                        case RXR_COEFF_1_ADC_CHANNEL:                            {                                value = new Integer(1);                                break;                            }                        default:                            {                                tv.setStatus("Unknown ADC port read from:" + Integer.toString(channel));/*                      try {                        MatlabControl matlab = new MatlabControl(true);                            Object args[] = new Object[2];                            args[0] = new Integer(nodeID);                            args[1] = new Integer(channel);                            value = (Integer) matlab.blockingFeval("getADCValue", args);

⌨️ 快捷键说明

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