📄 esbnode.java
字号:
/** * Copyright (c) 2007, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * This file is part of MSPSim. * * $Id: ESBNode.java 213 2008-03-25 13:12:20Z nifi $ * * ----------------------------------------------------------------- * * ESBNode * * Author : Joakim Eriksson * Created : Sun Oct 21 22:00:00 2007 * Updated : $Date: 2008-03-25 14:12:20 +0100 (Tue, 25 Mar 2008) $ * $Revision: 213 $ */package se.sics.mspsim.platform.esb;import java.io.IOException;import se.sics.mspsim.chip.TR1001;import se.sics.mspsim.core.IOPort;import se.sics.mspsim.core.IOUnit;import se.sics.mspsim.core.MSP430;import se.sics.mspsim.core.PortListener;import se.sics.mspsim.core.USART;import se.sics.mspsim.extutil.jfreechart.DataChart;import se.sics.mspsim.extutil.jfreechart.DataSourceSampler;import se.sics.mspsim.platform.GenericNode;import se.sics.mspsim.util.ArgumentManager;public class ESBNode extends GenericNode implements PortListener { public static final boolean DEBUG = false; public static final int PIR_PIN = 3; public static final int VIB_PIN = 4; // Port 2. public static final int BUTTON_PIN = 7; private IOPort port1; private IOPort port2; private IOPort port5; public static final int RED_LED = 0x01; public static final int GREEN_LED = 0x02; public static final int YELLOW_LED = 0x04; public static final int BEEPER = 0x08; public boolean redLed; public boolean greenLed; public boolean yellowLed; private TR1001 radio; public ESBGui gui; /** * Creates a new <code>ESBNode</code> instance. * */ public ESBNode() { } public void setPIR(boolean hi) { port1.setPinState(PIR_PIN, hi ? IOPort.PIN_HI : IOPort.PIN_LOW); } public void setVIB(boolean hi) { port1.setPinState(VIB_PIN, hi ? IOPort.PIN_HI : IOPort.PIN_LOW); } public void setButton(boolean hi) { port2.setPinState(BUTTON_PIN, hi ? IOPort.PIN_HI : IOPort.PIN_LOW); } public boolean getDebug() { return cpu.getDebug(); } public void setDebug(boolean debug) { cpu.setDebug(debug); } public MSP430 getCPU() { return cpu; } public void portWrite(IOPort source, int data) { // System.out.println("ESB: Writing to port: " + data); if (source == port2) {// System.out.println("ESBNode.PORT2: 0x" + Integer.toString(data,16)); redLed = (data & RED_LED) == 0; if (DEBUG && greenLed != ((data & GREEN_LED) == 0)) { System.out.println("Green toggled!"); } greenLed = (data & GREEN_LED) == 0; if (DEBUG && yellowLed != ((data & YELLOW_LED) == 0)) { System.out.println("Yellow toggled!"); } yellowLed = (data & YELLOW_LED) == 0; if (gui != null) { gui.repaint(); gui.beeper.beepOn((data & BEEPER) != 0); } } else if (source == port5) { if ((data & 0xc0) == 0xc0) { radio.setMode(TR1001.MODE_RX_ON); } else if ((data & 0xc0) == 0x40) { radio.setMode(TR1001.MODE_TXRX_ON); } else { radio.setMode(TR1001.MODE_TXRX_OFF); } } } public void setupNodePorts() { IOUnit unit = cpu.getIOUnit("Port 2"); if (unit instanceof IOPort) { port2 = (IOPort) unit; port2.setPortListener(this); } unit = cpu.getIOUnit("Port 1"); if (unit instanceof IOPort) { port1 = (IOPort) unit; } unit = cpu.getIOUnit("Port 5"); if (unit instanceof IOPort) { port5 = (IOPort) unit; port5.setPortListener(this); } IOUnit usart0 = cpu.getIOUnit("USART 0"); if (usart0 instanceof USART) { radio = new TR1001((USART)usart0); ((USART) usart0).setUSARTListener(radio); } } public void setupNode() { setupNodePorts(); stats.addMonitor(this); stats.addMonitor(radio); stats.addMonitor(cpu); if (!config.getPropertyAsBoolean("nogui", false)) { gui = new ESBGui(this); // A HACK for some "graphs"!!! DataChart dataChart = new DataChart("Duty Cycle", "Duty Cycle"); DataSourceSampler dss = dataChart.setupChipFrame(cpu); dataChart.addDataSource(dss, "Listen", stats.getDataSource("TR1001", TR1001.MODE_RX_ON)); dataChart.addDataSource(dss, "Transmit", stats.getDataSource("TR1001", TR1001.MODE_TXRX_ON)); dataChart.addDataSource(dss, "CPU", stats.getDataSource("MSP430 Core", MSP430.MODE_ACTIVE)); } } public int getModeMax() { return 0; } public String getName() { return "ESB Node"; } public static void main(String[] args) throws IOException { ESBNode node = new ESBNode(); ArgumentManager config = new ArgumentManager(); config.handleArguments(args); node.setup(config); node.start(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -